diff --git a/app/assets/javascripts/publications/locale/ach/viewer.properties b/app/assets/javascripts/publications/locale/ach/viewer.properties
new file mode 100644
index 0000000..3a74d76
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ach/viewer.properties
@@ -0,0 +1,199 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pot buk mukato
+previous_label=Mukato
+next.title=Pot buk malubo
+next_label=Malubo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pot buk
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=pi {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} me {{pagesCount}})
+
+zoom_out.title=Jwik Matidi
+zoom_out_label=Jwik Matidi
+zoom_in.title=Kwot Madit
+zoom_in_label=Kwot Madit
+zoom.title=Kwoti
+presentation_mode.title=Lokke i kit me tyer
+presentation_mode_label=Kit me tyer
+open_file.title=Yab Pwail
+open_file_label=Yab
+print.title=Go
+print_label=Go
+download.title=Gam
+download_label=Gam
+bookmark.title=Neno ma kombedi (lok onyo yab i dirica manyen)
+bookmark_label=Neno ma kombedi
+
+# Secondary toolbar and context menu
+tools.title=Gintic
+tools_label=Gintic
+first_page.title=Cit i pot buk mukwongo
+first_page_label=Cit i pot buk mukwongo
+last_page.title=Cit i pot buk magiko
+last_page_label=Cit i pot buk magiko
+page_rotate_cw.title=Wire i tung lacuc
+page_rotate_cw_label=Wire i tung lacuc
+page_rotate_ccw.title=Wire i tung lacam
+page_rotate_ccw_label=Wire i tung lacam
+
+cursor_text_select_tool.title=Cak gitic me yero coc
+cursor_text_select_tool_label=Gitic me yero coc
+cursor_hand_tool.title=Cak gitic me cing
+cursor_hand_tool_label=Gitic cing
+
+
+
+# Document properties dialog box
+document_properties.title=Jami me gin acoya…
+document_properties_label=Jami me gin acoya…
+document_properties_file_name=Nying pwail:
+document_properties_file_size=Dit pa pwail:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Wiye:
+document_properties_author=Ngat mucoyo:
+document_properties_subject=Subjek:
+document_properties_keywords=Lok mapire tek:
+document_properties_creation_date=Nino dwe me cwec:
+document_properties_modification_date=Nino dwe me yub:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Lacwec:
+document_properties_producer=Layub PDF:
+document_properties_version=Kit PDF:
+document_properties_page_count=Kwan me pot buk:
+document_properties_page_size=Dit pa potbuk:
+document_properties_page_size_unit_inches=i
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=atir
+document_properties_page_size_orientation_landscape=arii
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Waraga
+document_properties_page_size_name_legal=Cik
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Eyo
+document_properties_linearized_no=Pe
+document_properties_close=Lor
+
+print_progress_message=Yubo coc me agoya…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Juki
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Lok gintic ma inget
+toggle_sidebar_label=Lok gintic ma inget
+document_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng)
+document_outline_label=Pek pa gin acoya
+attachments.title=Nyut twec
+attachments_label=Twec
+thumbs.title=Nyut cal
+thumbs_label=Cal
+findbar.title=Nong iye gin acoya
+findbar_label=Nong
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pot buk {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Cal me pot buk {{page}}
+
+# Find panel button title and messages
+find_input.title=Nong
+find_input.placeholder=Nong i dokumen…
+find_previous.title=Nong timme pa lok mukato
+find_previous_label=Mukato
+find_next.title=Nong timme pa lok malubo
+find_next_label=Malubo
+find_highlight=Wer weng
+find_match_case_label=Lok marwate
+find_reached_top=Oo iwi gin acoya, omede ki i tere
+find_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye
+find_not_found=Lok pe ononge
+
+# Error panel labels
+error_more_info=Ngec Mukene
+error_less_info=Ngec Manok
+error_close=Lor
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Kwena: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Can kikore {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Pwail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rek: {{line}}
+rendering_error=Bal otime i kare me nyuto pot buk.
+
+# Predefined zoom values
+page_scale_width=Lac me iye pot buk
+page_scale_fit=Porre me pot buk
+page_scale_auto=Kwot pire kene
+page_scale_actual=Dite kikome
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Bal otime kun cano PDF.
+invalid_file_error=Pwail me PDF ma pe atir onyo obale woko.
+missing_file_error=Pwail me PDF tye ka rem.
+unexpected_response_error=Lagam mape kigeno pa lapok tic.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Lok angea manok]
+password_label=Ket mung me donyo me yabo pwail me PDF man.
+password_invalid=Mung me donyo pe atir. Tim ber i tem doki.
+password_ok=OK
+password_cancel=Juki
+
+printing_not_supported=Ciko: Layeny ma pe teno goyo liweng.
+printing_not_ready=Ciko: PDF pe ocane weng me agoya.
+web_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine.
diff --git a/app/assets/javascripts/publications/locale/af/viewer.properties b/app/assets/javascripts/publications/locale/af/viewer.properties
new file mode 100644
index 0000000..9bd5476
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/af/viewer.properties
@@ -0,0 +1,176 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Vorige bladsy
+previous_label=Vorige
+next.title=Volgende bladsy
+next_label=Volgende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Bladsy
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=van {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} van {{pagesCount}})
+
+zoom_out.title=Zoem uit
+zoom_out_label=Zoem uit
+zoom_in.title=Zoem in
+zoom_in_label=Zoem in
+zoom.title=Zoem
+presentation_mode.title=Wissel na voorleggingsmodus
+presentation_mode_label=Voorleggingsmodus
+open_file.title=Open lêer
+open_file_label=Open
+print.title=Druk
+print_label=Druk
+download.title=Laai af
+download_label=Laai af
+bookmark.title=Huidige aansig (kopieer of open in nuwe venster)
+bookmark_label=Huidige aansig
+
+# Secondary toolbar and context menu
+tools.title=Nutsgoed
+tools_label=Nutsgoed
+first_page.title=Gaan na eerste bladsy
+first_page_label=Gaan na eerste bladsy
+last_page.title=Gaan na laaste bladsy
+last_page_label=Gaan na laaste bladsy
+page_rotate_cw.title=Roteer kloksgewys
+page_rotate_cw_label=Roteer kloksgewys
+page_rotate_ccw.title=Roteer anti-kloksgewys
+page_rotate_ccw_label=Roteer anti-kloksgewys
+
+cursor_text_select_tool.title=Aktiveer gereedskap om teks te merk
+cursor_text_select_tool_label=Teksmerkgereedskap
+cursor_hand_tool.title=Aktiveer handjie
+cursor_hand_tool_label=Handjie
+
+# Document properties dialog box
+document_properties.title=Dokumenteienskappe…
+document_properties_label=Dokumenteienskappe…
+document_properties_file_name=Lêernaam:
+document_properties_file_size=Lêergrootte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kG ({{size_b}} grepe)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MG ({{size_b}} grepe)
+document_properties_title=Titel:
+document_properties_author=Outeur:
+document_properties_subject=Onderwerp:
+document_properties_keywords=Sleutelwoorde:
+document_properties_creation_date=Skeppingsdatum:
+document_properties_modification_date=Wysigingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Skepper:
+document_properties_producer=PDF-vervaardiger:
+document_properties_version=PDF-weergawe:
+document_properties_page_count=Aantal bladsye:
+document_properties_close=Sluit
+
+print_progress_message=Berei tans dokument voor om te druk…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Kanselleer
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sypaneel aan/af
+toggle_sidebar_label=Sypaneel aan/af
+document_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou)
+document_outline_label=Dokumentoorsig
+attachments.title=Wys aanhegsels
+attachments_label=Aanhegsels
+thumbs.title=Wys duimnaels
+thumbs_label=Duimnaels
+findbar.title=Soek in dokument
+findbar_label=Vind
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Bladsy {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Duimnael van bladsy {{page}}
+
+# Find panel button title and messages
+find_input.title=Vind
+find_input.placeholder=Soek in dokument…
+find_previous.title=Vind die vorige voorkoms van die frase
+find_previous_label=Vorige
+find_next.title=Vind die volgende voorkoms van die frase
+find_next_label=Volgende
+find_highlight=Verlig almal
+find_match_case_label=Kassensitief
+find_reached_top=Bokant van dokument is bereik; gaan voort van onder af
+find_reached_bottom=Einde van dokument is bereik; gaan voort van bo af
+find_not_found=Frase nie gevind nie
+
+# Error panel labels
+error_more_info=Meer inligting
+error_less_info=Minder inligting
+error_close=Sluit
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ID: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Boodskap: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stapel: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Lêer: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lyn: {{line}}
+rendering_error='n Fout het voorgekom toe die bladsy weergegee is.
+
+# Predefined zoom values
+page_scale_width=Bladsywydte
+page_scale_fit=Pas bladsy
+page_scale_auto=Outomatiese zoem
+page_scale_actual=Werklike grootte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error='n Fout het voorgekom met die laai van die PDF.
+invalid_file_error=Ongeldige of korrupte PDF-lêer.
+missing_file_error=PDF-lêer is weg.
+unexpected_response_error=Onverwagse antwoord van bediener.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotasie]
+password_label=Gee die wagwoord om dié PDF-lêer mee te open.
+password_invalid=Ongeldige wagwoord. Probeer gerus weer.
+password_ok=OK
+password_cancel=Kanselleer
+
+printing_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie.
+printing_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie.
+web_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie.
diff --git a/app/assets/javascripts/publications/locale/an/viewer.properties b/app/assets/javascripts/publications/locale/an/viewer.properties
new file mode 100644
index 0000000..16028f3
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/an/viewer.properties
@@ -0,0 +1,242 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pachina anterior
+previous_label=Anterior
+next.title=Pachina siguient
+next_label=Siguient
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pachina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Achiquir
+zoom_out_label=Achiquir
+zoom_in.title=Agrandir
+zoom_in_label=Agrandir
+zoom.title=Grandaria
+presentation_mode.title=Cambear t'o modo de presentación
+presentation_mode_label=Modo de presentación
+open_file.title=Ubrir o fichero
+open_file_label=Ubrir
+print.title=Imprentar
+print_label=Imprentar
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar u ubrir en una nueva finestra)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramientas
+tools_label=Ferramientas
+first_page.title=Ir ta la primer pachina
+first_page_label=Ir ta la primer pachina
+last_page.title=Ir ta la zaguer pachina
+last_page_label=Ir ta la zaguer pachina
+page_rotate_cw.title=Chirar enta la dreita
+page_rotate_cw_label=Chira enta la dreita
+page_rotate_ccw.title=Chirar enta la zurda
+page_rotate_ccw_label=Chirar enta la zurda
+
+cursor_text_select_tool.title=Activar la ferramienta de selección de texto
+cursor_text_select_tool_label=Ferramienta de selección de texto
+cursor_hand_tool.title=Activar la ferramienta man
+cursor_hand_tool_label=Ferramienta man
+
+scroll_vertical.title=Usar lo desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar lo desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Activaar lo desplazamiento contino
+scroll_wrapped_label=Desplazamiento contino
+
+spread_none.title=No unir vistas de pachinas
+spread_none_label=Una pachina nomás
+spread_odd.title=Mostrar vista de pachinas, con as impars a la zurda
+spread_odd_label=Doble pachina, impar a la zurda
+spread_even.title=Amostrar vista de pachinas, con as pars a la zurda
+spread_even_label=Doble pachina, para a la zurda
+
+# Document properties dialog box
+document_properties.title=Propiedatz d'o documento...
+document_properties_label=Propiedatz d'o documento...
+document_properties_file_name=Nombre de fichero:
+document_properties_file_size=Grandaria d'o fichero:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titol:
+document_properties_author=Autor:
+document_properties_subject=Afer:
+document_properties_keywords=Parolas clau:
+document_properties_creation_date=Calendata de creyación:
+document_properties_modification_date=Calendata de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creyador:
+document_properties_producer=Creyador de PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Numero de pachinas:
+document_properties_page_size=Mida de pachina:
+document_properties_page_size_unit_inches=pulgadas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} x {{height}} {{unit}} {{orientation}}
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} x {{height}} {{unit}} {{name}}, {{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapida:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Zarrar
+
+print_progress_message=Se ye preparando la documentación pa imprentar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Amostrar u amagar a barra lateral
+toggle_sidebar_notification2.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas)
+toggle_sidebar_label=Amostrar a barra lateral
+document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items)
+document_outline_label=Esquema d'o documento
+attachments.title=Amostrar os adchuntos
+attachments_label=Adchuntos
+layers.title=Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto)
+layers_label=Capas
+thumbs.title=Amostrar as miniaturas
+thumbs_label=Miniaturas
+findbar.title=Trobar en o documento
+findbar_label=Trobar
+
+additional_layers=Capas adicionals
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pachina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura d'a pachina {{page}}
+
+# Find panel button title and messages
+find_input.title=Trobar
+find_input.placeholder=Trobar en o documento…
+find_previous.title=Trobar l'anterior coincidencia d'a frase
+find_previous_label=Anterior
+find_next.title=Trobar a siguient coincidencia d'a frase
+find_next_label=Siguient
+find_highlight=Resaltar-lo tot
+find_match_case_label=Coincidencia de mayusclas/minusclas
+find_entire_word_label=Parolas completas
+find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo
+find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mas de {{limit}} coincidencias
+find_match_count_limit[one]=Mas de {{limit}} coincidencias
+find_match_count_limit[two]=Mas que {{limit}} coincidencias
+find_match_count_limit[few]=Mas que {{limit}} coincidencias
+find_match_count_limit[many]=Mas que {{limit}} coincidencias
+find_match_count_limit[other]=Mas que {{limit}} coincidencias
+find_not_found=No s'ha trobau a frase
+
+# Error panel labels
+error_more_info=Mas información
+error_less_info=Menos información
+error_close=Zarrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensache: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichero: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linia: {{line}}
+rendering_error=Ha ocurriu una error en renderizar a pachina.
+
+# Predefined zoom values
+page_scale_width=Amplaria d'a pachina
+page_scale_fit=Achuste d'a pachina
+page_scale_auto=Grandaria automatica
+page_scale_actual=Grandaria actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=S'ha produciu una error en cargar o PDF.
+invalid_file_error=O PDF no ye valido u ye estorbau.
+missing_file_error=No i ha fichero PDF.
+unexpected_response_error=Respuesta a lo servicio inasperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduzca a clau ta ubrir iste fichero PDF.
+password_invalid=Clau invalida. Torna a intentar-lo.
+password_ok=Acceptar
+password_cancel=Cancelar
+
+printing_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions.
+printing_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo.
+web_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF.
diff --git a/app/assets/javascripts/publications/locale/ar/viewer.properties b/app/assets/javascripts/publications/locale/ar/viewer.properties
new file mode 100644
index 0000000..082816f
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ar/viewer.properties
@@ -0,0 +1,246 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=الصفحة السابقة
+previous_label=السابقة
+next.title=الصفحة التالية
+next_label=التالية
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=صفحة
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=من {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} من {{pagesCount}})
+
+zoom_out.title=بعّد
+zoom_out_label=بعّد
+zoom_in.title=قرّب
+zoom_in_label=قرّب
+zoom.title=التقريب
+presentation_mode.title=انتقل لوضع العرض التقديمي
+presentation_mode_label=وضع العرض التقديمي
+open_file.title=افتح ملفًا
+open_file_label=افتح
+print.title=اطبع
+print_label=اطبع
+download.title=نزّل
+download_label=نزّل
+bookmark.title=المنظور الحالي (انسخ أو افتح في نافذة جديدة)
+bookmark_label=المنظور الحالي
+
+# Secondary toolbar and context menu
+tools.title=الأدوات
+tools_label=الأدوات
+first_page.title=انتقل إلى الصفحة الأولى
+first_page_label=انتقل إلى الصفحة الأولى
+last_page.title=انتقل إلى الصفحة الأخيرة
+last_page_label=انتقل إلى الصفحة الأخيرة
+page_rotate_cw.title=أدر باتجاه عقارب الساعة
+page_rotate_cw_label=أدر باتجاه عقارب الساعة
+page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة
+page_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة
+
+cursor_text_select_tool.title=فعّل أداة اختيار النص
+cursor_text_select_tool_label=أداة اختيار النص
+cursor_hand_tool.title=فعّل أداة اليد
+cursor_hand_tool_label=أداة اليد
+
+scroll_vertical.title=استخدم التمرير الرأسي
+scroll_vertical_label=التمرير الرأسي
+scroll_horizontal.title=استخدم التمرير الأفقي
+scroll_horizontal_label=التمرير الأفقي
+scroll_wrapped.title=استخدم التمرير الملتف
+scroll_wrapped_label=التمرير الملتف
+
+spread_none.title=لا تدمج هوامش الصفحات مع بعضها البعض
+spread_none_label=بلا هوامش
+spread_odd.title=ادمج هوامش الصفحات الفردية
+spread_odd_label=هوامش الصفحات الفردية
+spread_even.title=ادمج هوامش الصفحات الزوجية
+spread_even_label=هوامش الصفحات الزوجية
+
+# Document properties dialog box
+document_properties.title=خصائص المستند…
+document_properties_label=خصائص المستند…
+document_properties_file_name=اسم الملف:
+document_properties_file_size=حجم الملف:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت)
+document_properties_title=العنوان:
+document_properties_author=المؤلف:
+document_properties_subject=الموضوع:
+document_properties_keywords=الكلمات الأساسية:
+document_properties_creation_date=تاريخ الإنشاء:
+document_properties_modification_date=تاريخ التعديل:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=المنشئ:
+document_properties_producer=منتج PDF:
+document_properties_version=إصدارة PDF:
+document_properties_page_count=عدد الصفحات:
+document_properties_page_size=مقاس الورقة:
+document_properties_page_size_unit_inches=بوصة
+document_properties_page_size_unit_millimeters=ملم
+document_properties_page_size_orientation_portrait=طوليّ
+document_properties_page_size_orientation_landscape=عرضيّ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=خطاب
+document_properties_page_size_name_legal=قانونيّ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}، {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=العرض السريع عبر الوِب:
+document_properties_linearized_yes=نعم
+document_properties_linearized_no=لا
+document_properties_close=أغلق
+
+print_progress_message=يُحضّر المستند للطباعة…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}٪
+print_progress_close=ألغِ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=بدّل ظهور الشريط الجانبي
+toggle_sidebar_notification2.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات)
+toggle_sidebar_label=بدّل ظهور الشريط الجانبي
+document_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر)
+document_outline_label=مخطط المستند
+attachments.title=اعرض المرفقات
+attachments_label=المُرفقات
+layers.title=اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية)
+layers_label=الطبقات
+thumbs.title=اعرض مُصغرات
+thumbs_label=مُصغّرات
+findbar.title=ابحث في المستند
+findbar_label=ابحث
+
+additional_layers=الطبقات الإضافية
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=صفحة {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=صفحة {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=مصغّرة صفحة {{page}}
+
+# Find panel button title and messages
+find_input.title=ابحث
+find_input.placeholder=ابحث في المستند…
+find_previous.title=ابحث عن التّواجد السّابق للعبارة
+find_previous_label=السابق
+find_next.title=ابحث عن التّواجد التّالي للعبارة
+find_next_label=التالي
+find_highlight=أبرِز الكل
+find_match_case_label=طابق حالة الأحرف
+find_entire_word_label=كلمات كاملة
+find_reached_top=تابعت من الأسفل بعدما وصلت إلى بداية المستند
+find_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} من أصل مطابقة واحدة
+find_match_count[two]={{current}} من أصل مطابقتين
+find_match_count[few]={{current}} من أصل {{total}} مطابقات
+find_match_count[many]={{current}} من أصل {{total}} مطابقة
+find_match_count[other]={{current}} من أصل {{total}} مطابقة
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=فقط
+find_match_count_limit[one]=أكثر من مطابقة واحدة
+find_match_count_limit[two]=أكثر من مطابقتين
+find_match_count_limit[few]=أكثر من {{limit}} مطابقات
+find_match_count_limit[many]=أكثر من {{limit}} مطابقة
+find_match_count_limit[other]=أكثر من {{limit}} مطابقة
+find_not_found=لا وجود للعبارة
+
+# Error panel labels
+error_more_info=معلومات أكثر
+error_less_info=معلومات أقل
+error_close=أغلق
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js ن{{version}} (بناء: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=الرسالة: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=الرصّة: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=الملف: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=السطر: {{line}}
+rendering_error=حدث خطأ أثناء عرض الصفحة.
+
+# Predefined zoom values
+page_scale_width=عرض الصفحة
+page_scale_fit=ملائمة الصفحة
+page_scale_auto=تقريب تلقائي
+page_scale_actual=الحجم الفعلي
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}٪
+
+# Loading indicator messages
+loading=يحمّل…
+loading_error=حدث عطل أثناء تحميل ملف PDF.
+invalid_file_error=ملف PDF تالف أو غير صحيح.
+missing_file_error=ملف PDF غير موجود.
+unexpected_response_error=استجابة خادوم غير متوقعة.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}، {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[تعليق {{type}}]
+password_label=أدخل لكلمة السر لفتح هذا الملف.
+password_invalid=كلمة سر خطأ. من فضلك أعد المحاولة.
+password_ok=حسنا
+password_cancel=ألغِ
+
+printing_not_supported=تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل.
+printing_not_ready=تحذير: ملف PDF لم يُحمّل كاملًا للطباعة.
+web_fonts_disabled=خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة.
diff --git a/app/assets/javascripts/publications/locale/ast/viewer.properties b/app/assets/javascripts/publications/locale/ast/viewer.properties
new file mode 100644
index 0000000..1f8bb2e
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ast/viewer.properties
@@ -0,0 +1,207 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Páxina anterior
+previous_label=Anterior
+next.title=Páxina siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Páxina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Alloñar
+zoom_out_label=Alloña
+zoom_in.title=Averar
+zoom_in_label=Avera
+zoom.title=Zoom
+presentation_mode.title=Cambiar al mou de presentación
+presentation_mode_label=Mou de presentación
+open_file_label=Abrir
+print.title=Imprentar
+print_label=Imprentar
+download.title=Baxar
+download_label=Baxar
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramientes
+tools_label=Ferramientes
+first_page_label=Dir a la primer páxina
+last_page_label=Dir a la última páxina
+page_rotate_cw.title=Voltia a la derecha
+page_rotate_cw_label=Voltiar a la derecha
+page_rotate_ccw.title=Voltia a la esquierda
+page_rotate_ccw_label=Voltiar a la esquierda
+
+cursor_text_select_tool.title=Activa la ferramienta d'esbilla de testu
+cursor_text_select_tool_label=Ferramienta d'esbilla de testu
+cursor_hand_tool.title=Activa la ferramienta de mano
+cursor_hand_tool_label=Ferramienta de mano
+
+scroll_vertical.title=Usa'l desplazamientu vertical
+scroll_vertical_label=Desplazamientu vertical
+scroll_horizontal.title=Usa'l desplazamientu horizontal
+scroll_horizontal_label=Desplazamientu horizontal
+scroll_wrapped.title=Usa'l desplazamientu continuu
+scroll_wrapped_label=Desplazamientu continuu
+
+spread_none_label=Fueyes individuales
+spread_odd_label=Fueyes pares
+spread_even_label=Fueyes impares
+
+# Document properties dialog box
+document_properties.title=Propiedaes del documentu…
+document_properties_label=Propiedaes del documentu…
+document_properties_file_name=Nome del ficheru:
+document_properties_file_size=Tamañu del ficheru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Títulu:
+document_properties_keywords=Pallabres clave:
+document_properties_creation_date=Data de creación:
+document_properties_modification_date=Data de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_producer=Productor del PDF:
+document_properties_version=Versión del PDF:
+document_properties_page_count=Númberu de páxines:
+document_properties_page_size=Tamañu de páxina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rápida:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=Non
+document_properties_close=Zarrar
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Encaboxar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar la barra llateral
+attachments.title=Amosar los axuntos
+attachments_label=Axuntos
+layers_label=Capes
+thumbs.title=Amosar les miniatures
+thumbs_label=Miniatures
+findbar_label=Atopar
+
+additional_layers=Capes adicionales
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Páxina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Páxina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_previous_label=Anterior
+find_next_label=Siguiente
+find_entire_word_label=Pallabres completes
+find_reached_top=Algamóse'l comienzu de la páxina, síguese dende abaxo
+find_reached_bottom=Algamóse la fin del documentu, síguese dende arriba
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencies
+find_match_count[few]={{current}} de {{total}} coincidencies
+find_match_count[many]={{current}} de {{total}} coincidencies
+find_match_count[other]={{current}} de {{total}} coincidencies
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit[zero]=Más de {{limit}} coincidencies
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencies
+find_match_count_limit[few]=Más de {{limit}} coincidencies
+find_match_count_limit[many]=Más de {{limit}} coincidencies
+find_match_count_limit[other]=Más de {{limit}} coincidencies
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilación: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaxe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheru: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Llinia: {{line}}
+
+# Predefined zoom values
+page_scale_auto=Zoom automáticu
+page_scale_actual=Tamañu real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Cargando…
+loading_error=Asocedió un fallu mentanto se cargaba'l PDF.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_ok=Aceptar
+password_cancel=Encaboxar
+
+# LOCALIZATION NOTE (unsupported_feature_signatures): Should contain the same
+# exact string as in the `chrome.properties` file.
+
diff --git a/app/assets/javascripts/publications/locale/az/viewer.properties b/app/assets/javascripts/publications/locale/az/viewer.properties
new file mode 100644
index 0000000..bdc0ce6
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/az/viewer.properties
@@ -0,0 +1,242 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Əvvəlki səhifə
+previous_label=Əvvəlkini tap
+next.title=Növbəti səhifə
+next_label=İrəli
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Səhifə
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Uzaqlaş
+zoom_out_label=Uzaqlaş
+zoom_in.title=Yaxınlaş
+zoom_in_label=Yaxınlaş
+zoom.title=Yaxınlaşdırma
+presentation_mode.title=Təqdimat Rejiminə Keç
+presentation_mode_label=Təqdimat Rejimi
+open_file.title=Fayl Aç
+open_file_label=Aç
+print.title=Yazdır
+print_label=Yazdır
+download.title=Endir
+download_label=Endir
+bookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç)
+bookmark_label=Hazırkı görünüş
+
+# Secondary toolbar and context menu
+tools.title=Alətlər
+tools_label=Alətlər
+first_page.title=İlk Səhifəyə get
+first_page_label=İlk Səhifəyə get
+last_page.title=Son Səhifəyə get
+last_page_label=Son Səhifəyə get
+page_rotate_cw.title=Saat İstiqamətində Fırlat
+page_rotate_cw_label=Saat İstiqamətində Fırlat
+page_rotate_ccw.title=Saat İstiqamətinin Əksinə Fırlat
+page_rotate_ccw_label=Saat İstiqamətinin Əksinə Fırlat
+
+cursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir
+cursor_text_select_tool_label=Yazı seçmə aləti
+cursor_hand_tool.title=Əl alətini aktivləşdir
+cursor_hand_tool_label=Əl aləti
+
+scroll_vertical.title=Şaquli sürüşdürmə işlət
+scroll_vertical_label=Şaquli sürüşdürmə
+scroll_horizontal.title=Üfüqi sürüşdürmə işlət
+scroll_horizontal_label=Üfüqi sürüşdürmə
+scroll_wrapped.title=Bükülü sürüşdürmə işlət
+scroll_wrapped_label=Bükülü sürüşdürmə
+
+spread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə
+spread_none_label=Birləşdirmə
+spread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat
+spread_odd_label=Tək nömrəli
+spread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat
+spread_even_label=Cüt nömrəli
+
+# Document properties dialog box
+document_properties.title=Sənəd xüsusiyyətləri…
+document_properties_label=Sənəd xüsusiyyətləri…
+document_properties_file_name=Fayl adı:
+document_properties_file_size=Fayl ölçüsü:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
+document_properties_title=Başlık:
+document_properties_author=Müəllif:
+document_properties_subject=Mövzu:
+document_properties_keywords=Açar sözlər:
+document_properties_creation_date=Yaradılış Tarixi :
+document_properties_modification_date=Dəyişdirilmə Tarixi :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yaradan:
+document_properties_producer=PDF yaradıcısı:
+document_properties_version=PDF versiyası:
+document_properties_page_count=Səhifə sayı:
+document_properties_page_size=Səhifə Ölçüsü:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portret
+document_properties_page_size_orientation_landscape=albom
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Məktub
+document_properties_page_size_name_legal=Hüquqi
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Bəli
+document_properties_linearized_no=Xeyr
+document_properties_close=Qapat
+
+print_progress_message=Sənəd çap üçün hazırlanır…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Ləğv et
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Yan Paneli Aç/Bağla
+toggle_sidebar_notification2.title=Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur)
+toggle_sidebar_label=Yan Paneli Aç/Bağla
+document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin)
+document_outline_label=Sənəd strukturu
+attachments.title=Bağlamaları göstər
+attachments_label=Bağlamalar
+layers.title=Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin)
+layers_label=Laylar
+thumbs.title=Kiçik şəkilləri göstər
+thumbs_label=Kiçik şəkillər
+findbar.title=Sənəddə Tap
+findbar_label=Tap
+
+additional_layers=Əlavə laylar
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Səhifə{{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti
+
+# Find panel button title and messages
+find_input.title=Tap
+find_input.placeholder=Sənəddə tap…
+find_previous.title=Bir öncəki uyğun gələn sözü tapır
+find_previous_label=Geri
+find_next.title=Bir sonrakı uyğun gələn sözü tapır
+find_next_label=İrəli
+find_highlight=İşarələ
+find_match_case_label=Böyük/kiçik hərfə həssaslıq
+find_entire_word_label=Tam sözlər
+find_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir
+find_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} uyğunluq
+find_match_count[two]={{current}} / {{total}} uyğunluq
+find_match_count[few]={{current}} / {{total}} uyğunluq
+find_match_count[many]={{current}} / {{total}} uyğunluq
+find_match_count[other]={{current}} / {{total}} uyğunluq
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}}-dan çox uyğunluq
+find_match_count_limit[one]={{limit}}-dən çox uyğunluq
+find_match_count_limit[two]={{limit}}-dən çox uyğunluq
+find_match_count_limit[few]={{limit}} uyğunluqdan daha çox
+find_match_count_limit[many]={{limit}} uyğunluqdan daha çox
+find_match_count_limit[other]={{limit}} uyğunluqdan daha çox
+find_not_found=Uyğunlaşma tapılmadı
+
+# Error panel labels
+error_more_info=Daha çox məlumati
+error_less_info=Daha az məlumat
+error_close=Qapat
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (yığma: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=İsmarıc: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stek: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fayl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Sətir: {{line}}
+rendering_error=Səhifə göstərilərkən səhv yarandı.
+
+# Predefined zoom values
+page_scale_width=Səhifə genişliyi
+page_scale_fit=Səhifəni sığdır
+page_scale_auto=Avtomatik yaxınlaşdır
+page_scale_actual=Hazırkı Həcm
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF yüklenərkən bir səhv yarandı.
+invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl.
+missing_file_error=PDF fayl yoxdur.
+unexpected_response_error=Gözlənilməz server cavabı.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotasiyası]
+password_label=Bu PDF faylı açmaq üçün parolu daxil edin.
+password_invalid=Parol səhvdir. Bir daha yoxlayın.
+password_ok=Tamam
+password_cancel=Ləğv et
+
+printing_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir.
+printing_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib.
+web_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil.
diff --git a/app/assets/javascripts/publications/locale/be/viewer.properties b/app/assets/javascripts/publications/locale/be/viewer.properties
new file mode 100644
index 0000000..ec3002c
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/be/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Папярэдняя старонка
+previous_label=Папярэдняя
+next.title=Наступная старонка
+next_label=Наступная
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Старонка
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=з {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} з {{pagesCount}})
+
+zoom_out.title=Паменшыць
+zoom_out_label=Паменшыць
+zoom_in.title=Павялічыць
+zoom_in_label=Павялічыць
+zoom.title=Павялічэнне тэксту
+presentation_mode.title=Пераключыцца ў рэжым паказу
+presentation_mode_label=Рэжым паказу
+open_file.title=Адкрыць файл
+open_file_label=Адкрыць
+print.title=Друкаваць
+print_label=Друкаваць
+download.title=Сцягнуць
+download_label=Сцягнуць
+bookmark.title=Цяперашняя праява (скапіяваць або адчыніць у новым акне)
+bookmark_label=Цяперашняя праява
+
+# Secondary toolbar and context menu
+tools.title=Прылады
+tools_label=Прылады
+first_page.title=Перайсці на першую старонку
+first_page_label=Перайсці на першую старонку
+last_page.title=Перайсці на апошнюю старонку
+last_page_label=Перайсці на апошнюю старонку
+page_rotate_cw.title=Павярнуць па сонцу
+page_rotate_cw_label=Павярнуць па сонцу
+page_rotate_ccw.title=Павярнуць супраць сонца
+page_rotate_ccw_label=Павярнуць супраць сонца
+
+cursor_text_select_tool.title=Уключыць прыладу выбару тэксту
+cursor_text_select_tool_label=Прылада выбару тэксту
+cursor_hand_tool.title=Уключыць ручную прыладу
+cursor_hand_tool_label=Ручная прылада
+
+scroll_page.title=Выкарыстоўваць пракрутку старонкi
+scroll_page_label=Пракрутка старонкi
+scroll_vertical.title=Ужываць вертыкальную пракрутку
+scroll_vertical_label=Вертыкальная пракрутка
+scroll_horizontal.title=Ужываць гарызантальную пракрутку
+scroll_horizontal_label=Гарызантальная пракрутка
+scroll_wrapped.title=Ужываць маштабавальную пракрутку
+scroll_wrapped_label=Маштабавальная пракрутка
+
+spread_none.title=Не выкарыстоўваць разгорнутыя старонкі
+spread_none_label=Без разгорнутых старонак
+spread_odd.title=Разгорнутыя старонкі пачынаючы з няцотных нумароў
+spread_odd_label=Няцотныя старонкі злева
+spread_even.title=Разгорнутыя старонкі пачынаючы з цотных нумароў
+spread_even_label=Цотныя старонкі злева
+
+# Document properties dialog box
+document_properties.title=Уласцівасці дакумента…
+document_properties_label=Уласцівасці дакумента…
+document_properties_file_name=Назва файла:
+document_properties_file_size=Памер файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Загаловак:
+document_properties_author=Аўтар:
+document_properties_subject=Тэма:
+document_properties_keywords=Ключавыя словы:
+document_properties_creation_date=Дата стварэння:
+document_properties_modification_date=Дата змянення:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Стваральнік:
+document_properties_producer=Вырабнік PDF:
+document_properties_version=Версія PDF:
+document_properties_page_count=Колькасць старонак:
+document_properties_page_size=Памер старонкі:
+document_properties_page_size_unit_inches=цаляў
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=кніжная
+document_properties_page_size_orientation_landscape=альбомная
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Хуткі прагляд у Інтэрнэце:
+document_properties_linearized_yes=Так
+document_properties_linearized_no=Не
+document_properties_close=Закрыць
+
+print_progress_message=Падрыхтоўка дакумента да друку…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Скасаваць
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Паказаць/схаваць бакавую панэль
+toggle_sidebar_notification2.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты)
+toggle_sidebar_label=Паказаць/схаваць бакавую панэль
+document_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы)
+document_outline_label=Структура дакумента
+attachments.title=Паказаць далучэнні
+attachments_label=Далучэнні
+layers.title=Паказаць пласты (двойчы пстрыкніце, каб скінуць усе пласты да прадвызначанага стану)
+layers_label=Пласты
+thumbs.title=Паказ мініяцюр
+thumbs_label=Мініяцюры
+current_outline_item.title=Знайсці бягучы элемент структуры
+current_outline_item_label=Бягучы элемент структуры
+findbar.title=Пошук у дакуменце
+findbar_label=Знайсці
+
+additional_layers=Дадатковыя пласты
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Старонка {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Старонка {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Мініяцюра старонкі {{page}}
+
+# Find panel button title and messages
+find_input.title=Шукаць
+find_input.placeholder=Шукаць у дакуменце…
+find_previous.title=Знайсці папярэдні выпадак выразу
+find_previous_label=Папярэдні
+find_next.title=Знайсці наступны выпадак выразу
+find_next_label=Наступны
+find_highlight=Падфарбаваць усе
+find_match_case_label=Адрозніваць вялікія/малыя літары
+find_entire_word_label=Словы цалкам
+find_reached_top=Дасягнуты пачатак дакумента, працяг з канца
+find_reached_bottom=Дасягнуты канец дакумента, працяг з пачатку
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} з {{total}} супадзення
+find_match_count[two]={{current}} з {{total}} супадзенняў
+find_match_count[few]={{current}} з {{total}} супадзенняў
+find_match_count[many]={{current}} з {{total}} супадзенняў
+find_match_count[other]={{current}} з {{total}} супадзенняў
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Больш за {{limit}} супадзенняў
+find_match_count_limit[one]=Больш за {{limit}} супадзенне
+find_match_count_limit[two]=Больш за {{limit}} супадзенняў
+find_match_count_limit[few]=Больш за {{limit}} супадзенняў
+find_match_count_limit[many]=Больш за {{limit}} супадзенняў
+find_match_count_limit[other]=Больш за {{limit}} супадзенняў
+find_not_found=Выраз не знойдзены
+
+# Error panel labels
+error_more_info=Падрабязней
+error_less_info=Сцісла
+error_close=Закрыць
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js в{{version}} (зборка: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Паведамленне: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стос: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Радок: {{line}}
+rendering_error=Здарылася памылка падчас адлюстравання старонкі.
+
+# Predefined zoom values
+page_scale_width=Шырыня старонкі
+page_scale_fit=Уцісненне старонкі
+page_scale_auto=Аўтаматычнае павелічэнне
+page_scale_actual=Сапраўдны памер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Чытаецца…
+loading_error=Здарылася памылка падчас загрузкі PDF.
+invalid_file_error=Няспраўны або пашкоджаны файл PDF.
+missing_file_error=Адсутны файл PDF.
+unexpected_response_error=Нечаканы адказ сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Увядзіце пароль, каб адкрыць гэты файл PDF.
+password_invalid=Нядзейсны пароль. Паспрабуйце зноў.
+password_ok=Добра
+password_cancel=Скасаваць
+
+printing_not_supported=Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам.
+printing_not_ready=Увага: PDF не сцягнуты цалкам для друкавання.
+web_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF.
diff --git a/app/assets/javascripts/publications/locale/bg/viewer.properties b/app/assets/javascripts/publications/locale/bg/viewer.properties
new file mode 100644
index 0000000..0ec7649
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/bg/viewer.properties
@@ -0,0 +1,234 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Предишна страница
+previous_label=Предишна
+next.title=Следваща страница
+next_label=Следваща
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=от {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} от {{pagesCount}})
+
+zoom_out.title=Намаляване
+zoom_out_label=Намаляване
+zoom_in.title=Увеличаване
+zoom_in_label=Увеличаване
+zoom.title=Мащабиране
+presentation_mode.title=Превключване към режим на представяне
+presentation_mode_label=Режим на представяне
+open_file.title=Отваряне на файл
+open_file_label=Отваряне
+print.title=Отпечатване
+print_label=Отпечатване
+download.title=Изтегляне
+download_label=Изтегляне
+bookmark.title=Текущ изглед (копиране или отваряне в нов прозорец)
+bookmark_label=Текущ изглед
+
+# Secondary toolbar and context menu
+tools.title=Инструменти
+tools_label=Инструменти
+first_page.title=Към първата страница
+first_page_label=Към първата страница
+last_page.title=Към последната страница
+last_page_label=Към последната страница
+page_rotate_cw.title=Завъртане по час. стрелка
+page_rotate_cw_label=Завъртане по часовниковата стрелка
+page_rotate_ccw.title=Завъртане обратно на час. стрелка
+page_rotate_ccw_label=Завъртане обратно на часовниковата стрелка
+
+cursor_text_select_tool.title=Включване на инструмента за избор на текст
+cursor_text_select_tool_label=Инструмент за избор на текст
+cursor_hand_tool.title=Включване на инструмента ръка
+cursor_hand_tool_label=Инструмент ръка
+
+scroll_vertical.title=Използване на вертикално плъзгане
+scroll_vertical_label=Вертикално плъзгане
+scroll_horizontal.title=Използване на хоризонтално
+scroll_horizontal_label=Хоризонтално плъзгане
+scroll_wrapped.title=Използване на мащабируемо плъзгане
+scroll_wrapped_label=Мащабируемо плъзгане
+
+spread_none.title=Режимът на сдвояване е изключен
+spread_none_label=Без сдвояване
+spread_odd.title=Сдвояване, започвайки от нечетните страници
+spread_odd_label=Нечетните отляво
+spread_even.title=Сдвояване, започвайки от четните страници
+spread_even_label=Четните отляво
+
+# Document properties dialog box
+document_properties.title=Свойства на документа…
+document_properties_label=Свойства на документа…
+document_properties_file_name=Име на файл:
+document_properties_file_size=Големина на файл:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байта)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байта)
+document_properties_title=Заглавие:
+document_properties_author=Автор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключови думи:
+document_properties_creation_date=Дата на създаване:
+document_properties_modification_date=Дата на промяна:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Създател:
+document_properties_producer=PDF произведен от:
+document_properties_version=Издание на PDF:
+document_properties_page_count=Брой страници:
+document_properties_page_size=Размер на страницата:
+document_properties_page_size_unit_inches=инч
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=портрет
+document_properties_page_size_orientation_landscape=пейзаж
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Правни въпроси
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Бърз преглед:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Не
+document_properties_close=Затваряне
+
+print_progress_message=Подготвяне на документа за отпечатване…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Отказ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Превключване на страничната лента
+toggle_sidebar_label=Превключване на страничната лента
+document_outline.title=Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко)
+document_outline_label=Структура на документа
+attachments.title=Показване на притурките
+attachments_label=Притурки
+thumbs.title=Показване на миниатюрите
+thumbs_label=Миниатюри
+findbar.title=Намиране в документа
+findbar_label=Търсене
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Миниатюра на страница {{page}}
+
+# Find panel button title and messages
+find_input.title=Търсене
+find_input.placeholder=Търсене в документа…
+find_previous.title=Намиране на предишно съвпадение на фразата
+find_previous_label=Предишна
+find_next.title=Намиране на следващо съвпадение на фразата
+find_next_label=Следваща
+find_highlight=Открояване на всички
+find_match_case_label=Съвпадение на регистъра
+find_entire_word_label=Цели думи
+find_reached_top=Достигнато е началото на документа, продължаване от края
+find_reached_bottom=Достигнат е краят на документа, продължаване от началото
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} от {{total}} съвпадение
+find_match_count[two]={{current}} от {{total}} съвпадения
+find_match_count[few]={{current}} от {{total}} съвпадения
+find_match_count[many]={{current}} от {{total}} съвпадения
+find_match_count[other]={{current}} от {{total}} съвпадения
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Повече от {{limit}} съвпадения
+find_match_count_limit[one]=Повече от {{limit}} съвпадение
+find_match_count_limit[two]=Повече от {{limit}} съвпадения
+find_match_count_limit[few]=Повече от {{limit}} съвпадения
+find_match_count_limit[many]=Повече от {{limit}} съвпадения
+find_match_count_limit[other]=Повече от {{limit}} съвпадения
+find_not_found=Фразата не е намерена
+
+# Error panel labels
+error_more_info=Повече информация
+error_less_info=По-малко информация
+error_close=Затваряне
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=Издание на PDF.js {{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Съобщение: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ред: {{line}}
+rendering_error=Грешка при изчертаване на страницата.
+
+# Predefined zoom values
+page_scale_width=Ширина на страницата
+page_scale_fit=Вместване в страницата
+page_scale_auto=Автоматично мащабиране
+page_scale_actual=Действителен размер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Получи се грешка при зареждане на PDF-а.
+invalid_file_error=Невалиден или повреден PDF файл.
+missing_file_error=Липсващ PDF файл.
+unexpected_response_error=Неочакван отговор от сървъра.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Анотация {{type}}]
+password_label=Въведете парола за отваряне на този PDF файл.
+password_invalid=Невалидна парола. Моля, опитайте отново.
+password_ok=Добре
+password_cancel=Отказ
+
+printing_not_supported=Внимание: Този четец няма пълна поддръжка на отпечатване.
+printing_not_ready=Внимание: Този PDF файл не е напълно зареден за печат.
+web_fonts_disabled=Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове.
diff --git a/app/assets/javascripts/publications/locale/bn/viewer.properties b/app/assets/javascripts/publications/locale/bn/viewer.properties
new file mode 100644
index 0000000..93f4c7b
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/bn/viewer.properties
@@ -0,0 +1,236 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=পূর্ববর্তী পাতা
+previous_label=পূর্ববর্তী
+next.title=পরবর্তী পাতা
+next_label=পরবর্তী
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=পাতা
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} এর
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} এর {{pageNumber}})
+
+zoom_out.title=ছোট আকারে প্রদর্শন
+zoom_out_label=ছোট আকারে প্রদর্শন
+zoom_in.title=বড় আকারে প্রদর্শন
+zoom_in_label=বড় আকারে প্রদর্শন
+zoom.title=বড় আকারে প্রদর্শন
+presentation_mode.title=উপস্থাপনা মোডে স্যুইচ করুন
+presentation_mode_label=উপস্থাপনা মোড
+open_file.title=ফাইল খুলুন
+open_file_label=খুলুন
+print.title=মুদ্রণ
+print_label=মুদ্রণ
+download.title=ডাউনলোড
+download_label=ডাউনলোড
+bookmark.title=বর্তমান অবস্থা (অনুলিপি অথবা নতুন উইন্ডো তে খুলুন)
+bookmark_label=বর্তমান অবস্থা
+
+# Secondary toolbar and context menu
+tools.title=টুল
+tools_label=টুল
+first_page.title=প্রথম পাতায় যাও
+first_page_label=প্রথম পাতায় যাও
+last_page.title=শেষ পাতায় যাও
+last_page_label=শেষ পাতায় যাও
+page_rotate_cw.title=ঘড়ির কাঁটার দিকে ঘোরাও
+page_rotate_cw_label=ঘড়ির কাঁটার দিকে ঘোরাও
+page_rotate_ccw.title=ঘড়ির কাঁটার বিপরীতে ঘোরাও
+page_rotate_ccw_label=ঘড়ির কাঁটার বিপরীতে ঘোরাও
+
+cursor_text_select_tool.title=লেখা নির্বাচক টুল সক্রিয় করুন
+cursor_text_select_tool_label=লেখা নির্বাচক টুল
+cursor_hand_tool.title=হ্যান্ড টুল সক্রিয় করুন
+cursor_hand_tool_label=হ্যান্ড টুল
+
+scroll_vertical.title=উলম্ব স্ক্রলিং ব্যবহার করুন
+scroll_vertical_label=উলম্ব স্ক্রলিং
+scroll_horizontal.title=অনুভূমিক স্ক্রলিং ব্যবহার করুন
+scroll_horizontal_label=অনুভূমিক স্ক্রলিং
+scroll_wrapped.title=Wrapped স্ক্রোলিং ব্যবহার করুন
+scroll_wrapped_label=Wrapped স্ক্রোলিং
+
+spread_none.title=পেজ স্প্রেডগুলোতে যোগদান করবেন না
+spread_none_label=Spreads নেই
+spread_odd_label=বিজোড় Spreads
+spread_even_label=জোড় Spreads
+
+# Document properties dialog box
+document_properties.title=নথি বৈশিষ্ট্য…
+document_properties_label=নথি বৈশিষ্ট্য…
+document_properties_file_name=ফাইলের নাম:
+document_properties_file_size=ফাইলের আকার:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} এমবি ({{size_b}} বাইট)
+document_properties_title=শিরোনাম:
+document_properties_author=লেখক:
+document_properties_subject=বিষয়:
+document_properties_keywords=কীওয়ার্ড:
+document_properties_creation_date=তৈরির তারিখ:
+document_properties_modification_date=পরিবর্তনের তারিখ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=প্রস্তুতকারক:
+document_properties_producer=পিডিএফ প্রস্তুতকারক:
+document_properties_version=পিডিএফ সংষ্করণ:
+document_properties_page_count=মোট পাতা:
+document_properties_page_size=পাতার সাইজ:
+document_properties_page_size_unit_inches=এর মধ্যে
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=উলম্ব
+document_properties_page_size_orientation_landscape=অনুভূমিক
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=লেটার
+document_properties_page_size_name_legal=লীগাল
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=হ্যাঁ
+document_properties_linearized_no=না
+document_properties_close=বন্ধ
+
+print_progress_message=মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=বাতিল
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=সাইডবার টগল করুন
+toggle_sidebar_label=সাইডবার টগল করুন
+document_outline.title=নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন)
+document_outline_label=নথির রূপরেখা
+attachments.title=সংযুক্তি দেখাও
+attachments_label=সংযুক্তি
+thumbs.title=থাম্বনেইল সমূহ প্রদর্শন করুন
+thumbs_label=থাম্বনেইল সমূহ
+findbar.title=নথির মধ্যে খুঁজুন
+findbar_label=খুঁজুন
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=পাতা {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} পাতার থাম্বনেইল
+
+# Find panel button title and messages
+find_input.title=খুঁজুন
+find_input.placeholder=নথির মধ্যে খুঁজুন…
+find_previous.title=বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান
+find_previous_label=পূর্ববর্তী
+find_next.title=বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান
+find_next_label=পরবর্তী
+find_highlight=সব হাইলাইট করা হবে
+find_match_case_label=অক্ষরের ছাঁদ মেলানো
+find_entire_word_label=সম্পূর্ণ শব্দ
+find_reached_top=পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে
+find_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} এর {{current}} মিল
+find_match_count[two]={{total}} এর {{current}} মিল
+find_match_count[few]={{total}} এর {{current}} মিল
+find_match_count[many]={{total}} এর {{current}} মিল
+find_match_count[other]={{total}} এর {{current}} মিল
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} এর বেশি মিল
+find_match_count_limit[one]={{limit}} এর বেশি মিল
+find_match_count_limit[two]={{limit}} এর বেশি মিল
+find_match_count_limit[few]={{limit}} এর বেশি মিল
+find_match_count_limit[many]={{limit}} এর বেশি মিল
+find_match_count_limit[other]={{limit}} এর বেশি মিল
+find_not_found=বাক্যাংশ পাওয়া যায়নি
+
+# Error panel labels
+error_more_info=আরও তথ্য
+error_less_info=কম তথ্য
+error_close=বন্ধ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=বার্তা: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=নথি: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=লাইন: {{line}}
+rendering_error=পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে।
+
+# Predefined zoom values
+page_scale_width=পাতার প্রস্থ
+page_scale_fit=পাতা ফিট করুন
+page_scale_auto=স্বয়ংক্রিয় জুম
+page_scale_actual=প্রকৃত আকার
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে।
+invalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল।
+missing_file_error=নিখোঁজ PDF ফাইল।
+unexpected_response_error=অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} টীকা]
+password_label=পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন।
+password_invalid=ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন।
+password_ok=ঠিক আছে
+password_cancel=বাতিল
+
+printing_not_supported=সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়।
+printing_not_ready=সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি।
+web_fonts_disabled=ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না।
diff --git a/app/assets/javascripts/publications/locale/bo/viewer.properties b/app/assets/javascripts/publications/locale/bo/viewer.properties
new file mode 100644
index 0000000..bba0490
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/bo/viewer.properties
@@ -0,0 +1,237 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=དྲ་ངོས་སྔོན་མ
+previous_label=སྔོན་མ
+next.title=དྲ་ངོས་རྗེས་མ
+next_label=རྗེས་མ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ཤོག་ངོས
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Find
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/app/assets/javascripts/publications/locale/br/viewer.properties b/app/assets/javascripts/publications/locale/br/viewer.properties
new file mode 100644
index 0000000..c26ca68
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/br/viewer.properties
@@ -0,0 +1,246 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pajenn a-raok
+previous_label=A-raok
+next.title=Pajenn war-lerc'h
+next_label=War-lerc'h
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pajenn
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=eus {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} war {{pagesCount}})
+
+zoom_out.title=Zoum bihanaat
+zoom_out_label=Zoum bihanaat
+zoom_in.title=Zoum brasaat
+zoom_in_label=Zoum brasaat
+zoom.title=Zoum
+presentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn
+presentation_mode_label=Mod kinnigadenn
+open_file.title=Digeriñ ur restr
+open_file_label=Digeriñ ur restr
+print.title=Moullañ
+print_label=Moullañ
+download.title=Pellgargañ
+download_label=Pellgargañ
+bookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez)
+bookmark_label=Gwel bremanel
+
+# Secondary toolbar and context menu
+tools.title=Ostilhoù
+tools_label=Ostilhoù
+first_page.title=Mont d'ar bajenn gentañ
+first_page_label=Mont d'ar bajenn gentañ
+last_page.title=Mont d'ar bajenn diwezhañ
+last_page_label=Mont d'ar bajenn diwezhañ
+page_rotate_cw.title=C'hwelañ gant roud ar bizied
+page_rotate_cw_label=C'hwelañ gant roud ar bizied
+page_rotate_ccw.title=C'hwelañ gant roud gin ar bizied
+page_rotate_ccw_label=C'hwelañ gant roud gin ar bizied
+
+cursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn
+cursor_text_select_tool_label=Ostilh diuzañ testenn
+cursor_hand_tool.title=Gweredekaat an ostilh dorn
+cursor_hand_tool_label=Ostilh dorn
+
+scroll_vertical.title=Arverañ an dibunañ a-blom
+scroll_vertical_label=Dibunañ a-serzh
+scroll_horizontal.title=Arverañ an dibunañ a-blaen
+scroll_horizontal_label=Dibunañ a-blaen
+scroll_wrapped.title=Arverañ an dibunañ paket
+scroll_wrapped_label=Dibunañ paket
+
+spread_none.title=Chom hep stagañ ar skignadurioù
+spread_none_label=Skignadenn ebet
+spread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar
+spread_odd_label=Pajennoù ampar
+spread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par
+spread_even_label=Pajennoù par
+
+# Document properties dialog box
+document_properties.title=Perzhioù an teul…
+document_properties_label=Perzhioù an teul…
+document_properties_file_name=Anv restr:
+document_properties_file_size=Ment ar restr:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit)
+document_properties_title=Titl:
+document_properties_author=Aozer:
+document_properties_subject=Danvez:
+document_properties_keywords=Gerioù-alc'hwez:
+document_properties_creation_date=Deiziad krouiñ:
+document_properties_modification_date=Deiziad kemmañ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Krouer:
+document_properties_producer=Kenderc'her PDF:
+document_properties_version=Handelv PDF:
+document_properties_page_count=Niver a bajennoù:
+document_properties_page_size=Ment ar bajenn:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=poltred
+document_properties_page_size_orientation_landscape=gweledva
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Lizher
+document_properties_page_size_name_legal=Lezennel
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gwel Web Herrek:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Ket
+document_properties_close=Serriñ
+
+print_progress_message=O prientiñ an teul evit moullañ...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nullañ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez
+toggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul)
+toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez
+document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)
+document_outline_label=Sinedoù an teuliad
+attachments.title=Diskouez ar c'henstagadurioù
+attachments_label=Kenstagadurioù
+layers.title=Diskouez ar gwiskadoù (daou-glikañ evit adderaouekaat an holl gwiskadoù d'o stad dre ziouer)
+layers_label=Gwiskadoù
+thumbs.title=Diskouez ar melvennoù
+thumbs_label=Melvennoù
+findbar.title=Klask e-barzh an teuliad
+findbar_label=Klask
+
+additional_layers=Gwiskadoù ouzhpenn
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Pajenn {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pajenn {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Melvenn ar bajenn {{page}}
+
+# Find panel button title and messages
+find_input.title=Klask
+find_input.placeholder=Klask e-barzh an teuliad
+find_previous.title=Kavout an tamm frazenn kent o klotañ ganti
+find_previous_label=Kent
+find_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti
+find_next_label=War-lerc'h
+find_highlight=Usskediñ pep tra
+find_match_case_label=Teurel evezh ouzh ar pennlizherennoù
+find_entire_word_label=Gerioù a-bezh
+find_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz
+find_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Klotadenn {{current}} war {{total}}
+find_match_count[two]=Klotadenn {{current}} war {{total}}
+find_match_count[few]=Klotadenn {{current}} war {{total}}
+find_match_count[many]=Klotadenn {{current}} war {{total}}
+find_match_count[other]=Klotadenn {{current}} war {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù
+find_not_found=N'haller ket kavout ar frazenn
+
+# Error panel labels
+error_more_info=Muioc'h a ditouroù
+error_less_info=Nebeutoc'h a ditouroù
+error_close=Serriñ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js handelv {{version}} (kempunadur: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Kemennadenn: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Torn: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Restr: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linenn: {{line}}
+rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.
+
+# Predefined zoom values
+page_scale_width=Led ar bajenn
+page_scale_fit=Pajenn a-bezh
+page_scale_auto=Zoum emgefreek
+page_scale_actual=Ment wir
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=O kargañ…
+loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.
+invalid_file_error=Restr PDF didalvoudek pe kontronet.
+missing_file_error=Restr PDF o vankout.
+unexpected_response_error=Respont dic'hortoz a-berzh an dafariad
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Notennañ]
+password_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ.
+password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij.
+password_ok=Mat eo
+password_cancel=Nullañ
+
+printing_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.
+printing_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.
+web_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet.
diff --git a/app/assets/javascripts/publications/locale/brx/viewer.properties b/app/assets/javascripts/publications/locale/brx/viewer.properties
new file mode 100644
index 0000000..3d1c92d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/brx/viewer.properties
@@ -0,0 +1,204 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=आगोलनि बिलाइ
+previous_label=आगोलनि
+next.title=उननि बिलाइ
+next_label=उननि
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=बिलाइ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} नि
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} नि {{pageNumber}})
+
+zoom_out.title=फिसायै जुम खालाम
+zoom_out_label=फिसायै जुम खालाम
+zoom_in.title=गेदेरै जुम खालाम
+zoom_in_label=गेदेरै जुम खालाम
+zoom.title=जुम खालाम
+presentation_mode.title=दिन्थिफुंनाय म'डआव थां
+presentation_mode_label=दिन्थिफुंनाय म'ड
+open_file.title=फाइलखौ खेव
+open_file_label=खेव
+print.title=साफाय
+print_label=साफाय
+download.title=डाउनल'ड खालाम
+download_label=डाउनल'ड खालाम
+bookmark.title=दानि नुथाय (गोदान उइन्ड'आव कपि खालाम एबा खेव)
+bookmark_label=दानि नुथाय
+
+# Secondary toolbar and context menu
+tools.title=टुल
+tools_label=टुल
+first_page.title=गिबि बिलाइआव थां
+first_page_label=गिबि बिलाइआव थां
+last_page.title=जोबथा बिलाइआव थां
+last_page_label=जोबथा बिलाइआव थां
+page_rotate_cw.title=घरि गिदिंनाय फार्से फिदिं
+page_rotate_cw_label=घरि गिदिंनाय फार्से फिदिं
+page_rotate_ccw.title=घरि गिदिंनाय उल्था फार्से फिदिं
+page_rotate_ccw_label=घरि गिदिंनाय उल्था फार्से फिदिं
+
+
+
+
+# Document properties dialog box
+document_properties.title=फोरमान बिलाइनि आखुथाय...
+document_properties_label=फोरमान बिलाइनि आखुथाय...
+document_properties_file_name=फाइलनि मुं:
+document_properties_file_size=फाइलनि महर:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} बाइट)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} बाइट)
+document_properties_title=बिमुं:
+document_properties_author=लिरगिरि:
+document_properties_subject=आयदा:
+document_properties_keywords=गाहाय सोदोब:
+document_properties_creation_date=सोरजिनाय अक्ट':
+document_properties_modification_date=सुद्रायनाय अक्ट':
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=सोरजिग्रा:
+document_properties_producer=PDF दिहुनग्रा:
+document_properties_version=PDF बिसान:
+document_properties_page_count=बिलाइनि हिसाब:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=प'र्ट्रेट
+document_properties_page_size_orientation_landscape=लेण्डस्केप
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=लायजाम
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=नंगौ
+document_properties_linearized_no=नङा
+document_properties_close=बन्द खालाम
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=नेवसि
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=टग्गल साइडबार
+toggle_sidebar_label=टग्गल साइडबार
+document_outline_label=फोरमान बिलाइ सिमा हांखो
+attachments.title=नांजाब होनायखौ दिन्थि
+attachments_label=नांजाब होनाय
+thumbs.title=थामनेइलखौ दिन्थि
+thumbs_label=थामनेइल
+findbar.title=फोरमान बिलाइआव नागिरना दिहुन
+findbar_label=नायगिरना दिहुन
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=बिलाइ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=बिलाइ {{page}} नि थामनेइल
+
+# Find panel button title and messages
+find_input.title=नायगिरना दिहुन
+find_input.placeholder=फोरमान बिलाइआव नागिरना दिहुन...
+find_previous.title=बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर
+find_previous_label=आगोलनि
+find_next.title=बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर
+find_next_label=उननि
+find_highlight=गासैखौबो हाइलाइट खालाम
+find_match_case_label=गोरोबनाय केस
+find_reached_top=थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
+find_reached_bottom=बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_not_found=बाथ्रा खोन्दोब मोनाखै
+
+# Error panel labels
+error_more_info=गोबां फोरमायथिहोग्रा
+error_less_info=खम फोरमायथिहोग्रा
+error_close=बन्द खालाम
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=खौरां: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्टेक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=सारि: {{line}}
+rendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों।
+
+# Predefined zoom values
+page_scale_width=बिलाइनि गुवार
+page_scale_fit=बिलाइ गोरोबनाय
+page_scale_auto=गावनोगाव जुम
+page_scale_actual=थार महर
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय।
+invalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल
+missing_file_error=गोमानाय PDF फाइल
+unexpected_response_error=मिजिंथियै सार्भार फिननाय।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} सोदोब बेखेवनाय]
+password_label=बे PDF फाइलखौ खेवनो पासवार्ड हाबहो।
+password_invalid=बाहायजायै पासवार्ड। अननानै फिन नाजा।
+password_ok=OK
+password_cancel=नेवसि
+
+printing_not_supported=सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया।
+printing_not_ready=सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै।
+web_fonts_disabled=वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै।
diff --git a/app/assets/javascripts/publications/locale/bs/viewer.properties b/app/assets/javascripts/publications/locale/bs/viewer.properties
new file mode 100644
index 0000000..ec115d0
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/bs/viewer.properties
@@ -0,0 +1,193 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prethodna strana
+previous_label=Prethodna
+next.title=Sljedeća strna
+next_label=Sljedeća
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strana
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Umanji
+zoom_out_label=Umanji
+zoom_in.title=Uvećaj
+zoom_in_label=Uvećaj
+zoom.title=Uvećanje
+presentation_mode.title=Prebaci se u prezentacijski režim
+presentation_mode_label=Prezentacijski režim
+open_file.title=Otvori fajl
+open_file_label=Otvori
+print.title=Štampaj
+print_label=Štampaj
+download.title=Preuzmi
+download_label=Preuzmi
+bookmark.title=Trenutni prikaz (kopiraj ili otvori u novom prozoru)
+bookmark_label=Trenutni prikaz
+
+# Secondary toolbar and context menu
+tools.title=Alati
+tools_label=Alati
+first_page.title=Idi na prvu stranu
+first_page_label=Idi na prvu stranu
+last_page.title=Idi na zadnju stranu
+last_page_label=Idi na zadnju stranu
+page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
+page_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu
+page_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu
+
+cursor_text_select_tool.title=Omogući alat za označavanje teksta
+cursor_text_select_tool_label=Alat za označavanje teksta
+cursor_hand_tool.title=Omogući ručni alat
+cursor_hand_tool_label=Ručni alat
+
+# Document properties dialog box
+document_properties.title=Svojstva dokumenta...
+document_properties_label=Svojstva dokumenta...
+document_properties_file_name=Naziv fajla:
+document_properties_file_size=Veličina fajla:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajta)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajta)
+document_properties_title=Naslov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=Ključne riječi:
+document_properties_creation_date=Datum kreiranja:
+document_properties_modification_date=Datum promjene:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kreator:
+document_properties_producer=PDF stvaratelj:
+document_properties_version=PDF verzija:
+document_properties_page_count=Broj stranica:
+document_properties_page_size=Veličina stranice:
+document_properties_page_size_unit_inches=u
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=uspravno
+document_properties_page_size_orientation_landscape=vodoravno
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Pismo
+document_properties_page_size_name_legal=Pravni
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_close=Zatvori
+
+print_progress_message=Pripremam dokument za štampu…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Otkaži
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Uključi/isključi bočnu traku
+toggle_sidebar_label=Uključi/isključi bočnu traku
+document_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki)
+document_outline_label=Konture dokumenta
+attachments.title=Prikaži priloge
+attachments_label=Prilozi
+thumbs.title=Prikaži thumbnailove
+thumbs_label=Thumbnailovi
+findbar.title=Pronađi u dokumentu
+findbar_label=Pronađi
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail strane {{page}}
+
+# Find panel button title and messages
+find_input.title=Pronađi
+find_input.placeholder=Pronađi u dokumentu…
+find_previous.title=Pronađi prethodno pojavljivanje fraze
+find_previous_label=Prethodno
+find_next.title=Pronađi sljedeće pojavljivanje fraze
+find_next_label=Sljedeće
+find_highlight=Označi sve
+find_match_case_label=Osjetljivost na karaktere
+find_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna
+find_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha
+find_not_found=Fraza nije pronađena
+
+# Error panel labels
+error_more_info=Više informacija
+error_less_info=Manje informacija
+error_close=Zatvori
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Poruka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fajl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linija: {{line}}
+rendering_error=Došlo je do greške prilikom renderiranja strane.
+
+# Predefined zoom values
+page_scale_width=Širina strane
+page_scale_fit=Uklopi stranu
+page_scale_auto=Automatsko uvećanje
+page_scale_actual=Stvarna veličina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Došlo je do greške prilikom učitavanja PDF-a.
+invalid_file_error=Neispravan ili oštećen PDF fajl.
+missing_file_error=Nedostaje PDF fajl.
+unexpected_response_error=Neočekivani odgovor servera.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} pribilješka]
+password_label=Upišite lozinku da biste otvorili ovaj PDF fajl.
+password_invalid=Pogrešna lozinka. Pokušajte ponovo.
+password_ok=OK
+password_cancel=Otkaži
+
+printing_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru.
+printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za štampanje.
+web_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove.
diff --git a/app/assets/javascripts/publications/locale/ca/viewer.properties b/app/assets/javascripts/publications/locale/ca/viewer.properties
new file mode 100644
index 0000000..21e7dff
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ca/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pàgina anterior
+previous_label=Anterior
+next.title=Pàgina següent
+next_label=Següent
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pàgina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Redueix
+zoom_out_label=Redueix
+zoom_in.title=Amplia
+zoom_in_label=Amplia
+zoom.title=Escala
+presentation_mode.title=Canvia al mode de presentació
+presentation_mode_label=Mode de presentació
+open_file.title=Obre el fitxer
+open_file_label=Obre
+print.title=Imprimeix
+print_label=Imprimeix
+download.title=Baixa
+download_label=Baixa
+bookmark.title=Vista actual (copia o obre en una finestra nova)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Eines
+tools_label=Eines
+first_page.title=Vés a la primera pàgina
+first_page_label=Vés a la primera pàgina
+last_page.title=Vés a l'última pàgina
+last_page_label=Vés a l'última pàgina
+page_rotate_cw.title=Gira cap a la dreta
+page_rotate_cw_label=Gira cap a la dreta
+page_rotate_ccw.title=Gira cap a l'esquerra
+page_rotate_ccw_label=Gira cap a l'esquerra
+
+cursor_text_select_tool.title=Habilita l'eina de selecció de text
+cursor_text_select_tool_label=Eina de selecció de text
+cursor_hand_tool.title=Habilita l'eina de mà
+cursor_hand_tool_label=Eina de mà
+
+scroll_page.title=Usa el desplaçament de pàgina
+scroll_page_label=Desplaçament de pàgina
+scroll_vertical.title=Utilitza el desplaçament vertical
+scroll_vertical_label=Desplaçament vertical
+scroll_horizontal.title=Utilitza el desplaçament horitzontal
+scroll_horizontal_label=Desplaçament horitzontal
+scroll_wrapped.title=Activa el desplaçament continu
+scroll_wrapped_label=Desplaçament continu
+
+spread_none.title=No agrupis les pàgines de dues en dues
+spread_none_label=Una sola pàgina
+spread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar
+spread_odd_label=Doble pàgina (senar)
+spread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell
+spread_even_label=Doble pàgina (parell)
+
+# Document properties dialog box
+document_properties.title=Propietats del document…
+document_properties_label=Propietats del document…
+document_properties_file_name=Nom del fitxer:
+document_properties_file_size=Mida del fitxer:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Títol:
+document_properties_author=Autor:
+document_properties_subject=Assumpte:
+document_properties_keywords=Paraules clau:
+document_properties_creation_date=Data de creació:
+document_properties_modification_date=Data de modificació:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Generador de PDF:
+document_properties_version=Versió de PDF:
+document_properties_page_count=Nombre de pàgines:
+document_properties_page_size=Mida de la pàgina:
+document_properties_page_size_unit_inches=polzades
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=apaïsat
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web ràpida:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Tanca
+
+print_progress_message=S'està preparant la impressió del document…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel·la
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Mostra/amaga la barra lateral
+toggle_sidebar_notification2.title=Mostra/amaga la barra lateral (el document conté un esquema, adjuncions o capes)
+toggle_sidebar_label=Mostra/amaga la barra lateral
+document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)
+document_outline_label=Esquema del document
+attachments.title=Mostra les adjuncions
+attachments_label=Adjuncions
+layers.title=Mostra les capes (doble clic per restablir totes les capes al seu estat per defecte)
+layers_label=Capes
+thumbs.title=Mostra les miniatures
+thumbs_label=Miniatures
+current_outline_item.title=Cerca l'element d'esquema actual
+current_outline_item_label=Element d'esquema actual
+findbar.title=Cerca al document
+findbar_label=Cerca
+
+additional_layers=Capes addicionals
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Pàgina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pàgina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la pàgina {{page}}
+
+# Find panel button title and messages
+find_input.title=Cerca
+find_input.placeholder=Cerca al document…
+find_previous.title=Cerca l'anterior coincidència de l'expressió
+find_previous_label=Anterior
+find_next.title=Cerca la següent coincidència de l'expressió
+find_next_label=Següent
+find_highlight=Ressalta-ho tot
+find_match_case_label=Distingeix entre majúscules i minúscules
+find_entire_word_label=Paraules senceres
+find_reached_top=S'ha arribat al principi del document, es continua pel final
+find_reached_bottom=S'ha arribat al final del document, es continua pel principi
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidència
+find_match_count[two]={{current}} de {{total}} coincidències
+find_match_count[few]={{current}} de {{total}} coincidències
+find_match_count[many]={{current}} de {{total}} coincidències
+find_match_count[other]={{current}} de {{total}} coincidències
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Més de {{limit}} coincidències
+find_match_count_limit[one]=Més d'{{limit}} coincidència
+find_match_count_limit[two]=Més de {{limit}} coincidències
+find_match_count_limit[few]=Més de {{limit}} coincidències
+find_match_count_limit[many]=Més de {{limit}} coincidències
+find_match_count_limit[other]=Més de {{limit}} coincidències
+find_not_found=No s'ha trobat l'expressió
+
+# Error panel labels
+error_more_info=Més informació
+error_less_info=Menys informació
+error_close=Tanca
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (muntatge: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Missatge: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fitxer: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línia: {{line}}
+rendering_error=S'ha produït un error mentre es renderitzava la pàgina.
+
+# Predefined zoom values
+page_scale_width=Amplada de la pàgina
+page_scale_fit=Ajusta la pàgina
+page_scale_auto=Zoom automàtic
+page_scale_actual=Mida real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=S'està carregant…
+loading_error=S'ha produït un error en carregar el PDF.
+invalid_file_error=El fitxer PDF no és vàlid o està malmès.
+missing_file_error=Falta el fitxer PDF.
+unexpected_response_error=Resposta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotació {{type}}]
+password_label=Introduïu la contrasenya per obrir aquest fitxer PDF.
+password_invalid=La contrasenya no és vàlida. Torneu-ho a provar.
+password_ok=D'acord
+password_cancel=Cancel·la
+
+printing_not_supported=Avís: la impressió no és plenament funcional en aquest navegador.
+printing_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo.
+web_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF.
diff --git a/app/assets/javascripts/publications/locale/cak/viewer.properties b/app/assets/javascripts/publications/locale/cak/viewer.properties
new file mode 100644
index 0000000..1828641
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/cak/viewer.properties
@@ -0,0 +1,248 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Jun kan ruxaq
+previous_label=Jun kan
+next.title=Jun chik ruxaq
+next_label=Jun chik
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Ruxaq
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=richin {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} richin {{pagesCount}})
+
+zoom_out.title=Tich'utinirisäx
+zoom_out_label=Tich'utinirisäx
+zoom_in.title=Tinimirisäx
+zoom_in_label=Tinimirisäx
+zoom.title=Sum
+presentation_mode.title=Tijal ri rub'anikil niwachin
+presentation_mode_label=Pa rub'eyal niwachin
+open_file.title=Tijaq Yakb'äl
+open_file_label=Tijaq
+print.title=Titz'ajb'äx
+print_label=Titz'ajb'äx
+download.title=Tiqasäx
+download_label=Tiqasäx
+bookmark.title=Rutz'etik wakami (tiwachib'ëx o tijaq pa jun k'ak'a' tzuwäch)
+bookmark_label=Rutzub'al wakami
+
+# Secondary toolbar and context menu
+tools.title=Samajib'äl
+tools_label=Samajib'äl
+first_page.title=Tib'e pa nab'ey ruxaq
+first_page_label=Tib'e pa nab'ey ruxaq
+last_page.title=Tib'e pa ruk'isib'äl ruxaq
+last_page_label=Tib'e pa ruk'isib'äl ruxaq
+page_rotate_cw.title=Tisutïx pan ajkiq'a'
+page_rotate_cw_label=Tisutïx pan ajkiq'a'
+page_rotate_ccw.title=Tisutïx pan ajxokon
+page_rotate_ccw_label=Tisutïx pan ajxokon
+
+cursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij
+cursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij
+cursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl
+cursor_hand_tool_label=Q'ab'aj Samajib'äl
+
+scroll_vertical.title=Tokisäx Pa'äl Q'axanem
+scroll_vertical_label=Pa'äl Q'axanem
+scroll_horizontal.title=Tokisäx Kotz'öl Q'axanem
+scroll_horizontal_label=Kotz'öl Q'axanem
+scroll_wrapped.title=Tokisäx Tzub'aj Q'axanem
+scroll_wrapped_label=Tzub'aj Q'axanem
+
+spread_none.title=Man ketun taq ruxaq pa rub'eyal wuj
+spread_none_label=Majun Rub'eyal
+spread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al
+spread_odd_label=Man K'ulaj Ta Rub'eyal
+spread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al
+spread_even_label=K'ulaj Rub'eyal
+
+# Document properties dialog box
+document_properties.title=Taq richinil wuj…
+document_properties_label=Taq richinil wuj…
+document_properties_file_name=Rub'i' yakb'äl:
+document_properties_file_size=Runimilem yakb'äl:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=B'i'aj:
+document_properties_author=B'anel:
+document_properties_subject=Taqikil:
+document_properties_keywords=Kixe'el taq tzij:
+document_properties_creation_date=Ruq'ijul xtz'uk:
+document_properties_modification_date=Ruq'ijul xjalwachïx:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Q'inonel:
+document_properties_producer=PDF b'anöy:
+document_properties_version=PDF ruwäch:
+document_properties_page_count=Jarupe' ruxaq:
+document_properties_page_size=Runimilem ri Ruxaq:
+document_properties_page_size_unit_inches=pa
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=rupalem
+document_properties_page_size_orientation_landscape=rukotz'olem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Loman wuj
+document_properties_page_size_name_legal=Taqanel tzijol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Anin Rutz'etik Ajk'amaya'l:
+document_properties_linearized_yes=Ja'
+document_properties_linearized_no=Mani
+document_properties_close=Titz'apïx
+
+print_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Tiq'at
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Tijal ri ajxikin kajtz'ik
+toggle_sidebar_notification2.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj)
+toggle_sidebar_label=Tijal ri ajxikin kajtz'ik
+document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal)
+document_outline_label=Ruch'akulal wuj
+attachments.title=Kek'ut pe ri taq taqoj
+attachments_label=Taq taqoj
+layers.title=Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi)
+layers_label=Taq kuchuj
+thumbs.title=Kek'ut pe taq ch'utiq
+thumbs_label=Koköj
+current_outline_item.title=Kekanöx Taq Ch'akulal Kik'wan Chib'äl
+current_outline_item_label=Taq Ch'akulal Kik'wan Chib'äl
+findbar.title=Tikanöx chupam ri wuj
+findbar_label=Tikanöx
+
+additional_layers=Tz'aqat ta Kuchuj
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Ruxaq {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Ruxaq {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}}
+
+# Find panel button title and messages
+find_input.title=Tikanöx
+find_input.placeholder=Tikanöx pa wuj…
+find_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj
+find_previous_label=Jun kan
+find_next.title=Tib'e pa ri jun chik pajtzij xilitäj
+find_next_label=Jun chik
+find_highlight=Tiya' retal ronojel
+find_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib'
+find_entire_word_label=Tz'aqät taq tzij
+find_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl
+find_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} richin {{total}} nuk'äm ri'
+find_match_count[two]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[few]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[many]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[other]={{current}} richin {{total}} nikik'äm ki'
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri'
+find_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki'
+find_not_found=Man xilitäj ta ri pajtzij
+
+# Error panel labels
+error_more_info=Ch'aqa' chik rutzijol
+error_less_info=Jub'a' ok rutzijol
+error_close=Titz'apïx
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Uqxa'n: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Tzub'aj: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Yakb'äl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=B'ey: {{line}}
+rendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq.
+
+# Predefined zoom values
+page_scale_width=Ruwa ruxaq
+page_scale_fit=Tinuk' ruxaq
+page_scale_auto=Yonil chi nimilem
+page_scale_actual=Runimilem Wakami
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Nisamäj…
+loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF .
+invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl.
+missing_file_error=Man xilitäj ta ri PDF yakb'äl.
+unexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Tz'ib'anïk]
+password_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF.
+password_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik.
+password_ok=Ütz
+password_cancel=Tiq'at
+
+printing_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'.
+printing_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx.
+web_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk
diff --git a/app/assets/javascripts/publications/locale/ckb/viewer.properties b/app/assets/javascripts/publications/locale/ckb/viewer.properties
new file mode 100644
index 0000000..b30cb76
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ckb/viewer.properties
@@ -0,0 +1,233 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=پەڕەی پێشوو
+previous_label=پێشوو
+next.title=پەڕەی دوواتر
+next_label=دوواتر
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=پەرە
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=لە {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} لە {{pagesCount}})
+
+zoom_out.title=ڕۆچوونی
+zoom_out_label=ڕۆچوونی
+zoom_in.title=هێنانەپێش
+zoom_in_label=هێنانەپێش
+zoom.title=زووم
+presentation_mode.title=گۆڕین بۆ دۆخی پێشکەشکردن
+presentation_mode_label=دۆخی پێشکەشکردن
+open_file.title=پەڕگە بکەرەوە
+open_file_label=کردنەوە
+print.title=چاپکردن
+print_label=چاپکردن
+download.title=داگرتن
+download_label=داگرتن
+bookmark.title=پێشبینینی ئێستا(لەبەریبگرەوە یان پەنجەرەیەکی نوێ بکەرەوە)
+bookmark_label=پیشبینینی ئێستا
+
+# Secondary toolbar and context menu
+tools.title=ئامرازەکان
+tools_label=ئامرازەکان
+first_page.title=برۆ بۆ یەکەم پەڕە
+first_page_label=بڕۆ بۆ یەکەم پەڕە
+last_page.title=بڕۆ بۆ کۆتا پەڕە
+last_page_label=بڕۆ بۆ کۆتا پەڕە
+page_rotate_cw.title=ئاڕاستەی میلی کاتژمێر
+page_rotate_cw_label=ئاڕاستەی میلی کاتژمێر
+page_rotate_ccw.title=پێچەوانەی میلی کاتژمێر
+page_rotate_ccw_label=پێچەوانەی میلی کاتژمێر
+
+cursor_text_select_tool.title=توڵامرازی نیشانکەری دەق چالاک بکە
+cursor_text_select_tool_label=توڵامرازی نیشانکەری دەق
+cursor_hand_tool.title=توڵامرازی دەستی چالاک بکە
+cursor_hand_tool_label=توڵامرازی دەستی
+
+scroll_vertical.title=ناردنی ئەستوونی بەکاربێنە
+scroll_vertical_label=ناردنی ئەستوونی
+scroll_horizontal.title=ناردنی ئاسۆیی بەکاربێنە
+scroll_horizontal_label=ناردنی ئاسۆیی
+scroll_wrapped.title=ناردنی لوولکراو بەکاربێنە
+scroll_wrapped_label=ناردنی لوولکراو
+
+
+# Document properties dialog box
+document_properties.title=تایبەتمەندییەکانی بەڵگەنامە...
+document_properties_label=تایبەتمەندییەکانی بەڵگەنامە...
+document_properties_file_name=ناوی پەڕگە:
+document_properties_file_size=قەبارەی پەڕگە:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} کب ({{size_b}} بایت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} مب ({{size_b}} بایت)
+document_properties_title=سەردێڕ:
+document_properties_author=نووسەر
+document_properties_subject=بابەت:
+document_properties_keywords=کلیلەوشە:
+document_properties_creation_date=بەرواری درووستکردن:
+document_properties_modification_date=بەرواری دەستکاریکردن:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=درووستکەر:
+document_properties_producer=بەرهەمهێنەری PDF:
+document_properties_version=وەشانی PDF:
+document_properties_page_count=ژمارەی پەرەکان:
+document_properties_page_size=قەبارەی پەڕە:
+document_properties_page_size_unit_inches=ئینچ
+document_properties_page_size_unit_millimeters=ملم
+document_properties_page_size_orientation_portrait=پۆرترەیت(درێژ)
+document_properties_page_size_orientation_landscape=پانیی
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=نامە
+document_properties_page_size_name_legal=یاسایی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=پیشاندانی وێبی خێرا:
+document_properties_linearized_yes=بەڵێ
+document_properties_linearized_no=نەخێر
+document_properties_close=داخستن
+
+print_progress_message=بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=پاشگەزبوونەوە
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=لاتەنیشت پیشاندان/شاردنەوە
+toggle_sidebar_label=لاتەنیشت پیشاندان/شاردنەوە
+document_outline_label=سنووری چوارچێوە
+attachments.title=پاشکۆکان پیشان بدە
+attachments_label=پاشکۆکان
+layers_label=چینەکان
+thumbs.title=وێنۆچکە پیشان بدە
+thumbs_label=وێنۆچکە
+findbar.title=لە بەڵگەنامە بگەرێ
+findbar_label=دۆزینەوە
+
+additional_layers=چینی زیاتر
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=پەڕەی {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=وێنۆچکەی پەڕەی {{page}}
+
+# Find panel button title and messages
+find_input.title=دۆزینەوە
+find_input.placeholder=لە بەڵگەنامە بگەرێ...
+find_previous.title=هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا
+find_previous_label=پێشوو
+find_next.title=هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا
+find_next_label=دوواتر
+find_highlight=هەمووی نیشانە بکە
+find_match_case_label=دۆخی لەیەکچوون
+find_entire_word_label=هەموو وشەکان
+find_reached_top=گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد
+find_reached_bottom=گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[two]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[few]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[many]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[other]={{current}} لە کۆی {{total}} لەیەکچوو
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[one]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[two]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[few]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[many]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[other]=زیاتر لە {{limit}} لەیەکچوو
+find_not_found=نووسین نەدۆزرایەوە
+
+# Error panel labels
+error_more_info=زانیاری زیاتر
+error_less_info=زانیاری کەمتر
+error_close=داخستن
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پەیام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=لەسەریەک: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=پەڕگە: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=هێڵ: {{line}}
+rendering_error=هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە.
+
+# Predefined zoom values
+page_scale_width=پانی پەڕە
+page_scale_fit=پڕبوونی پەڕە
+page_scale_auto=زوومی خۆکار
+page_scale_actual=قەبارەی ڕاستی
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=هەڵەیەک ڕوویدا لە کاتی بارکردنی PDF.
+invalid_file_error=پەڕگەی pdf تێکچووە یان نەگونجاوە.
+missing_file_error=پەڕگەی pdf بوونی نیە.
+unexpected_response_error=وەڵامی ڕاژەخوازی نەخوازراو.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} سەرنج]
+password_label=وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf.
+password_invalid=وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە.
+password_ok=باشە
+password_cancel=پاشگەزبوونەوە
+
+printing_not_supported=ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە.
+printing_not_ready=ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن.
+web_fonts_disabled=جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت.
diff --git a/app/assets/javascripts/publications/locale/cs/viewer.properties b/app/assets/javascripts/publications/locale/cs/viewer.properties
new file mode 100644
index 0000000..73bffe7
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/cs/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Přejde na předchozí stránku
+previous_label=Předchozí
+next.title=Přejde na následující stránku
+next_label=Další
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stránka
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Zmenší velikost
+zoom_out_label=Zmenšit
+zoom_in.title=Zvětší velikost
+zoom_in_label=Zvětšit
+zoom.title=Nastaví velikost
+presentation_mode.title=Přepne do režimu prezentace
+presentation_mode_label=Režim prezentace
+open_file.title=Otevře soubor
+open_file_label=Otevřít
+print.title=Vytiskne dokument
+print_label=Vytisknout
+download.title=Stáhne dokument
+download_label=Stáhnout
+bookmark.title=Současný pohled (kopírovat nebo otevřít v novém okně)
+bookmark_label=Současný pohled
+
+# Secondary toolbar and context menu
+tools.title=Nástroje
+tools_label=Nástroje
+first_page.title=Přejde na první stránku
+first_page_label=Přejít na první stránku
+last_page.title=Přejde na poslední stránku
+last_page_label=Přejít na poslední stránku
+page_rotate_cw.title=Otočí po směru hodin
+page_rotate_cw_label=Otočit po směru hodin
+page_rotate_ccw.title=Otočí proti směru hodin
+page_rotate_ccw_label=Otočit proti směru hodin
+
+cursor_text_select_tool.title=Povolí výběr textu
+cursor_text_select_tool_label=Výběr textu
+cursor_hand_tool.title=Povolí nástroj ručička
+cursor_hand_tool_label=Nástroj ručička
+
+scroll_page.title=Posouvat po stránkách
+scroll_page_label=Posouvání po stránkách
+scroll_vertical.title=Použít svislé posouvání
+scroll_vertical_label=Svislé posouvání
+scroll_horizontal.title=Použít vodorovné posouvání
+scroll_horizontal_label=Vodorovné posouvání
+scroll_wrapped.title=Použít postupné posouvání
+scroll_wrapped_label=Postupné posouvání
+
+spread_none.title=Nesdružovat stránky
+spread_none_label=Žádné sdružení
+spread_odd.title=Sdruží stránky s umístěním lichých vlevo
+spread_odd_label=Sdružení stránek (liché vlevo)
+spread_even.title=Sdruží stránky s umístěním sudých vlevo
+spread_even_label=Sdružení stránek (sudé vlevo)
+
+# Document properties dialog box
+document_properties.title=Vlastnosti dokumentu…
+document_properties_label=Vlastnosti dokumentu…
+document_properties_file_name=Název souboru:
+document_properties_file_size=Velikost souboru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtů)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtů)
+document_properties_title=Název stránky:
+document_properties_author=Autor:
+document_properties_subject=Předmět:
+document_properties_keywords=Klíčová slova:
+document_properties_creation_date=Datum vytvoření:
+document_properties_modification_date=Datum úpravy:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Vytvořil:
+document_properties_producer=Tvůrce PDF:
+document_properties_version=Verze PDF:
+document_properties_page_count=Počet stránek:
+document_properties_page_size=Velikost stránky:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=na výšku
+document_properties_page_size_orientation_landscape=na šířku
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Dopis
+document_properties_page_size_name_legal=Právní dokument
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rychlé zobrazování z webu:
+document_properties_linearized_yes=Ano
+document_properties_linearized_no=Ne
+document_properties_close=Zavřít
+
+print_progress_message=Příprava dokumentu pro tisk…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Zrušit
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Postranní lišta
+toggle_sidebar_notification2.title=Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy)
+toggle_sidebar_label=Postranní lišta
+document_outline.title=Zobrazí osnovu dokumentu (dvojité klepnutí rozbalí/sbalí všechny položky)
+document_outline_label=Osnova dokumentu
+attachments.title=Zobrazí přílohy
+attachments_label=Přílohy
+layers.title=Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu)
+layers_label=Vrstvy
+thumbs.title=Zobrazí náhledy
+thumbs_label=Náhledy
+current_outline_item.title=Najít aktuální položku v osnově
+current_outline_item_label=Aktuální položka v osnově
+findbar.title=Najde v dokumentu
+findbar_label=Najít
+
+additional_layers=Další vrstvy
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Strana {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Náhled strany {{page}}
+
+# Find panel button title and messages
+find_input.title=Najít
+find_input.placeholder=Najít v dokumentu…
+find_previous.title=Najde předchozí výskyt hledaného textu
+find_previous_label=Předchozí
+find_next.title=Najde další výskyt hledaného textu
+find_next_label=Další
+find_highlight=Zvýraznit
+find_match_case_label=Rozlišovat velikost
+find_match_diacritics_label=Rozlišovat diakritiku
+find_entire_word_label=Celá slova
+find_reached_top=Dosažen začátek dokumentu, pokračuje se od konce
+find_reached_bottom=Dosažen konec dokumentu, pokračuje se od začátku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}}. z {{total}} výskytu
+find_match_count[two]={{current}}. z {{total}} výskytů
+find_match_count[few]={{current}}. z {{total}} výskytů
+find_match_count[many]={{current}}. z {{total}} výskytů
+find_match_count[other]={{current}}. z {{total}} výskytů
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Více než {{limit}} výskytů
+find_match_count_limit[one]=Více než {{limit}} výskyt
+find_match_count_limit[two]=Více než {{limit}} výskyty
+find_match_count_limit[few]=Více než {{limit}} výskyty
+find_match_count_limit[many]=Více než {{limit}} výskytů
+find_match_count_limit[other]=Více než {{limit}} výskytů
+find_not_found=Hledaný text nenalezen
+
+# Error panel labels
+error_more_info=Více informací
+error_less_info=Méně informací
+error_close=Zavřít
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (sestavení: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Zpráva: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Zásobník: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Soubor: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Řádek: {{line}}
+rendering_error=Při vykreslování stránky nastala chyba.
+
+# Predefined zoom values
+page_scale_width=Podle šířky
+page_scale_fit=Podle výšky
+page_scale_auto=Automatická velikost
+page_scale_actual=Skutečná velikost
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Načítání…
+loading_error=Při nahrávání PDF nastala chyba.
+invalid_file_error=Neplatný nebo chybný soubor PDF.
+missing_file_error=Chybí soubor PDF.
+unexpected_response_error=Neočekávaná odpověď serveru.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotace typu {{type}}]
+password_label=Pro otevření PDF souboru vložte heslo.
+password_invalid=Neplatné heslo. Zkuste to znovu.
+password_ok=OK
+password_cancel=Zrušit
+
+printing_not_supported=Upozornění: Tisk není v tomto prohlížeči plně podporován.
+printing_not_ready=Upozornění: Dokument PDF není kompletně načten.
+web_fonts_disabled=Webová písma jsou zakázána, proto není možné použít vložená písma PDF.
diff --git a/app/assets/javascripts/publications/locale/cy/viewer.properties b/app/assets/javascripts/publications/locale/cy/viewer.properties
new file mode 100644
index 0000000..9ede32a
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/cy/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Tudalen Flaenorol
+previous_label=Blaenorol
+next.title=Tudalen Nesaf
+next_label=Nesaf
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Tudalen
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=o {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} o {{pagesCount}})
+
+zoom_out.title=Chwyddo Allan
+zoom_out_label=Chwyddo Allan
+zoom_in.title=Chwyddo Mewn
+zoom_in_label=Chwyddo Mewn
+zoom.title=Chwyddo
+presentation_mode.title=Newid i'r Modd Cyflwyno
+presentation_mode_label=Modd Cyflwyno
+open_file.title=Agor Ffeil
+open_file_label=Agor
+print.title=Argraffu
+print_label=Argraffu
+download.title=Llwyth
+download_label=Llwytho i Lawr
+bookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd)
+bookmark_label=Golwg Gyfredol
+
+# Secondary toolbar and context menu
+tools.title=Offer
+tools_label=Offer
+first_page.title=Mynd i'r Dudalen Gyntaf
+first_page_label=Mynd i'r Dudalen Gyntaf
+last_page.title=Mynd i'r Dudalen Olaf
+last_page_label=Mynd i'r Dudalen Olaf
+page_rotate_cw.title=Cylchdroi Clocwedd
+page_rotate_cw_label=Cylchdroi Clocwedd
+page_rotate_ccw.title=Cylchdroi Gwrthglocwedd
+page_rotate_ccw_label=Cylchdroi Gwrthglocwedd
+
+cursor_text_select_tool.title=Galluogi Dewis Offeryn Testun
+cursor_text_select_tool_label=Offeryn Dewis Testun
+cursor_hand_tool.title=Galluogi Offeryn Llaw
+cursor_hand_tool_label=Offeryn Llaw
+
+scroll_page.title=Defnyddio Sgrolio Tudalen
+scroll_page_label=Sgrolio Tudalen
+scroll_vertical.title=Defnyddio Sgrolio Fertigol
+scroll_vertical_label=Sgrolio Fertigol
+scroll_horizontal.title=Defnyddio Sgrolio Llorweddol
+scroll_horizontal_label=Sgrolio Llorweddol
+scroll_wrapped.title=Defnyddio Sgrolio Amlapio
+scroll_wrapped_label=Sgrolio Amlapio
+
+spread_none.title=Peidio uno trawsdaleniadau
+spread_none_label=Dim Trawsdaleniadau
+spread_odd.title=Uno trawsdaleniadau gan gychwyn gyda thudalennau odrif
+spread_odd_label=Trawsdaleniadau Odrif
+spread_even.title=Uno trawsdaleniadau gan gychwyn gyda thudalennau eilrif
+spread_even_label=Trawsdaleniadau Eilrif
+
+# Document properties dialog box
+document_properties.title=Priodweddau Dogfen…
+document_properties_label=Priodweddau Dogfen…
+document_properties_file_name=Enw ffeil:
+document_properties_file_size=Maint ffeil:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} beit)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} beit)
+document_properties_title=Teitl:
+document_properties_author=Awdur:
+document_properties_subject=Pwnc:
+document_properties_keywords=Allweddair:
+document_properties_creation_date=Dyddiad Creu:
+document_properties_modification_date=Dyddiad Addasu:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Crewr:
+document_properties_producer=Cynhyrchydd PDF:
+document_properties_version=Fersiwn PDF:
+document_properties_page_count=Cyfrif Tudalen:
+document_properties_page_size=Maint Tudalen:
+document_properties_page_size_unit_inches=o fewn
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portread
+document_properties_page_size_orientation_landscape=tirlun
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Llythyr
+document_properties_page_size_name_legal=Cyfreithiol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Golwg Gwe Cyflym:
+document_properties_linearized_yes=Iawn
+document_properties_linearized_no=Na
+document_properties_close=Cau
+
+print_progress_message=Paratoi dogfen ar gyfer ei hargraffu…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Diddymu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toglo'r Bar Ochr
+toggle_sidebar_notification2.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau)
+toggle_sidebar_label=Toglo'r Bar Ochr
+document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem)
+document_outline_label=Amlinelliad Dogfen
+attachments.title=Dangos Atodiadau
+attachments_label=Atodiadau
+layers.title=Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig)
+layers_label=Haenau
+thumbs.title=Dangos Lluniau Bach
+thumbs_label=Lluniau Bach
+current_outline_item.title=Canfod yr Eitem Amlinellol Gyfredol
+current_outline_item_label=Yr Eitem Amlinellol Gyfredol
+findbar.title=Canfod yn y Ddogfen
+findbar_label=Canfod
+
+additional_layers=Haenau Ychwanegol
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Tudalen {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Tudalen {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Llun Bach Tudalen {{page}}
+
+# Find panel button title and messages
+find_input.title=Canfod
+find_input.placeholder=Canfod yn y ddogfen…
+find_previous.title=Canfod enghraifft flaenorol o'r ymadrodd
+find_previous_label=Blaenorol
+find_next.title=Canfod enghraifft nesaf yr ymadrodd
+find_next_label=Nesaf
+find_highlight=Amlygu popeth
+find_match_case_label=Cydweddu maint
+find_match_diacritics_label=Diacritigau Cyfatebol
+find_entire_word_label=Geiriau cyfan
+find_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod
+find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} o {{total}} cydweddiad
+find_match_count[two]={{current}} o {{total}} cydweddiad
+find_match_count[few]={{current}} o {{total}} cydweddiad
+find_match_count[many]={{current}} o {{total}} cydweddiad
+find_match_count[other]={{current}} o {{total}} cydweddiad
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[one]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[two]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[few]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[many]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[other]=Mwy na {{limit}} cydweddiad
+find_not_found=Heb ganfod ymadrodd
+
+# Error panel labels
+error_more_info=Rhagor o Wybodaeth
+error_less_info=Llai o wybodaeth
+error_close=Cau
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Neges: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stac: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ffeil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Llinell: {{line}}
+rendering_error=Digwyddodd gwall wrth adeiladu'r dudalen.
+
+# Predefined zoom values
+page_scale_width=Lled Tudalen
+page_scale_fit=Ffit Tudalen
+page_scale_auto=Chwyddo Awtomatig
+page_scale_actual=Maint Gwirioneddol
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Yn llwytho…
+loading_error=Digwyddodd gwall wrth lwytho'r PDF.
+invalid_file_error=Ffeil PDF annilys neu llwgr.
+missing_file_error=Ffeil PDF coll.
+unexpected_response_error=Ymateb annisgwyl gan y gweinydd.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anodiad {{type}} ]
+password_label=Rhowch gyfrinair i agor y PDF.
+password_invalid=Cyfrinair annilys. Ceisiwch eto.
+password_ok=Iawn
+password_cancel=Diddymu
+
+printing_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr.
+printing_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu.
+web_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig.
diff --git a/app/assets/javascripts/publications/locale/da/viewer.properties b/app/assets/javascripts/publications/locale/da/viewer.properties
new file mode 100644
index 0000000..a67fedc
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/da/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Forrige side
+previous_label=Forrige
+next.title=Næste side
+next_label=Næste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=af {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} af {{pagesCount}})
+
+zoom_out.title=Zoom ud
+zoom_out_label=Zoom ud
+zoom_in.title=Zoom ind
+zoom_in_label=Zoom ind
+zoom.title=Zoom
+presentation_mode.title=Skift til fuldskærmsvisning
+presentation_mode_label=Fuldskærmsvisning
+open_file.title=Åbn fil
+open_file_label=Åbn
+print.title=Udskriv
+print_label=Udskriv
+download.title=Hent
+download_label=Hent
+bookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue)
+bookmark_label=Aktuel visning
+
+# Secondary toolbar and context menu
+tools.title=Funktioner
+tools_label=Funktioner
+first_page.title=Gå til første side
+first_page_label=Gå til første side
+last_page.title=Gå til sidste side
+last_page_label=Gå til sidste side
+page_rotate_cw.title=Roter med uret
+page_rotate_cw_label=Roter med uret
+page_rotate_ccw.title=Roter mod uret
+page_rotate_ccw_label=Roter mod uret
+
+cursor_text_select_tool.title=Aktiver markeringsværktøj
+cursor_text_select_tool_label=Markeringsværktøj
+cursor_hand_tool.title=Aktiver håndværktøj
+cursor_hand_tool_label=Håndværktøj
+
+scroll_page.title=Brug sidescrolling
+scroll_page_label=Sidescrolling
+scroll_vertical.title=Brug vertikal scrolling
+scroll_vertical_label=Vertikal scrolling
+scroll_horizontal.title=Brug horisontal scrolling
+scroll_horizontal_label=Horisontal scrolling
+scroll_wrapped.title=Brug ombrudt scrolling
+scroll_wrapped_label=Ombrudt scrolling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltsider
+spread_odd.title=Vis opslag med ulige sidenumre til venstre
+spread_odd_label=Opslag med forside
+spread_even.title=Vis opslag med lige sidenumre til venstre
+spread_even_label=Opslag uden forside
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaber…
+document_properties_label=Dokumentegenskaber…
+document_properties_file_name=Filnavn:
+document_properties_file_size=Filstørrelse:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Forfatter:
+document_properties_subject=Emne:
+document_properties_keywords=Nøgleord:
+document_properties_creation_date=Oprettet:
+document_properties_modification_date=Redigeret:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Program:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-version:
+document_properties_page_count=Antal sider:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stående
+document_properties_page_size_orientation_landscape=liggende
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hurtig web-visning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nej
+document_properties_close=Luk
+
+print_progress_message=Forbereder dokument til udskrivning…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annuller
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå sidepanel til eller fra
+toggle_sidebar_notification2.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag)
+toggle_sidebar_label=Slå sidepanel til eller fra
+document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer)
+document_outline_label=Dokument-disposition
+attachments.title=Vis vedhæftede filer
+attachments_label=Vedhæftede filer
+layers.title=Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden)
+layers_label=Lag
+thumbs.title=Vis miniaturer
+thumbs_label=Miniaturer
+current_outline_item.title=Find det aktuelle dispositions-element
+current_outline_item_label=Aktuelt dispositions-element
+findbar.title=Find i dokument
+findbar_label=Find
+
+additional_layers=Yderligere lag
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniature af side {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find i dokument…
+find_previous.title=Find den forrige forekomst
+find_previous_label=Forrige
+find_next.title=Find den næste forekomst
+find_next_label=Næste
+find_highlight=Fremhæv alle
+find_match_case_label=Forskel på store og små bogstaver
+find_entire_word_label=Hele ord
+find_reached_top=Toppen af siden blev nået, fortsatte fra bunden
+find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} af {{total}} forekomst
+find_match_count[two]={{current}} af {{total}} forekomster
+find_match_count[few]={{current}} af {{total}} forekomster
+find_match_count[many]={{current}} af {{total}} forekomster
+find_match_count[other]={{current}} af {{total}} forekomster
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mere end {{limit}} forekomster
+find_match_count_limit[one]=Mere end {{limit}} forekomst
+find_match_count_limit[two]=Mere end {{limit}} forekomster
+find_match_count_limit[few]=Mere end {{limit}} forekomster
+find_match_count_limit[many]=Mere end {{limit}} forekomster
+find_match_count_limit[other]=Mere end {{limit}} forekomster
+find_not_found=Der blev ikke fundet noget
+
+# Error panel labels
+error_more_info=Mere information
+error_less_info=Mindre information
+error_close=Luk
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Fejlmeddelelse: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=Der opstod en fejl ved generering af siden.
+
+# Predefined zoom values
+page_scale_width=Sidebredde
+page_scale_fit=Tilpas til side
+page_scale_auto=Automatisk zoom
+page_scale_actual=Faktisk størrelse
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Indlæser…
+loading_error=Der opstod en fejl ved indlæsning af PDF-filen.
+invalid_file_error=PDF-filen er ugyldig eller ødelagt.
+missing_file_error=Manglende PDF-fil.
+unexpected_response_error=Uventet svar fra serveren.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}kommentar]
+password_label=Angiv adgangskode til at åbne denne PDF-fil.
+password_invalid=Ugyldig adgangskode. Prøv igen.
+password_ok=OK
+password_cancel=Fortryd
+
+printing_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren.
+printing_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning.
+web_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes.
diff --git a/app/assets/javascripts/publications/locale/de/viewer.properties b/app/assets/javascripts/publications/locale/de/viewer.properties
new file mode 100644
index 0000000..1cda13f
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/de/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Eine Seite zurück
+previous_label=Zurück
+next.title=Eine Seite vor
+next_label=Vor
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Seite
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=von {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} von {{pagesCount}})
+
+zoom_out.title=Verkleinern
+zoom_out_label=Verkleinern
+zoom_in.title=Vergrößern
+zoom_in_label=Vergrößern
+zoom.title=Zoom
+presentation_mode.title=In Präsentationsmodus wechseln
+presentation_mode_label=Präsentationsmodus
+open_file.title=Datei öffnen
+open_file_label=Öffnen
+print.title=Drucken
+print_label=Drucken
+download.title=Dokument speichern
+download_label=Speichern
+bookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster)
+bookmark_label=Aktuelle Ansicht
+
+# Secondary toolbar and context menu
+tools.title=Werkzeuge
+tools_label=Werkzeuge
+first_page.title=Erste Seite anzeigen
+first_page_label=Erste Seite anzeigen
+last_page.title=Letzte Seite anzeigen
+last_page_label=Letzte Seite anzeigen
+page_rotate_cw.title=Im Uhrzeigersinn drehen
+page_rotate_cw_label=Im Uhrzeigersinn drehen
+page_rotate_ccw.title=Gegen Uhrzeigersinn drehen
+page_rotate_ccw_label=Gegen Uhrzeigersinn drehen
+
+cursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren
+cursor_text_select_tool_label=Textauswahl-Werkzeug
+cursor_hand_tool.title=Hand-Werkzeug aktivieren
+cursor_hand_tool_label=Hand-Werkzeug
+
+scroll_page.title=Seiten einzeln anordnen
+scroll_page_label=Einzelseitenanordnung
+scroll_vertical.title=Seiten übereinander anordnen
+scroll_vertical_label=Vertikale Seitenanordnung
+scroll_horizontal.title=Seiten nebeneinander anordnen
+scroll_horizontal_label=Horizontale Seitenanordnung
+scroll_wrapped.title=Seiten neben- und übereinander anordnen, abhängig vom Platz
+scroll_wrapped_label=Kombinierte Seitenanordnung
+
+spread_none.title=Seiten nicht nebeneinander anzeigen
+spread_none_label=Einzelne Seiten
+spread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen
+spread_odd_label=Ungerade + gerade Seite
+spread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen
+spread_even_label=Gerade + ungerade Seite
+
+# Document properties dialog box
+document_properties.title=Dokumenteigenschaften
+document_properties_label=Dokumenteigenschaften…
+document_properties_file_name=Dateiname:
+document_properties_file_size=Dateigröße:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} Bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} Bytes)
+document_properties_title=Titel:
+document_properties_author=Autor:
+document_properties_subject=Thema:
+document_properties_keywords=Stichwörter:
+document_properties_creation_date=Erstelldatum:
+document_properties_modification_date=Bearbeitungsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Anwendung:
+document_properties_producer=PDF erstellt mit:
+document_properties_version=PDF-Version:
+document_properties_page_count=Seitenzahl:
+document_properties_page_size=Seitengröße:
+document_properties_page_size_unit_inches=Zoll
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Hochformat
+document_properties_page_size_orientation_landscape=Querformat
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Schnelle Webanzeige:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nein
+document_properties_close=Schließen
+
+print_progress_message=Dokument wird für Drucken vorbereitet…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Abbrechen
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sidebar umschalten
+toggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen)
+toggle_sidebar_label=Sidebar umschalten
+document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)
+document_outline_label=Dokumentstruktur
+attachments.title=Anhänge anzeigen
+attachments_label=Anhänge
+layers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen)
+layers_label=Ebenen
+thumbs.title=Miniaturansichten anzeigen
+thumbs_label=Miniaturansichten
+current_outline_item.title=Aktuelles Struktur-Element finden
+current_outline_item_label=Aktuelles Struktur-Element
+findbar.title=Dokument durchsuchen
+findbar_label=Suchen
+
+additional_layers=Zusätzliche Ebenen
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Seite {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Seite {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturansicht von Seite {{page}}
+
+# Find panel button title and messages
+find_input.title=Suchen
+find_input.placeholder=Im Dokument suchen…
+find_previous.title=Vorheriges Vorkommen des Suchbegriffs finden
+find_previous_label=Zurück
+find_next.title=Nächstes Vorkommen des Suchbegriffs finden
+find_next_label=Weiter
+find_highlight=Alle hervorheben
+find_match_case_label=Groß-/Kleinschreibung beachten
+find_entire_word_label=Ganze Wörter
+find_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort
+find_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} von {{total}} Übereinstimmung
+find_match_count[two]={{current}} von {{total}} Übereinstimmungen
+find_match_count[few]={{current}} von {{total}} Übereinstimmungen
+find_match_count[many]={{current}} von {{total}} Übereinstimmungen
+find_match_count[other]={{current}} von {{total}} Übereinstimmungen
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung
+find_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen
+find_not_found=Suchbegriff nicht gefunden
+
+# Error panel labels
+error_more_info=Mehr Informationen
+error_less_info=Weniger Informationen
+error_close=Schließen
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js Version {{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Nachricht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Aufrufliste: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datei: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Zeile: {{line}}
+rendering_error=Beim Darstellen der Seite trat ein Fehler auf.
+
+# Predefined zoom values
+page_scale_width=Seitenbreite
+page_scale_fit=Seitengröße
+page_scale_auto=Automatischer Zoom
+page_scale_actual=Originalgröße
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Wird geladen…
+loading_error=Beim Laden der PDF-Datei trat ein Fehler auf.
+invalid_file_error=Ungültige oder beschädigte PDF-Datei
+missing_file_error=Fehlende PDF-Datei
+unexpected_response_error=Unerwartete Antwort des Servers
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anlage: {{type}}]
+password_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein.
+password_invalid=Falsches Passwort. Bitte versuchen Sie es erneut.
+password_ok=OK
+password_cancel=Abbrechen
+
+printing_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt.
+printing_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen.
+web_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden.
diff --git a/app/assets/javascripts/publications/locale/dsb/viewer.properties b/app/assets/javascripts/publications/locale/dsb/viewer.properties
new file mode 100644
index 0000000..6eecd63
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/dsb/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pjerwjejšny bok
+previous_label=Slědk
+next.title=Pśiducy bok
+next_label=Dalej
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Bok
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pómjeńšyś
+zoom_out_label=Pómjeńšyś
+zoom_in.title=Pówětšyś
+zoom_in_label=Pówětšyś
+zoom.title=Skalěrowanje
+presentation_mode.title=Do prezentaciskego modusa pśejś
+presentation_mode_label=Prezentaciski modus
+open_file.title=Dataju wócyniś
+open_file_label=Wócyniś
+print.title=Śišćaś
+print_label=Śišćaś
+download.title=Ześěgnuś
+download_label=Ześěgnuś
+bookmark.title=Aktualny naglěd (kopěrowaś abo w nowem woknje wócyniś)
+bookmark_label=Aktualny naglěd
+
+# Secondary toolbar and context menu
+tools.title=Rědy
+tools_label=Rědy
+first_page.title=K prědnemu bokoju
+first_page_label=K prědnemu bokoju
+last_page.title=K slědnemu bokoju
+last_page_label=K slědnemu bokoju
+page_rotate_cw.title=Wobwjertnuś ako špěra źo
+page_rotate_cw_label=Wobwjertnuś ako špěra źo
+page_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo
+page_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo
+
+cursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś
+cursor_text_select_tool_label=Rěd za wuběranje teksta
+cursor_hand_tool.title=Rucny rěd zmóžniś
+cursor_hand_tool_label=Rucny rěd
+
+scroll_page.title=Kulanje boka wužywaś
+scroll_page_label=Kulanje boka
+scroll_vertical.title=Wertikalne suwanje wužywaś
+scroll_vertical_label=Wertikalne suwanje
+scroll_horizontal.title=Horicontalne suwanje wužywaś
+scroll_horizontal_label=Horicontalne suwanje
+scroll_wrapped.title=Pózlažke suwanje wužywaś
+scroll_wrapped_label=Pózlažke suwanje
+
+spread_none.title=Boki njezwězaś
+spread_none_label=Žeden dwójny bok
+spread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś
+spread_odd_label=Njerowne boki
+spread_even.title=Boki zachopinajucy z rownymi bokami zwězaś
+spread_even_label=Rowne boki
+
+# Document properties dialog box
+document_properties.title=Dokumentowe kakosći…
+document_properties_label=Dokumentowe kakosći…
+document_properties_file_name=Mě dataje:
+document_properties_file_size=Wjelikosć dataje:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
+document_properties_title=Titel:
+document_properties_author=Awtor:
+document_properties_subject=Tema:
+document_properties_keywords=Klucowe słowa:
+document_properties_creation_date=Datum napóranja:
+document_properties_modification_date=Datum změny:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Awtor:
+document_properties_producer=PDF-gótowaŕ:
+document_properties_version=PDF-wersija:
+document_properties_page_count=Licba bokow:
+document_properties_page_size=Wjelikosć boka:
+document_properties_page_size_unit_inches=col
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=wusoki format
+document_properties_page_size_orientation_landscape=prěcny format
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Jo
+document_properties_linearized_no=Ně
+document_properties_close=Zacyniś
+
+print_progress_message=Dokument pśigótujo se za śišćanje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Pśetergnuś
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Bócnicu pokazaś/schowaś
+toggle_sidebar_notification2.title=Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo)
+toggle_sidebar_label=Bócnicu pokazaś/schowaś
+document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali)
+document_outline_label=Dokumentowa struktura
+attachments.title=Pśidanki pokazaś
+attachments_label=Pśidanki
+layers.title=Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił)
+layers_label=Warstwy
+thumbs.title=Miniatury pokazaś
+thumbs_label=Miniatury
+current_outline_item.title=Aktualny rozrědowański zapisk pytaś
+current_outline_item_label=Aktualny rozrědowański zapisk
+findbar.title=W dokumenśe pytaś
+findbar_label=Pytaś
+
+additional_layers=Dalšne warstwy
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Bok {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Bok {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura boka {{page}}
+
+# Find panel button title and messages
+find_input.title=Pytaś
+find_input.placeholder=W dokumenśe pytaś…
+find_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś
+find_previous_label=Slědk
+find_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś
+find_next_label=Dalej
+find_highlight=Wšykne wuzwignuś
+find_match_case_label=Na wjelikopisanje źiwaś
+find_match_diacritics_label=Diakritiske znamuška wužywaś
+find_entire_word_label=Cełe słowa
+find_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom
+find_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} z {{total}} wótpowědnika
+find_match_count[two]={{current}} z {{total}} wótpowědnikowu
+find_match_count[few]={{current}} z {{total}} wótpowědnikow
+find_match_count[many]={{current}} z {{total}} wótpowědnikow
+find_match_count[other]={{current}} z {{total}} wótpowědnikow
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow
+find_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik
+find_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika
+find_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki
+find_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow
+find_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow
+find_not_found=Pytański wuraz njejo se namakał
+
+# Error panel labels
+error_more_info=Wěcej informacijow
+error_less_info=Mjenjej informacijow
+error_close=Zacyniś
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Powěźenka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Lisćina zawołanjow: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dataja: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Smužka: {{line}}
+rendering_error=Pśi zwobraznjanju boka jo zmólka nastała.
+
+# Predefined zoom values
+page_scale_width=Šyrokosć boka
+page_scale_fit=Wjelikosć boka
+page_scale_auto=Awtomatiske skalěrowanje
+page_scale_actual=Aktualna wjelikosć
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Zacytujo se…
+loading_error=Pśi zacytowanju PDF jo zmólka nastała.
+invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja.
+missing_file_error=Felujuca PDF-dataja.
+unexpected_response_error=Njewócakane serwerowe wótegrono.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Typ pśipiskow: {{type}}]
+password_label=Zapódajśo gronidło, aby PDF-dataju wócynił.
+password_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz.
+password_ok=W pórěźe
+password_cancel=Pśetergnuś
+
+printing_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak.
+printing_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał.
+web_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś.
diff --git a/app/assets/javascripts/publications/locale/el/viewer.properties b/app/assets/javascripts/publications/locale/el/viewer.properties
new file mode 100644
index 0000000..2525b3b
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/el/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Προηγούμενη σελίδα
+previous_label=Προηγούμενη
+next.title=Επόμενη σελίδα
+next_label=Επόμενη
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Σελίδα
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=από {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} από {{pagesCount}})
+
+zoom_out.title=Σμίκρυνση
+zoom_out_label=Σμίκρυνση
+zoom_in.title=Μεγέθυνση
+zoom_in_label=Μεγέθυνση
+zoom.title=Ζουμ
+presentation_mode.title=Εναλλαγή σε λειτουργία παρουσίασης
+presentation_mode_label=Λειτουργία παρουσίασης
+open_file.title=Άνοιγμα αρχείου
+open_file_label=Άνοιγμα
+print.title=Εκτύπωση
+print_label=Εκτύπωση
+download.title=Λήψη
+download_label=Λήψη
+bookmark.title=Τρέχουσα προβολή (αντιγραφή ή άνοιγμα σε νέο παράθυρο)
+bookmark_label=Τρέχουσα προβολή
+
+# Secondary toolbar and context menu
+tools.title=Εργαλεία
+tools_label=Εργαλεία
+first_page.title=Μετάβαση στην πρώτη σελίδα
+first_page_label=Μετάβαση στην πρώτη σελίδα
+last_page.title=Μετάβαση στην τελευταία σελίδα
+last_page_label=Μετάβαση στην τελευταία σελίδα
+page_rotate_cw.title=Δεξιόστροφη περιστροφή
+page_rotate_cw_label=Δεξιόστροφη περιστροφή
+page_rotate_ccw.title=Αριστερόστροφη περιστροφή
+page_rotate_ccw_label=Αριστερόστροφη περιστροφή
+
+cursor_text_select_tool.title=Ενεργοποίηση εργαλείου επιλογής κειμένου
+cursor_text_select_tool_label=Εργαλείο επιλογής κειμένου
+cursor_hand_tool.title=Ενεργοποίηση εργαλείου χεριού
+cursor_hand_tool_label=Εργαλείο χεριού
+
+scroll_page.title=Χρήση κύλισης σελίδας
+scroll_page_label=Κύλιση σελίδας
+scroll_vertical.title=Χρήση κάθετης κύλισης
+scroll_vertical_label=Κάθετη κύλιση
+scroll_horizontal.title=Χρήση οριζόντιας κύλισης
+scroll_horizontal_label=Οριζόντια κύλιση
+scroll_wrapped.title=Χρήση κυκλικής κύλισης
+scroll_wrapped_label=Κυκλική κύλιση
+
+spread_none.title=Να μην γίνει σύνδεση επεκτάσεων σελίδων
+spread_none_label=Χωρίς επεκτάσεις
+spread_odd.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες
+spread_odd_label=Μονές επεκτάσεις
+spread_even.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες
+spread_even_label=Ζυγές επεκτάσεις
+
+# Document properties dialog box
+document_properties.title=Ιδιότητες εγγράφου…
+document_properties_label=Ιδιότητες εγγράφου…
+document_properties_file_name=Όνομα αρχείου:
+document_properties_file_size=Μέγεθος αρχείου:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Τίτλος:
+document_properties_author=Συγγραφέας:
+document_properties_subject=Θέμα:
+document_properties_keywords=Λέξεις-κλειδιά:
+document_properties_creation_date=Ημερομηνία δημιουργίας:
+document_properties_modification_date=Ημερομηνία τροποποίησης:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Δημιουργός:
+document_properties_producer=Παραγωγός PDF:
+document_properties_version=Έκδοση PDF:
+document_properties_page_count=Αριθμός σελίδων:
+document_properties_page_size=Μέγεθος σελίδας:
+document_properties_page_size_unit_inches=ίντσες
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=κατακόρυφα
+document_properties_page_size_orientation_landscape=οριζόντια
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Επιστολή
+document_properties_page_size_name_legal=Τύπου Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ταχεία προβολή ιστού:
+document_properties_linearized_yes=Ναι
+document_properties_linearized_no=Όχι
+document_properties_close=Κλείσιμο
+
+print_progress_message=Προετοιμασία του εγγράφου για εκτύπωση…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Ακύρωση
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=(Απ)ενεργοποίηση πλαϊνής γραμμής
+toggle_sidebar_notification2.title=(Απ)ενεργοποίηση πλαϊνής γραμμής (το έγγραφο περιέχει περίγραμμα/συνημμένα/επίπεδα)
+toggle_sidebar_label=(Απ)ενεργοποίηση πλαϊνής γραμμής
+document_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων)
+document_outline_label=Διάρθρωση εγγράφου
+attachments.title=Εμφάνιση συνημμένων
+attachments_label=Συνημμένα
+layers.title=Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση)
+layers_label=Επίπεδα
+thumbs.title=Εμφάνιση μικρογραφιών
+thumbs_label=Μικρογραφίες
+current_outline_item.title=Εύρεση τρέχοντος στοιχείου διάρθρωσης
+current_outline_item_label=Τρέχον στοιχείο διάρθρωσης
+findbar.title=Εύρεση στο έγγραφο
+findbar_label=Εύρεση
+
+additional_layers=Επιπρόσθετα επίπεδα
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Σελίδα {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Σελίδα {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Μικρογραφία σελίδας {{page}}
+
+# Find panel button title and messages
+find_input.title=Εύρεση
+find_input.placeholder=Εύρεση στο έγγραφο…
+find_previous.title=Εύρεση της προηγούμενης εμφάνισης της φράσης
+find_previous_label=Προηγούμενο
+find_next.title=Εύρεση της επόμενης εμφάνισης της φράσης
+find_next_label=Επόμενο
+find_highlight=Επισήμανση όλων
+find_match_case_label=Συμφωνία πεζών/κεφαλαίων
+find_entire_word_label=Ολόκληρες λέξεις
+find_reached_top=Φτάσατε στην αρχή του εγγράφου, συνέχεια από το τέλος
+find_reached_bottom=Φτάσατε στο τέλος του εγγράφου, συνέχεια από την αρχή
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} από {{total}} αντιστοιχία
+find_match_count[two]={{current}} από {{total}} αντιστοιχίες
+find_match_count[few]={{current}} από {{total}} αντιστοιχίες
+find_match_count[many]={{current}} από {{total}} αντιστοιχίες
+find_match_count[other]={{current}} από {{total}} αντιστοιχίες
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[one]=Περισσότερες από {{limit}} αντιστοιχία
+find_match_count_limit[two]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[few]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[many]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[other]=Περισσότερες από {{limit}} αντιστοιχίες
+find_not_found=Η φράση δεν βρέθηκε
+
+# Error panel labels
+error_more_info=Περισσότερες πληροφορίες
+error_less_info=Λιγότερες πληροφορίες
+error_close=Κλείσιμο
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (έκδοση: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Μήνυμα: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Στοίβα: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Αρχείο: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Γραμμή: {{line}}
+rendering_error=Προέκυψε σφάλμα κατά την εμφάνιση της σελίδας.
+
+# Predefined zoom values
+page_scale_width=Πλάτος σελίδας
+page_scale_fit=Μέγεθος σελίδας
+page_scale_auto=Αυτόματο ζουμ
+page_scale_actual=Πραγματικό μέγεθος
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Φόρτωση…
+loading_error=Προέκυψε σφάλμα κατά τη φόρτωση του PDF.
+invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF.
+missing_file_error=Λείπει αρχείο PDF.
+unexpected_response_error=Μη αναμενόμενη απόκριση από το διακομιστή.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Σχόλιο «{{type}}»]
+password_label=Εισαγάγετε τον κωδικό πρόσβασης για να ανοίξετε αυτό το αρχείο PDF.
+password_invalid=Μη έγκυρος κωδικός πρόσβασης. Παρακαλώ δοκιμάστε ξανά.
+password_ok=OK
+password_cancel=Ακύρωση
+
+printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από το πρόγραμμα περιήγησης.
+printing_not_ready=Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση.
+web_fonts_disabled=Οι γραμματοσειρές ιστού είναι ανενεργές: δεν είναι δυνατή η χρήση των ενσωματωμένων γραμματοσειρών PDF.
diff --git a/app/assets/javascripts/publications/locale/en-CA/viewer.properties b/app/assets/javascripts/publications/locale/en-CA/viewer.properties
new file mode 100644
index 0000000..08db294
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/en-CA/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_page.title=Use Page Scrolling
+scroll_page_label=Page Scrolling
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
+findbar.title=Find in Document
+findbar_label=Find
+
+additional_layers=Additional Layers
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight All
+find_match_case_label=Match Case
+find_entire_word_label=Whole Words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Loading…
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/app/assets/javascripts/publications/locale/en-GB/viewer.properties b/app/assets/javascripts/publications/locale/en-GB/viewer.properties
new file mode 100644
index 0000000..2cfdda6
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/en-GB/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Anti-Clockwise
+page_rotate_ccw_label=Rotate Anti-Clockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_page.title=Use Page Scrolling
+scroll_page_label=Page Scrolling
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
+findbar.title=Find in Document
+findbar_label=Find
+
+additional_layers=Additional Layers
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight All
+find_match_case_label=Match Case
+find_match_diacritics_label=Match Diacritics
+find_entire_word_label=Whole Words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Loading…
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/app/assets/javascripts/publications/locale/en-US/viewer.properties b/app/assets/javascripts/publications/locale/en-US/viewer.properties
new file mode 100644
index 0000000..2eb5a8d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/en-US/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_page.title=Use Page Scrolling
+scroll_page_label=Page Scrolling
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
+findbar.title=Find in Document
+findbar_label=Find
+
+additional_layers=Additional Layers
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight All
+find_match_case_label=Match Case
+find_match_diacritics_label=Match Diacritics
+find_entire_word_label=Whole Words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Loading…
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/app/assets/javascripts/publications/locale/eo/viewer.properties b/app/assets/javascripts/publications/locale/eo/viewer.properties
new file mode 100644
index 0000000..004307e
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/eo/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Antaŭa paĝo
+previous_label=Malantaŭen
+next.title=Venonta paĝo
+next_label=Antaŭen
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Paĝo
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=el {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} el {{pagesCount}})
+
+zoom_out.title=Malpligrandigi
+zoom_out_label=Malpligrandigi
+zoom_in.title=Pligrandigi
+zoom_in_label=Pligrandigi
+zoom.title=Pligrandigilo
+presentation_mode.title=Iri al prezenta reĝimo
+presentation_mode_label=Prezenta reĝimo
+open_file.title=Malfermi dosieron
+open_file_label=Malfermi
+print.title=Presi
+print_label=Presi
+download.title=Elŝuti
+download_label=Elŝuti
+bookmark.title=Nuna vido (kopii aŭ malfermi en nova fenestro)
+bookmark_label=Nuna vido
+
+# Secondary toolbar and context menu
+tools.title=Iloj
+tools_label=Iloj
+first_page.title=Iri al la unua paĝo
+first_page_label=Iri al la unua paĝo
+last_page.title=Iri al la lasta paĝo
+last_page_label=Iri al la lasta paĝo
+page_rotate_cw.title=Rotaciigi dekstrume
+page_rotate_cw_label=Rotaciigi dekstrume
+page_rotate_ccw.title=Rotaciigi maldekstrume
+page_rotate_ccw_label=Rotaciigi maldekstrume
+
+cursor_text_select_tool.title=Aktivigi tekstan elektilon
+cursor_text_select_tool_label=Teksta elektilo
+cursor_hand_tool.title=Aktivigi ilon de mano
+cursor_hand_tool_label=Ilo de mano
+
+scroll_page.title=Uzi ŝovadon de paĝo
+scroll_page_label=Ŝovado de paĝo
+scroll_vertical.title=Uzi vertikalan ŝovadon
+scroll_vertical_label=Vertikala ŝovado
+scroll_horizontal.title=Uzi horizontalan ŝovadon
+scroll_horizontal_label=Horizontala ŝovado
+scroll_wrapped.title=Uzi ambaŭdirektan ŝovadon
+scroll_wrapped_label=Ambaŭdirekta ŝovado
+
+spread_none.title=Ne montri paĝojn po du
+spread_none_label=Unupaĝa vido
+spread_odd.title=Kunigi paĝojn komencante per nepara paĝo
+spread_odd_label=Po du paĝoj, neparaj maldekstre
+spread_even.title=Kunigi paĝojn komencante per para paĝo
+spread_even_label=Po du paĝoj, paraj maldekstre
+
+# Document properties dialog box
+document_properties.title=Atributoj de dokumento…
+document_properties_label=Atributoj de dokumento…
+document_properties_file_name=Nomo de dosiero:
+document_properties_file_size=Grando de dosiero:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KO ({{size_b}} oktetoj)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MO ({{size_b}} oktetoj)
+document_properties_title=Titolo:
+document_properties_author=Aŭtoro:
+document_properties_subject=Temo:
+document_properties_keywords=Ŝlosilvorto:
+document_properties_creation_date=Dato de kreado:
+document_properties_modification_date=Dato de modifo:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kreinto:
+document_properties_producer=Produktinto de PDF:
+document_properties_version=Versio de PDF:
+document_properties_page_count=Nombro de paĝoj:
+document_properties_page_size=Grando de paĝo:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertikala
+document_properties_page_size_orientation_landscape=horizontala
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letera
+document_properties_page_size_name_legal=Jura
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rapida tekstaĵa vido:
+document_properties_linearized_yes=Jes
+document_properties_linearized_no=Ne
+document_properties_close=Fermi
+
+print_progress_message=Preparo de dokumento por presi ĝin …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nuligi
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Montri/kaŝi flankan strion
+toggle_sidebar_notification2.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn)
+toggle_sidebar_label=Montri/kaŝi flankan strion
+document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn)
+document_outline_label=Konturo de dokumento
+attachments.title=Montri kunsendaĵojn
+attachments_label=Kunsendaĵojn
+layers.title=Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton)
+layers_label=Tavoloj
+thumbs.title=Montri miniaturojn
+thumbs_label=Miniaturoj
+current_outline_item.title=Trovi nunan konturan elementon
+current_outline_item_label=Nuna kontura elemento
+findbar.title=Serĉi en dokumento
+findbar_label=Serĉi
+
+additional_layers=Aldonaj tavoloj
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Paĝo {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Paĝo {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturo de paĝo {{page}}
+
+# Find panel button title and messages
+find_input.title=Serĉi
+find_input.placeholder=Serĉi en dokumento…
+find_previous.title=Serĉi la antaŭan aperon de la frazo
+find_previous_label=Malantaŭen
+find_next.title=Serĉi la venontan aperon de la frazo
+find_next_label=Antaŭen
+find_highlight=Elstarigi ĉiujn
+find_match_case_label=Distingi inter majuskloj kaj minuskloj
+find_entire_word_label=Tutaj vortoj
+find_reached_top=Komenco de la dokumento atingita, daŭrigado ekde la fino
+find_reached_bottom=Fino de la dokumento atingita, daŭrigado ekde la komenco
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} el {{total}} kongruo
+find_match_count[two]={{current}} el {{total}} kongruoj
+find_match_count[few]={{current}} el {{total}} kongruoj
+find_match_count[many]={{current}} el {{total}} kongruoj
+find_match_count[other]={{current}} el {{total}} kongruoj
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Pli ol {{limit}} kongruoj
+find_match_count_limit[one]=Pli ol {{limit}} kongruo
+find_match_count_limit[two]=Pli ol {{limit}} kongruoj
+find_match_count_limit[few]=Pli ol {{limit}} kongruoj
+find_match_count_limit[many]=Pli ol {{limit}} kongruoj
+find_match_count_limit[other]=Pli ol {{limit}} kongruoj
+find_not_found=Frazo ne trovita
+
+# Error panel labels
+error_more_info=Pli da informo
+error_less_info=Malpli da informo
+error_close=Fermi
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaĝo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stako: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dosiero: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linio: {{line}}
+rendering_error=Okazis eraro dum la montro de la paĝo.
+
+# Predefined zoom values
+page_scale_width=Larĝo de paĝo
+page_scale_fit=Adapti paĝon
+page_scale_auto=Aŭtomata skalo
+page_scale_actual=Reala grando
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Ŝargado…
+loading_error=Okazis eraro dum la ŝargado de la PDF dosiero.
+invalid_file_error=Nevalida aŭ difektita PDF dosiero.
+missing_file_error=Mankas dosiero PDF.
+unexpected_response_error=Neatendita respondo de servilo.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Prinoto: {{type}}]
+password_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF.
+password_invalid=Nevalida pasvorto. Bonvolu provi denove.
+password_ok=Akcepti
+password_cancel=Nuligi
+
+printing_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon.
+printing_not_ready=Averto: la PDF dosiero ne estas plene ŝargita por presado.
+web_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF.
diff --git a/app/assets/javascripts/publications/locale/es-AR/viewer.properties b/app/assets/javascripts/publications/locale/es-AR/viewer.properties
new file mode 100644
index 0000000..044b9ea
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/es-AR/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=( {{pageNumber}} de {{pagesCount}} )
+
+zoom_out.title=Alejar
+zoom_out_label=Alejar
+zoom_in.title=Acercar
+zoom_in_label=Acercar
+zoom.title=Zoom
+presentation_mode.title=Cambiar a modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a primera página
+first_page_label=Ir a primera página
+last_page.title=Ir a última página
+last_page_label=Ir a última página
+page_rotate_cw.title=Rotar horario
+page_rotate_cw_label=Rotar horario
+page_rotate_ccw.title=Rotar antihorario
+page_rotate_ccw_label=Rotar antihorario
+
+cursor_text_select_tool.title=Habilitar herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Habilitar herramienta mano
+cursor_hand_tool_label=Herramienta mano
+
+scroll_page.title=Usar desplazamiento de página
+scroll_page_label=Desplazamiento de página
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento vertical
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento encapsulado
+scroll_wrapped_label=Desplazamiento encapsulado
+
+spread_none.title=No unir páginas dobles
+spread_none_label=Sin dobles
+spread_odd.title=Unir páginas dobles comenzando con las impares
+spread_odd_label=Dobles impares
+spread_even.title=Unir páginas dobles comenzando con las pares
+spread_even_label=Dobles pares
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño de archovo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=PDF Productor:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Cantidad de páginas:
+document_properties_page_size=Tamaño de página:
+document_properties_page_size_unit_inches=en
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=normal
+document_properties_page_size_orientation_landscape=apaisado
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la Web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para imprimir…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar barra lateral
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
+toggle_sidebar_label=Alternar barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Buscar elemento de esquema actual
+current_outline_item_label=Elemento de esquema actual
+findbar.title=Buscar en documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en documento…
+find_previous.title=Buscar la aparición anterior de la frase
+find_previous_label=Anterior
+find_next.title=Buscar la siguiente aparición de la frase
+find_next_label=Siguiente
+find_highlight=Resaltar todo
+find_match_case_label=Coincidir mayúsculas
+find_match_diacritics_label=Coincidir diacríticos
+find_entire_word_label=Palabras completas
+find_reached_top=Inicio de documento alcanzado, continuando desde abajo
+find_reached_bottom=Fin de documento alcanzando, continuando desde arriba
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencias
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coinciden
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Ocurrió un error al dibujar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajustar página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Cargando…
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Archivo PDF no válido o cocrrupto.
+missing_file_error=Archivo PDF faltante.
+unexpected_response_error=Respuesta del servidor inesperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotación]
+password_label=Ingrese la contraseña para abrir este archivo PDF
+password_invalid=Contraseña inválida. Intente nuevamente.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador.
+printing_not_ready=Advertencia: El PDF no está completamente cargado para impresión.
+web_fonts_disabled=Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF.
diff --git a/app/assets/javascripts/publications/locale/es-CL/viewer.properties b/app/assets/javascripts/publications/locale/es-CL/viewer.properties
new file mode 100644
index 0000000..0d23f2e
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/es-CL/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Alejar
+zoom_out_label=Alejar
+zoom_in.title=Acercar
+zoom_in_label=Acercar
+zoom.title=Ampliación
+presentation_mode.title=Cambiar al modo de presentación
+presentation_mode_label=Modo de presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Girar a la derecha
+page_rotate_cw_label=Girar a la derecha
+page_rotate_ccw.title=Girar a la izquierda
+page_rotate_ccw_label=Girar a la izquierda
+
+cursor_text_select_tool.title=Activar la herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar la herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_page.title=Usar desplazamiento de página
+scroll_page_label=Desplazamiento de página
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento en bloque
+scroll_wrapped_label=Desplazamiento en bloque
+
+spread_none.title=No juntar páginas a modo de libro
+spread_none_label=Vista de una página
+spread_odd.title=Junta las páginas partiendo con una de número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Junta las páginas partiendo con una de número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño del archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor del PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Cantidad de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Oficio
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida en Web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Barra lateral
+toggle_sidebar_notification2.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas)
+toggle_sidebar_label=Mostrar u ocultar la barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Buscar elemento de esquema actual
+current_outline_item_label=Elemento de esquema actual
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Encontrar
+find_input.placeholder=Encontrar en el documento…
+find_previous.title=Buscar la aparición anterior de la frase
+find_previous_label=Previo
+find_next.title=Buscar la siguiente aparición de la frase
+find_next_label=Siguiente
+find_highlight=Destacar todos
+find_match_case_label=Coincidir mayús./minús.
+find_match_diacritics_label=Coincidir diacríticos
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, continuando desde el final
+find_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Coincidencia {{current}} de {{total}}
+find_match_count[two]=Coincidencia {{current}} de {{total}}
+find_match_count[few]=Coincidencia {{current}} de {{total}}
+find_match_count[many]=Coincidencia {{current}} de {{total}}
+find_match_count[other]=Coincidencia {{current}} de {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilación: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Ocurrió un error al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajuste de página
+page_scale_auto=Aumento automático
+page_scale_actual=Tamaño actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Cargando…
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Archivo PDF inválido o corrupto.
+missing_file_error=Falta el archivo PDF.
+unexpected_response_error=Respuesta del servidor inesperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotación]
+password_label=Ingrese la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña inválida. Por favor, vuelve a intentarlo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador.
+printing_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso.
+web_fonts_disabled=Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas.
diff --git a/app/assets/javascripts/publications/locale/es-ES/viewer.properties b/app/assets/javascripts/publications/locale/es-ES/viewer.properties
new file mode 100644
index 0000000..de4bbdf
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/es-ES/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Tamaño
+presentation_mode.title=Cambiar al modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Rotar en sentido horario
+page_rotate_cw_label=Rotar en sentido horario
+page_rotate_ccw.title=Rotar en sentido antihorario
+page_rotate_ccw_label=Rotar en sentido antihorario
+
+cursor_text_select_tool.title=Activar herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_page.title=Usar desplazamiento de página
+scroll_page_label=Desplazamiento de página
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento en bloque
+scroll_wrapped_label=Desplazamiento en bloque
+
+spread_none.title=No juntar páginas en vista de libro
+spread_none_label=Vista de libro
+spread_odd.title=Juntar las páginas partiendo de una con número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Juntar las páginas partiendo de una con número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño de archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Cambiar barra lateral
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
+toggle_sidebar_label=Cambiar barra lateral
+document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Resumen de documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Encontrar elemento de esquema actual
+current_outline_item_label=Elemento de esquema actual
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en el documento…
+find_previous.title=Encontrar la anterior aparición de la frase
+find_previous_label=Anterior
+find_next.title=Encontrar la siguiente aparición de esta frase
+find_next_label=Siguiente
+find_highlight=Resaltar todos
+find_match_case_label=Coincidencia de mayús./minús.
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, se continúa desde el final
+find_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Ocurrió un error al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Anchura de la página
+page_scale_fit=Ajuste de la página
+page_scale_auto=Tamaño automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Cargando…
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Fichero PDF no válido o corrupto.
+missing_file_error=No hay fichero PDF.
+unexpected_response_error=Respuesta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduzca la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña no válida. Vuelva a intentarlo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador.
+printing_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse.
+web_fonts_disabled=Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas.
diff --git a/app/assets/javascripts/publications/locale/es-MX/viewer.properties b/app/assets/javascripts/publications/locale/es-MX/viewer.properties
new file mode 100644
index 0000000..dc0ce0d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/es-MX/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Zoom
+presentation_mode.title=Cambiar al modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Girar a la derecha
+page_rotate_cw_label=Girar a la derecha
+page_rotate_ccw.title=Girar a la izquierda
+page_rotate_ccw_label=Girar a la izquierda
+
+cursor_text_select_tool.title=Activar la herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar la herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_page.title=Usar desplazamiento de página
+scroll_page_label=Desplazamiento de página
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento encapsulado
+scroll_wrapped_label=Desplazamiento encapsulado
+
+spread_none.title=No unir páginas separadas
+spread_none_label=Vista de una página
+spread_odd.title=Unir las páginas partiendo con una de número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Juntar las páginas partiendo con una de número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre del archivo:
+document_properties_file_size=Tamaño del archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras claves:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Oficio
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Cambiar barra lateral
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
+toggle_sidebar_label=Cambiar barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Buscar elemento de esquema actual
+current_outline_item_label=Elemento de esquema actual
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en el documento…
+find_previous.title=Ir a la anterior frase encontrada
+find_previous_label=Anterior
+find_next.title=Ir a la siguiente frase encontrada
+find_next_label=Siguiente
+find_highlight=Resaltar todo
+find_match_case_label=Coincidir con mayúsculas y minúsculas
+find_match_diacritics_label=Coincidir diacríticos
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, se buscará al final
+find_reached_bottom=Se alcanzó el final del documento, se buscará al inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coinciden
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=No se encontró la frase
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Un error ocurrió al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajustar página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Cargando…
+loading_error=Un error ocurrió al cargar el PDF.
+invalid_file_error=Archivo PDF invalido o dañado.
+missing_file_error=Archivo PDF no encontrado.
+unexpected_response_error=Respuesta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} anotación]
+password_label=Ingresa la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña inválida. Por favor intenta de nuevo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador.
+printing_not_ready=Advertencia: El PDF no cargo completamente para impresión.
+web_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas.
diff --git a/app/assets/javascripts/publications/locale/et/viewer.properties b/app/assets/javascripts/publications/locale/et/viewer.properties
new file mode 100644
index 0000000..17bf0e4
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/et/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Eelmine lehekülg
+previous_label=Eelmine
+next.title=Järgmine lehekülg
+next_label=Järgmine
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Leht
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}/{{pagesCount}})
+
+zoom_out.title=Vähenda
+zoom_out_label=Vähenda
+zoom_in.title=Suurenda
+zoom_in_label=Suurenda
+zoom.title=Suurendamine
+presentation_mode.title=Lülitu esitlusrežiimi
+presentation_mode_label=Esitlusrežiim
+open_file.title=Ava fail
+open_file_label=Ava
+print.title=Prindi
+print_label=Prindi
+download.title=Laadi alla
+download_label=Laadi alla
+bookmark.title=Praegune vaade (kopeeri või ava uues aknas)
+bookmark_label=Praegune vaade
+
+# Secondary toolbar and context menu
+tools.title=Tööriistad
+tools_label=Tööriistad
+first_page.title=Mine esimesele leheküljele
+first_page_label=Mine esimesele leheküljele
+last_page.title=Mine viimasele leheküljele
+last_page_label=Mine viimasele leheküljele
+page_rotate_cw.title=Pööra päripäeva
+page_rotate_cw_label=Pööra päripäeva
+page_rotate_ccw.title=Pööra vastupäeva
+page_rotate_ccw_label=Pööra vastupäeva
+
+cursor_text_select_tool.title=Luba teksti valimise tööriist
+cursor_text_select_tool_label=Teksti valimise tööriist
+cursor_hand_tool.title=Luba sirvimistööriist
+cursor_hand_tool_label=Sirvimistööriist
+
+scroll_page.title=Kasutatakse lehe kaupa kerimist
+scroll_page_label=Lehe kaupa kerimine
+scroll_vertical.title=Kasuta vertikaalset kerimist
+scroll_vertical_label=Vertikaalne kerimine
+scroll_horizontal.title=Kasuta horisontaalset kerimist
+scroll_horizontal_label=Horisontaalne kerimine
+scroll_wrapped.title=Kasuta rohkem mahutavat kerimist
+scroll_wrapped_label=Rohkem mahutav kerimine
+
+spread_none.title=Ära kõrvuta lehekülgi
+spread_none_label=Lehtede kõrvutamine puudub
+spread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega
+spread_odd_label=Kõrvutamine paaritute numbritega alustades
+spread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega
+spread_even_label=Kõrvutamine paarisnumbritega alustades
+
+# Document properties dialog box
+document_properties.title=Dokumendi omadused…
+document_properties_label=Dokumendi omadused…
+document_properties_file_name=Faili nimi:
+document_properties_file_size=Faili suurus:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KiB ({{size_b}} baiti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MiB ({{size_b}} baiti)
+document_properties_title=Pealkiri:
+document_properties_author=Autor:
+document_properties_subject=Teema:
+document_properties_keywords=Märksõnad:
+document_properties_creation_date=Loodud:
+document_properties_modification_date=Muudetud:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Looja:
+document_properties_producer=Generaator:
+document_properties_version=Generaatori versioon:
+document_properties_page_count=Lehekülgi:
+document_properties_page_size=Lehe suurus:
+document_properties_page_size_unit_inches=tolli
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertikaalpaigutus
+document_properties_page_size_orientation_landscape=rõhtpaigutus
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized="Fast Web View" tugi:
+document_properties_linearized_yes=Jah
+document_properties_linearized_no=Ei
+document_properties_close=Sulge
+
+print_progress_message=Dokumendi ettevalmistamine printimiseks…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Loobu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Näita külgriba
+toggle_sidebar_notification2.title=Näita külgriba (dokument sisaldab sisukorda/manuseid/kihte)
+toggle_sidebar_label=Näita külgriba
+document_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa)
+document_outline_label=Näita sisukorda
+attachments.title=Näita manuseid
+attachments_label=Manused
+layers.title=Näita kihte (kõikide kihtide vaikeolekusse lähtestamiseks topeltklõpsa)
+layers_label=Kihid
+thumbs.title=Näita pisipilte
+thumbs_label=Pisipildid
+current_outline_item.title=Otsi üles praegune kontuuriüksus
+current_outline_item_label=Praegune kontuuriüksus
+findbar.title=Otsi dokumendist
+findbar_label=Otsi
+
+additional_layers=Täiendavad kihid
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Lehekülg {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. lehekülg
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. lehekülje pisipilt
+
+# Find panel button title and messages
+find_input.title=Otsi
+find_input.placeholder=Otsi dokumendist…
+find_previous.title=Otsi fraasi eelmine esinemiskoht
+find_previous_label=Eelmine
+find_next.title=Otsi fraasi järgmine esinemiskoht
+find_next_label=Järgmine
+find_highlight=Too kõik esile
+find_match_case_label=Tõstutundlik
+find_entire_word_label=Täissõnad
+find_reached_top=Jõuti dokumendi algusesse, jätkati lõpust
+find_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=vaste {{current}}/{{total}}
+find_match_count[two]=vaste {{current}}/{{total}}
+find_match_count[few]=vaste {{current}}/{{total}}
+find_match_count[many]=vaste {{current}}/{{total}}
+find_match_count[other]=vaste {{current}}/{{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Rohkem kui {{limit}} vastet
+find_match_count_limit[one]=Rohkem kui {{limit}} vaste
+find_match_count_limit[two]=Rohkem kui {{limit}} vastet
+find_match_count_limit[few]=Rohkem kui {{limit}} vastet
+find_match_count_limit[many]=Rohkem kui {{limit}} vastet
+find_match_count_limit[other]=Rohkem kui {{limit}} vastet
+find_not_found=Fraasi ei leitud
+
+# Error panel labels
+error_more_info=Rohkem teavet
+error_less_info=Vähem teavet
+error_close=Sulge
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teade: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rida: {{line}}
+rendering_error=Lehe renderdamisel esines viga.
+
+# Predefined zoom values
+page_scale_width=Mahuta laiusele
+page_scale_fit=Mahuta leheküljele
+page_scale_auto=Automaatne suurendamine
+page_scale_actual=Tegelik suurus
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Laadimine…
+loading_error=PDFi laadimisel esines viga.
+invalid_file_error=Vigane või rikutud PDF-fail.
+missing_file_error=PDF-fail puudub.
+unexpected_response_error=Ootamatu vastus serverilt.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=PDF-faili avamiseks sisesta parool.
+password_invalid=Vigane parool. Palun proovi uuesti.
+password_ok=Sobib
+password_cancel=Loobu
+
+printing_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud.
+printing_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud.
+web_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada.
diff --git a/app/assets/javascripts/publications/locale/eu/viewer.properties b/app/assets/javascripts/publications/locale/eu/viewer.properties
new file mode 100644
index 0000000..aa2bef7
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/eu/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Aurreko orria
+previous_label=Aurrekoa
+next.title=Hurrengo orria
+next_label=Hurrengoa
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Orria
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}/{{pageNumber}}
+
+zoom_out.title=Urrundu zooma
+zoom_out_label=Urrundu zooma
+zoom_in.title=Gerturatu zooma
+zoom_in_label=Gerturatu zooma
+zoom.title=Zooma
+presentation_mode.title=Aldatu aurkezpen modura
+presentation_mode_label=Arkezpen modua
+open_file.title=Ireki fitxategia
+open_file_label=Ireki
+print.title=Inprimatu
+print_label=Inprimatu
+download.title=Deskargatu
+download_label=Deskargatu
+bookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian)
+bookmark_label=Uneko ikuspegia
+
+# Secondary toolbar and context menu
+tools.title=Tresnak
+tools_label=Tresnak
+first_page.title=Joan lehen orrira
+first_page_label=Joan lehen orrira
+last_page.title=Joan azken orrira
+last_page_label=Joan azken orrira
+page_rotate_cw.title=Biratu erlojuaren norantzan
+page_rotate_cw_label=Biratu erlojuaren norantzan
+page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan
+page_rotate_ccw_label=Biratu erlojuaren aurkako norantzan
+
+cursor_text_select_tool.title=Gaitu testuaren hautapen tresna
+cursor_text_select_tool_label=Testuaren hautapen tresna
+cursor_hand_tool.title=Gaitu eskuaren tresna
+cursor_hand_tool_label=Eskuaren tresna
+
+scroll_page.title=Erabili orriaren korritzea
+scroll_page_label=Orriaren korritzea
+scroll_vertical.title=Erabili korritze bertikala
+scroll_vertical_label=Korritze bertikala
+scroll_horizontal.title=Erabili korritze horizontala
+scroll_horizontal_label=Korritze horizontala
+scroll_wrapped.title=Erabili korritze egokitua
+scroll_wrapped_label=Korritze egokitua
+
+spread_none.title=Ez elkartu barreiatutako orriak
+spread_none_label=Barreiatzerik ez
+spread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita
+spread_odd_label=Barreiatze bakoitia
+spread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita
+spread_even_label=Barreiatze bikoitia
+
+# Document properties dialog box
+document_properties.title=Dokumentuaren propietateak…
+document_properties_label=Dokumentuaren propietateak…
+document_properties_file_name=Fitxategi-izena:
+document_properties_file_size=Fitxategiaren tamaina:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Izenburua:
+document_properties_author=Egilea:
+document_properties_subject=Gaia:
+document_properties_keywords=Gako-hitzak:
+document_properties_creation_date=Sortze-data:
+document_properties_modification_date=Aldatze-data:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Sortzailea:
+document_properties_producer=PDFaren ekoizlea:
+document_properties_version=PDF bertsioa:
+document_properties_page_count=Orrialde kopurua:
+document_properties_page_size=Orriaren tamaina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=bertikala
+document_properties_page_size_orientation_landscape=horizontala
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Gutuna
+document_properties_page_size_name_legal=Legala
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Webeko ikuspegi bizkorra:
+document_properties_linearized_yes=Bai
+document_properties_linearized_no=Ez
+document_properties_close=Itxi
+
+print_progress_message=Dokumentua inprimatzeko prestatzen…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=%{{progress}}
+print_progress_close=Utzi
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Txandakatu alboko barra
+toggle_sidebar_notification2.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak/geruzak ditu)
+toggle_sidebar_label=Txandakatu alboko barra
+document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)
+document_outline_label=Dokumentuaren eskema
+attachments.title=Erakutsi eranskinak
+attachments_label=Eranskinak
+layers.title=Erakutsi geruzak (klik bikoitza geruza guztiak egoera lehenetsira berrezartzeko)
+layers_label=Geruzak
+thumbs.title=Erakutsi koadro txikiak
+thumbs_label=Koadro txikiak
+current_outline_item.title=Bilatu uneko eskemaren elementua
+current_outline_item_label=Uneko eskemaren elementua
+findbar.title=Bilatu dokumentuan
+findbar_label=Bilatu
+
+additional_layers=Geruza gehigarriak
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark={{page}}. orria
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. orria
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. orriaren koadro txikia
+
+# Find panel button title and messages
+find_input.title=Bilatu
+find_input.placeholder=Bilatu dokumentuan…
+find_previous.title=Bilatu esaldiaren aurreko parekatzea
+find_previous_label=Aurrekoa
+find_next.title=Bilatu esaldiaren hurrengo parekatzea
+find_next_label=Hurrengoa
+find_highlight=Nabarmendu guztia
+find_match_case_label=Bat etorri maiuskulekin/minuskulekin
+find_entire_word_label=Hitz osoak
+find_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen
+find_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}}/{{current}}. bat etortzea
+find_match_count[two]={{total}}/{{current}}. bat etortzea
+find_match_count[few]={{total}}/{{current}}. bat etortzea
+find_match_count[many]={{total}}/{{current}}. bat etortzea
+find_match_count[other]={{total}}/{{current}}. bat etortzea
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago
+find_match_count_limit[two]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[few]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[many]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[other]={{limit}} bat-etortze baino gehiago
+find_not_found=Esaldia ez da aurkitu
+
+# Error panel labels
+error_more_info=Informazio gehiago
+error_less_info=Informazio gutxiago
+error_close=Itxi
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (eraikuntza: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mezua: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fitxategia: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lerroa: {{line}}
+rendering_error=Errorea gertatu da orria errendatzean.
+
+# Predefined zoom values
+page_scale_width=Orriaren zabalera
+page_scale_fit=Doitu orrira
+page_scale_auto=Zoom automatikoa
+page_scale_actual=Benetako tamaina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent=%{{scale}}
+
+# Loading indicator messages
+loading=Kargatzen…
+loading_error=Errorea gertatu da PDFa kargatzean.
+invalid_file_error=PDF fitxategi baliogabe edo hondatua.
+missing_file_error=PDF fitxategia falta da.
+unexpected_response_error=Espero gabeko zerbitzariaren erantzuna.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ohartarazpena]
+password_label=Idatzi PDF fitxategi hau irekitzeko pasahitza.
+password_invalid=Pasahitz baliogabea. Saiatu berriro mesedez.
+password_ok=Ados
+password_cancel=Utzi
+
+printing_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan.
+printing_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko.
+web_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili.
diff --git a/app/assets/javascripts/publications/locale/fa/viewer.properties b/app/assets/javascripts/publications/locale/fa/viewer.properties
new file mode 100644
index 0000000..2c28f01
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/fa/viewer.properties
@@ -0,0 +1,215 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=صفحهٔ قبلی
+previous_label=قبلی
+next.title=صفحهٔ بعدی
+next_label=بعدی
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=صفحه
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=از {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}از {{pagesCount}})
+
+zoom_out.title=کوچکنمایی
+zoom_out_label=کوچکنمایی
+zoom_in.title=بزرگنمایی
+zoom_in_label=بزرگنمایی
+zoom.title=زوم
+presentation_mode.title=تغییر به حالت ارائه
+presentation_mode_label=حالت ارائه
+open_file.title=باز کردن پرونده
+open_file_label=باز کردن
+print.title=چاپ
+print_label=چاپ
+download.title=بارگیری
+download_label=بارگیری
+bookmark.title=نمای فعلی (رونوشت و یا نشان دادن در پنجره جدید)
+bookmark_label=نمای فعلی
+
+# Secondary toolbar and context menu
+tools.title=ابزارها
+tools_label=ابزارها
+first_page.title=برو به اولین صفحه
+first_page_label=برو به اولین صفحه
+last_page.title=برو به آخرین صفحه
+last_page_label=برو به آخرین صفحه
+page_rotate_cw.title=چرخش ساعتگرد
+page_rotate_cw_label=چرخش ساعتگرد
+page_rotate_ccw.title=چرخش پاد ساعتگرد
+page_rotate_ccw_label=چرخش پاد ساعتگرد
+
+cursor_text_select_tool.title=فعال کردن ابزارِ انتخابِ متن
+cursor_text_select_tool_label=ابزارِ انتخابِ متن
+cursor_hand_tool.title=فعال کردن ابزارِ دست
+cursor_hand_tool_label=ابزار دست
+
+scroll_vertical.title=استفاده از پیمایش عمودی
+scroll_vertical_label=پیمایش عمودی
+scroll_horizontal.title=استفاده از پیمایش افقی
+scroll_horizontal_label=پیمایش افقی
+
+
+# Document properties dialog box
+document_properties.title=خصوصیات سند...
+document_properties_label=خصوصیات سند...
+document_properties_file_name=نام فایل:
+document_properties_file_size=حجم پرونده:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت)
+document_properties_title=عنوان:
+document_properties_author=نویسنده:
+document_properties_subject=موضوع:
+document_properties_keywords=کلیدواژهها:
+document_properties_creation_date=تاریخ ایجاد:
+document_properties_modification_date=تاریخ ویرایش:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=ایجاد کننده:
+document_properties_producer=ایجاد کننده PDF:
+document_properties_version=نسخه PDF:
+document_properties_page_count=تعداد صفحات:
+document_properties_page_size=اندازه صفحه:
+document_properties_page_size_unit_inches=اینچ
+document_properties_page_size_unit_millimeters=میلیمتر
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=نامه
+document_properties_page_size_name_legal=حقوقی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=بله
+document_properties_linearized_no=خیر
+document_properties_close=بستن
+
+print_progress_message=آماده سازی مدارک برای چاپ کردن…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=لغو
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=باز و بسته کردن نوار کناری
+toggle_sidebar_label=تغییرحالت نوارکناری
+document_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید)
+document_outline_label=طرح نوشتار
+attachments.title=نمایش پیوستها
+attachments_label=پیوستها
+thumbs.title=نمایش تصاویر بندانگشتی
+thumbs_label=تصاویر بندانگشتی
+findbar.title=جستجو در سند
+findbar_label=پیدا کردن
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=صفحه {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=تصویر بند انگشتی صفحه {{page}}
+
+# Find panel button title and messages
+find_input.title=پیدا کردن
+find_input.placeholder=پیدا کردن در سند…
+find_previous.title=پیدا کردن رخداد قبلی عبارت
+find_previous_label=قبلی
+find_next.title=پیدا کردن رخداد بعدی عبارت
+find_next_label=بعدی
+find_highlight=برجسته و هایلایت کردن همه موارد
+find_match_case_label=تطبیق کوچکی و بزرگی حروف
+find_entire_word_label=تمام کلمهها
+find_reached_top=به بالای صفحه رسیدیم، از پایین ادامه میدهیم
+find_reached_bottom=به آخر صفحه رسیدیم، از بالا ادامه میدهیم
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count[one]={{current}} از {{total}} مطابقت دارد
+find_match_count[two]={{current}} از {{total}} مطابقت دارد
+find_match_count[few]={{current}} از {{total}} مطابقت دارد
+find_match_count[many]={{current}} از {{total}} مطابقت دارد
+find_match_count[other]={{current}} از {{total}} مطابقت دارد
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=عبارت پیدا نشد
+
+# Error panel labels
+error_more_info=اطلاعات بیشتر
+error_less_info=اطلاعات کمتر
+error_close=بستن
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js ورژن{{version}} (ساخت: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پیام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=توده: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=پرونده: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=سطر: {{line}}
+rendering_error=هنگام بارگیری صفحه خطایی رخ داد.
+
+# Predefined zoom values
+page_scale_width=عرض صفحه
+page_scale_fit=اندازه کردن صفحه
+page_scale_auto=بزرگنمایی خودکار
+page_scale_actual=اندازه واقعی
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد.
+invalid_file_error=پرونده PDF نامعتبر یامعیوب میباشد.
+missing_file_error=پرونده PDF یافت نشد.
+unexpected_response_error=پاسخ پیش بینی نشده سرور
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید.
+password_invalid=گذرواژه نامعتبر. لطفا مجددا تلاش کنید.
+password_ok=تأیید
+password_cancel=لغو
+
+printing_not_supported=هشدار: قابلیت چاپ بهطور کامل در این مرورگر پشتیبانی نمیشود.
+printing_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد.
+web_fonts_disabled=فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد.
diff --git a/app/assets/javascripts/publications/locale/ff/viewer.properties b/app/assets/javascripts/publications/locale/ff/viewer.properties
new file mode 100644
index 0000000..bc95457
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ff/viewer.properties
@@ -0,0 +1,234 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Hello Ɓennungo
+previous_label=Ɓennuɗo
+next.title=Hello faango
+next_label=Yeeso
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Hello
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=e nder {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Lonngo Woɗɗa
+zoom_out_label=Lonngo Woɗɗa
+zoom_in.title=Lonngo Ara
+zoom_in_label=Lonngo Ara
+zoom.title=Lonngo
+presentation_mode.title=Faytu to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Uddit Fiilde
+open_file_label=Uddit
+print.title=Winndito
+print_label=Winndito
+download.title=Aawto
+download_label=Aawto
+bookmark.title=Jiytol gonangol (natto walla uddit e henorde)
+bookmark_label=Jiytol Gonangol
+
+# Secondary toolbar and context menu
+tools.title=Kuutorɗe
+tools_label=Kuutorɗe
+first_page.title=Yah to hello adanngo
+first_page_label=Yah to hello adanngo
+last_page.title=Yah to hello wattindiingo
+last_page_label=Yah to hello wattindiingo
+page_rotate_cw.title=Yiiltu Faya Ñaamo
+page_rotate_cw_label=Yiiltu Faya Ñaamo
+page_rotate_ccw.title=Yiiltu Faya Nano
+page_rotate_ccw_label=Yiiltu Faya Nano
+
+cursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi
+cursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi
+cursor_hand_tool.title=Hurmin kuutorgal junngo
+cursor_hand_tool_label=Kaɓirgel junngo
+
+scroll_vertical.title=Huutoro gorwitol daringol
+scroll_vertical_label=Gorwitol daringol
+scroll_horizontal.title=Huutoro gorwitol lelingol
+scroll_horizontal_label=Gorwitol daringol
+scroll_wrapped.title=Huutoro gorwitol coomingol
+scroll_wrapped_label=Gorwitol coomingol
+
+spread_none.title=Hoto tawtu kelle kelle
+spread_none_label=Alaa Spreads
+spread_odd.title=Tawtu kelle puɗɗortooɗe kelle teelɗe
+spread_odd_label=Kelle teelɗe
+spread_even.title=Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe
+spread_even_label=Kelle teeltuɗe
+
+# Document properties dialog box
+document_properties.title=Keeroraaɗi Winndannde…
+document_properties_label=Keeroraaɗi Winndannde…
+document_properties_file_name=Innde fiilde:
+document_properties_file_size=Ɓetol fiilde:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bite)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bite)
+document_properties_title=Tiitoonde:
+document_properties_author=Binnduɗo:
+document_properties_subject=Toɓɓere:
+document_properties_keywords=Kelmekele jiytirɗe:
+document_properties_creation_date=Ñalnde Sosaa:
+document_properties_modification_date=Ñalnde Waylaa:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cosɗo:
+document_properties_producer=Paggiiɗo PDF:
+document_properties_version=Yamre PDF:
+document_properties_page_count=Limoore Kelle:
+document_properties_page_size=Ɓeto Hello:
+document_properties_page_size_unit_inches=nder
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=dariingo
+document_properties_page_size_orientation_landscape=wertiingo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Ɓataake
+document_properties_page_size_name_legal=Laawol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ɗisngo geese yaawngo:
+document_properties_linearized_yes=Eey
+document_properties_linearized_no=Alaa
+document_properties_close=Uddu
+
+print_progress_message=Nana heboo winnditaade fiilannde…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Haaytu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggilo Palal Sawndo
+toggle_sidebar_label=Toggilo Palal Sawndo
+document_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof)
+document_outline_label=Toɓɓe Fiilannde
+attachments.title=Hollu Ɗisanɗe
+attachments_label=Ɗisanɗe
+thumbs.title=Hollu Dooɓe
+thumbs_label=Dooɓe
+findbar.title=Yiylo e fiilannde
+findbar_label=Yiytu
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Hello {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Dooɓre Hello {{page}}
+
+# Find panel button title and messages
+find_input.title=Yiytu
+find_input.placeholder=Yiylo nder dokimaa
+find_previous.title=Yiylo cilol ɓennugol konngol ngol
+find_previous_label=Ɓennuɗo
+find_next.title=Yiylo cilol garowol konngol ngol
+find_next_label=Yeeso
+find_highlight=Jalbin fof
+find_match_case_label=Jaaɓnu darnde
+find_entire_word_label=Kelme timmuɗe tan
+find_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les
+find_reached_bottom=Heɓii hoore fiilannde, jokku faya les
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} wonande laabi {{total}}
+find_match_count[two]={{current}} wonande laabi {{total}}
+find_match_count[few]={{current}} wonande laabi {{total}}
+find_match_count[many]={{current}} wonande laabi {{total}}
+find_match_count[other]={{current}} wonande laabi {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[one]=Ko ɓuri laani {{limit}}
+find_match_count_limit[two]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[few]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[many]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[other]=Ko ɓuri laabi {{limit}}
+find_not_found=Konngi njiyataa
+
+# Error panel labels
+error_more_info=Ɓeydu Humpito
+error_less_info=Ustu Humpito
+error_close=Uddu
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ɓatakuure: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fiilde: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Gorol: {{line}}
+rendering_error=Juumre waɗii tuma nde yoŋkittoo hello.
+
+# Predefined zoom values
+page_scale_width=Njaajeendi Hello
+page_scale_fit=Keƴeendi Hello
+page_scale_auto=Loongorde Jaajol
+page_scale_actual=Ɓetol Jaati
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Juumre waɗii tuma nde loowata PDF oo.
+invalid_file_error=Fiilde PDF moƴƴaani walla jiibii.
+missing_file_error=Fiilde PDF ena ŋakki.
+unexpected_response_error=Jaabtol sarworde tijjinooka.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Siiftannde]
+password_label=Naatu finnde ngam uddite ndee fiilde PDF.
+password_invalid=Finnde moƴƴaani. Tiiɗno eto kadi.
+password_ok=OK
+password_cancel=Haaytu
+
+printing_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde.
+printing_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol.
+web_fonts_disabled=Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe.
diff --git a/app/assets/javascripts/publications/locale/fi/viewer.properties b/app/assets/javascripts/publications/locale/fi/viewer.properties
new file mode 100644
index 0000000..23496e9
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/fi/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Edellinen sivu
+previous_label=Edellinen
+next.title=Seuraava sivu
+next_label=Seuraava
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sivu
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Loitonna
+zoom_out_label=Loitonna
+zoom_in.title=Lähennä
+zoom_in_label=Lähennä
+zoom.title=Suurennus
+presentation_mode.title=Siirry esitystilaan
+presentation_mode_label=Esitystila
+open_file.title=Avaa tiedosto
+open_file_label=Avaa
+print.title=Tulosta
+print_label=Tulosta
+download.title=Lataa
+download_label=Lataa
+bookmark.title=Avoin ikkuna (kopioi tai avaa uuteen ikkunaan)
+bookmark_label=Avoin ikkuna
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Siirry ensimmäiselle sivulle
+first_page_label=Siirry ensimmäiselle sivulle
+last_page.title=Siirry viimeiselle sivulle
+last_page_label=Siirry viimeiselle sivulle
+page_rotate_cw.title=Kierrä oikealle
+page_rotate_cw_label=Kierrä oikealle
+page_rotate_ccw.title=Kierrä vasemmalle
+page_rotate_ccw_label=Kierrä vasemmalle
+
+cursor_text_select_tool.title=Käytä tekstinvalintatyökalua
+cursor_text_select_tool_label=Tekstinvalintatyökalu
+cursor_hand_tool.title=Käytä käsityökalua
+cursor_hand_tool_label=Käsityökalu
+
+scroll_page.title=Käytä sivun vieritystä
+scroll_page_label=Sivun vieritys
+scroll_vertical.title=Käytä pystysuuntaista vieritystä
+scroll_vertical_label=Pystysuuntainen vieritys
+scroll_horizontal.title=Käytä vaakasuuntaista vieritystä
+scroll_horizontal_label=Vaakasuuntainen vieritys
+scroll_wrapped.title=Käytä rivittyvää vieritystä
+scroll_wrapped_label=Rivittyvä vieritys
+
+spread_none.title=Älä yhdistä sivuja aukeamiksi
+spread_none_label=Ei aukeamia
+spread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta
+spread_odd_label=Parittomalta alkavat aukeamat
+spread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta
+spread_even_label=Parilliselta alkavat aukeamat
+
+# Document properties dialog box
+document_properties.title=Dokumentin ominaisuudet…
+document_properties_label=Dokumentin ominaisuudet…
+document_properties_file_name=Tiedostonimi:
+document_properties_file_size=Tiedoston koko:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kt ({{size_b}} tavua)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mt ({{size_b}} tavua)
+document_properties_title=Otsikko:
+document_properties_author=Tekijä:
+document_properties_subject=Aihe:
+document_properties_keywords=Avainsanat:
+document_properties_creation_date=Luomispäivämäärä:
+document_properties_modification_date=Muokkauspäivämäärä:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Luoja:
+document_properties_producer=PDF-tuottaja:
+document_properties_version=PDF-versio:
+document_properties_page_count=Sivujen määrä:
+document_properties_page_size=Sivun koko:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pysty
+document_properties_page_size_orientation_landscape=vaaka
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Nopea web-katselu:
+document_properties_linearized_yes=Kyllä
+document_properties_linearized_no=Ei
+document_properties_close=Sulje
+
+print_progress_message=Valmistellaan dokumenttia tulostamista varten…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Peruuta
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Näytä/piilota sivupaneeli
+toggle_sidebar_notification2.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja)
+toggle_sidebar_label=Näytä/piilota sivupaneeli
+document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla)
+document_outline_label=Dokumentin sisällys
+attachments.title=Näytä liitteet
+attachments_label=Liitteet
+layers.title=Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan)
+layers_label=Tasot
+thumbs.title=Näytä pienoiskuvat
+thumbs_label=Pienoiskuvat
+current_outline_item.title=Etsi nykyinen sisällyksen kohta
+current_outline_item_label=Nykyinen sisällyksen kohta
+findbar.title=Etsi dokumentista
+findbar_label=Etsi
+
+additional_layers=Lisätasot
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Sivu {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sivu {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Pienoiskuva sivusta {{page}}
+
+# Find panel button title and messages
+find_input.title=Etsi
+find_input.placeholder=Etsi dokumentista…
+find_previous.title=Etsi hakusanan edellinen osuma
+find_previous_label=Edellinen
+find_next.title=Etsi hakusanan seuraava osuma
+find_next_label=Seuraava
+find_highlight=Korosta kaikki
+find_match_case_label=Huomioi kirjainkoko
+find_entire_word_label=Kokonaiset sanat
+find_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta
+find_reached_bottom=Päästiin dokumentin loppuun, jatketaan alusta
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} osuma
+find_match_count[two]={{current}} / {{total}} osumaa
+find_match_count[few]={{current}} / {{total}} osumaa
+find_match_count[many]={{current}} / {{total}} osumaa
+find_match_count[other]={{current}} / {{total}} osumaa
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[one]=Enemmän kuin {{limit}} osuma
+find_match_count_limit[two]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[few]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[many]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[other]=Enemmän kuin {{limit}} osumaa
+find_not_found=Hakusanaa ei löytynyt
+
+# Error panel labels
+error_more_info=Lisätietoja
+error_less_info=Lisätietoja
+error_close=Sulje
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (kooste: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Virheilmoitus: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pino: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tiedosto: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rivi: {{line}}
+rendering_error=Tapahtui virhe piirrettäessä sivua.
+
+# Predefined zoom values
+page_scale_width=Sivun leveys
+page_scale_fit=Koko sivu
+page_scale_auto=Automaattinen suurennus
+page_scale_actual=Todellinen koko
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Ladataan…
+loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa.
+invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto.
+missing_file_error=Puuttuva PDF-tiedosto.
+unexpected_response_error=Odottamaton vastaus palvelimelta.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Kirjoita PDF-tiedoston salasana.
+password_invalid=Virheellinen salasana. Yritä uudestaan.
+password_ok=OK
+password_cancel=Peruuta
+
+printing_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja.
+printing_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa.
+web_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja.
diff --git a/app/assets/javascripts/publications/locale/fr/viewer.properties b/app/assets/javascripts/publications/locale/fr/viewer.properties
new file mode 100644
index 0000000..54d8033
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/fr/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Page précédente
+previous_label=Précédent
+next.title=Page suivante
+next_label=Suivant
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=sur {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} sur {{pagesCount}})
+
+zoom_out.title=Zoom arrière
+zoom_out_label=Zoom arrière
+zoom_in.title=Zoom avant
+zoom_in_label=Zoom avant
+zoom.title=Zoom
+presentation_mode.title=Basculer en mode présentation
+presentation_mode_label=Mode présentation
+open_file.title=Ouvrir le fichier
+open_file_label=Ouvrir le fichier
+print.title=Imprimer
+print_label=Imprimer
+download.title=Télécharger
+download_label=Télécharger
+bookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre)
+bookmark_label=Affichage actuel
+
+# Secondary toolbar and context menu
+tools.title=Outils
+tools_label=Outils
+first_page.title=Aller à la première page
+first_page_label=Aller à la première page
+last_page.title=Aller à la dernière page
+last_page_label=Aller à la dernière page
+page_rotate_cw.title=Rotation horaire
+page_rotate_cw_label=Rotation horaire
+page_rotate_ccw.title=Rotation antihoraire
+page_rotate_ccw_label=Rotation antihoraire
+
+cursor_text_select_tool.title=Activer l’outil de sélection de texte
+cursor_text_select_tool_label=Outil de sélection de texte
+cursor_hand_tool.title=Activer l’outil main
+cursor_hand_tool_label=Outil main
+
+scroll_page.title=Utiliser le défilement par page
+scroll_page_label=Défilement par page
+scroll_vertical.title=Utiliser le défilement vertical
+scroll_vertical_label=Défilement vertical
+scroll_horizontal.title=Utiliser le défilement horizontal
+scroll_horizontal_label=Défilement horizontal
+scroll_wrapped.title=Utiliser le défilement par bloc
+scroll_wrapped_label=Défilement par bloc
+
+spread_none.title=Ne pas afficher les pages deux à deux
+spread_none_label=Pas de double affichage
+spread_odd.title=Afficher les pages par deux, impaires à gauche
+spread_odd_label=Doubles pages, impaires à gauche
+spread_even.title=Afficher les pages par deux, paires à gauche
+spread_even_label=Doubles pages, paires à gauche
+
+# Document properties dialog box
+document_properties.title=Propriétés du document…
+document_properties_label=Propriétés du document…
+document_properties_file_name=Nom du fichier :
+document_properties_file_size=Taille du fichier :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ko ({{size_b}} octets)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mo ({{size_b}} octets)
+document_properties_title=Titre :
+document_properties_author=Auteur :
+document_properties_subject=Sujet :
+document_properties_keywords=Mots-clés :
+document_properties_creation_date=Date de création :
+document_properties_modification_date=Modifié le :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} à {{time}}
+document_properties_creator=Créé par :
+document_properties_producer=Outil de conversion PDF :
+document_properties_version=Version PDF :
+document_properties_page_count=Nombre de pages :
+document_properties_page_size=Taille de la page :
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=paysage
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=lettre
+document_properties_page_size_name_legal=document juridique
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Affichage rapide des pages web :
+document_properties_linearized_yes=Oui
+document_properties_linearized_no=Non
+document_properties_close=Fermer
+
+print_progress_message=Préparation du document pour l’impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Annuler
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Afficher/Masquer le panneau latéral
+toggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques)
+toggle_sidebar_label=Afficher/Masquer le panneau latéral
+document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments)
+document_outline_label=Signets du document
+attachments.title=Afficher les pièces jointes
+attachments_label=Pièces jointes
+layers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut)
+layers_label=Calques
+thumbs.title=Afficher les vignettes
+thumbs_label=Vignettes
+current_outline_item.title=Trouver l’élément de plan actuel
+current_outline_item_label=Élément de plan actuel
+findbar.title=Rechercher dans le document
+findbar_label=Rechercher
+
+additional_layers=Calques additionnels
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vignette de la page {{page}}
+
+# Find panel button title and messages
+find_input.title=Rechercher
+find_input.placeholder=Rechercher dans le document…
+find_previous.title=Trouver l’occurrence précédente de l’expression
+find_previous_label=Précédent
+find_next.title=Trouver la prochaine occurrence de l’expression
+find_next_label=Suivant
+find_highlight=Tout surligner
+find_match_case_label=Respecter la casse
+find_entire_word_label=Mots entiers
+find_reached_top=Haut de la page atteint, poursuite depuis la fin
+find_reached_bottom=Bas de la page atteint, poursuite au début
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Occurrence {{current}} sur {{total}}
+find_match_count[two]=Occurrence {{current}} sur {{total}}
+find_match_count[few]=Occurrence {{current}} sur {{total}}
+find_match_count[many]=Occurrence {{current}} sur {{total}}
+find_match_count[other]=Occurrence {{current}} sur {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Plus de {{limit}} correspondances
+find_match_count_limit[one]=Plus de {{limit}} correspondance
+find_match_count_limit[two]=Plus de {{limit}} correspondances
+find_match_count_limit[few]=Plus de {{limit}} correspondances
+find_match_count_limit[many]=Plus de {{limit}} correspondances
+find_match_count_limit[other]=Plus de {{limit}} correspondances
+find_not_found=Expression non trouvée
+
+# Error panel labels
+error_more_info=Plus d’informations
+error_less_info=Moins d’informations
+error_close=Fermer
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pile : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichier : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ligne : {{line}}
+rendering_error=Une erreur s’est produite lors de l’affichage de la page.
+
+# Predefined zoom values
+page_scale_width=Pleine largeur
+page_scale_fit=Page entière
+page_scale_auto=Zoom automatique
+page_scale_actual=Taille réelle
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Chargement…
+loading_error=Une erreur s’est produite lors du chargement du fichier PDF.
+invalid_file_error=Fichier PDF invalide ou corrompu.
+missing_file_error=Fichier PDF manquant.
+unexpected_response_error=Réponse inattendue du serveur.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} à {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Annotation {{type}}]
+password_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF.
+password_invalid=Mot de passe incorrect. Veuillez réessayer.
+password_ok=OK
+password_cancel=Annuler
+
+printing_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur.
+printing_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer.
+web_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF.
diff --git a/app/assets/javascripts/publications/locale/fy-NL/viewer.properties b/app/assets/javascripts/publications/locale/fy-NL/viewer.properties
new file mode 100644
index 0000000..09064e9
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/fy-NL/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Foarige side
+previous_label=Foarige
+next.title=Folgjende side
+next_label=Folgjende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=fan {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} fan {{pagesCount}})
+
+zoom_out.title=Utzoome
+zoom_out_label=Utzoome
+zoom_in.title=Ynzoome
+zoom_in_label=Ynzoome
+zoom.title=Zoome
+presentation_mode.title=Wikselje nei presintaasjemodus
+presentation_mode_label=Presintaasjemodus
+open_file.title=Bestân iepenje
+open_file_label=Iepenje
+print.title=Ofdrukke
+print_label=Ofdrukke
+download.title=Downloade
+download_label=Downloade
+bookmark.title=Aktuele finster (kopiearje of iepenje yn nij finster)
+bookmark_label=Aktuele finster
+
+# Secondary toolbar and context menu
+tools.title=Ark
+tools_label=Ark
+first_page.title=Gean nei earste side
+first_page_label=Gean nei earste side
+last_page.title=Gean nei lêste side
+last_page_label=Gean nei lêste side
+page_rotate_cw.title=Rjochtsom draaie
+page_rotate_cw_label=Rjochtsom draaie
+page_rotate_ccw.title=Loftsom draaie
+page_rotate_ccw_label=Loftsom draaie
+
+cursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje
+cursor_text_select_tool_label=Tekstseleksjehelpmiddel
+cursor_hand_tool.title=Hânhelpmiddel ynskeakelje
+cursor_hand_tool_label=Hânhelpmiddel
+
+scroll_page.title=Sideskowen brûke
+scroll_page_label=Sideskowen
+scroll_vertical.title=Fertikaal skowe brûke
+scroll_vertical_label=Fertikaal skowe
+scroll_horizontal.title=Horizontaal skowe brûke
+scroll_horizontal_label=Horizontaal skowe
+scroll_wrapped.title=Skowe mei oersjoch brûke
+scroll_wrapped_label=Skowe mei oersjoch
+
+spread_none.title=Sidesprieding net gearfetsje
+spread_none_label=Gjin sprieding
+spread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers
+spread_odd_label=Uneven sprieding
+spread_even.title=Sidesprieding gearfetsje te starten mei even nûmers
+spread_even_label=Even sprieding
+
+# Document properties dialog box
+document_properties.title=Dokuminteigenskippen…
+document_properties_label=Dokuminteigenskippen…
+document_properties_file_name=Bestânsnamme:
+document_properties_file_size=Bestânsgrutte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Auteur:
+document_properties_subject=Underwerp:
+document_properties_keywords=Kaaiwurden:
+document_properties_creation_date=Oanmaakdatum:
+document_properties_modification_date=Bewurkingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Makker:
+document_properties_producer=PDF-makker:
+document_properties_version=PDF-ferzje:
+document_properties_page_count=Siden:
+document_properties_page_size=Sideformaat:
+document_properties_page_size_unit_inches=yn
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=steand
+document_properties_page_size_orientation_landscape=lizzend
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Juridysk
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Flugge webwerjefte:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nee
+document_properties_close=Slute
+
+print_progress_message=Dokumint tariede oar ôfdrukken…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annulearje
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sidebalke yn-/útskeakelje
+toggle_sidebar_notification2.title=Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen)
+toggle_sidebar_label=Sidebalke yn-/útskeakelje
+document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen)
+document_outline_label=Dokumintoersjoch
+attachments.title=Bylagen toane
+attachments_label=Bylagen
+layers.title=Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten)
+layers_label=Lagen
+thumbs.title=Foarbylden toane
+thumbs_label=Foarbylden
+current_outline_item.title=Aktueel item yn ynhâldsopjefte sykje
+current_outline_item_label=Aktueel item yn ynhâldsopjefte
+findbar.title=Sykje yn dokumint
+findbar_label=Sykje
+
+additional_layers=Oanfoljende lagen
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Foarbyld fan side {{page}}
+
+# Find panel button title and messages
+find_input.title=Sykje
+find_input.placeholder=Sykje yn dokumint…
+find_previous.title=It foarige foarkommen fan de tekst sykje
+find_previous_label=Foarige
+find_next.title=It folgjende foarkommen fan de tekst sykje
+find_next_label=Folgjende
+find_highlight=Alles markearje
+find_match_case_label=Haadlettergefoelich
+find_match_diacritics_label=Diakrityske tekens brûke
+find_entire_word_label=Hiele wurden
+find_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf
+find_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} fan {{total}} oerienkomst
+find_match_count[two]={{current}} fan {{total}} oerienkomsten
+find_match_count[few]={{current}} fan {{total}} oerienkomsten
+find_match_count[many]={{current}} fan {{total}} oerienkomsten
+find_match_count[other]={{current}} fan {{total}} oerienkomsten
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[one]=Mear as {{limit}} oerienkomst
+find_match_count_limit[two]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[few]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[many]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[other]=Mear as {{limit}} oerienkomsten
+find_not_found=Tekst net fûn
+
+# Error panel labels
+error_more_info=Mear ynformaasje
+error_less_info=Minder ynformaasje
+error_close=Slute
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js f{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Berjocht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Bestân: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rigel: {{line}}
+rendering_error=Der is in flater bard by it renderjen fan de side.
+
+# Predefined zoom values
+page_scale_width=Sidebreedte
+page_scale_fit=Hiele side
+page_scale_auto=Automatysk zoome
+page_scale_actual=Werklike grutte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Lade…
+loading_error=Der is in flater bard by it laden fan de PDF.
+invalid_file_error=Ynfalide of korruptearre PDF-bestân.
+missing_file_error=PDF-bestân ûntbrekt.
+unexpected_response_error=Unferwacht serverantwurd.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotaasje]
+password_label=Jou it wachtwurd om dit PDF-bestân te iepenjen.
+password_invalid=Ferkeard wachtwurd. Probearje opnij.
+password_ok=OK
+password_cancel=Annulearje
+
+printing_not_supported=Warning: Printen is net folslein stipe troch dizze browser.
+printing_not_ready=Warning: PDF is net folslein laden om ôf te drukken.
+web_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik.
diff --git a/app/assets/javascripts/publications/locale/ga-IE/viewer.properties b/app/assets/javascripts/publications/locale/ga-IE/viewer.properties
new file mode 100644
index 0000000..e82e55b
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ga-IE/viewer.properties
@@ -0,0 +1,201 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=An Leathanach Roimhe Seo
+previous_label=Roimhe Seo
+next.title=An Chéad Leathanach Eile
+next_label=Ar Aghaidh
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Leathanach
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=as {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} as {{pagesCount}})
+
+zoom_out.title=Súmáil Amach
+zoom_out_label=Súmáil Amach
+zoom_in.title=Súmáil Isteach
+zoom_in_label=Súmáil Isteach
+zoom.title=Súmáil
+presentation_mode.title=Úsáid an Mód Láithreoireachta
+presentation_mode_label=Mód Láithreoireachta
+open_file.title=Oscail Comhad
+open_file_label=Oscail
+print.title=Priontáil
+print_label=Priontáil
+download.title=Íoslódáil
+download_label=Íoslódáil
+bookmark.title=An t-amharc reatha (cóipeáil nó oscail i bhfuinneog nua)
+bookmark_label=An tAmharc Reatha
+
+# Secondary toolbar and context menu
+tools.title=Uirlisí
+tools_label=Uirlisí
+first_page.title=Go dtí an chéad leathanach
+first_page_label=Go dtí an chéad leathanach
+last_page.title=Go dtí an leathanach deiridh
+last_page_label=Go dtí an leathanach deiridh
+page_rotate_cw.title=Rothlaigh ar deiseal
+page_rotate_cw_label=Rothlaigh ar deiseal
+page_rotate_ccw.title=Rothlaigh ar tuathal
+page_rotate_ccw_label=Rothlaigh ar tuathal
+
+cursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs
+cursor_text_select_tool_label=Uirlis Roghnaithe Téacs
+cursor_hand_tool.title=Cumasaigh an Uirlis Láimhe
+cursor_hand_tool_label=Uirlis Láimhe
+
+
+
+# Document properties dialog box
+document_properties.title=Airíonna na Cáipéise…
+document_properties_label=Airíonna na Cáipéise…
+document_properties_file_name=Ainm an chomhaid:
+document_properties_file_size=Méid an chomhaid:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} beart)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} beart)
+document_properties_title=Teideal:
+document_properties_author=Údar:
+document_properties_subject=Ábhar:
+document_properties_keywords=Eochairfhocail:
+document_properties_creation_date=Dáta Cruthaithe:
+document_properties_modification_date=Dáta Athraithe:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cruthaitheoir:
+document_properties_producer=Cruthaitheoir an PDF:
+document_properties_version=Leagan PDF:
+document_properties_page_count=Líon Leathanach:
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=Dún
+
+print_progress_message=Cáipéis á hullmhú le priontáil…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cealaigh
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Scoránaigh an Barra Taoibh
+toggle_sidebar_label=Scoránaigh an Barra Taoibh
+document_outline.title=Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú)
+document_outline_label=Creatlach na Cáipéise
+attachments.title=Taispeáin Iatáin
+attachments_label=Iatáin
+thumbs.title=Taispeáin Mionsamhlacha
+thumbs_label=Mionsamhlacha
+findbar.title=Aimsigh sa Cháipéis
+findbar_label=Aimsigh
+
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Leathanach {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Mionsamhail Leathanaigh {{page}}
+
+# Find panel button title and messages
+find_input.title=Aimsigh
+find_input.placeholder=Aimsigh sa cháipéis…
+find_previous.title=Aimsigh an sampla roimhe seo den nath seo
+find_previous_label=Roimhe seo
+find_next.title=Aimsigh an chéad sampla eile den nath sin
+find_next_label=Ar aghaidh
+find_highlight=Aibhsigh uile
+find_match_case_label=Cásíogair
+find_entire_word_label=Focail iomlána
+find_reached_top=Ag barr na cáipéise, ag leanúint ón mbun
+find_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=Frása gan aimsiú
+
+# Error panel labels
+error_more_info=Tuilleadh Eolais
+error_less_info=Níos Lú Eolais
+error_close=Dún
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teachtaireacht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Cruach: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Comhad: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Líne: {{line}}
+rendering_error=Tharla earráid agus an leathanach á leagan amach.
+
+# Predefined zoom values
+page_scale_width=Leithead Leathanaigh
+page_scale_fit=Laghdaigh go dtí an Leathanach
+page_scale_auto=Súmáil Uathoibríoch
+page_scale_actual=Fíormhéid
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error=Tharla earráid agus an cháipéis PDF á lódáil.
+invalid_file_error=Comhad neamhbhailí nó truaillithe PDF.
+missing_file_error=Comhad PDF ar iarraidh.
+unexpected_response_error=Freagra ón bhfreastalaí nach rabhthas ag súil leis.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anótáil {{type}}]
+password_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt.
+password_invalid=Focal faire mícheart. Déan iarracht eile.
+password_ok=OK
+password_cancel=Cealaigh
+
+printing_not_supported=Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán.
+printing_not_ready=Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte.
+web_fonts_disabled=Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid.
diff --git a/app/assets/javascripts/publications/locale/gd/viewer.properties b/app/assets/javascripts/publications/locale/gd/viewer.properties
new file mode 100644
index 0000000..4f056b1
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/gd/viewer.properties
@@ -0,0 +1,248 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=An duilleag roimhe
+previous_label=Air ais
+next.title=An ath-dhuilleag
+next_label=Air adhart
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Duilleag
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=à {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} à {{pagesCount}})
+
+zoom_out.title=Sùm a-mach
+zoom_out_label=Sùm a-mach
+zoom_in.title=Sùm a-steach
+zoom_in_label=Sùm a-steach
+zoom.title=Sùm
+presentation_mode.title=Gearr leum dhan mhodh taisbeanaidh
+presentation_mode_label=Am modh taisbeanaidh
+open_file.title=Fosgail faidhle
+open_file_label=Fosgail
+print.title=Clò-bhuail
+print_label=Clò-bhuail
+download.title=Luchdaich a-nuas
+download_label=Luchdaich a-nuas
+bookmark.title=An sealladh làithreach (dèan lethbhreac no fosgail e ann an uinneag ùr)
+bookmark_label=An sealladh làithreach
+
+# Secondary toolbar and context menu
+tools.title=Innealan
+tools_label=Innealan
+first_page.title=Rach gun chiad duilleag
+first_page_label=Rach gun chiad duilleag
+last_page.title=Rach gun duilleag mu dheireadh
+last_page_label=Rach gun duilleag mu dheireadh
+page_rotate_cw.title=Cuairtich gu deiseil
+page_rotate_cw_label=Cuairtich gu deiseil
+page_rotate_ccw.title=Cuairtich gu tuathail
+page_rotate_ccw_label=Cuairtich gu tuathail
+
+cursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa
+cursor_text_select_tool_label=Inneal taghadh an teacsa
+cursor_hand_tool.title=Cuir inneal na làimhe an comas
+cursor_hand_tool_label=Inneal na làimhe
+
+scroll_vertical.title=Cleachd sgroladh inghearach
+scroll_vertical_label=Sgroladh inghearach
+scroll_horizontal.title=Cleachd sgroladh còmhnard
+scroll_horizontal_label=Sgroladh còmhnard
+scroll_wrapped.title=Cleachd sgroladh paisgte
+scroll_wrapped_label=Sgroladh paisgte
+
+spread_none.title=Na cuir còmhla sgoileadh dhuilleagan
+spread_none_label=Gun sgaoileadh dhuilleagan
+spread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr
+spread_odd_label=Sgaoileadh dhuilleagan corra
+spread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom
+spread_even_label=Sgaoileadh dhuilleagan cothrom
+
+# Document properties dialog box
+document_properties.title=Roghainnean na sgrìobhainne…
+document_properties_label=Roghainnean na sgrìobhainne…
+document_properties_file_name=Ainm an fhaidhle:
+document_properties_file_size=Meud an fhaidhle:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Tiotal:
+document_properties_author=Ùghdar:
+document_properties_subject=Cuspair:
+document_properties_keywords=Faclan-luirg:
+document_properties_creation_date=Latha a chruthachaidh:
+document_properties_modification_date=Latha atharrachaidh:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cruthadair:
+document_properties_producer=Saothraiche a' PDF:
+document_properties_version=Tionndadh a' PDF:
+document_properties_page_count=Àireamh de dhuilleagan:
+document_properties_page_size=Meud na duilleige:
+document_properties_page_size_unit_inches=ann an
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portraid
+document_properties_page_size_orientation_landscape=dreach-tìre
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Litir
+document_properties_page_size_name_legal=Laghail
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Grad shealladh-lìn:
+document_properties_linearized_yes=Tha
+document_properties_linearized_no=Chan eil
+document_properties_close=Dùin
+
+print_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Sguir dheth
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toglaich am bàr-taoibh
+toggle_sidebar_notification2.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain/breathan aig an sgrìobhainn)
+toggle_sidebar_label=Toglaich am bàr-taoibh
+document_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh)
+document_outline_label=Oir-loidhne na sgrìobhainne
+attachments.title=Seall na ceanglachain
+attachments_label=Ceanglachain
+layers.title=Seall na breathan (dèan briogadh dùbailte airson a h-uile breath ath-shuidheachadh dhan staid bhunaiteach)
+layers_label=Breathan
+thumbs.title=Seall na dealbhagan
+thumbs_label=Dealbhagan
+current_outline_item.title=Lorg nì làithreach na h-oir-loidhne
+current_outline_item_label=Nì làithreach na h-oir-loidhne
+findbar.title=Lorg san sgrìobhainn
+findbar_label=Lorg
+
+additional_layers=Barrachd breathan
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Duilleag {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Duilleag a {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Dealbhag duilleag a {{page}}
+
+# Find panel button title and messages
+find_input.title=Lorg
+find_input.placeholder=Lorg san sgrìobhainn...
+find_previous.title=Lorg làthair roimhe na h-abairt seo
+find_previous_label=Air ais
+find_next.title=Lorg ath-làthair na h-abairt seo
+find_next_label=Air adhart
+find_highlight=Soillsich a h-uile
+find_match_case_label=Aire do litrichean mòra is beaga
+find_entire_word_label=Faclan-slàna
+find_reached_top=Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige
+find_reached_bottom=Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} à {{total}} mhaids
+find_match_count[two]={{current}} à {{total}} mhaids
+find_match_count[few]={{current}} à {{total}} maidsichean
+find_match_count[many]={{current}} à {{total}} maids
+find_match_count[other]={{current}} à {{total}} maids
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Barrachd air {{limit}} maids
+find_match_count_limit[one]=Barrachd air {{limit}} mhaids
+find_match_count_limit[two]=Barrachd air {{limit}} mhaids
+find_match_count_limit[few]=Barrachd air {{limit}} maidsichean
+find_match_count_limit[many]=Barrachd air {{limit}} maids
+find_match_count_limit[other]=Barrachd air {{limit}} maids
+find_not_found=Cha deach an abairt a lorg
+
+# Error panel labels
+error_more_info=Barrachd fiosrachaidh
+error_less_info=Nas lugha de dh'fhiosrachadh
+error_close=Dùin
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teachdaireachd: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stac: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Faidhle: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Loidhne: {{line}}
+rendering_error=Thachair mearachd rè reandaradh na duilleige.
+
+# Predefined zoom values
+page_scale_width=Leud na duilleige
+page_scale_fit=Freagair ri meud na duilleige
+page_scale_auto=Sùm fèin-obrachail
+page_scale_actual=Am fìor-mheud
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=’Ga luchdadh…
+loading_error=Thachair mearachd rè luchdadh a' PDF.
+invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte.
+missing_file_error=Faidhle PDF a tha a dhìth.
+unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Nòtachadh {{type}}]
+password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh.
+password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist?
+password_ok=Ceart ma-thà
+password_cancel=Sguir dheth
+
+printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh.
+printing_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh.
+web_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh.
diff --git a/app/assets/javascripts/publications/locale/gl/viewer.properties b/app/assets/javascripts/publications/locale/gl/viewer.properties
new file mode 100644
index 0000000..d4ea817
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/gl/viewer.properties
@@ -0,0 +1,248 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Páxina anterior
+previous_label=Anterior
+next.title=Seguinte páxina
+next_label=Seguinte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Páxina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Cambiar ao modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir ficheiro
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar ou abrir nunha nova xanela)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir á primeira páxina
+first_page_label=Ir á primeira páxina
+last_page.title=Ir á última páxina
+last_page_label=Ir á última páxina
+page_rotate_cw.title=Rotar no sentido das agullas do reloxo
+page_rotate_cw_label=Rotar no sentido das agullas do reloxo
+page_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo
+page_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo
+
+cursor_text_select_tool.title=Activar a ferramenta de selección de texto
+cursor_text_select_tool_label=Ferramenta de selección de texto
+cursor_hand_tool.title=Activar a ferramenta man
+cursor_hand_tool_label=Ferramenta man
+
+scroll_vertical.title=Usar o desprazamento vertical
+scroll_vertical_label=Desprazamento vertical
+scroll_horizontal.title=Usar o desprazamento horizontal
+scroll_horizontal_label=Desprazamento horizontal
+scroll_wrapped.title=Usar desprazamento en bloque
+scroll_wrapped_label=Desprazamento en bloque
+
+spread_none.title=Non agrupar páxinas
+spread_none_label=Ningún agrupamento
+spread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares
+spread_odd_label=Agrupamento impar
+spread_even.title=Crea grupo de páxinas que comezan con números de páxina pares
+spread_even_label=Agrupamento par
+
+# Document properties dialog box
+document_properties.title=Propiedades do documento…
+document_properties_label=Propiedades do documento…
+document_properties_file_name=Nome do ficheiro:
+document_properties_file_size=Tamaño do ficheiro:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Data de creación:
+document_properties_modification_date=Data de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creado por:
+document_properties_producer=Xenerador do PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Número de páxinas:
+document_properties_page_size=Tamaño da páxina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Vertical
+document_properties_page_size_orientation_landscape=Horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Visualización rápida das páxinas web:
+document_properties_linearized_yes=Si
+document_properties_linearized_no=Non
+document_properties_close=Pechar
+
+print_progress_message=Preparando documento para imprimir…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Amosar/agochar a barra lateral
+toggle_sidebar_notification2.title=Alternar barra lateral (o documento contén esquema/anexos/capas)
+toggle_sidebar_label=Amosar/agochar a barra lateral
+document_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os elementos)
+document_outline_label=Esquema do documento
+attachments.title=Amosar anexos
+attachments_label=Anexos
+layers.title=Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado)
+layers_label=Capas
+thumbs.title=Amosar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Atopar o elemento delimitado actualmente
+current_outline_item_label=Elemento delimitado actualmente
+findbar.title=Atopar no documento
+findbar_label=Atopar
+
+additional_layers=Capas adicionais
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Páxina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Páxina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da páxina {{page}}
+
+# Find panel button title and messages
+find_input.title=Atopar
+find_input.placeholder=Atopar no documento…
+find_previous.title=Atopar a anterior aparición da frase
+find_previous_label=Anterior
+find_next.title=Atopar a seguinte aparición da frase
+find_next_label=Seguinte
+find_highlight=Realzar todo
+find_match_case_label=Diferenciar maiúsculas de minúsculas
+find_entire_word_label=Palabras completas
+find_reached_top=Chegouse ao inicio do documento, continuar desde o final
+find_reached_bottom=Chegouse ao final do documento, continuar desde o inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Máis de {{limit}} coincidencias
+find_match_count_limit[one]=Máis de {{limit}} coincidencia
+find_match_count_limit[two]=Máis de {{limit}} coincidencias
+find_match_count_limit[few]=Máis de {{limit}} coincidencias
+find_match_count_limit[many]=Máis de {{limit}} coincidencias
+find_match_count_limit[other]=Máis de {{limit}} coincidencias
+find_not_found=Non se atopou a frase
+
+# Error panel labels
+error_more_info=Máis información
+error_less_info=Menos información
+error_close=Pechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (Identificador da compilación: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaxe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheiro: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Liña: {{line}}
+rendering_error=Produciuse un erro ao representar a páxina.
+
+# Predefined zoom values
+page_scale_width=Largura da páxina
+page_scale_fit=Axuste de páxina
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=A cargar…
+loading_error=Produciuse un erro ao cargar o PDF.
+invalid_file_error=Ficheiro PDF danado ou non válido.
+missing_file_error=Falta o ficheiro PDF.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Escriba o contrasinal para abrir este ficheiro PDF.
+password_invalid=Contrasinal incorrecto. Tente de novo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: A impresión non é compatíbel de todo con este navegador.
+printing_not_ready=Aviso: O PDF non se cargou completamente para imprimirse.
+web_fonts_disabled=Desactiváronse as fontes web: foi imposíbel usar as fontes incrustadas no PDF.
diff --git a/app/assets/javascripts/publications/locale/gn/viewer.properties b/app/assets/javascripts/publications/locale/gn/viewer.properties
new file mode 100644
index 0000000..e443df9
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/gn/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Kuatiarogue mboyvegua
+previous_label=Mboyvegua
+next.title=Kuatiarogue upeigua
+next_label=Upeigua
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Kuatiarogue
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} gui
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Momichĩ
+zoom_out_label=Momichĩ
+zoom_in.title=Mbotuicha
+zoom_in_label=Mbotuicha
+zoom.title=Tuichakue
+presentation_mode.title=Jehechauka reko moambue
+presentation_mode_label=Jehechauka reko
+open_file.title=Marandurendápe jeike
+open_file_label=Jeike
+print.title=Monguatia
+print_label=Monguatia
+download.title=Mboguejy
+download_label=Mboguejy
+bookmark.title=Ag̃agua jehecha (mbohasarã térã eike peteĩ ovetã pyahúpe)
+bookmark_label=Ag̃agua jehecha
+
+# Secondary toolbar and context menu
+tools.title=Tembipuru
+tools_label=Tembipuru
+first_page.title=Kuatiarogue ñepyrũme jeho
+first_page_label=Kuatiarogue ñepyrũme jeho
+last_page.title=Kuatiarogue pahápe jeho
+last_page_label=Kuatiarogue pahápe jeho
+page_rotate_cw.title=Aravóicha mbojere
+page_rotate_cw_label=Aravóicha mbojere
+page_rotate_ccw.title=Aravo rapykue gotyo mbojere
+page_rotate_ccw_label=Aravo rapykue gotyo mbojere
+
+cursor_text_select_tool.title=Emyandy moñe’ẽrã jeporavo rembipuru
+cursor_text_select_tool_label=Moñe’ẽrã jeporavo rembipuru
+cursor_hand_tool.title=Tembipuru po pegua myandy
+cursor_hand_tool_label=Tembipuru po pegua
+
+scroll_page.title=Eipuru kuatiarogue jeku’e
+scroll_page_label=Kuatiarogue jeku’e
+scroll_vertical.title=Eipuru jeku’e ykeguáva
+scroll_vertical_label=Jeku’e ykeguáva
+scroll_horizontal.title=Eipuru jeku’e yvate gotyo
+scroll_horizontal_label=Jeku’e yvate gotyo
+scroll_wrapped.title=Eipuru jeku’e mbohyrupyre
+scroll_wrapped_label=Jeku’e mbohyrupyre
+
+spread_none.title=Ani ejuaju spreads kuatiarogue ndive
+spread_none_label=Spreads ỹre
+spread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui
+spread_odd_label=Spreads impar
+spread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui
+spread_even_label=Ipukuve uvei
+
+# Document properties dialog box
+document_properties.title=Kuatia mba’etee…
+document_properties_label=Kuatia mba’etee…
+document_properties_file_name=Marandurenda réra:
+document_properties_file_size=Marandurenda tuichakue:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Teratee:
+document_properties_author=Apohára:
+document_properties_subject=Mba’egua:
+document_properties_keywords=Jehero:
+document_properties_creation_date=Teñoihague arange:
+document_properties_modification_date=Iñambue hague arange:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Apo’ypyha:
+document_properties_producer=PDF mbosako’iha:
+document_properties_version=PDF mbojuehegua:
+document_properties_page_count=Kuatiarogue papapy:
+document_properties_page_size=Kuatiarogue tuichakue:
+document_properties_page_size_unit_inches=Amo
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Oĩháicha
+document_properties_page_size_orientation_landscape=apaisado
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Kuatiañe’ẽ
+document_properties_page_size_name_legal=Tee
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ñanduti jahecha pya’e:
+document_properties_linearized_yes=Añete
+document_properties_linearized_no=Ahániri
+document_properties_close=Mboty
+
+print_progress_message=Embosako’i kuatia emonguatia hag̃ua…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Heja
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Tenda yke moambue
+toggle_sidebar_notification2.title=Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha)
+toggle_sidebar_label=Tenda yke moambue
+document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’epuru)
+document_outline_label=Kuatia apopyre
+attachments.title=Moirũha jehechauka
+attachments_label=Moirũha
+layers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe)
+layers_label=Ñuãha
+thumbs.title=Mba’emirĩ jehechauka
+thumbs_label=Mba’emirĩ
+current_outline_item.title=Eheka mba’epuru ag̃aguaitéva
+current_outline_item_label=Mba’epuru ag̃aguaitéva
+findbar.title=Kuatiápe jeheka
+findbar_label=Juhu
+
+additional_layers=Ñuãha moirũguáva
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Kuatiarogue {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Kuatiarogue {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Kuatiarogue mba’emirĩ {{page}}
+
+# Find panel button title and messages
+find_input.title=Juhu
+find_input.placeholder=Kuatiápe jejuhu…
+find_previous.title=Ejuhu ñe’ẽrysýi osẽ’ypy hague
+find_previous_label=Mboyvegua
+find_next.title=Eho ñe’ẽ juhupyre upeiguávape
+find_next_label=Upeigua
+find_highlight=Embojekuaavepa
+find_match_case_label=Ejesareko taiguasu/taimichĩre
+find_entire_word_label=Ñe’ẽ oĩmbáva
+find_reached_top=Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive
+find_reached_bottom=Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} {{total}} ojojoguáva
+find_match_count[two]={{current}} {{total}} ojojoguáva
+find_match_count[few]={{current}} {{total}} ojojoguáva
+find_match_count[many]={{current}} {{total}} ojojoguáva
+find_match_count[other]={{current}} {{total}} ojojoguáva
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[one]=Hetave {{limit}} ojojogua
+find_match_count_limit[two]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[few]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[many]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[other]=Hetave {{limit}} ojojoguáva
+find_not_found=Ñe’ẽrysýi ojejuhu’ỹva
+
+# Error panel labels
+error_more_info=Maranduve
+error_less_info=Sa’ive marandu
+error_close=Mboty
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ñe’ẽmondo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Mbojo’apy: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Marandurenda: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Tairenda: {{line}}
+rendering_error=Oiko jejavy ehechaukasévo kuatiarogue.
+
+# Predefined zoom values
+page_scale_width=Kuatiarogue pekue
+page_scale_fit=Kuatiarogue ñemoĩporã
+page_scale_auto=Tuichakue ijeheguíva
+page_scale_actual=Tuichakue ag̃agua
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Henyhẽhína…
+loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo.
+invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva.
+missing_file_error=Ndaipóri PDF marandurenda
+unexpected_response_error=Mohendahavusu mbohovái ñeha’arõ’ỹva.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Jehaipy {{type}}]
+password_label=Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF.
+password_invalid=Ñe’ẽñemi ndoikóiva. Eha’ã jey.
+password_ok=MONEĨ
+password_cancel=Heja
+
+printing_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive.
+printing_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha.
+web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo’ãi eipuru PDF jehai’íva taity.
diff --git a/app/assets/javascripts/publications/locale/gu-IN/viewer.properties b/app/assets/javascripts/publications/locale/gu-IN/viewer.properties
new file mode 100644
index 0000000..174d464
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/gu-IN/viewer.properties
@@ -0,0 +1,234 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=પહેલાનુ પાનું
+previous_label=પહેલાનુ
+next.title=આગળનુ પાનું
+next_label=આગળનું
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=પાનું
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=નો {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} નો {{pagesCount}})
+
+zoom_out.title=મોટુ કરો
+zoom_out_label=મોટુ કરો
+zoom_in.title=નાનું કરો
+zoom_in_label=નાનું કરો
+zoom.title=નાનું મોટુ કરો
+presentation_mode.title=રજૂઆત સ્થિતિમાં જાવ
+presentation_mode_label=રજૂઆત સ્થિતિ
+open_file.title=ફાઇલ ખોલો
+open_file_label=ખોલો
+print.title=છાપો
+print_label=છારો
+download.title=ડાઉનલોડ
+download_label=ડાઉનલોડ
+bookmark.title=વર્તમાન દૃશ્ય (નવી વિન્ડોમાં નકલ કરો અથવા ખોલો)
+bookmark_label=વર્તમાન દૃશ્ય
+
+# Secondary toolbar and context menu
+tools.title=સાધનો
+tools_label=સાધનો
+first_page.title=પહેલાં પાનામાં જાવ
+first_page_label=પ્રથમ પાનાં પર જાવ
+last_page.title=છેલ્લા પાનાં પર જાવ
+last_page_label=છેલ્લા પાનાં પર જાવ
+page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો
+page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો
+page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો
+page_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો
+
+cursor_text_select_tool.title=ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો
+cursor_text_select_tool_label=ટેક્સ્ટ પસંદગી ટૂલ
+cursor_hand_tool.title=હાથનાં સાધનને સક્રિય કરો
+cursor_hand_tool_label=હેન્ડ ટૂલ
+
+scroll_vertical.title=ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો
+scroll_vertical_label=ઊભી સ્ક્રોલિંગ
+scroll_horizontal.title=આડી સ્ક્રોલિંગનો ઉપયોગ કરો
+scroll_horizontal_label=આડી સ્ક્રોલિંગ
+scroll_wrapped.title=આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો
+scroll_wrapped_label=આવરિત સ્ક્રોલિંગ
+
+spread_none.title=પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં
+spread_none_label=કોઈ સ્પ્રેડ નથી
+spread_odd.title=એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ
+spread_odd_label=એકી સ્પ્રેડ્સ
+spread_even.title=નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ
+spread_even_label=સરખું ફેલાવવું
+
+# Document properties dialog box
+document_properties.title=દસ્તાવેજ ગુણધર્મો…
+document_properties_label=દસ્તાવેજ ગુણધર્મો…
+document_properties_file_name=ફાઇલ નામ:
+document_properties_file_size=ફાઇલ માપ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ)
+document_properties_title=શીર્ષક:
+document_properties_author=લેખક:
+document_properties_subject=વિષય:
+document_properties_keywords=કિવર્ડ:
+document_properties_creation_date=નિર્માણ તારીખ:
+document_properties_modification_date=ફેરફાર તારીખ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=નિર્માતા:
+document_properties_producer=PDF નિર્માતા:
+document_properties_version=PDF આવૃત્તિ:
+document_properties_page_count=પાનાં ગણતરી:
+document_properties_page_size=પૃષ્ઠનું કદ:
+document_properties_page_size_unit_inches=ઇંચ
+document_properties_page_size_unit_millimeters=મીમી
+document_properties_page_size_orientation_portrait=ઉભું
+document_properties_page_size_orientation_landscape=આડુ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=પત્ર
+document_properties_page_size_name_legal=કાયદાકીય
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ઝડપી વૅબ દૃશ્ય:
+document_properties_linearized_yes=હા
+document_properties_linearized_no=ના
+document_properties_close=બંધ કરો
+
+print_progress_message=છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=રદ કરો
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ટૉગલ બાજુપટ્ટી
+toggle_sidebar_label=ટૉગલ બાજુપટ્ટી
+document_outline.title=દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો)
+document_outline_label=દસ્તાવેજ રૂપરેખા
+attachments.title=જોડાણોને બતાવો
+attachments_label=જોડાણો
+thumbs.title=થંબનેલ્સ બતાવો
+thumbs_label=થંબનેલ્સ
+findbar.title=દસ્તાવેજમાં શોધો
+findbar_label=શોધો
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=પાનું {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=પાનાં {{page}} નું થંબનેલ્સ
+
+# Find panel button title and messages
+find_input.title=શોધો
+find_input.placeholder=દસ્તાવેજમાં શોધો…
+find_previous.title=શબ્દસમૂહની પાછલી ઘટનાને શોધો
+find_previous_label=પહેલાંનુ
+find_next.title=શબ્દસમૂહની આગળની ઘટનાને શોધો
+find_next_label=આગળનું
+find_highlight=બધુ પ્રકાશિત કરો
+find_match_case_label=કેસ બંધબેસાડો
+find_entire_word_label=સંપૂર્ણ શબ્દો
+find_reached_top=દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ
+find_reached_bottom=દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} માંથી {{current}} સરખું મળ્યું
+find_match_count[two]={{total}} માંથી {{current}} સરખા મળ્યાં
+find_match_count[few]={{total}} માંથી {{current}} સરખા મળ્યાં
+find_match_count[many]={{total}} માંથી {{current}} સરખા મળ્યાં
+find_match_count[other]={{total}} માંથી {{current}} સરખા મળ્યાં
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[one]={{limit}} કરતાં વધુ સરખું મળ્યું
+find_match_count_limit[two]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[few]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[many]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[other]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_not_found=શબ્દસમૂહ મળ્યુ નથી
+
+# Error panel labels
+error_more_info=વધારે જાણકારી
+error_less_info=ઓછી જાણકારી
+error_close=બંધ કરો
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=સંદેશો: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=સ્ટેક: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ફાઇલ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=વાક્ય: {{line}}
+rendering_error=ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય.
+
+# Predefined zoom values
+page_scale_width=પાનાની પહોળાઇ
+page_scale_fit=પાનું બંધબેસતુ
+page_scale_auto=આપમેળે નાનુંમોટુ કરો
+page_scale_actual=ચોક્કસ માપ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય.
+invalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ.
+missing_file_error=ગુમ થયેલ PDF ફાઇલ.
+unexpected_response_error=અનપેક્ષિત સર્વર પ્રતિસાદ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો.
+password_invalid=અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો.
+password_ok=બરાબર
+password_cancel=રદ કરો
+
+printing_not_supported=ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી.
+printing_not_ready=Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે.
+web_fonts_disabled=વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ.
diff --git a/app/assets/javascripts/publications/locale/he/viewer.properties b/app/assets/javascripts/publications/locale/he/viewer.properties
new file mode 100644
index 0000000..e8ed3f0
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/he/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=דף קודם
+previous_label=קודם
+next.title=דף הבא
+next_label=הבא
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=דף
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=מתוך {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} מתוך {{pagesCount}})
+
+zoom_out.title=התרחקות
+zoom_out_label=התרחקות
+zoom_in.title=התקרבות
+zoom_in_label=התקרבות
+zoom.title=מרחק מתצוגה
+presentation_mode.title=מעבר למצב מצגת
+presentation_mode_label=מצב מצגת
+open_file.title=פתיחת קובץ
+open_file_label=פתיחה
+print.title=הדפסה
+print_label=הדפסה
+download.title=הורדה
+download_label=הורדה
+bookmark.title=תצוגה נוכחית (העתקה או פתיחה בחלון חדש)
+bookmark_label=תצוגה נוכחית
+
+# Secondary toolbar and context menu
+tools.title=כלים
+tools_label=כלים
+first_page.title=מעבר לעמוד הראשון
+first_page_label=מעבר לעמוד הראשון
+last_page.title=מעבר לעמוד האחרון
+last_page_label=מעבר לעמוד האחרון
+page_rotate_cw.title=הטיה עם כיוון השעון
+page_rotate_cw_label=הטיה עם כיוון השעון
+page_rotate_ccw.title=הטיה כנגד כיוון השעון
+page_rotate_ccw_label=הטיה כנגד כיוון השעון
+
+cursor_text_select_tool.title=הפעלת כלי בחירת טקסט
+cursor_text_select_tool_label=כלי בחירת טקסט
+cursor_hand_tool.title=הפעלת כלי היד
+cursor_hand_tool_label=כלי יד
+
+scroll_page.title=שימוש בגלילת עמוד
+scroll_page_label=גלילת עמוד
+scroll_vertical.title=שימוש בגלילה אנכית
+scroll_vertical_label=גלילה אנכית
+scroll_horizontal.title=שימוש בגלילה אופקית
+scroll_horizontal_label=גלילה אופקית
+scroll_wrapped.title=שימוש בגלילה רציפה
+scroll_wrapped_label=גלילה רציפה
+
+spread_none.title=לא לצרף מפתחי עמודים
+spread_none_label=ללא מפתחים
+spread_odd.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים
+spread_odd_label=מפתחים אי־זוגיים
+spread_even.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים
+spread_even_label=מפתחים זוגיים
+
+# Document properties dialog box
+document_properties.title=מאפייני מסמך…
+document_properties_label=מאפייני מסמך…
+document_properties_file_name=שם קובץ:
+document_properties_file_size=גודל הקובץ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ק״ב ({{size_b}} בתים)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} מ״ב ({{size_b}} בתים)
+document_properties_title=כותרת:
+document_properties_author=מחבר:
+document_properties_subject=נושא:
+document_properties_keywords=מילות מפתח:
+document_properties_creation_date=תאריך יצירה:
+document_properties_modification_date=תאריך שינוי:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=יוצר:
+document_properties_producer=יצרן PDF:
+document_properties_version=גרסת PDF:
+document_properties_page_count=מספר דפים:
+document_properties_page_size=גודל העמוד:
+document_properties_page_size_unit_inches=אינ׳
+document_properties_page_size_unit_millimeters=מ״מ
+document_properties_page_size_orientation_portrait=לאורך
+document_properties_page_size_orientation_landscape=לרוחב
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=מכתב
+document_properties_page_size_name_legal=דף משפטי
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=תצוגת דף מהירה:
+document_properties_linearized_yes=כן
+document_properties_linearized_no=לא
+document_properties_close=סגירה
+
+print_progress_message=מסמך בהכנה להדפסה…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ביטול
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=הצגה/הסתרה של סרגל הצד
+toggle_sidebar_notification2.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות)
+toggle_sidebar_label=הצגה/הסתרה של סרגל הצד
+document_outline.title=הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים)
+document_outline_label=תוכן העניינים של המסמך
+attachments.title=הצגת צרופות
+attachments_label=צרופות
+layers.title=הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל)
+layers_label=שכבות
+thumbs.title=הצגת תצוגה מקדימה
+thumbs_label=תצוגה מקדימה
+current_outline_item.title=מציאת פריט תוכן העניינים הנוכחי
+current_outline_item_label=פריט תוכן העניינים הנוכחי
+findbar.title=חיפוש במסמך
+findbar_label=חיפוש
+
+additional_layers=שכבות נוספות
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=עמוד {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=עמוד {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=תצוגה מקדימה של עמוד {{page}}
+
+# Find panel button title and messages
+find_input.title=חיפוש
+find_input.placeholder=חיפוש במסמך…
+find_previous.title=מציאת המופע הקודם של הביטוי
+find_previous_label=קודם
+find_next.title=מציאת המופע הבא של הביטוי
+find_next_label=הבא
+find_highlight=הדגשת הכול
+find_match_case_label=התאמת אותיות
+find_entire_word_label=מילים שלמות
+find_reached_top=הגיע לראש הדף, ממשיך מלמטה
+find_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=תוצאה {{current}} מתוך {{total}}
+find_match_count[two]={{current}} מתוך {{total}} תוצאות
+find_match_count[few]={{current}} מתוך {{total}} תוצאות
+find_match_count[many]={{current}} מתוך {{total}} תוצאות
+find_match_count[other]={{current}} מתוך {{total}} תוצאות
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[one]=יותר מתוצאה אחת
+find_match_count_limit[two]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[few]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[many]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[other]=יותר מ־{{limit}} תוצאות
+find_not_found=הביטוי לא נמצא
+
+# Error panel labels
+error_more_info=מידע נוסף
+error_less_info=פחות מידע
+error_close=סגירה
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js גרסה {{version}} (בנייה: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=הודעה: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=תוכן מחסנית: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=קובץ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=שורה: {{line}}
+rendering_error=אירעה שגיאה בעת עיבוד הדף.
+
+# Predefined zoom values
+page_scale_width=רוחב העמוד
+page_scale_fit=התאמה לעמוד
+page_scale_auto=מרחק מתצוגה אוטומטי
+page_scale_actual=גודל אמיתי
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=בטעינה…
+loading_error=אירעה שגיאה בעת טעינת ה־PDF.
+invalid_file_error=קובץ PDF פגום או לא תקין.
+missing_file_error=קובץ PDF חסר.
+unexpected_response_error=תגובת שרת לא צפויה.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[הערת {{type}}]
+password_label=נא להכניס את הססמה לפתיחת קובץ PDF זה.
+password_invalid=ססמה שגויה. נא לנסות שנית.
+password_ok=אישור
+password_cancel=ביטול
+
+printing_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה.
+printing_not_ready=אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה.
+web_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים.
diff --git a/app/assets/javascripts/publications/locale/hi-IN/viewer.properties b/app/assets/javascripts/publications/locale/hi-IN/viewer.properties
new file mode 100644
index 0000000..27064ee
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/hi-IN/viewer.properties
@@ -0,0 +1,234 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=पिछला पृष्ठ
+previous_label=पिछला
+next.title=अगला पृष्ठ
+next_label=आगे
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृष्ठ:
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} का
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=\u0020छोटा करें
+zoom_out_label=\u0020छोटा करें
+zoom_in.title=बड़ा करें
+zoom_in_label=बड़ा करें
+zoom.title=बड़ा-छोटा करें
+presentation_mode.title=प्रस्तुति अवस्था में जाएँ
+presentation_mode_label=\u0020प्रस्तुति अवस्था
+open_file.title=फ़ाइल खोलें
+open_file_label=\u0020खोलें
+print.title=छापें
+print_label=\u0020छापें
+download.title=डाउनलोड
+download_label=डाउनलोड
+bookmark.title=मौजूदा दृश्य (नए विंडो में नक़ल लें या खोलें)
+bookmark_label=\u0020मौजूदा दृश्य
+
+# Secondary toolbar and context menu
+tools.title=औज़ार
+tools_label=औज़ार
+first_page.title=प्रथम पृष्ठ पर जाएँ
+first_page_label=प्रथम पृष्ठ पर जाएँ
+last_page.title=अंतिम पृष्ठ पर जाएँ
+last_page_label=\u0020अंतिम पृष्ठ पर जाएँ
+page_rotate_cw.title=घड़ी की दिशा में घुमाएँ
+page_rotate_cw_label=घड़ी की दिशा में घुमाएँ
+page_rotate_ccw.title=घड़ी की दिशा से उल्टा घुमाएँ
+page_rotate_ccw_label=\u0020घड़ी की दिशा से उल्टा घुमाएँ
+
+cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम करें
+cursor_text_select_tool_label=पाठ चयन उपकरण
+cursor_hand_tool.title=हस्त उपकरण सक्षम करें
+cursor_hand_tool_label=हस्त उपकरण
+
+scroll_vertical.title=लंबवत स्क्रॉलिंग का उपयोग करें
+scroll_vertical_label=लंबवत स्क्रॉलिंग
+scroll_horizontal.title=क्षितिजिय स्क्रॉलिंग का उपयोग करें
+scroll_horizontal_label=क्षितिजिय स्क्रॉलिंग
+scroll_wrapped.title=व्राप्पेड स्क्रॉलिंग का उपयोग करें
+
+spread_none_label=कोई स्प्रेड उपलब्ध नहीं
+spread_odd.title=विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों
+spread_odd_label=विषम फैलाव
+
+# Document properties dialog box
+document_properties.title=दस्तावेज़ विशेषता...
+document_properties_label=दस्तावेज़ विशेषता...
+document_properties_file_name=फ़ाइल नाम:
+document_properties_file_size=फाइल आकारः
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=शीर्षक:
+document_properties_author=लेखकः
+document_properties_subject=विषय:
+document_properties_keywords=कुंजी-शब्द:
+document_properties_creation_date=निर्माण दिनांक:
+document_properties_modification_date=संशोधन दिनांक:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=निर्माता:
+document_properties_producer=PDF उत्पादक:
+document_properties_version=PDF संस्करण:
+document_properties_page_count=पृष्ठ गिनती:
+document_properties_page_size=पृष्ठ आकार:
+document_properties_page_size_unit_inches=इंच
+document_properties_page_size_unit_millimeters=मिमी
+document_properties_page_size_orientation_portrait=पोर्ट्रेट
+document_properties_page_size_orientation_landscape=लैंडस्केप
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=पत्र
+document_properties_page_size_name_legal=क़ानूनी
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=तीव्र वेब व्यू:
+document_properties_linearized_yes=हाँ
+document_properties_linearized_no=नहीं
+document_properties_close=बंद करें
+
+print_progress_message=छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रद्द करें
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=\u0020स्लाइडर टॉगल करें
+toggle_sidebar_label=स्लाइडर टॉगल करें
+document_outline.title=दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें)
+document_outline_label=दस्तावेज़ आउटलाइन
+attachments.title=संलग्नक दिखायें
+attachments_label=संलग्नक
+thumbs.title=लघुछवियाँ दिखाएँ
+thumbs_label=लघु छवि
+findbar.title=\u0020दस्तावेज़ में ढूँढ़ें
+findbar_label=ढूँढें
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृष्ठ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=पृष्ठ {{page}} की लघु-छवि
+
+# Find panel button title and messages
+find_input.title=ढूँढें
+find_input.placeholder=दस्तावेज़ में खोजें...
+find_previous.title=वाक्यांश की पिछली उपस्थिति ढूँढ़ें
+find_previous_label=पिछला
+find_next.title=वाक्यांश की अगली उपस्थिति ढूँढ़ें
+find_next_label=अगला
+find_highlight=\u0020सभी आलोकित करें
+find_match_case_label=मिलान स्थिति
+find_entire_word_label=संपूर्ण शब्द
+find_reached_top=पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें
+find_reached_bottom=पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} में {{current}} मेल
+find_match_count[two]={{total}} में {{current}} मेल
+find_match_count[few]={{total}} में {{current}} मेल
+find_match_count[many]={{total}} में {{current}} मेल
+find_match_count[other]={{total}} में {{current}} मेल
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} से अधिक मेल
+find_match_count_limit[one]={{limit}} से अधिक मेल
+find_match_count_limit[two]={{limit}} से अधिक मेल
+find_match_count_limit[few]={{limit}} से अधिक मेल
+find_match_count_limit[many]={{limit}} से अधिक मेल
+find_match_count_limit[other]={{limit}} से अधिक मेल
+find_not_found=वाक्यांश नहीं मिला
+
+# Error panel labels
+error_more_info=अधिक सूचना
+error_less_info=कम सूचना
+error_close=बंद करें
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=\u0020संदेश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्टैक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फ़ाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=पंक्ति: {{line}}
+rendering_error=पृष्ठ रेंडरिंग के दौरान त्रुटि आई.
+
+# Predefined zoom values
+page_scale_width=\u0020पृष्ठ चौड़ाई
+page_scale_fit=पृष्ठ फिट
+page_scale_auto=स्वचालित जूम
+page_scale_actual=वास्तविक आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF लोड करते समय एक त्रुटि हुई.
+invalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल.
+missing_file_error=\u0020अनुपस्थित PDF फ़ाइल.
+unexpected_response_error=अप्रत्याशित सर्वर प्रतिक्रिया.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=\u0020[{{type}} Annotation]
+password_label=इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें.
+password_invalid=अवैध कूटशब्द, कृपया फिर कोशिश करें.
+password_ok=OK
+password_cancel=रद्द करें
+
+printing_not_supported=चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है.
+printing_not_ready=चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है.
+web_fonts_disabled=वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ.
diff --git a/app/assets/javascripts/publications/locale/hr/viewer.properties b/app/assets/javascripts/publications/locale/hr/viewer.properties
new file mode 100644
index 0000000..1ccf441
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/hr/viewer.properties
@@ -0,0 +1,248 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prethodna stranica
+previous_label=Prethodna
+next.title=Sljedeća stranica
+next_label=Sljedeća
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stranica
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Umanji
+zoom_out_label=Umanji
+zoom_in.title=Uvećaj
+zoom_in_label=Uvećaj
+zoom.title=Zumiranje
+presentation_mode.title=Prebaci u prezentacijski način rada
+presentation_mode_label=Prezentacijski način rada
+open_file.title=Otvori datoteku
+open_file_label=Otvori
+print.title=Ispiši
+print_label=Ispiši
+download.title=Preuzmi
+download_label=Preuzmi
+bookmark.title=Trenutačni prikaz (kopiraj ili otvori u novom prozoru)
+bookmark_label=Trenutačni prikaz
+
+# Secondary toolbar and context menu
+tools.title=Alati
+tools_label=Alati
+first_page.title=Idi na prvu stranicu
+first_page_label=Idi na prvu stranicu
+last_page.title=Idi na posljednju stranicu
+last_page_label=Idi na posljednju stranicu
+page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
+page_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu
+page_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu
+
+cursor_text_select_tool.title=Omogući alat za označavanje teksta
+cursor_text_select_tool_label=Alat za označavanje teksta
+cursor_hand_tool.title=Omogući ručni alat
+cursor_hand_tool_label=Ručni alat
+
+scroll_vertical.title=Koristi okomito pomicanje
+scroll_vertical_label=Okomito pomicanje
+scroll_horizontal.title=Koristi vodoravno pomicanje
+scroll_horizontal_label=Vodoravno pomicanje
+scroll_wrapped.title=Koristi kontinuirani raspored stranica
+scroll_wrapped_label=Kontinuirani raspored stranica
+
+spread_none.title=Ne izrađuj duplerice
+spread_none_label=Pojedinačne stranice
+spread_odd.title=Izradi duplerice koje počinju s neparnim stranicama
+spread_odd_label=Neparne duplerice
+spread_even.title=Izradi duplerice koje počinju s parnim stranicama
+spread_even_label=Parne duplerice
+
+# Document properties dialog box
+document_properties.title=Svojstva dokumenta …
+document_properties_label=Svojstva dokumenta …
+document_properties_file_name=Naziv datoteke:
+document_properties_file_size=Veličina datoteke:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtova)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtova)
+document_properties_title=Naslov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=Ključne riječi:
+document_properties_creation_date=Datum stvaranja:
+document_properties_modification_date=Datum promjene:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Stvaratelj:
+document_properties_producer=PDF stvaratelj:
+document_properties_version=PDF verzija:
+document_properties_page_count=Broj stranica:
+document_properties_page_size=Dimenzije stranice:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=uspravno
+document_properties_page_size_orientation_landscape=položeno
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Brzi web pregled:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Ne
+document_properties_close=Zatvori
+
+print_progress_message=Pripremanje dokumenta za ispis…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Odustani
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Prikaži/sakrij bočnu traku
+toggle_sidebar_notification2.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke/slojeve)
+toggle_sidebar_label=Prikaži/sakrij bočnu traku
+document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki)
+document_outline_label=Struktura dokumenta
+attachments.title=Prikaži privitke
+attachments_label=Privitci
+layers.title=Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje)
+layers_label=Slojevi
+thumbs.title=Prikaži minijature
+thumbs_label=Minijature
+current_outline_item.title=Pronađi trenutačni element strukture
+current_outline_item_label=Trenutačni element strukture
+findbar.title=Pronađi u dokumentu
+findbar_label=Pronađi
+
+additional_layers=Dodatni slojevi
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Stranica {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Stranica {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Minijatura stranice {{page}}
+
+# Find panel button title and messages
+find_input.title=Pronađi
+find_input.placeholder=Pronađi u dokumentu …
+find_previous.title=Pronađi prethodno pojavljivanje ovog izraza
+find_previous_label=Prethodno
+find_next.title=Pronađi sljedeće pojavljivanje ovog izraza
+find_next_label=Sljedeće
+find_highlight=Istankni sve
+find_match_case_label=Razlikovanje velikih i malih slova
+find_entire_word_label=Cijele riječi
+find_reached_top=Dosegnut početak dokumenta, nastavak s kraja
+find_reached_bottom=Dosegnut kraj dokumenta, nastavak s početka
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} od {{total}} se podudara
+find_match_count[two]={{current}} od {{total}} se podudara
+find_match_count[few]={{current}} od {{total}} se podudara
+find_match_count[many]={{current}} od {{total}} se podudara
+find_match_count[other]={{current}} od {{total}} se podudara
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Više od {{limit}} podudaranja
+find_match_count_limit[one]=Više od {{limit}} podudaranja
+find_match_count_limit[two]=Više od {{limit}} podudaranja
+find_match_count_limit[few]=Više od {{limit}} podudaranja
+find_match_count_limit[many]=Više od {{limit}} podudaranja
+find_match_count_limit[other]=Više od {{limit}} podudaranja
+find_not_found=Izraz nije pronađen
+
+# Error panel labels
+error_more_info=Više informacija
+error_less_info=Manje informacija
+error_close=Zatvori
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Poruka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stog: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteka: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Redak: {{line}}
+rendering_error=Došlo je do greške prilikom iscrtavanja stranice.
+
+# Predefined zoom values
+page_scale_width=Prilagodi širini prozora
+page_scale_fit=Prilagodi veličini prozora
+page_scale_auto=Automatsko zumiranje
+page_scale_actual=Stvarna veličina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Učitavanje…
+loading_error=Došlo je do greške pri učitavanju PDF-a.
+invalid_file_error=Neispravna ili oštećena PDF datoteka.
+missing_file_error=Nedostaje PDF datoteka.
+unexpected_response_error=Neočekivani odgovor poslužitelja.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Bilješka]
+password_label=Za otvoranje ove PDF datoteku upiši lozinku.
+password_invalid=Neispravna lozinka. Pokušaj ponovo.
+password_ok=U redu
+password_cancel=Odustani
+
+printing_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje.
+printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za ispis.
+web_fonts_disabled=Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove.
diff --git a/app/assets/javascripts/publications/locale/hsb/viewer.properties b/app/assets/javascripts/publications/locale/hsb/viewer.properties
new file mode 100644
index 0000000..ec01124
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/hsb/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Předchadna strona
+previous_label=Wróćo
+next.title=Přichodna strona
+next_label=Dale
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strona
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pomjeńšić
+zoom_out_label=Pomjeńšić
+zoom_in.title=Powjetšić
+zoom_in_label=Powjetšić
+zoom.title=Skalowanje
+presentation_mode.title=Do prezentaciskeho modusa přeńć
+presentation_mode_label=Prezentaciski modus
+open_file.title=Dataju wočinić
+open_file_label=Wočinić
+print.title=Ćišćeć
+print_label=Ćišćeć
+download.title=Sćahnyć
+download_label=Sćahnyć
+bookmark.title=Aktualny napohlad (kopěrować abo w nowym woknje wočinić)
+bookmark_label=Aktualny napohlad
+
+# Secondary toolbar and context menu
+tools.title=Nastroje
+tools_label=Nastroje
+first_page.title=K prěnjej stronje
+first_page_label=K prěnjej stronje
+last_page.title=K poslednjej stronje
+last_page_label=K poslednjej stronje
+page_rotate_cw.title=K směrej časnika wjerćeć
+page_rotate_cw_label=K směrej časnika wjerćeć
+page_rotate_ccw.title=Přećiwo směrej časnika wjerćeć
+page_rotate_ccw_label=Přećiwo směrej časnika wjerćeć
+
+cursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić
+cursor_text_select_tool_label=Nastroj za wuběranje teksta
+cursor_hand_tool.title=Ručny nastroj zmóžnić
+cursor_hand_tool_label=Ručny nastroj
+
+scroll_page.title=Kulenje strony wužiwać
+scroll_page_label=Kulenje strony
+scroll_vertical.title=Wertikalne suwanje wužiwać
+scroll_vertical_label=Wertikalne suwanje
+scroll_horizontal.title=Horicontalne suwanje wužiwać
+scroll_horizontal_label=Horicontalne suwanje
+scroll_wrapped.title=Postupne suwanje wužiwać
+scroll_wrapped_label=Postupne suwanje
+
+spread_none.title=Strony njezwjazać
+spread_none_label=Žana dwójna strona
+spread_odd.title=Strony započinajo z njerunymi stronami zwjazać
+spread_odd_label=Njerune strony
+spread_even.title=Strony započinajo z runymi stronami zwjazać
+spread_even_label=Rune strony
+
+# Document properties dialog box
+document_properties.title=Dokumentowe kajkosće…
+document_properties_label=Dokumentowe kajkosće…
+document_properties_file_name=Mjeno dataje:
+document_properties_file_size=Wulkosć dataje:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
+document_properties_title=Titul:
+document_properties_author=Awtor:
+document_properties_subject=Předmjet:
+document_properties_keywords=Klučowe słowa:
+document_properties_creation_date=Datum wutworjenja:
+document_properties_modification_date=Datum změny:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Awtor:
+document_properties_producer=PDF-zhotowjer:
+document_properties_version=PDF-wersija:
+document_properties_page_count=Ličba stronow:
+document_properties_page_size=Wulkosć strony:
+document_properties_page_size_unit_inches=cól
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=wysoki format
+document_properties_page_size_orientation_landscape=prěčny format
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Haj
+document_properties_linearized_no=Ně
+document_properties_close=Začinić
+
+print_progress_message=Dokument so za ćišćenje přihotuje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Přetorhnyć
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Bóčnicu pokazać/schować
+toggle_sidebar_notification2.title=Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje)
+toggle_sidebar_label=Bóčnicu pokazać/schować
+document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali)
+document_outline_label=Dokumentowa struktura
+attachments.title=Přiwěški pokazać
+attachments_label=Přiwěški
+layers.title=Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił)
+layers_label=Woršty
+thumbs.title=Miniatury pokazać
+thumbs_label=Miniatury
+current_outline_item.title=Aktualny rozrjadowy zapisk pytać
+current_outline_item_label=Aktualny rozrjadowy zapisk
+findbar.title=W dokumenće pytać
+findbar_label=Pytać
+
+additional_layers=Dalše woršty
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Strona {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strona {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura strony {{page}}
+
+# Find panel button title and messages
+find_input.title=Pytać
+find_input.placeholder=W dokumenće pytać…
+find_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać
+find_previous_label=Wróćo
+find_next.title=Přichodne wustupowanje pytanskeho wuraza pytać
+find_next_label=Dale
+find_highlight=Wšě wuzběhnyć
+find_match_case_label=Wulkopisanje wobkedźbować
+find_match_diacritics_label=Diakritiske znamješka wužiwać
+find_entire_word_label=Cyłe słowa
+find_reached_top=Spočatk dokumenta docpěty, pokročuje so z kóncom
+find_reached_bottom=Kónc dokument docpěty, pokročuje so ze spočatkom
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} z {{total}} wotpowědnika
+find_match_count[two]={{current}} z {{total}} wotpowědnikow
+find_match_count[few]={{current}} z {{total}} wotpowědnikow
+find_match_count[many]={{current}} z {{total}} wotpowědnikow
+find_match_count[other]={{current}} z {{total}} wotpowědnikow
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Wjace hač {{limit}} wotpowědnikow
+find_match_count_limit[one]=Wjace hač {{limit}} wotpowědnik
+find_match_count_limit[two]=Wjace hač {{limit}} wotpowědnikaj
+find_match_count_limit[few]=Wjace hač {{limit}} wotpowědniki
+find_match_count_limit[many]=Wjace hač {{limit}} wotpowědnikow
+find_match_count_limit[other]=Wjace hač {{limit}} wotpowědnikow
+find_not_found=Pytanski wuraz njeje so namakał
+
+# Error panel labels
+error_more_info=Wjace informacijow
+error_less_info=Mjenje informacijow
+error_close=Začinić
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Zdźělenka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Lisćina zawołanjow: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dataja: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linka: {{line}}
+rendering_error=Při zwobraznjenju strony je zmylk wustupił.
+
+# Predefined zoom values
+page_scale_width=Šěrokosć strony
+page_scale_fit=Wulkosć strony
+page_scale_auto=Awtomatiske skalowanje
+page_scale_actual=Aktualna wulkosć
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Začituje so…
+loading_error=Při začitowanju PDF je zmylk wustupił.
+invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja.
+missing_file_error=Falowaca PDF-dataja.
+unexpected_response_error=Njewočakowana serwerowa wotmołwa.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Typ přispomnjenki: {{type}}]
+password_label=Zapodajće hesło, zo byšće PDF-dataju wočinił.
+password_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz.
+password_ok=W porjadku
+password_cancel=Přetorhnyć
+
+printing_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje.
+printing_not_ready=Warnowanje: PDF njeje so za ćišćenje dospołnje začitał.
+web_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać.
diff --git a/app/assets/javascripts/publications/locale/hu/viewer.properties b/app/assets/javascripts/publications/locale/hu/viewer.properties
new file mode 100644
index 0000000..ab6bd55
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/hu/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Előző oldal
+previous_label=Előző
+next.title=Következő oldal
+next_label=Tovább
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Oldal
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=összesen: {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Kicsinyítés
+zoom_out_label=Kicsinyítés
+zoom_in.title=Nagyítás
+zoom_in_label=Nagyítás
+zoom.title=Nagyítás
+presentation_mode.title=Váltás bemutató módba
+presentation_mode_label=Bemutató mód
+open_file.title=Fájl megnyitása
+open_file_label=Megnyitás
+print.title=Nyomtatás
+print_label=Nyomtatás
+download.title=Letöltés
+download_label=Letöltés
+bookmark.title=Jelenlegi nézet (másolás vagy megnyitás új ablakban)
+bookmark_label=Aktuális nézet
+
+# Secondary toolbar and context menu
+tools.title=Eszközök
+tools_label=Eszközök
+first_page.title=Ugrás az első oldalra
+first_page_label=Ugrás az első oldalra
+last_page.title=Ugrás az utolsó oldalra
+last_page_label=Ugrás az utolsó oldalra
+page_rotate_cw.title=Forgatás az óramutató járásával egyezően
+page_rotate_cw_label=Forgatás az óramutató járásával egyezően
+page_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen
+page_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen
+
+cursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása
+cursor_text_select_tool_label=Szövegkijelölő eszköz
+cursor_hand_tool.title=Kéz eszköz bekapcsolása
+cursor_hand_tool_label=Kéz eszköz
+
+scroll_page.title=Oldalgörgetés használata
+scroll_page_label=Oldalgörgetés
+scroll_vertical.title=Függőleges görgetés használata
+scroll_vertical_label=Függőleges görgetés
+scroll_horizontal.title=Vízszintes görgetés használata
+scroll_horizontal_label=Vízszintes görgetés
+scroll_wrapped.title=Rácsos elrendezés használata
+scroll_wrapped_label=Rácsos elrendezés
+
+spread_none.title=Ne tapassza össze az oldalakat
+spread_none_label=Nincs összetapasztás
+spread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve
+spread_odd_label=Összetapasztás: páratlan
+spread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve
+spread_even_label=Összetapasztás: páros
+
+# Document properties dialog box
+document_properties.title=Dokumentum tulajdonságai…
+document_properties_label=Dokumentum tulajdonságai…
+document_properties_file_name=Fájlnév:
+document_properties_file_size=Fájlméret:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bájt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bájt)
+document_properties_title=Cím:
+document_properties_author=Szerző:
+document_properties_subject=Tárgy:
+document_properties_keywords=Kulcsszavak:
+document_properties_creation_date=Létrehozás dátuma:
+document_properties_modification_date=Módosítás dátuma:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Létrehozta:
+document_properties_producer=PDF előállító:
+document_properties_version=PDF verzió:
+document_properties_page_count=Oldalszám:
+document_properties_page_size=Lapméret:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=álló
+document_properties_page_size_orientation_landscape=fekvő
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Jogi információk
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gyors webes nézet:
+document_properties_linearized_yes=Igen
+document_properties_linearized_no=Nem
+document_properties_close=Bezárás
+
+print_progress_message=Dokumentum előkészítése nyomtatáshoz…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Mégse
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Oldalsáv be/ki
+toggle_sidebar_notification2.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz)
+toggle_sidebar_label=Oldalsáv be/ki
+document_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához)
+document_outline_label=Dokumentumvázlat
+attachments.title=Mellékletek megjelenítése
+attachments_label=Van melléklet
+layers.title=Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállításához)
+layers_label=Rétegek
+thumbs.title=Bélyegképek megjelenítése
+thumbs_label=Bélyegképek
+current_outline_item.title=Jelenlegi vázlatelem megkeresése
+current_outline_item_label=Jelenlegi vázlatelem
+findbar.title=Keresés a dokumentumban
+findbar_label=Keresés
+
+additional_layers=További rétegek
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark={{page}}. oldal
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. oldal
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. oldal bélyegképe
+
+# Find panel button title and messages
+find_input.title=Keresés
+find_input.placeholder=Keresés a dokumentumban…
+find_previous.title=A kifejezés előző előfordulásának keresése
+find_previous_label=Előző
+find_next.title=A kifejezés következő előfordulásának keresése
+find_next_label=Tovább
+find_highlight=Összes kiemelése
+find_match_case_label=Kis- és nagybetűk megkülönböztetése
+find_match_diacritics_label=Diakritikus jelek
+find_entire_word_label=Teljes szavak
+find_reached_top=A dokumentum eleje elérve, folytatás a végétől
+find_reached_bottom=A dokumentum vége elérve, folytatás az elejétől
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} találat
+find_match_count[two]={{current}} / {{total}} találat
+find_match_count[few]={{current}} / {{total}} találat
+find_match_count[many]={{current}} / {{total}} találat
+find_match_count[other]={{current}} / {{total}} találat
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Több mint {{limit}} találat
+find_match_count_limit[one]=Több mint {{limit}} találat
+find_match_count_limit[two]=Több mint {{limit}} találat
+find_match_count_limit[few]=Több mint {{limit}} találat
+find_match_count_limit[many]=Több mint {{limit}} találat
+find_match_count_limit[other]=Több mint {{limit}} találat
+find_not_found=A kifejezés nem található
+
+# Error panel labels
+error_more_info=További tudnivalók
+error_less_info=Kevesebb információ
+error_close=Bezárás
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Üzenet: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Verem: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fájl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Sor: {{line}}
+rendering_error=Hiba történt az oldal feldolgozása közben.
+
+# Predefined zoom values
+page_scale_width=Oldalszélesség
+page_scale_fit=Teljes oldal
+page_scale_auto=Automatikus nagyítás
+page_scale_actual=Valódi méret
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Betöltés…
+loading_error=Hiba történt a PDF betöltésekor.
+invalid_file_error=Érvénytelen vagy sérült PDF fájl.
+missing_file_error=Hiányzó PDF fájl.
+unexpected_response_error=Váratlan kiszolgálóválasz.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} megjegyzés]
+password_label=Adja meg a jelszót a PDF fájl megnyitásához.
+password_invalid=Helytelen jelszó. Próbálja újra.
+password_ok=OK
+password_cancel=Mégse
+
+printing_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást.
+printing_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz.
+web_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek.
diff --git a/app/assets/javascripts/publications/locale/hy-AM/viewer.properties b/app/assets/javascripts/publications/locale/hy-AM/viewer.properties
new file mode 100644
index 0000000..a97ae3c
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/hy-AM/viewer.properties
@@ -0,0 +1,238 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Նախորդ էջը
+previous_label=Նախորդը
+next.title=Հաջորդ էջը
+next_label=Հաջորդը
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Էջ.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-ից\u0020
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից
+
+zoom_out.title=Փոքրացնել
+zoom_out_label=Փոքրացնել
+zoom_in.title=Խոշորացնել
+zoom_in_label=Խոշորացնել
+zoom.title=Մասշտաբը\u0020
+presentation_mode.title=Անցնել Ներկայացման եղանակին
+presentation_mode_label=Ներկայացման եղանակ
+open_file.title=Բացել նիշք
+open_file_label=Բացել
+print.title=Տպել
+print_label=Տպել
+download.title=Բեռնել
+download_label=Բեռնել
+bookmark.title=Ընթացիկ տեսքով (պատճենել կամ բացել նոր պատուհանում)
+bookmark_label=Ընթացիկ տեսքը
+
+# Secondary toolbar and context menu
+tools.title=Գործիքներ
+tools_label=Գործիքներ
+first_page.title=Անցնել առաջին էջին
+first_page_label=Անցնել առաջին էջին
+last_page.title=Անցնել վերջին էջին
+last_page_label=Անցնել վերջին էջին
+page_rotate_cw.title=Պտտել ըստ ժամացույցի սլաքի
+page_rotate_cw_label=Պտտել ըստ ժամացույցի սլաքի
+page_rotate_ccw.title=Պտտել հակառակ ժամացույցի սլաքի
+page_rotate_ccw_label=Պտտել հակառակ ժամացույցի սլաքի
+
+cursor_text_select_tool.title=Միացնել գրույթ ընտրելու գործիքը
+cursor_text_select_tool_label=Գրույթը ընտրելու գործիք
+cursor_hand_tool.title=Միացնել Ձեռքի գործիքը
+cursor_hand_tool_label=Ձեռքի գործիք
+
+scroll_vertical.title=Օգտագործել ուղղահայաց ոլորում
+scroll_vertical_label=Ուղղահայաց ոլորում
+scroll_horizontal.title=Օգտագործել հորիզոնական ոլորում
+scroll_horizontal_label=Հորիզոնական ոլորում
+scroll_wrapped.title=Օգտագործել փաթաթված ոլորում
+scroll_wrapped_label=Փաթաթված ոլորում
+
+spread_none.title=Մի միացեք էջի վերածածկերին
+spread_none_label=Չկա վերածածկեր
+spread_odd.title=Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով
+spread_odd_label=Կենտ վերածածկեր
+spread_even.title=Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով
+spread_even_label=Զույգ վերածածկեր
+
+# Document properties dialog box
+document_properties.title=Փաստաթղթի հատկությունները…
+document_properties_label=Փաստաթղթի հատկությունները…
+document_properties_file_name=Նիշքի անունը.
+document_properties_file_size=Նիշք չափը.
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)
+document_properties_title=Վերնագիր.
+document_properties_author=Հեղինակ․
+document_properties_subject=Վերնագիր.
+document_properties_keywords=Հիմնաբառ.
+document_properties_creation_date=Ստեղծելու ամսաթիվը.
+document_properties_modification_date=Փոփոխելու ամսաթիվը.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ստեղծող.
+document_properties_producer=PDF-ի հեղինակը.
+document_properties_version=PDF-ի տարբերակը.
+document_properties_page_count=Էջերի քանակը.
+document_properties_page_size=Էջի չափը.
+document_properties_page_size_unit_inches=ում
+document_properties_page_size_unit_millimeters=մմ
+document_properties_page_size_orientation_portrait=ուղղաձիգ
+document_properties_page_size_orientation_landscape=հորիզոնական
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Նամակ
+document_properties_page_size_name_legal=Օրինական
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Արագ վեբ դիտում․
+document_properties_linearized_yes=Այո
+document_properties_linearized_no=Ոչ
+document_properties_close=Փակել
+
+print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Չեղարկել
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Բացել/Փակել Կողային վահանակը
+toggle_sidebar_label=Բացել/Փակել Կողային վահանակը
+document_outline.title=Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար)
+document_outline_label=Փաստաթղթի բովանդակությունը
+attachments.title=Ցուցադրել կցորդները
+attachments_label=Կցորդներ
+thumbs.title=Ցուցադրել Մանրապատկերը
+thumbs_label=Մանրապատկերը
+findbar.title=Գտնել փաստաթղթում
+findbar_label=Որոնում
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Էջը {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Էջի մանրապատկերը {{page}}
+
+# Find panel button title and messages
+find_input.title=Որոնում
+find_input.placeholder=Գտնել փաստաթղթում...
+find_previous.title=Գտնել անրահայտության նախորդ հանդիպումը
+find_previous_label=Նախորդը
+find_next.title=Գտիր արտահայտության հաջորդ հանդիպումը
+find_next_label=Հաջորդը
+find_highlight=Գունանշել բոլորը
+find_match_case_label=Մեծ(փոքր)ատառ հաշվի առնել
+find_entire_word_label=Ամբողջ բառերը
+find_reached_top=Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից
+find_reached_bottom=Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ հոգնակի(ընդհանուր) ]}
+find_match_count[one]={{current}} {{total}}-ի համընկնումից
+find_match_count[two]={{current}} {{total}}-ի համընկնումներից
+find_match_count[few]={{current}} {{total}}-ի համընկնումներից
+find_match_count[many]={{current}} {{total}}-ի համընկնումներից
+find_match_count[other]={{current}} {{total}}-ի համընկնումներից
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ հոգնակի (սահմանը) ]}
+find_match_count_limit[zero]=Ավելին քան {{limit}} համընկնումները
+find_match_count_limit[one]=Ավելին քան {{limit}} համընկնումը
+find_match_count_limit[two]=Ավելին քան {{limit}} համընկնումներներ
+find_match_count_limit[few]=Ավելին քան {{limit}} համընկնումներներ
+find_match_count_limit[many]=Ավելին քան {{limit}} համընկնումներներ
+find_match_count_limit[other]=Ավելին քան {{limit}} համընկնումներներ
+find_not_found=Արտահայտությունը չգտնվեց
+
+# Error panel labels
+error_more_info=Ավելի շատ տեղեկություն
+error_less_info=Քիչ տեղեկություն
+error_close=Փակել
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (կառուցումը. {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Գրությունը. {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Շեղջ. {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ֆայլ. {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Տողը. {{line}}
+rendering_error=Սխալ՝ էջը ստեղծելիս:
+
+# Predefined zoom values
+page_scale_width=Էջի լայնքը
+page_scale_fit=Ձգել էջը
+page_scale_auto=Ինքնաշխատ
+page_scale_actual=Իրական չափը
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Սխալ՝ PDF ֆայլը բացելիս։
+invalid_file_error=Սխալ կամ վնասված PDF ֆայլ:
+missing_file_error=PDF ֆայլը բացակայում է:
+unexpected_response_error=Սպասարկիչի անսպասելի պատասխան:
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ծանոթություն]
+password_label=Մուտքագրեք PDF-ի գաղտնաբառը:
+password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձեք:
+password_ok=Լավ
+password_cancel=Չեղարկել
+
+printing_not_supported=Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։
+printing_not_ready=Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար:
+web_fonts_disabled=Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները:
diff --git a/app/assets/javascripts/publications/locale/hye/viewer.properties b/app/assets/javascripts/publications/locale/hye/viewer.properties
new file mode 100644
index 0000000..6af5982
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/hye/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Նախորդ էջ
+previous_label=Նախորդը
+next.title=Յաջորդ էջ
+next_label=Յաջորդը
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=էջ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-ից\u0020
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից
+
+zoom_out.title=Փոքրացնել
+zoom_out_label=Փոքրացնել
+zoom_in.title=Խոշորացնել
+zoom_in_label=Խոշորացնել
+zoom.title=Խոշորացում
+presentation_mode.title=Անցնել ներկայացման եղանակին
+presentation_mode_label=Ներկայացման եղանակ
+open_file.title=Բացել նիշքը
+open_file_label=Բացել
+print.title=Տպել
+print_label=Տպել
+download.title=Բեռնել
+download_label=Բեռնել
+bookmark.title=Ընթացիկ տեսքով (պատճէնել կամ բացել նոր պատուհանում)
+bookmark_label=Ընթացիկ տեսք
+
+# Secondary toolbar and context menu
+tools.title=Գործիքներ
+tools_label=Գործիքներ
+first_page.title=Գնալ դէպի առաջին էջ
+first_page_label=Գնալ դէպի առաջին էջ
+last_page.title=Գնալ դէպի վերջին էջ
+last_page_label=Գնալ դէպի վերջին էջ
+page_rotate_cw.title=Պտտել ժամացոյցի սլաքի ուղղութեամբ
+page_rotate_cw_label=Պտտել ժամացոյցի սլաքի ուղղութեամբ
+page_rotate_ccw.title=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
+page_rotate_ccw_label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
+
+cursor_text_select_tool.title=Միացնել գրոյթ ընտրելու գործիքը
+cursor_text_select_tool_label=Գրուածք ընտրելու գործիք
+cursor_hand_tool.title=Միացնել ձեռքի գործիքը
+cursor_hand_tool_label=Ձեռքի գործիք
+
+scroll_page.title=Աւգտագործել էջի ոլորում
+scroll_page_label=Էջի ոլորում
+scroll_vertical.title=Աւգտագործել ուղղահայեաց ոլորում
+scroll_vertical_label=Ուղղահայեաց ոլորում
+scroll_horizontal.title=Աւգտագործել հորիզոնական ոլորում
+scroll_horizontal_label=Հորիզոնական ոլորում
+scroll_wrapped.title=Աւգտագործել փաթաթուած ոլորում
+scroll_wrapped_label=Փաթաթուած ոլորում
+
+spread_none.title=Մի միացէք էջի կոնտեքստում
+spread_none_label=Չկայ կոնտեքստ
+spread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով
+spread_odd_label=Տարաւրինակ կոնտեքստ
+spread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով
+spread_even_label=Հաւասար վերածածկեր
+
+# Document properties dialog box
+document_properties.title=Փաստաթղթի հատկութիւնները…
+document_properties_label=Փաստաթղթի յատկութիւնները…
+document_properties_file_name=Նիշքի անունը․
+document_properties_file_size=Նիշք չափը.
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)
+document_properties_title=Վերնագիր
+document_properties_author=Հեղինակ․
+document_properties_subject=առարկայ
+document_properties_keywords=Հիմնաբառեր
+document_properties_creation_date=Ստեղծման ամսաթիւ
+document_properties_modification_date=Փոփոխութեան ամսաթիւ.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ստեղծող
+document_properties_producer=PDF-ի Արտադրողը.
+document_properties_version=PDF-ի տարբերակը.
+document_properties_page_count=Էջերի քանակը.
+document_properties_page_size=Էջի չափը.
+document_properties_page_size_unit_inches=ում
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ուղղաձիգ
+document_properties_page_size_orientation_landscape=հորիզոնական
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Նամակ
+document_properties_page_size_name_legal=Աւրինական
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Արագ վեբ դիտում․
+document_properties_linearized_yes=Այո
+document_properties_linearized_no=Ոչ
+document_properties_close=Փակել
+
+print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Չեղարկել
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Փոխարկել կողային վահանակը
+toggle_sidebar_notification2.title=Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդներ/շերտեր)
+toggle_sidebar_label=Փոխարկել կողային վահանակը
+document_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար)
+document_outline_label=Փաստաթղթի ուրուագիծ
+attachments.title=Ցուցադրել կցորդները
+attachments_label=Կցորդներ
+layers.title=Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի)
+layers_label=Շերտեր
+thumbs.title=Ցուցադրել մանրապատկերը
+thumbs_label=Մանրապատկեր
+current_outline_item.title=Գտէք ընթացիկ գծագրման տարրը
+current_outline_item_label=Ընթացիկ գծագրման տարր
+findbar.title=Գտնել փաստաթղթում
+findbar_label=Որոնում
+
+additional_layers=Լրացուցիչ շերտեր
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Էջ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Էջը {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Էջի մանրապատկերը {{page}}
+
+# Find panel button title and messages
+find_input.title=Որոնում
+find_input.placeholder=Գտնել փաստաթղթում…
+find_previous.title=Գտնել արտայայտութեան նախորդ արտայայտութիւնը
+find_previous_label=Նախորդը
+find_next.title=Գտիր արտայայտութեան յաջորդ արտայայտութիւնը
+find_next_label=Հաջորդը
+find_highlight=Գունանշել բոլորը
+find_match_case_label=Հաշուի առնել հանգամանքը
+find_entire_word_label=Ամբողջ բառերը
+find_reached_top=Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից
+find_reached_bottom=Հասել էք փաստաթղթի վերջին, շարունակել վերեւից
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} {{total}}-ի համընկնումից
+find_match_count[two]={{current}} {{total}}-ի համընկնումներից
+find_match_count[few]={{current}} {{total}}-ի համընկնումներից
+find_match_count[many]={{current}} {{total}}-ի համընկնումներից
+find_match_count[other]={{current}} {{total}}-ի համընկնումներից
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[one]=Աւելին քան {{limit}} համընկնումը
+find_match_count_limit[two]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[few]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[many]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[other]=Աւելին քան {{limit}} համընկնումները
+find_not_found=Արտայայտութիւնը չգտնուեց
+
+# Error panel labels
+error_more_info=Աւելի շատ տեղեկութիւն
+error_less_info=Քիչ տեղեկութիւն
+error_close=Փակել
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (կառուցումը. {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Գրութիւնը. {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Շեղջ. {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=նիշք․ {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Տողը. {{line}}
+rendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ
+
+# Predefined zoom values
+page_scale_width=Էջի լայնութիւն
+page_scale_fit=Հարմարեցնել էջը
+page_scale_auto=Ինքնաշխատ խոշորացում
+page_scale_actual=Իրական չափը
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Բեռնում…
+loading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։
+invalid_file_error=Սխալ կամ վնասուած PDF նիշք։
+missing_file_error=PDF նիշքը բացակաիւմ է։
+unexpected_response_error=Սպասարկիչի անսպասելի պատասխան։
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ծանոթութիւն]
+password_label=Մուտքագրէք գաղտնաբառը այս PDF նիշքը բացելու համար
+password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձէք:
+password_ok=Լաւ
+password_cancel=Չեղարկել
+
+printing_not_supported=Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։
+printing_not_ready=Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։
+web_fonts_disabled=Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։
diff --git a/app/assets/javascripts/publications/locale/ia/viewer.properties b/app/assets/javascripts/publications/locale/ia/viewer.properties
new file mode 100644
index 0000000..0b2cf95
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ia/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina previe
+previous_label=Previe
+next.title=Pagina sequente
+next_label=Sequente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Distantiar
+zoom_out_label=Distantiar
+zoom_in.title=Approximar
+zoom_in_label=Approximar
+zoom.title=Zoom
+presentation_mode.title=Excambiar a modo presentation
+presentation_mode_label=Modo presentation
+open_file.title=Aperir le file
+open_file_label=Aperir
+print.title=Imprimer
+print_label=Imprimer
+download.title=Discargar
+download_label=Discargar
+bookmark.title=Vista actual (copiar o aperir in un nove fenestra)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Instrumentos
+tools_label=Instrumentos
+first_page.title=Ir al prime pagina
+first_page_label=Ir al prime pagina
+last_page.title=Ir al prime pagina
+last_page_label=Ir al prime pagina
+page_rotate_cw.title=Rotar in senso horari
+page_rotate_cw_label=Rotar in senso horari
+page_rotate_ccw.title=Rotar in senso antihorari
+page_rotate_ccw_label=Rotar in senso antihorari
+
+cursor_text_select_tool.title=Activar le instrumento de selection de texto
+cursor_text_select_tool_label=Instrumento de selection de texto
+cursor_hand_tool.title=Activar le instrumento mano
+cursor_hand_tool_label=Instrumento mano
+
+scroll_page.title=Usar rolamento de pagina
+scroll_page_label=Rolamento de pagina
+scroll_vertical.title=Usar rolamento vertical
+scroll_vertical_label=Rolamento vertical
+scroll_horizontal.title=Usar rolamento horizontal
+scroll_horizontal_label=Rolamento horizontal
+scroll_wrapped.title=Usar rolamento incapsulate
+scroll_wrapped_label=Rolamento incapsulate
+
+spread_none.title=Non junger paginas dual
+spread_none_label=Sin paginas dual
+spread_odd.title=Junger paginas dual a partir de paginas con numeros impar
+spread_odd_label=Paginas dual impar
+spread_even.title=Junger paginas dual a partir de paginas con numeros par
+spread_even_label=Paginas dual par
+
+# Document properties dialog box
+document_properties.title=Proprietates del documento…
+document_properties_label=Proprietates del documento…
+document_properties_file_name=Nomine del file:
+document_properties_file_size=Dimension de file:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titulo:
+document_properties_author=Autor:
+document_properties_subject=Subjecto:
+document_properties_keywords=Parolas clave:
+document_properties_creation_date=Data de creation:
+document_properties_modification_date=Data de modification:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=Productor PDF:
+document_properties_version=Version PDF:
+document_properties_page_count=Numero de paginas:
+document_properties_page_size=Dimension del pagina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Littera
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapide:
+document_properties_linearized_yes=Si
+document_properties_linearized_no=No
+document_properties_close=Clauder
+
+print_progress_message=Preparation del documento pro le impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancellar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Monstrar/celar le barra lateral
+toggle_sidebar_notification2.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos)
+toggle_sidebar_label=Monstrar/celar le barra lateral
+document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos)
+document_outline_label=Schema del documento
+attachments.title=Monstrar le annexos
+attachments_label=Annexos
+layers.title=Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite)
+layers_label=Stratos
+thumbs.title=Monstrar le vignettes
+thumbs_label=Vignettes
+current_outline_item.title=Trovar le elemento de structura actual
+current_outline_item_label=Elemento de structura actual
+findbar.title=Cercar in le documento
+findbar_label=Cercar
+
+additional_layers=Altere stratos
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vignette del pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Cercar
+find_input.placeholder=Cercar in le documento…
+find_previous.title=Trovar le previe occurrentia del phrase
+find_previous_label=Previe
+find_next.title=Trovar le successive occurrentia del phrase
+find_next_label=Sequente
+find_highlight=Evidentiar toto
+find_match_case_label=Distinguer majusculas/minusculas
+find_match_diacritics_label=Differentiar diacriticos
+find_entire_word_label=Parolas integre
+find_reached_top=Initio del documento attingite, continuation ab fin
+find_reached_bottom=Fin del documento attingite, continuation ab initio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} concordantia
+find_match_count[two]={{current}} de {{total}} concordantias
+find_match_count[few]={{current}} de {{total}} concordantias
+find_match_count[many]={{current}} de {{total}} concordantias
+find_match_count[other]={{current}} de {{total}} concordantias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Plus de {{limit}} concordantias
+find_match_count_limit[one]=Plus de {{limit}} concordantia
+find_match_count_limit[two]=Plus de {{limit}} concordantias
+find_match_count_limit[few]=Plus de {{limit}} concordantias
+find_match_count_limit[many]=Plus de {{limit}} correspondentias
+find_match_count_limit[other]=Plus de {{limit}} concordantias
+find_not_found=Phrase non trovate
+
+# Error panel labels
+error_more_info=Plus de informationes
+error_less_info=Minus de informationes
+error_close=Clauder
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linea: {{line}}
+rendering_error=Un error occurreva durante que on processava le pagina.
+
+# Predefined zoom values
+page_scale_width=Plen largor del pagina
+page_scale_fit=Pagina integre
+page_scale_auto=Zoom automatic
+page_scale_actual=Dimension actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Cargante…
+loading_error=Un error occurreva durante que on cargava le file PDF.
+invalid_file_error=File PDF corrumpite o non valide.
+missing_file_error=File PDF mancante.
+unexpected_response_error=Responsa del servitor inexpectate.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Insere le contrasigno pro aperir iste file PDF.
+password_invalid=Contrasigno invalide. Per favor retenta.
+password_ok=OK
+password_cancel=Cancellar
+
+printing_not_supported=Attention : le impression non es totalmente supportate per ce navigator.
+printing_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer.
+web_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate.
diff --git a/app/assets/javascripts/publications/locale/id/viewer.properties b/app/assets/javascripts/publications/locale/id/viewer.properties
new file mode 100644
index 0000000..8bfffde
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/id/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Laman Sebelumnya
+previous_label=Sebelumnya
+next.title=Laman Selanjutnya
+next_label=Selanjutnya
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Halaman
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=dari {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} dari {{pagesCount}})
+
+zoom_out.title=Perkecil
+zoom_out_label=Perkecil
+zoom_in.title=Perbesar
+zoom_in_label=Perbesar
+zoom.title=Perbesaran
+presentation_mode.title=Ganti ke Mode Presentasi
+presentation_mode_label=Mode Presentasi
+open_file.title=Buka Berkas
+open_file_label=Buka
+print.title=Cetak
+print_label=Cetak
+download.title=Unduh
+download_label=Unduh
+bookmark.title=Tampilan Sekarang (salin atau buka di jendela baru)
+bookmark_label=Tampilan Sekarang
+
+# Secondary toolbar and context menu
+tools.title=Alat
+tools_label=Alat
+first_page.title=Buka Halaman Pertama
+first_page_label=Buka Halaman Pertama
+last_page.title=Buka Halaman Terakhir
+last_page_label=Buka Halaman Terakhir
+page_rotate_cw.title=Putar Searah Jarum Jam
+page_rotate_cw_label=Putar Searah Jarum Jam
+page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam
+page_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam
+
+cursor_text_select_tool.title=Aktifkan Alat Seleksi Teks
+cursor_text_select_tool_label=Alat Seleksi Teks
+cursor_hand_tool.title=Aktifkan Alat Tangan
+cursor_hand_tool_label=Alat Tangan
+
+scroll_page.title=Gunakan Pengguliran Laman
+scroll_page_label=Pengguliran Laman
+scroll_vertical.title=Gunakan Penggeseran Vertikal
+scroll_vertical_label=Penggeseran Vertikal
+scroll_horizontal.title=Gunakan Penggeseran Horizontal
+scroll_horizontal_label=Penggeseran Horizontal
+scroll_wrapped.title=Gunakan Penggeseran Terapit
+scroll_wrapped_label=Penggeseran Terapit
+
+spread_none.title=Jangan gabungkan lembar halaman
+spread_none_label=Tidak Ada Lembaran
+spread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil
+spread_odd_label=Lembaran Ganjil
+spread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap
+spread_even_label=Lembaran Genap
+
+# Document properties dialog box
+document_properties.title=Properti Dokumen…
+document_properties_label=Properti Dokumen…
+document_properties_file_name=Nama berkas:
+document_properties_file_size=Ukuran berkas:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Judul:
+document_properties_author=Penyusun:
+document_properties_subject=Subjek:
+document_properties_keywords=Kata Kunci:
+document_properties_creation_date=Tanggal Dibuat:
+document_properties_modification_date=Tanggal Dimodifikasi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Pembuat:
+document_properties_producer=Pemroduksi PDF:
+document_properties_version=Versi PDF:
+document_properties_page_count=Jumlah Halaman:
+document_properties_page_size=Ukuran Laman:
+document_properties_page_size_unit_inches=inci
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=tegak
+document_properties_page_size_orientation_landscape=mendatar
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Tampilan Web Kilat:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Tidak
+document_properties_close=Tutup
+
+print_progress_message=Menyiapkan dokumen untuk pencetakan…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Batalkan
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping
+toggle_sidebar_notification2.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan)
+toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping
+document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item)
+document_outline_label=Kerangka Dokumen
+attachments.title=Tampilkan Lampiran
+attachments_label=Lampiran
+layers.title=Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku)
+layers_label=Lapisan
+thumbs.title=Tampilkan Miniatur
+thumbs_label=Miniatur
+current_outline_item.title=Cari Butir Ikhtisar Saat Ini
+current_outline_item_label=Butir Ikhtisar Saat Ini
+findbar.title=Temukan di Dokumen
+findbar_label=Temukan
+
+additional_layers=Lapisan Tambahan
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Halaman {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Laman {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatur Laman {{page}}
+
+# Find panel button title and messages
+find_input.title=Temukan
+find_input.placeholder=Temukan di dokumen…
+find_previous.title=Temukan kata sebelumnya
+find_previous_label=Sebelumnya
+find_next.title=Temukan lebih lanjut
+find_next_label=Selanjutnya
+find_highlight=Sorot semuanya
+find_match_case_label=Cocokkan BESAR/kecil
+find_entire_word_label=Seluruh teks
+find_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah
+find_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} dari {{total}} hasil
+find_match_count[two]={{current}} dari {{total}} hasil
+find_match_count[few]={{current}} dari {{total}} hasil
+find_match_count[many]={{current}} dari {{total}} hasil
+find_match_count[other]={{current}} dari {{total}} hasil
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[one]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[two]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[few]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[many]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[other]=Ditemukan lebih dari {{limit}}
+find_not_found=Frasa tidak ditemukan
+
+# Error panel labels
+error_more_info=Lebih Banyak Informasi
+error_less_info=Lebih Sedikit Informasi
+error_close=Tutup
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Pesan: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Berkas: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Baris: {{line}}
+rendering_error=Galat terjadi saat merender laman.
+
+# Predefined zoom values
+page_scale_width=Lebar Laman
+page_scale_fit=Muat Laman
+page_scale_auto=Perbesaran Otomatis
+page_scale_actual=Ukuran Asli
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Memuat…
+loading_error=Galat terjadi saat memuat PDF.
+invalid_file_error=Berkas PDF tidak valid atau rusak.
+missing_file_error=Berkas PDF tidak ada.
+unexpected_response_error=Balasan server yang tidak diharapkan.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotasi {{type}}]
+password_label=Masukkan sandi untuk membuka berkas PDF ini.
+password_invalid=Sandi tidak valid. Silakan coba lagi.
+password_ok=Oke
+password_cancel=Batal
+
+printing_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini.
+printing_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak.
+web_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat.
diff --git a/app/assets/javascripts/publications/locale/is/viewer.properties b/app/assets/javascripts/publications/locale/is/viewer.properties
new file mode 100644
index 0000000..0d1dea8
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/is/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Fyrri síða
+previous_label=Fyrri
+next.title=Næsta síða
+next_label=Næsti
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Síða
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=af {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} af {{pagesCount}})
+
+zoom_out.title=Minnka aðdrátt
+zoom_out_label=Minnka aðdrátt
+zoom_in.title=Auka aðdrátt
+zoom_in_label=Auka aðdrátt
+zoom.title=Aðdráttur
+presentation_mode.title=Skipta yfir á kynningarham
+presentation_mode_label=Kynningarhamur
+open_file.title=Opna skrá
+open_file_label=Opna
+print.title=Prenta
+print_label=Prenta
+download.title=Hala niður
+download_label=Hala niður
+bookmark.title=Núverandi sýn (afritaðu eða opnaðu í nýjum glugga)
+bookmark_label=Núverandi sýn
+
+# Secondary toolbar and context menu
+tools.title=Verkfæri
+tools_label=Verkfæri
+first_page.title=Fara á fyrstu síðu
+first_page_label=Fara á fyrstu síðu
+last_page.title=Fara á síðustu síðu
+last_page_label=Fara á síðustu síðu
+page_rotate_cw.title=Snúa réttsælis
+page_rotate_cw_label=Snúa réttsælis
+page_rotate_ccw.title=Snúa rangsælis
+page_rotate_ccw_label=Snúa rangsælis
+
+cursor_text_select_tool.title=Virkja textavalsáhald
+cursor_text_select_tool_label=Textavalsáhald
+cursor_hand_tool.title=Virkja handarverkfæri
+cursor_hand_tool_label=Handarverkfæri
+
+scroll_page.title=Nota síðuskrun
+scroll_page_label=Síðuskrun
+scroll_vertical.title=Nota lóðrétt skrun
+scroll_vertical_label=Lóðrétt skrun
+scroll_horizontal.title=Nota lárétt skrun
+scroll_horizontal_label=Lárétt skrun
+scroll_wrapped.title=Nota línuskipt síðuskrun
+scroll_wrapped_label=Línuskipt síðuskrun
+
+spread_none.title=Ekki taka þátt í dreifingu síðna
+spread_none_label=Engin dreifing
+spread_odd.title=Taka þátt í dreifingu síðna með oddatölum
+spread_odd_label=Oddatöludreifing
+spread_even.title=Taktu þátt í dreifingu síðna með jöfnuntölum
+spread_even_label=Jafnatöludreifing
+
+# Document properties dialog box
+document_properties.title=Eiginleikar skjals…
+document_properties_label=Eiginleikar skjals…
+document_properties_file_name=Skráarnafn:
+document_properties_file_size=Skrárstærð:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titill:
+document_properties_author=Hönnuður:
+document_properties_subject=Efni:
+document_properties_keywords=Stikkorð:
+document_properties_creation_date=Búið til:
+document_properties_modification_date=Dags breytingar:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Höfundur:
+document_properties_producer=PDF framleiðandi:
+document_properties_version=PDF útgáfa:
+document_properties_page_count=Blaðsíðufjöldi:
+document_properties_page_size=Stærð síðu:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=skammsnið
+document_properties_page_size_orientation_landscape=langsnið
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fljótleg vefskoðun:
+document_properties_linearized_yes=Já
+document_properties_linearized_no=Nei
+document_properties_close=Loka
+
+print_progress_message=Undirbý skjal fyrir prentun…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Hætta við
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Víxla hliðarspjaldi af/á
+toggle_sidebar_notification2.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi/lög)
+toggle_sidebar_label=Víxla hliðarspjaldi af/á
+document_outline.title=Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum)
+document_outline_label=Efnisskipan skjals
+attachments.title=Sýna viðhengi
+attachments_label=Viðhengi
+layers.title=Birta lög (tvísmelltu til að endurstilla öll lög í sjálfgefna stöðu)
+layers_label=Lög
+thumbs.title=Sýna smámyndir
+thumbs_label=Smámyndir
+current_outline_item.title=Finna núverandi atriði efnisskipunar
+current_outline_item_label=Núverandi atriði efnisskipunar
+findbar.title=Leita í skjali
+findbar_label=Leita
+
+additional_layers=Viðbótarlög
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Síða {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Síða {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Smámynd af síðu {{page}}
+
+# Find panel button title and messages
+find_input.title=Leita
+find_input.placeholder=Leita í skjali…
+find_previous.title=Leita að fyrra tilfelli þessara orða
+find_previous_label=Fyrri
+find_next.title=Leita að næsta tilfelli þessara orða
+find_next_label=Næsti
+find_highlight=Lita allt
+find_match_case_label=Passa við stafstöðu
+find_match_diacritics_label=Passa við broddstafi
+find_entire_word_label=Heil orð
+find_reached_top=Náði efst í skjal, held áfram neðst
+find_reached_bottom=Náði enda skjals, held áfram efst
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} af {{total}} niðurstöðu
+find_match_count[two]={{current}} af {{total}} niðurstöðum
+find_match_count[few]={{current}} af {{total}} niðurstöðum
+find_match_count[many]={{current}} af {{total}} niðurstöðum
+find_match_count[other]={{current}} af {{total}} niðurstöðum
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[one]=Fleiri en {{limit}} niðurstaða
+find_match_count_limit[two]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[few]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[many]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[other]=Fleiri en {{limit}} niðurstöður
+find_not_found=Fann ekki orðið
+
+# Error panel labels
+error_more_info=Meiri upplýsingar
+error_less_info=Minni upplýsingar
+error_close=Loka
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Skilaboð: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stafli: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Skrá: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lína: {{line}}
+rendering_error=Upp kom villa við að birta síðuna.
+
+# Predefined zoom values
+page_scale_width=Síðubreidd
+page_scale_fit=Passa á síðu
+page_scale_auto=Sjálfvirkur aðdráttur
+page_scale_actual=Raunstærð
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Hleður…
+loading_error=Villa kom upp við að hlaða inn PDF.
+invalid_file_error=Ógild eða skemmd PDF skrá.
+missing_file_error=Vantar PDF skrá.
+unexpected_response_error=Óvænt svar frá netþjóni.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Skýring]
+password_label=Sláðu inn lykilorð til að opna þessa PDF skrá.
+password_invalid=Ógilt lykilorð. Reyndu aftur.
+password_ok=Í lagi
+password_cancel=Hætta við
+
+printing_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra.
+printing_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun.
+web_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir.
diff --git a/app/assets/javascripts/publications/locale/it/viewer.properties b/app/assets/javascripts/publications/locale/it/viewer.properties
new file mode 100644
index 0000000..6db5f12
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/it/viewer.properties
@@ -0,0 +1,193 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+previous.title = Pagina precedente
+previous_label = Precedente
+next.title = Pagina successiva
+next_label = Successiva
+
+page.title = Pagina
+of_pages = di {{pagesCount}}
+page_of_pages = ({{pageNumber}} di {{pagesCount}})
+
+zoom_out.title = Riduci zoom
+zoom_out_label = Riduci zoom
+zoom_in.title = Aumenta zoom
+zoom_in_label = Aumenta zoom
+zoom.title = Zoom
+presentation_mode.title = Passa alla modalità presentazione
+presentation_mode_label = Modalità presentazione
+open_file.title = Apri file
+open_file_label = Apri
+print.title = Stampa
+print_label = Stampa
+download.title = Scarica questo documento
+download_label = Download
+bookmark.title = Visualizzazione corrente (copia o apri in una nuova finestra)
+bookmark_label = Visualizzazione corrente
+
+tools.title = Strumenti
+tools_label = Strumenti
+first_page.title = Vai alla prima pagina
+first_page_label = Vai alla prima pagina
+last_page.title = Vai all’ultima pagina
+last_page_label = Vai all’ultima pagina
+page_rotate_cw.title = Ruota in senso orario
+page_rotate_cw_label = Ruota in senso orario
+page_rotate_ccw.title = Ruota in senso antiorario
+page_rotate_ccw_label = Ruota in senso antiorario
+
+cursor_text_select_tool.title = Attiva strumento di selezione testo
+cursor_text_select_tool_label = Strumento di selezione testo
+cursor_hand_tool.title = Attiva strumento mano
+cursor_hand_tool_label = Strumento mano
+
+scroll_page.title = Utilizza scorrimento pagine
+scroll_page_label = Scorrimento pagine
+scroll_vertical.title = Scorri le pagine in verticale
+scroll_vertical_label = Scorrimento verticale
+scroll_horizontal.title = Scorri le pagine in orizzontale
+scroll_horizontal_label = Scorrimento orizzontale
+scroll_wrapped.title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente
+scroll_wrapped_label = Scorrimento con a capo automatico
+
+spread_none.title = Non raggruppare pagine
+spread_none_label = Nessun raggruppamento
+spread_odd.title = Crea gruppi di pagine che iniziano con numeri di pagina dispari
+spread_odd_label = Raggruppamento dispari
+spread_even.title = Crea gruppi di pagine che iniziano con numeri di pagina pari
+spread_even_label = Raggruppamento pari
+
+document_properties.title = Proprietà del documento…
+document_properties_label = Proprietà del documento…
+document_properties_file_name = Nome file:
+document_properties_file_size = Dimensione file:
+document_properties_kb = {{size_kb}} kB ({{size_b}} byte)
+document_properties_mb = {{size_mb}} MB ({{size_b}} byte)
+document_properties_title = Titolo:
+document_properties_author = Autore:
+document_properties_subject = Oggetto:
+document_properties_keywords = Parole chiave:
+document_properties_creation_date = Data creazione:
+document_properties_modification_date = Data modifica:
+document_properties_date_string = {{date}}, {{time}}
+document_properties_creator = Autore originale:
+document_properties_producer = Produttore PDF:
+document_properties_version = Versione PDF:
+document_properties_page_count = Conteggio pagine:
+document_properties_page_size = Dimensioni pagina:
+document_properties_page_size_unit_inches = in
+document_properties_page_size_unit_millimeters = mm
+document_properties_page_size_orientation_portrait = verticale
+document_properties_page_size_orientation_landscape = orizzontale
+document_properties_page_size_name_a3 = A3
+document_properties_page_size_name_a4 = A4
+document_properties_page_size_name_letter = Lettera
+document_properties_page_size_name_legal = Legale
+document_properties_page_size_dimension_string = {{width}} × {{height}} {{unit}} ({{orientation}})
+document_properties_page_size_dimension_name_string = {{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_linearized = Visualizzazione web veloce:
+document_properties_linearized_yes = Sì
+document_properties_linearized_no = No
+document_properties_close = Chiudi
+
+print_progress_message = Preparazione documento per la stampa…
+print_progress_percent = {{progress}}%
+print_progress_close = Annulla
+
+toggle_sidebar.title = Attiva/disattiva barra laterale
+toggle_sidebar_notification2.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli)
+toggle_sidebar_label = Attiva/disattiva barra laterale
+document_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi)
+document_outline_label = Struttura documento
+attachments.title = Visualizza allegati
+attachments_label = Allegati
+layers.title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito)
+layers_label = Livelli
+thumbs.title = Mostra le miniature
+thumbs_label = Miniature
+current_outline_item.title = Trova elemento struttura corrente
+current_outline_item_label = Elemento struttura corrente
+findbar.title = Trova nel documento
+findbar_label = Trova
+
+additional_layers = Livelli aggiuntivi
+page_landmark = Pagina {{page}}
+thumb_page_title = Pagina {{page}}
+thumb_page_canvas = Miniatura della pagina {{page}}
+
+find_input.title = Trova
+find_input.placeholder = Trova nel documento…
+find_previous.title = Trova l’occorrenza precedente del testo da cercare
+find_previous_label = Precedente
+find_next.title = Trova l’occorrenza successiva del testo da cercare
+find_next_label = Successivo
+find_highlight = Evidenzia
+find_match_case_label = Maiuscole/minuscole
+find_entire_word_label = Parole intere
+find_match_diacritics_label = Segni diacritici
+find_reached_top = Raggiunto l’inizio della pagina, continua dalla fine
+find_reached_bottom = Raggiunta la fine della pagina, continua dall’inizio
+find_match_count = {[ plural(total) ]}
+find_match_count[one] = {{current}} di {{total}} corrispondenza
+find_match_count[two] = {{current}} di {{total}} corrispondenze
+find_match_count[few] = {{current}} di {{total}} corrispondenze
+find_match_count[many] = {{current}} di {{total}} corrispondenze
+find_match_count[other] = {{current}} di {{total}} corrispondenze
+find_match_count_limit = {[ plural(limit) ]}
+find_match_count_limit[zero] = Più di {{limit}} corrispondenze
+find_match_count_limit[one] = Più di {{limit}} corrispondenza
+find_match_count_limit[two] = Più di {{limit}} corrispondenze
+find_match_count_limit[few] = Più di {{limit}} corrispondenze
+find_match_count_limit[many] = Più di {{limit}} corrispondenze
+find_match_count_limit[other] = Più di {{limit}} corrispondenze
+find_not_found = Testo non trovato
+
+error_more_info = Ulteriori informazioni
+error_less_info = Nascondi dettagli
+error_close = Chiudi
+error_version_info = PDF.js v{{version}} (build: {{build}})
+error_message = Messaggio: {{message}}
+error_stack = Stack: {{stack}}
+error_file = File: {{file}}
+error_line = Riga: {{line}}
+rendering_error = Si è verificato un errore durante il rendering della pagina.
+
+page_scale_width = Larghezza pagina
+page_scale_fit = Adatta a una pagina
+page_scale_auto = Zoom automatico
+page_scale_actual = Dimensioni effettive
+page_scale_percent = {{scale}}%
+
+loading = Caricamento in corso…
+loading_error = Si è verificato un errore durante il caricamento del PDF.
+invalid_file_error = File PDF non valido o danneggiato.
+missing_file_error = File PDF non disponibile.
+unexpected_response_error = Risposta imprevista del server
+
+annotation_date_string = {{date}}, {{time}}
+
+text_annotation_type.alt = [Annotazione: {{type}}]
+password_label = Inserire la password per aprire questo file PDF.
+password_invalid = Password non corretta. Riprovare.
+password_ok = OK
+password_cancel = Annulla
+
+printing_not_supported = Attenzione: la stampa non è completamente supportata da questo browser.
+printing_not_ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa.
+web_fonts_disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF.
diff --git a/app/assets/javascripts/publications/locale/ja/viewer.properties b/app/assets/javascripts/publications/locale/ja/viewer.properties
new file mode 100644
index 0000000..6fbabca
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ja/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=前のページへ戻ります
+previous_label=前へ
+next.title=次のページへ進みます
+next_label=次へ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ページ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=表示を縮小します
+zoom_out_label=縮小
+zoom_in.title=表示を拡大します
+zoom_in_label=拡大
+zoom.title=拡大/縮小
+presentation_mode.title=プレゼンテーションモードに切り替えます
+presentation_mode_label=プレゼンテーションモード
+open_file.title=ファイルを開きます
+open_file_label=開く
+print.title=印刷します
+print_label=印刷
+download.title=ダウンロードします
+download_label=ダウンロード
+bookmark.title=現在のビューの URL です (コピーまたは新しいウィンドウに開く)
+bookmark_label=現在のビュー
+
+# Secondary toolbar and context menu
+tools.title=ツール
+tools_label=ツール
+first_page.title=最初のページへ移動します
+first_page_label=最初のページへ移動
+last_page.title=最後のページへ移動します
+last_page_label=最後のページへ移動
+page_rotate_cw.title=ページを右へ回転します
+page_rotate_cw_label=右回転
+page_rotate_ccw.title=ページを左へ回転します
+page_rotate_ccw_label=左回転
+
+cursor_text_select_tool.title=テキスト選択ツールを有効にします
+cursor_text_select_tool_label=テキスト選択ツール
+cursor_hand_tool.title=手のひらツールを有効にします
+cursor_hand_tool_label=手のひらツール
+
+scroll_page.title=ページ単位でスクロールします
+scroll_page_label=ページ単位でスクロール
+scroll_vertical.title=縦スクロールにします
+scroll_vertical_label=縦スクロール
+scroll_horizontal.title=横スクロールにします
+scroll_horizontal_label=横スクロール
+scroll_wrapped.title=折り返しスクロールにします
+scroll_wrapped_label=折り返しスクロール
+
+spread_none.title=見開きにしません
+spread_none_label=見開きにしない
+spread_odd.title=奇数ページ開始で見開きにします
+spread_odd_label=奇数ページ見開き
+spread_even.title=偶数ページ開始で見開きにします
+spread_even_label=偶数ページ見開き
+
+# Document properties dialog box
+document_properties.title=文書のプロパティ...
+document_properties_label=文書のプロパティ...
+document_properties_file_name=ファイル名:
+document_properties_file_size=ファイルサイズ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} バイト)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} バイト)
+document_properties_title=タイトル:
+document_properties_author=作成者:
+document_properties_subject=件名:
+document_properties_keywords=キーワード:
+document_properties_creation_date=作成日:
+document_properties_modification_date=更新日:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=アプリケーション:
+document_properties_producer=PDF 作成:
+document_properties_version=PDF のバージョン:
+document_properties_page_count=ページ数:
+document_properties_page_size=ページサイズ:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=縦
+document_properties_page_size_orientation_landscape=横
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=レター
+document_properties_page_size_name_legal=リーガル
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ウェブ表示用に最適化:
+document_properties_linearized_yes=はい
+document_properties_linearized_no=いいえ
+document_properties_close=閉じる
+
+print_progress_message=文書の印刷を準備しています...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=キャンセル
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=サイドバー表示を切り替えます
+toggle_sidebar_notification2.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー)
+toggle_sidebar_label=サイドバーの切り替え
+document_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します)
+document_outline_label=文書の目次
+attachments.title=添付ファイルを表示します
+attachments_label=添付ファイル
+layers.title=レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります)
+layers_label=レイヤー
+thumbs.title=縮小版を表示します
+thumbs_label=縮小版
+current_outline_item.title=現在のアウトライン項目を検索
+current_outline_item_label=現在のアウトライン項目
+findbar.title=文書内を検索します
+findbar_label=検索
+
+additional_layers=追加レイヤー
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark={{page}} ページ
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} ページ
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} ページの縮小版
+
+# Find panel button title and messages
+find_input.title=検索
+find_input.placeholder=文書内を検索...
+find_previous.title=現在より前の位置で指定文字列が現れる部分を検索します
+find_previous_label=前へ
+find_next.title=現在より後の位置で指定文字列が現れる部分を検索します
+find_next_label=次へ
+find_highlight=すべて強調表示
+find_match_case_label=大文字/小文字を区別
+find_entire_word_label=単語一致
+find_reached_top=文書先頭に到達したので末尾から続けて検索します
+find_reached_bottom=文書末尾に到達したので先頭から続けて検索します
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} 件中 {{current}} 件目
+find_match_count[two]={{total}} 件中 {{current}} 件目
+find_match_count[few]={{total}} 件中 {{current}} 件目
+find_match_count[many]={{total}} 件中 {{current}} 件目
+find_match_count[other]={{total}} 件中 {{current}} 件目
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} 件以上一致
+find_match_count_limit[one]={{limit}} 件以上一致
+find_match_count_limit[two]={{limit}} 件以上一致
+find_match_count_limit[few]={{limit}} 件以上一致
+find_match_count_limit[many]={{limit}} 件以上一致
+find_match_count_limit[other]={{limit}} 件以上一致
+find_not_found=見つかりませんでした
+
+# Error panel labels
+error_more_info=詳細情報
+error_less_info=詳細情報を隠す
+error_close=閉じる
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ビルド: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=メッセージ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=スタック: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ファイル: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行: {{line}}
+rendering_error=ページのレンダリング中にエラーが発生しました。
+
+# Predefined zoom values
+page_scale_width=幅に合わせる
+page_scale_fit=ページのサイズに合わせる
+page_scale_auto=自動ズーム
+page_scale_actual=実際のサイズ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=読み込み中...
+loading_error=PDF の読み込み中にエラーが発生しました。
+invalid_file_error=無効または破損した PDF ファイル。
+missing_file_error=PDF ファイルが見つかりません。
+unexpected_response_error=サーバーから予期せぬ応答がありました。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 注釈]
+password_label=この PDF ファイルを開くためのパスワードを入力してください。
+password_invalid=無効なパスワードです。もう一度やり直してください。
+password_ok=OK
+password_cancel=キャンセル
+
+printing_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。
+printing_not_ready=警告: PDF を印刷するための読み込みが終了していません。
+web_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。
diff --git a/app/assets/javascripts/publications/locale/ka/viewer.properties b/app/assets/javascripts/publications/locale/ka/viewer.properties
new file mode 100644
index 0000000..2144a11
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ka/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=წინა გვერდი
+previous_label=წინა
+next.title=შემდეგი გვერდი
+next_label=შემდეგი
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=გვერდი
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-დან
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} {{pagesCount}}-დან)
+
+zoom_out.title=ზომის შემცირება
+zoom_out_label=დაშორება
+zoom_in.title=ზომის გაზრდა
+zoom_in_label=მოახლოება
+zoom.title=ზომა
+presentation_mode.title=ჩვენების რეჟიმზე გადართვა
+presentation_mode_label=ჩვენების რეჟიმი
+open_file.title=ფაილის გახსნა
+open_file_label=გახსნა
+print.title=ამობეჭდვა
+print_label=ამობეჭდვა
+download.title=ჩამოტვირთვა
+download_label=ჩამოტვირთვა
+bookmark.title=მიმდინარე ხედი (ასლის აღება ან გახსნა ახალ ფანჯარაში)
+bookmark_label=მიმდინარე ხედი
+
+# Secondary toolbar and context menu
+tools.title=ხელსაწყოები
+tools_label=ხელსაწყოები
+first_page.title=პირველ გვერდზე გადასვლა
+first_page_label=პირველ გვერდზე გადასვლა
+last_page.title=ბოლო გვერდზე გადასვლა
+last_page_label=ბოლო გვერდზე გადასვლა
+page_rotate_cw.title=საათის ისრის მიმართულებით შებრუნება
+page_rotate_cw_label=მარჯვნივ გადაბრუნება
+page_rotate_ccw.title=საათის ისრის საპირისპიროდ შებრუნება
+page_rotate_ccw_label=მარცხნივ გადაბრუნება
+
+cursor_text_select_tool.title=მოსანიშნი მაჩვენებლის გამოყენება
+cursor_text_select_tool_label=მოსანიშნი მაჩვენებელი
+cursor_hand_tool.title=გადასაადგილებელი მაჩვენებლის გამოყენება
+cursor_hand_tool_label=გადასაადგილებელი
+
+scroll_page.title=გვერდზე გადაადგილების გამოყენება
+scroll_page_label=გვერდზე გადაადგილება
+scroll_vertical.title=გვერდების შვეულად ჩვენება
+scroll_vertical_label=შვეული გადაადგილება
+scroll_horizontal.title=გვერდების თარაზულად ჩვენება
+scroll_horizontal_label=განივი გადაადგილება
+scroll_wrapped.title=გვერდების ცხრილურად ჩვენება
+scroll_wrapped_label=ცხრილური გადაადგილება
+
+spread_none.title=ორ გვერდზე გაშლის გარეშე
+spread_none_label=ცალგვერდიანი ჩვენება
+spread_odd.title=ორ გვერდზე გაშლა, კენტი გვერდიდან დაწყებული
+spread_odd_label=ორ გვერდზე კენტიდან
+spread_even.title=ორ გვერდზე გაშლა, ლუწი გვერდიდან დაწყებული
+spread_even_label=ორ გვერდზე ლუწიდან
+
+# Document properties dialog box
+document_properties.title=დოკუმენტის შესახებ…
+document_properties_label=დოკუმენტის შესახებ…
+document_properties_file_name=ფაილის სახელი:
+document_properties_file_size=ფაილის მოცულობა:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი)
+document_properties_title=სათაური:
+document_properties_author=შემქმნელი:
+document_properties_subject=თემა:
+document_properties_keywords=საკვანძო სიტყვები:
+document_properties_creation_date=შექმნის დრო:
+document_properties_modification_date=ჩასწორების დრო:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=გამომშვები:
+document_properties_producer=PDF-გამომშვები:
+document_properties_version=PDF-ვერსია:
+document_properties_page_count=გვერდები:
+document_properties_page_size=გვერდის ზომა:
+document_properties_page_size_unit_inches=დუიმი
+document_properties_page_size_unit_millimeters=მმ
+document_properties_page_size_orientation_portrait=შვეულად
+document_properties_page_size_orientation_landscape=თარაზულად
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=მსუბუქი ვებჩვენება:
+document_properties_linearized_yes=დიახ
+document_properties_linearized_no=არა
+document_properties_close=დახურვა
+
+print_progress_message=დოკუმენტი მზადდება ამოსაბეჭდად…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=გაუქმება
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა
+toggle_sidebar_notification2.title=გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს)
+toggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა
+document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა)
+document_outline_label=დოკუმენტის სარჩევი
+attachments.title=დანართების ჩვენება
+attachments_label=დანართები
+layers.title=ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება)
+layers_label=ფენები
+thumbs.title=შეთვალიერება
+thumbs_label=ესკიზები
+current_outline_item.title=მიმდინარე გვერდის მონახვა სარჩევში
+current_outline_item_label=მიმდინარე გვერდი სარჩევში
+findbar.title=პოვნა დოკუმენტში
+findbar_label=ძიება
+
+additional_layers=დამატებითი ფენები
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=გვერდი {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=გვერდი {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=გვერდის შეთვალიერება {{page}}
+
+# Find panel button title and messages
+find_input.title=ძიება
+find_input.placeholder=პოვნა დოკუმენტში…
+find_previous.title=ფრაზის წინა კონტექსტის პოვნა
+find_previous_label=წინა
+find_next.title=ფრაზის შემდეგი კონტექსტის პოვნა
+find_next_label=შემდეგი
+find_highlight=ყველას მონიშვნა
+find_match_case_label=ემთხვევა მთავრული
+find_entire_word_label=მთლიანი სიტყვები
+find_reached_top=მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან
+find_reached_bottom=მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} თანხვედრიდან
+find_match_count[two]={{current}} / {{total}} თანხვედრიდან
+find_match_count[few]={{current}} / {{total}} თანხვედრიდან
+find_match_count[many]={{current}} / {{total}} თანხვედრიდან
+find_match_count[other]={{current}} / {{total}} თანხვედრიდან
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[one]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[two]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[few]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[many]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[other]={{limit}}-ზე მეტი თანხვედრა
+find_not_found=ფრაზა ვერ მოიძებნა
+
+# Error panel labels
+error_more_info=ვრცლად
+error_less_info=შემოკლებულად
+error_close=დახურვა
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=შეტყობინება: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=სტეკი: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ფაილი: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ხაზი: {{line}}
+rendering_error=შეცდომა, გვერდის ჩვენებისას.
+
+# Predefined zoom values
+page_scale_width=გვერდის სიგანეზე
+page_scale_fit=მთლიანი გვერდი
+page_scale_auto=ავტომატური
+page_scale_actual=საწყისი ზომა
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=ჩატვირთვა…
+loading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას.
+invalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი.
+missing_file_error=ნაკლული PDF-ფაილი.
+unexpected_response_error=სერვერის მოულოდნელი პასუხი.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} შენიშვნა]
+password_label=შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად.
+password_invalid=არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა.
+password_ok=კარგი
+password_cancel=გაუქმება
+
+printing_not_supported=გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი.
+printing_not_ready=გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად.
+web_fonts_disabled=ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება.
diff --git a/app/assets/javascripts/publications/locale/kab/viewer.properties b/app/assets/javascripts/publications/locale/kab/viewer.properties
new file mode 100644
index 0000000..bb249d0
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/kab/viewer.properties
@@ -0,0 +1,248 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Asebter azewwar
+previous_label=Azewwar
+next.title=Asebter d-iteddun
+next_label=Ddu ɣer zdat
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Asebter
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ɣef {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} n {{pagesCount}})
+
+zoom_out.title=Semẓi
+zoom_out_label=Semẓi
+zoom_in.title=Semɣeṛ
+zoom_in_label=Semɣeṛ
+zoom.title=Semɣeṛ/Semẓi
+presentation_mode.title=Uɣal ɣer Uskar Tihawt
+presentation_mode_label=Askar Tihawt
+open_file.title=Ldi Afaylu
+open_file_label=Ldi
+print.title=Siggez
+print_label=Siggez
+download.title=Sader
+download_label=Azdam
+bookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut)
+bookmark_label=Askan amiran
+
+# Secondary toolbar and context menu
+tools.title=Ifecka
+tools_label=Ifecka
+first_page.title=Ddu ɣer usebter amezwaru
+first_page_label=Ddu ɣer usebter amezwaru
+last_page.title=Ddu ɣer usebter aneggaru
+last_page_label=Ddu ɣer usebter aneggaru
+page_rotate_cw.title=Tuzzya tusrigt
+page_rotate_cw_label=Tuzzya tusrigt
+page_rotate_ccw.title=Tuzzya amgal-usrig
+page_rotate_ccw_label=Tuzzya amgal-usrig
+
+cursor_text_select_tool.title=Rmed afecku n tefrant n uḍris
+cursor_text_select_tool_label=Afecku n tefrant n uḍris
+cursor_hand_tool.title=Rmed afecku afus
+cursor_hand_tool_label=Afecku afus
+
+scroll_vertical.title=Seqdec adrurem ubdid
+scroll_vertical_label=Adrurem ubdid
+scroll_horizontal.title=Seqdec adrurem aglawan
+scroll_horizontal_label=Adrurem aglawan
+scroll_wrapped.title=Seqdec adrurem yuẓen
+scroll_wrapped_label=Adrurem yuẓen
+
+spread_none.title=Ur sedday ara isiɣzaf n usebter
+spread_none_label=Ulac isiɣzaf
+spread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen
+spread_odd_label=Isiɣzaf irayuganen
+spread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen
+spread_even_label=Isiɣzaf iyuganen
+
+# Document properties dialog box
+document_properties.title=Taɣaṛa n isemli…
+document_properties_label=Taɣaṛa n isemli…
+document_properties_file_name=Isem n ufaylu:
+document_properties_file_size=Teɣzi n ufaylu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MAṬ ({{size_b}} iṭamḍanen)
+document_properties_title=Azwel:
+document_properties_author=Ameskar:
+document_properties_subject=Amgay:
+document_properties_keywords=Awalen n tsaruţ
+document_properties_creation_date=Azemz n tmerna:
+document_properties_modification_date=Azemz n usnifel:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yerna-t:
+document_properties_producer=Afecku n uselket PDF:
+document_properties_version=Lqem PDF:
+document_properties_page_count=Amḍan n yisebtar:
+document_properties_page_size=Tuγzi n usebter:
+document_properties_page_size_unit_inches=deg
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=s teɣzi
+document_properties_page_size_orientation_landscape=s tehri
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Asekkil
+document_properties_page_size_name_legal=Usḍif
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Taskant Web taruradt:
+document_properties_linearized_yes=Ih
+document_properties_linearized_no=Ala
+document_properties_close=Mdel
+
+print_progress_message=Aheggi i usiggez n isemli…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Sefsex
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sken/Fer agalis adisan
+toggle_sidebar_notification2.title=Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin)
+toggle_sidebar_label=Sken/Fer agalis adisan
+document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa)
+document_outline_label=Isɣalen n isebtar
+attachments.title=Sken ticeqqufin yeddan
+attachments_label=Ticeqqufin yeddan
+layers.title=Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer)
+layers_label=Tissiwin
+thumbs.title=Sken tanfult.
+thumbs_label=Tinfulin
+current_outline_item.title=Af-d aferdis n uɣawas amiran
+current_outline_item_label=Aferdis n uɣawas amiran
+findbar.title=Nadi deg isemli
+findbar_label=Nadi
+
+additional_layers=Tissiwin-nniḍen
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Asebter {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Asebter {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Tanfult n usebter {{page}}
+
+# Find panel button title and messages
+find_input.title=Nadi
+find_input.placeholder=Nadi deg isemli…
+find_previous.title=Aff-d tamseḍriwt n twinest n deffir
+find_previous_label=Azewwar
+find_next.title=Aff-d timseḍriwt n twinest d-iteddun
+find_next_label=Ddu ɣer zdat
+find_highlight=Err izirig imaṛṛa
+find_match_case_label=Qadeṛ amasal n isekkilen
+find_entire_word_label=Awalen iččuranen
+find_reached_top=Yabbeḍ s afella n usebter, tuɣalin s wadda
+find_reached_bottom=Tebḍeḍ s adda n usebter, tuɣalin s afella
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[two]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[few]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[many]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[other]={{current}} seg {{total}} n tmeɣṛuḍin
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuḍin
+find_not_found=Ulac tawinest
+
+# Error panel labels
+error_more_info=Ugar n telɣut
+error_less_info=Drus n isalen
+error_close=Mdel
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Izen: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Tanebdant: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Afaylu: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Izirig: {{line}}
+rendering_error=Teḍra-d tuccḍa deg uskan n usebter.
+
+# Predefined zoom values
+page_scale_width=Tehri n usebter
+page_scale_fit=Asebter imaṛṛa
+page_scale_auto=Asemɣeṛ/Asemẓi awurman
+page_scale_actual=Teɣzi tilawt
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Asali…
+loading_error=Teḍra-d tuccḍa deg alluy n PDF:
+invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ.
+missing_file_error=Ulac afaylu PDF.
+unexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Tabzimt {{type}}]
+password_label=Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF
+password_invalid=Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen.
+password_ok=IH
+password_cancel=Sefsex
+
+printing_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a.
+printing_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez.
+web_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF.
diff --git a/app/assets/javascripts/publications/locale/kk/viewer.properties b/app/assets/javascripts/publications/locale/kk/viewer.properties
new file mode 100644
index 0000000..4565044
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/kk/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Алдыңғы парақ
+previous_label=Алдыңғысы
+next.title=Келесі парақ
+next_label=Келесі
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Парақ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ішінен
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен)
+
+zoom_out.title=Кішірейту
+zoom_out_label=Кішірейту
+zoom_in.title=Үлкейту
+zoom_in_label=Үлкейту
+zoom.title=Масштаб
+presentation_mode.title=Презентация режиміне ауысу
+presentation_mode_label=Презентация режимі
+open_file.title=Файлды ашу
+open_file_label=Ашу
+print.title=Баспаға шығару
+print_label=Баспаға шығару
+download.title=Жүктеп алу
+download_label=Жүктеп алу
+bookmark.title=Ағымдағы көрініс (көшіру не жаңа терезеде ашу)
+bookmark_label=Ағымдағы көрініс
+
+# Secondary toolbar and context menu
+tools.title=Құралдар
+tools_label=Құралдар
+first_page.title=Алғашқы параққа өту
+first_page_label=Алғашқы параққа өту
+last_page.title=Соңғы параққа өту
+last_page_label=Соңғы параққа өту
+page_rotate_cw.title=Сағат тілі бағытымен айналдыру
+page_rotate_cw_label=Сағат тілі бағытымен бұру
+page_rotate_ccw.title=Сағат тілі бағытына қарсы бұру
+page_rotate_ccw_label=Сағат тілі бағытына қарсы бұру
+
+cursor_text_select_tool.title=Мәтінді таңдау құралын іске қосу
+cursor_text_select_tool_label=Мәтінді таңдау құралы
+cursor_hand_tool.title=Қол құралын іске қосу
+cursor_hand_tool_label=Қол құралы
+
+scroll_page.title=Беттерді айналдыруды пайдалану
+scroll_page_label=Беттерді айналдыру
+scroll_vertical.title=Вертикалды айналдыруды қолдану
+scroll_vertical_label=Вертикалды айналдыру
+scroll_horizontal.title=Горизонталды айналдыруды қолдану
+scroll_horizontal_label=Горизонталды айналдыру
+scroll_wrapped.title=Масштабталатын айналдыруды қолдану
+scroll_wrapped_label=Масштабталатын айналдыру
+
+spread_none.title=Жазық беттер режимін қолданбау
+spread_none_label=Жазық беттер режимсіз
+spread_odd.title=Жазық беттер тақ нөмірлі беттерден басталады
+spread_odd_label=Тақ нөмірлі беттер сол жақтан
+spread_even.title=Жазық беттер жұп нөмірлі беттерден басталады
+spread_even_label=Жұп нөмірлі беттер сол жақтан
+
+# Document properties dialog box
+document_properties.title=Құжат қасиеттері…
+document_properties_label=Құжат қасиеттері…
+document_properties_file_name=Файл аты:
+document_properties_file_size=Файл өлшемі:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Тақырыбы:
+document_properties_author=Авторы:
+document_properties_subject=Тақырыбы:
+document_properties_keywords=Кілт сөздер:
+document_properties_creation_date=Жасалған күні:
+document_properties_modification_date=Түзету күні:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Жасаған:
+document_properties_producer=PDF өндірген:
+document_properties_version=PDF нұсқасы:
+document_properties_page_count=Беттер саны:
+document_properties_page_size=Бет өлшемі:
+document_properties_page_size_unit_inches=дюйм
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=тік
+document_properties_page_size_orientation_landscape=жатық
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Жылдам Web көрінісі:
+document_properties_linearized_yes=Иә
+document_properties_linearized_no=Жоқ
+document_properties_close=Жабу
+
+print_progress_message=Құжатты баспаға шығару үшін дайындау…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Бас тарту
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Бүйір панелін көрсету/жасыру
+toggle_sidebar_notification2.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар)
+toggle_sidebar_label=Бүйір панелін көрсету/жасыру
+document_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек)
+document_outline_label=Құжат құрамасы
+attachments.title=Салынымдарды көрсету
+attachments_label=Салынымдар
+layers.title=Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз)
+layers_label=Қабаттар
+thumbs.title=Кіші көріністерді көрсету
+thumbs_label=Кіші көріністер
+current_outline_item.title=Құрылымның ағымдағы элементін табу
+current_outline_item_label=Құрылымның ағымдағы элементі
+findbar.title=Құжаттан табу
+findbar_label=Табу
+
+additional_layers=Қосымша қабаттар
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Бет {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} парағы
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} парағы үшін кіші көрінісі
+
+# Find panel button title and messages
+find_input.title=Табу
+find_input.placeholder=Құжаттан табу…
+find_previous.title=Осы сөздердің мәтіннен алдыңғы кездесуін табу
+find_previous_label=Алдыңғысы
+find_next.title=Осы сөздердің мәтіннен келесі кездесуін табу
+find_next_label=Келесі
+find_highlight=Барлығын түспен ерекшелеу
+find_match_case_label=Регистрді ескеру
+find_entire_word_label=Сөздер толығымен
+find_reached_top=Құжаттың басына жеттік, соңынан бастап жалғастырамыз
+find_reached_bottom=Құжаттың соңына жеттік, басынан бастап жалғастырамыз
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} сәйкестік
+find_match_count[two]={{current}} / {{total}} сәйкестік
+find_match_count[few]={{current}} / {{total}} сәйкестік
+find_match_count[many]={{current}} / {{total}} сәйкестік
+find_match_count[other]={{current}} / {{total}} сәйкестік
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} сәйкестіктен көп
+find_match_count_limit[one]={{limit}} сәйкестіктен көп
+find_match_count_limit[two]={{limit}} сәйкестіктен көп
+find_match_count_limit[few]={{limit}} сәйкестіктен көп
+find_match_count_limit[many]={{limit}} сәйкестіктен көп
+find_match_count_limit[other]={{limit}} сәйкестіктен көп
+find_not_found=Сөз(дер) табылмады
+
+# Error panel labels
+error_more_info=Көбірек ақпарат
+error_less_info=Азырақ ақпарат
+error_close=Жабу
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (жинақ: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Хабарлама: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Жол: {{line}}
+rendering_error=Парақты өңдеу кезінде қате кетті.
+
+# Predefined zoom values
+page_scale_width=Парақ ені
+page_scale_fit=Парақты сыйдыру
+page_scale_auto=Автомасштабтау
+page_scale_actual=Нақты өлшемі
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Жүктелуде…
+loading_error=PDF жүктеу кезінде қате кетті.
+invalid_file_error=Зақымдалған немесе қате PDF файл.
+missing_file_error=PDF файлы жоқ.
+unexpected_response_error=Сервердің күтпеген жауабы.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} аңдатпасы]
+password_label=Бұл PDF файлын ашу үшін парольді енгізіңіз.
+password_invalid=Пароль дұрыс емес. Қайталап көріңіз.
+password_ok=ОК
+password_cancel=Бас тарту
+
+printing_not_supported=Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды.
+printing_not_ready=Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады.
+web_fonts_disabled=Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес.
diff --git a/app/assets/javascripts/publications/locale/km/viewer.properties b/app/assets/javascripts/publications/locale/km/viewer.properties
new file mode 100644
index 0000000..3dcac78
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/km/viewer.properties
@@ -0,0 +1,209 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ទំព័រមុន
+previous_label=មុន
+next.title=ទំព័របន្ទាប់
+next_label=បន្ទាប់
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ទំព័រ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=នៃ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} នៃ {{pagesCount}})
+
+zoom_out.title=បង្រួម
+zoom_out_label=បង្រួម
+zoom_in.title=ពង្រីក
+zoom_in_label=ពង្រីក
+zoom.title=ពង្រីក
+presentation_mode.title=ប្ដូរទៅរបៀបបទបង្ហាញ
+presentation_mode_label=របៀបបទបង្ហាញ
+open_file.title=បើកឯកសារ
+open_file_label=បើក
+print.title=បោះពុម្ព
+print_label=បោះពុម្ព
+download.title=ទាញយក
+download_label=ទាញយក
+bookmark.title=ទិដ្ឋភាពបច្ចុប្បន្ន (ចម្លង ឬបើកនៅក្នុងបង្អួចថ្មី)
+bookmark_label=ទិដ្ឋភាពបច្ចុប្បន្ន
+
+# Secondary toolbar and context menu
+tools.title=ឧបករណ៍
+tools_label=ឧបករណ៍
+first_page.title=ទៅកាន់ទំព័រដំបូង
+first_page_label=ទៅកាន់ទំព័រដំបូង
+last_page.title=ទៅកាន់ទំព័រចុងក្រោយ
+last_page_label=ទៅកាន់ទំព័រចុងក្រោយ
+page_rotate_cw.title=បង្វិលស្របទ្រនិចនាឡិកា
+page_rotate_cw_label=បង្វិលស្របទ្រនិចនាឡិកា
+page_rotate_ccw.title=បង្វិលច្រាសទ្រនិចនាឡិកា
+page_rotate_ccw_label=បង្វិលច្រាសទ្រនិចនាឡិកា
+
+cursor_text_select_tool.title=បើកឧបករណ៍ជ្រើសអត្ថបទ
+cursor_text_select_tool_label=ឧបករណ៍ជ្រើសអត្ថបទ
+cursor_hand_tool.title=បើកឧបករណ៍ដៃ
+cursor_hand_tool_label=ឧបករណ៍ដៃ
+
+
+
+# Document properties dialog box
+document_properties.title=លក្ខណសម្បត្តិឯកសារ…
+document_properties_label=លក្ខណសម្បត្តិឯកសារ…
+document_properties_file_name=ឈ្មោះឯកសារ៖
+document_properties_file_size=ទំហំឯកសារ៖
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} បៃ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} បៃ)
+document_properties_title=ចំណងជើង៖
+document_properties_author=អ្នកនិពន្ធ៖
+document_properties_subject=ប្រធានបទ៖
+document_properties_keywords=ពាក្យគន្លឹះ៖
+document_properties_creation_date=កាលបរិច្ឆេទបង្កើត៖
+document_properties_modification_date=កាលបរិច្ឆេទកែប្រែ៖
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=អ្នកបង្កើត៖
+document_properties_producer=កម្មវិធីបង្កើត PDF ៖
+document_properties_version=កំណែ PDF ៖
+document_properties_page_count=ចំនួនទំព័រ៖
+document_properties_page_size_unit_inches=អ៊ីញ
+document_properties_page_size_unit_millimeters=មម
+document_properties_page_size_orientation_portrait=បញ្ឈរ
+document_properties_page_size_orientation_landscape=ផ្តេក
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=សំបុត្រ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=បាទ/ចាស
+document_properties_linearized_no=ទេ
+document_properties_close=បិទ
+
+print_progress_message=កំពុងរៀបចំឯកសារសម្រាប់បោះពុម្ព…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=បោះបង់
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=បិទ/បើកគ្រាប់រំកិល
+toggle_sidebar_label=បិទ/បើកគ្រាប់រំកិល
+document_outline.title=បង្ហាញគ្រោងឯកសារ (ចុចទ្វេដងដើម្បីពង្រីក/បង្រួមធាតុទាំងអស់)
+document_outline_label=គ្រោងឯកសារ
+attachments.title=បង្ហាញឯកសារភ្ជាប់
+attachments_label=ឯកសារភ្ជាប់
+thumbs.title=បង្ហាញរូបភាពតូចៗ
+thumbs_label=រួបភាពតូចៗ
+findbar.title=រកនៅក្នុងឯកសារ
+findbar_label=រក
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ទំព័រ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=រូបភាពតូចរបស់ទំព័រ {{page}}
+
+# Find panel button title and messages
+find_input.title=រក
+find_input.placeholder=រកនៅក្នុងឯកសារ...
+find_previous.title=រកពាក្យ ឬឃ្លាដែលបានជួបមុន
+find_previous_label=មុន
+find_next.title=រកពាក្យ ឬឃ្លាដែលបានជួបបន្ទាប់
+find_next_label=បន្ទាប់
+find_highlight=បន្លិចទាំងអស់
+find_match_case_label=ករណីដំណូច
+find_reached_top=បានបន្តពីខាងក្រោម ទៅដល់ខាងលើនៃឯកសារ
+find_reached_bottom=បានបន្តពីខាងលើ ទៅដល់ចុងនៃឯកសារ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=រកមិនឃើញពាក្យ ឬឃ្លា
+
+# Error panel labels
+error_more_info=ព័ត៌មានបន្ថែម
+error_less_info=ព័ត៌មានតិចតួច
+error_close=បិទ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=សារ ៖ {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ជង់ ៖ {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ឯកសារ ៖ {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ជួរ ៖ {{line}}
+rendering_error=មានកំហុសបានកើតឡើងពេលបង្ហាញទំព័រ ។
+
+# Predefined zoom values
+page_scale_width=ទទឹងទំព័រ
+page_scale_fit=សមទំព័រ
+page_scale_auto=ពង្រីកស្វ័យប្រវត្តិ
+page_scale_actual=ទំហំជាក់ស្ដែង
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=មានកំហុសបានកើតឡើងពេលកំពុងផ្ទុក PDF ។
+invalid_file_error=ឯកសារ PDF ខូច ឬមិនត្រឹមត្រូវ ។
+missing_file_error=បាត់ឯកសារ PDF
+unexpected_response_error=ការឆ្លើយតមម៉ាស៊ីនមេដែលមិនបានរំពឹង។
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ចំណារពន្យល់]
+password_label=បញ្ចូលពាក្យសម្ងាត់ដើម្បីបើកឯកសារ PDF នេះ។
+password_invalid=ពាក្យសម្ងាត់មិនត្រឹមត្រូវ។ សូមព្យាយាមម្ដងទៀត។
+password_ok=យល់ព្រម
+password_cancel=បោះបង់
+
+printing_not_supported=ការព្រមាន ៖ ការបោះពុម្ពមិនត្រូវបានគាំទ្រពេញលេញដោយកម្មវិធីរុករកនេះទេ ។
+printing_not_ready=ព្រមាន៖ PDF មិនត្រូវបានផ្ទុកទាំងស្រុងដើម្បីបោះពុម្ពទេ។
+web_fonts_disabled=បានបិទពុម្ពអក្សរបណ្ដាញ ៖ មិនអាចប្រើពុម្ពអក្សរ PDF ដែលបានបង្កប់បានទេ ។
diff --git a/app/assets/javascripts/publications/locale/kn/viewer.properties b/app/assets/javascripts/publications/locale/kn/viewer.properties
new file mode 100644
index 0000000..79c0437
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/kn/viewer.properties
@@ -0,0 +1,186 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ಹಿಂದಿನ ಪುಟ
+previous_label=ಹಿಂದಿನ
+next.title=ಮುಂದಿನ ಪುಟ
+next_label=ಮುಂದಿನ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ಪುಟ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ರಲ್ಲಿ
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} ರಲ್ಲಿ {{pageNumber}})
+
+zoom_out.title=ಕಿರಿದಾಗಿಸು
+zoom_out_label=ಕಿರಿದಾಗಿಸಿ
+zoom_in.title=ಹಿರಿದಾಗಿಸು
+zoom_in_label=ಹಿರಿದಾಗಿಸಿ
+zoom.title=ಗಾತ್ರಬದಲಿಸು
+presentation_mode.title=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು
+presentation_mode_label=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ
+open_file.title=ಕಡತವನ್ನು ತೆರೆ
+open_file_label=ತೆರೆಯಿರಿ
+print.title=ಮುದ್ರಿಸು
+print_label=ಮುದ್ರಿಸಿ
+download.title=ಇಳಿಸು
+download_label=ಇಳಿಸಿಕೊಳ್ಳಿ
+bookmark.title=ಪ್ರಸಕ್ತ ನೋಟ (ಪ್ರತಿ ಮಾಡು ಅಥವ ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ)
+bookmark_label=ಪ್ರಸಕ್ತ ನೋಟ
+
+# Secondary toolbar and context menu
+tools.title=ಉಪಕರಣಗಳು
+tools_label=ಉಪಕರಣಗಳು
+first_page.title=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
+first_page_label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
+last_page.title=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
+last_page_label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
+page_rotate_cw.title=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_cw_label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_ccw.title=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_ccw_label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+
+cursor_text_select_tool.title=ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ
+cursor_text_select_tool_label=ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ
+cursor_hand_tool.title=ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ
+cursor_hand_tool_label=ಕೈ ಉಪಕರಣ
+
+
+
+# Document properties dialog box
+document_properties.title=ಡಾಕ್ಯುಮೆಂಟ್ ಗುಣಗಳು...
+document_properties_label=ಡಾಕ್ಯುಮೆಂಟ್ ಗುಣಗಳು...
+document_properties_file_name=ಕಡತದ ಹೆಸರು:
+document_properties_file_size=ಕಡತದ ಗಾತ್ರ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟ್ಗಳು)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟ್ಗಳು)
+document_properties_title=ಶೀರ್ಷಿಕೆ:
+document_properties_author=ಕರ್ತೃ:
+document_properties_subject=ವಿಷಯ:
+document_properties_keywords=ಮುಖ್ಯಪದಗಳು:
+document_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ:
+document_properties_modification_date=ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ರಚಿಸಿದವರು:
+document_properties_producer=PDF ಉತ್ಪಾದಕ:
+document_properties_version=PDF ಆವೃತ್ತಿ:
+document_properties_page_count=ಪುಟದ ಎಣಿಕೆ:
+document_properties_page_size_unit_inches=ಇದರಲ್ಲಿ
+document_properties_page_size_orientation_portrait=ಭಾವಚಿತ್ರ
+document_properties_page_size_orientation_landscape=ಪ್ರಕೃತಿ ಚಿತ್ರ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_close=ಮುಚ್ಚು
+
+print_progress_message=ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ರದ್ದು ಮಾಡು
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು
+toggle_sidebar_label=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು
+document_outline_label=ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ
+attachments.title=ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು
+attachments_label=ಲಗತ್ತುಗಳು
+thumbs.title=ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು
+thumbs_label=ಚಿಕ್ಕಚಿತ್ರಗಳು
+findbar.title=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು
+findbar_label=ಹುಡುಕು
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ಪುಟ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು {{page}}
+
+# Find panel button title and messages
+find_input.title=ಹುಡುಕು
+find_input.placeholder=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು…
+find_previous.title=ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು
+find_previous_label=ಹಿಂದಿನ
+find_next.title=ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು
+find_next_label=ಮುಂದಿನ
+find_highlight=ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು
+find_match_case_label=ಕೇಸನ್ನು ಹೊಂದಿಸು
+find_reached_top=ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು
+find_reached_bottom=ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು
+find_not_found=ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ
+
+# Error panel labels
+error_more_info=ಹೆಚ್ಚಿನ ಮಾಹಿತಿ
+error_less_info=ಕಡಿಮೆ ಮಾಹಿತಿ
+error_close=ಮುಚ್ಚು
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ಸಂದೇಶ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ರಾಶಿ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ಕಡತ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ಸಾಲು: {{line}}
+rendering_error=ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.
+
+# Predefined zoom values
+page_scale_width=ಪುಟದ ಅಗಲ
+page_scale_fit=ಪುಟದ ಸರಿಹೊಂದಿಕೆ
+page_scale_auto=ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ
+page_scale_actual=ನಿಜವಾದ ಗಾತ್ರ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.
+invalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ.
+missing_file_error=PDF ಕಡತ ಇಲ್ಲ.
+unexpected_response_error=ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ಟಿಪ್ಪಣಿ]
+password_label=PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ.
+password_invalid=ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.
+password_ok=OK
+password_cancel=ರದ್ದು ಮಾಡು
+
+printing_not_supported=ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ.
+printing_not_ready=ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ.
+web_fonts_disabled=ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.
diff --git a/app/assets/javascripts/publications/locale/ko/viewer.properties b/app/assets/javascripts/publications/locale/ko/viewer.properties
new file mode 100644
index 0000000..6812ae6
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ko/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=이전 페이지
+previous_label=이전
+next.title=다음 페이지
+next_label=다음
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=페이지
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=축소
+zoom_out_label=축소
+zoom_in.title=확대
+zoom_in_label=확대
+zoom.title=확대/축소
+presentation_mode.title=프레젠테이션 모드로 전환
+presentation_mode_label=프레젠테이션 모드
+open_file.title=파일 열기
+open_file_label=열기
+print.title=인쇄
+print_label=인쇄
+download.title=다운로드
+download_label=다운로드
+bookmark.title=현재 보기 (복사 또는 새 창에서 열기)
+bookmark_label=현재 보기
+
+# Secondary toolbar and context menu
+tools.title=도구
+tools_label=도구
+first_page.title=첫 페이지로 이동
+first_page_label=첫 페이지로 이동
+last_page.title=마지막 페이지로 이동
+last_page_label=마지막 페이지로 이동
+page_rotate_cw.title=시계방향으로 회전
+page_rotate_cw_label=시계방향으로 회전
+page_rotate_ccw.title=시계 반대방향으로 회전
+page_rotate_ccw_label=시계 반대방향으로 회전
+
+cursor_text_select_tool.title=텍스트 선택 도구 활성화
+cursor_text_select_tool_label=텍스트 선택 도구
+cursor_hand_tool.title=손 도구 활성화
+cursor_hand_tool_label=손 도구
+
+scroll_page.title=페이지 스크롤 사용
+scroll_page_label=페이지 스크롤
+scroll_vertical.title=세로 스크롤 사용
+scroll_vertical_label=세로 스크롤
+scroll_horizontal.title=가로 스크롤 사용
+scroll_horizontal_label=가로 스크롤
+scroll_wrapped.title=래핑(자동 줄 바꿈) 스크롤 사용
+scroll_wrapped_label=래핑 스크롤
+
+spread_none.title=한 페이지 보기
+spread_none_label=펼쳐짐 없음
+spread_odd.title=홀수 페이지로 시작하는 두 페이지 보기
+spread_odd_label=홀수 펼쳐짐
+spread_even.title=짝수 페이지로 시작하는 두 페이지 보기
+spread_even_label=짝수 펼쳐짐
+
+# Document properties dialog box
+document_properties.title=문서 속성…
+document_properties_label=문서 속성…
+document_properties_file_name=파일 이름:
+document_properties_file_size=파일 크기:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}}바이트)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}}바이트)
+document_properties_title=제목:
+document_properties_author=작성자:
+document_properties_subject=주제:
+document_properties_keywords=키워드:
+document_properties_creation_date=작성 날짜:
+document_properties_modification_date=수정 날짜:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=작성 프로그램:
+document_properties_producer=PDF 변환 소프트웨어:
+document_properties_version=PDF 버전:
+document_properties_page_count=페이지 수:
+document_properties_page_size=페이지 크기:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=세로 방향
+document_properties_page_size_orientation_landscape=가로 방향
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=레터
+document_properties_page_size_name_legal=리걸
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=빠른 웹 보기:
+document_properties_linearized_yes=예
+document_properties_linearized_no=아니오
+document_properties_close=닫기
+
+print_progress_message=인쇄 문서 준비 중…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=취소
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=탐색창 표시/숨기기
+toggle_sidebar_notification2.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨)
+toggle_sidebar_label=탐색창 표시/숨기기
+document_outline.title=문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기)
+document_outline_label=문서 아웃라인
+attachments.title=첨부파일 보기
+attachments_label=첨부파일
+layers.title=레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정)
+layers_label=레이어
+thumbs.title=미리보기
+thumbs_label=미리보기
+current_outline_item.title=현재 아웃라인 항목 찾기
+current_outline_item_label=현재 아웃라인 항목
+findbar.title=검색
+findbar_label=검색
+
+additional_layers=추가 레이어
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark={{page}} 페이지
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} 페이지
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} 페이지 미리보기
+
+# Find panel button title and messages
+find_input.title=찾기
+find_input.placeholder=문서에서 찾기…
+find_previous.title=지정 문자열에 일치하는 1개 부분을 검색
+find_previous_label=이전
+find_next.title=지정 문자열에 일치하는 다음 부분을 검색
+find_next_label=다음
+find_highlight=모두 강조 표시
+find_match_case_label=대/소문자 구분
+find_match_diacritics_label=분음 부호 일치
+find_entire_word_label=단어 단위로
+find_reached_top=문서 처음까지 검색하고 끝으로 돌아와 검색했습니다.
+find_reached_bottom=문서 끝까지 검색하고 앞으로 돌아와 검색했습니다.
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} 중 {{current}} 일치
+find_match_count[two]={{total}} 중 {{current}} 일치
+find_match_count[few]={{total}} 중 {{current}} 일치
+find_match_count[many]={{total}} 중 {{current}} 일치
+find_match_count[other]={{total}} 중 {{current}} 일치
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} 이상 일치
+find_match_count_limit[one]={{limit}} 이상 일치
+find_match_count_limit[two]={{limit}} 이상 일치
+find_match_count_limit[few]={{limit}} 이상 일치
+find_match_count_limit[many]={{limit}} 이상 일치
+find_match_count_limit[other]={{limit}} 이상 일치
+find_not_found=검색 결과 없음
+
+# Error panel labels
+error_more_info=자세한 정보
+error_less_info=정보 간단히 보기
+error_close=닫기
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (빌드: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=메시지: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=스택: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=파일: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=줄 번호: {{line}}
+rendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다.
+
+# Predefined zoom values
+page_scale_width=페이지 너비에 맞추기
+page_scale_fit=페이지에 맞추기
+page_scale_auto=자동
+page_scale_actual=실제 크기
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=로드 중…
+loading_error=PDF를 로드하는 동안 오류가 발생했습니다.
+invalid_file_error=잘못되었거나 손상된 PDF 파일.
+missing_file_error=PDF 파일 없음.
+unexpected_response_error=예상치 못한 서버 응답입니다.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 주석]
+password_label=이 PDF 파일을 열 수 있는 비밀번호를 입력하세요.
+password_invalid=잘못된 비밀번호입니다. 다시 시도하세요.
+password_ok=확인
+password_cancel=취소
+
+printing_not_supported=경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다.
+printing_not_ready=경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다.
+web_fonts_disabled=웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다.
diff --git a/app/assets/javascripts/publications/locale/lij/viewer.properties b/app/assets/javascripts/publications/locale/lij/viewer.properties
new file mode 100644
index 0000000..b89981c
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/lij/viewer.properties
@@ -0,0 +1,234 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina primma
+previous_label=Precedente
+next.title=Pagina dòppo
+next_label=Pròscima
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Diminoisci zoom
+zoom_out_label=Diminoisci zoom
+zoom_in.title=Aomenta zoom
+zoom_in_label=Aomenta zoom
+zoom.title=Zoom
+presentation_mode.title=Vanni into mòddo de prezentaçion
+presentation_mode_label=Mòddo de prezentaçion
+open_file.title=Arvi file
+open_file_label=Arvi
+print.title=Stanpa
+print_label=Stanpa
+download.title=Descaregamento
+download_label=Descaregamento
+bookmark.title=Vixon corente (còpia ò arvi inte 'n neuvo barcon)
+bookmark_label=Vixon corente
+
+# Secondary toolbar and context menu
+tools.title=Atressi
+tools_label=Atressi
+first_page.title=Vanni a-a primma pagina
+first_page_label=Vanni a-a primma pagina
+last_page.title=Vanni a l'urtima pagina
+last_page_label=Vanni a l'urtima pagina
+page_rotate_cw.title=Gia into verso oraio
+page_rotate_cw_label=Gia into verso oraio
+page_rotate_ccw.title=Gia into verso antioraio
+page_rotate_ccw_label=Gia into verso antioraio
+
+cursor_text_select_tool.title=Abilita strumento de seleçion do testo
+cursor_text_select_tool_label=Strumento de seleçion do testo
+cursor_hand_tool.title=Abilita strumento man
+cursor_hand_tool_label=Strumento man
+
+scroll_vertical.title=Deuvia rebelamento verticale
+scroll_vertical_label=Rebelamento verticale
+scroll_horizontal.title=Deuvia rebelamento orizontâ
+scroll_horizontal_label=Rebelamento orizontâ
+scroll_wrapped.title=Deuvia rebelamento incapsolou
+scroll_wrapped_label=Rebelamento incapsolou
+
+spread_none.title=No unite a-a difuxon de pagina
+spread_none_label=No difuxon
+spread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa
+spread_odd_label=Difuxon dèspa
+spread_even.title=Uniscite a-a difuxon de pagina co-o numero pari
+spread_even_label=Difuxon pari
+
+# Document properties dialog box
+document_properties.title=Propietæ do documento…
+document_properties_label=Propietæ do documento…
+document_properties_file_name=Nomme schedaio:
+document_properties_file_size=Dimenscion schedaio:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Titolo:
+document_properties_author=Aoto:
+document_properties_subject=Ogetto:
+document_properties_keywords=Paròlle ciave:
+document_properties_creation_date=Dæta creaçion:
+document_properties_modification_date=Dæta cangiamento:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Aotô originale:
+document_properties_producer=Produtô PDF:
+document_properties_version=Verscion PDF:
+document_properties_page_count=Contezzo pagine:
+document_properties_page_size=Dimenscion da pagina:
+document_properties_page_size_unit_inches=dii gròsci
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=drito
+document_properties_page_size_orientation_landscape=desteizo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letia
+document_properties_page_size_name_legal=Lezze
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista veloce do Web:
+document_properties_linearized_yes=Sci
+document_properties_linearized_no=No
+document_properties_close=Særa
+
+print_progress_message=Praparo o documento pe-a stanpa…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anulla
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Ativa/dizativa bara de scianco
+toggle_sidebar_label=Ativa/dizativa bara de scianco
+document_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi)
+document_outline_label=Contorno do documento
+attachments.title=Fanni vedde alegæ
+attachments_label=Alegæ
+thumbs.title=Mostra miniatue
+thumbs_label=Miniatue
+findbar.title=Treuva into documento
+findbar_label=Treuva
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatua da pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Treuva
+find_input.placeholder=Treuva into documento…
+find_previous.title=Treuva a ripetiçion precedente do testo da çercâ
+find_previous_label=Precedente
+find_next.title=Treuva a ripetiçion dòppo do testo da çercâ
+find_next_label=Segoente
+find_highlight=Evidençia
+find_match_case_label=Maioscole/minoscole
+find_entire_word_label=Poula intrega
+find_reached_top=Razonto a fin da pagina, continoa da l'iniçio
+find_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} corispondensa
+find_match_count[two]={{current}} de {{total}} corispondense
+find_match_count[few]={{current}} de {{total}} corispondense
+find_match_count[many]={{current}} de {{total}} corispondense
+find_match_count[other]={{current}} de {{total}} corispondense
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ciù de {{limit}} corispondense
+find_match_count_limit[one]=Ciù de {{limit}} corispondensa
+find_match_count_limit[two]=Ciù de {{limit}} corispondense
+find_match_count_limit[few]=Ciù de {{limit}} corispondense
+find_match_count_limit[many]=Ciù de {{limit}} corispondense
+find_match_count_limit[other]=Ciù de {{limit}} corispondense
+find_not_found=Testo no trovou
+
+# Error panel labels
+error_more_info=Ciù informaçioin
+error_less_info=Meno informaçioin
+error_close=Særa
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaggio: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Schedaio: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linia: {{line}}
+rendering_error=Gh'é stæto 'n'erô itno rendering da pagina.
+
+# Predefined zoom values
+page_scale_width=Larghessa pagina
+page_scale_fit=Adatta a una pagina
+page_scale_auto=Zoom aotomatico
+page_scale_actual=Dimenscioin efetive
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=S'é verificou 'n'erô itno caregamento do PDF.
+invalid_file_error=O schedaio PDF o l'é no valido ò aroinou.
+missing_file_error=O schedaio PDF o no gh'é.
+unexpected_response_error=Risposta inprevista do-u server
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotaçion: {{type}}]
+password_label=Dimme a paròlla segreta pe arvî sto schedaio PDF.
+password_invalid=Paròlla segreta sbalia. Preuva torna.
+password_ok=Va ben
+password_cancel=Anulla
+
+printing_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô.
+printing_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa.
+web_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF.
diff --git a/app/assets/javascripts/publications/locale/lo/viewer.properties b/app/assets/javascripts/publications/locale/lo/viewer.properties
new file mode 100644
index 0000000..8b877d0
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/lo/viewer.properties
@@ -0,0 +1,145 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ຫນ້າກ່ອນຫນ້າ
+previous_label=ກ່ອນຫນ້າ
+next.title=ຫນ້າຖັດໄປ
+next_label=ຖັດໄປ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ຫນ້າ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ຈາກ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ຈາກ {{pagesCount}})
+
+zoom_out.title=ຂະຫຍາຍອອກ
+zoom_out_label=ຂະຫຍາຍອອກ
+zoom_in.title=ຂະຫຍາຍເຂົ້າ
+zoom_in_label=ຂະຫຍາຍເຂົ້າ
+zoom.title=ຂະຫຍາຍ
+presentation_mode.title=ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ
+presentation_mode_label=ໂຫມດການນຳສະເຫນີ
+open_file.title=ເປີດໄຟລ໌
+open_file_label=ເປີດ
+print.title=ພິມ
+print_label=ພິມ
+download.title=ດາວໂຫລດ
+download_label=ດາວໂຫລດ
+bookmark.title=ມຸມມອງປະຈຸບັນ (ສຳເນົາ ຫລື ເປີດໃນວິນໂດໃຫມ່)
+bookmark_label=ມຸມມອງປະຈຸບັນ
+
+# Secondary toolbar and context menu
+tools.title=ເຄື່ອງມື
+tools_label=ເຄື່ອງມື
+first_page.title=ໄປທີ່ຫນ້າທຳອິດ
+first_page_label=ໄປທີ່ຫນ້າທຳອິດ
+last_page.title=ໄປທີ່ຫນ້າສຸດທ້າຍ
+last_page_label=ໄປທີ່ຫນ້າສຸດທ້າຍ
+page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ
+page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ
+page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ
+page_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ
+
+
+
+
+# Document properties dialog box
+document_properties_file_name=ຊື່ໄຟລ໌:
+document_properties_file_size=ຂະຫນາດໄຟລ໌:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ລວງຕັ້ງ
+document_properties_page_size_orientation_landscape=ລວງນອນ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ຈົດໝາຍ
+document_properties_page_size_name_legal=ຂໍ້ກົດຫມາຍ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=ປິດ
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=ຍົກເລີກ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ເປີດ/ປິດແຖບຂ້າງ
+toggle_sidebar_label=ເປີດ/ປິດແຖບຂ້າງ
+document_outline_label=ເຄົ້າຮ່າງເອກະສານ
+findbar_label=ຄົ້ນຫາ
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=ຄົ້ນຫາ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+
+# Error panel labels
+error_more_info=ຂໍ້ມູນເພີ່ມເຕີມ
+error_less_info=ຂໍ້ມູນນ້ອຍລົງ
+error_close=ປິດ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+rendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ.
+
+# Predefined zoom values
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+loading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF.
+invalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_ok=ຕົກລົງ
+password_cancel=ຍົກເລີກ
+
diff --git a/app/assets/javascripts/publications/locale/locale.properties b/app/assets/javascripts/publications/locale/locale.properties
new file mode 100644
index 0000000..ae79f47
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/locale.properties
@@ -0,0 +1,327 @@
+[ach]
+@import url(ach/viewer.properties)
+
+[af]
+@import url(af/viewer.properties)
+
+[an]
+@import url(an/viewer.properties)
+
+[ar]
+@import url(ar/viewer.properties)
+
+[ast]
+@import url(ast/viewer.properties)
+
+[az]
+@import url(az/viewer.properties)
+
+[be]
+@import url(be/viewer.properties)
+
+[bg]
+@import url(bg/viewer.properties)
+
+[bn]
+@import url(bn/viewer.properties)
+
+[bo]
+@import url(bo/viewer.properties)
+
+[br]
+@import url(br/viewer.properties)
+
+[brx]
+@import url(brx/viewer.properties)
+
+[bs]
+@import url(bs/viewer.properties)
+
+[ca]
+@import url(ca/viewer.properties)
+
+[cak]
+@import url(cak/viewer.properties)
+
+[ckb]
+@import url(ckb/viewer.properties)
+
+[cs]
+@import url(cs/viewer.properties)
+
+[cy]
+@import url(cy/viewer.properties)
+
+[da]
+@import url(da/viewer.properties)
+
+[de]
+@import url(de/viewer.properties)
+
+[dsb]
+@import url(dsb/viewer.properties)
+
+[el]
+@import url(el/viewer.properties)
+
+[en-CA]
+@import url(en-CA/viewer.properties)
+
+[en-GB]
+@import url(en-GB/viewer.properties)
+
+[en-US]
+@import url(en-US/viewer.properties)
+
+[eo]
+@import url(eo/viewer.properties)
+
+[es-AR]
+@import url(es-AR/viewer.properties)
+
+[es-CL]
+@import url(es-CL/viewer.properties)
+
+[es-ES]
+@import url(es-ES/viewer.properties)
+
+[es-MX]
+@import url(es-MX/viewer.properties)
+
+[et]
+@import url(et/viewer.properties)
+
+[eu]
+@import url(eu/viewer.properties)
+
+[fa]
+@import url(fa/viewer.properties)
+
+[ff]
+@import url(ff/viewer.properties)
+
+[fi]
+@import url(fi/viewer.properties)
+
+[fr]
+@import url(fr/viewer.properties)
+
+[fy-NL]
+@import url(fy-NL/viewer.properties)
+
+[ga-IE]
+@import url(ga-IE/viewer.properties)
+
+[gd]
+@import url(gd/viewer.properties)
+
+[gl]
+@import url(gl/viewer.properties)
+
+[gn]
+@import url(gn/viewer.properties)
+
+[gu-IN]
+@import url(gu-IN/viewer.properties)
+
+[he]
+@import url(he/viewer.properties)
+
+[hi-IN]
+@import url(hi-IN/viewer.properties)
+
+[hr]
+@import url(hr/viewer.properties)
+
+[hsb]
+@import url(hsb/viewer.properties)
+
+[hu]
+@import url(hu/viewer.properties)
+
+[hy-AM]
+@import url(hy-AM/viewer.properties)
+
+[hye]
+@import url(hye/viewer.properties)
+
+[ia]
+@import url(ia/viewer.properties)
+
+[id]
+@import url(id/viewer.properties)
+
+[is]
+@import url(is/viewer.properties)
+
+[it]
+@import url(it/viewer.properties)
+
+[ja]
+@import url(ja/viewer.properties)
+
+[ka]
+@import url(ka/viewer.properties)
+
+[kab]
+@import url(kab/viewer.properties)
+
+[kk]
+@import url(kk/viewer.properties)
+
+[km]
+@import url(km/viewer.properties)
+
+[kn]
+@import url(kn/viewer.properties)
+
+[ko]
+@import url(ko/viewer.properties)
+
+[lij]
+@import url(lij/viewer.properties)
+
+[lo]
+@import url(lo/viewer.properties)
+
+[lt]
+@import url(lt/viewer.properties)
+
+[ltg]
+@import url(ltg/viewer.properties)
+
+[lv]
+@import url(lv/viewer.properties)
+
+[meh]
+@import url(meh/viewer.properties)
+
+[mk]
+@import url(mk/viewer.properties)
+
+[mr]
+@import url(mr/viewer.properties)
+
+[ms]
+@import url(ms/viewer.properties)
+
+[my]
+@import url(my/viewer.properties)
+
+[nb-NO]
+@import url(nb-NO/viewer.properties)
+
+[ne-NP]
+@import url(ne-NP/viewer.properties)
+
+[nl]
+@import url(nl/viewer.properties)
+
+[nn-NO]
+@import url(nn-NO/viewer.properties)
+
+[oc]
+@import url(oc/viewer.properties)
+
+[pa-IN]
+@import url(pa-IN/viewer.properties)
+
+[pl]
+@import url(pl/viewer.properties)
+
+[pt-BR]
+@import url(pt-BR/viewer.properties)
+
+[pt-PT]
+@import url(pt-PT/viewer.properties)
+
+[rm]
+@import url(rm/viewer.properties)
+
+[ro]
+@import url(ro/viewer.properties)
+
+[ru]
+@import url(ru/viewer.properties)
+
+[sat]
+@import url(sat/viewer.properties)
+
+[sc]
+@import url(sc/viewer.properties)
+
+[scn]
+@import url(scn/viewer.properties)
+
+[sco]
+@import url(sco/viewer.properties)
+
+[si]
+@import url(si/viewer.properties)
+
+[sk]
+@import url(sk/viewer.properties)
+
+[sl]
+@import url(sl/viewer.properties)
+
+[son]
+@import url(son/viewer.properties)
+
+[sq]
+@import url(sq/viewer.properties)
+
+[sr]
+@import url(sr/viewer.properties)
+
+[sv-SE]
+@import url(sv-SE/viewer.properties)
+
+[szl]
+@import url(szl/viewer.properties)
+
+[ta]
+@import url(ta/viewer.properties)
+
+[te]
+@import url(te/viewer.properties)
+
+[tg]
+@import url(tg/viewer.properties)
+
+[th]
+@import url(th/viewer.properties)
+
+[tl]
+@import url(tl/viewer.properties)
+
+[tr]
+@import url(tr/viewer.properties)
+
+[trs]
+@import url(trs/viewer.properties)
+
+[uk]
+@import url(uk/viewer.properties)
+
+[ur]
+@import url(ur/viewer.properties)
+
+[uz]
+@import url(uz/viewer.properties)
+
+[vi]
+@import url(vi/viewer.properties)
+
+[wo]
+@import url(wo/viewer.properties)
+
+[xh]
+@import url(xh/viewer.properties)
+
+[zh-CN]
+@import url(zh-CN/viewer.properties)
+
+[zh-TW]
+@import url(zh-TW/viewer.properties)
+
diff --git a/app/assets/javascripts/publications/locale/lt/viewer.properties b/app/assets/javascripts/publications/locale/lt/viewer.properties
new file mode 100644
index 0000000..6188a92
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/lt/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Ankstesnis puslapis
+previous_label=Ankstesnis
+next.title=Kitas puslapis
+next_label=Kitas
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Puslapis
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=iš {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} iš {{pagesCount}})
+
+zoom_out.title=Sumažinti
+zoom_out_label=Sumažinti
+zoom_in.title=Padidinti
+zoom_in_label=Padidinti
+zoom.title=Mastelis
+presentation_mode.title=Pereiti į pateikties veikseną
+presentation_mode_label=Pateikties veiksena
+open_file.title=Atverti failą
+open_file_label=Atverti
+print.title=Spausdinti
+print_label=Spausdinti
+download.title=Parsiųsti
+download_label=Parsiųsti
+bookmark.title=Esamojo rodinio saitas (kopijavimui ar atvėrimui kitame lange)
+bookmark_label=Esamasis rodinys
+
+# Secondary toolbar and context menu
+tools.title=Priemonės
+tools_label=Priemonės
+first_page.title=Eiti į pirmą puslapį
+first_page_label=Eiti į pirmą puslapį
+last_page.title=Eiti į paskutinį puslapį
+last_page_label=Eiti į paskutinį puslapį
+page_rotate_cw.title=Pasukti pagal laikrodžio rodyklę
+page_rotate_cw_label=Pasukti pagal laikrodžio rodyklę
+page_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę
+page_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę
+
+cursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį
+cursor_text_select_tool_label=Teksto žymėjimo įrankis
+cursor_hand_tool.title=Įjungti vilkimo įrankį
+cursor_hand_tool_label=Vilkimo įrankis
+
+scroll_page.title=Naudoti puslapio slinkimą
+scroll_page_label=Puslapio slinkimas
+scroll_vertical.title=Naudoti vertikalų slinkimą
+scroll_vertical_label=Vertikalus slinkimas
+scroll_horizontal.title=Naudoti horizontalų slinkimą
+scroll_horizontal_label=Horizontalus slinkimas
+scroll_wrapped.title=Naudoti išklotą slinkimą
+scroll_wrapped_label=Išklotas slinkimas
+
+spread_none.title=Nejungti puslapių į dvilapius
+spread_none_label=Be dvilapių
+spread_odd.title=Sujungti į dvilapius pradedant nelyginiais puslapiais
+spread_odd_label=Nelyginiai dvilapiai
+spread_even.title=Sujungti į dvilapius pradedant lyginiais puslapiais
+spread_even_label=Lyginiai dvilapiai
+
+# Document properties dialog box
+document_properties.title=Dokumento savybės…
+document_properties_label=Dokumento savybės…
+document_properties_file_name=Failo vardas:
+document_properties_file_size=Failo dydis:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Antraštė:
+document_properties_author=Autorius:
+document_properties_subject=Tema:
+document_properties_keywords=Reikšminiai žodžiai:
+document_properties_creation_date=Sukūrimo data:
+document_properties_modification_date=Modifikavimo data:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kūrėjas:
+document_properties_producer=PDF generatorius:
+document_properties_version=PDF versija:
+document_properties_page_count=Puslapių skaičius:
+document_properties_page_size=Puslapio dydis:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stačias
+document_properties_page_size_orientation_landscape=gulsčias
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Laiškas
+document_properties_page_size_name_legal=Dokumentas
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Spartus žiniatinklio rodinys:
+document_properties_linearized_yes=Taip
+document_properties_linearized_no=Ne
+document_properties_close=Užverti
+
+print_progress_message=Dokumentas ruošiamas spausdinimui…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atsisakyti
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Rodyti / slėpti šoninį polangį
+toggle_sidebar_notification2.title=Parankinė (dokumentas turi struktūrą / priedų / sluoksnių)
+toggle_sidebar_label=Šoninis polangis
+document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus)
+document_outline_label=Dokumento struktūra
+attachments.title=Rodyti priedus
+attachments_label=Priedai
+layers.title=Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną)
+layers_label=Sluoksniai
+thumbs.title=Rodyti puslapių miniatiūras
+thumbs_label=Miniatiūros
+current_outline_item.title=Rasti dabartinį struktūros elementą
+current_outline_item_label=Dabartinis struktūros elementas
+findbar.title=Ieškoti dokumente
+findbar_label=Rasti
+
+additional_layers=Papildomi sluoksniai
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark={{page}} puslapis
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} puslapis
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} puslapio miniatiūra
+
+# Find panel button title and messages
+find_input.title=Rasti
+find_input.placeholder=Rasti dokumente…
+find_previous.title=Ieškoti ankstesnio frazės egzemplioriaus
+find_previous_label=Ankstesnis
+find_next.title=Ieškoti tolesnio frazės egzemplioriaus
+find_next_label=Tolesnis
+find_highlight=Viską paryškinti
+find_match_case_label=Skirti didžiąsias ir mažąsias raides
+find_entire_word_label=Ištisi žodžiai
+find_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos
+find_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} iš {{total}} atitikmens
+find_match_count[two]={{current}} iš {{total}} atitikmenų
+find_match_count[few]={{current}} iš {{total}} atitikmenų
+find_match_count[many]={{current}} iš {{total}} atitikmenų
+find_match_count[other]={{current}} iš {{total}} atitikmens
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų
+find_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo
+find_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys
+find_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys
+find_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų
+find_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo
+find_not_found=Ieškoma frazė nerasta
+
+# Error panel labels
+error_more_info=Išsamiau
+error_less_info=Glausčiau
+error_close=Užverti
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v. {{version}} (darinys: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Pranešimas: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Dėklas: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Failas: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Eilutė: {{line}}
+rendering_error=Atvaizduojant puslapį įvyko klaida.
+
+# Predefined zoom values
+page_scale_width=Priderinti prie lapo pločio
+page_scale_fit=Pritaikyti prie lapo dydžio
+page_scale_auto=Automatinis mastelis
+page_scale_actual=Tikras dydis
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Įkeliama…
+loading_error=Įkeliant PDF failą įvyko klaida.
+invalid_file_error=Tai nėra PDF failas arba jis yra sugadintas.
+missing_file_error=PDF failas nerastas.
+unexpected_response_error=Netikėtas serverio atsakas.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[„{{type}}“ tipo anotacija]
+password_label=Įveskite slaptažodį šiam PDF failui atverti.
+password_invalid=Slaptažodis neteisingas. Bandykite dar kartą.
+password_ok=Gerai
+password_cancel=Atsisakyti
+
+printing_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas.
+printing_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui.
+web_fonts_disabled=Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima.
diff --git a/app/assets/javascripts/publications/locale/ltg/viewer.properties b/app/assets/javascripts/publications/locale/ltg/viewer.properties
new file mode 100644
index 0000000..b0e202d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ltg/viewer.properties
@@ -0,0 +1,212 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Īprīkšejā lopa
+previous_label=Īprīkšejā
+next.title=Nuokomuo lopa
+next_label=Nuokomuo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Lopa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=nu {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} nu {{pagesCount}})
+
+zoom_out.title=Attuolynuot
+zoom_out_label=Attuolynuot
+zoom_in.title=Pītuvynuot
+zoom_in_label=Pītuvynuot
+zoom.title=Palelynuojums
+presentation_mode.title=Puorslēgtīs iz Prezentacejis režymu
+presentation_mode_label=Prezentacejis režyms
+open_file.title=Attaiseit failu
+open_file_label=Attaiseit
+print.title=Drukuošona
+print_label=Drukōt
+download.title=Lejupīluode
+download_label=Lejupīluodeit
+bookmark.title=Pošreizejais skots (kopēt voi attaiseit jaunā lūgā)
+bookmark_label=Pošreizejais skots
+
+# Secondary toolbar and context menu
+tools.title=Reiki
+tools_label=Reiki
+first_page.title=Īt iz pyrmū lopu
+first_page_label=Īt iz pyrmū lopu
+last_page.title=Īt iz piedejū lopu
+last_page_label=Īt iz piedejū lopu
+page_rotate_cw.title=Pagrīzt pa pulksteni
+page_rotate_cw_label=Pagrīzt pa pulksteni
+page_rotate_ccw.title=Pagrīzt pret pulksteni
+page_rotate_ccw_label=Pagrīzt pret pulksteni
+
+cursor_text_select_tool.title=Aktivizēt teksta izvieles reiku
+cursor_text_select_tool_label=Teksta izvieles reiks
+cursor_hand_tool.title=Aktivēt rūkys reiku
+cursor_hand_tool_label=Rūkys reiks
+
+scroll_vertical.title=Izmontōt vertikalū ritinōšonu
+scroll_vertical_label=Vertikalō ritinōšona
+scroll_horizontal.title=Izmontōt horizontalū ritinōšonu
+scroll_horizontal_label=Horizontalō ritinōšona
+scroll_wrapped.title=Izmontōt mārūgojamū ritinōšonu
+scroll_wrapped_label=Mārūgojamō ritinōšona
+
+spread_none.title=Naizmontōt lopu atvāruma režimu
+spread_none_label=Bez atvārumim
+spread_odd.title=Izmontōt lopu atvārumus sōkut nu napōra numeru lopom
+spread_odd_label=Napōra lopys pa kreisi
+spread_even.title=Izmontōt lopu atvārumus sōkut nu pōra numeru lopom
+spread_even_label=Pōra lopys pa kreisi
+
+# Document properties dialog box
+document_properties.title=Dokumenta īstatiejumi…
+document_properties_label=Dokumenta īstatiejumi…
+document_properties_file_name=Faila nūsaukums:
+document_properties_file_size=Faila izmārs:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} biti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} biti)
+document_properties_title=Nūsaukums:
+document_properties_author=Autors:
+document_properties_subject=Tema:
+document_properties_keywords=Atslāgi vuordi:
+document_properties_creation_date=Izveides datums:
+document_properties_modification_date=lobuošonys datums:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Radeituojs:
+document_properties_producer=PDF producents:
+document_properties_version=PDF verseja:
+document_properties_page_count=Lopu skaits:
+document_properties_page_size=Lopas izmārs:
+document_properties_page_size_unit_inches=collas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portreta orientaceja
+document_properties_page_size_orientation_landscape=ainovys orientaceja
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Jā
+document_properties_linearized_no=Nā
+document_properties_close=Aiztaiseit
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atceļt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Puorslēgt suonu jūslu
+toggle_sidebar_label=Puorslēgt suonu jūslu
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Dokumenta saturs
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Paruodeit seiktālus
+thumbs_label=Seiktāli
+findbar.title=Mekleit dokumentā
+findbar_label=Mekleit
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Lopa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Lopys {{page}} seiktāls
+
+# Find panel button title and messages
+find_input.title=Mekleit
+find_input.placeholder=Mekleit dokumentā…
+find_previous.title=Atrast īprīkšejū
+find_previous_label=Īprīkšejā
+find_next.title=Atrast nuokamū
+find_next_label=Nuokomuo
+find_highlight=Īkruosuot vysys
+find_match_case_label=Lelū, mozū burtu jiuteigs
+find_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom
+find_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma
+find_not_found=Frāze nav atrosta
+
+# Error panel labels
+error_more_info=Vairuok informacejis
+error_less_info=mozuok informacejis
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ziņuojums: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Steks: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ryndeņa: {{line}}
+rendering_error=Attālojūt lopu rodās klaida
+
+# Predefined zoom values
+page_scale_width=Lopys plotumā
+page_scale_fit=Ītylpynūt lopu
+page_scale_auto=Automatiskais izmārs
+page_scale_actual=Patīsais izmārs
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Īluodejūt PDF nūtyka klaida.
+invalid_file_error=Nadereigs voi būjuots PDF fails.
+missing_file_error=PDF fails nav atrosts.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Īvodit paroli, kab attaiseitu PDF failu.
+password_invalid=Napareiza parole, raugit vēļreiz.
+password_ok=Labi
+password_cancel=Atceļt
+
+printing_not_supported=Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji.
+printing_not_ready=Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai.
+web_fonts_disabled=Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus.
diff --git a/app/assets/javascripts/publications/locale/lv/viewer.properties b/app/assets/javascripts/publications/locale/lv/viewer.properties
new file mode 100644
index 0000000..b9b5c03
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/lv/viewer.properties
@@ -0,0 +1,234 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Iepriekšējā lapa
+previous_label=Iepriekšējā
+next.title=Nākamā lapa
+next_label=Nākamā
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Lapa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=no {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} no {{pagesCount}})
+
+zoom_out.title=Attālināt\u0020
+zoom_out_label=Attālināt
+zoom_in.title=Pietuvināt
+zoom_in_label=Pietuvināt
+zoom.title=Palielinājums
+presentation_mode.title=Pārslēgties uz Prezentācijas režīmu
+presentation_mode_label=Prezentācijas režīms
+open_file.title=Atvērt failu
+open_file_label=Atvērt
+print.title=Drukāšana
+print_label=Drukāt
+download.title=Lejupielāde
+download_label=Lejupielādēt
+bookmark.title=Pašreizējais skats (kopēt vai atvērt jaunā logā)
+bookmark_label=Pašreizējais skats
+
+# Secondary toolbar and context menu
+tools.title=Rīki
+tools_label=Rīki
+first_page.title=Iet uz pirmo lapu
+first_page_label=Iet uz pirmo lapu
+last_page.title=Iet uz pēdējo lapu
+last_page_label=Iet uz pēdējo lapu
+page_rotate_cw.title=Pagriezt pa pulksteni
+page_rotate_cw_label=Pagriezt pa pulksteni
+page_rotate_ccw.title=Pagriezt pret pulksteni
+page_rotate_ccw_label=Pagriezt pret pulksteni
+
+cursor_text_select_tool.title=Aktivizēt teksta izvēles rīku
+cursor_text_select_tool_label=Teksta izvēles rīks
+cursor_hand_tool.title=Aktivēt rokas rīku
+cursor_hand_tool_label=Rokas rīks
+
+scroll_vertical.title=Izmantot vertikālo ritināšanu
+scroll_vertical_label=Vertikālā ritināšana
+scroll_horizontal.title=Izmantot horizontālo ritināšanu
+scroll_horizontal_label=Horizontālā ritināšana
+scroll_wrapped.title=Izmantot apkļauto ritināšanu
+scroll_wrapped_label=Apkļautā ritināšana
+
+spread_none.title=Nepievienoties lapu izpletumiem
+spread_none_label=Neizmantot izpletumus
+spread_odd.title=Izmantot lapu izpletumus sākot ar nepāra numuru lapām
+spread_odd_label=Nepāra izpletumi
+spread_even.title=Izmantot lapu izpletumus sākot ar pāra numuru lapām
+spread_even_label=Pāra izpletumi
+
+# Document properties dialog box
+document_properties.title=Dokumenta iestatījumi…
+document_properties_label=Dokumenta iestatījumi…
+document_properties_file_name=Faila nosaukums:
+document_properties_file_size=Faila izmērs:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} biti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} biti)
+document_properties_title=Nosaukums:
+document_properties_author=Autors:
+document_properties_subject=Tēma:
+document_properties_keywords=Atslēgas vārdi:
+document_properties_creation_date=Izveides datums:
+document_properties_modification_date=LAbošanas datums:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Radītājs:
+document_properties_producer=PDF producents:
+document_properties_version=PDF versija:
+document_properties_page_count=Lapu skaits:
+document_properties_page_size=Papīra izmērs:
+document_properties_page_size_unit_inches=collas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portretorientācija
+document_properties_page_size_orientation_landscape=ainavorientācija
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Vēstule
+document_properties_page_size_name_legal=Juridiskie teksti
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ātrā tīmekļa skats:
+document_properties_linearized_yes=Jā
+document_properties_linearized_no=Nē
+document_properties_close=Aizvērt
+
+print_progress_message=Gatavo dokumentu drukāšanai...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atcelt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Pārslēgt sānu joslu
+toggle_sidebar_label=Pārslēgt sānu joslu
+document_outline.title=Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus)
+document_outline_label=Dokumenta saturs
+attachments.title=Rādīt pielikumus
+attachments_label=Pielikumi
+thumbs.title=Parādīt sīktēlus
+thumbs_label=Sīktēli
+findbar.title=Meklēt dokumentā
+findbar_label=Meklēt
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Lapa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Lapas {{page}} sīktēls
+
+# Find panel button title and messages
+find_input.title=Meklēt
+find_input.placeholder=Meklēt dokumentā…
+find_previous.title=Atrast iepriekšējo
+find_previous_label=Iepriekšējā
+find_next.title=Atrast nākamo
+find_next_label=Nākamā
+find_highlight=Iekrāsot visas
+find_match_case_label=Lielo, mazo burtu jutīgs
+find_entire_word_label=Veselus vārdus
+find_reached_top=Sasniegts dokumenta sākums, turpinām no beigām
+find_reached_bottom=Sasniegtas dokumenta beigas, turpinām no sākuma
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} no {{total}} rezultāta
+find_match_count[two]={{current}} no {{total}} rezultātiem
+find_match_count[few]={{current}} no {{total}} rezultātiem
+find_match_count[many]={{current}} no {{total}} rezultātiem
+find_match_count[other]={{current}} no {{total}} rezultātiem
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[one]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[two]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[few]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[many]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[other]=Vairāk nekā {{limit}} rezultāti
+find_not_found=Frāze nav atrasta
+
+# Error panel labels
+error_more_info=Vairāk informācijas
+error_less_info=MAzāk informācijas
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ziņojums: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Steks: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rindiņa: {{line}}
+rendering_error=Attēlojot lapu radās kļūda
+
+# Predefined zoom values
+page_scale_width=Lapas platumā
+page_scale_fit=Ietilpinot lapu
+page_scale_auto=Automātiskais izmērs
+page_scale_actual=Patiesais izmērs
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Ielādējot PDF notika kļūda.
+invalid_file_error=Nederīgs vai bojāts PDF fails.
+missing_file_error=PDF fails nav atrasts.
+unexpected_response_error=Negaidīa servera atbilde.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} anotācija]
+password_label=Ievadiet paroli, lai atvērtu PDF failu.
+password_invalid=Nepareiza parole, mēģiniet vēlreiz.
+password_ok=Labi
+password_cancel=Atcelt
+
+printing_not_supported=Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji.
+printing_not_ready=Uzmanību: PDF nav pilnībā ielādēts drukāšanai.
+web_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus.
diff --git a/app/assets/javascripts/publications/locale/meh/viewer.properties b/app/assets/javascripts/publications/locale/meh/viewer.properties
new file mode 100644
index 0000000..7a1bf04
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/meh/viewer.properties
@@ -0,0 +1,111 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página yata
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom.title=Nasa´a ka´nu/Nasa´a luli
+open_file_label=Síne
+
+# Secondary toolbar and context menu
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Kuvi
+document_properties_close=Nakasɨ
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nkuvi-ka
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+findbar_label=Nánuku
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=Nánuku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+
+# Error panel labels
+error_close=Nakasɨ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Nkuvi-ka
+
diff --git a/app/assets/javascripts/publications/locale/mk/viewer.properties b/app/assets/javascripts/publications/locale/mk/viewer.properties
new file mode 100644
index 0000000..24ff730
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/mk/viewer.properties
@@ -0,0 +1,138 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Претходна страница
+previous_label=Претходна
+next.title=Следна страница
+next_label=Следна
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Намалување
+zoom_out_label=Намали
+zoom_in.title=Зголемување
+zoom_in_label=Зголеми
+zoom.title=Променување на големина
+presentation_mode.title=Премини во презентациски режим
+presentation_mode_label=Презентациски режим
+open_file.title=Отворање датотека
+open_file_label=Отвори
+print.title=Печатење
+print_label=Печати
+download.title=Преземање
+download_label=Преземи
+bookmark.title=Овој преглед (копирај или отвори во нов прозорец)
+bookmark_label=Овој преглед
+
+# Secondary toolbar and context menu
+tools.title=Алатки
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=Откажи
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Вклучи странична лента
+toggle_sidebar_label=Вклучи странична лента
+thumbs.title=Прикажување на икони
+thumbs_label=Икони
+findbar.title=Најди во документот
+findbar_label=Најди
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Икона од страница {{page}}
+
+# Find panel button title and messages
+find_previous.title=Најди ја предходната појава на фразата
+find_previous_label=Претходно
+find_next.title=Најди ја следната појава на фразата
+find_next_label=Следно
+find_highlight=Означи сѐ
+find_match_case_label=Токму така
+find_reached_top=Барањето стигна до почетокот на документот и почнува од крајот
+find_reached_bottom=Барањето стигна до крајот на документот и почнува од почеток
+find_not_found=Фразата не е пронајдена
+
+# Error panel labels
+error_more_info=Повеќе информации
+error_less_info=Помалку информации
+error_close=Затвори
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Порака: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Датотека: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Линија: {{line}}
+rendering_error=Настана грешка при прикажувањето на страницата.
+
+# Predefined zoom values
+page_scale_width=Ширина на страница
+page_scale_fit=Цела страница
+page_scale_auto=Автоматска големина
+page_scale_actual=Вистинска големина
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+loading_error=Настана грешка при вчитувањето на PDF-от.
+invalid_file_error=Невалидна или корумпирана PDF датотека.
+missing_file_error=Недостасува PDF документ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Откажи
+
+printing_not_supported=Предупредување: Печатењето не е целосно поддржано во овој прелистувач.
+printing_not_ready=Предупредување: PDF документот не е целосно вчитан за печатење.
+web_fonts_disabled=Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови.
diff --git a/app/assets/javascripts/publications/locale/mr/viewer.properties b/app/assets/javascripts/publications/locale/mr/viewer.properties
new file mode 100644
index 0000000..697c2a3
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/mr/viewer.properties
@@ -0,0 +1,230 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=मागील पृष्ठ
+previous_label=मागील
+next.title=पुढील पृष्ठ
+next_label=पुढील
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृष्ठ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}पैकी
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} पैकी {{pageNumber}})
+
+zoom_out.title=छोटे करा
+zoom_out_label=छोटे करा
+zoom_in.title=मोठे करा
+zoom_in_label=मोठे करा
+zoom.title=लहान किंवा मोठे करा
+presentation_mode.title=प्रस्तुतिकरण मोडचा वापर करा
+presentation_mode_label=प्रस्तुतिकरण मोड
+open_file.title=फाइल उघडा
+open_file_label=उघडा
+print.title=छपाई करा
+print_label=छपाई करा
+download.title=डाउनलोड करा
+download_label=डाउनलोड करा
+bookmark.title=सध्याचे अवलोकन (नवीन पटलात प्रत बनवा किंवा उघडा)
+bookmark_label=सध्याचे अवलोकन
+
+# Secondary toolbar and context menu
+tools.title=साधने
+tools_label=साधने
+first_page.title=पहिल्या पृष्ठावर जा
+first_page_label=पहिल्या पृष्ठावर जा
+last_page.title=शेवटच्या पृष्ठावर जा
+last_page_label=शेवटच्या पृष्ठावर जा
+page_rotate_cw.title=घड्याळाच्या काट्याच्या दिशेने फिरवा
+page_rotate_cw_label=घड्याळाच्या काट्याच्या दिशेने फिरवा
+page_rotate_ccw.title=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
+page_rotate_ccw_label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
+
+cursor_text_select_tool.title=मजकूर निवड साधन कार्यान्वयीत करा
+cursor_text_select_tool_label=मजकूर निवड साधन
+cursor_hand_tool.title=हात साधन कार्यान्वित करा
+cursor_hand_tool_label=हस्त साधन
+
+scroll_vertical.title=अनुलंब स्क्रोलिंग वापरा
+scroll_vertical_label=अनुलंब स्क्रोलिंग
+scroll_horizontal.title=क्षैतिज स्क्रोलिंग वापरा
+scroll_horizontal_label=क्षैतिज स्क्रोलिंग
+
+
+# Document properties dialog box
+document_properties.title=दस्तऐवज गुणधर्म…
+document_properties_label=दस्तऐवज गुणधर्म…
+document_properties_file_name=फाइलचे नाव:
+document_properties_file_size=फाइल आकार:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} बाइट्स)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} बाइट्स)
+document_properties_title=शिर्षक:
+document_properties_author=लेखक:
+document_properties_subject=विषय:
+document_properties_keywords=मुख्यशब्द:
+document_properties_creation_date=निर्माण दिनांक:
+document_properties_modification_date=दुरूस्ती दिनांक:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=निर्माता:
+document_properties_producer=PDF निर्माता:
+document_properties_version=PDF आवृत्ती:
+document_properties_page_count=पृष्ठ संख्या:
+document_properties_page_size=पृष्ठ आकार:
+document_properties_page_size_unit_inches=इंच
+document_properties_page_size_unit_millimeters=मीमी
+document_properties_page_size_orientation_portrait=उभी मांडणी
+document_properties_page_size_orientation_landscape=आडवे
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=जलद वेब दृष्य:
+document_properties_linearized_yes=हो
+document_properties_linearized_no=नाही
+document_properties_close=बंद करा
+
+print_progress_message=छपाई करीता पृष्ठ तयार करीत आहे…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रद्द करा
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=बाजूचीपट्टी टॉगल करा
+toggle_sidebar_label=बाजूचीपट्टी टॉगल करा
+document_outline.title=दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा)
+document_outline_label=दस्तऐवज रूपरेषा
+attachments.title=जोडपत्र दाखवा
+attachments_label=जोडपत्र
+thumbs.title=थंबनेल्स् दाखवा
+thumbs_label=थंबनेल्स्
+findbar.title=दस्तऐवजात शोधा
+findbar_label=शोधा
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृष्ठ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=पृष्ठाचे थंबनेल {{page}}
+
+# Find panel button title and messages
+find_input.title=शोधा
+find_input.placeholder=दस्तऐवजात शोधा…
+find_previous.title=वाकप्रयोगची मागील घटना शोधा
+find_previous_label=मागील
+find_next.title=वाकप्रयोगची पुढील घटना शोधा
+find_next_label=पुढील
+find_highlight=सर्व ठळक करा
+find_match_case_label=आकार जुळवा
+find_entire_word_label=संपूर्ण शब्द
+find_reached_top=दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे
+find_reached_bottom=दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} पैकी {{current}} सुसंगत
+find_match_count[two]={{total}} पैकी {{current}} सुसंगत
+find_match_count[few]={{total}} पैकी {{current}} सुसंगत
+find_match_count[many]={{total}} पैकी {{current}} सुसंगत
+find_match_count[other]={{total}} पैकी {{current}} सुसंगत
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[one]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[two]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[few]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[many]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[other]={{limit}} पेक्षा अधिक जुळण्या
+find_not_found=वाकप्रयोग आढळले नाही
+
+# Error panel labels
+error_more_info=आणखी माहिती
+error_less_info=कमी माहिती
+error_close=बंद करा
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=संदेश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्टॅक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=रेष: {{line}}
+rendering_error=पृष्ठ दाखवतेवेळी त्रुटी आढळली.
+
+# Predefined zoom values
+page_scale_width=पृष्ठाची रूंदी
+page_scale_fit=पृष्ठ बसवा
+page_scale_auto=स्वयं लाहन किंवा मोठे करणे
+page_scale_actual=प्रत्यक्ष आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF लोड करतेवेळी त्रुटी आढळली.
+invalid_file_error=अवैध किंवा दोषीत PDF फाइल.
+missing_file_error=न आढळणारी PDF फाइल.
+unexpected_response_error=अनपेक्षित सर्व्हर प्रतिसाद.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} टिपण्णी]
+password_label=ही PDF फाइल उघडण्याकरिता पासवर्ड द्या.
+password_invalid=अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा.
+password_ok=ठीक आहे
+password_cancel=रद्द करा
+
+printing_not_supported=सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही.
+printing_not_ready=सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही.
+web_fonts_disabled=वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य.
diff --git a/app/assets/javascripts/publications/locale/ms/viewer.properties b/app/assets/javascripts/publications/locale/ms/viewer.properties
new file mode 100644
index 0000000..a6d4ce8
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ms/viewer.properties
@@ -0,0 +1,234 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Halaman Dahulu
+previous_label=Dahulu
+next.title=Halaman Berikut
+next_label=Berikut
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Halaman
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=daripada {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} daripada {{pagesCount}})
+
+zoom_out.title=Zum Keluar
+zoom_out_label=Zum Keluar
+zoom_in.title=Zum Masuk
+zoom_in_label=Zum Masuk
+zoom.title=Zum
+presentation_mode.title=Tukar ke Mod Persembahan
+presentation_mode_label=Mod Persembahan
+open_file.title=Buka Fail
+open_file_label=Buka
+print.title=Cetak
+print_label=Cetak
+download.title=Muat turun
+download_label=Muat turun
+bookmark.title=Paparan semasa (salin atau buka dalam tetingkap baru)
+bookmark_label=Paparan Semasa
+
+# Secondary toolbar and context menu
+tools.title=Alatan
+tools_label=Alatan
+first_page.title=Pergi ke Halaman Pertama
+first_page_label=Pergi ke Halaman Pertama
+last_page.title=Pergi ke Halaman Terakhir
+last_page_label=Pergi ke Halaman Terakhir
+page_rotate_cw.title=Berputar ikut arah Jam
+page_rotate_cw_label=Berputar ikut arah Jam
+page_rotate_ccw.title=Pusing berlawan arah jam
+page_rotate_ccw_label=Pusing berlawan arah jam
+
+cursor_text_select_tool.title=Dayakan Alatan Pilihan Teks
+cursor_text_select_tool_label=Alatan Pilihan Teks
+cursor_hand_tool.title=Dayakan Alatan Tangan
+cursor_hand_tool_label=Alatan Tangan
+
+scroll_vertical.title=Guna Skrol Menegak
+scroll_vertical_label=Skrol Menegak
+scroll_horizontal.title=Guna Skrol Mengufuk
+scroll_horizontal_label=Skrol Mengufuk
+scroll_wrapped.title=Guna Skrol Berbalut
+scroll_wrapped_label=Skrol Berbalut
+
+spread_none.title=Jangan hubungkan hamparan halaman
+spread_none_label=Tanpa Hamparan
+spread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil
+spread_odd_label=Hamparan Ganjil
+spread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap
+spread_even_label=Hamparan Seimbang
+
+# Document properties dialog box
+document_properties.title=Sifat Dokumen…
+document_properties_label=Sifat Dokumen…
+document_properties_file_name=Nama fail:
+document_properties_file_size=Saiz fail:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bait)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bait)
+document_properties_title=Tajuk:
+document_properties_author=Pengarang:
+document_properties_subject=Subjek:
+document_properties_keywords=Kata kunci:
+document_properties_creation_date=Masa Dicipta:
+document_properties_modification_date=Tarikh Ubahsuai:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Pencipta:
+document_properties_producer=Pengeluar PDF:
+document_properties_version=Versi PDF:
+document_properties_page_count=Kiraan Laman:
+document_properties_page_size=Saiz Halaman:
+document_properties_page_size_unit_inches=dalam
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=potret
+document_properties_page_size_orientation_landscape=landskap
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Paparan Web Pantas:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Tidak
+document_properties_close=Tutup
+
+print_progress_message=Menyediakan dokumen untuk dicetak…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Batal
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Togol Bar Sisi
+toggle_sidebar_label=Togol Bar Sisi
+document_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item)
+document_outline_label=Rangka Dokumen
+attachments.title=Papar Lampiran
+attachments_label=Lampiran
+thumbs.title=Papar Thumbnails
+thumbs_label=Imej kecil
+findbar.title=Cari didalam Dokumen
+findbar_label=Cari
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Halaman {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Halaman Imej kecil {{page}}
+
+# Find panel button title and messages
+find_input.title=Cari
+find_input.placeholder=Cari dalam dokumen…
+find_previous.title=Cari teks frasa berkenaan yang terdahulu
+find_previous_label=Dahulu
+find_next.title=Cari teks frasa berkenaan yang berikut
+find_next_label=Berikut
+find_highlight=Serlahkan semua
+find_match_case_label=Huruf sepadan
+find_entire_word_label=Seluruh perkataan
+find_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah
+find_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} daripada {{total}} padanan
+find_match_count[two]={{current}} daripada {{total}} padanan
+find_match_count[few]={{current}} daripada {{total}} padanan
+find_match_count[many]={{current}} daripada {{total}} padanan
+find_match_count[other]={{current}} daripada {{total}} padanan
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Lebih daripada {{limit}} padanan
+find_match_count_limit[one]=Lebih daripada {{limit}} padanan
+find_match_count_limit[two]=Lebih daripada {{limit}} padanan
+find_match_count_limit[few]=Lebih daripada {{limit}} padanan
+find_match_count_limit[many]=Lebih daripada {{limit}} padanan
+find_match_count_limit[other]=Lebih daripada {{limit}} padanan
+find_not_found=Frasa tidak ditemui
+
+# Error panel labels
+error_more_info=Maklumat Lanjut
+error_less_info=Kurang Informasi
+error_close=Tutup
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesej: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Timbun: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Garis: {{line}}
+rendering_error=Ralat berlaku ketika memberikan halaman.
+
+# Predefined zoom values
+page_scale_width=Lebar Halaman
+page_scale_fit=Muat Halaman
+page_scale_auto=Zoom Automatik
+page_scale_actual=Saiz Sebenar
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Masalah berlaku semasa menuatkan sebuah PDF.
+invalid_file_error=Tidak sah atau fail PDF rosak.
+missing_file_error=Fail PDF Hilang.
+unexpected_response_error=Respon pelayan yang tidak dijangka.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotasi]
+password_label=Masukan kata kunci untuk membuka fail PDF ini.
+password_invalid=Kata laluan salah. Cuba lagi.
+password_ok=OK
+password_cancel=Batal
+
+printing_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini.
+printing_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak.
+web_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF.
diff --git a/app/assets/javascripts/publications/locale/my/viewer.properties b/app/assets/javascripts/publications/locale/my/viewer.properties
new file mode 100644
index 0000000..39944cd
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/my/viewer.properties
@@ -0,0 +1,190 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=အရင် စာမျက်နှာ
+previous_label=အရင်နေရာ
+next.title=ရှေ့ စာမျက်နှာ
+next_label=နောက်တခု
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=စာမျက်နှာ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ၏
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} ၏ {{pageNumber}})
+
+zoom_out.title=ချုံ့ပါ
+zoom_out_label=ချုံ့ပါ
+zoom_in.title=ချဲ့ပါ
+zoom_in_label=ချဲ့ပါ
+zoom.title=ချုံ့/ချဲ့ပါ
+presentation_mode.title=ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ
+presentation_mode_label=ဆွေးနွေးတင်ပြစနစ်
+open_file.title=ဖိုင်အားဖွင့်ပါ။
+open_file_label=ဖွင့်ပါ
+print.title=ပုံနှိုပ်ပါ
+print_label=ပုံနှိုပ်ပါ
+download.title=ကူးဆွဲ
+download_label=ကူးဆွဲ
+bookmark.title=လက်ရှိ မြင်ကွင်း (ဝင်းဒိုးအသစ်မှာ ကူးပါ သို့မဟုတ် ဖွင့်ပါ)
+bookmark_label=လက်ရှိ မြင်ကွင်း
+
+# Secondary toolbar and context menu
+tools.title=ကိရိယာများ
+tools_label=ကိရိယာများ
+first_page.title=ပထမ စာမျက်နှာသို့
+first_page_label=ပထမ စာမျက်နှာသို့
+last_page.title=နောက်ဆုံး စာမျက်နှာသို့
+last_page_label=နောက်ဆုံး စာမျက်နှာသို့
+page_rotate_cw.title=နာရီလက်တံ အတိုင်း
+page_rotate_cw_label=နာရီလက်တံ အတိုင်း
+page_rotate_ccw.title=နာရီလက်တံ ပြောင်းပြန်
+page_rotate_ccw_label=နာရီလက်တံ ပြောင်းပြန်
+
+
+
+
+# Document properties dialog box
+document_properties.title=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ
+document_properties_label=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ
+document_properties_file_name=ဖိုင် :
+document_properties_file_size=ဖိုင်ဆိုဒ် :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ကီလိုဘိုတ် ({{size_b}}ဘိုတ်)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=ခေါင်းစဉ် -
+document_properties_author=ရေးသားသူ:
+document_properties_subject=အကြောင်းအရာ:\u0020
+document_properties_keywords=သော့ချက် စာလုံး:
+document_properties_creation_date=ထုတ်လုပ်ရက်စွဲ:
+document_properties_modification_date=ပြင်ဆင်ရက်စွဲ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ဖန်တီးသူ:
+document_properties_producer=PDF ထုတ်လုပ်သူ:
+document_properties_version=PDF ဗားရှင်း:
+document_properties_page_count=စာမျက်နှာအရေအတွက်:
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=ပိတ်
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ပယ်ဖျက်ပါ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ဘေးတန်းဖွင့်ပိတ်
+toggle_sidebar_label=ဖွင့်ပိတ် ဆလိုက်ဒါ
+document_outline.title=စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ)
+document_outline_label=စာတမ်းအကျဉ်းချုပ်
+attachments.title=တွဲချက်များ ပြပါ
+attachments_label=တွဲထားချက်များ
+thumbs.title=ပုံရိပ်ငယ်များကို ပြပါ
+thumbs_label=ပုံရိပ်ငယ်များ
+findbar.title=Find in Document
+findbar_label=ရှာဖွေပါ
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=စာမျက်နှာ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=စာမျက်နှာရဲ့ ပုံရိပ်ငယ် {{page}}
+
+# Find panel button title and messages
+find_input.title=ရှာဖွေပါ
+find_input.placeholder=စာတမ်းထဲတွင် ရှာဖွေရန်…
+find_previous.title=စကားစုရဲ့ အရင် ဖြစ်ပွားမှုကို ရှာဖွေပါ
+find_previous_label=နောက်သို့
+find_next.title=စကားစုရဲ့ နောက်ထပ် ဖြစ်ပွားမှုကို ရှာဖွေပါ
+find_next_label=ရှေ့သို့
+find_highlight=အားလုံးကို မျဉ်းသားပါ
+find_match_case_label=စာလုံး တိုက်ဆိုင်ပါ
+find_reached_top=စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ
+find_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=စကားစု မတွေ့ရဘူး
+
+# Error panel labels
+error_more_info=နောက်ထပ်အချက်အလက်များ
+error_less_info=အနည်းငယ်မျှသော သတင်းအချက်အလက်
+error_close=ပိတ်
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=မက်ဆေ့ - {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=အထပ် - {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ဖိုင် {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=လိုင်း - {{line}}
+rendering_error=စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။
+
+# Predefined zoom values
+page_scale_width=စာမျက်နှာ အကျယ်
+page_scale_fit=စာမျက်နှာ ကွက်တိ
+page_scale_auto=အလိုအလျောက် ချုံ့ချဲ့
+page_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ်
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။
+invalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင်
+missing_file_error=PDF ပျောက်ဆုံး
+unexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက်
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} အဓိပ္ပာယ်ဖွင့်ဆိုချက်]
+password_label=ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။
+password_invalid=စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။
+password_ok=OK
+password_cancel=ပယ်ဖျက်ပါ
+
+printing_not_supported=သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။
+printing_not_ready=သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/app/assets/javascripts/publications/locale/nb-NO/viewer.properties b/app/assets/javascripts/publications/locale/nb-NO/viewer.properties
new file mode 100644
index 0000000..0bb9958
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/nb-NO/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Forrige side
+previous_label=Forrige
+next.title=Neste side
+next_label=Neste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zoom ut
+zoom_out_label=Zoom ut
+zoom_in.title=Zoom inn
+zoom_in_label=Zoom inn
+zoom.title=Zoom
+presentation_mode.title=Bytt til presentasjonsmodus
+presentation_mode_label=Presentasjonsmodus
+open_file.title=Åpne fil
+open_file_label=Åpne
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Last ned
+download_label=Last ned
+bookmark.title=Nåværende visning (kopier eller åpne i et nytt vindu)
+bookmark_label=Nåværende visning
+
+# Secondary toolbar and context menu
+tools.title=Verktøy
+tools_label=Verktøy
+first_page.title=Gå til første side
+first_page_label=Gå til første side
+last_page.title=Gå til siste side
+last_page_label=Gå til siste side
+page_rotate_cw.title=Roter med klokken
+page_rotate_cw_label=Roter med klokken
+page_rotate_ccw.title=Roter mot klokken
+page_rotate_ccw_label=Roter mot klokken
+
+cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
+cursor_text_select_tool_label=Tekstmarkeringsverktøy
+cursor_hand_tool.title=Aktiver handverktøy
+cursor_hand_tool_label=Handverktøy
+
+scroll_page.title=Bruk siderulling
+scroll_page_label=Siderulling
+scroll_vertical.title=Bruk vertikal rulling
+scroll_vertical_label=Vertikal rulling
+scroll_horizontal.title=Bruk horisontal rulling
+scroll_horizontal_label=Horisontal rulling
+scroll_wrapped.title=Bruk flersiderulling
+scroll_wrapped_label=Flersiderulling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltsider
+spread_odd.title=Vis oppslag med ulike sidenumre til venstre
+spread_odd_label=Oppslag med forside
+spread_even.title=Vis oppslag med like sidenumre til venstre
+spread_even_label=Oppslag uten forside
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaper …
+document_properties_label=Dokumentegenskaper …
+document_properties_file_name=Filnavn:
+document_properties_file_size=Filstørrelse:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Dokumentegenskaper …
+document_properties_author=Forfatter:
+document_properties_subject=Emne:
+document_properties_keywords=Nøkkelord:
+document_properties_creation_date=Opprettet dato:
+document_properties_modification_date=Endret dato:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Opprettet av:
+document_properties_producer=PDF-verktøy:
+document_properties_version=PDF-versjon:
+document_properties_page_count=Sideantall:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stående
+document_properties_page_size_orientation_landscape=liggende
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hurtig nettvisning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nei
+document_properties_close=Lukk
+
+print_progress_message=Forbereder dokument for utskrift …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå av/på sidestolpe
+toggle_sidebar_notification2.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag)
+toggle_sidebar_label=Slå av/på sidestolpe
+document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer)
+document_outline_label=Dokumentdisposisjon
+attachments.title=Vis vedlegg
+attachments_label=Vedlegg
+layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)
+layers_label=Lag
+thumbs.title=Vis miniatyrbilde
+thumbs_label=Miniatyrbilde
+current_outline_item.title=Finn gjeldende disposisjonselement
+current_outline_item_label=Gjeldende disposisjonselement
+findbar.title=Finn i dokumentet
+findbar_label=Finn
+
+additional_layers=Ytterligere lag
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyrbilde av side {{page}}
+
+# Find panel button title and messages
+find_input.title=Søk
+find_input.placeholder=Søk i dokument…
+find_previous.title=Finn forrige forekomst av frasen
+find_previous_label=Forrige
+find_next.title=Finn neste forekomst av frasen
+find_next_label=Neste
+find_highlight=Uthev alle
+find_match_case_label=Skill store/små bokstaver
+find_entire_word_label=Hele ord
+find_reached_top=Nådde toppen av dokumentet, fortsetter fra bunnen
+find_reached_bottom=Nådde bunnen av dokumentet, fortsetter fra toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} treff
+find_match_count[two]={{current}} av {{total}} treff
+find_match_count[few]={{current}} av {{total}} treff
+find_match_count[many]={{current}} av {{total}} treff
+find_match_count[other]={{current}} av {{total}} treff
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mer enn {{limit}} treff
+find_match_count_limit[one]=Mer enn {{limit}} treff
+find_match_count_limit[two]=Mer enn {{limit}} treff
+find_match_count_limit[few]=Mer enn {{limit}} treff
+find_match_count_limit[many]=Mer enn {{limit}} treff
+find_match_count_limit[other]=Mer enn {{limit}} treff
+find_not_found=Fant ikke teksten
+
+# Error panel labels
+error_more_info=Mer info
+error_less_info=Mindre info
+error_close=Lukk
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (bygg: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Melding: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stakk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=En feil oppstod ved opptegning av siden.
+
+# Predefined zoom values
+page_scale_width=Sidebredde
+page_scale_fit=Tilpass til siden
+page_scale_auto=Automatisk zoom
+page_scale_actual=Virkelig størrelse
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Laster…
+loading_error=En feil oppstod ved lasting av PDF.
+invalid_file_error=Ugyldig eller skadet PDF-fil.
+missing_file_error=Manglende PDF-fil.
+unexpected_response_error=Uventet serverrespons.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} annotasjon]
+password_label=Skriv inn passordet for å åpne denne PDF-filen.
+password_invalid=Ugyldig passord. Prøv igjen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren.
+printing_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift.
+web_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter.
diff --git a/app/assets/javascripts/publications/locale/ne-NP/viewer.properties b/app/assets/javascripts/publications/locale/ne-NP/viewer.properties
new file mode 100644
index 0000000..0044167
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ne-NP/viewer.properties
@@ -0,0 +1,217 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=अघिल्लो पृष्ठ
+previous_label=अघिल्लो
+next.title=पछिल्लो पृष्ठ
+next_label=पछिल्लो
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृष्ठ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} मध्ये
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} को {{pageNumber}})
+
+zoom_out.title=जुम घटाउनुहोस्
+zoom_out_label=जुम घटाउनुहोस्
+zoom_in.title=जुम बढाउनुहोस्
+zoom_in_label=जुम बढाउनुहोस्
+zoom.title=जुम गर्नुहोस्
+presentation_mode.title=प्रस्तुति मोडमा जानुहोस्
+presentation_mode_label=प्रस्तुति मोड
+open_file.title=फाइल खोल्नुहोस्
+open_file_label=खोल्नुहोस्
+print.title=मुद्रण गर्नुहोस्
+print_label=मुद्रण गर्नुहोस्
+download.title=डाउनलोडहरू
+download_label=डाउनलोडहरू
+bookmark.title=वर्तमान दृश्य (प्रतिलिपि गर्नुहोस् वा नयाँ सञ्झ्यालमा खुल्नुहोस्)
+bookmark_label=हालको दृश्य
+
+# Secondary toolbar and context menu
+tools.title=औजारहरू
+tools_label=औजारहरू
+first_page.title=पहिलो पृष्ठमा जानुहोस्
+first_page_label=पहिलो पृष्ठमा जानुहोस्
+last_page.title=पछिल्लो पृष्ठमा जानुहोस्
+last_page_label=पछिल्लो पृष्ठमा जानुहोस्
+page_rotate_cw.title=घडीको दिशामा घुमाउनुहोस्
+page_rotate_cw_label=घडीको दिशामा घुमाउनुहोस्
+page_rotate_ccw.title=घडीको विपरित दिशामा घुमाउनुहोस्
+page_rotate_ccw_label=घडीको विपरित दिशामा घुमाउनुहोस्
+
+cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम गर्नुहोस्
+cursor_text_select_tool_label=पाठ चयन उपकरण
+cursor_hand_tool.title=हाते उपकरण सक्षम गर्नुहोस्
+cursor_hand_tool_label=हाते उपकरण
+
+scroll_vertical.title=ठाडो स्क्रोलिङ्ग प्रयोग गर्नुहोस्
+scroll_vertical_label=ठाडो स्क्र्रोलिङ्ग
+scroll_horizontal.title=तेर्सो स्क्रोलिङ्ग प्रयोग गर्नुहोस्
+scroll_horizontal_label=तेर्सो स्क्रोलिङ्ग
+scroll_wrapped.title=लिपि स्क्रोलिङ्ग प्रयोग गर्नुहोस्
+scroll_wrapped_label=लिपि स्क्रोलिङ्ग
+
+spread_none.title=पृष्ठ स्प्रेडमा सामेल हुनुहुन्न
+spread_none_label=स्प्रेड छैन
+
+# Document properties dialog box
+document_properties.title=कागजात विशेषताहरू...
+document_properties_label=कागजात विशेषताहरू...
+document_properties_file_name=फाइल नाम:
+document_properties_file_size=फाइल आकार:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=शीर्षक:
+document_properties_author=लेखक:
+document_properties_subject=विषयः
+document_properties_keywords=शब्दकुञ्जीः
+document_properties_creation_date=सिर्जना गरिएको मिति:
+document_properties_modification_date=परिमार्जित मिति:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=सर्जक:
+document_properties_producer=PDF निर्माता:
+document_properties_version=PDF संस्करण
+document_properties_page_count=पृष्ठ गणना:
+document_properties_page_size=पृष्ठ आकार:
+document_properties_page_size_unit_inches=इन्च
+document_properties_page_size_unit_millimeters=मि.मि.
+document_properties_page_size_orientation_portrait=पोट्रेट
+document_properties_page_size_orientation_landscape=परिदृश्य
+document_properties_page_size_name_letter=अक्षर
+document_properties_page_size_name_legal=कानूनी
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=हो
+document_properties_linearized_no=होइन
+document_properties_close=बन्द गर्नुहोस्
+
+print_progress_message=मुद्रणका लागि कागजात तयारी गरिदै…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रद्द गर्नुहोस्
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=टगल साइडबार
+toggle_sidebar_label=टगल साइडबार
+document_outline.title=कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्)
+document_outline_label=दस्तावेजको रूपरेखा
+attachments.title=संलग्नहरू देखाउनुहोस्
+attachments_label=संलग्नकहरू
+thumbs.title=थम्बनेलहरू देखाउनुहोस्
+thumbs_label=थम्बनेलहरू
+findbar.title=कागजातमा फेला पार्नुहोस्
+findbar_label=फेला पार्नुहोस्
+
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृष्ठ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} पृष्ठको थम्बनेल
+
+# Find panel button title and messages
+find_input.title=फेला पार्नुहोस्
+find_input.placeholder=कागजातमा फेला पार्नुहोस्…
+find_previous.title=यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस्
+find_previous_label=अघिल्लो
+find_next.title=यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस्
+find_next_label=अर्को
+find_highlight=सबै हाइलाइट गर्ने
+find_match_case_label=केस जोडा मिलाउनुहोस्
+find_entire_word_label=पुरा शब्दहरु
+find_reached_top=पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो
+find_reached_bottom=पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=वाक्यांश फेला परेन
+
+# Error panel labels
+error_more_info=थप जानकारी
+error_less_info=कम जानकारी
+error_close=बन्द गर्नुहोस्
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=सन्देश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्ट्याक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=लाइन: {{line}}
+rendering_error=पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्यो।
+
+# Predefined zoom values
+page_scale_width=पृष्ठ चौडाइ
+page_scale_fit=पृष्ठ ठिक्क मिल्ने
+page_scale_auto=स्वचालित जुम
+page_scale_actual=वास्तविक आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्यो।
+invalid_file_error=अवैध वा दुषित PDF फाइल।
+missing_file_error=हराईरहेको PDF फाइल।
+unexpected_response_error=अप्रत्याशित सर्भर प्रतिक्रिया।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्।
+password_invalid=अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्।
+password_ok=ठिक छ
+password_cancel=रद्द गर्नुहोस्
+
+printing_not_supported=चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन।
+printing_not_ready=चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन।
+web_fonts_disabled=वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ।
diff --git a/app/assets/javascripts/publications/locale/nl/viewer.properties b/app/assets/javascripts/publications/locale/nl/viewer.properties
new file mode 100644
index 0000000..028b498
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/nl/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Vorige pagina
+previous_label=Vorige
+next.title=Volgende pagina
+next_label=Volgende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=van {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} van {{pagesCount}})
+
+zoom_out.title=Uitzoomen
+zoom_out_label=Uitzoomen
+zoom_in.title=Inzoomen
+zoom_in_label=Inzoomen
+zoom.title=Zoomen
+presentation_mode.title=Wisselen naar presentatiemodus
+presentation_mode_label=Presentatiemodus
+open_file.title=Bestand openen
+open_file_label=Openen
+print.title=Afdrukken
+print_label=Afdrukken
+download.title=Downloaden
+download_label=Downloaden
+bookmark.title=Huidige weergave (kopiëren of openen in nieuw venster)
+bookmark_label=Huidige weergave
+
+# Secondary toolbar and context menu
+tools.title=Hulpmiddelen
+tools_label=Hulpmiddelen
+first_page.title=Naar eerste pagina gaan
+first_page_label=Naar eerste pagina gaan
+last_page.title=Naar laatste pagina gaan
+last_page_label=Naar laatste pagina gaan
+page_rotate_cw.title=Rechtsom draaien
+page_rotate_cw_label=Rechtsom draaien
+page_rotate_ccw.title=Linksom draaien
+page_rotate_ccw_label=Linksom draaien
+
+cursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen
+cursor_text_select_tool_label=Tekstselectiehulpmiddel
+cursor_hand_tool.title=Handhulpmiddel inschakelen
+cursor_hand_tool_label=Handhulpmiddel
+
+scroll_page.title=Paginascrollen gebruiken
+scroll_page_label=Paginascrollen
+scroll_vertical.title=Verticaal scrollen gebruiken
+scroll_vertical_label=Verticaal scrollen
+scroll_horizontal.title=Horizontaal scrollen gebruiken
+scroll_horizontal_label=Horizontaal scrollen
+scroll_wrapped.title=Scrollen met terugloop gebruiken
+scroll_wrapped_label=Scrollen met terugloop
+
+spread_none.title=Dubbele pagina’s niet samenvoegen
+spread_none_label=Geen dubbele pagina’s
+spread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s
+spread_odd_label=Oneven dubbele pagina’s
+spread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s
+spread_even_label=Even dubbele pagina’s
+
+# Document properties dialog box
+document_properties.title=Documenteigenschappen…
+document_properties_label=Documenteigenschappen…
+document_properties_file_name=Bestandsnaam:
+document_properties_file_size=Bestandsgrootte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Auteur:
+document_properties_subject=Onderwerp:
+document_properties_keywords=Sleutelwoorden:
+document_properties_creation_date=Aanmaakdatum:
+document_properties_modification_date=Wijzigingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Maker:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-versie:
+document_properties_page_count=Aantal pagina’s:
+document_properties_page_size=Paginagrootte:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=staand
+document_properties_page_size_orientation_landscape=liggend
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Snelle webweergave:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nee
+document_properties_close=Sluiten
+
+print_progress_message=Document voorbereiden voor afdrukken…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annuleren
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Zijbalk in-/uitschakelen
+toggle_sidebar_notification2.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen)
+toggle_sidebar_label=Zijbalk in-/uitschakelen
+document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen)
+document_outline_label=Documentoverzicht
+attachments.title=Bijlagen tonen
+attachments_label=Bijlagen
+layers.title=Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten)
+layers_label=Lagen
+thumbs.title=Miniaturen tonen
+thumbs_label=Miniaturen
+current_outline_item.title=Huidig item in inhoudsopgave zoeken
+current_outline_item_label=Huidig item in inhoudsopgave
+findbar.title=Zoeken in document
+findbar_label=Zoeken
+
+additional_layers=Aanvullende lagen
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatuur van pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Zoeken
+find_input.placeholder=Zoeken in document…
+find_previous.title=De vorige overeenkomst van de tekst zoeken
+find_previous_label=Vorige
+find_next.title=De volgende overeenkomst van de tekst zoeken
+find_next_label=Volgende
+find_highlight=Alles markeren
+find_match_case_label=Hoofdlettergevoelig
+find_match_diacritics_label=Diakritische tekens gebruiken
+find_entire_word_label=Hele woorden
+find_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant
+find_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} van {{total}} overeenkomst
+find_match_count[two]={{current}} van {{total}} overeenkomsten
+find_match_count[few]={{current}} van {{total}} overeenkomsten
+find_match_count[many]={{current}} van {{total}} overeenkomsten
+find_match_count[other]={{current}} van {{total}} overeenkomsten
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[one]=Meer dan {{limit}} overeenkomst
+find_match_count_limit[two]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[few]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[many]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[other]=Meer dan {{limit}} overeenkomsten
+find_not_found=Tekst niet gevonden
+
+# Error panel labels
+error_more_info=Meer informatie
+error_less_info=Minder informatie
+error_close=Sluiten
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Bericht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Bestand: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Regel: {{line}}
+rendering_error=Er is een fout opgetreden bij het weergeven van de pagina.
+
+# Predefined zoom values
+page_scale_width=Paginabreedte
+page_scale_fit=Hele pagina
+page_scale_auto=Automatisch zoomen
+page_scale_actual=Werkelijke grootte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Laden…
+loading_error=Er is een fout opgetreden bij het laden van de PDF.
+invalid_file_error=Ongeldig of beschadigd PDF-bestand.
+missing_file_error=PDF-bestand ontbreekt.
+unexpected_response_error=Onverwacht serverantwoord.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-aantekening]
+password_label=Voer het wachtwoord in om dit PDF-bestand te openen.
+password_invalid=Ongeldig wachtwoord. Probeer het opnieuw.
+password_ok=OK
+password_cancel=Annuleren
+
+printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.
+printing_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken.
+web_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk.
diff --git a/app/assets/javascripts/publications/locale/nn-NO/viewer.properties b/app/assets/javascripts/publications/locale/nn-NO/viewer.properties
new file mode 100644
index 0000000..2feff78
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/nn-NO/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Føregåande side
+previous_label=Føregåande
+next.title=Neste side
+next_label=Neste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zoom ut
+zoom_out_label=Zoom ut
+zoom_in.title=Zoom inn
+zoom_in_label=Zoom inn
+zoom.title=Zoom
+presentation_mode.title=Byt til presentasjonsmodus
+presentation_mode_label=Presentasjonsmodus
+open_file.title=Opne fil
+open_file_label=Opne
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Last ned
+download_label=Last ned
+bookmark.title=Gjeldande vising (kopier eller opne i nytt vindauge)
+bookmark_label=Gjeldande vising
+
+# Secondary toolbar and context menu
+tools.title=Verktøy
+tools_label=Verktøy
+first_page.title=Gå til første side
+first_page_label=Gå til første side
+last_page.title=Gå til siste side
+last_page_label=Gå til siste side
+page_rotate_cw.title=Roter med klokka
+page_rotate_cw_label=Roter med klokka
+page_rotate_ccw.title=Roter mot klokka
+page_rotate_ccw_label=Roter mot klokka
+
+cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
+cursor_text_select_tool_label=Tekstmarkeringsverktøy
+cursor_hand_tool.title=Aktiver handverktøy
+cursor_hand_tool_label=Handverktøy
+
+scroll_page.title=Bruk siderulling
+scroll_page_label=Siderulling
+scroll_vertical.title=Bruk vertikal rulling
+scroll_vertical_label=Vertikal rulling
+scroll_horizontal.title=Bruk horisontal rulling
+scroll_horizontal_label=Horisontal rulling
+scroll_wrapped.title=Bruk fleirsiderulling
+scroll_wrapped_label=Fleirsiderulling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltside
+spread_odd.title=Vis oppslag med ulike sidenummer til venstre
+spread_odd_label=Oppslag med framside
+spread_even.title=Vis oppslag med like sidenummmer til venstre
+spread_even_label=Oppslag utan framside
+
+# Document properties dialog box
+document_properties.title=Dokumenteigenskapar…
+document_properties_label=Dokumenteigenskapar…
+document_properties_file_name=Filnamn:
+document_properties_file_size=Filstorleik:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Tittel:
+document_properties_author=Forfattar:
+document_properties_subject=Emne:
+document_properties_keywords=Stikkord:
+document_properties_creation_date=Dato oppretta:
+document_properties_modification_date=Dato endra:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Oppretta av:
+document_properties_producer=PDF-verktøy:
+document_properties_version=PDF-versjon:
+document_properties_page_count=Sidetal:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ståande
+document_properties_page_size_orientation_landscape=liggande
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Brev
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rask nettvising:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nei
+document_properties_close=Lat att
+
+print_progress_message=Førebur dokumentet for utskrift…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå av/på sidestolpe
+toggle_sidebar_notification2.title=Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag)
+toggle_sidebar_label=Slå av/på sidestolpe
+document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa)
+document_outline_label=Dokumentdisposisjon
+attachments.title=Vis vedlegg
+attachments_label=Vedlegg
+layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)
+layers_label=Lag
+thumbs.title=Vis miniatyrbilde
+thumbs_label=Miniatyrbilde
+current_outline_item.title=Finn gjeldande disposisjonselement
+current_outline_item_label=Gjeldande disposisjonselement
+findbar.title=Finn i dokumentet
+findbar_label=Finn
+
+additional_layers=Ytterlegare lag
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyrbilde av side {{page}}
+
+# Find panel button title and messages
+find_input.title=Søk
+find_input.placeholder=Søk i dokument…
+find_previous.title=Finn førre førekomst av frasen
+find_previous_label=Førre
+find_next.title=Finn neste førekomst av frasen
+find_next_label=Neste
+find_highlight=Uthev alle
+find_match_case_label=Skil store/små bokstavar
+find_entire_word_label=Heile ord
+find_reached_top=Nådde toppen av dokumentet, fortset frå botnen
+find_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} treff
+find_match_count[two]={{current}} av {{total}} treff
+find_match_count[few]={{current}} av {{total}} treff
+find_match_count[many]={{current}} av {{total}} treff
+find_match_count[other]={{current}} av {{total}} treff
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Meir enn {{limit}} treff
+find_match_count_limit[one]=Meir enn {{limit}} treff
+find_match_count_limit[two]=Meir enn {{limit}} treff
+find_match_count_limit[few]=Meir enn {{limit}} treff
+find_match_count_limit[many]=Meir enn {{limit}} treff
+find_match_count_limit[other]=Meir enn {{limit}} treff
+find_not_found=Fann ikkje teksten
+
+# Error panel labels
+error_more_info=Meir info
+error_less_info=Mindre info
+error_close=Lat att
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (bygg: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Melding: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stakk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=Ein feil oppstod under vising av sida.
+
+# Predefined zoom values
+page_scale_width=Sidebreidde
+page_scale_fit=Tilpass til sida
+page_scale_auto=Automatisk skalering
+page_scale_actual=Verkeleg storleik
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Lastar…
+loading_error=Ein feil oppstod ved lasting av PDF.
+invalid_file_error=Ugyldig eller korrupt PDF-fil.
+missing_file_error=Manglande PDF-fil.
+unexpected_response_error=Uventa tenarrespons.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} annotasjon]
+password_label=Skriv inn passordet for å opne denne PDF-fila.
+password_invalid=Ugyldig passord. Prøv igjen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren.
+printing_not_ready=Åtvaring: PDF ikkje fullstendig innlasta for utskrift.
+web_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter.
diff --git a/app/assets/javascripts/publications/locale/oc/viewer.properties b/app/assets/javascripts/publications/locale/oc/viewer.properties
new file mode 100644
index 0000000..219de4d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/oc/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedenta
+previous_label=Precedent
+next.title=Pagina seguenta
+next_label=Seguent
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=sus {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Zoom arrièr
+zoom_out_label=Zoom arrièr
+zoom_in.title=Zoom avant
+zoom_in_label=Zoom avant
+zoom.title=Zoom
+presentation_mode.title=Bascular en mòde presentacion
+presentation_mode_label=Mòde Presentacion
+open_file.title=Dobrir lo fichièr
+open_file_label=Dobrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Telecargar
+download_label=Telecargar
+bookmark.title=Afichatge corrent (copiar o dobrir dins una fenèstra novèla)
+bookmark_label=Afichatge actual
+
+# Secondary toolbar and context menu
+tools.title=Aisinas
+tools_label=Aisinas
+first_page.title=Anar a la primièra pagina
+first_page_label=Anar a la primièra pagina
+last_page.title=Anar a la darrièra pagina
+last_page_label=Anar a la darrièra pagina
+page_rotate_cw.title=Rotacion orària
+page_rotate_cw_label=Rotacion orària
+page_rotate_ccw.title=Rotacion antiorària
+page_rotate_ccw_label=Rotacion antiorària
+
+cursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte
+cursor_text_select_tool_label=Aisina de seleccion de tèxte
+cursor_hand_tool.title=Activar l’aisina man
+cursor_hand_tool_label=Aisina man
+
+scroll_page.title=Activar lo desfilament per pagina
+scroll_page_label=Desfilament per pagina
+scroll_vertical.title=Utilizar lo desfilament vertical
+scroll_vertical_label=Desfilament vertical
+scroll_horizontal.title=Utilizar lo desfilament orizontal
+scroll_horizontal_label=Desfilament orizontal
+scroll_wrapped.title=Activar lo desfilament continú
+scroll_wrapped_label=Desfilament continú
+
+spread_none.title=Agropar pas las paginas doas a doas
+spread_none_label=Una sola pagina
+spread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra
+spread_odd_label=Dobla pagina, impara a drecha
+spread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra
+spread_even_label=Dobla pagina, para a drecha
+
+# Document properties dialog box
+document_properties.title=Proprietats del document…
+document_properties_label=Proprietats del document…
+document_properties_file_name=Nom del fichièr :
+document_properties_file_size=Talha del fichièr :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ko ({{size_b}} octets)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mo ({{size_b}} octets)
+document_properties_title=Títol :
+document_properties_author=Autor :
+document_properties_subject=Subjècte :
+document_properties_keywords=Mots claus :
+document_properties_creation_date=Data de creacion :
+document_properties_modification_date=Data de modificacion :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, a {{time}}
+document_properties_creator=Creator :
+document_properties_producer=Aisina de conversion PDF :
+document_properties_version=Version PDF :
+document_properties_page_count=Nombre de paginas :
+document_properties_page_size=Talha de la pagina :
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrach
+document_properties_page_size_orientation_landscape=païsatge
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letra
+document_properties_page_size_name_legal=Document juridic
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapida :
+document_properties_linearized_yes=Òc
+document_properties_linearized_no=Non
+document_properties_close=Tampar
+
+print_progress_message=Preparacion del document per l’impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anullar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Afichar/amagar lo panèl lateral
+toggle_sidebar_notification2.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques)
+toggle_sidebar_label=Afichar/amagar lo panèl lateral
+document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements)
+document_outline_label=Marcapaginas del document
+attachments.title=Visualizar las pèças juntas
+attachments_label=Pèças juntas
+layers.title=Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut)
+layers_label=Calques
+thumbs.title=Afichar las vinhetas
+thumbs_label=Vinhetas
+current_outline_item.title=Trobar l’element de plan actual
+current_outline_item_label=Element de plan actual
+findbar.title=Cercar dins lo document
+findbar_label=Recercar
+
+additional_layers=Calques suplementaris
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vinheta de la pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Recercar
+find_input.placeholder=Cercar dins lo document…
+find_previous.title=Tròba l'ocurréncia precedenta de la frasa
+find_previous_label=Precedent
+find_next.title=Tròba l'ocurréncia venenta de la frasa
+find_next_label=Seguent
+find_highlight=Suslinhar tot
+find_match_case_label=Respectar la cassa
+find_entire_word_label=Mots entièrs
+find_reached_top=Naut de la pagina atenh, perseguida del bas
+find_reached_bottom=Bas de la pagina atench, perseguida al començament
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Ocuréncia {{current}} sus {{total}}
+find_match_count[two]=Ocuréncia {{current}} sus {{total}}
+find_match_count[few]=Ocuréncia {{current}} sus {{total}}
+find_match_count[many]=Ocuréncia {{current}} sus {{total}}
+find_match_count[other]=Ocuréncia {{current}} sus {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mai de {{limit}} ocuréncias
+find_match_count_limit[one]=Mai de {{limit}} ocuréncia
+find_match_count_limit[two]=Mai de {{limit}} ocuréncias
+find_match_count_limit[few]=Mai de {{limit}} ocuréncias
+find_match_count_limit[many]=Mai de {{limit}} ocuréncias
+find_match_count_limit[other]=Mai de {{limit}} ocuréncias
+find_not_found=Frasa pas trobada
+
+# Error panel labels
+error_more_info=Mai de detalhs
+error_less_info=Mens d'informacions
+error_close=Tampar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (identificant de compilacion : {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Messatge : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichièr : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha : {{line}}
+rendering_error=Una error s'es producha pendent l'afichatge de la pagina.
+
+# Predefined zoom values
+page_scale_width=Largor plena
+page_scale_fit=Pagina entièra
+page_scale_auto=Zoom automatic
+page_scale_actual=Talha vertadièra
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Cargament…
+loading_error=Una error s'es producha pendent lo cargament del fichièr PDF.
+invalid_file_error=Fichièr PDF invalid o corromput.
+missing_file_error=Fichièr PDF mancant.
+unexpected_response_error=Responsa de servidor imprevista.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} a {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotacion {{type}}]
+password_label=Picatz lo senhal per dobrir aqueste fichièr PDF.
+password_invalid=Senhal incorrècte. Tornatz ensajar.
+password_ok=D'acòrdi
+password_cancel=Anullar
+
+printing_not_supported=Atencion : l'impression es pas completament gerida per aqueste navegador.
+printing_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir.
+web_fonts_disabled=Las poliças web son desactivadas : impossible d'utilizar las poliças integradas al PDF.
diff --git a/app/assets/javascripts/publications/locale/pa-IN/viewer.properties b/app/assets/javascripts/publications/locale/pa-IN/viewer.properties
new file mode 100644
index 0000000..61215db
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/pa-IN/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ਪਿਛਲਾ ਸਫ਼ਾ
+previous_label=ਪਿੱਛੇ
+next.title=ਅਗਲਾ ਸਫ਼ਾ
+next_label=ਅੱਗੇ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ਸਫ਼ਾ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ਵਿੱਚੋਂ
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}}
+
+zoom_out.title=ਜ਼ੂਮ ਆਉਟ
+zoom_out_label=ਜ਼ੂਮ ਆਉਟ
+zoom_in.title=ਜ਼ੂਮ ਇਨ
+zoom_in_label=ਜ਼ੂਮ ਇਨ
+zoom.title=ਜ਼ੂਨ
+presentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ
+presentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ
+open_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ
+open_file_label=ਖੋਲ੍ਹੋ
+print.title=ਪਰਿੰਟ
+print_label=ਪਰਿੰਟ
+download.title=ਡਾਊਨਲੋਡ
+download_label=ਡਾਊਨਲੋਡ
+bookmark.title=ਮੌਜੂਦਾ ਝਲਕ (ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਕਾਪੀ ਕਰੋ ਜਾਂ ਖੋਲ੍ਹੋ)
+bookmark_label=ਮੌਜੂਦਾ ਝਲਕ
+
+# Secondary toolbar and context menu
+tools.title=ਟੂਲ
+tools_label=ਟੂਲ
+first_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ
+page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ
+page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ
+page_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ
+
+cursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
+cursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ
+cursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
+cursor_hand_tool_label=ਹੱਥ ਟੂਲ
+
+scroll_page.title=ਸਫ਼ਾ ਖਿਸਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_page_label=ਸਫ਼ਾ ਖਿਸਕਾਉਣਾ
+scroll_vertical.title=ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_vertical_label=ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ
+scroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ
+scroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ
+
+spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ
+spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ
+spread_odd.title=ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+spread_odd_label=ਟਾਂਕ ਫੈਲਾਅ
+spread_even.title=ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+spread_even_label=ਜਿਸਤ ਫੈਲਾਅ
+
+# Document properties dialog box
+document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
+document_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
+document_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ:
+document_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ)
+document_properties_title=ਟਾਈਟਲ:
+document_properties_author=ਲੇਖਕ:
+document_properties_subject=ਵਿਸ਼ਾ:
+document_properties_keywords=ਸ਼ਬਦ:
+document_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ:
+document_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ਨਿਰਮਾਤਾ:
+document_properties_producer=PDF ਪ੍ਰੋਡਿਊਸਰ:
+document_properties_version=PDF ਵਰਜਨ:
+document_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ:
+document_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ:
+document_properties_page_size_unit_inches=ਇੰਚ
+document_properties_page_size_unit_millimeters=ਮਿਮੀ
+document_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ
+document_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ਲੈਟਰ
+document_properties_page_size_name_legal=ਕਨੂੰਨੀ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ਤੇਜ਼ ਵੈੱਬ ਝਲਕ:
+document_properties_linearized_yes=ਹਾਂ
+document_properties_linearized_no=ਨਹੀਂ
+document_properties_close=ਬੰਦ ਕਰੋ
+
+print_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ਰੱਦ ਕਰੋ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ
+toggle_sidebar_notification2.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ)
+toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ
+document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
+document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ
+attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ
+attachments_label=ਅਟੈਚਮੈਂਟਾਂ
+layers.title=ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
+layers_label=ਪਰਤਾਂ
+thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ
+thumbs_label=ਥੰਮਨੇਲ
+current_outline_item.title=ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ
+current_outline_item_label=ਮੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼
+findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ
+findbar_label=ਲੱਭੋ
+
+additional_layers=ਵਾਧੂ ਪਰਤਾਂ
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=ਸਫ਼ਾ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ਸਫ਼ਾ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ
+
+# Find panel button title and messages
+find_input.title=ਲੱਭੋ
+find_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ
+find_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ
+find_previous_label=ਪਿੱਛੇ
+find_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ
+find_next_label=ਅੱਗੇ
+find_highlight=ਸਭ ਉਭਾਰੋ
+find_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ
+find_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ
+find_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
+find_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ
+find_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_not_found=ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ
+
+# Error panel labels
+error_more_info=ਹੋਰ ਜਾਣਕਾਰੀ
+error_less_info=ਘੱਟ ਜਾਣਕਾਰੀ
+error_close=ਬੰਦ ਕਰੋ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ਬਿਲਡ: {{build}}
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ਸੁਨੇਹਾ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ਸਟੈਕ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ਫਾਈਲ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ਲਾਈਨ: {{line}}
+rendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
+
+# Predefined zoom values
+page_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ
+page_scale_fit=ਸਫ਼ਾ ਫਿੱਟ
+page_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ
+page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=…ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ
+loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
+invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ।
+missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ।
+unexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ]
+password_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ।
+password_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।
+password_ok=ਠੀਕ ਹੈ
+password_cancel=ਰੱਦ ਕਰੋ
+
+printing_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।
+printing_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ।
+web_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।
diff --git a/app/assets/javascripts/publications/locale/pl/viewer.properties b/app/assets/javascripts/publications/locale/pl/viewer.properties
new file mode 100644
index 0000000..e841f13
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/pl/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Poprzednia strona
+previous_label=Poprzednia
+next.title=Następna strona
+next_label=Następna
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strona
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pomniejsz
+zoom_out_label=Pomniejsz
+zoom_in.title=Powiększ
+zoom_in_label=Powiększ
+zoom.title=Skala
+presentation_mode.title=Przełącz na tryb prezentacji
+presentation_mode_label=Tryb prezentacji
+open_file.title=Otwórz plik
+open_file_label=Otwórz
+print.title=Drukuj
+print_label=Drukuj
+download.title=Pobierz
+download_label=Pobierz
+bookmark.title=Bieżąca pozycja (skopiuj lub otwórz jako odnośnik w nowym oknie)
+bookmark_label=Bieżąca pozycja
+
+# Secondary toolbar and context menu
+tools.title=Narzędzia
+tools_label=Narzędzia
+first_page.title=Przejdź do pierwszej strony
+first_page_label=Przejdź do pierwszej strony
+last_page.title=Przejdź do ostatniej strony
+last_page_label=Przejdź do ostatniej strony
+page_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara
+page_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara
+
+cursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu
+cursor_text_select_tool_label=Narzędzie zaznaczania tekstu
+cursor_hand_tool.title=Włącz narzędzie rączka
+cursor_hand_tool_label=Narzędzie rączka
+
+scroll_page.title=Przewijaj strony
+scroll_page_label=Przewijanie stron
+scroll_vertical.title=Przewijaj dokument w pionie
+scroll_vertical_label=Przewijanie pionowe
+scroll_horizontal.title=Przewijaj dokument w poziomie
+scroll_horizontal_label=Przewijanie poziome
+scroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach
+scroll_wrapped_label=Widok dwóch stron
+
+spread_none.title=Nie ustawiaj stron obok siebie
+spread_none_label=Brak kolumn
+spread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych
+spread_odd_label=Nieparzyste po lewej
+spread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych
+spread_even_label=Parzyste po lewej
+
+# Document properties dialog box
+document_properties.title=Właściwości dokumentu…
+document_properties_label=Właściwości dokumentu…
+document_properties_file_name=Nazwa pliku:
+document_properties_file_size=Rozmiar pliku:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Tytuł:
+document_properties_author=Autor:
+document_properties_subject=Temat:
+document_properties_keywords=Słowa kluczowe:
+document_properties_creation_date=Data utworzenia:
+document_properties_modification_date=Data modyfikacji:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Utworzony przez:
+document_properties_producer=PDF wyprodukowany przez:
+document_properties_version=Wersja PDF:
+document_properties_page_count=Liczba stron:
+document_properties_page_size=Wymiary strony:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pionowa
+document_properties_page_size_orientation_landscape=pozioma
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=US Letter
+document_properties_page_size_name_legal=US Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Szybki podgląd w Internecie:
+document_properties_linearized_yes=tak
+document_properties_linearized_no=nie
+document_properties_close=Zamknij
+
+print_progress_message=Przygotowywanie dokumentu do druku…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anuluj
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Przełącz panel boczny
+toggle_sidebar_notification2.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy)
+toggle_sidebar_label=Przełącz panel boczny
+document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje)
+document_outline_label=Konspekt dokumentu
+attachments.title=Załączniki
+attachments_label=Załączniki
+layers.title=Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego)
+layers_label=Warstwy
+thumbs.title=Miniatury
+thumbs_label=Miniatury
+current_outline_item.title=Znajdź bieżący element konspektu
+current_outline_item_label=Bieżący element konspektu
+findbar.title=Znajdź w dokumencie
+findbar_label=Znajdź
+
+additional_layers=Dodatkowe warstwy
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark={{page}}. strona
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. strona
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura {{page}}. strony
+
+# Find panel button title and messages
+find_input.title=Znajdź
+find_input.placeholder=Znajdź w dokumencie…
+find_previous.title=Znajdź poprzednie wystąpienie tekstu
+find_previous_label=Poprzednie
+find_next.title=Znajdź następne wystąpienie tekstu
+find_next_label=Następne
+find_highlight=Wyróżnianie wszystkich
+find_match_case_label=Rozróżnianie wielkości liter
+find_entire_word_label=Całe słowa
+find_reached_top=Początek dokumentu. Wyszukiwanie od końca.
+find_reached_bottom=Koniec dokumentu. Wyszukiwanie od początku.
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Pierwsze z {{total}} trafień
+find_match_count[two]=Drugie z {{total}} trafień
+find_match_count[few]={{current}}. z {{total}} trafień
+find_match_count[many]={{current}}. z {{total}} trafień
+find_match_count[other]={{current}}. z {{total}} trafień
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Brak trafień.
+find_match_count_limit[one]=Więcej niż jedno trafienie.
+find_match_count_limit[two]=Więcej niż dwa trafienia.
+find_match_count_limit[few]=Więcej niż {{limit}} trafienia.
+find_match_count_limit[many]=Więcej niż {{limit}} trafień.
+find_match_count_limit[other]=Więcej niż {{limit}} trafień.
+find_not_found=Nie znaleziono tekstu
+
+# Error panel labels
+error_more_info=Więcej informacji
+error_less_info=Mniej informacji
+error_close=Zamknij
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (kompilacja: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Komunikat: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stos: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Plik: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Wiersz: {{line}}
+rendering_error=Podczas renderowania strony wystąpił błąd.
+
+# Predefined zoom values
+page_scale_width=Szerokość strony
+page_scale_fit=Dopasowanie strony
+page_scale_auto=Skala automatyczna
+page_scale_actual=Rozmiar oryginalny
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Wczytywanie…
+loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd.
+invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF.
+missing_file_error=Brak pliku PDF.
+unexpected_response_error=Nieoczekiwana odpowiedź serwera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Adnotacja: {{type}}]
+password_label=Wprowadź hasło, aby otworzyć ten dokument PDF.
+password_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie.
+password_ok=OK
+password_cancel=Anuluj
+
+printing_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę.
+printing_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować.
+web_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF.
diff --git a/app/assets/javascripts/publications/locale/pt-BR/viewer.properties b/app/assets/javascripts/publications/locale/pt-BR/viewer.properties
new file mode 100644
index 0000000..f91b2aa
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/pt-BR/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Próxima página
+next_label=Próxima
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reduzir
+zoom_out_label=Reduzir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Alternar para o modo de apresentação
+presentation_mode_label=Modo de apresentação
+open_file.title=Abrir arquivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Baixar
+download_label=Baixar
+bookmark.title=Visão atual (copiar ou abrir em nova janela)
+bookmark_label=Visualização atual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir para a primeira página
+first_page_label=Ir para a primeira página
+last_page.title=Ir para a última página
+last_page_label=Ir para a última página
+page_rotate_cw.title=Girar no sentido horário
+page_rotate_cw_label=Girar no sentido horário
+page_rotate_ccw.title=Girar no sentido anti-horário
+page_rotate_ccw_label=Girar no sentido anti-horário
+
+cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto
+cursor_text_select_tool_label=Ferramenta de seleção de texto
+cursor_hand_tool.title=Ativar ferramenta de deslocamento
+cursor_hand_tool_label=Ferramenta de deslocamento
+
+scroll_page.title=Usar rolagem de página
+scroll_page_label=Rolagem de página
+scroll_vertical.title=Usar deslocamento vertical
+scroll_vertical_label=Deslocamento vertical
+scroll_horizontal.title=Usar deslocamento horizontal
+scroll_horizontal_label=Deslocamento horizontal
+scroll_wrapped.title=Usar deslocamento contido
+scroll_wrapped_label=Deslocamento contido
+
+spread_none.title=Não reagrupar páginas
+spread_none_label=Não estender
+spread_odd.title=Agrupar páginas começando em páginas com números ímpares
+spread_odd_label=Estender ímpares
+spread_even.title=Agrupar páginas começando em páginas com números pares
+spread_even_label=Estender pares
+
+# Document properties dialog box
+document_properties.title=Propriedades do documento…
+document_properties_label=Propriedades do documento…
+document_properties_file_name=Nome do arquivo:
+document_properties_file_size=Tamanho do arquivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Assunto:
+document_properties_keywords=Palavras-chave:
+document_properties_creation_date=Data da criação:
+document_properties_modification_date=Data da modificação:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Criação:
+document_properties_producer=Criador do PDF:
+document_properties_version=Versão do PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamanho da página:
+document_properties_page_size_unit_inches=pol.
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrato
+document_properties_page_size_orientation_landscape=paisagem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Jurídico
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Exibição web rápida:
+document_properties_linearized_yes=Sim
+document_properties_linearized_no=Não
+document_properties_close=Fechar
+
+print_progress_message=Preparando documento para impressão…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Exibir/ocultar painel lateral
+toggle_sidebar_notification2.title=Exibir/ocultar painel (documento contém estrutura/anexos/camadas)
+toggle_sidebar_label=Exibir/ocultar painel
+document_outline.title=Mostrar a estrutura do documento (dê um duplo-clique para expandir/recolher todos os itens)
+document_outline_label=Estrutura do documento
+attachments.title=Mostrar anexos
+attachments_label=Anexos
+layers.title=Exibir camadas (duplo-clique para redefinir todas as camadas ao estado predefinido)
+layers_label=Camadas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Encontrar item atual da estrutura
+current_outline_item_label=Item atual da estrutura
+findbar.title=Procurar no documento
+findbar_label=Procurar
+
+additional_layers=Camadas adicionais
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da página {{page}}
+
+# Find panel button title and messages
+find_input.title=Procurar
+find_input.placeholder=Procurar no documento…
+find_previous.title=Procurar a ocorrência anterior da frase
+find_previous_label=Anterior
+find_next.title=Procurar a próxima ocorrência da frase
+find_next_label=Próxima
+find_highlight=Destacar tudo
+find_match_case_label=Diferenciar maiúsculas/minúsculas
+find_entire_word_label=Palavras completas
+find_reached_top=Início do documento alcançado, continuando do fim
+find_reached_bottom=Fim do documento alcançado, continuando do início
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} ocorrência
+find_match_count[two]={{current}} de {{total}} ocorrências
+find_match_count[few]={{current}} de {{total}} ocorrências
+find_match_count[many]={{current}} de {{total}} ocorrências
+find_match_count[other]={{current}} de {{total}} ocorrências
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mais de {{limit}} ocorrências
+find_match_count_limit[one]=Mais de {{limit}} ocorrência
+find_match_count_limit[two]=Mais de {{limit}} ocorrências
+find_match_count_limit[few]=Mais de {{limit}} ocorrências
+find_match_count_limit[many]=Mais de {{limit}} ocorrências
+find_match_count_limit[other]=Mais de {{limit}} ocorrências
+find_not_found=Frase não encontrada
+
+# Error panel labels
+error_more_info=Mais informações
+error_less_info=Menos informações
+error_close=Fechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilação: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensagem: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pilha: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Arquivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha: {{line}}
+rendering_error=Ocorreu um erro ao renderizar a página.
+
+# Predefined zoom values
+page_scale_width=Largura da página
+page_scale_fit=Ajustar à janela
+page_scale_auto=Zoom automático
+page_scale_actual=Tamanho real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Carregando…
+loading_error=Ocorreu um erro ao carregar o PDF.
+invalid_file_error=Arquivo PDF corrompido ou inválido.
+missing_file_error=Arquivo PDF ausente.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotação {{type}}]
+password_label=Forneça a senha para abrir este arquivo PDF.
+password_invalid=Senha inválida. Tente novamente.
+password_ok=OK
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: a impressão não é totalmente suportada neste navegador.
+printing_not_ready=Aviso: o PDF não está totalmente carregado para impressão.
+web_fonts_disabled=As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF.
diff --git a/app/assets/javascripts/publications/locale/pt-PT/viewer.properties b/app/assets/javascripts/publications/locale/pt-PT/viewer.properties
new file mode 100644
index 0000000..fed3147
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/pt-PT/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página seguinte
+next_label=Seguinte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reduzir
+zoom_out_label=Reduzir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Trocar para o modo de apresentação
+presentation_mode_label=Modo de apresentação
+open_file.title=Abrir ficheiro
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Transferir
+download_label=Transferir
+bookmark.title=Vista atual (copiar ou abrir numa nova janela)
+bookmark_label=Visão atual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir para a primeira página
+first_page_label=Ir para a primeira página
+last_page.title=Ir para a última página
+last_page_label=Ir para a última página
+page_rotate_cw.title=Rodar à direita
+page_rotate_cw_label=Rodar à direita
+page_rotate_ccw.title=Rodar à esquerda
+page_rotate_ccw_label=Rodar à esquerda
+
+cursor_text_select_tool.title=Ativar ferramenta de seleção de texto
+cursor_text_select_tool_label=Ferramenta de seleção de texto
+cursor_hand_tool.title=Ativar ferramenta de mão
+cursor_hand_tool_label=Ferramenta de mão
+
+scroll_page.title=Utilizar deslocamento da página
+scroll_page_label=Deslocamento da página
+scroll_vertical.title=Utilizar deslocação vertical
+scroll_vertical_label=Deslocação vertical
+scroll_horizontal.title=Utilizar deslocação horizontal
+scroll_horizontal_label=Deslocação horizontal
+scroll_wrapped.title=Utilizar deslocação encapsulada
+scroll_wrapped_label=Deslocação encapsulada
+
+spread_none.title=Não juntar páginas dispersas
+spread_none_label=Sem spreads
+spread_odd.title=Juntar páginas dispersas a partir de páginas com números ímpares
+spread_odd_label=Spreads ímpares
+spread_even.title=Juntar páginas dispersas a partir de páginas com números pares
+spread_even_label=Spreads pares
+
+# Document properties dialog box
+document_properties.title=Propriedades do documento…
+document_properties_label=Propriedades do documento…
+document_properties_file_name=Nome do ficheiro:
+document_properties_file_size=Tamanho do ficheiro:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Assunto:
+document_properties_keywords=Palavras-chave:
+document_properties_creation_date=Data de criação:
+document_properties_modification_date=Data de modificação:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Criador:
+document_properties_producer=Produtor de PDF:
+document_properties_version=Versão do PDF:
+document_properties_page_count=N.º de páginas:
+document_properties_page_size=Tamanho da página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrato
+document_properties_page_size_orientation_landscape=paisagem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida web:
+document_properties_linearized_yes=Sim
+document_properties_linearized_no=Não
+document_properties_close=Fechar
+
+print_progress_message=A preparar o documento para impressão…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar barra lateral
+toggle_sidebar_notification2.title=Alternar barra lateral (o documento contém contornos/anexos/camadas)
+toggle_sidebar_label=Alternar barra lateral
+document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens)
+document_outline_label=Esquema do documento
+attachments.title=Mostrar anexos
+attachments_label=Anexos
+layers.title=Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido)
+layers_label=Camadas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Encontrar o item atualmente destacado
+current_outline_item_label=Item atualmente destacado
+findbar.title=Localizar em documento
+findbar_label=Localizar
+
+additional_layers=Camadas adicionais
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da página {{page}}
+
+# Find panel button title and messages
+find_input.title=Localizar
+find_input.placeholder=Localizar em documento…
+find_previous.title=Localizar ocorrência anterior da frase
+find_previous_label=Anterior
+find_next.title=Localizar ocorrência seguinte da frase
+find_next_label=Seguinte
+find_highlight=Destacar tudo
+find_match_case_label=Correspondência
+find_match_diacritics_label=Corresponder diacríticos
+find_entire_word_label=Palavras completas
+find_reached_top=Topo do documento atingido, a continuar a partir do fundo
+find_reached_bottom=Fim do documento atingido, a continuar a partir do topo
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} correspondência
+find_match_count[two]={{current}} de {{total}} correspondências
+find_match_count[few]={{current}} de {{total}} correspondências
+find_match_count[many]={{current}} de {{total}} correspondências
+find_match_count[other]={{current}} de {{total}} correspondências
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mais de {{limit}} correspondências
+find_match_count_limit[one]=Mais de {{limit}} correspondência
+find_match_count_limit[two]=Mais de {{limit}} correspondências
+find_match_count_limit[few]=Mais de {{limit}} correspondências
+find_match_count_limit[many]=Mais de {{limit}} correspondências
+find_match_count_limit[other]=Mais de {{limit}} correspondências
+find_not_found=Frase não encontrada
+
+# Error panel labels
+error_more_info=Mais informação
+error_less_info=Menos informação
+error_close=Fechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilação: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensagem: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheiro: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha: {{line}}
+rendering_error=Ocorreu um erro ao processar a página.
+
+# Predefined zoom values
+page_scale_width=Ajustar à largura
+page_scale_fit=Ajustar à página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamanho real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=A carregar…
+loading_error=Ocorreu um erro ao carregar o PDF.
+invalid_file_error=Ficheiro PDF inválido ou danificado.
+missing_file_error=Ficheiro PDF inexistente.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotação {{type}}]
+password_label=Introduza a palavra-passe para abrir este ficheiro PDF.
+password_invalid=Palavra-passe inválida. Por favor, tente novamente.
+password_ok=OK
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: a impressão não é totalmente suportada por este navegador.
+printing_not_ready=Aviso: o PDF ainda não está totalmente carregado.
+web_fonts_disabled=Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos.
diff --git a/app/assets/javascripts/publications/locale/rm/viewer.properties b/app/assets/javascripts/publications/locale/rm/viewer.properties
new file mode 100644
index 0000000..85d4e86
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/rm/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedenta
+previous_label=Enavos
+next.title=Proxima pagina
+next_label=Enavant
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=da {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} da {{pagesCount}})
+
+zoom_out.title=Empitschnir
+zoom_out_label=Empitschnir
+zoom_in.title=Engrondir
+zoom_in_label=Engrondir
+zoom.title=Zoom
+presentation_mode.title=Midar en il modus da preschentaziun
+presentation_mode_label=Modus da preschentaziun
+open_file.title=Avrir datoteca
+open_file_label=Avrir
+print.title=Stampar
+print_label=Stampar
+download.title=Telechargiar
+download_label=Telechargiar
+bookmark.title=Vista actuala (copiar u avrir en ina nova fanestra)
+bookmark_label=Vista actuala
+
+# Secondary toolbar and context menu
+tools.title=Utensils
+tools_label=Utensils
+first_page.title=Siglir a l'emprima pagina
+first_page_label=Siglir a l'emprima pagina
+last_page.title=Siglir a la davosa pagina
+last_page_label=Siglir a la davosa pagina
+page_rotate_cw.title=Rotar en direcziun da l'ura
+page_rotate_cw_label=Rotar en direcziun da l'ura
+page_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura
+page_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura
+
+cursor_text_select_tool.title=Activar l'utensil per selecziunar text
+cursor_text_select_tool_label=Utensil per selecziunar text
+cursor_hand_tool.title=Activar l'utensil da maun
+cursor_hand_tool_label=Utensil da maun
+
+scroll_page.title=Utilisar la defilada per pagina
+scroll_page_label=Defilada per pagina
+scroll_vertical.title=Utilisar il defilar vertical
+scroll_vertical_label=Defilar vertical
+scroll_horizontal.title=Utilisar il defilar orizontal
+scroll_horizontal_label=Defilar orizontal
+scroll_wrapped.title=Utilisar il defilar en colonnas
+scroll_wrapped_label=Defilar en colonnas
+
+spread_none.title=Betg parallelisar las paginas
+spread_none_label=Betg parallel
+spread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras
+spread_odd_label=Parallel spèr
+spread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras
+spread_even_label=Parallel pèr
+
+# Document properties dialog box
+document_properties.title=Caracteristicas dal document…
+document_properties_label=Caracteristicas dal document…
+document_properties_file_name=Num da la datoteca:
+document_properties_file_size=Grondezza da la datoteca:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Autur:
+document_properties_subject=Tema:
+document_properties_keywords=Chavazzins:
+document_properties_creation_date=Data da creaziun:
+document_properties_modification_date=Data da modificaziun:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Creà da:
+document_properties_producer=Creà il PDF cun:
+document_properties_version=Versiun da PDF:
+document_properties_page_count=Dumber da paginas:
+document_properties_page_size=Grondezza da la pagina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=orizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Gea
+document_properties_linearized_no=Na
+document_properties_close=Serrar
+
+print_progress_message=Preparar il document per stampar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Interrumper
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Activar/deactivar la trav laterala
+toggle_sidebar_notification2.title=Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels)
+toggle_sidebar_label=Activar/deactivar la trav laterala
+document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements)
+document_outline_label=Structura dal document
+attachments.title=Mussar agiuntas
+attachments_label=Agiuntas
+layers.title=Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels)
+layers_label=Nivels
+thumbs.title=Mussar las miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Tschertgar l'element da structura actual
+current_outline_item_label=Element da structura actual
+findbar.title=Tschertgar en il document
+findbar_label=Tschertgar
+
+additional_layers=Nivels supplementars
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da la pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Tschertgar
+find_input.placeholder=Tschertgar en il document…
+find_previous.title=Tschertgar la posiziun precedenta da l'expressiun
+find_previous_label=Enavos
+find_next.title=Tschertgar la proxima posiziun da l'expressiun
+find_next_label=Enavant
+find_highlight=Relevar tuts
+find_match_case_label=Resguardar maiusclas/minusclas
+find_entire_word_label=Pleds entirs
+find_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document
+find_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} dad {{total}} correspundenza
+find_match_count[two]={{current}} da {{total}} correspundenzas
+find_match_count[few]={{current}} da {{total}} correspundenzas
+find_match_count[many]={{current}} da {{total}} correspundenzas
+find_match_count[other]={{current}} da {{total}} correspundenzas
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[one]=Dapli che {{limit}} correspundenza
+find_match_count_limit[two]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[few]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[many]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[other]=Dapli che {{limit}} correspundenzas
+find_not_found=Impussibel da chattar l'expressiun
+
+# Error panel labels
+error_more_info=Dapli infurmaziuns
+error_less_info=Damain infurmaziuns
+error_close=Serrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Messadi: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteca: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lingia: {{line}}
+rendering_error=Ina errur è cumparida cun visualisar questa pagina.
+
+# Predefined zoom values
+page_scale_width=Ladezza da la pagina
+page_scale_fit=Entira pagina
+page_scale_auto=Zoom automatic
+page_scale_actual=Grondezza actuala
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Chargiar…
+loading_error=Ina errur è cumparida cun chargiar il PDF.
+invalid_file_error=Datoteca PDF nunvalida u donnegiada.
+missing_file_error=Datoteca PDF manconta.
+unexpected_response_error=Resposta nunspetgada dal server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Annotaziun da {{type}}]
+password_label=Endatescha il pled-clav per avrir questa datoteca da PDF.
+password_invalid=Pled-clav nunvalid. Emprova anc ina giada.
+password_ok=OK
+password_cancel=Interrumper
+
+printing_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur.
+printing_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar.
+web_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF.
diff --git a/app/assets/javascripts/publications/locale/ro/viewer.properties b/app/assets/javascripts/publications/locale/ro/viewer.properties
new file mode 100644
index 0000000..7c4ed28
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ro/viewer.properties
@@ -0,0 +1,240 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedentă
+previous_label=Înapoi
+next.title=Pagina următoare
+next_label=Înainte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=din {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} din {{pagesCount}})
+
+zoom_out.title=Micșorează
+zoom_out_label=Micșorează
+zoom_in.title=Mărește
+zoom_in_label=Mărește
+zoom.title=Zoom
+presentation_mode.title=Comută la modul de prezentare
+presentation_mode_label=Mod de prezentare
+open_file.title=Deschide un fișier
+open_file_label=Deschide
+print.title=Tipărește
+print_label=Tipărește
+download.title=Descarcă
+download_label=Descarcă
+bookmark.title=Vizualizare actuală (copiază sau deschide într-o fereastră nouă)
+bookmark_label=Vizualizare actuală
+
+# Secondary toolbar and context menu
+tools.title=Instrumente
+tools_label=Instrumente
+first_page.title=Mergi la prima pagină
+first_page_label=Mergi la prima pagină
+last_page.title=Mergi la ultima pagină
+last_page_label=Mergi la ultima pagină
+page_rotate_cw.title=Rotește în sensul acelor de ceas
+page_rotate_cw_label=Rotește în sensul acelor de ceas
+page_rotate_ccw.title=Rotește în sens invers al acelor de ceas
+page_rotate_ccw_label=Rotește în sens invers al acelor de ceas
+
+cursor_text_select_tool.title=Activează instrumentul de selecție a textului
+cursor_text_select_tool_label=Instrumentul de selecție a textului
+cursor_hand_tool.title=Activează instrumentul mână
+cursor_hand_tool_label=Unealta mână
+
+scroll_vertical.title=Folosește derularea verticală
+scroll_vertical_label=Derulare verticală
+scroll_horizontal.title=Folosește derularea orizontală
+scroll_horizontal_label=Derulare orizontală
+scroll_wrapped.title=Folosește derularea încadrată
+scroll_wrapped_label=Derulare încadrată
+
+spread_none.title=Nu uni paginile broșate
+spread_none_label=Fără pagini broșate
+spread_odd.title=Unește paginile broșate începând cu cele impare
+spread_odd_label=Broșare pagini impare
+spread_even.title=Unește paginile broșate începând cu cele pare
+spread_even_label=Broșare pagini pare
+
+# Document properties dialog box
+document_properties.title=Proprietățile documentului…
+document_properties_label=Proprietățile documentului…
+document_properties_file_name=Numele fișierului:
+document_properties_file_size=Mărimea fișierului:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byți)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byți)
+document_properties_title=Titlu:
+document_properties_author=Autor:
+document_properties_subject=Subiect:
+document_properties_keywords=Cuvinte cheie:
+document_properties_creation_date=Data creării:
+document_properties_modification_date=Data modificării:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Autor:
+document_properties_producer=Producător PDF:
+document_properties_version=Versiune PDF:
+document_properties_page_count=Număr de pagini:
+document_properties_page_size=Mărimea paginii:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=verticală
+document_properties_page_size_orientation_landscape=orizontală
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Literă
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vizualizare web rapidă:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Nu
+document_properties_close=Închide
+
+print_progress_message=Se pregătește documentul pentru tipărire…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Renunță
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Comută bara laterală
+toggle_sidebar_label=Comută bara laterală
+document_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele)
+document_outline_label=Schița documentului
+attachments.title=Afișează atașamentele
+attachments_label=Atașamente
+thumbs.title=Afișează miniaturi
+thumbs_label=Miniaturi
+findbar.title=Caută în document
+findbar_label=Caută
+
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura paginii {{page}}
+
+# Find panel button title and messages
+find_input.title=Caută
+find_input.placeholder=Caută în document…
+find_previous.title=Mergi la apariția anterioară a textului
+find_previous_label=Înapoi
+find_next.title=Mergi la apariția următoare a textului
+find_next_label=Înainte
+find_highlight=Evidențiază toate aparițiile
+find_match_case_label=Ține cont de majuscule și minuscule
+find_entire_word_label=Cuvinte întregi
+find_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit
+find_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} din {{total}} rezultat
+find_match_count[two]={{current}} din {{total}} rezultate
+find_match_count[few]={{current}} din {{total}} rezultate
+find_match_count[many]={{current}} din {{total}} de rezultate
+find_match_count[other]={{current}} din {{total}} de rezultate
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Peste {{limit}} rezultate
+find_match_count_limit[one]=Peste {{limit}} rezultat
+find_match_count_limit[two]=Peste {{limit}} rezultate
+find_match_count_limit[few]=Peste {{limit}} rezultate
+find_match_count_limit[many]=Peste {{limit}} de rezultate
+find_match_count_limit[other]=Peste {{limit}} de rezultate
+find_not_found=Nu s-a găsit textul
+
+# Error panel labels
+error_more_info=Mai multe informații
+error_less_info=Mai puține informații
+error_close=Închide
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (versiunea compilată: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaj: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stivă: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fișier: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rând: {{line}}
+rendering_error=A intervenit o eroare la randarea paginii.
+
+# Predefined zoom values
+page_scale_width=Lățime pagină
+page_scale_fit=Potrivire la pagină
+page_scale_auto=Zoom automat
+page_scale_actual=Mărime reală
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error=A intervenit o eroare la încărcarea PDF-ului.
+invalid_file_error=Fișier PDF nevalid sau corupt.
+missing_file_error=Fișier PDF lipsă.
+unexpected_response_error=Răspuns neașteptat de la server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Adnotare {{type}}]
+password_label=Introdu parola pentru a deschide acest fișier PDF.
+password_invalid=Parolă nevalidă. Te rugăm să încerci din nou.
+password_ok=OK
+password_cancel=Renunță
+
+printing_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser.
+printing_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire.
+web_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate.
diff --git a/app/assets/javascripts/publications/locale/ru/viewer.properties b/app/assets/javascripts/publications/locale/ru/viewer.properties
new file mode 100644
index 0000000..8f817bd
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ru/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Предыдущая страница
+previous_label=Предыдущая
+next.title=Следующая страница
+next_label=Следующая
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=из {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} из {{pagesCount}})
+
+zoom_out.title=Уменьшить
+zoom_out_label=Уменьшить
+zoom_in.title=Увеличить
+zoom_in_label=Увеличить
+zoom.title=Масштаб
+presentation_mode.title=Перейти в режим презентации
+presentation_mode_label=Режим презентации
+open_file.title=Открыть файл
+open_file_label=Открыть
+print.title=Печать
+print_label=Печать
+download.title=Загрузить
+download_label=Загрузить
+bookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне)
+bookmark_label=Текущий вид
+
+# Secondary toolbar and context menu
+tools.title=Инструменты
+tools_label=Инструменты
+first_page.title=Перейти на первую страницу
+first_page_label=Перейти на первую страницу
+last_page.title=Перейти на последнюю страницу
+last_page_label=Перейти на последнюю страницу
+page_rotate_cw.title=Повернуть по часовой стрелке
+page_rotate_cw_label=Повернуть по часовой стрелке
+page_rotate_ccw.title=Повернуть против часовой стрелки
+page_rotate_ccw_label=Повернуть против часовой стрелки
+
+cursor_text_select_tool.title=Включить Инструмент «Выделение текста»
+cursor_text_select_tool_label=Инструмент «Выделение текста»
+cursor_hand_tool.title=Включить Инструмент «Рука»
+cursor_hand_tool_label=Инструмент «Рука»
+
+scroll_page.title=Использовать прокрутку страниц
+scroll_page_label=Прокрутка страниц
+scroll_vertical.title=Использовать вертикальную прокрутку
+scroll_vertical_label=Вертикальная прокрутка
+scroll_horizontal.title=Использовать горизонтальную прокрутку
+scroll_horizontal_label=Горизонтальная прокрутка
+scroll_wrapped.title=Использовать масштабируемую прокрутку
+scroll_wrapped_label=Масштабируемая прокрутка
+
+spread_none.title=Не использовать режим разворотов страниц
+spread_none_label=Без разворотов страниц
+spread_odd.title=Развороты начинаются с нечётных номеров страниц
+spread_odd_label=Нечётные страницы слева
+spread_even.title=Развороты начинаются с чётных номеров страниц
+spread_even_label=Чётные страницы слева
+
+# Document properties dialog box
+document_properties.title=Свойства документа…
+document_properties_label=Свойства документа…
+document_properties_file_name=Имя файла:
+document_properties_file_size=Размер файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Заголовок:
+document_properties_author=Автор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключевые слова:
+document_properties_creation_date=Дата создания:
+document_properties_modification_date=Дата изменения:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Приложение:
+document_properties_producer=Производитель PDF:
+document_properties_version=Версия PDF:
+document_properties_page_count=Число страниц:
+document_properties_page_size=Размер страницы:
+document_properties_page_size_unit_inches=дюймов
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=книжная
+document_properties_page_size_orientation_landscape=альбомная
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Быстрый просмотр в Web:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Нет
+document_properties_close=Закрыть
+
+print_progress_message=Подготовка документа к печати…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Отмена
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Показать/скрыть боковую панель
+toggle_sidebar_notification2.title=Показать/скрыть боковую панель (документ имеет содержание/вложения/слои)
+toggle_sidebar_label=Показать/скрыть боковую панель
+document_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы)
+document_outline_label=Содержание документа
+attachments.title=Показать вложения
+attachments_label=Вложения
+layers.title=Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию)
+layers_label=Слои
+thumbs.title=Показать миниатюры
+thumbs_label=Миниатюры
+current_outline_item.title=Найти текущий элемент структуры
+current_outline_item_label=Текущий элемент структуры
+findbar.title=Найти в документе
+findbar_label=Найти
+
+additional_layers=Дополнительные слои
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Страница {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Миниатюра страницы {{page}}
+
+# Find panel button title and messages
+find_input.title=Найти
+find_input.placeholder=Найти в документе…
+find_previous.title=Найти предыдущее вхождение фразы в текст
+find_previous_label=Назад
+find_next.title=Найти следующее вхождение фразы в текст
+find_next_label=Далее
+find_highlight=Подсветить все
+find_match_case_label=С учётом регистра
+find_entire_word_label=Слова целиком
+find_reached_top=Достигнут верх документа, продолжено снизу
+find_reached_bottom=Достигнут конец документа, продолжено сверху
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} из {{total}} совпадения
+find_match_count[two]={{current}} из {{total}} совпадений
+find_match_count[few]={{current}} из {{total}} совпадений
+find_match_count[many]={{current}} из {{total}} совпадений
+find_match_count[other]={{current}} из {{total}} совпадений
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Более {{limit}} совпадений
+find_match_count_limit[one]=Более {{limit}} совпадения
+find_match_count_limit[two]=Более {{limit}} совпадений
+find_match_count_limit[few]=Более {{limit}} совпадений
+find_match_count_limit[many]=Более {{limit}} совпадений
+find_match_count_limit[other]=Более {{limit}} совпадений
+find_not_found=Фраза не найдена
+
+# Error panel labels
+error_more_info=Детали
+error_less_info=Скрыть детали
+error_close=Закрыть
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (сборка: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Сообщение: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стeк: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Строка: {{line}}
+rendering_error=При создании страницы произошла ошибка.
+
+# Predefined zoom values
+page_scale_width=По ширине страницы
+page_scale_fit=По размеру страницы
+page_scale_auto=Автоматически
+page_scale_actual=Реальный размер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Загрузка…
+loading_error=При загрузке PDF произошла ошибка.
+invalid_file_error=Некорректный или повреждённый PDF-файл.
+missing_file_error=PDF-файл отсутствует.
+unexpected_response_error=Неожиданный ответ сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Аннотация {{type}}]
+password_label=Введите пароль, чтобы открыть этот PDF-файл.
+password_invalid=Неверный пароль. Пожалуйста, попробуйте снова.
+password_ok=OK
+password_cancel=Отмена
+
+printing_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать.
+printing_not_ready=Предупреждение: PDF не полностью загружен для печати.
+web_fonts_disabled=Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты.
diff --git a/app/assets/javascripts/publications/locale/sat/viewer.properties b/app/assets/javascripts/publications/locale/sat/viewer.properties
new file mode 100644
index 0000000..9cfa1f5
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sat/viewer.properties
@@ -0,0 +1,197 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ᱢᱟᱲᱟᱝ ᱥᱟᱦᱴᱟ
+previous_label=ᱢᱟᱲᱟᱝᱟᱜ
+next.title=ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱥᱟᱦᱴᱟ
+next_label=ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ᱥᱟᱦᱴᱟ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ᱨᱮᱭᱟᱜ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ᱠᱷᱚᱱ {{pagesCount}})
+
+zoom_out.title=ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ
+zoom_out_label=ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ
+zoom_in.title=ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ
+zoom_in_label=ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ
+zoom.title=ᱡᱩᱢ
+presentation_mode.title=ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ
+presentation_mode_label=ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ
+open_file.title=ᱨᱮᱫ ᱡᱷᱤᱡᱽ ᱢᱮ
+open_file_label=ᱡᱷᱤᱡᱽ ᱢᱮ
+print.title=ᱪᱷᱟᱯᱟ
+print_label=ᱪᱷᱟᱯᱟ
+download.title=ᱰᱟᱩᱱᱞᱚᱰ
+download_label=ᱰᱟᱩᱱᱞᱚᱰ
+bookmark.title=ᱱᱤᱛᱚᱜᱟᱜ ᱧᱮᱞ (ᱱᱚᱶᱟ ᱡᱷᱚᱨᱠᱟ ᱨᱮ ᱱᱚᱠᱚᱞ ᱟᱨ ᱵᱟᱝ ᱡᱷᱤᱡᱽ ᱢᱮ )
+bookmark_label=ᱱᱤᱛᱚᱜᱟᱜ ᱧᱮᱞ
+
+# Secondary toolbar and context menu
+tools.title=ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ
+tools_label=ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ
+first_page.title=ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ
+first_page_label=ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ
+last_page.title=ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ
+last_page_label=ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ
+page_rotate_cw.title=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ
+page_rotate_cw_label=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ
+page_rotate_ccw.title=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ
+page_rotate_ccw_label=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ
+
+cursor_text_select_tool.title=ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ
+cursor_text_select_tool_label=ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ
+cursor_hand_tool.title=ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ
+cursor_hand_tool_label=ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ
+
+scroll_page.title=ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ
+scroll_page_label=ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ
+scroll_vertical.title=ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ
+scroll_vertical_label=ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ
+scroll_horizontal.title=ᱜᱤᱛᱤᱡ ᱛᱮ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ
+
+
+# Document properties dialog box
+document_properties_file_name=ᱨᱮᱫᱽ ᱧᱩᱛᱩᱢ :
+document_properties_file_size=ᱨᱮᱫᱽ ᱢᱟᱯ :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ᱵᱟᱭᱤᱴ ᱠᱚ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ᱵᱟᱭᱤᱴ ᱠᱚ)
+document_properties_title=ᱧᱩᱛᱩᱢ :
+document_properties_author=ᱚᱱᱚᱞᱤᱭᱟᱹ :
+document_properties_subject=ᱵᱤᱥᱚᱭ :
+document_properties_keywords=ᱠᱟᱹᱴᱷᱤ ᱥᱟᱵᱟᱫᱽ :
+document_properties_creation_date=ᱛᱮᱭᱟᱨ ᱢᱟᱸᱦᱤᱛ :
+document_properties_modification_date=ᱵᱚᱫᱚᱞ ᱦᱚᱪᱚ ᱢᱟᱹᱦᱤᱛ :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ᱵᱮᱱᱟᱣᱤᱡ :
+document_properties_producer=PDF ᱛᱮᱭᱟᱨ ᱚᱰᱚᱠᱤᱡ :
+document_properties_version=PDF ᱵᱷᱟᱹᱨᱥᱚᱱ :
+document_properties_page_count=ᱥᱟᱦᱴᱟ ᱞᱮᱠᱷᱟ :
+document_properties_page_size=ᱥᱟᱦᱴᱟ ᱢᱟᱯ :
+document_properties_page_size_unit_inches=ᱤᱧᱪ
+document_properties_page_size_unit_millimeters=ᱢᱤᱢᱤ
+document_properties_page_size_orientation_portrait=ᱯᱚᱴᱨᱮᱴ
+document_properties_page_size_orientation_landscape=ᱞᱮᱱᱰᱥᱠᱮᱯ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ᱪᱤᱴᱷᱤ
+document_properties_page_size_name_legal=ᱠᱟᱹᱱᱩᱱᱤ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+document_outline_label=ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨ ᱛᱮᱫ
+attachments.title=ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ
+attachments_label=ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ
+thumbs.title=ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ
+thumbs_label=ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ
+findbar.title=ᱫᱚᱞᱤᱞ ᱨᱮ ᱯᱟᱱᱛᱮ
+findbar_label=ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ
+
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} ᱥᱟᱦᱴᱟ
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ
+
+# Find panel button title and messages
+find_previous.title=ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱯᱟᱹᱦᱤᱞ ᱥᱮᱫᱟᱜ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ
+find_next.title=ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ
+find_highlight=ᱡᱷᱚᱛᱚ ᱩᱫᱩᱜ ᱨᱟᱠᱟᱵ
+find_match_case_label=ᱡᱚᱲ ᱠᱟᱛᱷᱟ
+find_reached_top=ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱪᱤᱴ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱞᱟᱛᱟᱨ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ
+find_reached_bottom=ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱢᱩᱪᱟᱹᱫ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱪᱚᱴ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=ᱛᱚᱯᱚᱞ ᱫᱚᱱᱚᱲ ᱵᱟᱝ ᱧᱟᱢ ᱞᱮᱱᱟ
+
+# Error panel labels
+error_more_info=ᱵᱟᱹᱲᱛᱤ ᱞᱟᱹᱭ ᱥᱚᱫᱚᱨ
+error_less_info=ᱠᱚᱢ ᱞᱟᱹᱭ ᱥᱚᱫᱚᱨ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ᱠᱷᱚᱵᱚᱨ : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ᱵᱟᱝ : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ᱨᱮᱫᱽ : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ᱜᱟᱨ : {{line}}
+rendering_error=ᱥᱟᱦᱴᱟ ᱮᱢ ᱡᱚᱦᱚᱠ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾
+
+# Predefined zoom values
+page_scale_width=ᱥᱟᱦᱴᱟ ᱚᱥᱟᱨ
+page_scale_fit=ᱥᱟᱦᱴᱟ ᱠᱷᱟᱯ
+page_scale_auto=ᱟᱡᱼᱟᱡ ᱛᱮ ᱦᱩᱰᱤᱧ ᱞᱟᱹᱴᱩ ᱛᱮᱭᱟᱨ
+page_scale_actual=ᱴᱷᱤᱠ ᱢᱟᱨᱟᱝ ᱛᱮᱫ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+loading_error=PDF ᱞᱟᱫᱮ ᱡᱚᱦᱚᱜ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾
+invalid_file_error=ᱵᱟᱝ ᱵᱟᱛᱟᱣ ᱟᱨᱵᱟᱝᱠᱷᱟᱱ ᱰᱤᱜᱟᱹᱣ PDF ᱨᱮᱫᱽ ᱾
+missing_file_error=ᱟᱫᱟᱜ PDF ᱨᱮᱫᱽ ᱾
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ᱢᱚᱱᱛᱚ ᱮᱢ]
+password_label=ᱱᱚᱶᱟ PDF ᱨᱮᱫᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱟᱫᱮᱨ ᱢᱮ ᱾
+password_invalid=ᱵᱷᱩᱞ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱾ ᱫᱟᱭᱟᱠᱟᱛᱮ ᱫᱩᱦᱲᱟᱹ ᱪᱮᱥᱴᱟᱭ ᱢᱮ ᱾
+password_ok=ᱴᱷᱤᱠ
+
+printing_not_supported=ᱦᱚᱥᱤᱭᱟᱨ : ᱪᱷᱟᱯᱟ ᱱᱚᱣᱟ ᱯᱟᱱᱛᱮᱭᱟᱜ ᱫᱟᱨᱟᱭ ᱛᱮ ᱯᱩᱨᱟᱹᱣ ᱵᱟᱭ ᱜᱚᱲᱚᱣᱟᱠᱟᱱᱟ ᱾
+printing_not_ready=ᱦᱩᱥᱤᱭᱟᱹᱨ : ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ PDF ᱯᱩᱨᱟᱹ ᱵᱟᱭ ᱞᱟᱫᱮ ᱟᱠᱟᱱᱟ ᱾
+web_fonts_disabled=ᱣᱮᱵᱽ ᱪᱤᱠᱤ ᱵᱟᱝ ᱦᱩᱭ ᱦᱚᱪᱚ ᱠᱟᱱᱟ : ᱵᱷᱤᱛᱤᱨ ᱛᱷᱟᱯᱚᱱ PDF ᱪᱤᱠᱤ ᱵᱮᱵᱷᱟᱨ ᱵᱟᱝ ᱦᱩᱭ ᱠᱮᱭᱟ ᱾
diff --git a/app/assets/javascripts/publications/locale/sc/viewer.properties b/app/assets/javascripts/publications/locale/sc/viewer.properties
new file mode 100644
index 0000000..0070222
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sc/viewer.properties
@@ -0,0 +1,119 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous_label=S'ischeda chi b'est primu
+next_label=Imbeniente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pàgina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Impitica
+zoom_out_label=Impitica
+zoom_in.title=Ismànnia
+zoom_in_label=Ismànnia
+zoom.title=Ismànnia
+open_file.title=Aberi s'archìviu
+open_file_label=Abertu
+print.title=Imprenta
+print_label=Imprenta
+download.title=Iscàrriga
+download_label=Iscàrriga
+
+# Secondary toolbar and context menu
+tools.title=Istrumentos
+tools_label=Istrumentos
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_subject=Ogetu:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=Serra
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=Cantzella
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+attachments_label=Alliongiados
+
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_previous_label=S'ischeda chi b'est primu
+find_next_label=Imbeniente
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+
+# Error panel labels
+error_close=Serra
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_invalid=Sa crae no est curreta. Torra·bi a proare.
+password_ok=Andat bene
+password_cancel=Cantzella
+
diff --git a/app/assets/javascripts/publications/locale/scn/viewer.properties b/app/assets/javascripts/publications/locale/scn/viewer.properties
new file mode 100644
index 0000000..e9a650a
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/scn/viewer.properties
@@ -0,0 +1,101 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Cchiù nicu
+zoom_out_label=Cchiù nicu
+zoom_in.title=Cchiù granni
+zoom_in_label=Cchiù granni
+
+# Secondary toolbar and context menu
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web lesta:
+document_properties_linearized_yes=Se
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=Sfai
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+
+# Error panel labels
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+page_scale_width=Larghizza dâ pàggina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Sfai
+
diff --git a/app/assets/javascripts/publications/locale/sco/viewer.properties b/app/assets/javascripts/publications/locale/sco/viewer.properties
new file mode 100644
index 0000000..656f995
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sco/viewer.properties
@@ -0,0 +1,248 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Page Afore
+previous_label=Previous
+next.title=Page Efter
+next_label=Neist
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=o {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} o {{pagesCount}})
+
+zoom_out.title=Zoom Oot
+zoom_out_label=Zoom Oot
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Flit tae Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Prent
+print_label=Prent
+download.title=Doonload
+download_label=Doonload
+bookmark.title=View the noo (copy or open in new windae)
+bookmark_label=View The Noo
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Gang tae First Page
+first_page_label=Gang tae First Page
+last_page.title=Gang tae Lest Page
+last_page_label=Gang tae Lest Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Coonterclockwise
+page_rotate_ccw_label=Rotate Coonterclockwise
+
+cursor_text_select_tool.title=Enable Text Walin Tool
+cursor_text_select_tool_label=Text Walin Tool
+cursor_hand_tool.title=Enable Haun Tool
+cursor_hand_tool_label=Haun Tool
+
+scroll_vertical.title=Yaise Vertical Scrollin
+scroll_vertical_label=Vertical Scrollin
+scroll_horizontal.title=Yaise Horizontal Scrollin
+scroll_horizontal_label=Horizontal Scrollin
+scroll_wrapped.title=Yaise Wrapped Scrollin
+scroll_wrapped_label=Wrapped Scrollin
+
+spread_none.title=Dinnae jyn page spreids
+spread_none_label=Nae Spreids
+spread_odd.title=Jyn page spreids stertin wi odd-numbered pages
+spread_odd_label=Odd Spreids
+spread_even.title=Jyn page spreids stertin wi even-numbered pages
+spread_even_label=Even Spreids
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File nemme:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subjeck:
+document_properties_keywords=Keywirds:
+document_properties_creation_date=Date o Makkin:
+document_properties_modification_date=Date o Chynges:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Makker:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Coont:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Wab View:
+document_properties_linearized_yes=Aye
+document_properties_linearized_no=Naw
+document_properties_close=Sneck
+
+print_progress_message=Reddin document fur prentin…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Stap
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebaur
+toggle_sidebar_notification2.title=Toggle Sidebaur (document conteens ootline/attachments/layers)
+toggle_sidebar_label=Toggle Sidebaur
+document_outline.title=Kythe Document Ootline (double-click fur tae oot-fauld/in-fauld aw items)
+document_outline_label=Document Ootline
+attachments.title=Kythe Attachments
+attachments_label=Attachments
+layers.title=Kythe Layers (double-click fur tae reset aw layers tae the staunart state)
+layers_label=Layers
+thumbs.title=Kythe Thumbnails
+thumbs_label=Thumbnails
+current_outline_item.title=Find Current Ootline Item
+current_outline_item_label=Current Ootline Item
+findbar.title=Find in Document
+findbar_label=Find
+
+additional_layers=Mair Layers
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail o Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Airt oot the last time this phrase occurred
+find_previous_label=Previous
+find_next.title=Airt oot the neist time this phrase occurs
+find_next_label=Neist
+find_highlight=Highlicht aw
+find_match_case_label=Match case
+find_entire_word_label=Hale Wirds
+find_reached_top=Raxed tap o document, went on fae the dowp end
+find_reached_bottom=Raxed end o document, went on fae the tap
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} o {{total}} match
+find_match_count[two]={{current}} o {{total}} matches
+find_match_count[few]={{current}} o {{total}} matches
+find_match_count[many]={{current}} o {{total}} matches
+find_match_count[other]={{current}} o {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mair nor {{limit}} matches
+find_match_count_limit[one]=Mair nor {{limit}} match
+find_match_count_limit[two]=Mair nor {{limit}} matches
+find_match_count_limit[few]=Mair nor {{limit}} matches
+find_match_count_limit[many]=Mair nor {{limit}} matches
+find_match_count_limit[other]=Mair nor {{limit}} matches
+find_not_found=Phrase no fund
+
+# Error panel labels
+error_more_info=Mair Information
+error_less_info=Less Information
+error_close=Sneck
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=A mishanter tuik place while renderin the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Loadin…
+loading_error=An mishanter tuik place while loadin the PDF.
+invalid_file_error=No suithfest or camshauchlet PDF file.
+missing_file_error=PDF file tint.
+unexpected_response_error=Unexpectit server repone.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Inpit the passwird fur tae open this PDF file.
+password_invalid=Passwird no suithfest. Gonnae gie it anither shot.
+password_ok=OK
+password_cancel=Stap
+
+printing_not_supported=Tak tent: Prentin isnae richt supportit by this stravaiger.
+printing_not_ready=Tak tent: The PDF isnae richt loadit fur prentin.
+web_fonts_disabled=Wab fonts are disabled: cannae yaise embeddit PDF fonts.
diff --git a/app/assets/javascripts/publications/locale/si/viewer.properties b/app/assets/javascripts/publications/locale/si/viewer.properties
new file mode 100644
index 0000000..d4514c1
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/si/viewer.properties
@@ -0,0 +1,201 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=මීට පෙර පිටුව
+previous_label=පෙර
+next.title=මීළඟ පිටුව
+next_label=මීළඟ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=පිටුව
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=කුඩා කරන්න
+zoom_out_label=කුඩා කරන්න
+zoom_in.title=විශාල කරන්න
+zoom_in_label=විශාල කරන්න
+zoom.title=විශාලණය
+presentation_mode.title=ඉදිරිපත්කිරීම් ප්රකාරය වෙත මාරුවන්න
+presentation_mode_label=ඉදිරිපත්කිරීම් ප්රකාරය
+open_file.title=ගොනුව විවෘත කරන්න
+open_file_label=විවෘත කරන්න
+print.title=මුද්රණය
+print_label=මුද්රණය
+download.title=බාගන්න
+download_label=බාගන්න
+bookmark.title=දැනට ඇති දසුන (පිටපත් කරන්න හෝ නව කවුළුවක විවෘත කරන්න)
+bookmark_label=දැනට ඇති දසුන
+
+# Secondary toolbar and context menu
+tools.title=මෙවලම්
+tools_label=මෙවලම්
+first_page.title=මුල් පිටුවට යන්න
+first_page_label=මුල් පිටුවට යන්න
+last_page.title=අවසන් පිටුවට යන්න
+last_page_label=අවසන් පිටුවට යන්න
+page_rotate_cw.title=දක්ශිණාවර්තව භ්රමණය
+page_rotate_cw_label=දක්ශිණාවර්තව භ්රමණය
+page_rotate_ccw.title=වාමාවර්තව භ්රමණය
+page_rotate_ccw_label=වාමාවර්තව භ්රමණය
+
+cursor_hand_tool_label=අත් මෙවලම
+
+
+
+# Document properties dialog box
+document_properties.title=ලේඛන වත්කම්...
+document_properties_label=ලේඛන වත්කම්...
+document_properties_file_name=ගොනු නම:
+document_properties_file_size=ගොනු ප්රමාණය:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} බයිට)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} බයිට)
+document_properties_title=සිරස්තලය:
+document_properties_author=කතෲ
+document_properties_subject=මාතෘකාව:
+document_properties_keywords=යතුරු වදන්:
+document_properties_creation_date=නිර්මිත දිනය:
+document_properties_modification_date=වෙනස්කල දිනය:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=නිර්මාපක:
+document_properties_producer=PDF නිශ්පාදක:
+document_properties_version=PDF නිකුතුව:
+document_properties_page_count=පිටු ගණන:
+document_properties_page_size=පිටුවේ විශාලත්වය:
+document_properties_page_size_unit_inches=අඟල්
+document_properties_page_size_unit_millimeters=මිමි
+document_properties_page_size_orientation_portrait=සිරස්
+document_properties_page_size_orientation_landscape=තිරස්
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=වේගවත් ජාල දසුන:
+document_properties_linearized_yes=ඔව්
+document_properties_linearized_no=නැහැ
+document_properties_close=වසන්න
+
+print_progress_message=ලේඛනය මුද්රණය සඳහා සූදානම් කරමින්…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=අවලංගු කරන්න
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=පැති තීරුවට මාරුවන්න
+toggle_sidebar_label=පැති තීරුවට මාරුවන්න
+document_outline_label=ලේඛනයේ පිට මායිම
+attachments.title=ඇමිණුම් පෙන්වන්න
+attachments_label=ඇමිණුම්
+thumbs.title=සිඟිති රූ පෙන්වන්න
+thumbs_label=සිඟිති රූ
+findbar.title=ලේඛනය තුළ සොයන්න
+findbar_label=සොයන්න
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=පිටුව {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=පිටුවෙ සිඟිත රූව {{page}}
+
+# Find panel button title and messages
+find_input.title=සොයන්න
+find_previous.title=මේ වාක්ය ඛණ්ඩය මීට පෙර යෙදුණු ස්ථානය සොයන්න
+find_previous_label=පෙර:
+find_next.title=මේ වාක්ය ඛණ්ඩය මීළඟට යෙදෙන ස්ථානය සොයන්න
+find_next_label=මීළඟ
+find_highlight=සියල්ල උද්දීපනය
+find_match_case_label=අකුරු ගළපන්න
+find_entire_word_label=සම්පූර්ණ වචන
+find_reached_top=පිටුවේ ඉහළ කෙළවරට ලගාවිය, පහළ සිට ඉදිරියට යමින්
+find_reached_bottom=පිටුවේ පහළ කෙළවරට ලගාවිය, ඉහළ සිට ඉදිරියට යමින්
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit[zero]=ගැලපුම් {{limit}} ට වඩා
+find_not_found=ඔබ සෙව් වචන හමු නොවීය
+
+# Error panel labels
+error_more_info=බොහෝ තොරතුරු
+error_less_info=අවම තොරතුරු
+error_close=වසන්න
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (නිකුතුව: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=පණිවිඩය: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ගොනුව: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=පේළිය: {{line}}
+rendering_error=පිටුව රෙන්ඩර් විමේදි ගැටලුවක් හට ගැනුණි.
+
+# Predefined zoom values
+page_scale_width=පිටුවේ පළල
+page_scale_fit=පිටුවට සුදුසු ලෙස
+page_scale_auto=ස්වයංක්රීය විශාලණය
+page_scale_actual=නියමිත ප්රමාණය
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF පූරණය විමේදි දෝෂයක් හට ගැනුණි.
+invalid_file_error=දූශිත හෝ සාවද්ය PDF ගොනුව.
+missing_file_error=නැතිවූ PDF ගොනුව.
+unexpected_response_error=බලාපොරොත්තු නොවූ සේවාදායක ප්රතිචාරය.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} විස්තරය]
+password_label=මෙම PDF ගොනුව විවෘත කිරීමට මුරපදය ඇතුළත් කරන්න.
+password_invalid=වැරදි මුරපදයක්. කරුණාකර නැවත උත්සහ කරන්න.
+password_ok=හරි
+password_cancel=එපා
+
+printing_not_supported=අවවාදයයි: මෙම ගවේශකය මුද්රණය සඳහා සම්පූර්ණයෙන් සහය නොදක්වයි.
+printing_not_ready=අවවාදයයි: මුද්රණය සඳහා PDF සම්පූර්ණයෙන් පූර්ණය වී නොමැත.
+web_fonts_disabled=ජාල අකුරු අක්රීයයි: තිළැලි PDF අකුරු භාවිත කළ නොහැක.
diff --git a/app/assets/javascripts/publications/locale/sk/viewer.properties b/app/assets/javascripts/publications/locale/sk/viewer.properties
new file mode 100644
index 0000000..d412d4b
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sk/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Predchádzajúca strana
+previous_label=Predchádzajúca
+next.title=Nasledujúca strana
+next_label=Nasledujúca
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strana
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Zmenšiť veľkosť
+zoom_out_label=Zmenšiť veľkosť
+zoom_in.title=Zväčšiť veľkosť
+zoom_in_label=Zväčšiť veľkosť
+zoom.title=Nastavenie veľkosti
+presentation_mode.title=Prepnúť na režim prezentácie
+presentation_mode_label=Režim prezentácie
+open_file.title=Otvoriť súbor
+open_file_label=Otvoriť
+print.title=Tlačiť
+print_label=Tlačiť
+download.title=Stiahnuť
+download_label=Stiahnuť
+bookmark.title=Aktuálne zobrazenie (kopírovať alebo otvoriť v novom okne)
+bookmark_label=Aktuálne zobrazenie
+
+# Secondary toolbar and context menu
+tools.title=Nástroje
+tools_label=Nástroje
+first_page.title=Prejsť na prvú stranu
+first_page_label=Prejsť na prvú stranu
+last_page.title=Prejsť na poslednú stranu
+last_page_label=Prejsť na poslednú stranu
+page_rotate_cw.title=Otočiť v smere hodinových ručičiek
+page_rotate_cw_label=Otočiť v smere hodinových ručičiek
+page_rotate_ccw.title=Otočiť proti smeru hodinových ručičiek
+page_rotate_ccw_label=Otočiť proti smeru hodinových ručičiek
+
+cursor_text_select_tool.title=Povoliť výber textu
+cursor_text_select_tool_label=Výber textu
+cursor_hand_tool.title=Povoliť nástroj ruka
+cursor_hand_tool_label=Nástroj ruka
+
+scroll_page.title=Použiť rolovanie po stránkach
+scroll_page_label=Rolovanie po stránkach
+scroll_vertical.title=Používať zvislé posúvanie
+scroll_vertical_label=Zvislé posúvanie
+scroll_horizontal.title=Používať vodorovné posúvanie
+scroll_horizontal_label=Vodorovné posúvanie
+scroll_wrapped.title=Použiť postupné posúvanie
+scroll_wrapped_label=Postupné posúvanie
+
+spread_none.title=Nezdružovať stránky
+spread_none_label=Žiadne združovanie
+spread_odd.title=Združí stránky a umiestni nepárne stránky vľavo
+spread_odd_label=Združiť stránky (nepárne vľavo)
+spread_even.title=Združí stránky a umiestni párne stránky vľavo
+spread_even_label=Združiť stránky (párne vľavo)
+
+# Document properties dialog box
+document_properties.title=Vlastnosti dokumentu…
+document_properties_label=Vlastnosti dokumentu…
+document_properties_file_name=Názov súboru:
+document_properties_file_size=Veľkosť súboru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bajtov)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
+document_properties_title=Názov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=Kľúčové slová:
+document_properties_creation_date=Dátum vytvorenia:
+document_properties_modification_date=Dátum úpravy:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Vytvoril:
+document_properties_producer=Tvorca PDF:
+document_properties_version=Verzia PDF:
+document_properties_page_count=Počet strán:
+document_properties_page_size=Veľkosť stránky:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=na výšku
+document_properties_page_size_orientation_landscape=na šírku
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=List
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rýchle Web View:
+document_properties_linearized_yes=Áno
+document_properties_linearized_no=Nie
+document_properties_close=Zavrieť
+
+print_progress_message=Príprava dokumentu na tlač…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Zrušiť
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Prepnúť bočný panel
+toggle_sidebar_notification2.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy)
+toggle_sidebar_label=Prepnúť bočný panel
+document_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky)
+document_outline_label=Osnova dokumentu
+attachments.title=Zobraziť prílohy
+attachments_label=Prílohy
+layers.title=Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu)
+layers_label=Vrstvy
+thumbs.title=Zobraziť miniatúry
+thumbs_label=Miniatúry
+current_outline_item.title=Nájsť aktuálnu položku v osnove
+current_outline_item_label=Aktuálna položka v osnove
+findbar.title=Hľadať v dokumente
+findbar_label=Hľadať
+
+additional_layers=Ďalšie vrstvy
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Strana {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatúra strany {{page}}
+
+# Find panel button title and messages
+find_input.title=Hľadať
+find_input.placeholder=Hľadať v dokumente…
+find_previous.title=Vyhľadať predchádzajúci výskyt reťazca
+find_previous_label=Predchádzajúce
+find_next.title=Vyhľadať ďalší výskyt reťazca
+find_next_label=Ďalšie
+find_highlight=Zvýrazniť všetky
+find_match_case_label=Rozlišovať veľkosť písmen
+find_match_diacritics_label=Rozlišovať diakritiku
+find_entire_word_label=Celé slová
+find_reached_top=Bol dosiahnutý začiatok stránky, pokračuje sa od konca
+find_reached_bottom=Bol dosiahnutý koniec stránky, pokračuje sa od začiatku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}}. z {{total}} výsledku
+find_match_count[two]={{current}}. z {{total}} výsledkov
+find_match_count[few]={{current}}. z {{total}} výsledkov
+find_match_count[many]={{current}}. z {{total}} výsledkov
+find_match_count[other]={{current}}. z {{total}} výsledkov
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Viac než {{limit}} výsledkov
+find_match_count_limit[one]=Viac než {{limit}} výsledok
+find_match_count_limit[two]=Viac než {{limit}} výsledky
+find_match_count_limit[few]=Viac než {{limit}} výsledky
+find_match_count_limit[many]=Viac než {{limit}} výsledkov
+find_match_count_limit[other]=Viac než {{limit}} výsledkov
+find_not_found=Výraz nebol nájdený
+
+# Error panel labels
+error_more_info=Ďalšie informácie
+error_less_info=Menej informácií
+error_close=Zavrieť
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (zostavenie: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Správa: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Zásobník: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Súbor: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Riadok: {{line}}
+rendering_error=Pri vykresľovaní stránky sa vyskytla chyba.
+
+# Predefined zoom values
+page_scale_width=Na šírku strany
+page_scale_fit=Na veľkosť strany
+page_scale_auto=Automatická veľkosť
+page_scale_actual=Skutočná veľkosť
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Načítava sa…
+loading_error=Počas načítavania dokumentu PDF sa vyskytla chyba.
+invalid_file_error=Neplatný alebo poškodený súbor PDF.
+missing_file_error=Chýbajúci súbor PDF.
+unexpected_response_error=Neočakávaná odpoveď zo servera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotácia typu {{type}}]
+password_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo.
+password_invalid=Heslo nie je platné. Skúste to znova.
+password_ok=OK
+password_cancel=Zrušiť
+
+printing_not_supported=Upozornenie: tlač nie je v tomto prehliadači plne podporovaná.
+printing_not_ready=Upozornenie: súbor PDF nie je plne načítaný pre tlač.
+web_fonts_disabled=Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF.
diff --git a/app/assets/javascripts/publications/locale/sl/viewer.properties b/app/assets/javascripts/publications/locale/sl/viewer.properties
new file mode 100644
index 0000000..723f75d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sl/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prejšnja stran
+previous_label=Nazaj
+next.title=Naslednja stran
+next_label=Naprej
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stran
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Pomanjšaj
+zoom_out_label=Pomanjšaj
+zoom_in.title=Povečaj
+zoom_in_label=Povečaj
+zoom.title=Povečava
+presentation_mode.title=Preklopi v način predstavitve
+presentation_mode_label=Način predstavitve
+open_file.title=Odpri datoteko
+open_file_label=Odpri
+print.title=Natisni
+print_label=Natisni
+download.title=Prenesi
+download_label=Prenesi
+bookmark.title=Trenutni pogled (kopiraj ali odpri v novem oknu)
+bookmark_label=Trenutni pogled
+
+# Secondary toolbar and context menu
+tools.title=Orodja
+tools_label=Orodja
+first_page.title=Pojdi na prvo stran
+first_page_label=Pojdi na prvo stran
+last_page.title=Pojdi na zadnjo stran
+last_page_label=Pojdi na zadnjo stran
+page_rotate_cw.title=Zavrti v smeri urnega kazalca
+page_rotate_cw_label=Zavrti v smeri urnega kazalca
+page_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca
+page_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca
+
+cursor_text_select_tool.title=Omogoči orodje za izbor besedila
+cursor_text_select_tool_label=Orodje za izbor besedila
+cursor_hand_tool.title=Omogoči roko
+cursor_hand_tool_label=Roka
+
+scroll_page.title=Uporabi drsenje po strani
+scroll_page_label=Drsenje po strani
+scroll_vertical.title=Uporabi navpično drsenje
+scroll_vertical_label=Navpično drsenje
+scroll_horizontal.title=Uporabi vodoravno drsenje
+scroll_horizontal_label=Vodoravno drsenje
+scroll_wrapped.title=Uporabi ovito drsenje
+scroll_wrapped_label=Ovito drsenje
+
+spread_none.title=Ne združuj razponov strani
+spread_none_label=Brez razponov
+spread_odd.title=Združuj razpone strani z začetkom pri lihih straneh
+spread_odd_label=Lihi razponi
+spread_even.title=Združuj razpone strani z začetkom pri sodih straneh
+spread_even_label=Sodi razponi
+
+# Document properties dialog box
+document_properties.title=Lastnosti dokumenta …
+document_properties_label=Lastnosti dokumenta …
+document_properties_file_name=Ime datoteke:
+document_properties_file_size=Velikost datoteke:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtov)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
+document_properties_title=Ime:
+document_properties_author=Avtor:
+document_properties_subject=Tema:
+document_properties_keywords=Ključne besede:
+document_properties_creation_date=Datum nastanka:
+document_properties_modification_date=Datum spremembe:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ustvaril:
+document_properties_producer=Izdelovalec PDF:
+document_properties_version=Različica PDF:
+document_properties_page_count=Število strani:
+document_properties_page_size=Velikost strani:
+document_properties_page_size_unit_inches=palcev
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pokončno
+document_properties_page_size_orientation_landscape=ležeče
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Pismo
+document_properties_page_size_name_legal=Pravno
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hitri spletni ogled:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Ne
+document_properties_close=Zapri
+
+print_progress_message=Priprava dokumenta na tiskanje …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Prekliči
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Preklopi stransko vrstico
+toggle_sidebar_notification2.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti)
+toggle_sidebar_label=Preklopi stransko vrstico
+document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov)
+document_outline_label=Oris dokumenta
+attachments.title=Prikaži priponke
+attachments_label=Priponke
+layers.title=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje)
+layers_label=Plasti
+thumbs.title=Prikaži sličice
+thumbs_label=Sličice
+current_outline_item.title=Najdi trenutni predmet orisa
+current_outline_item_label=Trenutni predmet orisa
+findbar.title=Iskanje po dokumentu
+findbar_label=Najdi
+
+additional_layers=Dodatne plasti
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Stran {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Stran {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Sličica strani {{page}}
+
+# Find panel button title and messages
+find_input.title=Najdi
+find_input.placeholder=Najdi v dokumentu …
+find_previous.title=Najdi prejšnjo ponovitev iskanega
+find_previous_label=Najdi nazaj
+find_next.title=Najdi naslednjo ponovitev iskanega
+find_next_label=Najdi naprej
+find_highlight=Označi vse
+find_match_case_label=Razlikuj velike/male črke
+find_entire_word_label=Cele besede
+find_reached_top=Dosežen začetek dokumenta iz smeri konca
+find_reached_bottom=Doseženo konec dokumenta iz smeri začetka
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Zadetek {{current}} od {{total}}
+find_match_count[two]=Zadetek {{current}} od {{total}}
+find_match_count[few]=Zadetek {{current}} od {{total}}
+find_match_count[many]=Zadetek {{current}} od {{total}}
+find_match_count[other]=Zadetek {{current}} od {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Več kot {{limit}} zadetkov
+find_match_count_limit[one]=Več kot {{limit}} zadetek
+find_match_count_limit[two]=Več kot {{limit}} zadetka
+find_match_count_limit[few]=Več kot {{limit}} zadetki
+find_match_count_limit[many]=Več kot {{limit}} zadetkov
+find_match_count_limit[other]=Več kot {{limit}} zadetkov
+find_not_found=Iskanega ni mogoče najti
+
+# Error panel labels
+error_more_info=Več informacij
+error_less_info=Manj informacij
+error_close=Zapri
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js r{{version}} (graditev: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Sporočilo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Sklad: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteka: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Vrstica: {{line}}
+rendering_error=Med pripravljanjem strani je prišlo do napake!
+
+# Predefined zoom values
+page_scale_width=Širina strani
+page_scale_fit=Prilagodi stran
+page_scale_auto=Samodejno
+page_scale_actual=Dejanska velikost
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading=Nalaganje …
+loading_error=Med nalaganjem datoteke PDF je prišlo do napake.
+invalid_file_error=Neveljavna ali pokvarjena datoteka PDF.
+missing_file_error=Ni datoteke PDF.
+unexpected_response_error=Nepričakovan odgovor strežnika.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Opomba vrste {{type}}]
+password_label=Vnesite geslo za odpiranje te datoteke PDF.
+password_invalid=Neveljavno geslo. Poskusite znova.
+password_ok=V redu
+password_cancel=Prekliči
+
+printing_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja.
+printing_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje.
+web_fonts_disabled=Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti.
diff --git a/app/assets/javascripts/publications/locale/son/viewer.properties b/app/assets/javascripts/publications/locale/son/viewer.properties
new file mode 100644
index 0000000..bd5e5ac
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/son/viewer.properties
@@ -0,0 +1,172 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Moo bisante
+previous_label=Bisante
+next.title=Jinehere moo
+next_label=Jine
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Moo
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ra
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra
+
+zoom_out.title=Nakasandi
+zoom_out_label=Nakasandi
+zoom_in.title=Bebbeerandi
+zoom_in_label=Bebbeerandi
+zoom.title=Bebbeerandi
+presentation_mode.title=Bere cebeyan alhaali
+presentation_mode_label=Cebeyan alhaali
+open_file.title=Tuku feeri
+open_file_label=Feeri
+print.title=Kar
+print_label=Kar
+download.title=Zumandi
+download_label=Zumandi
+bookmark.title=Sohõ gunarro (bere wala feeri zanfun taaga ra)
+bookmark_label=Sohõ gunaroo
+
+# Secondary toolbar and context menu
+tools.title=Goyjinawey
+tools_label=Goyjinawey
+first_page.title=Koy moo jinaa ga
+first_page_label=Koy moo jinaa ga
+last_page.title=Koy moo koraa ga
+last_page_label=Koy moo koraa ga
+page_rotate_cw.title=Kuubi kanbe guma here
+page_rotate_cw_label=Kuubi kanbe guma here
+page_rotate_ccw.title=Kuubi kanbe wowa here
+page_rotate_ccw_label=Kuubi kanbe wowa here
+
+
+# Document properties dialog box
+document_properties.title=Takadda mayrawey…
+document_properties_label=Takadda mayrawey…
+document_properties_file_name=Tuku maa:
+document_properties_file_size=Tuku adadu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}})
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}})
+document_properties_title=Tiiramaa:
+document_properties_author=Hantumkaw:
+document_properties_subject=Dalil:
+document_properties_keywords=Kufalkalimawey:
+document_properties_creation_date=Teeyan han:
+document_properties_modification_date=Barmayan han:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Teekaw:
+document_properties_producer=PDF berandikaw:
+document_properties_version=PDF dumi:
+document_properties_page_count=Moo hinna:
+document_properties_close=Daabu
+
+print_progress_message=Goo ma takaddaa soolu k'a kar se…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Naŋ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Kanjari ceraw zuu
+toggle_sidebar_label=Kanjari ceraw zuu
+document_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi)
+document_outline_label=Takadda filla-boŋ
+attachments.title=Hangarey cebe
+attachments_label=Hangarey
+thumbs.title=Kabeboy biyey cebe
+thumbs_label=Kabeboy biyey
+findbar.title=Ceeci takaddaa ra
+findbar_label=Ceeci
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} moo
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Kabeboy bii {{page}} moo še
+
+# Find panel button title and messages
+find_input.title=Ceeci
+find_input.placeholder=Ceeci takaddaa ra…
+find_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci
+find_previous_label=Bisante
+find_next.title=Kalimaɲaŋoo hiino bangayroo ceeci
+find_next_label=Jine
+find_highlight=Ikul šilbay
+find_match_case_label=Harfu-beeriyan hawgay
+find_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo
+find_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga
+find_not_found=Kalimaɲaa mana duwandi
+
+# Error panel labels
+error_more_info=Alhabar tontoni
+error_less_info=Alhabar tontoni
+error_close=Daabu
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Alhabar: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Dekeri: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tuku: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Žeeri: {{line}}
+rendering_error=Firka bangay kaŋ moɲoo goo ma willandi.
+
+# Predefined zoom values
+page_scale_width=Mooo hayyan
+page_scale_fit=Moo sawayan
+page_scale_auto=Boŋše azzaati barmayyan
+page_scale_actual=Adadu cimi
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Firka bangay kaŋ PDF goo ma zumandi.
+invalid_file_error=PDF tuku laala wala laybante.
+missing_file_error=PDF tuku kumante.
+unexpected_response_error=Manti feršikaw tuuruyan maatante.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt={{type}} maasa-caw]
+password_label=Šennikufal dam ka PDF tukoo woo feeri.
+password_invalid=Šennikufal laalo. Ceeci koyne taare.
+password_ok=Ayyo
+password_cancel=Naŋ
+
+printing_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo.
+printing_not_ready=Yaamar: PDF ši zunbu ka timme karyan še.
+web_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey.
diff --git a/app/assets/javascripts/publications/locale/sq/viewer.properties b/app/assets/javascripts/publications/locale/sq/viewer.properties
new file mode 100644
index 0000000..3ff4e4d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sq/viewer.properties
@@ -0,0 +1,244 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Faqja e Mëparshme
+previous_label=E mëparshmja
+next.title=Faqja Pasuese
+next_label=Pasuesja
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Faqe
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=nga {{pagesCount}} gjithsej
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} nga {{pagesCount}})
+
+zoom_out.title=Zvogëlojeni
+zoom_out_label=Zvogëlojeni
+zoom_in.title=Zmadhojeni
+zoom_in_label=Zmadhojini
+zoom.title=Zoom
+presentation_mode.title=Kalo te Mënyra Paraqitje
+presentation_mode_label=Mënyra Paraqitje
+open_file.title=Hapni Kartelë
+open_file_label=Hape
+print.title=Shtypje
+print_label=Shtype
+download.title=Shkarkim
+download_label=Shkarkoje
+bookmark.title=Pamja e tanishme (kopjojeni ose hapeni në dritare të re)
+bookmark_label=Pamja e Tanishme
+
+# Secondary toolbar and context menu
+tools.title=Mjete
+tools_label=Mjete
+first_page.title=Kaloni te Faqja e Parë
+first_page_label=Kaloni te Faqja e Parë
+last_page.title=Kaloni te Faqja e Fundit
+last_page_label=Kaloni te Faqja e Fundit
+page_rotate_cw.title=Rrotullojeni Në Kahun Orar
+page_rotate_cw_label=Rrotulloje Në Kahun Orar
+page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar
+page_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar
+
+cursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti
+cursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti
+cursor_hand_tool.title=Aktivizo Mjetin Dorë
+cursor_hand_tool_label=Mjeti Dorë
+
+scroll_page.title=Përdor Rrëshqitje Në Faqe
+scroll_page_label=Rrëshqitje Në Faqe
+scroll_vertical.title=Përdor Rrëshqitje Vertikale
+scroll_vertical_label=Rrëshqitje Vertikale
+scroll_horizontal.title=Përdor Rrëshqitje Horizontale
+scroll_horizontal_label=Rrëshqitje Horizontale
+scroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje
+scroll_wrapped_label=Rrëshqitje Me Mbështjellje
+
+
+# Document properties dialog box
+document_properties.title=Veti Dokumenti…
+document_properties_label=Veti Dokumenti…
+document_properties_file_name=Emër kartele:
+document_properties_file_size=Madhësi kartele:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajte)
+document_properties_title=Titull:
+document_properties_author=Autor:
+document_properties_subject=Subjekt:
+document_properties_keywords=Fjalëkyçe:
+document_properties_creation_date=Datë Krijimi:
+document_properties_modification_date=Datë Ndryshimi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Krijues:
+document_properties_producer=Prodhues PDF-je:
+document_properties_version=Version PDF-je:
+document_properties_page_count=Numër Faqesh:
+document_properties_page_size=Madhësi Faqeje:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portret
+document_properties_page_size_orientation_landscape=së gjeri
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Parje e Shpjetë në Web:
+document_properties_linearized_yes=Po
+document_properties_linearized_no=Jo
+document_properties_close=Mbylleni
+
+print_progress_message=Po përgatitet dokumenti për shtypje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anuloje
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Shfaqni/Fshihni Anështyllën
+toggle_sidebar_notification2.title=Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa)
+toggle_sidebar_label=Shfaq/Fshih Anështyllën
+document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët)
+document_outline_label=Përvijim Dokumenti
+attachments.title=Shfaqni Bashkëngjitje
+attachments_label=Bashkëngjitje
+layers.title=Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje)
+layers_label=Shtresa
+thumbs.title=Shfaqni Miniatura
+thumbs_label=Miniatura
+current_outline_item.title=Gjej Objektin e Tanishëm të Përvijuar
+current_outline_item_label=Objekt i Tanishëm i Përvijuar
+findbar.title=Gjeni në Dokument
+findbar_label=Gjej
+
+additional_layers=Shtresa Shtesë
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Faqja {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Faqja {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturë e Faqes {{page}}
+
+# Find panel button title and messages
+find_input.title=Gjej
+find_input.placeholder=Gjeni në dokument…
+find_previous.title=Gjeni hasjen e mëparshme të togfjalëshit
+find_previous_label=E mëparshmja
+find_next.title=Gjeni hasjen pasuese të togfjalëshit
+find_next_label=Pasuesja
+find_highlight=Theksoji të tëra
+find_match_case_label=Siç është shkruar
+find_entire_word_label=Krejt fjalët
+find_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit
+find_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[two]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[few]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[many]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[other]={{current}} nga {{total}} përputhje gjithsej
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Më shumë se {{limit}} përputhje
+find_match_count_limit[one]=Më shumë se {{limit}} përputhje
+find_match_count_limit[two]=Më shumë se {{limit}} përputhje
+find_match_count_limit[few]=Më shumë se {{limit}} përputhje
+find_match_count_limit[many]=Më shumë se {{limit}} përputhje
+find_match_count_limit[other]=Më shumë se {{limit}} përputhje
+find_not_found=Togfjalësh që s’gjendet
+
+# Error panel labels
+error_more_info=Më Tepër të Dhëna
+error_less_info=Më Pak të Dhëna
+error_close=Mbylleni
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesazh: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Kartelë: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rresht: {{line}}
+rendering_error=Ndodhi një gabim gjatë riprodhimit të faqes.
+
+# Predefined zoom values
+page_scale_width=Gjerësi Faqeje
+page_scale_fit=Sa Nxë Faqja
+page_scale_auto=Zoom i Vetvetishëm
+page_scale_actual=Madhësia Faktike
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Po ngarkohet…
+loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së.
+invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar.
+missing_file_error=Kartelë PDF që mungon.
+unexpected_response_error=Përgjigje shërbyesi e papritur.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Nënvizim {{type}}]
+password_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF.
+password_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni.
+password_ok=OK
+password_cancel=Anuloje
+
+printing_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues.
+printing_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni.
+web_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF.
diff --git a/app/assets/javascripts/publications/locale/sr/viewer.properties b/app/assets/javascripts/publications/locale/sr/viewer.properties
new file mode 100644
index 0000000..9f997f9
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sr/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Претходна страница
+previous_label=Претходна
+next.title=Следећа страница
+next_label=Следећа
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=од {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} од {{pagesCount}})
+
+zoom_out.title=Умањи
+zoom_out_label=Умањи
+zoom_in.title=Увеличај
+zoom_in_label=Увеличај
+zoom.title=Увеличавање
+presentation_mode.title=Промени на приказ у режиму презентације
+presentation_mode_label=Режим презентације
+open_file.title=Отвори датотеку
+open_file_label=Отвори
+print.title=Штампај
+print_label=Штампај
+download.title=Преузми
+download_label=Преузми
+bookmark.title=Тренутни приказ (копирај или отвори у новом прозору)
+bookmark_label=Тренутни приказ
+
+# Secondary toolbar and context menu
+tools.title=Алатке
+tools_label=Алатке
+first_page.title=Иди на прву страницу
+first_page_label=Иди на прву страницу
+last_page.title=Иди на последњу страницу
+last_page_label=Иди на последњу страницу
+page_rotate_cw.title=Ротирај у смеру казаљке на сату
+page_rotate_cw_label=Ротирај у смеру казаљке на сату
+page_rotate_ccw.title=Ротирај у смеру супротном од казаљке на сату
+page_rotate_ccw_label=Ротирај у смеру супротном од казаљке на сату
+
+cursor_text_select_tool.title=Омогући алат за селектовање текста
+cursor_text_select_tool_label=Алат за селектовање текста
+cursor_hand_tool.title=Омогући алат за померање
+cursor_hand_tool_label=Алат за померање
+
+scroll_vertical.title=Користи вертикално скроловање
+scroll_vertical_label=Вертикално скроловање
+scroll_horizontal.title=Користи хоризонтално скроловање
+scroll_horizontal_label=Хоризонтално скроловање
+scroll_wrapped.title=Користи скроловање по омоту
+scroll_wrapped_label=Скроловање по омоту
+
+spread_none.title=Немој спајати ширења страница
+spread_none_label=Без распростирања
+spread_odd.title=Споји ширења страница које почињу непарним бројем
+spread_odd_label=Непарна распростирања
+spread_even.title=Споји ширења страница које почињу парним бројем
+spread_even_label=Парна распростирања
+
+# Document properties dialog box
+document_properties.title=Параметри документа…
+document_properties_label=Параметри документа…
+document_properties_file_name=Име датотеке:
+document_properties_file_size=Величина датотеке:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Наслов:
+document_properties_author=Аутор:
+document_properties_subject=Тема:
+document_properties_keywords=Кључне речи:
+document_properties_creation_date=Датум креирања:
+document_properties_modification_date=Датум модификације:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Стваралац:
+document_properties_producer=PDF произвођач:
+document_properties_version=PDF верзија:
+document_properties_page_count=Број страница:
+document_properties_page_size=Величина странице:
+document_properties_page_size_unit_inches=ин
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=усправно
+document_properties_page_size_orientation_landscape=водоравно
+document_properties_page_size_name_a3=А3
+document_properties_page_size_name_a4=А4
+document_properties_page_size_name_letter=Слово
+document_properties_page_size_name_legal=Права
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Брз веб приказ:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Не
+document_properties_close=Затвори
+
+print_progress_message=Припремам документ за штампање…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Откажи
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Прикажи додатну палету
+toggle_sidebar_notification2.title=Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве)
+toggle_sidebar_label=Прикажи додатну палету
+document_outline.title=Прикажи структуру документа (двоструким кликом проширујете/скупљате све ставке)
+document_outline_label=Контура документа
+attachments.title=Прикажи прилоге
+attachments_label=Прилози
+layers.title=Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање)
+layers_label=Слојеви
+thumbs.title=Прикажи сличице
+thumbs_label=Сличице
+current_outline_item.title=Пронађите тренутни елемент структуре
+current_outline_item_label=Тренутна контура
+findbar.title=Пронађи у документу
+findbar_label=Пронађи
+
+additional_layers=Додатни слојеви
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Страница {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Сличица од странице {{page}}
+
+# Find panel button title and messages
+find_input.title=Пронађи
+find_input.placeholder=Пронађи у документу…
+find_previous.title=Пронађи претходно појављивање фразе
+find_previous_label=Претходна
+find_next.title=Пронађи следеће појављивање фразе
+find_next_label=Следећа
+find_highlight=Истакнути све
+find_match_case_label=Подударања
+find_entire_word_label=Целе речи
+find_reached_top=Достигнут врх документа, наставио са дна
+find_reached_bottom=Достигнуто дно документа, наставио са врха
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} од {{total}} одговара
+find_match_count[two]={{current}} од {{total}} одговара
+find_match_count[few]={{current}} од {{total}} одговара
+find_match_count[many]={{current}} од {{total}} одговара
+find_match_count[other]={{current}} од {{total}} одговара
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Више од {{limit}} одговара
+find_match_count_limit[one]=Више од {{limit}} одговара
+find_match_count_limit[two]=Више од {{limit}} одговара
+find_match_count_limit[few]=Више од {{limit}} одговара
+find_match_count_limit[many]=Више од {{limit}} одговара
+find_match_count_limit[other]=Више од {{limit}} одговара
+find_not_found=Фраза није пронађена
+
+# Error panel labels
+error_more_info=Више информација
+error_less_info=Мање информација
+error_close=Затвори
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Порука: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Датотека: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Линија: {{line}}
+rendering_error=Дошло је до грешке приликом рендеровања ове странице.
+
+# Predefined zoom values
+page_scale_width=Ширина странице
+page_scale_fit=Прилагоди страницу
+page_scale_auto=Аутоматско увеличавање
+page_scale_actual=Стварна величина
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Учитавање…
+loading_error=Дошло је до грешке приликом учитавања PDF-а.
+invalid_file_error=PDF датотека је неважећа или је оштећена.
+missing_file_error=Недостаје PDF датотека.
+unexpected_response_error=Неочекиван одговор од сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} коментар]
+password_label=Унесите лозинку да бисте отворили овај PDF докуменат.
+password_invalid=Неисправна лозинка. Покушајте поново.
+password_ok=У реду
+password_cancel=Откажи
+
+printing_not_supported=Упозорење: Штампање није у потпуности подржано у овом прегледачу.
+printing_not_ready=Упозорење: PDF није у потпуности учитан за штампу.
+web_fonts_disabled=Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове.
+# LOCALIZATION NOTE (unsupported_feature_signatures): Should contain the same
+# exact string as in the `chrome.properties` file.
diff --git a/app/assets/javascripts/publications/locale/sv-SE/viewer.properties b/app/assets/javascripts/publications/locale/sv-SE/viewer.properties
new file mode 100644
index 0000000..dc4f480
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/sv-SE/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Föregående sida
+previous_label=Föregående
+next.title=Nästa sida
+next_label=Nästa
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sida
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zooma ut
+zoom_out_label=Zooma ut
+zoom_in.title=Zooma in
+zoom_in_label=Zooma in
+zoom.title=Zoom
+presentation_mode.title=Byt till presentationsläge
+presentation_mode_label=Presentationsläge
+open_file.title=Öppna fil
+open_file_label=Öppna
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Hämta
+download_label=Hämta
+bookmark.title=Aktuell vy (kopiera eller öppna i nytt fönster)
+bookmark_label=Aktuell vy
+
+# Secondary toolbar and context menu
+tools.title=Verktyg
+tools_label=Verktyg
+first_page.title=Gå till första sidan
+first_page_label=Gå till första sidan
+last_page.title=Gå till sista sidan
+last_page_label=Gå till sista sidan
+page_rotate_cw.title=Rotera medurs
+page_rotate_cw_label=Rotera medurs
+page_rotate_ccw.title=Rotera moturs
+page_rotate_ccw_label=Rotera moturs
+
+cursor_text_select_tool.title=Aktivera textmarkeringsverktyg
+cursor_text_select_tool_label=Textmarkeringsverktyg
+cursor_hand_tool.title=Aktivera handverktyg
+cursor_hand_tool_label=Handverktyg
+
+scroll_page.title=Använd sidrullning
+scroll_page_label=Sidrullning
+scroll_vertical.title=Använd vertikal rullning
+scroll_vertical_label=Vertikal rullning
+scroll_horizontal.title=Använd horisontell rullning
+scroll_horizontal_label=Horisontell rullning
+scroll_wrapped.title=Använd överlappande rullning
+scroll_wrapped_label=Överlappande rullning
+
+spread_none.title=Visa enkelsidor
+spread_none_label=Enkelsidor
+spread_odd.title=Visa uppslag med olika sidnummer till vänster
+spread_odd_label=Uppslag med framsida
+spread_even.title=Visa uppslag med lika sidnummer till vänster
+spread_even_label=Uppslag utan framsida
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaper…
+document_properties_label=Dokumentegenskaper…
+document_properties_file_name=Filnamn:
+document_properties_file_size=Filstorlek:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Titel:
+document_properties_author=Författare:
+document_properties_subject=Ämne:
+document_properties_keywords=Nyckelord:
+document_properties_creation_date=Skapades:
+document_properties_modification_date=Ändrades:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Skapare:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-version:
+document_properties_page_count=Sidantal:
+document_properties_page_size=Pappersstorlek:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=porträtt
+document_properties_page_size_orientation_landscape=landskap
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Snabb webbvisning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nej
+document_properties_close=Stäng
+
+print_progress_message=Förbereder sidor för utskrift…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Visa/dölj sidofält
+toggle_sidebar_notification2.title=Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager)
+toggle_sidebar_label=Visa/dölj sidofält
+document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt)
+document_outline_label=Dokumentöversikt
+attachments.title=Visa Bilagor
+attachments_label=Bilagor
+layers.title=Visa lager (dubbelklicka för att återställa alla lager till standardläge)
+layers_label=Lager
+thumbs.title=Visa miniatyrer
+thumbs_label=Miniatyrer
+current_outline_item.title=Hitta aktuellt dispositionsobjekt
+current_outline_item_label=Aktuellt dispositionsobjekt
+findbar.title=Sök i dokument
+findbar_label=Sök
+
+additional_layers=Ytterligare lager
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Sida {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sida {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyr av sida {{page}}
+
+# Find panel button title and messages
+find_input.title=Sök
+find_input.placeholder=Sök i dokument…
+find_previous.title=Hitta föregående förekomst av frasen
+find_previous_label=Föregående
+find_next.title=Hitta nästa förekomst av frasen
+find_next_label=Nästa
+find_highlight=Markera alla
+find_match_case_label=Matcha versal/gemen
+find_match_diacritics_label=Matcha diakritiska tecken
+find_entire_word_label=Hela ord
+find_reached_top=Nådde början av dokumentet, började från slutet
+find_reached_bottom=Nådde slutet på dokumentet, började från början
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} träff
+find_match_count[two]={{current}} av {{total}} träffar
+find_match_count[few]={{current}} av {{total}} träffar
+find_match_count[many]={{current}} av {{total}} träffar
+find_match_count[other]={{current}} av {{total}} träffar
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mer än {{limit}} träffar
+find_match_count_limit[one]=Mer än {{limit}} träff
+find_match_count_limit[two]=Mer än {{limit}} träffar
+find_match_count_limit[few]=Mer än {{limit}} träffar
+find_match_count_limit[many]=Mer än {{limit}} träffar
+find_match_count_limit[other]=Mer än {{limit}} träffar
+find_not_found=Frasen hittades inte
+
+# Error panel labels
+error_more_info=Mer information
+error_less_info=Mindre information
+error_close=Stäng
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Meddelande: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rad: {{line}}
+rendering_error=Ett fel uppstod vid visning av sidan.
+
+# Predefined zoom values
+page_scale_width=Sidbredd
+page_scale_fit=Anpassa sida
+page_scale_auto=Automatisk zoom
+page_scale_actual=Verklig storlek
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Laddar…
+loading_error=Ett fel uppstod vid laddning av PDF-filen.
+invalid_file_error=Ogiltig eller korrupt PDF-fil.
+missing_file_error=Saknad PDF-fil.
+unexpected_response_error=Oväntat svar från servern.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotering]
+password_label=Skriv in lösenordet för att öppna PDF-filen.
+password_invalid=Ogiltigt lösenord. Försök igen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren.
+printing_not_ready=Varning: PDF:en är inte klar för utskrift.
+web_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt.
diff --git a/app/assets/javascripts/publications/locale/szl/viewer.properties b/app/assets/javascripts/publications/locale/szl/viewer.properties
new file mode 100644
index 0000000..1af405d
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/szl/viewer.properties
@@ -0,0 +1,244 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Piyrwyjszo strōna
+previous_label=Piyrwyjszo
+next.title=Nastympno strōna
+next_label=Dalij
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strōna
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ze {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ze {{pagesCount}})
+
+zoom_out.title=Zmyńsz
+zoom_out_label=Zmyńsz
+zoom_in.title=Zwiynksz
+zoom_in_label=Zwiynksz
+zoom.title=Srogość
+presentation_mode.title=Przełōncz na tryb prezyntacyje
+presentation_mode_label=Tryb prezyntacyje
+open_file.title=Ôdewrzij zbiōr
+open_file_label=Ôdewrzij
+print.title=Durkuj
+print_label=Durkuj
+download.title=Pobier
+download_label=Pobier
+bookmark.title=Aktualny widok (kopiuj abo ôdewrzij w nowym ôknie)
+bookmark_label=Aktualny widok
+
+# Secondary toolbar and context menu
+tools.title=Noczynia
+tools_label=Noczynia
+first_page.title=Idź ku piyrszyj strōnie
+first_page_label=Idź ku piyrszyj strōnie
+last_page.title=Idź ku ôstatnij strōnie
+last_page_label=Idź ku ôstatnij strōnie
+page_rotate_cw.title=Zwyrtnij w prawo
+page_rotate_cw_label=Zwyrtnij w prawo
+page_rotate_ccw.title=Zwyrtnij w lewo
+page_rotate_ccw_label=Zwyrtnij w lewo
+
+cursor_text_select_tool.title=Załōncz noczynie ôbiyranio tekstu
+cursor_text_select_tool_label=Noczynie ôbiyranio tekstu
+cursor_hand_tool.title=Załōncz noczynie rōnczka
+cursor_hand_tool_label=Noczynie rōnczka
+
+scroll_vertical.title=Używej piōnowego przewijanio
+scroll_vertical_label=Piōnowe przewijanie
+scroll_horizontal.title=Używej poziōmego przewijanio
+scroll_horizontal_label=Poziōme przewijanie
+scroll_wrapped.title=Używej szichtowego przewijanio
+scroll_wrapped_label=Szichtowe przewijanie
+
+spread_none.title=Niy dowej strōn w widoku po dwie
+spread_none_label=Po jednyj strōnie
+spread_odd.title=Dej strōny po dwie: niyparzysto i parzysto
+spread_odd_label=Niyparzysto i parzysto
+spread_even.title=Dej strōny po dwie: parzysto i niyparzysto
+spread_even_label=Parzysto i niyparzysto
+
+# Document properties dialog box
+document_properties.title=Włosności dokumyntu…
+document_properties_label=Włosności dokumyntu…
+document_properties_file_name=Miano zbioru:
+document_properties_file_size=Srogość zbioru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Tytuł:
+document_properties_author=Autōr:
+document_properties_subject=Tymat:
+document_properties_keywords=Kluczowe słowa:
+document_properties_creation_date=Data zrychtowanio:
+document_properties_modification_date=Data zmiany:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Zrychtowane ôd:
+document_properties_producer=PDF ôd:
+document_properties_version=Wersyjo PDF:
+document_properties_page_count=Wielość strōn:
+document_properties_page_size=Srogość strōny:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=piōnowo
+document_properties_page_size_orientation_landscape=poziōmo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gibki necowy podglōnd:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Niy
+document_properties_close=Zawrzij
+
+print_progress_message=Rychtowanie dokumyntu do durku…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Pociep
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Przełōncz posek na rancie
+toggle_sidebar_notification2.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy)
+toggle_sidebar_label=Przełōncz posek na rancie
+document_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta)
+document_outline_label=Struktura dokumyntu
+attachments.title=Pokoż przidowki
+attachments_label=Przidowki
+layers.title=Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu)
+layers_label=Warstwy
+thumbs.title=Pokoż miniatury
+thumbs_label=Miniatury
+findbar.title=Znojdź w dokumyncie
+findbar_label=Znojdź
+
+additional_layers=Nadbytnie warstwy
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strōna {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura strōny {{page}}
+
+# Find panel button title and messages
+find_input.title=Znojdź
+find_input.placeholder=Znojdź w dokumyncie…
+find_previous.title=Znojdź piyrwyjsze pokozanie sie tyj frazy
+find_previous_label=Piyrwyjszo
+find_next.title=Znojdź nastympne pokozanie sie tyj frazy
+find_next_label=Dalij
+find_highlight=Zaznacz wszysko
+find_match_case_label=Poznowej srogość liter
+find_entire_word_label=Cołke słowa
+find_reached_top=Doszło do samego wiyrchu strōny, dalij ôd spodku
+find_reached_bottom=Doszło do samego spodku strōny, dalij ôd wiyrchu
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} ze {{total}}, co pasujōm
+find_match_count[two]={{current}} ze {{total}}, co pasujōm
+find_match_count[few]={{current}} ze {{total}}, co pasujōm
+find_match_count[many]={{current}} ze {{total}}, co pasujōm
+find_match_count[other]={{current}} ze {{total}}, co pasujōm
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(total) ]}
+find_match_count_limit[zero]=Wiyncyj jak {{limit}}, co pasujōm
+find_match_count_limit[one]=Wiyncyj jak {{limit}}, co pasuje
+find_match_count_limit[two]=Wiyncyj jak {{limit}}, co pasujōm
+find_match_count_limit[few]=Wiyncyj jak {{limit}}, co pasujōm
+find_match_count_limit[many]=Wiyncyj jak {{limit}}, co pasujōm
+find_match_count_limit[other]=Wiyncyj jak {{limit}}, co pasujōm
+find_not_found=Fraza niy znaleziōno
+
+# Error panel labels
+error_more_info=Wiyncyj informacyji
+error_less_info=Mynij informacyji
+error_close=Zawrzij
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Wiadōmość: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Sztapel: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Zbiōr: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linijo: {{line}}
+rendering_error=Przi renderowaniu strōny pokozoł sie feler.
+
+# Predefined zoom values
+page_scale_width=Szyrzka strōny
+page_scale_fit=Napasowanie strōny
+page_scale_auto=Autōmatyczno srogość
+page_scale_actual=Aktualno srogość
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error=Przi ladowaniu PDFa pokozoł sie feler.
+invalid_file_error=Zły abo felerny zbiōr PDF.
+missing_file_error=Chybio zbioru PDF.
+unexpected_response_error=Niyôczekowano ôdpowiydź serwera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotacyjo typu {{type}}]
+password_label=Wkludź hasło, coby ôdewrzić tyn zbiōr PDF.
+password_invalid=Hasło je złe. Sprōbuj jeszcze roz.
+password_ok=OK
+password_cancel=Pociep
+
+printing_not_supported=Pozōr: Ta przeglōndarka niy cołkiym ôbsuguje durk.
+printing_not_ready=Pozōr: Tyn PDF niy ma za tela zaladowany do durku.
+web_fonts_disabled=Necowe fōnty sōm zastawiōne: niy idzie użyć wkludzōnych fōntōw PDF.
diff --git a/app/assets/javascripts/publications/locale/ta/viewer.properties b/app/assets/javascripts/publications/locale/ta/viewer.properties
new file mode 100644
index 0000000..d07a337
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ta/viewer.properties
@@ -0,0 +1,193 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=முந்தைய பக்கம்
+previous_label=முந்தையது
+next.title=அடுத்த பக்கம்
+next_label=அடுத்து
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=பக்கம்
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} இல்
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}) இல் ({{pageNumber}}
+
+zoom_out.title=சிறிதாக்கு
+zoom_out_label=சிறிதாக்கு
+zoom_in.title=பெரிதாக்கு
+zoom_in_label=பெரிதாக்கு
+zoom.title=பெரிதாக்கு
+presentation_mode.title=விளக்ககாட்சி பயன்முறைக்கு மாறு
+presentation_mode_label=விளக்ககாட்சி பயன்முறை
+open_file.title=கோப்பினை திற
+open_file_label=திற
+print.title=அச்சிடு
+print_label=அச்சிடு
+download.title=பதிவிறக்கு
+download_label=பதிவிறக்கு
+bookmark.title=தற்போதைய காட்சி (புதிய சாளரத்திற்கு நகலெடு அல்லது புதிய சாளரத்தில் திற)
+bookmark_label=தற்போதைய காட்சி
+
+# Secondary toolbar and context menu
+tools.title=கருவிகள்
+tools_label=கருவிகள்
+first_page.title=முதல் பக்கத்திற்கு செல்லவும்
+first_page_label=முதல் பக்கத்திற்கு செல்லவும்
+last_page.title=கடைசி பக்கத்திற்கு செல்லவும்
+last_page_label=கடைசி பக்கத்திற்கு செல்லவும்
+page_rotate_cw.title=வலஞ்சுழியாக சுழற்று
+page_rotate_cw_label=வலஞ்சுழியாக சுழற்று
+page_rotate_ccw.title=இடஞ்சுழியாக சுழற்று
+page_rotate_ccw_label=இடஞ்சுழியாக சுழற்று
+
+cursor_text_select_tool.title=உரைத் தெரிவு கருவியைச் செயல்படுத்து
+cursor_text_select_tool_label=உரைத் தெரிவு கருவி
+cursor_hand_tool.title=கைக் கருவிக்ச் செயற்படுத்து
+cursor_hand_tool_label=கைக்குருவி
+
+# Document properties dialog box
+document_properties.title=ஆவண பண்புகள்...
+document_properties_label=ஆவண பண்புகள்...
+document_properties_file_name=கோப்பு பெயர்:
+document_properties_file_size=கோப்பின் அளவு:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} கிபை ({{size_b}} பைட்டுகள்)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} மெபை ({{size_b}} பைட்டுகள்)
+document_properties_title=தலைப்பு:
+document_properties_author=எழுதியவர்
+document_properties_subject=பொருள்:
+document_properties_keywords=முக்கிய வார்த்தைகள்:
+document_properties_creation_date=படைத்த தேதி :
+document_properties_modification_date=திருத்திய தேதி:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=உருவாக்குபவர்:
+document_properties_producer=பிடிஎஃப் தயாரிப்பாளர்:
+document_properties_version=PDF பதிப்பு:
+document_properties_page_count=பக்க எண்ணிக்கை:
+document_properties_page_size=பக்க அளவு:
+document_properties_page_size_unit_inches=இதில்
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=நிலைபதிப்பு
+document_properties_page_size_orientation_landscape=நிலைபரப்பு
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=கடிதம்
+document_properties_page_size_name_legal=சட்டபூர்வ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_close=மூடுக
+
+print_progress_message=அச்சிடுவதற்கான ஆவணம் தயாராகிறது...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ரத்து
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=பக்கப் பட்டியை நிலைமாற்று
+toggle_sidebar_label=பக்கப் பட்டியை நிலைமாற்று
+document_outline.title=ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்)
+document_outline_label=ஆவண வெளிவரை
+attachments.title=இணைப்புகளை காண்பி
+attachments_label=இணைப்புகள்
+thumbs.title=சிறுபடங்களைக் காண்பி
+thumbs_label=சிறுபடங்கள்
+findbar.title=ஆவணத்தில் கண்டறி
+findbar_label=தேடு
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=பக்கம் {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=பக்கத்தின் சிறுபடம் {{page}}
+
+# Find panel button title and messages
+find_input.title=கண்டுபிடி
+find_input.placeholder=ஆவணத்தில் கண்டறி…
+find_previous.title=இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு
+find_previous_label=முந்தையது
+find_next.title=இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு
+find_next_label=அடுத்து
+find_highlight=அனைத்தையும் தனிப்படுத்து
+find_match_case_label=பேரெழுத்தாக்கத்தை உணர்
+find_reached_top=ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது
+find_reached_bottom=ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது
+find_not_found=சொற்றொடர் காணவில்லை
+
+# Error panel labels
+error_more_info=கூடுதல் தகவல்
+error_less_info=குறைந்த தகவல்
+error_close=மூடுக
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=செய்தி: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ஸ்டேக்: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=கோப்பு: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=வரி: {{line}}
+rendering_error=இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது.
+
+# Predefined zoom values
+page_scale_width=பக்க அகலம்
+page_scale_fit=பக்கப் பொருத்தம்
+page_scale_auto=தானியக்க பெரிதாக்கல்
+page_scale_actual=உண்மையான அளவு
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது.
+invalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு.
+missing_file_error=PDF கோப்பு காணவில்லை.
+unexpected_response_error=சேவகன் பதில் எதிர்பாரதது.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} விளக்கம்]
+password_label=இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும்.
+password_invalid=செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க.
+password_ok=சரி
+password_cancel=ரத்து
+
+printing_not_supported=எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை.
+printing_not_ready=எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை.
+web_fonts_disabled=வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை.
diff --git a/app/assets/javascripts/publications/locale/te/viewer.properties b/app/assets/javascripts/publications/locale/te/viewer.properties
new file mode 100644
index 0000000..6cd691a
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/te/viewer.properties
@@ -0,0 +1,217 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=మునుపటి పేజీ
+previous_label=క్రితం
+next.title=తరువాత పేజీ
+next_label=తరువాత
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=పేజీ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=మొత్తం {{pagesCount}} లో
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(మొత్తం {{pagesCount}} లో {{pageNumber}}వది)
+
+zoom_out.title=జూమ్ తగ్గించు
+zoom_out_label=జూమ్ తగ్గించు
+zoom_in.title=జూమ్ చేయి
+zoom_in_label=జూమ్ చేయి
+zoom.title=జూమ్
+presentation_mode.title=ప్రదర్శనా రీతికి మారు
+presentation_mode_label=ప్రదర్శనా రీతి
+open_file.title=ఫైల్ తెరువు
+open_file_label=తెరువు
+print.title=ముద్రించు
+print_label=ముద్రించు
+download.title=దింపుకోళ్ళు
+download_label=దింపుకోళ్ళు
+bookmark.title=ప్రస్తుత దర్శనం (కాపీ చేయి లేదా కొత్త విండోలో తెరువు)
+bookmark_label=ప్రస్తుత దర్శనం
+
+# Secondary toolbar and context menu
+tools.title=పనిముట్లు
+tools_label=పనిముట్లు
+first_page.title=మొదటి పేజీకి వెళ్ళు
+first_page_label=మొదటి పేజీకి వెళ్ళు
+last_page.title=చివరి పేజీకి వెళ్ళు
+last_page_label=చివరి పేజీకి వెళ్ళు
+page_rotate_cw.title=సవ్యదిశలో తిప్పు
+page_rotate_cw_label=సవ్యదిశలో తిప్పు
+page_rotate_ccw.title=అపసవ్యదిశలో తిప్పు
+page_rotate_ccw_label=అపసవ్యదిశలో తిప్పు
+
+cursor_text_select_tool.title=టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి
+cursor_text_select_tool_label=టెక్స్ట్ ఎంపిక సాధనం
+cursor_hand_tool.title=చేతి సాధనం చేతనించు
+cursor_hand_tool_label=చేతి సాధనం
+
+scroll_vertical_label=నిలువు స్క్రోలింగు
+
+
+# Document properties dialog box
+document_properties.title=పత్రము లక్షణాలు...
+document_properties_label=పత్రము లక్షణాలు...
+document_properties_file_name=దస్త్రం పేరు:
+document_properties_file_size=దస్త్రం పరిమాణం:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=శీర్షిక:
+document_properties_author=మూలకర్త:
+document_properties_subject=విషయం:
+document_properties_keywords=కీ పదాలు:
+document_properties_creation_date=సృష్టించిన తేదీ:
+document_properties_modification_date=సవరించిన తేదీ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=సృష్టికర్త:
+document_properties_producer=PDF ఉత్పాదకి:
+document_properties_version=PDF వర్షన్:
+document_properties_page_count=పేజీల సంఖ్య:
+document_properties_page_size=కాగితం పరిమాణం:
+document_properties_page_size_unit_inches=లో
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=నిలువుచిత్రం
+document_properties_page_size_orientation_landscape=అడ్డచిత్రం
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=లేఖ
+document_properties_page_size_name_legal=చట్టపరమైన
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=అవును
+document_properties_linearized_no=కాదు
+document_properties_close=మూసివేయి
+
+print_progress_message=ముద్రించడానికి పత్రము సిద్ధమవుతున్నది…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=రద్దుచేయి
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=పక్కపట్టీ మార్చు
+toggle_sidebar_label=పక్కపట్టీ మార్చు
+document_outline.title=పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు)
+document_outline_label=పత్రము అవుట్లైన్
+attachments.title=అనుబంధాలు చూపు
+attachments_label=అనుబంధాలు
+layers_label=పొరలు
+thumbs.title=థంబ్నైల్స్ చూపు
+thumbs_label=థంబ్నైల్స్
+findbar.title=పత్రములో కనుగొనుము
+findbar_label=కనుగొను
+
+additional_layers=అదనపు పొరలు
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=పేజీ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} పేజీ నఖచిత్రం
+
+# Find panel button title and messages
+find_input.title=కనుగొను
+find_input.placeholder=పత్రములో కనుగొను…
+find_previous.title=పదం యొక్క ముందు సంభవాన్ని కనుగొను
+find_previous_label=మునుపటి
+find_next.title=పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను
+find_next_label=తరువాత
+find_highlight=అన్నిటిని ఉద్దీపనం చేయుము
+find_match_case_label=అక్షరముల తేడాతో పోల్చు
+find_entire_word_label=పూర్తి పదాలు
+find_reached_top=పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి
+find_reached_bottom=పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_not_found=పదబంధం కనబడలేదు
+
+# Error panel labels
+error_more_info=మరింత సమాచారం
+error_less_info=తక్కువ సమాచారం
+error_close=మూసివేయి
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=సందేశం: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=స్టాక్: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ఫైలు: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=వరుస: {{line}}
+rendering_error=పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది.
+
+# Predefined zoom values
+page_scale_width=పేజీ వెడల్పు
+page_scale_fit=పేజీ అమర్పు
+page_scale_auto=స్వయంచాలక జూమ్
+page_scale_actual=యథార్ధ పరిమాణం
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది.
+invalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు.
+missing_file_error=దొరకని PDF ఫైలు.
+unexpected_response_error=అనుకోని సర్వర్ స్పందన.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} టీకా]
+password_label=ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము.
+password_invalid=సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి.
+password_ok=సరే
+password_cancel=రద్దుచేయి
+
+printing_not_supported=హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు.
+printing_not_ready=హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు.
+web_fonts_disabled=వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది.
diff --git a/app/assets/javascripts/publications/locale/tg/viewer.properties b/app/assets/javascripts/publications/locale/tg/viewer.properties
new file mode 100644
index 0000000..24ab96e
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/tg/viewer.properties
@@ -0,0 +1,139 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Саҳифаи қаблӣ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Хурд кардан
+zoom_out_label=Хурд кардан
+zoom_in.title=Калон кардан
+zoom_in_label=Калон кардан
+zoom.title=Танзими андоза
+open_file.title=Кушодани файл
+open_file_label=Кушодан
+print.title=Чоп кардан
+print_label=Чоп кардан
+download.title=Боргирӣ кардан
+download_label=Боргирӣ кардан
+bookmark.title=Намуди ҷорӣ (нусха бардоштан ё кушодан дар равзанаи нав)
+bookmark_label=Намуди ҷорӣ
+
+# Secondary toolbar and context menu
+tools.title=Абзорҳо
+
+
+
+
+# Document properties dialog box
+document_properties_file_name=Номи файл:
+document_properties_file_size=Андозаи файл:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Мактуб
+document_properties_page_size_name_legal=Ҳуқуқӣ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Ҳа
+document_properties_close=Пӯшидан
+
+print_progress_message=Омодасозии ҳуҷҷат барои чоп…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Бекор кардан
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Фаъол кардани навори ҷонибӣ
+
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit[zero]=Зиёда аз {{limit}} мувофиқат
+find_match_count_limit[one]=Зиёда аз {{limit}} мувофиқат
+find_match_count_limit[two]=Зиёда аз {{limit}} мувофиқат
+find_match_count_limit[few]=Зиёда аз {{limit}} мувофиқат
+find_match_count_limit[many]=Зиёда аз {{limit}} мувофиқат
+find_match_count_limit[other]=Зиёда аз {{limit}} мувофиқат
+
+# Error panel labels
+error_more_info=Маълумоти бештар
+error_close=Пӯшидан
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+page_scale_width=Аз рӯи паҳнои саҳифа
+page_scale_auto=Андозаи худкор
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+invalid_file_error=Файли PDF нодуруст ё вайроншуда мебошад.
+missing_file_error=Файли PDF ғоиб аст.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_label=Барои кушодани ин файли PDF ниҳонвожаро ворид кунед.
+password_cancel=Бекор кардан
+
diff --git a/app/assets/javascripts/publications/locale/th/viewer.properties b/app/assets/javascripts/publications/locale/th/viewer.properties
new file mode 100644
index 0000000..c48a711
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/th/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=หน้าก่อนหน้า
+previous_label=ก่อนหน้า
+next.title=หน้าถัดไป
+next_label=ถัดไป
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=หน้า
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=จาก {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} จาก {{pagesCount}})
+
+zoom_out.title=ซูมออก
+zoom_out_label=ซูมออก
+zoom_in.title=ซูมเข้า
+zoom_in_label=ซูมเข้า
+zoom.title=ซูม
+presentation_mode.title=สลับเป็นโหมดการนำเสนอ
+presentation_mode_label=โหมดการนำเสนอ
+open_file.title=เปิดไฟล์
+open_file_label=เปิด
+print.title=พิมพ์
+print_label=พิมพ์
+download.title=ดาวน์โหลด
+download_label=ดาวน์โหลด
+bookmark.title=มุมมองปัจจุบัน (คัดลอกหรือเปิดในหน้าต่างใหม่)
+bookmark_label=มุมมองปัจจุบัน
+
+# Secondary toolbar and context menu
+tools.title=เครื่องมือ
+tools_label=เครื่องมือ
+first_page.title=ไปยังหน้าแรก
+first_page_label=ไปยังหน้าแรก
+last_page.title=ไปยังหน้าสุดท้าย
+last_page_label=ไปยังหน้าสุดท้าย
+page_rotate_cw.title=หมุนตามเข็มนาฬิกา
+page_rotate_cw_label=หมุนตามเข็มนาฬิกา
+page_rotate_ccw.title=หมุนทวนเข็มนาฬิกา
+page_rotate_ccw_label=หมุนทวนเข็มนาฬิกา
+
+cursor_text_select_tool.title=เปิดใช้งานเครื่องมือการเลือกข้อความ
+cursor_text_select_tool_label=เครื่องมือการเลือกข้อความ
+cursor_hand_tool.title=เปิดใช้งานเครื่องมือมือ
+cursor_hand_tool_label=เครื่องมือมือ
+
+scroll_page.title=ใช้การเลื่อนหน้า
+scroll_page_label=การเลื่อนหน้า
+scroll_vertical.title=ใช้การเลื่อนแนวตั้ง
+scroll_vertical_label=การเลื่อนแนวตั้ง
+scroll_horizontal.title=ใช้การเลื่อนแนวนอน
+scroll_horizontal_label=การเลื่อนแนวนอน
+scroll_wrapped.title=ใช้การเลื่อนแบบคลุม
+scroll_wrapped_label=เลื่อนแบบคลุม
+
+spread_none.title=ไม่ต้องรวมการกระจายหน้า
+spread_none_label=ไม่กระจาย
+spread_odd.title=รวมการกระจายหน้าเริ่มจากหน้าคี่
+spread_odd_label=กระจายอย่างเหลือเศษ
+spread_even.title=รวมการกระจายหน้าเริ่มจากหน้าคู่
+spread_even_label=กระจายอย่างเท่าเทียม
+
+# Document properties dialog box
+document_properties.title=คุณสมบัติเอกสาร…
+document_properties_label=คุณสมบัติเอกสาร…
+document_properties_file_name=ชื่อไฟล์:
+document_properties_file_size=ขนาดไฟล์:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ไบต์)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ไบต์)
+document_properties_title=ชื่อเรื่อง:
+document_properties_author=ผู้สร้าง:
+document_properties_subject=ชื่อเรื่อง:
+document_properties_keywords=คำสำคัญ:
+document_properties_creation_date=วันที่สร้าง:
+document_properties_modification_date=วันที่แก้ไข:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ผู้สร้าง:
+document_properties_producer=ผู้ผลิต PDF:
+document_properties_version=รุ่น PDF:
+document_properties_page_count=จำนวนหน้า:
+document_properties_page_size=ขนาดหน้า:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=แนวตั้ง
+document_properties_page_size_orientation_landscape=แนวนอน
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=จดหมาย
+document_properties_page_size_name_legal=ข้อกฎหมาย
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=มุมมองเว็บแบบรวดเร็ว:
+document_properties_linearized_yes=ใช่
+document_properties_linearized_no=ไม่
+document_properties_close=ปิด
+
+print_progress_message=กำลังเตรียมเอกสารสำหรับการพิมพ์…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ยกเลิก
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=เปิด/ปิดแถบข้าง
+toggle_sidebar_notification2.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์)
+toggle_sidebar_label=เปิด/ปิดแถบข้าง
+document_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด)
+document_outline_label=เค้าร่างเอกสาร
+attachments.title=แสดงไฟล์แนบ
+attachments_label=ไฟล์แนบ
+layers.title=แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น)
+layers_label=เลเยอร์
+thumbs.title=แสดงภาพขนาดย่อ
+thumbs_label=ภาพขนาดย่อ
+current_outline_item.title=ค้นหารายการเค้าร่างปัจจุบัน
+current_outline_item_label=รายการเค้าร่างปัจจุบัน
+findbar.title=ค้นหาในเอกสาร
+findbar_label=ค้นหา
+
+additional_layers=เลเยอร์เพิ่มเติม
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=หน้า {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=หน้า {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ภาพขนาดย่อของหน้า {{page}}
+
+# Find panel button title and messages
+find_input.title=ค้นหา
+find_input.placeholder=ค้นหาในเอกสาร…
+find_previous.title=หาตำแหน่งก่อนหน้าของวลี
+find_previous_label=ก่อนหน้า
+find_next.title=หาตำแหน่งถัดไปของวลี
+find_next_label=ถัดไป
+find_highlight=เน้นสีทั้งหมด
+find_match_case_label=ตัวพิมพ์ใหญ่เล็กตรงกัน
+find_entire_word_label=ทั้งคำ
+find_reached_top=ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง
+find_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[two]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[few]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[many]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[other]={{current}} จาก {{total}} ที่ตรงกัน
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[one]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[two]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[few]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[many]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[other]=มากกว่า {{limit}} ที่ตรงกัน
+find_not_found=ไม่พบวลี
+
+# Error panel labels
+error_more_info=ข้อมูลเพิ่มเติม
+error_less_info=ข้อมูลน้อยลง
+error_close=ปิด
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ข้อความ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=สแตก: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ไฟล์: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=บรรทัด: {{line}}
+rendering_error=เกิดข้อผิดพลาดขณะเรนเดอร์หน้า
+
+# Predefined zoom values
+page_scale_width=ความกว้างหน้า
+page_scale_fit=พอดีหน้า
+page_scale_auto=ซูมอัตโนมัติ
+page_scale_actual=ขนาดจริง
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=กำลังโหลด…
+loading_error=เกิดข้อผิดพลาดขณะโหลด PDF
+invalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย
+missing_file_error=ไฟล์ PDF หายไป
+unexpected_response_error=การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[คำอธิบายประกอบ {{type}}]
+password_label=ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้
+password_invalid=รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง
+password_ok=ตกลง
+password_cancel=ยกเลิก
+
+printing_not_supported=คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่
+printing_not_ready=คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์
+web_fonts_disabled=แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว
diff --git a/app/assets/javascripts/publications/locale/tl/viewer.properties b/app/assets/javascripts/publications/locale/tl/viewer.properties
new file mode 100644
index 0000000..1e988e7
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/tl/viewer.properties
@@ -0,0 +1,242 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Naunang Pahina
+previous_label=Nakaraan
+next.title=Sunod na Pahina
+next_label=Sunod
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pahina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ng {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ng {{pagesCount}})
+
+zoom_out.title=Paliitin
+zoom_out_label=Paliitin
+zoom_in.title=Palakihin
+zoom_in_label=Palakihin
+zoom.title=Mag-zoom
+presentation_mode.title=Lumipat sa Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Magbukas ng file
+open_file_label=Buksan
+print.title=i-Print
+print_label=i-Print
+download.title=i-Download
+download_label=i-Download
+bookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window)
+bookmark_label=Kasalukuyang tingin
+
+# Secondary toolbar and context menu
+tools.title=Mga Kagamitan
+tools_label=Mga Kagamitan
+first_page.title=Pumunta sa Unang Pahina
+first_page_label=Pumunta sa Unang Pahina
+last_page.title=Pumunta sa Huling Pahina
+last_page_label=Pumunta sa Huling Pahina
+page_rotate_cw.title=Paikutin Pakanan
+page_rotate_cw_label=Paikutin Pakanan
+page_rotate_ccw.title=Paikutin Pakaliwa
+page_rotate_ccw_label=Paikutin Pakaliwa
+
+cursor_text_select_tool.title=I-enable ang Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=I-enable ang Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Gumamit ng Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Gumamit ng Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Gumamit ng Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Huwag pagsamahin ang mga page spread
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Mga Odd Spread
+spread_even.title=Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina
+spread_even_label=Mga Even Spread
+
+# Document properties dialog box
+document_properties.title=Mga Katangian ng Dokumento…
+document_properties_label=Mga Katangian ng Dokumento…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Pamagat:
+document_properties_author=May-akda:
+document_properties_subject=Paksa:
+document_properties_keywords=Mga keyword:
+document_properties_creation_date=Petsa ng Pagkakagawa:
+document_properties_modification_date=Petsa ng Pagkakabago:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Tagalikha:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Bilang ng Pahina:
+document_properties_page_size=Laki ng Pahina:
+document_properties_page_size_unit_inches=pulgada
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=patayo
+document_properties_page_size_orientation_landscape=pahiga
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Oo
+document_properties_linearized_no=Hindi
+document_properties_close=Isara
+
+print_progress_message=Inihahanda ang dokumento para sa pag-print…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Kanselahin
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Ipakita/Itago ang Sidebar
+toggle_sidebar_notification2.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer)
+toggle_sidebar_label=Ipakita/Itago ang Sidebar
+document_outline.title=Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman)
+document_outline_label=Balangkas ng Dokumento
+attachments.title=Ipakita ang mga Attachment
+attachments_label=Mga attachment
+layers.title=Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado)
+layers_label=Mga layer
+thumbs.title=Ipakita ang mga Thumbnail
+thumbs_label=Mga thumbnail
+findbar.title=Hanapin sa Dokumento
+findbar_label=Hanapin
+
+additional_layers=Mga Karagdagang Layer
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pahina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail ng Pahina {{page}}
+
+# Find panel button title and messages
+find_input.title=Hanapin
+find_input.placeholder=Hanapin sa dokumento…
+find_previous.title=Hanapin ang nakaraang pangyayari ng parirala
+find_previous_label=Nakaraan
+find_next.title=Hanapin ang susunod na pangyayari ng parirala
+find_next_label=Susunod
+find_highlight=I-highlight lahat
+find_match_case_label=Itugma ang case
+find_entire_word_label=Buong salita
+find_reached_top=Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim
+find_reached_bottom=Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} ng {{total}} tugma
+find_match_count[two]={{current}} ng {{total}} tugma
+find_match_count[few]={{current}} ng {{total}} tugma
+find_match_count[many]={{current}} ng {{total}} tugma
+find_match_count[other]={{current}} ng {{total}} tugma
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Higit sa {{limit}} tugma
+find_match_count_limit[one]=Higit sa {{limit}} tugma
+find_match_count_limit[two]=Higit sa {{limit}} tugma
+find_match_count_limit[few]=Higit sa {{limit}} tugma
+find_match_count_limit[many]=Higit sa {{limit}} tugma
+find_match_count_limit[other]=Higit sa {{limit}} tugma
+find_not_found=Hindi natagpuan ang parirala
+
+# Error panel labels
+error_more_info=Karagdagang Impormasyon
+error_less_info=Mas Kaunting Impormasyon
+error_close=Isara
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensahe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linya: {{line}}
+rendering_error=Nagkaproblema habang nirerender ang pahina.
+
+# Predefined zoom values
+page_scale_width=Lapad ng Pahina
+page_scale_fit=Pagkasyahin ang Pahina
+page_scale_auto=Automatic Zoom
+page_scale_actual=Totoong sukat
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Nagkaproblema habang niloload ang PDF.
+invalid_file_error=Di-wasto o sira ang PDF file.
+missing_file_error=Nawawalang PDF file.
+unexpected_response_error=Hindi inaasahang tugon ng server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Ipasok ang password upang buksan ang PDF file na ito.
+password_invalid=Maling password. Subukan uli.
+password_ok=OK
+password_cancel=Kanselahin
+
+printing_not_supported=Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito.
+printing_not_ready=Babala: Hindi ganap na nabuksan ang PDF para sa pag-print.
+web_fonts_disabled=Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font.
diff --git a/app/assets/javascripts/publications/locale/tr/viewer.properties b/app/assets/javascripts/publications/locale/tr/viewer.properties
new file mode 100644
index 0000000..5d725d5
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/tr/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Önceki sayfa
+previous_label=Önceki
+next.title=Sonraki sayfa
+next_label=Sonraki
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sayfa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Uzaklaştır
+zoom_out_label=Uzaklaştır
+zoom_in.title=Yaklaştır
+zoom_in_label=Yaklaştır
+zoom.title=Yakınlaştırma
+presentation_mode.title=Sunum moduna geç
+presentation_mode_label=Sunum Modu
+open_file.title=Dosya aç
+open_file_label=Aç
+print.title=Yazdır
+print_label=Yazdır
+download.title=İndir
+download_label=İndir
+bookmark.title=Geçerli görünüm (kopyala veya yeni pencerede aç)
+bookmark_label=Geçerli görünüm
+
+# Secondary toolbar and context menu
+tools.title=Araçlar
+tools_label=Araçlar
+first_page.title=İlk sayfaya git
+first_page_label=İlk sayfaya git
+last_page.title=Son sayfaya git
+last_page_label=Son sayfaya git
+page_rotate_cw.title=Saat yönünde döndür
+page_rotate_cw_label=Saat yönünde döndür
+page_rotate_ccw.title=Saat yönünün tersine döndür
+page_rotate_ccw_label=Saat yönünün tersine döndür
+
+cursor_text_select_tool.title=Metin seçme aracını etkinleştir
+cursor_text_select_tool_label=Metin seçme aracı
+cursor_hand_tool.title=El aracını etkinleştir
+cursor_hand_tool_label=El aracı
+
+scroll_page.title=Sayfa kaydırmayı kullan
+scroll_page_label=Sayfa kaydırma
+scroll_vertical.title=Dikey kaydırma kullan
+scroll_vertical_label=Dikey kaydırma
+scroll_horizontal.title=Yatay kaydırma kullan
+scroll_horizontal_label=Yatay kaydırma
+scroll_wrapped.title=Yan yana kaydırmayı kullan
+scroll_wrapped_label=Yan yana kaydırma
+
+spread_none.title=Yan yana sayfaları birleştirme
+spread_none_label=Birleştirme
+spread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir
+spread_odd_label=Tek numaralı
+spread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir
+spread_even_label=Çift numaralı
+
+# Document properties dialog box
+document_properties.title=Belge özellikleri…
+document_properties_label=Belge özellikleri…
+document_properties_file_name=Dosya adı:
+document_properties_file_size=Dosya boyutu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
+document_properties_title=Başlık:
+document_properties_author=Yazar:
+document_properties_subject=Konu:
+document_properties_keywords=Anahtar kelimeler:
+document_properties_creation_date=Oluturma tarihi:
+document_properties_modification_date=Değiştirme tarihi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Oluşturan:
+document_properties_producer=PDF üreticisi:
+document_properties_version=PDF sürümü:
+document_properties_page_count=Sayfa sayısı:
+document_properties_page_size=Sayfa boyutu:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=dikey
+document_properties_page_size_orientation_landscape=yatay
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hızlı web görünümü:
+document_properties_linearized_yes=Evet
+document_properties_linearized_no=Hayır
+document_properties_close=Kapat
+
+print_progress_message=Belge yazdırılmaya hazırlanıyor…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=%{{progress}}
+print_progress_close=İptal
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Kenar çubuğunu aç/kapat
+toggle_sidebar_notification2.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor)
+toggle_sidebar_label=Kenar çubuğunu aç/kapat
+document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın)
+document_outline_label=Belge ana hatları
+attachments.title=Ekleri göster
+attachments_label=Ekler
+layers.title=Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın)
+layers_label=Katmanlar
+thumbs.title=Küçük resimleri göster
+thumbs_label=Küçük resimler
+current_outline_item.title=Mevcut ana hat öğesini bul
+current_outline_item_label=Mevcut ana hat öğesi
+findbar.title=Belgede bul
+findbar_label=Bul
+
+additional_layers=Ek katmanlar
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Sayfa {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sayfa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. sayfanın küçük hâli
+
+# Find panel button title and messages
+find_input.title=Bul
+find_input.placeholder=Belgede bul…
+find_previous.title=Önceki eşleşmeyi bul
+find_previous_label=Önceki
+find_next.title=Sonraki eşleşmeyi bul
+find_next_label=Sonraki
+find_highlight=Tümünü vurgula
+find_match_case_label=Büyük-küçük harfe duyarlı
+find_entire_word_label=Tam sözcükler
+find_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi
+find_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[two]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[few]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[many]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[other]={{total}} eşleşmeden {{current}}. eşleşme
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} eşleşmeden fazla
+find_match_count_limit[one]={{limit}} eşleşmeden fazla
+find_match_count_limit[two]={{limit}} eşleşmeden fazla
+find_match_count_limit[few]={{limit}} eşleşmeden fazla
+find_match_count_limit[many]={{limit}} eşleşmeden fazla
+find_match_count_limit[other]={{limit}} eşleşmeden fazla
+find_not_found=Eşleşme bulunamadı
+
+# Error panel labels
+error_more_info=Daha fazla bilgi al
+error_less_info=Daha az bilgi
+error_close=Kapat
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js sürüm {{version}} (yapı: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=İleti: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Yığın: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dosya: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Satır: {{line}}
+rendering_error=Sayfa yorumlanırken bir hata oluştu.
+
+# Predefined zoom values
+page_scale_width=Sayfa genişliği
+page_scale_fit=Sayfayı sığdır
+page_scale_auto=Otomatik yakınlaştır
+page_scale_actual=Gerçek boyut
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent=%{{scale}}
+
+# Loading indicator messages
+loading=Yükleniyor…
+loading_error=PDF yüklenirken bir hata oluştu.
+invalid_file_error=Geçersiz veya bozulmuş PDF dosyası.
+missing_file_error=PDF dosyası eksik.
+unexpected_response_error=Beklenmeyen sunucu yanıtı.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} işareti]
+password_label=Bu PDF dosyasını açmak için parolasını yazın.
+password_invalid=Geçersiz parola. Lütfen yeniden deneyin.
+password_ok=Tamam
+password_cancel=İptal
+
+printing_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir.
+printing_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil.
+web_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor.
diff --git a/app/assets/javascripts/publications/locale/trs/viewer.properties b/app/assets/javascripts/publications/locale/trs/viewer.properties
new file mode 100644
index 0000000..8bd1fe1
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/trs/viewer.properties
@@ -0,0 +1,206 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pajinâ gunâj rukùu
+previous_label=Sa gachin
+next.title=Pajinâ 'na' ñaan
+next_label=Ne' ñaan
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Ñanj
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=si'iaj {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Nagi'iaj li'
+zoom_out_label=Nagi'iaj li'
+zoom_in.title=Nagi'iaj niko'
+zoom_in_label=Nagi'iaj niko'
+zoom.title=dàj nìko ma'an
+presentation_mode.title=Naduno' daj ga ma
+presentation_mode_label=Daj gà ma
+open_file.title=Na'nïn' chrû ñanj
+open_file_label=Na'nïn
+print.title=Nari' ña du'ua
+print_label=Nari' ñadu'ua
+download.title=Nadunïnj
+download_label=Nadunïnj
+bookmark.title=Daj hua ma (Guxun' nej na'nïn' riña ventana nakàa)
+bookmark_label=Daj hua ma
+
+# Secondary toolbar and context menu
+tools.title=Rasun
+tools_label=Nej rasùun
+first_page.title=gun' riña pajina asiniin
+first_page_label=Gun' riña pajina asiniin
+last_page.title=Gun' riña pajina rukù ni'in
+last_page_label=Gun' riña pajina rukù ni'inj
+page_rotate_cw.title=Tanikaj ne' huat
+page_rotate_cw_label=Tanikaj ne' huat
+page_rotate_ccw.title=Tanikaj ne' chînt'
+page_rotate_ccw_label=Tanikaj ne' chint
+
+cursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto
+cursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto
+cursor_hand_tool.title=Nachrun' nej rasun
+cursor_hand_tool_label=Sa rajsun ro'o'
+
+scroll_vertical.title=Garasun' dukuán runūu
+scroll_vertical_label=Dukuán runūu
+scroll_horizontal.title=Garasun' dukuán nikin' nahui
+scroll_horizontal_label=Dukuán nikin' nahui
+scroll_wrapped.title=Garasun' sa nachree
+scroll_wrapped_label=Sa nachree
+
+spread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin
+spread_none_label=Ni'io daj hua pagina
+spread_odd.title=Nagi'iaj nugua'ant nej pajina
+spread_odd_label=Ni'io' daj hua libro gurin
+spread_even.title=Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi
+spread_even_label=Nahuin nìko nej
+
+# Document properties dialog box
+document_properties.title=Nej sa nikāj ñanj…
+document_properties_label=Nej sa nikāj ñanj…
+document_properties_file_name=Si yugui archîbo:
+document_properties_file_size=Dàj yachìj archîbo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Si yugui:
+document_properties_author=Sí girirà:
+document_properties_subject=Dugui':
+document_properties_keywords=Nej nuguan' huìi:
+document_properties_creation_date=Gui gurugui' man:
+document_properties_modification_date=Nuguan' nahuin nakà:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Guiri ro'
+document_properties_producer=Sa ri PDF:
+document_properties_version=PDF Version:
+document_properties_page_count=Si Guendâ Pâjina:
+document_properties_page_size=Dàj yachìj pâjina:
+document_properties_page_size_unit_inches=riña
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=nadu'ua
+document_properties_page_size_orientation_landscape=dàj huaj
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Da'ngà'a
+document_properties_page_size_name_legal=Nuguan' a'nï'ïn
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Nanèt chre ni'iajt riña Web:
+document_properties_linearized_yes=Ga'ue
+document_properties_linearized_no=Si ga'ue
+document_properties_close=Narán
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Duyichin'
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Nadunā barrâ nù yi'nïn
+toggle_sidebar_label=Nadunā barrâ nù yi'nïn
+findbar_label=Narì'
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=Narì'
+find_previous_label=Sa gachîn
+find_next_label=Ne' ñaan
+find_highlight=Daran' sa ña'an
+find_match_case_label=Match case
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[two]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[few]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[many]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i
+find_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_not_found=Nu narì'ij nugua'anj
+
+# Error panel labels
+error_more_info=Doj nuguan' a'min rayi'î nan
+error_less_info=Dòj nuguan' a'min rayi'î nan
+error_close=Narán
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Naru'ui': {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archîbo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lînia: {{line}}
+
+# Predefined zoom values
+page_scale_actual=Dàj yàchi akuan' nín
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_ok=Ga'ue
+password_cancel=Duyichin'
+
diff --git a/app/assets/javascripts/publications/locale/uk/viewer.properties b/app/assets/javascripts/publications/locale/uk/viewer.properties
new file mode 100644
index 0000000..90aa9b1
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/uk/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Попередня сторінка
+previous_label=Попередня
+next.title=Наступна сторінка
+next_label=Наступна
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Сторінка
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=із {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} із {{pagesCount}})
+
+zoom_out.title=Зменшити
+zoom_out_label=Зменшити
+zoom_in.title=Збільшити
+zoom_in_label=Збільшити
+zoom.title=Масштаб
+presentation_mode.title=Перейти в режим презентації
+presentation_mode_label=Режим презентації
+open_file.title=Відкрити файл
+open_file_label=Відкрити
+print.title=Друк
+print_label=Друк
+download.title=Завантажити
+download_label=Завантажити
+bookmark.title=Поточний вигляд (копіювати чи відкрити в новому вікні)
+bookmark_label=Поточний вигляд
+
+# Secondary toolbar and context menu
+tools.title=Інструменти
+tools_label=Інструменти
+first_page.title=На першу сторінку
+first_page_label=На першу сторінку
+last_page.title=На останню сторінку
+last_page_label=На останню сторінку
+page_rotate_cw.title=Повернути за годинниковою стрілкою
+page_rotate_cw_label=Повернути за годинниковою стрілкою
+page_rotate_ccw.title=Повернути проти годинникової стрілки
+page_rotate_ccw_label=Повернути проти годинникової стрілки
+
+cursor_text_select_tool.title=Увімкнути інструмент вибору тексту
+cursor_text_select_tool_label=Інструмент вибору тексту
+cursor_hand_tool.title=Увімкнути інструмент "Рука"
+cursor_hand_tool_label=Інструмент "Рука"
+
+scroll_page.title=Використовувати прокручування сторінки
+scroll_page_label=Прокручування сторінки
+scroll_vertical.title=Використовувати вертикальне прокручування
+scroll_vertical_label=Вертикальне прокручування
+scroll_horizontal.title=Використовувати горизонтальне прокручування
+scroll_horizontal_label=Горизонтальне прокручування
+scroll_wrapped.title=Використовувати масштабоване прокручування
+scroll_wrapped_label=Масштабоване прокручування
+
+spread_none.title=Не використовувати розгорнуті сторінки
+spread_none_label=Без розгорнутих сторінок
+spread_odd.title=Розгорнуті сторінки починаються з непарних номерів
+spread_odd_label=Непарні сторінки зліва
+spread_even.title=Розгорнуті сторінки починаються з парних номерів
+spread_even_label=Парні сторінки зліва
+
+# Document properties dialog box
+document_properties.title=Властивості документа…
+document_properties_label=Властивості документа…
+document_properties_file_name=Назва файла:
+document_properties_file_size=Розмір файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} bytes)
+document_properties_title=Заголовок:
+document_properties_author=Автор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключові слова:
+document_properties_creation_date=Дата створення:
+document_properties_modification_date=Дата зміни:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Створено:
+document_properties_producer=Виробник PDF:
+document_properties_version=Версія PDF:
+document_properties_page_count=Кількість сторінок:
+document_properties_page_size=Розмір сторінки:
+document_properties_page_size_unit_inches=дюймів
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=книжкова
+document_properties_page_size_orientation_landscape=альбомна
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Швидкий перегляд в Інтернеті:
+document_properties_linearized_yes=Так
+document_properties_linearized_no=Ні
+document_properties_close=Закрити
+
+print_progress_message=Підготовка документу до друку…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Скасувати
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Бічна панель
+toggle_sidebar_notification2.title=Перемкнути бічну панель (документ містить ескіз/вкладення/шари)
+toggle_sidebar_label=Перемкнути бічну панель
+document_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів)
+document_outline_label=Схема документа
+attachments.title=Показати прикріплення
+attachments_label=Прикріплення
+layers.title=Показати шари (двічі клацніть, щоб скинути всі шари до типового стану)
+layers_label=Шари
+thumbs.title=Показувати ескізи
+thumbs_label=Ескізи
+current_outline_item.title=Знайти поточний елемент змісту
+current_outline_item_label=Поточний елемент змісту
+findbar.title=Знайти в документі
+findbar_label=Знайти
+
+additional_layers=Додаткові шари
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Сторінка {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Сторінка {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ескіз сторінки {{page}}
+
+# Find panel button title and messages
+find_input.title=Знайти
+find_input.placeholder=Знайти в документі…
+find_previous.title=Знайти попереднє входження фрази
+find_previous_label=Попереднє
+find_next.title=Знайти наступне входження фрази
+find_next_label=Наступне
+find_highlight=Підсвітити все
+find_match_case_label=З урахуванням регістру
+find_match_diacritics_label=Відповідність діакритичних знаків
+find_entire_word_label=Цілі слова
+find_reached_top=Досягнуто початку документу, продовжено з кінця
+find_reached_bottom=Досягнуто кінця документу, продовжено з початку
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} збіг із {{total}}
+find_match_count[two]={{current}} збіги з {{total}}
+find_match_count[few]={{current}} збігів із {{total}}
+find_match_count[many]={{current}} збігів із {{total}}
+find_match_count[other]={{current}} збігів із {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Понад {{limit}} збігів
+find_match_count_limit[one]=Більше, ніж {{limit}} збіг
+find_match_count_limit[two]=Більше, ніж {{limit}} збіги
+find_match_count_limit[few]=Більше, ніж {{limit}} збігів
+find_match_count_limit[many]=Понад {{limit}} збігів
+find_match_count_limit[other]=Понад {{limit}} збігів
+find_not_found=Фразу не знайдено
+
+# Error panel labels
+error_more_info=Більше інформації
+error_less_info=Менше інформації
+error_close=Закрити
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Повідомлення: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Рядок: {{line}}
+rendering_error=Під час виведення сторінки сталася помилка.
+
+# Predefined zoom values
+page_scale_width=За шириною
+page_scale_fit=Вмістити
+page_scale_auto=Автомасштаб
+page_scale_actual=Дійсний розмір
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Завантаження…
+loading_error=Під час завантаження PDF сталася помилка.
+invalid_file_error=Недійсний або пошкоджений PDF-файл.
+missing_file_error=Відсутній PDF-файл.
+unexpected_response_error=Неочікувана відповідь сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-аннотація]
+password_label=Введіть пароль для відкриття цього PDF-файла.
+password_invalid=Невірний пароль. Спробуйте ще.
+password_ok=Гаразд
+password_cancel=Скасувати
+
+printing_not_supported=Попередження: Цей браузер не повністю підтримує друк.
+printing_not_ready=Попередження: PDF не повністю завантажений для друку.
+web_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти.
diff --git a/app/assets/javascripts/publications/locale/ur/viewer.properties b/app/assets/javascripts/publications/locale/ur/viewer.properties
new file mode 100644
index 0000000..6235c15
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/ur/viewer.properties
@@ -0,0 +1,238 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=پچھلا صفحہ
+previous_label=پچھلا
+next.title=اگلا صفحہ
+next_label=آگے
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=صفحہ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} کا
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} کا {{pagesCount}})
+
+zoom_out.title=باہر زوم کریں
+zoom_out_label=باہر زوم کریں
+zoom_in.title=اندر زوم کریں
+zoom_in_label=اندر زوم کریں
+zoom.title=زوم
+presentation_mode.title=پیشکش موڈ میں چلے جائیں
+presentation_mode_label=پیشکش موڈ
+open_file.title=مسل کھولیں
+open_file_label=کھولیں
+print.title=چھاپیں
+print_label=چھاپیں
+download.title=ڈاؤن لوڈ
+download_label=ڈاؤن لوڈ
+bookmark.title=حالیہ نظارہ (نۓ دریچہ میں نقل کریں یا کھولیں)
+bookmark_label=حالیہ نظارہ
+
+# Secondary toolbar and context menu
+tools.title=آلات
+tools_label=آلات
+first_page.title=پہلے صفحہ پر جائیں
+first_page_label=پہلے صفحہ پر جائیں
+last_page.title=آخری صفحہ پر جائیں
+last_page_label=آخری صفحہ پر جائیں
+page_rotate_cw.title=گھڑی وار گھمائیں
+page_rotate_cw_label=گھڑی وار گھمائیں
+page_rotate_ccw.title=ضد گھڑی وار گھمائیں
+page_rotate_ccw_label=ضد گھڑی وار گھمائیں
+
+cursor_text_select_tool.title=متن کے انتخاب کے ٹول کو فعال بناے
+cursor_text_select_tool_label=متن کے انتخاب کا آلہ
+cursor_hand_tool.title=ہینڈ ٹول کو فعال بناییں
+cursor_hand_tool_label=ہاتھ کا آلہ
+
+scroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں
+scroll_vertical_label=عمودی اسکرولنگ
+scroll_horizontal.title=افقی سکرولنگ کا استعمال کریں
+scroll_horizontal_label=افقی سکرولنگ
+
+spread_none.title=صفحہ پھیلانے میں شامل نہ ہوں
+spread_none_label=کوئی پھیلاؤ نہیں
+spread_odd_label=تاک پھیلاؤ
+spread_even_label=جفت پھیلاؤ
+
+# Document properties dialog box
+document_properties.title=دستاویز خواص…
+document_properties_label=دستاویز خواص…\u0020
+document_properties_file_name=نام مسل:
+document_properties_file_size=مسل سائز:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=عنوان:
+document_properties_author=تخلیق کار:
+document_properties_subject=موضوع:
+document_properties_keywords=کلیدی الفاظ:
+document_properties_creation_date=تخلیق کی تاریخ:
+document_properties_modification_date=ترمیم کی تاریخ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=تخلیق کار:
+document_properties_producer=PDF پیدا کار:
+document_properties_version=PDF ورژن:
+document_properties_page_count=صفحہ شمار:
+document_properties_page_size=صفہ کی لمبائ:
+document_properties_page_size_unit_inches=میں
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=عمودی انداز
+document_properties_page_size_orientation_landscape=افقى انداز
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=خط
+document_properties_page_size_name_legal=قانونی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=تیز ویب دیکھیں:
+document_properties_linearized_yes=ہاں
+document_properties_linearized_no=نہیں
+document_properties_close=بند کریں
+
+print_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=*{{progress}}%*
+print_progress_close=منسوخ کریں
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=سلائیڈ ٹوگل کریں
+toggle_sidebar_label=سلائیڈ ٹوگل کریں
+document_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں)
+document_outline_label=دستاویز آؤٹ لائن
+attachments.title=منسلکات دکھائیں
+attachments_label=منسلکات
+thumbs.title=تھمبنیل دکھائیں
+thumbs_label=مجمل
+findbar.title=دستاویز میں ڈھونڈیں
+findbar_label=ڈھونڈیں
+
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=صفحہ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=صفحہ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=صفحے کا مجمل {{page}}
+
+# Find panel button title and messages
+find_input.title=ڈھونڈیں
+find_input.placeholder=دستاویز… میں ڈھونڈیں
+find_previous.title=فقرے کا پچھلا وقوع ڈھونڈیں
+find_previous_label=پچھلا
+find_next.title=فقرے کا اگلہ وقوع ڈھونڈیں
+find_next_label=آگے
+find_highlight=تمام نمایاں کریں
+find_match_case_label=حروف مشابہ کریں
+find_entire_word_label=تمام الفاظ
+find_reached_top=صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا
+find_reached_bottom=صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} میچ کا {{current}}
+find_match_count[few]={{total}} میچوں میں سے {{current}}
+find_match_count[many]={{total}} میچوں میں سے {{current}}
+find_match_count[other]={{total}} میچوں میں سے {{current}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(total) ]}
+find_match_count_limit[zero]={{limit}} سے زیادہ میچ
+find_match_count_limit[one]={{limit}} سے زیادہ میچ
+find_match_count_limit[two]={{limit}} سے زیادہ میچ
+find_match_count_limit[few]={{limit}} سے زیادہ میچ
+find_match_count_limit[many]={{limit}} سے زیادہ میچ
+find_match_count_limit[other]={{limit}} سے زیادہ میچ
+find_not_found=فقرا نہیں ملا
+
+# Error panel labels
+error_more_info=مزید معلومات
+error_less_info=کم معلومات
+error_close=بند کریں
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پیغام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=سٹیک: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=مسل: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=لائن: {{line}}
+rendering_error=صفحہ بناتے ہوئے نقص آ گیا۔
+
+# Predefined zoom values
+page_scale_width=صفحہ چوڑائی
+page_scale_fit=صفحہ فٹنگ
+page_scale_auto=خودکار زوم
+page_scale_actual=اصل سائز
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔
+invalid_file_error=ناجائز یا خراب PDF مسل
+missing_file_error=PDF مسل غائب ہے۔
+unexpected_response_error=غیرمتوقع پیش کار جواب
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}.{{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} نوٹ]
+password_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں.
+password_invalid=ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں.
+password_ok=ٹھیک ہے
+password_cancel=منسوخ کریں
+
+printing_not_supported=تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔
+printing_not_ready=تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔
+web_fonts_disabled=ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔
+# LOCALIZATION NOTE (unsupported_feature_signatures): Should contain the same
+# exact string as in the `chrome.properties` file.
diff --git a/app/assets/javascripts/publications/locale/uz/viewer.properties b/app/assets/javascripts/publications/locale/uz/viewer.properties
new file mode 100644
index 0000000..a17eb6b
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/uz/viewer.properties
@@ -0,0 +1,162 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Oldingi sahifa
+previous_label=Oldingi
+next.title=Keyingi sahifa
+next_label=Keyingi
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/{{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Kichiklashtirish
+zoom_out_label=Kichiklashtirish
+zoom_in.title=Kattalashtirish
+zoom_in_label=Kattalashtirish
+zoom.title=Masshtab
+presentation_mode.title=Namoyish usuliga oʻtish
+presentation_mode_label=Namoyish usuli
+open_file.title=Faylni ochish
+open_file_label=Ochish
+print.title=Chop qilish
+print_label=Chop qilish
+download.title=Yuklab olish
+download_label=Yuklab olish
+bookmark.title=Joriy koʻrinish (nusxa oling yoki yangi oynada oching)
+bookmark_label=Joriy koʻrinish
+
+# Secondary toolbar and context menu
+tools.title=Vositalar
+tools_label=Vositalar
+first_page.title=Birinchi sahifaga oʻtish
+first_page_label=Birinchi sahifaga oʻtish
+last_page.title=Soʻnggi sahifaga oʻtish
+last_page_label=Soʻnggi sahifaga oʻtish
+page_rotate_cw.title=Soat yoʻnalishi boʻyicha burish
+page_rotate_cw_label=Soat yoʻnalishi boʻyicha burish
+page_rotate_ccw.title=Soat yoʻnalishiga qarshi burish
+page_rotate_ccw_label=Soat yoʻnalishiga qarshi burish
+
+
+# Document properties dialog box
+document_properties.title=Hujjat xossalari
+document_properties_label=Hujjat xossalari
+document_properties_file_name=Fayl nomi:
+document_properties_file_size=Fayl hajmi:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Nomi:
+document_properties_author=Muallifi:
+document_properties_subject=Mavzusi:
+document_properties_keywords=Kalit so‘zlar
+document_properties_creation_date=Yaratilgan sanasi:
+document_properties_modification_date=O‘zgartirilgan sanasi
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yaratuvchi:
+document_properties_producer=PDF ishlab chiqaruvchi:
+document_properties_version=PDF versiyasi:
+document_properties_page_count=Sahifa soni:
+document_properties_close=Yopish
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish
+toggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish
+document_outline_label=Hujjat tuzilishi
+attachments.title=Ilovalarni ko‘rsatish
+attachments_label=Ilovalar
+thumbs.title=Nishonchalarni koʻrsatish
+thumbs_label=Nishoncha
+findbar.title=Hujjat ichidan topish
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} sahifa
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} sahifa nishonchasi
+
+# Find panel button title and messages
+find_previous.title=Soʻzlardagi oldingi hodisani topish
+find_previous_label=Oldingi
+find_next.title=Iboradagi keyingi hodisani topish
+find_next_label=Keyingi
+find_highlight=Barchasini ajratib koʻrsatish
+find_match_case_label=Katta-kichik harflarni farqlash
+find_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi
+find_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi
+find_not_found=Soʻzlar topilmadi
+
+# Error panel labels
+error_more_info=Koʻproq ma`lumot
+error_less_info=Kamroq ma`lumot
+error_close=Yopish
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Xabar: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Toʻplam: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fayl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Satr: {{line}}
+rendering_error=Sahifa renderlanayotganda xato yuz berdi.
+
+# Predefined zoom values
+page_scale_width=Sahifa eni
+page_scale_fit=Sahifani moslashtirish
+page_scale_auto=Avtomatik masshtab
+page_scale_actual=Haqiqiy hajmi
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=PDF yuklanayotganda xato yuz berdi.
+invalid_file_error=Xato yoki buzuq PDF fayli.
+missing_file_error=PDF fayl kerak.
+unexpected_response_error=Kutilmagan server javobi.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=PDF faylni ochish uchun parolni kiriting.
+password_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring.
+password_ok=OK
+
+printing_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi.
+printing_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi.
+web_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi.
diff --git a/app/assets/javascripts/publications/locale/vi/viewer.properties b/app/assets/javascripts/publications/locale/vi/viewer.properties
new file mode 100644
index 0000000..1f10009
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/vi/viewer.properties
@@ -0,0 +1,250 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Trang trước
+previous_label=Trước
+next.title=Trang Sau
+next_label=Tiếp
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Trang
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=trên {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} trên {{pagesCount}})
+
+zoom_out.title=Thu nhỏ
+zoom_out_label=Thu nhỏ
+zoom_in.title=Phóng to
+zoom_in_label=Phóng to
+zoom.title=Thu phóng
+presentation_mode.title=Chuyển sang chế độ trình chiếu
+presentation_mode_label=Chế độ trình chiếu
+open_file.title=Mở tập tin
+open_file_label=Mở tập tin
+print.title=In
+print_label=In
+download.title=Tải xuống
+download_label=Tải xuống
+bookmark.title=Chế độ xem hiện tại (sao chép hoặc mở trong cửa sổ mới)
+bookmark_label=Chế độ xem hiện tại
+
+# Secondary toolbar and context menu
+tools.title=Công cụ
+tools_label=Công cụ
+first_page.title=Về trang đầu
+first_page_label=Về trang đầu
+last_page.title=Đến trang cuối
+last_page_label=Đến trang cuối
+page_rotate_cw.title=Xoay theo chiều kim đồng hồ
+page_rotate_cw_label=Xoay theo chiều kim đồng hồ
+page_rotate_ccw.title=Xoay ngược chiều kim đồng hồ
+page_rotate_ccw_label=Xoay ngược chiều kim đồng hồ
+
+cursor_text_select_tool.title=Kích hoạt công cụ chọn vùng văn bản
+cursor_text_select_tool_label=Công cụ chọn vùng văn bản
+cursor_hand_tool.title=Kích hoạt công cụ con trỏ
+cursor_hand_tool_label=Công cụ con trỏ
+
+scroll_page.title=Sử dụng cuộn trang hiện tại
+scroll_page_label=Cuộn trang hiện tại
+scroll_vertical.title=Sử dụng cuộn dọc
+scroll_vertical_label=Cuộn dọc
+scroll_horizontal.title=Sử dụng cuộn ngang
+scroll_horizontal_label=Cuộn ngang
+scroll_wrapped.title=Sử dụng cuộn ngắt dòng
+scroll_wrapped_label=Cuộn ngắt dòng
+
+spread_none.title=Không nối rộng trang
+spread_none_label=Không có phân cách
+spread_odd.title=Nối trang bài bắt đầu với các trang được đánh số lẻ
+spread_odd_label=Phân cách theo số lẻ
+spread_even.title=Nối trang bài bắt đầu với các trang được đánh số chẵn
+spread_even_label=Phân cách theo số chẵn
+
+# Document properties dialog box
+document_properties.title=Thuộc tính của tài liệu…
+document_properties_label=Thuộc tính của tài liệu…
+document_properties_file_name=Tên tập tin:
+document_properties_file_size=Kích thước:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Tiêu đề:
+document_properties_author=Tác giả:
+document_properties_subject=Chủ đề:
+document_properties_keywords=Từ khóa:
+document_properties_creation_date=Ngày tạo:
+document_properties_modification_date=Ngày sửa đổi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Người tạo:
+document_properties_producer=Phần mềm tạo PDF:
+document_properties_version=Phiên bản PDF:
+document_properties_page_count=Tổng số trang:
+document_properties_page_size=Kích thước trang:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=khổ dọc
+document_properties_page_size_orientation_landscape=khổ ngang
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Thư
+document_properties_page_size_name_legal=Pháp lý
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Xem nhanh trên web:
+document_properties_linearized_yes=Có
+document_properties_linearized_no=Không
+document_properties_close=Ðóng
+
+print_progress_message=Chuẩn bị trang để in…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Hủy bỏ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Bật/Tắt thanh lề
+toggle_sidebar_notification2.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp)
+toggle_sidebar_label=Bật/Tắt thanh lề
+document_outline.title=Hiển thị tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục)
+document_outline_label=Bản phác tài liệu
+attachments.title=Hiện nội dung đính kèm
+attachments_label=Nội dung đính kèm
+layers.title=Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định)
+layers_label=Lớp
+thumbs.title=Hiển thị ảnh thu nhỏ
+thumbs_label=Ảnh thu nhỏ
+current_outline_item.title=Tìm mục phác thảo hiện tại
+current_outline_item_label=Mục phác thảo hiện tại
+findbar.title=Tìm trong tài liệu
+findbar_label=Tìm
+
+additional_layers=Các lớp bổ sung
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=Trang {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Trang {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ảnh thu nhỏ của trang {{page}}
+
+# Find panel button title and messages
+find_input.title=Tìm
+find_input.placeholder=Tìm trong tài liệu…
+find_previous.title=Tìm cụm từ ở phần trước
+find_previous_label=Trước
+find_next.title=Tìm cụm từ ở phần sau
+find_next_label=Tiếp
+find_highlight=Tô sáng tất cả
+find_match_case_label=Phân biệt hoa, thường
+find_entire_word_label=Toàn bộ từ
+find_reached_top=Đã đến phần đầu tài liệu, quay trở lại từ cuối
+find_reached_bottom=Đã đến phần cuối của tài liệu, quay trở lại từ đầu
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} của {{total}} đã trùng
+find_match_count[two]={{current}} của {{total}} đã trùng
+find_match_count[few]={{current}} của {{total}} đã trùng
+find_match_count[many]={{current}} của {{total}} đã trùng
+find_match_count[other]={{current}} của {{total}} đã trùng
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[one]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[two]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[few]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[many]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[other]=Nhiều hơn {{limit}} đã trùng
+find_not_found=Không tìm thấy cụm từ này
+
+# Error panel labels
+error_more_info=Thông tin thêm
+error_less_info=Hiển thị ít thông tin hơn
+error_close=Đóng
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Thông điệp: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tập tin: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Dòng: {{line}}
+rendering_error=Lỗi khi hiển thị trang.
+
+# Predefined zoom values
+page_scale_width=Vừa chiều rộng
+page_scale_fit=Vừa chiều cao
+page_scale_auto=Tự động chọn kích thước
+page_scale_actual=Kích thước thực
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=Đang tải…
+loading_error=Lỗi khi tải tài liệu PDF.
+invalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ.
+missing_file_error=Thiếu tập tin PDF.
+unexpected_response_error=Máy chủ có phản hồi lạ.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Chú thích]
+password_label=Nhập mật khẩu để mở tập tin PDF này.
+password_invalid=Mật khẩu không đúng. Vui lòng thử lại.
+password_ok=OK
+password_cancel=Hủy bỏ
+
+printing_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này.
+printing_not_ready=Cảnh báo: PDF chưa được tải hết để in.
+web_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng.
diff --git a/app/assets/javascripts/publications/locale/wo/viewer.properties b/app/assets/javascripts/publications/locale/wo/viewer.properties
new file mode 100644
index 0000000..ca3f4c3
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/wo/viewer.properties
@@ -0,0 +1,122 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Xët wi jiitu
+previous_label=Bi jiitu
+next.title=Xët wi ci topp
+next_label=Bi ci topp
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Wàññi
+zoom_out_label=Wàññi
+zoom_in.title=Yaatal
+zoom_in_label=Yaatal
+zoom.title=Yambalaŋ
+presentation_mode.title=Wañarñil ci anamu wone
+presentation_mode_label=Anamu Wone
+open_file.title=Ubbi benn dencukaay
+open_file_label=Ubbi
+print.title=Móol
+print_label=Móol
+download.title=Yeb yi
+download_label=Yeb yi
+bookmark.title=Wone bi taxaw (duppi walla ubbi palanteer bu bees)
+bookmark_label=Wone bi feeñ
+
+# Secondary toolbar and context menu
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_title=Bopp:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+thumbs.title=Wone nataal yu ndaw yi
+thumbs_label=Nataal yu ndaw yi
+findbar.title=Gis ci biir jukki bi
+findbar_label=Wut
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Xët {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Wiñet bu xët {{page}}
+
+# Find panel button title and messages
+find_previous.title=Seet beneen kaddu bu ni mel te jiitu
+find_previous_label=Bi jiitu
+find_next.title=Seet beneen kaddu bu ni mel
+find_next_label=Bi ci topp
+find_highlight=Melaxal lépp
+find_match_case_label=Sàmm jëmmalin wi
+find_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf
+find_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte
+find_not_found=Gisiñu kaddu gi
+
+# Error panel labels
+error_more_info=Xibaar yu gën bari
+error_less_info=Xibaar yu gën bari
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Bataaxal: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Juug: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dencukaay: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rëdd : {{line}}
+rendering_error=Am njumte bu am bi xët bi di wonewu.
+
+# Predefined zoom values
+page_scale_width=Yaatuwaay bu mët
+page_scale_fit=Xët lëmm
+page_scale_auto=Yambalaŋ ci saa si
+page_scale_actual=Dayo bi am
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+loading_error=Am na njumte ci yebum dencukaay PDF bi.
+invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Karmat {{type}}]
+password_ok=OK
+password_cancel=Neenal
+
+printing_not_supported=Artu: Joowkat bii nanguwul lool mool.
diff --git a/app/assets/javascripts/publications/locale/xh/viewer.properties b/app/assets/javascripts/publications/locale/xh/viewer.properties
new file mode 100644
index 0000000..541ddbf
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/xh/viewer.properties
@@ -0,0 +1,176 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Iphepha langaphambili
+previous_label=Okwangaphambili
+next.title=Iphepha elilandelayo
+next_label=Okulandelayo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Iphepha
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=kwali- {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} kwali {{pagesCount}})
+
+zoom_out.title=Bhekelisela Kudana
+zoom_out_label=Bhekelisela Kudana
+zoom_in.title=Sondeza Kufuphi
+zoom_in_label=Sondeza Kufuphi
+zoom.title=Yandisa / Nciphisa
+presentation_mode.title=Tshintshela kwimo yonikezelo
+presentation_mode_label=Imo yonikezelo
+open_file.title=Vula Ifayile
+open_file_label=Vula
+print.title=Printa
+print_label=Printa
+download.title=Khuphela
+download_label=Khuphela
+bookmark.title=Imbonakalo ekhoyo (kopa okanye vula kwifestile entsha)
+bookmark_label=Imbonakalo ekhoyo
+
+# Secondary toolbar and context menu
+tools.title=Izixhobo zemiyalelo
+tools_label=Izixhobo zemiyalelo
+first_page.title=Yiya kwiphepha lokuqala
+first_page_label=Yiya kwiphepha lokuqala
+last_page.title=Yiya kwiphepha lokugqibela
+last_page_label=Yiya kwiphepha lokugqibela
+page_rotate_cw.title=Jikelisa ngasekunene
+page_rotate_cw_label=Jikelisa ngasekunene
+page_rotate_ccw.title=Jikelisa ngasekhohlo
+page_rotate_ccw_label=Jikelisa ngasekhohlo
+
+cursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti
+cursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti
+cursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze
+cursor_hand_tool_label=ISixhobo seSandla
+
+# Document properties dialog box
+document_properties.title=Iipropati zoxwebhu…
+document_properties_label=Iipropati zoxwebhu…
+document_properties_file_name=Igama lefayile:
+document_properties_file_size=Isayizi yefayile:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB (iibhayiti{{size_b}})
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB (iibhayithi{{size_b}})
+document_properties_title=Umxholo:
+document_properties_author=Umbhali:
+document_properties_subject=Umbandela:
+document_properties_keywords=Amagama aphambili:
+document_properties_creation_date=Umhla wokwenziwa kwayo:
+document_properties_modification_date=Umhla wokulungiswa kwayo:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Umntu oyenzileyo:
+document_properties_producer=Umvelisi we-PDF:
+document_properties_version=Uhlelo lwe-PDF:
+document_properties_page_count=Inani lamaphepha:
+document_properties_close=Vala
+
+print_progress_message=Ilungisa uxwebhu ukuze iprinte…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Rhoxisa
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Togola ngebha eseCaleni
+toggle_sidebar_label=Togola ngebha eseCaleni
+document_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto)
+document_outline_label=Isishwankathelo soxwebhu
+attachments.title=Bonisa iziqhotyoshelwa
+attachments_label=Iziqhoboshelo
+thumbs.title=Bonisa ukrobiso kumfanekiso
+thumbs_label=Ukrobiso kumfanekiso
+findbar.title=Fumana kuXwebhu
+findbar_label=Fumana
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Iphepha {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}}
+
+# Find panel button title and messages
+find_input.title=Fumana
+find_input.placeholder=Fumana kuXwebhu…
+find_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama
+find_previous_label=Okwangaphambili
+find_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama
+find_next_label=Okulandelayo
+find_highlight=Qaqambisa konke
+find_match_case_label=Tshatisa ngobukhulu bukanobumba
+find_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi
+find_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu
+find_not_found=Ibinzana alifunyenwanga
+
+# Error panel labels
+error_more_info=Inkcazelo Engakumbi
+error_less_info=Inkcazelo Encinane
+error_close=Vala
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=I-PDF.js v{{version}} (yakha: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Umyalezo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Imfumba: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ifayile: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Umgca: {{line}}
+rendering_error=Imposiso yenzekile xa bekunikezelwa iphepha.
+
+# Predefined zoom values
+page_scale_width=Ububanzi bephepha
+page_scale_fit=Ukulinganiswa kwephepha
+page_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo
+page_scale_actual=Ubungakanani bokwenene
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+loading_error=Imposiso yenzekile xa kulayishwa i-PDF.
+invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo.
+missing_file_error=Ifayile ye-PDF edukileyo.
+unexpected_response_error=Impendulo yeseva engalindelekanga.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ubhalo-nqaku]
+password_label=Faka ipasiwedi ukuze uvule le fayile yePDF.
+password_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona.
+password_ok=KULUNGILE
+password_cancel=Rhoxisa
+
+printing_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza.
+printing_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta.
+web_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo.
diff --git a/app/assets/javascripts/publications/locale/zh-CN/viewer.properties b/app/assets/javascripts/publications/locale/zh-CN/viewer.properties
new file mode 100644
index 0000000..87e715c
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/zh-CN/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=上一页
+previous_label=上一页
+next.title=下一页
+next_label=下一页
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=页面
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=缩小
+zoom_out_label=缩小
+zoom_in.title=放大
+zoom_in_label=放大
+zoom.title=缩放
+presentation_mode.title=切换到演示模式
+presentation_mode_label=演示模式
+open_file.title=打开文件
+open_file_label=打开
+print.title=打印
+print_label=打印
+download.title=下载
+download_label=下载
+bookmark.title=当前在看的内容(复制或在新窗口中打开)
+bookmark_label=当前在看
+
+# Secondary toolbar and context menu
+tools.title=工具
+tools_label=工具
+first_page.title=转到第一页
+first_page_label=转到第一页
+last_page.title=转到最后一页
+last_page_label=转到最后一页
+page_rotate_cw.title=顺时针旋转
+page_rotate_cw_label=顺时针旋转
+page_rotate_ccw.title=逆时针旋转
+page_rotate_ccw_label=逆时针旋转
+
+cursor_text_select_tool.title=启用文本选择工具
+cursor_text_select_tool_label=文本选择工具
+cursor_hand_tool.title=启用手形工具
+cursor_hand_tool_label=手形工具
+
+scroll_page.title=使用页面滚动
+scroll_page_label=页面滚动
+scroll_vertical.title=使用垂直滚动
+scroll_vertical_label=垂直滚动
+scroll_horizontal.title=使用水平滚动
+scroll_horizontal_label=水平滚动
+scroll_wrapped.title=使用平铺滚动
+scroll_wrapped_label=平铺滚动
+
+spread_none.title=不加入衔接页
+spread_none_label=单页视图
+spread_odd.title=加入衔接页使奇数页作为起始页
+spread_odd_label=双页视图
+spread_even.title=加入衔接页使偶数页作为起始页
+spread_even_label=书籍视图
+
+# Document properties dialog box
+document_properties.title=文档属性…
+document_properties_label=文档属性…
+document_properties_file_name=文件名:
+document_properties_file_size=文件大小:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} 字节)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} 字节)
+document_properties_title=标题:
+document_properties_author=作者:
+document_properties_subject=主题:
+document_properties_keywords=关键词:
+document_properties_creation_date=创建日期:
+document_properties_modification_date=修改日期:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=创建者:
+document_properties_producer=PDF 生成器:
+document_properties_version=PDF 版本:
+document_properties_page_count=页数:
+document_properties_page_size=页面大小:
+document_properties_page_size_unit_inches=英寸
+document_properties_page_size_unit_millimeters=毫米
+document_properties_page_size_orientation_portrait=纵向
+document_properties_page_size_orientation_landscape=横向
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=文本
+document_properties_page_size_name_legal=法律
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=快速 Web 视图:
+document_properties_linearized_yes=是
+document_properties_linearized_no=否
+document_properties_close=关闭
+
+print_progress_message=正在准备打印文档…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=取消
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=切换侧栏
+toggle_sidebar_notification2.title=切换侧栏(文档所含的大纲/附件/图层)
+toggle_sidebar_label=切换侧栏
+document_outline.title=显示文档大纲(双击展开/折叠所有项)
+document_outline_label=文档大纲
+attachments.title=显示附件
+attachments_label=附件
+layers.title=显示图层(双击即可将所有图层重置为默认状态)
+layers_label=图层
+thumbs.title=显示缩略图
+thumbs_label=缩略图
+current_outline_item.title=查找当前大纲项目
+current_outline_item_label=当前大纲项目
+findbar.title=在文档中查找
+findbar_label=查找
+
+additional_layers=其他图层
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=第 {{page}} 页
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=第 {{page}} 页
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=页面 {{page}} 的缩略图
+
+# Find panel button title and messages
+find_input.title=查找
+find_input.placeholder=在文档中查找…
+find_previous.title=查找词语上一次出现的位置
+find_previous_label=上一页
+find_next.title=查找词语后一次出现的位置
+find_next_label=下一页
+find_highlight=全部高亮显示
+find_match_case_label=区分大小写
+find_match_diacritics_label=匹配变音符号
+find_entire_word_label=字词匹配
+find_reached_top=到达文档开头,从末尾继续
+find_reached_bottom=到达文档末尾,从开头继续
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[two]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[few]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[many]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[other]=第 {{current}} 项,共匹配 {{total}} 项
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=超过 {{limit}} 项匹配
+find_match_count_limit[one]=超过 {{limit}} 项匹配
+find_match_count_limit[two]=超过 {{limit}} 项匹配
+find_match_count_limit[few]=超过 {{limit}} 项匹配
+find_match_count_limit[many]=超过 {{limit}} 项匹配
+find_match_count_limit[other]=超过 {{limit}} 项匹配
+find_not_found=找不到指定词语
+
+# Error panel labels
+error_more_info=更多信息
+error_less_info=更少信息
+error_close=关闭
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=信息:{{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=堆栈:{{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=文件:{{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行号:{{line}}
+rendering_error=渲染页面时发生错误。
+
+# Predefined zoom values
+page_scale_width=适合页宽
+page_scale_fit=适合页面
+page_scale_auto=自动缩放
+page_scale_actual=实际大小
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=正在载入…
+loading_error=载入 PDF 时发生错误。
+invalid_file_error=无效或损坏的 PDF 文件。
+missing_file_error=缺少 PDF 文件。
+unexpected_response_error=意外的服务器响应。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}},{{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 注释]
+password_label=输入密码以打开此 PDF 文件。
+password_invalid=密码无效。请重试。
+password_ok=确定
+password_cancel=取消
+
+printing_not_supported=警告:此浏览器尚未完整支持打印功能。
+printing_not_ready=警告:此 PDF 未完成载入,无法打印。
+web_fonts_disabled=Web 字体已被禁用:无法使用嵌入的 PDF 字体。
diff --git a/app/assets/javascripts/publications/locale/zh-TW/viewer.properties b/app/assets/javascripts/publications/locale/zh-TW/viewer.properties
new file mode 100644
index 0000000..4de74ee
--- /dev/null
+++ b/app/assets/javascripts/publications/locale/zh-TW/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=上一頁
+previous_label=上一頁
+next.title=下一頁
+next_label=下一頁
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=第
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=頁,共 {{pagesCount}} 頁
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(第 {{pageNumber}} 頁,共 {{pagesCount}} 頁)
+
+zoom_out.title=縮小
+zoom_out_label=縮小
+zoom_in.title=放大
+zoom_in_label=放大
+zoom.title=縮放
+presentation_mode.title=切換至簡報模式
+presentation_mode_label=簡報模式
+open_file.title=開啟檔案
+open_file_label=開啟
+print.title=列印
+print_label=列印
+download.title=下載
+download_label=下載
+bookmark.title=目前畫面(複製或開啟於新視窗)
+bookmark_label=目前檢視
+
+# Secondary toolbar and context menu
+tools.title=工具
+tools_label=工具
+first_page.title=跳到第一頁
+first_page_label=跳到第一頁
+last_page.title=跳到最後一頁
+last_page_label=跳到最後一頁
+page_rotate_cw.title=順時針旋轉
+page_rotate_cw_label=順時針旋轉
+page_rotate_ccw.title=逆時針旋轉
+page_rotate_ccw_label=逆時針旋轉
+
+cursor_text_select_tool.title=開啟文字選擇工具
+cursor_text_select_tool_label=文字選擇工具
+cursor_hand_tool.title=開啟頁面移動工具
+cursor_hand_tool_label=頁面移動工具
+
+scroll_page.title=使用頁面捲動功能
+scroll_page_label=頁面捲動功能
+scroll_vertical.title=使用垂直捲動版面
+scroll_vertical_label=垂直捲動
+scroll_horizontal.title=使用水平捲動版面
+scroll_horizontal_label=水平捲動
+scroll_wrapped.title=使用多頁捲動版面
+scroll_wrapped_label=多頁捲動
+
+spread_none.title=不要進行跨頁顯示
+spread_none_label=不跨頁
+spread_odd.title=從奇數頁開始跨頁
+spread_odd_label=奇數跨頁
+spread_even.title=從偶數頁開始跨頁
+spread_even_label=偶數跨頁
+
+# Document properties dialog box
+document_properties.title=文件內容…
+document_properties_label=文件內容…
+document_properties_file_name=檔案名稱:
+document_properties_file_size=檔案大小:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB({{size_b}} 位元組)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB({{size_b}} 位元組)
+document_properties_title=標題:
+document_properties_author=作者:
+document_properties_subject=主旨:
+document_properties_keywords=關鍵字:
+document_properties_creation_date=建立日期:
+document_properties_modification_date=修改日期:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=建立者:
+document_properties_producer=PDF 產生器:
+document_properties_version=PDF 版本:
+document_properties_page_count=頁數:
+document_properties_page_size=頁面大小:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=垂直
+document_properties_page_size_orientation_landscape=水平
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=快速 Web 檢視:
+document_properties_linearized_yes=是
+document_properties_linearized_no=否
+document_properties_close=關閉
+
+print_progress_message=正在準備列印文件…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=取消
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=切換側邊欄
+toggle_sidebar_notification2.title=切換側邊欄(包含大綱、附件、圖層的文件)
+toggle_sidebar_label=切換側邊欄
+document_outline.title=顯示文件大綱(雙擊展開/摺疊所有項目)
+document_outline_label=文件大綱
+attachments.title=顯示附件
+attachments_label=附件
+layers.title=顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態)
+layers_label=圖層
+thumbs.title=顯示縮圖
+thumbs_label=縮圖
+current_outline_item.title=尋找目前的大綱項目
+current_outline_item_label=目前的大綱項目
+findbar.title=在文件中尋找
+findbar_label=尋找
+
+additional_layers=其他圖層
+# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number.
+page_landmark=第 {{page}} 頁
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=第 {{page}} 頁
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=頁 {{page}} 的縮圖
+
+# Find panel button title and messages
+find_input.title=尋找
+find_input.placeholder=在文件中搜尋…
+find_previous.title=尋找文字前次出現的位置
+find_previous_label=上一個
+find_next.title=尋找文字下次出現的位置
+find_next_label=下一個
+find_highlight=全部強調標示
+find_match_case_label=區分大小寫
+find_match_diacritics_label=符合變音符號
+find_entire_word_label=符合整個字
+find_reached_top=已搜尋至文件頂端,自底端繼續搜尋
+find_reached_bottom=已搜尋至文件底端,自頂端繼續搜尋
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[two]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[few]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[many]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[other]=第 {{current}} 筆,共找到 {{total}} 筆
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=找到超過 {{limit}} 筆
+find_match_count_limit[one]=找到超過 {{limit}} 筆
+find_match_count_limit[two]=找到超過 {{limit}} 筆
+find_match_count_limit[few]=找到超過 {{limit}} 筆
+find_match_count_limit[many]=找到超過 {{limit}} 筆
+find_match_count_limit[other]=找到超過 {{limit}} 筆
+find_not_found=找不到指定文字
+
+# Error panel labels
+error_more_info=更多資訊
+error_less_info=更少資訊
+error_close=關閉
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=訊息: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=堆疊: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=檔案: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行: {{line}}
+rendering_error=描繪頁面時發生錯誤。
+
+# Predefined zoom values
+page_scale_width=頁面寬度
+page_scale_fit=縮放至頁面大小
+page_scale_auto=自動縮放
+page_scale_actual=實際大小
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading=載入中…
+loading_error=載入 PDF 時發生錯誤。
+invalid_file_error=無效或毀損的 PDF 檔案。
+missing_file_error=找不到 PDF 檔案。
+unexpected_response_error=伺服器回應未預期的內容。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 註解]
+password_label=請輸入用來開啟此 PDF 檔案的密碼。
+password_invalid=密碼不正確,請再試一次。
+password_ok=確定
+password_cancel=取消
+
+printing_not_supported=警告: 此瀏覽器未完整支援列印功能。
+printing_not_ready=警告: 此 PDF 未完成下載以供列印。
+web_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。
diff --git a/app/assets/javascripts/publications/pdf-turn.js b/app/assets/javascripts/publications/pdf-turn.js
new file mode 100644
index 0000000..6449e49
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf-turn.js
@@ -0,0 +1,205 @@
+ /********************************************************/
+ /** HERE MAIN MODIFIED PART FOR turnjs SUPPORT **/
+/********************************************************/
+/// requires jquery and turnjs
+/// all code added in viewer.js (from pdfjs build) in order to support
+/// flipbook is commented with '$FB:' string to allow to find it easilly
+
+var bookFlip = {
+ _width: [], //flipbook pages width
+ _height: [], //flipbook pages height
+ active: false, //flipbook mode on
+ _spreadBk: NaN, //spread mode backup to restore
+ _evSpread: null,//spread mode changed default event handler
+ _spread: NaN, //spread page mode
+ toStart: false, //PDFjs require flipbook at start
+ _intoView: null,//link handler default function
+ _visPages: null,//visible pages function
+ _ready: false, //ready to start flipbook
+
+ // event listeners when bookFlip need different handling
+ init: function(){
+ $(document).on('rotationchanging', () => {this.rotate()});
+ $(document).on('scalechanging', () => {this.resize()});
+ $(document).on('pagechanging', () => {this.flip()});
+
+ $(document).on('documentinit', () => {
+ this.stop();
+ this._ready = false;
+ });
+
+ $(document).on('scrollmodechanged', () => {
+ var scroll = PDFViewerApplication.pdfViewer.scrollMode;
+ if (scroll === 3)this.start();
+ else this.stop();
+ var button = PDFViewerApplication.appConfig.secondaryToolbar.bookFlipButton;
+ button.classList.toggle('toggled', scroll === 3);
+ });
+
+ $(document).on('switchspreadmode', (evt) => {
+ this.spread(evt.originalEvent.detail.mode);
+ PDFViewerApplication.eventBus.dispatch('spreadmodechanged', {
+ source: PDFViewerApplication,
+ mode: evt.originalEvent.detail.mode
+ });
+ });
+
+ $(document).on('pagesloaded', () => {
+ this._ready = true;
+ if(this.toStart){
+ this.toStart = false;
+ PDFViewerApplication.pdfViewer.scrollMode = 3;
+ }
+ });
+
+ $(document).on('baseviewerinit', () => {
+ PDFViewerApplicationOptions.set('scrollModeOnLoad',3);
+
+ this._intoView = PDFViewerApplication.pdfViewer.scrollPageIntoView;
+ this._visPages = PDFViewerApplication.pdfViewer._getVisiblePages;
+ });
+ },
+ // startup flipbook
+ start: function(){
+ if(this.active || !this._ready)return;
+ this.active = true;
+
+ var viewer = PDFViewerApplication.pdfViewer;
+
+ $('.scrollModeButtons').removeClass('toggled');
+
+ this._spreadBk = viewer.spreadMode;
+ var selected = $('.spreadModeButtons.toggled').attr('id');
+ this._spread = (this._spreadBk !== 2) ? 0 : 2;
+ viewer.spreadMode = 0;
+ viewer._spreadMode = -1;
+ $('.spreadModeButtons').removeClass('toggled');
+ $('#' + selected).addClass('toggled');
+
+ this._evSpread = PDFViewerApplication.eventBus._listeners.switchspreadmode;
+ PDFViewerApplication.eventBus._listeners.switchspreadmode = null;
+
+ viewer.scrollPageIntoView = (data) => {return this.link(data)};
+ viewer._getVisiblePages = () => {return this.load()};
+
+ var scale = viewer.currentScale;
+ var parent = this;
+ $('#viewer .page').each(function(){
+ parent._width[$(this).attr('data-page-number')] = $(this).width() / scale;
+ parent._height[$(this).attr('data-page-number')] = $(this).height() / scale;
+ });
+
+ $('#viewer').removeClass('pdfViewer').addClass('bookViewer').css({ opacity: 1 });;
+
+ $('#spreadOdd').prop('disabled', true);
+ var pages = PDFViewerApplication.pagesCount;
+ for(var page = 3; page < pages + (pages%2); page ++){
+ if(this._height[page]!=this._height[page-1] || this._width[page]!=this._width[page-1]){
+ $('#spreadEven').prop('disabled', true);
+ this._spread = 0;
+ }
+ }
+
+ $('#viewer').turn({
+ elevation: 50,
+ width: this._size(PDFViewerApplication.page,'width') * this._spreadMult(),
+ height: this._size(PDFViewerApplication.page,'height'),
+ page: PDFViewerApplication.page,
+ when: {
+ turned: function(event, page) {
+ PDFViewerApplication.page = page;
+ viewer.update();
+ }
+ },
+ display: this._spreadType()
+ });
+ },
+ // shutdown flipbook
+ stop: function(){
+ if(!this.active)return;
+ this.active = false;
+
+ var viewer = PDFViewerApplication.pdfViewer;
+
+ $('#viewer').turn('destroy');
+
+ viewer.scrollPageIntoView = this._intoView;
+ viewer._getVisiblePages = this._visPages;
+
+ PDFViewerApplication.eventBus._listeners.switchspreadmode = this._evSpread;
+ viewer.spreadMode = this._spreadBk;
+
+ $('#viewer .page').removeAttr('style');
+ $('#viewer').removeAttr('style').removeClass('shadow bookViewer').addClass('pdfViewer');
+
+ var parent = this;
+ $('#viewer .page').each(function(){
+ var page = $(this).attr('data-page-number');
+ $(this).css( 'width', parent._size(page,'width')).css( 'height', parent._size(page,'height'));
+ });
+
+ },
+ // resize flipbook pages
+ resize: function(){
+ if(!this.active)return;
+ var page = PDFViewerApplication.page;
+ $('#viewer').turn('size', this._size(page,'width') * this._spreadMult(), this._size(page,'height'));
+ },
+ // rotate flipbook pages
+ rotate: function(){
+ if(!this.active)return;
+ [this._height, this._width] = [this._width, this._height];
+ this.resize();
+ },
+ // change flipbook spread mode
+ spread: function(spreadMode){
+ if(!this.active)return;
+ this._spread = spreadMode;
+ $('#viewer').turn('display', this._spreadType());
+ this.resize();
+ },
+ // turn page
+ flip: function(){
+ if(!this.active)return;
+ $('#viewer').turn('page', PDFViewerApplication.page);
+ if(!PDFViewerApplication.pdfViewer.hasEqualPageSizes)this.resize();
+ },
+ // follow internal links
+ link: function(data){
+ if(!this.active)return;
+ PDFViewerApplication.page = data.pageNumber;
+ },
+ // load pages near shown page
+ load: function(){
+ if(!this.active)return;
+ var views = PDFViewerApplication.pdfViewer._pages;
+ var arr = [];
+ var page = PDFViewerApplication.page;
+ var min = Math.max(page - ((this._spread === 0) ? 2 : 3 + (page%2)), 0);
+ var max = Math.min(page + ((this._spread === 0) ? 1 : 3 - (page%2)), views.length);
+
+ for (var i = min, ii = max; i < ii; i++) {
+ arr.push({
+ id: views[i].id,
+ view: views[i],
+ x: 0, y: 0, percent: 100
+ });
+ }
+
+ return { first:arr[page - min - 1], last:arr[arr.length-1], views:arr };
+ },
+ _spreadType: function(){
+ return (this._spread === 0) ? 'single' : 'double';
+ },
+ _spreadMult: function(){
+ return (this._spread === 0) ? 1 : 2;
+ },
+ _size: function(page,request){
+ var size;
+ if (request === 'width') size = this._width[page];
+ if (request === 'height') size = this._height[page];
+ return size * PDFViewerApplication.pdfViewer.currentScale;
+ }
+};
+
+bookFlip.init();
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/.gitattributes b/app/assets/javascripts/publications/pdf/bcmaps/.gitattributes
new file mode 100644
index 0000000..556f8c8
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/bcmaps/.gitattributes
@@ -0,0 +1 @@
+* binary
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78-EUC-H.bcmap
new file mode 100644
index 0000000..2655fc7
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78-EUC-V.bcmap
new file mode 100644
index 0000000..f1ed853
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78-H.bcmap
new file mode 100644
index 0000000..39e89d3
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78-RKSJ-H.bcmap
new file mode 100644
index 0000000..e4167cb
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78-RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78-RKSJ-V.bcmap
new file mode 100644
index 0000000..50b1646
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78-RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78-V.bcmap
new file mode 100644
index 0000000..d7af99b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78ms-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78ms-RKSJ-H.bcmap
new file mode 100644
index 0000000..37077d0
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78ms-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/78ms-RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/78ms-RKSJ-V.bcmap
new file mode 100644
index 0000000..acf2323
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/78ms-RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/83pv-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/83pv-RKSJ-H.bcmap
new file mode 100644
index 0000000..2359bc5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/83pv-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/90ms-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/90ms-RKSJ-H.bcmap
new file mode 100644
index 0000000..af82938
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/90ms-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/90ms-RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/90ms-RKSJ-V.bcmap
new file mode 100644
index 0000000..780549d
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/90ms-RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/90msp-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/90msp-RKSJ-H.bcmap
new file mode 100644
index 0000000..bfd3119
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/90msp-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/90msp-RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/90msp-RKSJ-V.bcmap
new file mode 100644
index 0000000..25ef14a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/90msp-RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/90pv-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/90pv-RKSJ-H.bcmap
new file mode 100644
index 0000000..02f713b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/90pv-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/90pv-RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/90pv-RKSJ-V.bcmap
new file mode 100644
index 0000000..d08e0cc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/90pv-RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Add-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Add-H.bcmap
new file mode 100644
index 0000000..59442ac
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Add-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Add-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Add-RKSJ-H.bcmap
new file mode 100644
index 0000000..a3065e4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Add-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Add-RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Add-RKSJ-V.bcmap
new file mode 100644
index 0000000..040014c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Add-RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Add-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Add-V.bcmap
new file mode 100644
index 0000000..2f816d3
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Add-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-0.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-0.bcmap
new file mode 100644
index 0000000..88ec04a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-0.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-1.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-1.bcmap
new file mode 100644
index 0000000..03a5014
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-1.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-2.bcmap
new file mode 100644
index 0000000..2aa9514
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-3.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-3.bcmap
new file mode 100644
index 0000000..86d8b8c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-3.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-4.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-4.bcmap
new file mode 100644
index 0000000..f50fc6c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-4.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-5.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-5.bcmap
new file mode 100644
index 0000000..6caf4a8
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-5.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-6.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-6.bcmap
new file mode 100644
index 0000000..b77fb07
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-6.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-UCS2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-UCS2.bcmap
new file mode 100644
index 0000000..69d79a2
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-CNS1-UCS2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-0.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-0.bcmap
new file mode 100644
index 0000000..3610108
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-0.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-1.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-1.bcmap
new file mode 100644
index 0000000..707bb10
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-1.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-2.bcmap
new file mode 100644
index 0000000..f7648cc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-3.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-3.bcmap
new file mode 100644
index 0000000..8521458
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-3.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-4.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-4.bcmap
new file mode 100644
index 0000000..e40c63a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-4.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-5.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-5.bcmap
new file mode 100644
index 0000000..d7623b5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-5.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-UCS2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-UCS2.bcmap
new file mode 100644
index 0000000..7586525
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-GB1-UCS2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-0.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-0.bcmap
new file mode 100644
index 0000000..f0e94ec
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-0.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-1.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-1.bcmap
new file mode 100644
index 0000000..dad42c5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-1.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-2.bcmap
new file mode 100644
index 0000000..090819a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-3.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-3.bcmap
new file mode 100644
index 0000000..087dfc1
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-3.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-4.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-4.bcmap
new file mode 100644
index 0000000..46aa9bf
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-4.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-5.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-5.bcmap
new file mode 100644
index 0000000..5b4b65c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-5.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-6.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-6.bcmap
new file mode 100644
index 0000000..e77d699
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-6.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-UCS2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-UCS2.bcmap
new file mode 100644
index 0000000..128a141
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Japan1-UCS2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-0.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-0.bcmap
new file mode 100644
index 0000000..cef1a99
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-0.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-1.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-1.bcmap
new file mode 100644
index 0000000..11ffa36
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-1.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-2.bcmap
new file mode 100644
index 0000000..3172308
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-UCS2.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-UCS2.bcmap
new file mode 100644
index 0000000..f3371c0
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Adobe-Korea1-UCS2.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/B5-H.bcmap
new file mode 100644
index 0000000..beb4d22
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/B5-V.bcmap
new file mode 100644
index 0000000..2d4f87d
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/B5pc-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/B5pc-H.bcmap
new file mode 100644
index 0000000..ce00131
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/B5pc-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/B5pc-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/B5pc-V.bcmap
new file mode 100644
index 0000000..73b99ff
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/B5pc-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/CNS-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/CNS-EUC-H.bcmap
new file mode 100644
index 0000000..61d1d0c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/CNS-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/CNS-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/CNS-EUC-V.bcmap
new file mode 100644
index 0000000..1a393a5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/CNS-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/CNS1-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/CNS1-H.bcmap
new file mode 100644
index 0000000..f738e21
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/CNS1-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/CNS1-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/CNS1-V.bcmap
new file mode 100644
index 0000000..9c3169f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/CNS1-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/CNS2-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/CNS2-H.bcmap
new file mode 100644
index 0000000..c89b352
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/CNS2-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/CNS2-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/CNS2-V.bcmap
new file mode 100644
index 0000000..7588cec
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/bcmaps/CNS2-V.bcmap
@@ -0,0 +1,3 @@
+RCopyright 1990-2009 Adobe Systems Incorporated.
+All rights reserved.
+See ./LICENSECNS2-H
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/ETHK-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/ETHK-B5-H.bcmap
new file mode 100644
index 0000000..cb29415
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/ETHK-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/ETHK-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/ETHK-B5-V.bcmap
new file mode 100644
index 0000000..f09aec6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/ETHK-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/ETen-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/ETen-B5-H.bcmap
new file mode 100644
index 0000000..c2d7746
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/ETen-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/ETen-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/ETen-B5-V.bcmap
new file mode 100644
index 0000000..89bff15
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/ETen-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/ETenms-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/ETenms-B5-H.bcmap
new file mode 100644
index 0000000..a7d69db
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/bcmaps/ETenms-B5-H.bcmap
@@ -0,0 +1,3 @@
+RCopyright 1990-2009 Adobe Systems Incorporated.
+All rights reserved.
+See ./LICENSE ETen-B5-H` ^
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/ETenms-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/ETenms-B5-V.bcmap
new file mode 100644
index 0000000..adc5d61
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/ETenms-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/EUC-H.bcmap
new file mode 100644
index 0000000..e92ea5b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/EUC-V.bcmap
new file mode 100644
index 0000000..7a7c183
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Ext-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Ext-H.bcmap
new file mode 100644
index 0000000..3b5cde4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Ext-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Ext-RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Ext-RKSJ-H.bcmap
new file mode 100644
index 0000000..ea4d2d9
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Ext-RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Ext-RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Ext-RKSJ-V.bcmap
new file mode 100644
index 0000000..3457c27
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Ext-RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Ext-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Ext-V.bcmap
new file mode 100644
index 0000000..4999ca4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Ext-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GB-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GB-EUC-H.bcmap
new file mode 100644
index 0000000..e39908b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GB-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GB-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GB-EUC-V.bcmap
new file mode 100644
index 0000000..d5be544
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GB-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GB-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GB-H.bcmap
new file mode 100644
index 0000000..39189c5
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/bcmaps/GB-H.bcmap
@@ -0,0 +1,4 @@
+RCopyright 1990-2009 Adobe Systems Incorporated.
+All rights reserved.
+See ./LICENSE!!]aX!!]`21> pz$]"Rd-U7*
4%+ Z {/%<9Kb1]."`],"]
+"]h"]F"]$"]"]`"]>"]"]z"]X"]6"]"]r"]P"]."]"]j"]H"]&"]"]b"]@"]"]|"]Z"]8"]"]t"]R"]0"]"]l"]J"]("]"]d"]B"] "X~']W"]5"]"]q"]O"]-"]"]i"]G"]%"]"]a"]?"]"]{"]Y"]7"]"]s"]Q"]/"]
"]k"]I"]'"]"]c"]A"]"]}"]["]9
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GB-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GB-V.bcmap
new file mode 100644
index 0000000..3108345
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GB-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBK-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBK-EUC-H.bcmap
new file mode 100644
index 0000000..05fff7e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBK-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBK-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBK-EUC-V.bcmap
new file mode 100644
index 0000000..0cdf6be
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBK-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBK2K-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBK2K-H.bcmap
new file mode 100644
index 0000000..46f6ba5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBK2K-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBK2K-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBK2K-V.bcmap
new file mode 100644
index 0000000..d9a9479
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBK2K-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBKp-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBKp-EUC-H.bcmap
new file mode 100644
index 0000000..5cb0af6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBKp-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBKp-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBKp-EUC-V.bcmap
new file mode 100644
index 0000000..bca93b8
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBKp-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBT-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBT-EUC-H.bcmap
new file mode 100644
index 0000000..4b4e2d3
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBT-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBT-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBT-EUC-V.bcmap
new file mode 100644
index 0000000..38f7066
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBT-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBT-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBT-H.bcmap
new file mode 100644
index 0000000..8437ac3
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBT-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBT-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBT-V.bcmap
new file mode 100644
index 0000000..697ab4a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBT-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBTpc-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBTpc-EUC-H.bcmap
new file mode 100644
index 0000000..f6e50e8
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBTpc-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBTpc-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBTpc-EUC-V.bcmap
new file mode 100644
index 0000000..6c0d71a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBTpc-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBpc-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBpc-EUC-H.bcmap
new file mode 100644
index 0000000..c9edf67
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBpc-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/GBpc-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/GBpc-EUC-V.bcmap
new file mode 100644
index 0000000..31450c9
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/GBpc-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/H.bcmap
new file mode 100644
index 0000000..7b24ea4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKdla-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKdla-B5-H.bcmap
new file mode 100644
index 0000000..7d30c05
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKdla-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKdla-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKdla-B5-V.bcmap
new file mode 100644
index 0000000..7894694
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKdla-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKdlb-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKdlb-B5-H.bcmap
new file mode 100644
index 0000000..d829a23
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKdlb-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKdlb-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKdlb-B5-V.bcmap
new file mode 100644
index 0000000..2b572b5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKdlb-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKgccs-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKgccs-B5-H.bcmap
new file mode 100644
index 0000000..971a4f2
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKgccs-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKgccs-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKgccs-B5-V.bcmap
new file mode 100644
index 0000000..d353ca2
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKgccs-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKm314-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKm314-B5-H.bcmap
new file mode 100644
index 0000000..576dc01
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKm314-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKm314-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKm314-B5-V.bcmap
new file mode 100644
index 0000000..0e96d0e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKm314-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKm471-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKm471-B5-H.bcmap
new file mode 100644
index 0000000..11d170c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKm471-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKm471-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKm471-B5-V.bcmap
new file mode 100644
index 0000000..54959bf
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKm471-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKscs-B5-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKscs-B5-H.bcmap
new file mode 100644
index 0000000..6ef7857
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKscs-B5-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/HKscs-B5-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/HKscs-B5-V.bcmap
new file mode 100644
index 0000000..1fb2fa2
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/HKscs-B5-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Hankaku.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Hankaku.bcmap
new file mode 100644
index 0000000..4b8ec7f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Hankaku.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Hiragana.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Hiragana.bcmap
new file mode 100644
index 0000000..17e983e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Hiragana.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSC-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSC-EUC-H.bcmap
new file mode 100644
index 0000000..a45c65f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSC-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSC-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSC-EUC-V.bcmap
new file mode 100644
index 0000000..0e7b21f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSC-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSC-H.bcmap
new file mode 100644
index 0000000..b9b22b6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSC-Johab-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSC-Johab-H.bcmap
new file mode 100644
index 0000000..2531ffc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSC-Johab-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSC-Johab-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSC-Johab-V.bcmap
new file mode 100644
index 0000000..367ceb2
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSC-Johab-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSC-V.bcmap
new file mode 100644
index 0000000..6ae2f0b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-H.bcmap
new file mode 100644
index 0000000..a8d4240
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-HW-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-HW-H.bcmap
new file mode 100644
index 0000000..8b4ae18
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-HW-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-HW-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-HW-V.bcmap
new file mode 100644
index 0000000..b655dbc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-HW-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-V.bcmap
new file mode 100644
index 0000000..21f97f6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSCms-UHC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSCpc-EUC-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSCpc-EUC-H.bcmap
new file mode 100644
index 0000000..e06f361
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSCpc-EUC-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/KSCpc-EUC-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/KSCpc-EUC-V.bcmap
new file mode 100644
index 0000000..f3c9113
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/KSCpc-EUC-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Katakana.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Katakana.bcmap
new file mode 100644
index 0000000..524303c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Katakana.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/LICENSE b/app/assets/javascripts/publications/pdf/bcmaps/LICENSE
new file mode 100644
index 0000000..b1ad168
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/bcmaps/LICENSE
@@ -0,0 +1,36 @@
+%%Copyright: -----------------------------------------------------------
+%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated.
+%%Copyright: All rights reserved.
+%%Copyright:
+%%Copyright: Redistribution and use in source and binary forms, with or
+%%Copyright: without modification, are permitted provided that the
+%%Copyright: following conditions are met:
+%%Copyright:
+%%Copyright: Redistributions of source code must retain the above
+%%Copyright: copyright notice, this list of conditions and the following
+%%Copyright: disclaimer.
+%%Copyright:
+%%Copyright: Redistributions in binary form must reproduce the above
+%%Copyright: copyright notice, this list of conditions and the following
+%%Copyright: disclaimer in the documentation and/or other materials
+%%Copyright: provided with the distribution.
+%%Copyright:
+%%Copyright: Neither the name of Adobe Systems Incorporated nor the names
+%%Copyright: of its contributors may be used to endorse or promote
+%%Copyright: products derived from this software without specific prior
+%%Copyright: written permission.
+%%Copyright:
+%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+%%Copyright: -----------------------------------------------------------
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/NWP-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/NWP-H.bcmap
new file mode 100644
index 0000000..afc5e4b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/NWP-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/NWP-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/NWP-V.bcmap
new file mode 100644
index 0000000..bb5785e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/NWP-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/RKSJ-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/RKSJ-H.bcmap
new file mode 100644
index 0000000..fb8d298
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/RKSJ-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/RKSJ-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/RKSJ-V.bcmap
new file mode 100644
index 0000000..a2555a6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/RKSJ-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/Roman.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/Roman.bcmap
new file mode 100644
index 0000000..f896dcf
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/Roman.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UCS2-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UCS2-H.bcmap
new file mode 100644
index 0000000..d5db27c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UCS2-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UCS2-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UCS2-V.bcmap
new file mode 100644
index 0000000..1dc9b7a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UCS2-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF16-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF16-H.bcmap
new file mode 100644
index 0000000..961afef
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF16-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF16-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF16-V.bcmap
new file mode 100644
index 0000000..df0cffe
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF16-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF32-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF32-H.bcmap
new file mode 100644
index 0000000..1ab18a1
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF32-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF32-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF32-V.bcmap
new file mode 100644
index 0000000..ad14662
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF32-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF8-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF8-H.bcmap
new file mode 100644
index 0000000..83c6bd7
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF8-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF8-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF8-V.bcmap
new file mode 100644
index 0000000..22a27e4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniCNS-UTF8-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UCS2-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UCS2-H.bcmap
new file mode 100644
index 0000000..5bd6228
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UCS2-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UCS2-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UCS2-V.bcmap
new file mode 100644
index 0000000..53c534b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UCS2-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF16-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF16-H.bcmap
new file mode 100644
index 0000000..b95045b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF16-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF16-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF16-V.bcmap
new file mode 100644
index 0000000..51f023e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF16-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF32-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF32-H.bcmap
new file mode 100644
index 0000000..f0dbd14
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF32-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF32-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF32-V.bcmap
new file mode 100644
index 0000000..ce9c30a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF32-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF8-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF8-H.bcmap
new file mode 100644
index 0000000..982ca46
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF8-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF8-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF8-V.bcmap
new file mode 100644
index 0000000..f78020d
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniGB-UTF8-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-H.bcmap
new file mode 100644
index 0000000..7daf56a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-HW-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-HW-H.bcmap
new file mode 100644
index 0000000..ac9975c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-HW-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-HW-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-HW-V.bcmap
new file mode 100644
index 0000000..3da0a1c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-HW-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-V.bcmap
new file mode 100644
index 0000000..c50b9dd
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UCS2-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF16-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF16-H.bcmap
new file mode 100644
index 0000000..6761344
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF16-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF16-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF16-V.bcmap
new file mode 100644
index 0000000..70bf90c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF16-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF32-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF32-H.bcmap
new file mode 100644
index 0000000..7a83d53
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF32-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF32-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF32-V.bcmap
new file mode 100644
index 0000000..7a87135
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF32-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF8-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF8-H.bcmap
new file mode 100644
index 0000000..9f0334c
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF8-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF8-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF8-V.bcmap
new file mode 100644
index 0000000..808a94f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS-UTF8-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF16-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF16-H.bcmap
new file mode 100644
index 0000000..d768bf8
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF16-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF16-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF16-V.bcmap
new file mode 100644
index 0000000..3d5bf6f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF16-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF32-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF32-H.bcmap
new file mode 100644
index 0000000..09eee10
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF32-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF32-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF32-V.bcmap
new file mode 100644
index 0000000..6c54600
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF32-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF8-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF8-H.bcmap
new file mode 100644
index 0000000..1b1a64f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF8-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF8-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF8-V.bcmap
new file mode 100644
index 0000000..994aa9e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJIS2004-UTF8-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UCS2-HW-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UCS2-HW-V.bcmap
new file mode 100644
index 0000000..643f921
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UCS2-HW-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UCS2-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UCS2-V.bcmap
new file mode 100644
index 0000000..c148f67
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UCS2-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UTF8-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UTF8-V.bcmap
new file mode 100644
index 0000000..1849d80
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJISPro-UTF8-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJISX0213-UTF32-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX0213-UTF32-H.bcmap
new file mode 100644
index 0000000..a83a677
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX0213-UTF32-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJISX0213-UTF32-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX0213-UTF32-V.bcmap
new file mode 100644
index 0000000..f527248
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX0213-UTF32-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJISX02132004-UTF32-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX02132004-UTF32-H.bcmap
new file mode 100644
index 0000000..e1a988d
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX02132004-UTF32-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniJISX02132004-UTF32-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX02132004-UTF32-V.bcmap
new file mode 100644
index 0000000..47e054a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniJISX02132004-UTF32-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UCS2-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UCS2-H.bcmap
new file mode 100644
index 0000000..b5b9485
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UCS2-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UCS2-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UCS2-V.bcmap
new file mode 100644
index 0000000..026adca
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UCS2-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF16-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF16-H.bcmap
new file mode 100644
index 0000000..fd4e66e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF16-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF16-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF16-V.bcmap
new file mode 100644
index 0000000..075efb7
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF16-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF32-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF32-H.bcmap
new file mode 100644
index 0000000..769d214
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF32-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF32-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF32-V.bcmap
new file mode 100644
index 0000000..bdab208
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF32-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF8-H.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF8-H.bcmap
new file mode 100644
index 0000000..6ff8674
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF8-H.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF8-V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF8-V.bcmap
new file mode 100644
index 0000000..8dfa76a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/UniKS-UTF8-V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/V.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/V.bcmap
new file mode 100644
index 0000000..fdec990
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/V.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/bcmaps/WP-Symbol.bcmap b/app/assets/javascripts/publications/pdf/bcmaps/WP-Symbol.bcmap
new file mode 100644
index 0000000..46729bb
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/bcmaps/WP-Symbol.bcmap differ
diff --git a/app/assets/javascripts/publications/pdf/compressed.tracemonkey-pldi-09.pdf b/app/assets/javascripts/publications/pdf/compressed.tracemonkey-pldi-09.pdf
new file mode 100644
index 0000000..6557018
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/compressed.tracemonkey-pldi-09.pdf differ
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-check.svg b/app/assets/javascripts/publications/pdf/images/annotation-check.svg
new file mode 100644
index 0000000..71cd16d
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-check.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-comment.svg b/app/assets/javascripts/publications/pdf/images/annotation-comment.svg
new file mode 100644
index 0000000..86f1f17
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-comment.svg
@@ -0,0 +1,16 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-help.svg b/app/assets/javascripts/publications/pdf/images/annotation-help.svg
new file mode 100644
index 0000000..00938fe
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-help.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-insert.svg b/app/assets/javascripts/publications/pdf/images/annotation-insert.svg
new file mode 100644
index 0000000..519ef68
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-insert.svg
@@ -0,0 +1,10 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-key.svg b/app/assets/javascripts/publications/pdf/images/annotation-key.svg
new file mode 100644
index 0000000..8d09d53
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-key.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-newparagraph.svg b/app/assets/javascripts/publications/pdf/images/annotation-newparagraph.svg
new file mode 100644
index 0000000..38d2497
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-newparagraph.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-noicon.svg b/app/assets/javascripts/publications/pdf/images/annotation-noicon.svg
new file mode 100644
index 0000000..c07d108
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-noicon.svg
@@ -0,0 +1,7 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-note.svg b/app/assets/javascripts/publications/pdf/images/annotation-note.svg
new file mode 100644
index 0000000..7017365
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-note.svg
@@ -0,0 +1,42 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/annotation-paragraph.svg b/app/assets/javascripts/publications/pdf/images/annotation-paragraph.svg
new file mode 100644
index 0000000..6ae5212
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/annotation-paragraph.svg
@@ -0,0 +1,16 @@
+
+
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-next-rtl.png b/app/assets/javascripts/publications/pdf/images/findbarButton-next-rtl.png
new file mode 100644
index 0000000..bef0274
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-next-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-next-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/findbarButton-next-rtl@2x.png
new file mode 100644
index 0000000..1da6dc9
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-next-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-next.png b/app/assets/javascripts/publications/pdf/images/findbarButton-next.png
new file mode 100644
index 0000000..de1d0fc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-next.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-next.svg b/app/assets/javascripts/publications/pdf/images/findbarButton-next.svg
new file mode 100644
index 0000000..a81eb02
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/findbarButton-next.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-next@2x.png b/app/assets/javascripts/publications/pdf/images/findbarButton-next@2x.png
new file mode 100644
index 0000000..0250307
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-next@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-previous-rtl.png b/app/assets/javascripts/publications/pdf/images/findbarButton-previous-rtl.png
new file mode 100644
index 0000000..de1d0fc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-previous-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-previous-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/findbarButton-previous-rtl@2x.png
new file mode 100644
index 0000000..0250307
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-previous-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-previous.png b/app/assets/javascripts/publications/pdf/images/findbarButton-previous.png
new file mode 100644
index 0000000..bef0274
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-previous.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-previous.svg b/app/assets/javascripts/publications/pdf/images/findbarButton-previous.svg
new file mode 100644
index 0000000..5fd7032
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/findbarButton-previous.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/findbarButton-previous@2x.png b/app/assets/javascripts/publications/pdf/images/findbarButton-previous@2x.png
new file mode 100644
index 0000000..1da6dc9
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/findbarButton-previous@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/grab.cur b/app/assets/javascripts/publications/pdf/images/grab.cur
new file mode 100644
index 0000000..db7ad5a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/grab.cur differ
diff --git a/app/assets/javascripts/publications/pdf/images/grabbing.cur b/app/assets/javascripts/publications/pdf/images/grabbing.cur
new file mode 100644
index 0000000..e0dfd04
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/grabbing.cur differ
diff --git a/app/assets/javascripts/publications/pdf/images/loading-dark.svg b/app/assets/javascripts/publications/pdf/images/loading-dark.svg
new file mode 100644
index 0000000..fa5269b
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/loading-dark.svg
@@ -0,0 +1,24 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/loading-icon.gif b/app/assets/javascripts/publications/pdf/images/loading-icon.gif
new file mode 100644
index 0000000..1c72ebb
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/loading-icon.gif differ
diff --git a/app/assets/javascripts/publications/pdf/images/loading-small.png b/app/assets/javascripts/publications/pdf/images/loading-small.png
new file mode 100644
index 0000000..8831a80
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/loading-small.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/loading-small@2x.png b/app/assets/javascripts/publications/pdf/images/loading-small@2x.png
new file mode 100644
index 0000000..b25b445
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/loading-small@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/loading.svg b/app/assets/javascripts/publications/pdf/images/loading.svg
new file mode 100644
index 0000000..0a15ff6
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/loading.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties.png
new file mode 100644
index 0000000..40925e2
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties.svg
new file mode 100644
index 0000000..6bd55cd
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties@2x.png
new file mode 100644
index 0000000..adb240e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-documentProperties@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage.png
new file mode 100644
index 0000000..e68846a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage.svg
new file mode 100644
index 0000000..2fa0fa6
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage@2x.png
new file mode 100644
index 0000000..3ad8af5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-firstPage@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool.png
new file mode 100644
index 0000000..cb85a84
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool.svg
new file mode 100644
index 0000000..3d038fa
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool@2x.png
new file mode 100644
index 0000000..5c13f77
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-handTool@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage.png
new file mode 100644
index 0000000..be763e0
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage.svg
new file mode 100644
index 0000000..53fa9a6
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage@2x.png
new file mode 100644
index 0000000..8570984
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-lastPage@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw.png
new file mode 100644
index 0000000..675d6da
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw.svg
new file mode 100644
index 0000000..c71ea8e
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw@2x.png
new file mode 100644
index 0000000..b9e7431
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCcw@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw.png
new file mode 100644
index 0000000..e1c7598
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw.svg
new file mode 100644
index 0000000..e1e19e7
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw@2x.png
new file mode 100644
index 0000000..cb257b4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-rotateCw@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal.png
new file mode 100644
index 0000000..cb702fc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal.svg
new file mode 100644
index 0000000..8693eec
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal@2x.png
new file mode 100644
index 0000000..7f05289
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollHorizontal@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollPage.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollPage.svg
new file mode 100644
index 0000000..bea2f0d
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollPage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical.png
new file mode 100644
index 0000000..0b8427a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical.svg
new file mode 100644
index 0000000..ee1cf22
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical@2x.png
new file mode 100644
index 0000000..72ab55e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollVertical@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped.png
new file mode 100644
index 0000000..165fc8b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped.svg
new file mode 100644
index 0000000..804e746
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped@2x.png
new file mode 100644
index 0000000..4246141
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-scrollWrapped@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool.png
new file mode 100644
index 0000000..25520a6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool.svg
new file mode 100644
index 0000000..43e9789
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool@2x.png
new file mode 100644
index 0000000..a58aaef
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-selectTool@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven.png
new file mode 100644
index 0000000..3fa07e7
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven.svg
new file mode 100644
index 0000000..ddec5e6
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven@2x.png
new file mode 100644
index 0000000..32e5033
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadEven@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone.png
new file mode 100644
index 0000000..1611473
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone.svg
new file mode 100644
index 0000000..63318c5
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone@2x.png
new file mode 100644
index 0000000..8e51cf3
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadNone@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd.png
new file mode 100644
index 0000000..5126313
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd.svg b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd.svg
new file mode 100644
index 0000000..29909e9
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd@2x.png b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd@2x.png
new file mode 100644
index 0000000..5996b74
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/secondaryToolbarButton-spreadOdd@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/shadow.png b/app/assets/javascripts/publications/pdf/images/shadow.png
new file mode 100644
index 0000000..a00061a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/shadow.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/texture.png b/app/assets/javascripts/publications/pdf/images/texture.png
new file mode 100644
index 0000000..12bae83
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/texture.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark.png
new file mode 100644
index 0000000..a187be6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark.svg
new file mode 100644
index 0000000..79d39b0
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark@2x.png
new file mode 100644
index 0000000..4efbaa6
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-bookmark@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-currentOutlineItem.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-currentOutlineItem.svg
new file mode 100644
index 0000000..c1c72b2
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-currentOutlineItem.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-download.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-download.png
new file mode 100644
index 0000000..eaab35f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-download.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-download.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-download.svg
new file mode 100644
index 0000000..2cdb5db
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-download.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-download@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-download@2x.png
new file mode 100644
index 0000000..896face
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-download@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrow.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrow.svg
new file mode 100644
index 0000000..46e41e1
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrows.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrows.png
new file mode 100644
index 0000000..e50ca4e
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrows.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrows@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrows@2x.png
new file mode 100644
index 0000000..f7570bc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-menuArrows@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile.png
new file mode 100644
index 0000000..b5cf1bd
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile.svg
new file mode 100644
index 0000000..cb35980
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile@2x.png
new file mode 100644
index 0000000..91ab765
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-openFile@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown-rtl.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown-rtl.png
new file mode 100644
index 0000000..1957f79
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown-rtl@2x.png
new file mode 100644
index 0000000..16ebcb8
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown.png
new file mode 100644
index 0000000..8219ecf
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown.svg
new file mode 100644
index 0000000..c5d8b0f
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown@2x.png
new file mode 100644
index 0000000..758c01d
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageDown@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp-rtl.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp-rtl.png
new file mode 100644
index 0000000..98e7ce4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp-rtl@2x.png
new file mode 100644
index 0000000..a01b023
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp.png
new file mode 100644
index 0000000..fb9daa3
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp.svg
new file mode 100644
index 0000000..aa0160a
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp@2x.png
new file mode 100644
index 0000000..a5cfd75
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-pageUp@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode.png
new file mode 100644
index 0000000..3ac2124
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode.svg
new file mode 100644
index 0000000..3f1f832
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode@2x.png
new file mode 100644
index 0000000..cada9e7
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-presentationMode@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-print.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-print.png
new file mode 100644
index 0000000..51275e5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-print.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-print.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-print.svg
new file mode 100644
index 0000000..d521c9a
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-print.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-print@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-print@2x.png
new file mode 100644
index 0000000..53d18da
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-print@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-search.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-search.png
new file mode 100644
index 0000000..f9b7557
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-search.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-search.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-search.svg
new file mode 100644
index 0000000..28b7774
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-search.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-search@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-search@2x.png
new file mode 100644
index 0000000..456b133
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-search@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle-rtl.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle-rtl.png
new file mode 100644
index 0000000..8437095
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png
new file mode 100644
index 0000000..9d9bfa4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle.png
new file mode 100644
index 0000000..1f90f83
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle.svg
new file mode 100644
index 0000000..dbef238
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle@2x.png
new file mode 100644
index 0000000..b066fe5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-secondaryToolbarToggle@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle-rtl.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle-rtl.png
new file mode 100644
index 0000000..6f85ec0
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle-rtl@2x.png
new file mode 100644
index 0000000..291e006
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle.png
new file mode 100644
index 0000000..025dc90
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle.svg
new file mode 100644
index 0000000..691c41c
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle@2x.png
new file mode 100644
index 0000000..7f834df
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-sidebarToggle@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments.png
new file mode 100644
index 0000000..fcd0b26
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments.svg
new file mode 100644
index 0000000..e914ec0
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments@2x.png
new file mode 100644
index 0000000..4a5e2b8
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewAttachments@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewLayers.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewLayers.svg
new file mode 100644
index 0000000..e8687b7
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewLayers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline-rtl.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline-rtl.png
new file mode 100644
index 0000000..aaa9430
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline-rtl@2x.png
new file mode 100644
index 0000000..3410f70
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline.png
new file mode 100644
index 0000000..976365a
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline.svg
new file mode 100644
index 0000000..030c28d
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline@2x.png
new file mode 100644
index 0000000..b6a197f
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewOutline@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail.png
new file mode 100644
index 0000000..584ba55
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail.svg
new file mode 100644
index 0000000..b997ec4
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail@2x.png
new file mode 100644
index 0000000..a0208b4
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-viewThumbnail@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn.png
new file mode 100644
index 0000000..513d081
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn.svg
new file mode 100644
index 0000000..480d2ce
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn@2x.png
new file mode 100644
index 0000000..d5d49d5
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomIn@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut.png
new file mode 100644
index 0000000..156c26b
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut.svg b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut.svg
new file mode 100644
index 0000000..527f521
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut@2x.png b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut@2x.png
new file mode 100644
index 0000000..959e191
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/toolbarButton-zoomOut@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-collapsed-rtl.png b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed-rtl.png
new file mode 100644
index 0000000..0496b35
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed-rtl.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-collapsed-rtl@2x.png b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed-rtl@2x.png
new file mode 100644
index 0000000..6ad9ebc
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed-rtl@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-collapsed.png b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed.png
new file mode 100644
index 0000000..06d4d37
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-collapsed.svg b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed.svg
new file mode 100644
index 0000000..831cddf
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-collapsed@2x.png b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed@2x.png
new file mode 100644
index 0000000..eec1e58
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/treeitem-collapsed@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-expanded.png b/app/assets/javascripts/publications/pdf/images/treeitem-expanded.png
new file mode 100644
index 0000000..c8d5573
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/treeitem-expanded.png differ
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-expanded.svg b/app/assets/javascripts/publications/pdf/images/treeitem-expanded.svg
new file mode 100644
index 0000000..2d45f0c
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/images/treeitem-expanded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/images/treeitem-expanded@2x.png b/app/assets/javascripts/publications/pdf/images/treeitem-expanded@2x.png
new file mode 100644
index 0000000..3b3b610
Binary files /dev/null and b/app/assets/javascripts/publications/pdf/images/treeitem-expanded@2x.png differ
diff --git a/app/assets/javascripts/publications/pdf/pdf.js b/app/assets/javascripts/publications/pdf/pdf.js
new file mode 100644
index 0000000..1e0433e
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/pdf.js
@@ -0,0 +1,24493 @@
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2022 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @licend The above is the entire license notice for the
+ * Javascript code in this page
+ */
+
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define("pdfjs-dist/build/pdf", [], factory);
+ else if(typeof exports === 'object')
+ exports["pdfjs-dist/build/pdf"] = factory();
+ else
+ root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
+})(this, function() {
+return /******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ([
+/* 0 */,
+/* 1 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
+exports.arrayByteLength = arrayByteLength;
+exports.arraysToBytes = arraysToBytes;
+exports.assert = assert;
+exports.bytesToString = bytesToString;
+exports.createPromiseCapability = createPromiseCapability;
+exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
+exports.escapeString = escapeString;
+exports.getModificationDate = getModificationDate;
+exports.getVerbosityLevel = getVerbosityLevel;
+exports.info = info;
+exports.isArrayBuffer = isArrayBuffer;
+exports.isArrayEqual = isArrayEqual;
+exports.isAscii = isAscii;
+exports.isSameOrigin = isSameOrigin;
+exports.objectFromMap = objectFromMap;
+exports.objectSize = objectSize;
+exports.setVerbosityLevel = setVerbosityLevel;
+exports.shadow = shadow;
+exports.string32 = string32;
+exports.stringToBytes = stringToBytes;
+exports.stringToPDFString = stringToPDFString;
+exports.stringToUTF16BEString = stringToUTF16BEString;
+exports.stringToUTF8String = stringToUTF8String;
+exports.unreachable = unreachable;
+exports.utf8StringToString = utf8StringToString;
+exports.warn = warn;
+
+__w_pdfjs_require__(2);
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
+var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
+var RenderingIntentFlag = {
+ ANY: 0x01,
+ DISPLAY: 0x02,
+ PRINT: 0x04,
+ ANNOTATIONS_FORMS: 0x10,
+ ANNOTATIONS_STORAGE: 0x20,
+ ANNOTATIONS_DISABLE: 0x40,
+ OPLIST: 0x100
+};
+exports.RenderingIntentFlag = RenderingIntentFlag;
+var AnnotationMode = {
+ DISABLE: 0,
+ ENABLE: 1,
+ ENABLE_FORMS: 2,
+ ENABLE_STORAGE: 3
+};
+exports.AnnotationMode = AnnotationMode;
+var PermissionFlag = {
+ PRINT: 0x04,
+ MODIFY_CONTENTS: 0x08,
+ COPY: 0x10,
+ MODIFY_ANNOTATIONS: 0x20,
+ FILL_INTERACTIVE_FORMS: 0x100,
+ COPY_FOR_ACCESSIBILITY: 0x200,
+ ASSEMBLE: 0x400,
+ PRINT_HIGH_QUALITY: 0x800
+};
+exports.PermissionFlag = PermissionFlag;
+var TextRenderingMode = {
+ FILL: 0,
+ STROKE: 1,
+ FILL_STROKE: 2,
+ INVISIBLE: 3,
+ FILL_ADD_TO_PATH: 4,
+ STROKE_ADD_TO_PATH: 5,
+ FILL_STROKE_ADD_TO_PATH: 6,
+ ADD_TO_PATH: 7,
+ FILL_STROKE_MASK: 3,
+ ADD_TO_PATH_FLAG: 4
+};
+exports.TextRenderingMode = TextRenderingMode;
+var ImageKind = {
+ GRAYSCALE_1BPP: 1,
+ RGB_24BPP: 2,
+ RGBA_32BPP: 3
+};
+exports.ImageKind = ImageKind;
+var AnnotationType = {
+ TEXT: 1,
+ LINK: 2,
+ FREETEXT: 3,
+ LINE: 4,
+ SQUARE: 5,
+ CIRCLE: 6,
+ POLYGON: 7,
+ POLYLINE: 8,
+ HIGHLIGHT: 9,
+ UNDERLINE: 10,
+ SQUIGGLY: 11,
+ STRIKEOUT: 12,
+ STAMP: 13,
+ CARET: 14,
+ INK: 15,
+ POPUP: 16,
+ FILEATTACHMENT: 17,
+ SOUND: 18,
+ MOVIE: 19,
+ WIDGET: 20,
+ SCREEN: 21,
+ PRINTERMARK: 22,
+ TRAPNET: 23,
+ WATERMARK: 24,
+ THREED: 25,
+ REDACT: 26
+};
+exports.AnnotationType = AnnotationType;
+var AnnotationStateModelType = {
+ MARKED: "Marked",
+ REVIEW: "Review"
+};
+exports.AnnotationStateModelType = AnnotationStateModelType;
+var AnnotationMarkedState = {
+ MARKED: "Marked",
+ UNMARKED: "Unmarked"
+};
+exports.AnnotationMarkedState = AnnotationMarkedState;
+var AnnotationReviewState = {
+ ACCEPTED: "Accepted",
+ REJECTED: "Rejected",
+ CANCELLED: "Cancelled",
+ COMPLETED: "Completed",
+ NONE: "None"
+};
+exports.AnnotationReviewState = AnnotationReviewState;
+var AnnotationReplyType = {
+ GROUP: "Group",
+ REPLY: "R"
+};
+exports.AnnotationReplyType = AnnotationReplyType;
+var AnnotationFlag = {
+ INVISIBLE: 0x01,
+ HIDDEN: 0x02,
+ PRINT: 0x04,
+ NOZOOM: 0x08,
+ NOROTATE: 0x10,
+ NOVIEW: 0x20,
+ READONLY: 0x40,
+ LOCKED: 0x80,
+ TOGGLENOVIEW: 0x100,
+ LOCKEDCONTENTS: 0x200
+};
+exports.AnnotationFlag = AnnotationFlag;
+var AnnotationFieldFlag = {
+ READONLY: 0x0000001,
+ REQUIRED: 0x0000002,
+ NOEXPORT: 0x0000004,
+ MULTILINE: 0x0001000,
+ PASSWORD: 0x0002000,
+ NOTOGGLETOOFF: 0x0004000,
+ RADIO: 0x0008000,
+ PUSHBUTTON: 0x0010000,
+ COMBO: 0x0020000,
+ EDIT: 0x0040000,
+ SORT: 0x0080000,
+ FILESELECT: 0x0100000,
+ MULTISELECT: 0x0200000,
+ DONOTSPELLCHECK: 0x0400000,
+ DONOTSCROLL: 0x0800000,
+ COMB: 0x1000000,
+ RICHTEXT: 0x2000000,
+ RADIOSINUNISON: 0x2000000,
+ COMMITONSELCHANGE: 0x4000000
+};
+exports.AnnotationFieldFlag = AnnotationFieldFlag;
+var AnnotationBorderStyleType = {
+ SOLID: 1,
+ DASHED: 2,
+ BEVELED: 3,
+ INSET: 4,
+ UNDERLINE: 5
+};
+exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
+var AnnotationActionEventType = {
+ E: "Mouse Enter",
+ X: "Mouse Exit",
+ D: "Mouse Down",
+ U: "Mouse Up",
+ Fo: "Focus",
+ Bl: "Blur",
+ PO: "PageOpen",
+ PC: "PageClose",
+ PV: "PageVisible",
+ PI: "PageInvisible",
+ K: "Keystroke",
+ F: "Format",
+ V: "Validate",
+ C: "Calculate"
+};
+exports.AnnotationActionEventType = AnnotationActionEventType;
+var DocumentActionEventType = {
+ WC: "WillClose",
+ WS: "WillSave",
+ DS: "DidSave",
+ WP: "WillPrint",
+ DP: "DidPrint"
+};
+exports.DocumentActionEventType = DocumentActionEventType;
+var PageActionEventType = {
+ O: "PageOpen",
+ C: "PageClose"
+};
+exports.PageActionEventType = PageActionEventType;
+var StreamType = {
+ UNKNOWN: "UNKNOWN",
+ FLATE: "FLATE",
+ LZW: "LZW",
+ DCT: "DCT",
+ JPX: "JPX",
+ JBIG: "JBIG",
+ A85: "A85",
+ AHX: "AHX",
+ CCF: "CCF",
+ RLX: "RLX"
+};
+exports.StreamType = StreamType;
+var FontType = {
+ UNKNOWN: "UNKNOWN",
+ TYPE1: "TYPE1",
+ TYPE1STANDARD: "TYPE1STANDARD",
+ TYPE1C: "TYPE1C",
+ CIDFONTTYPE0: "CIDFONTTYPE0",
+ CIDFONTTYPE0C: "CIDFONTTYPE0C",
+ TRUETYPE: "TRUETYPE",
+ CIDFONTTYPE2: "CIDFONTTYPE2",
+ TYPE3: "TYPE3",
+ OPENTYPE: "OPENTYPE",
+ TYPE0: "TYPE0",
+ MMTYPE1: "MMTYPE1"
+};
+exports.FontType = FontType;
+var VerbosityLevel = {
+ ERRORS: 0,
+ WARNINGS: 1,
+ INFOS: 5
+};
+exports.VerbosityLevel = VerbosityLevel;
+var CMapCompressionType = {
+ NONE: 0,
+ BINARY: 1,
+ STREAM: 2
+};
+exports.CMapCompressionType = CMapCompressionType;
+var OPS = {
+ dependency: 1,
+ setLineWidth: 2,
+ setLineCap: 3,
+ setLineJoin: 4,
+ setMiterLimit: 5,
+ setDash: 6,
+ setRenderingIntent: 7,
+ setFlatness: 8,
+ setGState: 9,
+ save: 10,
+ restore: 11,
+ transform: 12,
+ moveTo: 13,
+ lineTo: 14,
+ curveTo: 15,
+ curveTo2: 16,
+ curveTo3: 17,
+ closePath: 18,
+ rectangle: 19,
+ stroke: 20,
+ closeStroke: 21,
+ fill: 22,
+ eoFill: 23,
+ fillStroke: 24,
+ eoFillStroke: 25,
+ closeFillStroke: 26,
+ closeEOFillStroke: 27,
+ endPath: 28,
+ clip: 29,
+ eoClip: 30,
+ beginText: 31,
+ endText: 32,
+ setCharSpacing: 33,
+ setWordSpacing: 34,
+ setHScale: 35,
+ setLeading: 36,
+ setFont: 37,
+ setTextRenderingMode: 38,
+ setTextRise: 39,
+ moveText: 40,
+ setLeadingMoveText: 41,
+ setTextMatrix: 42,
+ nextLine: 43,
+ showText: 44,
+ showSpacedText: 45,
+ nextLineShowText: 46,
+ nextLineSetSpacingShowText: 47,
+ setCharWidth: 48,
+ setCharWidthAndBounds: 49,
+ setStrokeColorSpace: 50,
+ setFillColorSpace: 51,
+ setStrokeColor: 52,
+ setStrokeColorN: 53,
+ setFillColor: 54,
+ setFillColorN: 55,
+ setStrokeGray: 56,
+ setFillGray: 57,
+ setStrokeRGBColor: 58,
+ setFillRGBColor: 59,
+ setStrokeCMYKColor: 60,
+ setFillCMYKColor: 61,
+ shadingFill: 62,
+ beginInlineImage: 63,
+ beginImageData: 64,
+ endInlineImage: 65,
+ paintXObject: 66,
+ markPoint: 67,
+ markPointProps: 68,
+ beginMarkedContent: 69,
+ beginMarkedContentProps: 70,
+ endMarkedContent: 71,
+ beginCompat: 72,
+ endCompat: 73,
+ paintFormXObjectBegin: 74,
+ paintFormXObjectEnd: 75,
+ beginGroup: 76,
+ endGroup: 77,
+ beginAnnotations: 78,
+ endAnnotations: 79,
+ beginAnnotation: 80,
+ endAnnotation: 81,
+ paintJpegXObject: 82,
+ paintImageMaskXObject: 83,
+ paintImageMaskXObjectGroup: 84,
+ paintImageXObject: 85,
+ paintInlineImageXObject: 86,
+ paintInlineImageXObjectGroup: 87,
+ paintImageXObjectRepeat: 88,
+ paintImageMaskXObjectRepeat: 89,
+ paintSolidColorImageMask: 90,
+ constructPath: 91
+};
+exports.OPS = OPS;
+var UNSUPPORTED_FEATURES = {
+ unknown: "unknown",
+ forms: "forms",
+ javaScript: "javaScript",
+ signatures: "signatures",
+ smask: "smask",
+ shadingPattern: "shadingPattern",
+ font: "font",
+ errorTilingPattern: "errorTilingPattern",
+ errorExtGState: "errorExtGState",
+ errorXObject: "errorXObject",
+ errorFontLoadType3: "errorFontLoadType3",
+ errorFontState: "errorFontState",
+ errorFontMissing: "errorFontMissing",
+ errorFontTranslate: "errorFontTranslate",
+ errorColorSpace: "errorColorSpace",
+ errorOperatorList: "errorOperatorList",
+ errorFontToUnicode: "errorFontToUnicode",
+ errorFontLoadNative: "errorFontLoadNative",
+ errorFontBuildPath: "errorFontBuildPath",
+ errorFontGetPath: "errorFontGetPath",
+ errorMarkedContent: "errorMarkedContent",
+ errorContentSubStream: "errorContentSubStream"
+};
+exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
+var PasswordResponses = {
+ NEED_PASSWORD: 1,
+ INCORRECT_PASSWORD: 2
+};
+exports.PasswordResponses = PasswordResponses;
+var verbosity = VerbosityLevel.WARNINGS;
+
+function setVerbosityLevel(level) {
+ if (Number.isInteger(level)) {
+ verbosity = level;
+ }
+}
+
+function getVerbosityLevel() {
+ return verbosity;
+}
+
+function info(msg) {
+ if (verbosity >= VerbosityLevel.INFOS) {
+ console.log("Info: ".concat(msg));
+ }
+}
+
+function warn(msg) {
+ if (verbosity >= VerbosityLevel.WARNINGS) {
+ console.log("Warning: ".concat(msg));
+ }
+}
+
+function unreachable(msg) {
+ throw new Error(msg);
+}
+
+function assert(cond, msg) {
+ if (!cond) {
+ unreachable(msg);
+ }
+}
+
+function isSameOrigin(baseUrl, otherUrl) {
+ var base;
+
+ try {
+ base = new URL(baseUrl);
+
+ if (!base.origin || base.origin === "null") {
+ return false;
+ }
+ } catch (e) {
+ return false;
+ }
+
+ var other = new URL(otherUrl, base);
+ return base.origin === other.origin;
+}
+
+function _isValidProtocol(url) {
+ if (!url) {
+ return false;
+ }
+
+ switch (url.protocol) {
+ case "http:":
+ case "https:":
+ case "ftp:":
+ case "mailto:":
+ case "tel:":
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+function createValidAbsoluteUrl(url) {
+ var baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
+
+ if (!url) {
+ return null;
+ }
+
+ try {
+ if (options && typeof url === "string") {
+ if (options.addDefaultProtocol && url.startsWith("www.")) {
+ var dots = url.match(/\./g);
+
+ if (dots && dots.length >= 2) {
+ url = "http://".concat(url);
+ }
+ }
+
+ if (options.tryConvertEncoding) {
+ try {
+ url = stringToUTF8String(url);
+ } catch (ex) {}
+ }
+ }
+
+ var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
+
+ if (_isValidProtocol(absoluteUrl)) {
+ return absoluteUrl;
+ }
+ } catch (ex) {}
+
+ return null;
+}
+
+function shadow(obj, prop, value) {
+ Object.defineProperty(obj, prop, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: false
+ });
+ return value;
+}
+
+var BaseException = function BaseExceptionClosure() {
+ function BaseException(message, name) {
+ if (this.constructor === BaseException) {
+ unreachable("Cannot initialize BaseException.");
+ }
+
+ this.message = message;
+ this.name = name;
+ }
+
+ BaseException.prototype = new Error();
+ BaseException.constructor = BaseException;
+ return BaseException;
+}();
+
+exports.BaseException = BaseException;
+
+var PasswordException = /*#__PURE__*/function (_BaseException) {
+ _inherits(PasswordException, _BaseException);
+
+ var _super = _createSuper(PasswordException);
+
+ function PasswordException(msg, code) {
+ var _this;
+
+ _classCallCheck(this, PasswordException);
+
+ _this = _super.call(this, msg, "PasswordException");
+ _this.code = code;
+ return _this;
+ }
+
+ return _createClass(PasswordException);
+}(BaseException);
+
+exports.PasswordException = PasswordException;
+
+var UnknownErrorException = /*#__PURE__*/function (_BaseException2) {
+ _inherits(UnknownErrorException, _BaseException2);
+
+ var _super2 = _createSuper(UnknownErrorException);
+
+ function UnknownErrorException(msg, details) {
+ var _this2;
+
+ _classCallCheck(this, UnknownErrorException);
+
+ _this2 = _super2.call(this, msg, "UnknownErrorException");
+ _this2.details = details;
+ return _this2;
+ }
+
+ return _createClass(UnknownErrorException);
+}(BaseException);
+
+exports.UnknownErrorException = UnknownErrorException;
+
+var InvalidPDFException = /*#__PURE__*/function (_BaseException3) {
+ _inherits(InvalidPDFException, _BaseException3);
+
+ var _super3 = _createSuper(InvalidPDFException);
+
+ function InvalidPDFException(msg) {
+ _classCallCheck(this, InvalidPDFException);
+
+ return _super3.call(this, msg, "InvalidPDFException");
+ }
+
+ return _createClass(InvalidPDFException);
+}(BaseException);
+
+exports.InvalidPDFException = InvalidPDFException;
+
+var MissingPDFException = /*#__PURE__*/function (_BaseException4) {
+ _inherits(MissingPDFException, _BaseException4);
+
+ var _super4 = _createSuper(MissingPDFException);
+
+ function MissingPDFException(msg) {
+ _classCallCheck(this, MissingPDFException);
+
+ return _super4.call(this, msg, "MissingPDFException");
+ }
+
+ return _createClass(MissingPDFException);
+}(BaseException);
+
+exports.MissingPDFException = MissingPDFException;
+
+var UnexpectedResponseException = /*#__PURE__*/function (_BaseException5) {
+ _inherits(UnexpectedResponseException, _BaseException5);
+
+ var _super5 = _createSuper(UnexpectedResponseException);
+
+ function UnexpectedResponseException(msg, status) {
+ var _this3;
+
+ _classCallCheck(this, UnexpectedResponseException);
+
+ _this3 = _super5.call(this, msg, "UnexpectedResponseException");
+ _this3.status = status;
+ return _this3;
+ }
+
+ return _createClass(UnexpectedResponseException);
+}(BaseException);
+
+exports.UnexpectedResponseException = UnexpectedResponseException;
+
+var FormatError = /*#__PURE__*/function (_BaseException6) {
+ _inherits(FormatError, _BaseException6);
+
+ var _super6 = _createSuper(FormatError);
+
+ function FormatError(msg) {
+ _classCallCheck(this, FormatError);
+
+ return _super6.call(this, msg, "FormatError");
+ }
+
+ return _createClass(FormatError);
+}(BaseException);
+
+exports.FormatError = FormatError;
+
+var AbortException = /*#__PURE__*/function (_BaseException7) {
+ _inherits(AbortException, _BaseException7);
+
+ var _super7 = _createSuper(AbortException);
+
+ function AbortException(msg) {
+ _classCallCheck(this, AbortException);
+
+ return _super7.call(this, msg, "AbortException");
+ }
+
+ return _createClass(AbortException);
+}(BaseException);
+
+exports.AbortException = AbortException;
+
+function bytesToString(bytes) {
+ if (_typeof(bytes) !== "object" || bytes === null || bytes.length === undefined) {
+ unreachable("Invalid argument for bytesToString");
+ }
+
+ var length = bytes.length;
+ var MAX_ARGUMENT_COUNT = 8192;
+
+ if (length < MAX_ARGUMENT_COUNT) {
+ return String.fromCharCode.apply(null, bytes);
+ }
+
+ var strBuf = [];
+
+ for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
+ var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
+ var chunk = bytes.subarray(i, chunkEnd);
+ strBuf.push(String.fromCharCode.apply(null, chunk));
+ }
+
+ return strBuf.join("");
+}
+
+function stringToBytes(str) {
+ if (typeof str !== "string") {
+ unreachable("Invalid argument for stringToBytes");
+ }
+
+ var length = str.length;
+ var bytes = new Uint8Array(length);
+
+ for (var i = 0; i < length; ++i) {
+ bytes[i] = str.charCodeAt(i) & 0xff;
+ }
+
+ return bytes;
+}
+
+function arrayByteLength(arr) {
+ if (arr.length !== undefined) {
+ return arr.length;
+ }
+
+ if (arr.byteLength !== undefined) {
+ return arr.byteLength;
+ }
+
+ unreachable("Invalid argument for arrayByteLength");
+}
+
+function arraysToBytes(arr) {
+ var length = arr.length;
+
+ if (length === 1 && arr[0] instanceof Uint8Array) {
+ return arr[0];
+ }
+
+ var resultLength = 0;
+
+ for (var i = 0; i < length; i++) {
+ resultLength += arrayByteLength(arr[i]);
+ }
+
+ var pos = 0;
+ var data = new Uint8Array(resultLength);
+
+ for (var _i = 0; _i < length; _i++) {
+ var item = arr[_i];
+
+ if (!(item instanceof Uint8Array)) {
+ if (typeof item === "string") {
+ item = stringToBytes(item);
+ } else {
+ item = new Uint8Array(item);
+ }
+ }
+
+ var itemLength = item.byteLength;
+ data.set(item, pos);
+ pos += itemLength;
+ }
+
+ return data;
+}
+
+function string32(value) {
+ return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
+}
+
+function objectSize(obj) {
+ return Object.keys(obj).length;
+}
+
+function objectFromMap(map) {
+ var obj = Object.create(null);
+
+ var _iterator = _createForOfIteratorHelper(map),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var _step$value = _slicedToArray(_step.value, 2),
+ key = _step$value[0],
+ value = _step$value[1];
+
+ obj[key] = value;
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ return obj;
+}
+
+function isLittleEndian() {
+ var buffer8 = new Uint8Array(4);
+ buffer8[0] = 1;
+ var view32 = new Uint32Array(buffer8.buffer, 0, 1);
+ return view32[0] === 1;
+}
+
+var IsLittleEndianCached = {
+ get value() {
+ return shadow(this, "value", isLittleEndian());
+ }
+
+};
+exports.IsLittleEndianCached = IsLittleEndianCached;
+
+function isEvalSupported() {
+ try {
+ new Function("");
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+var IsEvalSupportedCached = {
+ get value() {
+ return shadow(this, "value", isEvalSupported());
+ }
+
+};
+exports.IsEvalSupportedCached = IsEvalSupportedCached;
+
+var hexNumbers = _toConsumableArray(Array(256).keys()).map(function (n) {
+ return n.toString(16).padStart(2, "0");
+});
+
+var Util = /*#__PURE__*/function () {
+ function Util() {
+ _classCallCheck(this, Util);
+ }
+
+ _createClass(Util, null, [{
+ key: "makeHexColor",
+ value: function makeHexColor(r, g, b) {
+ return "#".concat(hexNumbers[r]).concat(hexNumbers[g]).concat(hexNumbers[b]);
+ }
+ }, {
+ key: "transform",
+ value: function transform(m1, m2) {
+ return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
+ }
+ }, {
+ key: "applyTransform",
+ value: function applyTransform(p, m) {
+ var xt = p[0] * m[0] + p[1] * m[2] + m[4];
+ var yt = p[0] * m[1] + p[1] * m[3] + m[5];
+ return [xt, yt];
+ }
+ }, {
+ key: "applyInverseTransform",
+ value: function applyInverseTransform(p, m) {
+ var d = m[0] * m[3] - m[1] * m[2];
+ var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+ var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+ return [xt, yt];
+ }
+ }, {
+ key: "getAxialAlignedBoundingBox",
+ value: function getAxialAlignedBoundingBox(r, m) {
+ var p1 = Util.applyTransform(r, m);
+ var p2 = Util.applyTransform(r.slice(2, 4), m);
+ var p3 = Util.applyTransform([r[0], r[3]], m);
+ var p4 = Util.applyTransform([r[2], r[1]], m);
+ return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
+ }
+ }, {
+ key: "inverseTransform",
+ value: function inverseTransform(m) {
+ var d = m[0] * m[3] - m[1] * m[2];
+ return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+ }
+ }, {
+ key: "apply3dTransform",
+ value: function apply3dTransform(m, v) {
+ return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
+ }
+ }, {
+ key: "singularValueDecompose2dScale",
+ value: function singularValueDecompose2dScale(m) {
+ var transpose = [m[0], m[2], m[1], m[3]];
+ var a = m[0] * transpose[0] + m[1] * transpose[2];
+ var b = m[0] * transpose[1] + m[1] * transpose[3];
+ var c = m[2] * transpose[0] + m[3] * transpose[2];
+ var d = m[2] * transpose[1] + m[3] * transpose[3];
+ var first = (a + d) / 2;
+ var second = Math.sqrt(Math.pow(a + d, 2) - 4 * (a * d - c * b)) / 2;
+ var sx = first + second || 1;
+ var sy = first - second || 1;
+ return [Math.sqrt(sx), Math.sqrt(sy)];
+ }
+ }, {
+ key: "normalizeRect",
+ value: function normalizeRect(rect) {
+ var r = rect.slice(0);
+
+ if (rect[0] > rect[2]) {
+ r[0] = rect[2];
+ r[2] = rect[0];
+ }
+
+ if (rect[1] > rect[3]) {
+ r[1] = rect[3];
+ r[3] = rect[1];
+ }
+
+ return r;
+ }
+ }, {
+ key: "intersect",
+ value: function intersect(rect1, rect2) {
+ function compare(a, b) {
+ return a - b;
+ }
+
+ var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
+ var orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
+ var result = [];
+ rect1 = Util.normalizeRect(rect1);
+ rect2 = Util.normalizeRect(rect2);
+
+ if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
+ result[0] = orderedX[1];
+ result[2] = orderedX[2];
+ } else {
+ return null;
+ }
+
+ if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
+ result[1] = orderedY[1];
+ result[3] = orderedY[2];
+ } else {
+ return null;
+ }
+
+ return result;
+ }
+ }, {
+ key: "bezierBoundingBox",
+ value: function bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {
+ var tvalues = [],
+ bounds = [[], []];
+ var a, b, c, t, t1, t2, b2ac, sqrtb2ac;
+
+ for (var i = 0; i < 2; ++i) {
+ if (i === 0) {
+ b = 6 * x0 - 12 * x1 + 6 * x2;
+ a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;
+ c = 3 * x1 - 3 * x0;
+ } else {
+ b = 6 * y0 - 12 * y1 + 6 * y2;
+ a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;
+ c = 3 * y1 - 3 * y0;
+ }
+
+ if (Math.abs(a) < 1e-12) {
+ if (Math.abs(b) < 1e-12) {
+ continue;
+ }
+
+ t = -c / b;
+
+ if (0 < t && t < 1) {
+ tvalues.push(t);
+ }
+
+ continue;
+ }
+
+ b2ac = b * b - 4 * c * a;
+ sqrtb2ac = Math.sqrt(b2ac);
+
+ if (b2ac < 0) {
+ continue;
+ }
+
+ t1 = (-b + sqrtb2ac) / (2 * a);
+
+ if (0 < t1 && t1 < 1) {
+ tvalues.push(t1);
+ }
+
+ t2 = (-b - sqrtb2ac) / (2 * a);
+
+ if (0 < t2 && t2 < 1) {
+ tvalues.push(t2);
+ }
+ }
+
+ var j = tvalues.length,
+ mt;
+ var jlen = j;
+
+ while (j--) {
+ t = tvalues[j];
+ mt = 1 - t;
+ bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;
+ bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;
+ }
+
+ bounds[0][jlen] = x0;
+ bounds[1][jlen] = y0;
+ bounds[0][jlen + 1] = x3;
+ bounds[1][jlen + 1] = y3;
+ bounds[0].length = bounds[1].length = jlen + 2;
+ return [Math.min.apply(Math, _toConsumableArray(bounds[0])), Math.min.apply(Math, _toConsumableArray(bounds[1])), Math.max.apply(Math, _toConsumableArray(bounds[0])), Math.max.apply(Math, _toConsumableArray(bounds[1]))];
+ }
+ }]);
+
+ return Util;
+}();
+
+exports.Util = Util;
+var PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac];
+
+function stringToPDFString(str) {
+ if (str[0] >= "\xEF") {
+ var encoding;
+
+ if (str[0] === "\xFE" && str[1] === "\xFF") {
+ encoding = "utf-16be";
+ } else if (str[0] === "\xFF" && str[1] === "\xFE") {
+ encoding = "utf-16le";
+ } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") {
+ encoding = "utf-8";
+ }
+
+ if (encoding) {
+ try {
+ var decoder = new TextDecoder(encoding, {
+ fatal: true
+ });
+ var buffer = stringToBytes(str);
+ return decoder.decode(buffer);
+ } catch (ex) {
+ warn("stringToPDFString: \"".concat(ex, "\"."));
+ }
+ }
+ }
+
+ var strBuf = [];
+
+ for (var i = 0, ii = str.length; i < ii; i++) {
+ var code = PDFStringTranslateTable[str.charCodeAt(i)];
+ strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
+ }
+
+ return strBuf.join("");
+}
+
+function escapeString(str) {
+ return str.replace(/([()\\\n\r])/g, function (match) {
+ if (match === "\n") {
+ return "\\n";
+ } else if (match === "\r") {
+ return "\\r";
+ }
+
+ return "\\".concat(match);
+ });
+}
+
+function isAscii(str) {
+ return /^[\x00-\x7F]*$/.test(str);
+}
+
+function stringToUTF16BEString(str) {
+ var buf = ["\xFE\xFF"];
+
+ for (var i = 0, ii = str.length; i < ii; i++) {
+ var _char = str.charCodeAt(i);
+
+ buf.push(String.fromCharCode(_char >> 8 & 0xff), String.fromCharCode(_char & 0xff));
+ }
+
+ return buf.join("");
+}
+
+function stringToUTF8String(str) {
+ return decodeURIComponent(escape(str));
+}
+
+function utf8StringToString(str) {
+ return unescape(encodeURIComponent(str));
+}
+
+function isArrayBuffer(v) {
+ return _typeof(v) === "object" && v !== null && v.byteLength !== undefined;
+}
+
+function isArrayEqual(arr1, arr2) {
+ if (arr1.length !== arr2.length) {
+ return false;
+ }
+
+ for (var i = 0, ii = arr1.length; i < ii; i++) {
+ if (arr1[i] !== arr2[i]) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+function getModificationDate() {
+ var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
+ var buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
+ return buffer.join("");
+}
+
+function createPromiseCapability() {
+ var capability = Object.create(null);
+ var isSettled = false;
+ Object.defineProperty(capability, "settled", {
+ get: function get() {
+ return isSettled;
+ }
+ });
+ capability.promise = new Promise(function (resolve, reject) {
+ capability.resolve = function (data) {
+ isSettled = true;
+ resolve(data);
+ };
+
+ capability.reject = function (reason) {
+ isSettled = true;
+ reject(reason);
+ };
+ });
+ return capability;
+}
+
+/***/ }),
+/* 2 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+var _is_node = __w_pdfjs_require__(3);
+
+if (!globalThis._pdfjsCompatibilityChecked) {
+ globalThis._pdfjsCompatibilityChecked = true;
+
+ (function checkNodeBtoa() {
+ if (globalThis.btoa || !_is_node.isNodeJS) {
+ return;
+ }
+
+ globalThis.btoa = function (chars) {
+ return Buffer.from(chars, "binary").toString("base64");
+ };
+ })();
+
+ (function checkNodeAtob() {
+ if (globalThis.atob || !_is_node.isNodeJS) {
+ return;
+ }
+
+ globalThis.atob = function (input) {
+ return Buffer.from(input, "base64").toString("binary");
+ };
+ })();
+
+ (function checkDOMMatrix() {
+ if (globalThis.DOMMatrix || !_is_node.isNodeJS) {
+ return;
+ }
+
+ globalThis.DOMMatrix = require("dommatrix/dist/dommatrix.js");
+ })();
+
+ (function checkPromise() {
+ if (globalThis.Promise.allSettled) {
+ return;
+ }
+
+ globalThis.Promise = __w_pdfjs_require__(4);
+ })();
+
+ (function checkReadableStream() {
+ if (globalThis.ReadableStream || !_is_node.isNodeJS) {
+ return;
+ }
+
+ globalThis.ReadableStream = require("web-streams-polyfill/dist/ponyfill.js").ReadableStream;
+ })();
+
+ (function checkStructuredClone() {
+ if (globalThis.structuredClone) {
+ return;
+ }
+
+ __w_pdfjs_require__(128);
+ })();
+}
+
+/***/ }),
+/* 3 */
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.isNodeJS = void 0;
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+var isNodeJS = (typeof process === "undefined" ? "undefined" : _typeof(process)) === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
+exports.isNodeJS = isNodeJS;
+
+/***/ }),
+/* 4 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+__w_pdfjs_require__(5);
+__w_pdfjs_require__(90);
+__w_pdfjs_require__(96);
+__w_pdfjs_require__(98);
+__w_pdfjs_require__(122);
+__w_pdfjs_require__(123);
+__w_pdfjs_require__(124);
+__w_pdfjs_require__(125);
+var path = __w_pdfjs_require__(127);
+module.exports = path.Promise;
+
+/***/ }),
+/* 5 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var $ = __w_pdfjs_require__(6);
+var global = __w_pdfjs_require__(7);
+var isPrototypeOf = __w_pdfjs_require__(26);
+var getPrototypeOf = __w_pdfjs_require__(68);
+var setPrototypeOf = __w_pdfjs_require__(70);
+var copyConstructorProperties = __w_pdfjs_require__(56);
+var create = __w_pdfjs_require__(72);
+var createNonEnumerableProperty = __w_pdfjs_require__(45);
+var createPropertyDescriptor = __w_pdfjs_require__(14);
+var clearErrorStack = __w_pdfjs_require__(76);
+var installErrorCause = __w_pdfjs_require__(77);
+var iterate = __w_pdfjs_require__(78);
+var normalizeStringArgument = __w_pdfjs_require__(87);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(89);
+var TO_STRING_TAG = wellKnownSymbol('toStringTag');
+var Error = global.Error;
+var push = [].push;
+var $AggregateError = function AggregateError(errors, message) {
+ var options = arguments.length > 2 ? arguments[2] : undefined;
+ var isInstance = isPrototypeOf(AggregateErrorPrototype, this);
+ var that;
+ if (setPrototypeOf) {
+ that = setPrototypeOf(new Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);
+ } else {
+ that = isInstance ? this : create(AggregateErrorPrototype);
+ createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');
+ }
+ if (message !== undefined)
+ createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));
+ if (ERROR_STACK_INSTALLABLE)
+ createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));
+ installErrorCause(that, options);
+ var errorsArray = [];
+ iterate(errors, push, { that: errorsArray });
+ createNonEnumerableProperty(that, 'errors', errorsArray);
+ return that;
+};
+if (setPrototypeOf)
+ setPrototypeOf($AggregateError, Error);
+else
+ copyConstructorProperties($AggregateError, Error, { name: true });
+var AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {
+ constructor: createPropertyDescriptor(1, $AggregateError),
+ message: createPropertyDescriptor(1, ''),
+ name: createPropertyDescriptor(1, 'AggregateError')
+});
+$({ global: true }, { AggregateError: $AggregateError });
+
+/***/ }),
+/* 6 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var getOwnPropertyDescriptor = (__w_pdfjs_require__(8).f);
+var createNonEnumerableProperty = __w_pdfjs_require__(45);
+var redefine = __w_pdfjs_require__(49);
+var setGlobal = __w_pdfjs_require__(39);
+var copyConstructorProperties = __w_pdfjs_require__(56);
+var isForced = __w_pdfjs_require__(67);
+module.exports = function (options, source) {
+ var TARGET = options.target;
+ var GLOBAL = options.global;
+ var STATIC = options.stat;
+ var FORCED, target, key, targetProperty, sourceProperty, descriptor;
+ if (GLOBAL) {
+ target = global;
+ } else if (STATIC) {
+ target = global[TARGET] || setGlobal(TARGET, {});
+ } else {
+ target = (global[TARGET] || {}).prototype;
+ }
+ if (target)
+ for (key in source) {
+ sourceProperty = source[key];
+ if (options.noTargetGet) {
+ descriptor = getOwnPropertyDescriptor(target, key);
+ targetProperty = descriptor && descriptor.value;
+ } else
+ targetProperty = target[key];
+ FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
+ if (!FORCED && targetProperty !== undefined) {
+ if (typeof sourceProperty == typeof targetProperty)
+ continue;
+ copyConstructorProperties(sourceProperty, targetProperty);
+ }
+ if (options.sham || targetProperty && targetProperty.sham) {
+ createNonEnumerableProperty(sourceProperty, 'sham', true);
+ }
+ redefine(target, key, sourceProperty, options);
+ }
+};
+
+/***/ }),
+/* 7 */
+/***/ ((module) => {
+
+var check = function (it) {
+ return it && it.Math == Math && it;
+};
+module.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || (function () {
+ return this;
+}()) || Function('return this')();
+
+/***/ }),
+/* 8 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var call = __w_pdfjs_require__(11);
+var propertyIsEnumerableModule = __w_pdfjs_require__(13);
+var createPropertyDescriptor = __w_pdfjs_require__(14);
+var toIndexedObject = __w_pdfjs_require__(15);
+var toPropertyKey = __w_pdfjs_require__(20);
+var hasOwn = __w_pdfjs_require__(40);
+var IE8_DOM_DEFINE = __w_pdfjs_require__(43);
+var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
+ O = toIndexedObject(O);
+ P = toPropertyKey(P);
+ if (IE8_DOM_DEFINE)
+ try {
+ return $getOwnPropertyDescriptor(O, P);
+ } catch (error) {
+ }
+ if (hasOwn(O, P))
+ return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
+};
+
+/***/ }),
+/* 9 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+module.exports = !fails(function () {
+ return Object.defineProperty({}, 1, {
+ get: function () {
+ return 7;
+ }
+ })[1] != 7;
+});
+
+/***/ }),
+/* 10 */
+/***/ ((module) => {
+
+module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (error) {
+ return true;
+ }
+};
+
+/***/ }),
+/* 11 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var NATIVE_BIND = __w_pdfjs_require__(12);
+var call = Function.prototype.call;
+module.exports = NATIVE_BIND ? call.bind(call) : function () {
+ return call.apply(call, arguments);
+};
+
+/***/ }),
+/* 12 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+module.exports = !fails(function () {
+ var test = function () {
+ }.bind();
+ return typeof test != 'function' || test.hasOwnProperty('prototype');
+});
+
+/***/ }),
+/* 13 */
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+var $propertyIsEnumerable = {}.propertyIsEnumerable;
+var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
+exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
+ var descriptor = getOwnPropertyDescriptor(this, V);
+ return !!descriptor && descriptor.enumerable;
+} : $propertyIsEnumerable;
+
+/***/ }),
+/* 14 */
+/***/ ((module) => {
+
+module.exports = function (bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value
+ };
+};
+
+/***/ }),
+/* 15 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var IndexedObject = __w_pdfjs_require__(16);
+var requireObjectCoercible = __w_pdfjs_require__(19);
+module.exports = function (it) {
+ return IndexedObject(requireObjectCoercible(it));
+};
+
+/***/ }),
+/* 16 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var uncurryThis = __w_pdfjs_require__(17);
+var fails = __w_pdfjs_require__(10);
+var classof = __w_pdfjs_require__(18);
+var Object = global.Object;
+var split = uncurryThis(''.split);
+module.exports = fails(function () {
+ return !Object('z').propertyIsEnumerable(0);
+}) ? function (it) {
+ return classof(it) == 'String' ? split(it, '') : Object(it);
+} : Object;
+
+/***/ }),
+/* 17 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var NATIVE_BIND = __w_pdfjs_require__(12);
+var FunctionPrototype = Function.prototype;
+var bind = FunctionPrototype.bind;
+var call = FunctionPrototype.call;
+var uncurryThis = NATIVE_BIND && bind.bind(call, call);
+module.exports = NATIVE_BIND ? function (fn) {
+ return fn && uncurryThis(fn);
+} : function (fn) {
+ return fn && function () {
+ return call.apply(fn, arguments);
+ };
+};
+
+/***/ }),
+/* 18 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var toString = uncurryThis({}.toString);
+var stringSlice = uncurryThis(''.slice);
+module.exports = function (it) {
+ return stringSlice(toString(it), 8, -1);
+};
+
+/***/ }),
+/* 19 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var TypeError = global.TypeError;
+module.exports = function (it) {
+ if (it == undefined)
+ throw TypeError("Can't call method on " + it);
+ return it;
+};
+
+/***/ }),
+/* 20 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var toPrimitive = __w_pdfjs_require__(21);
+var isSymbol = __w_pdfjs_require__(24);
+module.exports = function (argument) {
+ var key = toPrimitive(argument, 'string');
+ return isSymbol(key) ? key : key + '';
+};
+
+/***/ }),
+/* 21 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var call = __w_pdfjs_require__(11);
+var isObject = __w_pdfjs_require__(22);
+var isSymbol = __w_pdfjs_require__(24);
+var getMethod = __w_pdfjs_require__(31);
+var ordinaryToPrimitive = __w_pdfjs_require__(34);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var TypeError = global.TypeError;
+var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
+module.exports = function (input, pref) {
+ if (!isObject(input) || isSymbol(input))
+ return input;
+ var exoticToPrim = getMethod(input, TO_PRIMITIVE);
+ var result;
+ if (exoticToPrim) {
+ if (pref === undefined)
+ pref = 'default';
+ result = call(exoticToPrim, input, pref);
+ if (!isObject(result) || isSymbol(result))
+ return result;
+ throw TypeError("Can't convert object to primitive value");
+ }
+ if (pref === undefined)
+ pref = 'number';
+ return ordinaryToPrimitive(input, pref);
+};
+
+/***/ }),
+/* 22 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var isCallable = __w_pdfjs_require__(23);
+module.exports = function (it) {
+ return typeof it == 'object' ? it !== null : isCallable(it);
+};
+
+/***/ }),
+/* 23 */
+/***/ ((module) => {
+
+module.exports = function (argument) {
+ return typeof argument == 'function';
+};
+
+/***/ }),
+/* 24 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var getBuiltIn = __w_pdfjs_require__(25);
+var isCallable = __w_pdfjs_require__(23);
+var isPrototypeOf = __w_pdfjs_require__(26);
+var USE_SYMBOL_AS_UID = __w_pdfjs_require__(27);
+var Object = global.Object;
+module.exports = USE_SYMBOL_AS_UID ? function (it) {
+ return typeof it == 'symbol';
+} : function (it) {
+ var $Symbol = getBuiltIn('Symbol');
+ return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));
+};
+
+/***/ }),
+/* 25 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isCallable = __w_pdfjs_require__(23);
+var aFunction = function (argument) {
+ return isCallable(argument) ? argument : undefined;
+};
+module.exports = function (namespace, method) {
+ return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];
+};
+
+/***/ }),
+/* 26 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+module.exports = uncurryThis({}.isPrototypeOf);
+
+/***/ }),
+/* 27 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var NATIVE_SYMBOL = __w_pdfjs_require__(28);
+module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol';
+
+/***/ }),
+/* 28 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var V8_VERSION = __w_pdfjs_require__(29);
+var fails = __w_pdfjs_require__(10);
+module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
+ var symbol = Symbol();
+ return !String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41;
+});
+
+/***/ }),
+/* 29 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var userAgent = __w_pdfjs_require__(30);
+var process = global.process;
+var Deno = global.Deno;
+var versions = process && process.versions || Deno && Deno.version;
+var v8 = versions && versions.v8;
+var match, version;
+if (v8) {
+ match = v8.split('.');
+ version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
+}
+if (!version && userAgent) {
+ match = userAgent.match(/Edge\/(\d+)/);
+ if (!match || match[1] >= 74) {
+ match = userAgent.match(/Chrome\/(\d+)/);
+ if (match)
+ version = +match[1];
+ }
+}
+module.exports = version;
+
+/***/ }),
+/* 30 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var getBuiltIn = __w_pdfjs_require__(25);
+module.exports = getBuiltIn('navigator', 'userAgent') || '';
+
+/***/ }),
+/* 31 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var aCallable = __w_pdfjs_require__(32);
+module.exports = function (V, P) {
+ var func = V[P];
+ return func == null ? undefined : aCallable(func);
+};
+
+/***/ }),
+/* 32 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isCallable = __w_pdfjs_require__(23);
+var tryToString = __w_pdfjs_require__(33);
+var TypeError = global.TypeError;
+module.exports = function (argument) {
+ if (isCallable(argument))
+ return argument;
+ throw TypeError(tryToString(argument) + ' is not a function');
+};
+
+/***/ }),
+/* 33 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var String = global.String;
+module.exports = function (argument) {
+ try {
+ return String(argument);
+ } catch (error) {
+ return 'Object';
+ }
+};
+
+/***/ }),
+/* 34 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var call = __w_pdfjs_require__(11);
+var isCallable = __w_pdfjs_require__(23);
+var isObject = __w_pdfjs_require__(22);
+var TypeError = global.TypeError;
+module.exports = function (input, pref) {
+ var fn, val;
+ if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input)))
+ return val;
+ if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input)))
+ return val;
+ if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input)))
+ return val;
+ throw TypeError("Can't convert object to primitive value");
+};
+
+/***/ }),
+/* 35 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var shared = __w_pdfjs_require__(36);
+var hasOwn = __w_pdfjs_require__(40);
+var uid = __w_pdfjs_require__(42);
+var NATIVE_SYMBOL = __w_pdfjs_require__(28);
+var USE_SYMBOL_AS_UID = __w_pdfjs_require__(27);
+var WellKnownSymbolsStore = shared('wks');
+var Symbol = global.Symbol;
+var symbolFor = Symbol && Symbol['for'];
+var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;
+module.exports = function (name) {
+ if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {
+ var description = 'Symbol.' + name;
+ if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {
+ WellKnownSymbolsStore[name] = Symbol[name];
+ } else if (USE_SYMBOL_AS_UID && symbolFor) {
+ WellKnownSymbolsStore[name] = symbolFor(description);
+ } else {
+ WellKnownSymbolsStore[name] = createWellKnownSymbol(description);
+ }
+ }
+ return WellKnownSymbolsStore[name];
+};
+
+/***/ }),
+/* 36 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var IS_PURE = __w_pdfjs_require__(37);
+var store = __w_pdfjs_require__(38);
+(module.exports = function (key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+ version: '3.21.1',
+ mode: IS_PURE ? 'pure' : 'global',
+ copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',
+ license: 'https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE',
+ source: 'https://github.com/zloirock/core-js'
+});
+
+/***/ }),
+/* 37 */
+/***/ ((module) => {
+
+module.exports = false;
+
+/***/ }),
+/* 38 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var setGlobal = __w_pdfjs_require__(39);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || setGlobal(SHARED, {});
+module.exports = store;
+
+/***/ }),
+/* 39 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var defineProperty = Object.defineProperty;
+module.exports = function (key, value) {
+ try {
+ defineProperty(global, key, {
+ value: value,
+ configurable: true,
+ writable: true
+ });
+ } catch (error) {
+ global[key] = value;
+ }
+ return value;
+};
+
+/***/ }),
+/* 40 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var toObject = __w_pdfjs_require__(41);
+var hasOwnProperty = uncurryThis({}.hasOwnProperty);
+module.exports = Object.hasOwn || function hasOwn(it, key) {
+ return hasOwnProperty(toObject(it), key);
+};
+
+/***/ }),
+/* 41 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var requireObjectCoercible = __w_pdfjs_require__(19);
+var Object = global.Object;
+module.exports = function (argument) {
+ return Object(requireObjectCoercible(argument));
+};
+
+/***/ }),
+/* 42 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var id = 0;
+var postfix = Math.random();
+var toString = uncurryThis(1.0.toString);
+module.exports = function (key) {
+ return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);
+};
+
+/***/ }),
+/* 43 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var fails = __w_pdfjs_require__(10);
+var createElement = __w_pdfjs_require__(44);
+module.exports = !DESCRIPTORS && !fails(function () {
+ return Object.defineProperty(createElement('div'), 'a', {
+ get: function () {
+ return 7;
+ }
+ }).a != 7;
+});
+
+/***/ }),
+/* 44 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isObject = __w_pdfjs_require__(22);
+var document = global.document;
+var EXISTS = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+ return EXISTS ? document.createElement(it) : {};
+};
+
+/***/ }),
+/* 45 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var definePropertyModule = __w_pdfjs_require__(46);
+var createPropertyDescriptor = __w_pdfjs_require__(14);
+module.exports = DESCRIPTORS ? function (object, key, value) {
+ return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
+} : function (object, key, value) {
+ object[key] = value;
+ return object;
+};
+
+/***/ }),
+/* 46 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var IE8_DOM_DEFINE = __w_pdfjs_require__(43);
+var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(47);
+var anObject = __w_pdfjs_require__(48);
+var toPropertyKey = __w_pdfjs_require__(20);
+var TypeError = global.TypeError;
+var $defineProperty = Object.defineProperty;
+var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+var ENUMERABLE = 'enumerable';
+var CONFIGURABLE = 'configurable';
+var WRITABLE = 'writable';
+exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPropertyKey(P);
+ anObject(Attributes);
+ if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
+ var current = $getOwnPropertyDescriptor(O, P);
+ if (current && current[WRITABLE]) {
+ O[P] = Attributes.value;
+ Attributes = {
+ configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
+ enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
+ writable: false
+ };
+ }
+ }
+ return $defineProperty(O, P, Attributes);
+} : $defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPropertyKey(P);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE)
+ try {
+ return $defineProperty(O, P, Attributes);
+ } catch (error) {
+ }
+ if ('get' in Attributes || 'set' in Attributes)
+ throw TypeError('Accessors not supported');
+ if ('value' in Attributes)
+ O[P] = Attributes.value;
+ return O;
+};
+
+/***/ }),
+/* 47 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var fails = __w_pdfjs_require__(10);
+module.exports = DESCRIPTORS && fails(function () {
+ return Object.defineProperty(function () {
+ }, 'prototype', {
+ value: 42,
+ writable: false
+ }).prototype != 42;
+});
+
+/***/ }),
+/* 48 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isObject = __w_pdfjs_require__(22);
+var String = global.String;
+var TypeError = global.TypeError;
+module.exports = function (argument) {
+ if (isObject(argument))
+ return argument;
+ throw TypeError(String(argument) + ' is not an object');
+};
+
+/***/ }),
+/* 49 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isCallable = __w_pdfjs_require__(23);
+var hasOwn = __w_pdfjs_require__(40);
+var createNonEnumerableProperty = __w_pdfjs_require__(45);
+var setGlobal = __w_pdfjs_require__(39);
+var inspectSource = __w_pdfjs_require__(50);
+var InternalStateModule = __w_pdfjs_require__(51);
+var CONFIGURABLE_FUNCTION_NAME = (__w_pdfjs_require__(55).CONFIGURABLE);
+var getInternalState = InternalStateModule.get;
+var enforceInternalState = InternalStateModule.enforce;
+var TEMPLATE = String(String).split('String');
+(module.exports = function (O, key, value, options) {
+ var unsafe = options ? !!options.unsafe : false;
+ var simple = options ? !!options.enumerable : false;
+ var noTargetGet = options ? !!options.noTargetGet : false;
+ var name = options && options.name !== undefined ? options.name : key;
+ var state;
+ if (isCallable(value)) {
+ if (String(name).slice(0, 7) === 'Symbol(') {
+ name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
+ }
+ if (!hasOwn(value, 'name') || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
+ createNonEnumerableProperty(value, 'name', name);
+ }
+ state = enforceInternalState(value);
+ if (!state.source) {
+ state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
+ }
+ }
+ if (O === global) {
+ if (simple)
+ O[key] = value;
+ else
+ setGlobal(key, value);
+ return;
+ } else if (!unsafe) {
+ delete O[key];
+ } else if (!noTargetGet && O[key]) {
+ simple = true;
+ }
+ if (simple)
+ O[key] = value;
+ else
+ createNonEnumerableProperty(O, key, value);
+})(Function.prototype, 'toString', function toString() {
+ return isCallable(this) && getInternalState(this).source || inspectSource(this);
+});
+
+/***/ }),
+/* 50 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var isCallable = __w_pdfjs_require__(23);
+var store = __w_pdfjs_require__(38);
+var functionToString = uncurryThis(Function.toString);
+if (!isCallable(store.inspectSource)) {
+ store.inspectSource = function (it) {
+ return functionToString(it);
+ };
+}
+module.exports = store.inspectSource;
+
+/***/ }),
+/* 51 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var NATIVE_WEAK_MAP = __w_pdfjs_require__(52);
+var global = __w_pdfjs_require__(7);
+var uncurryThis = __w_pdfjs_require__(17);
+var isObject = __w_pdfjs_require__(22);
+var createNonEnumerableProperty = __w_pdfjs_require__(45);
+var hasOwn = __w_pdfjs_require__(40);
+var shared = __w_pdfjs_require__(38);
+var sharedKey = __w_pdfjs_require__(53);
+var hiddenKeys = __w_pdfjs_require__(54);
+var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
+var TypeError = global.TypeError;
+var WeakMap = global.WeakMap;
+var set, get, has;
+var enforce = function (it) {
+ return has(it) ? get(it) : set(it, {});
+};
+var getterFor = function (TYPE) {
+ return function (it) {
+ var state;
+ if (!isObject(it) || (state = get(it)).type !== TYPE) {
+ throw TypeError('Incompatible receiver, ' + TYPE + ' required');
+ }
+ return state;
+ };
+};
+if (NATIVE_WEAK_MAP || shared.state) {
+ var store = shared.state || (shared.state = new WeakMap());
+ var wmget = uncurryThis(store.get);
+ var wmhas = uncurryThis(store.has);
+ var wmset = uncurryThis(store.set);
+ set = function (it, metadata) {
+ if (wmhas(store, it))
+ throw new TypeError(OBJECT_ALREADY_INITIALIZED);
+ metadata.facade = it;
+ wmset(store, it, metadata);
+ return metadata;
+ };
+ get = function (it) {
+ return wmget(store, it) || {};
+ };
+ has = function (it) {
+ return wmhas(store, it);
+ };
+} else {
+ var STATE = sharedKey('state');
+ hiddenKeys[STATE] = true;
+ set = function (it, metadata) {
+ if (hasOwn(it, STATE))
+ throw new TypeError(OBJECT_ALREADY_INITIALIZED);
+ metadata.facade = it;
+ createNonEnumerableProperty(it, STATE, metadata);
+ return metadata;
+ };
+ get = function (it) {
+ return hasOwn(it, STATE) ? it[STATE] : {};
+ };
+ has = function (it) {
+ return hasOwn(it, STATE);
+ };
+}
+module.exports = {
+ set: set,
+ get: get,
+ has: has,
+ enforce: enforce,
+ getterFor: getterFor
+};
+
+/***/ }),
+/* 52 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isCallable = __w_pdfjs_require__(23);
+var inspectSource = __w_pdfjs_require__(50);
+var WeakMap = global.WeakMap;
+module.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));
+
+/***/ }),
+/* 53 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var shared = __w_pdfjs_require__(36);
+var uid = __w_pdfjs_require__(42);
+var keys = shared('keys');
+module.exports = function (key) {
+ return keys[key] || (keys[key] = uid(key));
+};
+
+/***/ }),
+/* 54 */
+/***/ ((module) => {
+
+module.exports = {};
+
+/***/ }),
+/* 55 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var hasOwn = __w_pdfjs_require__(40);
+var FunctionPrototype = Function.prototype;
+var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
+var EXISTS = hasOwn(FunctionPrototype, 'name');
+var PROPER = EXISTS && function something() {
+}.name === 'something';
+var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable);
+module.exports = {
+ EXISTS: EXISTS,
+ PROPER: PROPER,
+ CONFIGURABLE: CONFIGURABLE
+};
+
+/***/ }),
+/* 56 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var hasOwn = __w_pdfjs_require__(40);
+var ownKeys = __w_pdfjs_require__(57);
+var getOwnPropertyDescriptorModule = __w_pdfjs_require__(8);
+var definePropertyModule = __w_pdfjs_require__(46);
+module.exports = function (target, source, exceptions) {
+ var keys = ownKeys(source);
+ var defineProperty = definePropertyModule.f;
+ var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
+ defineProperty(target, key, getOwnPropertyDescriptor(source, key));
+ }
+ }
+};
+
+/***/ }),
+/* 57 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var getBuiltIn = __w_pdfjs_require__(25);
+var uncurryThis = __w_pdfjs_require__(17);
+var getOwnPropertyNamesModule = __w_pdfjs_require__(58);
+var getOwnPropertySymbolsModule = __w_pdfjs_require__(66);
+var anObject = __w_pdfjs_require__(48);
+var concat = uncurryThis([].concat);
+module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
+ var keys = getOwnPropertyNamesModule.f(anObject(it));
+ var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
+ return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
+};
+
+/***/ }),
+/* 58 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+var internalObjectKeys = __w_pdfjs_require__(59);
+var enumBugKeys = __w_pdfjs_require__(65);
+var hiddenKeys = enumBugKeys.concat('length', 'prototype');
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+ return internalObjectKeys(O, hiddenKeys);
+};
+
+/***/ }),
+/* 59 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var hasOwn = __w_pdfjs_require__(40);
+var toIndexedObject = __w_pdfjs_require__(15);
+var indexOf = (__w_pdfjs_require__(60).indexOf);
+var hiddenKeys = __w_pdfjs_require__(54);
+var push = uncurryThis([].push);
+module.exports = function (object, names) {
+ var O = toIndexedObject(object);
+ var i = 0;
+ var result = [];
+ var key;
+ for (key in O)
+ !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
+ while (names.length > i)
+ if (hasOwn(O, key = names[i++])) {
+ ~indexOf(result, key) || push(result, key);
+ }
+ return result;
+};
+
+/***/ }),
+/* 60 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var toIndexedObject = __w_pdfjs_require__(15);
+var toAbsoluteIndex = __w_pdfjs_require__(61);
+var lengthOfArrayLike = __w_pdfjs_require__(63);
+var createMethod = function (IS_INCLUDES) {
+ return function ($this, el, fromIndex) {
+ var O = toIndexedObject($this);
+ var length = lengthOfArrayLike(O);
+ var index = toAbsoluteIndex(fromIndex, length);
+ var value;
+ if (IS_INCLUDES && el != el)
+ while (length > index) {
+ value = O[index++];
+ if (value != value)
+ return true;
+ }
+ else
+ for (; length > index; index++) {
+ if ((IS_INCLUDES || index in O) && O[index] === el)
+ return IS_INCLUDES || index || 0;
+ }
+ return !IS_INCLUDES && -1;
+ };
+};
+module.exports = {
+ includes: createMethod(true),
+ indexOf: createMethod(false)
+};
+
+/***/ }),
+/* 61 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var toIntegerOrInfinity = __w_pdfjs_require__(62);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+ var integer = toIntegerOrInfinity(index);
+ return integer < 0 ? max(integer + length, 0) : min(integer, length);
+};
+
+/***/ }),
+/* 62 */
+/***/ ((module) => {
+
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (argument) {
+ var number = +argument;
+ return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);
+};
+
+/***/ }),
+/* 63 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var toLength = __w_pdfjs_require__(64);
+module.exports = function (obj) {
+ return toLength(obj.length);
+};
+
+/***/ }),
+/* 64 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var toIntegerOrInfinity = __w_pdfjs_require__(62);
+var min = Math.min;
+module.exports = function (argument) {
+ return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0;
+};
+
+/***/ }),
+/* 65 */
+/***/ ((module) => {
+
+module.exports = [
+ 'constructor',
+ 'hasOwnProperty',
+ 'isPrototypeOf',
+ 'propertyIsEnumerable',
+ 'toLocaleString',
+ 'toString',
+ 'valueOf'
+];
+
+/***/ }),
+/* 66 */
+/***/ ((__unused_webpack_module, exports) => {
+
+exports.f = Object.getOwnPropertySymbols;
+
+/***/ }),
+/* 67 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+var isCallable = __w_pdfjs_require__(23);
+var replacement = /#|\.prototype\./;
+var isForced = function (feature, detection) {
+ var value = data[normalize(feature)];
+ return value == POLYFILL ? true : value == NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;
+};
+var normalize = isForced.normalize = function (string) {
+ return String(string).replace(replacement, '.').toLowerCase();
+};
+var data = isForced.data = {};
+var NATIVE = isForced.NATIVE = 'N';
+var POLYFILL = isForced.POLYFILL = 'P';
+module.exports = isForced;
+
+/***/ }),
+/* 68 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var hasOwn = __w_pdfjs_require__(40);
+var isCallable = __w_pdfjs_require__(23);
+var toObject = __w_pdfjs_require__(41);
+var sharedKey = __w_pdfjs_require__(53);
+var CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(69);
+var IE_PROTO = sharedKey('IE_PROTO');
+var Object = global.Object;
+var ObjectPrototype = Object.prototype;
+module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
+ var object = toObject(O);
+ if (hasOwn(object, IE_PROTO))
+ return object[IE_PROTO];
+ var constructor = object.constructor;
+ if (isCallable(constructor) && object instanceof constructor) {
+ return constructor.prototype;
+ }
+ return object instanceof Object ? ObjectPrototype : null;
+};
+
+/***/ }),
+/* 69 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+module.exports = !fails(function () {
+ function F() {
+ }
+ F.prototype.constructor = null;
+ return Object.getPrototypeOf(new F()) !== F.prototype;
+});
+
+/***/ }),
+/* 70 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var anObject = __w_pdfjs_require__(48);
+var aPossiblePrototype = __w_pdfjs_require__(71);
+module.exports = Object.setPrototypeOf || ('__proto__' in {} ? (function () {
+ var CORRECT_SETTER = false;
+ var test = {};
+ var setter;
+ try {
+ setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
+ setter(test, []);
+ CORRECT_SETTER = test instanceof Array;
+ } catch (error) {
+ }
+ return function setPrototypeOf(O, proto) {
+ anObject(O);
+ aPossiblePrototype(proto);
+ if (CORRECT_SETTER)
+ setter(O, proto);
+ else
+ O.__proto__ = proto;
+ return O;
+ };
+}()) : undefined);
+
+/***/ }),
+/* 71 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isCallable = __w_pdfjs_require__(23);
+var String = global.String;
+var TypeError = global.TypeError;
+module.exports = function (argument) {
+ if (typeof argument == 'object' || isCallable(argument))
+ return argument;
+ throw TypeError("Can't set " + String(argument) + ' as a prototype');
+};
+
+/***/ }),
+/* 72 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var anObject = __w_pdfjs_require__(48);
+var definePropertiesModule = __w_pdfjs_require__(73);
+var enumBugKeys = __w_pdfjs_require__(65);
+var hiddenKeys = __w_pdfjs_require__(54);
+var html = __w_pdfjs_require__(75);
+var documentCreateElement = __w_pdfjs_require__(44);
+var sharedKey = __w_pdfjs_require__(53);
+var GT = '>';
+var LT = '<';
+var PROTOTYPE = 'prototype';
+var SCRIPT = 'script';
+var IE_PROTO = sharedKey('IE_PROTO');
+var EmptyConstructor = function () {
+};
+var scriptTag = function (content) {
+ return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
+};
+var NullProtoObjectViaActiveX = function (activeXDocument) {
+ activeXDocument.write(scriptTag(''));
+ activeXDocument.close();
+ var temp = activeXDocument.parentWindow.Object;
+ activeXDocument = null;
+ return temp;
+};
+var NullProtoObjectViaIFrame = function () {
+ var iframe = documentCreateElement('iframe');
+ var JS = 'java' + SCRIPT + ':';
+ var iframeDocument;
+ iframe.style.display = 'none';
+ html.appendChild(iframe);
+ iframe.src = String(JS);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(scriptTag('document.F=Object'));
+ iframeDocument.close();
+ return iframeDocument.F;
+};
+var activeXDocument;
+var NullProtoObject = function () {
+ try {
+ activeXDocument = new ActiveXObject('htmlfile');
+ } catch (error) {
+ }
+ NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);
+ var length = enumBugKeys.length;
+ while (length--)
+ delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
+ return NullProtoObject();
+};
+hiddenKeys[IE_PROTO] = true;
+module.exports = Object.create || function create(O, Properties) {
+ var result;
+ if (O !== null) {
+ EmptyConstructor[PROTOTYPE] = anObject(O);
+ result = new EmptyConstructor();
+ EmptyConstructor[PROTOTYPE] = null;
+ result[IE_PROTO] = O;
+ } else
+ result = NullProtoObject();
+ return Properties === undefined ? result : definePropertiesModule.f(result, Properties);
+};
+
+/***/ }),
+/* 73 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(47);
+var definePropertyModule = __w_pdfjs_require__(46);
+var anObject = __w_pdfjs_require__(48);
+var toIndexedObject = __w_pdfjs_require__(15);
+var objectKeys = __w_pdfjs_require__(74);
+exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var props = toIndexedObject(Properties);
+ var keys = objectKeys(Properties);
+ var length = keys.length;
+ var index = 0;
+ var key;
+ while (length > index)
+ definePropertyModule.f(O, key = keys[index++], props[key]);
+ return O;
+};
+
+/***/ }),
+/* 74 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var internalObjectKeys = __w_pdfjs_require__(59);
+var enumBugKeys = __w_pdfjs_require__(65);
+module.exports = Object.keys || function keys(O) {
+ return internalObjectKeys(O, enumBugKeys);
+};
+
+/***/ }),
+/* 75 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var getBuiltIn = __w_pdfjs_require__(25);
+module.exports = getBuiltIn('document', 'documentElement');
+
+/***/ }),
+/* 76 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var replace = uncurryThis(''.replace);
+var TEST = function (arg) {
+ return String(Error(arg).stack);
+}('zxcasd');
+var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
+var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
+module.exports = function (stack, dropEntries) {
+ if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string') {
+ while (dropEntries--)
+ stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
+ }
+ return stack;
+};
+
+/***/ }),
+/* 77 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var isObject = __w_pdfjs_require__(22);
+var createNonEnumerableProperty = __w_pdfjs_require__(45);
+module.exports = function (O, options) {
+ if (isObject(options) && 'cause' in options) {
+ createNonEnumerableProperty(O, 'cause', options.cause);
+ }
+};
+
+/***/ }),
+/* 78 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var bind = __w_pdfjs_require__(79);
+var call = __w_pdfjs_require__(11);
+var anObject = __w_pdfjs_require__(48);
+var tryToString = __w_pdfjs_require__(33);
+var isArrayIteratorMethod = __w_pdfjs_require__(80);
+var lengthOfArrayLike = __w_pdfjs_require__(63);
+var isPrototypeOf = __w_pdfjs_require__(26);
+var getIterator = __w_pdfjs_require__(82);
+var getIteratorMethod = __w_pdfjs_require__(83);
+var iteratorClose = __w_pdfjs_require__(86);
+var TypeError = global.TypeError;
+var Result = function (stopped, result) {
+ this.stopped = stopped;
+ this.result = result;
+};
+var ResultPrototype = Result.prototype;
+module.exports = function (iterable, unboundFunction, options) {
+ var that = options && options.that;
+ var AS_ENTRIES = !!(options && options.AS_ENTRIES);
+ var IS_ITERATOR = !!(options && options.IS_ITERATOR);
+ var INTERRUPTED = !!(options && options.INTERRUPTED);
+ var fn = bind(unboundFunction, that);
+ var iterator, iterFn, index, length, result, next, step;
+ var stop = function (condition) {
+ if (iterator)
+ iteratorClose(iterator, 'normal', condition);
+ return new Result(true, condition);
+ };
+ var callFn = function (value) {
+ if (AS_ENTRIES) {
+ anObject(value);
+ return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
+ }
+ return INTERRUPTED ? fn(value, stop) : fn(value);
+ };
+ if (IS_ITERATOR) {
+ iterator = iterable;
+ } else {
+ iterFn = getIteratorMethod(iterable);
+ if (!iterFn)
+ throw TypeError(tryToString(iterable) + ' is not iterable');
+ if (isArrayIteratorMethod(iterFn)) {
+ for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
+ result = callFn(iterable[index]);
+ if (result && isPrototypeOf(ResultPrototype, result))
+ return result;
+ }
+ return new Result(false);
+ }
+ iterator = getIterator(iterable, iterFn);
+ }
+ next = iterator.next;
+ while (!(step = call(next, iterator)).done) {
+ try {
+ result = callFn(step.value);
+ } catch (error) {
+ iteratorClose(iterator, 'throw', error);
+ }
+ if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result))
+ return result;
+ }
+ return new Result(false);
+};
+
+/***/ }),
+/* 79 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var aCallable = __w_pdfjs_require__(32);
+var NATIVE_BIND = __w_pdfjs_require__(12);
+var bind = uncurryThis(uncurryThis.bind);
+module.exports = function (fn, that) {
+ aCallable(fn);
+ return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function () {
+ return fn.apply(that, arguments);
+ };
+};
+
+/***/ }),
+/* 80 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var Iterators = __w_pdfjs_require__(81);
+var ITERATOR = wellKnownSymbol('iterator');
+var ArrayPrototype = Array.prototype;
+module.exports = function (it) {
+ return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
+};
+
+/***/ }),
+/* 81 */
+/***/ ((module) => {
+
+module.exports = {};
+
+/***/ }),
+/* 82 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var call = __w_pdfjs_require__(11);
+var aCallable = __w_pdfjs_require__(32);
+var anObject = __w_pdfjs_require__(48);
+var tryToString = __w_pdfjs_require__(33);
+var getIteratorMethod = __w_pdfjs_require__(83);
+var TypeError = global.TypeError;
+module.exports = function (argument, usingIterator) {
+ var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
+ if (aCallable(iteratorMethod))
+ return anObject(call(iteratorMethod, argument));
+ throw TypeError(tryToString(argument) + ' is not iterable');
+};
+
+/***/ }),
+/* 83 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var classof = __w_pdfjs_require__(84);
+var getMethod = __w_pdfjs_require__(31);
+var Iterators = __w_pdfjs_require__(81);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var ITERATOR = wellKnownSymbol('iterator');
+module.exports = function (it) {
+ if (it != undefined)
+ return getMethod(it, ITERATOR) || getMethod(it, '@@iterator') || Iterators[classof(it)];
+};
+
+/***/ }),
+/* 84 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(85);
+var isCallable = __w_pdfjs_require__(23);
+var classofRaw = __w_pdfjs_require__(18);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var TO_STRING_TAG = wellKnownSymbol('toStringTag');
+var Object = global.Object;
+var CORRECT_ARGUMENTS = classofRaw((function () {
+ return arguments;
+}())) == 'Arguments';
+var tryGet = function (it, key) {
+ try {
+ return it[key];
+ } catch (error) {
+ }
+};
+module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
+ var O, tag, result;
+ return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;
+};
+
+/***/ }),
+/* 85 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var TO_STRING_TAG = wellKnownSymbol('toStringTag');
+var test = {};
+test[TO_STRING_TAG] = 'z';
+module.exports = String(test) === '[object z]';
+
+/***/ }),
+/* 86 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var call = __w_pdfjs_require__(11);
+var anObject = __w_pdfjs_require__(48);
+var getMethod = __w_pdfjs_require__(31);
+module.exports = function (iterator, kind, value) {
+ var innerResult, innerError;
+ anObject(iterator);
+ try {
+ innerResult = getMethod(iterator, 'return');
+ if (!innerResult) {
+ if (kind === 'throw')
+ throw value;
+ return value;
+ }
+ innerResult = call(innerResult, iterator);
+ } catch (error) {
+ innerError = true;
+ innerResult = error;
+ }
+ if (kind === 'throw')
+ throw value;
+ if (innerError)
+ throw innerResult;
+ anObject(innerResult);
+ return value;
+};
+
+/***/ }),
+/* 87 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var toString = __w_pdfjs_require__(88);
+module.exports = function (argument, $default) {
+ return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);
+};
+
+/***/ }),
+/* 88 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var classof = __w_pdfjs_require__(84);
+var String = global.String;
+module.exports = function (argument) {
+ if (classof(argument) === 'Symbol')
+ throw TypeError('Cannot convert a Symbol value to a string');
+ return String(argument);
+};
+
+/***/ }),
+/* 89 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+var createPropertyDescriptor = __w_pdfjs_require__(14);
+module.exports = !fails(function () {
+ var error = Error('a');
+ if (!('stack' in error))
+ return true;
+ Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));
+ return error.stack !== 7;
+});
+
+/***/ }),
+/* 90 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var toIndexedObject = __w_pdfjs_require__(15);
+var addToUnscopables = __w_pdfjs_require__(91);
+var Iterators = __w_pdfjs_require__(81);
+var InternalStateModule = __w_pdfjs_require__(51);
+var defineProperty = (__w_pdfjs_require__(46).f);
+var defineIterator = __w_pdfjs_require__(92);
+var IS_PURE = __w_pdfjs_require__(37);
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var ARRAY_ITERATOR = 'Array Iterator';
+var setInternalState = InternalStateModule.set;
+var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
+module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
+ setInternalState(this, {
+ type: ARRAY_ITERATOR,
+ target: toIndexedObject(iterated),
+ index: 0,
+ kind: kind
+ });
+}, function () {
+ var state = getInternalState(this);
+ var target = state.target;
+ var kind = state.kind;
+ var index = state.index++;
+ if (!target || index >= target.length) {
+ state.target = undefined;
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+ if (kind == 'keys')
+ return {
+ value: index,
+ done: false
+ };
+ if (kind == 'values')
+ return {
+ value: target[index],
+ done: false
+ };
+ return {
+ value: [
+ index,
+ target[index]
+ ],
+ done: false
+ };
+}, 'values');
+var values = Iterators.Arguments = Iterators.Array;
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+if (!IS_PURE && DESCRIPTORS && values.name !== 'values')
+ try {
+ defineProperty(values, 'name', { value: 'values' });
+ } catch (error) {
+ }
+
+/***/ }),
+/* 91 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var create = __w_pdfjs_require__(72);
+var definePropertyModule = __w_pdfjs_require__(46);
+var UNSCOPABLES = wellKnownSymbol('unscopables');
+var ArrayPrototype = Array.prototype;
+if (ArrayPrototype[UNSCOPABLES] == undefined) {
+ definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {
+ configurable: true,
+ value: create(null)
+ });
+}
+module.exports = function (key) {
+ ArrayPrototype[UNSCOPABLES][key] = true;
+};
+
+/***/ }),
+/* 92 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var $ = __w_pdfjs_require__(6);
+var call = __w_pdfjs_require__(11);
+var IS_PURE = __w_pdfjs_require__(37);
+var FunctionName = __w_pdfjs_require__(55);
+var isCallable = __w_pdfjs_require__(23);
+var createIteratorConstructor = __w_pdfjs_require__(93);
+var getPrototypeOf = __w_pdfjs_require__(68);
+var setPrototypeOf = __w_pdfjs_require__(70);
+var setToStringTag = __w_pdfjs_require__(95);
+var createNonEnumerableProperty = __w_pdfjs_require__(45);
+var redefine = __w_pdfjs_require__(49);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var Iterators = __w_pdfjs_require__(81);
+var IteratorsCore = __w_pdfjs_require__(94);
+var PROPER_FUNCTION_NAME = FunctionName.PROPER;
+var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
+var IteratorPrototype = IteratorsCore.IteratorPrototype;
+var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
+var ITERATOR = wellKnownSymbol('iterator');
+var KEYS = 'keys';
+var VALUES = 'values';
+var ENTRIES = 'entries';
+var returnThis = function () {
+ return this;
+};
+module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
+ createIteratorConstructor(IteratorConstructor, NAME, next);
+ var getIterationMethod = function (KIND) {
+ if (KIND === DEFAULT && defaultIterator)
+ return defaultIterator;
+ if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype)
+ return IterablePrototype[KIND];
+ switch (KIND) {
+ case KEYS:
+ return function keys() {
+ return new IteratorConstructor(this, KIND);
+ };
+ case VALUES:
+ return function values() {
+ return new IteratorConstructor(this, KIND);
+ };
+ case ENTRIES:
+ return function entries() {
+ return new IteratorConstructor(this, KIND);
+ };
+ }
+ return function () {
+ return new IteratorConstructor(this);
+ };
+ };
+ var TO_STRING_TAG = NAME + ' Iterator';
+ var INCORRECT_VALUES_NAME = false;
+ var IterablePrototype = Iterable.prototype;
+ var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT];
+ var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
+ var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
+ var CurrentIteratorPrototype, methods, KEY;
+ if (anyNativeIterator) {
+ CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
+ if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
+ if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
+ if (setPrototypeOf) {
+ setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
+ } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {
+ redefine(CurrentIteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
+ if (IS_PURE)
+ Iterators[TO_STRING_TAG] = returnThis;
+ }
+ }
+ if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
+ if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
+ createNonEnumerableProperty(IterablePrototype, 'name', VALUES);
+ } else {
+ INCORRECT_VALUES_NAME = true;
+ defaultIterator = function values() {
+ return call(nativeIterator, this);
+ };
+ }
+ }
+ if (DEFAULT) {
+ methods = {
+ values: getIterationMethod(VALUES),
+ keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
+ entries: getIterationMethod(ENTRIES)
+ };
+ if (FORCED)
+ for (KEY in methods) {
+ if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
+ redefine(IterablePrototype, KEY, methods[KEY]);
+ }
+ }
+ else
+ $({
+ target: NAME,
+ proto: true,
+ forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME
+ }, methods);
+ }
+ if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
+ redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });
+ }
+ Iterators[NAME] = defaultIterator;
+ return methods;
+};
+
+/***/ }),
+/* 93 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var IteratorPrototype = (__w_pdfjs_require__(94).IteratorPrototype);
+var create = __w_pdfjs_require__(72);
+var createPropertyDescriptor = __w_pdfjs_require__(14);
+var setToStringTag = __w_pdfjs_require__(95);
+var Iterators = __w_pdfjs_require__(81);
+var returnThis = function () {
+ return this;
+};
+module.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
+ var TO_STRING_TAG = NAME + ' Iterator';
+ IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });
+ setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
+ Iterators[TO_STRING_TAG] = returnThis;
+ return IteratorConstructor;
+};
+
+/***/ }),
+/* 94 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var fails = __w_pdfjs_require__(10);
+var isCallable = __w_pdfjs_require__(23);
+var create = __w_pdfjs_require__(72);
+var getPrototypeOf = __w_pdfjs_require__(68);
+var redefine = __w_pdfjs_require__(49);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var IS_PURE = __w_pdfjs_require__(37);
+var ITERATOR = wellKnownSymbol('iterator');
+var BUGGY_SAFARI_ITERATORS = false;
+var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
+if ([].keys) {
+ arrayIterator = [].keys();
+ if (!('next' in arrayIterator))
+ BUGGY_SAFARI_ITERATORS = true;
+ else {
+ PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
+ if (PrototypeOfArrayIteratorPrototype !== Object.prototype)
+ IteratorPrototype = PrototypeOfArrayIteratorPrototype;
+ }
+}
+var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {
+ var test = {};
+ return IteratorPrototype[ITERATOR].call(test) !== test;
+});
+if (NEW_ITERATOR_PROTOTYPE)
+ IteratorPrototype = {};
+else if (IS_PURE)
+ IteratorPrototype = create(IteratorPrototype);
+if (!isCallable(IteratorPrototype[ITERATOR])) {
+ redefine(IteratorPrototype, ITERATOR, function () {
+ return this;
+ });
+}
+module.exports = {
+ IteratorPrototype: IteratorPrototype,
+ BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
+};
+
+/***/ }),
+/* 95 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var defineProperty = (__w_pdfjs_require__(46).f);
+var hasOwn = __w_pdfjs_require__(40);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var TO_STRING_TAG = wellKnownSymbol('toStringTag');
+module.exports = function (target, TAG, STATIC) {
+ if (target && !STATIC)
+ target = target.prototype;
+ if (target && !hasOwn(target, TO_STRING_TAG)) {
+ defineProperty(target, TO_STRING_TAG, {
+ configurable: true,
+ value: TAG
+ });
+ }
+};
+
+/***/ }),
+/* 96 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(85);
+var redefine = __w_pdfjs_require__(49);
+var toString = __w_pdfjs_require__(97);
+if (!TO_STRING_TAG_SUPPORT) {
+ redefine(Object.prototype, 'toString', toString, { unsafe: true });
+}
+
+/***/ }),
+/* 97 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(85);
+var classof = __w_pdfjs_require__(84);
+module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
+ return '[object ' + classof(this) + ']';
+};
+
+/***/ }),
+/* 98 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var $ = __w_pdfjs_require__(6);
+var IS_PURE = __w_pdfjs_require__(37);
+var global = __w_pdfjs_require__(7);
+var getBuiltIn = __w_pdfjs_require__(25);
+var call = __w_pdfjs_require__(11);
+var NativePromise = __w_pdfjs_require__(99);
+var redefine = __w_pdfjs_require__(49);
+var redefineAll = __w_pdfjs_require__(100);
+var setPrototypeOf = __w_pdfjs_require__(70);
+var setToStringTag = __w_pdfjs_require__(95);
+var setSpecies = __w_pdfjs_require__(101);
+var aCallable = __w_pdfjs_require__(32);
+var isCallable = __w_pdfjs_require__(23);
+var isObject = __w_pdfjs_require__(22);
+var anInstance = __w_pdfjs_require__(102);
+var inspectSource = __w_pdfjs_require__(50);
+var iterate = __w_pdfjs_require__(78);
+var checkCorrectnessOfIteration = __w_pdfjs_require__(103);
+var speciesConstructor = __w_pdfjs_require__(104);
+var task = (__w_pdfjs_require__(107).set);
+var microtask = __w_pdfjs_require__(113);
+var promiseResolve = __w_pdfjs_require__(116);
+var hostReportErrors = __w_pdfjs_require__(118);
+var newPromiseCapabilityModule = __w_pdfjs_require__(117);
+var perform = __w_pdfjs_require__(119);
+var Queue = __w_pdfjs_require__(120);
+var InternalStateModule = __w_pdfjs_require__(51);
+var isForced = __w_pdfjs_require__(67);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var IS_BROWSER = __w_pdfjs_require__(121);
+var IS_NODE = __w_pdfjs_require__(112);
+var V8_VERSION = __w_pdfjs_require__(29);
+var SPECIES = wellKnownSymbol('species');
+var PROMISE = 'Promise';
+var getInternalState = InternalStateModule.getterFor(PROMISE);
+var setInternalState = InternalStateModule.set;
+var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
+var NativePromisePrototype = NativePromise && NativePromise.prototype;
+var PromiseConstructor = NativePromise;
+var PromisePrototype = NativePromisePrototype;
+var TypeError = global.TypeError;
+var document = global.document;
+var process = global.process;
+var newPromiseCapability = newPromiseCapabilityModule.f;
+var newGenericPromiseCapability = newPromiseCapability;
+var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);
+var NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);
+var UNHANDLED_REJECTION = 'unhandledrejection';
+var REJECTION_HANDLED = 'rejectionhandled';
+var PENDING = 0;
+var FULFILLED = 1;
+var REJECTED = 2;
+var HANDLED = 1;
+var UNHANDLED = 2;
+var SUBCLASSING = false;
+var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
+var FORCED = isForced(PROMISE, function () {
+ var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);
+ var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);
+ if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66)
+ return true;
+ if (IS_PURE && !PromisePrototype['finally'])
+ return true;
+ if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE))
+ return false;
+ var promise = new PromiseConstructor(function (resolve) {
+ resolve(1);
+ });
+ var FakePromise = function (exec) {
+ exec(function () {
+ }, function () {
+ });
+ };
+ var constructor = promise.constructor = {};
+ constructor[SPECIES] = FakePromise;
+ SUBCLASSING = promise.then(function () {
+ }) instanceof FakePromise;
+ if (!SUBCLASSING)
+ return true;
+ return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;
+});
+var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {
+ PromiseConstructor.all(iterable)['catch'](function () {
+ });
+});
+var isThenable = function (it) {
+ var then;
+ return isObject(it) && isCallable(then = it.then) ? then : false;
+};
+var callReaction = function (reaction, state) {
+ var value = state.value;
+ var ok = state.state == FULFILLED;
+ var handler = ok ? reaction.ok : reaction.fail;
+ var resolve = reaction.resolve;
+ var reject = reaction.reject;
+ var domain = reaction.domain;
+ var result, then, exited;
+ try {
+ if (handler) {
+ if (!ok) {
+ if (state.rejection === UNHANDLED)
+ onHandleUnhandled(state);
+ state.rejection = HANDLED;
+ }
+ if (handler === true)
+ result = value;
+ else {
+ if (domain)
+ domain.enter();
+ result = handler(value);
+ if (domain) {
+ domain.exit();
+ exited = true;
+ }
+ }
+ if (result === reaction.promise) {
+ reject(TypeError('Promise-chain cycle'));
+ } else if (then = isThenable(result)) {
+ call(then, result, resolve, reject);
+ } else
+ resolve(result);
+ } else
+ reject(value);
+ } catch (error) {
+ if (domain && !exited)
+ domain.exit();
+ reject(error);
+ }
+};
+var notify = function (state, isReject) {
+ if (state.notified)
+ return;
+ state.notified = true;
+ microtask(function () {
+ var reactions = state.reactions;
+ var reaction;
+ while (reaction = reactions.get()) {
+ callReaction(reaction, state);
+ }
+ state.notified = false;
+ if (isReject && !state.rejection)
+ onUnhandled(state);
+ });
+};
+var dispatchEvent = function (name, promise, reason) {
+ var event, handler;
+ if (DISPATCH_EVENT) {
+ event = document.createEvent('Event');
+ event.promise = promise;
+ event.reason = reason;
+ event.initEvent(name, false, true);
+ global.dispatchEvent(event);
+ } else
+ event = {
+ promise: promise,
+ reason: reason
+ };
+ if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name]))
+ handler(event);
+ else if (name === UNHANDLED_REJECTION)
+ hostReportErrors('Unhandled promise rejection', reason);
+};
+var onUnhandled = function (state) {
+ call(task, global, function () {
+ var promise = state.facade;
+ var value = state.value;
+ var IS_UNHANDLED = isUnhandled(state);
+ var result;
+ if (IS_UNHANDLED) {
+ result = perform(function () {
+ if (IS_NODE) {
+ process.emit('unhandledRejection', value, promise);
+ } else
+ dispatchEvent(UNHANDLED_REJECTION, promise, value);
+ });
+ state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
+ if (result.error)
+ throw result.value;
+ }
+ });
+};
+var isUnhandled = function (state) {
+ return state.rejection !== HANDLED && !state.parent;
+};
+var onHandleUnhandled = function (state) {
+ call(task, global, function () {
+ var promise = state.facade;
+ if (IS_NODE) {
+ process.emit('rejectionHandled', promise);
+ } else
+ dispatchEvent(REJECTION_HANDLED, promise, state.value);
+ });
+};
+var bind = function (fn, state, unwrap) {
+ return function (value) {
+ fn(state, value, unwrap);
+ };
+};
+var internalReject = function (state, value, unwrap) {
+ if (state.done)
+ return;
+ state.done = true;
+ if (unwrap)
+ state = unwrap;
+ state.value = value;
+ state.state = REJECTED;
+ notify(state, true);
+};
+var internalResolve = function (state, value, unwrap) {
+ if (state.done)
+ return;
+ state.done = true;
+ if (unwrap)
+ state = unwrap;
+ try {
+ if (state.facade === value)
+ throw TypeError("Promise can't be resolved itself");
+ var then = isThenable(value);
+ if (then) {
+ microtask(function () {
+ var wrapper = { done: false };
+ try {
+ call(then, value, bind(internalResolve, wrapper, state), bind(internalReject, wrapper, state));
+ } catch (error) {
+ internalReject(wrapper, error, state);
+ }
+ });
+ } else {
+ state.value = value;
+ state.state = FULFILLED;
+ notify(state, false);
+ }
+ } catch (error) {
+ internalReject({ done: false }, error, state);
+ }
+};
+if (FORCED) {
+ PromiseConstructor = function Promise(executor) {
+ anInstance(this, PromisePrototype);
+ aCallable(executor);
+ call(Internal, this);
+ var state = getInternalState(this);
+ try {
+ executor(bind(internalResolve, state), bind(internalReject, state));
+ } catch (error) {
+ internalReject(state, error);
+ }
+ };
+ PromisePrototype = PromiseConstructor.prototype;
+ Internal = function Promise(executor) {
+ setInternalState(this, {
+ type: PROMISE,
+ done: false,
+ notified: false,
+ parent: false,
+ reactions: new Queue(),
+ rejection: false,
+ state: PENDING,
+ value: undefined
+ });
+ };
+ Internal.prototype = redefineAll(PromisePrototype, {
+ then: function then(onFulfilled, onRejected) {
+ var state = getInternalPromiseState(this);
+ var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));
+ state.parent = true;
+ reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;
+ reaction.fail = isCallable(onRejected) && onRejected;
+ reaction.domain = IS_NODE ? process.domain : undefined;
+ if (state.state == PENDING)
+ state.reactions.add(reaction);
+ else
+ microtask(function () {
+ callReaction(reaction, state);
+ });
+ return reaction.promise;
+ },
+ 'catch': function (onRejected) {
+ return this.then(undefined, onRejected);
+ }
+ });
+ OwnPromiseCapability = function () {
+ var promise = new Internal();
+ var state = getInternalState(promise);
+ this.promise = promise;
+ this.resolve = bind(internalResolve, state);
+ this.reject = bind(internalReject, state);
+ };
+ newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
+ return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);
+ };
+ if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {
+ nativeThen = NativePromisePrototype.then;
+ if (!SUBCLASSING) {
+ redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {
+ var that = this;
+ return new PromiseConstructor(function (resolve, reject) {
+ call(nativeThen, that, resolve, reject);
+ }).then(onFulfilled, onRejected);
+ }, { unsafe: true });
+ redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });
+ }
+ try {
+ delete NativePromisePrototype.constructor;
+ } catch (error) {
+ }
+ if (setPrototypeOf) {
+ setPrototypeOf(NativePromisePrototype, PromisePrototype);
+ }
+ }
+}
+$({
+ global: true,
+ wrap: true,
+ forced: FORCED
+}, { Promise: PromiseConstructor });
+setToStringTag(PromiseConstructor, PROMISE, false, true);
+setSpecies(PROMISE);
+PromiseWrapper = getBuiltIn(PROMISE);
+$({
+ target: PROMISE,
+ stat: true,
+ forced: FORCED
+}, {
+ reject: function reject(r) {
+ var capability = newPromiseCapability(this);
+ call(capability.reject, undefined, r);
+ return capability.promise;
+ }
+});
+$({
+ target: PROMISE,
+ stat: true,
+ forced: IS_PURE || FORCED
+}, {
+ resolve: function resolve(x) {
+ return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);
+ }
+});
+$({
+ target: PROMISE,
+ stat: true,
+ forced: INCORRECT_ITERATION
+}, {
+ all: function all(iterable) {
+ var C = this;
+ var capability = newPromiseCapability(C);
+ var resolve = capability.resolve;
+ var reject = capability.reject;
+ var result = perform(function () {
+ var $promiseResolve = aCallable(C.resolve);
+ var values = [];
+ var counter = 0;
+ var remaining = 1;
+ iterate(iterable, function (promise) {
+ var index = counter++;
+ var alreadyCalled = false;
+ remaining++;
+ call($promiseResolve, C, promise).then(function (value) {
+ if (alreadyCalled)
+ return;
+ alreadyCalled = true;
+ values[index] = value;
+ --remaining || resolve(values);
+ }, reject);
+ });
+ --remaining || resolve(values);
+ });
+ if (result.error)
+ reject(result.value);
+ return capability.promise;
+ },
+ race: function race(iterable) {
+ var C = this;
+ var capability = newPromiseCapability(C);
+ var reject = capability.reject;
+ var result = perform(function () {
+ var $promiseResolve = aCallable(C.resolve);
+ iterate(iterable, function (promise) {
+ call($promiseResolve, C, promise).then(capability.resolve, reject);
+ });
+ });
+ if (result.error)
+ reject(result.value);
+ return capability.promise;
+ }
+});
+
+/***/ }),
+/* 99 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+module.exports = global.Promise;
+
+/***/ }),
+/* 100 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var redefine = __w_pdfjs_require__(49);
+module.exports = function (target, src, options) {
+ for (var key in src)
+ redefine(target, key, src[key], options);
+ return target;
+};
+
+/***/ }),
+/* 101 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var getBuiltIn = __w_pdfjs_require__(25);
+var definePropertyModule = __w_pdfjs_require__(46);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var SPECIES = wellKnownSymbol('species');
+module.exports = function (CONSTRUCTOR_NAME) {
+ var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
+ var defineProperty = definePropertyModule.f;
+ if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
+ defineProperty(Constructor, SPECIES, {
+ configurable: true,
+ get: function () {
+ return this;
+ }
+ });
+ }
+};
+
+/***/ }),
+/* 102 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isPrototypeOf = __w_pdfjs_require__(26);
+var TypeError = global.TypeError;
+module.exports = function (it, Prototype) {
+ if (isPrototypeOf(Prototype, it))
+ return it;
+ throw TypeError('Incorrect invocation');
+};
+
+/***/ }),
+/* 103 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var ITERATOR = wellKnownSymbol('iterator');
+var SAFE_CLOSING = false;
+try {
+ var called = 0;
+ var iteratorWithReturn = {
+ next: function () {
+ return { done: !!called++ };
+ },
+ 'return': function () {
+ SAFE_CLOSING = true;
+ }
+ };
+ iteratorWithReturn[ITERATOR] = function () {
+ return this;
+ };
+ Array.from(iteratorWithReturn, function () {
+ throw 2;
+ });
+} catch (error) {
+}
+module.exports = function (exec, SKIP_CLOSING) {
+ if (!SKIP_CLOSING && !SAFE_CLOSING)
+ return false;
+ var ITERATION_SUPPORT = false;
+ try {
+ var object = {};
+ object[ITERATOR] = function () {
+ return {
+ next: function () {
+ return { done: ITERATION_SUPPORT = true };
+ }
+ };
+ };
+ exec(object);
+ } catch (error) {
+ }
+ return ITERATION_SUPPORT;
+};
+
+/***/ }),
+/* 104 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var anObject = __w_pdfjs_require__(48);
+var aConstructor = __w_pdfjs_require__(105);
+var wellKnownSymbol = __w_pdfjs_require__(35);
+var SPECIES = wellKnownSymbol('species');
+module.exports = function (O, defaultConstructor) {
+ var C = anObject(O).constructor;
+ var S;
+ return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);
+};
+
+/***/ }),
+/* 105 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var isConstructor = __w_pdfjs_require__(106);
+var tryToString = __w_pdfjs_require__(33);
+var TypeError = global.TypeError;
+module.exports = function (argument) {
+ if (isConstructor(argument))
+ return argument;
+ throw TypeError(tryToString(argument) + ' is not a constructor');
+};
+
+/***/ }),
+/* 106 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var fails = __w_pdfjs_require__(10);
+var isCallable = __w_pdfjs_require__(23);
+var classof = __w_pdfjs_require__(84);
+var getBuiltIn = __w_pdfjs_require__(25);
+var inspectSource = __w_pdfjs_require__(50);
+var noop = function () {
+};
+var empty = [];
+var construct = getBuiltIn('Reflect', 'construct');
+var constructorRegExp = /^\s*(?:class|function)\b/;
+var exec = uncurryThis(constructorRegExp.exec);
+var INCORRECT_TO_STRING = !constructorRegExp.exec(noop);
+var isConstructorModern = function isConstructor(argument) {
+ if (!isCallable(argument))
+ return false;
+ try {
+ construct(noop, empty, argument);
+ return true;
+ } catch (error) {
+ return false;
+ }
+};
+var isConstructorLegacy = function isConstructor(argument) {
+ if (!isCallable(argument))
+ return false;
+ switch (classof(argument)) {
+ case 'AsyncFunction':
+ case 'GeneratorFunction':
+ case 'AsyncGeneratorFunction':
+ return false;
+ }
+ try {
+ return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
+ } catch (error) {
+ return true;
+ }
+};
+isConstructorLegacy.sham = true;
+module.exports = !construct || fails(function () {
+ var called;
+ return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () {
+ called = true;
+ }) || called;
+}) ? isConstructorLegacy : isConstructorModern;
+
+/***/ }),
+/* 107 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var apply = __w_pdfjs_require__(108);
+var bind = __w_pdfjs_require__(79);
+var isCallable = __w_pdfjs_require__(23);
+var hasOwn = __w_pdfjs_require__(40);
+var fails = __w_pdfjs_require__(10);
+var html = __w_pdfjs_require__(75);
+var arraySlice = __w_pdfjs_require__(109);
+var createElement = __w_pdfjs_require__(44);
+var validateArgumentsLength = __w_pdfjs_require__(110);
+var IS_IOS = __w_pdfjs_require__(111);
+var IS_NODE = __w_pdfjs_require__(112);
+var set = global.setImmediate;
+var clear = global.clearImmediate;
+var process = global.process;
+var Dispatch = global.Dispatch;
+var Function = global.Function;
+var MessageChannel = global.MessageChannel;
+var String = global.String;
+var counter = 0;
+var queue = {};
+var ONREADYSTATECHANGE = 'onreadystatechange';
+var location, defer, channel, port;
+try {
+ location = global.location;
+} catch (error) {
+}
+var run = function (id) {
+ if (hasOwn(queue, id)) {
+ var fn = queue[id];
+ delete queue[id];
+ fn();
+ }
+};
+var runner = function (id) {
+ return function () {
+ run(id);
+ };
+};
+var listener = function (event) {
+ run(event.data);
+};
+var post = function (id) {
+ global.postMessage(String(id), location.protocol + '//' + location.host);
+};
+if (!set || !clear) {
+ set = function setImmediate(handler) {
+ validateArgumentsLength(arguments.length, 1);
+ var fn = isCallable(handler) ? handler : Function(handler);
+ var args = arraySlice(arguments, 1);
+ queue[++counter] = function () {
+ apply(fn, undefined, args);
+ };
+ defer(counter);
+ return counter;
+ };
+ clear = function clearImmediate(id) {
+ delete queue[id];
+ };
+ if (IS_NODE) {
+ defer = function (id) {
+ process.nextTick(runner(id));
+ };
+ } else if (Dispatch && Dispatch.now) {
+ defer = function (id) {
+ Dispatch.now(runner(id));
+ };
+ } else if (MessageChannel && !IS_IOS) {
+ channel = new MessageChannel();
+ port = channel.port2;
+ channel.port1.onmessage = listener;
+ defer = bind(port.postMessage, port);
+ } else if (global.addEventListener && isCallable(global.postMessage) && !global.importScripts && location && location.protocol !== 'file:' && !fails(post)) {
+ defer = post;
+ global.addEventListener('message', listener, false);
+ } else if (ONREADYSTATECHANGE in createElement('script')) {
+ defer = function (id) {
+ html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
+ html.removeChild(this);
+ run(id);
+ };
+ };
+ } else {
+ defer = function (id) {
+ setTimeout(runner(id), 0);
+ };
+ }
+}
+module.exports = {
+ set: set,
+ clear: clear
+};
+
+/***/ }),
+/* 108 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var NATIVE_BIND = __w_pdfjs_require__(12);
+var FunctionPrototype = Function.prototype;
+var apply = FunctionPrototype.apply;
+var call = FunctionPrototype.call;
+module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {
+ return call.apply(apply, arguments);
+});
+
+/***/ }),
+/* 109 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+module.exports = uncurryThis([].slice);
+
+/***/ }),
+/* 110 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var TypeError = global.TypeError;
+module.exports = function (passed, required) {
+ if (passed < required)
+ throw TypeError('Not enough arguments');
+ return passed;
+};
+
+/***/ }),
+/* 111 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var userAgent = __w_pdfjs_require__(30);
+module.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);
+
+/***/ }),
+/* 112 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var classof = __w_pdfjs_require__(18);
+var global = __w_pdfjs_require__(7);
+module.exports = classof(global.process) == 'process';
+
+/***/ }),
+/* 113 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var bind = __w_pdfjs_require__(79);
+var getOwnPropertyDescriptor = (__w_pdfjs_require__(8).f);
+var macrotask = (__w_pdfjs_require__(107).set);
+var IS_IOS = __w_pdfjs_require__(111);
+var IS_IOS_PEBBLE = __w_pdfjs_require__(114);
+var IS_WEBOS_WEBKIT = __w_pdfjs_require__(115);
+var IS_NODE = __w_pdfjs_require__(112);
+var MutationObserver = global.MutationObserver || global.WebKitMutationObserver;
+var document = global.document;
+var process = global.process;
+var Promise = global.Promise;
+var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');
+var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
+var flush, head, last, notify, toggle, node, promise, then;
+if (!queueMicrotask) {
+ flush = function () {
+ var parent, fn;
+ if (IS_NODE && (parent = process.domain))
+ parent.exit();
+ while (head) {
+ fn = head.fn;
+ head = head.next;
+ try {
+ fn();
+ } catch (error) {
+ if (head)
+ notify();
+ else
+ last = undefined;
+ throw error;
+ }
+ }
+ last = undefined;
+ if (parent)
+ parent.enter();
+ };
+ if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {
+ toggle = true;
+ node = document.createTextNode('');
+ new MutationObserver(flush).observe(node, { characterData: true });
+ notify = function () {
+ node.data = toggle = !toggle;
+ };
+ } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {
+ promise = Promise.resolve(undefined);
+ promise.constructor = Promise;
+ then = bind(promise.then, promise);
+ notify = function () {
+ then(flush);
+ };
+ } else if (IS_NODE) {
+ notify = function () {
+ process.nextTick(flush);
+ };
+ } else {
+ macrotask = bind(macrotask, global);
+ notify = function () {
+ macrotask(flush);
+ };
+ }
+}
+module.exports = queueMicrotask || function (fn) {
+ var task = {
+ fn: fn,
+ next: undefined
+ };
+ if (last)
+ last.next = task;
+ if (!head) {
+ head = task;
+ notify();
+ }
+ last = task;
+};
+
+/***/ }),
+/* 114 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var userAgent = __w_pdfjs_require__(30);
+var global = __w_pdfjs_require__(7);
+module.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;
+
+/***/ }),
+/* 115 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var userAgent = __w_pdfjs_require__(30);
+module.exports = /web0s(?!.*chrome)/i.test(userAgent);
+
+/***/ }),
+/* 116 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var anObject = __w_pdfjs_require__(48);
+var isObject = __w_pdfjs_require__(22);
+var newPromiseCapability = __w_pdfjs_require__(117);
+module.exports = function (C, x) {
+ anObject(C);
+ if (isObject(x) && x.constructor === C)
+ return x;
+ var promiseCapability = newPromiseCapability.f(C);
+ var resolve = promiseCapability.resolve;
+ resolve(x);
+ return promiseCapability.promise;
+};
+
+/***/ }),
+/* 117 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var aCallable = __w_pdfjs_require__(32);
+var PromiseCapability = function (C) {
+ var resolve, reject;
+ this.promise = new C(function ($$resolve, $$reject) {
+ if (resolve !== undefined || reject !== undefined)
+ throw TypeError('Bad Promise constructor');
+ resolve = $$resolve;
+ reject = $$reject;
+ });
+ this.resolve = aCallable(resolve);
+ this.reject = aCallable(reject);
+};
+module.exports.f = function (C) {
+ return new PromiseCapability(C);
+};
+
+/***/ }),
+/* 118 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+module.exports = function (a, b) {
+ var console = global.console;
+ if (console && console.error) {
+ arguments.length == 1 ? console.error(a) : console.error(a, b);
+ }
+};
+
+/***/ }),
+/* 119 */
+/***/ ((module) => {
+
+module.exports = function (exec) {
+ try {
+ return {
+ error: false,
+ value: exec()
+ };
+ } catch (error) {
+ return {
+ error: true,
+ value: error
+ };
+ }
+};
+
+/***/ }),
+/* 120 */
+/***/ ((module) => {
+
+var Queue = function () {
+ this.head = null;
+ this.tail = null;
+};
+Queue.prototype = {
+ add: function (item) {
+ var entry = {
+ item: item,
+ next: null
+ };
+ if (this.head)
+ this.tail.next = entry;
+ else
+ this.head = entry;
+ this.tail = entry;
+ },
+ get: function () {
+ var entry = this.head;
+ if (entry) {
+ this.head = entry.next;
+ if (this.tail === entry)
+ this.tail = null;
+ return entry.item;
+ }
+ }
+};
+module.exports = Queue;
+
+/***/ }),
+/* 121 */
+/***/ ((module) => {
+
+module.exports = typeof window == 'object';
+
+/***/ }),
+/* 122 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var $ = __w_pdfjs_require__(6);
+var call = __w_pdfjs_require__(11);
+var aCallable = __w_pdfjs_require__(32);
+var newPromiseCapabilityModule = __w_pdfjs_require__(117);
+var perform = __w_pdfjs_require__(119);
+var iterate = __w_pdfjs_require__(78);
+$({
+ target: 'Promise',
+ stat: true
+}, {
+ allSettled: function allSettled(iterable) {
+ var C = this;
+ var capability = newPromiseCapabilityModule.f(C);
+ var resolve = capability.resolve;
+ var reject = capability.reject;
+ var result = perform(function () {
+ var promiseResolve = aCallable(C.resolve);
+ var values = [];
+ var counter = 0;
+ var remaining = 1;
+ iterate(iterable, function (promise) {
+ var index = counter++;
+ var alreadyCalled = false;
+ remaining++;
+ call(promiseResolve, C, promise).then(function (value) {
+ if (alreadyCalled)
+ return;
+ alreadyCalled = true;
+ values[index] = {
+ status: 'fulfilled',
+ value: value
+ };
+ --remaining || resolve(values);
+ }, function (error) {
+ if (alreadyCalled)
+ return;
+ alreadyCalled = true;
+ values[index] = {
+ status: 'rejected',
+ reason: error
+ };
+ --remaining || resolve(values);
+ });
+ });
+ --remaining || resolve(values);
+ });
+ if (result.error)
+ reject(result.value);
+ return capability.promise;
+ }
+});
+
+/***/ }),
+/* 123 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var $ = __w_pdfjs_require__(6);
+var aCallable = __w_pdfjs_require__(32);
+var getBuiltIn = __w_pdfjs_require__(25);
+var call = __w_pdfjs_require__(11);
+var newPromiseCapabilityModule = __w_pdfjs_require__(117);
+var perform = __w_pdfjs_require__(119);
+var iterate = __w_pdfjs_require__(78);
+var PROMISE_ANY_ERROR = 'No one promise resolved';
+$({
+ target: 'Promise',
+ stat: true
+}, {
+ any: function any(iterable) {
+ var C = this;
+ var AggregateError = getBuiltIn('AggregateError');
+ var capability = newPromiseCapabilityModule.f(C);
+ var resolve = capability.resolve;
+ var reject = capability.reject;
+ var result = perform(function () {
+ var promiseResolve = aCallable(C.resolve);
+ var errors = [];
+ var counter = 0;
+ var remaining = 1;
+ var alreadyResolved = false;
+ iterate(iterable, function (promise) {
+ var index = counter++;
+ var alreadyRejected = false;
+ remaining++;
+ call(promiseResolve, C, promise).then(function (value) {
+ if (alreadyRejected || alreadyResolved)
+ return;
+ alreadyResolved = true;
+ resolve(value);
+ }, function (error) {
+ if (alreadyRejected || alreadyResolved)
+ return;
+ alreadyRejected = true;
+ errors[index] = error;
+ --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));
+ });
+ });
+ --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));
+ });
+ if (result.error)
+ reject(result.value);
+ return capability.promise;
+ }
+});
+
+/***/ }),
+/* 124 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var $ = __w_pdfjs_require__(6);
+var IS_PURE = __w_pdfjs_require__(37);
+var NativePromise = __w_pdfjs_require__(99);
+var fails = __w_pdfjs_require__(10);
+var getBuiltIn = __w_pdfjs_require__(25);
+var isCallable = __w_pdfjs_require__(23);
+var speciesConstructor = __w_pdfjs_require__(104);
+var promiseResolve = __w_pdfjs_require__(116);
+var redefine = __w_pdfjs_require__(49);
+var NON_GENERIC = !!NativePromise && fails(function () {
+ NativePromise.prototype['finally'].call({
+ then: function () {
+ }
+ }, function () {
+ });
+});
+$({
+ target: 'Promise',
+ proto: true,
+ real: true,
+ forced: NON_GENERIC
+}, {
+ 'finally': function (onFinally) {
+ var C = speciesConstructor(this, getBuiltIn('Promise'));
+ var isFunction = isCallable(onFinally);
+ return this.then(isFunction ? function (x) {
+ return promiseResolve(C, onFinally()).then(function () {
+ return x;
+ });
+ } : onFinally, isFunction ? function (e) {
+ return promiseResolve(C, onFinally()).then(function () {
+ throw e;
+ });
+ } : onFinally);
+ }
+});
+if (!IS_PURE && isCallable(NativePromise)) {
+ var method = getBuiltIn('Promise').prototype['finally'];
+ if (NativePromise.prototype['finally'] !== method) {
+ redefine(NativePromise.prototype, 'finally', method, { unsafe: true });
+ }
+}
+
+/***/ }),
+/* 125 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var charAt = (__w_pdfjs_require__(126).charAt);
+var toString = __w_pdfjs_require__(88);
+var InternalStateModule = __w_pdfjs_require__(51);
+var defineIterator = __w_pdfjs_require__(92);
+var STRING_ITERATOR = 'String Iterator';
+var setInternalState = InternalStateModule.set;
+var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
+defineIterator(String, 'String', function (iterated) {
+ setInternalState(this, {
+ type: STRING_ITERATOR,
+ string: toString(iterated),
+ index: 0
+ });
+}, function next() {
+ var state = getInternalState(this);
+ var string = state.string;
+ var index = state.index;
+ var point;
+ if (index >= string.length)
+ return {
+ value: undefined,
+ done: true
+ };
+ point = charAt(string, index);
+ state.index += point.length;
+ return {
+ value: point,
+ done: false
+ };
+});
+
+/***/ }),
+/* 126 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var uncurryThis = __w_pdfjs_require__(17);
+var toIntegerOrInfinity = __w_pdfjs_require__(62);
+var toString = __w_pdfjs_require__(88);
+var requireObjectCoercible = __w_pdfjs_require__(19);
+var charAt = uncurryThis(''.charAt);
+var charCodeAt = uncurryThis(''.charCodeAt);
+var stringSlice = uncurryThis(''.slice);
+var createMethod = function (CONVERT_TO_STRING) {
+ return function ($this, pos) {
+ var S = toString(requireObjectCoercible($this));
+ var position = toIntegerOrInfinity(pos);
+ var size = S.length;
+ var first, second;
+ if (position < 0 || position >= size)
+ return CONVERT_TO_STRING ? '' : undefined;
+ first = charCodeAt(S, position);
+ return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
+ };
+};
+module.exports = {
+ codeAt: createMethod(false),
+ charAt: createMethod(true)
+};
+
+/***/ }),
+/* 127 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+module.exports = global;
+
+/***/ }),
+/* 128 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+__w_pdfjs_require__(90);
+__w_pdfjs_require__(96);
+__w_pdfjs_require__(129);
+__w_pdfjs_require__(140);
+__w_pdfjs_require__(141);
+var path = __w_pdfjs_require__(127);
+module.exports = path.structuredClone;
+
+/***/ }),
+/* 129 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var collection = __w_pdfjs_require__(130);
+var collectionStrong = __w_pdfjs_require__(139);
+collection('Map', function (init) {
+ return function Map() {
+ return init(this, arguments.length ? arguments[0] : undefined);
+ };
+}, collectionStrong);
+
+/***/ }),
+/* 130 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var $ = __w_pdfjs_require__(6);
+var global = __w_pdfjs_require__(7);
+var uncurryThis = __w_pdfjs_require__(17);
+var isForced = __w_pdfjs_require__(67);
+var redefine = __w_pdfjs_require__(49);
+var InternalMetadataModule = __w_pdfjs_require__(131);
+var iterate = __w_pdfjs_require__(78);
+var anInstance = __w_pdfjs_require__(102);
+var isCallable = __w_pdfjs_require__(23);
+var isObject = __w_pdfjs_require__(22);
+var fails = __w_pdfjs_require__(10);
+var checkCorrectnessOfIteration = __w_pdfjs_require__(103);
+var setToStringTag = __w_pdfjs_require__(95);
+var inheritIfRequired = __w_pdfjs_require__(138);
+module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
+ var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
+ var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
+ var ADDER = IS_MAP ? 'set' : 'add';
+ var NativeConstructor = global[CONSTRUCTOR_NAME];
+ var NativePrototype = NativeConstructor && NativeConstructor.prototype;
+ var Constructor = NativeConstructor;
+ var exported = {};
+ var fixMethod = function (KEY) {
+ var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);
+ redefine(NativePrototype, KEY, KEY == 'add' ? function add(value) {
+ uncurriedNativeMethod(this, value === 0 ? 0 : value);
+ return this;
+ } : KEY == 'delete' ? function (key) {
+ return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
+ } : KEY == 'get' ? function get(key) {
+ return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);
+ } : KEY == 'has' ? function has(key) {
+ return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
+ } : function set(key, value) {
+ uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
+ return this;
+ });
+ };
+ var REPLACE = isForced(CONSTRUCTOR_NAME, !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {
+ new NativeConstructor().entries().next();
+ })));
+ if (REPLACE) {
+ Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
+ InternalMetadataModule.enable();
+ } else if (isForced(CONSTRUCTOR_NAME, true)) {
+ var instance = new Constructor();
+ var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
+ var THROWS_ON_PRIMITIVES = fails(function () {
+ instance.has(1);
+ });
+ var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) {
+ new NativeConstructor(iterable);
+ });
+ var BUGGY_ZERO = !IS_WEAK && fails(function () {
+ var $instance = new NativeConstructor();
+ var index = 5;
+ while (index--)
+ $instance[ADDER](index, index);
+ return !$instance.has(-0);
+ });
+ if (!ACCEPT_ITERABLES) {
+ Constructor = wrapper(function (dummy, iterable) {
+ anInstance(dummy, NativePrototype);
+ var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
+ if (iterable != undefined)
+ iterate(iterable, that[ADDER], {
+ that: that,
+ AS_ENTRIES: IS_MAP
+ });
+ return that;
+ });
+ Constructor.prototype = NativePrototype;
+ NativePrototype.constructor = Constructor;
+ }
+ if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
+ fixMethod('delete');
+ fixMethod('has');
+ IS_MAP && fixMethod('get');
+ }
+ if (BUGGY_ZERO || HASNT_CHAINING)
+ fixMethod(ADDER);
+ if (IS_WEAK && NativePrototype.clear)
+ delete NativePrototype.clear;
+ }
+ exported[CONSTRUCTOR_NAME] = Constructor;
+ $({
+ global: true,
+ forced: Constructor != NativeConstructor
+ }, exported);
+ setToStringTag(Constructor, CONSTRUCTOR_NAME);
+ if (!IS_WEAK)
+ common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
+ return Constructor;
+};
+
+/***/ }),
+/* 131 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var $ = __w_pdfjs_require__(6);
+var uncurryThis = __w_pdfjs_require__(17);
+var hiddenKeys = __w_pdfjs_require__(54);
+var isObject = __w_pdfjs_require__(22);
+var hasOwn = __w_pdfjs_require__(40);
+var defineProperty = (__w_pdfjs_require__(46).f);
+var getOwnPropertyNamesModule = __w_pdfjs_require__(58);
+var getOwnPropertyNamesExternalModule = __w_pdfjs_require__(132);
+var isExtensible = __w_pdfjs_require__(135);
+var uid = __w_pdfjs_require__(42);
+var FREEZING = __w_pdfjs_require__(137);
+var REQUIRED = false;
+var METADATA = uid('meta');
+var id = 0;
+var setMetadata = function (it) {
+ defineProperty(it, METADATA, {
+ value: {
+ objectID: 'O' + id++,
+ weakData: {}
+ }
+ });
+};
+var fastKey = function (it, create) {
+ if (!isObject(it))
+ return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!hasOwn(it, METADATA)) {
+ if (!isExtensible(it))
+ return 'F';
+ if (!create)
+ return 'E';
+ setMetadata(it);
+ }
+ return it[METADATA].objectID;
+};
+var getWeakData = function (it, create) {
+ if (!hasOwn(it, METADATA)) {
+ if (!isExtensible(it))
+ return true;
+ if (!create)
+ return false;
+ setMetadata(it);
+ }
+ return it[METADATA].weakData;
+};
+var onFreeze = function (it) {
+ if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA))
+ setMetadata(it);
+ return it;
+};
+var enable = function () {
+ meta.enable = function () {
+ };
+ REQUIRED = true;
+ var getOwnPropertyNames = getOwnPropertyNamesModule.f;
+ var splice = uncurryThis([].splice);
+ var test = {};
+ test[METADATA] = 1;
+ if (getOwnPropertyNames(test).length) {
+ getOwnPropertyNamesModule.f = function (it) {
+ var result = getOwnPropertyNames(it);
+ for (var i = 0, length = result.length; i < length; i++) {
+ if (result[i] === METADATA) {
+ splice(result, i, 1);
+ break;
+ }
+ }
+ return result;
+ };
+ $({
+ target: 'Object',
+ stat: true,
+ forced: true
+ }, { getOwnPropertyNames: getOwnPropertyNamesExternalModule.f });
+ }
+};
+var meta = module.exports = {
+ enable: enable,
+ fastKey: fastKey,
+ getWeakData: getWeakData,
+ onFreeze: onFreeze
+};
+hiddenKeys[METADATA] = true;
+
+/***/ }),
+/* 132 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var classof = __w_pdfjs_require__(18);
+var toIndexedObject = __w_pdfjs_require__(15);
+var $getOwnPropertyNames = (__w_pdfjs_require__(58).f);
+var arraySlice = __w_pdfjs_require__(133);
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
+var getWindowNames = function (it) {
+ try {
+ return $getOwnPropertyNames(it);
+ } catch (error) {
+ return arraySlice(windowNames);
+ }
+};
+module.exports.f = function getOwnPropertyNames(it) {
+ return windowNames && classof(it) == 'Window' ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it));
+};
+
+/***/ }),
+/* 133 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var global = __w_pdfjs_require__(7);
+var toAbsoluteIndex = __w_pdfjs_require__(61);
+var lengthOfArrayLike = __w_pdfjs_require__(63);
+var createProperty = __w_pdfjs_require__(134);
+var Array = global.Array;
+var max = Math.max;
+module.exports = function (O, start, end) {
+ var length = lengthOfArrayLike(O);
+ var k = toAbsoluteIndex(start, length);
+ var fin = toAbsoluteIndex(end === undefined ? length : end, length);
+ var result = Array(max(fin - k, 0));
+ for (var n = 0; k < fin; k++, n++)
+ createProperty(result, n, O[k]);
+ result.length = n;
+ return result;
+};
+
+/***/ }),
+/* 134 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var toPropertyKey = __w_pdfjs_require__(20);
+var definePropertyModule = __w_pdfjs_require__(46);
+var createPropertyDescriptor = __w_pdfjs_require__(14);
+module.exports = function (object, key, value) {
+ var propertyKey = toPropertyKey(key);
+ if (propertyKey in object)
+ definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
+ else
+ object[propertyKey] = value;
+};
+
+/***/ }),
+/* 135 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+var isObject = __w_pdfjs_require__(22);
+var classof = __w_pdfjs_require__(18);
+var ARRAY_BUFFER_NON_EXTENSIBLE = __w_pdfjs_require__(136);
+var $isExtensible = Object.isExtensible;
+var FAILS_ON_PRIMITIVES = fails(function () {
+ $isExtensible(1);
+});
+module.exports = FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE ? function isExtensible(it) {
+ if (!isObject(it))
+ return false;
+ if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer')
+ return false;
+ return $isExtensible ? $isExtensible(it) : true;
+} : $isExtensible;
+
+/***/ }),
+/* 136 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+module.exports = fails(function () {
+ if (typeof ArrayBuffer == 'function') {
+ var buffer = new ArrayBuffer(8);
+ if (Object.isExtensible(buffer))
+ Object.defineProperty(buffer, 'a', { value: 8 });
+ }
+});
+
+/***/ }),
+/* 137 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var fails = __w_pdfjs_require__(10);
+module.exports = !fails(function () {
+ return Object.isExtensible(Object.preventExtensions({}));
+});
+
+/***/ }),
+/* 138 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var isCallable = __w_pdfjs_require__(23);
+var isObject = __w_pdfjs_require__(22);
+var setPrototypeOf = __w_pdfjs_require__(70);
+module.exports = function ($this, dummy, Wrapper) {
+ var NewTarget, NewTargetPrototype;
+ if (setPrototypeOf && isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype)
+ setPrototypeOf($this, NewTargetPrototype);
+ return $this;
+};
+
+/***/ }),
+/* 139 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var defineProperty = (__w_pdfjs_require__(46).f);
+var create = __w_pdfjs_require__(72);
+var redefineAll = __w_pdfjs_require__(100);
+var bind = __w_pdfjs_require__(79);
+var anInstance = __w_pdfjs_require__(102);
+var iterate = __w_pdfjs_require__(78);
+var defineIterator = __w_pdfjs_require__(92);
+var setSpecies = __w_pdfjs_require__(101);
+var DESCRIPTORS = __w_pdfjs_require__(9);
+var fastKey = (__w_pdfjs_require__(131).fastKey);
+var InternalStateModule = __w_pdfjs_require__(51);
+var setInternalState = InternalStateModule.set;
+var internalStateGetterFor = InternalStateModule.getterFor;
+module.exports = {
+ getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
+ var Constructor = wrapper(function (that, iterable) {
+ anInstance(that, Prototype);
+ setInternalState(that, {
+ type: CONSTRUCTOR_NAME,
+ index: create(null),
+ first: undefined,
+ last: undefined,
+ size: 0
+ });
+ if (!DESCRIPTORS)
+ that.size = 0;
+ if (iterable != undefined)
+ iterate(iterable, that[ADDER], {
+ that: that,
+ AS_ENTRIES: IS_MAP
+ });
+ });
+ var Prototype = Constructor.prototype;
+ var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
+ var define = function (that, key, value) {
+ var state = getInternalState(that);
+ var entry = getEntry(that, key);
+ var previous, index;
+ if (entry) {
+ entry.value = value;
+ } else {
+ state.last = entry = {
+ index: index = fastKey(key, true),
+ key: key,
+ value: value,
+ previous: previous = state.last,
+ next: undefined,
+ removed: false
+ };
+ if (!state.first)
+ state.first = entry;
+ if (previous)
+ previous.next = entry;
+ if (DESCRIPTORS)
+ state.size++;
+ else
+ that.size++;
+ if (index !== 'F')
+ state.index[index] = entry;
+ }
+ return that;
+ };
+ var getEntry = function (that, key) {
+ var state = getInternalState(that);
+ var index = fastKey(key);
+ var entry;
+ if (index !== 'F')
+ return state.index[index];
+ for (entry = state.first; entry; entry = entry.next) {
+ if (entry.key == key)
+ return entry;
+ }
+ };
+ redefineAll(Prototype, {
+ clear: function clear() {
+ var that = this;
+ var state = getInternalState(that);
+ var data = state.index;
+ var entry = state.first;
+ while (entry) {
+ entry.removed = true;
+ if (entry.previous)
+ entry.previous = entry.previous.next = undefined;
+ delete data[entry.index];
+ entry = entry.next;
+ }
+ state.first = state.last = undefined;
+ if (DESCRIPTORS)
+ state.size = 0;
+ else
+ that.size = 0;
+ },
+ 'delete': function (key) {
+ var that = this;
+ var state = getInternalState(that);
+ var entry = getEntry(that, key);
+ if (entry) {
+ var next = entry.next;
+ var prev = entry.previous;
+ delete state.index[entry.index];
+ entry.removed = true;
+ if (prev)
+ prev.next = next;
+ if (next)
+ next.previous = prev;
+ if (state.first == entry)
+ state.first = next;
+ if (state.last == entry)
+ state.last = prev;
+ if (DESCRIPTORS)
+ state.size--;
+ else
+ that.size--;
+ }
+ return !!entry;
+ },
+ forEach: function forEach(callbackfn) {
+ var state = getInternalState(this);
+ var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+ var entry;
+ while (entry = entry ? entry.next : state.first) {
+ boundFunction(entry.value, entry.key, this);
+ while (entry && entry.removed)
+ entry = entry.previous;
+ }
+ },
+ has: function has(key) {
+ return !!getEntry(this, key);
+ }
+ });
+ redefineAll(Prototype, IS_MAP ? {
+ get: function get(key) {
+ var entry = getEntry(this, key);
+ return entry && entry.value;
+ },
+ set: function set(key, value) {
+ return define(this, key === 0 ? 0 : key, value);
+ }
+ } : {
+ add: function add(value) {
+ return define(this, value = value === 0 ? 0 : value, value);
+ }
+ });
+ if (DESCRIPTORS)
+ defineProperty(Prototype, 'size', {
+ get: function () {
+ return getInternalState(this).size;
+ }
+ });
+ return Constructor;
+ },
+ setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {
+ var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
+ var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
+ var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
+ defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {
+ setInternalState(this, {
+ type: ITERATOR_NAME,
+ target: iterated,
+ state: getInternalCollectionState(iterated),
+ kind: kind,
+ last: undefined
+ });
+ }, function () {
+ var state = getInternalIteratorState(this);
+ var kind = state.kind;
+ var entry = state.last;
+ while (entry && entry.removed)
+ entry = entry.previous;
+ if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
+ state.target = undefined;
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+ if (kind == 'keys')
+ return {
+ value: entry.key,
+ done: false
+ };
+ if (kind == 'values')
+ return {
+ value: entry.value,
+ done: false
+ };
+ return {
+ value: [
+ entry.key,
+ entry.value
+ ],
+ done: false
+ };
+ }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
+ setSpecies(CONSTRUCTOR_NAME);
+ }
+};
+
+/***/ }),
+/* 140 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var collection = __w_pdfjs_require__(130);
+var collectionStrong = __w_pdfjs_require__(139);
+collection('Set', function (init) {
+ return function Set() {
+ return init(this, arguments.length ? arguments[0] : undefined);
+ };
+}, collectionStrong);
+
+/***/ }),
+/* 141 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+var IS_PURE = __w_pdfjs_require__(37);
+var $ = __w_pdfjs_require__(6);
+var global = __w_pdfjs_require__(7);
+var getBuiltin = __w_pdfjs_require__(25);
+var uncurryThis = __w_pdfjs_require__(17);
+var fails = __w_pdfjs_require__(10);
+var uid = __w_pdfjs_require__(42);
+var isCallable = __w_pdfjs_require__(23);
+var isConstructor = __w_pdfjs_require__(106);
+var isObject = __w_pdfjs_require__(22);
+var isSymbol = __w_pdfjs_require__(24);
+var iterate = __w_pdfjs_require__(78);
+var anObject = __w_pdfjs_require__(48);
+var classof = __w_pdfjs_require__(84);
+var hasOwn = __w_pdfjs_require__(40);
+var createProperty = __w_pdfjs_require__(134);
+var createNonEnumerableProperty = __w_pdfjs_require__(45);
+var lengthOfArrayLike = __w_pdfjs_require__(63);
+var validateArgumentsLength = __w_pdfjs_require__(110);
+var regExpFlags = __w_pdfjs_require__(142);
+var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(89);
+var Object = global.Object;
+var Date = global.Date;
+var Error = global.Error;
+var EvalError = global.EvalError;
+var RangeError = global.RangeError;
+var ReferenceError = global.ReferenceError;
+var SyntaxError = global.SyntaxError;
+var TypeError = global.TypeError;
+var URIError = global.URIError;
+var PerformanceMark = global.PerformanceMark;
+var WebAssembly = global.WebAssembly;
+var CompileError = WebAssembly && WebAssembly.CompileError || Error;
+var LinkError = WebAssembly && WebAssembly.LinkError || Error;
+var RuntimeError = WebAssembly && WebAssembly.RuntimeError || Error;
+var DOMException = getBuiltin('DOMException');
+var Set = getBuiltin('Set');
+var Map = getBuiltin('Map');
+var MapPrototype = Map.prototype;
+var mapHas = uncurryThis(MapPrototype.has);
+var mapGet = uncurryThis(MapPrototype.get);
+var mapSet = uncurryThis(MapPrototype.set);
+var setAdd = uncurryThis(Set.prototype.add);
+var objectKeys = getBuiltin('Object', 'keys');
+var push = uncurryThis([].push);
+var booleanValueOf = uncurryThis(true.valueOf);
+var numberValueOf = uncurryThis(1.0.valueOf);
+var stringValueOf = uncurryThis(''.valueOf);
+var getFlags = uncurryThis(regExpFlags);
+var getTime = uncurryThis(Date.prototype.getTime);
+var PERFORMANCE_MARK = uid('structuredClone');
+var DATA_CLONE_ERROR = 'DataCloneError';
+var TRANSFERRING = 'Transferring';
+var checkBasicSemantic = function (structuredCloneImplementation) {
+ return !fails(function () {
+ var set1 = new global.Set([7]);
+ var set2 = structuredCloneImplementation(set1);
+ var number = structuredCloneImplementation(Object(7));
+ return set2 == set1 || !set2.has(7) || typeof number != 'object' || number != 7;
+ }) && structuredCloneImplementation;
+};
+var checkNewErrorsSemantic = function (structuredCloneImplementation) {
+ return !fails(function () {
+ var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 }));
+ return test.name != 'AggregateError' || test.errors[0] != 1 || test.message != PERFORMANCE_MARK || test.cause != 3;
+ }) && structuredCloneImplementation;
+};
+var nativeStructuredClone = global.structuredClone;
+var FORCED_REPLACEMENT = IS_PURE || !checkNewErrorsSemantic(nativeStructuredClone);
+var structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) {
+ return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail;
+});
+var nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark;
+var throwUncloneable = function (type) {
+ throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR);
+};
+var throwUnpolyfillable = function (type, kind) {
+ throw new DOMException((kind || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR);
+};
+var structuredCloneInternal = function (value, map) {
+ if (isSymbol(value))
+ throwUncloneable('Symbol');
+ if (!isObject(value))
+ return value;
+ if (map) {
+ if (mapHas(map, value))
+ return mapGet(map, value);
+ } else
+ map = new Map();
+ var type = classof(value);
+ var deep = false;
+ var C, name, cloned, dataTransfer, i, length, keys, key, source, target;
+ switch (type) {
+ case 'Array':
+ cloned = [];
+ deep = true;
+ break;
+ case 'Object':
+ cloned = {};
+ deep = true;
+ break;
+ case 'Map':
+ cloned = new Map();
+ deep = true;
+ break;
+ case 'Set':
+ cloned = new Set();
+ deep = true;
+ break;
+ case 'RegExp':
+ cloned = new RegExp(value.source, 'flags' in value ? value.flags : getFlags(value));
+ break;
+ case 'Error':
+ name = value.name;
+ switch (name) {
+ case 'AggregateError':
+ cloned = getBuiltin('AggregateError')([]);
+ break;
+ case 'EvalError':
+ cloned = EvalError();
+ break;
+ case 'RangeError':
+ cloned = RangeError();
+ break;
+ case 'ReferenceError':
+ cloned = ReferenceError();
+ break;
+ case 'SyntaxError':
+ cloned = SyntaxError();
+ break;
+ case 'TypeError':
+ cloned = TypeError();
+ break;
+ case 'URIError':
+ cloned = URIError();
+ break;
+ case 'CompileError':
+ cloned = CompileError();
+ break;
+ case 'LinkError':
+ cloned = LinkError();
+ break;
+ case 'RuntimeError':
+ cloned = RuntimeError();
+ break;
+ default:
+ cloned = Error();
+ }
+ deep = true;
+ break;
+ case 'DOMException':
+ cloned = new DOMException(value.message, value.name);
+ deep = true;
+ break;
+ case 'DataView':
+ case 'Int8Array':
+ case 'Uint8Array':
+ case 'Uint8ClampedArray':
+ case 'Int16Array':
+ case 'Uint16Array':
+ case 'Int32Array':
+ case 'Uint32Array':
+ case 'Float32Array':
+ case 'Float64Array':
+ case 'BigInt64Array':
+ case 'BigUint64Array':
+ C = global[type];
+ if (!isObject(C))
+ throwUnpolyfillable(type);
+ cloned = new C(structuredCloneInternal(value.buffer, map), value.byteOffset, type === 'DataView' ? value.byteLength : value.length);
+ break;
+ case 'DOMQuad':
+ try {
+ cloned = new DOMQuad(structuredCloneInternal(value.p1, map), structuredCloneInternal(value.p2, map), structuredCloneInternal(value.p3, map), structuredCloneInternal(value.p4, map));
+ } catch (error) {
+ if (nativeRestrictedStructuredClone) {
+ cloned = nativeRestrictedStructuredClone(value);
+ } else
+ throwUnpolyfillable(type);
+ }
+ break;
+ case 'FileList':
+ C = global.DataTransfer;
+ if (isConstructor(C)) {
+ dataTransfer = new C();
+ for (i = 0, length = lengthOfArrayLike(value); i < length; i++) {
+ dataTransfer.items.add(structuredCloneInternal(value[i], map));
+ }
+ cloned = dataTransfer.files;
+ } else if (nativeRestrictedStructuredClone) {
+ cloned = nativeRestrictedStructuredClone(value);
+ } else
+ throwUnpolyfillable(type);
+ break;
+ case 'ImageData':
+ try {
+ cloned = new ImageData(structuredCloneInternal(value.data, map), value.width, value.height, { colorSpace: value.colorSpace });
+ } catch (error) {
+ if (nativeRestrictedStructuredClone) {
+ cloned = nativeRestrictedStructuredClone(value);
+ } else
+ throwUnpolyfillable(type);
+ }
+ break;
+ default:
+ if (nativeRestrictedStructuredClone) {
+ cloned = nativeRestrictedStructuredClone(value);
+ } else
+ switch (type) {
+ case 'BigInt':
+ cloned = Object(value.valueOf());
+ break;
+ case 'Boolean':
+ cloned = Object(booleanValueOf(value));
+ break;
+ case 'Number':
+ cloned = Object(numberValueOf(value));
+ break;
+ case 'String':
+ cloned = Object(stringValueOf(value));
+ break;
+ case 'Date':
+ cloned = new Date(getTime(value));
+ break;
+ case 'ArrayBuffer':
+ C = global.DataView;
+ if (!C && typeof value.slice != 'function')
+ throwUnpolyfillable(type);
+ try {
+ if (typeof value.slice == 'function') {
+ cloned = value.slice(0);
+ } else {
+ length = value.byteLength;
+ cloned = new ArrayBuffer(length);
+ source = new C(value);
+ target = new C(cloned);
+ for (i = 0; i < length; i++) {
+ target.setUint8(i, source.getUint8(i));
+ }
+ }
+ } catch (error) {
+ throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR);
+ }
+ break;
+ case 'SharedArrayBuffer':
+ cloned = value;
+ break;
+ case 'Blob':
+ try {
+ cloned = value.slice(0, value.size, value.type);
+ } catch (error) {
+ throwUnpolyfillable(type);
+ }
+ break;
+ case 'DOMPoint':
+ case 'DOMPointReadOnly':
+ C = global[type];
+ try {
+ cloned = C.fromPoint ? C.fromPoint(value) : new C(value.x, value.y, value.z, value.w);
+ } catch (error) {
+ throwUnpolyfillable(type);
+ }
+ break;
+ case 'DOMRect':
+ case 'DOMRectReadOnly':
+ C = global[type];
+ try {
+ cloned = C.fromRect ? C.fromRect(value) : new C(value.x, value.y, value.width, value.height);
+ } catch (error) {
+ throwUnpolyfillable(type);
+ }
+ break;
+ case 'DOMMatrix':
+ case 'DOMMatrixReadOnly':
+ C = global[type];
+ try {
+ cloned = C.fromMatrix ? C.fromMatrix(value) : new C(value);
+ } catch (error) {
+ throwUnpolyfillable(type);
+ }
+ break;
+ case 'AudioData':
+ case 'VideoFrame':
+ if (!isCallable(value.clone))
+ throwUnpolyfillable(type);
+ try {
+ cloned = value.clone();
+ } catch (error) {
+ throwUncloneable(type);
+ }
+ break;
+ case 'File':
+ try {
+ cloned = new File([value], value.name, value);
+ } catch (error) {
+ throwUnpolyfillable(type);
+ }
+ break;
+ case 'CryptoKey':
+ case 'GPUCompilationMessage':
+ case 'GPUCompilationInfo':
+ case 'ImageBitmap':
+ case 'RTCCertificate':
+ case 'WebAssembly.Module':
+ throwUnpolyfillable(type);
+ default:
+ throwUncloneable(type);
+ }
+ }
+ mapSet(map, value, cloned);
+ if (deep)
+ switch (type) {
+ case 'Array':
+ case 'Object':
+ keys = objectKeys(value);
+ for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {
+ key = keys[i];
+ createProperty(cloned, key, structuredCloneInternal(value[key], map));
+ }
+ break;
+ case 'Map':
+ value.forEach(function (v, k) {
+ mapSet(cloned, structuredCloneInternal(k, map), structuredCloneInternal(v, map));
+ });
+ break;
+ case 'Set':
+ value.forEach(function (v) {
+ setAdd(cloned, structuredCloneInternal(v, map));
+ });
+ break;
+ case 'Error':
+ createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map));
+ if (hasOwn(value, 'cause')) {
+ createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map));
+ }
+ if (name == 'AggregateError') {
+ cloned.errors = structuredCloneInternal(value.errors, map);
+ }
+ case 'DOMException':
+ if (ERROR_STACK_INSTALLABLE) {
+ createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map));
+ }
+ }
+ return cloned;
+};
+var PROPER_TRANSFER = nativeStructuredClone && !fails(function () {
+ var buffer = new ArrayBuffer(8);
+ var clone = nativeStructuredClone(buffer, { transfer: [buffer] });
+ return buffer.byteLength != 0 || clone.byteLength != 8;
+});
+var tryToTransfer = function (rawTransfer, map) {
+ if (!isObject(rawTransfer))
+ throw TypeError('Transfer option cannot be converted to a sequence');
+ var transfer = [];
+ iterate(rawTransfer, function (value) {
+ push(transfer, anObject(value));
+ });
+ var i = 0;
+ var length = lengthOfArrayLike(transfer);
+ var value, type, C, transferredArray, transferred, canvas, context;
+ if (PROPER_TRANSFER) {
+ transferredArray = nativeStructuredClone(transfer, { transfer: transfer });
+ while (i < length)
+ mapSet(map, transfer[i], transferredArray[i++]);
+ } else
+ while (i < length) {
+ value = transfer[i++];
+ if (mapHas(map, value))
+ throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);
+ type = classof(value);
+ switch (type) {
+ case 'ImageBitmap':
+ C = global.OffscreenCanvas;
+ if (!isConstructor(C))
+ throwUnpolyfillable(type, TRANSFERRING);
+ try {
+ canvas = new C(value.width, value.height);
+ context = canvas.getContext('bitmaprenderer');
+ context.transferFromImageBitmap(value);
+ transferred = canvas.transferToImageBitmap();
+ } catch (error) {
+ }
+ break;
+ case 'AudioData':
+ case 'VideoFrame':
+ if (!isCallable(value.clone) || !isCallable(value.close))
+ throwUnpolyfillable(type, TRANSFERRING);
+ try {
+ transferred = value.clone();
+ value.close();
+ } catch (error) {
+ }
+ break;
+ case 'ArrayBuffer':
+ case 'MessagePort':
+ case 'OffscreenCanvas':
+ case 'ReadableStream':
+ case 'TransformStream':
+ case 'WritableStream':
+ throwUnpolyfillable(type, TRANSFERRING);
+ }
+ if (transferred === undefined)
+ throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR);
+ mapSet(map, value, transferred);
+ }
+};
+$({
+ global: true,
+ enumerable: true,
+ sham: !PROPER_TRANSFER,
+ forced: FORCED_REPLACEMENT
+}, {
+ structuredClone: function structuredClone(value) {
+ var options = validateArgumentsLength(arguments.length, 1) > 1 ? anObject(arguments[1]) : undefined;
+ var transfer = options ? options.transfer : undefined;
+ var map;
+ if (transfer !== undefined) {
+ map = new Map();
+ tryToTransfer(transfer, map);
+ }
+ return structuredCloneInternal(value, map);
+ }
+});
+
+/***/ }),
+/* 142 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+var anObject = __w_pdfjs_require__(48);
+module.exports = function () {
+ var that = anObject(this);
+ var result = '';
+ if (that.global)
+ result += 'g';
+ if (that.ignoreCase)
+ result += 'i';
+ if (that.multiline)
+ result += 'm';
+ if (that.dotAll)
+ result += 's';
+ if (that.unicode)
+ result += 'u';
+ if (that.sticky)
+ result += 'y';
+ return result;
+};
+
+/***/ }),
+/* 143 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.build = exports.RenderTask = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;
+exports.getDocument = getDocument;
+exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
+exports.version = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(146);
+
+var _font_loader = __w_pdfjs_require__(148);
+
+var _node_utils = __w_pdfjs_require__(149);
+
+var _annotation_storage = __w_pdfjs_require__(150);
+
+var _canvas = __w_pdfjs_require__(151);
+
+var _worker_options = __w_pdfjs_require__(153);
+
+var _is_node = __w_pdfjs_require__(3);
+
+var _message_handler = __w_pdfjs_require__(154);
+
+var _metadata = __w_pdfjs_require__(155);
+
+var _optional_content_config = __w_pdfjs_require__(156);
+
+var _transport_stream = __w_pdfjs_require__(157);
+
+var _xfa_text = __w_pdfjs_require__(158);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
+
+function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
+
+function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
+
+function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
+
+function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
+
+function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
+
+function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
+
+function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
+
+function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+var DEFAULT_RANGE_CHUNK_SIZE = 65536;
+var RENDERING_CANCELLED_TIMEOUT = 100;
+var DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory;
+exports.DefaultCanvasFactory = DefaultCanvasFactory;
+var DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory;
+exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;
+var DefaultStandardFontDataFactory = _is_node.isNodeJS ? _node_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory;
+exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory;
+var createPDFNetworkStream;
+
+function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
+ createPDFNetworkStream = pdfNetworkStreamFactory;
+}
+
+function getDocument(src) {
+ var task = new PDFDocumentLoadingTask();
+ var source;
+
+ if (typeof src === "string" || src instanceof URL) {
+ source = {
+ url: src
+ };
+ } else if ((0, _util.isArrayBuffer)(src)) {
+ source = {
+ data: src
+ };
+ } else if (src instanceof PDFDataRangeTransport) {
+ source = {
+ range: src
+ };
+ } else {
+ if (_typeof(src) !== "object") {
+ throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or parameter object.");
+ }
+
+ if (!src.url && !src.data && !src.range) {
+ throw new Error("Invalid parameter object: need either .data, .range or .url");
+ }
+
+ source = src;
+ }
+
+ var params = Object.create(null);
+ var rangeTransport = null,
+ worker = null;
+
+ for (var key in source) {
+ var value = source[key];
+
+ switch (key) {
+ case "url":
+ if (typeof window !== "undefined") {
+ try {
+ params[key] = new URL(value, window.location).href;
+ continue;
+ } catch (ex) {
+ (0, _util.warn)("Cannot create valid URL: \"".concat(ex, "\"."));
+ }
+ } else if (typeof value === "string" || value instanceof URL) {
+ params[key] = value.toString();
+ continue;
+ }
+
+ throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property.");
+
+ case "range":
+ rangeTransport = value;
+ continue;
+
+ case "worker":
+ worker = value;
+ continue;
+
+ case "data":
+ if (_is_node.isNodeJS && typeof Buffer !== "undefined" && value instanceof Buffer) {
+ params[key] = new Uint8Array(value);
+ } else if (value instanceof Uint8Array) {
+ break;
+ } else if (typeof value === "string") {
+ params[key] = (0, _util.stringToBytes)(value);
+ } else if (_typeof(value) === "object" && value !== null && !isNaN(value.length)) {
+ params[key] = new Uint8Array(value);
+ } else if ((0, _util.isArrayBuffer)(value)) {
+ params[key] = new Uint8Array(value);
+ } else {
+ throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is expected in the data property.");
+ }
+
+ continue;
+ }
+
+ params[key] = value;
+ }
+
+ params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
+ params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory;
+ params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory;
+ params.ignoreErrors = params.stopAtErrors !== true;
+ params.fontExtraProperties = params.fontExtraProperties === true;
+ params.pdfBug = params.pdfBug === true;
+ params.enableXfa = params.enableXfa === true;
+
+ if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) {
+ params.docBaseUrl = null;
+ }
+
+ if (!Number.isInteger(params.maxImageSize)) {
+ params.maxImageSize = -1;
+ }
+
+ if (typeof params.useWorkerFetch !== "boolean") {
+ params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory;
+ }
+
+ if (typeof params.isEvalSupported !== "boolean") {
+ params.isEvalSupported = true;
+ }
+
+ if (typeof params.disableFontFace !== "boolean") {
+ params.disableFontFace = _is_node.isNodeJS;
+ }
+
+ if (typeof params.useSystemFonts !== "boolean") {
+ params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace;
+ }
+
+ if (typeof params.ownerDocument === "undefined") {
+ params.ownerDocument = globalThis.document;
+ }
+
+ if (typeof params.disableRange !== "boolean") {
+ params.disableRange = false;
+ }
+
+ if (typeof params.disableStream !== "boolean") {
+ params.disableStream = false;
+ }
+
+ if (typeof params.disableAutoFetch !== "boolean") {
+ params.disableAutoFetch = false;
+ }
+
+ (0, _util.setVerbosityLevel)(params.verbosity);
+
+ if (!worker) {
+ var workerParams = {
+ verbosity: params.verbosity,
+ port: _worker_options.GlobalWorkerOptions.workerPort
+ };
+ worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
+ task._worker = worker;
+ }
+
+ var docId = task.docId;
+ worker.promise.then(function () {
+ if (task.destroyed) {
+ throw new Error("Loading aborted");
+ }
+
+ var workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);
+
+ var networkStreamPromise = new Promise(function (resolve) {
+ var networkStream;
+
+ if (rangeTransport) {
+ networkStream = new _transport_stream.PDFDataTransportStream({
+ length: params.length,
+ initialData: params.initialData,
+ progressiveDone: params.progressiveDone,
+ contentDispositionFilename: params.contentDispositionFilename,
+ disableRange: params.disableRange,
+ disableStream: params.disableStream
+ }, rangeTransport);
+ } else if (!params.data) {
+ networkStream = createPDFNetworkStream({
+ url: params.url,
+ length: params.length,
+ httpHeaders: params.httpHeaders,
+ withCredentials: params.withCredentials,
+ rangeChunkSize: params.rangeChunkSize,
+ disableRange: params.disableRange,
+ disableStream: params.disableStream
+ });
+ }
+
+ resolve(networkStream);
+ });
+ return Promise.all([workerIdPromise, networkStreamPromise]).then(function (_ref) {
+ var _ref2 = _slicedToArray(_ref, 2),
+ workerId = _ref2[0],
+ networkStream = _ref2[1];
+
+ if (task.destroyed) {
+ throw new Error("Loading aborted");
+ }
+
+ var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
+ var transport = new WorkerTransport(messageHandler, task, networkStream, params);
+ task._transport = transport;
+ messageHandler.send("Ready", null);
+ });
+ })["catch"](task._capability.reject);
+ return task;
+}
+
+function _fetchDocument(_x, _x2, _x3, _x4) {
+ return _fetchDocument2.apply(this, arguments);
+}
+
+function _fetchDocument2() {
+ _fetchDocument2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee7(worker, source, pdfDataRangeTransport, docId) {
+ var workerId;
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
+ while (1) {
+ switch (_context7.prev = _context7.next) {
+ case 0:
+ if (!worker.destroyed) {
+ _context7.next = 2;
+ break;
+ }
+
+ throw new Error("Worker was destroyed");
+
+ case 2:
+ if (pdfDataRangeTransport) {
+ source.length = pdfDataRangeTransport.length;
+ source.initialData = pdfDataRangeTransport.initialData;
+ source.progressiveDone = pdfDataRangeTransport.progressiveDone;
+ source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename;
+ }
+
+ _context7.next = 5;
+ return worker.messageHandler.sendWithPromise("GetDocRequest", {
+ docId: docId,
+ apiVersion: '2.14.44',
+ source: {
+ data: source.data,
+ url: source.url,
+ password: source.password,
+ disableAutoFetch: source.disableAutoFetch,
+ rangeChunkSize: source.rangeChunkSize,
+ length: source.length
+ },
+ maxImageSize: source.maxImageSize,
+ disableFontFace: source.disableFontFace,
+ docBaseUrl: source.docBaseUrl,
+ ignoreErrors: source.ignoreErrors,
+ isEvalSupported: source.isEvalSupported,
+ fontExtraProperties: source.fontExtraProperties,
+ enableXfa: source.enableXfa,
+ useSystemFonts: source.useSystemFonts,
+ cMapUrl: source.useWorkerFetch ? source.cMapUrl : null,
+ standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null
+ });
+
+ case 5:
+ workerId = _context7.sent;
+
+ if (!worker.destroyed) {
+ _context7.next = 8;
+ break;
+ }
+
+ throw new Error("Worker was destroyed");
+
+ case 8:
+ return _context7.abrupt("return", workerId);
+
+ case 9:
+ case "end":
+ return _context7.stop();
+ }
+ }
+ }, _callee7);
+ }));
+ return _fetchDocument2.apply(this, arguments);
+}
+
+var PDFDocumentLoadingTask = /*#__PURE__*/function () {
+ function PDFDocumentLoadingTask() {
+ _classCallCheck(this, PDFDocumentLoadingTask);
+
+ this._capability = (0, _util.createPromiseCapability)();
+ this._transport = null;
+ this._worker = null;
+ this.docId = "d".concat(PDFDocumentLoadingTask.idCounters.doc++);
+ this.destroyed = false;
+ this.onPassword = null;
+ this.onProgress = null;
+ this.onUnsupportedFeature = null;
+ }
+
+ _createClass(PDFDocumentLoadingTask, [{
+ key: "promise",
+ get: function get() {
+ return this._capability.promise;
+ }
+ }, {
+ key: "destroy",
+ value: function () {
+ var _destroy = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
+ var _this$_transport;
+
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ this.destroyed = true;
+ _context.next = 3;
+ return (_this$_transport = this._transport) === null || _this$_transport === void 0 ? void 0 : _this$_transport.destroy();
+
+ case 3:
+ this._transport = null;
+
+ if (this._worker) {
+ this._worker.destroy();
+
+ this._worker = null;
+ }
+
+ case 5:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function destroy() {
+ return _destroy.apply(this, arguments);
+ }
+
+ return destroy;
+ }()
+ }], [{
+ key: "idCounters",
+ get: function get() {
+ return (0, _util.shadow)(this, "idCounters", {
+ doc: 0
+ });
+ }
+ }]);
+
+ return PDFDocumentLoadingTask;
+}();
+
+exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask;
+
+var PDFDataRangeTransport = /*#__PURE__*/function () {
+ function PDFDataRangeTransport(length, initialData) {
+ var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ var contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
+
+ _classCallCheck(this, PDFDataRangeTransport);
+
+ this.length = length;
+ this.initialData = initialData;
+ this.progressiveDone = progressiveDone;
+ this.contentDispositionFilename = contentDispositionFilename;
+ this._rangeListeners = [];
+ this._progressListeners = [];
+ this._progressiveReadListeners = [];
+ this._progressiveDoneListeners = [];
+ this._readyCapability = (0, _util.createPromiseCapability)();
+ }
+
+ _createClass(PDFDataRangeTransport, [{
+ key: "addRangeListener",
+ value: function addRangeListener(listener) {
+ this._rangeListeners.push(listener);
+ }
+ }, {
+ key: "addProgressListener",
+ value: function addProgressListener(listener) {
+ this._progressListeners.push(listener);
+ }
+ }, {
+ key: "addProgressiveReadListener",
+ value: function addProgressiveReadListener(listener) {
+ this._progressiveReadListeners.push(listener);
+ }
+ }, {
+ key: "addProgressiveDoneListener",
+ value: function addProgressiveDoneListener(listener) {
+ this._progressiveDoneListeners.push(listener);
+ }
+ }, {
+ key: "onDataRange",
+ value: function onDataRange(begin, chunk) {
+ var _iterator = _createForOfIteratorHelper(this._rangeListeners),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var listener = _step.value;
+ listener(begin, chunk);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+ }, {
+ key: "onDataProgress",
+ value: function onDataProgress(loaded, total) {
+ var _this = this;
+
+ this._readyCapability.promise.then(function () {
+ var _iterator2 = _createForOfIteratorHelper(_this._progressListeners),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var listener = _step2.value;
+ listener(loaded, total);
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+ });
+ }
+ }, {
+ key: "onDataProgressiveRead",
+ value: function onDataProgressiveRead(chunk) {
+ var _this2 = this;
+
+ this._readyCapability.promise.then(function () {
+ var _iterator3 = _createForOfIteratorHelper(_this2._progressiveReadListeners),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var listener = _step3.value;
+ listener(chunk);
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+ });
+ }
+ }, {
+ key: "onDataProgressiveDone",
+ value: function onDataProgressiveDone() {
+ var _this3 = this;
+
+ this._readyCapability.promise.then(function () {
+ var _iterator4 = _createForOfIteratorHelper(_this3._progressiveDoneListeners),
+ _step4;
+
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var listener = _step4.value;
+ listener();
+ }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
+ }
+ });
+ }
+ }, {
+ key: "transportReady",
+ value: function transportReady() {
+ this._readyCapability.resolve();
+ }
+ }, {
+ key: "requestDataRange",
+ value: function requestDataRange(begin, end) {
+ (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
+ }
+ }, {
+ key: "abort",
+ value: function abort() {}
+ }]);
+
+ return PDFDataRangeTransport;
+}();
+
+exports.PDFDataRangeTransport = PDFDataRangeTransport;
+
+var PDFDocumentProxy = /*#__PURE__*/function () {
+ function PDFDocumentProxy(pdfInfo, transport) {
+ var _this4 = this;
+
+ _classCallCheck(this, PDFDocumentProxy);
+
+ this._pdfInfo = pdfInfo;
+ this._transport = transport;
+ Object.defineProperty(this, "fingerprint", {
+ get: function get() {
+ (0, _display_utils.deprecated)("`PDFDocumentProxy.fingerprint`, " + "please use `PDFDocumentProxy.fingerprints` instead.");
+ return this.fingerprints[0];
+ }
+ });
+ Object.defineProperty(this, "getStats", {
+ value: function () {
+ var _value = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ (0, _display_utils.deprecated)("`PDFDocumentProxy.getStats`, " + "please use the `PDFDocumentProxy.stats`-getter instead.");
+ return _context2.abrupt("return", _this4.stats || {
+ streamTypes: {},
+ fontTypes: {}
+ });
+
+ case 2:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2);
+ }));
+
+ function value() {
+ return _value.apply(this, arguments);
+ }
+
+ return value;
+ }()
+ });
+ }
+
+ _createClass(PDFDocumentProxy, [{
+ key: "annotationStorage",
+ get: function get() {
+ return this._transport.annotationStorage;
+ }
+ }, {
+ key: "numPages",
+ get: function get() {
+ return this._pdfInfo.numPages;
+ }
+ }, {
+ key: "fingerprints",
+ get: function get() {
+ return this._pdfInfo.fingerprints;
+ }
+ }, {
+ key: "stats",
+ get: function get() {
+ return this._transport.stats;
+ }
+ }, {
+ key: "isPureXfa",
+ get: function get() {
+ return !!this._transport._htmlForXfa;
+ }
+ }, {
+ key: "allXfaHtml",
+ get: function get() {
+ return this._transport._htmlForXfa;
+ }
+ }, {
+ key: "getPage",
+ value: function getPage(pageNumber) {
+ return this._transport.getPage(pageNumber);
+ }
+ }, {
+ key: "getPageIndex",
+ value: function getPageIndex(ref) {
+ return this._transport.getPageIndex(ref);
+ }
+ }, {
+ key: "getDestinations",
+ value: function getDestinations() {
+ return this._transport.getDestinations();
+ }
+ }, {
+ key: "getDestination",
+ value: function getDestination(id) {
+ return this._transport.getDestination(id);
+ }
+ }, {
+ key: "getPageLabels",
+ value: function getPageLabels() {
+ return this._transport.getPageLabels();
+ }
+ }, {
+ key: "getPageLayout",
+ value: function getPageLayout() {
+ return this._transport.getPageLayout();
+ }
+ }, {
+ key: "getPageMode",
+ value: function getPageMode() {
+ return this._transport.getPageMode();
+ }
+ }, {
+ key: "getViewerPreferences",
+ value: function getViewerPreferences() {
+ return this._transport.getViewerPreferences();
+ }
+ }, {
+ key: "getOpenAction",
+ value: function getOpenAction() {
+ return this._transport.getOpenAction();
+ }
+ }, {
+ key: "getAttachments",
+ value: function getAttachments() {
+ return this._transport.getAttachments();
+ }
+ }, {
+ key: "getJavaScript",
+ value: function getJavaScript() {
+ return this._transport.getJavaScript();
+ }
+ }, {
+ key: "getJSActions",
+ value: function getJSActions() {
+ return this._transport.getDocJSActions();
+ }
+ }, {
+ key: "getOutline",
+ value: function getOutline() {
+ return this._transport.getOutline();
+ }
+ }, {
+ key: "getOptionalContentConfig",
+ value: function getOptionalContentConfig() {
+ return this._transport.getOptionalContentConfig();
+ }
+ }, {
+ key: "getPermissions",
+ value: function getPermissions() {
+ return this._transport.getPermissions();
+ }
+ }, {
+ key: "getMetadata",
+ value: function getMetadata() {
+ return this._transport.getMetadata();
+ }
+ }, {
+ key: "getMarkInfo",
+ value: function getMarkInfo() {
+ return this._transport.getMarkInfo();
+ }
+ }, {
+ key: "getData",
+ value: function getData() {
+ return this._transport.getData();
+ }
+ }, {
+ key: "getDownloadInfo",
+ value: function getDownloadInfo() {
+ return this._transport.downloadInfoCapability.promise;
+ }
+ }, {
+ key: "cleanup",
+ value: function cleanup() {
+ var keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);
+ }
+ }, {
+ key: "destroy",
+ value: function destroy() {
+ return this.loadingTask.destroy();
+ }
+ }, {
+ key: "loadingParams",
+ get: function get() {
+ return this._transport.loadingParams;
+ }
+ }, {
+ key: "loadingTask",
+ get: function get() {
+ return this._transport.loadingTask;
+ }
+ }, {
+ key: "saveDocument",
+ value: function saveDocument() {
+ if (this._transport.annotationStorage.size <= 0) {
+ (0, _display_utils.deprecated)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead.");
+ }
+
+ return this._transport.saveDocument();
+ }
+ }, {
+ key: "getFieldObjects",
+ value: function getFieldObjects() {
+ return this._transport.getFieldObjects();
+ }
+ }, {
+ key: "hasJSActions",
+ value: function hasJSActions() {
+ return this._transport.hasJSActions();
+ }
+ }, {
+ key: "getCalculationOrderIds",
+ value: function getCalculationOrderIds() {
+ return this._transport.getCalculationOrderIds();
+ }
+ }]);
+
+ return PDFDocumentProxy;
+}();
+
+exports.PDFDocumentProxy = PDFDocumentProxy;
+
+var PDFPageProxy = /*#__PURE__*/function () {
+ function PDFPageProxy(pageIndex, pageInfo, transport, ownerDocument) {
+ var pdfBug = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+ _classCallCheck(this, PDFPageProxy);
+
+ this._pageIndex = pageIndex;
+ this._pageInfo = pageInfo;
+ this._ownerDocument = ownerDocument;
+ this._transport = transport;
+ this._stats = pdfBug ? new _display_utils.StatTimer() : null;
+ this._pdfBug = pdfBug;
+ this.commonObjs = transport.commonObjs;
+ this.objs = new PDFObjects();
+ this.cleanupAfterRender = false;
+ this.pendingCleanup = false;
+ this._intentStates = new Map();
+ this._annotationPromises = new Map();
+ this.destroyed = false;
+ }
+
+ _createClass(PDFPageProxy, [{
+ key: "pageNumber",
+ get: function get() {
+ return this._pageIndex + 1;
+ }
+ }, {
+ key: "rotate",
+ get: function get() {
+ return this._pageInfo.rotate;
+ }
+ }, {
+ key: "ref",
+ get: function get() {
+ return this._pageInfo.ref;
+ }
+ }, {
+ key: "userUnit",
+ get: function get() {
+ return this._pageInfo.userUnit;
+ }
+ }, {
+ key: "view",
+ get: function get() {
+ return this._pageInfo.view;
+ }
+ }, {
+ key: "getViewport",
+ value: function getViewport() {
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+ scale = _ref3.scale,
+ _ref3$rotation = _ref3.rotation,
+ rotation = _ref3$rotation === void 0 ? this.rotate : _ref3$rotation,
+ _ref3$offsetX = _ref3.offsetX,
+ offsetX = _ref3$offsetX === void 0 ? 0 : _ref3$offsetX,
+ _ref3$offsetY = _ref3.offsetY,
+ offsetY = _ref3$offsetY === void 0 ? 0 : _ref3$offsetY,
+ _ref3$dontFlip = _ref3.dontFlip,
+ dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip;
+
+ return new _display_utils.PageViewport({
+ viewBox: this.view,
+ scale: scale,
+ rotation: rotation,
+ offsetX: offsetX,
+ offsetY: offsetY,
+ dontFlip: dontFlip
+ });
+ }
+ }, {
+ key: "getAnnotations",
+ value: function getAnnotations() {
+ var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+ _ref4$intent = _ref4.intent,
+ intent = _ref4$intent === void 0 ? "display" : _ref4$intent;
+
+ var intentArgs = this._transport.getRenderingIntent(intent);
+
+ var promise = this._annotationPromises.get(intentArgs.cacheKey);
+
+ if (!promise) {
+ promise = this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent);
+
+ this._annotationPromises.set(intentArgs.cacheKey, promise);
+
+ promise = promise.then(function (annotations) {
+ var _iterator5 = _createForOfIteratorHelper(annotations),
+ _step5;
+
+ try {
+ var _loop = function _loop() {
+ var annotation = _step5.value;
+
+ if (annotation.titleObj !== undefined) {
+ Object.defineProperty(annotation, "title", {
+ get: function get() {
+ (0, _display_utils.deprecated)("`title`-property on annotation, please use `titleObj` instead.");
+ return annotation.titleObj.str;
+ }
+ });
+ }
+
+ if (annotation.contentsObj !== undefined) {
+ Object.defineProperty(annotation, "contents", {
+ get: function get() {
+ (0, _display_utils.deprecated)("`contents`-property on annotation, please use `contentsObj` instead.");
+ return annotation.contentsObj.str;
+ }
+ });
+ }
+ };
+
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ _loop();
+ }
+ } catch (err) {
+ _iterator5.e(err);
+ } finally {
+ _iterator5.f();
+ }
+
+ return annotations;
+ });
+ }
+
+ return promise;
+ }
+ }, {
+ key: "getJSActions",
+ value: function getJSActions() {
+ return this._jsActionsPromise || (this._jsActionsPromise = this._transport.getPageJSActions(this._pageIndex));
+ }
+ }, {
+ key: "getXfa",
+ value: function () {
+ var _getXfa = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
+ var _this$_transport$_htm;
+
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
+ while (1) {
+ switch (_context3.prev = _context3.next) {
+ case 0:
+ return _context3.abrupt("return", ((_this$_transport$_htm = this._transport._htmlForXfa) === null || _this$_transport$_htm === void 0 ? void 0 : _this$_transport$_htm.children[this._pageIndex]) || null);
+
+ case 1:
+ case "end":
+ return _context3.stop();
+ }
+ }
+ }, _callee3, this);
+ }));
+
+ function getXfa() {
+ return _getXfa.apply(this, arguments);
+ }
+
+ return getXfa;
+ }()
+ }, {
+ key: "render",
+ value: function render(_ref5) {
+ var _arguments$,
+ _arguments$2,
+ _this5 = this,
+ _intentState;
+
+ var canvasContext = _ref5.canvasContext,
+ viewport = _ref5.viewport,
+ _ref5$intent = _ref5.intent,
+ intent = _ref5$intent === void 0 ? "display" : _ref5$intent,
+ _ref5$annotationMode = _ref5.annotationMode,
+ annotationMode = _ref5$annotationMode === void 0 ? _util.AnnotationMode.ENABLE : _ref5$annotationMode,
+ _ref5$transform = _ref5.transform,
+ transform = _ref5$transform === void 0 ? null : _ref5$transform,
+ _ref5$imageLayer = _ref5.imageLayer,
+ imageLayer = _ref5$imageLayer === void 0 ? null : _ref5$imageLayer,
+ _ref5$canvasFactory = _ref5.canvasFactory,
+ canvasFactory = _ref5$canvasFactory === void 0 ? null : _ref5$canvasFactory,
+ _ref5$background = _ref5.background,
+ background = _ref5$background === void 0 ? null : _ref5$background,
+ _ref5$optionalContent = _ref5.optionalContentConfigPromise,
+ optionalContentConfigPromise = _ref5$optionalContent === void 0 ? null : _ref5$optionalContent,
+ _ref5$annotationCanva = _ref5.annotationCanvasMap,
+ annotationCanvasMap = _ref5$annotationCanva === void 0 ? null : _ref5$annotationCanva;
+
+ if (((_arguments$ = arguments[0]) === null || _arguments$ === void 0 ? void 0 : _arguments$.renderInteractiveForms) !== undefined) {
+ (0, _display_utils.deprecated)("render no longer accepts the `renderInteractiveForms`-option, " + "please use the `annotationMode`-option instead.");
+
+ if (arguments[0].renderInteractiveForms === true && annotationMode === _util.AnnotationMode.ENABLE) {
+ annotationMode = _util.AnnotationMode.ENABLE_FORMS;
+ }
+ }
+
+ if (((_arguments$2 = arguments[0]) === null || _arguments$2 === void 0 ? void 0 : _arguments$2.includeAnnotationStorage) !== undefined) {
+ (0, _display_utils.deprecated)("render no longer accepts the `includeAnnotationStorage`-option, " + "please use the `annotationMode`-option instead.");
+
+ if (arguments[0].includeAnnotationStorage === true && annotationMode === _util.AnnotationMode.ENABLE) {
+ annotationMode = _util.AnnotationMode.ENABLE_STORAGE;
+ }
+ }
+
+ if (this._stats) {
+ this._stats.time("Overall");
+ }
+
+ var intentArgs = this._transport.getRenderingIntent(intent, annotationMode);
+
+ this.pendingCleanup = false;
+
+ if (!optionalContentConfigPromise) {
+ optionalContentConfigPromise = this._transport.getOptionalContentConfig();
+ }
+
+ var intentState = this._intentStates.get(intentArgs.cacheKey);
+
+ if (!intentState) {
+ intentState = Object.create(null);
+
+ this._intentStates.set(intentArgs.cacheKey, intentState);
+ }
+
+ if (intentState.streamReaderCancelTimeout) {
+ clearTimeout(intentState.streamReaderCancelTimeout);
+ intentState.streamReaderCancelTimeout = null;
+ }
+
+ var canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({
+ ownerDocument: this._ownerDocument
+ });
+ var intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT);
+
+ if (!intentState.displayReadyCapability) {
+ intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
+ intentState.operatorList = {
+ fnArray: [],
+ argsArray: [],
+ lastChunk: false
+ };
+
+ if (this._stats) {
+ this._stats.time("Page Request");
+ }
+
+ this._pumpOperatorList(intentArgs);
+ }
+
+ var complete = function complete(error) {
+ intentState.renderTasks["delete"](internalRenderTask);
+
+ if (_this5.cleanupAfterRender || intentPrint) {
+ _this5.pendingCleanup = true;
+ }
+
+ _this5._tryCleanup();
+
+ if (error) {
+ internalRenderTask.capability.reject(error);
+
+ _this5._abortOperatorList({
+ intentState: intentState,
+ reason: error instanceof Error ? error : new Error(error)
+ });
+ } else {
+ internalRenderTask.capability.resolve();
+ }
+
+ if (_this5._stats) {
+ _this5._stats.timeEnd("Rendering");
+
+ _this5._stats.timeEnd("Overall");
+ }
+ };
+
+ var internalRenderTask = new InternalRenderTask({
+ callback: complete,
+ params: {
+ canvasContext: canvasContext,
+ viewport: viewport,
+ transform: transform,
+ imageLayer: imageLayer,
+ background: background
+ },
+ objs: this.objs,
+ commonObjs: this.commonObjs,
+ annotationCanvasMap: annotationCanvasMap,
+ operatorList: intentState.operatorList,
+ pageIndex: this._pageIndex,
+ canvasFactory: canvasFactoryInstance,
+ useRequestAnimationFrame: !intentPrint,
+ pdfBug: this._pdfBug
+ });
+ ((_intentState = intentState).renderTasks || (_intentState.renderTasks = new Set())).add(internalRenderTask);
+ var renderTask = internalRenderTask.task;
+ Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(function (_ref6) {
+ var _ref7 = _slicedToArray(_ref6, 2),
+ transparency = _ref7[0],
+ optionalContentConfig = _ref7[1];
+
+ if (_this5.pendingCleanup) {
+ complete();
+ return;
+ }
+
+ if (_this5._stats) {
+ _this5._stats.time("Rendering");
+ }
+
+ internalRenderTask.initializeGraphics({
+ transparency: transparency,
+ optionalContentConfig: optionalContentConfig
+ });
+ internalRenderTask.operatorListChanged();
+ })["catch"](complete);
+ return renderTask;
+ }
+ }, {
+ key: "getOperatorList",
+ value: function getOperatorList() {
+ var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+ _ref8$intent = _ref8.intent,
+ intent = _ref8$intent === void 0 ? "display" : _ref8$intent,
+ _ref8$annotationMode = _ref8.annotationMode,
+ annotationMode = _ref8$annotationMode === void 0 ? _util.AnnotationMode.ENABLE : _ref8$annotationMode;
+
+ function operatorListChanged() {
+ if (intentState.operatorList.lastChunk) {
+ intentState.opListReadCapability.resolve(intentState.operatorList);
+ intentState.renderTasks["delete"](opListTask);
+ }
+ }
+
+ var intentArgs = this._transport.getRenderingIntent(intent, annotationMode, true);
+
+ var intentState = this._intentStates.get(intentArgs.cacheKey);
+
+ if (!intentState) {
+ intentState = Object.create(null);
+
+ this._intentStates.set(intentArgs.cacheKey, intentState);
+ }
+
+ var opListTask;
+
+ if (!intentState.opListReadCapability) {
+ var _intentState2;
+
+ opListTask = Object.create(null);
+ opListTask.operatorListChanged = operatorListChanged;
+ intentState.opListReadCapability = (0, _util.createPromiseCapability)();
+ ((_intentState2 = intentState).renderTasks || (_intentState2.renderTasks = new Set())).add(opListTask);
+ intentState.operatorList = {
+ fnArray: [],
+ argsArray: [],
+ lastChunk: false
+ };
+
+ if (this._stats) {
+ this._stats.time("Page Request");
+ }
+
+ this._pumpOperatorList(intentArgs);
+ }
+
+ return intentState.opListReadCapability.promise;
+ }
+ }, {
+ key: "streamTextContent",
+ value: function streamTextContent() {
+ var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+ _ref9$disableCombineT = _ref9.disableCombineTextItems,
+ disableCombineTextItems = _ref9$disableCombineT === void 0 ? false : _ref9$disableCombineT,
+ _ref9$includeMarkedCo = _ref9.includeMarkedContent,
+ includeMarkedContent = _ref9$includeMarkedCo === void 0 ? false : _ref9$includeMarkedCo;
+
+ var TEXT_CONTENT_CHUNK_SIZE = 100;
+ return this._transport.messageHandler.sendWithStream("GetTextContent", {
+ pageIndex: this._pageIndex,
+ combineTextItems: disableCombineTextItems !== true,
+ includeMarkedContent: includeMarkedContent === true
+ }, {
+ highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
+ size: function size(textContent) {
+ return textContent.items.length;
+ }
+ });
+ }
+ }, {
+ key: "getTextContent",
+ value: function getTextContent() {
+ var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ if (this._transport._htmlForXfa) {
+ return this.getXfa().then(function (xfa) {
+ return _xfa_text.XfaText.textContent(xfa);
+ });
+ }
+
+ var readableStream = this.streamTextContent(params);
+ return new Promise(function (resolve, reject) {
+ function pump() {
+ reader.read().then(function (_ref10) {
+ var _textContent$items;
+
+ var value = _ref10.value,
+ done = _ref10.done;
+
+ if (done) {
+ resolve(textContent);
+ return;
+ }
+
+ Object.assign(textContent.styles, value.styles);
+
+ (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items));
+
+ pump();
+ }, reject);
+ }
+
+ var reader = readableStream.getReader();
+ var textContent = {
+ items: [],
+ styles: Object.create(null)
+ };
+ pump();
+ });
+ }
+ }, {
+ key: "getStructTree",
+ value: function getStructTree() {
+ return this._structTreePromise || (this._structTreePromise = this._transport.getStructTree(this._pageIndex));
+ }
+ }, {
+ key: "_destroy",
+ value: function _destroy() {
+ this.destroyed = true;
+ var waitOn = [];
+
+ var _iterator6 = _createForOfIteratorHelper(this._intentStates.values()),
+ _step6;
+
+ try {
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
+ var intentState = _step6.value;
+
+ this._abortOperatorList({
+ intentState: intentState,
+ reason: new Error("Page was destroyed."),
+ force: true
+ });
+
+ if (intentState.opListReadCapability) {
+ continue;
+ }
+
+ var _iterator7 = _createForOfIteratorHelper(intentState.renderTasks),
+ _step7;
+
+ try {
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
+ var internalRenderTask = _step7.value;
+ waitOn.push(internalRenderTask.completed);
+ internalRenderTask.cancel();
+ }
+ } catch (err) {
+ _iterator7.e(err);
+ } finally {
+ _iterator7.f();
+ }
+ }
+ } catch (err) {
+ _iterator6.e(err);
+ } finally {
+ _iterator6.f();
+ }
+
+ this.objs.clear();
+
+ this._annotationPromises.clear();
+
+ this._jsActionsPromise = null;
+ this._structTreePromise = null;
+ this.pendingCleanup = false;
+ return Promise.all(waitOn);
+ }
+ }, {
+ key: "cleanup",
+ value: function cleanup() {
+ var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ this.pendingCleanup = true;
+ return this._tryCleanup(resetStats);
+ }
+ }, {
+ key: "_tryCleanup",
+ value: function _tryCleanup() {
+ var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+ if (!this.pendingCleanup) {
+ return false;
+ }
+
+ var _iterator8 = _createForOfIteratorHelper(this._intentStates.values()),
+ _step8;
+
+ try {
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
+ var _step8$value = _step8.value,
+ renderTasks = _step8$value.renderTasks,
+ operatorList = _step8$value.operatorList;
+
+ if (renderTasks.size > 0 || !operatorList.lastChunk) {
+ return false;
+ }
+ }
+ } catch (err) {
+ _iterator8.e(err);
+ } finally {
+ _iterator8.f();
+ }
+
+ this._intentStates.clear();
+
+ this.objs.clear();
+
+ this._annotationPromises.clear();
+
+ this._jsActionsPromise = null;
+ this._structTreePromise = null;
+
+ if (resetStats && this._stats) {
+ this._stats = new _display_utils.StatTimer();
+ }
+
+ this.pendingCleanup = false;
+ return true;
+ }
+ }, {
+ key: "_startRenderPage",
+ value: function _startRenderPage(transparency, cacheKey) {
+ var intentState = this._intentStates.get(cacheKey);
+
+ if (!intentState) {
+ return;
+ }
+
+ if (this._stats) {
+ this._stats.timeEnd("Page Request");
+ }
+
+ if (intentState.displayReadyCapability) {
+ intentState.displayReadyCapability.resolve(transparency);
+ }
+ }
+ }, {
+ key: "_renderPageChunk",
+ value: function _renderPageChunk(operatorListChunk, intentState) {
+ for (var i = 0, ii = operatorListChunk.length; i < ii; i++) {
+ intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
+ intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
+ }
+
+ intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
+
+ var _iterator9 = _createForOfIteratorHelper(intentState.renderTasks),
+ _step9;
+
+ try {
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
+ var internalRenderTask = _step9.value;
+ internalRenderTask.operatorListChanged();
+ }
+ } catch (err) {
+ _iterator9.e(err);
+ } finally {
+ _iterator9.f();
+ }
+
+ if (operatorListChunk.lastChunk) {
+ this._tryCleanup();
+ }
+ }
+ }, {
+ key: "_pumpOperatorList",
+ value: function _pumpOperatorList(_ref11) {
+ var _this6 = this;
+
+ var renderingIntent = _ref11.renderingIntent,
+ cacheKey = _ref11.cacheKey;
+
+ var readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", {
+ pageIndex: this._pageIndex,
+ intent: renderingIntent,
+ cacheKey: cacheKey,
+ annotationStorage: renderingIntent & _util.RenderingIntentFlag.ANNOTATIONS_STORAGE ? this._transport.annotationStorage.serializable : null
+ });
+
+ var reader = readableStream.getReader();
+
+ var intentState = this._intentStates.get(cacheKey);
+
+ intentState.streamReader = reader;
+
+ var pump = function pump() {
+ reader.read().then(function (_ref12) {
+ var value = _ref12.value,
+ done = _ref12.done;
+
+ if (done) {
+ intentState.streamReader = null;
+ return;
+ }
+
+ if (_this6._transport.destroyed) {
+ return;
+ }
+
+ _this6._renderPageChunk(value, intentState);
+
+ pump();
+ }, function (reason) {
+ intentState.streamReader = null;
+
+ if (_this6._transport.destroyed) {
+ return;
+ }
+
+ if (intentState.operatorList) {
+ intentState.operatorList.lastChunk = true;
+
+ var _iterator10 = _createForOfIteratorHelper(intentState.renderTasks),
+ _step10;
+
+ try {
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
+ var internalRenderTask = _step10.value;
+ internalRenderTask.operatorListChanged();
+ }
+ } catch (err) {
+ _iterator10.e(err);
+ } finally {
+ _iterator10.f();
+ }
+
+ _this6._tryCleanup();
+ }
+
+ if (intentState.displayReadyCapability) {
+ intentState.displayReadyCapability.reject(reason);
+ } else if (intentState.opListReadCapability) {
+ intentState.opListReadCapability.reject(reason);
+ } else {
+ throw reason;
+ }
+ });
+ };
+
+ pump();
+ }
+ }, {
+ key: "_abortOperatorList",
+ value: function _abortOperatorList(_ref13) {
+ var _this7 = this;
+
+ var intentState = _ref13.intentState,
+ reason = _ref13.reason,
+ _ref13$force = _ref13.force,
+ force = _ref13$force === void 0 ? false : _ref13$force;
+
+ if (!intentState.streamReader) {
+ return;
+ }
+
+ if (!force) {
+ if (intentState.renderTasks.size > 0) {
+ return;
+ }
+
+ if (reason instanceof _display_utils.RenderingCancelledException) {
+ intentState.streamReaderCancelTimeout = setTimeout(function () {
+ _this7._abortOperatorList({
+ intentState: intentState,
+ reason: reason,
+ force: true
+ });
+
+ intentState.streamReaderCancelTimeout = null;
+ }, RENDERING_CANCELLED_TIMEOUT);
+ return;
+ }
+ }
+
+ intentState.streamReader.cancel(new _util.AbortException(reason.message))["catch"](function () {});
+ intentState.streamReader = null;
+
+ if (this._transport.destroyed) {
+ return;
+ }
+
+ var _iterator11 = _createForOfIteratorHelper(this._intentStates),
+ _step11;
+
+ try {
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
+ var _step11$value = _slicedToArray(_step11.value, 2),
+ curCacheKey = _step11$value[0],
+ curIntentState = _step11$value[1];
+
+ if (curIntentState === intentState) {
+ this._intentStates["delete"](curCacheKey);
+
+ break;
+ }
+ }
+ } catch (err) {
+ _iterator11.e(err);
+ } finally {
+ _iterator11.f();
+ }
+
+ this.cleanup();
+ }
+ }, {
+ key: "stats",
+ get: function get() {
+ return this._stats;
+ }
+ }]);
+
+ return PDFPageProxy;
+}();
+
+exports.PDFPageProxy = PDFPageProxy;
+
+var LoopbackPort = /*#__PURE__*/function () {
+ function LoopbackPort() {
+ _classCallCheck(this, LoopbackPort);
+
+ this._listeners = [];
+ this._deferred = Promise.resolve();
+ }
+
+ _createClass(LoopbackPort, [{
+ key: "postMessage",
+ value: function postMessage(obj, transfers) {
+ var _this8 = this;
+
+ var event = {
+ data: transfers ? structuredClone(obj, transfers) : structuredClone(obj)
+ };
+
+ this._deferred.then(function () {
+ var _iterator12 = _createForOfIteratorHelper(_this8._listeners),
+ _step12;
+
+ try {
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
+ var listener = _step12.value;
+ listener.call(_this8, event);
+ }
+ } catch (err) {
+ _iterator12.e(err);
+ } finally {
+ _iterator12.f();
+ }
+ });
+ }
+ }, {
+ key: "addEventListener",
+ value: function addEventListener(name, listener) {
+ this._listeners.push(listener);
+ }
+ }, {
+ key: "removeEventListener",
+ value: function removeEventListener(name, listener) {
+ var i = this._listeners.indexOf(listener);
+
+ this._listeners.splice(i, 1);
+ }
+ }, {
+ key: "terminate",
+ value: function terminate() {
+ this._listeners.length = 0;
+ }
+ }]);
+
+ return LoopbackPort;
+}();
+
+exports.LoopbackPort = LoopbackPort;
+var PDFWorkerUtil = {
+ isWorkerDisabled: false,
+ fallbackWorkerSrc: null,
+ fakeWorkerId: 0
+};
+{
+ if (_is_node.isNodeJS && typeof require === "function") {
+ PDFWorkerUtil.isWorkerDisabled = true;
+ PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js";
+ } else if ((typeof document === "undefined" ? "undefined" : _typeof(document)) === "object") {
+ var _document, _document$currentScri;
+
+ var pdfjsFilePath = (_document = document) === null || _document === void 0 ? void 0 : (_document$currentScri = _document.currentScript) === null || _document$currentScri === void 0 ? void 0 : _document$currentScri.src;
+
+ if (pdfjsFilePath) {
+ PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
+ }
+ }
+
+ PDFWorkerUtil.createCDNWrapper = function (url) {
+ var wrapper = "importScripts(\"".concat(url, "\");");
+ return URL.createObjectURL(new Blob([wrapper]));
+ };
+}
+
+var PDFWorker = /*#__PURE__*/function () {
+ function PDFWorker() {
+ var _ref14 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+ _ref14$name = _ref14.name,
+ name = _ref14$name === void 0 ? null : _ref14$name,
+ _ref14$port = _ref14.port,
+ port = _ref14$port === void 0 ? null : _ref14$port,
+ _ref14$verbosity = _ref14.verbosity,
+ verbosity = _ref14$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref14$verbosity;
+
+ _classCallCheck(this, PDFWorker);
+
+ if (port && PDFWorker._workerPorts.has(port)) {
+ throw new Error("Cannot use more than one PDFWorker per port.");
+ }
+
+ this.name = name;
+ this.destroyed = false;
+ this.verbosity = verbosity;
+ this._readyCapability = (0, _util.createPromiseCapability)();
+ this._port = null;
+ this._webWorker = null;
+ this._messageHandler = null;
+
+ if (port) {
+ PDFWorker._workerPorts.set(port, this);
+
+ this._initializeFromPort(port);
+
+ return;
+ }
+
+ this._initialize();
+ }
+
+ _createClass(PDFWorker, [{
+ key: "promise",
+ get: function get() {
+ return this._readyCapability.promise;
+ }
+ }, {
+ key: "port",
+ get: function get() {
+ return this._port;
+ }
+ }, {
+ key: "messageHandler",
+ get: function get() {
+ return this._messageHandler;
+ }
+ }, {
+ key: "_initializeFromPort",
+ value: function _initializeFromPort(port) {
+ this._port = port;
+ this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);
+
+ this._messageHandler.on("ready", function () {});
+
+ this._readyCapability.resolve();
+ }
+ }, {
+ key: "_initialize",
+ value: function _initialize() {
+ var _this9 = this;
+
+ if (typeof Worker !== "undefined" && !PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) {
+ var workerSrc = PDFWorker.workerSrc;
+
+ try {
+ if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
+ workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href);
+ }
+
+ var worker = new Worker(workerSrc);
+ var messageHandler = new _message_handler.MessageHandler("main", "worker", worker);
+
+ var terminateEarly = function terminateEarly() {
+ worker.removeEventListener("error", onWorkerError);
+ messageHandler.destroy();
+ worker.terminate();
+
+ if (_this9.destroyed) {
+ _this9._readyCapability.reject(new Error("Worker was destroyed"));
+ } else {
+ _this9._setupFakeWorker();
+ }
+ };
+
+ var onWorkerError = function onWorkerError() {
+ if (!_this9._webWorker) {
+ terminateEarly();
+ }
+ };
+
+ worker.addEventListener("error", onWorkerError);
+ messageHandler.on("test", function (data) {
+ worker.removeEventListener("error", onWorkerError);
+
+ if (_this9.destroyed) {
+ terminateEarly();
+ return;
+ }
+
+ if (data) {
+ _this9._messageHandler = messageHandler;
+ _this9._port = worker;
+ _this9._webWorker = worker;
+
+ _this9._readyCapability.resolve();
+
+ messageHandler.send("configure", {
+ verbosity: _this9.verbosity
+ });
+ } else {
+ _this9._setupFakeWorker();
+
+ messageHandler.destroy();
+ worker.terminate();
+ }
+ });
+ messageHandler.on("ready", function (data) {
+ worker.removeEventListener("error", onWorkerError);
+
+ if (_this9.destroyed) {
+ terminateEarly();
+ return;
+ }
+
+ try {
+ sendTest();
+ } catch (e) {
+ _this9._setupFakeWorker();
+ }
+ });
+
+ var sendTest = function sendTest() {
+ var testObj = new Uint8Array([255]);
+
+ try {
+ messageHandler.send("test", testObj, [testObj.buffer]);
+ } catch (ex) {
+ (0, _util.warn)("Cannot use postMessage transfers.");
+ testObj[0] = 0;
+ messageHandler.send("test", testObj);
+ }
+ };
+
+ sendTest();
+ return;
+ } catch (e) {
+ (0, _util.info)("The worker has been disabled.");
+ }
+ }
+
+ this._setupFakeWorker();
+ }
+ }, {
+ key: "_setupFakeWorker",
+ value: function _setupFakeWorker() {
+ var _this10 = this;
+
+ if (!PDFWorkerUtil.isWorkerDisabled) {
+ (0, _util.warn)("Setting up fake worker.");
+ PDFWorkerUtil.isWorkerDisabled = true;
+ }
+
+ PDFWorker._setupFakeWorkerGlobal.then(function (WorkerMessageHandler) {
+ if (_this10.destroyed) {
+ _this10._readyCapability.reject(new Error("Worker was destroyed"));
+
+ return;
+ }
+
+ var port = new LoopbackPort();
+ _this10._port = port;
+ var id = "fake".concat(PDFWorkerUtil.fakeWorkerId++);
+ var workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
+ WorkerMessageHandler.setup(workerHandler, port);
+ var messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port);
+ _this10._messageHandler = messageHandler;
+
+ _this10._readyCapability.resolve();
+
+ messageHandler.send("configure", {
+ verbosity: _this10.verbosity
+ });
+ })["catch"](function (reason) {
+ _this10._readyCapability.reject(new Error("Setting up fake worker failed: \"".concat(reason.message, "\".")));
+ });
+ }
+ }, {
+ key: "destroy",
+ value: function destroy() {
+ this.destroyed = true;
+
+ if (this._webWorker) {
+ this._webWorker.terminate();
+
+ this._webWorker = null;
+ }
+
+ PDFWorker._workerPorts["delete"](this._port);
+
+ this._port = null;
+
+ if (this._messageHandler) {
+ this._messageHandler.destroy();
+
+ this._messageHandler = null;
+ }
+ }
+ }], [{
+ key: "_workerPorts",
+ get: function get() {
+ return (0, _util.shadow)(this, "_workerPorts", new WeakMap());
+ }
+ }, {
+ key: "fromPort",
+ value: function fromPort(params) {
+ if (!(params !== null && params !== void 0 && params.port)) {
+ throw new Error("PDFWorker.fromPort - invalid method signature.");
+ }
+
+ if (this._workerPorts.has(params.port)) {
+ return this._workerPorts.get(params.port);
+ }
+
+ return new PDFWorker(params);
+ }
+ }, {
+ key: "workerSrc",
+ get: function get() {
+ if (_worker_options.GlobalWorkerOptions.workerSrc) {
+ return _worker_options.GlobalWorkerOptions.workerSrc;
+ }
+
+ if (PDFWorkerUtil.fallbackWorkerSrc !== null) {
+ if (!_is_node.isNodeJS) {
+ (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
+ }
+
+ return PDFWorkerUtil.fallbackWorkerSrc;
+ }
+
+ throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
+ }
+ }, {
+ key: "_mainThreadWorkerMessageHandler",
+ get: function get() {
+ try {
+ var _globalThis$pdfjsWork;
+
+ return ((_globalThis$pdfjsWork = globalThis.pdfjsWorker) === null || _globalThis$pdfjsWork === void 0 ? void 0 : _globalThis$pdfjsWork.WorkerMessageHandler) || null;
+ } catch (ex) {
+ return null;
+ }
+ }
+ }, {
+ key: "_setupFakeWorkerGlobal",
+ get: function get() {
+ var _this11 = this;
+
+ var loader = /*#__PURE__*/function () {
+ var _ref15 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
+ var mainWorkerMessageHandler, worker;
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
+ while (1) {
+ switch (_context4.prev = _context4.next) {
+ case 0:
+ mainWorkerMessageHandler = _this11._mainThreadWorkerMessageHandler;
+
+ if (!mainWorkerMessageHandler) {
+ _context4.next = 3;
+ break;
+ }
+
+ return _context4.abrupt("return", mainWorkerMessageHandler);
+
+ case 3:
+ if (!(_is_node.isNodeJS && typeof require === "function")) {
+ _context4.next = 6;
+ break;
+ }
+
+ worker = eval("require")(_this11.workerSrc);
+ return _context4.abrupt("return", worker.WorkerMessageHandler);
+
+ case 6:
+ _context4.next = 8;
+ return (0, _display_utils.loadScript)(_this11.workerSrc);
+
+ case 8:
+ return _context4.abrupt("return", window.pdfjsWorker.WorkerMessageHandler);
+
+ case 9:
+ case "end":
+ return _context4.stop();
+ }
+ }
+ }, _callee4);
+ }));
+
+ return function loader() {
+ return _ref15.apply(this, arguments);
+ };
+ }();
+
+ return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader());
+ }
+ }]);
+
+ return PDFWorker;
+}();
+
+exports.PDFWorker = PDFWorker;
+{
+ PDFWorker.getWorkerSrc = function () {
+ (0, _display_utils.deprecated)("`PDFWorker.getWorkerSrc()`, please use `PDFWorker.workerSrc` instead.");
+ return this.workerSrc;
+ };
+}
+
+var _docStats = /*#__PURE__*/new WeakMap();
+
+var _pageCache = /*#__PURE__*/new WeakMap();
+
+var _pagePromises = /*#__PURE__*/new WeakMap();
+
+var _metadataPromise = /*#__PURE__*/new WeakMap();
+
+var WorkerTransport = /*#__PURE__*/function () {
+ function WorkerTransport(messageHandler, loadingTask, networkStream, params) {
+ _classCallCheck(this, WorkerTransport);
+
+ _classPrivateFieldInitSpec(this, _docStats, {
+ writable: true,
+ value: null
+ });
+
+ _classPrivateFieldInitSpec(this, _pageCache, {
+ writable: true,
+ value: new Map()
+ });
+
+ _classPrivateFieldInitSpec(this, _pagePromises, {
+ writable: true,
+ value: new Map()
+ });
+
+ _classPrivateFieldInitSpec(this, _metadataPromise, {
+ writable: true,
+ value: null
+ });
+
+ this.messageHandler = messageHandler;
+ this.loadingTask = loadingTask;
+ this.commonObjs = new PDFObjects();
+ this.fontLoader = new _font_loader.FontLoader({
+ docId: loadingTask.docId,
+ onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
+ ownerDocument: params.ownerDocument,
+ styleElement: params.styleElement
+ });
+ this._params = params;
+
+ if (!params.useWorkerFetch) {
+ this.CMapReaderFactory = new params.CMapReaderFactory({
+ baseUrl: params.cMapUrl,
+ isCompressed: params.cMapPacked
+ });
+ this.StandardFontDataFactory = new params.StandardFontDataFactory({
+ baseUrl: params.standardFontDataUrl
+ });
+ }
+
+ this.destroyed = false;
+ this.destroyCapability = null;
+ this._passwordCapability = null;
+ this._networkStream = networkStream;
+ this._fullReader = null;
+ this._lastProgress = null;
+ this.downloadInfoCapability = (0, _util.createPromiseCapability)();
+ this.setupMessageHandler();
+ }
+
+ _createClass(WorkerTransport, [{
+ key: "annotationStorage",
+ get: function get() {
+ return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage());
+ }
+ }, {
+ key: "stats",
+ get: function get() {
+ return _classPrivateFieldGet(this, _docStats);
+ }
+ }, {
+ key: "getRenderingIntent",
+ value: function getRenderingIntent(intent) {
+ var annotationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util.AnnotationMode.ENABLE;
+ var isOpList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ var renderingIntent = _util.RenderingIntentFlag.DISPLAY;
+ var lastModified = "";
+
+ switch (intent) {
+ case "any":
+ renderingIntent = _util.RenderingIntentFlag.ANY;
+ break;
+
+ case "display":
+ break;
+
+ case "print":
+ renderingIntent = _util.RenderingIntentFlag.PRINT;
+ break;
+
+ default:
+ (0, _util.warn)("getRenderingIntent - invalid intent: ".concat(intent));
+ }
+
+ switch (annotationMode) {
+ case _util.AnnotationMode.DISABLE:
+ renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE;
+ break;
+
+ case _util.AnnotationMode.ENABLE:
+ break;
+
+ case _util.AnnotationMode.ENABLE_FORMS:
+ renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS;
+ break;
+
+ case _util.AnnotationMode.ENABLE_STORAGE:
+ renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE;
+ lastModified = this.annotationStorage.lastModified;
+ break;
+
+ default:
+ (0, _util.warn)("getRenderingIntent - invalid annotationMode: ".concat(annotationMode));
+ }
+
+ if (isOpList) {
+ renderingIntent += _util.RenderingIntentFlag.OPLIST;
+ }
+
+ return {
+ renderingIntent: renderingIntent,
+ cacheKey: "".concat(renderingIntent, "_").concat(lastModified)
+ };
+ }
+ }, {
+ key: "destroy",
+ value: function destroy() {
+ var _this12 = this;
+
+ if (this.destroyCapability) {
+ return this.destroyCapability.promise;
+ }
+
+ this.destroyed = true;
+ this.destroyCapability = (0, _util.createPromiseCapability)();
+
+ if (this._passwordCapability) {
+ this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));
+ }
+
+ var waitOn = [];
+
+ var _iterator13 = _createForOfIteratorHelper(_classPrivateFieldGet(this, _pageCache).values()),
+ _step13;
+
+ try {
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
+ var page = _step13.value;
+ waitOn.push(page._destroy());
+ }
+ } catch (err) {
+ _iterator13.e(err);
+ } finally {
+ _iterator13.f();
+ }
+
+ _classPrivateFieldGet(this, _pageCache).clear();
+
+ _classPrivateFieldGet(this, _pagePromises).clear();
+
+ if (this.hasOwnProperty("annotationStorage")) {
+ this.annotationStorage.resetModified();
+ }
+
+ var terminated = this.messageHandler.sendWithPromise("Terminate", null);
+ waitOn.push(terminated);
+ Promise.all(waitOn).then(function () {
+ _this12.commonObjs.clear();
+
+ _this12.fontLoader.clear();
+
+ _classPrivateFieldSet(_this12, _metadataPromise, null);
+
+ _this12._getFieldObjectsPromise = null;
+ _this12._hasJSActionsPromise = null;
+
+ if (_this12._networkStream) {
+ _this12._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated."));
+ }
+
+ if (_this12.messageHandler) {
+ _this12.messageHandler.destroy();
+
+ _this12.messageHandler = null;
+ }
+
+ _this12.destroyCapability.resolve();
+ }, this.destroyCapability.reject);
+ return this.destroyCapability.promise;
+ }
+ }, {
+ key: "setupMessageHandler",
+ value: function setupMessageHandler() {
+ var _this13 = this;
+
+ var messageHandler = this.messageHandler,
+ loadingTask = this.loadingTask;
+ messageHandler.on("GetReader", function (data, sink) {
+ (0, _util.assert)(_this13._networkStream, "GetReader - no `IPDFStream` instance available.");
+ _this13._fullReader = _this13._networkStream.getFullReader();
+
+ _this13._fullReader.onProgress = function (evt) {
+ _this13._lastProgress = {
+ loaded: evt.loaded,
+ total: evt.total
+ };
+ };
+
+ sink.onPull = function () {
+ _this13._fullReader.read().then(function (_ref16) {
+ var value = _ref16.value,
+ done = _ref16.done;
+
+ if (done) {
+ sink.close();
+ return;
+ }
+
+ (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer.");
+ sink.enqueue(new Uint8Array(value), 1, [value]);
+ })["catch"](function (reason) {
+ sink.error(reason);
+ });
+ };
+
+ sink.onCancel = function (reason) {
+ _this13._fullReader.cancel(reason);
+
+ sink.ready["catch"](function (readyReason) {
+ if (_this13.destroyed) {
+ return;
+ }
+
+ throw readyReason;
+ });
+ };
+ });
+ messageHandler.on("ReaderHeadersReady", function (data) {
+ var headersCapability = (0, _util.createPromiseCapability)();
+ var fullReader = _this13._fullReader;
+ fullReader.headersReady.then(function () {
+ if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
+ if (_this13._lastProgress) {
+ var _loadingTask$onProgre;
+
+ (_loadingTask$onProgre = loadingTask.onProgress) === null || _loadingTask$onProgre === void 0 ? void 0 : _loadingTask$onProgre.call(loadingTask, _this13._lastProgress);
+ }
+
+ fullReader.onProgress = function (evt) {
+ var _loadingTask$onProgre2;
+
+ (_loadingTask$onProgre2 = loadingTask.onProgress) === null || _loadingTask$onProgre2 === void 0 ? void 0 : _loadingTask$onProgre2.call(loadingTask, {
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ };
+ }
+
+ headersCapability.resolve({
+ isStreamingSupported: fullReader.isStreamingSupported,
+ isRangeSupported: fullReader.isRangeSupported,
+ contentLength: fullReader.contentLength
+ });
+ }, headersCapability.reject);
+ return headersCapability.promise;
+ });
+ messageHandler.on("GetRangeReader", function (data, sink) {
+ (0, _util.assert)(_this13._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
+
+ var rangeReader = _this13._networkStream.getRangeReader(data.begin, data.end);
+
+ if (!rangeReader) {
+ sink.close();
+ return;
+ }
+
+ sink.onPull = function () {
+ rangeReader.read().then(function (_ref17) {
+ var value = _ref17.value,
+ done = _ref17.done;
+
+ if (done) {
+ sink.close();
+ return;
+ }
+
+ (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer.");
+ sink.enqueue(new Uint8Array(value), 1, [value]);
+ })["catch"](function (reason) {
+ sink.error(reason);
+ });
+ };
+
+ sink.onCancel = function (reason) {
+ rangeReader.cancel(reason);
+ sink.ready["catch"](function (readyReason) {
+ if (_this13.destroyed) {
+ return;
+ }
+
+ throw readyReason;
+ });
+ };
+ });
+ messageHandler.on("GetDoc", function (_ref18) {
+ var pdfInfo = _ref18.pdfInfo;
+ _this13._numPages = pdfInfo.numPages;
+ _this13._htmlForXfa = pdfInfo.htmlForXfa;
+ delete pdfInfo.htmlForXfa;
+
+ loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, _this13));
+ });
+ messageHandler.on("DocException", function (ex) {
+ var reason;
+
+ switch (ex.name) {
+ case "PasswordException":
+ reason = new _util.PasswordException(ex.message, ex.code);
+ break;
+
+ case "InvalidPDFException":
+ reason = new _util.InvalidPDFException(ex.message);
+ break;
+
+ case "MissingPDFException":
+ reason = new _util.MissingPDFException(ex.message);
+ break;
+
+ case "UnexpectedResponseException":
+ reason = new _util.UnexpectedResponseException(ex.message, ex.status);
+ break;
+
+ case "UnknownErrorException":
+ reason = new _util.UnknownErrorException(ex.message, ex.details);
+ break;
+
+ default:
+ (0, _util.unreachable)("DocException - expected a valid Error.");
+ }
+
+ loadingTask._capability.reject(reason);
+ });
+ messageHandler.on("PasswordRequest", function (exception) {
+ _this13._passwordCapability = (0, _util.createPromiseCapability)();
+
+ if (loadingTask.onPassword) {
+ var updatePassword = function updatePassword(password) {
+ if (password instanceof Error) {
+ _this13._passwordCapability.reject(password);
+ } else {
+ _this13._passwordCapability.resolve({
+ password: password
+ });
+ }
+ };
+
+ try {
+ loadingTask.onPassword(updatePassword, exception.code);
+ } catch (ex) {
+ _this13._passwordCapability.reject(ex);
+ }
+ } else {
+ _this13._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
+ }
+
+ return _this13._passwordCapability.promise;
+ });
+ messageHandler.on("DataLoaded", function (data) {
+ var _loadingTask$onProgre3;
+
+ (_loadingTask$onProgre3 = loadingTask.onProgress) === null || _loadingTask$onProgre3 === void 0 ? void 0 : _loadingTask$onProgre3.call(loadingTask, {
+ loaded: data.length,
+ total: data.length
+ });
+
+ _this13.downloadInfoCapability.resolve(data);
+ });
+ messageHandler.on("StartRenderPage", function (data) {
+ if (_this13.destroyed) {
+ return;
+ }
+
+ var page = _classPrivateFieldGet(_this13, _pageCache).get(data.pageIndex);
+
+ page._startRenderPage(data.transparency, data.cacheKey);
+ });
+ messageHandler.on("commonobj", function (_ref19) {
+ var _globalThis$FontInspe;
+
+ var _ref20 = _slicedToArray(_ref19, 3),
+ id = _ref20[0],
+ type = _ref20[1],
+ exportedData = _ref20[2];
+
+ if (_this13.destroyed) {
+ return;
+ }
+
+ if (_this13.commonObjs.has(id)) {
+ return;
+ }
+
+ switch (type) {
+ case "Font":
+ var params = _this13._params;
+
+ if ("error" in exportedData) {
+ var exportedError = exportedData.error;
+ (0, _util.warn)("Error during font loading: ".concat(exportedError));
+
+ _this13.commonObjs.resolve(id, exportedError);
+
+ break;
+ }
+
+ var fontRegistry = null;
+
+ if (params.pdfBug && (_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled) {
+ fontRegistry = {
+ registerFont: function registerFont(font, url) {
+ globalThis.FontInspector.fontAdded(font, url);
+ }
+ };
+ }
+
+ var font = new _font_loader.FontFaceObject(exportedData, {
+ isEvalSupported: params.isEvalSupported,
+ disableFontFace: params.disableFontFace,
+ ignoreErrors: params.ignoreErrors,
+ onUnsupportedFeature: _this13._onUnsupportedFeature.bind(_this13),
+ fontRegistry: fontRegistry
+ });
+
+ _this13.fontLoader.bind(font)["catch"](function (reason) {
+ return messageHandler.sendWithPromise("FontFallback", {
+ id: id
+ });
+ })["finally"](function () {
+ if (!params.fontExtraProperties && font.data) {
+ font.data = null;
+ }
+
+ _this13.commonObjs.resolve(id, font);
+ });
+
+ break;
+
+ case "FontPath":
+ case "Image":
+ _this13.commonObjs.resolve(id, exportedData);
+
+ break;
+
+ default:
+ throw new Error("Got unknown common object type ".concat(type));
+ }
+ });
+ messageHandler.on("obj", function (_ref21) {
+ var _imageData$data;
+
+ var _ref22 = _slicedToArray(_ref21, 4),
+ id = _ref22[0],
+ pageIndex = _ref22[1],
+ type = _ref22[2],
+ imageData = _ref22[3];
+
+ if (_this13.destroyed) {
+ return;
+ }
+
+ var pageProxy = _classPrivateFieldGet(_this13, _pageCache).get(pageIndex);
+
+ if (pageProxy.objs.has(id)) {
+ return;
+ }
+
+ switch (type) {
+ case "Image":
+ pageProxy.objs.resolve(id, imageData);
+ var MAX_IMAGE_SIZE_TO_STORE = 8000000;
+
+ if ((imageData === null || imageData === void 0 ? void 0 : (_imageData$data = imageData.data) === null || _imageData$data === void 0 ? void 0 : _imageData$data.length) > MAX_IMAGE_SIZE_TO_STORE) {
+ pageProxy.cleanupAfterRender = true;
+ }
+
+ break;
+
+ case "Pattern":
+ pageProxy.objs.resolve(id, imageData);
+ break;
+
+ default:
+ throw new Error("Got unknown object type ".concat(type));
+ }
+ });
+ messageHandler.on("DocProgress", function (data) {
+ var _loadingTask$onProgre4;
+
+ if (_this13.destroyed) {
+ return;
+ }
+
+ (_loadingTask$onProgre4 = loadingTask.onProgress) === null || _loadingTask$onProgre4 === void 0 ? void 0 : _loadingTask$onProgre4.call(loadingTask, {
+ loaded: data.loaded,
+ total: data.total
+ });
+ });
+ messageHandler.on("DocStats", function (data) {
+ if (_this13.destroyed) {
+ return;
+ }
+
+ _classPrivateFieldSet(_this13, _docStats, Object.freeze({
+ streamTypes: Object.freeze(data.streamTypes),
+ fontTypes: Object.freeze(data.fontTypes)
+ }));
+ });
+ messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
+ messageHandler.on("FetchBuiltInCMap", function (data) {
+ if (_this13.destroyed) {
+ return Promise.reject(new Error("Worker was destroyed."));
+ }
+
+ if (!_this13.CMapReaderFactory) {
+ return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."));
+ }
+
+ return _this13.CMapReaderFactory.fetch(data);
+ });
+ messageHandler.on("FetchStandardFontData", function (data) {
+ if (_this13.destroyed) {
+ return Promise.reject(new Error("Worker was destroyed."));
+ }
+
+ if (!_this13.StandardFontDataFactory) {
+ return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter."));
+ }
+
+ return _this13.StandardFontDataFactory.fetch(data);
+ });
+ }
+ }, {
+ key: "_onUnsupportedFeature",
+ value: function _onUnsupportedFeature(_ref23) {
+ var _this$loadingTask$onU, _this$loadingTask;
+
+ var featureId = _ref23.featureId;
+
+ if (this.destroyed) {
+ return;
+ }
+
+ (_this$loadingTask$onU = (_this$loadingTask = this.loadingTask).onUnsupportedFeature) === null || _this$loadingTask$onU === void 0 ? void 0 : _this$loadingTask$onU.call(_this$loadingTask, featureId);
+ }
+ }, {
+ key: "getData",
+ value: function getData() {
+ return this.messageHandler.sendWithPromise("GetData", null);
+ }
+ }, {
+ key: "getPage",
+ value: function getPage(pageNumber) {
+ var _this14 = this;
+
+ if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
+ return Promise.reject(new Error("Invalid page request."));
+ }
+
+ var pageIndex = pageNumber - 1,
+ cachedPromise = _classPrivateFieldGet(this, _pagePromises).get(pageIndex);
+
+ if (cachedPromise) {
+ return cachedPromise;
+ }
+
+ var promise = this.messageHandler.sendWithPromise("GetPage", {
+ pageIndex: pageIndex
+ }).then(function (pageInfo) {
+ if (_this14.destroyed) {
+ throw new Error("Transport destroyed");
+ }
+
+ var page = new PDFPageProxy(pageIndex, pageInfo, _this14, _this14._params.ownerDocument, _this14._params.pdfBug);
+
+ _classPrivateFieldGet(_this14, _pageCache).set(pageIndex, page);
+
+ return page;
+ });
+
+ _classPrivateFieldGet(this, _pagePromises).set(pageIndex, promise);
+
+ return promise;
+ }
+ }, {
+ key: "getPageIndex",
+ value: function getPageIndex(ref) {
+ if (_typeof(ref) !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) {
+ return Promise.reject(new Error("Invalid pageIndex request."));
+ }
+
+ return this.messageHandler.sendWithPromise("GetPageIndex", {
+ num: ref.num,
+ gen: ref.gen
+ });
+ }
+ }, {
+ key: "getAnnotations",
+ value: function getAnnotations(pageIndex, intent) {
+ return this.messageHandler.sendWithPromise("GetAnnotations", {
+ pageIndex: pageIndex,
+ intent: intent
+ });
+ }
+ }, {
+ key: "saveDocument",
+ value: function saveDocument() {
+ var _this$_fullReader$fil,
+ _this$_fullReader,
+ _this15 = this;
+
+ return this.messageHandler.sendWithPromise("SaveDocument", {
+ isPureXfa: !!this._htmlForXfa,
+ numPages: this._numPages,
+ annotationStorage: this.annotationStorage.serializable,
+ filename: (_this$_fullReader$fil = (_this$_fullReader = this._fullReader) === null || _this$_fullReader === void 0 ? void 0 : _this$_fullReader.filename) !== null && _this$_fullReader$fil !== void 0 ? _this$_fullReader$fil : null
+ })["finally"](function () {
+ _this15.annotationStorage.resetModified();
+ });
+ }
+ }, {
+ key: "getFieldObjects",
+ value: function getFieldObjects() {
+ return this._getFieldObjectsPromise || (this._getFieldObjectsPromise = this.messageHandler.sendWithPromise("GetFieldObjects", null));
+ }
+ }, {
+ key: "hasJSActions",
+ value: function hasJSActions() {
+ return this._hasJSActionsPromise || (this._hasJSActionsPromise = this.messageHandler.sendWithPromise("HasJSActions", null));
+ }
+ }, {
+ key: "getCalculationOrderIds",
+ value: function getCalculationOrderIds() {
+ return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
+ }
+ }, {
+ key: "getDestinations",
+ value: function getDestinations() {
+ return this.messageHandler.sendWithPromise("GetDestinations", null);
+ }
+ }, {
+ key: "getDestination",
+ value: function getDestination(id) {
+ if (typeof id !== "string") {
+ return Promise.reject(new Error("Invalid destination request."));
+ }
+
+ return this.messageHandler.sendWithPromise("GetDestination", {
+ id: id
+ });
+ }
+ }, {
+ key: "getPageLabels",
+ value: function getPageLabels() {
+ return this.messageHandler.sendWithPromise("GetPageLabels", null);
+ }
+ }, {
+ key: "getPageLayout",
+ value: function getPageLayout() {
+ return this.messageHandler.sendWithPromise("GetPageLayout", null);
+ }
+ }, {
+ key: "getPageMode",
+ value: function getPageMode() {
+ return this.messageHandler.sendWithPromise("GetPageMode", null);
+ }
+ }, {
+ key: "getViewerPreferences",
+ value: function getViewerPreferences() {
+ return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
+ }
+ }, {
+ key: "getOpenAction",
+ value: function getOpenAction() {
+ return this.messageHandler.sendWithPromise("GetOpenAction", null);
+ }
+ }, {
+ key: "getAttachments",
+ value: function getAttachments() {
+ return this.messageHandler.sendWithPromise("GetAttachments", null);
+ }
+ }, {
+ key: "getJavaScript",
+ value: function getJavaScript() {
+ return this.messageHandler.sendWithPromise("GetJavaScript", null);
+ }
+ }, {
+ key: "getDocJSActions",
+ value: function getDocJSActions() {
+ return this.messageHandler.sendWithPromise("GetDocJSActions", null);
+ }
+ }, {
+ key: "getPageJSActions",
+ value: function getPageJSActions(pageIndex) {
+ return this.messageHandler.sendWithPromise("GetPageJSActions", {
+ pageIndex: pageIndex
+ });
+ }
+ }, {
+ key: "getStructTree",
+ value: function getStructTree(pageIndex) {
+ return this.messageHandler.sendWithPromise("GetStructTree", {
+ pageIndex: pageIndex
+ });
+ }
+ }, {
+ key: "getOutline",
+ value: function getOutline() {
+ return this.messageHandler.sendWithPromise("GetOutline", null);
+ }
+ }, {
+ key: "getOptionalContentConfig",
+ value: function getOptionalContentConfig() {
+ return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(function (results) {
+ return new _optional_content_config.OptionalContentConfig(results);
+ });
+ }
+ }, {
+ key: "getPermissions",
+ value: function getPermissions() {
+ return this.messageHandler.sendWithPromise("GetPermissions", null);
+ }
+ }, {
+ key: "getMetadata",
+ value: function getMetadata() {
+ var _this16 = this;
+
+ return _classPrivateFieldGet(this, _metadataPromise) || _classPrivateFieldSet(this, _metadataPromise, this.messageHandler.sendWithPromise("GetMetadata", null).then(function (results) {
+ var _this16$_fullReader$f, _this16$_fullReader, _this16$_fullReader$c, _this16$_fullReader2;
+
+ return {
+ info: results[0],
+ metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
+ contentDispositionFilename: (_this16$_fullReader$f = (_this16$_fullReader = _this16._fullReader) === null || _this16$_fullReader === void 0 ? void 0 : _this16$_fullReader.filename) !== null && _this16$_fullReader$f !== void 0 ? _this16$_fullReader$f : null,
+ contentLength: (_this16$_fullReader$c = (_this16$_fullReader2 = _this16._fullReader) === null || _this16$_fullReader2 === void 0 ? void 0 : _this16$_fullReader2.contentLength) !== null && _this16$_fullReader$c !== void 0 ? _this16$_fullReader$c : null
+ };
+ }));
+ }
+ }, {
+ key: "getMarkInfo",
+ value: function getMarkInfo() {
+ return this.messageHandler.sendWithPromise("GetMarkInfo", null);
+ }
+ }, {
+ key: "startCleanup",
+ value: function () {
+ var _startCleanup = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
+ var keepLoadedFonts,
+ _iterator14,
+ _step14,
+ page,
+ cleanupSuccessful,
+ _args5 = arguments;
+
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
+ while (1) {
+ switch (_context5.prev = _context5.next) {
+ case 0:
+ keepLoadedFonts = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : false;
+ _context5.next = 3;
+ return this.messageHandler.sendWithPromise("Cleanup", null);
+
+ case 3:
+ if (!this.destroyed) {
+ _context5.next = 5;
+ break;
+ }
+
+ return _context5.abrupt("return");
+
+ case 5:
+ _iterator14 = _createForOfIteratorHelper(_classPrivateFieldGet(this, _pageCache).values());
+ _context5.prev = 6;
+
+ _iterator14.s();
+
+ case 8:
+ if ((_step14 = _iterator14.n()).done) {
+ _context5.next = 15;
+ break;
+ }
+
+ page = _step14.value;
+ cleanupSuccessful = page.cleanup();
+
+ if (cleanupSuccessful) {
+ _context5.next = 13;
+ break;
+ }
+
+ throw new Error("startCleanup: Page ".concat(page.pageNumber, " is currently rendering."));
+
+ case 13:
+ _context5.next = 8;
+ break;
+
+ case 15:
+ _context5.next = 20;
+ break;
+
+ case 17:
+ _context5.prev = 17;
+ _context5.t0 = _context5["catch"](6);
+
+ _iterator14.e(_context5.t0);
+
+ case 20:
+ _context5.prev = 20;
+
+ _iterator14.f();
+
+ return _context5.finish(20);
+
+ case 23:
+ this.commonObjs.clear();
+
+ if (!keepLoadedFonts) {
+ this.fontLoader.clear();
+ }
+
+ _classPrivateFieldSet(this, _metadataPromise, null);
+
+ this._getFieldObjectsPromise = null;
+ this._hasJSActionsPromise = null;
+
+ case 28:
+ case "end":
+ return _context5.stop();
+ }
+ }
+ }, _callee5, this, [[6, 17, 20, 23]]);
+ }));
+
+ function startCleanup() {
+ return _startCleanup.apply(this, arguments);
+ }
+
+ return startCleanup;
+ }()
+ }, {
+ key: "loadingParams",
+ get: function get() {
+ var params = this._params;
+ return (0, _util.shadow)(this, "loadingParams", {
+ disableAutoFetch: params.disableAutoFetch,
+ enableXfa: params.enableXfa
+ });
+ }
+ }]);
+
+ return WorkerTransport;
+}();
+
+var _objs = /*#__PURE__*/new WeakMap();
+
+var _ensureObj = /*#__PURE__*/new WeakSet();
+
+var PDFObjects = /*#__PURE__*/function () {
+ function PDFObjects() {
+ _classCallCheck(this, PDFObjects);
+
+ _classPrivateMethodInitSpec(this, _ensureObj);
+
+ _classPrivateFieldInitSpec(this, _objs, {
+ writable: true,
+ value: Object.create(null)
+ });
+ }
+
+ _createClass(PDFObjects, [{
+ key: "get",
+ value: function get(objId) {
+ var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+ if (callback) {
+ var _obj = _classPrivateMethodGet(this, _ensureObj, _ensureObj2).call(this, objId);
+
+ _obj.capability.promise.then(function () {
+ return callback(_obj.data);
+ });
+
+ return null;
+ }
+
+ var obj = _classPrivateFieldGet(this, _objs)[objId];
+
+ if (!(obj !== null && obj !== void 0 && obj.capability.settled)) {
+ throw new Error("Requesting object that isn't resolved yet ".concat(objId, "."));
+ }
+
+ return obj.data;
+ }
+ }, {
+ key: "has",
+ value: function has(objId) {
+ var obj = _classPrivateFieldGet(this, _objs)[objId];
+
+ return (obj === null || obj === void 0 ? void 0 : obj.capability.settled) || false;
+ }
+ }, {
+ key: "resolve",
+ value: function resolve(objId) {
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+ var obj = _classPrivateMethodGet(this, _ensureObj, _ensureObj2).call(this, objId);
+
+ obj.data = data;
+ obj.capability.resolve();
+ }
+ }, {
+ key: "clear",
+ value: function clear() {
+ _classPrivateFieldSet(this, _objs, Object.create(null));
+ }
+ }]);
+
+ return PDFObjects;
+}();
+
+function _ensureObj2(objId) {
+ var obj = _classPrivateFieldGet(this, _objs)[objId];
+
+ if (obj) {
+ return obj;
+ }
+
+ return _classPrivateFieldGet(this, _objs)[objId] = {
+ capability: (0, _util.createPromiseCapability)(),
+ data: null
+ };
+}
+
+var RenderTask = /*#__PURE__*/function () {
+ function RenderTask(internalRenderTask) {
+ _classCallCheck(this, RenderTask);
+
+ this._internalRenderTask = internalRenderTask;
+ this.onContinue = null;
+ }
+
+ _createClass(RenderTask, [{
+ key: "promise",
+ get: function get() {
+ return this._internalRenderTask.capability.promise;
+ }
+ }, {
+ key: "cancel",
+ value: function cancel() {
+ this._internalRenderTask.cancel();
+ }
+ }]);
+
+ return RenderTask;
+}();
+
+exports.RenderTask = RenderTask;
+
+var InternalRenderTask = /*#__PURE__*/function () {
+ function InternalRenderTask(_ref24) {
+ var callback = _ref24.callback,
+ params = _ref24.params,
+ objs = _ref24.objs,
+ commonObjs = _ref24.commonObjs,
+ annotationCanvasMap = _ref24.annotationCanvasMap,
+ operatorList = _ref24.operatorList,
+ pageIndex = _ref24.pageIndex,
+ canvasFactory = _ref24.canvasFactory,
+ _ref24$useRequestAnim = _ref24.useRequestAnimationFrame,
+ useRequestAnimationFrame = _ref24$useRequestAnim === void 0 ? false : _ref24$useRequestAnim,
+ _ref24$pdfBug = _ref24.pdfBug,
+ pdfBug = _ref24$pdfBug === void 0 ? false : _ref24$pdfBug;
+
+ _classCallCheck(this, InternalRenderTask);
+
+ this.callback = callback;
+ this.params = params;
+ this.objs = objs;
+ this.commonObjs = commonObjs;
+ this.annotationCanvasMap = annotationCanvasMap;
+ this.operatorListIdx = null;
+ this.operatorList = operatorList;
+ this._pageIndex = pageIndex;
+ this.canvasFactory = canvasFactory;
+ this._pdfBug = pdfBug;
+ this.running = false;
+ this.graphicsReadyCallback = null;
+ this.graphicsReady = false;
+ this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
+ this.cancelled = false;
+ this.capability = (0, _util.createPromiseCapability)();
+ this.task = new RenderTask(this);
+ this._cancelBound = this.cancel.bind(this);
+ this._continueBound = this._continue.bind(this);
+ this._scheduleNextBound = this._scheduleNext.bind(this);
+ this._nextBound = this._next.bind(this);
+ this._canvas = params.canvasContext.canvas;
+ }
+
+ _createClass(InternalRenderTask, [{
+ key: "completed",
+ get: function get() {
+ return this.capability.promise["catch"](function () {});
+ }
+ }, {
+ key: "initializeGraphics",
+ value: function initializeGraphics(_ref25) {
+ var _globalThis$StepperMa;
+
+ var _ref25$transparency = _ref25.transparency,
+ transparency = _ref25$transparency === void 0 ? false : _ref25$transparency,
+ optionalContentConfig = _ref25.optionalContentConfig;
+
+ if (this.cancelled) {
+ return;
+ }
+
+ if (this._canvas) {
+ if (InternalRenderTask.canvasInUse.has(this._canvas)) {
+ throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
+ }
+
+ InternalRenderTask.canvasInUse.add(this._canvas);
+ }
+
+ if (this._pdfBug && (_globalThis$StepperMa = globalThis.StepperManager) !== null && _globalThis$StepperMa !== void 0 && _globalThis$StepperMa.enabled) {
+ this.stepper = globalThis.StepperManager.create(this._pageIndex);
+ this.stepper.init(this.operatorList);
+ this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
+ }
+
+ var _this$params = this.params,
+ canvasContext = _this$params.canvasContext,
+ viewport = _this$params.viewport,
+ transform = _this$params.transform,
+ imageLayer = _this$params.imageLayer,
+ background = _this$params.background;
+ this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig, this.annotationCanvasMap);
+ this.gfx.beginDrawing({
+ transform: transform,
+ viewport: viewport,
+ transparency: transparency,
+ background: background
+ });
+ this.operatorListIdx = 0;
+ this.graphicsReady = true;
+
+ if (this.graphicsReadyCallback) {
+ this.graphicsReadyCallback();
+ }
+ }
+ }, {
+ key: "cancel",
+ value: function cancel() {
+ var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ this.running = false;
+ this.cancelled = true;
+
+ if (this.gfx) {
+ this.gfx.endDrawing();
+ }
+
+ if (this._canvas) {
+ InternalRenderTask.canvasInUse["delete"](this._canvas);
+ }
+
+ this.callback(error || new _display_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this._pageIndex + 1), "canvas"));
+ }
+ }, {
+ key: "operatorListChanged",
+ value: function operatorListChanged() {
+ if (!this.graphicsReady) {
+ if (!this.graphicsReadyCallback) {
+ this.graphicsReadyCallback = this._continueBound;
+ }
+
+ return;
+ }
+
+ if (this.stepper) {
+ this.stepper.updateOperatorList(this.operatorList);
+ }
+
+ if (this.running) {
+ return;
+ }
+
+ this._continue();
+ }
+ }, {
+ key: "_continue",
+ value: function _continue() {
+ this.running = true;
+
+ if (this.cancelled) {
+ return;
+ }
+
+ if (this.task.onContinue) {
+ this.task.onContinue(this._scheduleNextBound);
+ } else {
+ this._scheduleNext();
+ }
+ }
+ }, {
+ key: "_scheduleNext",
+ value: function _scheduleNext() {
+ var _this17 = this;
+
+ if (this._useRequestAnimationFrame) {
+ window.requestAnimationFrame(function () {
+ _this17._nextBound()["catch"](_this17._cancelBound);
+ });
+ } else {
+ Promise.resolve().then(this._nextBound)["catch"](this._cancelBound);
+ }
+ }
+ }, {
+ key: "_next",
+ value: function () {
+ var _next2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
+ while (1) {
+ switch (_context6.prev = _context6.next) {
+ case 0:
+ if (!this.cancelled) {
+ _context6.next = 2;
+ break;
+ }
+
+ return _context6.abrupt("return");
+
+ case 2:
+ this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
+
+ if (this.operatorListIdx === this.operatorList.argsArray.length) {
+ this.running = false;
+
+ if (this.operatorList.lastChunk) {
+ this.gfx.endDrawing();
+
+ if (this._canvas) {
+ InternalRenderTask.canvasInUse["delete"](this._canvas);
+ }
+
+ this.callback();
+ }
+ }
+
+ case 4:
+ case "end":
+ return _context6.stop();
+ }
+ }
+ }, _callee6, this);
+ }));
+
+ function _next() {
+ return _next2.apply(this, arguments);
+ }
+
+ return _next;
+ }()
+ }], [{
+ key: "canvasInUse",
+ get: function get() {
+ return (0, _util.shadow)(this, "canvasInUse", new WeakSet());
+ }
+ }]);
+
+ return InternalRenderTask;
+}();
+
+var version = '2.14.44';
+exports.version = version;
+var build = '90c5e9882';
+exports.build = build;
+
+/***/ }),
+/* 144 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+module.exports = __w_pdfjs_require__(145);
+
+/***/ }),
+/* 145 */
+/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+"use strict";
+/* module decorator */ module = __w_pdfjs_require__.nmd(module);
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+var runtime = function (exports) {
+ "use strict";
+
+ var Op = Object.prototype;
+ var hasOwn = Op.hasOwnProperty;
+ var undefined;
+ var $Symbol = typeof Symbol === "function" ? Symbol : {};
+ var iteratorSymbol = $Symbol.iterator || "@@iterator";
+ var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
+ var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
+
+ function define(obj, key, value) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ return obj[key];
+ }
+
+ try {
+ define({}, "");
+ } catch (err) {
+ define = function define(obj, key, value) {
+ return obj[key] = value;
+ };
+ }
+
+ function wrap(innerFn, outerFn, self, tryLocsList) {
+ var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
+ var generator = Object.create(protoGenerator.prototype);
+ var context = new Context(tryLocsList || []);
+ generator._invoke = makeInvokeMethod(innerFn, self, context);
+ return generator;
+ }
+
+ exports.wrap = wrap;
+
+ function tryCatch(fn, obj, arg) {
+ try {
+ return {
+ type: "normal",
+ arg: fn.call(obj, arg)
+ };
+ } catch (err) {
+ return {
+ type: "throw",
+ arg: err
+ };
+ }
+ }
+
+ var GenStateSuspendedStart = "suspendedStart";
+ var GenStateSuspendedYield = "suspendedYield";
+ var GenStateExecuting = "executing";
+ var GenStateCompleted = "completed";
+ var ContinueSentinel = {};
+
+ function Generator() {}
+
+ function GeneratorFunction() {}
+
+ function GeneratorFunctionPrototype() {}
+
+ var IteratorPrototype = {};
+ define(IteratorPrototype, iteratorSymbol, function () {
+ return this;
+ });
+ var getProto = Object.getPrototypeOf;
+ var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
+
+ if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
+ IteratorPrototype = NativeIteratorPrototype;
+ }
+
+ var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
+ GeneratorFunction.prototype = GeneratorFunctionPrototype;
+ define(Gp, "constructor", GeneratorFunctionPrototype);
+ define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
+ GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction");
+
+ function defineIteratorMethods(prototype) {
+ ["next", "throw", "return"].forEach(function (method) {
+ define(prototype, method, function (arg) {
+ return this._invoke(method, arg);
+ });
+ });
+ }
+
+ exports.isGeneratorFunction = function (genFun) {
+ var ctor = typeof genFun === "function" && genFun.constructor;
+ return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false;
+ };
+
+ exports.mark = function (genFun) {
+ if (Object.setPrototypeOf) {
+ Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+ } else {
+ genFun.__proto__ = GeneratorFunctionPrototype;
+ define(genFun, toStringTagSymbol, "GeneratorFunction");
+ }
+
+ genFun.prototype = Object.create(Gp);
+ return genFun;
+ };
+
+ exports.awrap = function (arg) {
+ return {
+ __await: arg
+ };
+ };
+
+ function AsyncIterator(generator, PromiseImpl) {
+ function invoke(method, arg, resolve, reject) {
+ var record = tryCatch(generator[method], generator, arg);
+
+ if (record.type === "throw") {
+ reject(record.arg);
+ } else {
+ var result = record.arg;
+ var value = result.value;
+
+ if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) {
+ return PromiseImpl.resolve(value.__await).then(function (value) {
+ invoke("next", value, resolve, reject);
+ }, function (err) {
+ invoke("throw", err, resolve, reject);
+ });
+ }
+
+ return PromiseImpl.resolve(value).then(function (unwrapped) {
+ result.value = unwrapped;
+ resolve(result);
+ }, function (error) {
+ return invoke("throw", error, resolve, reject);
+ });
+ }
+ }
+
+ var previousPromise;
+
+ function enqueue(method, arg) {
+ function callInvokeWithMethodAndArg() {
+ return new PromiseImpl(function (resolve, reject) {
+ invoke(method, arg, resolve, reject);
+ });
+ }
+
+ return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
+ }
+
+ this._invoke = enqueue;
+ }
+
+ defineIteratorMethods(AsyncIterator.prototype);
+ define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
+ return this;
+ });
+ exports.AsyncIterator = AsyncIterator;
+
+ exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
+ if (PromiseImpl === void 0) PromiseImpl = Promise;
+ var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
+ return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
+ return result.done ? result.value : iter.next();
+ });
+ };
+
+ function makeInvokeMethod(innerFn, self, context) {
+ var state = GenStateSuspendedStart;
+ return function invoke(method, arg) {
+ if (state === GenStateExecuting) {
+ throw new Error("Generator is already running");
+ }
+
+ if (state === GenStateCompleted) {
+ if (method === "throw") {
+ throw arg;
+ }
+
+ return doneResult();
+ }
+
+ context.method = method;
+ context.arg = arg;
+
+ while (true) {
+ var delegate = context.delegate;
+
+ if (delegate) {
+ var delegateResult = maybeInvokeDelegate(delegate, context);
+
+ if (delegateResult) {
+ if (delegateResult === ContinueSentinel) continue;
+ return delegateResult;
+ }
+ }
+
+ if (context.method === "next") {
+ context.sent = context._sent = context.arg;
+ } else if (context.method === "throw") {
+ if (state === GenStateSuspendedStart) {
+ state = GenStateCompleted;
+ throw context.arg;
+ }
+
+ context.dispatchException(context.arg);
+ } else if (context.method === "return") {
+ context.abrupt("return", context.arg);
+ }
+
+ state = GenStateExecuting;
+ var record = tryCatch(innerFn, self, context);
+
+ if (record.type === "normal") {
+ state = context.done ? GenStateCompleted : GenStateSuspendedYield;
+
+ if (record.arg === ContinueSentinel) {
+ continue;
+ }
+
+ return {
+ value: record.arg,
+ done: context.done
+ };
+ } else if (record.type === "throw") {
+ state = GenStateCompleted;
+ context.method = "throw";
+ context.arg = record.arg;
+ }
+ }
+ };
+ }
+
+ function maybeInvokeDelegate(delegate, context) {
+ var method = delegate.iterator[context.method];
+
+ if (method === undefined) {
+ context.delegate = null;
+
+ if (context.method === "throw") {
+ if (delegate.iterator["return"]) {
+ context.method = "return";
+ context.arg = undefined;
+ maybeInvokeDelegate(delegate, context);
+
+ if (context.method === "throw") {
+ return ContinueSentinel;
+ }
+ }
+
+ context.method = "throw";
+ context.arg = new TypeError("The iterator does not provide a 'throw' method");
+ }
+
+ return ContinueSentinel;
+ }
+
+ var record = tryCatch(method, delegate.iterator, context.arg);
+
+ if (record.type === "throw") {
+ context.method = "throw";
+ context.arg = record.arg;
+ context.delegate = null;
+ return ContinueSentinel;
+ }
+
+ var info = record.arg;
+
+ if (!info) {
+ context.method = "throw";
+ context.arg = new TypeError("iterator result is not an object");
+ context.delegate = null;
+ return ContinueSentinel;
+ }
+
+ if (info.done) {
+ context[delegate.resultName] = info.value;
+ context.next = delegate.nextLoc;
+
+ if (context.method !== "return") {
+ context.method = "next";
+ context.arg = undefined;
+ }
+ } else {
+ return info;
+ }
+
+ context.delegate = null;
+ return ContinueSentinel;
+ }
+
+ defineIteratorMethods(Gp);
+ define(Gp, toStringTagSymbol, "Generator");
+ define(Gp, iteratorSymbol, function () {
+ return this;
+ });
+ define(Gp, "toString", function () {
+ return "[object Generator]";
+ });
+
+ function pushTryEntry(locs) {
+ var entry = {
+ tryLoc: locs[0]
+ };
+
+ if (1 in locs) {
+ entry.catchLoc = locs[1];
+ }
+
+ if (2 in locs) {
+ entry.finallyLoc = locs[2];
+ entry.afterLoc = locs[3];
+ }
+
+ this.tryEntries.push(entry);
+ }
+
+ function resetTryEntry(entry) {
+ var record = entry.completion || {};
+ record.type = "normal";
+ delete record.arg;
+ entry.completion = record;
+ }
+
+ function Context(tryLocsList) {
+ this.tryEntries = [{
+ tryLoc: "root"
+ }];
+ tryLocsList.forEach(pushTryEntry, this);
+ this.reset(true);
+ }
+
+ exports.keys = function (object) {
+ var keys = [];
+
+ for (var key in object) {
+ keys.push(key);
+ }
+
+ keys.reverse();
+ return function next() {
+ while (keys.length) {
+ var key = keys.pop();
+
+ if (key in object) {
+ next.value = key;
+ next.done = false;
+ return next;
+ }
+ }
+
+ next.done = true;
+ return next;
+ };
+ };
+
+ function values(iterable) {
+ if (iterable) {
+ var iteratorMethod = iterable[iteratorSymbol];
+
+ if (iteratorMethod) {
+ return iteratorMethod.call(iterable);
+ }
+
+ if (typeof iterable.next === "function") {
+ return iterable;
+ }
+
+ if (!isNaN(iterable.length)) {
+ var i = -1,
+ next = function next() {
+ while (++i < iterable.length) {
+ if (hasOwn.call(iterable, i)) {
+ next.value = iterable[i];
+ next.done = false;
+ return next;
+ }
+ }
+
+ next.value = undefined;
+ next.done = true;
+ return next;
+ };
+
+ return next.next = next;
+ }
+ }
+
+ return {
+ next: doneResult
+ };
+ }
+
+ exports.values = values;
+
+ function doneResult() {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ Context.prototype = {
+ constructor: Context,
+ reset: function reset(skipTempReset) {
+ this.prev = 0;
+ this.next = 0;
+ this.sent = this._sent = undefined;
+ this.done = false;
+ this.delegate = null;
+ this.method = "next";
+ this.arg = undefined;
+ this.tryEntries.forEach(resetTryEntry);
+
+ if (!skipTempReset) {
+ for (var name in this) {
+ if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {
+ this[name] = undefined;
+ }
+ }
+ }
+ },
+ stop: function stop() {
+ this.done = true;
+ var rootEntry = this.tryEntries[0];
+ var rootRecord = rootEntry.completion;
+
+ if (rootRecord.type === "throw") {
+ throw rootRecord.arg;
+ }
+
+ return this.rval;
+ },
+ dispatchException: function dispatchException(exception) {
+ if (this.done) {
+ throw exception;
+ }
+
+ var context = this;
+
+ function handle(loc, caught) {
+ record.type = "throw";
+ record.arg = exception;
+ context.next = loc;
+
+ if (caught) {
+ context.method = "next";
+ context.arg = undefined;
+ }
+
+ return !!caught;
+ }
+
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ var record = entry.completion;
+
+ if (entry.tryLoc === "root") {
+ return handle("end");
+ }
+
+ if (entry.tryLoc <= this.prev) {
+ var hasCatch = hasOwn.call(entry, "catchLoc");
+ var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+ if (hasCatch && hasFinally) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ } else if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+ } else if (hasCatch) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ }
+ } else if (hasFinally) {
+ if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+ } else {
+ throw new Error("try statement without catch or finally");
+ }
+ }
+ }
+ },
+ abrupt: function abrupt(type, arg) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+
+ if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
+ var finallyEntry = entry;
+ break;
+ }
+ }
+
+ if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {
+ finallyEntry = null;
+ }
+
+ var record = finallyEntry ? finallyEntry.completion : {};
+ record.type = type;
+ record.arg = arg;
+
+ if (finallyEntry) {
+ this.method = "next";
+ this.next = finallyEntry.finallyLoc;
+ return ContinueSentinel;
+ }
+
+ return this.complete(record);
+ },
+ complete: function complete(record, afterLoc) {
+ if (record.type === "throw") {
+ throw record.arg;
+ }
+
+ if (record.type === "break" || record.type === "continue") {
+ this.next = record.arg;
+ } else if (record.type === "return") {
+ this.rval = this.arg = record.arg;
+ this.method = "return";
+ this.next = "end";
+ } else if (record.type === "normal" && afterLoc) {
+ this.next = afterLoc;
+ }
+
+ return ContinueSentinel;
+ },
+ finish: function finish(finallyLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+
+ if (entry.finallyLoc === finallyLoc) {
+ this.complete(entry.completion, entry.afterLoc);
+ resetTryEntry(entry);
+ return ContinueSentinel;
+ }
+ }
+ },
+ "catch": function _catch(tryLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+
+ if (entry.tryLoc === tryLoc) {
+ var record = entry.completion;
+
+ if (record.type === "throw") {
+ var thrown = record.arg;
+ resetTryEntry(entry);
+ }
+
+ return thrown;
+ }
+ }
+
+ throw new Error("illegal catch attempt");
+ },
+ delegateYield: function delegateYield(iterable, resultName, nextLoc) {
+ this.delegate = {
+ iterator: values(iterable),
+ resultName: resultName,
+ nextLoc: nextLoc
+ };
+
+ if (this.method === "next") {
+ this.arg = undefined;
+ }
+
+ return ContinueSentinel;
+ }
+ };
+ return exports;
+}(( false ? 0 : _typeof(module)) === "object" ? module.exports : {});
+
+try {
+ regeneratorRuntime = runtime;
+} catch (accidentalStrictMode) {
+ if ((typeof globalThis === "undefined" ? "undefined" : _typeof(globalThis)) === "object") {
+ globalThis.regeneratorRuntime = runtime;
+ } else {
+ Function("r", "regeneratorRuntime = r")(runtime);
+ }
+}
+
+/***/ }),
+/* 146 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0;
+exports.deprecated = deprecated;
+exports.getFilenameFromUrl = getFilenameFromUrl;
+exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl;
+exports.getXfaPageViewport = getXfaPageViewport;
+exports.isDataScheme = isDataScheme;
+exports.isPdfFile = isPdfFile;
+exports.isValidFetchUrl = isValidFetchUrl;
+exports.loadScript = loadScript;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _base_factory = __w_pdfjs_require__(147);
+
+var _util = __w_pdfjs_require__(1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+var SVG_NS = "http://www.w3.org/2000/svg";
+
+var PixelsPerInch = /*#__PURE__*/_createClass(function PixelsPerInch() {
+ _classCallCheck(this, PixelsPerInch);
+});
+
+exports.PixelsPerInch = PixelsPerInch;
+
+_defineProperty(PixelsPerInch, "CSS", 96.0);
+
+_defineProperty(PixelsPerInch, "PDF", 72.0);
+
+_defineProperty(PixelsPerInch, "PDF_TO_CSS_UNITS", PixelsPerInch.CSS / PixelsPerInch.PDF);
+
+var DOMCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) {
+ _inherits(DOMCanvasFactory, _BaseCanvasFactory);
+
+ var _super = _createSuper(DOMCanvasFactory);
+
+ function DOMCanvasFactory() {
+ var _this;
+
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+ _ref$ownerDocument = _ref.ownerDocument,
+ ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument;
+
+ _classCallCheck(this, DOMCanvasFactory);
+
+ _this = _super.call(this);
+ _this._document = ownerDocument;
+ return _this;
+ }
+
+ _createClass(DOMCanvasFactory, [{
+ key: "_createCanvas",
+ value: function _createCanvas(width, height) {
+ var canvas = this._document.createElement("canvas");
+
+ canvas.width = width;
+ canvas.height = height;
+ return canvas;
+ }
+ }]);
+
+ return DOMCanvasFactory;
+}(_base_factory.BaseCanvasFactory);
+
+exports.DOMCanvasFactory = DOMCanvasFactory;
+
+function fetchData(_x) {
+ return _fetchData.apply(this, arguments);
+}
+
+function _fetchData() {
+ _fetchData = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(url) {
+ var asTypedArray,
+ response,
+ _args = arguments;
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ asTypedArray = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;
+
+ if (!isValidFetchUrl(url, document.baseURI)) {
+ _context.next = 21;
+ break;
+ }
+
+ _context.next = 4;
+ return fetch(url);
+
+ case 4:
+ response = _context.sent;
+
+ if (response.ok) {
+ _context.next = 7;
+ break;
+ }
+
+ throw new Error(response.statusText);
+
+ case 7:
+ if (!asTypedArray) {
+ _context.next = 15;
+ break;
+ }
+
+ _context.t1 = Uint8Array;
+ _context.next = 11;
+ return response.arrayBuffer();
+
+ case 11:
+ _context.t2 = _context.sent;
+ _context.t0 = new _context.t1(_context.t2);
+ _context.next = 20;
+ break;
+
+ case 15:
+ _context.t3 = _util.stringToBytes;
+ _context.next = 18;
+ return response.text();
+
+ case 18:
+ _context.t4 = _context.sent;
+ _context.t0 = (0, _context.t3)(_context.t4);
+
+ case 20:
+ return _context.abrupt("return", _context.t0);
+
+ case 21:
+ return _context.abrupt("return", new Promise(function (resolve, reject) {
+ var request = new XMLHttpRequest();
+ request.open("GET", url, true);
+
+ if (asTypedArray) {
+ request.responseType = "arraybuffer";
+ }
+
+ request.onreadystatechange = function () {
+ if (request.readyState !== XMLHttpRequest.DONE) {
+ return;
+ }
+
+ if (request.status === 200 || request.status === 0) {
+ var data;
+
+ if (asTypedArray && request.response) {
+ data = new Uint8Array(request.response);
+ } else if (!asTypedArray && request.responseText) {
+ data = (0, _util.stringToBytes)(request.responseText);
+ }
+
+ if (data) {
+ resolve(data);
+ return;
+ }
+ }
+
+ reject(new Error(request.statusText));
+ };
+
+ request.send(null);
+ }));
+
+ case 22:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee);
+ }));
+ return _fetchData.apply(this, arguments);
+}
+
+var DOMCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) {
+ _inherits(DOMCMapReaderFactory, _BaseCMapReaderFactor);
+
+ var _super2 = _createSuper(DOMCMapReaderFactory);
+
+ function DOMCMapReaderFactory() {
+ _classCallCheck(this, DOMCMapReaderFactory);
+
+ return _super2.apply(this, arguments);
+ }
+
+ _createClass(DOMCMapReaderFactory, [{
+ key: "_fetchData",
+ value: function _fetchData(url, compressionType) {
+ return fetchData(url, this.isCompressed).then(function (data) {
+ return {
+ cMapData: data,
+ compressionType: compressionType
+ };
+ });
+ }
+ }]);
+
+ return DOMCMapReaderFactory;
+}(_base_factory.BaseCMapReaderFactory);
+
+exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
+
+var DOMStandardFontDataFactory = /*#__PURE__*/function (_BaseStandardFontData) {
+ _inherits(DOMStandardFontDataFactory, _BaseStandardFontData);
+
+ var _super3 = _createSuper(DOMStandardFontDataFactory);
+
+ function DOMStandardFontDataFactory() {
+ _classCallCheck(this, DOMStandardFontDataFactory);
+
+ return _super3.apply(this, arguments);
+ }
+
+ _createClass(DOMStandardFontDataFactory, [{
+ key: "_fetchData",
+ value: function _fetchData(url) {
+ return fetchData(url, true);
+ }
+ }]);
+
+ return DOMStandardFontDataFactory;
+}(_base_factory.BaseStandardFontDataFactory);
+
+exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory;
+
+var DOMSVGFactory = /*#__PURE__*/function (_BaseSVGFactory) {
+ _inherits(DOMSVGFactory, _BaseSVGFactory);
+
+ var _super4 = _createSuper(DOMSVGFactory);
+
+ function DOMSVGFactory() {
+ _classCallCheck(this, DOMSVGFactory);
+
+ return _super4.apply(this, arguments);
+ }
+
+ _createClass(DOMSVGFactory, [{
+ key: "_createSVG",
+ value: function _createSVG(type) {
+ return document.createElementNS(SVG_NS, type);
+ }
+ }]);
+
+ return DOMSVGFactory;
+}(_base_factory.BaseSVGFactory);
+
+exports.DOMSVGFactory = DOMSVGFactory;
+
+var PageViewport = /*#__PURE__*/function () {
+ function PageViewport(_ref2) {
+ var viewBox = _ref2.viewBox,
+ scale = _ref2.scale,
+ rotation = _ref2.rotation,
+ _ref2$offsetX = _ref2.offsetX,
+ offsetX = _ref2$offsetX === void 0 ? 0 : _ref2$offsetX,
+ _ref2$offsetY = _ref2.offsetY,
+ offsetY = _ref2$offsetY === void 0 ? 0 : _ref2$offsetY,
+ _ref2$dontFlip = _ref2.dontFlip,
+ dontFlip = _ref2$dontFlip === void 0 ? false : _ref2$dontFlip;
+
+ _classCallCheck(this, PageViewport);
+
+ this.viewBox = viewBox;
+ this.scale = scale;
+ this.rotation = rotation;
+ this.offsetX = offsetX;
+ this.offsetY = offsetY;
+ var centerX = (viewBox[2] + viewBox[0]) / 2;
+ var centerY = (viewBox[3] + viewBox[1]) / 2;
+ var rotateA, rotateB, rotateC, rotateD;
+ rotation %= 360;
+
+ if (rotation < 0) {
+ rotation += 360;
+ }
+
+ switch (rotation) {
+ case 180:
+ rotateA = -1;
+ rotateB = 0;
+ rotateC = 0;
+ rotateD = 1;
+ break;
+
+ case 90:
+ rotateA = 0;
+ rotateB = 1;
+ rotateC = 1;
+ rotateD = 0;
+ break;
+
+ case 270:
+ rotateA = 0;
+ rotateB = -1;
+ rotateC = -1;
+ rotateD = 0;
+ break;
+
+ case 0:
+ rotateA = 1;
+ rotateB = 0;
+ rotateC = 0;
+ rotateD = -1;
+ break;
+
+ default:
+ throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
+ }
+
+ if (dontFlip) {
+ rotateC = -rotateC;
+ rotateD = -rotateD;
+ }
+
+ var offsetCanvasX, offsetCanvasY;
+ var width, height;
+
+ if (rotateA === 0) {
+ offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+ width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ } else {
+ offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+ width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ }
+
+ this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
+ this.width = width;
+ this.height = height;
+ }
+
+ _createClass(PageViewport, [{
+ key: "clone",
+ value: function clone() {
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
+ _ref3$scale = _ref3.scale,
+ scale = _ref3$scale === void 0 ? this.scale : _ref3$scale,
+ _ref3$rotation = _ref3.rotation,
+ rotation = _ref3$rotation === void 0 ? this.rotation : _ref3$rotation,
+ _ref3$offsetX = _ref3.offsetX,
+ offsetX = _ref3$offsetX === void 0 ? this.offsetX : _ref3$offsetX,
+ _ref3$offsetY = _ref3.offsetY,
+ offsetY = _ref3$offsetY === void 0 ? this.offsetY : _ref3$offsetY,
+ _ref3$dontFlip = _ref3.dontFlip,
+ dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip;
+
+ return new PageViewport({
+ viewBox: this.viewBox.slice(),
+ scale: scale,
+ rotation: rotation,
+ offsetX: offsetX,
+ offsetY: offsetY,
+ dontFlip: dontFlip
+ });
+ }
+ }, {
+ key: "convertToViewportPoint",
+ value: function convertToViewportPoint(x, y) {
+ return _util.Util.applyTransform([x, y], this.transform);
+ }
+ }, {
+ key: "convertToViewportRectangle",
+ value: function convertToViewportRectangle(rect) {
+ var topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
+
+ var bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
+
+ return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
+ }
+ }, {
+ key: "convertToPdfPoint",
+ value: function convertToPdfPoint(x, y) {
+ return _util.Util.applyInverseTransform([x, y], this.transform);
+ }
+ }]);
+
+ return PageViewport;
+}();
+
+exports.PageViewport = PageViewport;
+
+var RenderingCancelledException = /*#__PURE__*/function (_BaseException) {
+ _inherits(RenderingCancelledException, _BaseException);
+
+ var _super5 = _createSuper(RenderingCancelledException);
+
+ function RenderingCancelledException(msg, type) {
+ var _this2;
+
+ _classCallCheck(this, RenderingCancelledException);
+
+ _this2 = _super5.call(this, msg, "RenderingCancelledException");
+ _this2.type = type;
+ return _this2;
+ }
+
+ return _createClass(RenderingCancelledException);
+}(_util.BaseException);
+
+exports.RenderingCancelledException = RenderingCancelledException;
+
+function isDataScheme(url) {
+ var ii = url.length;
+ var i = 0;
+
+ while (i < ii && url[i].trim() === "") {
+ i++;
+ }
+
+ return url.substring(i, i + 5).toLowerCase() === "data:";
+}
+
+function isPdfFile(filename) {
+ return typeof filename === "string" && /\.pdf$/i.test(filename);
+}
+
+function getFilenameFromUrl(url) {
+ var anchor = url.indexOf("#");
+ var query = url.indexOf("?");
+ var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
+ return url.substring(url.lastIndexOf("/", end) + 1, end);
+}
+
+function getPdfFilenameFromUrl(url) {
+ var defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "document.pdf";
+
+ if (typeof url !== "string") {
+ return defaultFilename;
+ }
+
+ if (isDataScheme(url)) {
+ (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.');
+ return defaultFilename;
+ }
+
+ var reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
+ var reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
+ var splitURI = reURI.exec(url);
+ var suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);
+
+ if (suggestedFilename) {
+ suggestedFilename = suggestedFilename[0];
+
+ if (suggestedFilename.includes("%")) {
+ try {
+ suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
+ } catch (ex) {}
+ }
+ }
+
+ return suggestedFilename || defaultFilename;
+}
+
+var StatTimer = /*#__PURE__*/function () {
+ function StatTimer() {
+ _classCallCheck(this, StatTimer);
+
+ this.started = Object.create(null);
+ this.times = [];
+ }
+
+ _createClass(StatTimer, [{
+ key: "time",
+ value: function time(name) {
+ if (name in this.started) {
+ (0, _util.warn)("Timer is already running for ".concat(name));
+ }
+
+ this.started[name] = Date.now();
+ }
+ }, {
+ key: "timeEnd",
+ value: function timeEnd(name) {
+ if (!(name in this.started)) {
+ (0, _util.warn)("Timer has not been started for ".concat(name));
+ }
+
+ this.times.push({
+ name: name,
+ start: this.started[name],
+ end: Date.now()
+ });
+ delete this.started[name];
+ }
+ }, {
+ key: "toString",
+ value: function toString() {
+ var outBuf = [];
+ var longest = 0;
+
+ var _iterator = _createForOfIteratorHelper(this.times),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var time = _step.value;
+ var name = time.name;
+
+ if (name.length > longest) {
+ longest = name.length;
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ var _iterator2 = _createForOfIteratorHelper(this.times),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var _time = _step2.value;
+ var duration = _time.end - _time.start;
+ outBuf.push("".concat(_time.name.padEnd(longest), " ").concat(duration, "ms\n"));
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ return outBuf.join("");
+ }
+ }]);
+
+ return StatTimer;
+}();
+
+exports.StatTimer = StatTimer;
+
+function isValidFetchUrl(url, baseUrl) {
+ try {
+ var _ref4 = baseUrl ? new URL(url, baseUrl) : new URL(url),
+ protocol = _ref4.protocol;
+
+ return protocol === "http:" || protocol === "https:";
+ } catch (ex) {
+ return false;
+ }
+}
+
+function loadScript(src) {
+ var removeScriptElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+ return new Promise(function (resolve, reject) {
+ var script = document.createElement("script");
+ script.src = src;
+
+ script.onload = function (evt) {
+ if (removeScriptElement) {
+ script.remove();
+ }
+
+ resolve(evt);
+ };
+
+ script.onerror = function () {
+ reject(new Error("Cannot load script at: ".concat(script.src)));
+ };
+
+ (document.head || document.documentElement).appendChild(script);
+ });
+}
+
+function deprecated(details) {
+ console.log("Deprecated API usage: " + details);
+}
+
+var pdfDateStringRegex;
+
+var PDFDateString = /*#__PURE__*/function () {
+ function PDFDateString() {
+ _classCallCheck(this, PDFDateString);
+ }
+
+ _createClass(PDFDateString, null, [{
+ key: "toDateObject",
+ value: function toDateObject(input) {
+ if (!input || typeof input !== "string") {
+ return null;
+ }
+
+ if (!pdfDateStringRegex) {
+ pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?");
+ }
+
+ var matches = pdfDateStringRegex.exec(input);
+
+ if (!matches) {
+ return null;
+ }
+
+ var year = parseInt(matches[1], 10);
+ var month = parseInt(matches[2], 10);
+ month = month >= 1 && month <= 12 ? month - 1 : 0;
+ var day = parseInt(matches[3], 10);
+ day = day >= 1 && day <= 31 ? day : 1;
+ var hour = parseInt(matches[4], 10);
+ hour = hour >= 0 && hour <= 23 ? hour : 0;
+ var minute = parseInt(matches[5], 10);
+ minute = minute >= 0 && minute <= 59 ? minute : 0;
+ var second = parseInt(matches[6], 10);
+ second = second >= 0 && second <= 59 ? second : 0;
+ var universalTimeRelation = matches[7] || "Z";
+ var offsetHour = parseInt(matches[8], 10);
+ offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
+ var offsetMinute = parseInt(matches[9], 10) || 0;
+ offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
+
+ if (universalTimeRelation === "-") {
+ hour += offsetHour;
+ minute += offsetMinute;
+ } else if (universalTimeRelation === "+") {
+ hour -= offsetHour;
+ minute -= offsetMinute;
+ }
+
+ return new Date(Date.UTC(year, month, day, hour, minute, second));
+ }
+ }]);
+
+ return PDFDateString;
+}();
+
+exports.PDFDateString = PDFDateString;
+
+function getXfaPageViewport(xfaPage, _ref5) {
+ var _ref5$scale = _ref5.scale,
+ scale = _ref5$scale === void 0 ? 1 : _ref5$scale,
+ _ref5$rotation = _ref5.rotation,
+ rotation = _ref5$rotation === void 0 ? 0 : _ref5$rotation;
+ var _xfaPage$attributes$s = xfaPage.attributes.style,
+ width = _xfaPage$attributes$s.width,
+ height = _xfaPage$attributes$s.height;
+ var viewBox = [0, 0, parseInt(width), parseInt(height)];
+ return new PageViewport({
+ viewBox: viewBox,
+ scale: scale,
+ rotation: rotation
+ });
+}
+
+/***/ }),
+/* 147 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var BaseCanvasFactory = /*#__PURE__*/function () {
+ function BaseCanvasFactory() {
+ _classCallCheck(this, BaseCanvasFactory);
+
+ if (this.constructor === BaseCanvasFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseCanvasFactory.");
+ }
+ }
+
+ _createClass(BaseCanvasFactory, [{
+ key: "create",
+ value: function create(width, height) {
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid canvas size");
+ }
+
+ var canvas = this._createCanvas(width, height);
+
+ return {
+ canvas: canvas,
+ context: canvas.getContext("2d")
+ };
+ }
+ }, {
+ key: "reset",
+ value: function reset(canvasAndContext, width, height) {
+ if (!canvasAndContext.canvas) {
+ throw new Error("Canvas is not specified");
+ }
+
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid canvas size");
+ }
+
+ canvasAndContext.canvas.width = width;
+ canvasAndContext.canvas.height = height;
+ }
+ }, {
+ key: "destroy",
+ value: function destroy(canvasAndContext) {
+ if (!canvasAndContext.canvas) {
+ throw new Error("Canvas is not specified");
+ }
+
+ canvasAndContext.canvas.width = 0;
+ canvasAndContext.canvas.height = 0;
+ canvasAndContext.canvas = null;
+ canvasAndContext.context = null;
+ }
+ }, {
+ key: "_createCanvas",
+ value: function _createCanvas(width, height) {
+ (0, _util.unreachable)("Abstract method `_createCanvas` called.");
+ }
+ }]);
+
+ return BaseCanvasFactory;
+}();
+
+exports.BaseCanvasFactory = BaseCanvasFactory;
+
+var BaseCMapReaderFactory = /*#__PURE__*/function () {
+ function BaseCMapReaderFactory(_ref) {
+ var _ref$baseUrl = _ref.baseUrl,
+ baseUrl = _ref$baseUrl === void 0 ? null : _ref$baseUrl,
+ _ref$isCompressed = _ref.isCompressed,
+ isCompressed = _ref$isCompressed === void 0 ? false : _ref$isCompressed;
+
+ _classCallCheck(this, BaseCMapReaderFactory);
+
+ if (this.constructor === BaseCMapReaderFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory.");
+ }
+
+ this.baseUrl = baseUrl;
+ this.isCompressed = isCompressed;
+ }
+
+ _createClass(BaseCMapReaderFactory, [{
+ key: "fetch",
+ value: function () {
+ var _fetch = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref2) {
+ var _this = this;
+
+ var name, url, compressionType;
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ name = _ref2.name;
+
+ if (this.baseUrl) {
+ _context.next = 3;
+ break;
+ }
+
+ throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
+
+ case 3:
+ if (name) {
+ _context.next = 5;
+ break;
+ }
+
+ throw new Error("CMap name must be specified.");
+
+ case 5:
+ url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
+ compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
+ return _context.abrupt("return", this._fetchData(url, compressionType)["catch"](function (reason) {
+ throw new Error("Unable to load ".concat(_this.isCompressed ? "binary " : "", "CMap at: ").concat(url));
+ }));
+
+ case 8:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function fetch(_x) {
+ return _fetch.apply(this, arguments);
+ }
+
+ return fetch;
+ }()
+ }, {
+ key: "_fetchData",
+ value: function _fetchData(url, compressionType) {
+ (0, _util.unreachable)("Abstract method `_fetchData` called.");
+ }
+ }]);
+
+ return BaseCMapReaderFactory;
+}();
+
+exports.BaseCMapReaderFactory = BaseCMapReaderFactory;
+
+var BaseStandardFontDataFactory = /*#__PURE__*/function () {
+ function BaseStandardFontDataFactory(_ref3) {
+ var _ref3$baseUrl = _ref3.baseUrl,
+ baseUrl = _ref3$baseUrl === void 0 ? null : _ref3$baseUrl;
+
+ _classCallCheck(this, BaseStandardFontDataFactory);
+
+ if (this.constructor === BaseStandardFontDataFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory.");
+ }
+
+ this.baseUrl = baseUrl;
+ }
+
+ _createClass(BaseStandardFontDataFactory, [{
+ key: "fetch",
+ value: function () {
+ var _fetch2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref4) {
+ var filename, url;
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ filename = _ref4.filename;
+
+ if (this.baseUrl) {
+ _context2.next = 3;
+ break;
+ }
+
+ throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.');
+
+ case 3:
+ if (filename) {
+ _context2.next = 5;
+ break;
+ }
+
+ throw new Error("Font filename must be specified.");
+
+ case 5:
+ url = "".concat(this.baseUrl).concat(filename);
+ return _context2.abrupt("return", this._fetchData(url)["catch"](function (reason) {
+ throw new Error("Unable to load font data at: ".concat(url));
+ }));
+
+ case 7:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, this);
+ }));
+
+ function fetch(_x2) {
+ return _fetch2.apply(this, arguments);
+ }
+
+ return fetch;
+ }()
+ }, {
+ key: "_fetchData",
+ value: function _fetchData(url) {
+ (0, _util.unreachable)("Abstract method `_fetchData` called.");
+ }
+ }]);
+
+ return BaseStandardFontDataFactory;
+}();
+
+exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory;
+
+var BaseSVGFactory = /*#__PURE__*/function () {
+ function BaseSVGFactory() {
+ _classCallCheck(this, BaseSVGFactory);
+
+ if (this.constructor === BaseSVGFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseSVGFactory.");
+ }
+ }
+
+ _createClass(BaseSVGFactory, [{
+ key: "create",
+ value: function create(width, height) {
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid SVG dimensions");
+ }
+
+ var svg = this._createSVG("svg:svg");
+
+ svg.setAttribute("version", "1.1");
+ svg.setAttribute("width", "".concat(width, "px"));
+ svg.setAttribute("height", "".concat(height, "px"));
+ svg.setAttribute("preserveAspectRatio", "none");
+ svg.setAttribute("viewBox", "0 0 ".concat(width, " ").concat(height));
+ return svg;
+ }
+ }, {
+ key: "createElement",
+ value: function createElement(type) {
+ if (typeof type !== "string") {
+ throw new Error("Invalid SVG element type");
+ }
+
+ return this._createSVG(type);
+ }
+ }, {
+ key: "_createSVG",
+ value: function _createSVG(type) {
+ (0, _util.unreachable)("Abstract method `_createSVG` called.");
+ }
+ }]);
+
+ return BaseSVGFactory;
+}();
+
+exports.BaseSVGFactory = BaseSVGFactory;
+
+/***/ }),
+/* 148 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.FontLoader = exports.FontFaceObject = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var BaseFontLoader = /*#__PURE__*/function () {
+ function BaseFontLoader(_ref) {
+ var docId = _ref.docId,
+ onUnsupportedFeature = _ref.onUnsupportedFeature,
+ _ref$ownerDocument = _ref.ownerDocument,
+ ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument,
+ _ref$styleElement = _ref.styleElement,
+ styleElement = _ref$styleElement === void 0 ? null : _ref$styleElement;
+
+ _classCallCheck(this, BaseFontLoader);
+
+ if (this.constructor === BaseFontLoader) {
+ (0, _util.unreachable)("Cannot initialize BaseFontLoader.");
+ }
+
+ this.docId = docId;
+ this._onUnsupportedFeature = onUnsupportedFeature;
+ this._document = ownerDocument;
+ this.nativeFontFaces = [];
+ this.styleElement = null;
+ }
+
+ _createClass(BaseFontLoader, [{
+ key: "addNativeFontFace",
+ value: function addNativeFontFace(nativeFontFace) {
+ this.nativeFontFaces.push(nativeFontFace);
+
+ this._document.fonts.add(nativeFontFace);
+ }
+ }, {
+ key: "insertRule",
+ value: function insertRule(rule) {
+ var styleElement = this.styleElement;
+
+ if (!styleElement) {
+ styleElement = this.styleElement = this._document.createElement("style");
+ styleElement.id = "PDFJS_FONT_STYLE_TAG_".concat(this.docId);
+
+ this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
+ }
+
+ var styleSheet = styleElement.sheet;
+ styleSheet.insertRule(rule, styleSheet.cssRules.length);
+ }
+ }, {
+ key: "clear",
+ value: function clear() {
+ var _iterator = _createForOfIteratorHelper(this.nativeFontFaces),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var nativeFontFace = _step.value;
+
+ this._document.fonts["delete"](nativeFontFace);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ this.nativeFontFaces.length = 0;
+
+ if (this.styleElement) {
+ this.styleElement.remove();
+ this.styleElement = null;
+ }
+ }
+ }, {
+ key: "bind",
+ value: function () {
+ var _bind = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(font) {
+ var _this = this;
+
+ var nativeFontFace, rule;
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ if (!(font.attached || font.missingFile)) {
+ _context.next = 2;
+ break;
+ }
+
+ return _context.abrupt("return");
+
+ case 2:
+ font.attached = true;
+
+ if (!this.isFontLoadingAPISupported) {
+ _context.next = 19;
+ break;
+ }
+
+ nativeFontFace = font.createNativeFontFace();
+
+ if (!nativeFontFace) {
+ _context.next = 18;
+ break;
+ }
+
+ this.addNativeFontFace(nativeFontFace);
+ _context.prev = 7;
+ _context.next = 10;
+ return nativeFontFace.loaded;
+
+ case 10:
+ _context.next = 18;
+ break;
+
+ case 12:
+ _context.prev = 12;
+ _context.t0 = _context["catch"](7);
+
+ this._onUnsupportedFeature({
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
+ });
+
+ (0, _util.warn)("Failed to load font '".concat(nativeFontFace.family, "': '").concat(_context.t0, "'."));
+ font.disableFontFace = true;
+ throw _context.t0;
+
+ case 18:
+ return _context.abrupt("return");
+
+ case 19:
+ rule = font.createFontFaceRule();
+
+ if (!rule) {
+ _context.next = 26;
+ break;
+ }
+
+ this.insertRule(rule);
+
+ if (!this.isSyncFontLoadingSupported) {
+ _context.next = 24;
+ break;
+ }
+
+ return _context.abrupt("return");
+
+ case 24:
+ _context.next = 26;
+ return new Promise(function (resolve) {
+ var request = _this._queueLoadingCallback(resolve);
+
+ _this._prepareFontLoadEvent([rule], [font], request);
+ });
+
+ case 26:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this, [[7, 12]]);
+ }));
+
+ function bind(_x) {
+ return _bind.apply(this, arguments);
+ }
+
+ return bind;
+ }()
+ }, {
+ key: "_queueLoadingCallback",
+ value: function _queueLoadingCallback(callback) {
+ (0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
+ }
+ }, {
+ key: "isFontLoadingAPISupported",
+ get: function get() {
+ var _this$_document;
+
+ var hasFonts = !!((_this$_document = this._document) !== null && _this$_document !== void 0 && _this$_document.fonts);
+ return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts);
+ }
+ }, {
+ key: "isSyncFontLoadingSupported",
+ get: function get() {
+ (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
+ }
+ }, {
+ key: "_loadTestFont",
+ get: function get() {
+ (0, _util.unreachable)("Abstract method `_loadTestFont`.");
+ }
+ }, {
+ key: "_prepareFontLoadEvent",
+ value: function _prepareFontLoadEvent(rules, fontsToLoad, request) {
+ (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
+ }
+ }]);
+
+ return BaseFontLoader;
+}();
+
+var FontLoader;
+exports.FontLoader = FontLoader;
+{
+ exports.FontLoader = FontLoader = /*#__PURE__*/function (_BaseFontLoader) {
+ _inherits(GenericFontLoader, _BaseFontLoader);
+
+ var _super = _createSuper(GenericFontLoader);
+
+ function GenericFontLoader(params) {
+ var _this2;
+
+ _classCallCheck(this, GenericFontLoader);
+
+ _this2 = _super.call(this, params);
+ _this2.loadingContext = {
+ requests: [],
+ nextRequestId: 0
+ };
+ _this2.loadTestFontId = 0;
+ return _this2;
+ }
+
+ _createClass(GenericFontLoader, [{
+ key: "isSyncFontLoadingSupported",
+ get: function get() {
+ var supported = false;
+
+ if (typeof navigator === "undefined") {
+ supported = true;
+ } else {
+ var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
+
+ if ((m === null || m === void 0 ? void 0 : m[1]) >= 14) {
+ supported = true;
+ }
+ }
+
+ return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
+ }
+ }, {
+ key: "_queueLoadingCallback",
+ value: function _queueLoadingCallback(callback) {
+ function completeRequest() {
+ (0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
+ request.done = true;
+
+ while (context.requests.length > 0 && context.requests[0].done) {
+ var otherRequest = context.requests.shift();
+ setTimeout(otherRequest.callback, 0);
+ }
+ }
+
+ var context = this.loadingContext;
+ var request = {
+ id: "pdfjs-font-loading-".concat(context.nextRequestId++),
+ done: false,
+ complete: completeRequest,
+ callback: callback
+ };
+ context.requests.push(request);
+ return request;
+ }
+ }, {
+ key: "_loadTestFont",
+ get: function get() {
+ var getLoadTestFont = function getLoadTestFont() {
+ return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
+ };
+
+ return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
+ }
+ }, {
+ key: "_prepareFontLoadEvent",
+ value: function _prepareFontLoadEvent(rules, fonts, request) {
+ function int32(data, offset) {
+ return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
+ }
+
+ function spliceString(s, offset, remove, insert) {
+ var chunk1 = s.substring(0, offset);
+ var chunk2 = s.substring(offset + remove);
+ return chunk1 + insert + chunk2;
+ }
+
+ var i, ii;
+
+ var canvas = this._document.createElement("canvas");
+
+ canvas.width = 1;
+ canvas.height = 1;
+ var ctx = canvas.getContext("2d");
+ var called = 0;
+
+ function isFontReady(name, callback) {
+ called++;
+
+ if (called > 30) {
+ (0, _util.warn)("Load test font never loaded.");
+ callback();
+ return;
+ }
+
+ ctx.font = "1.875em " + name;
+ ctx.fillText(".", 0, 20);
+ var imageData = ctx.getImageData(0, 0, 1, 1);
+
+ if (imageData.data[3] > 0) {
+ callback();
+ return;
+ }
+
+ setTimeout(isFontReady.bind(null, name, callback));
+ }
+
+ var loadTestFontId = "lt".concat(Date.now()).concat(this.loadTestFontId++);
+ var data = this._loadTestFont;
+ var COMMENT_OFFSET = 976;
+ data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
+ var CFF_CHECKSUM_OFFSET = 16;
+ var XXXX_VALUE = 0x58585858;
+ var checksum = int32(data, CFF_CHECKSUM_OFFSET);
+
+ for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
+ checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
+ }
+
+ if (i < loadTestFontId.length) {
+ checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
+ }
+
+ data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
+ var url = "url(data:font/opentype;base64,".concat(btoa(data), ");");
+ var rule = "@font-face {font-family:\"".concat(loadTestFontId, "\";src:").concat(url, "}");
+ this.insertRule(rule);
+ var names = [];
+
+ var _iterator2 = _createForOfIteratorHelper(fonts),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var font = _step2.value;
+ names.push(font.loadedName);
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ names.push(loadTestFontId);
+
+ var div = this._document.createElement("div");
+
+ div.style.visibility = "hidden";
+ div.style.width = div.style.height = "10px";
+ div.style.position = "absolute";
+ div.style.top = div.style.left = "0px";
+
+ for (var _i = 0, _names = names; _i < _names.length; _i++) {
+ var name = _names[_i];
+
+ var span = this._document.createElement("span");
+
+ span.textContent = "Hi";
+ span.style.fontFamily = name;
+ div.appendChild(span);
+ }
+
+ this._document.body.appendChild(div);
+
+ isFontReady(loadTestFontId, function () {
+ div.remove();
+ request.complete();
+ });
+ }
+ }]);
+
+ return GenericFontLoader;
+ }(BaseFontLoader);
+}
+
+var FontFaceObject = /*#__PURE__*/function () {
+ function FontFaceObject(translatedData, _ref2) {
+ var _ref2$isEvalSupported = _ref2.isEvalSupported,
+ isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported,
+ _ref2$disableFontFace = _ref2.disableFontFace,
+ disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace,
+ _ref2$ignoreErrors = _ref2.ignoreErrors,
+ ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors,
+ onUnsupportedFeature = _ref2.onUnsupportedFeature,
+ _ref2$fontRegistry = _ref2.fontRegistry,
+ fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry;
+
+ _classCallCheck(this, FontFaceObject);
+
+ this.compiledGlyphs = Object.create(null);
+
+ for (var i in translatedData) {
+ this[i] = translatedData[i];
+ }
+
+ this.isEvalSupported = isEvalSupported !== false;
+ this.disableFontFace = disableFontFace === true;
+ this.ignoreErrors = ignoreErrors === true;
+ this._onUnsupportedFeature = onUnsupportedFeature;
+ this.fontRegistry = fontRegistry;
+ }
+
+ _createClass(FontFaceObject, [{
+ key: "createNativeFontFace",
+ value: function createNativeFontFace() {
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+
+ var nativeFontFace;
+
+ if (!this.cssFontInfo) {
+ nativeFontFace = new FontFace(this.loadedName, this.data, {});
+ } else {
+ var css = {
+ weight: this.cssFontInfo.fontWeight
+ };
+
+ if (this.cssFontInfo.italicAngle) {
+ css.style = "oblique ".concat(this.cssFontInfo.italicAngle, "deg");
+ }
+
+ nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);
+ }
+
+ if (this.fontRegistry) {
+ this.fontRegistry.registerFont(this);
+ }
+
+ return nativeFontFace;
+ }
+ }, {
+ key: "createFontFaceRule",
+ value: function createFontFaceRule() {
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+
+ var data = (0, _util.bytesToString)(this.data);
+ var url = "url(data:".concat(this.mimetype, ";base64,").concat(btoa(data), ");");
+ var rule;
+
+ if (!this.cssFontInfo) {
+ rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}");
+ } else {
+ var css = "font-weight: ".concat(this.cssFontInfo.fontWeight, ";");
+
+ if (this.cssFontInfo.italicAngle) {
+ css += "font-style: oblique ".concat(this.cssFontInfo.italicAngle, "deg;");
+ }
+
+ rule = "@font-face {font-family:\"".concat(this.cssFontInfo.fontFamily, "\";").concat(css, "src:").concat(url, "}");
+ }
+
+ if (this.fontRegistry) {
+ this.fontRegistry.registerFont(this, url);
+ }
+
+ return rule;
+ }
+ }, {
+ key: "getPathGenerator",
+ value: function getPathGenerator(objs, character) {
+ if (this.compiledGlyphs[character] !== undefined) {
+ return this.compiledGlyphs[character];
+ }
+
+ var cmds;
+
+ try {
+ cmds = objs.get(this.loadedName + "_path_" + character);
+ } catch (ex) {
+ if (!this.ignoreErrors) {
+ throw ex;
+ }
+
+ this._onUnsupportedFeature({
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
+ });
+
+ (0, _util.warn)("getPathGenerator - ignoring character: \"".concat(ex, "\"."));
+ return this.compiledGlyphs[character] = function (c, size) {};
+ }
+
+ if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
+ var jsBuf = [];
+
+ var _iterator3 = _createForOfIteratorHelper(cmds),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var current = _step3.value;
+ var args = current.args !== undefined ? current.args.join(",") : "";
+ jsBuf.push("c.", current.cmd, "(", args, ");\n");
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+
+ return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join(""));
+ }
+
+ return this.compiledGlyphs[character] = function (c, size) {
+ var _iterator4 = _createForOfIteratorHelper(cmds),
+ _step4;
+
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var _current = _step4.value;
+
+ if (_current.cmd === "scale") {
+ _current.args = [size, -size];
+ }
+
+ c[_current.cmd].apply(c, _current.args);
+ }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
+ }
+ };
+ }
+ }]);
+
+ return FontFaceObject;
+}();
+
+exports.FontFaceObject = FontFaceObject;
+
+/***/ }),
+/* 149 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.NodeStandardFontDataFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0;
+
+var _base_factory = __w_pdfjs_require__(147);
+
+var _is_node = __w_pdfjs_require__(3);
+
+var _util = __w_pdfjs_require__(1);
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var NodeCanvasFactory = /*#__PURE__*/_createClass(function NodeCanvasFactory() {
+ _classCallCheck(this, NodeCanvasFactory);
+
+ (0, _util.unreachable)("Not implemented: NodeCanvasFactory");
+});
+
+exports.NodeCanvasFactory = NodeCanvasFactory;
+
+var NodeCMapReaderFactory = /*#__PURE__*/_createClass(function NodeCMapReaderFactory() {
+ _classCallCheck(this, NodeCMapReaderFactory);
+
+ (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory");
+});
+
+exports.NodeCMapReaderFactory = NodeCMapReaderFactory;
+
+var NodeStandardFontDataFactory = /*#__PURE__*/_createClass(function NodeStandardFontDataFactory() {
+ _classCallCheck(this, NodeStandardFontDataFactory);
+
+ (0, _util.unreachable)("Not implemented: NodeStandardFontDataFactory");
+});
+
+exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory;
+
+if (_is_node.isNodeJS) {
+ var fetchData = function fetchData(url) {
+ return new Promise(function (resolve, reject) {
+ var fs = require("fs");
+
+ fs.readFile(url, function (error, data) {
+ if (error || !data) {
+ reject(new Error(error));
+ return;
+ }
+
+ resolve(new Uint8Array(data));
+ });
+ });
+ };
+
+ exports.NodeCanvasFactory = NodeCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) {
+ _inherits(NodeCanvasFactory, _BaseCanvasFactory);
+
+ var _super = _createSuper(NodeCanvasFactory);
+
+ function NodeCanvasFactory() {
+ _classCallCheck(this, NodeCanvasFactory);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(NodeCanvasFactory, [{
+ key: "_createCanvas",
+ value: function _createCanvas(width, height) {
+ var Canvas = require("canvas");
+
+ return Canvas.createCanvas(width, height);
+ }
+ }]);
+
+ return NodeCanvasFactory;
+ }(_base_factory.BaseCanvasFactory);
+
+ exports.NodeCMapReaderFactory = NodeCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) {
+ _inherits(NodeCMapReaderFactory, _BaseCMapReaderFactor);
+
+ var _super2 = _createSuper(NodeCMapReaderFactory);
+
+ function NodeCMapReaderFactory() {
+ _classCallCheck(this, NodeCMapReaderFactory);
+
+ return _super2.apply(this, arguments);
+ }
+
+ _createClass(NodeCMapReaderFactory, [{
+ key: "_fetchData",
+ value: function _fetchData(url, compressionType) {
+ return fetchData(url).then(function (data) {
+ return {
+ cMapData: data,
+ compressionType: compressionType
+ };
+ });
+ }
+ }]);
+
+ return NodeCMapReaderFactory;
+ }(_base_factory.BaseCMapReaderFactory);
+
+ exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory = /*#__PURE__*/function (_BaseStandardFontData) {
+ _inherits(NodeStandardFontDataFactory, _BaseStandardFontData);
+
+ var _super3 = _createSuper(NodeStandardFontDataFactory);
+
+ function NodeStandardFontDataFactory() {
+ _classCallCheck(this, NodeStandardFontDataFactory);
+
+ return _super3.apply(this, arguments);
+ }
+
+ _createClass(NodeStandardFontDataFactory, [{
+ key: "_fetchData",
+ value: function _fetchData(url) {
+ return fetchData(url);
+ }
+ }]);
+
+ return NodeStandardFontDataFactory;
+ }(_base_factory.BaseStandardFontDataFactory);
+}
+
+/***/ }),
+/* 150 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.AnnotationStorage = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var AnnotationStorage = /*#__PURE__*/function () {
+ function AnnotationStorage() {
+ _classCallCheck(this, AnnotationStorage);
+
+ this._storage = new Map();
+ this._timeStamp = Date.now();
+ this._modified = false;
+ this.onSetModified = null;
+ this.onResetModified = null;
+ }
+
+ _createClass(AnnotationStorage, [{
+ key: "getValue",
+ value: function getValue(key, defaultValue) {
+ var value = this._storage.get(key);
+
+ if (value === undefined) {
+ return defaultValue;
+ }
+
+ return Object.assign(defaultValue, value);
+ }
+ }, {
+ key: "setValue",
+ value: function setValue(key, value) {
+ var obj = this._storage.get(key);
+
+ var modified = false;
+
+ if (obj !== undefined) {
+ for (var _i = 0, _Object$entries = Object.entries(value); _i < _Object$entries.length; _i++) {
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
+ entry = _Object$entries$_i[0],
+ val = _Object$entries$_i[1];
+
+ if (obj[entry] !== val) {
+ modified = true;
+ obj[entry] = val;
+ }
+ }
+ } else {
+ modified = true;
+
+ this._storage.set(key, value);
+ }
+
+ if (modified) {
+ this._timeStamp = Date.now();
+
+ this._setModified();
+ }
+ }
+ }, {
+ key: "getAll",
+ value: function getAll() {
+ return this._storage.size > 0 ? (0, _util.objectFromMap)(this._storage) : null;
+ }
+ }, {
+ key: "size",
+ get: function get() {
+ return this._storage.size;
+ }
+ }, {
+ key: "_setModified",
+ value: function _setModified() {
+ if (!this._modified) {
+ this._modified = true;
+
+ if (typeof this.onSetModified === "function") {
+ this.onSetModified();
+ }
+ }
+ }
+ }, {
+ key: "resetModified",
+ value: function resetModified() {
+ if (this._modified) {
+ this._modified = false;
+
+ if (typeof this.onResetModified === "function") {
+ this.onResetModified();
+ }
+ }
+ }
+ }, {
+ key: "serializable",
+ get: function get() {
+ return this._storage.size > 0 ? this._storage : null;
+ }
+ }, {
+ key: "lastModified",
+ get: function get() {
+ return this._timeStamp.toString();
+ }
+ }]);
+
+ return AnnotationStorage;
+}();
+
+exports.AnnotationStorage = AnnotationStorage;
+
+/***/ }),
+/* 151 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.CanvasGraphics = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _pattern_helper = __w_pdfjs_require__(152);
+
+var _display_utils = __w_pdfjs_require__(146);
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+var MIN_FONT_SIZE = 16;
+var MAX_FONT_SIZE = 100;
+var MAX_GROUP_SIZE = 4096;
+var EXECUTION_TIME = 15;
+var EXECUTION_STEPS = 10;
+var COMPILE_TYPE3_GLYPHS = true;
+var MAX_SIZE_TO_COMPILE = 1000;
+var FULL_CHUNK_HEIGHT = 16;
+var LINEWIDTH_SCALE_FACTOR = 1.000001;
+
+function mirrorContextOperations(ctx, destCtx) {
+ if (ctx._removeMirroring) {
+ throw new Error("Context is already forwarding operations.");
+ }
+
+ ctx.__originalSave = ctx.save;
+ ctx.__originalRestore = ctx.restore;
+ ctx.__originalRotate = ctx.rotate;
+ ctx.__originalScale = ctx.scale;
+ ctx.__originalTranslate = ctx.translate;
+ ctx.__originalTransform = ctx.transform;
+ ctx.__originalSetTransform = ctx.setTransform;
+ ctx.__originalResetTransform = ctx.resetTransform;
+ ctx.__originalClip = ctx.clip;
+ ctx.__originalMoveTo = ctx.moveTo;
+ ctx.__originalLineTo = ctx.lineTo;
+ ctx.__originalBezierCurveTo = ctx.bezierCurveTo;
+ ctx.__originalRect = ctx.rect;
+ ctx.__originalClosePath = ctx.closePath;
+ ctx.__originalBeginPath = ctx.beginPath;
+
+ ctx._removeMirroring = function () {
+ ctx.save = ctx.__originalSave;
+ ctx.restore = ctx.__originalRestore;
+ ctx.rotate = ctx.__originalRotate;
+ ctx.scale = ctx.__originalScale;
+ ctx.translate = ctx.__originalTranslate;
+ ctx.transform = ctx.__originalTransform;
+ ctx.setTransform = ctx.__originalSetTransform;
+ ctx.resetTransform = ctx.__originalResetTransform;
+ ctx.clip = ctx.__originalClip;
+ ctx.moveTo = ctx.__originalMoveTo;
+ ctx.lineTo = ctx.__originalLineTo;
+ ctx.bezierCurveTo = ctx.__originalBezierCurveTo;
+ ctx.rect = ctx.__originalRect;
+ ctx.closePath = ctx.__originalClosePath;
+ ctx.beginPath = ctx.__originalBeginPath;
+ delete ctx._removeMirroring;
+ };
+
+ ctx.save = function ctxSave() {
+ destCtx.save();
+
+ this.__originalSave();
+ };
+
+ ctx.restore = function ctxRestore() {
+ destCtx.restore();
+
+ this.__originalRestore();
+ };
+
+ ctx.translate = function ctxTranslate(x, y) {
+ destCtx.translate(x, y);
+
+ this.__originalTranslate(x, y);
+ };
+
+ ctx.scale = function ctxScale(x, y) {
+ destCtx.scale(x, y);
+
+ this.__originalScale(x, y);
+ };
+
+ ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+ destCtx.transform(a, b, c, d, e, f);
+
+ this.__originalTransform(a, b, c, d, e, f);
+ };
+
+ ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
+ destCtx.setTransform(a, b, c, d, e, f);
+
+ this.__originalSetTransform(a, b, c, d, e, f);
+ };
+
+ ctx.resetTransform = function ctxResetTransform() {
+ destCtx.resetTransform();
+
+ this.__originalResetTransform();
+ };
+
+ ctx.rotate = function ctxRotate(angle) {
+ destCtx.rotate(angle);
+
+ this.__originalRotate(angle);
+ };
+
+ ctx.clip = function ctxRotate(rule) {
+ destCtx.clip(rule);
+
+ this.__originalClip(rule);
+ };
+
+ ctx.moveTo = function (x, y) {
+ destCtx.moveTo(x, y);
+
+ this.__originalMoveTo(x, y);
+ };
+
+ ctx.lineTo = function (x, y) {
+ destCtx.lineTo(x, y);
+
+ this.__originalLineTo(x, y);
+ };
+
+ ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {
+ destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+
+ this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+ };
+
+ ctx.rect = function (x, y, width, height) {
+ destCtx.rect(x, y, width, height);
+
+ this.__originalRect(x, y, width, height);
+ };
+
+ ctx.closePath = function () {
+ destCtx.closePath();
+
+ this.__originalClosePath();
+ };
+
+ ctx.beginPath = function () {
+ destCtx.beginPath();
+
+ this.__originalBeginPath();
+ };
+}
+
+function addContextCurrentTransform(ctx) {
+ if (ctx._transformStack) {
+ ctx._transformStack = [];
+ }
+
+ if (ctx.mozCurrentTransform) {
+ return;
+ }
+
+ ctx._originalSave = ctx.save;
+ ctx._originalRestore = ctx.restore;
+ ctx._originalRotate = ctx.rotate;
+ ctx._originalScale = ctx.scale;
+ ctx._originalTranslate = ctx.translate;
+ ctx._originalTransform = ctx.transform;
+ ctx._originalSetTransform = ctx.setTransform;
+ ctx._originalResetTransform = ctx.resetTransform;
+ ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
+ ctx._transformStack = [];
+
+ try {
+ var desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth");
+ ctx._setLineWidth = desc.set;
+ ctx._getLineWidth = desc.get;
+ Object.defineProperty(ctx, "lineWidth", {
+ set: function setLineWidth(width) {
+ this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR);
+ },
+ get: function getLineWidth() {
+ return this._getLineWidth();
+ }
+ });
+ } catch (_) {}
+
+ Object.defineProperty(ctx, "mozCurrentTransform", {
+ get: function getCurrentTransform() {
+ return this._transformMatrix;
+ }
+ });
+ Object.defineProperty(ctx, "mozCurrentTransformInverse", {
+ get: function getCurrentTransformInverse() {
+ var _this$_transformMatri = _slicedToArray(this._transformMatrix, 6),
+ a = _this$_transformMatri[0],
+ b = _this$_transformMatri[1],
+ c = _this$_transformMatri[2],
+ d = _this$_transformMatri[3],
+ e = _this$_transformMatri[4],
+ f = _this$_transformMatri[5];
+
+ var ad_bc = a * d - b * c;
+ var bc_ad = b * c - a * d;
+ return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];
+ }
+ });
+
+ ctx.save = function ctxSave() {
+ var old = this._transformMatrix;
+
+ this._transformStack.push(old);
+
+ this._transformMatrix = old.slice(0, 6);
+
+ this._originalSave();
+ };
+
+ ctx.restore = function ctxRestore() {
+ if (this._transformStack.length === 0) {
+ (0, _util.warn)("Tried to restore a ctx when the stack was already empty.");
+ }
+
+ var prev = this._transformStack.pop();
+
+ if (prev) {
+ this._transformMatrix = prev;
+
+ this._originalRestore();
+ }
+ };
+
+ ctx.translate = function ctxTranslate(x, y) {
+ var m = this._transformMatrix;
+ m[4] = m[0] * x + m[2] * y + m[4];
+ m[5] = m[1] * x + m[3] * y + m[5];
+
+ this._originalTranslate(x, y);
+ };
+
+ ctx.scale = function ctxScale(x, y) {
+ var m = this._transformMatrix;
+ m[0] *= x;
+ m[1] *= x;
+ m[2] *= y;
+ m[3] *= y;
+
+ this._originalScale(x, y);
+ };
+
+ ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+ var m = this._transformMatrix;
+ this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];
+
+ ctx._originalTransform(a, b, c, d, e, f);
+ };
+
+ ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
+ this._transformMatrix = [a, b, c, d, e, f];
+
+ ctx._originalSetTransform(a, b, c, d, e, f);
+ };
+
+ ctx.resetTransform = function ctxResetTransform() {
+ this._transformMatrix = [1, 0, 0, 1, 0, 0];
+
+ ctx._originalResetTransform();
+ };
+
+ ctx.rotate = function ctxRotate(angle) {
+ var cosValue = Math.cos(angle);
+ var sinValue = Math.sin(angle);
+ var m = this._transformMatrix;
+ this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];
+
+ this._originalRotate(angle);
+ };
+}
+
+var CachedCanvases = /*#__PURE__*/function () {
+ function CachedCanvases(canvasFactory) {
+ _classCallCheck(this, CachedCanvases);
+
+ this.canvasFactory = canvasFactory;
+ this.cache = Object.create(null);
+ }
+
+ _createClass(CachedCanvases, [{
+ key: "getCanvas",
+ value: function getCanvas(id, width, height, trackTransform) {
+ var canvasEntry;
+
+ if (this.cache[id] !== undefined) {
+ canvasEntry = this.cache[id];
+ this.canvasFactory.reset(canvasEntry, width, height);
+ canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
+ } else {
+ canvasEntry = this.canvasFactory.create(width, height);
+ this.cache[id] = canvasEntry;
+ }
+
+ if (trackTransform) {
+ addContextCurrentTransform(canvasEntry.context);
+ }
+
+ return canvasEntry;
+ }
+ }, {
+ key: "clear",
+ value: function clear() {
+ for (var id in this.cache) {
+ var canvasEntry = this.cache[id];
+ this.canvasFactory.destroy(canvasEntry);
+ delete this.cache[id];
+ }
+ }
+ }]);
+
+ return CachedCanvases;
+}();
+
+function compileType3Glyph(imgData) {
+ var POINT_TO_PROCESS_LIMIT = 1000;
+ var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
+ var width = imgData.width,
+ height = imgData.height,
+ width1 = width + 1;
+ var i, ii, j, j0;
+ var points = new Uint8Array(width1 * (height + 1));
+ var lineSize = width + 7 & ~7,
+ data0 = imgData.data;
+ var data = new Uint8Array(lineSize * height);
+ var pos = 0;
+
+ for (i = 0, ii = data0.length; i < ii; i++) {
+ var elem = data0[i];
+ var mask = 128;
+
+ while (mask > 0) {
+ data[pos++] = elem & mask ? 0 : 255;
+ mask >>= 1;
+ }
+ }
+
+ var count = 0;
+ pos = 0;
+
+ if (data[pos] !== 0) {
+ points[0] = 1;
+ ++count;
+ }
+
+ for (j = 1; j < width; j++) {
+ if (data[pos] !== data[pos + 1]) {
+ points[j] = data[pos] ? 2 : 1;
+ ++count;
+ }
+
+ pos++;
+ }
+
+ if (data[pos] !== 0) {
+ points[j] = 2;
+ ++count;
+ }
+
+ for (i = 1; i < height; i++) {
+ pos = i * lineSize;
+ j0 = i * width1;
+
+ if (data[pos - lineSize] !== data[pos]) {
+ points[j0] = data[pos] ? 1 : 8;
+ ++count;
+ }
+
+ var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
+
+ for (j = 1; j < width; j++) {
+ sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);
+
+ if (POINT_TYPES[sum]) {
+ points[j0 + j] = POINT_TYPES[sum];
+ ++count;
+ }
+
+ pos++;
+ }
+
+ if (data[pos - lineSize] !== data[pos]) {
+ points[j0 + j] = data[pos] ? 2 : 4;
+ ++count;
+ }
+
+ if (count > POINT_TO_PROCESS_LIMIT) {
+ return null;
+ }
+ }
+
+ pos = lineSize * (height - 1);
+ j0 = i * width1;
+
+ if (data[pos] !== 0) {
+ points[j0] = 8;
+ ++count;
+ }
+
+ for (j = 1; j < width; j++) {
+ if (data[pos] !== data[pos + 1]) {
+ points[j0 + j] = data[pos] ? 4 : 8;
+ ++count;
+ }
+
+ pos++;
+ }
+
+ if (data[pos] !== 0) {
+ points[j0 + j] = 4;
+ ++count;
+ }
+
+ if (count > POINT_TO_PROCESS_LIMIT) {
+ return null;
+ }
+
+ var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
+ var outlines = [];
+
+ for (i = 0; count && i <= height; i++) {
+ var p = i * width1;
+ var end = p + width;
+
+ while (p < end && !points[p]) {
+ p++;
+ }
+
+ if (p === end) {
+ continue;
+ }
+
+ var coords = [p % width1, i];
+ var p0 = p;
+ var type = points[p];
+
+ do {
+ var step = steps[type];
+
+ do {
+ p += step;
+ } while (!points[p]);
+
+ var pp = points[p];
+
+ if (pp !== 5 && pp !== 10) {
+ type = pp;
+ points[p] = 0;
+ } else {
+ type = pp & 0x33 * type >> 4;
+ points[p] &= type >> 2 | type << 2;
+ }
+
+ coords.push(p % width1, p / width1 | 0);
+
+ if (!points[p]) {
+ --count;
+ }
+ } while (p0 !== p);
+
+ outlines.push(coords);
+ --i;
+ }
+
+ var drawOutline = function drawOutline(c) {
+ c.save();
+ c.scale(1 / width, -1 / height);
+ c.translate(0, -height);
+ c.beginPath();
+
+ for (var k = 0, kk = outlines.length; k < kk; k++) {
+ var o = outlines[k];
+ c.moveTo(o[0], o[1]);
+
+ for (var l = 2, ll = o.length; l < ll; l += 2) {
+ c.lineTo(o[l], o[l + 1]);
+ }
+ }
+
+ c.fill();
+ c.beginPath();
+ c.restore();
+ };
+
+ return drawOutline;
+}
+
+var CanvasExtraState = /*#__PURE__*/function () {
+ function CanvasExtraState(width, height) {
+ _classCallCheck(this, CanvasExtraState);
+
+ this.alphaIsShape = false;
+ this.fontSize = 0;
+ this.fontSizeScale = 1;
+ this.textMatrix = _util.IDENTITY_MATRIX;
+ this.textMatrixScale = 1;
+ this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
+ this.leading = 0;
+ this.x = 0;
+ this.y = 0;
+ this.lineX = 0;
+ this.lineY = 0;
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.textHScale = 1;
+ this.textRenderingMode = _util.TextRenderingMode.FILL;
+ this.textRise = 0;
+ this.fillColor = "#000000";
+ this.strokeColor = "#000000";
+ this.patternFill = false;
+ this.fillAlpha = 1;
+ this.strokeAlpha = 1;
+ this.lineWidth = 1;
+ this.activeSMask = null;
+ this.transferMaps = null;
+ this.startNewPathAndClipBox([0, 0, width, height]);
+ }
+
+ _createClass(CanvasExtraState, [{
+ key: "clone",
+ value: function clone() {
+ var clone = Object.create(this);
+ clone.clipBox = this.clipBox.slice();
+ return clone;
+ }
+ }, {
+ key: "setCurrentPoint",
+ value: function setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+ }, {
+ key: "updatePathMinMax",
+ value: function updatePathMinMax(transform, x, y) {
+ var _Util$applyTransform = _util.Util.applyTransform([x, y], transform);
+
+ var _Util$applyTransform2 = _slicedToArray(_Util$applyTransform, 2);
+
+ x = _Util$applyTransform2[0];
+ y = _Util$applyTransform2[1];
+ this.minX = Math.min(this.minX, x);
+ this.minY = Math.min(this.minY, y);
+ this.maxX = Math.max(this.maxX, x);
+ this.maxY = Math.max(this.maxY, y);
+ }
+ }, {
+ key: "updateCurvePathMinMax",
+ value: function updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3) {
+ var box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3);
+
+ this.updatePathMinMax(transform, box[0], box[1]);
+ this.updatePathMinMax(transform, box[2], box[3]);
+ }
+ }, {
+ key: "getPathBoundingBox",
+ value: function getPathBoundingBox() {
+ var pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL;
+ var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ var box = [this.minX, this.minY, this.maxX, this.maxY];
+
+ if (pathType === _pattern_helper.PathType.STROKE) {
+ if (!transform) {
+ (0, _util.unreachable)("Stroke bounding box must include transform.");
+ }
+
+ var scale = _util.Util.singularValueDecompose2dScale(transform);
+
+ var xStrokePad = scale[0] * this.lineWidth / 2;
+ var yStrokePad = scale[1] * this.lineWidth / 2;
+ box[0] -= xStrokePad;
+ box[1] -= yStrokePad;
+ box[2] += xStrokePad;
+ box[3] += yStrokePad;
+ }
+
+ return box;
+ }
+ }, {
+ key: "updateClipFromPath",
+ value: function updateClipFromPath() {
+ var intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox());
+
+ this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);
+ }
+ }, {
+ key: "startNewPathAndClipBox",
+ value: function startNewPathAndClipBox(box) {
+ this.clipBox = box;
+ this.minX = Infinity;
+ this.minY = Infinity;
+ this.maxX = 0;
+ this.maxY = 0;
+ }
+ }, {
+ key: "getClippedPathBoundingBox",
+ value: function getClippedPathBoundingBox() {
+ var pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL;
+ var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));
+ }
+ }]);
+
+ return CanvasExtraState;
+}();
+
+function putBinaryImageData(ctx, imgData) {
+ var transferMaps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
+
+ if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
+ ctx.putImageData(imgData, 0, 0);
+ return;
+ }
+
+ var height = imgData.height,
+ width = imgData.width;
+ var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+ var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+ var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+ var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+ var srcPos = 0,
+ destPos;
+ var src = imgData.data;
+ var dest = chunkImgData.data;
+ var i, j, thisChunkHeight, elemsInThisChunk;
+ var transferMapRed, transferMapGreen, transferMapBlue, transferMapGray;
+
+ if (transferMaps) {
+ switch (transferMaps.length) {
+ case 1:
+ transferMapRed = transferMaps[0];
+ transferMapGreen = transferMaps[0];
+ transferMapBlue = transferMaps[0];
+ transferMapGray = transferMaps[0];
+ break;
+
+ case 4:
+ transferMapRed = transferMaps[0];
+ transferMapGreen = transferMaps[1];
+ transferMapBlue = transferMaps[2];
+ transferMapGray = transferMaps[3];
+ break;
+ }
+ }
+
+ if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
+ var srcLength = src.byteLength;
+ var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
+ var dest32DataLength = dest32.length;
+ var fullSrcDiff = width + 7 >> 3;
+ var white = 0xffffffff;
+ var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;
+
+ if (transferMapGray) {
+ if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) {
+ var _ref = [black, white];
+ white = _ref[0];
+ black = _ref[1];
+ }
+ }
+
+ for (i = 0; i < totalChunks; i++) {
+ thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+ destPos = 0;
+
+ for (j = 0; j < thisChunkHeight; j++) {
+ var srcDiff = srcLength - srcPos;
+ var k = 0;
+ var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
+ var kEndUnrolled = kEnd & ~7;
+ var mask = 0;
+ var srcByte = 0;
+
+ for (; k < kEndUnrolled; k += 8) {
+ srcByte = src[srcPos++];
+ dest32[destPos++] = srcByte & 128 ? white : black;
+ dest32[destPos++] = srcByte & 64 ? white : black;
+ dest32[destPos++] = srcByte & 32 ? white : black;
+ dest32[destPos++] = srcByte & 16 ? white : black;
+ dest32[destPos++] = srcByte & 8 ? white : black;
+ dest32[destPos++] = srcByte & 4 ? white : black;
+ dest32[destPos++] = srcByte & 2 ? white : black;
+ dest32[destPos++] = srcByte & 1 ? white : black;
+ }
+
+ for (; k < kEnd; k++) {
+ if (mask === 0) {
+ srcByte = src[srcPos++];
+ mask = 128;
+ }
+
+ dest32[destPos++] = srcByte & mask ? white : black;
+ mask >>= 1;
+ }
+ }
+
+ while (destPos < dest32DataLength) {
+ dest32[destPos++] = 0;
+ }
+
+ ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+ }
+ } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {
+ var hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);
+ j = 0;
+ elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
+
+ for (i = 0; i < fullChunks; i++) {
+ dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+ srcPos += elemsInThisChunk;
+
+ if (hasTransferMaps) {
+ for (var _k = 0; _k < elemsInThisChunk; _k += 4) {
+ if (transferMapRed) {
+ dest[_k + 0] = transferMapRed[dest[_k + 0]];
+ }
+
+ if (transferMapGreen) {
+ dest[_k + 1] = transferMapGreen[dest[_k + 1]];
+ }
+
+ if (transferMapBlue) {
+ dest[_k + 2] = transferMapBlue[dest[_k + 2]];
+ }
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, j);
+ j += FULL_CHUNK_HEIGHT;
+ }
+
+ if (i < totalChunks) {
+ elemsInThisChunk = width * partialChunkHeight * 4;
+ dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+
+ if (hasTransferMaps) {
+ for (var _k2 = 0; _k2 < elemsInThisChunk; _k2 += 4) {
+ if (transferMapRed) {
+ dest[_k2 + 0] = transferMapRed[dest[_k2 + 0]];
+ }
+
+ if (transferMapGreen) {
+ dest[_k2 + 1] = transferMapGreen[dest[_k2 + 1]];
+ }
+
+ if (transferMapBlue) {
+ dest[_k2 + 2] = transferMapBlue[dest[_k2 + 2]];
+ }
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, j);
+ }
+ } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
+ var _hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);
+
+ thisChunkHeight = FULL_CHUNK_HEIGHT;
+ elemsInThisChunk = width * thisChunkHeight;
+
+ for (i = 0; i < totalChunks; i++) {
+ if (i >= fullChunks) {
+ thisChunkHeight = partialChunkHeight;
+ elemsInThisChunk = width * thisChunkHeight;
+ }
+
+ destPos = 0;
+
+ for (j = elemsInThisChunk; j--;) {
+ dest[destPos++] = src[srcPos++];
+ dest[destPos++] = src[srcPos++];
+ dest[destPos++] = src[srcPos++];
+ dest[destPos++] = 255;
+ }
+
+ if (_hasTransferMaps) {
+ for (var _k3 = 0; _k3 < destPos; _k3 += 4) {
+ if (transferMapRed) {
+ dest[_k3 + 0] = transferMapRed[dest[_k3 + 0]];
+ }
+
+ if (transferMapGreen) {
+ dest[_k3 + 1] = transferMapGreen[dest[_k3 + 1]];
+ }
+
+ if (transferMapBlue) {
+ dest[_k3 + 2] = transferMapBlue[dest[_k3 + 2]];
+ }
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+ }
+ } else {
+ throw new Error("bad image kind: ".concat(imgData.kind));
+ }
+}
+
+function putBinaryImageMask(ctx, imgData) {
+ var height = imgData.height,
+ width = imgData.width;
+ var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+ var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+ var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+ var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+ var srcPos = 0;
+ var src = imgData.data;
+ var dest = chunkImgData.data;
+
+ for (var i = 0; i < totalChunks; i++) {
+ var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+ var destPos = 3;
+
+ for (var j = 0; j < thisChunkHeight; j++) {
+ var elem = void 0,
+ mask = 0;
+
+ for (var k = 0; k < width; k++) {
+ if (!mask) {
+ elem = src[srcPos++];
+ mask = 128;
+ }
+
+ dest[destPos] = elem & mask ? 0 : 255;
+ destPos += 4;
+ mask >>= 1;
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+ }
+}
+
+function copyCtxState(sourceCtx, destCtx) {
+ var properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"];
+
+ for (var i = 0, ii = properties.length; i < ii; i++) {
+ var property = properties[i];
+
+ if (sourceCtx[property] !== undefined) {
+ destCtx[property] = sourceCtx[property];
+ }
+ }
+
+ if (sourceCtx.setLineDash !== undefined) {
+ destCtx.setLineDash(sourceCtx.getLineDash());
+ destCtx.lineDashOffset = sourceCtx.lineDashOffset;
+ }
+}
+
+function resetCtxToDefault(ctx) {
+ ctx.strokeStyle = "#000000";
+ ctx.fillStyle = "#000000";
+ ctx.fillRule = "nonzero";
+ ctx.globalAlpha = 1;
+ ctx.lineWidth = 1;
+ ctx.lineCap = "butt";
+ ctx.lineJoin = "miter";
+ ctx.miterLimit = 10;
+ ctx.globalCompositeOperation = "source-over";
+ ctx.font = "0.625em sans-serif";
+
+ if (ctx.setLineDash !== undefined) {
+ ctx.setLineDash([]);
+ ctx.lineDashOffset = 0;
+ }
+}
+
+function composeSMaskBackdrop(bytes, r0, g0, b0) {
+ var length = bytes.length;
+
+ for (var i = 3; i < length; i += 4) {
+ var alpha = bytes[i];
+
+ if (alpha === 0) {
+ bytes[i - 3] = r0;
+ bytes[i - 2] = g0;
+ bytes[i - 1] = b0;
+ } else if (alpha < 255) {
+ var alpha_ = 255 - alpha;
+ bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;
+ bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;
+ bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;
+ }
+ }
+}
+
+function composeSMaskAlpha(maskData, layerData, transferMap) {
+ var length = maskData.length;
+ var scale = 1 / 255;
+
+ for (var i = 3; i < length; i += 4) {
+ var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
+ layerData[i] = layerData[i] * alpha * scale | 0;
+ }
+}
+
+function composeSMaskLuminosity(maskData, layerData, transferMap) {
+ var length = maskData.length;
+
+ for (var i = 3; i < length; i += 4) {
+ var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
+ layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;
+ }
+}
+
+function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {
+ var hasBackdrop = !!backdrop;
+ var r0 = hasBackdrop ? backdrop[0] : 0;
+ var g0 = hasBackdrop ? backdrop[1] : 0;
+ var b0 = hasBackdrop ? backdrop[2] : 0;
+ var composeFn;
+
+ if (subtype === "Luminosity") {
+ composeFn = composeSMaskLuminosity;
+ } else {
+ composeFn = composeSMaskAlpha;
+ }
+
+ var PIXELS_TO_PROCESS = 1048576;
+ var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
+
+ for (var row = 0; row < height; row += chunkSize) {
+ var chunkHeight = Math.min(chunkSize, height - row);
+ var maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight);
+ var layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight);
+
+ if (hasBackdrop) {
+ composeSMaskBackdrop(maskData.data, r0, g0, b0);
+ }
+
+ composeFn(maskData.data, layerData.data, transferMap);
+ layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY);
+ }
+}
+
+function composeSMask(ctx, smask, layerCtx, layerBox) {
+ var layerOffsetX = layerBox[0];
+ var layerOffsetY = layerBox[1];
+ var layerWidth = layerBox[2] - layerOffsetX;
+ var layerHeight = layerBox[3] - layerOffsetY;
+
+ if (layerWidth === 0 || layerHeight === 0) {
+ return;
+ }
+
+ genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);
+ ctx.save();
+ ctx.globalAlpha = 1;
+ ctx.globalCompositeOperation = "source-over";
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.drawImage(layerCtx.canvas, 0, 0);
+ ctx.restore();
+}
+
+function getImageSmoothingEnabled(transform, interpolate) {
+ var scale = _util.Util.singularValueDecompose2dScale(transform);
+
+ scale[0] = Math.fround(scale[0]);
+ scale[1] = Math.fround(scale[1]);
+ var actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
+
+ if (interpolate !== undefined) {
+ return interpolate;
+ } else if (scale[0] <= actualScale || scale[1] <= actualScale) {
+ return true;
+ }
+
+ return false;
+}
+
+var LINE_CAP_STYLES = ["butt", "round", "square"];
+var LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+var NORMAL_CLIP = {};
+var EO_CLIP = {};
+
+var CanvasGraphics = /*#__PURE__*/function () {
+ function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig, annotationCanvasMap) {
+ _classCallCheck(this, CanvasGraphics);
+
+ this.ctx = canvasCtx;
+ this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
+ this.stateStack = [];
+ this.pendingClip = null;
+ this.pendingEOFill = false;
+ this.res = null;
+ this.xobjs = null;
+ this.commonObjs = commonObjs;
+ this.objs = objs;
+ this.canvasFactory = canvasFactory;
+ this.imageLayer = imageLayer;
+ this.groupStack = [];
+ this.processingType3 = null;
+ this.baseTransform = null;
+ this.baseTransformStack = [];
+ this.groupLevel = 0;
+ this.smaskStack = [];
+ this.smaskCounter = 0;
+ this.tempSMask = null;
+ this.suspendedCtx = null;
+ this.contentVisible = true;
+ this.markedContentStack = [];
+ this.optionalContentConfig = optionalContentConfig;
+ this.cachedCanvases = new CachedCanvases(this.canvasFactory);
+ this.cachedPatterns = new Map();
+ this.annotationCanvasMap = annotationCanvasMap;
+ this.viewportScale = 1;
+ this.outputScaleX = 1;
+ this.outputScaleY = 1;
+
+ if (canvasCtx) {
+ addContextCurrentTransform(canvasCtx);
+ }
+
+ this._cachedScaleForStroking = null;
+ this._cachedGetSinglePixelWidth = null;
+ }
+
+ _createClass(CanvasGraphics, [{
+ key: "beginDrawing",
+ value: function beginDrawing(_ref2) {
+ var transform = _ref2.transform,
+ viewport = _ref2.viewport,
+ _ref2$transparency = _ref2.transparency,
+ transparency = _ref2$transparency === void 0 ? false : _ref2$transparency,
+ _ref2$background = _ref2.background,
+ background = _ref2$background === void 0 ? null : _ref2$background;
+ var width = this.ctx.canvas.width;
+ var height = this.ctx.canvas.height;
+ this.ctx.save();
+ this.ctx.fillStyle = background || "rgb(255, 255, 255)";
+ this.ctx.fillRect(0, 0, width, height);
+ this.ctx.restore();
+
+ if (transparency) {
+ var transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true);
+ this.compositeCtx = this.ctx;
+ this.transparentCanvas = transparentCanvas.canvas;
+ this.ctx = transparentCanvas.context;
+ this.ctx.save();
+ this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);
+ }
+
+ this.ctx.save();
+ resetCtxToDefault(this.ctx);
+
+ if (transform) {
+ this.ctx.transform.apply(this.ctx, transform);
+ this.outputScaleX = transform[0];
+ this.outputScaleY = transform[0];
+ }
+
+ this.ctx.transform.apply(this.ctx, viewport.transform);
+ this.viewportScale = viewport.scale;
+ this.baseTransform = this.ctx.mozCurrentTransform.slice();
+
+ if (this.imageLayer) {
+ this.imageLayer.beginLayout();
+ }
+ }
+ }, {
+ key: "executeOperatorList",
+ value: function executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
+ var argsArray = operatorList.argsArray;
+ var fnArray = operatorList.fnArray;
+ var i = executionStartIdx || 0;
+ var argsArrayLen = argsArray.length;
+
+ if (argsArrayLen === i) {
+ return i;
+ }
+
+ var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
+ var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
+ var steps = 0;
+ var commonObjs = this.commonObjs;
+ var objs = this.objs;
+ var fnId;
+
+ while (true) {
+ if (stepper !== undefined && i === stepper.nextBreakPoint) {
+ stepper.breakIt(i, continueCallback);
+ return i;
+ }
+
+ fnId = fnArray[i];
+
+ if (fnId !== _util.OPS.dependency) {
+ this[fnId].apply(this, argsArray[i]);
+ } else {
+ var _iterator = _createForOfIteratorHelper(argsArray[i]),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var depObjId = _step.value;
+ var objsPool = depObjId.startsWith("g_") ? commonObjs : objs;
+
+ if (!objsPool.has(depObjId)) {
+ objsPool.get(depObjId, continueCallback);
+ return i;
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+
+ i++;
+
+ if (i === argsArrayLen) {
+ return i;
+ }
+
+ if (chunkOperations && ++steps > EXECUTION_STEPS) {
+ if (Date.now() > endTime) {
+ continueCallback();
+ return i;
+ }
+
+ steps = 0;
+ }
+ }
+ }
+ }, {
+ key: "endDrawing",
+ value: function endDrawing() {
+ while (this.stateStack.length || this.inSMaskMode) {
+ this.restore();
+ }
+
+ this.ctx.restore();
+
+ if (this.transparentCanvas) {
+ this.ctx = this.compositeCtx;
+ this.ctx.save();
+ this.ctx.setTransform(1, 0, 0, 1, 0, 0);
+ this.ctx.drawImage(this.transparentCanvas, 0, 0);
+ this.ctx.restore();
+ this.transparentCanvas = null;
+ }
+
+ this.cachedCanvases.clear();
+ this.cachedPatterns.clear();
+
+ if (this.imageLayer) {
+ this.imageLayer.endLayout();
+ }
+ }
+ }, {
+ key: "_scaleImage",
+ value: function _scaleImage(img, inverseTransform) {
+ var width = img.width;
+ var height = img.height;
+ var widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);
+ var heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);
+ var paintWidth = width,
+ paintHeight = height;
+ var tmpCanvasId = "prescale1";
+ var tmpCanvas, tmpCtx;
+
+ while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
+ var newWidth = paintWidth,
+ newHeight = paintHeight;
+
+ if (widthScale > 2 && paintWidth > 1) {
+ newWidth = Math.ceil(paintWidth / 2);
+ widthScale /= paintWidth / newWidth;
+ }
+
+ if (heightScale > 2 && paintHeight > 1) {
+ newHeight = Math.ceil(paintHeight / 2);
+ heightScale /= paintHeight / newHeight;
+ }
+
+ tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
+ tmpCtx = tmpCanvas.context;
+ tmpCtx.clearRect(0, 0, newWidth, newHeight);
+ tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
+ img = tmpCanvas.canvas;
+ paintWidth = newWidth;
+ paintHeight = newHeight;
+ tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
+ }
+
+ return {
+ img: img,
+ paintWidth: paintWidth,
+ paintHeight: paintHeight
+ };
+ }
+ }, {
+ key: "_createMaskCanvas",
+ value: function _createMaskCanvas(img) {
+ var ctx = this.ctx;
+ var width = img.width,
+ height = img.height;
+ var fillColor = this.current.fillColor;
+ var isPatternFill = this.current.patternFill;
+ var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+ var maskCtx = maskCanvas.context;
+ putBinaryImageMask(maskCtx, img);
+ var objToCanvas = ctx.mozCurrentTransform;
+
+ var maskToCanvas = _util.Util.transform(objToCanvas, [1 / width, 0, 0, -1 / height, 0, 0]);
+
+ maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);
+
+ var cord1 = _util.Util.applyTransform([0, 0], maskToCanvas);
+
+ var cord2 = _util.Util.applyTransform([width, height], maskToCanvas);
+
+ var rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]);
+
+ var drawnWidth = Math.ceil(rect[2] - rect[0]);
+ var drawnHeight = Math.ceil(rect[3] - rect[1]);
+ var fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight, true);
+ var fillCtx = fillCanvas.context;
+ var offsetX = Math.min(cord1[0], cord2[0]);
+ var offsetY = Math.min(cord1[1], cord2[1]);
+ fillCtx.translate(-offsetX, -offsetY);
+ fillCtx.transform.apply(fillCtx, maskToCanvas);
+
+ var scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse);
+
+ fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(fillCtx.mozCurrentTransform, img.interpolate);
+ fillCtx.drawImage(scaled.img, 0, 0, scaled.img.width, scaled.img.height, 0, 0, width, height);
+ fillCtx.globalCompositeOperation = "source-in";
+
+ var inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]);
+
+ fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor;
+ fillCtx.fillRect(0, 0, width, height);
+ return {
+ canvas: fillCanvas.canvas,
+ offsetX: Math.round(offsetX),
+ offsetY: Math.round(offsetY)
+ };
+ }
+ }, {
+ key: "setLineWidth",
+ value: function setLineWidth(width) {
+ if (width !== this.current.lineWidth) {
+ this._cachedScaleForStroking = null;
+ }
+
+ this.current.lineWidth = width;
+ this.ctx.lineWidth = width;
+ }
+ }, {
+ key: "setLineCap",
+ value: function setLineCap(style) {
+ this.ctx.lineCap = LINE_CAP_STYLES[style];
+ }
+ }, {
+ key: "setLineJoin",
+ value: function setLineJoin(style) {
+ this.ctx.lineJoin = LINE_JOIN_STYLES[style];
+ }
+ }, {
+ key: "setMiterLimit",
+ value: function setMiterLimit(limit) {
+ this.ctx.miterLimit = limit;
+ }
+ }, {
+ key: "setDash",
+ value: function setDash(dashArray, dashPhase) {
+ var ctx = this.ctx;
+
+ if (ctx.setLineDash !== undefined) {
+ ctx.setLineDash(dashArray);
+ ctx.lineDashOffset = dashPhase;
+ }
+ }
+ }, {
+ key: "setRenderingIntent",
+ value: function setRenderingIntent(intent) {}
+ }, {
+ key: "setFlatness",
+ value: function setFlatness(flatness) {}
+ }, {
+ key: "setGState",
+ value: function setGState(states) {
+ for (var i = 0, ii = states.length; i < ii; i++) {
+ var state = states[i];
+ var key = state[0];
+ var value = state[1];
+
+ switch (key) {
+ case "LW":
+ this.setLineWidth(value);
+ break;
+
+ case "LC":
+ this.setLineCap(value);
+ break;
+
+ case "LJ":
+ this.setLineJoin(value);
+ break;
+
+ case "ML":
+ this.setMiterLimit(value);
+ break;
+
+ case "D":
+ this.setDash(value[0], value[1]);
+ break;
+
+ case "RI":
+ this.setRenderingIntent(value);
+ break;
+
+ case "FL":
+ this.setFlatness(value);
+ break;
+
+ case "Font":
+ this.setFont(value[0], value[1]);
+ break;
+
+ case "CA":
+ this.current.strokeAlpha = state[1];
+ break;
+
+ case "ca":
+ this.current.fillAlpha = state[1];
+ this.ctx.globalAlpha = state[1];
+ break;
+
+ case "BM":
+ this.ctx.globalCompositeOperation = value;
+ break;
+
+ case "SMask":
+ this.current.activeSMask = value ? this.tempSMask : null;
+ this.tempSMask = null;
+ this.checkSMaskState();
+ break;
+
+ case "TR":
+ this.current.transferMaps = value;
+ }
+ }
+ }
+ }, {
+ key: "inSMaskMode",
+ get: function get() {
+ return !!this.suspendedCtx;
+ }
+ }, {
+ key: "checkSMaskState",
+ value: function checkSMaskState() {
+ var inSMaskMode = this.inSMaskMode;
+
+ if (this.current.activeSMask && !inSMaskMode) {
+ this.beginSMaskMode();
+ } else if (!this.current.activeSMask && inSMaskMode) {
+ this.endSMaskMode();
+ }
+ }
+ }, {
+ key: "beginSMaskMode",
+ value: function beginSMaskMode() {
+ if (this.inSMaskMode) {
+ throw new Error("beginSMaskMode called while already in smask mode");
+ }
+
+ var drawnWidth = this.ctx.canvas.width;
+ var drawnHeight = this.ctx.canvas.height;
+ var cacheId = "smaskGroupAt" + this.groupLevel;
+ var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+ this.suspendedCtx = this.ctx;
+ this.ctx = scratchCanvas.context;
+ var ctx = this.ctx;
+ ctx.setTransform.apply(ctx, this.suspendedCtx.mozCurrentTransform);
+ copyCtxState(this.suspendedCtx, ctx);
+ mirrorContextOperations(ctx, this.suspendedCtx);
+ this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
+ }
+ }, {
+ key: "endSMaskMode",
+ value: function endSMaskMode() {
+ if (!this.inSMaskMode) {
+ throw new Error("endSMaskMode called while not in smask mode");
+ }
+
+ this.ctx._removeMirroring();
+
+ copyCtxState(this.ctx, this.suspendedCtx);
+ this.ctx = this.suspendedCtx;
+ this.suspendedCtx = null;
+ }
+ }, {
+ key: "compose",
+ value: function compose(dirtyBox) {
+ if (!this.current.activeSMask) {
+ return;
+ }
+
+ if (!dirtyBox) {
+ dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
+ } else {
+ dirtyBox[0] = Math.floor(dirtyBox[0]);
+ dirtyBox[1] = Math.floor(dirtyBox[1]);
+ dirtyBox[2] = Math.ceil(dirtyBox[2]);
+ dirtyBox[3] = Math.ceil(dirtyBox[3]);
+ }
+
+ var smask = this.current.activeSMask;
+ var suspendedCtx = this.suspendedCtx;
+ composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);
+ this.ctx.save();
+ this.ctx.setTransform(1, 0, 0, 1, 0, 0);
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
+ this.ctx.restore();
+ }
+ }, {
+ key: "save",
+ value: function save() {
+ if (this.inSMaskMode) {
+ copyCtxState(this.ctx, this.suspendedCtx);
+ this.suspendedCtx.save();
+ } else {
+ this.ctx.save();
+ }
+
+ var old = this.current;
+ this.stateStack.push(old);
+ this.current = old.clone();
+ }
+ }, {
+ key: "restore",
+ value: function restore() {
+ if (this.stateStack.length === 0 && this.inSMaskMode) {
+ this.endSMaskMode();
+ }
+
+ if (this.stateStack.length !== 0) {
+ this.current = this.stateStack.pop();
+
+ if (this.inSMaskMode) {
+ this.suspendedCtx.restore();
+ copyCtxState(this.suspendedCtx, this.ctx);
+ } else {
+ this.ctx.restore();
+ }
+
+ this.checkSMaskState();
+ this.pendingClip = null;
+ this._cachedScaleForStroking = null;
+ this._cachedGetSinglePixelWidth = null;
+ }
+ }
+ }, {
+ key: "transform",
+ value: function transform(a, b, c, d, e, f) {
+ this.ctx.transform(a, b, c, d, e, f);
+ this._cachedScaleForStroking = null;
+ this._cachedGetSinglePixelWidth = null;
+ }
+ }, {
+ key: "constructPath",
+ value: function constructPath(ops, args) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var x = current.x,
+ y = current.y;
+ var startX, startY;
+
+ for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
+ switch (ops[i] | 0) {
+ case _util.OPS.rectangle:
+ x = args[j++];
+ y = args[j++];
+ var width = args[j++];
+ var height = args[j++];
+ var xw = x + width;
+ var yh = y + height;
+ ctx.moveTo(x, y);
+
+ if (width === 0 || height === 0) {
+ ctx.lineTo(xw, yh);
+ } else {
+ ctx.lineTo(xw, y);
+ ctx.lineTo(xw, yh);
+ ctx.lineTo(x, yh);
+ }
+
+ current.updatePathMinMax(ctx.mozCurrentTransform, x, y);
+ current.updatePathMinMax(ctx.mozCurrentTransform, xw, yh);
+ ctx.closePath();
+ break;
+
+ case _util.OPS.moveTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.moveTo(x, y);
+ current.updatePathMinMax(ctx.mozCurrentTransform, x, y);
+ break;
+
+ case _util.OPS.lineTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.lineTo(x, y);
+ current.updatePathMinMax(ctx.mozCurrentTransform, x, y);
+ break;
+
+ case _util.OPS.curveTo:
+ startX = x;
+ startY = y;
+ x = args[j + 4];
+ y = args[j + 5];
+ ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
+ current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
+ j += 6;
+ break;
+
+ case _util.OPS.curveTo2:
+ startX = x;
+ startY = y;
+ ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
+ current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
+ x = args[j + 2];
+ y = args[j + 3];
+ j += 4;
+ break;
+
+ case _util.OPS.curveTo3:
+ startX = x;
+ startY = y;
+ x = args[j + 2];
+ y = args[j + 3];
+ ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
+ current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], x, y, x, y);
+ j += 4;
+ break;
+
+ case _util.OPS.closePath:
+ ctx.closePath();
+ break;
+ }
+ }
+
+ current.setCurrentPoint(x, y);
+ }
+ }, {
+ key: "closePath",
+ value: function closePath() {
+ this.ctx.closePath();
+ }
+ }, {
+ key: "stroke",
+ value: function stroke(consumePath) {
+ consumePath = typeof consumePath !== "undefined" ? consumePath : true;
+ var ctx = this.ctx;
+ var strokeColor = this.current.strokeColor;
+ ctx.globalAlpha = this.current.strokeAlpha;
+
+ if (this.contentVisible) {
+ if (_typeof(strokeColor) === "object" && strokeColor !== null && strokeColor !== void 0 && strokeColor.getPattern) {
+ ctx.save();
+ ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.STROKE);
+ this.rescaleAndStroke(false);
+ ctx.restore();
+ } else {
+ this.rescaleAndStroke(true);
+ }
+ }
+
+ if (consumePath) {
+ this.consumePath(this.current.getClippedPathBoundingBox());
+ }
+
+ ctx.globalAlpha = this.current.fillAlpha;
+ }
+ }, {
+ key: "closeStroke",
+ value: function closeStroke() {
+ this.closePath();
+ this.stroke();
+ }
+ }, {
+ key: "fill",
+ value: function fill(consumePath) {
+ consumePath = typeof consumePath !== "undefined" ? consumePath : true;
+ var ctx = this.ctx;
+ var fillColor = this.current.fillColor;
+ var isPatternFill = this.current.patternFill;
+ var needRestore = false;
+
+ if (isPatternFill) {
+ ctx.save();
+ ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL);
+ needRestore = true;
+ }
+
+ var intersect = this.current.getClippedPathBoundingBox();
+
+ if (this.contentVisible && intersect !== null) {
+ if (this.pendingEOFill) {
+ ctx.fill("evenodd");
+ this.pendingEOFill = false;
+ } else {
+ ctx.fill();
+ }
+ }
+
+ if (needRestore) {
+ ctx.restore();
+ }
+
+ if (consumePath) {
+ this.consumePath(intersect);
+ }
+ }
+ }, {
+ key: "eoFill",
+ value: function eoFill() {
+ this.pendingEOFill = true;
+ this.fill();
+ }
+ }, {
+ key: "fillStroke",
+ value: function fillStroke() {
+ this.fill(false);
+ this.stroke(false);
+ this.consumePath();
+ }
+ }, {
+ key: "eoFillStroke",
+ value: function eoFillStroke() {
+ this.pendingEOFill = true;
+ this.fillStroke();
+ }
+ }, {
+ key: "closeFillStroke",
+ value: function closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ }
+ }, {
+ key: "closeEOFillStroke",
+ value: function closeEOFillStroke() {
+ this.pendingEOFill = true;
+ this.closePath();
+ this.fillStroke();
+ }
+ }, {
+ key: "endPath",
+ value: function endPath() {
+ this.consumePath();
+ }
+ }, {
+ key: "clip",
+ value: function clip() {
+ this.pendingClip = NORMAL_CLIP;
+ }
+ }, {
+ key: "eoClip",
+ value: function eoClip() {
+ this.pendingClip = EO_CLIP;
+ }
+ }, {
+ key: "beginText",
+ value: function beginText() {
+ this.current.textMatrix = _util.IDENTITY_MATRIX;
+ this.current.textMatrixScale = 1;
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ }
+ }, {
+ key: "endText",
+ value: function endText() {
+ var paths = this.pendingTextPaths;
+ var ctx = this.ctx;
+
+ if (paths === undefined) {
+ ctx.beginPath();
+ return;
+ }
+
+ ctx.save();
+ ctx.beginPath();
+
+ for (var i = 0; i < paths.length; i++) {
+ var path = paths[i];
+ ctx.setTransform.apply(ctx, path.transform);
+ ctx.translate(path.x, path.y);
+ path.addToPath(ctx, path.fontSize);
+ }
+
+ ctx.restore();
+ ctx.clip();
+ ctx.beginPath();
+ delete this.pendingTextPaths;
+ }
+ }, {
+ key: "setCharSpacing",
+ value: function setCharSpacing(spacing) {
+ this.current.charSpacing = spacing;
+ }
+ }, {
+ key: "setWordSpacing",
+ value: function setWordSpacing(spacing) {
+ this.current.wordSpacing = spacing;
+ }
+ }, {
+ key: "setHScale",
+ value: function setHScale(scale) {
+ this.current.textHScale = scale / 100;
+ }
+ }, {
+ key: "setLeading",
+ value: function setLeading(leading) {
+ this.current.leading = -leading;
+ }
+ }, {
+ key: "setFont",
+ value: function setFont(fontRefName, size) {
+ var fontObj = this.commonObjs.get(fontRefName);
+ var current = this.current;
+
+ if (!fontObj) {
+ throw new Error("Can't find font for ".concat(fontRefName));
+ }
+
+ current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+
+ if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
+ (0, _util.warn)("Invalid font matrix for font " + fontRefName);
+ }
+
+ if (size < 0) {
+ size = -size;
+ current.fontDirection = -1;
+ } else {
+ current.fontDirection = 1;
+ }
+
+ this.current.font = fontObj;
+ this.current.fontSize = size;
+
+ if (fontObj.isType3Font) {
+ return;
+ }
+
+ var name = fontObj.loadedName || "sans-serif";
+ var bold = "normal";
+
+ if (fontObj.black) {
+ bold = "900";
+ } else if (fontObj.bold) {
+ bold = "bold";
+ }
+
+ var italic = fontObj.italic ? "italic" : "normal";
+ var typeface = "\"".concat(name, "\", ").concat(fontObj.fallbackName);
+ var browserFontSize = size;
+
+ if (size < MIN_FONT_SIZE) {
+ browserFontSize = MIN_FONT_SIZE;
+ } else if (size > MAX_FONT_SIZE) {
+ browserFontSize = MAX_FONT_SIZE;
+ }
+
+ this.current.fontSizeScale = size / browserFontSize;
+ this.ctx.font = document.body.dataset.pdfjsprinting ? "".concat(italic, " ").concat(bold, " ").concat(browserFontSize, "px ").concat(typeface) : "".concat(italic, " ").concat(bold, " ").concat(browserFontSize / 16.0, "em ").concat(typeface);
+ }
+ }, {
+ key: "setTextRenderingMode",
+ value: function setTextRenderingMode(mode) {
+ this.current.textRenderingMode = mode;
+ }
+ }, {
+ key: "setTextRise",
+ value: function setTextRise(rise) {
+ this.current.textRise = rise;
+ }
+ }, {
+ key: "moveText",
+ value: function moveText(x, y) {
+ this.current.x = this.current.lineX += x;
+ this.current.y = this.current.lineY += y;
+ }
+ }, {
+ key: "setLeadingMoveText",
+ value: function setLeadingMoveText(x, y) {
+ this.setLeading(-y);
+ this.moveText(x, y);
+ }
+ }, {
+ key: "setTextMatrix",
+ value: function setTextMatrix(a, b, c, d, e, f) {
+ this.current.textMatrix = [a, b, c, d, e, f];
+ this.current.textMatrixScale = Math.hypot(a, b);
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ }
+ }, {
+ key: "nextLine",
+ value: function nextLine() {
+ this.moveText(0, this.current.leading);
+ }
+ }, {
+ key: "paintChar",
+ value: function paintChar(character, x, y, patternTransform) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var font = current.font;
+ var textRenderingMode = current.textRenderingMode;
+ var fontSize = current.fontSize / current.fontSizeScale;
+ var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+ var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
+ var patternFill = current.patternFill && !font.missingFile;
+ var addToPath;
+
+ if (font.disableFontFace || isAddToPathSet || patternFill) {
+ addToPath = font.getPathGenerator(this.commonObjs, character);
+ }
+
+ if (font.disableFontFace || patternFill) {
+ ctx.save();
+ ctx.translate(x, y);
+ ctx.beginPath();
+ addToPath(ctx, fontSize);
+
+ if (patternTransform) {
+ ctx.setTransform.apply(ctx, patternTransform);
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ ctx.fill();
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ ctx.stroke();
+ }
+
+ ctx.restore();
+ } else {
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ ctx.fillText(character, x, y);
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ ctx.strokeText(character, x, y);
+ }
+ }
+
+ if (isAddToPathSet) {
+ var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
+ paths.push({
+ transform: ctx.mozCurrentTransform,
+ x: x,
+ y: y,
+ fontSize: fontSize,
+ addToPath: addToPath
+ });
+ }
+ }
+ }, {
+ key: "isFontSubpixelAAEnabled",
+ get: function get() {
+ var _this$cachedCanvases$ = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10),
+ ctx = _this$cachedCanvases$.context;
+
+ ctx.scale(1.5, 1);
+ ctx.fillText("I", 0, 10);
+ var data = ctx.getImageData(0, 0, 10, 10).data;
+ var enabled = false;
+
+ for (var i = 3; i < data.length; i += 4) {
+ if (data[i] > 0 && data[i] < 255) {
+ enabled = true;
+ break;
+ }
+ }
+
+ return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled);
+ }
+ }, {
+ key: "showText",
+ value: function showText(glyphs) {
+ var current = this.current;
+ var font = current.font;
+
+ if (font.isType3Font) {
+ return this.showType3Text(glyphs);
+ }
+
+ var fontSize = current.fontSize;
+
+ if (fontSize === 0) {
+ return undefined;
+ }
+
+ var ctx = this.ctx;
+ var fontSizeScale = current.fontSizeScale;
+ var charSpacing = current.charSpacing;
+ var wordSpacing = current.wordSpacing;
+ var fontDirection = current.fontDirection;
+ var textHScale = current.textHScale * fontDirection;
+ var glyphsLength = glyphs.length;
+ var vertical = font.vertical;
+ var spacingDir = vertical ? 1 : -1;
+ var defaultVMetrics = font.defaultVMetrics;
+ var widthAdvanceScale = fontSize * current.fontMatrix[0];
+ var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
+ ctx.save();
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.translate(current.x, current.y + current.textRise);
+
+ if (fontDirection > 0) {
+ ctx.scale(textHScale, -1);
+ } else {
+ ctx.scale(textHScale, 1);
+ }
+
+ var patternTransform;
+
+ if (current.patternFill) {
+ ctx.save();
+ var pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL);
+ patternTransform = ctx.mozCurrentTransform;
+ ctx.restore();
+ ctx.fillStyle = pattern;
+ }
+
+ var lineWidth = current.lineWidth;
+ var scale = current.textMatrixScale;
+
+ if (scale === 0 || lineWidth === 0) {
+ var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ lineWidth = this.getSinglePixelWidth();
+ }
+ } else {
+ lineWidth /= scale;
+ }
+
+ if (fontSizeScale !== 1.0) {
+ ctx.scale(fontSizeScale, fontSizeScale);
+ lineWidth /= fontSizeScale;
+ }
+
+ ctx.lineWidth = lineWidth;
+ var x = 0,
+ i;
+
+ for (i = 0; i < glyphsLength; ++i) {
+ var glyph = glyphs[i];
+
+ if (typeof glyph === "number") {
+ x += spacingDir * glyph * fontSize / 1000;
+ continue;
+ }
+
+ var restoreNeeded = false;
+ var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ var character = glyph.fontChar;
+ var accent = glyph.accent;
+ var scaledX = void 0,
+ scaledY = void 0;
+ var width = glyph.width;
+
+ if (vertical) {
+ var vmetric = glyph.vmetric || defaultVMetrics;
+ var vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;
+ var vy = vmetric[2] * widthAdvanceScale;
+ width = vmetric ? -vmetric[0] : width;
+ scaledX = vx / fontSizeScale;
+ scaledY = (x + vy) / fontSizeScale;
+ } else {
+ scaledX = x / fontSizeScale;
+ scaledY = 0;
+ }
+
+ if (font.remeasure && width > 0) {
+ var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
+
+ if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
+ var characterScaleX = width / measuredWidth;
+ restoreNeeded = true;
+ ctx.save();
+ ctx.scale(characterScaleX, 1);
+ scaledX /= characterScaleX;
+ } else if (width !== measuredWidth) {
+ scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
+ }
+ }
+
+ if (this.contentVisible && (glyph.isInFont || font.missingFile)) {
+ if (simpleFillText && !accent) {
+ ctx.fillText(character, scaledX, scaledY);
+ } else {
+ this.paintChar(character, scaledX, scaledY, patternTransform);
+
+ if (accent) {
+ var scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
+ var scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
+ this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
+ }
+ }
+ }
+
+ var charWidth = void 0;
+
+ if (vertical) {
+ charWidth = width * widthAdvanceScale - spacing * fontDirection;
+ } else {
+ charWidth = width * widthAdvanceScale + spacing * fontDirection;
+ }
+
+ x += charWidth;
+
+ if (restoreNeeded) {
+ ctx.restore();
+ }
+ }
+
+ if (vertical) {
+ current.y -= x;
+ } else {
+ current.x += x * textHScale;
+ }
+
+ ctx.restore();
+ this.compose();
+ return undefined;
+ }
+ }, {
+ key: "showType3Text",
+ value: function showType3Text(glyphs) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var font = current.font;
+ var fontSize = current.fontSize;
+ var fontDirection = current.fontDirection;
+ var spacingDir = font.vertical ? 1 : -1;
+ var charSpacing = current.charSpacing;
+ var wordSpacing = current.wordSpacing;
+ var textHScale = current.textHScale * fontDirection;
+ var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ var glyphsLength = glyphs.length;
+ var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
+ var i, glyph, width, spacingLength;
+
+ if (isTextInvisible || fontSize === 0) {
+ return;
+ }
+
+ this._cachedScaleForStroking = null;
+ this._cachedGetSinglePixelWidth = null;
+ ctx.save();
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.translate(current.x, current.y);
+ ctx.scale(textHScale, fontDirection);
+
+ for (i = 0; i < glyphsLength; ++i) {
+ glyph = glyphs[i];
+
+ if (typeof glyph === "number") {
+ spacingLength = spacingDir * glyph * fontSize / 1000;
+ this.ctx.translate(spacingLength, 0);
+ current.x += spacingLength * textHScale;
+ continue;
+ }
+
+ var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ var operatorList = font.charProcOperatorList[glyph.operatorListId];
+
+ if (!operatorList) {
+ (0, _util.warn)("Type3 character \"".concat(glyph.operatorListId, "\" is not available."));
+ continue;
+ }
+
+ if (this.contentVisible) {
+ this.processingType3 = glyph;
+ this.save();
+ ctx.scale(fontSize, fontSize);
+ ctx.transform.apply(ctx, fontMatrix);
+ this.executeOperatorList(operatorList);
+ this.restore();
+ }
+
+ var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);
+
+ width = transformed[0] * fontSize + spacing;
+ ctx.translate(width, 0);
+ current.x += width * textHScale;
+ }
+
+ ctx.restore();
+ this.processingType3 = null;
+ }
+ }, {
+ key: "setCharWidth",
+ value: function setCharWidth(xWidth, yWidth) {}
+ }, {
+ key: "setCharWidthAndBounds",
+ value: function setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
+ this.ctx.rect(llx, lly, urx - llx, ury - lly);
+ this.clip();
+ this.endPath();
+ }
+ }, {
+ key: "getColorN_Pattern",
+ value: function getColorN_Pattern(IR) {
+ var _this = this;
+
+ var pattern;
+
+ if (IR[0] === "TilingPattern") {
+ var color = IR[1];
+ var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
+ var canvasGraphicsFactory = {
+ createCanvasGraphics: function createCanvasGraphics(ctx) {
+ return new CanvasGraphics(ctx, _this.commonObjs, _this.objs, _this.canvasFactory);
+ }
+ };
+ pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
+ } else {
+ pattern = this._getPattern(IR[1], IR[2]);
+ }
+
+ return pattern;
+ }
+ }, {
+ key: "setStrokeColorN",
+ value: function setStrokeColorN() {
+ this.current.strokeColor = this.getColorN_Pattern(arguments);
+ }
+ }, {
+ key: "setFillColorN",
+ value: function setFillColorN() {
+ this.current.fillColor = this.getColorN_Pattern(arguments);
+ this.current.patternFill = true;
+ }
+ }, {
+ key: "setStrokeRGBColor",
+ value: function setStrokeRGBColor(r, g, b) {
+ var color = _util.Util.makeHexColor(r, g, b);
+
+ this.ctx.strokeStyle = color;
+ this.current.strokeColor = color;
+ }
+ }, {
+ key: "setFillRGBColor",
+ value: function setFillRGBColor(r, g, b) {
+ var color = _util.Util.makeHexColor(r, g, b);
+
+ this.ctx.fillStyle = color;
+ this.current.fillColor = color;
+ this.current.patternFill = false;
+ }
+ }, {
+ key: "_getPattern",
+ value: function _getPattern(objId) {
+ var matrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ var pattern;
+
+ if (this.cachedPatterns.has(objId)) {
+ pattern = this.cachedPatterns.get(objId);
+ } else {
+ pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId));
+ this.cachedPatterns.set(objId, pattern);
+ }
+
+ if (matrix) {
+ pattern.matrix = matrix;
+ }
+
+ return pattern;
+ }
+ }, {
+ key: "shadingFill",
+ value: function shadingFill(objId) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var ctx = this.ctx;
+ this.save();
+
+ var pattern = this._getPattern(objId);
+
+ ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.SHADING);
+ var inv = ctx.mozCurrentTransformInverse;
+
+ if (inv) {
+ var canvas = ctx.canvas;
+ var width = canvas.width;
+ var height = canvas.height;
+
+ var bl = _util.Util.applyTransform([0, 0], inv);
+
+ var br = _util.Util.applyTransform([0, height], inv);
+
+ var ul = _util.Util.applyTransform([width, 0], inv);
+
+ var ur = _util.Util.applyTransform([width, height], inv);
+
+ var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+ var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+ var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+ var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+ this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
+ } else {
+ this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
+ }
+
+ this.compose(this.current.getClippedPathBoundingBox());
+ this.restore();
+ }
+ }, {
+ key: "beginInlineImage",
+ value: function beginInlineImage() {
+ (0, _util.unreachable)("Should not call beginInlineImage");
+ }
+ }, {
+ key: "beginImageData",
+ value: function beginImageData() {
+ (0, _util.unreachable)("Should not call beginImageData");
+ }
+ }, {
+ key: "paintFormXObjectBegin",
+ value: function paintFormXObjectBegin(matrix, bbox) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.save();
+ this.baseTransformStack.push(this.baseTransform);
+
+ if (Array.isArray(matrix) && matrix.length === 6) {
+ this.transform.apply(this, matrix);
+ }
+
+ this.baseTransform = this.ctx.mozCurrentTransform;
+
+ if (bbox) {
+ var width = bbox[2] - bbox[0];
+ var height = bbox[3] - bbox[1];
+ this.ctx.rect(bbox[0], bbox[1], width, height);
+ this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[0], bbox[1]);
+ this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[2], bbox[3]);
+ this.clip();
+ this.endPath();
+ }
+ }
+ }, {
+ key: "paintFormXObjectEnd",
+ value: function paintFormXObjectEnd() {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.restore();
+ this.baseTransform = this.baseTransformStack.pop();
+ }
+ }, {
+ key: "beginGroup",
+ value: function beginGroup(group) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.save();
+
+ if (this.inSMaskMode) {
+ this.endSMaskMode();
+ this.current.activeSMask = null;
+ }
+
+ var currentCtx = this.ctx;
+
+ if (!group.isolated) {
+ (0, _util.info)("TODO: Support non-isolated groups.");
+ }
+
+ if (group.knockout) {
+ (0, _util.warn)("Knockout groups not supported.");
+ }
+
+ var currentTransform = currentCtx.mozCurrentTransform;
+
+ if (group.matrix) {
+ currentCtx.transform.apply(currentCtx, group.matrix);
+ }
+
+ if (!group.bbox) {
+ throw new Error("Bounding box is required.");
+ }
+
+ var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);
+
+ var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
+ bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
+ var offsetX = Math.floor(bounds[0]);
+ var offsetY = Math.floor(bounds[1]);
+ var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
+ var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
+ var scaleX = 1,
+ scaleY = 1;
+
+ if (drawnWidth > MAX_GROUP_SIZE) {
+ scaleX = drawnWidth / MAX_GROUP_SIZE;
+ drawnWidth = MAX_GROUP_SIZE;
+ }
+
+ if (drawnHeight > MAX_GROUP_SIZE) {
+ scaleY = drawnHeight / MAX_GROUP_SIZE;
+ drawnHeight = MAX_GROUP_SIZE;
+ }
+
+ this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);
+ var cacheId = "groupAt" + this.groupLevel;
+
+ if (group.smask) {
+ cacheId += "_smask_" + this.smaskCounter++ % 2;
+ }
+
+ var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+ var groupCtx = scratchCanvas.context;
+ groupCtx.scale(1 / scaleX, 1 / scaleY);
+ groupCtx.translate(-offsetX, -offsetY);
+ groupCtx.transform.apply(groupCtx, currentTransform);
+
+ if (group.smask) {
+ this.smaskStack.push({
+ canvas: scratchCanvas.canvas,
+ context: groupCtx,
+ offsetX: offsetX,
+ offsetY: offsetY,
+ scaleX: scaleX,
+ scaleY: scaleY,
+ subtype: group.smask.subtype,
+ backdrop: group.smask.backdrop,
+ transferMap: group.smask.transferMap || null,
+ startTransformInverse: null
+ });
+ } else {
+ currentCtx.setTransform(1, 0, 0, 1, 0, 0);
+ currentCtx.translate(offsetX, offsetY);
+ currentCtx.scale(scaleX, scaleY);
+ currentCtx.save();
+ }
+
+ copyCtxState(currentCtx, groupCtx);
+ this.ctx = groupCtx;
+ this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
+ this.groupStack.push(currentCtx);
+ this.groupLevel++;
+ }
+ }, {
+ key: "endGroup",
+ value: function endGroup(group) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.groupLevel--;
+ var groupCtx = this.ctx;
+ var ctx = this.groupStack.pop();
+ this.ctx = ctx;
+ this.ctx.imageSmoothingEnabled = false;
+
+ if (group.smask) {
+ this.tempSMask = this.smaskStack.pop();
+ this.restore();
+ } else {
+ this.ctx.restore();
+ var currentMtx = this.ctx.mozCurrentTransform;
+ this.restore();
+ this.ctx.save();
+ this.ctx.setTransform.apply(this.ctx, currentMtx);
+
+ var dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx);
+
+ this.ctx.drawImage(groupCtx.canvas, 0, 0);
+ this.ctx.restore();
+ this.compose(dirtyBox);
+ }
+ }
+ }, {
+ key: "beginAnnotations",
+ value: function beginAnnotations() {
+ this.save();
+
+ if (this.baseTransform) {
+ this.ctx.setTransform.apply(this.ctx, this.baseTransform);
+ }
+ }
+ }, {
+ key: "endAnnotations",
+ value: function endAnnotations() {
+ this.restore();
+ }
+ }, {
+ key: "beginAnnotation",
+ value: function beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {
+ this.save();
+
+ if (Array.isArray(rect) && rect.length === 4) {
+ var width = rect[2] - rect[0];
+ var height = rect[3] - rect[1];
+
+ if (hasOwnCanvas && this.annotationCanvasMap) {
+ transform = transform.slice();
+ transform[4] -= rect[0];
+ transform[5] -= rect[1];
+ rect = rect.slice();
+ rect[0] = rect[1] = 0;
+ rect[2] = width;
+ rect[3] = height;
+
+ var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(this.ctx.mozCurrentTransform),
+ _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2),
+ scaleX = _Util$singularValueDe2[0],
+ scaleY = _Util$singularValueDe2[1];
+
+ var viewportScale = this.viewportScale;
+ var canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);
+ var canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);
+ this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);
+ var _this$annotationCanva = this.annotationCanvas,
+ canvas = _this$annotationCanva.canvas,
+ context = _this$annotationCanva.context;
+ canvas.style.width = "calc(".concat(width, "px * var(--viewport-scale-factor))");
+ canvas.style.height = "calc(".concat(height, "px * var(--viewport-scale-factor))");
+ this.annotationCanvasMap.set(id, canvas);
+ this.annotationCanvas.savedCtx = this.ctx;
+ this.ctx = context;
+ this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);
+ addContextCurrentTransform(this.ctx);
+ resetCtxToDefault(this.ctx);
+ } else {
+ resetCtxToDefault(this.ctx);
+ this.ctx.rect(rect[0], rect[1], width, height);
+ this.clip();
+ this.endPath();
+ }
+ }
+
+ this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
+ this.transform.apply(this, transform);
+ this.transform.apply(this, matrix);
+ }
+ }, {
+ key: "endAnnotation",
+ value: function endAnnotation() {
+ if (this.annotationCanvas) {
+ this.ctx = this.annotationCanvas.savedCtx;
+ delete this.annotationCanvas.savedCtx;
+ delete this.annotationCanvas;
+ }
+
+ this.restore();
+ }
+ }, {
+ key: "paintImageMaskXObject",
+ value: function paintImageMaskXObject(img) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var ctx = this.ctx;
+ var width = img.width,
+ height = img.height;
+ var glyph = this.processingType3;
+
+ if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
+ if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
+ glyph.compiled = compileType3Glyph({
+ data: img.data,
+ width: width,
+ height: height
+ });
+ } else {
+ glyph.compiled = null;
+ }
+ }
+
+ if (glyph !== null && glyph !== void 0 && glyph.compiled) {
+ glyph.compiled(ctx);
+ return;
+ }
+
+ var mask = this._createMaskCanvas(img);
+
+ var maskCanvas = mask.canvas;
+ ctx.save();
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);
+ ctx.restore();
+ this.compose();
+ }
+ }, {
+ key: "paintImageMaskXObjectRepeat",
+ value: function paintImageMaskXObjectRepeat(imgData, scaleX) {
+ var skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+ var skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
+ var scaleY = arguments.length > 4 ? arguments[4] : undefined;
+ var positions = arguments.length > 5 ? arguments[5] : undefined;
+
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var ctx = this.ctx;
+ ctx.save();
+ var currentTransform = ctx.mozCurrentTransform;
+ ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);
+
+ var mask = this._createMaskCanvas(imgData);
+
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+
+ for (var i = 0, ii = positions.length; i < ii; i += 2) {
+ var trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);
+
+ var _Util$applyTransform3 = _util.Util.applyTransform([0, 0], trans),
+ _Util$applyTransform4 = _slicedToArray(_Util$applyTransform3, 2),
+ x = _Util$applyTransform4[0],
+ y = _Util$applyTransform4[1];
+
+ ctx.drawImage(mask.canvas, x, y);
+ }
+
+ ctx.restore();
+ this.compose();
+ }
+ }, {
+ key: "paintImageMaskXObjectGroup",
+ value: function paintImageMaskXObjectGroup(images) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var ctx = this.ctx;
+ var fillColor = this.current.fillColor;
+ var isPatternFill = this.current.patternFill;
+
+ for (var i = 0, ii = images.length; i < ii; i++) {
+ var image = images[i];
+ var width = image.width,
+ height = image.height;
+ var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+ var maskCtx = maskCanvas.context;
+ maskCtx.save();
+ putBinaryImageMask(maskCtx, image);
+ maskCtx.globalCompositeOperation = "source-in";
+ maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL) : fillColor;
+ maskCtx.fillRect(0, 0, width, height);
+ maskCtx.restore();
+ ctx.save();
+ ctx.transform.apply(ctx, image.transform);
+ ctx.scale(1, -1);
+ ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
+ ctx.restore();
+ }
+
+ this.compose();
+ }
+ }, {
+ key: "paintImageXObject",
+ value: function paintImageXObject(objId) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)("Dependent image isn't ready yet");
+ return;
+ }
+
+ this.paintInlineImageXObject(imgData);
+ }
+ }, {
+ key: "paintImageXObjectRepeat",
+ value: function paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)("Dependent image isn't ready yet");
+ return;
+ }
+
+ var width = imgData.width;
+ var height = imgData.height;
+ var map = [];
+
+ for (var i = 0, ii = positions.length; i < ii; i += 2) {
+ map.push({
+ transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
+ x: 0,
+ y: 0,
+ w: width,
+ h: height
+ });
+ }
+
+ this.paintInlineImageXObjectGroup(imgData, map);
+ }
+ }, {
+ key: "paintInlineImageXObject",
+ value: function paintInlineImageXObject(imgData) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var width = imgData.width;
+ var height = imgData.height;
+ var ctx = this.ctx;
+ this.save();
+ ctx.scale(1 / width, -1 / height);
+ var imgToPaint;
+
+ if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
+ imgToPaint = imgData;
+ } else {
+ var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
+ var tmpCtx = tmpCanvas.context;
+ putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
+ imgToPaint = tmpCanvas.canvas;
+ }
+
+ var scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse);
+
+ ctx.imageSmoothingEnabled = getImageSmoothingEnabled(ctx.mozCurrentTransform, imgData.interpolate);
+ ctx.drawImage(scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);
+
+ if (this.imageLayer) {
+ var position = this.getCanvasPosition(0, -height);
+ this.imageLayer.appendImage({
+ imgData: imgData,
+ left: position[0],
+ top: position[1],
+ width: width / ctx.mozCurrentTransformInverse[0],
+ height: height / ctx.mozCurrentTransformInverse[3]
+ });
+ }
+
+ this.compose();
+ this.restore();
+ }
+ }, {
+ key: "paintInlineImageXObjectGroup",
+ value: function paintInlineImageXObjectGroup(imgData, map) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ var ctx = this.ctx;
+ var w = imgData.width;
+ var h = imgData.height;
+ var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
+ var tmpCtx = tmpCanvas.context;
+ putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
+
+ for (var i = 0, ii = map.length; i < ii; i++) {
+ var entry = map[i];
+ ctx.save();
+ ctx.transform.apply(ctx, entry.transform);
+ ctx.scale(1, -1);
+ ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
+
+ if (this.imageLayer) {
+ var position = this.getCanvasPosition(entry.x, entry.y);
+ this.imageLayer.appendImage({
+ imgData: imgData,
+ left: position[0],
+ top: position[1],
+ width: w,
+ height: h
+ });
+ }
+
+ ctx.restore();
+ }
+
+ this.compose();
+ }
+ }, {
+ key: "paintSolidColorImageMask",
+ value: function paintSolidColorImageMask() {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.ctx.fillRect(0, 0, 1, 1);
+ this.compose();
+ }
+ }, {
+ key: "markPoint",
+ value: function markPoint(tag) {}
+ }, {
+ key: "markPointProps",
+ value: function markPointProps(tag, properties) {}
+ }, {
+ key: "beginMarkedContent",
+ value: function beginMarkedContent(tag) {
+ this.markedContentStack.push({
+ visible: true
+ });
+ }
+ }, {
+ key: "beginMarkedContentProps",
+ value: function beginMarkedContentProps(tag, properties) {
+ if (tag === "OC") {
+ this.markedContentStack.push({
+ visible: this.optionalContentConfig.isVisible(properties)
+ });
+ } else {
+ this.markedContentStack.push({
+ visible: true
+ });
+ }
+
+ this.contentVisible = this.isContentVisible();
+ }
+ }, {
+ key: "endMarkedContent",
+ value: function endMarkedContent() {
+ this.markedContentStack.pop();
+ this.contentVisible = this.isContentVisible();
+ }
+ }, {
+ key: "beginCompat",
+ value: function beginCompat() {}
+ }, {
+ key: "endCompat",
+ value: function endCompat() {}
+ }, {
+ key: "consumePath",
+ value: function consumePath(clipBox) {
+ if (this.pendingClip) {
+ this.current.updateClipFromPath();
+ }
+
+ if (!this.pendingClip) {
+ this.compose(clipBox);
+ }
+
+ var ctx = this.ctx;
+
+ if (this.pendingClip) {
+ if (this.pendingClip === EO_CLIP) {
+ ctx.clip("evenodd");
+ } else {
+ ctx.clip();
+ }
+
+ this.pendingClip = null;
+ }
+
+ this.current.startNewPathAndClipBox(this.current.clipBox);
+ ctx.beginPath();
+ }
+ }, {
+ key: "getSinglePixelWidth",
+ value: function getSinglePixelWidth() {
+ if (!this._cachedGetSinglePixelWidth) {
+ var m = this.ctx.mozCurrentTransform;
+
+ if (m[1] === 0 && m[2] === 0) {
+ this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));
+ } else {
+ var absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);
+ var normX = Math.hypot(m[0], m[2]);
+ var normY = Math.hypot(m[1], m[3]);
+ this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;
+ }
+ }
+
+ return this._cachedGetSinglePixelWidth;
+ }
+ }, {
+ key: "getScaleForStroking",
+ value: function getScaleForStroking() {
+ if (!this._cachedScaleForStroking) {
+ var lineWidth = this.current.lineWidth;
+ var m = this.ctx.mozCurrentTransform;
+ var scaleX, scaleY;
+
+ if (m[1] === 0 && m[2] === 0) {
+ var normX = Math.abs(m[0]);
+ var normY = Math.abs(m[3]);
+
+ if (lineWidth === 0) {
+ scaleX = 1 / normX;
+ scaleY = 1 / normY;
+ } else {
+ var scaledXLineWidth = normX * lineWidth;
+ var scaledYLineWidth = normY * lineWidth;
+ scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;
+ scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;
+ }
+ } else {
+ var absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);
+
+ var _normX = Math.hypot(m[0], m[1]);
+
+ var _normY = Math.hypot(m[2], m[3]);
+
+ if (lineWidth === 0) {
+ scaleX = _normY / absDet;
+ scaleY = _normX / absDet;
+ } else {
+ var baseArea = lineWidth * absDet;
+ scaleX = _normY > baseArea ? _normY / baseArea : 1;
+ scaleY = _normX > baseArea ? _normX / baseArea : 1;
+ }
+ }
+
+ this._cachedScaleForStroking = [scaleX, scaleY];
+ }
+
+ return this._cachedScaleForStroking;
+ }
+ }, {
+ key: "rescaleAndStroke",
+ value: function rescaleAndStroke(saveRestore) {
+ var ctx = this.ctx;
+ var lineWidth = this.current.lineWidth;
+
+ var _this$getScaleForStro = this.getScaleForStroking(),
+ _this$getScaleForStro2 = _slicedToArray(_this$getScaleForStro, 2),
+ scaleX = _this$getScaleForStro2[0],
+ scaleY = _this$getScaleForStro2[1];
+
+ ctx.lineWidth = lineWidth || 1;
+
+ if (scaleX === 1 && scaleY === 1) {
+ ctx.stroke();
+ return;
+ }
+
+ var savedMatrix, savedDashes, savedDashOffset;
+
+ if (saveRestore) {
+ savedMatrix = ctx.mozCurrentTransform.slice();
+ savedDashes = ctx.getLineDash().slice();
+ savedDashOffset = ctx.lineDashOffset;
+ }
+
+ ctx.scale(scaleX, scaleY);
+ var scale = Math.max(scaleX, scaleY);
+ ctx.setLineDash(ctx.getLineDash().map(function (x) {
+ return x / scale;
+ }));
+ ctx.lineDashOffset /= scale;
+ ctx.stroke();
+
+ if (saveRestore) {
+ ctx.setTransform.apply(ctx, _toConsumableArray(savedMatrix));
+ ctx.setLineDash(savedDashes);
+ ctx.lineDashOffset = savedDashOffset;
+ }
+ }
+ }, {
+ key: "getCanvasPosition",
+ value: function getCanvasPosition(x, y) {
+ var transform = this.ctx.mozCurrentTransform;
+ return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];
+ }
+ }, {
+ key: "isContentVisible",
+ value: function isContentVisible() {
+ for (var i = this.markedContentStack.length - 1; i >= 0; i--) {
+ if (!this.markedContentStack[i].visible) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }]);
+
+ return CanvasGraphics;
+}();
+
+exports.CanvasGraphics = CanvasGraphics;
+
+for (var op in _util.OPS) {
+ if (CanvasGraphics.prototype[op] !== undefined) {
+ CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
+ }
+}
+
+/***/ }),
+/* 152 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.TilingPattern = exports.PathType = void 0;
+exports.getShadingPattern = getShadingPattern;
+
+var _util = __w_pdfjs_require__(1);
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var PathType = {
+ FILL: "Fill",
+ STROKE: "Stroke",
+ SHADING: "Shading"
+};
+exports.PathType = PathType;
+
+function applyBoundingBox(ctx, bbox) {
+ if (!bbox || typeof Path2D === "undefined") {
+ return;
+ }
+
+ var width = bbox[2] - bbox[0];
+ var height = bbox[3] - bbox[1];
+ var region = new Path2D();
+ region.rect(bbox[0], bbox[1], width, height);
+ ctx.clip(region);
+}
+
+var BaseShadingPattern = /*#__PURE__*/function () {
+ function BaseShadingPattern() {
+ _classCallCheck(this, BaseShadingPattern);
+
+ if (this.constructor === BaseShadingPattern) {
+ (0, _util.unreachable)("Cannot initialize BaseShadingPattern.");
+ }
+ }
+
+ _createClass(BaseShadingPattern, [{
+ key: "getPattern",
+ value: function getPattern() {
+ (0, _util.unreachable)("Abstract method `getPattern` called.");
+ }
+ }]);
+
+ return BaseShadingPattern;
+}();
+
+var RadialAxialShadingPattern = /*#__PURE__*/function (_BaseShadingPattern) {
+ _inherits(RadialAxialShadingPattern, _BaseShadingPattern);
+
+ var _super = _createSuper(RadialAxialShadingPattern);
+
+ function RadialAxialShadingPattern(IR) {
+ var _this;
+
+ _classCallCheck(this, RadialAxialShadingPattern);
+
+ _this = _super.call(this);
+ _this._type = IR[1];
+ _this._bbox = IR[2];
+ _this._colorStops = IR[3];
+ _this._p0 = IR[4];
+ _this._p1 = IR[5];
+ _this._r0 = IR[6];
+ _this._r1 = IR[7];
+ _this.matrix = null;
+ return _this;
+ }
+
+ _createClass(RadialAxialShadingPattern, [{
+ key: "_createGradient",
+ value: function _createGradient(ctx) {
+ var grad;
+
+ if (this._type === "axial") {
+ grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]);
+ } else if (this._type === "radial") {
+ grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1);
+ }
+
+ var _iterator = _createForOfIteratorHelper(this._colorStops),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var colorStop = _step.value;
+ grad.addColorStop(colorStop[0], colorStop[1]);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ return grad;
+ }
+ }, {
+ key: "getPattern",
+ value: function getPattern(ctx, owner, inverse, pathType) {
+ var pattern;
+
+ if (pathType === PathType.STROKE || pathType === PathType.FILL) {
+ var ownerBBox = owner.current.getClippedPathBoundingBox(pathType, ctx.mozCurrentTransform) || [0, 0, 0, 0];
+ var width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;
+ var height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;
+ var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true);
+ var tmpCtx = tmpCanvas.context;
+ tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
+ tmpCtx.beginPath();
+ tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
+ tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);
+ inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);
+ tmpCtx.transform.apply(tmpCtx, owner.baseTransform);
+
+ if (this.matrix) {
+ tmpCtx.transform.apply(tmpCtx, this.matrix);
+ }
+
+ applyBoundingBox(tmpCtx, this._bbox);
+ tmpCtx.fillStyle = this._createGradient(tmpCtx);
+ tmpCtx.fill();
+ pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat");
+ var domMatrix = new DOMMatrix(inverse);
+
+ try {
+ pattern.setTransform(domMatrix);
+ } catch (ex) {
+ (0, _util.warn)("RadialAxialShadingPattern.getPattern: \"".concat(ex === null || ex === void 0 ? void 0 : ex.message, "\"."));
+ }
+ } else {
+ applyBoundingBox(ctx, this._bbox);
+ pattern = this._createGradient(ctx);
+ }
+
+ return pattern;
+ }
+ }]);
+
+ return RadialAxialShadingPattern;
+}(BaseShadingPattern);
+
+function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
+ var coords = context.coords,
+ colors = context.colors;
+ var bytes = data.data,
+ rowSize = data.width * 4;
+ var tmp;
+
+ if (coords[p1 + 1] > coords[p2 + 1]) {
+ tmp = p1;
+ p1 = p2;
+ p2 = tmp;
+ tmp = c1;
+ c1 = c2;
+ c2 = tmp;
+ }
+
+ if (coords[p2 + 1] > coords[p3 + 1]) {
+ tmp = p2;
+ p2 = p3;
+ p3 = tmp;
+ tmp = c2;
+ c2 = c3;
+ c3 = tmp;
+ }
+
+ if (coords[p1 + 1] > coords[p2 + 1]) {
+ tmp = p1;
+ p1 = p2;
+ p2 = tmp;
+ tmp = c1;
+ c1 = c2;
+ c2 = tmp;
+ }
+
+ var x1 = (coords[p1] + context.offsetX) * context.scaleX;
+ var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
+ var x2 = (coords[p2] + context.offsetX) * context.scaleX;
+ var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
+ var x3 = (coords[p3] + context.offsetX) * context.scaleX;
+ var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
+
+ if (y1 >= y3) {
+ return;
+ }
+
+ var c1r = colors[c1],
+ c1g = colors[c1 + 1],
+ c1b = colors[c1 + 2];
+ var c2r = colors[c2],
+ c2g = colors[c2 + 1],
+ c2b = colors[c2 + 2];
+ var c3r = colors[c3],
+ c3g = colors[c3 + 1],
+ c3b = colors[c3 + 2];
+ var minY = Math.round(y1),
+ maxY = Math.round(y3);
+ var xa, car, cag, cab;
+ var xb, cbr, cbg, cbb;
+
+ for (var y = minY; y <= maxY; y++) {
+ if (y < y2) {
+ var _k = void 0;
+
+ if (y < y1) {
+ _k = 0;
+ } else {
+ _k = (y1 - y) / (y1 - y2);
+ }
+
+ xa = x1 - (x1 - x2) * _k;
+ car = c1r - (c1r - c2r) * _k;
+ cag = c1g - (c1g - c2g) * _k;
+ cab = c1b - (c1b - c2b) * _k;
+ } else {
+ var _k2 = void 0;
+
+ if (y > y3) {
+ _k2 = 1;
+ } else if (y2 === y3) {
+ _k2 = 0;
+ } else {
+ _k2 = (y2 - y) / (y2 - y3);
+ }
+
+ xa = x2 - (x2 - x3) * _k2;
+ car = c2r - (c2r - c3r) * _k2;
+ cag = c2g - (c2g - c3g) * _k2;
+ cab = c2b - (c2b - c3b) * _k2;
+ }
+
+ var k = void 0;
+
+ if (y < y1) {
+ k = 0;
+ } else if (y > y3) {
+ k = 1;
+ } else {
+ k = (y1 - y) / (y1 - y3);
+ }
+
+ xb = x1 - (x1 - x3) * k;
+ cbr = c1r - (c1r - c3r) * k;
+ cbg = c1g - (c1g - c3g) * k;
+ cbb = c1b - (c1b - c3b) * k;
+ var x1_ = Math.round(Math.min(xa, xb));
+ var x2_ = Math.round(Math.max(xa, xb));
+ var j = rowSize * y + x1_ * 4;
+
+ for (var x = x1_; x <= x2_; x++) {
+ k = (xa - x) / (xa - xb);
+
+ if (k < 0) {
+ k = 0;
+ } else if (k > 1) {
+ k = 1;
+ }
+
+ bytes[j++] = car - (car - cbr) * k | 0;
+ bytes[j++] = cag - (cag - cbg) * k | 0;
+ bytes[j++] = cab - (cab - cbb) * k | 0;
+ bytes[j++] = 255;
+ }
+ }
+}
+
+function drawFigure(data, figure, context) {
+ var ps = figure.coords;
+ var cs = figure.colors;
+ var i, ii;
+
+ switch (figure.type) {
+ case "lattice":
+ var verticesPerRow = figure.verticesPerRow;
+ var rows = Math.floor(ps.length / verticesPerRow) - 1;
+ var cols = verticesPerRow - 1;
+
+ for (i = 0; i < rows; i++) {
+ var q = i * verticesPerRow;
+
+ for (var j = 0; j < cols; j++, q++) {
+ drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
+ drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
+ }
+ }
+
+ break;
+
+ case "triangles":
+ for (i = 0, ii = ps.length; i < ii; i += 3) {
+ drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
+ }
+
+ break;
+
+ default:
+ throw new Error("illegal figure");
+ }
+}
+
+var MeshShadingPattern = /*#__PURE__*/function (_BaseShadingPattern2) {
+ _inherits(MeshShadingPattern, _BaseShadingPattern2);
+
+ var _super2 = _createSuper(MeshShadingPattern);
+
+ function MeshShadingPattern(IR) {
+ var _this2;
+
+ _classCallCheck(this, MeshShadingPattern);
+
+ _this2 = _super2.call(this);
+ _this2._coords = IR[2];
+ _this2._colors = IR[3];
+ _this2._figures = IR[4];
+ _this2._bounds = IR[5];
+ _this2._bbox = IR[7];
+ _this2._background = IR[8];
+ _this2.matrix = null;
+ return _this2;
+ }
+
+ _createClass(MeshShadingPattern, [{
+ key: "_createMeshCanvas",
+ value: function _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {
+ var EXPECTED_SCALE = 1.1;
+ var MAX_PATTERN_SIZE = 3000;
+ var BORDER_SIZE = 2;
+ var offsetX = Math.floor(this._bounds[0]);
+ var offsetY = Math.floor(this._bounds[1]);
+ var boundsWidth = Math.ceil(this._bounds[2]) - offsetX;
+ var boundsHeight = Math.ceil(this._bounds[3]) - offsetY;
+ var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+ var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+ var scaleX = boundsWidth / width;
+ var scaleY = boundsHeight / height;
+ var context = {
+ coords: this._coords,
+ colors: this._colors,
+ offsetX: -offsetX,
+ offsetY: -offsetY,
+ scaleX: 1 / scaleX,
+ scaleY: 1 / scaleY
+ };
+ var paddedWidth = width + BORDER_SIZE * 2;
+ var paddedHeight = height + BORDER_SIZE * 2;
+ var tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
+ var tmpCtx = tmpCanvas.context;
+ var data = tmpCtx.createImageData(width, height);
+
+ if (backgroundColor) {
+ var bytes = data.data;
+
+ for (var i = 0, ii = bytes.length; i < ii; i += 4) {
+ bytes[i] = backgroundColor[0];
+ bytes[i + 1] = backgroundColor[1];
+ bytes[i + 2] = backgroundColor[2];
+ bytes[i + 3] = 255;
+ }
+ }
+
+ var _iterator2 = _createForOfIteratorHelper(this._figures),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var figure = _step2.value;
+ drawFigure(data, figure, context);
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
+ var canvas = tmpCanvas.canvas;
+ return {
+ canvas: canvas,
+ offsetX: offsetX - BORDER_SIZE * scaleX,
+ offsetY: offsetY - BORDER_SIZE * scaleY,
+ scaleX: scaleX,
+ scaleY: scaleY
+ };
+ }
+ }, {
+ key: "getPattern",
+ value: function getPattern(ctx, owner, inverse, pathType) {
+ applyBoundingBox(ctx, this._bbox);
+ var scale;
+
+ if (pathType === PathType.SHADING) {
+ scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
+ } else {
+ scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
+
+ if (this.matrix) {
+ var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
+
+ scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
+ }
+ }
+
+ var temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases);
+
+ if (pathType !== PathType.SHADING) {
+ ctx.setTransform.apply(ctx, owner.baseTransform);
+
+ if (this.matrix) {
+ ctx.transform.apply(ctx, this.matrix);
+ }
+ }
+
+ ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
+ ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
+ return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
+ }
+ }]);
+
+ return MeshShadingPattern;
+}(BaseShadingPattern);
+
+var DummyShadingPattern = /*#__PURE__*/function (_BaseShadingPattern3) {
+ _inherits(DummyShadingPattern, _BaseShadingPattern3);
+
+ var _super3 = _createSuper(DummyShadingPattern);
+
+ function DummyShadingPattern() {
+ _classCallCheck(this, DummyShadingPattern);
+
+ return _super3.apply(this, arguments);
+ }
+
+ _createClass(DummyShadingPattern, [{
+ key: "getPattern",
+ value: function getPattern() {
+ return "hotpink";
+ }
+ }]);
+
+ return DummyShadingPattern;
+}(BaseShadingPattern);
+
+function getShadingPattern(IR) {
+ switch (IR[0]) {
+ case "RadialAxial":
+ return new RadialAxialShadingPattern(IR);
+
+ case "Mesh":
+ return new MeshShadingPattern(IR);
+
+ case "Dummy":
+ return new DummyShadingPattern();
+ }
+
+ throw new Error("Unknown IR type: ".concat(IR[0]));
+}
+
+var PaintType = {
+ COLORED: 1,
+ UNCOLORED: 2
+};
+
+var TilingPattern = /*#__PURE__*/function () {
+ function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
+ _classCallCheck(this, TilingPattern);
+
+ this.operatorList = IR[2];
+ this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
+ this.bbox = IR[4];
+ this.xstep = IR[5];
+ this.ystep = IR[6];
+ this.paintType = IR[7];
+ this.tilingType = IR[8];
+ this.color = color;
+ this.ctx = ctx;
+ this.canvasGraphicsFactory = canvasGraphicsFactory;
+ this.baseTransform = baseTransform;
+ }
+
+ _createClass(TilingPattern, [{
+ key: "createPatternCanvas",
+ value: function createPatternCanvas(owner) {
+ var operatorList = this.operatorList;
+ var bbox = this.bbox;
+ var xstep = this.xstep;
+ var ystep = this.ystep;
+ var paintType = this.paintType;
+ var tilingType = this.tilingType;
+ var color = this.color;
+ var canvasGraphicsFactory = this.canvasGraphicsFactory;
+ (0, _util.info)("TilingType: " + tilingType);
+ var x0 = bbox[0],
+ y0 = bbox[1],
+ x1 = bbox[2],
+ y1 = bbox[3];
+
+ var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
+
+ var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
+
+ var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
+ var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
+ var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
+ var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
+ var tmpCtx = tmpCanvas.context;
+ var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
+ graphics.groupLevel = owner.groupLevel;
+ this.setFillAndStrokeStyleToContext(graphics, paintType, color);
+ var adjustedX0 = x0;
+ var adjustedY0 = y0;
+ var adjustedX1 = x1;
+ var adjustedY1 = y1;
+
+ if (x0 < 0) {
+ adjustedX0 = 0;
+ adjustedX1 += Math.abs(x0);
+ }
+
+ if (y0 < 0) {
+ adjustedY0 = 0;
+ adjustedY1 += Math.abs(y0);
+ }
+
+ tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));
+ graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
+ tmpCtx.save();
+ this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);
+ graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice();
+ graphics.executeOperatorList(operatorList);
+ graphics.endDrawing();
+ return {
+ canvas: tmpCanvas.canvas,
+ scaleX: dimx.scale,
+ scaleY: dimy.scale,
+ offsetX: adjustedX0,
+ offsetY: adjustedY0
+ };
+ }
+ }, {
+ key: "getSizeAndScale",
+ value: function getSizeAndScale(step, realOutputSize, scale) {
+ step = Math.abs(step);
+ var maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);
+ var size = Math.ceil(step * scale);
+
+ if (size >= maxSize) {
+ size = maxSize;
+ } else {
+ scale = size / step;
+ }
+
+ return {
+ scale: scale,
+ size: size
+ };
+ }
+ }, {
+ key: "clipBbox",
+ value: function clipBbox(graphics, x0, y0, x1, y1) {
+ var bboxWidth = x1 - x0;
+ var bboxHeight = y1 - y0;
+ graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
+ graphics.clip();
+ graphics.endPath();
+ }
+ }, {
+ key: "setFillAndStrokeStyleToContext",
+ value: function setFillAndStrokeStyleToContext(graphics, paintType, color) {
+ var context = graphics.ctx,
+ current = graphics.current;
+
+ switch (paintType) {
+ case PaintType.COLORED:
+ var ctx = this.ctx;
+ context.fillStyle = ctx.fillStyle;
+ context.strokeStyle = ctx.strokeStyle;
+ current.fillColor = ctx.fillStyle;
+ current.strokeColor = ctx.strokeStyle;
+ break;
+
+ case PaintType.UNCOLORED:
+ var cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]);
+
+ context.fillStyle = cssColor;
+ context.strokeStyle = cssColor;
+ current.fillColor = cssColor;
+ current.strokeColor = cssColor;
+ break;
+
+ default:
+ throw new _util.FormatError("Unsupported paint type: ".concat(paintType));
+ }
+ }
+ }, {
+ key: "getPattern",
+ value: function getPattern(ctx, owner, inverse, pathType) {
+ var matrix = inverse;
+
+ if (pathType !== PathType.SHADING) {
+ matrix = _util.Util.transform(matrix, owner.baseTransform);
+
+ if (this.matrix) {
+ matrix = _util.Util.transform(matrix, this.matrix);
+ }
+ }
+
+ var temporaryPatternCanvas = this.createPatternCanvas(owner);
+ var domMatrix = new DOMMatrix(matrix);
+ domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
+ domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);
+ var pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat");
+
+ try {
+ pattern.setTransform(domMatrix);
+ } catch (ex) {
+ (0, _util.warn)("TilingPattern.getPattern: \"".concat(ex === null || ex === void 0 ? void 0 : ex.message, "\"."));
+ }
+
+ return pattern;
+ }
+ }], [{
+ key: "MAX_PATTERN_SIZE",
+ get: function get() {
+ return (0, _util.shadow)(this, "MAX_PATTERN_SIZE", 3000);
+ }
+ }]);
+
+ return TilingPattern;
+}();
+
+exports.TilingPattern = TilingPattern;
+
+/***/ }),
+/* 153 */
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.GlobalWorkerOptions = void 0;
+var GlobalWorkerOptions = Object.create(null);
+exports.GlobalWorkerOptions = GlobalWorkerOptions;
+GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;
+GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc;
+
+/***/ }),
+/* 154 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.MessageHandler = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+var CallbackKind = {
+ UNKNOWN: 0,
+ DATA: 1,
+ ERROR: 2
+};
+var StreamKind = {
+ UNKNOWN: 0,
+ CANCEL: 1,
+ CANCEL_COMPLETE: 2,
+ CLOSE: 3,
+ ENQUEUE: 4,
+ ERROR: 5,
+ PULL: 6,
+ PULL_COMPLETE: 7,
+ START_COMPLETE: 8
+};
+
+function wrapReason(reason) {
+ if (!(reason instanceof Error || _typeof(reason) === "object" && reason !== null)) {
+ (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.');
+ }
+
+ switch (reason.name) {
+ case "AbortException":
+ return new _util.AbortException(reason.message);
+
+ case "MissingPDFException":
+ return new _util.MissingPDFException(reason.message);
+
+ case "PasswordException":
+ return new _util.PasswordException(reason.message, reason.code);
+
+ case "UnexpectedResponseException":
+ return new _util.UnexpectedResponseException(reason.message, reason.status);
+
+ case "UnknownErrorException":
+ return new _util.UnknownErrorException(reason.message, reason.details);
+
+ default:
+ return new _util.UnknownErrorException(reason.message, reason.toString());
+ }
+}
+
+var MessageHandler = /*#__PURE__*/function () {
+ function MessageHandler(sourceName, targetName, comObj) {
+ var _this = this;
+
+ _classCallCheck(this, MessageHandler);
+
+ this.sourceName = sourceName;
+ this.targetName = targetName;
+ this.comObj = comObj;
+ this.callbackId = 1;
+ this.streamId = 1;
+ this.streamSinks = Object.create(null);
+ this.streamControllers = Object.create(null);
+ this.callbackCapabilities = Object.create(null);
+ this.actionHandler = Object.create(null);
+
+ this._onComObjOnMessage = function (event) {
+ var data = event.data;
+
+ if (data.targetName !== _this.sourceName) {
+ return;
+ }
+
+ if (data.stream) {
+ _this._processStreamMessage(data);
+
+ return;
+ }
+
+ if (data.callback) {
+ var callbackId = data.callbackId;
+ var capability = _this.callbackCapabilities[callbackId];
+
+ if (!capability) {
+ throw new Error("Cannot resolve callback ".concat(callbackId));
+ }
+
+ delete _this.callbackCapabilities[callbackId];
+
+ if (data.callback === CallbackKind.DATA) {
+ capability.resolve(data.data);
+ } else if (data.callback === CallbackKind.ERROR) {
+ capability.reject(wrapReason(data.reason));
+ } else {
+ throw new Error("Unexpected callback case");
+ }
+
+ return;
+ }
+
+ var action = _this.actionHandler[data.action];
+
+ if (!action) {
+ throw new Error("Unknown action from worker: ".concat(data.action));
+ }
+
+ if (data.callbackId) {
+ var cbSourceName = _this.sourceName;
+ var cbTargetName = data.sourceName;
+ new Promise(function (resolve) {
+ resolve(action(data.data));
+ }).then(function (result) {
+ comObj.postMessage({
+ sourceName: cbSourceName,
+ targetName: cbTargetName,
+ callback: CallbackKind.DATA,
+ callbackId: data.callbackId,
+ data: result
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName: cbSourceName,
+ targetName: cbTargetName,
+ callback: CallbackKind.ERROR,
+ callbackId: data.callbackId,
+ reason: wrapReason(reason)
+ });
+ });
+ return;
+ }
+
+ if (data.streamId) {
+ _this._createStreamSink(data);
+
+ return;
+ }
+
+ action(data.data);
+ };
+
+ comObj.addEventListener("message", this._onComObjOnMessage);
+ }
+
+ _createClass(MessageHandler, [{
+ key: "on",
+ value: function on(actionName, handler) {
+ var ah = this.actionHandler;
+
+ if (ah[actionName]) {
+ throw new Error("There is already an actionName called \"".concat(actionName, "\""));
+ }
+
+ ah[actionName] = handler;
+ }
+ }, {
+ key: "send",
+ value: function send(actionName, data, transfers) {
+ this.comObj.postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ data: data
+ }, transfers);
+ }
+ }, {
+ key: "sendWithPromise",
+ value: function sendWithPromise(actionName, data, transfers) {
+ var callbackId = this.callbackId++;
+ var capability = (0, _util.createPromiseCapability)();
+ this.callbackCapabilities[callbackId] = capability;
+
+ try {
+ this.comObj.postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ callbackId: callbackId,
+ data: data
+ }, transfers);
+ } catch (ex) {
+ capability.reject(ex);
+ }
+
+ return capability.promise;
+ }
+ }, {
+ key: "sendWithStream",
+ value: function sendWithStream(actionName, data, queueingStrategy, transfers) {
+ var _this2 = this;
+
+ var streamId = this.streamId++,
+ sourceName = this.sourceName,
+ targetName = this.targetName,
+ comObj = this.comObj;
+ return new ReadableStream({
+ start: function start(controller) {
+ var startCapability = (0, _util.createPromiseCapability)();
+ _this2.streamControllers[streamId] = {
+ controller: controller,
+ startCall: startCapability,
+ pullCall: null,
+ cancelCall: null,
+ isClosed: false
+ };
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ action: actionName,
+ streamId: streamId,
+ data: data,
+ desiredSize: controller.desiredSize
+ }, transfers);
+ return startCapability.promise;
+ },
+ pull: function pull(controller) {
+ var pullCapability = (0, _util.createPromiseCapability)();
+ _this2.streamControllers[streamId].pullCall = pullCapability;
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.PULL,
+ streamId: streamId,
+ desiredSize: controller.desiredSize
+ });
+ return pullCapability.promise;
+ },
+ cancel: function cancel(reason) {
+ (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
+ var cancelCapability = (0, _util.createPromiseCapability)();
+ _this2.streamControllers[streamId].cancelCall = cancelCapability;
+ _this2.streamControllers[streamId].isClosed = true;
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.CANCEL,
+ streamId: streamId,
+ reason: wrapReason(reason)
+ });
+ return cancelCapability.promise;
+ }
+ }, queueingStrategy);
+ }
+ }, {
+ key: "_createStreamSink",
+ value: function _createStreamSink(data) {
+ var streamId = data.streamId,
+ sourceName = this.sourceName,
+ targetName = data.sourceName,
+ comObj = this.comObj;
+ var self = this,
+ action = this.actionHandler[data.action];
+ var streamSink = {
+ enqueue: function enqueue(chunk) {
+ var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
+ var transfers = arguments.length > 2 ? arguments[2] : undefined;
+
+ if (this.isCancelled) {
+ return;
+ }
+
+ var lastDesiredSize = this.desiredSize;
+ this.desiredSize -= size;
+
+ if (lastDesiredSize > 0 && this.desiredSize <= 0) {
+ this.sinkCapability = (0, _util.createPromiseCapability)();
+ this.ready = this.sinkCapability.promise;
+ }
+
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.ENQUEUE,
+ streamId: streamId,
+ chunk: chunk
+ }, transfers);
+ },
+ close: function close() {
+ if (this.isCancelled) {
+ return;
+ }
+
+ this.isCancelled = true;
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.CLOSE,
+ streamId: streamId
+ });
+ delete self.streamSinks[streamId];
+ },
+ error: function error(reason) {
+ (0, _util.assert)(reason instanceof Error, "error must have a valid reason");
+
+ if (this.isCancelled) {
+ return;
+ }
+
+ this.isCancelled = true;
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.ERROR,
+ streamId: streamId,
+ reason: wrapReason(reason)
+ });
+ },
+ sinkCapability: (0, _util.createPromiseCapability)(),
+ onPull: null,
+ onCancel: null,
+ isCancelled: false,
+ desiredSize: data.desiredSize,
+ ready: null
+ };
+ streamSink.sinkCapability.resolve();
+ streamSink.ready = streamSink.sinkCapability.promise;
+ this.streamSinks[streamId] = streamSink;
+ new Promise(function (resolve) {
+ resolve(action(data.data, streamSink));
+ }).then(function () {
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.START_COMPLETE,
+ streamId: streamId,
+ success: true
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.START_COMPLETE,
+ streamId: streamId,
+ reason: wrapReason(reason)
+ });
+ });
+ }
+ }, {
+ key: "_processStreamMessage",
+ value: function _processStreamMessage(data) {
+ var streamId = data.streamId,
+ sourceName = this.sourceName,
+ targetName = data.sourceName,
+ comObj = this.comObj;
+ var streamController = this.streamControllers[streamId],
+ streamSink = this.streamSinks[streamId];
+
+ switch (data.stream) {
+ case StreamKind.START_COMPLETE:
+ if (data.success) {
+ streamController.startCall.resolve();
+ } else {
+ streamController.startCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL_COMPLETE:
+ if (data.success) {
+ streamController.pullCall.resolve();
+ } else {
+ streamController.pullCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL:
+ if (!streamSink) {
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId: streamId,
+ success: true
+ });
+ break;
+ }
+
+ if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {
+ streamSink.sinkCapability.resolve();
+ }
+
+ streamSink.desiredSize = data.desiredSize;
+ new Promise(function (resolve) {
+ resolve(streamSink.onPull && streamSink.onPull());
+ }).then(function () {
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId: streamId,
+ success: true
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId: streamId,
+ reason: wrapReason(reason)
+ });
+ });
+ break;
+
+ case StreamKind.ENQUEUE:
+ (0, _util.assert)(streamController, "enqueue should have stream controller");
+
+ if (streamController.isClosed) {
+ break;
+ }
+
+ streamController.controller.enqueue(data.chunk);
+ break;
+
+ case StreamKind.CLOSE:
+ (0, _util.assert)(streamController, "close should have stream controller");
+
+ if (streamController.isClosed) {
+ break;
+ }
+
+ streamController.isClosed = true;
+ streamController.controller.close();
+
+ this._deleteStreamController(streamController, streamId);
+
+ break;
+
+ case StreamKind.ERROR:
+ (0, _util.assert)(streamController, "error should have stream controller");
+ streamController.controller.error(wrapReason(data.reason));
+
+ this._deleteStreamController(streamController, streamId);
+
+ break;
+
+ case StreamKind.CANCEL_COMPLETE:
+ if (data.success) {
+ streamController.cancelCall.resolve();
+ } else {
+ streamController.cancelCall.reject(wrapReason(data.reason));
+ }
+
+ this._deleteStreamController(streamController, streamId);
+
+ break;
+
+ case StreamKind.CANCEL:
+ if (!streamSink) {
+ break;
+ }
+
+ new Promise(function (resolve) {
+ resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason)));
+ }).then(function () {
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.CANCEL_COMPLETE,
+ streamId: streamId,
+ success: true
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName: sourceName,
+ targetName: targetName,
+ stream: StreamKind.CANCEL_COMPLETE,
+ streamId: streamId,
+ reason: wrapReason(reason)
+ });
+ });
+ streamSink.sinkCapability.reject(wrapReason(data.reason));
+ streamSink.isCancelled = true;
+ delete this.streamSinks[streamId];
+ break;
+
+ default:
+ throw new Error("Unexpected stream case");
+ }
+ }
+ }, {
+ key: "_deleteStreamController",
+ value: function () {
+ var _deleteStreamController2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(streamController, streamId) {
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.next = 2;
+ return Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]);
+
+ case 2:
+ delete this.streamControllers[streamId];
+
+ case 3:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function _deleteStreamController(_x, _x2) {
+ return _deleteStreamController2.apply(this, arguments);
+ }
+
+ return _deleteStreamController;
+ }()
+ }, {
+ key: "destroy",
+ value: function destroy() {
+ this.comObj.removeEventListener("message", this._onComObjOnMessage);
+ }
+ }]);
+
+ return MessageHandler;
+}();
+
+exports.MessageHandler = MessageHandler;
+
+/***/ }),
+/* 155 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Metadata = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
+
+function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
+
+function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
+
+function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
+
+function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
+
+function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
+
+function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
+
+var _metadataMap = /*#__PURE__*/new WeakMap();
+
+var _data = /*#__PURE__*/new WeakMap();
+
+var Metadata = /*#__PURE__*/function () {
+ function Metadata(_ref) {
+ var parsedData = _ref.parsedData,
+ rawData = _ref.rawData;
+
+ _classCallCheck(this, Metadata);
+
+ _classPrivateFieldInitSpec(this, _metadataMap, {
+ writable: true,
+ value: void 0
+ });
+
+ _classPrivateFieldInitSpec(this, _data, {
+ writable: true,
+ value: void 0
+ });
+
+ _classPrivateFieldSet(this, _metadataMap, parsedData);
+
+ _classPrivateFieldSet(this, _data, rawData);
+ }
+
+ _createClass(Metadata, [{
+ key: "getRaw",
+ value: function getRaw() {
+ return _classPrivateFieldGet(this, _data);
+ }
+ }, {
+ key: "get",
+ value: function get(name) {
+ var _classPrivateFieldGet2;
+
+ return (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _metadataMap).get(name)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : null;
+ }
+ }, {
+ key: "getAll",
+ value: function getAll() {
+ return (0, _util.objectFromMap)(_classPrivateFieldGet(this, _metadataMap));
+ }
+ }, {
+ key: "has",
+ value: function has(name) {
+ return _classPrivateFieldGet(this, _metadataMap).has(name);
+ }
+ }]);
+
+ return Metadata;
+}();
+
+exports.Metadata = Metadata;
+
+/***/ }),
+/* 156 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.OptionalContentConfig = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var OptionalContentGroup = /*#__PURE__*/_createClass(function OptionalContentGroup(name, intent) {
+ _classCallCheck(this, OptionalContentGroup);
+
+ this.visible = true;
+ this.name = name;
+ this.intent = intent;
+});
+
+var OptionalContentConfig = /*#__PURE__*/function () {
+ function OptionalContentConfig(data) {
+ _classCallCheck(this, OptionalContentConfig);
+
+ this.name = null;
+ this.creator = null;
+ this._order = null;
+ this._groups = new Map();
+
+ if (data === null) {
+ return;
+ }
+
+ this.name = data.name;
+ this.creator = data.creator;
+ this._order = data.order;
+
+ var _iterator = _createForOfIteratorHelper(data.groups),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var _group = _step.value;
+
+ this._groups.set(_group.id, new OptionalContentGroup(_group.name, _group.intent));
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ if (data.baseState === "OFF") {
+ var _iterator2 = _createForOfIteratorHelper(this._groups),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var group = _step2.value;
+ group.visible = false;
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+ }
+
+ var _iterator3 = _createForOfIteratorHelper(data.on),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var on = _step3.value;
+ this._groups.get(on).visible = true;
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+
+ var _iterator4 = _createForOfIteratorHelper(data.off),
+ _step4;
+
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var off = _step4.value;
+ this._groups.get(off).visible = false;
+ }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
+ }
+ }
+
+ _createClass(OptionalContentConfig, [{
+ key: "_evaluateVisibilityExpression",
+ value: function _evaluateVisibilityExpression(array) {
+ var length = array.length;
+
+ if (length < 2) {
+ return true;
+ }
+
+ var operator = array[0];
+
+ for (var i = 1; i < length; i++) {
+ var element = array[i];
+ var state = void 0;
+
+ if (Array.isArray(element)) {
+ state = this._evaluateVisibilityExpression(element);
+ } else if (this._groups.has(element)) {
+ state = this._groups.get(element).visible;
+ } else {
+ (0, _util.warn)("Optional content group not found: ".concat(element));
+ return true;
+ }
+
+ switch (operator) {
+ case "And":
+ if (!state) {
+ return false;
+ }
+
+ break;
+
+ case "Or":
+ if (state) {
+ return true;
+ }
+
+ break;
+
+ case "Not":
+ return !state;
+
+ default:
+ return true;
+ }
+ }
+
+ return operator === "And";
+ }
+ }, {
+ key: "isVisible",
+ value: function isVisible(group) {
+ if (this._groups.size === 0) {
+ return true;
+ }
+
+ if (!group) {
+ (0, _util.warn)("Optional content group not defined.");
+ return true;
+ }
+
+ if (group.type === "OCG") {
+ if (!this._groups.has(group.id)) {
+ (0, _util.warn)("Optional content group not found: ".concat(group.id));
+ return true;
+ }
+
+ return this._groups.get(group.id).visible;
+ } else if (group.type === "OCMD") {
+ if (group.expression) {
+ return this._evaluateVisibilityExpression(group.expression);
+ }
+
+ if (!group.policy || group.policy === "AnyOn") {
+ var _iterator5 = _createForOfIteratorHelper(group.ids),
+ _step5;
+
+ try {
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ var id = _step5.value;
+
+ if (!this._groups.has(id)) {
+ (0, _util.warn)("Optional content group not found: ".concat(id));
+ return true;
+ }
+
+ if (this._groups.get(id).visible) {
+ return true;
+ }
+ }
+ } catch (err) {
+ _iterator5.e(err);
+ } finally {
+ _iterator5.f();
+ }
+
+ return false;
+ } else if (group.policy === "AllOn") {
+ var _iterator6 = _createForOfIteratorHelper(group.ids),
+ _step6;
+
+ try {
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
+ var _id = _step6.value;
+
+ if (!this._groups.has(_id)) {
+ (0, _util.warn)("Optional content group not found: ".concat(_id));
+ return true;
+ }
+
+ if (!this._groups.get(_id).visible) {
+ return false;
+ }
+ }
+ } catch (err) {
+ _iterator6.e(err);
+ } finally {
+ _iterator6.f();
+ }
+
+ return true;
+ } else if (group.policy === "AnyOff") {
+ var _iterator7 = _createForOfIteratorHelper(group.ids),
+ _step7;
+
+ try {
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
+ var _id2 = _step7.value;
+
+ if (!this._groups.has(_id2)) {
+ (0, _util.warn)("Optional content group not found: ".concat(_id2));
+ return true;
+ }
+
+ if (!this._groups.get(_id2).visible) {
+ return true;
+ }
+ }
+ } catch (err) {
+ _iterator7.e(err);
+ } finally {
+ _iterator7.f();
+ }
+
+ return false;
+ } else if (group.policy === "AllOff") {
+ var _iterator8 = _createForOfIteratorHelper(group.ids),
+ _step8;
+
+ try {
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
+ var _id3 = _step8.value;
+
+ if (!this._groups.has(_id3)) {
+ (0, _util.warn)("Optional content group not found: ".concat(_id3));
+ return true;
+ }
+
+ if (this._groups.get(_id3).visible) {
+ return false;
+ }
+ }
+ } catch (err) {
+ _iterator8.e(err);
+ } finally {
+ _iterator8.f();
+ }
+
+ return true;
+ }
+
+ (0, _util.warn)("Unknown optional content policy ".concat(group.policy, "."));
+ return true;
+ }
+
+ (0, _util.warn)("Unknown group type ".concat(group.type, "."));
+ return true;
+ }
+ }, {
+ key: "setVisibility",
+ value: function setVisibility(id) {
+ var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+ if (!this._groups.has(id)) {
+ (0, _util.warn)("Optional content group not found: ".concat(id));
+ return;
+ }
+
+ this._groups.get(id).visible = !!visible;
+ }
+ }, {
+ key: "getOrder",
+ value: function getOrder() {
+ if (!this._groups.size) {
+ return null;
+ }
+
+ if (this._order) {
+ return this._order.slice();
+ }
+
+ return Array.from(this._groups.keys());
+ }
+ }, {
+ key: "getGroups",
+ value: function getGroups() {
+ return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null;
+ }
+ }, {
+ key: "getGroup",
+ value: function getGroup(id) {
+ return this._groups.get(id) || null;
+ }
+ }]);
+
+ return OptionalContentConfig;
+}();
+
+exports.OptionalContentConfig = OptionalContentConfig;
+
+/***/ }),
+/* 157 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFDataTransportStream = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(146);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var PDFDataTransportStream = /*#__PURE__*/function () {
+ function PDFDataTransportStream(params, pdfDataRangeTransport) {
+ var _this = this;
+
+ _classCallCheck(this, PDFDataTransportStream);
+
+ (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
+ this._queuedChunks = [];
+ this._progressiveDone = params.progressiveDone || false;
+ this._contentDispositionFilename = params.contentDispositionFilename || null;
+ var initialData = params.initialData;
+
+ if ((initialData === null || initialData === void 0 ? void 0 : initialData.length) > 0) {
+ var buffer = new Uint8Array(initialData).buffer;
+
+ this._queuedChunks.push(buffer);
+ }
+
+ this._pdfDataRangeTransport = pdfDataRangeTransport;
+ this._isStreamingSupported = !params.disableStream;
+ this._isRangeSupported = !params.disableRange;
+ this._contentLength = params.length;
+ this._fullRequestReader = null;
+ this._rangeReaders = [];
+
+ this._pdfDataRangeTransport.addRangeListener(function (begin, chunk) {
+ _this._onReceiveData({
+ begin: begin,
+ chunk: chunk
+ });
+ });
+
+ this._pdfDataRangeTransport.addProgressListener(function (loaded, total) {
+ _this._onProgress({
+ loaded: loaded,
+ total: total
+ });
+ });
+
+ this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) {
+ _this._onReceiveData({
+ chunk: chunk
+ });
+ });
+
+ this._pdfDataRangeTransport.addProgressiveDoneListener(function () {
+ _this._onProgressiveDone();
+ });
+
+ this._pdfDataRangeTransport.transportReady();
+ }
+
+ _createClass(PDFDataTransportStream, [{
+ key: "_onReceiveData",
+ value: function _onReceiveData(args) {
+ var buffer = new Uint8Array(args.chunk).buffer;
+
+ if (args.begin === undefined) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader._enqueue(buffer);
+ } else {
+ this._queuedChunks.push(buffer);
+ }
+ } else {
+ var found = this._rangeReaders.some(function (rangeReader) {
+ if (rangeReader._begin !== args.begin) {
+ return false;
+ }
+
+ rangeReader._enqueue(buffer);
+
+ return true;
+ });
+
+ (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
+ }
+ }
+ }, {
+ key: "_progressiveDataLength",
+ get: function get() {
+ var _this$_fullRequestRea, _this$_fullRequestRea2;
+
+ return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;
+ }
+ }, {
+ key: "_onProgress",
+ value: function _onProgress(evt) {
+ if (evt.total === undefined) {
+ var firstReader = this._rangeReaders[0];
+
+ if (firstReader !== null && firstReader !== void 0 && firstReader.onProgress) {
+ firstReader.onProgress({
+ loaded: evt.loaded
+ });
+ }
+ } else {
+ var fullReader = this._fullRequestReader;
+
+ if (fullReader !== null && fullReader !== void 0 && fullReader.onProgress) {
+ fullReader.onProgress({
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ }
+ }
+ }
+ }, {
+ key: "_onProgressiveDone",
+ value: function _onProgressiveDone() {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.progressiveDone();
+ }
+
+ this._progressiveDone = true;
+ }
+ }, {
+ key: "_removeRangeReader",
+ value: function _removeRangeReader(reader) {
+ var i = this._rangeReaders.indexOf(reader);
+
+ if (i >= 0) {
+ this._rangeReaders.splice(i, 1);
+ }
+ }
+ }, {
+ key: "getFullReader",
+ value: function getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
+ var queuedChunks = this._queuedChunks;
+ this._queuedChunks = null;
+ return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename);
+ }
+ }, {
+ key: "getRangeReader",
+ value: function getRangeReader(begin, end) {
+ if (end <= this._progressiveDataLength) {
+ return null;
+ }
+
+ var reader = new PDFDataTransportStreamRangeReader(this, begin, end);
+
+ this._pdfDataRangeTransport.requestDataRange(begin, end);
+
+ this._rangeReaders.push(reader);
+
+ return reader;
+ }
+ }, {
+ key: "cancelAllRequests",
+ value: function cancelAllRequests(reason) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ var _iterator = _createForOfIteratorHelper(this._rangeReaders.slice(0)),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var reader = _step.value;
+ reader.cancel(reason);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ this._pdfDataRangeTransport.abort();
+ }
+ }]);
+
+ return PDFDataTransportStream;
+}();
+
+exports.PDFDataTransportStream = PDFDataTransportStream;
+
+var PDFDataTransportStreamReader = /*#__PURE__*/function () {
+ function PDFDataTransportStreamReader(stream, queuedChunks) {
+ var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+ var contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
+
+ _classCallCheck(this, PDFDataTransportStreamReader);
+
+ this._stream = stream;
+ this._done = progressiveDone || false;
+ this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null;
+ this._queuedChunks = queuedChunks || [];
+ this._loaded = 0;
+
+ var _iterator2 = _createForOfIteratorHelper(this._queuedChunks),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var chunk = _step2.value;
+ this._loaded += chunk.byteLength;
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ this._requests = [];
+ this._headersReady = Promise.resolve();
+ stream._fullRequestReader = this;
+ this.onProgress = null;
+ }
+
+ _createClass(PDFDataTransportStreamReader, [{
+ key: "_enqueue",
+ value: function _enqueue(chunk) {
+ if (this._done) {
+ return;
+ }
+
+ if (this._requests.length > 0) {
+ var requestCapability = this._requests.shift();
+
+ requestCapability.resolve({
+ value: chunk,
+ done: false
+ });
+ } else {
+ this._queuedChunks.push(chunk);
+ }
+
+ this._loaded += chunk.byteLength;
+ }
+ }, {
+ key: "headersReady",
+ get: function get() {
+ return this._headersReady;
+ }
+ }, {
+ key: "filename",
+ get: function get() {
+ return this._filename;
+ }
+ }, {
+ key: "isRangeSupported",
+ get: function get() {
+ return this._stream._isRangeSupported;
+ }
+ }, {
+ key: "isStreamingSupported",
+ get: function get() {
+ return this._stream._isStreamingSupported;
+ }
+ }, {
+ key: "contentLength",
+ get: function get() {
+ return this._stream._contentLength;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
+ var chunk, requestCapability;
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ if (!(this._queuedChunks.length > 0)) {
+ _context.next = 3;
+ break;
+ }
+
+ chunk = this._queuedChunks.shift();
+ return _context.abrupt("return", {
+ value: chunk,
+ done: false
+ });
+
+ case 3:
+ if (!this._done) {
+ _context.next = 5;
+ break;
+ }
+
+ return _context.abrupt("return", {
+ value: undefined,
+ done: true
+ });
+
+ case 5:
+ requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return _context.abrupt("return", requestCapability.promise);
+
+ case 8:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function read() {
+ return _read.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ this._done = true;
+
+ var _iterator3 = _createForOfIteratorHelper(this._requests),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var requestCapability = _step3.value;
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+
+ this._requests.length = 0;
+ }
+ }, {
+ key: "progressiveDone",
+ value: function progressiveDone() {
+ if (this._done) {
+ return;
+ }
+
+ this._done = true;
+ }
+ }]);
+
+ return PDFDataTransportStreamReader;
+}();
+
+var PDFDataTransportStreamRangeReader = /*#__PURE__*/function () {
+ function PDFDataTransportStreamRangeReader(stream, begin, end) {
+ _classCallCheck(this, PDFDataTransportStreamRangeReader);
+
+ this._stream = stream;
+ this._begin = begin;
+ this._end = end;
+ this._queuedChunk = null;
+ this._requests = [];
+ this._done = false;
+ this.onProgress = null;
+ }
+
+ _createClass(PDFDataTransportStreamRangeReader, [{
+ key: "_enqueue",
+ value: function _enqueue(chunk) {
+ if (this._done) {
+ return;
+ }
+
+ if (this._requests.length === 0) {
+ this._queuedChunk = chunk;
+ } else {
+ var requestsCapability = this._requests.shift();
+
+ requestsCapability.resolve({
+ value: chunk,
+ done: false
+ });
+
+ var _iterator4 = _createForOfIteratorHelper(this._requests),
+ _step4;
+
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var requestCapability = _step4.value;
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
+ }
+
+ this._requests.length = 0;
+ }
+
+ this._done = true;
+
+ this._stream._removeRangeReader(this);
+ }
+ }, {
+ key: "isStreamingSupported",
+ get: function get() {
+ return false;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
+ var chunk, requestCapability;
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ if (!this._queuedChunk) {
+ _context2.next = 4;
+ break;
+ }
+
+ chunk = this._queuedChunk;
+ this._queuedChunk = null;
+ return _context2.abrupt("return", {
+ value: chunk,
+ done: false
+ });
+
+ case 4:
+ if (!this._done) {
+ _context2.next = 6;
+ break;
+ }
+
+ return _context2.abrupt("return", {
+ value: undefined,
+ done: true
+ });
+
+ case 6:
+ requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return _context2.abrupt("return", requestCapability.promise);
+
+ case 9:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, this);
+ }));
+
+ function read() {
+ return _read2.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ this._done = true;
+
+ var _iterator5 = _createForOfIteratorHelper(this._requests),
+ _step5;
+
+ try {
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ var requestCapability = _step5.value;
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+ } catch (err) {
+ _iterator5.e(err);
+ } finally {
+ _iterator5.f();
+ }
+
+ this._requests.length = 0;
+
+ this._stream._removeRangeReader(this);
+ }
+ }]);
+
+ return PDFDataTransportStreamRangeReader;
+}();
+
+/***/ }),
+/* 158 */
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XfaText = void 0;
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var XfaText = /*#__PURE__*/function () {
+ function XfaText() {
+ _classCallCheck(this, XfaText);
+ }
+
+ _createClass(XfaText, null, [{
+ key: "textContent",
+ value: function textContent(xfa) {
+ var items = [];
+ var output = {
+ items: items,
+ styles: Object.create(null)
+ };
+
+ function walk(node) {
+ var _node$attributes;
+
+ if (!node) {
+ return;
+ }
+
+ var str = null;
+ var name = node.name;
+
+ if (name === "#text") {
+ str = node.value;
+ } else if (!XfaText.shouldBuildText(name)) {
+ return;
+ } else if (node !== null && node !== void 0 && (_node$attributes = node.attributes) !== null && _node$attributes !== void 0 && _node$attributes.textContent) {
+ str = node.attributes.textContent;
+ } else if (node.value) {
+ str = node.value;
+ }
+
+ if (str !== null) {
+ items.push({
+ str: str
+ });
+ }
+
+ if (!node.children) {
+ return;
+ }
+
+ var _iterator = _createForOfIteratorHelper(node.children),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var child = _step.value;
+ walk(child);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+
+ walk(xfa);
+ return output;
+ }
+ }, {
+ key: "shouldBuildText",
+ value: function shouldBuildText(name) {
+ return !(name === "textarea" || name === "input" || name === "option" || name === "select");
+ }
+ }]);
+
+ return XfaText;
+}();
+
+exports.XfaText = XfaText;
+
+/***/ }),
+/* 159 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.AnnotationLayer = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(146);
+
+var _annotation_storage = __w_pdfjs_require__(150);
+
+var _scripting_utils = __w_pdfjs_require__(160);
+
+var _xfa_layer = __w_pdfjs_require__(161);
+
+function _classStaticPrivateMethodGet(receiver, classConstructor, method) { _classCheckPrivateStaticAccess(receiver, classConstructor); return method; }
+
+function _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } }
+
+function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var DEFAULT_TAB_INDEX = 1000;
+var GetElementsByNameSet = new WeakSet();
+
+function getRectDims(rect) {
+ return {
+ width: rect[2] - rect[0],
+ height: rect[3] - rect[1]
+ };
+}
+
+var AnnotationElementFactory = /*#__PURE__*/function () {
+ function AnnotationElementFactory() {
+ _classCallCheck(this, AnnotationElementFactory);
+ }
+
+ _createClass(AnnotationElementFactory, null, [{
+ key: "create",
+ value: function create(parameters) {
+ var subtype = parameters.data.annotationType;
+
+ switch (subtype) {
+ case _util.AnnotationType.LINK:
+ return new LinkAnnotationElement(parameters);
+
+ case _util.AnnotationType.TEXT:
+ return new TextAnnotationElement(parameters);
+
+ case _util.AnnotationType.WIDGET:
+ var fieldType = parameters.data.fieldType;
+
+ switch (fieldType) {
+ case "Tx":
+ return new TextWidgetAnnotationElement(parameters);
+
+ case "Btn":
+ if (parameters.data.radioButton) {
+ return new RadioButtonWidgetAnnotationElement(parameters);
+ } else if (parameters.data.checkBox) {
+ return new CheckboxWidgetAnnotationElement(parameters);
+ }
+
+ return new PushButtonWidgetAnnotationElement(parameters);
+
+ case "Ch":
+ return new ChoiceWidgetAnnotationElement(parameters);
+ }
+
+ return new WidgetAnnotationElement(parameters);
+
+ case _util.AnnotationType.POPUP:
+ return new PopupAnnotationElement(parameters);
+
+ case _util.AnnotationType.FREETEXT:
+ return new FreeTextAnnotationElement(parameters);
+
+ case _util.AnnotationType.LINE:
+ return new LineAnnotationElement(parameters);
+
+ case _util.AnnotationType.SQUARE:
+ return new SquareAnnotationElement(parameters);
+
+ case _util.AnnotationType.CIRCLE:
+ return new CircleAnnotationElement(parameters);
+
+ case _util.AnnotationType.POLYLINE:
+ return new PolylineAnnotationElement(parameters);
+
+ case _util.AnnotationType.CARET:
+ return new CaretAnnotationElement(parameters);
+
+ case _util.AnnotationType.INK:
+ return new InkAnnotationElement(parameters);
+
+ case _util.AnnotationType.POLYGON:
+ return new PolygonAnnotationElement(parameters);
+
+ case _util.AnnotationType.HIGHLIGHT:
+ return new HighlightAnnotationElement(parameters);
+
+ case _util.AnnotationType.UNDERLINE:
+ return new UnderlineAnnotationElement(parameters);
+
+ case _util.AnnotationType.SQUIGGLY:
+ return new SquigglyAnnotationElement(parameters);
+
+ case _util.AnnotationType.STRIKEOUT:
+ return new StrikeOutAnnotationElement(parameters);
+
+ case _util.AnnotationType.STAMP:
+ return new StampAnnotationElement(parameters);
+
+ case _util.AnnotationType.FILEATTACHMENT:
+ return new FileAttachmentAnnotationElement(parameters);
+
+ default:
+ return new AnnotationElement(parameters);
+ }
+ }
+ }]);
+
+ return AnnotationElementFactory;
+}();
+
+var AnnotationElement = /*#__PURE__*/function () {
+ function AnnotationElement(parameters) {
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ _ref$isRenderable = _ref.isRenderable,
+ isRenderable = _ref$isRenderable === void 0 ? false : _ref$isRenderable,
+ _ref$ignoreBorder = _ref.ignoreBorder,
+ ignoreBorder = _ref$ignoreBorder === void 0 ? false : _ref$ignoreBorder,
+ _ref$createQuadrilate = _ref.createQuadrilaterals,
+ createQuadrilaterals = _ref$createQuadrilate === void 0 ? false : _ref$createQuadrilate;
+
+ _classCallCheck(this, AnnotationElement);
+
+ this.isRenderable = isRenderable;
+ this.data = parameters.data;
+ this.layer = parameters.layer;
+ this.page = parameters.page;
+ this.viewport = parameters.viewport;
+ this.linkService = parameters.linkService;
+ this.downloadManager = parameters.downloadManager;
+ this.imageResourcesPath = parameters.imageResourcesPath;
+ this.renderForms = parameters.renderForms;
+ this.svgFactory = parameters.svgFactory;
+ this.annotationStorage = parameters.annotationStorage;
+ this.enableScripting = parameters.enableScripting;
+ this.hasJSActions = parameters.hasJSActions;
+ this._fieldObjects = parameters.fieldObjects;
+ this._mouseState = parameters.mouseState;
+
+ if (isRenderable) {
+ this.container = this._createContainer(ignoreBorder);
+ }
+
+ if (createQuadrilaterals) {
+ this.quadrilaterals = this._createQuadrilaterals(ignoreBorder);
+ }
+ }
+
+ _createClass(AnnotationElement, [{
+ key: "_createContainer",
+ value: function _createContainer() {
+ var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ var data = this.data,
+ page = this.page,
+ viewport = this.viewport;
+ var container = document.createElement("section");
+
+ var _getRectDims = getRectDims(data.rect),
+ width = _getRectDims.width,
+ height = _getRectDims.height;
+
+ container.setAttribute("data-annotation-id", data.id);
+
+ var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
+
+ if (data.hasOwnCanvas) {
+ var transform = viewport.transform.slice();
+
+ var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(transform),
+ _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2),
+ scaleX = _Util$singularValueDe2[0],
+ scaleY = _Util$singularValueDe2[1];
+
+ width = Math.ceil(width * scaleX);
+ height = Math.ceil(height * scaleY);
+ rect[0] *= scaleX;
+ rect[1] *= scaleY;
+
+ for (var i = 0; i < 4; i++) {
+ transform[i] = Math.sign(transform[i]);
+ }
+
+ container.style.transform = "matrix(".concat(transform.join(","), ")");
+ } else {
+ container.style.transform = "matrix(".concat(viewport.transform.join(","), ")");
+ }
+
+ container.style.transformOrigin = "".concat(-rect[0], "px ").concat(-rect[1], "px");
+
+ if (!ignoreBorder && data.borderStyle.width > 0) {
+ container.style.borderWidth = "".concat(data.borderStyle.width, "px");
+
+ if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {
+ width -= 2 * data.borderStyle.width;
+ height -= 2 * data.borderStyle.width;
+ }
+
+ var horizontalRadius = data.borderStyle.horizontalCornerRadius;
+ var verticalRadius = data.borderStyle.verticalCornerRadius;
+
+ if (horizontalRadius > 0 || verticalRadius > 0) {
+ var radius = "".concat(horizontalRadius, "px / ").concat(verticalRadius, "px");
+ container.style.borderRadius = radius;
+ }
+
+ switch (data.borderStyle.style) {
+ case _util.AnnotationBorderStyleType.SOLID:
+ container.style.borderStyle = "solid";
+ break;
+
+ case _util.AnnotationBorderStyleType.DASHED:
+ container.style.borderStyle = "dashed";
+ break;
+
+ case _util.AnnotationBorderStyleType.BEVELED:
+ (0, _util.warn)("Unimplemented border style: beveled");
+ break;
+
+ case _util.AnnotationBorderStyleType.INSET:
+ (0, _util.warn)("Unimplemented border style: inset");
+ break;
+
+ case _util.AnnotationBorderStyleType.UNDERLINE:
+ container.style.borderBottomStyle = "solid";
+ break;
+
+ default:
+ break;
+ }
+
+ var borderColor = data.borderColor || data.color || null;
+
+ if (borderColor) {
+ container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);
+ } else {
+ container.style.borderWidth = 0;
+ }
+ }
+
+ container.style.left = "".concat(rect[0], "px");
+ container.style.top = "".concat(rect[1], "px");
+
+ if (data.hasOwnCanvas) {
+ container.style.width = container.style.height = "auto";
+ } else {
+ container.style.width = "".concat(width, "px");
+ container.style.height = "".concat(height, "px");
+ }
+
+ return container;
+ }
+ }, {
+ key: "_createQuadrilaterals",
+ value: function _createQuadrilaterals() {
+ var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+ if (!this.data.quadPoints) {
+ return null;
+ }
+
+ var quadrilaterals = [];
+ var savedRect = this.data.rect;
+
+ var _iterator = _createForOfIteratorHelper(this.data.quadPoints),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var quadPoint = _step.value;
+ this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y];
+ quadrilaterals.push(this._createContainer(ignoreBorder));
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ this.data.rect = savedRect;
+ return quadrilaterals;
+ }
+ }, {
+ key: "_createPopup",
+ value: function _createPopup(trigger, data) {
+ var container = this.container;
+
+ if (this.quadrilaterals) {
+ trigger = trigger || this.quadrilaterals;
+ container = this.quadrilaterals[0];
+ }
+
+ if (!trigger) {
+ trigger = document.createElement("div");
+ trigger.style.height = container.style.height;
+ trigger.style.width = container.style.width;
+ container.appendChild(trigger);
+ }
+
+ var popupElement = new PopupElement({
+ container: container,
+ trigger: trigger,
+ color: data.color,
+ titleObj: data.titleObj,
+ modificationDate: data.modificationDate,
+ contentsObj: data.contentsObj,
+ richText: data.richText,
+ hideWrapper: true
+ });
+ var popup = popupElement.render();
+ popup.style.left = container.style.width;
+ container.appendChild(popup);
+ }
+ }, {
+ key: "_renderQuadrilaterals",
+ value: function _renderQuadrilaterals(className) {
+ var _iterator2 = _createForOfIteratorHelper(this.quadrilaterals),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var quadrilateral = _step2.value;
+ quadrilateral.className = className;
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ return this.quadrilaterals;
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
+ }
+ }, {
+ key: "_getElementsByName",
+ value: function _getElementsByName(name) {
+ var skipId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ var fields = [];
+
+ if (this._fieldObjects) {
+ var fieldObj = this._fieldObjects[name];
+
+ if (fieldObj) {
+ var _iterator3 = _createForOfIteratorHelper(fieldObj),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var _step3$value = _step3.value,
+ page = _step3$value.page,
+ id = _step3$value.id,
+ exportValues = _step3$value.exportValues;
+
+ if (page === -1) {
+ continue;
+ }
+
+ if (id === skipId) {
+ continue;
+ }
+
+ var exportValue = typeof exportValues === "string" ? exportValues : null;
+ var domElement = document.getElementById(id);
+
+ if (domElement && !GetElementsByNameSet.has(domElement)) {
+ (0, _util.warn)("_getElementsByName - element not allowed: ".concat(id));
+ continue;
+ }
+
+ fields.push({
+ id: id,
+ exportValue: exportValue,
+ domElement: domElement
+ });
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+ }
+
+ return fields;
+ }
+
+ var _iterator4 = _createForOfIteratorHelper(document.getElementsByName(name)),
+ _step4;
+
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var _domElement = _step4.value;
+ var _id = _domElement.id,
+ _exportValue = _domElement.exportValue;
+
+ if (_id === skipId) {
+ continue;
+ }
+
+ if (!GetElementsByNameSet.has(_domElement)) {
+ continue;
+ }
+
+ fields.push({
+ id: _id,
+ exportValue: _exportValue,
+ domElement: _domElement
+ });
+ }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
+ }
+
+ return fields;
+ }
+ }], [{
+ key: "platform",
+ get: function get() {
+ var platform = typeof navigator !== "undefined" ? navigator.platform : "";
+ return (0, _util.shadow)(this, "platform", {
+ isWin: platform.includes("Win"),
+ isMac: platform.includes("Mac")
+ });
+ }
+ }]);
+
+ return AnnotationElement;
+}();
+
+var LinkAnnotationElement = /*#__PURE__*/function (_AnnotationElement) {
+ _inherits(LinkAnnotationElement, _AnnotationElement);
+
+ var _super = _createSuper(LinkAnnotationElement);
+
+ function LinkAnnotationElement(parameters) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+ _classCallCheck(this, LinkAnnotationElement);
+
+ var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.resetForm || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"]));
+ return _super.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: !!(options !== null && options !== void 0 && options.ignoreBorder),
+ createQuadrilaterals: true
+ });
+ }
+
+ _createClass(LinkAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ var data = this.data,
+ linkService = this.linkService;
+ var link = document.createElement("a");
+
+ if (data.url) {
+ var _linkService$addLinkA;
+
+ if (!linkService.addLinkAttributes) {
+ (0, _util.warn)("LinkAnnotationElement.render - missing `addLinkAttributes`-method on the `linkService`-instance.");
+ }
+
+ (_linkService$addLinkA = linkService.addLinkAttributes) === null || _linkService$addLinkA === void 0 ? void 0 : _linkService$addLinkA.call(linkService, link, data.url, data.newWindow);
+ } else if (data.action) {
+ this._bindNamedAction(link, data.action);
+ } else if (data.dest) {
+ this._bindLink(link, data.dest);
+ } else {
+ var hasClickAction = false;
+
+ if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) {
+ hasClickAction = true;
+
+ this._bindJSAction(link, data);
+ }
+
+ if (data.resetForm) {
+ this._bindResetFormAction(link, data.resetForm);
+ } else if (!hasClickAction) {
+ this._bindLink(link, "");
+ }
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("linkAnnotation").map(function (quadrilateral, index) {
+ var linkElement = index === 0 ? link : link.cloneNode();
+ quadrilateral.appendChild(linkElement);
+ return quadrilateral;
+ });
+ }
+
+ this.container.className = "linkAnnotation";
+ var span = document.createElement("span");
+ span.style.display = "none";
+ span.innerHTML = data.url;
+ link.appendChild(span);
+ this.container.appendChild(link);
+ return this.container;
+ }
+ }, {
+ key: "_bindLink",
+ value: function _bindLink(link, destination) {
+ var _this = this;
+
+ link.href = this.linkService.getDestinationHash(destination);
+
+ link.onclick = function () {
+ if (destination) {
+ _this.linkService.goToDestination(destination);
+ }
+
+ return false;
+ };
+
+ if (destination || destination === "") {
+ link.className = "internalLink";
+ }
+ var span = document.createElement("span");
+ span.style.display = 'none';
+ span.innerHTML = "internalLink";
+ link.appendChild(span);
+ }
+ }, {
+ key: "_bindNamedAction",
+ value: function _bindNamedAction(link, action) {
+ var _this2 = this;
+
+ link.href = this.linkService.getAnchorUrl("");
+
+ link.onclick = function () {
+ _this2.linkService.executeNamedAction(action);
+
+ return false;
+ };
+
+ link.className = "internalLink";
+ var span = document.createElement("span");
+ span.style.display = 'none';
+ span.innerHTML = "internalLink";
+ link.appendChild(span);
+ }
+ }, {
+ key: "_bindJSAction",
+ value: function _bindJSAction(link, data) {
+ var _this3 = this;
+
+ link.href = this.linkService.getAnchorUrl("");
+ var map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
+
+ var _loop = function _loop() {
+ var name = _Object$keys[_i2];
+ var jsName = map.get(name);
+
+ if (!jsName) {
+ return "continue";
+ }
+
+ link[jsName] = function () {
+ var _this3$linkService$ev;
+
+ (_this3$linkService$ev = _this3.linkService.eventBus) === null || _this3$linkService$ev === void 0 ? void 0 : _this3$linkService$ev.dispatch("dispatcheventinsandbox", {
+ source: _this3,
+ detail: {
+ id: data.id,
+ name: name
+ }
+ });
+ return false;
+ };
+ };
+
+ for (var _i2 = 0, _Object$keys = Object.keys(data.actions); _i2 < _Object$keys.length; _i2++) {
+ var _ret = _loop();
+
+ if (_ret === "continue") continue;
+ }
+
+ if (!link.onclick) {
+ link.onclick = function () {
+ return false;
+ };
+ }
+
+ link.className = "internalLink";
+ }
+ }, {
+ key: "_bindResetFormAction",
+ value: function _bindResetFormAction(link, resetForm) {
+ var _this4 = this;
+
+ var otherClickAction = link.onclick;
+
+ if (!otherClickAction) {
+ link.href = this.linkService.getAnchorUrl("");
+ }
+
+ link.className = "internalLink";
+
+ if (!this._fieldObjects) {
+ (0, _util.warn)("_bindResetFormAction - \"resetForm\" action not supported, " + "ensure that the `fieldObjects` parameter is provided.");
+
+ if (!otherClickAction) {
+ link.onclick = function () {
+ return false;
+ };
+ }
+
+ return;
+ }
+
+ link.onclick = function () {
+ if (otherClickAction) {
+ otherClickAction();
+ }
+
+ var resetFormFields = resetForm.fields,
+ resetFormRefs = resetForm.refs,
+ include = resetForm.include;
+ var allFields = [];
+
+ if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {
+ var fieldIds = new Set(resetFormRefs);
+
+ var _iterator5 = _createForOfIteratorHelper(resetFormFields),
+ _step5;
+
+ try {
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ var fieldName = _step5.value;
+
+ var _fields = _this4._fieldObjects[fieldName] || [];
+
+ var _iterator7 = _createForOfIteratorHelper(_fields),
+ _step7;
+
+ try {
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
+ var id = _step7.value.id;
+ fieldIds.add(id);
+ }
+ } catch (err) {
+ _iterator7.e(err);
+ } finally {
+ _iterator7.f();
+ }
+ }
+ } catch (err) {
+ _iterator5.e(err);
+ } finally {
+ _iterator5.f();
+ }
+
+ for (var _i3 = 0, _Object$values = Object.values(_this4._fieldObjects); _i3 < _Object$values.length; _i3++) {
+ var fields = _Object$values[_i3];
+
+ var _iterator6 = _createForOfIteratorHelper(fields),
+ _step6;
+
+ try {
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
+ var field = _step6.value;
+
+ if (fieldIds.has(field.id) === include) {
+ allFields.push(field);
+ }
+ }
+ } catch (err) {
+ _iterator6.e(err);
+ } finally {
+ _iterator6.f();
+ }
+ }
+ } else {
+ for (var _i4 = 0, _Object$values2 = Object.values(_this4._fieldObjects); _i4 < _Object$values2.length; _i4++) {
+ var _fields2 = _Object$values2[_i4];
+ allFields.push.apply(allFields, _toConsumableArray(_fields2));
+ }
+ }
+
+ var storage = _this4.annotationStorage;
+ var allIds = [];
+
+ for (var _i5 = 0, _allFields = allFields; _i5 < _allFields.length; _i5++) {
+ var _field = _allFields[_i5];
+ var _id2 = _field.id;
+ allIds.push(_id2);
+
+ switch (_field.type) {
+ case "text":
+ {
+ var value = _field.defaultValue || "";
+ storage.setValue(_id2, {
+ value: value,
+ valueAsString: value
+ });
+ break;
+ }
+
+ case "checkbox":
+ case "radiobutton":
+ {
+ var _value = _field.defaultValue === _field.exportValues;
+
+ storage.setValue(_id2, {
+ value: _value
+ });
+ break;
+ }
+
+ case "combobox":
+ case "listbox":
+ {
+ var _value2 = _field.defaultValue || "";
+
+ storage.setValue(_id2, {
+ value: _value2
+ });
+ break;
+ }
+
+ default:
+ continue;
+ }
+
+ var domElement = document.getElementById(_id2);
+
+ if (!domElement || !GetElementsByNameSet.has(domElement)) {
+ continue;
+ }
+
+ domElement.dispatchEvent(new Event("resetform"));
+ }
+
+ if (_this4.enableScripting) {
+ var _this4$linkService$ev;
+
+ (_this4$linkService$ev = _this4.linkService.eventBus) === null || _this4$linkService$ev === void 0 ? void 0 : _this4$linkService$ev.dispatch("dispatcheventinsandbox", {
+ source: _this4,
+ detail: {
+ id: "app",
+ ids: allIds,
+ name: "ResetForm"
+ }
+ });
+ }
+
+ return false;
+ };
+ }
+ }]);
+
+ return LinkAnnotationElement;
+}(AnnotationElement);
+
+var TextAnnotationElement = /*#__PURE__*/function (_AnnotationElement2) {
+ _inherits(TextAnnotationElement, _AnnotationElement2);
+
+ var _super2 = _createSuper(TextAnnotationElement);
+
+ function TextAnnotationElement(parameters) {
+ var _parameters$data$titl, _parameters$data$cont, _parameters$data$rich;
+
+ _classCallCheck(this, TextAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl = parameters.data.titleObj) !== null && _parameters$data$titl !== void 0 && _parameters$data$titl.str || (_parameters$data$cont = parameters.data.contentsObj) !== null && _parameters$data$cont !== void 0 && _parameters$data$cont.str || (_parameters$data$rich = parameters.data.richText) !== null && _parameters$data$rich !== void 0 && _parameters$data$rich.str);
+ return _super2.call(this, parameters, {
+ isRenderable: isRenderable
+ });
+ }
+
+ _createClass(TextAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = "textAnnotation";
+ var image = document.createElement("img");
+ image.style.height = this.container.style.height;
+ image.style.width = this.container.style.width;
+ image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
+ image.alt = "[{{type}} Annotation]";
+ image.dataset.l10nId = "text_annotation_type";
+ image.dataset.l10nArgs = JSON.stringify({
+ type: this.data.name
+ });
+
+ if (!this.data.hasPopup) {
+ this._createPopup(image, this.data);
+ }
+
+ this.container.appendChild(image);
+ return this.container;
+ }
+ }]);
+
+ return TextAnnotationElement;
+}(AnnotationElement);
+
+var WidgetAnnotationElement = /*#__PURE__*/function (_AnnotationElement3) {
+ _inherits(WidgetAnnotationElement, _AnnotationElement3);
+
+ var _super3 = _createSuper(WidgetAnnotationElement);
+
+ function WidgetAnnotationElement() {
+ _classCallCheck(this, WidgetAnnotationElement);
+
+ return _super3.apply(this, arguments);
+ }
+
+ _createClass(WidgetAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ if (this.data.alternativeText) {
+ this.container.title = this.data.alternativeText;
+ }
+
+ return this.container;
+ }
+ }, {
+ key: "_getKeyModifier",
+ value: function _getKeyModifier(event) {
+ var _AnnotationElement$pl = AnnotationElement.platform,
+ isWin = _AnnotationElement$pl.isWin,
+ isMac = _AnnotationElement$pl.isMac;
+ return isWin && event.ctrlKey || isMac && event.metaKey;
+ }
+ }, {
+ key: "_setEventListener",
+ value: function _setEventListener(element, baseName, eventName, valueGetter) {
+ var _this5 = this;
+
+ if (baseName.includes("mouse")) {
+ element.addEventListener(baseName, function (event) {
+ var _this5$linkService$ev;
+
+ (_this5$linkService$ev = _this5.linkService.eventBus) === null || _this5$linkService$ev === void 0 ? void 0 : _this5$linkService$ev.dispatch("dispatcheventinsandbox", {
+ source: _this5,
+ detail: {
+ id: _this5.data.id,
+ name: eventName,
+ value: valueGetter(event),
+ shift: event.shiftKey,
+ modifier: _this5._getKeyModifier(event)
+ }
+ });
+ });
+ } else {
+ element.addEventListener(baseName, function (event) {
+ var _this5$linkService$ev2;
+
+ (_this5$linkService$ev2 = _this5.linkService.eventBus) === null || _this5$linkService$ev2 === void 0 ? void 0 : _this5$linkService$ev2.dispatch("dispatcheventinsandbox", {
+ source: _this5,
+ detail: {
+ id: _this5.data.id,
+ name: eventName,
+ value: valueGetter(event)
+ }
+ });
+ });
+ }
+ }
+ }, {
+ key: "_setEventListeners",
+ value: function _setEventListeners(element, names, getter) {
+ var _iterator8 = _createForOfIteratorHelper(names),
+ _step8;
+
+ try {
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
+ var _this$data$actions;
+
+ var _step8$value = _slicedToArray(_step8.value, 2),
+ baseName = _step8$value[0],
+ eventName = _step8$value[1];
+
+ if (eventName === "Action" || (_this$data$actions = this.data.actions) !== null && _this$data$actions !== void 0 && _this$data$actions[eventName]) {
+ this._setEventListener(element, baseName, eventName, getter);
+ }
+ }
+ } catch (err) {
+ _iterator8.e(err);
+ } finally {
+ _iterator8.f();
+ }
+ }
+ }, {
+ key: "_setBackgroundColor",
+ value: function _setBackgroundColor(element) {
+ var color = this.data.backgroundColor || null;
+ element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]);
+ }
+ }, {
+ key: "_dispatchEventFromSandbox",
+ value: function _dispatchEventFromSandbox(actions, jsEvent) {
+ var _this6 = this;
+
+ var setColor = function setColor(jsName, styleName, event) {
+ var color = event.detail[jsName];
+ event.target.style[styleName] = _scripting_utils.ColorConverters["".concat(color[0], "_HTML")](color.slice(1));
+ };
+
+ var commonActions = {
+ display: function display(event) {
+ var hidden = event.detail.display % 2 === 1;
+ event.target.style.visibility = hidden ? "hidden" : "visible";
+
+ _this6.annotationStorage.setValue(_this6.data.id, {
+ hidden: hidden,
+ print: event.detail.display === 0 || event.detail.display === 3
+ });
+ },
+ print: function print(event) {
+ _this6.annotationStorage.setValue(_this6.data.id, {
+ print: event.detail.print
+ });
+ },
+ hidden: function hidden(event) {
+ event.target.style.visibility = event.detail.hidden ? "hidden" : "visible";
+
+ _this6.annotationStorage.setValue(_this6.data.id, {
+ hidden: event.detail.hidden
+ });
+ },
+ focus: function focus(event) {
+ setTimeout(function () {
+ return event.target.focus({
+ preventScroll: false
+ });
+ }, 0);
+ },
+ userName: function userName(event) {
+ event.target.title = event.detail.userName;
+ },
+ readonly: function readonly(event) {
+ if (event.detail.readonly) {
+ event.target.setAttribute("readonly", "");
+ } else {
+ event.target.removeAttribute("readonly");
+ }
+ },
+ required: function required(event) {
+ if (event.detail.required) {
+ event.target.setAttribute("required", "");
+ } else {
+ event.target.removeAttribute("required");
+ }
+ },
+ bgColor: function bgColor(event) {
+ setColor("bgColor", "backgroundColor", event);
+ },
+ fillColor: function fillColor(event) {
+ setColor("fillColor", "backgroundColor", event);
+ },
+ fgColor: function fgColor(event) {
+ setColor("fgColor", "color", event);
+ },
+ textColor: function textColor(event) {
+ setColor("textColor", "color", event);
+ },
+ borderColor: function borderColor(event) {
+ setColor("borderColor", "borderColor", event);
+ },
+ strokeColor: function strokeColor(event) {
+ setColor("strokeColor", "borderColor", event);
+ }
+ };
+
+ for (var _i6 = 0, _Object$keys2 = Object.keys(jsEvent.detail); _i6 < _Object$keys2.length; _i6++) {
+ var name = _Object$keys2[_i6];
+ var action = actions[name] || commonActions[name];
+
+ if (action) {
+ action(jsEvent);
+ }
+ }
+ }
+ }]);
+
+ return WidgetAnnotationElement;
+}(AnnotationElement);
+
+var TextWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem) {
+ _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem);
+
+ var _super4 = _createSuper(TextWidgetAnnotationElement);
+
+ function TextWidgetAnnotationElement(parameters) {
+ _classCallCheck(this, TextWidgetAnnotationElement);
+
+ var isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
+ return _super4.call(this, parameters, {
+ isRenderable: isRenderable
+ });
+ }
+
+ _createClass(TextWidgetAnnotationElement, [{
+ key: "setPropertyOnSiblings",
+ value: function setPropertyOnSiblings(base, key, value, keyInStorage) {
+ var storage = this.annotationStorage;
+
+ var _iterator9 = _createForOfIteratorHelper(this._getElementsByName(base.name, base.id)),
+ _step9;
+
+ try {
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
+ var element = _step9.value;
+
+ if (element.domElement) {
+ element.domElement[key] = value;
+ }
+
+ storage.setValue(element.id, _defineProperty({}, keyInStorage, value));
+ }
+ } catch (err) {
+ _iterator9.e(err);
+ } finally {
+ _iterator9.f();
+ }
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ var _this7 = this;
+
+ var storage = this.annotationStorage;
+ var id = this.data.id;
+ this.container.className = "textWidgetAnnotation";
+ var element = null;
+
+ if (this.renderForms) {
+ var storedData = storage.getValue(id, {
+ value: this.data.fieldValue,
+ valueAsString: this.data.fieldValue
+ });
+ var textContent = storedData.valueAsString || storedData.value || "";
+ var elementData = {
+ userValue: null,
+ formattedValue: null
+ };
+
+ if (this.data.multiLine) {
+ element = document.createElement("textarea");
+ element.textContent = textContent;
+ } else {
+ element = document.createElement("input");
+ element.type = "text";
+ element.setAttribute("value", textContent);
+ }
+
+ GetElementsByNameSet.add(element);
+ element.disabled = this.data.readOnly;
+ element.name = this.data.fieldName;
+ element.tabIndex = DEFAULT_TAB_INDEX;
+ elementData.userValue = textContent;
+ element.setAttribute("id", id);
+ element.addEventListener("input", function (event) {
+ storage.setValue(id, {
+ value: event.target.value
+ });
+
+ _this7.setPropertyOnSiblings(element, "value", event.target.value, "value");
+ });
+ element.addEventListener("resetform", function (event) {
+ var defaultValue = _this7.data.defaultFieldValue || "";
+ element.value = elementData.userValue = defaultValue;
+ delete elementData.formattedValue;
+ });
+
+ var blurListener = function blurListener(event) {
+ if (elementData.formattedValue) {
+ event.target.value = elementData.formattedValue;
+ }
+
+ event.target.scrollLeft = 0;
+ };
+
+ if (this.enableScripting && this.hasJSActions) {
+ var _this$data$actions2;
+
+ element.addEventListener("focus", function (event) {
+ if (elementData.userValue) {
+ event.target.value = elementData.userValue;
+ }
+ });
+ element.addEventListener("updatefromsandbox", function (jsEvent) {
+ var actions = {
+ value: function value(event) {
+ elementData.userValue = event.detail.value || "";
+ storage.setValue(id, {
+ value: elementData.userValue.toString()
+ });
+
+ if (!elementData.formattedValue) {
+ event.target.value = elementData.userValue;
+ }
+ },
+ valueAsString: function valueAsString(event) {
+ elementData.formattedValue = event.detail.valueAsString || "";
+
+ if (event.target !== document.activeElement) {
+ event.target.value = elementData.formattedValue;
+ }
+
+ storage.setValue(id, {
+ formattedValue: elementData.formattedValue
+ });
+ },
+ selRange: function selRange(event) {
+ var _event$detail$selRang = _slicedToArray(event.detail.selRange, 2),
+ selStart = _event$detail$selRang[0],
+ selEnd = _event$detail$selRang[1];
+
+ if (selStart >= 0 && selEnd < event.target.value.length) {
+ event.target.setSelectionRange(selStart, selEnd);
+ }
+ }
+ };
+
+ _this7._dispatchEventFromSandbox(actions, jsEvent);
+ });
+ element.addEventListener("keydown", function (event) {
+ var _this7$linkService$ev;
+
+ var commitKey = -1;
+
+ if (event.key === "Escape") {
+ commitKey = 0;
+ } else if (event.key === "Enter") {
+ commitKey = 2;
+ } else if (event.key === "Tab") {
+ commitKey = 3;
+ }
+
+ if (commitKey === -1) {
+ return;
+ }
+
+ elementData.userValue = event.target.value;
+ (_this7$linkService$ev = _this7.linkService.eventBus) === null || _this7$linkService$ev === void 0 ? void 0 : _this7$linkService$ev.dispatch("dispatcheventinsandbox", {
+ source: _this7,
+ detail: {
+ id: id,
+ name: "Keystroke",
+ value: event.target.value,
+ willCommit: true,
+ commitKey: commitKey,
+ selStart: event.target.selectionStart,
+ selEnd: event.target.selectionEnd
+ }
+ });
+ });
+ var _blurListener = blurListener;
+ blurListener = null;
+ element.addEventListener("blur", function (event) {
+ elementData.userValue = event.target.value;
+
+ if (_this7._mouseState.isDown) {
+ var _this7$linkService$ev2;
+
+ (_this7$linkService$ev2 = _this7.linkService.eventBus) === null || _this7$linkService$ev2 === void 0 ? void 0 : _this7$linkService$ev2.dispatch("dispatcheventinsandbox", {
+ source: _this7,
+ detail: {
+ id: id,
+ name: "Keystroke",
+ value: event.target.value,
+ willCommit: true,
+ commitKey: 1,
+ selStart: event.target.selectionStart,
+ selEnd: event.target.selectionEnd
+ }
+ });
+ }
+
+ _blurListener(event);
+ });
+
+ if ((_this$data$actions2 = this.data.actions) !== null && _this$data$actions2 !== void 0 && _this$data$actions2.Keystroke) {
+ element.addEventListener("beforeinput", function (event) {
+ var _this7$linkService$ev3;
+
+ elementData.formattedValue = "";
+ var data = event.data,
+ target = event.target;
+ var value = target.value,
+ selectionStart = target.selectionStart,
+ selectionEnd = target.selectionEnd;
+ (_this7$linkService$ev3 = _this7.linkService.eventBus) === null || _this7$linkService$ev3 === void 0 ? void 0 : _this7$linkService$ev3.dispatch("dispatcheventinsandbox", {
+ source: _this7,
+ detail: {
+ id: id,
+ name: "Keystroke",
+ value: value,
+ change: data,
+ willCommit: false,
+ selStart: selectionStart,
+ selEnd: selectionEnd
+ }
+ });
+ });
+ }
+
+ this._setEventListeners(element, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], function (event) {
+ return event.target.value;
+ });
+ }
+
+ if (blurListener) {
+ element.addEventListener("blur", blurListener);
+ }
+
+ if (this.data.maxLen !== null) {
+ element.maxLength = this.data.maxLen;
+ }
+
+ if (this.data.comb) {
+ var fieldWidth = this.data.rect[2] - this.data.rect[0];
+ var combWidth = fieldWidth / this.data.maxLen;
+ element.classList.add("comb");
+ element.style.letterSpacing = "calc(".concat(combWidth, "px - 1ch)");
+ }
+ } else {
+ element = document.createElement("div");
+ element.textContent = this.data.fieldValue;
+ element.style.verticalAlign = "middle";
+ element.style.display = "table-cell";
+ }
+
+ this._setTextStyle(element);
+
+ this._setBackgroundColor(element);
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+ }, {
+ key: "_setTextStyle",
+ value: function _setTextStyle(element) {
+ var TEXT_ALIGNMENT = ["left", "center", "right"];
+ var _this$data$defaultApp = this.data.defaultAppearanceData,
+ fontSize = _this$data$defaultApp.fontSize,
+ fontColor = _this$data$defaultApp.fontColor;
+ var style = element.style;
+
+ if (fontSize) {
+ style.fontSize = "".concat(fontSize / 16.0, "em");
+ }
+
+ style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);
+
+ if (this.data.textAlignment !== null) {
+ style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
+ }
+ }
+ }]);
+
+ return TextWidgetAnnotationElement;
+}(WidgetAnnotationElement);
+
+var CheckboxWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem2) {
+ _inherits(CheckboxWidgetAnnotationElement, _WidgetAnnotationElem2);
+
+ var _super5 = _createSuper(CheckboxWidgetAnnotationElement);
+
+ function CheckboxWidgetAnnotationElement(parameters) {
+ _classCallCheck(this, CheckboxWidgetAnnotationElement);
+
+ return _super5.call(this, parameters, {
+ isRenderable: parameters.renderForms
+ });
+ }
+
+ _createClass(CheckboxWidgetAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ var _this8 = this;
+
+ var storage = this.annotationStorage;
+ var data = this.data;
+ var id = data.id;
+ var value = storage.getValue(id, {
+ value: data.exportValue === data.fieldValue
+ }).value;
+
+ if (typeof value === "string") {
+ value = value !== "Off";
+ storage.setValue(id, {
+ value: value
+ });
+ }
+
+ this.container.className = "buttonWidgetAnnotation checkBox";
+ var element = document.createElement("input");
+ GetElementsByNameSet.add(element);
+ element.disabled = data.readOnly;
+ element.type = "checkbox";
+ element.name = data.fieldName;
+
+ if (value) {
+ element.setAttribute("checked", true);
+ }
+
+ element.setAttribute("id", id);
+ element.setAttribute("exportValue", data.exportValue);
+ element.tabIndex = DEFAULT_TAB_INDEX;
+ element.addEventListener("change", function (event) {
+ var _event$target = event.target,
+ name = _event$target.name,
+ checked = _event$target.checked;
+
+ var _iterator10 = _createForOfIteratorHelper(_this8._getElementsByName(name, id)),
+ _step10;
+
+ try {
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
+ var checkbox = _step10.value;
+ var curChecked = checked && checkbox.exportValue === data.exportValue;
+
+ if (checkbox.domElement) {
+ checkbox.domElement.checked = curChecked;
+ }
+
+ storage.setValue(checkbox.id, {
+ value: curChecked
+ });
+ }
+ } catch (err) {
+ _iterator10.e(err);
+ } finally {
+ _iterator10.f();
+ }
+
+ storage.setValue(id, {
+ value: checked
+ });
+ });
+ element.addEventListener("resetform", function (event) {
+ var defaultValue = data.defaultFieldValue || "Off";
+ event.target.checked = defaultValue === data.exportValue;
+ });
+
+ if (this.enableScripting && this.hasJSActions) {
+ element.addEventListener("updatefromsandbox", function (jsEvent) {
+ var actions = {
+ value: function value(event) {
+ event.target.checked = event.detail.value !== "Off";
+ storage.setValue(id, {
+ value: event.target.checked
+ });
+ }
+ };
+
+ _this8._dispatchEventFromSandbox(actions, jsEvent);
+ });
+
+ this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], function (event) {
+ return event.target.checked;
+ });
+ }
+
+ this._setBackgroundColor(element);
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+ }]);
+
+ return CheckboxWidgetAnnotationElement;
+}(WidgetAnnotationElement);
+
+var RadioButtonWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem3) {
+ _inherits(RadioButtonWidgetAnnotationElement, _WidgetAnnotationElem3);
+
+ var _super6 = _createSuper(RadioButtonWidgetAnnotationElement);
+
+ function RadioButtonWidgetAnnotationElement(parameters) {
+ _classCallCheck(this, RadioButtonWidgetAnnotationElement);
+
+ return _super6.call(this, parameters, {
+ isRenderable: parameters.renderForms
+ });
+ }
+
+ _createClass(RadioButtonWidgetAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ var _this9 = this;
+
+ this.container.className = "buttonWidgetAnnotation radioButton";
+ var storage = this.annotationStorage;
+ var data = this.data;
+ var id = data.id;
+ var value = storage.getValue(id, {
+ value: data.fieldValue === data.buttonValue
+ }).value;
+
+ if (typeof value === "string") {
+ value = value !== data.buttonValue;
+ storage.setValue(id, {
+ value: value
+ });
+ }
+
+ var element = document.createElement("input");
+ GetElementsByNameSet.add(element);
+ element.disabled = data.readOnly;
+ element.type = "radio";
+ element.name = data.fieldName;
+
+ if (value) {
+ element.setAttribute("checked", true);
+ }
+
+ element.setAttribute("id", id);
+ element.tabIndex = DEFAULT_TAB_INDEX;
+ element.addEventListener("change", function (event) {
+ var _event$target2 = event.target,
+ name = _event$target2.name,
+ checked = _event$target2.checked;
+
+ var _iterator11 = _createForOfIteratorHelper(_this9._getElementsByName(name, id)),
+ _step11;
+
+ try {
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
+ var radio = _step11.value;
+ storage.setValue(radio.id, {
+ value: false
+ });
+ }
+ } catch (err) {
+ _iterator11.e(err);
+ } finally {
+ _iterator11.f();
+ }
+
+ storage.setValue(id, {
+ value: checked
+ });
+ });
+ element.addEventListener("resetform", function (event) {
+ var defaultValue = data.defaultFieldValue;
+ event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;
+ });
+
+ if (this.enableScripting && this.hasJSActions) {
+ var pdfButtonValue = data.buttonValue;
+ element.addEventListener("updatefromsandbox", function (jsEvent) {
+ var actions = {
+ value: function value(event) {
+ var checked = pdfButtonValue === event.detail.value;
+
+ var _iterator12 = _createForOfIteratorHelper(_this9._getElementsByName(event.target.name)),
+ _step12;
+
+ try {
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
+ var radio = _step12.value;
+ var curChecked = checked && radio.id === id;
+
+ if (radio.domElement) {
+ radio.domElement.checked = curChecked;
+ }
+
+ storage.setValue(radio.id, {
+ value: curChecked
+ });
+ }
+ } catch (err) {
+ _iterator12.e(err);
+ } finally {
+ _iterator12.f();
+ }
+ }
+ };
+
+ _this9._dispatchEventFromSandbox(actions, jsEvent);
+ });
+
+ this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], function (event) {
+ return event.target.checked;
+ });
+ }
+
+ this._setBackgroundColor(element);
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+ }]);
+
+ return RadioButtonWidgetAnnotationElement;
+}(WidgetAnnotationElement);
+
+var PushButtonWidgetAnnotationElement = /*#__PURE__*/function (_LinkAnnotationElemen) {
+ _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen);
+
+ var _super7 = _createSuper(PushButtonWidgetAnnotationElement);
+
+ function PushButtonWidgetAnnotationElement(parameters) {
+ _classCallCheck(this, PushButtonWidgetAnnotationElement);
+
+ return _super7.call(this, parameters, {
+ ignoreBorder: parameters.data.hasAppearance
+ });
+ }
+
+ _createClass(PushButtonWidgetAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ var container = _get(_getPrototypeOf(PushButtonWidgetAnnotationElement.prototype), "render", this).call(this);
+
+ container.className = "buttonWidgetAnnotation pushButton";
+
+ if (this.data.alternativeText) {
+ container.title = this.data.alternativeText;
+ }
+
+ return container;
+ }
+ }]);
+
+ return PushButtonWidgetAnnotationElement;
+}(LinkAnnotationElement);
+
+var ChoiceWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem4) {
+ _inherits(ChoiceWidgetAnnotationElement, _WidgetAnnotationElem4);
+
+ var _super8 = _createSuper(ChoiceWidgetAnnotationElement);
+
+ function ChoiceWidgetAnnotationElement(parameters) {
+ _classCallCheck(this, ChoiceWidgetAnnotationElement);
+
+ return _super8.call(this, parameters, {
+ isRenderable: parameters.renderForms
+ });
+ }
+
+ _createClass(ChoiceWidgetAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ var _this10 = this;
+
+ this.container.className = "choiceWidgetAnnotation";
+ var storage = this.annotationStorage;
+ var id = this.data.id;
+ storage.getValue(id, {
+ value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined
+ });
+ var fontSize = this.data.defaultAppearanceData.fontSize;
+
+ if (!fontSize) {
+ fontSize = 9;
+ }
+
+ var fontSizeStyle = "calc(".concat(fontSize, "px * var(--zoom-factor))");
+ var selectElement = document.createElement("select");
+ GetElementsByNameSet.add(selectElement);
+ selectElement.disabled = this.data.readOnly;
+ selectElement.name = this.data.fieldName;
+ selectElement.setAttribute("id", id);
+ selectElement.tabIndex = DEFAULT_TAB_INDEX;
+ selectElement.style.fontSize = "".concat(fontSize, "px");
+
+ if (!this.data.combo) {
+ selectElement.size = this.data.options.length;
+
+ if (this.data.multiSelect) {
+ selectElement.multiple = true;
+ }
+ }
+
+ selectElement.addEventListener("resetform", function (event) {
+ var defaultValue = _this10.data.defaultFieldValue;
+
+ var _iterator13 = _createForOfIteratorHelper(selectElement.options),
+ _step13;
+
+ try {
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
+ var option = _step13.value;
+ option.selected = option.value === defaultValue;
+ }
+ } catch (err) {
+ _iterator13.e(err);
+ } finally {
+ _iterator13.f();
+ }
+ });
+
+ var _iterator14 = _createForOfIteratorHelper(this.data.options),
+ _step14;
+
+ try {
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
+ var option = _step14.value;
+ var optionElement = document.createElement("option");
+ optionElement.textContent = option.displayValue;
+ optionElement.value = option.exportValue;
+
+ if (this.data.combo) {
+ optionElement.style.fontSize = fontSizeStyle;
+ }
+
+ if (this.data.fieldValue.includes(option.exportValue)) {
+ optionElement.setAttribute("selected", true);
+ }
+
+ selectElement.appendChild(optionElement);
+ }
+ } catch (err) {
+ _iterator14.e(err);
+ } finally {
+ _iterator14.f();
+ }
+
+ var getValue = function getValue(event, isExport) {
+ var name = isExport ? "value" : "textContent";
+ var options = event.target.options;
+
+ if (!event.target.multiple) {
+ return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];
+ }
+
+ return Array.prototype.filter.call(options, function (option) {
+ return option.selected;
+ }).map(function (option) {
+ return option[name];
+ });
+ };
+
+ var getItems = function getItems(event) {
+ var options = event.target.options;
+ return Array.prototype.map.call(options, function (option) {
+ return {
+ displayValue: option.textContent,
+ exportValue: option.value
+ };
+ });
+ };
+
+ if (this.enableScripting && this.hasJSActions) {
+ selectElement.addEventListener("updatefromsandbox", function (jsEvent) {
+ var actions = {
+ value: function value(event) {
+ var value = event.detail.value;
+ var values = new Set(Array.isArray(value) ? value : [value]);
+
+ var _iterator15 = _createForOfIteratorHelper(selectElement.options),
+ _step15;
+
+ try {
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
+ var option = _step15.value;
+ option.selected = values.has(option.value);
+ }
+ } catch (err) {
+ _iterator15.e(err);
+ } finally {
+ _iterator15.f();
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true)
+ });
+ },
+ multipleSelection: function multipleSelection(event) {
+ selectElement.multiple = true;
+ },
+ remove: function remove(event) {
+ var options = selectElement.options;
+ var index = event.detail.remove;
+ options[index].selected = false;
+ selectElement.remove(index);
+
+ if (options.length > 0) {
+ var i = Array.prototype.findIndex.call(options, function (option) {
+ return option.selected;
+ });
+
+ if (i === -1) {
+ options[0].selected = true;
+ }
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true),
+ items: getItems(event)
+ });
+ },
+ clear: function clear(event) {
+ while (selectElement.length !== 0) {
+ selectElement.remove(0);
+ }
+
+ storage.setValue(id, {
+ value: null,
+ items: []
+ });
+ },
+ insert: function insert(event) {
+ var _event$detail$insert = event.detail.insert,
+ index = _event$detail$insert.index,
+ displayValue = _event$detail$insert.displayValue,
+ exportValue = _event$detail$insert.exportValue;
+ var optionElement = document.createElement("option");
+ optionElement.textContent = displayValue;
+ optionElement.value = exportValue;
+ selectElement.insertBefore(optionElement, selectElement.children[index]);
+ storage.setValue(id, {
+ value: getValue(event, true),
+ items: getItems(event)
+ });
+ },
+ items: function items(event) {
+ var items = event.detail.items;
+
+ while (selectElement.length !== 0) {
+ selectElement.remove(0);
+ }
+
+ var _iterator16 = _createForOfIteratorHelper(items),
+ _step16;
+
+ try {
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
+ var item = _step16.value;
+ var displayValue = item.displayValue,
+ exportValue = item.exportValue;
+ var optionElement = document.createElement("option");
+ optionElement.textContent = displayValue;
+ optionElement.value = exportValue;
+ selectElement.appendChild(optionElement);
+ }
+ } catch (err) {
+ _iterator16.e(err);
+ } finally {
+ _iterator16.f();
+ }
+
+ if (selectElement.options.length > 0) {
+ selectElement.options[0].selected = true;
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true),
+ items: getItems(event)
+ });
+ },
+ indices: function indices(event) {
+ var indices = new Set(event.detail.indices);
+
+ var _iterator17 = _createForOfIteratorHelper(event.target.options),
+ _step17;
+
+ try {
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
+ var option = _step17.value;
+ option.selected = indices.has(option.index);
+ }
+ } catch (err) {
+ _iterator17.e(err);
+ } finally {
+ _iterator17.f();
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true)
+ });
+ },
+ editable: function editable(event) {
+ event.target.disabled = !event.detail.editable;
+ }
+ };
+
+ _this10._dispatchEventFromSandbox(actions, jsEvent);
+ });
+ selectElement.addEventListener("input", function (event) {
+ var _this10$linkService$e;
+
+ var exportValue = getValue(event, true);
+ var value = getValue(event, false);
+ storage.setValue(id, {
+ value: exportValue
+ });
+ (_this10$linkService$e = _this10.linkService.eventBus) === null || _this10$linkService$e === void 0 ? void 0 : _this10$linkService$e.dispatch("dispatcheventinsandbox", {
+ source: _this10,
+ detail: {
+ id: id,
+ name: "Keystroke",
+ value: value,
+ changeEx: exportValue,
+ willCommit: true,
+ commitKey: 1,
+ keyDown: false
+ }
+ });
+ });
+
+ this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"]], function (event) {
+ return event.target.checked;
+ });
+ } else {
+ selectElement.addEventListener("input", function (event) {
+ storage.setValue(id, {
+ value: getValue(event)
+ });
+ });
+ }
+
+ this._setBackgroundColor(selectElement);
+
+ this.container.appendChild(selectElement);
+ return this.container;
+ }
+ }]);
+
+ return ChoiceWidgetAnnotationElement;
+}(WidgetAnnotationElement);
+
+var PopupAnnotationElement = /*#__PURE__*/function (_AnnotationElement4) {
+ _inherits(PopupAnnotationElement, _AnnotationElement4);
+
+ var _super9 = _createSuper(PopupAnnotationElement);
+
+ function PopupAnnotationElement(parameters) {
+ var _parameters$data$titl2, _parameters$data$cont2, _parameters$data$rich2;
+
+ _classCallCheck(this, PopupAnnotationElement);
+
+ var isRenderable = !!((_parameters$data$titl2 = parameters.data.titleObj) !== null && _parameters$data$titl2 !== void 0 && _parameters$data$titl2.str || (_parameters$data$cont2 = parameters.data.contentsObj) !== null && _parameters$data$cont2 !== void 0 && _parameters$data$cont2.str || (_parameters$data$rich2 = parameters.data.richText) !== null && _parameters$data$rich2 !== void 0 && _parameters$data$rich2.str);
+ return _super9.call(this, parameters, {
+ isRenderable: isRenderable
+ });
+ }
+
+ _createClass(PopupAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ var IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"];
+ this.container.className = "popupAnnotation";
+
+ if (IGNORE_TYPES.includes(this.data.parentType)) {
+ return this.container;
+ }
+
+ var selector = "[data-annotation-id=\"".concat(this.data.parentId, "\"]");
+ var parentElements = this.layer.querySelectorAll(selector);
+
+ if (parentElements.length === 0) {
+ return this.container;
+ }
+
+ var popup = new PopupElement({
+ container: this.container,
+ trigger: Array.from(parentElements),
+ color: this.data.color,
+ titleObj: this.data.titleObj,
+ modificationDate: this.data.modificationDate,
+ contentsObj: this.data.contentsObj,
+ richText: this.data.richText
+ });
+ var page = this.page;
+
+ var rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]);
+
+ var popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0];
+ var popupTop = rect[1];
+ this.container.style.transformOrigin = "".concat(-popupLeft, "px ").concat(-popupTop, "px");
+ this.container.style.left = "".concat(popupLeft, "px");
+ this.container.style.top = "".concat(popupTop, "px");
+ this.container.appendChild(popup.render());
+ return this.container;
+ }
+ }]);
+
+ return PopupAnnotationElement;
+}(AnnotationElement);
+
+var PopupElement = /*#__PURE__*/function () {
+ function PopupElement(parameters) {
+ _classCallCheck(this, PopupElement);
+
+ this.container = parameters.container;
+ this.trigger = parameters.trigger;
+ this.color = parameters.color;
+ this.titleObj = parameters.titleObj;
+ this.modificationDate = parameters.modificationDate;
+ this.contentsObj = parameters.contentsObj;
+ this.richText = parameters.richText;
+ this.hideWrapper = parameters.hideWrapper || false;
+ this.pinned = false;
+ }
+
+ _createClass(PopupElement, [{
+ key: "render",
+ value: function render() {
+ var _this$richText, _this$contentsObj;
+
+ var BACKGROUND_ENLIGHT = 0.7;
+ var wrapper = document.createElement("div");
+ wrapper.className = "popupWrapper";
+ this.hideElement = this.hideWrapper ? wrapper : this.container;
+ this.hideElement.hidden = true;
+ var popup = document.createElement("div");
+ popup.className = "popup";
+ var color = this.color;
+
+ if (color) {
+ var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
+ var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
+ var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
+ popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0);
+ }
+
+ var title = document.createElement("h1");
+ title.dir = this.titleObj.dir;
+ title.textContent = this.titleObj.str;
+ popup.appendChild(title);
+
+ var dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);
+
+ if (dateObject) {
+ var modificationDate = document.createElement("span");
+ modificationDate.className = "popupDate";
+ modificationDate.textContent = "{{date}}, {{time}}";
+ modificationDate.dataset.l10nId = "annotation_date_string";
+ modificationDate.dataset.l10nArgs = JSON.stringify({
+ date: dateObject.toLocaleDateString(),
+ time: dateObject.toLocaleTimeString()
+ });
+ popup.appendChild(modificationDate);
+ }
+
+ if ((_this$richText = this.richText) !== null && _this$richText !== void 0 && _this$richText.str && (!((_this$contentsObj = this.contentsObj) !== null && _this$contentsObj !== void 0 && _this$contentsObj.str) || this.contentsObj.str === this.richText.str)) {
+ _xfa_layer.XfaLayer.render({
+ xfaHtml: this.richText.html,
+ intent: "richText",
+ div: popup
+ });
+
+ popup.lastChild.className = "richText popupContent";
+ } else {
+ var contents = this._formatContents(this.contentsObj);
+
+ popup.appendChild(contents);
+ }
+
+ if (!Array.isArray(this.trigger)) {
+ this.trigger = [this.trigger];
+ }
+
+ var _iterator18 = _createForOfIteratorHelper(this.trigger),
+ _step18;
+
+ try {
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
+ var element = _step18.value;
+ element.addEventListener("click", this._toggle.bind(this));
+ element.addEventListener("mouseover", this._show.bind(this, false));
+ element.addEventListener("mouseout", this._hide.bind(this, false));
+ }
+ } catch (err) {
+ _iterator18.e(err);
+ } finally {
+ _iterator18.f();
+ }
+
+ popup.addEventListener("click", this._hide.bind(this, true));
+ wrapper.appendChild(popup);
+ return wrapper;
+ }
+ }, {
+ key: "_formatContents",
+ value: function _formatContents(_ref2) {
+ var str = _ref2.str,
+ dir = _ref2.dir;
+ var p = document.createElement("p");
+ p.className = "popupContent";
+ p.dir = dir;
+ var lines = str.split(/(?:\r\n?|\n)/);
+
+ for (var i = 0, ii = lines.length; i < ii; ++i) {
+ var line = lines[i];
+ p.appendChild(document.createTextNode(line));
+
+ if (i < ii - 1) {
+ p.appendChild(document.createElement("br"));
+ }
+ }
+
+ return p;
+ }
+ }, {
+ key: "_toggle",
+ value: function _toggle() {
+ if (this.pinned) {
+ this._hide(true);
+ } else {
+ this._show(true);
+ }
+ }
+ }, {
+ key: "_show",
+ value: function _show() {
+ var pin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+ if (pin) {
+ this.pinned = true;
+ }
+
+ if (this.hideElement.hidden) {
+ this.hideElement.hidden = false;
+ this.container.style.zIndex += 1;
+ }
+ }
+ }, {
+ key: "_hide",
+ value: function _hide() {
+ var unpin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+ if (unpin) {
+ this.pinned = false;
+ }
+
+ if (!this.hideElement.hidden && !this.pinned) {
+ this.hideElement.hidden = true;
+ this.container.style.zIndex -= 1;
+ }
+ }
+ }]);
+
+ return PopupElement;
+}();
+
+var FreeTextAnnotationElement = /*#__PURE__*/function (_AnnotationElement5) {
+ _inherits(FreeTextAnnotationElement, _AnnotationElement5);
+
+ var _super10 = _createSuper(FreeTextAnnotationElement);
+
+ function FreeTextAnnotationElement(parameters) {
+ var _parameters$data$titl3, _parameters$data$cont3, _parameters$data$rich3;
+
+ _classCallCheck(this, FreeTextAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl3 = parameters.data.titleObj) !== null && _parameters$data$titl3 !== void 0 && _parameters$data$titl3.str || (_parameters$data$cont3 = parameters.data.contentsObj) !== null && _parameters$data$cont3 !== void 0 && _parameters$data$cont3.str || (_parameters$data$rich3 = parameters.data.richText) !== null && _parameters$data$rich3 !== void 0 && _parameters$data$rich3.str);
+ return _super10.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ _createClass(FreeTextAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = "freeTextAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ return this.container;
+ }
+ }]);
+
+ return FreeTextAnnotationElement;
+}(AnnotationElement);
+
+var LineAnnotationElement = /*#__PURE__*/function (_AnnotationElement6) {
+ _inherits(LineAnnotationElement, _AnnotationElement6);
+
+ var _super11 = _createSuper(LineAnnotationElement);
+
+ function LineAnnotationElement(parameters) {
+ var _parameters$data$titl4, _parameters$data$cont4, _parameters$data$rich4;
+
+ _classCallCheck(this, LineAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl4 = parameters.data.titleObj) !== null && _parameters$data$titl4 !== void 0 && _parameters$data$titl4.str || (_parameters$data$cont4 = parameters.data.contentsObj) !== null && _parameters$data$cont4 !== void 0 && _parameters$data$cont4.str || (_parameters$data$rich4 = parameters.data.richText) !== null && _parameters$data$rich4 !== void 0 && _parameters$data$rich4.str);
+ return _super11.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ _createClass(LineAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = "lineAnnotation";
+ var data = this.data;
+
+ var _getRectDims2 = getRectDims(data.rect),
+ width = _getRectDims2.width,
+ height = _getRectDims2.height;
+
+ var svg = this.svgFactory.create(width, height);
+ var line = this.svgFactory.createElement("svg:line");
+ line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]);
+ line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]);
+ line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]);
+ line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]);
+ line.setAttribute("stroke-width", data.borderStyle.width || 1);
+ line.setAttribute("stroke", "transparent");
+ line.setAttribute("fill", "transparent");
+ svg.appendChild(line);
+ this.container.append(svg);
+
+ this._createPopup(line, data);
+
+ return this.container;
+ }
+ }]);
+
+ return LineAnnotationElement;
+}(AnnotationElement);
+
+var SquareAnnotationElement = /*#__PURE__*/function (_AnnotationElement7) {
+ _inherits(SquareAnnotationElement, _AnnotationElement7);
+
+ var _super12 = _createSuper(SquareAnnotationElement);
+
+ function SquareAnnotationElement(parameters) {
+ var _parameters$data$titl5, _parameters$data$cont5, _parameters$data$rich5;
+
+ _classCallCheck(this, SquareAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl5 = parameters.data.titleObj) !== null && _parameters$data$titl5 !== void 0 && _parameters$data$titl5.str || (_parameters$data$cont5 = parameters.data.contentsObj) !== null && _parameters$data$cont5 !== void 0 && _parameters$data$cont5.str || (_parameters$data$rich5 = parameters.data.richText) !== null && _parameters$data$rich5 !== void 0 && _parameters$data$rich5.str);
+ return _super12.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ _createClass(SquareAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = "squareAnnotation";
+ var data = this.data;
+
+ var _getRectDims3 = getRectDims(data.rect),
+ width = _getRectDims3.width,
+ height = _getRectDims3.height;
+
+ var svg = this.svgFactory.create(width, height);
+ var borderWidth = data.borderStyle.width;
+ var square = this.svgFactory.createElement("svg:rect");
+ square.setAttribute("x", borderWidth / 2);
+ square.setAttribute("y", borderWidth / 2);
+ square.setAttribute("width", width - borderWidth);
+ square.setAttribute("height", height - borderWidth);
+ square.setAttribute("stroke-width", borderWidth || 1);
+ square.setAttribute("stroke", "transparent");
+ square.setAttribute("fill", "transparent");
+ svg.appendChild(square);
+ this.container.append(svg);
+
+ this._createPopup(square, data);
+
+ return this.container;
+ }
+ }]);
+
+ return SquareAnnotationElement;
+}(AnnotationElement);
+
+var CircleAnnotationElement = /*#__PURE__*/function (_AnnotationElement8) {
+ _inherits(CircleAnnotationElement, _AnnotationElement8);
+
+ var _super13 = _createSuper(CircleAnnotationElement);
+
+ function CircleAnnotationElement(parameters) {
+ var _parameters$data$titl6, _parameters$data$cont6, _parameters$data$rich6;
+
+ _classCallCheck(this, CircleAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl6 = parameters.data.titleObj) !== null && _parameters$data$titl6 !== void 0 && _parameters$data$titl6.str || (_parameters$data$cont6 = parameters.data.contentsObj) !== null && _parameters$data$cont6 !== void 0 && _parameters$data$cont6.str || (_parameters$data$rich6 = parameters.data.richText) !== null && _parameters$data$rich6 !== void 0 && _parameters$data$rich6.str);
+ return _super13.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ _createClass(CircleAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = "circleAnnotation";
+ var data = this.data;
+
+ var _getRectDims4 = getRectDims(data.rect),
+ width = _getRectDims4.width,
+ height = _getRectDims4.height;
+
+ var svg = this.svgFactory.create(width, height);
+ var borderWidth = data.borderStyle.width;
+ var circle = this.svgFactory.createElement("svg:ellipse");
+ circle.setAttribute("cx", width / 2);
+ circle.setAttribute("cy", height / 2);
+ circle.setAttribute("rx", width / 2 - borderWidth / 2);
+ circle.setAttribute("ry", height / 2 - borderWidth / 2);
+ circle.setAttribute("stroke-width", borderWidth || 1);
+ circle.setAttribute("stroke", "transparent");
+ circle.setAttribute("fill", "transparent");
+ svg.appendChild(circle);
+ this.container.append(svg);
+
+ this._createPopup(circle, data);
+
+ return this.container;
+ }
+ }]);
+
+ return CircleAnnotationElement;
+}(AnnotationElement);
+
+var PolylineAnnotationElement = /*#__PURE__*/function (_AnnotationElement9) {
+ _inherits(PolylineAnnotationElement, _AnnotationElement9);
+
+ var _super14 = _createSuper(PolylineAnnotationElement);
+
+ function PolylineAnnotationElement(parameters) {
+ var _parameters$data$titl7, _parameters$data$cont7, _parameters$data$rich7;
+
+ var _this11;
+
+ _classCallCheck(this, PolylineAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl7 = parameters.data.titleObj) !== null && _parameters$data$titl7 !== void 0 && _parameters$data$titl7.str || (_parameters$data$cont7 = parameters.data.contentsObj) !== null && _parameters$data$cont7 !== void 0 && _parameters$data$cont7.str || (_parameters$data$rich7 = parameters.data.richText) !== null && _parameters$data$rich7 !== void 0 && _parameters$data$rich7.str);
+ _this11 = _super14.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ _this11.containerClassName = "polylineAnnotation";
+ _this11.svgElementName = "svg:polyline";
+ return _this11;
+ }
+
+ _createClass(PolylineAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = this.containerClassName;
+ var data = this.data;
+
+ var _getRectDims5 = getRectDims(data.rect),
+ width = _getRectDims5.width,
+ height = _getRectDims5.height;
+
+ var svg = this.svgFactory.create(width, height);
+ var points = [];
+
+ var _iterator19 = _createForOfIteratorHelper(data.vertices),
+ _step19;
+
+ try {
+ for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
+ var coordinate = _step19.value;
+ var x = coordinate.x - data.rect[0];
+ var y = data.rect[3] - coordinate.y;
+ points.push(x + "," + y);
+ }
+ } catch (err) {
+ _iterator19.e(err);
+ } finally {
+ _iterator19.f();
+ }
+
+ points = points.join(" ");
+ var polyline = this.svgFactory.createElement(this.svgElementName);
+ polyline.setAttribute("points", points);
+ polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
+ polyline.setAttribute("stroke", "transparent");
+ polyline.setAttribute("fill", "transparent");
+ svg.appendChild(polyline);
+ this.container.append(svg);
+
+ this._createPopup(polyline, data);
+
+ return this.container;
+ }
+ }]);
+
+ return PolylineAnnotationElement;
+}(AnnotationElement);
+
+var PolygonAnnotationElement = /*#__PURE__*/function (_PolylineAnnotationEl) {
+ _inherits(PolygonAnnotationElement, _PolylineAnnotationEl);
+
+ var _super15 = _createSuper(PolygonAnnotationElement);
+
+ function PolygonAnnotationElement(parameters) {
+ var _this12;
+
+ _classCallCheck(this, PolygonAnnotationElement);
+
+ _this12 = _super15.call(this, parameters);
+ _this12.containerClassName = "polygonAnnotation";
+ _this12.svgElementName = "svg:polygon";
+ return _this12;
+ }
+
+ return _createClass(PolygonAnnotationElement);
+}(PolylineAnnotationElement);
+
+var CaretAnnotationElement = /*#__PURE__*/function (_AnnotationElement10) {
+ _inherits(CaretAnnotationElement, _AnnotationElement10);
+
+ var _super16 = _createSuper(CaretAnnotationElement);
+
+ function CaretAnnotationElement(parameters) {
+ var _parameters$data$titl8, _parameters$data$cont8, _parameters$data$rich8;
+
+ _classCallCheck(this, CaretAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl8 = parameters.data.titleObj) !== null && _parameters$data$titl8 !== void 0 && _parameters$data$titl8.str || (_parameters$data$cont8 = parameters.data.contentsObj) !== null && _parameters$data$cont8 !== void 0 && _parameters$data$cont8.str || (_parameters$data$rich8 = parameters.data.richText) !== null && _parameters$data$rich8 !== void 0 && _parameters$data$rich8.str);
+ return _super16.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ _createClass(CaretAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = "caretAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ return this.container;
+ }
+ }]);
+
+ return CaretAnnotationElement;
+}(AnnotationElement);
+
+var InkAnnotationElement = /*#__PURE__*/function (_AnnotationElement11) {
+ _inherits(InkAnnotationElement, _AnnotationElement11);
+
+ var _super17 = _createSuper(InkAnnotationElement);
+
+ function InkAnnotationElement(parameters) {
+ var _parameters$data$titl9, _parameters$data$cont9, _parameters$data$rich9;
+
+ var _this13;
+
+ _classCallCheck(this, InkAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl9 = parameters.data.titleObj) !== null && _parameters$data$titl9 !== void 0 && _parameters$data$titl9.str || (_parameters$data$cont9 = parameters.data.contentsObj) !== null && _parameters$data$cont9 !== void 0 && _parameters$data$cont9.str || (_parameters$data$rich9 = parameters.data.richText) !== null && _parameters$data$rich9 !== void 0 && _parameters$data$rich9.str);
+ _this13 = _super17.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ _this13.containerClassName = "inkAnnotation";
+ _this13.svgElementName = "svg:polyline";
+ return _this13;
+ }
+
+ _createClass(InkAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = this.containerClassName;
+ var data = this.data;
+
+ var _getRectDims6 = getRectDims(data.rect),
+ width = _getRectDims6.width,
+ height = _getRectDims6.height;
+
+ var svg = this.svgFactory.create(width, height);
+
+ var _iterator20 = _createForOfIteratorHelper(data.inkLists),
+ _step20;
+
+ try {
+ for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
+ var inkList = _step20.value;
+ var points = [];
+
+ var _iterator21 = _createForOfIteratorHelper(inkList),
+ _step21;
+
+ try {
+ for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
+ var coordinate = _step21.value;
+ var x = coordinate.x - data.rect[0];
+ var y = data.rect[3] - coordinate.y;
+ points.push("".concat(x, ",").concat(y));
+ }
+ } catch (err) {
+ _iterator21.e(err);
+ } finally {
+ _iterator21.f();
+ }
+
+ points = points.join(" ");
+ var polyline = this.svgFactory.createElement(this.svgElementName);
+ polyline.setAttribute("points", points);
+ polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
+ polyline.setAttribute("stroke", "transparent");
+ polyline.setAttribute("fill", "transparent");
+
+ this._createPopup(polyline, data);
+
+ svg.appendChild(polyline);
+ }
+ } catch (err) {
+ _iterator20.e(err);
+ } finally {
+ _iterator20.f();
+ }
+
+ this.container.append(svg);
+ return this.container;
+ }
+ }]);
+
+ return InkAnnotationElement;
+}(AnnotationElement);
+
+var HighlightAnnotationElement = /*#__PURE__*/function (_AnnotationElement12) {
+ _inherits(HighlightAnnotationElement, _AnnotationElement12);
+
+ var _super18 = _createSuper(HighlightAnnotationElement);
+
+ function HighlightAnnotationElement(parameters) {
+ var _parameters$data$titl10, _parameters$data$cont10, _parameters$data$rich10;
+
+ _classCallCheck(this, HighlightAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl10 = parameters.data.titleObj) !== null && _parameters$data$titl10 !== void 0 && _parameters$data$titl10.str || (_parameters$data$cont10 = parameters.data.contentsObj) !== null && _parameters$data$cont10 !== void 0 && _parameters$data$cont10.str || (_parameters$data$rich10 = parameters.data.richText) !== null && _parameters$data$rich10 !== void 0 && _parameters$data$rich10.str);
+ return _super18.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ _createClass(HighlightAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("highlightAnnotation");
+ }
+
+ this.container.className = "highlightAnnotation";
+ return this.container;
+ }
+ }]);
+
+ return HighlightAnnotationElement;
+}(AnnotationElement);
+
+var UnderlineAnnotationElement = /*#__PURE__*/function (_AnnotationElement13) {
+ _inherits(UnderlineAnnotationElement, _AnnotationElement13);
+
+ var _super19 = _createSuper(UnderlineAnnotationElement);
+
+ function UnderlineAnnotationElement(parameters) {
+ var _parameters$data$titl11, _parameters$data$cont11, _parameters$data$rich11;
+
+ _classCallCheck(this, UnderlineAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl11 = parameters.data.titleObj) !== null && _parameters$data$titl11 !== void 0 && _parameters$data$titl11.str || (_parameters$data$cont11 = parameters.data.contentsObj) !== null && _parameters$data$cont11 !== void 0 && _parameters$data$cont11.str || (_parameters$data$rich11 = parameters.data.richText) !== null && _parameters$data$rich11 !== void 0 && _parameters$data$rich11.str);
+ return _super19.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ _createClass(UnderlineAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("underlineAnnotation");
+ }
+
+ this.container.className = "underlineAnnotation";
+ return this.container;
+ }
+ }]);
+
+ return UnderlineAnnotationElement;
+}(AnnotationElement);
+
+var SquigglyAnnotationElement = /*#__PURE__*/function (_AnnotationElement14) {
+ _inherits(SquigglyAnnotationElement, _AnnotationElement14);
+
+ var _super20 = _createSuper(SquigglyAnnotationElement);
+
+ function SquigglyAnnotationElement(parameters) {
+ var _parameters$data$titl12, _parameters$data$cont12, _parameters$data$rich12;
+
+ _classCallCheck(this, SquigglyAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl12 = parameters.data.titleObj) !== null && _parameters$data$titl12 !== void 0 && _parameters$data$titl12.str || (_parameters$data$cont12 = parameters.data.contentsObj) !== null && _parameters$data$cont12 !== void 0 && _parameters$data$cont12.str || (_parameters$data$rich12 = parameters.data.richText) !== null && _parameters$data$rich12 !== void 0 && _parameters$data$rich12.str);
+ return _super20.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ _createClass(SquigglyAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("squigglyAnnotation");
+ }
+
+ this.container.className = "squigglyAnnotation";
+ return this.container;
+ }
+ }]);
+
+ return SquigglyAnnotationElement;
+}(AnnotationElement);
+
+var StrikeOutAnnotationElement = /*#__PURE__*/function (_AnnotationElement15) {
+ _inherits(StrikeOutAnnotationElement, _AnnotationElement15);
+
+ var _super21 = _createSuper(StrikeOutAnnotationElement);
+
+ function StrikeOutAnnotationElement(parameters) {
+ var _parameters$data$titl13, _parameters$data$cont13, _parameters$data$rich13;
+
+ _classCallCheck(this, StrikeOutAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl13 = parameters.data.titleObj) !== null && _parameters$data$titl13 !== void 0 && _parameters$data$titl13.str || (_parameters$data$cont13 = parameters.data.contentsObj) !== null && _parameters$data$cont13 !== void 0 && _parameters$data$cont13.str || (_parameters$data$rich13 = parameters.data.richText) !== null && _parameters$data$rich13 !== void 0 && _parameters$data$rich13.str);
+ return _super21.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ _createClass(StrikeOutAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("strikeoutAnnotation");
+ }
+
+ this.container.className = "strikeoutAnnotation";
+ return this.container;
+ }
+ }]);
+
+ return StrikeOutAnnotationElement;
+}(AnnotationElement);
+
+var StampAnnotationElement = /*#__PURE__*/function (_AnnotationElement16) {
+ _inherits(StampAnnotationElement, _AnnotationElement16);
+
+ var _super22 = _createSuper(StampAnnotationElement);
+
+ function StampAnnotationElement(parameters) {
+ var _parameters$data$titl14, _parameters$data$cont14, _parameters$data$rich14;
+
+ _classCallCheck(this, StampAnnotationElement);
+
+ var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl14 = parameters.data.titleObj) !== null && _parameters$data$titl14 !== void 0 && _parameters$data$titl14.str || (_parameters$data$cont14 = parameters.data.contentsObj) !== null && _parameters$data$cont14 !== void 0 && _parameters$data$cont14.str || (_parameters$data$rich14 = parameters.data.richText) !== null && _parameters$data$rich14 !== void 0 && _parameters$data$rich14.str);
+ return _super22.call(this, parameters, {
+ isRenderable: isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ _createClass(StampAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ this.container.className = "stampAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ return this.container;
+ }
+ }]);
+
+ return StampAnnotationElement;
+}(AnnotationElement);
+
+var FileAttachmentAnnotationElement = /*#__PURE__*/function (_AnnotationElement17) {
+ _inherits(FileAttachmentAnnotationElement, _AnnotationElement17);
+
+ var _super23 = _createSuper(FileAttachmentAnnotationElement);
+
+ function FileAttachmentAnnotationElement(parameters) {
+ var _this14$linkService$e;
+
+ var _this14;
+
+ _classCallCheck(this, FileAttachmentAnnotationElement);
+
+ _this14 = _super23.call(this, parameters, {
+ isRenderable: true
+ });
+ var _this14$data$file = _this14.data.file,
+ filename = _this14$data$file.filename,
+ content = _this14$data$file.content;
+ _this14.filename = (0, _display_utils.getFilenameFromUrl)(filename);
+ _this14.content = content;
+ (_this14$linkService$e = _this14.linkService.eventBus) === null || _this14$linkService$e === void 0 ? void 0 : _this14$linkService$e.dispatch("fileattachmentannotation", {
+ source: _assertThisInitialized(_this14),
+ id: (0, _util.stringToPDFString)(filename),
+ filename: filename,
+ content: content
+ });
+ return _this14;
+ }
+
+ _createClass(FileAttachmentAnnotationElement, [{
+ key: "render",
+ value: function render() {
+ var _this$data$titleObj, _this$data$contentsOb;
+
+ this.container.className = "fileAttachmentAnnotation";
+ var trigger = document.createElement("div");
+ trigger.style.height = this.container.style.height;
+ trigger.style.width = this.container.style.width;
+ trigger.addEventListener("dblclick", this._download.bind(this));
+
+ if (!this.data.hasPopup && ((_this$data$titleObj = this.data.titleObj) !== null && _this$data$titleObj !== void 0 && _this$data$titleObj.str || (_this$data$contentsOb = this.data.contentsObj) !== null && _this$data$contentsOb !== void 0 && _this$data$contentsOb.str || this.data.richText)) {
+ this._createPopup(trigger, this.data);
+ }
+
+ this.container.appendChild(trigger);
+ return this.container;
+ }
+ }, {
+ key: "_download",
+ value: function _download() {
+ var _this$downloadManager;
+
+ (_this$downloadManager = this.downloadManager) === null || _this$downloadManager === void 0 ? void 0 : _this$downloadManager.openOrDownloadData(this.container, this.content, this.filename);
+ }
+ }]);
+
+ return FileAttachmentAnnotationElement;
+}(AnnotationElement);
+
+var AnnotationLayer = /*#__PURE__*/function () {
+ function AnnotationLayer() {
+ _classCallCheck(this, AnnotationLayer);
+ }
+
+ _createClass(AnnotationLayer, null, [{
+ key: "render",
+ value: function render(parameters) {
+ var sortedAnnotations = [],
+ popupAnnotations = [];
+
+ var _iterator22 = _createForOfIteratorHelper(parameters.annotations),
+ _step22;
+
+ try {
+ for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
+ var _data = _step22.value;
+
+ if (!_data) {
+ continue;
+ }
+
+ var _getRectDims7 = getRectDims(_data.rect),
+ width = _getRectDims7.width,
+ height = _getRectDims7.height;
+
+ if (width <= 0 || height <= 0) {
+ continue;
+ }
+
+ if (_data.annotationType === _util.AnnotationType.POPUP) {
+ popupAnnotations.push(_data);
+ continue;
+ }
+
+ sortedAnnotations.push(_data);
+ }
+ } catch (err) {
+ _iterator22.e(err);
+ } finally {
+ _iterator22.f();
+ }
+
+ if (popupAnnotations.length) {
+ sortedAnnotations.push.apply(sortedAnnotations, popupAnnotations);
+ }
+
+ var div = parameters.div;
+
+ for (var _i7 = 0, _sortedAnnotations = sortedAnnotations; _i7 < _sortedAnnotations.length; _i7++) {
+ var data = _sortedAnnotations[_i7];
+ var element = AnnotationElementFactory.create({
+ data: data,
+ layer: div,
+ page: parameters.page,
+ viewport: parameters.viewport,
+ linkService: parameters.linkService,
+ downloadManager: parameters.downloadManager,
+ imageResourcesPath: parameters.imageResourcesPath || "",
+ renderForms: parameters.renderForms !== false,
+ svgFactory: new _display_utils.DOMSVGFactory(),
+ annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(),
+ enableScripting: parameters.enableScripting,
+ hasJSActions: parameters.hasJSActions,
+ fieldObjects: parameters.fieldObjects,
+ mouseState: parameters.mouseState || {
+ isDown: false
+ }
+ });
+
+ if (element.isRenderable) {
+ var rendered = element.render();
+
+ if (data.hidden) {
+ rendered.style.visibility = "hidden";
+ }
+
+ if (Array.isArray(rendered)) {
+ var _iterator23 = _createForOfIteratorHelper(rendered),
+ _step23;
+
+ try {
+ for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
+ var renderedElement = _step23.value;
+ div.appendChild(renderedElement);
+ }
+ } catch (err) {
+ _iterator23.e(err);
+ } finally {
+ _iterator23.f();
+ }
+ } else {
+ if (element instanceof PopupAnnotationElement) {
+ div.prepend(rendered);
+ } else {
+ div.appendChild(rendered);
+ }
+ }
+ }
+ }
+
+ _classStaticPrivateMethodGet(this, AnnotationLayer, _setAnnotationCanvasMap).call(this, div, parameters.annotationCanvasMap);
+ }
+ }, {
+ key: "update",
+ value: function update(parameters) {
+ var page = parameters.page,
+ viewport = parameters.viewport,
+ annotations = parameters.annotations,
+ annotationCanvasMap = parameters.annotationCanvasMap,
+ div = parameters.div;
+ var transform = viewport.transform;
+ var matrix = "matrix(".concat(transform.join(","), ")");
+ var scale, ownMatrix;
+
+ var _iterator24 = _createForOfIteratorHelper(annotations),
+ _step24;
+
+ try {
+ for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
+ var data = _step24.value;
+ var elements = div.querySelectorAll("[data-annotation-id=\"".concat(data.id, "\"]"));
+
+ if (elements) {
+ var _iterator25 = _createForOfIteratorHelper(elements),
+ _step25;
+
+ try {
+ for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
+ var element = _step25.value;
+
+ if (data.hasOwnCanvas) {
+ var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
+
+ if (!ownMatrix) {
+ scale = Math.abs(transform[0] || transform[1]);
+ var ownTransform = transform.slice();
+
+ for (var i = 0; i < 4; i++) {
+ ownTransform[i] = Math.sign(ownTransform[i]);
+ }
+
+ ownMatrix = "matrix(".concat(ownTransform.join(","), ")");
+ }
+
+ var left = rect[0] * scale;
+ var top = rect[1] * scale;
+ element.style.left = "".concat(left, "px");
+ element.style.top = "".concat(top, "px");
+ element.style.transformOrigin = "".concat(-left, "px ").concat(-top, "px");
+ element.style.transform = ownMatrix;
+ } else {
+ element.style.transform = matrix;
+ }
+ }
+ } catch (err) {
+ _iterator25.e(err);
+ } finally {
+ _iterator25.f();
+ }
+ }
+ }
+ } catch (err) {
+ _iterator24.e(err);
+ } finally {
+ _iterator24.f();
+ }
+
+ _classStaticPrivateMethodGet(this, AnnotationLayer, _setAnnotationCanvasMap).call(this, div, annotationCanvasMap);
+
+ div.hidden = false;
+ }
+ }]);
+
+ return AnnotationLayer;
+}();
+
+exports.AnnotationLayer = AnnotationLayer;
+
+function _setAnnotationCanvasMap(div, annotationCanvasMap) {
+ if (!annotationCanvasMap) {
+ return;
+ }
+
+ var _iterator26 = _createForOfIteratorHelper(annotationCanvasMap),
+ _step26;
+
+ try {
+ for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
+ var _step26$value = _slicedToArray(_step26.value, 2),
+ id = _step26$value[0],
+ canvas = _step26$value[1];
+
+ var element = div.querySelector("[data-annotation-id=\"".concat(id, "\"]"));
+
+ if (!element) {
+ continue;
+ }
+
+ var firstChild = element.firstChild;
+
+ if (firstChild.nodeName === "CANVAS") {
+ element.replaceChild(canvas, firstChild);
+ } else {
+ element.insertBefore(canvas, firstChild);
+ }
+ }
+ } catch (err) {
+ _iterator26.e(err);
+ } finally {
+ _iterator26.f();
+ }
+
+ annotationCanvasMap.clear();
+}
+
+/***/ }),
+/* 160 */
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ColorConverters = void 0;
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function makeColorComp(n) {
+ return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0");
+}
+
+var ColorConverters = /*#__PURE__*/function () {
+ function ColorConverters() {
+ _classCallCheck(this, ColorConverters);
+ }
+
+ _createClass(ColorConverters, null, [{
+ key: "CMYK_G",
+ value: function CMYK_G(_ref) {
+ var _ref2 = _slicedToArray(_ref, 4),
+ c = _ref2[0],
+ y = _ref2[1],
+ m = _ref2[2],
+ k = _ref2[3];
+
+ return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];
+ }
+ }, {
+ key: "G_CMYK",
+ value: function G_CMYK(_ref3) {
+ var _ref4 = _slicedToArray(_ref3, 1),
+ g = _ref4[0];
+
+ return ["CMYK", 0, 0, 0, 1 - g];
+ }
+ }, {
+ key: "G_RGB",
+ value: function G_RGB(_ref5) {
+ var _ref6 = _slicedToArray(_ref5, 1),
+ g = _ref6[0];
+
+ return ["RGB", g, g, g];
+ }
+ }, {
+ key: "G_HTML",
+ value: function G_HTML(_ref7) {
+ var _ref8 = _slicedToArray(_ref7, 1),
+ g = _ref8[0];
+
+ var G = makeColorComp(g);
+ return "#".concat(G).concat(G).concat(G);
+ }
+ }, {
+ key: "RGB_G",
+ value: function RGB_G(_ref9) {
+ var _ref10 = _slicedToArray(_ref9, 3),
+ r = _ref10[0],
+ g = _ref10[1],
+ b = _ref10[2];
+
+ return ["G", 0.3 * r + 0.59 * g + 0.11 * b];
+ }
+ }, {
+ key: "RGB_HTML",
+ value: function RGB_HTML(_ref11) {
+ var _ref12 = _slicedToArray(_ref11, 3),
+ r = _ref12[0],
+ g = _ref12[1],
+ b = _ref12[2];
+
+ var R = makeColorComp(r);
+ var G = makeColorComp(g);
+ var B = makeColorComp(b);
+ return "#".concat(R).concat(G).concat(B);
+ }
+ }, {
+ key: "T_HTML",
+ value: function T_HTML() {
+ return "#00000000";
+ }
+ }, {
+ key: "CMYK_RGB",
+ value: function CMYK_RGB(_ref13) {
+ var _ref14 = _slicedToArray(_ref13, 4),
+ c = _ref14[0],
+ y = _ref14[1],
+ m = _ref14[2],
+ k = _ref14[3];
+
+ return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];
+ }
+ }, {
+ key: "CMYK_HTML",
+ value: function CMYK_HTML(components) {
+ return this.RGB_HTML(this.CMYK_RGB(components));
+ }
+ }, {
+ key: "RGB_CMYK",
+ value: function RGB_CMYK(_ref15) {
+ var _ref16 = _slicedToArray(_ref15, 3),
+ r = _ref16[0],
+ g = _ref16[1],
+ b = _ref16[2];
+
+ var c = 1 - r;
+ var m = 1 - g;
+ var y = 1 - b;
+ var k = Math.min(c, m, y);
+ return ["CMYK", c, m, y, k];
+ }
+ }]);
+
+ return ColorConverters;
+}();
+
+exports.ColorConverters = ColorConverters;
+
+/***/ }),
+/* 161 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XfaLayer = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _xfa_text = __w_pdfjs_require__(158);
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+var XfaLayer = /*#__PURE__*/function () {
+ function XfaLayer() {
+ _classCallCheck(this, XfaLayer);
+ }
+
+ _createClass(XfaLayer, null, [{
+ key: "setupStorage",
+ value: function setupStorage(html, id, element, storage, intent) {
+ var storedData = storage.getValue(id, {
+ value: null
+ });
+
+ switch (element.name) {
+ case "textarea":
+ if (storedData.value !== null) {
+ html.textContent = storedData.value;
+ }
+
+ if (intent === "print") {
+ break;
+ }
+
+ html.addEventListener("input", function (event) {
+ storage.setValue(id, {
+ value: event.target.value
+ });
+ });
+ break;
+
+ case "input":
+ if (element.attributes.type === "radio" || element.attributes.type === "checkbox") {
+ if (storedData.value === element.attributes.xfaOn) {
+ html.setAttribute("checked", true);
+ } else if (storedData.value === element.attributes.xfaOff) {
+ html.removeAttribute("checked");
+ }
+
+ if (intent === "print") {
+ break;
+ }
+
+ html.addEventListener("change", function (event) {
+ storage.setValue(id, {
+ value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff")
+ });
+ });
+ } else {
+ if (storedData.value !== null) {
+ html.setAttribute("value", storedData.value);
+ }
+
+ if (intent === "print") {
+ break;
+ }
+
+ html.addEventListener("input", function (event) {
+ storage.setValue(id, {
+ value: event.target.value
+ });
+ });
+ }
+
+ break;
+
+ case "select":
+ if (storedData.value !== null) {
+ var _iterator = _createForOfIteratorHelper(element.children),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var option = _step.value;
+
+ if (option.attributes.value === storedData.value) {
+ option.attributes.selected = true;
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+
+ html.addEventListener("input", function (event) {
+ var options = event.target.options;
+ var value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value;
+ storage.setValue(id, {
+ value: value
+ });
+ });
+ break;
+ }
+ }
+ }, {
+ key: "setAttributes",
+ value: function setAttributes(_ref) {
+ var html = _ref.html,
+ element = _ref.element,
+ _ref$storage = _ref.storage,
+ storage = _ref$storage === void 0 ? null : _ref$storage,
+ intent = _ref.intent,
+ linkService = _ref.linkService;
+ var attributes = element.attributes;
+ var isHTMLAnchorElement = html instanceof HTMLAnchorElement;
+
+ if (attributes.type === "radio") {
+ attributes.name = "".concat(attributes.name, "-").concat(intent);
+ }
+
+ for (var _i = 0, _Object$entries = Object.entries(attributes); _i < _Object$entries.length; _i++) {
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
+ key = _Object$entries$_i[0],
+ value = _Object$entries$_i[1];
+
+ if (value === null || value === undefined || key === "dataId") {
+ continue;
+ }
+
+ if (key !== "style") {
+ if (key === "textContent") {
+ html.textContent = value;
+ } else if (key === "class") {
+ if (value.length) {
+ html.setAttribute(key, value.join(" "));
+ }
+ } else {
+ if (isHTMLAnchorElement && (key === "href" || key === "newWindow")) {
+ continue;
+ }
+
+ html.setAttribute(key, value);
+ }
+ } else {
+ Object.assign(html.style, value);
+ }
+ }
+
+ if (isHTMLAnchorElement) {
+ var _linkService$addLinkA;
+
+ if (!linkService.addLinkAttributes) {
+ (0, _util.warn)("XfaLayer.setAttribute - missing `addLinkAttributes`-method on the `linkService`-instance.");
+ }
+
+ (_linkService$addLinkA = linkService.addLinkAttributes) === null || _linkService$addLinkA === void 0 ? void 0 : _linkService$addLinkA.call(linkService, html, attributes.href, attributes.newWindow);
+ }
+
+ if (storage && attributes.dataId) {
+ this.setupStorage(html, attributes.dataId, element, storage);
+ }
+ }
+ }, {
+ key: "render",
+ value: function render(parameters) {
+ var storage = parameters.annotationStorage;
+ var linkService = parameters.linkService;
+ var root = parameters.xfaHtml;
+ var intent = parameters.intent || "display";
+ var rootHtml = document.createElement(root.name);
+
+ if (root.attributes) {
+ this.setAttributes({
+ html: rootHtml,
+ element: root,
+ intent: intent,
+ linkService: linkService
+ });
+ }
+
+ var stack = [[root, -1, rootHtml]];
+ var rootDiv = parameters.div;
+ rootDiv.appendChild(rootHtml);
+
+ if (parameters.viewport) {
+ var transform = "matrix(".concat(parameters.viewport.transform.join(","), ")");
+ rootDiv.style.transform = transform;
+ }
+
+ if (intent !== "richText") {
+ rootDiv.setAttribute("class", "xfaLayer xfaFont");
+ }
+
+ var textDivs = [];
+
+ while (stack.length > 0) {
+ var _child$attributes;
+
+ var _stack = _slicedToArray(stack[stack.length - 1], 3),
+ parent = _stack[0],
+ i = _stack[1],
+ html = _stack[2];
+
+ if (i + 1 === parent.children.length) {
+ stack.pop();
+ continue;
+ }
+
+ var child = parent.children[++stack[stack.length - 1][1]];
+
+ if (child === null) {
+ continue;
+ }
+
+ var name = child.name;
+
+ if (name === "#text") {
+ var node = document.createTextNode(child.value);
+ textDivs.push(node);
+ html.appendChild(node);
+ continue;
+ }
+
+ var childHtml = void 0;
+
+ if (child !== null && child !== void 0 && (_child$attributes = child.attributes) !== null && _child$attributes !== void 0 && _child$attributes.xmlns) {
+ childHtml = document.createElementNS(child.attributes.xmlns, name);
+ } else {
+ childHtml = document.createElement(name);
+ }
+
+ html.appendChild(childHtml);
+
+ if (child.attributes) {
+ this.setAttributes({
+ html: childHtml,
+ element: child,
+ storage: storage,
+ intent: intent,
+ linkService: linkService
+ });
+ }
+
+ if (child.children && child.children.length > 0) {
+ stack.push([child, -1, childHtml]);
+ } else if (child.value) {
+ var _node = document.createTextNode(child.value);
+
+ if (_xfa_text.XfaText.shouldBuildText(name)) {
+ textDivs.push(_node);
+ }
+
+ childHtml.appendChild(_node);
+ }
+ }
+
+ var _iterator2 = _createForOfIteratorHelper(rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var el = _step2.value;
+ el.setAttribute("readOnly", true);
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ return {
+ textDivs: textDivs
+ };
+ }
+ }, {
+ key: "update",
+ value: function update(parameters) {
+ var transform = "matrix(".concat(parameters.viewport.transform.join(","), ")");
+ parameters.div.style.transform = transform;
+ parameters.div.hidden = false;
+ }
+ }]);
+
+ return XfaLayer;
+}();
+
+exports.XfaLayer = XfaLayer;
+
+/***/ }),
+/* 162 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.renderTextLayer = renderTextLayer;
+
+var _util = __w_pdfjs_require__(1);
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+var MAX_TEXT_DIVS_TO_RENDER = 100000;
+var DEFAULT_FONT_SIZE = 30;
+var DEFAULT_FONT_ASCENT = 0.8;
+var ascentCache = new Map();
+var AllWhitespaceRegexp = /^\s+$/g;
+
+function getAscent(fontFamily, ctx) {
+ var cachedAscent = ascentCache.get(fontFamily);
+
+ if (cachedAscent) {
+ return cachedAscent;
+ }
+
+ ctx.save();
+ ctx.font = "".concat(DEFAULT_FONT_SIZE, "px ").concat(fontFamily);
+ var metrics = ctx.measureText("");
+ var ascent = metrics.fontBoundingBoxAscent;
+ var descent = Math.abs(metrics.fontBoundingBoxDescent);
+
+ if (ascent) {
+ ctx.restore();
+ var ratio = ascent / (ascent + descent);
+ ascentCache.set(fontFamily, ratio);
+ return ratio;
+ }
+
+ ctx.strokeStyle = "red";
+ ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+ ctx.strokeText("g", 0, 0);
+ var pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+ descent = 0;
+
+ for (var i = pixels.length - 1 - 3; i >= 0; i -= 4) {
+ if (pixels[i] > 0) {
+ descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);
+ break;
+ }
+ }
+
+ ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+ ctx.strokeText("A", 0, DEFAULT_FONT_SIZE);
+ pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+ ascent = 0;
+
+ for (var _i = 0, ii = pixels.length; _i < ii; _i += 4) {
+ if (pixels[_i] > 0) {
+ ascent = DEFAULT_FONT_SIZE - Math.floor(_i / 4 / DEFAULT_FONT_SIZE);
+ break;
+ }
+ }
+
+ ctx.restore();
+
+ if (ascent) {
+ var _ratio = ascent / (ascent + descent);
+
+ ascentCache.set(fontFamily, _ratio);
+ return _ratio;
+ }
+
+ ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT);
+ return DEFAULT_FONT_ASCENT;
+}
+
+function appendText(task, geom, styles, ctx) {
+ var textDiv = document.createElement("span");
+ var textDivProperties = task._enhanceTextSelection ? {
+ angle: 0,
+ canvasWidth: 0,
+ hasText: geom.str !== "",
+ hasEOL: geom.hasEOL,
+ originalTransform: null,
+ paddingBottom: 0,
+ paddingLeft: 0,
+ paddingRight: 0,
+ paddingTop: 0,
+ scale: 1
+ } : {
+ angle: 0,
+ canvasWidth: 0,
+ hasText: geom.str !== "",
+ hasEOL: geom.hasEOL
+ };
+
+ task._textDivs.push(textDiv);
+
+ var tx = _util.Util.transform(task._viewport.transform, geom.transform);
+
+ var angle = Math.atan2(tx[1], tx[0]);
+ var style = styles[geom.fontName];
+
+ if (style.vertical) {
+ angle += Math.PI / 2;
+ }
+
+ var fontHeight = Math.hypot(tx[2], tx[3]);
+ var fontAscent = fontHeight * getAscent(style.fontFamily, ctx);
+ var left, top;
+
+ if (angle === 0) {
+ left = tx[4];
+ top = tx[5] - fontAscent;
+ } else {
+ left = tx[4] + fontAscent * Math.sin(angle);
+ top = tx[5] - fontAscent * Math.cos(angle);
+ }
+
+ textDiv.style.left = "".concat(left, "px");
+ textDiv.style.top = "".concat(top, "px");
+ textDiv.style.fontSize = "".concat(fontHeight / 16.0, "em");
+ textDiv.style.fontFamily = style.fontFamily;
+ textDiv.setAttribute("role", "presentation");
+ textDiv.textContent = geom.str;
+ textDiv.dir = geom.dir;
+
+ if (task._fontInspectorEnabled) {
+ textDiv.dataset.fontName = geom.fontName;
+ }
+
+ if (angle !== 0) {
+ textDivProperties.angle = angle * (180 / Math.PI);
+ }
+
+ var shouldScaleText = false;
+
+ if (geom.str.length > 1 || task._enhanceTextSelection && AllWhitespaceRegexp.test(geom.str)) {
+ shouldScaleText = true;
+ } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) {
+ var absScaleX = Math.abs(geom.transform[0]),
+ absScaleY = Math.abs(geom.transform[3]);
+
+ if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {
+ shouldScaleText = true;
+ }
+ }
+
+ if (shouldScaleText) {
+ if (style.vertical) {
+ textDivProperties.canvasWidth = geom.height * task._viewport.scale;
+ } else {
+ textDivProperties.canvasWidth = geom.width * task._viewport.scale;
+ }
+ }
+
+ task._textDivProperties.set(textDiv, textDivProperties);
+
+ if (task._textContentStream) {
+ task._layoutText(textDiv);
+ }
+
+ if (task._enhanceTextSelection && textDivProperties.hasText) {
+ var angleCos = 1,
+ angleSin = 0;
+
+ if (angle !== 0) {
+ angleCos = Math.cos(angle);
+ angleSin = Math.sin(angle);
+ }
+
+ var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
+ var divHeight = fontHeight;
+ var m, b;
+
+ if (angle !== 0) {
+ m = [angleCos, angleSin, -angleSin, angleCos, left, top];
+ b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);
+ } else {
+ b = [left, top, left + divWidth, top + divHeight];
+ }
+
+ task._bounds.push({
+ left: b[0],
+ top: b[1],
+ right: b[2],
+ bottom: b[3],
+ div: textDiv,
+ size: [divWidth, divHeight],
+ m: m
+ });
+ }
+}
+
+function render(task) {
+ if (task._canceled) {
+ return;
+ }
+
+ var textDivs = task._textDivs;
+ var capability = task._capability;
+ var textDivsLength = textDivs.length;
+
+ if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
+ task._renderingDone = true;
+ capability.resolve();
+ return;
+ }
+
+ if (!task._textContentStream) {
+ for (var i = 0; i < textDivsLength; i++) {
+ task._layoutText(textDivs[i]);
+ }
+ }
+
+ task._renderingDone = true;
+ capability.resolve();
+}
+
+function findPositiveMin(ts, offset, count) {
+ var result = 0;
+
+ for (var i = 0; i < count; i++) {
+ var t = ts[offset++];
+
+ if (t > 0) {
+ result = result ? Math.min(t, result) : t;
+ }
+ }
+
+ return result;
+}
+
+function expand(task) {
+ var bounds = task._bounds;
+ var viewport = task._viewport;
+ var expanded = expandBounds(viewport.width, viewport.height, bounds);
+
+ for (var i = 0; i < expanded.length; i++) {
+ var div = bounds[i].div;
+
+ var divProperties = task._textDivProperties.get(div);
+
+ if (divProperties.angle === 0) {
+ divProperties.paddingLeft = bounds[i].left - expanded[i].left;
+ divProperties.paddingTop = bounds[i].top - expanded[i].top;
+ divProperties.paddingRight = expanded[i].right - bounds[i].right;
+ divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;
+
+ task._textDivProperties.set(div, divProperties);
+
+ continue;
+ }
+
+ var e = expanded[i],
+ b = bounds[i];
+ var m = b.m,
+ c = m[0],
+ s = m[1];
+ var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
+ var ts = new Float64Array(64);
+
+ for (var j = 0, jj = points.length; j < jj; j++) {
+ var t = _util.Util.applyTransform(points[j], m);
+
+ ts[j + 0] = c && (e.left - t[0]) / c;
+ ts[j + 4] = s && (e.top - t[1]) / s;
+ ts[j + 8] = c && (e.right - t[0]) / c;
+ ts[j + 12] = s && (e.bottom - t[1]) / s;
+ ts[j + 16] = s && (e.left - t[0]) / -s;
+ ts[j + 20] = c && (e.top - t[1]) / c;
+ ts[j + 24] = s && (e.right - t[0]) / -s;
+ ts[j + 28] = c && (e.bottom - t[1]) / c;
+ ts[j + 32] = c && (e.left - t[0]) / -c;
+ ts[j + 36] = s && (e.top - t[1]) / -s;
+ ts[j + 40] = c && (e.right - t[0]) / -c;
+ ts[j + 44] = s && (e.bottom - t[1]) / -s;
+ ts[j + 48] = s && (e.left - t[0]) / s;
+ ts[j + 52] = c && (e.top - t[1]) / -c;
+ ts[j + 56] = s && (e.right - t[0]) / s;
+ ts[j + 60] = c && (e.bottom - t[1]) / -c;
+ }
+
+ var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
+ divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
+ divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;
+ divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;
+ divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;
+
+ task._textDivProperties.set(div, divProperties);
+ }
+}
+
+function expandBounds(width, height, boxes) {
+ var bounds = boxes.map(function (box, i) {
+ return {
+ x1: box.left,
+ y1: box.top,
+ x2: box.right,
+ y2: box.bottom,
+ index: i,
+ x1New: undefined,
+ x2New: undefined
+ };
+ });
+ expandBoundsLTR(width, bounds);
+ var expanded = new Array(boxes.length);
+
+ var _iterator = _createForOfIteratorHelper(bounds),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var b = _step.value;
+ var i = b.index;
+ expanded[i] = {
+ left: b.x1New,
+ top: 0,
+ right: b.x2New,
+ bottom: 0
+ };
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ boxes.map(function (box, i) {
+ var e = expanded[i],
+ b = bounds[i];
+ b.x1 = box.top;
+ b.y1 = width - e.right;
+ b.x2 = box.bottom;
+ b.y2 = width - e.left;
+ b.index = i;
+ b.x1New = undefined;
+ b.x2New = undefined;
+ });
+ expandBoundsLTR(height, bounds);
+
+ var _iterator2 = _createForOfIteratorHelper(bounds),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var _b = _step2.value;
+ var _i2 = _b.index;
+ expanded[_i2].top = _b.x1New;
+ expanded[_i2].bottom = _b.x2New;
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ return expanded;
+}
+
+function expandBoundsLTR(width, bounds) {
+ bounds.sort(function (a, b) {
+ return a.x1 - b.x1 || a.index - b.index;
+ });
+ var fakeBoundary = {
+ x1: -Infinity,
+ y1: -Infinity,
+ x2: 0,
+ y2: Infinity,
+ index: -1,
+ x1New: 0,
+ x2New: 0
+ };
+ var horizon = [{
+ start: -Infinity,
+ end: Infinity,
+ boundary: fakeBoundary
+ }];
+
+ var _iterator3 = _createForOfIteratorHelper(bounds),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var boundary = _step3.value;
+ var i = 0;
+
+ while (i < horizon.length && horizon[i].end <= boundary.y1) {
+ i++;
+ }
+
+ var j = horizon.length - 1;
+
+ while (j >= 0 && horizon[j].start >= boundary.y2) {
+ j--;
+ }
+
+ var _horizonPart = void 0,
+ _affectedBoundary = void 0;
+
+ var q = void 0,
+ k = void 0,
+ maxXNew = -Infinity;
+
+ for (q = i; q <= j; q++) {
+ _horizonPart = horizon[q];
+ _affectedBoundary = _horizonPart.boundary;
+ var xNew = void 0;
+
+ if (_affectedBoundary.x2 > boundary.x1) {
+ xNew = _affectedBoundary.index > boundary.index ? _affectedBoundary.x1New : boundary.x1;
+ } else if (_affectedBoundary.x2New === undefined) {
+ xNew = (_affectedBoundary.x2 + boundary.x1) / 2;
+ } else {
+ xNew = _affectedBoundary.x2New;
+ }
+
+ if (xNew > maxXNew) {
+ maxXNew = xNew;
+ }
+ }
+
+ boundary.x1New = maxXNew;
+
+ for (q = i; q <= j; q++) {
+ _horizonPart = horizon[q];
+ _affectedBoundary = _horizonPart.boundary;
+
+ if (_affectedBoundary.x2New === undefined) {
+ if (_affectedBoundary.x2 > boundary.x1) {
+ if (_affectedBoundary.index > boundary.index) {
+ _affectedBoundary.x2New = _affectedBoundary.x2;
+ }
+ } else {
+ _affectedBoundary.x2New = maxXNew;
+ }
+ } else if (_affectedBoundary.x2New > maxXNew) {
+ _affectedBoundary.x2New = Math.max(maxXNew, _affectedBoundary.x2);
+ }
+ }
+
+ var changedHorizon = [];
+ var lastBoundary = null;
+
+ for (q = i; q <= j; q++) {
+ _horizonPart = horizon[q];
+ _affectedBoundary = _horizonPart.boundary;
+ var useBoundary = _affectedBoundary.x2 > boundary.x2 ? _affectedBoundary : boundary;
+
+ if (lastBoundary === useBoundary) {
+ changedHorizon[changedHorizon.length - 1].end = _horizonPart.end;
+ } else {
+ changedHorizon.push({
+ start: _horizonPart.start,
+ end: _horizonPart.end,
+ boundary: useBoundary
+ });
+ lastBoundary = useBoundary;
+ }
+ }
+
+ if (horizon[i].start < boundary.y1) {
+ changedHorizon[0].start = boundary.y1;
+ changedHorizon.unshift({
+ start: horizon[i].start,
+ end: boundary.y1,
+ boundary: horizon[i].boundary
+ });
+ }
+
+ if (boundary.y2 < horizon[j].end) {
+ changedHorizon[changedHorizon.length - 1].end = boundary.y2;
+ changedHorizon.push({
+ start: boundary.y2,
+ end: horizon[j].end,
+ boundary: horizon[j].boundary
+ });
+ }
+
+ for (q = i; q <= j; q++) {
+ _horizonPart = horizon[q];
+ _affectedBoundary = _horizonPart.boundary;
+
+ if (_affectedBoundary.x2New !== undefined) {
+ continue;
+ }
+
+ var used = false;
+
+ for (k = i - 1; !used && k >= 0 && horizon[k].start >= _affectedBoundary.y1; k--) {
+ used = horizon[k].boundary === _affectedBoundary;
+ }
+
+ for (k = j + 1; !used && k < horizon.length && horizon[k].end <= _affectedBoundary.y2; k++) {
+ used = horizon[k].boundary === _affectedBoundary;
+ }
+
+ for (k = 0; !used && k < changedHorizon.length; k++) {
+ used = changedHorizon[k].boundary === _affectedBoundary;
+ }
+
+ if (!used) {
+ _affectedBoundary.x2New = maxXNew;
+ }
+ }
+
+ Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+
+ for (var _i3 = 0, _horizon = horizon; _i3 < _horizon.length; _i3++) {
+ var horizonPart = _horizon[_i3];
+ var affectedBoundary = horizonPart.boundary;
+
+ if (affectedBoundary.x2New === undefined) {
+ affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);
+ }
+ }
+}
+
+var TextLayerRenderTask = /*#__PURE__*/function () {
+ function TextLayerRenderTask(_ref) {
+ var _globalThis$FontInspe,
+ _this = this;
+
+ var textContent = _ref.textContent,
+ textContentStream = _ref.textContentStream,
+ container = _ref.container,
+ viewport = _ref.viewport,
+ textDivs = _ref.textDivs,
+ textContentItemsStr = _ref.textContentItemsStr,
+ enhanceTextSelection = _ref.enhanceTextSelection;
+
+ _classCallCheck(this, TextLayerRenderTask);
+
+ this._textContent = textContent;
+ this._textContentStream = textContentStream;
+ this._container = container;
+ this._document = container.ownerDocument;
+ this._viewport = viewport;
+ this._textDivs = textDivs || [];
+ this._textContentItemsStr = textContentItemsStr || [];
+ this._enhanceTextSelection = !!enhanceTextSelection;
+ this._fontInspectorEnabled = !!((_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled);
+ this._reader = null;
+ this._layoutTextLastFontSize = null;
+ this._layoutTextLastFontFamily = null;
+ this._layoutTextCtx = null;
+ this._textDivProperties = new WeakMap();
+ this._renderingDone = false;
+ this._canceled = false;
+ this._capability = (0, _util.createPromiseCapability)();
+ this._renderTimer = null;
+ this._bounds = [];
+
+ this._capability.promise["finally"](function () {
+ if (!_this._enhanceTextSelection) {
+ _this._textDivProperties = null;
+ }
+
+ if (_this._layoutTextCtx) {
+ _this._layoutTextCtx.canvas.width = 0;
+ _this._layoutTextCtx.canvas.height = 0;
+ _this._layoutTextCtx = null;
+ }
+ })["catch"](function () {});
+ }
+
+ _createClass(TextLayerRenderTask, [{
+ key: "promise",
+ get: function get() {
+ return this._capability.promise;
+ }
+ }, {
+ key: "cancel",
+ value: function cancel() {
+ this._canceled = true;
+
+ if (this._reader) {
+ this._reader.cancel(new _util.AbortException("TextLayer task cancelled."))["catch"](function () {});
+
+ this._reader = null;
+ }
+
+ if (this._renderTimer !== null) {
+ clearTimeout(this._renderTimer);
+ this._renderTimer = null;
+ }
+
+ this._capability.reject(new Error("TextLayer task cancelled."));
+ }
+ }, {
+ key: "_processItems",
+ value: function _processItems(items, styleCache) {
+ for (var i = 0, len = items.length; i < len; i++) {
+ if (items[i].str === undefined) {
+ if (items[i].type === "beginMarkedContentProps" || items[i].type === "beginMarkedContent") {
+ var parent = this._container;
+ this._container = document.createElement("span");
+
+ this._container.classList.add("markedContent");
+
+ if (items[i].id !== null) {
+ this._container.setAttribute("id", "".concat(items[i].id));
+ }
+
+ parent.appendChild(this._container);
+ } else if (items[i].type === "endMarkedContent") {
+ this._container = this._container.parentNode;
+ }
+
+ continue;
+ }
+
+ this._textContentItemsStr.push(items[i].str);
+
+ appendText(this, items[i], styleCache, this._layoutTextCtx);
+ }
+ }
+ }, {
+ key: "_layoutText",
+ value: function _layoutText(textDiv) {
+ var textDivProperties = this._textDivProperties.get(textDiv);
+
+ var transform = "";
+
+ if (textDivProperties.canvasWidth !== 0 && textDivProperties.hasText) {
+ var _textDiv$style = textDiv.style,
+ fontSize = _textDiv$style.fontSize,
+ fontFamily = _textDiv$style.fontFamily;
+
+ if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {
+ this._layoutTextCtx.font = "".concat(fontSize, " ").concat(fontFamily);
+ this._layoutTextLastFontSize = fontSize;
+ this._layoutTextLastFontFamily = fontFamily;
+ }
+
+ var _this$_layoutTextCtx$ = this._layoutTextCtx.measureText(textDiv.textContent),
+ width = _this$_layoutTextCtx$.width;
+
+ if (width > 0) {
+ var scale = textDivProperties.canvasWidth / width;
+
+ if (this._enhanceTextSelection) {
+ textDivProperties.scale = scale;
+ }
+
+ transform = "scaleX(".concat(scale, ")");
+ }
+ }
+
+ if (textDivProperties.angle !== 0) {
+ transform = "rotate(".concat(textDivProperties.angle, "deg) ").concat(transform);
+ }
+
+ if (transform.length > 0) {
+ if (this._enhanceTextSelection) {
+ textDivProperties.originalTransform = transform;
+ }
+
+ textDiv.style.transform = transform;
+ }
+
+ if (textDivProperties.hasText) {
+ this._container.appendChild(textDiv);
+ }
+
+ if (textDivProperties.hasEOL) {
+ var br = document.createElement("br");
+ br.setAttribute("role", "presentation");
+
+ this._container.appendChild(br);
+ }
+ }
+ }, {
+ key: "_render",
+ value: function _render() {
+ var _this2 = this;
+
+ var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
+ var capability = (0, _util.createPromiseCapability)();
+ var styleCache = Object.create(null);
+
+ var canvas = this._document.createElement("canvas");
+
+ canvas.height = canvas.width = DEFAULT_FONT_SIZE;
+ canvas.mozOpaque = true;
+ this._layoutTextCtx = canvas.getContext("2d", {
+ alpha: false
+ });
+
+ if (this._textContent) {
+ var textItems = this._textContent.items;
+ var textStyles = this._textContent.styles;
+
+ this._processItems(textItems, textStyles);
+
+ capability.resolve();
+ } else if (this._textContentStream) {
+ var pump = function pump() {
+ _this2._reader.read().then(function (_ref2) {
+ var value = _ref2.value,
+ done = _ref2.done;
+
+ if (done) {
+ capability.resolve();
+ return;
+ }
+
+ Object.assign(styleCache, value.styles);
+
+ _this2._processItems(value.items, styleCache);
+
+ pump();
+ }, capability.reject);
+ };
+
+ this._reader = this._textContentStream.getReader();
+ pump();
+ } else {
+ throw new Error('Neither "textContent" nor "textContentStream" parameters specified.');
+ }
+
+ capability.promise.then(function () {
+ styleCache = null;
+
+ if (!timeout) {
+ render(_this2);
+ } else {
+ _this2._renderTimer = setTimeout(function () {
+ render(_this2);
+ _this2._renderTimer = null;
+ }, timeout);
+ }
+ }, this._capability.reject);
+ }
+ }, {
+ key: "expandTextDivs",
+ value: function expandTextDivs() {
+ var expandDivs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+ if (!this._enhanceTextSelection || !this._renderingDone) {
+ return;
+ }
+
+ if (this._bounds !== null) {
+ expand(this);
+ this._bounds = null;
+ }
+
+ var transformBuf = [],
+ paddingBuf = [];
+
+ for (var i = 0, ii = this._textDivs.length; i < ii; i++) {
+ var div = this._textDivs[i];
+
+ var divProps = this._textDivProperties.get(div);
+
+ if (!divProps.hasText) {
+ continue;
+ }
+
+ if (expandDivs) {
+ transformBuf.length = 0;
+ paddingBuf.length = 0;
+
+ if (divProps.originalTransform) {
+ transformBuf.push(divProps.originalTransform);
+ }
+
+ if (divProps.paddingTop > 0) {
+ paddingBuf.push("".concat(divProps.paddingTop, "px"));
+ transformBuf.push("translateY(".concat(-divProps.paddingTop, "px)"));
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingRight > 0) {
+ paddingBuf.push("".concat(divProps.paddingRight / divProps.scale, "px"));
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingBottom > 0) {
+ paddingBuf.push("".concat(divProps.paddingBottom, "px"));
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingLeft > 0) {
+ paddingBuf.push("".concat(divProps.paddingLeft / divProps.scale, "px"));
+ transformBuf.push("translateX(".concat(-divProps.paddingLeft / divProps.scale, "px)"));
+ } else {
+ paddingBuf.push(0);
+ }
+
+ div.style.padding = paddingBuf.join(" ");
+
+ if (transformBuf.length) {
+ div.style.transform = transformBuf.join(" ");
+ }
+ } else {
+ div.style.padding = null;
+ div.style.transform = divProps.originalTransform;
+ }
+ }
+ }
+ }]);
+
+ return TextLayerRenderTask;
+}();
+
+function renderTextLayer(renderParameters) {
+ var task = new TextLayerRenderTask({
+ textContent: renderParameters.textContent,
+ textContentStream: renderParameters.textContentStream,
+ container: renderParameters.container,
+ viewport: renderParameters.viewport,
+ textDivs: renderParameters.textDivs,
+ textContentItemsStr: renderParameters.textContentItemsStr,
+ enhanceTextSelection: renderParameters.enhanceTextSelection
+ });
+
+ task._render(renderParameters.timeout);
+
+ return task;
+}
+
+/***/ }),
+/* 163 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.SVGGraphics = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(146);
+
+var _is_node = __w_pdfjs_require__(3);
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var SVGGraphics = /*#__PURE__*/_createClass(function SVGGraphics() {
+ _classCallCheck(this, SVGGraphics);
+
+ (0, _util.unreachable)("Not implemented: SVGGraphics");
+});
+
+exports.SVGGraphics = SVGGraphics;
+{
+ var opListToTree = function opListToTree(opList) {
+ var opTree = [];
+ var tmp = [];
+
+ var _iterator = _createForOfIteratorHelper(opList),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var opListElement = _step.value;
+
+ if (opListElement.fn === "save") {
+ opTree.push({
+ fnId: 92,
+ fn: "group",
+ items: []
+ });
+ tmp.push(opTree);
+ opTree = opTree[opTree.length - 1].items;
+ continue;
+ }
+
+ if (opListElement.fn === "restore") {
+ opTree = tmp.pop();
+ } else {
+ opTree.push(opListElement);
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ return opTree;
+ };
+
+ var pf = function pf(value) {
+ if (Number.isInteger(value)) {
+ return value.toString();
+ }
+
+ var s = value.toFixed(10);
+ var i = s.length - 1;
+
+ if (s[i] !== "0") {
+ return s;
+ }
+
+ do {
+ i--;
+ } while (s[i] === "0");
+
+ return s.substring(0, s[i] === "." ? i : i + 1);
+ };
+
+ var pm = function pm(m) {
+ if (m[4] === 0 && m[5] === 0) {
+ if (m[1] === 0 && m[2] === 0) {
+ if (m[0] === 1 && m[3] === 1) {
+ return "";
+ }
+
+ return "scale(".concat(pf(m[0]), " ").concat(pf(m[3]), ")");
+ }
+
+ if (m[0] === m[3] && m[1] === -m[2]) {
+ var a = Math.acos(m[0]) * 180 / Math.PI;
+ return "rotate(".concat(pf(a), ")");
+ }
+ } else {
+ if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
+ return "translate(".concat(pf(m[4]), " ").concat(pf(m[5]), ")");
+ }
+ }
+
+ return "matrix(".concat(pf(m[0]), " ").concat(pf(m[1]), " ").concat(pf(m[2]), " ").concat(pf(m[3]), " ").concat(pf(m[4]), " ") + "".concat(pf(m[5]), ")");
+ };
+
+ var SVG_DEFAULTS = {
+ fontStyle: "normal",
+ fontWeight: "normal",
+ fillColor: "#000000"
+ };
+ var XML_NS = "http://www.w3.org/XML/1998/namespace";
+ var XLINK_NS = "http://www.w3.org/1999/xlink";
+ var LINE_CAP_STYLES = ["butt", "round", "square"];
+ var LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+
+ var createObjectURL = function createObjectURL(data) {
+ var contentType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
+ var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) {
+ return URL.createObjectURL(new Blob([data], {
+ type: contentType
+ }));
+ }
+
+ var digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ var buffer = "data:".concat(contentType, ";base64,");
+
+ for (var i = 0, ii = data.length; i < ii; i += 3) {
+ var b1 = data[i] & 0xff;
+ var b2 = data[i + 1] & 0xff;
+ var b3 = data[i + 2] & 0xff;
+ var d1 = b1 >> 2,
+ d2 = (b1 & 3) << 4 | b2 >> 4;
+ var d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
+ var d4 = i + 2 < ii ? b3 & 0x3f : 64;
+ buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+ }
+
+ return buffer;
+ };
+
+ var convertImgDataToPng = function () {
+ var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
+ var CHUNK_WRAPPER_SIZE = 12;
+ var crcTable = new Int32Array(256);
+
+ for (var i = 0; i < 256; i++) {
+ var c = i;
+
+ for (var h = 0; h < 8; h++) {
+ if (c & 1) {
+ c = 0xedb88320 ^ c >> 1 & 0x7fffffff;
+ } else {
+ c = c >> 1 & 0x7fffffff;
+ }
+ }
+
+ crcTable[i] = c;
+ }
+
+ function crc32(data, start, end) {
+ var crc = -1;
+
+ for (var _i = start; _i < end; _i++) {
+ var a = (crc ^ data[_i]) & 0xff;
+ var b = crcTable[a];
+ crc = crc >>> 8 ^ b;
+ }
+
+ return crc ^ -1;
+ }
+
+ function writePngChunk(type, body, data, offset) {
+ var p = offset;
+ var len = body.length;
+ data[p] = len >> 24 & 0xff;
+ data[p + 1] = len >> 16 & 0xff;
+ data[p + 2] = len >> 8 & 0xff;
+ data[p + 3] = len & 0xff;
+ p += 4;
+ data[p] = type.charCodeAt(0) & 0xff;
+ data[p + 1] = type.charCodeAt(1) & 0xff;
+ data[p + 2] = type.charCodeAt(2) & 0xff;
+ data[p + 3] = type.charCodeAt(3) & 0xff;
+ p += 4;
+ data.set(body, p);
+ p += body.length;
+ var crc = crc32(data, offset + 4, p);
+ data[p] = crc >> 24 & 0xff;
+ data[p + 1] = crc >> 16 & 0xff;
+ data[p + 2] = crc >> 8 & 0xff;
+ data[p + 3] = crc & 0xff;
+ }
+
+ function adler32(data, start, end) {
+ var a = 1;
+ var b = 0;
+
+ for (var _i2 = start; _i2 < end; ++_i2) {
+ a = (a + (data[_i2] & 0xff)) % 65521;
+ b = (b + a) % 65521;
+ }
+
+ return b << 16 | a;
+ }
+
+ function deflateSync(literals) {
+ if (!_is_node.isNodeJS) {
+ return deflateSyncUncompressed(literals);
+ }
+
+ try {
+ var input;
+
+ if (parseInt(process.versions.node) >= 8) {
+ input = literals;
+ } else {
+ input = Buffer.from(literals);
+ }
+
+ var output = require("zlib").deflateSync(input, {
+ level: 9
+ });
+
+ return output instanceof Uint8Array ? output : new Uint8Array(output);
+ } catch (e) {
+ (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e);
+ }
+
+ return deflateSyncUncompressed(literals);
+ }
+
+ function deflateSyncUncompressed(literals) {
+ var len = literals.length;
+ var maxBlockLength = 0xffff;
+ var deflateBlocks = Math.ceil(len / maxBlockLength);
+ var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
+ var pi = 0;
+ idat[pi++] = 0x78;
+ idat[pi++] = 0x9c;
+ var pos = 0;
+
+ while (len > maxBlockLength) {
+ idat[pi++] = 0x00;
+ idat[pi++] = 0xff;
+ idat[pi++] = 0xff;
+ idat[pi++] = 0x00;
+ idat[pi++] = 0x00;
+ idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
+ pi += maxBlockLength;
+ pos += maxBlockLength;
+ len -= maxBlockLength;
+ }
+
+ idat[pi++] = 0x01;
+ idat[pi++] = len & 0xff;
+ idat[pi++] = len >> 8 & 0xff;
+ idat[pi++] = ~len & 0xffff & 0xff;
+ idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
+ idat.set(literals.subarray(pos), pi);
+ pi += literals.length - pos;
+ var adler = adler32(literals, 0, literals.length);
+ idat[pi++] = adler >> 24 & 0xff;
+ idat[pi++] = adler >> 16 & 0xff;
+ idat[pi++] = adler >> 8 & 0xff;
+ idat[pi++] = adler & 0xff;
+ return idat;
+ }
+
+ function encode(imgData, kind, forceDataSchema, isMask) {
+ var width = imgData.width;
+ var height = imgData.height;
+ var bitDepth, colorType, lineSize;
+ var bytes = imgData.data;
+
+ switch (kind) {
+ case _util.ImageKind.GRAYSCALE_1BPP:
+ colorType = 0;
+ bitDepth = 1;
+ lineSize = width + 7 >> 3;
+ break;
+
+ case _util.ImageKind.RGB_24BPP:
+ colorType = 2;
+ bitDepth = 8;
+ lineSize = width * 3;
+ break;
+
+ case _util.ImageKind.RGBA_32BPP:
+ colorType = 6;
+ bitDepth = 8;
+ lineSize = width * 4;
+ break;
+
+ default:
+ throw new Error("invalid format");
+ }
+
+ var literals = new Uint8Array((1 + lineSize) * height);
+ var offsetLiterals = 0,
+ offsetBytes = 0;
+
+ for (var y = 0; y < height; ++y) {
+ literals[offsetLiterals++] = 0;
+ literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
+ offsetBytes += lineSize;
+ offsetLiterals += lineSize;
+ }
+
+ if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
+ offsetLiterals = 0;
+
+ for (var _y = 0; _y < height; _y++) {
+ offsetLiterals++;
+
+ for (var _i3 = 0; _i3 < lineSize; _i3++) {
+ literals[offsetLiterals++] ^= 0xff;
+ }
+ }
+ }
+
+ var ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
+ var idat = deflateSync(literals);
+ var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
+ var data = new Uint8Array(pngLength);
+ var offset = 0;
+ data.set(PNG_HEADER, offset);
+ offset += PNG_HEADER.length;
+ writePngChunk("IHDR", ihdr, data, offset);
+ offset += CHUNK_WRAPPER_SIZE + ihdr.length;
+ writePngChunk("IDATA", idat, data, offset);
+ offset += CHUNK_WRAPPER_SIZE + idat.length;
+ writePngChunk("IEND", new Uint8Array(0), data, offset);
+ return createObjectURL(data, "image/png", forceDataSchema);
+ }
+
+ return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
+ var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
+ return encode(imgData, kind, forceDataSchema, isMask);
+ };
+ }();
+
+ var SVGExtraState = /*#__PURE__*/function () {
+ function SVGExtraState() {
+ _classCallCheck(this, SVGExtraState);
+
+ this.fontSizeScale = 1;
+ this.fontWeight = SVG_DEFAULTS.fontWeight;
+ this.fontSize = 0;
+ this.textMatrix = _util.IDENTITY_MATRIX;
+ this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
+ this.leading = 0;
+ this.textRenderingMode = _util.TextRenderingMode.FILL;
+ this.textMatrixScale = 1;
+ this.x = 0;
+ this.y = 0;
+ this.lineX = 0;
+ this.lineY = 0;
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.textHScale = 1;
+ this.textRise = 0;
+ this.fillColor = SVG_DEFAULTS.fillColor;
+ this.strokeColor = "#000000";
+ this.fillAlpha = 1;
+ this.strokeAlpha = 1;
+ this.lineWidth = 1;
+ this.lineJoin = "";
+ this.lineCap = "";
+ this.miterLimit = 0;
+ this.dashArray = [];
+ this.dashPhase = 0;
+ this.dependencies = [];
+ this.activeClipUrl = null;
+ this.clipGroup = null;
+ this.maskId = "";
+ }
+
+ _createClass(SVGExtraState, [{
+ key: "clone",
+ value: function clone() {
+ return Object.create(this);
+ }
+ }, {
+ key: "setCurrentPoint",
+ value: function setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+ }]);
+
+ return SVGExtraState;
+ }();
+
+ var clipCount = 0;
+ var maskCount = 0;
+ var shadingCount = 0;
+
+ exports.SVGGraphics = SVGGraphics = /*#__PURE__*/function () {
+ function SVGGraphics(commonObjs, objs) {
+ var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ _classCallCheck(this, SVGGraphics);
+
+ this.svgFactory = new _display_utils.DOMSVGFactory();
+ this.current = new SVGExtraState();
+ this.transformMatrix = _util.IDENTITY_MATRIX;
+ this.transformStack = [];
+ this.extraStack = [];
+ this.commonObjs = commonObjs;
+ this.objs = objs;
+ this.pendingClip = null;
+ this.pendingEOFill = false;
+ this.embedFonts = false;
+ this.embeddedFonts = Object.create(null);
+ this.cssStyle = null;
+ this.forceDataSchema = !!forceDataSchema;
+ this._operatorIdMapping = [];
+
+ for (var op in _util.OPS) {
+ this._operatorIdMapping[_util.OPS[op]] = op;
+ }
+ }
+
+ _createClass(SVGGraphics, [{
+ key: "save",
+ value: function save() {
+ this.transformStack.push(this.transformMatrix);
+ var old = this.current;
+ this.extraStack.push(old);
+ this.current = old.clone();
+ }
+ }, {
+ key: "restore",
+ value: function restore() {
+ this.transformMatrix = this.transformStack.pop();
+ this.current = this.extraStack.pop();
+ this.pendingClip = null;
+ this.tgrp = null;
+ }
+ }, {
+ key: "group",
+ value: function group(items) {
+ this.save();
+ this.executeOpTree(items);
+ this.restore();
+ }
+ }, {
+ key: "loadDependencies",
+ value: function loadDependencies(operatorList) {
+ var _this = this;
+
+ var fnArray = operatorList.fnArray;
+ var argsArray = operatorList.argsArray;
+
+ for (var i = 0, ii = fnArray.length; i < ii; i++) {
+ if (fnArray[i] !== _util.OPS.dependency) {
+ continue;
+ }
+
+ var _iterator2 = _createForOfIteratorHelper(argsArray[i]),
+ _step2;
+
+ try {
+ var _loop = function _loop() {
+ var obj = _step2.value;
+ var objsPool = obj.startsWith("g_") ? _this.commonObjs : _this.objs;
+ var promise = new Promise(function (resolve) {
+ objsPool.get(obj, resolve);
+ });
+
+ _this.current.dependencies.push(promise);
+ };
+
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ _loop();
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+ }
+
+ return Promise.all(this.current.dependencies);
+ }
+ }, {
+ key: "transform",
+ value: function transform(a, b, c, d, e, f) {
+ var transformMatrix = [a, b, c, d, e, f];
+ this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
+ this.tgrp = null;
+ }
+ }, {
+ key: "getSVG",
+ value: function getSVG(operatorList, viewport) {
+ var _this2 = this;
+
+ this.viewport = viewport;
+
+ var svgElement = this._initialize(viewport);
+
+ return this.loadDependencies(operatorList).then(function () {
+ _this2.transformMatrix = _util.IDENTITY_MATRIX;
+
+ _this2.executeOpTree(_this2.convertOpList(operatorList));
+
+ return svgElement;
+ });
+ }
+ }, {
+ key: "convertOpList",
+ value: function convertOpList(operatorList) {
+ var operatorIdMapping = this._operatorIdMapping;
+ var argsArray = operatorList.argsArray;
+ var fnArray = operatorList.fnArray;
+ var opList = [];
+
+ for (var i = 0, ii = fnArray.length; i < ii; i++) {
+ var fnId = fnArray[i];
+ opList.push({
+ fnId: fnId,
+ fn: operatorIdMapping[fnId],
+ args: argsArray[i]
+ });
+ }
+
+ return opListToTree(opList);
+ }
+ }, {
+ key: "executeOpTree",
+ value: function executeOpTree(opTree) {
+ var _iterator3 = _createForOfIteratorHelper(opTree),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var opTreeElement = _step3.value;
+ var fn = opTreeElement.fn;
+ var fnId = opTreeElement.fnId;
+ var args = opTreeElement.args;
+
+ switch (fnId | 0) {
+ case _util.OPS.beginText:
+ this.beginText();
+ break;
+
+ case _util.OPS.dependency:
+ break;
+
+ case _util.OPS.setLeading:
+ this.setLeading(args);
+ break;
+
+ case _util.OPS.setLeadingMoveText:
+ this.setLeadingMoveText(args[0], args[1]);
+ break;
+
+ case _util.OPS.setFont:
+ this.setFont(args);
+ break;
+
+ case _util.OPS.showText:
+ this.showText(args[0]);
+ break;
+
+ case _util.OPS.showSpacedText:
+ this.showText(args[0]);
+ break;
+
+ case _util.OPS.endText:
+ this.endText();
+ break;
+
+ case _util.OPS.moveText:
+ this.moveText(args[0], args[1]);
+ break;
+
+ case _util.OPS.setCharSpacing:
+ this.setCharSpacing(args[0]);
+ break;
+
+ case _util.OPS.setWordSpacing:
+ this.setWordSpacing(args[0]);
+ break;
+
+ case _util.OPS.setHScale:
+ this.setHScale(args[0]);
+ break;
+
+ case _util.OPS.setTextMatrix:
+ this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
+ break;
+
+ case _util.OPS.setTextRise:
+ this.setTextRise(args[0]);
+ break;
+
+ case _util.OPS.setTextRenderingMode:
+ this.setTextRenderingMode(args[0]);
+ break;
+
+ case _util.OPS.setLineWidth:
+ this.setLineWidth(args[0]);
+ break;
+
+ case _util.OPS.setLineJoin:
+ this.setLineJoin(args[0]);
+ break;
+
+ case _util.OPS.setLineCap:
+ this.setLineCap(args[0]);
+ break;
+
+ case _util.OPS.setMiterLimit:
+ this.setMiterLimit(args[0]);
+ break;
+
+ case _util.OPS.setFillRGBColor:
+ this.setFillRGBColor(args[0], args[1], args[2]);
+ break;
+
+ case _util.OPS.setStrokeRGBColor:
+ this.setStrokeRGBColor(args[0], args[1], args[2]);
+ break;
+
+ case _util.OPS.setStrokeColorN:
+ this.setStrokeColorN(args);
+ break;
+
+ case _util.OPS.setFillColorN:
+ this.setFillColorN(args);
+ break;
+
+ case _util.OPS.shadingFill:
+ this.shadingFill(args[0]);
+ break;
+
+ case _util.OPS.setDash:
+ this.setDash(args[0], args[1]);
+ break;
+
+ case _util.OPS.setRenderingIntent:
+ this.setRenderingIntent(args[0]);
+ break;
+
+ case _util.OPS.setFlatness:
+ this.setFlatness(args[0]);
+ break;
+
+ case _util.OPS.setGState:
+ this.setGState(args[0]);
+ break;
+
+ case _util.OPS.fill:
+ this.fill();
+ break;
+
+ case _util.OPS.eoFill:
+ this.eoFill();
+ break;
+
+ case _util.OPS.stroke:
+ this.stroke();
+ break;
+
+ case _util.OPS.fillStroke:
+ this.fillStroke();
+ break;
+
+ case _util.OPS.eoFillStroke:
+ this.eoFillStroke();
+ break;
+
+ case _util.OPS.clip:
+ this.clip("nonzero");
+ break;
+
+ case _util.OPS.eoClip:
+ this.clip("evenodd");
+ break;
+
+ case _util.OPS.paintSolidColorImageMask:
+ this.paintSolidColorImageMask();
+ break;
+
+ case _util.OPS.paintImageXObject:
+ this.paintImageXObject(args[0]);
+ break;
+
+ case _util.OPS.paintInlineImageXObject:
+ this.paintInlineImageXObject(args[0]);
+ break;
+
+ case _util.OPS.paintImageMaskXObject:
+ this.paintImageMaskXObject(args[0]);
+ break;
+
+ case _util.OPS.paintFormXObjectBegin:
+ this.paintFormXObjectBegin(args[0], args[1]);
+ break;
+
+ case _util.OPS.paintFormXObjectEnd:
+ this.paintFormXObjectEnd();
+ break;
+
+ case _util.OPS.closePath:
+ this.closePath();
+ break;
+
+ case _util.OPS.closeStroke:
+ this.closeStroke();
+ break;
+
+ case _util.OPS.closeFillStroke:
+ this.closeFillStroke();
+ break;
+
+ case _util.OPS.closeEOFillStroke:
+ this.closeEOFillStroke();
+ break;
+
+ case _util.OPS.nextLine:
+ this.nextLine();
+ break;
+
+ case _util.OPS.transform:
+ this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
+ break;
+
+ case _util.OPS.constructPath:
+ this.constructPath(args[0], args[1]);
+ break;
+
+ case _util.OPS.endPath:
+ this.endPath();
+ break;
+
+ case 92:
+ this.group(opTreeElement.items);
+ break;
+
+ default:
+ (0, _util.warn)("Unimplemented operator ".concat(fn));
+ break;
+ }
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+ }
+ }, {
+ key: "setWordSpacing",
+ value: function setWordSpacing(wordSpacing) {
+ this.current.wordSpacing = wordSpacing;
+ }
+ }, {
+ key: "setCharSpacing",
+ value: function setCharSpacing(charSpacing) {
+ this.current.charSpacing = charSpacing;
+ }
+ }, {
+ key: "nextLine",
+ value: function nextLine() {
+ this.moveText(0, this.current.leading);
+ }
+ }, {
+ key: "setTextMatrix",
+ value: function setTextMatrix(a, b, c, d, e, f) {
+ var current = this.current;
+ current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
+ current.textMatrixScale = Math.hypot(a, b);
+ current.x = current.lineX = 0;
+ current.y = current.lineY = 0;
+ current.xcoords = [];
+ current.ycoords = [];
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", "".concat(pf(current.fontSize / 16.0), "em"));
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ current.txtElement = this.svgFactory.createElement("svg:text");
+ current.txtElement.appendChild(current.tspan);
+ }
+ }, {
+ key: "beginText",
+ value: function beginText() {
+ var current = this.current;
+ current.x = current.lineX = 0;
+ current.y = current.lineY = 0;
+ current.textMatrix = _util.IDENTITY_MATRIX;
+ current.lineMatrix = _util.IDENTITY_MATRIX;
+ current.textMatrixScale = 1;
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.txtElement = this.svgFactory.createElement("svg:text");
+ current.txtgrp = this.svgFactory.createElement("svg:g");
+ current.xcoords = [];
+ current.ycoords = [];
+ }
+ }, {
+ key: "moveText",
+ value: function moveText(x, y) {
+ var current = this.current;
+ current.x = current.lineX += x;
+ current.y = current.lineY += y;
+ current.xcoords = [];
+ current.ycoords = [];
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", "".concat(pf(current.fontSize / 16.0), "em"));
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ }
+ }, {
+ key: "showText",
+ value: function showText(glyphs) {
+ var current = this.current;
+ var font = current.font;
+ var fontSize = current.fontSize;
+
+ if (fontSize === 0) {
+ return;
+ }
+
+ var fontSizeScale = current.fontSizeScale;
+ var charSpacing = current.charSpacing;
+ var wordSpacing = current.wordSpacing;
+ var fontDirection = current.fontDirection;
+ var textHScale = current.textHScale * fontDirection;
+ var vertical = font.vertical;
+ var spacingDir = vertical ? 1 : -1;
+ var defaultVMetrics = font.defaultVMetrics;
+ var widthAdvanceScale = fontSize * current.fontMatrix[0];
+ var x = 0;
+
+ var _iterator4 = _createForOfIteratorHelper(glyphs),
+ _step4;
+
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var glyph = _step4.value;
+
+ if (glyph === null) {
+ x += fontDirection * wordSpacing;
+ continue;
+ } else if (typeof glyph === "number") {
+ x += spacingDir * glyph * fontSize / 1000;
+ continue;
+ }
+
+ var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ var character = glyph.fontChar;
+ var scaledX = void 0,
+ scaledY = void 0;
+ var width = glyph.width;
+
+ if (vertical) {
+ var vx = void 0;
+ var vmetric = glyph.vmetric || defaultVMetrics;
+ vx = glyph.vmetric ? vmetric[1] : width * 0.5;
+ vx = -vx * widthAdvanceScale;
+ var vy = vmetric[2] * widthAdvanceScale;
+ width = vmetric ? -vmetric[0] : width;
+ scaledX = vx / fontSizeScale;
+ scaledY = (x + vy) / fontSizeScale;
+ } else {
+ scaledX = x / fontSizeScale;
+ scaledY = 0;
+ }
+
+ if (glyph.isInFont || font.missingFile) {
+ current.xcoords.push(current.x + scaledX);
+
+ if (vertical) {
+ current.ycoords.push(-current.y + scaledY);
+ }
+
+ current.tspan.textContent += character;
+ } else {}
+
+ var charWidth = void 0;
+
+ if (vertical) {
+ charWidth = width * widthAdvanceScale - spacing * fontDirection;
+ } else {
+ charWidth = width * widthAdvanceScale + spacing * fontDirection;
+ }
+
+ x += charWidth;
+ }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
+ }
+
+ current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
+
+ if (vertical) {
+ current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
+ } else {
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ }
+
+ if (vertical) {
+ current.y -= x;
+ } else {
+ current.x += x * textHScale;
+ }
+
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", "".concat(pf(current.fontSize / 16.0), "em"));
+
+ if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
+ current.tspan.setAttributeNS(null, "font-style", current.fontStyle);
+ }
+
+ if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
+ current.tspan.setAttributeNS(null, "font-weight", current.fontWeight);
+ }
+
+ var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ if (current.fillColor !== SVG_DEFAULTS.fillColor) {
+ current.tspan.setAttributeNS(null, "fill", current.fillColor);
+ }
+
+ if (current.fillAlpha < 1) {
+ current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha);
+ }
+ } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
+ current.tspan.setAttributeNS(null, "fill", "transparent");
+ } else {
+ current.tspan.setAttributeNS(null, "fill", "none");
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ var lineWidthScale = 1 / (current.textMatrixScale || 1);
+
+ this._setStrokeAttributes(current.tspan, lineWidthScale);
+ }
+
+ var textMatrix = current.textMatrix;
+
+ if (current.textRise !== 0) {
+ textMatrix = textMatrix.slice();
+ textMatrix[5] += current.textRise;
+ }
+
+ current.txtElement.setAttributeNS(null, "transform", "".concat(pm(textMatrix), " scale(").concat(pf(textHScale), ", -1)"));
+ current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve");
+ current.txtElement.appendChild(current.tspan);
+ current.txtgrp.appendChild(current.txtElement);
+
+ this._ensureTransformGroup().appendChild(current.txtElement);
+ }
+ }, {
+ key: "setLeadingMoveText",
+ value: function setLeadingMoveText(x, y) {
+ this.setLeading(-y);
+ this.moveText(x, y);
+ }
+ }, {
+ key: "addFontStyle",
+ value: function addFontStyle(fontObj) {
+ if (!fontObj.data) {
+ throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
+ }
+
+ if (!this.cssStyle) {
+ this.cssStyle = this.svgFactory.createElement("svg:style");
+ this.cssStyle.setAttributeNS(null, "type", "text/css");
+ this.defs.appendChild(this.cssStyle);
+ }
+
+ var url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema);
+ this.cssStyle.textContent += "@font-face { font-family: \"".concat(fontObj.loadedName, "\";") + " src: url(".concat(url, "); }\n");
+ }
+ }, {
+ key: "setFont",
+ value: function setFont(details) {
+ var current = this.current;
+ var fontObj = this.commonObjs.get(details[0]);
+ var size = details[1];
+ current.font = fontObj;
+
+ if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
+ this.addFontStyle(fontObj);
+ this.embeddedFonts[fontObj.loadedName] = fontObj;
+ }
+
+ current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ var bold = "normal";
+
+ if (fontObj.black) {
+ bold = "900";
+ } else if (fontObj.bold) {
+ bold = "bold";
+ }
+
+ var italic = fontObj.italic ? "italic" : "normal";
+
+ if (size < 0) {
+ size = -size;
+ current.fontDirection = -1;
+ } else {
+ current.fontDirection = 1;
+ }
+
+ current.fontSize = size;
+ current.fontFamily = fontObj.loadedName;
+ current.fontWeight = bold;
+ current.fontStyle = italic;
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ current.xcoords = [];
+ current.ycoords = [];
+ }
+ }, {
+ key: "endText",
+ value: function endText() {
+ var _current$txtElement;
+
+ var current = this.current;
+
+ if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && (_current$txtElement = current.txtElement) !== null && _current$txtElement !== void 0 && _current$txtElement.hasChildNodes()) {
+ current.element = current.txtElement;
+ this.clip("nonzero");
+ this.endPath();
+ }
+ }
+ }, {
+ key: "setLineWidth",
+ value: function setLineWidth(width) {
+ if (width > 0) {
+ this.current.lineWidth = width;
+ }
+ }
+ }, {
+ key: "setLineCap",
+ value: function setLineCap(style) {
+ this.current.lineCap = LINE_CAP_STYLES[style];
+ }
+ }, {
+ key: "setLineJoin",
+ value: function setLineJoin(style) {
+ this.current.lineJoin = LINE_JOIN_STYLES[style];
+ }
+ }, {
+ key: "setMiterLimit",
+ value: function setMiterLimit(limit) {
+ this.current.miterLimit = limit;
+ }
+ }, {
+ key: "setStrokeAlpha",
+ value: function setStrokeAlpha(strokeAlpha) {
+ this.current.strokeAlpha = strokeAlpha;
+ }
+ }, {
+ key: "setStrokeRGBColor",
+ value: function setStrokeRGBColor(r, g, b) {
+ this.current.strokeColor = _util.Util.makeHexColor(r, g, b);
+ }
+ }, {
+ key: "setFillAlpha",
+ value: function setFillAlpha(fillAlpha) {
+ this.current.fillAlpha = fillAlpha;
+ }
+ }, {
+ key: "setFillRGBColor",
+ value: function setFillRGBColor(r, g, b) {
+ this.current.fillColor = _util.Util.makeHexColor(r, g, b);
+ this.current.tspan = this.svgFactory.createElement("svg:tspan");
+ this.current.xcoords = [];
+ this.current.ycoords = [];
+ }
+ }, {
+ key: "setStrokeColorN",
+ value: function setStrokeColorN(args) {
+ this.current.strokeColor = this._makeColorN_Pattern(args);
+ }
+ }, {
+ key: "setFillColorN",
+ value: function setFillColorN(args) {
+ this.current.fillColor = this._makeColorN_Pattern(args);
+ }
+ }, {
+ key: "shadingFill",
+ value: function shadingFill(args) {
+ var width = this.viewport.width;
+ var height = this.viewport.height;
+
+ var inv = _util.Util.inverseTransform(this.transformMatrix);
+
+ var bl = _util.Util.applyTransform([0, 0], inv);
+
+ var br = _util.Util.applyTransform([0, height], inv);
+
+ var ul = _util.Util.applyTransform([width, 0], inv);
+
+ var ur = _util.Util.applyTransform([width, height], inv);
+
+ var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+ var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+ var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+ var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+ var rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", x0);
+ rect.setAttributeNS(null, "y", y0);
+ rect.setAttributeNS(null, "width", x1 - x0);
+ rect.setAttributeNS(null, "height", y1 - y0);
+ rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));
+
+ if (this.current.fillAlpha < 1) {
+ rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
+ }
+
+ this._ensureTransformGroup().appendChild(rect);
+ }
+ }, {
+ key: "_makeColorN_Pattern",
+ value: function _makeColorN_Pattern(args) {
+ if (args[0] === "TilingPattern") {
+ return this._makeTilingPattern(args);
+ }
+
+ return this._makeShadingPattern(args);
+ }
+ }, {
+ key: "_makeTilingPattern",
+ value: function _makeTilingPattern(args) {
+ var color = args[1];
+ var operatorList = args[2];
+ var matrix = args[3] || _util.IDENTITY_MATRIX;
+
+ var _args$ = _slicedToArray(args[4], 4),
+ x0 = _args$[0],
+ y0 = _args$[1],
+ x1 = _args$[2],
+ y1 = _args$[3];
+
+ var xstep = args[5];
+ var ystep = args[6];
+ var paintType = args[7];
+ var tilingId = "shading".concat(shadingCount++);
+
+ var _Util$normalizeRect = _util.Util.normalizeRect([].concat(_toConsumableArray(_util.Util.applyTransform([x0, y0], matrix)), _toConsumableArray(_util.Util.applyTransform([x1, y1], matrix)))),
+ _Util$normalizeRect2 = _slicedToArray(_Util$normalizeRect, 4),
+ tx0 = _Util$normalizeRect2[0],
+ ty0 = _Util$normalizeRect2[1],
+ tx1 = _Util$normalizeRect2[2],
+ ty1 = _Util$normalizeRect2[3];
+
+ var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(matrix),
+ _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2),
+ xscale = _Util$singularValueDe2[0],
+ yscale = _Util$singularValueDe2[1];
+
+ var txstep = xstep * xscale;
+ var tystep = ystep * yscale;
+ var tiling = this.svgFactory.createElement("svg:pattern");
+ tiling.setAttributeNS(null, "id", tilingId);
+ tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse");
+ tiling.setAttributeNS(null, "width", txstep);
+ tiling.setAttributeNS(null, "height", tystep);
+ tiling.setAttributeNS(null, "x", "".concat(tx0));
+ tiling.setAttributeNS(null, "y", "".concat(ty0));
+ var svg = this.svg;
+ var transformMatrix = this.transformMatrix;
+ var fillColor = this.current.fillColor;
+ var strokeColor = this.current.strokeColor;
+ var bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);
+ this.svg = bbox;
+ this.transformMatrix = matrix;
+
+ if (paintType === 2) {
+ var cssColor = _util.Util.makeHexColor.apply(_util.Util, _toConsumableArray(color));
+
+ this.current.fillColor = cssColor;
+ this.current.strokeColor = cssColor;
+ }
+
+ this.executeOpTree(this.convertOpList(operatorList));
+ this.svg = svg;
+ this.transformMatrix = transformMatrix;
+ this.current.fillColor = fillColor;
+ this.current.strokeColor = strokeColor;
+ tiling.appendChild(bbox.childNodes[0]);
+ this.defs.appendChild(tiling);
+ return "url(#".concat(tilingId, ")");
+ }
+ }, {
+ key: "_makeShadingPattern",
+ value: function _makeShadingPattern(args) {
+ if (typeof args === "string") {
+ args = this.objs.get(args);
+ }
+
+ switch (args[0]) {
+ case "RadialAxial":
+ var shadingId = "shading".concat(shadingCount++);
+ var colorStops = args[3];
+ var gradient;
+
+ switch (args[1]) {
+ case "axial":
+ var point0 = args[4];
+ var point1 = args[5];
+ gradient = this.svgFactory.createElement("svg:linearGradient");
+ gradient.setAttributeNS(null, "id", shadingId);
+ gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
+ gradient.setAttributeNS(null, "x1", point0[0]);
+ gradient.setAttributeNS(null, "y1", point0[1]);
+ gradient.setAttributeNS(null, "x2", point1[0]);
+ gradient.setAttributeNS(null, "y2", point1[1]);
+ break;
+
+ case "radial":
+ var focalPoint = args[4];
+ var circlePoint = args[5];
+ var focalRadius = args[6];
+ var circleRadius = args[7];
+ gradient = this.svgFactory.createElement("svg:radialGradient");
+ gradient.setAttributeNS(null, "id", shadingId);
+ gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
+ gradient.setAttributeNS(null, "cx", circlePoint[0]);
+ gradient.setAttributeNS(null, "cy", circlePoint[1]);
+ gradient.setAttributeNS(null, "r", circleRadius);
+ gradient.setAttributeNS(null, "fx", focalPoint[0]);
+ gradient.setAttributeNS(null, "fy", focalPoint[1]);
+ gradient.setAttributeNS(null, "fr", focalRadius);
+ break;
+
+ default:
+ throw new Error("Unknown RadialAxial type: ".concat(args[1]));
+ }
+
+ var _iterator5 = _createForOfIteratorHelper(colorStops),
+ _step5;
+
+ try {
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ var colorStop = _step5.value;
+ var stop = this.svgFactory.createElement("svg:stop");
+ stop.setAttributeNS(null, "offset", colorStop[0]);
+ stop.setAttributeNS(null, "stop-color", colorStop[1]);
+ gradient.appendChild(stop);
+ }
+ } catch (err) {
+ _iterator5.e(err);
+ } finally {
+ _iterator5.f();
+ }
+
+ this.defs.appendChild(gradient);
+ return "url(#".concat(shadingId, ")");
+
+ case "Mesh":
+ (0, _util.warn)("Unimplemented pattern Mesh");
+ return null;
+
+ case "Dummy":
+ return "hotpink";
+
+ default:
+ throw new Error("Unknown IR type: ".concat(args[0]));
+ }
+ }
+ }, {
+ key: "setDash",
+ value: function setDash(dashArray, dashPhase) {
+ this.current.dashArray = dashArray;
+ this.current.dashPhase = dashPhase;
+ }
+ }, {
+ key: "constructPath",
+ value: function constructPath(ops, args) {
+ var current = this.current;
+ var x = current.x,
+ y = current.y;
+ var d = [];
+ var j = 0;
+
+ var _iterator6 = _createForOfIteratorHelper(ops),
+ _step6;
+
+ try {
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
+ var op = _step6.value;
+
+ switch (op | 0) {
+ case _util.OPS.rectangle:
+ x = args[j++];
+ y = args[j++];
+ var width = args[j++];
+ var height = args[j++];
+ var xw = x + width;
+ var yh = y + height;
+ d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z");
+ break;
+
+ case _util.OPS.moveTo:
+ x = args[j++];
+ y = args[j++];
+ d.push("M", pf(x), pf(y));
+ break;
+
+ case _util.OPS.lineTo:
+ x = args[j++];
+ y = args[j++];
+ d.push("L", pf(x), pf(y));
+ break;
+
+ case _util.OPS.curveTo:
+ x = args[j + 4];
+ y = args[j + 5];
+ d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
+ j += 6;
+ break;
+
+ case _util.OPS.curveTo2:
+ d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
+ x = args[j + 2];
+ y = args[j + 3];
+ j += 4;
+ break;
+
+ case _util.OPS.curveTo3:
+ x = args[j + 2];
+ y = args[j + 3];
+ d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
+ j += 4;
+ break;
+
+ case _util.OPS.closePath:
+ d.push("Z");
+ break;
+ }
+ }
+ } catch (err) {
+ _iterator6.e(err);
+ } finally {
+ _iterator6.f();
+ }
+
+ d = d.join(" ");
+
+ if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {
+ d = current.path.getAttributeNS(null, "d") + d;
+ } else {
+ current.path = this.svgFactory.createElement("svg:path");
+
+ this._ensureTransformGroup().appendChild(current.path);
+ }
+
+ current.path.setAttributeNS(null, "d", d);
+ current.path.setAttributeNS(null, "fill", "none");
+ current.element = current.path;
+ current.setCurrentPoint(x, y);
+ }
+ }, {
+ key: "endPath",
+ value: function endPath() {
+ var current = this.current;
+ current.path = null;
+
+ if (!this.pendingClip) {
+ return;
+ }
+
+ if (!current.element) {
+ this.pendingClip = null;
+ return;
+ }
+
+ var clipId = "clippath".concat(clipCount++);
+ var clipPath = this.svgFactory.createElement("svg:clipPath");
+ clipPath.setAttributeNS(null, "id", clipId);
+ clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix));
+ var clipElement = current.element.cloneNode(true);
+
+ if (this.pendingClip === "evenodd") {
+ clipElement.setAttributeNS(null, "clip-rule", "evenodd");
+ } else {
+ clipElement.setAttributeNS(null, "clip-rule", "nonzero");
+ }
+
+ this.pendingClip = null;
+ clipPath.appendChild(clipElement);
+ this.defs.appendChild(clipPath);
+
+ if (current.activeClipUrl) {
+ current.clipGroup = null;
+
+ var _iterator7 = _createForOfIteratorHelper(this.extraStack),
+ _step7;
+
+ try {
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
+ var prev = _step7.value;
+ prev.clipGroup = null;
+ }
+ } catch (err) {
+ _iterator7.e(err);
+ } finally {
+ _iterator7.f();
+ }
+
+ clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl);
+ }
+
+ current.activeClipUrl = "url(#".concat(clipId, ")");
+ this.tgrp = null;
+ }
+ }, {
+ key: "clip",
+ value: function clip(type) {
+ this.pendingClip = type;
+ }
+ }, {
+ key: "closePath",
+ value: function closePath() {
+ var current = this.current;
+
+ if (current.path) {
+ var d = "".concat(current.path.getAttributeNS(null, "d"), "Z");
+ current.path.setAttributeNS(null, "d", d);
+ }
+ }
+ }, {
+ key: "setLeading",
+ value: function setLeading(leading) {
+ this.current.leading = -leading;
+ }
+ }, {
+ key: "setTextRise",
+ value: function setTextRise(textRise) {
+ this.current.textRise = textRise;
+ }
+ }, {
+ key: "setTextRenderingMode",
+ value: function setTextRenderingMode(textRenderingMode) {
+ this.current.textRenderingMode = textRenderingMode;
+ }
+ }, {
+ key: "setHScale",
+ value: function setHScale(scale) {
+ this.current.textHScale = scale / 100;
+ }
+ }, {
+ key: "setRenderingIntent",
+ value: function setRenderingIntent(intent) {}
+ }, {
+ key: "setFlatness",
+ value: function setFlatness(flatness) {}
+ }, {
+ key: "setGState",
+ value: function setGState(states) {
+ var _iterator8 = _createForOfIteratorHelper(states),
+ _step8;
+
+ try {
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
+ var _step8$value = _slicedToArray(_step8.value, 2),
+ key = _step8$value[0],
+ value = _step8$value[1];
+
+ switch (key) {
+ case "LW":
+ this.setLineWidth(value);
+ break;
+
+ case "LC":
+ this.setLineCap(value);
+ break;
+
+ case "LJ":
+ this.setLineJoin(value);
+ break;
+
+ case "ML":
+ this.setMiterLimit(value);
+ break;
+
+ case "D":
+ this.setDash(value[0], value[1]);
+ break;
+
+ case "RI":
+ this.setRenderingIntent(value);
+ break;
+
+ case "FL":
+ this.setFlatness(value);
+ break;
+
+ case "Font":
+ this.setFont(value);
+ break;
+
+ case "CA":
+ this.setStrokeAlpha(value);
+ break;
+
+ case "ca":
+ this.setFillAlpha(value);
+ break;
+
+ default:
+ (0, _util.warn)("Unimplemented graphic state operator ".concat(key));
+ break;
+ }
+ }
+ } catch (err) {
+ _iterator8.e(err);
+ } finally {
+ _iterator8.f();
+ }
+ }
+ }, {
+ key: "fill",
+ value: function fill() {
+ var current = this.current;
+
+ if (current.element) {
+ current.element.setAttributeNS(null, "fill", current.fillColor);
+ current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha);
+ this.endPath();
+ }
+ }
+ }, {
+ key: "stroke",
+ value: function stroke() {
+ var current = this.current;
+
+ if (current.element) {
+ this._setStrokeAttributes(current.element);
+
+ current.element.setAttributeNS(null, "fill", "none");
+ this.endPath();
+ }
+ }
+ }, {
+ key: "_setStrokeAttributes",
+ value: function _setStrokeAttributes(element) {
+ var lineWidthScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
+ var current = this.current;
+ var dashArray = current.dashArray;
+
+ if (lineWidthScale !== 1 && dashArray.length > 0) {
+ dashArray = dashArray.map(function (value) {
+ return lineWidthScale * value;
+ });
+ }
+
+ element.setAttributeNS(null, "stroke", current.strokeColor);
+ element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha);
+ element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit));
+ element.setAttributeNS(null, "stroke-linecap", current.lineCap);
+ element.setAttributeNS(null, "stroke-linejoin", current.lineJoin);
+ element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px");
+ element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" "));
+ element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px");
+ }
+ }, {
+ key: "eoFill",
+ value: function eoFill() {
+ if (this.current.element) {
+ this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
+ }
+
+ this.fill();
+ }
+ }, {
+ key: "fillStroke",
+ value: function fillStroke() {
+ this.stroke();
+ this.fill();
+ }
+ }, {
+ key: "eoFillStroke",
+ value: function eoFillStroke() {
+ if (this.current.element) {
+ this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
+ }
+
+ this.fillStroke();
+ }
+ }, {
+ key: "closeStroke",
+ value: function closeStroke() {
+ this.closePath();
+ this.stroke();
+ }
+ }, {
+ key: "closeFillStroke",
+ value: function closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ }
+ }, {
+ key: "closeEOFillStroke",
+ value: function closeEOFillStroke() {
+ this.closePath();
+ this.eoFillStroke();
+ }
+ }, {
+ key: "paintSolidColorImageMask",
+ value: function paintSolidColorImageMask() {
+ var rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", "0");
+ rect.setAttributeNS(null, "y", "0");
+ rect.setAttributeNS(null, "width", "1px");
+ rect.setAttributeNS(null, "height", "1px");
+ rect.setAttributeNS(null, "fill", this.current.fillColor);
+
+ this._ensureTransformGroup().appendChild(rect);
+ }
+ }, {
+ key: "paintImageXObject",
+ value: function paintImageXObject(objId) {
+ var imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)("Dependent image with object ID ".concat(objId, " is not ready yet"));
+ return;
+ }
+
+ this.paintInlineImageXObject(imgData);
+ }
+ }, {
+ key: "paintInlineImageXObject",
+ value: function paintInlineImageXObject(imgData, mask) {
+ var width = imgData.width;
+ var height = imgData.height;
+ var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
+ var cliprect = this.svgFactory.createElement("svg:rect");
+ cliprect.setAttributeNS(null, "x", "0");
+ cliprect.setAttributeNS(null, "y", "0");
+ cliprect.setAttributeNS(null, "width", pf(width));
+ cliprect.setAttributeNS(null, "height", pf(height));
+ this.current.element = cliprect;
+ this.clip("nonzero");
+ var imgEl = this.svgFactory.createElement("svg:image");
+ imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc);
+ imgEl.setAttributeNS(null, "x", "0");
+ imgEl.setAttributeNS(null, "y", pf(-height));
+ imgEl.setAttributeNS(null, "width", pf(width) + "px");
+ imgEl.setAttributeNS(null, "height", pf(height) + "px");
+ imgEl.setAttributeNS(null, "transform", "scale(".concat(pf(1 / width), " ").concat(pf(-1 / height), ")"));
+
+ if (mask) {
+ mask.appendChild(imgEl);
+ } else {
+ this._ensureTransformGroup().appendChild(imgEl);
+ }
+ }
+ }, {
+ key: "paintImageMaskXObject",
+ value: function paintImageMaskXObject(imgData) {
+ var current = this.current;
+ var width = imgData.width;
+ var height = imgData.height;
+ var fillColor = current.fillColor;
+ current.maskId = "mask".concat(maskCount++);
+ var mask = this.svgFactory.createElement("svg:mask");
+ mask.setAttributeNS(null, "id", current.maskId);
+ var rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", "0");
+ rect.setAttributeNS(null, "y", "0");
+ rect.setAttributeNS(null, "width", pf(width));
+ rect.setAttributeNS(null, "height", pf(height));
+ rect.setAttributeNS(null, "fill", fillColor);
+ rect.setAttributeNS(null, "mask", "url(#".concat(current.maskId, ")"));
+ this.defs.appendChild(mask);
+
+ this._ensureTransformGroup().appendChild(rect);
+
+ this.paintInlineImageXObject(imgData, mask);
+ }
+ }, {
+ key: "paintFormXObjectBegin",
+ value: function paintFormXObjectBegin(matrix, bbox) {
+ if (Array.isArray(matrix) && matrix.length === 6) {
+ this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
+ }
+
+ if (bbox) {
+ var width = bbox[2] - bbox[0];
+ var height = bbox[3] - bbox[1];
+ var cliprect = this.svgFactory.createElement("svg:rect");
+ cliprect.setAttributeNS(null, "x", bbox[0]);
+ cliprect.setAttributeNS(null, "y", bbox[1]);
+ cliprect.setAttributeNS(null, "width", pf(width));
+ cliprect.setAttributeNS(null, "height", pf(height));
+ this.current.element = cliprect;
+ this.clip("nonzero");
+ this.endPath();
+ }
+ }
+ }, {
+ key: "paintFormXObjectEnd",
+ value: function paintFormXObjectEnd() {}
+ }, {
+ key: "_initialize",
+ value: function _initialize(viewport) {
+ var svg = this.svgFactory.create(viewport.width, viewport.height);
+ var definitions = this.svgFactory.createElement("svg:defs");
+ svg.appendChild(definitions);
+ this.defs = definitions;
+ var rootGroup = this.svgFactory.createElement("svg:g");
+ rootGroup.setAttributeNS(null, "transform", pm(viewport.transform));
+ svg.appendChild(rootGroup);
+ this.svg = rootGroup;
+ return svg;
+ }
+ }, {
+ key: "_ensureClipGroup",
+ value: function _ensureClipGroup() {
+ if (!this.current.clipGroup) {
+ var clipGroup = this.svgFactory.createElement("svg:g");
+ clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
+ this.svg.appendChild(clipGroup);
+ this.current.clipGroup = clipGroup;
+ }
+
+ return this.current.clipGroup;
+ }
+ }, {
+ key: "_ensureTransformGroup",
+ value: function _ensureTransformGroup() {
+ if (!this.tgrp) {
+ this.tgrp = this.svgFactory.createElement("svg:g");
+ this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
+
+ if (this.current.activeClipUrl) {
+ this._ensureClipGroup().appendChild(this.tgrp);
+ } else {
+ this.svg.appendChild(this.tgrp);
+ }
+ }
+
+ return this.tgrp;
+ }
+ }]);
+
+ return SVGGraphics;
+ }();
+}
+
+/***/ }),
+/* 164 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFNodeStream = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+var _network_utils = __w_pdfjs_require__(165);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+;
+
+var fs = require("fs");
+
+var http = require("http");
+
+var https = require("https");
+
+var url = require("url");
+
+var fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//;
+
+function parseUrl(sourceUrl) {
+ var parsedUrl = url.parse(sourceUrl);
+
+ if (parsedUrl.protocol === "file:" || parsedUrl.host) {
+ return parsedUrl;
+ }
+
+ if (/^[a-z]:[/\\]/i.test(sourceUrl)) {
+ return url.parse("file:///".concat(sourceUrl));
+ }
+
+ if (!parsedUrl.host) {
+ parsedUrl.protocol = "file:";
+ }
+
+ return parsedUrl;
+}
+
+var PDFNodeStream = /*#__PURE__*/function () {
+ function PDFNodeStream(source) {
+ _classCallCheck(this, PDFNodeStream);
+
+ this.source = source;
+ this.url = parseUrl(source.url);
+ this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:";
+ this.isFsUrl = this.url.protocol === "file:";
+ this.httpHeaders = this.isHttp && source.httpHeaders || {};
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+
+ _createClass(PDFNodeStream, [{
+ key: "_progressiveDataLength",
+ get: function get() {
+ var _this$_fullRequestRea, _this$_fullRequestRea2;
+
+ return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;
+ }
+ }, {
+ key: "getFullReader",
+ value: function getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
+ this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
+ return this._fullRequestReader;
+ }
+ }, {
+ key: "getRangeReader",
+ value: function getRangeReader(start, end) {
+ if (end <= this._progressiveDataLength) {
+ return null;
+ }
+
+ var rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);
+
+ this._rangeRequestReaders.push(rangeReader);
+
+ return rangeReader;
+ }
+ }, {
+ key: "cancelAllRequests",
+ value: function cancelAllRequests(reason) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ var _iterator = _createForOfIteratorHelper(this._rangeRequestReaders.slice(0)),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var reader = _step.value;
+ reader.cancel(reason);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+ }]);
+
+ return PDFNodeStream;
+}();
+
+exports.PDFNodeStream = PDFNodeStream;
+
+var BaseFullReader = /*#__PURE__*/function () {
+ function BaseFullReader(stream) {
+ _classCallCheck(this, BaseFullReader);
+
+ this._url = stream.url;
+ this._done = false;
+ this._storedError = null;
+ this.onProgress = null;
+ var source = stream.source;
+ this._contentLength = source.length;
+ this._loaded = 0;
+ this._filename = null;
+ this._disableRange = source.disableRange || false;
+ this._rangeChunkSize = source.rangeChunkSize;
+
+ if (!this._rangeChunkSize && !this._disableRange) {
+ this._disableRange = true;
+ }
+
+ this._isStreamingSupported = !source.disableStream;
+ this._isRangeSupported = !source.disableRange;
+ this._readableStream = null;
+ this._readCapability = (0, _util.createPromiseCapability)();
+ this._headersCapability = (0, _util.createPromiseCapability)();
+ }
+
+ _createClass(BaseFullReader, [{
+ key: "headersReady",
+ get: function get() {
+ return this._headersCapability.promise;
+ }
+ }, {
+ key: "filename",
+ get: function get() {
+ return this._filename;
+ }
+ }, {
+ key: "contentLength",
+ get: function get() {
+ return this._contentLength;
+ }
+ }, {
+ key: "isRangeSupported",
+ get: function get() {
+ return this._isRangeSupported;
+ }
+ }, {
+ key: "isStreamingSupported",
+ get: function get() {
+ return this._isStreamingSupported;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
+ var chunk, buffer;
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.next = 2;
+ return this._readCapability.promise;
+
+ case 2:
+ if (!this._done) {
+ _context.next = 4;
+ break;
+ }
+
+ return _context.abrupt("return", {
+ value: undefined,
+ done: true
+ });
+
+ case 4:
+ if (!this._storedError) {
+ _context.next = 6;
+ break;
+ }
+
+ throw this._storedError;
+
+ case 6:
+ chunk = this._readableStream.read();
+
+ if (!(chunk === null)) {
+ _context.next = 10;
+ break;
+ }
+
+ this._readCapability = (0, _util.createPromiseCapability)();
+ return _context.abrupt("return", this.read());
+
+ case 10:
+ this._loaded += chunk.length;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded,
+ total: this._contentLength
+ });
+ }
+
+ buffer = new Uint8Array(chunk).buffer;
+ return _context.abrupt("return", {
+ value: buffer,
+ done: false
+ });
+
+ case 14:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function read() {
+ return _read.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ if (!this._readableStream) {
+ this._error(reason);
+
+ return;
+ }
+
+ this._readableStream.destroy(reason);
+ }
+ }, {
+ key: "_error",
+ value: function _error(reason) {
+ this._storedError = reason;
+
+ this._readCapability.resolve();
+ }
+ }, {
+ key: "_setReadableStream",
+ value: function _setReadableStream(readableStream) {
+ var _this = this;
+
+ this._readableStream = readableStream;
+ readableStream.on("readable", function () {
+ _this._readCapability.resolve();
+ });
+ readableStream.on("end", function () {
+ readableStream.destroy();
+ _this._done = true;
+
+ _this._readCapability.resolve();
+ });
+ readableStream.on("error", function (reason) {
+ _this._error(reason);
+ });
+
+ if (!this._isStreamingSupported && this._isRangeSupported) {
+ this._error(new _util.AbortException("streaming is disabled"));
+ }
+
+ if (this._storedError) {
+ this._readableStream.destroy(this._storedError);
+ }
+ }
+ }]);
+
+ return BaseFullReader;
+}();
+
+var BaseRangeReader = /*#__PURE__*/function () {
+ function BaseRangeReader(stream) {
+ _classCallCheck(this, BaseRangeReader);
+
+ this._url = stream.url;
+ this._done = false;
+ this._storedError = null;
+ this.onProgress = null;
+ this._loaded = 0;
+ this._readableStream = null;
+ this._readCapability = (0, _util.createPromiseCapability)();
+ var source = stream.source;
+ this._isStreamingSupported = !source.disableStream;
+ }
+
+ _createClass(BaseRangeReader, [{
+ key: "isStreamingSupported",
+ get: function get() {
+ return this._isStreamingSupported;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
+ var chunk, buffer;
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ _context2.next = 2;
+ return this._readCapability.promise;
+
+ case 2:
+ if (!this._done) {
+ _context2.next = 4;
+ break;
+ }
+
+ return _context2.abrupt("return", {
+ value: undefined,
+ done: true
+ });
+
+ case 4:
+ if (!this._storedError) {
+ _context2.next = 6;
+ break;
+ }
+
+ throw this._storedError;
+
+ case 6:
+ chunk = this._readableStream.read();
+
+ if (!(chunk === null)) {
+ _context2.next = 10;
+ break;
+ }
+
+ this._readCapability = (0, _util.createPromiseCapability)();
+ return _context2.abrupt("return", this.read());
+
+ case 10:
+ this._loaded += chunk.length;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded
+ });
+ }
+
+ buffer = new Uint8Array(chunk).buffer;
+ return _context2.abrupt("return", {
+ value: buffer,
+ done: false
+ });
+
+ case 14:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, this);
+ }));
+
+ function read() {
+ return _read2.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ if (!this._readableStream) {
+ this._error(reason);
+
+ return;
+ }
+
+ this._readableStream.destroy(reason);
+ }
+ }, {
+ key: "_error",
+ value: function _error(reason) {
+ this._storedError = reason;
+
+ this._readCapability.resolve();
+ }
+ }, {
+ key: "_setReadableStream",
+ value: function _setReadableStream(readableStream) {
+ var _this2 = this;
+
+ this._readableStream = readableStream;
+ readableStream.on("readable", function () {
+ _this2._readCapability.resolve();
+ });
+ readableStream.on("end", function () {
+ readableStream.destroy();
+ _this2._done = true;
+
+ _this2._readCapability.resolve();
+ });
+ readableStream.on("error", function (reason) {
+ _this2._error(reason);
+ });
+
+ if (this._storedError) {
+ this._readableStream.destroy(this._storedError);
+ }
+ }
+ }]);
+
+ return BaseRangeReader;
+}();
+
+function createRequestOptions(parsedUrl, headers) {
+ return {
+ protocol: parsedUrl.protocol,
+ auth: parsedUrl.auth,
+ host: parsedUrl.hostname,
+ port: parsedUrl.port,
+ path: parsedUrl.path,
+ method: "GET",
+ headers: headers
+ };
+}
+
+var PDFNodeStreamFullReader = /*#__PURE__*/function (_BaseFullReader) {
+ _inherits(PDFNodeStreamFullReader, _BaseFullReader);
+
+ var _super = _createSuper(PDFNodeStreamFullReader);
+
+ function PDFNodeStreamFullReader(stream) {
+ var _this3;
+
+ _classCallCheck(this, PDFNodeStreamFullReader);
+
+ _this3 = _super.call(this, stream);
+
+ var handleResponse = function handleResponse(response) {
+ if (response.statusCode === 404) {
+ var error = new _util.MissingPDFException("Missing PDF \"".concat(_this3._url, "\"."));
+ _this3._storedError = error;
+
+ _this3._headersCapability.reject(error);
+
+ return;
+ }
+
+ _this3._headersCapability.resolve();
+
+ _this3._setReadableStream(response);
+
+ var getResponseHeader = function getResponseHeader(name) {
+ return _this3._readableStream.headers[name.toLowerCase()];
+ };
+
+ var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({
+ getResponseHeader: getResponseHeader,
+ isHttp: stream.isHttp,
+ rangeChunkSize: _this3._rangeChunkSize,
+ disableRange: _this3._disableRange
+ }),
+ allowRangeRequests = _validateRangeRequest.allowRangeRequests,
+ suggestedLength = _validateRangeRequest.suggestedLength;
+
+ _this3._isRangeSupported = allowRangeRequests;
+ _this3._contentLength = suggestedLength || _this3._contentLength;
+ _this3._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
+ };
+
+ _this3._request = null;
+
+ if (_this3._url.protocol === "http:") {
+ _this3._request = http.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse);
+ } else {
+ _this3._request = https.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse);
+ }
+
+ _this3._request.on("error", function (reason) {
+ _this3._storedError = reason;
+
+ _this3._headersCapability.reject(reason);
+ });
+
+ _this3._request.end();
+
+ return _this3;
+ }
+
+ return _createClass(PDFNodeStreamFullReader);
+}(BaseFullReader);
+
+var PDFNodeStreamRangeReader = /*#__PURE__*/function (_BaseRangeReader) {
+ _inherits(PDFNodeStreamRangeReader, _BaseRangeReader);
+
+ var _super2 = _createSuper(PDFNodeStreamRangeReader);
+
+ function PDFNodeStreamRangeReader(stream, start, end) {
+ var _this4;
+
+ _classCallCheck(this, PDFNodeStreamRangeReader);
+
+ _this4 = _super2.call(this, stream);
+ _this4._httpHeaders = {};
+
+ for (var property in stream.httpHeaders) {
+ var value = stream.httpHeaders[property];
+
+ if (typeof value === "undefined") {
+ continue;
+ }
+
+ _this4._httpHeaders[property] = value;
+ }
+
+ _this4._httpHeaders.Range = "bytes=".concat(start, "-").concat(end - 1);
+
+ var handleResponse = function handleResponse(response) {
+ if (response.statusCode === 404) {
+ var error = new _util.MissingPDFException("Missing PDF \"".concat(_this4._url, "\"."));
+ _this4._storedError = error;
+ return;
+ }
+
+ _this4._setReadableStream(response);
+ };
+
+ _this4._request = null;
+
+ if (_this4._url.protocol === "http:") {
+ _this4._request = http.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse);
+ } else {
+ _this4._request = https.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse);
+ }
+
+ _this4._request.on("error", function (reason) {
+ _this4._storedError = reason;
+ });
+
+ _this4._request.end();
+
+ return _this4;
+ }
+
+ return _createClass(PDFNodeStreamRangeReader);
+}(BaseRangeReader);
+
+var PDFNodeStreamFsFullReader = /*#__PURE__*/function (_BaseFullReader2) {
+ _inherits(PDFNodeStreamFsFullReader, _BaseFullReader2);
+
+ var _super3 = _createSuper(PDFNodeStreamFsFullReader);
+
+ function PDFNodeStreamFsFullReader(stream) {
+ var _this5;
+
+ _classCallCheck(this, PDFNodeStreamFsFullReader);
+
+ _this5 = _super3.call(this, stream);
+ var path = decodeURIComponent(_this5._url.path);
+
+ if (fileUriRegex.test(_this5._url.href)) {
+ path = path.replace(/^\//, "");
+ }
+
+ fs.lstat(path, function (error, stat) {
+ if (error) {
+ if (error.code === "ENOENT") {
+ error = new _util.MissingPDFException("Missing PDF \"".concat(path, "\"."));
+ }
+
+ _this5._storedError = error;
+
+ _this5._headersCapability.reject(error);
+
+ return;
+ }
+
+ _this5._contentLength = stat.size;
+
+ _this5._setReadableStream(fs.createReadStream(path));
+
+ _this5._headersCapability.resolve();
+ });
+ return _this5;
+ }
+
+ return _createClass(PDFNodeStreamFsFullReader);
+}(BaseFullReader);
+
+var PDFNodeStreamFsRangeReader = /*#__PURE__*/function (_BaseRangeReader2) {
+ _inherits(PDFNodeStreamFsRangeReader, _BaseRangeReader2);
+
+ var _super4 = _createSuper(PDFNodeStreamFsRangeReader);
+
+ function PDFNodeStreamFsRangeReader(stream, start, end) {
+ var _this6;
+
+ _classCallCheck(this, PDFNodeStreamFsRangeReader);
+
+ _this6 = _super4.call(this, stream);
+ var path = decodeURIComponent(_this6._url.path);
+
+ if (fileUriRegex.test(_this6._url.href)) {
+ path = path.replace(/^\//, "");
+ }
+
+ _this6._setReadableStream(fs.createReadStream(path, {
+ start: start,
+ end: end - 1
+ }));
+
+ return _this6;
+ }
+
+ return _createClass(PDFNodeStreamFsRangeReader);
+}(BaseRangeReader);
+
+/***/ }),
+/* 165 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.createResponseStatusError = createResponseStatusError;
+exports.extractFilenameFromHeader = extractFilenameFromHeader;
+exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
+exports.validateResponseStatus = validateResponseStatus;
+
+var _util = __w_pdfjs_require__(1);
+
+var _content_disposition = __w_pdfjs_require__(166);
+
+var _display_utils = __w_pdfjs_require__(146);
+
+function validateRangeRequestCapabilities(_ref) {
+ var getResponseHeader = _ref.getResponseHeader,
+ isHttp = _ref.isHttp,
+ rangeChunkSize = _ref.rangeChunkSize,
+ disableRange = _ref.disableRange;
+ (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero");
+ var returnValues = {
+ allowRangeRequests: false,
+ suggestedLength: undefined
+ };
+ var length = parseInt(getResponseHeader("Content-Length"), 10);
+
+ if (!Number.isInteger(length)) {
+ return returnValues;
+ }
+
+ returnValues.suggestedLength = length;
+
+ if (length <= 2 * rangeChunkSize) {
+ return returnValues;
+ }
+
+ if (disableRange || !isHttp) {
+ return returnValues;
+ }
+
+ if (getResponseHeader("Accept-Ranges") !== "bytes") {
+ return returnValues;
+ }
+
+ var contentEncoding = getResponseHeader("Content-Encoding") || "identity";
+
+ if (contentEncoding !== "identity") {
+ return returnValues;
+ }
+
+ returnValues.allowRangeRequests = true;
+ return returnValues;
+}
+
+function extractFilenameFromHeader(getResponseHeader) {
+ var contentDisposition = getResponseHeader("Content-Disposition");
+
+ if (contentDisposition) {
+ var filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);
+
+ if (filename.includes("%")) {
+ try {
+ filename = decodeURIComponent(filename);
+ } catch (ex) {}
+ }
+
+ if ((0, _display_utils.isPdfFile)(filename)) {
+ return filename;
+ }
+ }
+
+ return null;
+}
+
+function createResponseStatusError(status, url) {
+ if (status === 404 || status === 0 && url.startsWith("file:")) {
+ return new _util.MissingPDFException('Missing PDF "' + url + '".');
+ }
+
+ return new _util.UnexpectedResponseException("Unexpected server response (".concat(status, ") while retrieving PDF \"").concat(url, "\"."), status);
+}
+
+function validateResponseStatus(status) {
+ return status === 200 || status === 206;
+}
+
+/***/ }),
+/* 166 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
+
+var _util = __w_pdfjs_require__(1);
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function getFilenameFromContentDispositionHeader(contentDisposition) {
+ var needsEncodingFixup = true;
+ var tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition);
+
+ if (tmp) {
+ tmp = tmp[1];
+ var filename = rfc2616unquote(tmp);
+ filename = unescape(filename);
+ filename = rfc5987decode(filename);
+ filename = rfc2047decode(filename);
+ return fixupEncoding(filename);
+ }
+
+ tmp = rfc2231getparam(contentDisposition);
+
+ if (tmp) {
+ var _filename = rfc2047decode(tmp);
+
+ return fixupEncoding(_filename);
+ }
+
+ tmp = toParamRegExp("filename", "i").exec(contentDisposition);
+
+ if (tmp) {
+ tmp = tmp[1];
+
+ var _filename2 = rfc2616unquote(tmp);
+
+ _filename2 = rfc2047decode(_filename2);
+ return fixupEncoding(_filename2);
+ }
+
+ function toParamRegExp(attributePattern, flags) {
+ return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags);
+ }
+
+ function textdecode(encoding, value) {
+ if (encoding) {
+ if (!/^[\x00-\xFF]+$/.test(value)) {
+ return value;
+ }
+
+ try {
+ var decoder = new TextDecoder(encoding, {
+ fatal: true
+ });
+ var buffer = (0, _util.stringToBytes)(value);
+ value = decoder.decode(buffer);
+ needsEncodingFixup = false;
+ } catch (e) {}
+ }
+
+ return value;
+ }
+
+ function fixupEncoding(value) {
+ if (needsEncodingFixup && /[\x80-\xff]/.test(value)) {
+ value = textdecode("utf-8", value);
+
+ if (needsEncodingFixup) {
+ value = textdecode("iso-8859-1", value);
+ }
+ }
+
+ return value;
+ }
+
+ function rfc2231getparam(contentDispositionStr) {
+ var matches = [];
+ var match;
+ var iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
+
+ while ((match = iter.exec(contentDispositionStr)) !== null) {
+ var _match = match,
+ _match2 = _slicedToArray(_match, 4),
+ n = _match2[1],
+ quot = _match2[2],
+ part = _match2[3];
+
+ n = parseInt(n, 10);
+
+ if (n in matches) {
+ if (n === 0) {
+ break;
+ }
+
+ continue;
+ }
+
+ matches[n] = [quot, part];
+ }
+
+ var parts = [];
+
+ for (var _n2 = 0; _n2 < matches.length; ++_n2) {
+ if (!(_n2 in matches)) {
+ break;
+ }
+
+ var _matches$_n = _slicedToArray(matches[_n2], 2),
+ _quot = _matches$_n[0],
+ _part = _matches$_n[1];
+
+ _part = rfc2616unquote(_part);
+
+ if (_quot) {
+ _part = unescape(_part);
+
+ if (_n2 === 0) {
+ _part = rfc5987decode(_part);
+ }
+ }
+
+ parts.push(_part);
+ }
+
+ return parts.join("");
+ }
+
+ function rfc2616unquote(value) {
+ if (value.startsWith('"')) {
+ var parts = value.slice(1).split('\\"');
+
+ for (var i = 0; i < parts.length; ++i) {
+ var quotindex = parts[i].indexOf('"');
+
+ if (quotindex !== -1) {
+ parts[i] = parts[i].slice(0, quotindex);
+ parts.length = i + 1;
+ }
+
+ parts[i] = parts[i].replace(/\\(.)/g, "$1");
+ }
+
+ value = parts.join('"');
+ }
+
+ return value;
+ }
+
+ function rfc5987decode(extvalue) {
+ var encodingend = extvalue.indexOf("'");
+
+ if (encodingend === -1) {
+ return extvalue;
+ }
+
+ var encoding = extvalue.slice(0, encodingend);
+ var langvalue = extvalue.slice(encodingend + 1);
+ var value = langvalue.replace(/^[^']*'/, "");
+ return textdecode(encoding, value);
+ }
+
+ function rfc2047decode(value) {
+ if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
+ return value;
+ }
+
+ return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
+ if (encoding === "q" || encoding === "Q") {
+ text = text.replace(/_/g, " ");
+ text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {
+ return String.fromCharCode(parseInt(hex, 16));
+ });
+ return textdecode(charset, text);
+ }
+
+ try {
+ text = atob(text);
+ } catch (e) {}
+
+ return textdecode(charset, text);
+ });
+ }
+
+ return "";
+}
+
+/***/ }),
+/* 167 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFNetworkStream = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+var _network_utils = __w_pdfjs_require__(165);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+;
+var OK_RESPONSE = 200;
+var PARTIAL_CONTENT_RESPONSE = 206;
+
+function getArrayBuffer(xhr) {
+ var data = xhr.response;
+
+ if (typeof data !== "string") {
+ return data;
+ }
+
+ var array = (0, _util.stringToBytes)(data);
+ return array.buffer;
+}
+
+var NetworkManager = /*#__PURE__*/function () {
+ function NetworkManager(url) {
+ var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, NetworkManager);
+
+ this.url = url;
+ this.isHttp = /^https?:/i.test(url);
+ this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null);
+ this.withCredentials = args.withCredentials || false;
+
+ this.getXhr = args.getXhr || function NetworkManager_getXhr() {
+ return new XMLHttpRequest();
+ };
+
+ this.currXhrId = 0;
+ this.pendingRequests = Object.create(null);
+ }
+
+ _createClass(NetworkManager, [{
+ key: "requestRange",
+ value: function requestRange(begin, end, listeners) {
+ var args = {
+ begin: begin,
+ end: end
+ };
+
+ for (var prop in listeners) {
+ args[prop] = listeners[prop];
+ }
+
+ return this.request(args);
+ }
+ }, {
+ key: "requestFull",
+ value: function requestFull(listeners) {
+ return this.request(listeners);
+ }
+ }, {
+ key: "request",
+ value: function request(args) {
+ var xhr = this.getXhr();
+ var xhrId = this.currXhrId++;
+ var pendingRequest = this.pendingRequests[xhrId] = {
+ xhr: xhr
+ };
+ xhr.open("GET", this.url);
+ xhr.withCredentials = this.withCredentials;
+
+ for (var property in this.httpHeaders) {
+ var value = this.httpHeaders[property];
+
+ if (typeof value === "undefined") {
+ continue;
+ }
+
+ xhr.setRequestHeader(property, value);
+ }
+
+ if (this.isHttp && "begin" in args && "end" in args) {
+ xhr.setRequestHeader("Range", "bytes=".concat(args.begin, "-").concat(args.end - 1));
+ pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;
+ } else {
+ pendingRequest.expectedStatus = OK_RESPONSE;
+ }
+
+ xhr.responseType = "arraybuffer";
+
+ if (args.onError) {
+ xhr.onerror = function (evt) {
+ args.onError(xhr.status);
+ };
+ }
+
+ xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
+ xhr.onprogress = this.onProgress.bind(this, xhrId);
+ pendingRequest.onHeadersReceived = args.onHeadersReceived;
+ pendingRequest.onDone = args.onDone;
+ pendingRequest.onError = args.onError;
+ pendingRequest.onProgress = args.onProgress;
+ xhr.send(null);
+ return xhrId;
+ }
+ }, {
+ key: "onProgress",
+ value: function onProgress(xhrId, evt) {
+ var _pendingRequest$onPro;
+
+ var pendingRequest = this.pendingRequests[xhrId];
+
+ if (!pendingRequest) {
+ return;
+ }
+
+ (_pendingRequest$onPro = pendingRequest.onProgress) === null || _pendingRequest$onPro === void 0 ? void 0 : _pendingRequest$onPro.call(pendingRequest, evt);
+ }
+ }, {
+ key: "onStateChange",
+ value: function onStateChange(xhrId, evt) {
+ var pendingRequest = this.pendingRequests[xhrId];
+
+ if (!pendingRequest) {
+ return;
+ }
+
+ var xhr = pendingRequest.xhr;
+
+ if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
+ pendingRequest.onHeadersReceived();
+ delete pendingRequest.onHeadersReceived;
+ }
+
+ if (xhr.readyState !== 4) {
+ return;
+ }
+
+ if (!(xhrId in this.pendingRequests)) {
+ return;
+ }
+
+ delete this.pendingRequests[xhrId];
+
+ if (xhr.status === 0 && this.isHttp) {
+ var _pendingRequest$onErr;
+
+ (_pendingRequest$onErr = pendingRequest.onError) === null || _pendingRequest$onErr === void 0 ? void 0 : _pendingRequest$onErr.call(pendingRequest, xhr.status);
+ return;
+ }
+
+ var xhrStatus = xhr.status || OK_RESPONSE;
+ var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
+
+ if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {
+ var _pendingRequest$onErr2;
+
+ (_pendingRequest$onErr2 = pendingRequest.onError) === null || _pendingRequest$onErr2 === void 0 ? void 0 : _pendingRequest$onErr2.call(pendingRequest, xhr.status);
+ return;
+ }
+
+ var chunk = getArrayBuffer(xhr);
+
+ if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
+ var rangeHeader = xhr.getResponseHeader("Content-Range");
+ var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
+ pendingRequest.onDone({
+ begin: parseInt(matches[1], 10),
+ chunk: chunk
+ });
+ } else if (chunk) {
+ pendingRequest.onDone({
+ begin: 0,
+ chunk: chunk
+ });
+ } else {
+ var _pendingRequest$onErr3;
+
+ (_pendingRequest$onErr3 = pendingRequest.onError) === null || _pendingRequest$onErr3 === void 0 ? void 0 : _pendingRequest$onErr3.call(pendingRequest, xhr.status);
+ }
+ }
+ }, {
+ key: "getRequestXhr",
+ value: function getRequestXhr(xhrId) {
+ return this.pendingRequests[xhrId].xhr;
+ }
+ }, {
+ key: "isPendingRequest",
+ value: function isPendingRequest(xhrId) {
+ return xhrId in this.pendingRequests;
+ }
+ }, {
+ key: "abortRequest",
+ value: function abortRequest(xhrId) {
+ var xhr = this.pendingRequests[xhrId].xhr;
+ delete this.pendingRequests[xhrId];
+ xhr.abort();
+ }
+ }]);
+
+ return NetworkManager;
+}();
+
+var PDFNetworkStream = /*#__PURE__*/function () {
+ function PDFNetworkStream(source) {
+ _classCallCheck(this, PDFNetworkStream);
+
+ this._source = source;
+ this._manager = new NetworkManager(source.url, {
+ httpHeaders: source.httpHeaders,
+ withCredentials: source.withCredentials
+ });
+ this._rangeChunkSize = source.rangeChunkSize;
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+
+ _createClass(PDFNetworkStream, [{
+ key: "_onRangeRequestReaderClosed",
+ value: function _onRangeRequestReaderClosed(reader) {
+ var i = this._rangeRequestReaders.indexOf(reader);
+
+ if (i >= 0) {
+ this._rangeRequestReaders.splice(i, 1);
+ }
+ }
+ }, {
+ key: "getFullReader",
+ value: function getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once.");
+ this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
+ return this._fullRequestReader;
+ }
+ }, {
+ key: "getRangeReader",
+ value: function getRangeReader(begin, end) {
+ var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);
+ reader.onClosed = this._onRangeRequestReaderClosed.bind(this);
+
+ this._rangeRequestReaders.push(reader);
+
+ return reader;
+ }
+ }, {
+ key: "cancelAllRequests",
+ value: function cancelAllRequests(reason) {
+ var _this$_fullRequestRea;
+
+ (_this$_fullRequestRea = this._fullRequestReader) === null || _this$_fullRequestRea === void 0 ? void 0 : _this$_fullRequestRea.cancel(reason);
+
+ var _iterator = _createForOfIteratorHelper(this._rangeRequestReaders.slice(0)),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var reader = _step.value;
+ reader.cancel(reason);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+ }]);
+
+ return PDFNetworkStream;
+}();
+
+exports.PDFNetworkStream = PDFNetworkStream;
+
+var PDFNetworkStreamFullRequestReader = /*#__PURE__*/function () {
+ function PDFNetworkStreamFullRequestReader(manager, source) {
+ _classCallCheck(this, PDFNetworkStreamFullRequestReader);
+
+ this._manager = manager;
+ var args = {
+ onHeadersReceived: this._onHeadersReceived.bind(this),
+ onDone: this._onDone.bind(this),
+ onError: this._onError.bind(this),
+ onProgress: this._onProgress.bind(this)
+ };
+ this._url = source.url;
+ this._fullRequestId = manager.requestFull(args);
+ this._headersReceivedCapability = (0, _util.createPromiseCapability)();
+ this._disableRange = source.disableRange || false;
+ this._contentLength = source.length;
+ this._rangeChunkSize = source.rangeChunkSize;
+
+ if (!this._rangeChunkSize && !this._disableRange) {
+ this._disableRange = true;
+ }
+
+ this._isStreamingSupported = false;
+ this._isRangeSupported = false;
+ this._cachedChunks = [];
+ this._requests = [];
+ this._done = false;
+ this._storedError = undefined;
+ this._filename = null;
+ this.onProgress = null;
+ }
+
+ _createClass(PDFNetworkStreamFullRequestReader, [{
+ key: "_onHeadersReceived",
+ value: function _onHeadersReceived() {
+ var fullRequestXhrId = this._fullRequestId;
+
+ var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);
+
+ var getResponseHeader = function getResponseHeader(name) {
+ return fullRequestXhr.getResponseHeader(name);
+ };
+
+ var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({
+ getResponseHeader: getResponseHeader,
+ isHttp: this._manager.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ }),
+ allowRangeRequests = _validateRangeRequest.allowRangeRequests,
+ suggestedLength = _validateRangeRequest.suggestedLength;
+
+ if (allowRangeRequests) {
+ this._isRangeSupported = true;
+ }
+
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
+
+ if (this._isRangeSupported) {
+ this._manager.abortRequest(fullRequestXhrId);
+ }
+
+ this._headersReceivedCapability.resolve();
+ }
+ }, {
+ key: "_onDone",
+ value: function _onDone(data) {
+ if (data) {
+ if (this._requests.length > 0) {
+ var requestCapability = this._requests.shift();
+
+ requestCapability.resolve({
+ value: data.chunk,
+ done: false
+ });
+ } else {
+ this._cachedChunks.push(data.chunk);
+ }
+ }
+
+ this._done = true;
+
+ if (this._cachedChunks.length > 0) {
+ return;
+ }
+
+ var _iterator2 = _createForOfIteratorHelper(this._requests),
+ _step2;
+
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var _requestCapability = _step2.value;
+
+ _requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+
+ this._requests.length = 0;
+ }
+ }, {
+ key: "_onError",
+ value: function _onError(status) {
+ this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
+
+ this._headersReceivedCapability.reject(this._storedError);
+
+ var _iterator3 = _createForOfIteratorHelper(this._requests),
+ _step3;
+
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var requestCapability = _step3.value;
+ requestCapability.reject(this._storedError);
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+
+ this._requests.length = 0;
+ this._cachedChunks.length = 0;
+ }
+ }, {
+ key: "_onProgress",
+ value: function _onProgress(evt) {
+ var _this$onProgress;
+
+ (_this$onProgress = this.onProgress) === null || _this$onProgress === void 0 ? void 0 : _this$onProgress.call(this, {
+ loaded: evt.loaded,
+ total: evt.lengthComputable ? evt.total : this._contentLength
+ });
+ }
+ }, {
+ key: "filename",
+ get: function get() {
+ return this._filename;
+ }
+ }, {
+ key: "isRangeSupported",
+ get: function get() {
+ return this._isRangeSupported;
+ }
+ }, {
+ key: "isStreamingSupported",
+ get: function get() {
+ return this._isStreamingSupported;
+ }
+ }, {
+ key: "contentLength",
+ get: function get() {
+ return this._contentLength;
+ }
+ }, {
+ key: "headersReady",
+ get: function get() {
+ return this._headersReceivedCapability.promise;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
+ var chunk, requestCapability;
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ if (!this._storedError) {
+ _context.next = 2;
+ break;
+ }
+
+ throw this._storedError;
+
+ case 2:
+ if (!(this._cachedChunks.length > 0)) {
+ _context.next = 5;
+ break;
+ }
+
+ chunk = this._cachedChunks.shift();
+ return _context.abrupt("return", {
+ value: chunk,
+ done: false
+ });
+
+ case 5:
+ if (!this._done) {
+ _context.next = 7;
+ break;
+ }
+
+ return _context.abrupt("return", {
+ value: undefined,
+ done: true
+ });
+
+ case 7:
+ requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return _context.abrupt("return", requestCapability.promise);
+
+ case 10:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function read() {
+ return _read.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ this._done = true;
+
+ this._headersReceivedCapability.reject(reason);
+
+ var _iterator4 = _createForOfIteratorHelper(this._requests),
+ _step4;
+
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var requestCapability = _step4.value;
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
+ }
+
+ this._requests.length = 0;
+
+ if (this._manager.isPendingRequest(this._fullRequestId)) {
+ this._manager.abortRequest(this._fullRequestId);
+ }
+
+ this._fullRequestReader = null;
+ }
+ }]);
+
+ return PDFNetworkStreamFullRequestReader;
+}();
+
+var PDFNetworkStreamRangeRequestReader = /*#__PURE__*/function () {
+ function PDFNetworkStreamRangeRequestReader(manager, begin, end) {
+ _classCallCheck(this, PDFNetworkStreamRangeRequestReader);
+
+ this._manager = manager;
+ var args = {
+ onDone: this._onDone.bind(this),
+ onError: this._onError.bind(this),
+ onProgress: this._onProgress.bind(this)
+ };
+ this._url = manager.url;
+ this._requestId = manager.requestRange(begin, end, args);
+ this._requests = [];
+ this._queuedChunk = null;
+ this._done = false;
+ this._storedError = undefined;
+ this.onProgress = null;
+ this.onClosed = null;
+ }
+
+ _createClass(PDFNetworkStreamRangeRequestReader, [{
+ key: "_close",
+ value: function _close() {
+ var _this$onClosed;
+
+ (_this$onClosed = this.onClosed) === null || _this$onClosed === void 0 ? void 0 : _this$onClosed.call(this, this);
+ }
+ }, {
+ key: "_onDone",
+ value: function _onDone(data) {
+ var chunk = data.chunk;
+
+ if (this._requests.length > 0) {
+ var requestCapability = this._requests.shift();
+
+ requestCapability.resolve({
+ value: chunk,
+ done: false
+ });
+ } else {
+ this._queuedChunk = chunk;
+ }
+
+ this._done = true;
+
+ var _iterator5 = _createForOfIteratorHelper(this._requests),
+ _step5;
+
+ try {
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ var _requestCapability2 = _step5.value;
+
+ _requestCapability2.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+ } catch (err) {
+ _iterator5.e(err);
+ } finally {
+ _iterator5.f();
+ }
+
+ this._requests.length = 0;
+
+ this._close();
+ }
+ }, {
+ key: "_onError",
+ value: function _onError(status) {
+ this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
+
+ var _iterator6 = _createForOfIteratorHelper(this._requests),
+ _step6;
+
+ try {
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
+ var requestCapability = _step6.value;
+ requestCapability.reject(this._storedError);
+ }
+ } catch (err) {
+ _iterator6.e(err);
+ } finally {
+ _iterator6.f();
+ }
+
+ this._requests.length = 0;
+ this._queuedChunk = null;
+ }
+ }, {
+ key: "_onProgress",
+ value: function _onProgress(evt) {
+ if (!this.isStreamingSupported) {
+ var _this$onProgress2;
+
+ (_this$onProgress2 = this.onProgress) === null || _this$onProgress2 === void 0 ? void 0 : _this$onProgress2.call(this, {
+ loaded: evt.loaded
+ });
+ }
+ }
+ }, {
+ key: "isStreamingSupported",
+ get: function get() {
+ return false;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
+ var chunk, requestCapability;
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ if (!this._storedError) {
+ _context2.next = 2;
+ break;
+ }
+
+ throw this._storedError;
+
+ case 2:
+ if (!(this._queuedChunk !== null)) {
+ _context2.next = 6;
+ break;
+ }
+
+ chunk = this._queuedChunk;
+ this._queuedChunk = null;
+ return _context2.abrupt("return", {
+ value: chunk,
+ done: false
+ });
+
+ case 6:
+ if (!this._done) {
+ _context2.next = 8;
+ break;
+ }
+
+ return _context2.abrupt("return", {
+ value: undefined,
+ done: true
+ });
+
+ case 8:
+ requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return _context2.abrupt("return", requestCapability.promise);
+
+ case 11:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, this);
+ }));
+
+ function read() {
+ return _read2.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ this._done = true;
+
+ var _iterator7 = _createForOfIteratorHelper(this._requests),
+ _step7;
+
+ try {
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
+ var requestCapability = _step7.value;
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+ } catch (err) {
+ _iterator7.e(err);
+ } finally {
+ _iterator7.f();
+ }
+
+ this._requests.length = 0;
+
+ if (this._manager.isPendingRequest(this._requestId)) {
+ this._manager.abortRequest(this._requestId);
+ }
+
+ this._close();
+ }
+ }]);
+
+ return PDFNetworkStreamRangeRequestReader;
+}();
+
+/***/ }),
+/* 168 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFFetchStream = void 0;
+
+var _regenerator = _interopRequireDefault(__w_pdfjs_require__(144));
+
+var _util = __w_pdfjs_require__(1);
+
+var _network_utils = __w_pdfjs_require__(165);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+
+;
+
+function createFetchOptions(headers, withCredentials, abortController) {
+ return {
+ method: "GET",
+ headers: headers,
+ signal: abortController === null || abortController === void 0 ? void 0 : abortController.signal,
+ mode: "cors",
+ credentials: withCredentials ? "include" : "same-origin",
+ redirect: "follow"
+ };
+}
+
+function createHeaders(httpHeaders) {
+ var headers = new Headers();
+
+ for (var property in httpHeaders) {
+ var value = httpHeaders[property];
+
+ if (typeof value === "undefined") {
+ continue;
+ }
+
+ headers.append(property, value);
+ }
+
+ return headers;
+}
+
+var PDFFetchStream = /*#__PURE__*/function () {
+ function PDFFetchStream(source) {
+ _classCallCheck(this, PDFFetchStream);
+
+ this.source = source;
+ this.isHttp = /^https?:/i.test(source.url);
+ this.httpHeaders = this.isHttp && source.httpHeaders || {};
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+
+ _createClass(PDFFetchStream, [{
+ key: "_progressiveDataLength",
+ get: function get() {
+ var _this$_fullRequestRea, _this$_fullRequestRea2;
+
+ return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;
+ }
+ }, {
+ key: "getFullReader",
+ value: function getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once.");
+ this._fullRequestReader = new PDFFetchStreamReader(this);
+ return this._fullRequestReader;
+ }
+ }, {
+ key: "getRangeReader",
+ value: function getRangeReader(begin, end) {
+ if (end <= this._progressiveDataLength) {
+ return null;
+ }
+
+ var reader = new PDFFetchStreamRangeReader(this, begin, end);
+
+ this._rangeRequestReaders.push(reader);
+
+ return reader;
+ }
+ }, {
+ key: "cancelAllRequests",
+ value: function cancelAllRequests(reason) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ var _iterator = _createForOfIteratorHelper(this._rangeRequestReaders.slice(0)),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var reader = _step.value;
+ reader.cancel(reason);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+ }]);
+
+ return PDFFetchStream;
+}();
+
+exports.PDFFetchStream = PDFFetchStream;
+
+var PDFFetchStreamReader = /*#__PURE__*/function () {
+ function PDFFetchStreamReader(stream) {
+ var _this = this;
+
+ _classCallCheck(this, PDFFetchStreamReader);
+
+ this._stream = stream;
+ this._reader = null;
+ this._loaded = 0;
+ this._filename = null;
+ var source = stream.source;
+ this._withCredentials = source.withCredentials || false;
+ this._contentLength = source.length;
+ this._headersCapability = (0, _util.createPromiseCapability)();
+ this._disableRange = source.disableRange || false;
+ this._rangeChunkSize = source.rangeChunkSize;
+
+ if (!this._rangeChunkSize && !this._disableRange) {
+ this._disableRange = true;
+ }
+
+ if (typeof AbortController !== "undefined") {
+ this._abortController = new AbortController();
+ }
+
+ this._isStreamingSupported = !source.disableStream;
+ this._isRangeSupported = !source.disableRange;
+ this._headers = createHeaders(this._stream.httpHeaders);
+ var url = source.url;
+ fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) {
+ if (!(0, _network_utils.validateResponseStatus)(response.status)) {
+ throw (0, _network_utils.createResponseStatusError)(response.status, url);
+ }
+
+ _this._reader = response.body.getReader();
+
+ _this._headersCapability.resolve();
+
+ var getResponseHeader = function getResponseHeader(name) {
+ return response.headers.get(name);
+ };
+
+ var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({
+ getResponseHeader: getResponseHeader,
+ isHttp: _this._stream.isHttp,
+ rangeChunkSize: _this._rangeChunkSize,
+ disableRange: _this._disableRange
+ }),
+ allowRangeRequests = _validateRangeRequest.allowRangeRequests,
+ suggestedLength = _validateRangeRequest.suggestedLength;
+
+ _this._isRangeSupported = allowRangeRequests;
+ _this._contentLength = suggestedLength || _this._contentLength;
+ _this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
+
+ if (!_this._isStreamingSupported && _this._isRangeSupported) {
+ _this.cancel(new _util.AbortException("Streaming is disabled."));
+ }
+ })["catch"](this._headersCapability.reject);
+ this.onProgress = null;
+ }
+
+ _createClass(PDFFetchStreamReader, [{
+ key: "headersReady",
+ get: function get() {
+ return this._headersCapability.promise;
+ }
+ }, {
+ key: "filename",
+ get: function get() {
+ return this._filename;
+ }
+ }, {
+ key: "contentLength",
+ get: function get() {
+ return this._contentLength;
+ }
+ }, {
+ key: "isRangeSupported",
+ get: function get() {
+ return this._isRangeSupported;
+ }
+ }, {
+ key: "isStreamingSupported",
+ get: function get() {
+ return this._isStreamingSupported;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
+ var _yield$this$_reader$r, value, done, buffer;
+
+ return _regenerator["default"].wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.next = 2;
+ return this._headersCapability.promise;
+
+ case 2:
+ _context.next = 4;
+ return this._reader.read();
+
+ case 4:
+ _yield$this$_reader$r = _context.sent;
+ value = _yield$this$_reader$r.value;
+ done = _yield$this$_reader$r.done;
+
+ if (!done) {
+ _context.next = 9;
+ break;
+ }
+
+ return _context.abrupt("return", {
+ value: value,
+ done: done
+ });
+
+ case 9:
+ this._loaded += value.byteLength;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded,
+ total: this._contentLength
+ });
+ }
+
+ buffer = new Uint8Array(value).buffer;
+ return _context.abrupt("return", {
+ value: buffer,
+ done: false
+ });
+
+ case 13:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, this);
+ }));
+
+ function read() {
+ return _read.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ if (this._reader) {
+ this._reader.cancel(reason);
+ }
+
+ if (this._abortController) {
+ this._abortController.abort();
+ }
+ }
+ }]);
+
+ return PDFFetchStreamReader;
+}();
+
+var PDFFetchStreamRangeReader = /*#__PURE__*/function () {
+ function PDFFetchStreamRangeReader(stream, begin, end) {
+ var _this2 = this;
+
+ _classCallCheck(this, PDFFetchStreamRangeReader);
+
+ this._stream = stream;
+ this._reader = null;
+ this._loaded = 0;
+ var source = stream.source;
+ this._withCredentials = source.withCredentials || false;
+ this._readCapability = (0, _util.createPromiseCapability)();
+ this._isStreamingSupported = !source.disableStream;
+
+ if (typeof AbortController !== "undefined") {
+ this._abortController = new AbortController();
+ }
+
+ this._headers = createHeaders(this._stream.httpHeaders);
+
+ this._headers.append("Range", "bytes=".concat(begin, "-").concat(end - 1));
+
+ var url = source.url;
+ fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) {
+ if (!(0, _network_utils.validateResponseStatus)(response.status)) {
+ throw (0, _network_utils.createResponseStatusError)(response.status, url);
+ }
+
+ _this2._readCapability.resolve();
+
+ _this2._reader = response.body.getReader();
+ })["catch"](this._readCapability.reject);
+ this.onProgress = null;
+ }
+
+ _createClass(PDFFetchStreamRangeReader, [{
+ key: "isStreamingSupported",
+ get: function get() {
+ return this._isStreamingSupported;
+ }
+ }, {
+ key: "read",
+ value: function () {
+ var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
+ var _yield$this$_reader$r2, value, done, buffer;
+
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ _context2.next = 2;
+ return this._readCapability.promise;
+
+ case 2:
+ _context2.next = 4;
+ return this._reader.read();
+
+ case 4:
+ _yield$this$_reader$r2 = _context2.sent;
+ value = _yield$this$_reader$r2.value;
+ done = _yield$this$_reader$r2.done;
+
+ if (!done) {
+ _context2.next = 9;
+ break;
+ }
+
+ return _context2.abrupt("return", {
+ value: value,
+ done: done
+ });
+
+ case 9:
+ this._loaded += value.byteLength;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded
+ });
+ }
+
+ buffer = new Uint8Array(value).buffer;
+ return _context2.abrupt("return", {
+ value: buffer,
+ done: false
+ });
+
+ case 13:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, this);
+ }));
+
+ function read() {
+ return _read2.apply(this, arguments);
+ }
+
+ return read;
+ }()
+ }, {
+ key: "cancel",
+ value: function cancel(reason) {
+ if (this._reader) {
+ this._reader.cancel(reason);
+ }
+
+ if (this._abortController) {
+ this._abortController.abort();
+ }
+ }
+ }]);
+
+ return PDFFetchStreamRangeReader;
+}();
+
+/***/ })
+/******/ ]);
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __w_pdfjs_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ id: moduleId,
+/******/ loaded: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/node module decorator */
+/******/ (() => {
+/******/ __w_pdfjs_require__.nmd = (module) => {
+/******/ module.paths = [];
+/******/ if (!module.children) module.children = [];
+/******/ return module;
+/******/ };
+/******/ })();
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be in strict mode.
+(() => {
+"use strict";
+var exports = __webpack_exports__;
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+Object.defineProperty(exports, "AnnotationLayer", ({
+ enumerable: true,
+ get: function get() {
+ return _annotation_layer.AnnotationLayer;
+ }
+}));
+Object.defineProperty(exports, "AnnotationMode", ({
+ enumerable: true,
+ get: function get() {
+ return _util.AnnotationMode;
+ }
+}));
+Object.defineProperty(exports, "CMapCompressionType", ({
+ enumerable: true,
+ get: function get() {
+ return _util.CMapCompressionType;
+ }
+}));
+Object.defineProperty(exports, "GlobalWorkerOptions", ({
+ enumerable: true,
+ get: function get() {
+ return _worker_options.GlobalWorkerOptions;
+ }
+}));
+Object.defineProperty(exports, "InvalidPDFException", ({
+ enumerable: true,
+ get: function get() {
+ return _util.InvalidPDFException;
+ }
+}));
+Object.defineProperty(exports, "LoopbackPort", ({
+ enumerable: true,
+ get: function get() {
+ return _api.LoopbackPort;
+ }
+}));
+Object.defineProperty(exports, "MissingPDFException", ({
+ enumerable: true,
+ get: function get() {
+ return _util.MissingPDFException;
+ }
+}));
+Object.defineProperty(exports, "OPS", ({
+ enumerable: true,
+ get: function get() {
+ return _util.OPS;
+ }
+}));
+Object.defineProperty(exports, "PDFDataRangeTransport", ({
+ enumerable: true,
+ get: function get() {
+ return _api.PDFDataRangeTransport;
+ }
+}));
+Object.defineProperty(exports, "PDFDateString", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.PDFDateString;
+ }
+}));
+Object.defineProperty(exports, "PDFWorker", ({
+ enumerable: true,
+ get: function get() {
+ return _api.PDFWorker;
+ }
+}));
+Object.defineProperty(exports, "PasswordResponses", ({
+ enumerable: true,
+ get: function get() {
+ return _util.PasswordResponses;
+ }
+}));
+Object.defineProperty(exports, "PermissionFlag", ({
+ enumerable: true,
+ get: function get() {
+ return _util.PermissionFlag;
+ }
+}));
+Object.defineProperty(exports, "PixelsPerInch", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.PixelsPerInch;
+ }
+}));
+Object.defineProperty(exports, "RenderingCancelledException", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.RenderingCancelledException;
+ }
+}));
+Object.defineProperty(exports, "SVGGraphics", ({
+ enumerable: true,
+ get: function get() {
+ return _svg.SVGGraphics;
+ }
+}));
+Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({
+ enumerable: true,
+ get: function get() {
+ return _util.UNSUPPORTED_FEATURES;
+ }
+}));
+Object.defineProperty(exports, "UnexpectedResponseException", ({
+ enumerable: true,
+ get: function get() {
+ return _util.UnexpectedResponseException;
+ }
+}));
+Object.defineProperty(exports, "Util", ({
+ enumerable: true,
+ get: function get() {
+ return _util.Util;
+ }
+}));
+Object.defineProperty(exports, "VerbosityLevel", ({
+ enumerable: true,
+ get: function get() {
+ return _util.VerbosityLevel;
+ }
+}));
+Object.defineProperty(exports, "XfaLayer", ({
+ enumerable: true,
+ get: function get() {
+ return _xfa_layer.XfaLayer;
+ }
+}));
+Object.defineProperty(exports, "build", ({
+ enumerable: true,
+ get: function get() {
+ return _api.build;
+ }
+}));
+Object.defineProperty(exports, "createPromiseCapability", ({
+ enumerable: true,
+ get: function get() {
+ return _util.createPromiseCapability;
+ }
+}));
+Object.defineProperty(exports, "createValidAbsoluteUrl", ({
+ enumerable: true,
+ get: function get() {
+ return _util.createValidAbsoluteUrl;
+ }
+}));
+Object.defineProperty(exports, "getDocument", ({
+ enumerable: true,
+ get: function get() {
+ return _api.getDocument;
+ }
+}));
+Object.defineProperty(exports, "getFilenameFromUrl", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.getFilenameFromUrl;
+ }
+}));
+Object.defineProperty(exports, "getPdfFilenameFromUrl", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.getPdfFilenameFromUrl;
+ }
+}));
+Object.defineProperty(exports, "getXfaPageViewport", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.getXfaPageViewport;
+ }
+}));
+Object.defineProperty(exports, "isPdfFile", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.isPdfFile;
+ }
+}));
+Object.defineProperty(exports, "loadScript", ({
+ enumerable: true,
+ get: function get() {
+ return _display_utils.loadScript;
+ }
+}));
+Object.defineProperty(exports, "renderTextLayer", ({
+ enumerable: true,
+ get: function get() {
+ return _text_layer.renderTextLayer;
+ }
+}));
+Object.defineProperty(exports, "shadow", ({
+ enumerable: true,
+ get: function get() {
+ return _util.shadow;
+ }
+}));
+Object.defineProperty(exports, "version", ({
+ enumerable: true,
+ get: function get() {
+ return _api.version;
+ }
+}));
+
+var _util = __w_pdfjs_require__(1);
+
+var _api = __w_pdfjs_require__(143);
+
+var _display_utils = __w_pdfjs_require__(146);
+
+var _annotation_layer = __w_pdfjs_require__(159);
+
+var _worker_options = __w_pdfjs_require__(153);
+
+var _is_node = __w_pdfjs_require__(3);
+
+var _text_layer = __w_pdfjs_require__(162);
+
+var _svg = __w_pdfjs_require__(163);
+
+var _xfa_layer = __w_pdfjs_require__(161);
+
+var pdfjsVersion = '2.14.44';
+var pdfjsBuild = '90c5e9882';
+{
+ if (_is_node.isNodeJS) {
+ var _require = __w_pdfjs_require__(164),
+ PDFNodeStream = _require.PDFNodeStream;
+
+ (0, _api.setPDFNetworkStreamFactory)(function (params) {
+ return new PDFNodeStream(params);
+ });
+ } else {
+ var _require2 = __w_pdfjs_require__(167),
+ PDFNetworkStream = _require2.PDFNetworkStream;
+
+ var _require3 = __w_pdfjs_require__(168),
+ PDFFetchStream = _require3.PDFFetchStream;
+
+ (0, _api.setPDFNetworkStreamFactory)(function (params) {
+ if ((0, _display_utils.isValidFetchUrl)(params.url)) {
+ return new PDFFetchStream(params);
+ }
+
+ return new PDFNetworkStream(params);
+ });
+ }
+}
+})();
+
+/******/ return __webpack_exports__;
+/******/ })()
+;
+});
+//# sourceMappingURL=pdf.js.map
\ No newline at end of file
diff --git a/app/assets/javascripts/publications/pdf/pdf.js.map b/app/assets/javascripts/publications/pdf/pdf.js.map
new file mode 100644
index 0000000..58ffc3f
--- /dev/null
+++ b/app/assets/javascripts/publications/pdf/pdf.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"pdf.js","mappings":"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","sources":["webpack://pdfjs-dist/build/pdf/webpack/universalModuleDefinition","webpack://pdfjs-dist/build/pdf/src/shared/util.js","webpack://pdfjs-dist/build/pdf/src/shared/compatibility.js","webpack://pdfjs-dist/build/pdf/src/shared/is_node.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/promise/index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.aggregate-error.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/export.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/global.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/descriptors.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/fails.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/function-call.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/function-bind-native.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-property-is-enumerable.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-property-descriptor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-indexed-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/indexed-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/function-uncurry-this.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/classof-raw.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/require-object-coercible.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-property-key.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-primitive.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-callable.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-symbol.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/get-built-in.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-is-prototype-of.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/use-symbol-as-uid.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/native-symbol.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-v8-version.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-user-agent.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/get-method.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/a-callable.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/try-to-string.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/ordinary-to-primitive.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/well-known-symbol.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/shared.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-pure.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/shared-store.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/set-global.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/has-own-property.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/uid.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/ie8-dom-define.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/document-create-element.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-non-enumerable-property.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-define-property.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/v8-prototype-define-bug.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/an-object.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/redefine.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/inspect-source.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/internal-state.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/native-weak-map.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/shared-key.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/hidden-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/function-name.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/copy-constructor-properties.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/own-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-names.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-keys-internal.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-includes.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-absolute-index.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-integer-or-infinity.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/length-of-array-like.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-length.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/enum-bug-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-forced.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-prototype-of.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/correct-prototype-getter.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-set-prototype-of.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/a-possible-prototype.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-create.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-define-properties.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-keys.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/html.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/clear-error-stack.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/install-error-cause.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterate.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/function-bind-context.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-array-iterator-method.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterators.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/get-iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/get-iterator-method.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/classof.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-string-tag-support.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterator-close.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/normalize-string-argument.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-string.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/error-stack-installable.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.array.iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/add-to-unscopables.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/define-iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-iterator-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterators-core.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/set-to-string-tag.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.to-string.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-to-string.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.promise.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/native-promise-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/redefine-all.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/set-species.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/an-instance.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/species-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/a-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/is-constructor.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/task.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/function-apply.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-slice.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/validate-arguments-length.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-is-ios.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-is-node.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/microtask.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-is-ios-pebble.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-is-webos-webkit.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/promise-resolve.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/new-promise-capability.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/host-report-errors.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/perform.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/queue.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/engine-is-browser.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.promise.all-settled.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.promise.any.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.promise.finally.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.iterator.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-multibyte.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/path.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/web/structured-clone.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.map.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/collection.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/internal-metadata.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-slice-simple.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/create-property.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-is-extensible.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/array-buffer-non-extensible.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/freezing.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/inherit-if-required.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/collection-strong.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.set.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/web.structured-clone.js","webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/regexp-flags.js","webpack://pdfjs-dist/build/pdf/src/display/api.js","webpack://pdfjs-dist/build/pdf/node_modules/@babel/runtime/regenerator/index.js","webpack://pdfjs-dist/build/pdf/node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","webpack://pdfjs-dist/build/pdf/src/display/display_utils.js","webpack://pdfjs-dist/build/pdf/src/display/base_factory.js","webpack://pdfjs-dist/build/pdf/src/display/font_loader.js","webpack://pdfjs-dist/build/pdf/src/display/node_utils.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_storage.js","webpack://pdfjs-dist/build/pdf/src/display/canvas.js","webpack://pdfjs-dist/build/pdf/src/display/pattern_helper.js","webpack://pdfjs-dist/build/pdf/src/display/worker_options.js","webpack://pdfjs-dist/build/pdf/src/shared/message_handler.js","webpack://pdfjs-dist/build/pdf/src/display/metadata.js","webpack://pdfjs-dist/build/pdf/src/display/optional_content_config.js","webpack://pdfjs-dist/build/pdf/src/display/transport_stream.js","webpack://pdfjs-dist/build/pdf/src/display/xfa_text.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_layer.js","webpack://pdfjs-dist/build/pdf/src/shared/scripting_utils.js","webpack://pdfjs-dist/build/pdf/src/display/xfa_layer.js","webpack://pdfjs-dist/build/pdf/src/display/text_layer.js","webpack://pdfjs-dist/build/pdf/src/display/svg.js","webpack://pdfjs-dist/build/pdf/src/display/node_stream.js","webpack://pdfjs-dist/build/pdf/src/display/network_utils.js","webpack://pdfjs-dist/build/pdf/src/display/content_disposition.js","webpack://pdfjs-dist/build/pdf/src/display/network.js","webpack://pdfjs-dist/build/pdf/src/display/fetch_stream.js","webpack://pdfjs-dist/build/pdf/webpack/bootstrap","webpack://pdfjs-dist/build/pdf/webpack/runtime/node module decorator","webpack://pdfjs-dist/build/pdf/src/pdf.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/build/pdf\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/build/pdf\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/build/pdf\"] = factory();\n})(this, function() {\nreturn ","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport \"./compatibility.js\";\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n * - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n * `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n * - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n * annotations are rendered onto the canvas (i.e. by being included in the\n * operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n * and their `annotationMode`-option.\n * - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n * `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n ANY: 0x01,\n DISPLAY: 0x02,\n PRINT: 0x04,\n ANNOTATIONS_FORMS: 0x10,\n ANNOTATIONS_STORAGE: 0x20,\n ANNOTATIONS_DISABLE: 0x40,\n OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_FORMS: 2,\n ENABLE_STORAGE: 3,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26,\n};\n\nconst AnnotationStateModelType = {\n MARKED: \"Marked\",\n REVIEW: \"Review\",\n};\n\nconst AnnotationMarkedState = {\n MARKED: \"Marked\",\n UNMARKED: \"Unmarked\",\n};\n\nconst AnnotationReviewState = {\n ACCEPTED: \"Accepted\",\n REJECTED: \"Rejected\",\n CANCELLED: \"Cancelled\",\n COMPLETED: \"Completed\",\n NONE: \"None\",\n};\n\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n E: \"Mouse Enter\",\n X: \"Mouse Exit\",\n D: \"Mouse Down\",\n U: \"Mouse Up\",\n Fo: \"Focus\",\n Bl: \"Blur\",\n PO: \"PageOpen\",\n PC: \"PageClose\",\n PV: \"PageVisible\",\n PI: \"PageInvisible\",\n K: \"Keystroke\",\n F: \"Format\",\n V: \"Validate\",\n C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n WC: \"WillClose\",\n WS: \"WillSave\",\n DS: \"DidSave\",\n WP: \"WillPrint\",\n DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n O: \"PageOpen\",\n C: \"PageClose\",\n};\n\nconst StreamType = {\n UNKNOWN: \"UNKNOWN\",\n FLATE: \"FLATE\",\n LZW: \"LZW\",\n DCT: \"DCT\",\n JPX: \"JPX\",\n JBIG: \"JBIG\",\n A85: \"A85\",\n AHX: \"AHX\",\n CCF: \"CCF\",\n RLX: \"RLX\", // PDF short name is 'RL', but telemetry requires three chars.\n};\n\nconst FontType = {\n UNKNOWN: \"UNKNOWN\",\n TYPE1: \"TYPE1\",\n TYPE1STANDARD: \"TYPE1STANDARD\",\n TYPE1C: \"TYPE1C\",\n CIDFONTTYPE0: \"CIDFONTTYPE0\",\n CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\n TRUETYPE: \"TRUETYPE\",\n CIDFONTTYPE2: \"CIDFONTTYPE2\",\n TYPE3: \"TYPE3\",\n OPENTYPE: \"OPENTYPE\",\n TYPE0: \"TYPE0\",\n MMTYPE1: \"MMTYPE1\",\n};\n\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5,\n};\n\nconst CMapCompressionType = {\n NONE: 0,\n BINARY: 1,\n STREAM: 2,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotations: 78,\n endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n /** @deprecated unused */\n paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91,\n};\n\nconst UNSUPPORTED_FEATURES = {\n /** @deprecated unused */\n unknown: \"unknown\",\n forms: \"forms\",\n javaScript: \"javaScript\",\n signatures: \"signatures\",\n smask: \"smask\",\n shadingPattern: \"shadingPattern\",\n /** @deprecated unused */\n font: \"font\",\n errorTilingPattern: \"errorTilingPattern\",\n errorExtGState: \"errorExtGState\",\n errorXObject: \"errorXObject\",\n errorFontLoadType3: \"errorFontLoadType3\",\n errorFontState: \"errorFontState\",\n errorFontMissing: \"errorFontMissing\",\n errorFontTranslate: \"errorFontTranslate\",\n errorColorSpace: \"errorColorSpace\",\n errorOperatorList: \"errorOperatorList\",\n errorFontToUnicode: \"errorFontToUnicode\",\n errorFontLoadNative: \"errorFontLoadNative\",\n errorFontBuildPath: \"errorFontBuildPath\",\n errorFontGetPath: \"errorFontGetPath\",\n errorMarkedContent: \"errorMarkedContent\",\n errorContentSubStream: \"errorContentSubStream\",\n};\n\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n console.log(`Info: ${msg}`);\n }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n console.log(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\n// Checks if URLs have the same origin. For non-HTTP based URLs, returns false.\nfunction isSameOrigin(baseUrl, otherUrl) {\n let base;\n try {\n base = new URL(baseUrl);\n if (!base.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n } catch (e) {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n if (!url) {\n return false;\n }\n switch (url.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n if (!url) {\n return null;\n }\n try {\n if (options && typeof url === \"string\") {\n // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n const dots = url.match(/\\./g);\n // Avoid accidentally matching a *relative* URL pointing to a file named\n // e.g. \"www.pdf\" or similar.\n if (dots && dots.length >= 2) {\n url = `http://${url}`;\n }\n }\n\n // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n if (options.tryConvertEncoding) {\n try {\n url = stringToUTF8String(url);\n } catch (ex) {}\n }\n }\n\n const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n if (_isValidProtocol(absoluteUrl)) {\n return absoluteUrl;\n }\n } catch (ex) {\n /* `new URL()` will throw on incorrect data. */\n }\n return null;\n}\n\nfunction shadow(obj, prop, value) {\n if (\n typeof PDFJSDev === \"undefined\" ||\n PDFJSDev.test(\"!PRODUCTION || TESTING\")\n ) {\n assert(\n prop in obj,\n `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n );\n }\n Object.defineProperty(obj, prop, {\n value,\n enumerable: true,\n configurable: true,\n writable: false,\n });\n return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n // eslint-disable-next-line no-shadow\n function BaseException(message, name) {\n if (this.constructor === BaseException) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n this.message = message;\n this.name = name;\n }\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n\n return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg, \"PasswordException\");\n this.code = code;\n }\n}\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg, \"UnknownErrorException\");\n this.details = details;\n }\n}\n\nclass InvalidPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"InvalidPDFException\");\n }\n}\n\nclass MissingPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"MissingPDFException\");\n }\n}\n\nclass UnexpectedResponseException extends BaseException {\n constructor(msg, status) {\n super(msg, \"UnexpectedResponseException\");\n this.status = status;\n }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n constructor(msg) {\n super(msg, \"FormatError\");\n }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n constructor(msg) {\n super(msg, \"AbortException\");\n }\n}\n\nfunction bytesToString(bytes) {\n if (\n typeof bytes !== \"object\" ||\n bytes === null ||\n bytes.length === undefined\n ) {\n unreachable(\"Invalid argument for bytesToString\");\n }\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n const strBuf = [];\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n if (typeof str !== \"string\") {\n unreachable(\"Invalid argument for stringToBytes\");\n }\n const length = str.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n return bytes;\n}\n\n/**\n * Gets length of the array (Array, Uint8Array, or string) in bytes.\n * @param {Array|Uint8Array|string} arr\n * @returns {number}\n */\n// eslint-disable-next-line consistent-return\nfunction arrayByteLength(arr) {\n if (arr.length !== undefined) {\n return arr.length;\n }\n if (arr.byteLength !== undefined) {\n return arr.byteLength;\n }\n unreachable(\"Invalid argument for arrayByteLength\");\n}\n\n/**\n * Combines array items (arrays) into single Uint8Array object.\n * @param {Array|Uint8Array|string>} arr - the array of the arrays\n * (Array, Uint8Array, or string).\n * @returns {Uint8Array}\n */\nfunction arraysToBytes(arr) {\n const length = arr.length;\n // Shortcut: if first and only item is Uint8Array, return it.\n if (length === 1 && arr[0] instanceof Uint8Array) {\n return arr[0];\n }\n let resultLength = 0;\n for (let i = 0; i < length; i++) {\n resultLength += arrayByteLength(arr[i]);\n }\n let pos = 0;\n const data = new Uint8Array(resultLength);\n for (let i = 0; i < length; i++) {\n let item = arr[i];\n if (!(item instanceof Uint8Array)) {\n if (typeof item === \"string\") {\n item = stringToBytes(item);\n } else {\n item = new Uint8Array(item);\n }\n }\n const itemLength = item.byteLength;\n data.set(item, pos);\n pos += itemLength;\n }\n return data;\n}\n\nfunction string32(value) {\n if (\n typeof PDFJSDev === \"undefined\" ||\n PDFJSDev.test(\"!PRODUCTION || TESTING\")\n ) {\n assert(\n typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n `string32: Unexpected input \"${value}\".`\n );\n }\n return String.fromCharCode(\n (value >> 24) & 0xff,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n );\n}\n\nfunction objectSize(obj) {\n return Object.keys(obj).length;\n}\n\n// Ensure that the returned Object has a `null` prototype; hence why\n// `Object.fromEntries(...)` is not used.\nfunction objectFromMap(map) {\n const obj = Object.create(null);\n for (const [key, value] of map) {\n obj[key] = value;\n }\n return obj;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\nconst IsLittleEndianCached = {\n get value() {\n return shadow(this, \"value\", isLittleEndian());\n },\n};\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n try {\n new Function(\"\"); // eslint-disable-line no-new, no-new-func\n return true;\n } catch (e) {\n return false;\n }\n}\nconst IsEvalSupportedCached = {\n get value() {\n return shadow(this, \"value\", isEvalSupported());\n },\n};\n\nconst hexNumbers = [...Array(256).keys()].map(n =>\n n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n static makeHexColor(r, g, b) {\n return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n }\n\n // Concatenates two transformation matrices together and returns the result.\n static transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n ];\n }\n\n // For 2d affine transforms\n static applyTransform(p, m) {\n const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n }\n\n static applyInverseTransform(p, m) {\n const d = m[0] * m[3] - m[1] * m[2];\n const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n }\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n static getAxialAlignedBoundingBox(r, m) {\n const p1 = Util.applyTransform(r, m);\n const p2 = Util.applyTransform(r.slice(2, 4), m);\n const p3 = Util.applyTransform([r[0], r[3]], m);\n const p4 = Util.applyTransform([r[2], r[1]], m);\n return [\n Math.min(p1[0], p2[0], p3[0], p4[0]),\n Math.min(p1[1], p2[1], p3[1], p4[1]),\n Math.max(p1[0], p2[0], p3[0], p4[0]),\n Math.max(p1[1], p2[1], p3[1], p4[1]),\n ];\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n return [\n m[3] / d,\n -m[1] / d,\n -m[2] / d,\n m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d,\n (m[4] * m[1] - m[5] * m[0]) / d,\n ];\n }\n\n // Apply a generic 3d matrix M on a 3-vector v:\n // | a b c | | X |\n // | d e f | x | Y |\n // | g h i | | Z |\n // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\n // with v as [X,Y,Z]\n static apply3dTransform(m, v) {\n return [\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2],\n ];\n }\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n static singularValueDecompose2dScale(m) {\n const transpose = [m[0], m[2], m[1], m[3]];\n\n // Multiply matrix m with its transpose.\n const a = m[0] * transpose[0] + m[1] * transpose[2];\n const b = m[0] * transpose[1] + m[1] * transpose[3];\n const c = m[2] * transpose[0] + m[3] * transpose[2];\n const d = m[2] * transpose[1] + m[3] * transpose[3];\n\n // Solve the second degree polynomial to get roots.\n const first = (a + d) / 2;\n const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;\n const sx = first + second || 1;\n const sy = first - second || 1;\n\n // Scale values are the square roots of the eigenvalues.\n return [Math.sqrt(sx), Math.sqrt(sy)];\n }\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n static normalizeRect(rect) {\n const r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n }\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'false'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n static intersect(rect1, rect2) {\n function compare(a, b) {\n return a - b;\n }\n\n // Order points along the axes\n const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\n const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\n const result = [];\n\n rect1 = Util.normalizeRect(rect1);\n rect2 = Util.normalizeRect(rect2);\n\n // X: first and second points belong to different rectangles?\n if (\n (orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\n (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])\n ) {\n // Intersection must be between second and third points\n result[0] = orderedX[1];\n result[2] = orderedX[2];\n } else {\n return null;\n }\n\n // Y: first and second points belong to different rectangles?\n if (\n (orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\n (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])\n ) {\n // Intersection must be between second and third points\n result[1] = orderedY[1];\n result[3] = orderedY[2];\n } else {\n return null;\n }\n\n return result;\n }\n\n // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {\n const tvalues = [],\n bounds = [[], []];\n let a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n for (let i = 0; i < 2; ++i) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n } else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length,\n mt;\n const jlen = j;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] =\n mt * mt * mt * x0 +\n 3 * mt * mt * t * x1 +\n 3 * mt * t * t * x2 +\n t * t * t * x3;\n bounds[1][j] =\n mt * mt * mt * y0 +\n 3 * mt * mt * t * y1 +\n 3 * mt * t * t * y2 +\n t * t * t * y3;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n return [\n Math.min(...bounds[0]),\n Math.min(...bounds[1]),\n Math.max(...bounds[0]),\n Math.max(...bounds[1]),\n ];\n }\n}\n\nconst PDFStringTranslateTable = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str) {\n if (str[0] >= \"\\xEF\") {\n let encoding;\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n encoding = \"utf-16be\";\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n encoding = \"utf-16le\";\n } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n encoding = \"utf-8\";\n }\n\n if (encoding) {\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(str);\n return decoder.decode(buffer);\n } catch (ex) {\n warn(`stringToPDFString: \"${ex}\".`);\n }\n }\n }\n // ISO Latin 1\n const strBuf = [];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const code = PDFStringTranslateTable[str.charCodeAt(i)];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n return strBuf.join(\"\");\n}\n\nfunction escapeString(str) {\n // replace \"(\", \")\", \"\\n\", \"\\r\" and \"\\\"\n // by \"\\(\", \"\\)\", \"\\\\n\", \"\\\\r\" and \"\\\\\"\n // in order to write it in a PDF file.\n return str.replace(/([()\\\\\\n\\r])/g, match => {\n if (match === \"\\n\") {\n return \"\\\\n\";\n } else if (match === \"\\r\") {\n return \"\\\\r\";\n }\n return `\\\\${match}`;\n });\n}\n\nfunction isAscii(str) {\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\nfunction stringToUTF16BEString(str) {\n const buf = [\"\\xFE\\xFF\"];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const char = str.charCodeAt(i);\n buf.push(\n String.fromCharCode((char >> 8) & 0xff),\n String.fromCharCode(char & 0xff)\n );\n }\n return buf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayBuffer(v) {\n return typeof v === \"object\" && v !== null && v.byteLength !== undefined;\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0, ii = arr1.length; i < ii; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction getModificationDate(date = new Date()) {\n const buffer = [\n date.getUTCFullYear().toString(),\n (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n date.getUTCDate().toString().padStart(2, \"0\"),\n date.getUTCHours().toString().padStart(2, \"0\"),\n date.getUTCMinutes().toString().padStart(2, \"0\"),\n date.getUTCSeconds().toString().padStart(2, \"0\"),\n ];\n\n return buffer.join(\"\");\n}\n\n/**\n * Promise Capability object.\n *\n * @typedef {Object} PromiseCapability\n * @property {Promise} promise - A Promise object.\n * @property {boolean} settled - If the Promise has been fulfilled/rejected.\n * @property {function} resolve - Fulfills the Promise.\n * @property {function} reject - Rejects the Promise.\n */\n\n/**\n * Creates a promise capability object.\n * @alias createPromiseCapability\n *\n * @returns {PromiseCapability}\n */\nfunction createPromiseCapability() {\n const capability = Object.create(null);\n let isSettled = false;\n\n Object.defineProperty(capability, \"settled\", {\n get() {\n return isSettled;\n },\n });\n capability.promise = new Promise(function (resolve, reject) {\n capability.resolve = function (data) {\n isSettled = true;\n resolve(data);\n };\n capability.reject = function (reason) {\n isSettled = true;\n reject(reason);\n };\n });\n return capability;\n}\n\nexport {\n AbortException,\n AnnotationActionEventType,\n AnnotationBorderStyleType,\n AnnotationFieldFlag,\n AnnotationFlag,\n AnnotationMarkedState,\n AnnotationMode,\n AnnotationReplyType,\n AnnotationReviewState,\n AnnotationStateModelType,\n AnnotationType,\n arrayByteLength,\n arraysToBytes,\n assert,\n BaseException,\n bytesToString,\n CMapCompressionType,\n createPromiseCapability,\n createValidAbsoluteUrl,\n DocumentActionEventType,\n escapeString,\n FONT_IDENTITY_MATRIX,\n FontType,\n FormatError,\n getModificationDate,\n getVerbosityLevel,\n IDENTITY_MATRIX,\n ImageKind,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isArrayEqual,\n isAscii,\n IsEvalSupportedCached,\n IsLittleEndianCached,\n isSameOrigin,\n MissingPDFException,\n objectFromMap,\n objectSize,\n OPS,\n PageActionEventType,\n PasswordException,\n PasswordResponses,\n PermissionFlag,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n StreamType,\n string32,\n stringToBytes,\n stringToPDFString,\n stringToUTF16BEString,\n stringToUTF8String,\n TextRenderingMode,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n UNSUPPORTED_FEATURES,\n utf8StringToString,\n Util,\n VerbosityLevel,\n warn,\n};\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals __non_webpack_require__ */\n\nimport { isNodeJS } from \"./is_node.js\";\n\n// Skip compatibility checks for modern builds and if we already ran the module.\nif (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"SKIP_BABEL\")) &&\n !globalThis._pdfjsCompatibilityChecked\n) {\n globalThis._pdfjsCompatibilityChecked = true;\n\n // Support: Node.js\n (function checkNodeBtoa() {\n if (globalThis.btoa || !isNodeJS) {\n return;\n }\n globalThis.btoa = function (chars) {\n // eslint-disable-next-line no-undef\n return Buffer.from(chars, \"binary\").toString(\"base64\");\n };\n })();\n\n // Support: Node.js\n (function checkNodeAtob() {\n if (globalThis.atob || !isNodeJS) {\n return;\n }\n globalThis.atob = function (input) {\n // eslint-disable-next-line no-undef\n return Buffer.from(input, \"base64\").toString(\"binary\");\n };\n })();\n\n // Support: Node.js\n (function checkDOMMatrix() {\n if (globalThis.DOMMatrix || !isNodeJS) {\n return;\n }\n globalThis.DOMMatrix = __non_webpack_require__(\n \"dommatrix/dist/dommatrix.js\"\n );\n })();\n\n // Provides support for *recent* additions to the Promise specification,\n // however basic Promise support is assumed to be available natively.\n // Support: Firefox<71, Chrome<76, Safari<13, Node.js<12.9.0\n (function checkPromise() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n // The current image decoders are synchronous, hence `Promise` shouldn't\n // need to be polyfilled for the IMAGE_DECODERS build target.\n return;\n }\n if (globalThis.Promise.allSettled) {\n return;\n }\n globalThis.Promise = require(\"core-js/es/promise/index.js\");\n })();\n\n // Support: Node.js\n (function checkReadableStream() {\n if (globalThis.ReadableStream || !isNodeJS) {\n return;\n }\n globalThis.ReadableStream = __non_webpack_require__(\n \"web-streams-polyfill/dist/ponyfill.js\"\n ).ReadableStream;\n })();\n\n // Support: Firefox<94, Chrome<98, Safari<15.4, Node.js<17.0.0\n (function checkStructuredClone() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n // The current image decoders are synchronous, hence `structuredClone`\n // shouldn't need to be polyfilled for the IMAGE_DECODERS build target.\n return;\n }\n if (globalThis.structuredClone) {\n return;\n }\n require(\"core-js/web/structured-clone.js\");\n })();\n}\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n typeof process === \"object\" &&\n process + \"\" === \"[object process]\" &&\n !process.versions.nw &&\n !(process.versions.electron && process.type && process.type !== \"browser\");\n\nexport { isNodeJS };\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar clearErrorStack = require('../internals/clear-error-stack');\nvar installErrorCause = require('../internals/install-error-cause');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var options = arguments.length > 2 ? arguments[2] : undefined;\n var isInstance = isPrototypeOf(AggregateErrorPrototype, this);\n var that;\n if (setPrototypeOf) {\n that = setPrototypeOf(new Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);\n } else {\n that = isInstance ? this : create(AggregateErrorPrototype);\n createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');\n }\n if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));\n if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n installErrorCause(that, options);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error, { name: true });\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n AggregateError: $AggregateError\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.21.1',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","module.exports = false;\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string') {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } return stack;\n};\n","var isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","module.exports = {};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/define-iterator');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromisePrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n microtask(function () {\n var reactions = state.reactions;\n var reaction;\n while (reaction = reactions.get()) {\n callReaction(reaction, state);\n }\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromisePrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: new Queue(),\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n // eslint-disable-next-line unicorn/no-thenable -- safe\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n state.parent = true;\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n if (state.state == PENDING) state.reactions.add(reaction);\n else microtask(function () {\n callReaction(reaction, state);\n });\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn = isCallable(handler) ? handler : Function(handler);\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n return passed;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var Queue = function () {\n this.head = null;\n this.tail = null;\n};\n\nQueue.prototype = {\n add: function (item) {\n var entry = { item: item, next: null };\n if (this.head) this.tail.next = entry;\n else this.head = entry;\n this.tail = entry;\n },\n get: function () {\n var entry = this.head;\n if (entry) {\n this.head = entry.next;\n if (this.tail === entry) this.tail = null;\n return entry.item;\n }\n }\n};\n\nmodule.exports = Queue;\n","module.exports = typeof window == 'object';\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n // eslint-disable-next-line unicorn/no-thenable -- required for testing\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromise.prototype['finally'] !== method) {\n redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n }\n}\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","require('../modules/es.array.iterator');\nrequire('../modules/es.object.to-string');\nrequire('../modules/es.map');\nrequire('../modules/es.set');\nrequire('../modules/web.structured-clone');\nvar path = require('../internals/path');\n\nmodule.exports = path.structuredClone;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var IS_PURE = require('../internals/is-pure');\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltin = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar uid = require('../internals/uid');\nvar isCallable = require('../internals/is-callable');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar iterate = require('../internals/iterate');\nvar anObject = require('../internals/an-object');\nvar classof = require('../internals/classof');\nvar hasOwn = require('../internals/has-own-property');\nvar createProperty = require('../internals/create-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar regExpFlags = require('../internals/regexp-flags');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar Object = global.Object;\nvar Date = global.Date;\nvar Error = global.Error;\nvar EvalError = global.EvalError;\nvar RangeError = global.RangeError;\nvar ReferenceError = global.ReferenceError;\nvar SyntaxError = global.SyntaxError;\nvar TypeError = global.TypeError;\nvar URIError = global.URIError;\nvar PerformanceMark = global.PerformanceMark;\nvar WebAssembly = global.WebAssembly;\nvar CompileError = WebAssembly && WebAssembly.CompileError || Error;\nvar LinkError = WebAssembly && WebAssembly.LinkError || Error;\nvar RuntimeError = WebAssembly && WebAssembly.RuntimeError || Error;\nvar DOMException = getBuiltin('DOMException');\nvar Set = getBuiltin('Set');\nvar Map = getBuiltin('Map');\nvar MapPrototype = Map.prototype;\nvar mapHas = uncurryThis(MapPrototype.has);\nvar mapGet = uncurryThis(MapPrototype.get);\nvar mapSet = uncurryThis(MapPrototype.set);\nvar setAdd = uncurryThis(Set.prototype.add);\nvar objectKeys = getBuiltin('Object', 'keys');\nvar push = uncurryThis([].push);\nvar booleanValueOf = uncurryThis(true.valueOf);\nvar numberValueOf = uncurryThis(1.0.valueOf);\nvar stringValueOf = uncurryThis(''.valueOf);\nvar getFlags = uncurryThis(regExpFlags);\nvar getTime = uncurryThis(Date.prototype.getTime);\nvar PERFORMANCE_MARK = uid('structuredClone');\nvar DATA_CLONE_ERROR = 'DataCloneError';\nvar TRANSFERRING = 'Transferring';\n\nvar checkBasicSemantic = function (structuredCloneImplementation) {\n return !fails(function () {\n var set1 = new global.Set([7]);\n var set2 = structuredCloneImplementation(set1);\n var number = structuredCloneImplementation(Object(7));\n return set2 == set1 || !set2.has(7) || typeof number != 'object' || number != 7;\n }) && structuredCloneImplementation;\n};\n\n// https://github.com/whatwg/html/pull/5749\nvar checkNewErrorsSemantic = function (structuredCloneImplementation) {\n return !fails(function () {\n var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 }));\n return test.name != 'AggregateError' || test.errors[0] != 1 || test.message != PERFORMANCE_MARK || test.cause != 3;\n }) && structuredCloneImplementation;\n};\n\n// FF94+, Safari TP134+, Chrome Canary 98+, NodeJS 17.0+, Deno 1.13+\n// current FF and Safari implementations can't clone errors\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1556604\n// no one of current implementations supports new (html/5749) error cloning semantic\nvar nativeStructuredClone = global.structuredClone;\n\nvar FORCED_REPLACEMENT = IS_PURE || !checkNewErrorsSemantic(nativeStructuredClone);\n\n// Chrome 82+, Safari 14.1+, Deno 1.11+\n// Chrome 78-81 implementation swaps `.name` and `.message` of cloned `DOMException`\n// Safari 14.1 implementation doesn't clone some `RegExp` flags, so requires a workaround\n// current Safari implementation can't clone errors\n// Deno 1.2-1.10 implementations too naive\n// NodeJS 16.0+ does not have `PerformanceMark` constructor, structured cloning implementation\n// from `performance.mark` is too naive and can't clone, for example, `RegExp` or some boxed primitives\n// https://github.com/nodejs/node/issues/40840\n// no one of current implementations supports new (html/5749) error cloning semantic\nvar structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) {\n return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail;\n});\n\nvar nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark;\n\nvar throwUncloneable = function (type) {\n throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR);\n};\n\nvar throwUnpolyfillable = function (type, kind) {\n throw new DOMException((kind || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR);\n};\n\nvar structuredCloneInternal = function (value, map) {\n if (isSymbol(value)) throwUncloneable('Symbol');\n if (!isObject(value)) return value;\n // effectively preserves circular references\n if (map) {\n if (mapHas(map, value)) return mapGet(map, value);\n } else map = new Map();\n\n var type = classof(value);\n var deep = false;\n var C, name, cloned, dataTransfer, i, length, keys, key, source, target;\n\n switch (type) {\n case 'Array':\n cloned = [];\n deep = true;\n break;\n case 'Object':\n cloned = {};\n deep = true;\n break;\n case 'Map':\n cloned = new Map();\n deep = true;\n break;\n case 'Set':\n cloned = new Set();\n deep = true;\n break;\n case 'RegExp':\n // in this block because of a Safari 14.1 bug\n // old FF does not clone regexes passed to the constructor, so get the source and flags directly\n cloned = new RegExp(value.source, 'flags' in value ? value.flags : getFlags(value));\n break;\n case 'Error':\n name = value.name;\n switch (name) {\n case 'AggregateError':\n cloned = getBuiltin('AggregateError')([]);\n break;\n case 'EvalError':\n cloned = EvalError();\n break;\n case 'RangeError':\n cloned = RangeError();\n break;\n case 'ReferenceError':\n cloned = ReferenceError();\n break;\n case 'SyntaxError':\n cloned = SyntaxError();\n break;\n case 'TypeError':\n cloned = TypeError();\n break;\n case 'URIError':\n cloned = URIError();\n break;\n case 'CompileError':\n cloned = CompileError();\n break;\n case 'LinkError':\n cloned = LinkError();\n break;\n case 'RuntimeError':\n cloned = RuntimeError();\n break;\n default:\n cloned = Error();\n }\n deep = true;\n break;\n case 'DOMException':\n cloned = new DOMException(value.message, value.name);\n deep = true;\n break;\n case 'DataView':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'BigInt64Array':\n case 'BigUint64Array':\n C = global[type];\n // in some old engines like Safari 9, typeof C is 'object'\n // on Uint8ClampedArray or some other constructors\n if (!isObject(C)) throwUnpolyfillable(type);\n cloned = new C(\n // this is safe, since arraybuffer cannot have circular references\n structuredCloneInternal(value.buffer, map),\n value.byteOffset,\n type === 'DataView' ? value.byteLength : value.length\n );\n break;\n case 'DOMQuad':\n try {\n cloned = new DOMQuad(\n structuredCloneInternal(value.p1, map),\n structuredCloneInternal(value.p2, map),\n structuredCloneInternal(value.p3, map),\n structuredCloneInternal(value.p4, map)\n );\n } catch (error) {\n if (nativeRestrictedStructuredClone) {\n cloned = nativeRestrictedStructuredClone(value);\n } else throwUnpolyfillable(type);\n }\n break;\n case 'FileList':\n C = global.DataTransfer;\n if (isConstructor(C)) {\n dataTransfer = new C();\n for (i = 0, length = lengthOfArrayLike(value); i < length; i++) {\n dataTransfer.items.add(structuredCloneInternal(value[i], map));\n }\n cloned = dataTransfer.files;\n } else if (nativeRestrictedStructuredClone) {\n cloned = nativeRestrictedStructuredClone(value);\n } else throwUnpolyfillable(type);\n break;\n case 'ImageData':\n // Safari 9 ImageData is a constructor, but typeof ImageData is 'object'\n try {\n cloned = new ImageData(\n structuredCloneInternal(value.data, map),\n value.width,\n value.height,\n { colorSpace: value.colorSpace }\n );\n } catch (error) {\n if (nativeRestrictedStructuredClone) {\n cloned = nativeRestrictedStructuredClone(value);\n } else throwUnpolyfillable(type);\n } break;\n default:\n if (nativeRestrictedStructuredClone) {\n cloned = nativeRestrictedStructuredClone(value);\n } else switch (type) {\n case 'BigInt':\n // can be a 3rd party polyfill\n cloned = Object(value.valueOf());\n break;\n case 'Boolean':\n cloned = Object(booleanValueOf(value));\n break;\n case 'Number':\n cloned = Object(numberValueOf(value));\n break;\n case 'String':\n cloned = Object(stringValueOf(value));\n break;\n case 'Date':\n cloned = new Date(getTime(value));\n break;\n case 'ArrayBuffer':\n C = global.DataView;\n // `ArrayBuffer#slice` is not available in IE10\n // `ArrayBuffer#slice` and `DataView` are not available in old FF\n if (!C && typeof value.slice != 'function') throwUnpolyfillable(type);\n // detached buffers throws in `DataView` and `.slice`\n try {\n if (typeof value.slice == 'function') {\n cloned = value.slice(0);\n } else {\n length = value.byteLength;\n cloned = new ArrayBuffer(length);\n source = new C(value);\n target = new C(cloned);\n for (i = 0; i < length; i++) {\n target.setUint8(i, source.getUint8(i));\n }\n }\n } catch (error) {\n throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR);\n } break;\n case 'SharedArrayBuffer':\n // SharedArrayBuffer should use shared memory, we can't polyfill it, so return the original\n cloned = value;\n break;\n case 'Blob':\n try {\n cloned = value.slice(0, value.size, value.type);\n } catch (error) {\n throwUnpolyfillable(type);\n } break;\n case 'DOMPoint':\n case 'DOMPointReadOnly':\n C = global[type];\n try {\n cloned = C.fromPoint\n ? C.fromPoint(value)\n : new C(value.x, value.y, value.z, value.w);\n } catch (error) {\n throwUnpolyfillable(type);\n } break;\n case 'DOMRect':\n case 'DOMRectReadOnly':\n C = global[type];\n try {\n cloned = C.fromRect\n ? C.fromRect(value)\n : new C(value.x, value.y, value.width, value.height);\n } catch (error) {\n throwUnpolyfillable(type);\n } break;\n case 'DOMMatrix':\n case 'DOMMatrixReadOnly':\n C = global[type];\n try {\n cloned = C.fromMatrix\n ? C.fromMatrix(value)\n : new C(value);\n } catch (error) {\n throwUnpolyfillable(type);\n } break;\n case 'AudioData':\n case 'VideoFrame':\n if (!isCallable(value.clone)) throwUnpolyfillable(type);\n try {\n cloned = value.clone();\n } catch (error) {\n throwUncloneable(type);\n } break;\n case 'File':\n try {\n cloned = new File([value], value.name, value);\n } catch (error) {\n throwUnpolyfillable(type);\n } break;\n case 'CryptoKey':\n case 'GPUCompilationMessage':\n case 'GPUCompilationInfo':\n case 'ImageBitmap':\n case 'RTCCertificate':\n case 'WebAssembly.Module':\n throwUnpolyfillable(type);\n // break omitted\n default:\n throwUncloneable(type);\n }\n }\n\n mapSet(map, value, cloned);\n\n if (deep) switch (type) {\n case 'Array':\n case 'Object':\n keys = objectKeys(value);\n for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {\n key = keys[i];\n createProperty(cloned, key, structuredCloneInternal(value[key], map));\n } break;\n case 'Map':\n value.forEach(function (v, k) {\n mapSet(cloned, structuredCloneInternal(k, map), structuredCloneInternal(v, map));\n });\n break;\n case 'Set':\n value.forEach(function (v) {\n setAdd(cloned, structuredCloneInternal(v, map));\n });\n break;\n case 'Error':\n createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map));\n if (hasOwn(value, 'cause')) {\n createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map));\n }\n if (name == 'AggregateError') {\n cloned.errors = structuredCloneInternal(value.errors, map);\n } // break omitted\n case 'DOMException':\n if (ERROR_STACK_INSTALLABLE) {\n createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map));\n }\n }\n\n return cloned;\n};\n\nvar PROPER_TRANSFER = nativeStructuredClone && !fails(function () {\n var buffer = new ArrayBuffer(8);\n var clone = nativeStructuredClone(buffer, { transfer: [buffer] });\n return buffer.byteLength != 0 || clone.byteLength != 8;\n});\n\nvar tryToTransfer = function (rawTransfer, map) {\n if (!isObject(rawTransfer)) throw TypeError('Transfer option cannot be converted to a sequence');\n\n var transfer = [];\n\n iterate(rawTransfer, function (value) {\n push(transfer, anObject(value));\n });\n\n var i = 0;\n var length = lengthOfArrayLike(transfer);\n var value, type, C, transferredArray, transferred, canvas, context;\n\n if (PROPER_TRANSFER) {\n transferredArray = nativeStructuredClone(transfer, { transfer: transfer });\n while (i < length) mapSet(map, transfer[i], transferredArray[i++]);\n } else while (i < length) {\n value = transfer[i++];\n if (mapHas(map, value)) throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);\n\n type = classof(value);\n\n switch (type) {\n case 'ImageBitmap':\n C = global.OffscreenCanvas;\n if (!isConstructor(C)) throwUnpolyfillable(type, TRANSFERRING);\n try {\n canvas = new C(value.width, value.height);\n context = canvas.getContext('bitmaprenderer');\n context.transferFromImageBitmap(value);\n transferred = canvas.transferToImageBitmap();\n } catch (error) { /* empty */ }\n break;\n case 'AudioData':\n case 'VideoFrame':\n if (!isCallable(value.clone) || !isCallable(value.close)) throwUnpolyfillable(type, TRANSFERRING);\n try {\n transferred = value.clone();\n value.close();\n } catch (error) { /* empty */ }\n break;\n case 'ArrayBuffer':\n case 'MessagePort':\n case 'OffscreenCanvas':\n case 'ReadableStream':\n case 'TransformStream':\n case 'WritableStream':\n throwUnpolyfillable(type, TRANSFERRING);\n }\n\n if (transferred === undefined) throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR);\n mapSet(map, value, transferred);\n }\n};\n\n$({ global: true, enumerable: true, sham: !PROPER_TRANSFER, forced: FORCED_REPLACEMENT }, {\n structuredClone: function structuredClone(value /* , { transfer } */) {\n var options = validateArgumentsLength(arguments.length, 1) > 1 ? anObject(arguments[1]) : undefined;\n var transfer = options ? options.transfer : undefined;\n var map;\n\n if (transfer !== undefined) {\n map = new Map();\n tryToTransfer(transfer, map);\n }\n\n return structuredCloneInternal(value, map);\n }\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n AbortException,\n AnnotationMode,\n assert,\n createPromiseCapability,\n getVerbosityLevel,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isSameOrigin,\n MissingPDFException,\n PasswordException,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n stringToBytes,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n deprecated,\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMStandardFontDataFactory,\n isDataScheme,\n loadScript,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeStandardFontDataFactory,\n} from \"./node_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { isNodeJS } from \"../shared/is_node.js\";\nimport { MessageHandler } from \"../shared/message_handler.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\n\nconst DefaultCanvasFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory;\nconst DefaultCMapReaderFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory;\nconst DefaultStandardFontDataFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory;\n\n/**\n * @typedef {function} IPDFStreamFactory\n * @param {DocumentInitParameters} params - The document initialization\n * parameters. The \"url\" key is always present.\n * @returns {Promise} A promise, which is resolved with an instance of\n * {IPDFStream}.\n * @ignore\n */\n\n/**\n * @type {IPDFStreamFactory}\n * @private\n */\nlet createPDFNetworkStream;\n\n/**\n * Sets the function that instantiates an {IPDFStream} as an alternative PDF\n * data transport.\n *\n * @param {IPDFStreamFactory} pdfNetworkStreamFactory - The factory function\n * that takes document initialization parameters (including a \"url\") and\n * returns a promise which is resolved with an instance of {IPDFStream}.\n * @ignore\n */\nfunction setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {\n createPDFNetworkStream = pdfNetworkStreamFactory;\n}\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string|URL} [url] - The URL of the PDF.\n * @property {TypedArray|Array|string} [data] - Binary PDF data. Use\n * typed arrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {TypedArray} [initialData] - A typed array with the first portion\n * or all of the pdf data. Used by the extension since some data is already\n * loaded before the switch to range requests.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files. Providing a custom factory is useful for\n * environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMCMapReaderFactory}.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files. Providing a custom factory is useful\n * for environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMStandardFontDataFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory` and `StandardFontDataFactory` options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of font rendering, and\n * when parsing PDF functions. The default value is `true`.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string|URL|TypedArray|PDFDataRangeTransport|DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src) {\n const task = new PDFDocumentLoadingTask();\n\n let source;\n if (typeof src === \"string\" || src instanceof URL) {\n source = { url: src };\n } else if (isArrayBuffer(src)) {\n source = { data: src };\n } else if (src instanceof PDFDataRangeTransport) {\n source = { range: src };\n } else {\n if (typeof src !== \"object\") {\n throw new Error(\n \"Invalid parameter in getDocument, \" +\n \"need either string, URL, Uint8Array, or parameter object.\"\n );\n }\n if (!src.url && !src.data && !src.range) {\n throw new Error(\n \"Invalid parameter object: need either .data, .range or .url\"\n );\n }\n source = src;\n }\n const params = Object.create(null);\n let rangeTransport = null,\n worker = null;\n\n for (const key in source) {\n const value = source[key];\n\n switch (key) {\n case \"url\":\n if (typeof window !== \"undefined\") {\n try {\n // The full path is required in the 'url' field.\n params[key] = new URL(value, window.location).href;\n continue;\n } catch (ex) {\n warn(`Cannot create valid URL: \"${ex}\".`);\n }\n } else if (typeof value === \"string\" || value instanceof URL) {\n params[key] = value.toString(); // Support Node.js environments.\n continue;\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n case \"range\":\n rangeTransport = value;\n continue;\n case \"worker\":\n worker = value;\n continue;\n case \"data\":\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n value instanceof Buffer // eslint-disable-line no-undef\n ) {\n params[key] = new Uint8Array(value);\n } else if (value instanceof Uint8Array) {\n break; // Use the data as-is when it's already a Uint8Array.\n } else if (typeof value === \"string\") {\n params[key] = stringToBytes(value);\n } else if (\n typeof value === \"object\" &&\n value !== null &&\n !isNaN(value.length)\n ) {\n params[key] = new Uint8Array(value);\n } else if (isArrayBuffer(value)) {\n params[key] = new Uint8Array(value);\n } else {\n throw new Error(\n \"Invalid PDF binary data: either typed array, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n }\n continue;\n }\n params[key] = value;\n }\n\n params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;\n params.CMapReaderFactory =\n params.CMapReaderFactory || DefaultCMapReaderFactory;\n params.StandardFontDataFactory =\n params.StandardFontDataFactory || DefaultStandardFontDataFactory;\n params.ignoreErrors = params.stopAtErrors !== true;\n params.fontExtraProperties = params.fontExtraProperties === true;\n params.pdfBug = params.pdfBug === true;\n params.enableXfa = params.enableXfa === true;\n\n if (\n typeof params.docBaseUrl !== \"string\" ||\n isDataScheme(params.docBaseUrl)\n ) {\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n params.docBaseUrl = null;\n }\n if (!Number.isInteger(params.maxImageSize)) {\n params.maxImageSize = -1;\n }\n if (typeof params.useWorkerFetch !== \"boolean\") {\n params.useWorkerFetch =\n params.CMapReaderFactory === DOMCMapReaderFactory &&\n params.StandardFontDataFactory === DOMStandardFontDataFactory;\n }\n if (typeof params.isEvalSupported !== \"boolean\") {\n params.isEvalSupported = true;\n }\n if (typeof params.disableFontFace !== \"boolean\") {\n params.disableFontFace =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS;\n }\n if (typeof params.useSystemFonts !== \"boolean\") {\n params.useSystemFonts =\n !(\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n isNodeJS\n ) && !params.disableFontFace;\n }\n if (typeof params.ownerDocument === \"undefined\") {\n params.ownerDocument = globalThis.document;\n }\n\n if (typeof params.disableRange !== \"boolean\") {\n params.disableRange = false;\n }\n if (typeof params.disableStream !== \"boolean\") {\n params.disableStream = false;\n }\n if (typeof params.disableAutoFetch !== \"boolean\") {\n params.disableAutoFetch = false;\n }\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(params.verbosity);\n\n if (!worker) {\n const workerParams = {\n verbosity: params.verbosity,\n port: GlobalWorkerOptions.workerPort,\n };\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = workerParams.port\n ? PDFWorker.fromPort(workerParams)\n : new PDFWorker(workerParams);\n task._worker = worker;\n }\n const docId = task.docId;\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const workerIdPromise = _fetchDocument(\n worker,\n params,\n rangeTransport,\n docId\n );\n const networkStreamPromise = new Promise(function (resolve) {\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(\n {\n length: params.length,\n initialData: params.initialData,\n progressiveDone: params.progressiveDone,\n contentDispositionFilename: params.contentDispositionFilename,\n disableRange: params.disableRange,\n disableStream: params.disableStream,\n },\n rangeTransport\n );\n } else if (!params.data) {\n networkStream = createPDFNetworkStream({\n url: params.url,\n length: params.length,\n httpHeaders: params.httpHeaders,\n withCredentials: params.withCredentials,\n rangeChunkSize: params.rangeChunkSize,\n disableRange: params.disableRange,\n disableStream: params.disableStream,\n });\n }\n resolve(networkStream);\n });\n\n return Promise.all([workerIdPromise, networkStreamPromise]).then(\n function ([workerId, networkStream]) {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const messageHandler = new MessageHandler(\n docId,\n workerId,\n worker.port\n );\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n params\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n }\n );\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\n/**\n * Starts fetching of specified PDF document/data.\n *\n * @param {PDFWorker} worker\n * @param {Object} source\n * @param {PDFDataRangeTransport} pdfDataRangeTransport\n * @param {string} docId - Unique document ID, used in `MessageHandler`.\n * @returns {Promise} A promise that is resolved when the worker ID of\n * the `MessageHandler` is known.\n * @private\n */\nasync function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n if (pdfDataRangeTransport) {\n source.length = pdfDataRangeTransport.length;\n source.initialData = pdfDataRangeTransport.initialData;\n source.progressiveDone = pdfDataRangeTransport.progressiveDone;\n source.contentDispositionFilename =\n pdfDataRangeTransport.contentDispositionFilename;\n }\n const workerId = await worker.messageHandler.sendWithPromise(\n \"GetDocRequest\",\n {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n // Only send the required properties, and *not* the entire object.\n source: {\n data: source.data,\n url: source.url,\n password: source.password,\n disableAutoFetch: source.disableAutoFetch,\n rangeChunkSize: source.rangeChunkSize,\n length: source.length,\n },\n maxImageSize: source.maxImageSize,\n disableFontFace: source.disableFontFace,\n docBaseUrl: source.docBaseUrl,\n ignoreErrors: source.ignoreErrors,\n isEvalSupported: source.isEvalSupported,\n fontExtraProperties: source.fontExtraProperties,\n enableXfa: source.enableXfa,\n useSystemFonts: source.useSystemFonts,\n cMapUrl: source.useWorkerFetch ? source.cMapUrl : null,\n standardFontDataUrl: source.useWorkerFetch\n ? source.standardFontDataUrl\n : null,\n }\n );\n\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n return workerId;\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n static get idCounters() {\n return shadow(this, \"idCounters\", { doc: 0 });\n }\n\n constructor() {\n this._capability = createPromiseCapability();\n this._transport = null;\n this._worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n this.docId = `d${PDFDocumentLoadingTask.idCounters.doc++}`;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n this.destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n this.onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n this.onProgress = null;\n\n /**\n * Callback for when an unsupported feature is used in the PDF document.\n * The callback receives an {@link UNSUPPORTED_FEATURES} argument.\n * @type {function}\n */\n this.onUnsupportedFeature = null;\n }\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * Abort all network requests and destroy the worker.\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n async destroy() {\n this.destroyed = true;\n await this._transport?.destroy();\n\n this._transport = null;\n if (this._worker) {\n this._worker.destroy();\n this._worker = null;\n }\n }\n}\n\n/**\n * Abstract class to support range requests file loading.\n */\nclass PDFDataRangeTransport {\n /**\n * @param {number} length\n * @param {Uint8Array} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = createPromiseCapability();\n }\n\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n Object.defineProperty(this, \"fingerprint\", {\n get() {\n deprecated(\n \"`PDFDocumentProxy.fingerprint`, \" +\n \"please use `PDFDocumentProxy.fingerprints` instead.\"\n );\n return this.fingerprints[0];\n },\n });\n\n Object.defineProperty(this, \"getStats\", {\n value: async () => {\n deprecated(\n \"`PDFDocumentProxy.getStats`, \" +\n \"please use the `PDFDocumentProxy.stats`-getter instead.\"\n );\n return this.stats || { streamTypes: {}, fontTypes: {} };\n },\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to\n * identify the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @typedef {Object} PDFDocumentStats\n * @property {Object} streamTypes - Used stream types in the\n * document (an item is set to true if specific stream ID was used in the\n * document).\n * @property {Object} fontTypes - Used font types in the\n * document (an item is set to true if specific font ID was used in the\n * document).\n */\n\n /**\n * @type {PDFDocumentStats | null} The current statistics about document\n * structures, or `null` when no statistics exists.\n */\n get stats() {\n return this._transport.stats;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return !!this._transport._htmlForXfa;\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise