diff --git a/leigh-astro-indi/.gitignore b/leigh-astro-indi/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-astro-indi/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-astro-indi/LICENSE b/leigh-astro-indi/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-astro-indi/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-astro-indi/README.txt b/leigh-astro-indi/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..933d7e795b5c199c2882b04dfbdcd69131e9775d --- /dev/null +++ b/leigh-astro-indi/README.txt @@ -0,0 +1 @@ +Astronomy control software peculiar to INDI. \ No newline at end of file diff --git a/leigh-astro-indi/build.gradle b/leigh-astro-indi/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..d5a91413a4c2b1c91e7b182c3b81f6acc072d8ad --- /dev/null +++ b/leigh-astro-indi/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version leigh_astro_indi_ver + +repositories { + mavenCentral() + maven { + url "https://oss.sonatype.org/content/repositories/snapshots" + } +} + +dependencies { + api project(':leigh-astro') + api group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' + api group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.4.15' + api group: 'javax.websocket', name: 'javax.websocket-api', version: '1.1' + api group: 'org.glassfish.tyrus', name: 'tyrus-client', version: '1.17' + api group: 'commons-codec', name: 'commons-codec', version: '1.15' +} \ No newline at end of file diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/AstroClient.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/AstroClient.java new file mode 100644 index 0000000000000000000000000000000000000000..a680410b859419684f44ae0508fa6564f336806e --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/AstroClient.java @@ -0,0 +1,99 @@ +package leigh.astro.indi; + +import leigh.astro.indi.base.Constants; +import leigh.astro.indi.client.INDIDevice; +import leigh.astro.indi.client.INDIServerConnection; +import leigh.astro.indi.client.INDIServerConnectionListener; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.IOException; +import java.util.Date; + +public class AstroClient implements INDIServerConnectionListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(AstroClient.class); + + static { + INDIURLStreamHandlerFactory.init(); + } + + private INDIServerConnection currentConnection; + + public AstroClient(String host, int port) { + currentConnection = new INDIServerConnection(host, port); + + // Listen to all server events + currentConnection.addINDIServerConnectionListener(this); + + try { + currentConnection.connect(); + currentConnection.askForDevices(); // Ask for all the devices. + } catch (IOException e) { + logger.error("Problem with the connection: " + host + ":" + port, e); + } + } + + public static void main(String[] args) { + if (args.length < 1 || args.length > 2) { + printErrorMessageAndExit(); + } + + String host = args[0]; + int port = Constants.INDI_DEFAULT_PORT; + + if (args.length > 1) { + try { + port = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + printErrorMessageAndExit(); + } + } + + new AstroClient(host, port); + } + + private static void printErrorMessageAndExit() { + System.out.println("The program must be called in the following way:"); + + System.out.println("> java SimpleINDIClient host [port]\n where"); + System.out.println(" host - is the INDI Server to connect to"); + System.out.println(" port - is the INDI Server port. If not present the default port (" + + Constants.INDI_DEFAULT_PORT + ") will be used.\n"); + + System.exit(-1); + } + + @Override + public void newDevice(INDIServerConnection connection, INDIDevice device) { + // We just simply listen to this Device + System.out.println("New device: " + device.getName()); + + // Enable receiving BLOBs from this Device + try { + device.blobsEnable(Constants.BLOBEnables.ALSO); + } catch (IOException e) { + e.printStackTrace(); + } + + device.addINDIDeviceListener(new DebugListener(device)); + } + + @Override + public void removeDevice(INDIServerConnection connection, INDIDevice device) { + // We just remove ourselves as a listener of the removed device + System.out.println("Device Removed: " + device.getName()); + } + + @Override + public void connectionLost(INDIServerConnection connection) { + System.out.println("Connection lost. Bye"); + + System.exit(-1); + } + + @Override + public void newMessage(INDIServerConnection connection, Date timestamp, String message) { + System.out.println("New Server Message: " + timestamp + " - " + message); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/DebugListener.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/DebugListener.java new file mode 100644 index 0000000000000000000000000000000000000000..31a441c4116ac5ae2aef94cc1cc701e94ca1e2e5 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/DebugListener.java @@ -0,0 +1,46 @@ +package leigh.astro.indi; + +import leigh.astro.indi.client.INDIDevice; +import leigh.astro.indi.client.INDIDeviceListener; +import leigh.astro.indi.client.INDIProperty; +import leigh.astro.indi.client.INDIPropertyListener; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +/** + * This class implements a debug listener for INDI devices, and simply outputs their properties and changes. + * + * @author C. Alexander Leigh + */ +public class DebugListener implements INDIDeviceListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DebugListener.class); + private final INDIDevice dev; + + public DebugListener(INDIDevice dev) { + this.dev = dev; + } + + @Override + public void newProperty(INDIDevice indiDevice, INDIProperty indiProperty) { + logger.info("newProp: [dev: {}] [name: {}] [values: {}]", + indiDevice.getName(), indiProperty.getName(), indiProperty.getValuesAsString()); + indiProperty.addINDIPropertyListener(new INDIPropertyListener() { + @Override + public void propertyChanged(INDIProperty property) { + logger.info("Property changed. [dev: {}] [name: {}] [value: {}]", + indiDevice.getName(), property.getName(), property.getValuesAsString()); + } + }); + } + + @Override + public void removeProperty(INDIDevice indiDevice, INDIProperty indiProperty) { + logger.info("removeProperty: [device: {}] [name: {}]", indiDevice.getName(), indiProperty); + + } + + @Override + public void messageChanged(INDIDevice indiDevice) { + logger.info("Message: [dev: {}] [msg: {}]", indiDevice.getName(), indiDevice.getLastMessage()); + } +} \ No newline at end of file diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/ClassInstantiator.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/ClassInstantiator.java new file mode 100644 index 0000000000000000000000000000000000000000..10741f012542b0c8d5e2161cf5b4ad0994b2dcff --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/ClassInstantiator.java @@ -0,0 +1,119 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +/** + * A class to instantiate other classes based on their name and constructor + * parameters. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public final class ClassInstantiator { + + /** + * A logger for the errors. + */ + private static final Logger LOG = LoggerFactory.getLogger(ClassInstantiator.class); + + /** + * A private constructor to avoid instantiating this utility class. + */ + private ClassInstantiator() { + } + + /** + * Instantiates an object from a list of possible classes. The object will + * be of the class of the first instantiable class in an array. + * + * @param possibleClassNames An array of class names from which to try to instantiate a + * object. + * @param arguments The arguments for the constructors. + * @return The first object that can be instantiated from a list of classes. + * @throws INDIException if there is no suitable class to be instantiated. + */ + public static Object instantiate(final String[] possibleClassNames, final Object[] arguments) throws INDIException { + /* + * Class[] argumentClasses = new Class[arguments.length]; for (int i = + * 0; i < argumentClasses.length; i++) { argumentClasses[i] = + * arguments[i].getClass(); } + */ + + for (String className : possibleClassNames) { + try { + Class theClass = Class.forName(className); + Constructor[] constructors = theClass.getConstructors(); + + Constructor constructor = getSuitableConstructor(constructors, arguments); + Object obj = constructor.newInstance(arguments); + + return obj; // If the object could be instantiated return it. + } catch (ClassNotFoundException ex) { + LOG.error("Could not instantiate", ex); + } catch (InstantiationException ex) { + LOG.error("Could not instantiate", ex); + } catch (IllegalAccessException ex) { + LOG.error("Could not instantiate", ex); + } catch (InvocationTargetException ex) { + LOG.error("Could not instantiate", ex); + } + } + + throw new INDIException("No suitable class to instantiate. Probably some libraries are missing in the classpath."); + } + + /** + * Gets a suitable Constructor from a list. It check for the parameters to + * coincide with a list of parameter classes. + * + * @param constructors The list of constructors from which to get a suitable one. + * @param arguments The array of parameters objects for the constructor. + * @return The first suitable constructor for a set of parameters. + * @throws INDIException If no suitable constructor is found. + */ + private static Constructor getSuitableConstructor(final Constructor[] constructors, final Object[] arguments) throws INDIException { + for (Constructor c : constructors) { + Class[] cClassParam = c.getParameterTypes(); + boolean match = true; + if (cClassParam.length != arguments.length) { + match = false; + } + for (int h = 0; h < arguments.length; h++) { + if (!cClassParam[h].isInstance(arguments[h])) { + match = false; + } + } + + if (match) { + return c; + } + } + + throw new INDIException("No suitable class to instantiate. Probably some libraries are missing in the classpath."); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/Constants.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..afc9ec7b9cdc4c489ffad5d9390b8f4c83319dcc --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/Constants.java @@ -0,0 +1,516 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * A class representing a some Constants and convenience functions to deal with + * them used in several parts of the INDI for Java libraries. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public final class Constants { + + /** + * The default port for the INDI protocol. + */ + public static final int INDI_DEFAULT_PORT = 7624; + + /** + * Default size for buffers. + */ + public static final int BUFFER_SIZE = 1000000; + + /** + * The number of milliseconds used in the dinamic wait for property methods. + */ + public static final int WAITING_INTERVAL = 500; + + /** + * Milliseconds in a second. + */ + public static final int MILLISECONDS_IN_A_SECOND = 1000; + + /** + * A private constructor to avoid instantiating this utility class. + */ + private Constants() { + } + + /** + * Possible Light State Values. + */ + public enum LightStates { + + /** + * Idle State. + */ + IDLE, + /** + * Ok State. + */ + OK, + /** + * Busy State. + */ + BUSY, + /** + * Alert State. + */ + ALERT + } + + ; + + /** + * Parses a Light State. + * + * @param state a string representation of the Light State to be parsed + * ("Alert" or "Busy" or "Ok" or "Idle"). + * @return The parsed Light State + */ + public static LightStates parseLightState(final String state) { + if (state.compareTo("Alert") == 0) { + return LightStates.ALERT; + } else if (state.compareTo("Busy") == 0) { + return LightStates.BUSY; + } else if (state.compareTo("Ok") == 0) { + return LightStates.OK; + } else if (state.compareTo("Idle") == 0) { + return LightStates.IDLE; + } + + throw new IllegalArgumentException("Invalid LightState String: '" + state + "'"); + } + + /** + * Checks if a string corresponds to a valid LightState. + * + * @param state The string to check + * @return true if it corresponds to a valid LightState. + * false otherwise. + */ + public static boolean isValidLightState(final String state) { + try { + parseLightState(state); + } catch (IllegalArgumentException e) { + return false; + } + + return true; + } + + /** + * Gets a String representation of the Light State. + * + * @param lightState The Light State + * @return A String representation of the Light State + */ + public static String getLightStateAsString(final LightStates lightState) { + if (lightState == LightStates.ALERT) { + return "Alert"; + } else if (lightState == LightStates.BUSY) { + return "Busy"; + } else if (lightState == LightStates.OK) { + return "Ok"; + } else if (lightState == LightStates.IDLE) { + return "Idle"; + } + + return ""; + } + + /** + * Possible Switch Status Values. + */ + public enum SwitchStatus { + + /** + * Off Status. + */ + OFF, + /** + * On Status. + */ + ON + } + + ; + + /** + * Parses a Switch Status. + * + * @param status a string representation of the Switch Status to be parsed + * ("Off" or "On"). + * @return The parsed Switch Status + */ + public static SwitchStatus parseSwitchStatus(final String status) { + if (status.compareTo("Off") == 0) { + return SwitchStatus.OFF; + } else if (status.compareTo("On") == 0) { + return SwitchStatus.ON; + } + + throw new IllegalArgumentException("Invalid SwitchStatus String: '" + status + "'"); + } + + /** + * Checks if a string corresponds to a valid SwitchStatus. + * + * @param status The string to check + * @return true if it corresponds to a valid SwitchStatus. + * false otherwise. + */ + public static boolean isValidSwitchStatus(final String status) { + try { + parseSwitchStatus(status); + } catch (IllegalArgumentException e) { + return false; + } + + return true; + } + + /** + * Gets a String representation of the Switch Status. + * + * @param switchStatus The Switch Status + * @return A String representation of the Switch Status + */ + public static String getSwitchStatusAsString(final SwitchStatus switchStatus) { + if (switchStatus == SwitchStatus.ON) { + return "On"; + } else if (switchStatus == SwitchStatus.OFF) { + return "Off"; + } + + return ""; + } + + /** + * Possible perimssions for a INDI Property. + */ + public enum PropertyPermissions { + + /** + * Read Only. + */ + RO, + /** + * Read Write. + */ + RW, + /** + * Write Only. + */ + WO + } + + ; + + /** + * Parses a Property Permission. + * + * @param permission a string representation of the Property Permission to be + * parsed ("ro" or "rw" or "wo"). + * @return The parsed Property Permission + */ + public static PropertyPermissions parsePropertyPermission(final String permission) { + if (permission.compareTo("ro") == 0) { + return PropertyPermissions.RO; + } else if (permission.compareTo("rw") == 0) { + return PropertyPermissions.RW; + } else if (permission.compareTo("wo") == 0) { + return PropertyPermissions.WO; + } + + throw new IllegalArgumentException("Invalid PropertyPermissions String: '" + permission + "'"); + } + + /** + * Checks if a string corresponds to a valid PropertyPermission. + * + * @param permission The string to check + * @return true if it corresponds to a valid + * PropertyPermission. false otherwise. + */ + public static boolean isValidPropertyPermission(final String permission) { + try { + parsePropertyPermission(permission); + } catch (IllegalArgumentException e) { + return false; + } + + return true; + } + + /** + * Gets a String representation of the Property Permission. + * + * @param permission The Property Permission + * @return A String representation of the Property Permission. + */ + public static String getPropertyPermissionAsString(final PropertyPermissions permission) { + if (permission == PropertyPermissions.RO) { + return "ro"; + } else if (permission == PropertyPermissions.RW) { + return "rw"; + } else if (permission == PropertyPermissions.WO) { + return "wo"; + } + + return ""; + } + + /** + * Possible States for a INDI Property. + */ + public enum PropertyStates { + + /** + * Idle. + */ + IDLE, + /** + * Ok. + */ + OK, + /** + * Busy. + */ + BUSY, + /** + * Alert. + */ + ALERT + } + + ; + + /** + * Parses a Property State. + * + * @param state a string representation of the Property State to be parsed + * ("Alert" or "Busy" or "Ok" or "Idle"). + * @return The parsed Property State + */ + public static PropertyStates parsePropertyState(final String state) { + if (state.compareTo("Alert") == 0) { + return PropertyStates.ALERT; + } else if (state.compareTo("Busy") == 0) { + return PropertyStates.BUSY; + } else if (state.compareTo("Ok") == 0) { + return PropertyStates.OK; + } else if (state.compareTo("Idle") == 0) { + return PropertyStates.IDLE; + } + + throw new IllegalArgumentException("Invalid PropertyState String: '" + state + "'"); + } + + /** + * Checks if a string corresponds to a valid PropertyState. + * + * @param state The string to check + * @return true if it corresponds to a valid PropertyState. + * false otherwise. + */ + public static boolean isValidPropertyState(final String state) { + try { + parsePropertyState(state); + } catch (IllegalArgumentException e) { + return false; + } + + return true; + } + + /** + * Gets a String representation of the Property State. + * + * @param propertyState The Property State + * @return A String representation of the Property State + */ + public static String getPropertyStateAsString(final PropertyStates propertyState) { + if (propertyState == PropertyStates.ALERT) { + return "Alert"; + } else if (propertyState == PropertyStates.BUSY) { + return "Busy"; + } else if (propertyState == PropertyStates.OK) { + return "Ok"; + } else if (propertyState == PropertyStates.IDLE) { + return "Idle"; + } + + return ""; + } + + /** + * Possible selection rules for a Switch Property. + */ + public enum SwitchRules { + + /** + * One of many (one and just one). + */ + ONE_OF_MANY, + /** + * At most one (zero or one). + */ + AT_MOST_ONE, + /** + * Any of many (zero or more). + */ + ANY_OF_MANY + } + + ; + + /** + * Parses a Switch Rule. + * + * @param rule a string representation of the Switch Rule to be parsed + * ("OneOfMany" or "AtMostOne" or "AnyOfMany"). + * @return The Switch Rule + */ + public static SwitchRules parseSwitchRule(final String rule) { + if (rule.compareTo("OneOfMany") == 0) { + return SwitchRules.ONE_OF_MANY; + } else if (rule.compareTo("AtMostOne") == 0) { + return SwitchRules.AT_MOST_ONE; + } else if (rule.compareTo("AnyOfMany") == 0) { + return SwitchRules.ANY_OF_MANY; + } + + throw new IllegalArgumentException("Invalid SwitchRules String: '" + rule + "'"); + } + + /** + * Checks if a string corresponds to a valid SwitchRule. + * + * @param rule The string to check + * @return true if it corresponds to a valid SwitchRule. + * false otherwise. + */ + public static boolean isValidSwitchRule(final String rule) { + try { + parseSwitchRule(rule); + } catch (IllegalArgumentException e) { + return false; + } + + return true; + } + + /** + * Gets a String representation of the Switch Rule. + * + * @param rule The Switch Rule + * @return A String representation of the Switch Rule. + */ + public static String getSwitchRuleAsString(final SwitchRules rule) { + if (rule == SwitchRules.ONE_OF_MANY) { + return "OneOfMany"; + } else if (rule == SwitchRules.AT_MOST_ONE) { + return "AtMostOne"; + } else if (rule == SwitchRules.ANY_OF_MANY) { + return "AnyOfMany"; + } + + return ""; + } + + /** + * Possible selection rules for a Switch Property. + */ + public enum BLOBEnables { + + /** + * Never (no BLOB values are sent). + */ + NEVER, + /** + * Also (every value is sent). + */ + ALSO, + /** + * Only (just the BLOB values are sent). + */ + ONLY + } + + ; + + /** + * Parses a BLOB Enable. + * + * @param blobEnable a string representation of the BLOB Enable to be parsed + * ("Never" or "Also" or "Only"). + * @return The BLOB Enable + */ + public static BLOBEnables parseBLOBEnable(final String blobEnable) { + if (blobEnable.compareTo("Never") == 0) { + return BLOBEnables.NEVER; + } else if (blobEnable.compareTo("Also") == 0) { + return BLOBEnables.ALSO; + } else if (blobEnable.compareTo("Only") == 0) { + return BLOBEnables.ONLY; + } + + throw new IllegalArgumentException("Invalid BLOBEnable String: '" + blobEnable + "'"); + } + + /** + * Checks if a string corresponds to a valid blobEnable. + * + * @param blobEnable The string to check + * @return true if it corresponds to a valid blobEnable. + * false otherwise. + */ + public static boolean isValidBLOBEnable(final String blobEnable) { + try { + parseBLOBEnable(blobEnable); + } catch (IllegalArgumentException e) { + return false; + } + + return true; + } + + /** + * Gets a String representation of the BLOB Enable. + * + * @param blobEnable The blobEnable + * @return A String representation of the BLOB Enable. + */ + public static String getBLOBEnableAsString(final BLOBEnables blobEnable) { + if (blobEnable == BLOBEnables.NEVER) { + return "Never"; + } else if (blobEnable == BLOBEnables.ALSO) { + return "Also"; + } else if (blobEnable == BLOBEnables.ONLY) { + return "Only"; + } + + return ""; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/FileUtils.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/FileUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..ebdfc0741d65773affa7b034a1bcb11ed0bd4ad2 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/FileUtils.java @@ -0,0 +1,109 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.io.File; + +/** + * A class to help dealing with Files and Directories. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public final class FileUtils { + + /** + * A private constructor to avoid instantiating this utility class. + */ + private FileUtils() { + } + + /** + * the current indi base directory. + */ + private static File baseDirectory; + + /** + * Gets the base directory while auxiliary files for the I4J library should + * be stored. This directory is ~/.i4j . In case of that directory not + * existing, the directory is created. Every axiliary file produced by the + * library should be written in this directory. + * + * @return The base directory for I4J auxiliary files. + */ + public static File getI4JBaseDirectory() { + if (baseDirectory == null) { + String userDirName = System.getProperty("user.home"); + File userDir = new File(userDirName); + File i4jDir = new File(userDir, ".i4j"); + if (!i4jDir.exists()) { + boolean created = i4jDir.mkdir(); + if (!created) { + throw new IllegalStateException("can not create indi base directory!" + i4jDir.getAbsolutePath()); + } + } + baseDirectory = i4jDir; + } + return baseDirectory; + } + + /** + * redirect the indi base directory to an other location. the directory + * itself will be created if non existent but the parent directory must + * exist. + * + * @param newBaseDirectory the new indi base directory. + */ + public static void setI4JBaseDirectory(String newBaseDirectory) { + File i4jDir = new File(newBaseDirectory).getAbsoluteFile(); + if (!i4jDir.exists()) { + boolean created = i4jDir.mkdir(); + if (!created) { + throw new IllegalStateException("can not create indi base directory!" + i4jDir.getAbsolutePath()); + } + } + baseDirectory = i4jDir; + } + + /** + * Gets the extension of a given file. + * + * @param file The file from which to get the extension. + * @return The extension of the file. If the file has no extension it + * returns a empty String: "" + */ + public static String getExtensionOfFile(File file) { + String ext = null; + String s = file.getName(); + int i = s.lastIndexOf('.'); + + if (i > 0 && i < s.length() - 1) { + ext = s.substring(i + 1); + } + + if (ext == null) { + return ""; + } + + return ext; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIBLOBValue.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIBLOBValue.java new file mode 100644 index 0000000000000000000000000000000000000000..8091cba83d1a5b16d59ec42de39f7096902e28cf --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIBLOBValue.java @@ -0,0 +1,156 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.OneBlob; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.Serializable; +import java.util.zip.DataFormatException; +import java.util.zip.Inflater; + +/** + * A class representing a INDI BLOB Value (some bytes and a format). + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDIBLOBValue implements Serializable { + + /** + * Serialization id. + */ + private static final long serialVersionUID = 2475720079344574791L; + + /** + * The BLOB data. + */ + private final byte[] blobData; + + /** + * The format of the data. + */ + private final String format; + + /** + * Constructs a new BLOB Value from its coresponding bytes and format. + * + * @param blobData the data for the BLOB + * @param format the format of the data + */ + public INDIBLOBValue(final byte[] blobData, final String format) { + this.format = format; + this.blobData = blobData; + } + + /** + * Constructs a new BLOB Value from a XML <oneBLOB> element. + * + * @param xml the <oneBLOB> XML element + */ + public INDIBLOBValue(final OneBlob xml) { + int size = 0; + String f; + + try { + String s = xml.getSize().trim(); + size = Integer.parseInt(s); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Size number not correct"); + } + + if (xml.getFormat() == null) { + throw new IllegalArgumentException("No format attribute"); + } + + f = xml.getFormat().trim(); + + byte[] val = xml.getByteContent(); + + if (f.endsWith(".z")) { // gzipped. Decompress + Inflater decompresser = new Inflater(); + decompresser.setInput(val); + + byte[] newvalue = new byte[size]; + + try { + decompresser.inflate(newvalue); + + val = newvalue; + } catch (DataFormatException e) { + throw new IllegalArgumentException("Not correctly GZIPped"); + } + + decompresser.end(); + + f = f.substring(0, f.length() - 2); + } + + if (val.length != size) { + throw new IllegalArgumentException("Size of BLOB not correct"); + } + + format = f; + blobData = val; + } + + /** + * Gets the BLOB data. + * + * @return the BLOB data + */ + public final byte[] getBlobData() { + return blobData; + } + + /** + * Gets the BLOB data format. + * + * @return the BLOB data format + */ + public final String getFormat() { + return format; + } + + /** + * Gets the size of the BLOB data. + * + * @return the size of the BLOB data + */ + public final int getSize() { + return blobData.length; + } + + /** + * Save the BLOB Data to a file. + * + * @param file The file to which to save the BLOB data. + * @throws IOException if there is some problem writting the file. + */ + public final void saveBLOBData(final File file) throws IOException { + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(blobData); + } + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIDate.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIDate.java new file mode 100644 index 0000000000000000000000000000000000000000..0c2b57436827829f47a57719685d16207acbdb3e --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIDate.java @@ -0,0 +1,364 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * A class which is the equivalent representation of utc date in the structure + * ln_date in libnova (http://libnova.sourceforge.net/). This is the Human + * readable (easy printf) date format used by libnova. It's always in UTC. + * + * @author Gerrit Viola [gerrit.viola at web.de] and S. Alonso (Zerjillo) + * [zerjioi at ugr.es] + */ +public class INDIDate { + + /** + * The years component of the Date. + */ + private int years; + + /** + * The months component of the Date. + */ + private int months; + + /** + * The days component of the Date. + */ + private int days; + + /** + * The hours component of the Date. + */ + private int hours; + + /** + * The minutes component of the Date. + */ + private int minutes; + + /** + * The seconds component of the Date. + */ + private double seconds; + + /** + * January month number. + */ + private static final int JANUARY = 1; + + /** + * February month number. + */ + private static final int FEBRUARY = 2; + + /** + * March month number. + */ + private static final int MARCH = 3; + + /** + * April month number. + */ + private static final int APRIL = 4; + + /** + * May month number. + */ + private static final int MAY = 5; + + /** + * June month number. + */ + private static final int JUNE = 6; + + /** + * July month number. + */ + private static final int JULY = 7; + + /** + * August month number. + */ + private static final int AUGUST = 8; + + /** + * September month number. + */ + private static final int SEPTEMBER = 9; + + /** + * October month number. + */ + private static final int OCTOBER = 10; + + /** + * November month number. + */ + private static final int NOVEMBER = 11; + + /** + * December month number. + */ + private static final int DECEMBER = 12; + + /** + * The number of days in January, March, May, July, August, October, + * December. + */ + private static final int DAYS_LONG_MONTH = 31; + + /** + * The number of days in April, June, September, November. + */ + private static final int DAYS_SHORT_MONTH = 30; + + /** + * The number of days in February (on a non Leap Year). + */ + private static final int DAYS_FEBRUARY = 28; + + /** + * The number of days in February (on a Leap Year). + */ + private static final int DAYS_FEBRUARY_LEAP_YEAR = 29; + + /** + * Number of years that have to pass for the next Leap Year. + */ + private static final int YEARS_FOR_LEAP_YEAR = 4; + + /** + * The number of horus in a day. + */ + private static final int HOURS_PER_DAY = 24; + + /** + * The number of minutes in a hour. + */ + private static final int MINUTES_PER_HOUR = 60; + + /** + * The number of seconds in a minute. + */ + private static final int SECONDS_PER_MINUTE = 60; + + /** + * Constructs a new Date whose components are 0000/01/01 00:00:00.0. + */ + public INDIDate() { + initializeComponents(); + } + + /** + * Constructs a new Date whose components are partially specified. Hours, + * minutes and seconds are initialized at 00:00:00.0. + * + * @param years The years component of the Date. All values are valid. + * @param months The months component of the Date. Mut be in the range 1 + * (January) - 12 (December). + * @param days The days component of the Date. Must be in the 1-28,29,30,31 + * range (depending on the months and years). + */ + public INDIDate(final int years, final int months, final int days) { + initializeComponents(); + + setYears(years); + setMonths(months); + setDays(days); + } + + /** + * Constructs a new Date whose components are partially specified. Hours, + * minutes and seconds are initialized at 00:00:00.0. + * + * @param years The years component of the Date. All values are valid. + * @param months The months component of the Date. Mut be in the range 1 + * (January) - 12 (December). + * @param days The days component of the Date. Must be in the 1-28,29,30,31 + * range (depending on the months and years). + * @param hours The hours component of the Date. Must be in the 0-23 range. + * @param minutes The minutes component of the Date. Must be in the 0-59 range. + * @param seconds The seconds component of the Date. Must be in the 0-59.999999 + * range. + */ + public INDIDate(final int years, final int months, final int days, final int hours, final int minutes, final double seconds) { + initializeComponents(); + + setYears(years); + setMonths(months); + setDays(days); + setHours(hours); + setMinutes(minutes); + setSeconds(seconds); + } + + /** + * Initilizes the components to "0000/01/01 00:00:00.0". + */ + private void initializeComponents() { + years = 0; + months = 1; + days = 1; + hours = 0; + minutes = 0; + seconds = 0; + } + + /** + * Gets the years component of the Date. + * + * @return The years component of the Date. + */ + public final int getYears() { + return years; + } + + /** + * Sets the years component of the Date. + * + * @param years The years component of the Date. All values are valid. + */ + public final void setYears(final int years) { + this.years = years; + } + + /** + * Gets the months component of the Date. + * + * @return The months component of the Date. + */ + public final int getMonths() { + return months; + } + + /** + * Sets the months component of the Date. + * + * @param months The months component of the Date. Must be in the range 1 + * (January) - 12 (December). + */ + public final void setMonths(final int months) { + if (months >= JANUARY && months <= DECEMBER) { + this.months = months; + } + } + + /** + * Gets the days component of the Date. + * + * @return The days component of the Date. + */ + public final int getDays() { + return days; + } + + /** + * Sets the days component of the Date. + * + * @param days The days component of the Date. Must be in the 1-28,29,30,31 + * range (depending on the months and years). + */ + public final void setDays(final int days) { + if (days < 1) { + return; + } + + if (days <= DAYS_FEBRUARY) { + this.days = days; + } else if ((months == JANUARY || months == MARCH || months == MAY || months == JULY || months == AUGUST || months == OCTOBER || months == DECEMBER) + && days <= DAYS_LONG_MONTH) { + this.days = days; + } else if ((months == APRIL || months == JUNE || months == SEPTEMBER || months == NOVEMBER) && days <= DAYS_SHORT_MONTH) { + this.days = days; + } else if (months == FEBRUARY && years % YEARS_FOR_LEAP_YEAR == 0 && days <= DAYS_FEBRUARY_LEAP_YEAR) { + this.days = days; + } + } + + /** + * Gets the hours component of the Date. + * + * @return The hours component of the Date. + */ + public final int getHours() { + return hours; + } + + /** + * Sets the hours component of the Date. + * + * @param hours The hours component of the Date. Must be in the 0-23 range. + */ + public final void setHours(final int hours) { + if (hours >= 0 && hours < HOURS_PER_DAY) { + this.hours = hours; + } + } + + /** + * Gets the minutes component of the Date. + * + * @return The minutes component of the Date. + */ + public final int getMinutes() { + return minutes; + } + + /** + * Sets the minutes component of the Date. + * + * @param minutes The minutes component of the Date. Must be in the 0-59 range. + */ + public final void setMinutes(final int minutes) { + if (minutes >= 0 && minutes < MINUTES_PER_HOUR) { + this.minutes = minutes; + } + } + + /** + * Gets the seconds component of the Date. + * + * @return The seconds component of the Date. + */ + public final double getSeconds() { + return seconds; + } + + /** + * Sets the seconds component of the Date. + * + * @param seconds The seconds component of the Date. Must be in the 0-59.999999 + * range. + */ + public final void setSeconds(final double seconds) { + if (seconds >= 0 && seconds < SECONDS_PER_MINUTE) { + this.seconds = seconds; + } + } + + @Override + public final String toString() { + return years + "/" + months + "/" + days + " " + hours + ":" + minutes + ":" + seconds; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIDateFormat.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIDateFormat.java new file mode 100644 index 0000000000000000000000000000000000000000..2d3a61be78088c69daef8b82308aa2f6314f964b --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIDateFormat.java @@ -0,0 +1,117 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * A simple class to format and parse INDI timestamps. Attention + * SimpleDateFormat is not thread save thats why this is a per thread singleton. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public final class INDIDateFormat { + + /** + * Thread local current, to protect the simple date formatters against multi + * treading problems. + */ + private static ThreadLocal format = new ThreadLocal<>(); + + /** + * The first possible format for INDI timestamps. + */ + private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); + + /** + * The second possible format for INDI timestamps. + */ + private SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + + /** + * A private constructor to avoid instantiating this utility class. + */ + private INDIDateFormat() { + } + + /** + * @return the INDIDateformat for the current thread. + */ + public static INDIDateFormat dateFormat() { + INDIDateFormat result = format.get(); + if (result == null) { + result = new INDIDateFormat(); + format.set(result); + } + return result; + } + + /** + * Parses a timestamp expressed in the INDI format. If the timestamp does + * not have the correct format it returns the current timestamp. + * + * @param time the timestamp to be parsed + * @return the parsed timestamp or the current timestamp if the format of + * the time is not correct. + */ + public Date parseTimestamp(final String time) { + Date timestamp; + if (time != null && !time.isEmpty()) { + try { + timestamp = dateFormat.parse(time); + } catch (ParseException e) { + try { + timestamp = dateFormat2.parse(time); + } catch (ParseException ee) { + timestamp = new Date(); // Not correct format, returning + // current timestamp. + } + } + } else { + timestamp = new Date(); + } + return timestamp; + } + + /** + * Formats a timestamp according to the INDI format. + * + * @param timestamp the timestamp to be formmated + * @return the formatted timestamp + */ + public String formatTimestamp(final Date timestamp) { + return dateFormat.format(timestamp); + } + + /** + * Gets the current timestamp in form of a String according to the INDI + * specification. + * + * @return the current timestamp according to the INDI specification. + */ + public String getCurrentTimestamp() { + return formatTimestamp(new Date()); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIException.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIException.java new file mode 100644 index 0000000000000000000000000000000000000000..9c8bd80e2aff7caa268622862b03aea022b5cbf6 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIException.java @@ -0,0 +1,55 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * A class representing a generic INDI Exception. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDIException extends Exception { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * Creates a INDI Exception. + * + * @param msg The message for the exception. + */ + public INDIException(final String msg) { + super(msg); + } + + /** + * Creates a INDI Exception. + * + * @param msg The message for the exception. + * @param cause The cause for the exception. + */ + public INDIException(final String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIProtocolParser.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIProtocolParser.java new file mode 100644 index 0000000000000000000000000000000000000000..5aa30a8b24b649a07c147c15e71aaa5826254a42 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIProtocolParser.java @@ -0,0 +1,58 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.INDIProtocol; +import leigh.astro.indi.protocol.api.INDIInputStream; + +import java.io.IOException; + +/** + * A interface representing a generic INDI Protocol Parser. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + * @author Richard van Nieuwenhoven + * @author C. Alexander Leigh + */ +public interface INDIProtocolParser { + + /** + * Parses a protocol message. + * + * @param message The protocol message to parse. + */ + void processProtokolMessage(INDIProtocol message); + + /** + * Gets the input stream from where the messages will be read. + * + * @return The input stream from where the messages will be read. + */ + INDIInputStream getInputStream(); + + /** + * Called when the reader finishes the readings (communications broken / + * stopped). + */ + void finishReader() throws IOException; +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIProtocolReader.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIProtocolReader.java new file mode 100644 index 0000000000000000000000000000000000000000..601b7cbcba43bbf8df4a0f5c6918dd000932a0e3 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDIProtocolReader.java @@ -0,0 +1,92 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.INDIProtocol; +import leigh.astro.indi.protocol.api.INDIInputStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +/** + * A class that reads from a input stream and sends the read messages to a + * parser. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + * @author C. Alexander Leigh + */ +public class INDIProtocolReader extends Thread { + + /** + * A logger for the errors. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIProtocolReader.class); + + /** + * The parser to which the messages will be sent. + */ + private INDIProtocolParser parser; + + /** + * Used to friendly stop the reader. + */ + private boolean stop; + + /** + * Creates the reader. + * + * @param parser The parser to which the readed messages will be sent. + * @param name the thread name to use. + */ + public INDIProtocolReader(final INDIProtocolParser parser, String name) { + super(name); + this.parser = parser; + } + + /** + * The main body of the reader. + */ + @Override + public final void run() { + try (INDIInputStream inputStream = parser.getInputStream()) { + INDIProtocol readObject = inputStream.readObject(); + while (!stop && readObject != null) { + parser.processProtokolMessage(readObject); + readObject = inputStream.readObject(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Sets the stop parameter. If set to true the reader will + * gracefully stop after the next read. + * + * @param stop The stop parameter + */ + public final void setStop(final boolean stop) { + this.stop = stop; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDISexagesimalFormatter.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDISexagesimalFormatter.java new file mode 100644 index 0000000000000000000000000000000000000000..952cbdabc4616edc6e147277f0e18094c5f6ffb0 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/INDISexagesimalFormatter.java @@ -0,0 +1,425 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.io.Serializable; +import java.util.Formatter; +import java.util.Locale; +import java.util.NoSuchElementException; +import java.util.StringTokenizer; + +/** + * A class to format and parse numbers in sexagesimal format. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDISexagesimalFormatter implements Serializable { + + /** + * the serial version id. + */ + private static final long serialVersionUID = -3904216502728630808L; + + /** + * The format to be used. It must begin with %, end with m and specifies a + * length and fractionLength in the form length.fractionLength. Valid + * fractionLengths are 3, 5, 6, 8 and 9. For example %5.3m. + */ + private String format; + + /** + * The length of the format. + */ + private int length; + + /** + * The fraction length. + */ + private int fractionLength; + + /** + * Fraction Length 3. + */ + private static final int FL3 = 3; + + /** + * Fraction Length 5. + */ + private static final int FL5 = 5; + + /** + * Fraction Length 6. + */ + private static final int FL6 = 6; + + /** + * Fraction Length 8. + */ + private static final int FL8 = 8; + + /** + * Fraction Length 9. + */ + private static final int FL9 = 9; + + /** + * Minutes in a hour. + */ + private static final double MINUTES_PER_HOUR = 60.0; + + /** + * Seconds in a hour. + */ + private static final double SECONDS_PER_HOUR = 3600.0; + + /** + * Seconds in a minute. + */ + private static final double SECONDS_PER_MINUTE = 60.0; + + /** + * Zero Negative. + */ + private static final double ZERO_NEG = -0.; + + /** + * Constructs an instance of INDISexagesimalFormatter with a + * particular format. Throws IllegalArgumentException if the format is not + * correct: begins with %, ends with m and specifies a length and + * fractionLength in the form length.fractionLength. Valid fractionLengths + * are 3, 5, 6, 8 and 9. For example %5.3m. + * + * @param format The desired format + */ + public INDISexagesimalFormatter(final String format) { + this.format = format; + + checkFormat(); + } + + /** + * Gets the format of this formatter. + * + * @return the format of this formatter. + */ + public final String getFormat() { + return format; + } + + /** + * Checks the specified format string. Throws IllegalArgumentException if + * the format string is not valid: begins with %, ends with m and specifies + * a length and fractionLength in the form length.fractionLength. Valid + * fractionLengths are 3, 5, 6, 8 and 9. For example %5.3m. + */ + private void checkFormat() { + if (!format.startsWith("%")) { + throw new IllegalArgumentException("Number format not starting with %"); + } + + if (!format.endsWith("m")) { + throw new IllegalArgumentException("Sexagesimal format not recognized (not ending m)"); + } + + String remaining = format.substring(1, format.length() - 1); + + int dotPos = remaining.indexOf("."); + + if (dotPos == -1) { + throw new IllegalArgumentException("Sexagesimal format not correct (no dot)"); + } + + String l = remaining.substring(0, dotPos); + String frLength = remaining.substring(dotPos + 1); + + try { + length = Integer.parseInt(l); + fractionLength = Integer.parseInt(frLength); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Illegal sexagesimal length or fraction length"); + } + + if (fractionLength != FL3 && fractionLength != FL5 && fractionLength != FL6 && fractionLength != FL8 && fractionLength != FL9) { + throw new IllegalArgumentException("Illegal sexagesimal fraction length"); + } + } + + /** + * Parses a sexagesimal newNumber. DO NOT USE IT. THIS IS A PRELIMINARY + * VERSION AND DOES NOT WORK AS EXPECTED. THIS METHOD WILL DISAPEAR IN + * FUTURE VERSIONS OF THE CLASS. + * + * @param number NOT USED + * @return NOT USED + * @deprecated + */ + @Deprecated + public final double parseSexagesimal2(final String number) { + String newNumber = number.replace(' ', ':'); + newNumber = newNumber.replace(';', ':'); + + if (newNumber.indexOf(":") == -1) { // If there are no separators maybe + // they have sent just a single + // double + try { + double n = Double.parseDouble(newNumber); + + return n; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Sexagesimal number format not correct (not even single number)"); + } + } + + StringTokenizer st = new StringTokenizer(newNumber, ":", false); + + double degrees = 0; + double minutes = 0; + double seconds = 0; + + try { + String aux = st.nextToken().trim(); + + if (aux.length() > 0) { + degrees = Double.parseDouble(aux); + } + + aux = st.nextToken().trim(); + + if (aux.length() > 0) { + minutes = Double.parseDouble(aux); + } + + if (fractionLength > FL5) { + aux = st.nextToken().trim(); + + if (aux.length() > 0) { + seconds = Double.parseDouble(aux); + } + } + + } catch (NoSuchElementException e) { + throw new IllegalArgumentException("Sexagesimal number format not correct"); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Sexagesimal number component not correct"); + } + + double res = degrees; + if (degrees > 0) { + res += minutes / MINUTES_PER_HOUR + seconds / SECONDS_PER_HOUR; + } else { + res -= minutes / MINUTES_PER_HOUR + seconds / SECONDS_PER_HOUR; + } + + return res; + } + + /** + * Parses a sexagesimal newNumber. The input String is + * formatted as a maximum of three doubles separated by : ; or a blank + * space. The first newNumber represents the newNumber of degrees, the + * second is the newNumber of minutes and the third is the newNumber of + * seconds. + * + * @param number The newNumber to be parsed. + * @return The parsed double. + */ + public final double parseSexagesimal(final String number) { + String newNumber = number.trim(); + + if (newNumber.isEmpty()) { + throw new IllegalArgumentException("Empty number"); + } + + newNumber = newNumber.replace(' ', ':'); + newNumber = newNumber.replace(';', ':'); + + int charCount = newNumber.length() - newNumber.replaceAll(":", "").length(); + + if (charCount > 2) { + throw new IllegalArgumentException("Too many components for the sexagesimal formatter"); + } + + double degrees = 0; + double minutes = 0; + double seconds = 0; + + StringTokenizer st = new StringTokenizer(newNumber, ":", false); + + String d = st.nextToken().trim(); + + try { + degrees = Double.parseDouble(d); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Number format incorrect"); + } + + if (st.hasMoreTokens()) { + String m = st.nextToken().trim(); + + try { + minutes = Double.parseDouble(m); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Minutes format incorrect"); + } + + if (minutes < 0) { + throw new IllegalArgumentException("Minutes cannot be negative"); + } + + if (st.hasMoreTokens()) { + String s = st.nextToken().trim(); + + try { + seconds = Double.parseDouble(s); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Seconds format incorrect"); + } + + if (seconds < 0) { + throw new IllegalArgumentException("Seconds cannot be negative"); + } + } + } + + double res = degrees; + if (Double.valueOf(degrees).compareTo(ZERO_NEG) > 0) { + res += minutes / MINUTES_PER_HOUR + seconds / SECONDS_PER_HOUR; + } else { + res -= minutes / MINUTES_PER_HOUR + seconds / SECONDS_PER_HOUR; + } + + return res; + } + + /** + * Fomats a newNumber according to the newNumber format os this formatter. + * + * @param number the newNumber to be formatted. + * @return The formatted newNumber as a String. + */ + public final String format(final Double number) { + int sign = 1; + if (number < 0) { + sign = -1; + } + + double newNumber = Math.abs(number); + + String fractionalPart = ":"; + + int integerPart; + + integerPart = (int) Math.floor(newNumber); + + double fractional = Math.abs(newNumber - integerPart); + + if (fractionLength < FL6) { + double minutes = fractional * SECONDS_PER_MINUTE; + + String form = "%02.0f"; + if (fractionLength == FL5) { + form = "%04.1f"; + } + + Formatter formatter = new Formatter(Locale.US); + String newMinutes = formatter.format(form, minutes).toString(); + + if (Double.parseDouble(newMinutes) >= MINUTES_PER_HOUR) { + minutes = 0.0; + integerPart++; + } + + formatter = new Formatter(Locale.US); + fractionalPart += formatter.format(form, minutes); + } else { + double minutes = Math.floor(fractional * MINUTES_PER_HOUR); + + double rest = fractional - minutes / SECONDS_PER_MINUTE; + + double seconds = rest * SECONDS_PER_HOUR; + + String form = "%02.0f"; + if (fractionLength == FL8) { + form = "%04.1f"; + } else if (fractionLength == FL9) { + form = "%05.2f"; + } + + Formatter formatter = new Formatter(Locale.US); + String newSeconds = formatter.format(form, seconds).toString(); + + if (Double.parseDouble(newSeconds) >= SECONDS_PER_MINUTE) { + seconds = 0.0; + minutes++; + } + + formatter = new Formatter(Locale.US); + String newMinutes = formatter.format("%02.0f", minutes).toString(); + + if (Double.parseDouble(newMinutes) >= MINUTES_PER_HOUR) { + minutes = 0.0; + integerPart++; + } + + formatter = new Formatter(Locale.US); + fractionalPart += formatter.format("%02.0f:" + form, minutes, seconds); + } + + String res = integerPart + fractionalPart; + + if (sign < 0) { + res = "-" + res; + } + + res = padLeft(res, length); + + return res; + } + + /** + * Pads a String to the left with spaces. + * + * @param s The String to be padded. + * @param n The maximum size of the padded String. + * @return The padded String + */ + private String padLeft(final String s, final int n) { + if (s.length() >= n) { + return s; + } + + int nSpaces = n - s.length(); + + if (nSpaces <= 0) { + return s; + } + + StringBuilder spacesBuffer = new StringBuilder(nSpaces); + for (int i = 0; i < nSpaces; i++) { + spacesBuffer.append(" "); + } + String spaces = spacesBuffer.toString(); + + return spaces + s; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/base/XMLToString.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/XMLToString.java new file mode 100644 index 0000000000000000000000000000000000000000..735f95fd7048ac3747238f81acf517dce901589f --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/base/XMLToString.java @@ -0,0 +1,77 @@ +package leigh.astro.indi.base; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Element; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.StringWriter; + +/** + * A class to transforms XML Elements into Strings. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public final class XMLToString { + + /** + * A logger for the errors. + */ + private static final Logger LOG = LoggerFactory.getLogger(XMLToString.class); + + /** + * A private constructor to avoid instantiating this utility class. + */ + private XMLToString() { + } + + /** + * Transforms a XML Element into a String. + * + * @param xml The XML Element + * @return A String representing the XML Element + */ + public static String transform(final Element xml) { + try { + TransformerFactory transFactory = TransformerFactory.newInstance(); + + Transformer transformer = transFactory.newTransformer(); + + StringWriter buffer = new StringWriter(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + transformer.transform(new DOMSource(xml), new StreamResult(buffer)); + String str = buffer.toString(); + return str; + } catch (Exception e) { + LOG.error("Problem transforming XML to String", e); + } + + return ""; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIBLOBElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIBLOBElement.java new file mode 100644 index 0000000000000000000000000000000000000000..e3b86db11b8f435bac4765fe728b792e9012bc0f --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIBLOBElement.java @@ -0,0 +1,184 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIBLOBValue; +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.DefBlob; +import leigh.astro.indi.protocol.OneBlob; +import leigh.astro.indi.protocol.OneElement; + +/** + * A class representing a INDI BLOB Element. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDIBLOBElement extends INDIElement { + + /** + * The current value of the BLOB Element. + */ + private INDIBLOBValue value; + + /** + * The current desired value of the BLOB Element. + */ + private INDIBLOBValue desiredValue; + + /** + * A UI component that can be used in graphical interfaces for this BLOB + * Element. + */ + private INDIElementListener uiComponent; + + /** + * Constructs an instance of INDIBLOBElement. Usually called + * from a INDIProperty. + * + * @param xml A XML Element <defBLOB> describing the BLOB + * Element. + * @param property The INDIProperty to which the Element belongs. + */ + protected INDIBLOBElement(DefBlob xml, INDIBLOBProperty property) { + super(xml, property); + + desiredValue = null; + + value = new INDIBLOBValue(new byte[0], ""); + } + + @Override + public INDIBLOBValue getValue() { + return value; + } + + /** + * Sets the current value of this BLOB Element. It is assummed that the XML + * Element is really describing the new value for this particular BLOB + * Element. + *

+ * This method will notify the change of the value to the listeners. + *

+ * Throws IllegalArgumentException if the xml is not well + * formed (no size, no format or incorrectly coded data + * + * @param xml A XML Element <oneBLOB> describing the Element. + */ + @Override + public void setValue(OneElement xml) { + value = new INDIBLOBValue((OneBlob) xml); + + notifyListeners(); + } + + @Override + public INDIElementListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIElementListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createBlobElementView(this, getProperty().getPermission()); + addINDIElementListener(uiComponent); + return uiComponent; + } + + /** + * Checks if a desired value would be correct to be applied to the BLOB + * Element. + * + * @param valueToCheck The value to be checked. + * @return true if the valueToCheck is a + * INDIBLOBValue. false otherwise + * @throws INDIValueException if valueToCheck is null. + */ + @Override + public boolean checkCorrectValue(Object valueToCheck) throws INDIValueException { + if (valueToCheck == null) { + throw new IllegalArgumentException("null value"); + } + if (!(valueToCheck instanceof INDIBLOBValue)) { + return false; + } + return true; + } + + @Override + public String getNameAndValueAsString() { + return getName() + " - BLOB format: " + this.getValue().getFormat() + " - BLOB Size: " + this.getValue().getSize(); + } + + @Override + public INDIBLOBValue getDesiredValue() { + return desiredValue; + } + + @Override + public void setDesiredValue(Object desiredValue) throws INDIValueException { + INDIBLOBValue b = null; + try { + b = (INDIBLOBValue) desiredValue; + } catch (ClassCastException e) { + throw new INDIValueException(this, "Value for a BLOB Element must be a INDIBLOBValue"); + } + + this.desiredValue = b; + } + + @Override + public boolean isChanged() { + return desiredValue != null; + } + + /** + * Returns the XML code <oneBLOB> representing this BLOB Element with + * a new desired value (a INDIBLOBValue). Resets the desired + * value. + * + * @return the XML code <oneBLOB> representing the BLOB + * Element with a new value. + * @see #setDesiredValue + */ + @Override + protected OneElement getXMLOneElementNewValue() { + INDIBLOBValue ibv = desiredValue; + + OneBlob result = new OneBlob().setName(getName()).setByteContent(value.getBlobData()).setFormat(ibv.getFormat()); + + desiredValue = null; + + return result; + } + + @Override + public String toString() { + if (this.getValue().getSize() > 0) { + return this.getValue().getFormat() + " (" + this.getValue().getSize() + " bytes)"; + } + + return ""; + } + + @Override + public String getValueAsString() { + return "BLOB format: " + this.getValue().getFormat() + " - BLOB Size: " + this.getValue().getSize(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIBLOBProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIBLOBProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..5ccb03b6efef68110a364fdc6af702d330ad8f25 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIBLOBProperty.java @@ -0,0 +1,109 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.*; + +/** + * A class representing a INDI BLOB Property. + *

+ * It implements a listener mechanism to notify changes in its Elements. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDIBLOBProperty extends INDIProperty { + + /** + * A UI component that can be used in graphical interfaces for this BLOB + * Property. + */ + private INDIPropertyListener uiComponent; + + /** + * Constructs an instance of INDIBLOBProperty. + * INDIBLOBPropertys are not usually directly instantiated. + * Usually used by INDIDevice. + * + * @param xml A XML Element <defBLOBVector> describing + * the Property. + * @param device The INDIDevice to which this Property belongs. + */ + protected INDIBLOBProperty(DefBlobVector xml, INDIDevice device) { + super(xml, device); + + for (DefElement element : xml.getElements()) { + if (element instanceof DefBlob) { + String name = element.getName(); + + INDIElement iel = getElement(name); + + if (iel == null) { // Does not exist + INDIBLOBElement ite = new INDIBLOBElement((DefBlob) element, this); + addElement(ite); + } + } + + } + } + + @Override + protected void update(SetVector xml) { + super.update(xml, OneBlob.class); + } + + /** + * Gets the opening XML Element <newBLOBVector> for this Property. + * + * @return the opening XML Element <newBLOBVector> for this Property. + */ + @Override + protected NewVector getXMLPropertyChangeInit() { + return new NewBlobVector(); + + } + + @Override + public INDIPropertyListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIPropertyListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createBlobPropertyView(this); + addINDIPropertyListener(uiComponent); + + return uiComponent; + } + + /** + * Gets a particular Element of this Property by its name. + * + * @param name The name of the Element to be returned + * @return The Element of this Property with the given name. + * null if there is no Element with that + * name. + */ + @Override + public INDIBLOBElement getElement(String name) { + return super.getElement(name); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIDevice.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIDevice.java new file mode 100644 index 0000000000000000000000000000000000000000..cfc3380410abf088bfd745966955338f7100e426 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIDevice.java @@ -0,0 +1,622 @@ +package leigh.astro.indi.client; + +/* + * #%L INDI for Java Client Library %% Copyright (C) 2013 - 2014 indiforjava %% + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Lesser Public License for more details. You should have received a copy of + * the GNU General Lesser Public License along with this program. If not, see + * . #L% + */ + +import leigh.astro.indi.base.Constants; +import leigh.astro.indi.base.Constants.BLOBEnables; +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.*; + +import static leigh.astro.indi.base.INDIDateFormat.dateFormat; + +/** + * A class representing a INDI Device. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + * @author Richard van Nieuwenhoven + */ +public class INDIDevice { + + /** + * A logger for the errors. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIDevice.class); + + /** + * The name of the Device. + */ + private String name; + + /** + * The Server Connection to which this Device Belongs. + */ + private INDIServerConnection server; + + /** + * The collection of properties for this Device. + */ + private Map> properties; + + /** + * The list of Listeners of this Device. + */ + private List listeners; + + /** + * A UI component that can be used in graphical interfaces for this Device. + */ + private INDIDeviceListener uiComponent; + + /** + * The timestamp for the last message. + */ + private Date timestamp; + + /** + * The last message of this Device. + */ + private String message; + + /** + * The number of BLOBProperties in this Device. + */ + private int blobCount; + + /** + * Constructs an instance of INDIDevice. Usually called from a + * INDIServerConnection. + * + * @param name the name of this Device + * @param server the Server Connection of this Device + * @see INDIServerConnection + */ + protected INDIDevice(String name, INDIServerConnection server) { + this.name = name; + this.server = server; + + properties = new LinkedHashMap>(); + + listeners = new ArrayList(); + + timestamp = new Date(); + message = ""; + blobCount = 0; + } + + /** + * Adds a new listener to this Device. + * + * @param listener the listener to be added. + */ + public void addINDIDeviceListener(INDIDeviceListener listener) { + listeners.add(listener); + } + + /** + * Removes a listener from this Device. + * + * @param listener the listener to be removed. + */ + public void removeINDIDeviceListener(INDIDeviceListener listener) { + listeners.remove(listener); + } + + /** + * Notifies the listeners of a new INDIProperty. + * + * @param property The new property + */ + private void notifyListenersNewProperty(INDIProperty property) { + for (INDIDeviceListener l : new ArrayList<>(listeners)) { + l.newProperty(this, property); + } + } + + /** + * Notifies the listeners of a removed INDIProperty. + * + * @param property The removed property + */ + private void notifyListenersDeleteProperty(INDIProperty property) { + for (INDIDeviceListener l : new ArrayList<>(listeners)) { + + l.removeProperty(this, property); + } + } + + /** + * Notifies the listeners that the message of this Device has changed. + */ + private void notifyListenersMessageChanged() { + for (INDIDeviceListener l : new ArrayList<>(listeners)) { + l.messageChanged(this); + } + } + + /** + * Sends the appropriate message to the Server to establish a particular + * BLOB policy (BLOBEnable) for the Device. + * + * @param enable The BLOB policy. + * @throws IOException if there is some problem sending the message. + */ + public void blobsEnable(BLOBEnables enable) throws IOException { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setTextContent(Constants.getBLOBEnableAsString(enable))); + } + + /** + * Sends the appropriate message to the Server to establish a particular + * BLOB policy (BLOBEnable) for the Device and a particular Property. + * + * @param enable The BLOB policy. + * @param property The Property of the Device to listen to. + * @throws IOException if there is some problem sending the message. + */ + public void blobsEnable(BLOBEnables enable, INDIProperty property) throws IOException { + if (properties.containsValue(property) && property instanceof INDIBLOBProperty) { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setName(property.getName()).setTextContent(Constants.getBLOBEnableAsString(enable))); + } + } + + /** + * Sends the appropriate message to the Server to disallow the receipt of + * BLOB property changes. + * + * @throws IOException if there is some problem sending the message. + * @deprecated Replaced by + * {@link #blobsEnable(Constants.BLOBEnables)} + */ + @Deprecated + public void blobsEnableNever() throws IOException { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setTextContent("Never")); + } + + /** + * Sends the appropriate message to the Server to allow the receipt of BLOB + * property changes along with any other property types. + * + * @throws IOException if there is some problem sending the message. + * @deprecated Replaced by + * {@link #blobsEnable(Constants.BLOBEnables)} + */ + @Deprecated + public void blobsEnableAlso() throws IOException { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setTextContent("Also")); + } + + /** + * Sends the appropriate message to the Server to allow the receipt of just + * BLOB property changes. + * + * @throws IOException if there is some problem sending the message. + * @deprecated Replaced by + * {@link #blobsEnable(Constants.BLOBEnables)} + */ + @Deprecated + public void blobsEnableOnly() throws IOException { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setTextContent("Only")); + } + + /** + * Sends the appropriate message to the Server to disallow the receipt of a + * particular BLOB property changes. + * + * @param property the BLOB property + * @throws IOException if there is some problem sending the message. + * @deprecated Replaced by + * {@link #blobsEnable(Constants.BLOBEnables, INDIProperty)} + */ + @Deprecated + public void blobsEnableNever(INDIBLOBProperty property) throws IOException { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setName(property.getName()).setTextContent("Never")); + } + + /** + * Sends the appropriate message to the Server to allow the receipt of a + * particular BLOB property changes along with any other property types. + * + * @param property the BLOB property + * @throws IOException if there is some problem sending the message. + * @deprecated Replaced by + * {@link #blobsEnable(Constants.BLOBEnables, INDIProperty)} + */ + @Deprecated + public void blobsEnableAlso(INDIBLOBProperty property) throws IOException { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setName(property.getName()).setTextContent("Also")); + } + + /** + * Sends the appropriate message to the Server to allow the receipt of just + * a particular BLOB property changes. + * + * @param property the BLOB property + * @throws IOException if there is some problem sending the message. + * @deprecated Replaced by + * {@link #blobsEnable(Constants.BLOBEnables, INDIProperty)} + */ + @Deprecated + public void blobsEnableOnly(INDIBLOBProperty property) throws IOException { + sendMessageToServer(new EnableBLOB().setDevice(getName()).setName(property.getName()).setTextContent("Only")); + } + + /** + * Gets the last message received from the Device. + * + * @return the last message received. + */ + public String getLastMessage() { + return message; + } + + /** + * Gets the timestamp of the last received message. + * + * @return the timestamp of the last received message. + */ + public Date getTimestamp() { + return timestamp; + } + + /** + * Gets the name of the Device. + * + * @return the name of the Device. + */ + public String getName() { + return name; + } + + /** + * Processes a XML message received for this Device and stores and notifies + * the listeners if there is some message attribute in them. + * + * @param xml the XML message to be processed. + */ + protected void messageReceived(INDIProtocol xml) { + if (xml.hasMessage()) { + String time = xml.getTimestamp(); + + timestamp = dateFormat().parseTimestamp(time); + + message = xml.getMessage(); + + notifyListenersMessageChanged(); + } + } + + /** + * Processes a XML <delProperty>. It removes the appropriate Property + * from the list of Properties. + * + * @param xml the XML message to be processed. + */ + protected void deleteProperty(DelProperty xml) { + String propertyName = xml.getName(); + + if (!(propertyName.length() == 0)) { + messageReceived(xml); + + INDIProperty p = getProperty(propertyName); + + if (p != null) { + removeProperty(p); + } + } + } + + /** + * This function waits until a Property with a propertyName + * exists in this device and returns it. The wait is dinamic, so it should + * be called from a different Thread or the app will freeze until the + * property exists. + * + * @param propertyName The propertyName of the Property to wait for. + * @return The Property once it exists in this device. + */ + public INDIProperty waitForProperty(String propertyName) { + return waitForProperty(propertyName, Integer.MAX_VALUE); + } + + /** + * This function waits until a Property with a propertyName + * exists in this device and returns it. The wait is dinamic, so it should + * be called from a different Thread or the app will freeze until the + * property exists or the maxWait number of seconds have + * elapsed. + * + * @param propertyName The propertyName of the Property to wait for. + * @param maxWait Maximum number of seconds to wait for the Property + * @return The Property once it exists in this Device or null + * if the maximum wait is achieved. + */ + public INDIProperty waitForProperty(String propertyName, int maxWait) { + INDIProperty p = null; + + long startTime = new Date().getTime(); + boolean timeElapsed = false; + + while (p == null && !timeElapsed) { + p = this.getProperty(propertyName); + + if (p == null) { + try { + Thread.sleep(Constants.WAITING_INTERVAL); + } catch (InterruptedException e) { + LOG.warn("sleep interrupted", e); + } + } + + long endTime = new Date().getTime(); + + if ((endTime - startTime) / Constants.MILLISECONDS_IN_A_SECOND > maxWait) { + timeElapsed = true; + } + } + + return p; + } + + /** + * Processes a XML <setXXXVector>. It updates the appropiate Property. + * + * @param xml the XML message to be processed. + */ + protected void updateProperty(SetVector xml) { + String propertyName = xml.getName(); + + if (!propertyName.isEmpty()) { + // check message + messageReceived(xml); + + INDIProperty p = getProperty(propertyName); + + if (p != null) { // If it does not exist else ignore + if (p instanceof INDITextProperty && xml instanceof SetTextVector) { + p.update(xml); + } else if (p instanceof INDINumberProperty && xml instanceof SetNumberVector) { + p.update(xml); + } else if (p instanceof INDISwitchProperty && xml instanceof SetSwitchVector) { + p.update(xml); + } else if (p instanceof INDILightProperty && xml instanceof SetLightVector) { + p.update(xml); + } else if (p instanceof INDIBLOBProperty && xml instanceof SetBlobVector) { + p.update(xml); + } + } + } + } + + /** + * Processes a XML <newXXXVector>. It creates and adds the appropiate + * Property. + * + * @param xml The XML message to be processed. + */ + protected void addProperty(DefVector xml) { + String propertyName = xml.getName(); + + if (!propertyName.isEmpty()) { + messageReceived(xml); + + INDIProperty p = getProperty(propertyName); + + if (p == null) { // If it does not exist + try { + if (xml instanceof DefSwitchVector) { + INDISwitchProperty sp = new INDISwitchProperty((DefSwitchVector) xml, this); + addProperty(sp); + notifyListenersNewProperty(sp); + } else if (xml instanceof DefTextVector) { + INDITextProperty tp = new INDITextProperty((DefTextVector) xml, this); + addProperty(tp); + notifyListenersNewProperty(tp); + } else if (xml instanceof DefNumberVector) { + INDINumberProperty np = new INDINumberProperty((DefNumberVector) xml, this); + addProperty(np); + notifyListenersNewProperty(np); + } else if (xml instanceof DefLightVector) { + INDILightProperty lp = new INDILightProperty((DefLightVector) xml, this); + addProperty(lp); + notifyListenersNewProperty(lp); + } else if (xml instanceof DefBlobVector) { + INDIBLOBProperty bp = new INDIBLOBProperty((DefBlobVector) xml, this); + addProperty(bp); + notifyListenersNewProperty(bp); + } + } catch (IllegalArgumentException e) { + LOG.error("Some problem with the parameters", e); + } + } + } + } + + /** + * Gets the number of BLOB properties in this Device. + * + * @return the number of BLOB properties in this Device. + */ + public int getBLOBCount() { + return blobCount; + } + + /** + * Adds a Property to the properties list and updates the BLOB count if + * necessary. + * + * @param property The property to be added. + */ + private void addProperty(INDIProperty property) { + properties.put(property.getName(), property); + + if (property instanceof INDIBLOBProperty) { + blobCount++; + } + } + + /** + * Removes a Property from the properties list and updates the BLOB count if + * necessary. + * + * @param property The property to be removed. + */ + private void removeProperty(INDIProperty property) { + properties.remove(property.getName()); + + if (property instanceof INDIBLOBProperty) { + blobCount--; + } + + notifyListenersDeleteProperty(property); + } + + /** + * Gets the Server Connection of this Device. + * + * @return the Server Connection of this Device. + */ + public INDIServerConnection getServer() { + return server; + } + + /** + * Gets a Property by its propertyName. + * + * @param propertyName the propertyName of the Property to be retrieved. + * @return the Property with the propertyName or + * null if there is no Property with that propertyName. + */ + public INDIProperty getProperty(String propertyName) { + return properties.get(propertyName); + } + + /** + * Gets a list of group names for all the properties. + * + * @return the list of group names for all the properties of the device. + */ + public List getGroupNames() { + ArrayList groupNames = new ArrayList(); + for (INDIProperty p : properties.values()) { + String groupName = p.getGroup(); + + if (!groupNames.contains(groupName)) { + groupNames.add(groupName); + } + } + return groupNames; + } + + /** + * Gets a list of all the properties of the device. + * + * @return the list of Properties belonging to the device + */ + public List> getAllProperties() { + return new ArrayList>(properties.values()); + } + + /** + * Gets a list of properties belonging to a group. + * + * @param groupName the name of the group + * @return the list of Properties belonging to the group + */ + public List> getPropertiesOfGroup(String groupName) { + ArrayList> props = new ArrayList>(); + + for (INDIProperty p : props) { + if (p.getGroup().compareTo(groupName) == 0) { + props.add(p); + } + } + return props; + } + + /** + * A convenience method to get the Element of a Property by specifiying + * their names. + * + * @param propertyName the name of the Property. + * @param elementName the name of the Element. + * @return the Element with elementName as name of the property + * with propertyName as name. + */ + public INDIElement getElement(String propertyName, String elementName) { + INDIProperty p = getProperty(propertyName); + + if (p == null) { + return null; + } + + return p.getElement(elementName); + } + + /** + * Sends a XML message to the Server. + * + * @param xmlMessage the message to be sent. + * @throws IOException if there is some problem with the connection to the server. + */ + protected void sendMessageToServer(INDIProtocol xmlMessage) throws IOException { + server.sendMessageToServer(xmlMessage); + } + + /** + * Gets a default UI component to handle the repesentation and control of + * this Device. The panel is registered as a listener of this Device. Please + * note that the UI class must implement INDIDeviceListener. The component + * will be chosen depending on the loaded UI libraries (I4JClientUI, + * I4JAndroid, etc). Note that a casting of the returned value must be done. + * If a previous component has been asked, it will be dregistered as a + * listener. So, only one default component will listen to the device. + * + * @return A UI component that handles this Device. + * @throws INDIException if no uiComponent is found in the classpath. + */ + public INDIDeviceListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIDeviceListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createDeviceView(this); + addINDIDeviceListener(uiComponent); + return uiComponent; + } + + /** + * Gets a List with all the Properties of this Device. + * + * @return the List of Properties belonging to this Device. + */ + public List> getPropertiesAsList() { + return new ArrayList>(properties.values()); + } + + /** + * Gets the names of the Properties of this Device. + * + * @return the names of the Properties of this Device. + */ + public String[] getPropertyNames() { + List names = new ArrayList<>(); + for (INDIProperty indiProperty : properties.values()) { + names.add(indiProperty.getName()); + } + return names.toArray(new String[names.size()]); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIDeviceListener.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIDeviceListener.java new file mode 100644 index 0000000000000000000000000000000000000000..9e46c2422e96cb076a4a7768e3d34a72dc5b8807 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIDeviceListener.java @@ -0,0 +1,54 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * A interface to be notified about changes in a INDIDevice. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public interface INDIDeviceListener { + + /** + * Called when a new Property is added to the Device. + * + * @param device The Device on which the Property has been addded. + * @param property The Property that has been added. + */ + void newProperty(INDIDevice device, INDIProperty property); + + /** + * Called when a Property is removed from a Device. + * + * @param device The Device to which the Property has been removed. + * @param property The Property that has been removed. + */ + void removeProperty(INDIDevice device, INDIProperty property); + + /** + * Called when the message for a Device has changed. + * + * @param device The device to which the message has changed. + */ + void messageChanged(INDIDevice device); +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIElement.java new file mode 100644 index 0000000000000000000000000000000000000000..f77eebc75fd114a7ce8bb0dfc0828d45c846529b --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIElement.java @@ -0,0 +1,241 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.DefElement; +import leigh.astro.indi.protocol.OneElement; + +import java.util.ArrayList; + +/** + * A class representing a INDI Element. The subclasses + * INDIBLOBElement, INDILightElement, + * INDINumberElement, INDISwitchElement and + * INDITextElement define the basic Elements that a INDI Property + * may contain according to the INDI protocol. + *

+ * It implements a listener mechanism to notify changes in its value. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public abstract class INDIElement { + + /** + * The property to which this Element belongs. + */ + private INDIProperty property; + + /** + * The name of the Element. + */ + private String name; + + /** + * The label of the Element. + */ + private String label; + + /** + * The list of listeners of this Element. + */ + private ArrayList listeners; + + /** + * Constructs an instance of INDIElement. Called by its + * sub-classes. INDIElements are not usually directly + * instantiated. Usually used by INDIProperty. Throws + * IllegalArgumentException if the XML Element is not well formed (does not + * contain a name attribute). + * + * @param xml A XML Element <defXXX> describing the + * Element. + * @param property The INDIProperty to which this Element belongs. + */ + protected INDIElement(DefElement xml, INDIProperty property) { + this.property = property; + + name = xml.getName(); + + if (name.length() == 0) { + throw new IllegalArgumentException("No name for Element"); + } + + label = xml.getLabel(); + + if (label.length() == 0) { // If empty we use the name + label = name; + } + + listeners = new ArrayList(); + } + + /** + * Adds a new listener that will be notified on this Element value changes. + * + * @param listener The listener to add. + */ + public void addINDIElementListener(INDIElementListener listener) { + listeners.add(listener); + } + + /** + * Removes a listener from the listeners list. This listener will no longer + * be notified of changes of this Element. + * + * @param listener The listener to remove. + */ + public void removeINDIElementListener(INDIElementListener listener) { + listeners.remove(listener); + } + + /** + * Notifies the listeners about changes of the value of the Element. + */ + protected void notifyListeners() { + for (INDIElementListener l : new ArrayList<>(listeners)) { + l.elementChanged(this); + } + } + + /** + * Gets the label of the Element. + * + * @return The label of the Element. + */ + public String getLabel() { + return label; + } + + /** + * Gets the name of the Element. + * + * @return The name of the Element. + */ + public String getName() { + return name; + } + + /** + * Gets the Property to which this Element belongs. + * + * @return The property to which this Element belongs. + */ + public INDIProperty getProperty() { + return property; + } + + /** + * Gets the current value of the Element. + * + * @return The current value of the Element. + */ + public abstract Object getValue(); + + /** + * Gets the current value of the Element as a String. + * + * @return The current value of the Element as a String. + */ + public abstract String getValueAsString(); + + /** + * Sets the current value of the Element. It is assummed that the XML + * Element is really describing the new value for this particular Element. + *

+ * This method will notify the change of the value to the listeners. + * + * @param xml A XML Element <oneXXX> describing the Element. + */ + protected abstract void setValue(OneElement xml); + + /** + * Gets the desired value of the Element. + * + * @return The current desiredvalue of the Element. null if it + * is not setted. + */ + public abstract Object getDesiredValue(); + + /** + * Sets the desired value of the Element to desiredValue. + * + * @param desiredValue The desired value for the property. + * @throws INDIValueException if the desiredValue is not of the correct type + * for the Element. + */ + public abstract void setDesiredValue(Object desiredValue) throws INDIValueException; + + /** + * Returns true if the desiredValue has been + * setted (and thus if it should be send to the Driver). + * + * @return true if the desiredValue has been setted. + * false otherwise. + */ + public abstract boolean isChanged(); + + /** + * Gets a default UI component to handle the repesentation and control of + * this Element. The panel is registered as a listener of this Element. + * Please note that the UI class must implement INDIElementListener. The + * component will be chosen depending on the loaded UI libraries + * (I4JClientUI, I4JAndroid, etc). Note that a casting of the returned value + * must be done. If a previous UI element has been asked, it will be + * discarded and de-registered as listener. So, only one default UI element + * will be active. + * + * @return A UI component that handles this Element. + * @throws INDIException if there is a problem instantiating the Component. + */ + public abstract INDIElementListener getDefaultUIComponent() throws INDIException; + + /** + * Checks if a desired value would be correct to be applied to the Element + * according to its definition and limits. + * + * @param desiredValue The value to be checked. + * @return true if the desiredValue would be + * acceptable to be applied to the element. false + * otherwise. + * @throws INDIValueException if the desiredValue is not correct. + */ + public abstract boolean checkCorrectValue(Object desiredValue) throws INDIValueException; + + /** + * Returns the XML code <oneXXX> representing this Element with a new + * desired value). The desired value is reseted. + * + * @return the XML code <oneXXX> representing the Element + * with a new value. + * @see #setDesiredValue + */ + protected abstract OneElement getXMLOneElementNewValue(); + + /** + * Gets the name of the element and its current value. + * + * @return a String with the name of the Element and Its Value + */ + public abstract String getNameAndValueAsString(); +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIElementListener.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIElementListener.java new file mode 100644 index 0000000000000000000000000000000000000000..61fe682b7f47afaf4932a58ca924028a88f8a5d5 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIElementListener.java @@ -0,0 +1,38 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * A interface to be notified about changes in a INDIElement. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public interface INDIElementListener { + + /** + * The method that will be called when a INDIElement changes. + * + * @param element the element that has changed. + */ + void elementChanged(INDIElement element); +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDILightElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDILightElement.java new file mode 100644 index 0000000000000000000000000000000000000000..fd61b569cfb9f76400bf2591c7165323a14f2d7c --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDILightElement.java @@ -0,0 +1,176 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.Constants.LightStates; +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.DefLight; +import leigh.astro.indi.protocol.OneElement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A class representing a INDI Light Element. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDILightElement extends INDIElement { + + /** + * A logger for the errors. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDILightElement.class); + + /** + * Current State value for this Light Element. + */ + private LightStates state; + + /** + * A UI component that can be used in graphical interfaces for this Light + * Element. + */ + private INDIElementListener uiComponent; + + /** + * Constructs an instance of INDILightElement. Usually called + * from a INDIProperty. Throws IllegalArgumentException if the + * XML Element is not well formed or the value is not a valid one. + * + * @param xml A XML Element <defLight> describing the + * Light Element. + * @param property The INDIProperty to which the Element belongs. + */ + protected INDILightElement(DefLight xml, INDILightProperty property) { + super(xml, property); + setValue(xml.getTextContent()); + } + + @Override + public LightStates getValue() { + return state; + } + + /** + * Sets the current value of this Light Element. It is assummed that the XML + * Element is really describing the new value for this particular Light + * Element. Throws IllegalArgumentException if the xml is not + * well formed (the light status is not correct). + *

+ * This method will notify the change of the value to the listeners. + * + * @param xml A XML Element <oneLight> describing the Element. + */ + @Override + protected void setValue(OneElement xml) { + setValue(xml.getTextContent()); + notifyListeners(); + } + + /** + * Sets the state of the Light Element. Throws IllegalArgumentException if + * the new state is not correct ("Idle" or "Ok" or "Busy" or "Alert"). + * + * @param newState The new state of the Light Element + */ + private void setValue(String newState) { + if (newState.compareTo("Idle") == 0) { + state = LightStates.IDLE; + } else if (newState.compareTo("Ok") == 0) { + state = LightStates.OK; + } else if (newState.compareTo("Busy") == 0) { + state = LightStates.BUSY; + } else if (newState.compareTo("Alert") == 0) { + state = LightStates.ALERT; + } else { + throw new IllegalArgumentException("Illegal Light Status"); + } + } + + @Override + public INDIElementListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIElementListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createLightElementView(this, getProperty().getPermission()); + + addINDIElementListener(uiComponent); + + return uiComponent; + } + + /** + * Always returns true. This method should never be called as lights cannot + * be setted by a client. + * + * @param desiredValue DO NOT USE + * @return true + * @throws INDIValueException NEVER THROWN + */ + @Override + public boolean checkCorrectValue(Object desiredValue) throws INDIValueException { + return true; // Nothing to check + } + + @Override + public String getNameAndValueAsString() { + return getName() + " - " + getValue(); + } + + @Override + public Object getDesiredValue() { + throw new UnsupportedOperationException("Lights have no desired value"); + } + + @Override + public void setDesiredValue(Object desiredValue) throws INDIValueException { + throw new INDIValueException(this, "Lights cannot be set."); + } + + @Override + public boolean isChanged() { + return false; // Lights cannot be changed + } + + /** + * Always returns an empty "" String. This method should never + * be called as lights cannot be setted by a client. + * + * @return ""; + */ + @Override + protected OneElement getXMLOneElementNewValue() { + LOG.error("changed but not possible, it should not be possible to change a light!"); + return null; + } + + @Override + public String toString() { + return getName() + ": " + getValue(); + } + + @Override + public String getValueAsString() { + return getValue() + ""; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDILightProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDILightProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..faa54edba9fa7802af6efc80edc896b37d649fb5 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDILightProperty.java @@ -0,0 +1,139 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.Constants.PropertyPermissions; +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A class representing a INDI Light Property. + *

+ * It implements a listener mechanism to notify changes in its Elements. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDILightProperty extends INDIProperty { + + /** + * A logger for the errors. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDILightProperty.class); + + /** + * A UI component that can be used in graphical interfaces for this Light + * Property. + */ + private INDIPropertyListener uiComponent; + + /** + * Constructs an instance of INDILightProperty. + * INDILightPropertys are not usually directly instantiated. + * Usually used by INDIDevice. + * + * @param xml A XML Element <defLightVector> describing + * the Property. + * @param device The INDIDevice to which this Property belongs. + */ + protected INDILightProperty(DefLightVector xml, INDIDevice device) { + super(xml, device); + for (DefElement element : xml.getElements()) { + if (element instanceof DefLight) { + String name = element.getName(); + + INDIElement iel = getElement(name); + + if (iel == null) { // Does not exist + INDILightElement ite = new INDILightElement((DefLight) element, this); + addElement(ite); + } + } + } + } + + @Override + protected void update(SetVector el) { + super.update(el, OneLight.class); + } + + /** + * Always sets the permission to Read Only as lights may not change. + * + * @param permission ignored. + */ + @Override + protected void setPermission(PropertyPermissions permission) { + super.setPermission(PropertyPermissions.RO); + } + + /** + * Sets the timeout to 0 as lights may not change. + * + * @param timeout ignored. + */ + @Override + protected void setTimeout(int timeout) { + super.setTimeout(0); + } + + /** + * Gets an empty String as Light Properties cannot be changed + * by clients. + * + * @return "" a empty String + */ + @Override + protected NewVector getXMLPropertyChangeInit() { + LOG.error("changed but not possible, it should not be possible to change a light!"); + // A light cannot change + return null; + } + + @Override + public INDIPropertyListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIPropertyListener(uiComponent); + } + + uiComponent = INDIViewCreator.getDefault().createLightPropertyView(this); + + addINDIPropertyListener(uiComponent); + + return uiComponent; + } + + /** + * Gets a particular Element of this Property by its name. + * + * @param name The name of the Element to be returned + * @return The Element of this Property with the given name. + * null if there is no Element with that + * name. + */ + @Override + public INDILightElement getElement(String name) { + return super.getElement(name); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDINumberElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDINumberElement.java new file mode 100644 index 0000000000000000000000000000000000000000..314cf865caece5df669b3ec56cbb95bdfc162bb4 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDINumberElement.java @@ -0,0 +1,362 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.base.INDISexagesimalFormatter; +import leigh.astro.indi.protocol.DefNumber; +import leigh.astro.indi.protocol.OneElement; +import leigh.astro.indi.protocol.OneNumber; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Formatter; +import java.util.Locale; + +/** + * A class representing a INDI Number Element. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + * @author C. Alexander Leigh + */ +public class INDINumberElement extends INDIElement { + + /** + * A logger for the errors. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDINumberElement.class); + + /** + * The current value of this Number Element. + */ + private double value; + + /** + * The current desired value for the Element. + */ + private Double desiredValue; + + /** + * The number format of this Number Element. + */ + private String numberFormat; + + /** + * The step for this Number Element. + */ + private double step; + + /** + * A formatter used to parse and format the values. + */ + private INDISexagesimalFormatter sFormatter; + + /** + * A UI component that can be used in graphical interfaces for this Number + * Element. + */ + private INDIElementListener uiComponent; + + /** + * Constructs an instance of INDINumberElement. Usually called + * from a INDIProperty. + * + * @param xml A XML Element <defNumber> describing the + * Number Element. + * @param property The INDIProperty to which the Element belongs. + */ + protected INDINumberElement(DefNumber xml, INDINumberProperty property) { + super(xml, property); + desiredValue = null; + setNumberFormat(xml.getFormat()); + setStep(xml.getStep()); + setValue(xml.getTextContent()); + } + + /** + * Set the number format for this Number Element. + * + * @param newNumberFormat The new number format. + */ + private void setNumberFormat(String newNumberFormat) { + if (newNumberFormat.endsWith("m")) { + sFormatter = new INDISexagesimalFormatter(newNumberFormat); + } + + // Correct for Java format strings. + if (newNumberFormat.equals("%0.f") || newNumberFormat.equals("%.f")) { + newNumberFormat = "%.0f"; + } + + numberFormat = newNumberFormat; + } + + /** + * Gets the number format of this Number Element. + * + * @return the number format of this Number Element. + */ + public String getNumberFormat() { + return numberFormat; + } + + /** + * Gets the step for this Number Element. + * + * @return The step for this Number Element. + */ + public double getStep() { + return step; + } + + /** + * Gets the step for this Number Element formated as a String according to + * the number format. + * + * @return The step for this Number Element formatted as a String. + */ + public String getStepAsString() { + return getNumberAsString(getStep()); + } + + /** + * Gets the value of this Number Element formated as a String according to + * the number format. + * + * @return The value of this Number Element formatted as a String. + */ + @Override + public String getValueAsString() { + return getNumberAsString(getValue()); + } + + /** + * Returns a number formatted according to the Number Format of this Number + * Element. + * + * @param number the number to be formatted. + * @return the number formatted according to the Number Format of this + * Number Element. + */ + private String getNumberAsString(double number) { + String aux; + + if (numberFormat.endsWith("m")) { + aux = sFormatter.format(number); + } else { + Formatter formatter = new Formatter(Locale.US); + LOG.debug("Attempting to format: [format: {}] [num: {}]", getNumberFormat(), number); + aux = formatter.format(getNumberFormat(), number).toString(); + formatter.close(); + } + + return aux; + } + + @Override + public Double getValue() { + return value; + } + + /** + * Sets the current value of this Number Element. It is assummed that the + * XML Element is really describing the new value for this particular Number + * Element. + *

+ * This method will notify the change of the value to the listeners. + *

+ * Throws IllegalArgumentException if the xml is not well + * formed (the value is not a correct number or it is not in the [min, max] + * range). + * + * @param xml A XML Element <oneNumber> describing the Element. + */ + @Override + protected void setValue(OneElement xml) { + setValue(xml.getTextContent()); + notifyListeners(); + } + + /** + * Sets the step of this Number Element. + * + * @param stepS A String with the step value of this Number Element + */ + private void setStep(String stepS) { + step = parseNumber(stepS); + } + + /** + * Sets the value of this Number Element. + * + * @param valueS A String with the new value of this Number Element + */ + private void setValue(String valueS) { + value = parseNumber(valueS); + } + + /** + * Parses a number according to the Number Format of this Number Element. + * Throws IllegalArgumentException if the number is not + * correctly formatted. + * + * @param number The number to be parsed. + * @return the parsed number + */ + private double parseNumber(String number) { + double res; + + if (numberFormat.endsWith("m")) { + res = sFormatter.parseSexagesimal(number); + } else { + try { + res = Double.parseDouble(number); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Number value not correct"); + } + } + + return res; + } + + @Override + public INDIElementListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIElementListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createNumberElementView(this, getProperty().getPermission()); + addINDIElementListener(uiComponent); + + return uiComponent; + } + + /** + * Checks if a desired valueToCheck would be correct to be applied to the + * Number Element. + * + * @param valueToCheck The valueToCheck to be checked (usually a String, but can be a + * Double). + * @return true if the valueToCheck is a valid + * Double or a correct String according to the Number Format. + * false otherwise. + * @throws INDIValueException if valueToCheck is null or if it is + * not a Double or a correctly formatted String. + */ + @Override + public boolean checkCorrectValue(Object valueToCheck) throws INDIValueException { + if (valueToCheck == null) { + throw new INDIValueException(this, "null value"); + } + + double d; + + if (valueToCheck instanceof Double) { + d = ((Double) valueToCheck).doubleValue(); + } else { + if (valueToCheck instanceof String) { + String val = (String) valueToCheck; + try { + d = parseNumber(val); + } catch (IllegalArgumentException e) { + throw new INDIValueException(this, e.getMessage()); + } + } else { + throw new INDIValueException(this, "The number value is not correct (not Double nor String)"); + } + } + + return true; + } + + @Override + public String getNameAndValueAsString() { + return getName() + " - " + this.getValueAsString(); + } + + @Override + public Double getDesiredValue() { + return desiredValue; + } + + @Override + public void setDesiredValue(Object desiredValue) throws INDIValueException { + if (desiredValue instanceof String) { + setDesiredValueAsString((String) desiredValue); + } else if (desiredValue instanceof Double) { + setDesiredValueAsdouble(((Double) desiredValue).doubleValue()); + } else { + throw new INDIValueException(this, "Value for a Number Element must be a String or a Double"); + } + } + + /** + * Sets the desired value from a String. + * + * @param newDesiredValue The new desired Value + * @throws INDIValueException if the desired value not in range + */ + private void setDesiredValueAsString(String newDesiredValue) throws INDIValueException { + double dd = parseNumber(newDesiredValue); + + desiredValue = new Double(dd); + } + + /** + * Sets the desired value from a double. + * + * @param newDesiredValue The new desired Value + * @throws INDIValueException if the desired value not in range + */ + private void setDesiredValueAsdouble(double newDesiredValue) throws INDIValueException { + double dd = newDesiredValue; + + desiredValue = new Double(dd); + } + + @Override + public boolean isChanged() { + return desiredValue != null; + } + + /** + * Returns the XML code <oneNumber> representing this Number Element + * with a new desired value. Resets the desired value. + * + * @return the XML code <oneNumber> representing this + * Number Element with a new value. + * @see #setDesiredValue + */ + @Override + protected OneNumber getXMLOneElementNewValue() { + OneNumber xml = new OneNumber().setName(getName()).setTextContent(Double.toString(desiredValue.doubleValue())); + + desiredValue = null; + + return xml; + } + + @Override + public String toString() { + return this.getNumberAsString(value).trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDINumberProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDINumberProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..38d0b63bd705069520021fb0ed8e9312b171eacb --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDINumberProperty.java @@ -0,0 +1,105 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.*; + +/** + * A class representing a INDI Number Property. + *

+ * It implements a listener mechanism to notify changes in its Elements. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDINumberProperty extends INDIProperty { + + /** + * A UI component that can be used in graphical interfaces for this Number + * Property. + */ + private INDIPropertyListener uiComponent; + + /** + * Constructs an instance of INDINumberProperty. + * INDINumberPropertys are not usually directly instantiated. + * Usually used by INDIDevice. + * + * @param xml A XML Element <defNumberVector> describing + * the Property. + * @param device The INDIDevice to which this Property belongs. + */ + protected INDINumberProperty(DefNumberVector xml, INDIDevice device) { + super(xml, device); + for (DefElement element : xml.getElements()) { + if (element instanceof DefNumber) { + String name = element.getName(); + INDIElement iel = getElement(name); + if (iel == null) { // Does not exist + INDINumberElement ine = new INDINumberElement((DefNumber) element, this); + addElement(ine); + } + } + } + } + + @Override + protected void update(SetVector el) { + super.update(el, OneNumber.class); + } + + /** + * Gets the opening XML Element <newNumberVector> for this Property. + * + * @return the opening XML Element <newNumberVector> for this + * Property. + */ + @Override + protected NewVector getXMLPropertyChangeInit() { + return new NewNumberVector(); + } + + @Override + public INDIPropertyListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIPropertyListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createNumberPropertyView(this); + addINDIPropertyListener(uiComponent); + + return uiComponent; + } + + /** + * Gets a particular Element of this Property by its name. + * + * @param name The name of the Element to be returned + * @return The Element of this Property with the given name. + * null if there is no Element with that + * name. + */ + @Override + public INDINumberElement getElement(String name) { + return super.getElement(name); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..64bf6e1dc6609b597c4a3b72c82f249803101685 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIProperty.java @@ -0,0 +1,513 @@ +package leigh.astro.indi.client; + +/* + * #%L INDI for Java Client Library %% Copyright (C) 2013 - 2014 indiforjava %% + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Lesser Public License for more details. You should have received a copy of + * the GNU General Lesser Public License along with this program. If not, see + * . #L% + */ + +import leigh.astro.indi.base.Constants; +import leigh.astro.indi.base.Constants.PropertyPermissions; +import leigh.astro.indi.base.Constants.PropertyStates; +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.properties.INDIStandardElement; +import leigh.astro.indi.properties.INDIStandardProperty; +import leigh.astro.indi.protocol.DefVector; +import leigh.astro.indi.protocol.NewVector; +import leigh.astro.indi.protocol.OneElement; +import leigh.astro.indi.protocol.SetVector; + +import java.io.IOException; +import java.util.*; + +import static leigh.astro.indi.base.INDIDateFormat.dateFormat; + +/** + * A class representing a INDI Property. The subclasses + * INDIBLOBProperty, INDILightProperty, + * INDINumberProperty, INDISwitchProperty and + * INDITextProperty define the basic Properties that a INDI Devices + * may contain according to the INDI protocol. + *

+ * It implements a listener mechanism to notify changes in its Elements. + * + * @param the elements that occure in the property. + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + * @author C. Alexander Leigh + */ +public abstract class INDIProperty implements Iterable { + + /** + * The INDI Device to which this property belongs. + */ + private INDIDevice device; + + /** + * This property name. + */ + private String name; + + /** + * This property label. + */ + private String label; + + /** + * The group to which this Property might be assigned. + */ + private String group; + + /** + * The current state of this Property. + */ + private PropertyStates state; + + /** + * The permission of this Property. + */ + private PropertyPermissions permission; + + /** + * The timeout of this Property. + */ + private int timeout; + + /** + * A list of elements for this Property. + */ + private Map elements; + + /** + * The list of listeners of this Property. + */ + private List listeners; + + /** + * Constructs an instance of INDIProperty. Called by its + * sub-classes. INDIPropertys are not usually directly + * instantiated. Usually used by INDIDevice. Throws + * IllegalArgumentException if the XML Property is not well formed (does not + * contain a name attribute or the permissions are not + * correct). + * + * @param xml A XML Element <defXXXVector> describing the + * Property. + * @param device The INDIDevice to which this Property belongs. + */ + protected INDIProperty(DefVector xml, INDIDevice device) { + + this.device = device; + name = xml.getName(); + if (name.isEmpty()) { // If no name, ignore + throw new IllegalArgumentException("No name for the Property"); + } + label = xml.getLabel(); + if (label.isEmpty()) { // If no label copy from name + this.label = name; + } + group = xml.getGroup(); + if (group.isEmpty()) { // If no group, create default group + group = "Unsorted"; + } + String sta = xml.getState(); + setState(sta); + if (this instanceof INDITextProperty || this instanceof INDINumberProperty // + || this instanceof INDISwitchProperty || this instanceof INDIBLOBProperty) { + + permission = Constants.parsePropertyPermission(xml.getPerm()); + + String to = xml.getTimeout(); + + if (!to.isEmpty()) { + setTimeout(to); + } else { + timeout = 0; + } + } + + if (this.getClass() == INDILightProperty.class) { + timeout = 0; + permission = PropertyPermissions.RO; + } + + this.elements = new LinkedHashMap(); + + this.listeners = new ArrayList(); + } + + /** + * Updates the values of its elements according to some XML data. Subclasses + * of INDIProperty must implement this method to really do the + * parsing and update (usually calling update(Element, String) + * ). + * + * @param xml A XML Element <setXXXVector> to which the + * property must be updated. + */ + protected abstract void update(SetVector xml); + + /** + * Updates the values of its elements according to some XML data. Subclasses + * of INDIProperty usually call this method from + * update(Element) to really do the parsing and update. + * + * @param xml A XML Element <setXXXVector> to which the + * property must be updated. + * @param childNodesType The real XML type of xml, that is, one of + * <setBLOBVector>, + * <setLightVector>, + * <setNumberVector>, + * <setSwitchVector> or + * <setTextVector>. + */ + protected void update(SetVector xml, Class childNodesType) { + try { + String sta = xml.getState(); + if (!(sta.length() == 0)) { + setState(sta); + } + String to = xml.getTimeout(); + if (!(to == null || to.length() == 0)) { + setTimeout(to); + } + for (OneElement element : xml.getElements()) { + if (childNodesType.isAssignableFrom(element.getClass())) { + String ename = element.getName(); + Element iel = getElement(ename); + if (iel != null) { + // It already exists else ignore + iel.setValue(element); + } + } + } + } catch (IllegalArgumentException e) { + // If there was some problem parsing then set to alert + state = PropertyStates.ALERT; + } + notifyListeners(); + } + + /** + * Sets the state of this property. + * + * @param newState The new state for this Property in form of a String: + * Idle, Ok, Busy or + * Alert. + */ + private void setState(String newState) { + state = Constants.parsePropertyState(newState); + } + + /** + * Sets the current timeout for this Property. Throws + * IllegalArgumentException if the format of the timeout is not correct (a + * positive integer). + * + * @param newTimeout The new current timeout. + */ + private void setTimeout(String newTimeout) { + try { + timeout = Integer.parseInt(newTimeout); + + if (timeout < 0) { + throw new IllegalArgumentException("Illegal timeout for the Property"); + } + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Illegal timeout for the Property"); + } + } + + /** + * Gets the Device that owns this Property. + * + * @return the Device that owns this Property + */ + public INDIDevice getDevice() { + return device; + } + + /** + * Gets the Group to which this property might be assigned. + * + * @return the group to which this property might be assigned. + */ + public String getGroup() { + return group; + } + + /** + * Gets the timeout for this Property. + * + * @return the timeout for this Property. + */ + public int getTimeout() { + return timeout; + } + + /** + * Gets the label for this Property. + * + * @return the label for this Property. + */ + public String getLabel() { + return label; + } + + /** + * Gets the name of this Property. + * + * @return the name of this Property + */ + public String getName() { + return name; + } + + /** + * Gets the number of Elements in this Property. + * + * @return the number of Elements in this Property. + */ + public int getElementCount() { + return elements.size(); + } + + /** + * Gets the Permission of this Property. + * + * @return the Permission of this Property. + */ + public PropertyPermissions getPermission() { + return permission; + } + + /** + * Gets the State of this Property. + * + * @return the State of this Property. + */ + public PropertyStates getState() { + return state; + } + + /** + * Sets the timeout of this property. + * + * @param timeout the new timeout for this Property. + */ + protected void setTimeout(int timeout) { + this.timeout = timeout; + } + + /** + * Sets the State of this Property. The listeners are notified of this + * change. + * + * @param state the new State of this Property. + */ + protected void setState(PropertyStates state) { + this.state = state; + + notifyListeners(); + } + + /** + * Sets the Permission of this Property. + * + * @param permission the new Permission for this Property. + */ + protected void setPermission(PropertyPermissions permission) { + this.permission = permission; + } + + /** + * Adds a new Element to this Property. + * + * @param element the Element to be added. + */ + protected void addElement(Element element) { + elements.put(element.getName(), element); + } + + /** + * Gets a particular Element of this Property by its elementName. + * + * @param elementName The elementName of the Element to be returned + * @return The Element of this Property with the given + * elementName. null if there is no + * Element with that elementName. + */ + public Element getElement(String elementName) { + return elements.get(elementName); + } + + /** + * Gets a particular Element of this Property by its elementName. + * + * @param elementName The elementName of the Element to be returned + * @return The Element of this Property with the given + * elementName. null if there is no + * Element with that elementName. + */ + public Element getElement(INDIStandardElement elementName) { + return elements.get(elementName.name()); + } + + /** + * Gets a particular Element of this Property by its elementName. + * + * @param elementName The elementName of the Element to be returned + * @return The Element of this Property with the given + * elementName. null if there is no + * Element with that elementName. + */ + public Element getElement(INDIStandardProperty elementName) { + return elements.get(elementName.name()); + } + + /** + * Gets a ArrayList with all the Elements of this Property. + * + * @return the ArrayList of Elements belonging to this + * Property. + */ + public List getElementsAsList() { + return new ArrayList(elements.values()); + } + + /** + * Tests and changes the desired values of the the Elements of this + * Property. If there are new desired values for any Elements the XML code + * to produce the change is sent to the INDI Driver. If communication is + * successful the state of the property is set to "Busy". + * + * @throws INDIValueException if some of the desired values are not correct or if the + * Property is Read Only. + * @throws IOException if there is some communication problem with the INDI driver + * connection. + */ + public void sendChangesToDriver() throws INDIValueException, IOException { + if (permission == PropertyPermissions.RO) { + throw new INDIValueException(null, "The property is read only"); + } + int changedElements = 0; + NewVector xml = getXMLPropertyChangeInit(); + for (Element el : this) { + if (el.isChanged()) { + changedElements++; + xml.getElements().add(el.getXMLOneElementNewValue()); + } + } + if (changedElements > 0) { + setState(PropertyStates.BUSY); + xml.setDevice(getDevice().getName()); + xml.setName(getName()); + xml.setTimestamp(dateFormat().getCurrentTimestamp()); + device.sendMessageToServer(xml); + } + } + + /** + * Adds a new listener to this Property. + * + * @param listener the listener to be added. + */ + public void addINDIPropertyListener(INDIPropertyListener listener) { + listeners.add(listener); + } + + /** + * Removes a listener from this Property. + * + * @param listener the listener to be removed. + */ + public void removeINDIPropertyListener(INDIPropertyListener listener) { + listeners.remove(listener); + } + + /** + * Notifies all the listeners about the changes in the Property. + */ + private void notifyListeners() { + for (INDIPropertyListener l : new ArrayList(listeners)) { + l.propertyChanged(this); + } + } + + /** + * Gets the opening XML Element <newXXXVector> for this Property. + * + * @return the opening XML Element <newXXXVector> for this Property. + */ + protected abstract NewVector getXMLPropertyChangeInit(); + + /** + * Gets a default UI component to handle the repesentation and control of + * this Property. The panel is registered as a listener of this Property. + * Please note that the UI class must implement INDIPropertyListener. The + * component will be chosen depending on the loaded UI libraries + * (I4JClientUI, I4JAndroid, etc). Note that a casting of the returned value + * must be done. If a previous default component has been requested, the + * previous one will be deregistered. So, only one default component will + * listen for the property. + * + * @return A UI component that handles this Property. + * @throws INDIException if there is a problem instantiating an UI component for a + * Property. + */ + public abstract INDIPropertyListener getDefaultUIComponent() throws INDIException; + + /** + * Gets the names of the Elements of this Property. + * + * @return the names of the Elements of this Property. + */ + public String[] getElementNames() { + List names = new ArrayList<>(); + for (Element l : this) { + names.add(l.getName()); + } + return names.toArray(new String[names.size()]); + } + + /** + * Returns a String with the name of the Property, its state and its + * elements and values. + * + * @return a String representation of the property and its values. + */ + public String getNameStateAndValuesAsString() { + StringBuffer aux = new StringBuffer(getName()).append(" - ").append(getState()).append("\n"); + for (Element l : this) { + aux.append(" ").append(l.getNameAndValueAsString()).append("\n"); + } + return aux.toString(); + } + + /** + * Gets the values of the Property as a String. + * + * @return A String representation of the value of the Property. + */ + public String getValuesAsString() { + StringBuffer aux = new StringBuffer("["); + for (Element l : this) { + if (aux.length() > 1) { + aux.append(','); + } + aux.append(l); + } + return aux.append("]").toString(); + } + + @Override + public Iterator iterator() { + return elements.values().iterator(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIPropertyListener.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIPropertyListener.java new file mode 100644 index 0000000000000000000000000000000000000000..c6716a30d48813ee347ed2b7c27e686242869e20 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIPropertyListener.java @@ -0,0 +1,38 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * A interface to be notified about changes in a INDIProperty. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public interface INDIPropertyListener { + + /** + * The method that will be called when a INDIProperty changes. + * + * @param property the property that has changed. + */ + void propertyChanged(INDIProperty property); +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIServerConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIServerConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..3077135a9911dd64139ebfc54f755b7833d91a2b --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIServerConnection.java @@ -0,0 +1,648 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.Constants; +import leigh.astro.indi.base.INDIProtocolParser; +import leigh.astro.indi.base.INDIProtocolReader; +import leigh.astro.indi.protocol.*; +import leigh.astro.indi.protocol.api.INDIConnection; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.url.INDIURLStreamHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Closeable; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.*; + +import static leigh.astro.indi.base.INDIDateFormat.dateFormat; + +/** + * A class representing a INDI Server Connection. Usually this is the entry + * point for any INDI Client to connect to the server, retrieve all devices and + * properties and so on. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + * @author Richard van Nieuwenhoven + * @author C. Alexander Leigh + */ +public class INDIServerConnection implements INDIProtocolParser, Closeable { + + /** + * The logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIServerConnection.class); + + /** + * The url of the Connection. + */ + private final URL indiUrl; + /** + * The set of the devices associated to this Connection. + */ + private final Map devices = new LinkedHashMap(); + /** + * The socket used in the Connection. + */ + private INDIConnection connection = null; + /** + * A reader to read from the Connection. + */ + private INDIProtocolReader reader = null; + /** + * The list of Listeners of this Connection. + */ + private List listeners = new ArrayList(); + + /** + * Constructs an instance of INDIServerConnection. The + * Connection is NOT stablished. + * + * @param name The elementName of the Connection. + * @param host The host of the Connection. + * @param port The port of the Connection. + */ + public INDIServerConnection(String name, String host, int port) { + this(host, port); + } + + /** + * Constructs an instance of INDIServerConnection with no + * elementName. The Connection is NOT stablished. + * + * @param host The host of the Connection. + * @param port The port of the Connection. + */ + public INDIServerConnection(String host, int port) { + try { + indiUrl = new URL(INDIURLStreamHandler.PROTOCOL, host, port, "/"); + } catch (MalformedURLException e) { + throw new IllegalArgumentException("illegal indi url", e); + } + } + + /** + * Constructs an instance of INDIServerConnection with no + * elementName. The parameter can take the form of an indi uri. If the URI + * is not correct it will be used as the host of the connection. The + * Connection is NOT stablished. + * + * @param uri The INDIURI that specifies the parameters of the Connection. + * If the URI is not correct it will be used as the host of the + * connection and the default port will be used. + */ + public INDIServerConnection(String uri) { + this(openConnection(uri)); + } + + /** + * create a new server connection based on a indiconnection. + * + * @param connection the indi connection to base on. + */ + public INDIServerConnection(INDIConnection connection) { + indiUrl = connection.getURL(); + this.connection = connection; + } + + /** + * open a indi connection to the specified uri. + * + * @param uri the uri to parse and connect to + * @return the initalized connection. + */ + private static INDIConnection openConnection(String uri) { + try { + return (INDIConnection) new URL(uri).openConnection(); + } catch (Exception e) { + throw new IllegalArgumentException("the specified uri is not a legal indi url", e); + } + } + + /** + * This function waits until a Device with a deviceName exists + * in this Connection and returns it. The wait is dinamic, so it should be + * called from a different Thread or the app will freeze until the Device + * exists. + * + * @param deviceName The deviceName of the evice to wait for. + * @return The Device once it exists in this Connection. + */ + public INDIDevice waitForDevice(String deviceName) { + return waitForDevice(deviceName, Integer.MAX_VALUE); + } + + /** + * This function waits until a Device with a deviceName exists + * in this Connection and returns it. The wait is dinamic, so it should be + * called from a different Thread or the app will freeze until the Device + * exists or the maxWait number of seconds have elapsed. + * + * @param deviceName The deviceName of the device to wait for. + * @param maxWait Maximum number of seconds to wait for the Device + * @return The Device once it exists in this Connection or null + * if the maximum wait is achieved. + */ + public INDIDevice waitForDevice(String deviceName, int maxWait) { + INDIDevice d = null; + + long startTime = new Date().getTime(); + boolean timeElapsed = false; + + while (d == null && !timeElapsed) { + d = this.getDevice(deviceName); + + if (d == null) { + try { + Thread.sleep(Constants.WAITING_INTERVAL); + } catch (InterruptedException e) { + LOG.warn("sleep interrupted", e); + } + } + + long endTime = new Date().getTime(); + + if ((endTime - startTime) / Constants.MILLISECONDS_IN_A_SECOND > maxWait) { + timeElapsed = true; + } + } + + return d; + } + + /** + * Connects to the INDI Server. + * + * @throws IOException if there is some problem connecting to the Server. + */ + public void connect() throws IOException { + if (connection == null) { + connection = (INDIConnection) indiUrl.openConnection(); + } + if (reader == null) { + reader = new INDIProtocolReader(this, "client reader " + connection.getURL()); + reader.start(); + } + } + + /** + * Determines if the Connection is stablished of not. + * + * @return true if the Connection is stablished. + * false otherwise. + */ + public boolean isConnected() { + if (connection == null) { + return false; + } + + return true; + } + + /** + * Sends the appropriate message to the INDI Server to be notified about the + * Devices of the Server. + * + * @throws IOException if there is some problem with the Connection. + */ + public void askForDevices() throws IOException { + sendMessageToServer(new GetProperties().setVersion("1.7")); + } + + /** + * Sends the appropriate message to the INDI Server to be notified about a + * particular Device of the Server. + * + * @param device the Device elementName that is asked for. + * @throws IOException if there is some problem with the Connection. + */ + public void askForDevices(String device) throws IOException { + sendMessageToServer(new GetProperties().setVersion("1.7").setDevice(device)); + } + + /** + * Sends the appropriate message to the INDI Server to be notified about a + * particular Property of a particular Device of the Server. + * + * @param device the Device elementName of whose property is asked for. + * @param propertyName the Property elementName that is asked for. + * @throws IOException if there is some problem with the Connection. + */ + public void askForDevices(String device, String propertyName) throws IOException { + sendMessageToServer(new GetProperties().setVersion("1.7").setDevice(device).setName(propertyName)); + } + + /** + * Sends a xmlMessage message to the server. + * + * @param xmlMessage the message to be sent. + * @throws IOException if there is some problem with the Connection. + */ + protected void sendMessageToServer(INDIProtocol xmlMessage) throws IOException { + connection.getINDIOutputStream().writeObject(xmlMessage); + } + + @Override + public void finishReader() throws IOException { + close(); + } + + /** + * Adds a new Device to this Connection and notifies the listeners. + * + * @param device the device to be added. + */ + private void addDevice(INDIDevice device) { + devices.put(device.getName(), device); + + notifyListenersNewDevice(device); + } + + /** + * Gets a particular Device by its elementName. + * + * @param deviceName the deviceName of the Device + * @return the Device with the deviceName or null + * if there is no Device with that deviceName. + */ + public INDIDevice getDevice(String deviceName) { + return devices.get(deviceName); + } + + /** + * A convenience method to get the Property of a Device by specifiying their + * names. + * + * @param deviceName the elementName of the Device. + * @param propertyName the elementName of the Property. + * @return the Property with propertyName as elementName of the + * device with deviceName as elementName. + */ + public INDIProperty getProperty(String deviceName, String propertyName) { + INDIDevice d = getDevice(deviceName); + if (d == null) { + return null; + } + return d.getProperty(propertyName); + } + + /** + * A convenience method to get the Element of a Property of a Device by + * specifiying their names. + * + * @param deviceName the elementName of the Property. + * @param propertyName the elementName of the Element. + * @param elementName the elementName of the Element. + * @return the Element with a elementName as a elementName of a + * Property with propertyName as elementName of the + * device with deviceName as elementName. + */ + public INDIElement getElement(String deviceName, String propertyName, String elementName) { + INDIDevice d = getDevice(deviceName); + + if (d == null) { + return null; + } + + return d.getElement(propertyName, elementName); + } + + @Override + public void processProtokolMessage(INDIProtocol xml) { + if (xml instanceof DefVector) { + addProperty((DefVector) xml); + } else if (xml instanceof SetVector) { + updateProperty((SetVector) xml); + } else if (xml instanceof Message) { + messageReceived((Message) xml); + } else if (xml instanceof DelProperty) { + deleteProperty((DelProperty) xml); + } + } + + /** + * Parses a XML <delProperty> element and notifies the listeners. + * + * @param xml The element to be parsed. + */ + private void deleteProperty(DelProperty xml) { + if (xml.hasDevice()) { + String deviceName = xml.getDevice(); + + INDIDevice d = getDevice(deviceName); + + if (d != null) { + String propertyName = xml.getName(); + + if (propertyName != null && !propertyName.isEmpty()) { + d.deleteProperty(xml); + } else { + deleteDevice(d); + } + } else { + deleteAllDevices(); + } + } + } + + /** + * Deletes all the Devices from the Connection and notifies the listeners. + */ + private void deleteAllDevices() { + Iterator devs = devices.values().iterator(); + + while (!devs.hasNext()) { + deleteDevice(devs.next()); + } + } + + /** + * Deletes a Device from the Connection and notifies the listeners. + * + * @param device the Device to be removed. + */ + private void deleteDevice(INDIDevice device) { + devices.remove(device.getName()); + + notifyListenersRemoveDevice(device); + } + + /** + * Parses a XML <message> element and notifies the listeners if + * appropriate. + * + * @param xml The XML to be parsed. + */ + private void messageReceived(Message xml) { + if (xml.hasDevice()) { + String deviceName = xml.getDevice(); + INDIDevice d = getDevice(deviceName); + if (d != null) { + d.messageReceived(xml); + } + } else { // Global message from server + if (xml.hasMessage()) { + Date timestamp = dateFormat().parseTimestamp(xml.getTimestamp()); + notifyListenersNewMessage(timestamp, xml.getMessage()); + } + } + } + + /** + * Parses a XML <defXXXVector> element. + * + * @param xml the element to be parsed. + */ + private void addProperty(DefVector xml) { + String deviceName = xml.getDevice(); + + INDIDevice d = getDevice(deviceName); + + if (d == null) { + d = new INDIDevice(deviceName, this); + addDevice(d); + } + + d.addProperty(xml); + } + + /** + * Parses a XML <setXXXVector> element. + * + * @param el the element to be parsed. + */ + private void updateProperty(SetVector el) { + String deviceName = el.getDevice(); + + INDIDevice d = getDevice(deviceName); + + if (d != null) { // If device does no exist ignore + d.updateProperty(el); + } + } + + /** + * Adds a new listener to this Connection. + * + * @param listener the listener to be added. + */ + public void addINDIServerConnectionListener(INDIServerConnectionListener listener) { + listeners.add(listener); + } + + /** + * Removes a listener from this Connection. + * + * @param listener the listener to be removed. + */ + public void removeINDIServerConnectionListener(INDIServerConnectionListener listener) { + listeners.remove(listener); + } + + /** + * Adds a listener to all the Devices from this Connection. + * + * @param listener the listener to add + */ + public void addINDIDeviceListenerToAllDevices(INDIDeviceListener listener) { + List l = getDevicesAsList(); + + for (int i = 0; i < l.size(); i++) { + INDIDevice d = l.get(i); + + d.addINDIDeviceListener(listener); + } + } + + /** + * Removes a listener from all the Devices from this Connection. + * + * @param listener the listener to remove + */ + public void removeINDIDeviceListenerFromAllDevices(INDIDeviceListener listener) { + List l = getDevicesAsList(); + + for (int i = 0; i < l.size(); i++) { + INDIDevice d = l.get(i); + + d.removeINDIDeviceListener(listener); + } + } + + /** + * Gets the names of the Devices of this Connection. + * + * @return the names of the Devices of this Connection. + */ + public String[] getDeviceNames() { + List l = getDevicesAsList(); + + String[] names = new String[l.size()]; + + for (int i = 0; i < l.size(); i++) { + names[i] = l.get(i).getName(); + } + + return names; + } + + /** + * Gets a List with all the Devices of this Connection. + * + * @return the List of Devices belonging to this Connection. + */ + public List getDevicesAsList() { + return new ArrayList(devices.values()); + } + + /** + * A convenience method to add a listener to a Device (identified by its + * elementName) of this Connection. + * + * @param deviceName the Device elementName to which add the listener + * @param listener the listener to add + */ + public void addINDIDeviceListener(String deviceName, INDIDeviceListener listener) { + INDIDevice d = getDevice(deviceName); + + if (d == null) { + return; + } + + d.addINDIDeviceListener(listener); + } + + /** + * A convenience method to remove a listener from a Device (identified by + * its elementName) of this Connection. + * + * @param deviceName the Device elementName to which remove the listener + * @param listener the listener to remove + */ + public void removeINDIDeviceListener(String deviceName, INDIDeviceListener listener) { + INDIDevice d = getDevice(deviceName); + + if (d == null) { + return; + } + + d.removeINDIDeviceListener(listener); + } + + /** + * Notifies the listeners about a new Device. + * + * @param device the new Device. + */ + private void notifyListenersNewDevice(INDIDevice device) { + ArrayList lCopy = new ArrayList<>(listeners); + + for (int i = 0; i < lCopy.size(); i++) { + INDIServerConnectionListener l = lCopy.get(i); + + l.newDevice(this, device); + } + } + + /** + * Notifies the listeners about a Device that is removed. + * + * @param device the removed device. + */ + private void notifyListenersRemoveDevice(INDIDevice device) { + ArrayList lCopy = new ArrayList<>(listeners); + + for (int i = 0; i < lCopy.size(); i++) { + INDIServerConnectionListener l = lCopy.get(i); + + l.removeDevice(this, device); + } + } + + /** + * Notifies the listeners when the Connection is lost. + */ + private void notifyListenersConnectionLost() { + ArrayList lCopy = new ArrayList<>(listeners); + + for (int i = 0; i < lCopy.size(); i++) { + INDIServerConnectionListener l = lCopy.get(i); + l.connectionLost(this); + } + } + + /** + * Notifies the listeners about a new Server message. + * + * @param timestamp the timestamp of the message. + * @param message the message. + */ + protected void notifyListenersNewMessage(Date timestamp, String message) { + ArrayList lCopy = new ArrayList<>(listeners); + + for (int i = 0; i < lCopy.size(); i++) { + INDIServerConnectionListener l = lCopy.get(i); + + l.newMessage(this, timestamp, message); + } + } + + /** + * Gets the input stream of this Connection. + * + * @return The input stream of this Connection. + */ + @Override + public INDIInputStream getInputStream() { + try { + return connection.getINDIInputStream(); + } catch (IOException e) { + return null; + } + } + + @Override + public String toString() { + return getClass().getSimpleName() + "(" + indiUrl + ")"; + } + + /** + * @return the url behind the server connection. + */ + public URL getURL() { + return indiUrl; + } + + @Override + public void close() throws IOException { + if (connection != null) { + connection = null; + devices.clear(); + notifyListenersConnectionLost(); + connection.close(); + } + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIServerConnectionListener.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIServerConnectionListener.java new file mode 100644 index 0000000000000000000000000000000000000000..6fd32bae265dad43c5338f02397fae171cd5e287 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIServerConnectionListener.java @@ -0,0 +1,66 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.util.Date; + +/** + * A interface to be notified about changes in a + * INDIServerConnection. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public interface INDIServerConnectionListener { + + /** + * Called when a new Device is added to the Connection. + * + * @param connection The connection to which the device is added. + * @param device The device that has been added. + */ + void newDevice(INDIServerConnection connection, INDIDevice device); + + /** + * Called when a device is removed from the Connection. + * + * @param connection The Connection from which the device is being removed. + * @param device The device being removed. + */ + void removeDevice(INDIServerConnection connection, INDIDevice device); + + /** + * Called when the connection is lost (explicity or not). + * + * @param connection The connection that has been lost. + */ + void connectionLost(INDIServerConnection connection); + + /** + * Called when the message of the Connection is changed. + * + * @param connection The Connection of whose message has changed. + * @param timestamp The timestamp of the message. + * @param message The message. + */ + void newMessage(INDIServerConnection connection, Date timestamp, String message); +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDISwitchElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDISwitchElement.java new file mode 100644 index 0000000000000000000000000000000000000000..a1555255808410d34824da790c937c6c97e19c71 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDISwitchElement.java @@ -0,0 +1,194 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.Constants; +import leigh.astro.indi.base.Constants.SwitchStatus; +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.DefSwitch; +import leigh.astro.indi.protocol.OneElement; +import leigh.astro.indi.protocol.OneSwitch; + +/** + * A class representing a INDI Switch Element. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDISwitchElement extends INDIElement { + + /** + * A UI component that can be used in graphical interfaces for this Switch + * Element. + */ + private INDIElementListener uiComponent; + + /** + * Current Status value for this Switch Element. + */ + private SwitchStatus status; + + /** + * Current desired status value for this Switch Element. + */ + private SwitchStatus desiredStatus; + + /** + * Constructs an instance of INDISwitchElement. Usually called + * from a INDIProperty. Throws IllegalArgumentException if the + * XML Element is not well formed (switch value not correct). + * + * @param xml A XML Element <defSwitch> describing the + * Switch Element. + * @param property The INDIProperty to which the Element belongs. + */ + protected INDISwitchElement(DefSwitch xml, INDISwitchProperty property) { + super(xml, property); + desiredStatus = null; + setValue(xml.getTextContent()); + } + + @Override + public SwitchStatus getValue() { + return status; + } + + /** + * Sets the current value of this Switch Element. It is assummed that the + * XML Element is really describing the new value for this particular Switch + * Element. + *

+ * This method will notify the change of the value to the listeners. + * + * @param xml A XML Element <oneSwitch> describing the Element. + */ + @Override + protected void setValue(OneElement xml) { + setValue(xml.getTextContent()); + + notifyListeners(); + } + + /** + * Sets the value of the Switch Property. Throws IllegalArgumentException if + * the new status is not a correct one ("On" or "Off") + * + * @param newStatus the new status of the property + */ + private void setValue(String newStatus) { + if (newStatus.compareTo("Off") == 0) { + status = SwitchStatus.OFF; + } else if (newStatus.compareTo("On") == 0) { + status = SwitchStatus.ON; + } else { + throw new IllegalArgumentException("Illegal Switch Status"); + } + } + + @Override + public INDIElementListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIElementListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createSwitchElementView(this, getProperty().getPermission()); + addINDIElementListener(uiComponent); + return uiComponent; + } + + /** + * Checks if a desired value would be correct to be applied to the Switch + * Element, that is a SwitchStatus object. + * + * @param desiredValue The value to be checked. + * @return true if the desiredValue is a + * SwitchStatus. false otherwise. + * @throws INDIValueException if desiredValue is null. + */ + @Override + public boolean checkCorrectValue(Object desiredValue) throws INDIValueException { + if (desiredValue == null) { + throw new INDIValueException(this, "null value"); + } + + if (desiredValue instanceof SwitchStatus) { + return true; + } + + return false; + } + + @Override + public String getNameAndValueAsString() { + return getName() + " - " + getValue(); + } + + @Override + public SwitchStatus getDesiredValue() { + if (desiredStatus == null) { // Maybe there is no desired status, but + // should be sent + return status; + } + + return desiredStatus; + } + + @Override + public void setDesiredValue(Object desiredValue) throws INDIValueException { + SwitchStatus ss = null; + try { + ss = (SwitchStatus) desiredValue; + } catch (ClassCastException e) { + throw new INDIValueException(this, "Value for a Switch Element must be a SwitchStatus"); + } + + desiredStatus = ss; + } + + @Override + public boolean isChanged() { + return true; // Always true to send all the elements in a switch + // property + } + + /** + * Returns the XML code <oneSwitch> representing this Switch Element + * with a new value (a SwitchStatus). Resets the desired + * status. + * + * @return the XML code <oneSwitch> representing this + * Switch Element with a new value. + * @see #setDesiredValue + */ + @Override + protected OneElement getXMLOneElementNewValue() { + OneSwitch xml = new OneSwitch().setName(getName()).setTextContent(Constants.getSwitchStatusAsString(desiredStatus)); + + desiredStatus = null; + + return xml; + } + + @Override + public String getValueAsString() { + return getValue() + ""; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDISwitchProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDISwitchProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..2f60e31ff5623be513363ea18cad9379ee74726b --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDISwitchProperty.java @@ -0,0 +1,240 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.Constants.PropertyPermissions; +import leigh.astro.indi.base.Constants.PropertyStates; +import leigh.astro.indi.base.Constants.SwitchRules; +import leigh.astro.indi.base.Constants.SwitchStatus; +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.properties.INDIStandardProperty; +import leigh.astro.indi.protocol.*; + +/** + * A class representing a INDI Switch Property. + *

+ * It implements a listener mechanism to notify changes in its Elements. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDISwitchProperty extends INDIProperty { + + /** + * A UI component that can be used in graphical interfaces for this Switch + * Property. + */ + private INDIPropertyListener uiComponent; + + /** + * The current Rule for this Switch Property. + */ + private SwitchRules rule; + + /** + * Constructs an instance of INDISwitchProperty. + * INDISwitchPropertys are not usually directly instantiated. + * Usually used by INDIDevice. Throws IllegalArgumentException + * if the XML Property is not well formed (for example if the Elements are + * not well formed or if the Rule is not valid). + * + * @param xml A XML Element <defSwitchVector> describing + * the Property. + * @param device The INDIDevice to which this Property belongs. + */ + protected INDISwitchProperty(DefSwitchVector xml, INDIDevice device) { + super(xml, device); + String rul = xml.getRule(); + if (rul.compareTo("OneOfMany") == 0) { + rule = SwitchRules.ONE_OF_MANY; + } else if (rul.compareTo("AtMostOne") == 0) { + rule = SwitchRules.AT_MOST_ONE; + } else if (rul.compareTo("AnyOfMany") == 0) { + rule = SwitchRules.ANY_OF_MANY; + } else { + throw new IllegalArgumentException("Illegal Rule for the Switch Property"); + } + for (DefElement element : xml.getElements()) { + if (element instanceof DefSwitch) { + String name = element.getName(); + + INDIElement iel = getElement(name); + + if (iel == null) { // Does not exist + INDISwitchElement ite = new INDISwitchElement((DefSwitch) element, this); + addElement(ite); + } + } + } + if (!checkCorrectValues()) { + if (getSelectedCount() != 0) { // Sometimes de CONFIG_PROCESS is not + // correct at the beginning. skip + throw new IllegalArgumentException("Illegal initial value for Switch Property"); + } + setState(PropertyStates.ALERT); + } + } + + @Override + protected void update(SetVector el) { + super.update(el, OneSwitch.class); + + if (!checkCorrectValues()) { + setState(PropertyStates.ALERT); + } + } + + /** + * Gets the current Rule for this Switch Property. + * + * @return the current Rule for this Switch Property + */ + public SwitchRules getRule() { + return rule; + } + + /** + * Sets the Permission of this Property. If set to Write Only it defaults to + * Read Only (Switch properties cannot be Read Only). + * + * @param permission the new Permission for this Property. + */ + @Override + protected void setPermission(PropertyPermissions permission) { + if (permission == PropertyPermissions.WO) { + super.setPermission(PropertyPermissions.RO); + } else { + super.setPermission(permission); + } + } + + /** + * Checks if the Rule of this Switch property holds. + * + * @return true if the values of the Elements of this Property + * comply with the Rule. false otherwise. + */ + private boolean checkCorrectValues() { + if (getState() == PropertyStates.OK) { + + int selectedCount = getSelectedCount(); + + if (rule == SwitchRules.ONE_OF_MANY && selectedCount != 1) { + return false; + } + + if (rule == SwitchRules.AT_MOST_ONE && selectedCount > 1) { + return false; + } + } + + return true; + } + + /** + * Gets the number of selected Switch Elements. + * + * @return the number of selected Elements. + */ + private int getSelectedCount() { + int selectedCount = 0; + for (INDISwitchElement el : this) { + if (el.getValue() == SwitchStatus.ON) { + selectedCount++; + } + } + return selectedCount; + } + + /** + * Gets the opening XML Element <newSwitchVector> for this Property. + * + * @return the opening XML Element <newSwitchVector> for this + * Property. + */ + @Override + protected NewVector getXMLPropertyChangeInit() { + return new NewSwitchVector(); + } + + @Override + public INDIPropertyListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIPropertyListener(uiComponent); + } + uiComponent = INDIViewCreator.getDefault().createSwitchPropertyView(this); + addINDIPropertyListener(uiComponent); + + return uiComponent; + } + + /** + * Gets a particular Element of this Property by its name. + * + * @param name The name of the Element to be returned + * @return The Element of this Property with the given name. + * null if there is no Element with that + * name. + */ + @Override + public final INDISwitchElement getElement(String name) { + return super.getElement(name); + } + + /** + * Gets a particular Element of this Property by its name. + * + * @param name The name of the Element to be returned + * @return The Element of this Property with the given name. + * null if there is no Element with that + * name. + */ + @Override + public final INDISwitchElement getElement(INDIStandardProperty name) { + return super.getElement(name.name()); + } + + /** + * Gets the values of the Property as a String. + * + * @return A String representation of the value of the Property. + */ + @Override + public String getValuesAsString() { + StringBuffer aux = new StringBuffer(); + int n = 0; + for (INDISwitchElement element : this) { + if (element.getValue() == SwitchStatus.ON) { + if (n != 0) { + aux.append(", "); + } + n++; + aux.append(element.getLabel()); + } + } + if (n > 1) { + aux.insert(0, "["); + aux.append("]"); + } + return aux.toString(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDITextElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDITextElement.java new file mode 100644 index 0000000000000000000000000000000000000000..ad3ac674997a0b4f339c159faaf08b10b062ee0a --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDITextElement.java @@ -0,0 +1,175 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.DefText; +import leigh.astro.indi.protocol.OneElement; +import leigh.astro.indi.protocol.OneText; + +/** + * A class representing a INDI Text Element. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDITextElement extends INDIElement { + + /** + * The current value of the Text Element. + */ + private String value; + + /** + * The current desired value for the Text Element. + */ + private String desiredValue; + + /** + * A UI component that can be used in graphical interfaces for this Text + * Element. + */ + private INDIElementListener uiComponent; + + /** + * Constructs an instance of INDITextElement. Usually called + * from a INDIProperty. + * + * @param xml A XML Element <defText> describing the Text + * Element. + * @param property The INDIProperty to which the Element belongs. + */ + protected INDITextElement(DefText xml, INDITextProperty property) { + super(xml, property); + desiredValue = null; + value = xml.getTextContent(); + } + + @Override + public String getValue() { + return value; + } + + /** + * Sets the current value of this Text Element. It is assummed that the XML + * Element is really describing the new value for this particular Text + * Element. + *

+ * This method will notify the change of the value to the listeners. + * + * @param xml A XML Element <oneText> describing the Element. + */ + @Override + protected void setValue(OneElement xml) { + value = xml.getTextContent(); + notifyListeners(); + } + + @Override + public INDIElementListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIElementListener(uiComponent); + } + + uiComponent = INDIViewCreator.getDefault().createTextElementView(this, getProperty().getPermission()); + addINDIElementListener(uiComponent); + + return uiComponent; + } + + /** + * Checks if a desired value would be correct to be applied to the Text + * Element. + * + * @param valueToCheck The value to be checked. + * @return true if the valueToCheck is a + * String. false otherwise. + * @throws INDIValueException if valueToCheck is null. + */ + @Override + public boolean checkCorrectValue(Object valueToCheck) throws INDIValueException { + if (valueToCheck == null) { + throw new INDIValueException(this, "null value"); + } + + if (valueToCheck instanceof String) { + return true; + } + + return false; + } + + @Override + public String getNameAndValueAsString() { + return getName() + " - " + getValue(); + } + + @Override + public String getDesiredValue() { + return desiredValue; + } + + @Override + public void setDesiredValue(Object desiredValue) throws INDIValueException { + String v = null; + + try { + v = (String) desiredValue; + } catch (ClassCastException e) { + throw new INDIValueException(this, "Value for a Text Element must be a String"); + } + + this.desiredValue = v; + } + + @Override + public boolean isChanged() { + return desiredValue != null; + } + + /** + * Returns the XML code <oneText> representing this Text Element with + * a new desired value (a String). Resets the desired value. + * + * @return the XML code <oneText> representing the Text + * Element with a new value. + * @see #setDesiredValue + */ + @Override + protected OneElement getXMLOneElementNewValue() { + OneText xml = new OneText().setName(getName()).setTextContent(desiredValue); + + desiredValue = null; + + return xml; + } + + @Override + public String toString() { + return value; + } + + @Override + public String getValueAsString() { + return getValue(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDITextProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDITextProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..67e11282cf1084630a4bdb739f40d0e04653ffa3 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDITextProperty.java @@ -0,0 +1,108 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIException; +import leigh.astro.indi.protocol.*; + +/** + * A class representing a INDI Text Property. + *

+ * It implements a listener mechanism to notify changes in its Elements. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDITextProperty extends INDIProperty { + + /** + * A UI component that can be used in graphical interfaces for this Text + * Property. + */ + private INDIPropertyListener uiComponent; + + /** + * Constructs an instance of INDITextProperty. + * INDITextPropertys are not usually directly instantiated. + * Usually used by INDIDevice. Throws IllegalArgumentException + * if the XML Property is not well formed (for example if the Elements are + * not well formed). + * + * @param xml A XML Element <defTextVector> describing + * the Property. + * @param device The INDIDevice to which this Property belongs. + */ + protected INDITextProperty(DefTextVector xml, INDIDevice device) { + super(xml, device); + for (DefElement element : xml.getElements()) { + if (element instanceof DefText) { + String name = element.getName(); + INDIElement iel = getElement(name); + if (iel == null) { // Does not exist + INDITextElement ite = new INDITextElement((DefText) element, this); + addElement(ite); + } + } + + } + } + + @Override + protected void update(SetVector el) { + super.update(el, OneText.class); + } + + /** + * Gets the opening XML Element <newTextVector> for this Property. + * + * @return the opening XML Element <newTextVector> for this Property. + */ + @Override + protected NewVector getXMLPropertyChangeInit() { + return new NewTextVector(); + } + + @Override + public INDIPropertyListener getDefaultUIComponent() throws INDIException { + if (uiComponent != null) { + removeINDIPropertyListener(uiComponent); + } + + uiComponent = INDIViewCreator.getDefault().createTextPropertyView(this); + addINDIPropertyListener(uiComponent); + + return uiComponent; + } + + /** + * Gets a particular Element of this Property by its name. + * + * @param name The name of the Element to be returned + * @return The Element of this Property with the given name. + * null if there is no Element with that + * name. + */ + @Override + public final INDITextElement getElement(String name) { + return super.getElement(name); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIValueException.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIValueException.java new file mode 100644 index 0000000000000000000000000000000000000000..7630aa2ebd95d19440091470919a0178b16156b2 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIValueException.java @@ -0,0 +1,64 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.INDIException; + +/** + * A class representing an exception on the value of a INDIElement. + * + * @author S. Alonso (Zerjillo) [zerjioi at ugr.es] + */ +public class INDIValueException extends INDIException { + + /** + * serialisation version. + */ + private static final long serialVersionUID = -3338903931160160408L; + + /** + * The element that produced the exception. + */ + private INDIElement element; + + /** + * Constructs an instance of INDIValueException with the + * specified detail message. + * + * @param element The element that produced the error. + * @param msg the detail message. + */ + public INDIValueException(INDIElement element, String msg) { + super(msg); + this.element = element; + } + + /** + * Gets the INDIElement that produced the exception. + * + * @return the INDIElement that produced the exception + */ + public INDIElement getINDIElement() { + return element; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIViewCreator.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIViewCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..f2173505ab24179396623f8dba16171bfc279e88 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIViewCreator.java @@ -0,0 +1,188 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.Constants.PropertyPermissions; +import leigh.astro.indi.base.INDIException; + +import java.util.Iterator; +import java.util.ServiceLoader; + +/** + * The view createtion factory, uses the service loader pattern to get the + * correct implementor for the current situation. + * + * @author Richard van Nieuwenhoven + */ +public final class INDIViewCreator { + + /** + * The dummy creator when nothing was found, this one is used that does + * "nothing". + */ + private static final class DummyViewCreator implements INDIViewCreatorInterface { + + @Override + public INDIPropertyListener createTextPropertyView(INDITextProperty indiProperty) throws INDIException { + return DUMMY_PROPERTY_LISTENER; + } + + @Override + public INDIElementListener createTextElementView(INDITextElement indiTextElement, PropertyPermissions permission) throws INDIException { + return DUMMY_ELEMENT_LISTENER; + } + + @Override + public INDIPropertyListener createSwitchPropertyView(INDISwitchProperty indiProperty) throws INDIException { + return DUMMY_PROPERTY_LISTENER; + } + + @Override + public INDIElementListener createSwitchElementView(INDISwitchElement indiSwitchElement, PropertyPermissions permission) throws INDIException { + return DUMMY_ELEMENT_LISTENER; + } + + @Override + public INDIPropertyListener createNumberPropertyView(INDINumberProperty indiProperty) throws INDIException { + return DUMMY_PROPERTY_LISTENER; + } + + @Override + public INDIElementListener createNumberElementView(INDINumberElement indiNumberElement, PropertyPermissions permission) throws INDIException { + return DUMMY_ELEMENT_LISTENER; + } + + @Override + public INDIPropertyListener createLightPropertyView(INDILightProperty indiProperty) throws INDIException { + return DUMMY_PROPERTY_LISTENER; + } + + @Override + public INDIElementListener createLightElementView(INDILightElement indiLightElement, PropertyPermissions permission) throws INDIException { + return DUMMY_ELEMENT_LISTENER; + } + + @Override + public INDIDeviceListener createDeviceListener(INDIDevice indiDevice) throws INDIException { + return DUMMY_DEVICE_LISTENER; + } + + @Override + public INDIPropertyListener createBlobPropertyView(INDIBLOBProperty indiProperty) throws INDIException { + return DUMMY_PROPERTY_LISTENER; + } + + @Override + public INDIElementListener createBlobElementView(INDIBLOBElement indiblobElement, PropertyPermissions permission) throws INDIException { + return DUMMY_ELEMENT_LISTENER; + } + + @Override + public INDIDeviceListener createDeviceView(INDIDevice indiDevice) throws INDIException { + return DUMMY_DEVICE_LISTENER; + } + } + + /** + * Dummy device listener, that does nothing. + */ + private static final class DummyDeviceListener implements INDIDeviceListener { + + @Override + public void removeProperty(INDIDevice device, INDIProperty property) { + } + + @Override + public void newProperty(INDIDevice device, INDIProperty property) { + } + + @Override + public void messageChanged(INDIDevice device) { + } + } + + /** + * Dummy element listener, that does nothing. + */ + private static final class DummyElementListener implements INDIElementListener { + + @Override + public void elementChanged(INDIElement element) { + } + } + + /** + * Dummy property listener, that does nothing. + */ + private static final class DummyPropertyListener implements INDIPropertyListener { + + @Override + public void propertyChanged(INDIProperty property) { + } + } + + /** + * static cached dummy device listener. + */ + private static final DummyDeviceListener DUMMY_DEVICE_LISTENER = new DummyDeviceListener(); + + /** + * static cached dummy property listener. + */ + private static final DummyPropertyListener DUMMY_PROPERTY_LISTENER = new DummyPropertyListener(); + + /** + * static cached dummy element listener. + */ + private static final DummyElementListener DUMMY_ELEMENT_LISTENER = new DummyElementListener(); + + /** + * the staticaly cached creator interface resolved using the serviceloader + * pattern. + */ + private static INDIViewCreatorInterface creatorInterface; + + /** + * utility class should never be instanciated. + */ + private INDIViewCreator() { + } + + /** + * @return the default implementation dependeing on what is first available + * in the classpath. + */ + public static INDIViewCreatorInterface getDefault() { + if (creatorInterface == null) { + ServiceLoader loader = ServiceLoader.load(INDIViewCreatorInterface.class); + Iterator iterator = loader.iterator(); + if (iterator.hasNext()) { + creatorInterface = iterator.next(); + } + if (creatorInterface == null) { + creatorInterface = new DummyViewCreator(); + } + } + return creatorInterface; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIViewCreatorInterface.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIViewCreatorInterface.java new file mode 100644 index 0000000000000000000000000000000000000000..f2f991db0c326002db08392e1522fd82c4ef4ac1 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/client/INDIViewCreatorInterface.java @@ -0,0 +1,149 @@ +package leigh.astro.indi.client; + +/* + * #%L + * INDI for Java Client Library + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.base.Constants.PropertyPermissions; +import leigh.astro.indi.base.INDIException; + +/** + * The view creator factory interface. implementors are used to create views for + * different types of gui views like swing / androis / javafx or swt. + * + * @author Richard van Nieuwenhoven + */ +public interface INDIViewCreatorInterface { + + /** + * create a device listener for the device. + * + * @param indiDevice the device to listen to + * @return the created device listener + * @throws INDIException if something unexpected went wrong. + */ + INDIDeviceListener createDeviceListener(INDIDevice indiDevice) throws INDIException; + + /** + * Create the view for a blob element with the specified permissions. + * + * @param indiblobElement the blob element to create a view for + * @param permission the permissions for the parent property + * @return the element listener around the view + * @throws INDIException if something unexpected went wrong. + */ + INDIElementListener createBlobElementView(INDIBLOBElement indiblobElement, PropertyPermissions permission) throws INDIException; + + /** + * Create the view for a light element with the specified permissions. + * + * @param indiLightElement the light element to create a view for + * @param permission the permissions for the parent property + * @return the element listener around the view + * @throws INDIException if something unexpected went wrong. + */ + INDIElementListener createLightElementView(INDILightElement indiLightElement, PropertyPermissions permission) throws INDIException; + + /** + * Create the view for a number element with the specified permissions. + * + * @param indiNumberElement the number element to create a view for + * @param permission the permissions for the parent property + * @return the element listener around the view + * @throws INDIException if something unexpected went wrong. + */ + INDIElementListener createNumberElementView(INDINumberElement indiNumberElement, PropertyPermissions permission) throws INDIException; + + /** + * Create the view for a switch element with the specified permissions. + * + * @param indiSwitchElement the switch element to create a view for + * @param permission the permissions for the parent property + * @return the element listener around the view + * @throws INDIException if something unexpected went wrong. + */ + INDIElementListener createSwitchElementView(INDISwitchElement indiSwitchElement, PropertyPermissions permission) throws INDIException; + + /** + * Create the view for a text element with the specified permissions. + * + * @param indiTextElement the text element to create a view for + * @param permission the permissions for the parent property + * @return the element listener around the view + * @throws INDIException if something unexpected went wrong. + */ + INDIElementListener createTextElementView(INDITextElement indiTextElement, PropertyPermissions permission) throws INDIException; + + /** + * Create the view for a blob property. + * + * @param indiProperty the blob property to create the view for. + * @return the property listener of the view. + * @throws INDIException if something unexpected went wrong. + */ + INDIPropertyListener createBlobPropertyView(INDIBLOBProperty indiProperty) throws INDIException; + + /** + * Create the view for a number property. + * + * @param indiProperty the number property to create the view for. + * @return the property listener of the view. + * @throws INDIException if something unexpected went wrong. + */ + INDIPropertyListener createNumberPropertyView(INDINumberProperty indiProperty) throws INDIException; + + /** + * Create the view for a text property. + * + * @param indiProperty the text property to create the view for. + * @return the property listener of the view. + * @throws INDIException if something unexpected went wrong. + */ + INDIPropertyListener createTextPropertyView(INDITextProperty indiProperty) throws INDIException; + + /** + * Create the view for a switch property. + * + * @param indiProperty the switch property to create the view for. + * @return the property listener of the view. + * @throws INDIException if something unexpected went wrong. + */ + INDIPropertyListener createSwitchPropertyView(INDISwitchProperty indiProperty) throws INDIException; + + /** + * Create the view for a light property. + * + * @param indiProperty the light property to create the view for. + * @return the property listener of the view. + * @throws INDIException if something unexpected went wrong. + */ + INDIPropertyListener createLightPropertyView(INDILightProperty indiProperty) throws INDIException; + + /** + * create the view for a device. + * + * @param indiDevice the device to create the view for. + * @return the device listener for the view + * @throws INDIException if something unexpected went wrong. + */ + INDIDeviceListener createDeviceView(INDIDevice indiDevice) throws INDIException; + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIDeviceDescriptor.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIDeviceDescriptor.java new file mode 100644 index 0000000000000000000000000000000000000000..17b6f8dc932bb89acd09846ea8dcd893571f9bdf --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIDeviceDescriptor.java @@ -0,0 +1,253 @@ +package leigh.astro.indi.properties; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2012 - 2015 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.util.*; + +import static leigh.astro.indi.properties.INDIStandardProperty.*; + +/** + * This enumeration list allows the detectction what kind of device a device is + * depending on the available properties. + * + * @author Richard van Nieuwenhoven + */ +public enum INDIDeviceDescriptor { + /** + * telescope device. + */ + TELESCOPE(present(EQUATORIAL_EOD_COORD), present(ON_COORD_SET), present(TELESCOPE_MOTION_NS), present(TELESCOPE_MOTION_WE), present(TELESCOPE_TIMED_GUIDE_NS), + present(TELESCOPE_TIMED_GUIDE_WE), present(TELESCOPE_SLEW_RATE), present(TELESCOPE_PARK), present(TELESCOPE_ABORT_MOTION), present(TELESCOPE_TRACK_RATE), + present(TELESCOPE_INFO), present(EQUATORIAL_COORD), present(HORIZONTAL_COORD)), + /** + * ccd device. + */ + CCD(present(CCDn_FRAME), present(CCDn_EXPOSURE), present(CCDn_ABORT_EXPOSURE), present(CCDn_FRAME), present(CCDn_TEMPERATURE), present(CCDn_COOLER), + present(CCDn_COOLER_POWER), present(CCDn_FRAME_TYPE), present(CCDn_BINNING), present(CCDn_COMPRESSION), present(CCDn_FRAME_RESET), present(CCDn_INFO), + present(CCDn_CFA), present(CCDn)), + /** + * filter device. + */ + FILTER(present(FILTER_SLOT), present(FILTER_NAME), missing(EQUATORIAL_EOD_COORD), missing(EQUATORIAL_COORD), missing(HORIZONTAL_COORD), missing(CCDn_FRAME)), + /** + * focuser device. + */ + FOCUSER(present(ABS_FOCUS_POSITION), missing(EQUATORIAL_EOD_COORD), missing(EQUATORIAL_COORD), missing(HORIZONTAL_COORD), missing(CCDn_FRAME)), + /** + * dome device. + */ + DOME(present(DOME_SPEED), present(DOME_MOTION), present(DOME_TIMER), present(REL_DOME_POSITION), present(ABS_DOME_POSITION), present(DOME_ABORT_MOTION), + present(DOME_SHUTTER), present(DOME_GOTO), present(DOME_PARAMS), present(DOME_AUTOSYNC), present(DOME_MEASUREMENTS)), + /** + * location device. + */ + LOCATION(present(GEOGRAPHIC_COORD), missing(EQUATORIAL_EOD_COORD), missing(EQUATORIAL_COORD), missing(HORIZONTAL_COORD), missing(CCDn_FRAME)), + /** + * weather device. + */ + WEATHER(present(ATMOSPHERE), missing(EQUATORIAL_EOD_COORD), missing(EQUATORIAL_COORD), missing(HORIZONTAL_COORD), missing(CCDn_FRAME)), + /** + * time device. + */ + TIME(present(TIME_UTC), missing(EQUATORIAL_EOD_COORD), missing(EQUATORIAL_COORD), missing(HORIZONTAL_COORD), missing(CCDn_FRAME)), + /** + * switch device. + */ + SWITCH(present(SWITCH_MODULE), missing(EQUATORIAL_EOD_COORD), missing(EQUATORIAL_COORD), missing(HORIZONTAL_COORD), missing(CCDn_FRAME)), + + /** + * an unknown device, no standard properties. + */ + UNKNOWN(); + + /** + * Description of a property that should be availabe or missing in a device. + */ + private static final class Description { + + /** + * should the property be there or not. + */ + private final boolean present; + + /** + * name of the property. + */ + private final String name; + + /** + * @return if the property should be there or just not. + */ + private boolean isPresent() { + return present; + } + + /** + * constructor. + * + * @param name the name of the property. + * @param present should it be present or not present. + */ + private Description(String name, boolean present) { + this.name = name; + this.present = present; + } + } + + /** + * a match during the search for devices. + */ + private static class Match { + + /** + * the matching descriptor. + */ + private final INDIDeviceDescriptor descriptor; + + /** + * how good does the device match? the higher the better. + */ + private final int matchPoints; + + /** + * constructor for the Match. + * + * @param descriptor the matching descriptor. + * @param matchPoints how good does the device match? the higher the better. + */ + public Match(INDIDeviceDescriptor descriptor, int matchPoints) { + this.descriptor = descriptor; + this.matchPoints = matchPoints; + } + } + + /** + * properties that describe a device. + */ + private final Description[] propertyDescription; + + /** + * @return properties that describe a device. + */ + private Description[] getPropertyDescription() { + return propertyDescription; + } + + /** + * construct a device description based on avaiable and not available + * properties. + * + * @param propertyDescription the properties that describe a device. + */ + private INDIDeviceDescriptor(Description... propertyDescription) { + this.propertyDescription = propertyDescription; + } + + /** + * the property that should be present in a device. + * + * @param property the property + * @return the description. + */ + private static Description present(INDIStandardProperty property) { + return new Description(property.name(), true); + } + + /** + * the property that should be missing in a device. + * + * @param property the property + * @return the description. + */ + private static Description missing(INDIStandardProperty property) { + return new Description(property.name(), false); + } + + /** + * Analyze a list of properties and depending on the presence or not + * Presence of properties try to detect the type of device something is. + * + * @param properties the available list of properties. + * @return the enumeration that describes the device type. + */ + public static INDIDeviceDescriptor[] detectDeviceType(Collection properties) { + Set indexedProperties = unfifyPropertyNames(properties); + List matches = new LinkedList<>(); + for (INDIDeviceDescriptor device : values()) { + int points = 0; + for (Description property : device.getPropertyDescription()) { + if (property.isPresent()) { + // the presence of a property counts as a point. + if (indexedProperties.contains(property.name)) { + points++; + } + } else { + // the presence of a missing property is absolute (no + // match). + if (indexedProperties.contains(property.name)) { + points = Integer.MIN_VALUE; + break; + } + } + } + if (points > 0) { + matches.add(new Match(device, points)); + } + } + Collections.sort(matches, new Comparator() { + + @Override + public int compare(Match o1, Match o2) { + return o1.matchPoints - o2.matchPoints; + } + }); + INDIDeviceDescriptor[] result = new INDIDeviceDescriptor[matches.size()]; + for (int index = 0; index < result.length; index++) { + result[index] = matches.get(index).descriptor; + } + return result; + } + + /** + * take the list of strings and rename each to a naming that is compatible + * with the device list. So all upper cases and all digits to a small 'n'. + * + * @param properties the list of properties to convert + * @return the new unified list. + */ + private static Set unfifyPropertyNames(Collection properties) { + Set indexedProperties = new HashSet<>(); + for (String string : properties) { + StringBuffer buffer = new StringBuffer(); + for (char character : string.toCharArray()) { + if (Character.isDigit(character)) { + buffer.append('n'); + } else { + buffer.append(Character.toUpperCase(character)); + } + } + indexedProperties.add(buffer.toString()); + } + return indexedProperties; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIStandardElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIStandardElement.java new file mode 100644 index 0000000000000000000000000000000000000000..369ef92b9203a6801c6672e0eb14b9a1e5e9ddff --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIStandardElement.java @@ -0,0 +1,505 @@ +package leigh.astro.indi.properties; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2012 - 2015 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * statndard element names. + * + * @author Richard van Nieuwenhoven + */ +public enum INDIStandardElement { + /** + * Abort CCD exposure/any motion. + */ + ABORT, + /** + * Stop telescope rapidly, but gracefully. + */ + ABORT_MOTION, + /** + * text element of the active ccd. + */ + ACTIVE_CCD, + /** + * text element of the active dome. + */ + ACTIVE_DOME, + /** + * text element of the active filter. + */ + ACTIVE_FILTER, + /** + * text element of the active focuser. + */ + ACTIVE_FOCUSER, + /** + * text element of the active location provider. + */ + ACTIVE_LOCATION, + /** + * text element of the active switch provider. some drivers need a switch do + * do something, this property allows you to select the driver to provide + * the switch. + */ + ACTIVE_SWITCH, + /** + * text element of the active telescope. + */ + ACTIVE_TELESCOPE, + /** + * text element of the current time provider. + */ + ACTIVE_TIME, + /** + * text element of the active weather provider. + */ + ACTIVE_WEATHER, + /** + * Altitude, degrees above horizon. + */ + ALT, + /** + * If dome is slaved, AUTOSYNC_THRESHOLD is the number of acceptable azimuth + * degrees error between reported and requested dome position. Once the + * difference between target and current dome positions exceed this value, + * the dome shall be commanded to move to the target position. + */ + AUTOSYNC_THRESHOLD, + /** + * Azimuth, degrees E of N. + */ + AZ, + /** + * Bits per pixel. + */ + CCD_BITSPERPIXEL, + /** + * Compress CCD frame. + */ + CCD_COMPRESS, + /** + * Percentage % of Cooler Power utilized. + */ + CCD_COOLER_VALUE, + /** + * Expose the CCD chip for CCD_EXPOSURE_VALUE seconds. + */ + CCD_EXPOSURE_VALUE, + /** + * Resolution x. + */ + CCD_MAX_X, + /** + * Resolution y. + */ + CCD_MAX_Y, + /** + * CCD pixel size in microns. + */ + CCD_PIXEL_SIZE, + /** + * Pixel size X, microns. + */ + CCD_PIXEL_SIZE_X, + /** + * Pixel size Y, microns. + */ + CCD_PIXEL_SIZE_Y, + /** + * Send raw CCD frame. + */ + CCD_RAW, + /** + * CCD chip temperature in degrees Celsius. + */ + CCD_TEMPERATURE_VALUE, + /** + * CFA X Offset. + */ + CFA_OFFSET_X, + /** + * CFA Y Offset. + */ + CFA_OFFSET_Y, + /** + * CFA Filter type (e.g. RGGB). + */ + CFA_TYPE, + /** + * switch element to establish connection to device. + */ + CONNECT, + /** + * Turn cooler off. + */ + COOLER_OFF, + /** + * Turn cooler on. + */ + COOLER_ON, + /** + * This element represents the declination of the pointing direction. + */ + DEC, + /** + * switch element to establish Disconnect the device. + */ + DISCONNECT, + /** + * Dome radius (m). + */ + DM_DOME_RADIUS, + /** + * Displacement to the east of the mount center (m). + */ + DM_EAST_DISPLACEMENT, + /** + * Displacement to the north of the mount center (m). + */ + DM_NORTH_DISPLACEMENT, + /** + * Distance from the optical axis to the mount center (m). + */ + DM_OTA_OFFSET, + /** + * UP displacement of the mount center (m). + */ + DM_UP_DISPLACEMENT, + /** + * Move dome to DOME_ABSOLUTE_POSITION absolute azimuth angle in degrees. + */ + DOME_ABSOLUTE_POSITION, + /** + * Disable dome slaving. + */ + DOME_AUTOSYNC_DISABLE, + /** + * Enable dome slaving. + */ + DOME_AUTOSYNC_ENABLE, + /** + * Move dome counter clockwise, looking down. + */ + DOME_CCW, + /** + * Move dome Clockwise, looking down. + */ + DOME_CW, + /** + * Go to home position. + */ + DOME_HOME, + /** + * Go to park position. + */ + DOME_PARK, + /** + * Move DOME_RELATIVE_POSITION degrees azimuth in the direction of + * DOME_MOTION. + */ + DOME_RELATIVE_POSITION, + /** + * Dome shutter width (m). + */ + DOME_SHUTTER_WIDTH, + /** + * Set dome speed in RPM. + */ + DOME_SPEED_VALUE, + /** + * Move the dome in the direction of DOME_MOTION at rate DOME_SPEED for + * DOME_TIMER_VALUE milliseconds. + */ + DOME_TIMER_VALUE, + /** + * number element of the Site elevation, meters. + */ + ELEV, + /** + * The filter wheel's current slot name. + */ + FILTER_NAME_VALUE, + /** + * The filter wheel's current slot number. Important: Filter numbers start + * from 1 to N. + */ + FILTER_SLOT_VALUE, + /** + * Absolute position Ticks. + */ + FOCUS_ABSOLUTE_POSITION, + /** + * Focus inward. + */ + FOCUS_INWARD, + /** + * Focus outward. + */ + FOCUS_OUTWARD, + /** + * Move # of ticks in FOCUS_MOTION direction. + */ + FOCUS_RELATIVE_POSITION, + /** + * Set focuser speed to SPEED. + */ + FOCUS_SPEED_VALUE, + /** + * Focus in the direction of FOCUS_MOTION at rate FOCUS_SPEED for + * FOCUS_TIMER_VALUE milliseconds. + */ + FOCUS_TIMER_VALUE, + /** + * Take a bias frame exposure. + */ + FRAME_BIAS, + /** + * Take a dark frame exposure. + */ + FRAME_DARK, + /** + * Take a flat field frame exposure. + */ + FRAME_FLAT, + /** + * Take a light frame exposure. + */ + FRAME_LIGHT, + /** + * Guide telescope aperture, mm. + */ + GUIDER_APERTURE, + /** + * Guider telescope focal length, mm. + */ + GUIDER_FOCAL_LENGTH, + /** + * Frame height in pixels. + */ + HEIGHT, + /** + * Dome home position in absolute degrees azimuth. + */ + HOME_POSITION, + /** + * Horizontal binning. + */ + HOR_BIN, + /** + * number element of the humidity Percentage %. + */ + HUMIDITY, + /** + * number element of the Site latitude (-90 to +90), degrees +N. + */ + LAT, + /** + * number element of the Site longitude (0 to 360), degrees +E. + */ + LONG, + /** + * number property of the Weather conditions. + */ + /** + * number element of the Local sidereal time HH:MM:SS. + */ + LST, + /** + * Move the telescope toward East. + */ + MOTION_EAST, + /** + * Move the telescope toward North. + */ + MOTION_NORTH, + /** + * Move the telescope toward South. + */ + MOTION_SOUTH, + /** + * Move the telescope toward West. + */ + MOTION_WEST, + /** + * property is no General Element. + */ + NONE, + /** + * text element of the UTC offset, in hours +E. + */ + OFFSET, + /** + * Park the telescope to HOME position. + */ + PARK, + /** + * Dome parking position in absolute degrees azimuth. + */ + PARK_POSITION, + /** + * text element of the connection port of to the device. + */ + PORT, + /** + * number element of the pressure in hPa. + */ + PRESSURE, + /** + * This element represents the right ascension of the pointing direction. + */ + RA, + /** + * Reset CCD frame to default X,Y,W, and H settings. Set binning to 1x1. + */ + RESET, + /** + * Close dome shutter. + */ + SHUTTER_CLOSE, + /** + * Open dome shutter. + */ + SHUTTER_OPEN, + /** + * Slew to a coordinate and stop. + */ + SLEW, + /** + * Slow speed. + */ + SLEW_CENTERING, + /** + * Medium speed. + */ + SLEW_FIND, + /** + * 0.5x to 1.0x sidereal rate or slowest possible speed. + */ + SLEW_GUIDE, + /** + * Maximum speed. + */ + SLEW_MAX, + /** + * generic SWICH element. + */ + SWITCHn, + /** + * Accept current coordinate as correct. + */ + SYNC, + /** + * Telescope aperture, mm. + */ + TELESCOPE_APERTURE, + /** + * Telescope focal length, mm. + */ + TELESCOPE_FOCAL_LENGTH, + /** + * number element of the temperature in Kelvin. + */ + TEMPERATURE, + /** + * Guide the scope east for TIMED_GUIDE_E milliseconds. + */ + TIMED_GUIDE_E, + /** + * Guide the scope north for TIMED_GUIDE_N milliseconds. + */ + TIMED_GUIDE_N, + /** + * Guide the scope south for TIMED_GUIDE_S milliseconds. + */ + TIMED_GUIDE_S, + /** + * Guide the scope west for TIMED_GUIDE_W milliseconds. + */ + TIMED_GUIDE_W, + /** + * Slew to a coordinate and track. + */ + TRACK, + /** + * Custom track rate. This element is optional. + */ + + TRACK_CUSTOM, + /** + * Track at lunar rate. + */ + TRACK_LUNAR, + /** + * Track at sidereal rate. + */ + TRACK_SIDEREAL, + /** + * Track at solar rate. + */ + TRACK_SOLAR, + /** + * Unpark the telescope. + */ + UNPARK, + /** + * switch element of the Send blob to client and save it locally as well. + */ + UPLOAD_BOTH, + /** + * switch element of the Send BLOB to client. + */ + UPLOAD_CLIENT, + /** + * text element of the Upload directory if the BLOB is saved locally. + */ + UPLOAD_DIR, + /** + * switch element of the Save BLOB locally. + */ + UPLOAD_LOCAL, + /** + * text element of the Prefix used when saving filename. + */ + UPLOAD_PREFIX, + /** + * text element of the UTC time in ISO 8601 format. + */ + UTC, + /** + * Vertical binning. + */ + VER_BIN, + /** + * Frame width in pixels. + */ + WIDTH, + /** + * Left-most pixel position. + */ + X, + /** + * Top-most pixel position. + */ + Y, + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIStandardProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIStandardProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..748079b089d9edde45cdfbf176ce4d9392432054 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/properties/INDIStandardProperty.java @@ -0,0 +1,305 @@ +package leigh.astro.indi.properties; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2012 - 2015 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import static leigh.astro.indi.properties.INDIStandardElement.*; + +/** + * The following tables describe standard properties pertaining to generic + * devices and class-specific devices like telescope, CCDs...etc. The name of a + * standard property and its members must be strictly reserved in all drivers. + * However, it is permissible to change the label element of properties. You can + * find numerous uses of the standard properties in the INDI library driver + * repository. We use enum instead of constants to be better able to trace the + * references. + * + * @author Richard van Nieuwenhoven + * @see http://indilib.org/develop/developer-manual/101-standard-properties.html + */ +public enum INDIStandardProperty { + /** + * property is no General Property. + */ + NONE, + /** + * the switch property to connect the driver to the device. + */ + CONNECTION(CONNECT, DISCONNECT), + /** + * the device text property of the connection port of to the device. + */ + DEVICE_PORT(PORT), + /** + * number property of the Local sidereal time HH:MM:SS. + */ + TIME_LST(LST), + /** + * text property of the UTC Time & Offset. + */ + TIME_UTC(UTC, OFFSET), + /** + * number property of the Earth geodetic coordinate. + */ + GEOGRAPHIC_COORD(LAT, LONG, ELEV), + /** + * Equatorial astrometric epoch of date coordinate. + */ + EQUATORIAL_EOD_COORD(RA, DEC), + /** + * Equatorial astrometric J2000 coordinate. + */ + EQUATORIAL_COORD(RA, DEC), + /** + * Weather conditions. + */ + ATMOSPHERE(TEMPERATURE, PRESSURE, HUMIDITY), + /** + * upload settings for blobs. + */ + UPLOAD_MODE(UPLOAD_CLIENT, UPLOAD_LOCAL, UPLOAD_BOTH), + /** + * settings for the upload mode local. + */ + UPLOAD_SETTINGS(UPLOAD_DIR, UPLOAD_PREFIX), + /** + * topocentric coordinate. + */ + HORIZONTAL_COORD(ALT, AZ), + /** + * Action device takes when sent any *_COORD property. + */ + ON_COORD_SET(SLEW, TRACK, SYNC), + /** + * Move telescope north or south. + */ + TELESCOPE_MOTION_NS(MOTION_NORTH, MOTION_SOUTH), + /** + * Move telescope west or east. + */ + TELESCOPE_MOTION_WE(MOTION_WEST, MOTION_EAST), + /** + * Timed pulse guide in north/south direction. + */ + TELESCOPE_TIMED_GUIDE_NS(TIMED_GUIDE_N, TIMED_GUIDE_S), + /** + * Timed pulse guide in west/east direction. + */ + TELESCOPE_TIMED_GUIDE_WE(TIMED_GUIDE_W, TIMED_GUIDE_E), + /** + * Multiple switch slew rate. The driver can define as many switches as + * desirable, but at minimum should implement the four switches below. + */ + TELESCOPE_SLEW_RATE(SLEW_GUIDE, SLEW_CENTERING, SLEW_FIND, SLEW_MAX), + /** + * Park and unpark the telescope. + */ + TELESCOPE_PARK(PARK, UNPARK), + /** + * Stop telescope rapidly, but gracefully. + */ + TELESCOPE_ABORT_MOTION(ABORT_MOTION), + /** + * tracking speed of the scope. + */ + TELESCOPE_TRACK_RATE(TRACK_SIDEREAL, TRACK_SOLAR, TRACK_LUNAR, TRACK_CUSTOM), + /** + * information about the telescope. + */ + TELESCOPE_INFO(TELESCOPE_APERTURE, TELESCOPE_FOCAL_LENGTH, GUIDER_APERTURE, GUIDER_FOCAL_LENGTH), + /** + * Expose the CCD chip for CCD_EXPOSURE_VALUE seconds. + */ + CCDn_EXPOSURE(CCD_EXPOSURE_VALUE), + /** + * Abort CCD exposure. + */ + CCDn_ABORT_EXPOSURE(ABORT), + /** + * CCD frame size. + */ + CCDn_FRAME(X, Y, WIDTH, HEIGHT), + /** + * CCD chip temperature in degrees Celsius. + */ + CCDn_TEMPERATURE(CCD_TEMPERATURE_VALUE), + /** + * CCD Cooler control. + */ + CCDn_COOLER(COOLER_ON, COOLER_OFF), + /** + * Percentage % of Cooler Power utilized. + */ + CCDn_COOLER_POWER(CCD_COOLER_VALUE), + /** + * frame exposure type. + */ + CCDn_FRAME_TYPE(FRAME_LIGHT, FRAME_BIAS, FRAME_DARK, FRAME_FLAT), + /** + * ccd binning. + */ + CCDn_BINNING(HOR_BIN, VER_BIN), + /** + * ccd frame compression. + */ + CCDn_COMPRESSION(CCD_COMPRESS, CCD_RAW), + /** + * Reset CCD frame to default X,Y,W, and H settings. Set binning to 1x1. + */ + CCDn_FRAME_RESET(RESET), + /** + * CCD informations. + */ + CCDn_INFO(CCD_MAX_X, CCD_MAX_Y, CCD_PIXEL_SIZE, CCD_PIXEL_SIZE_X, CCD_PIXEL_SIZE_Y, CCD_BITSPERPIXEL), + /** + * Color Filter Array information if the CCD produces a bayered image. + * Debayering performed at client side. + */ + CCDn_CFA(CFA_OFFSET_X, CFA_OFFSET_Y, CFA_TYPE), + /** + * CCD1 for primary CCD, CCD2 for guider CCD.Binary fits data encoded in + * base64. The CCD1.format is used to indicate the data type (e.g. ".fits"). + */ + CCDn, + /** + * The filter wheel's current slot number. Important: Filter numbers start + * from 1 to N. + */ + FILTER_SLOT(FILTER_SLOT_VALUE), + /** + * The filter wheel's current slot name. + */ + FILTER_NAME(FILTER_NAME_VALUE), + /** + * Select focus speed from 0 to N where 0 maps to no motion, and N maps to + * the fastest speed possible. + */ + FOCUS_SPEED(FOCUS_SPEED_VALUE), + /** + * focuser motion. + */ + FOCUS_MOTION(FOCUS_INWARD, FOCUS_OUTWARD), + /** + * Focus in the direction of FOCUS_MOTION at rate FOCUS_SPEED for + * FOCUS_TIMER_VALUE milliseconds. + */ + FOCUS_TIMER(FOCUS_TIMER_VALUE), + /** + * Relative position. + */ + REL_FOCUS_POSITION(FOCUS_RELATIVE_POSITION), + /** + * Absolute position. + */ + ABS_FOCUS_POSITION(FOCUS_ABSOLUTE_POSITION), + + /** + * abort the focuser motion. + */ + FOCUS_ABORT_MOTION(ABORT), + /** + * Set dome speed in RPM. + */ + DOME_SPEED(DOME_SPEED_VALUE), + /** + * Move dome, looking down. + */ + DOME_MOTION(DOME_CW, DOME_CCW), + /** + * Move the dome in the direction of DOME_MOTION at rate DOME_SPEED for + * DOME_TIMER_VALUE milliseconds. + */ + DOME_TIMER(DOME_TIMER_VALUE), + /** + * Relative position. + */ + REL_DOME_POSITION(DOME_RELATIVE_POSITION), + /** + * Absolute position. + */ + ABS_DOME_POSITION(DOME_ABSOLUTE_POSITION), + /** + * Abort dome motion. + */ + DOME_ABORT_MOTION(ABORT), + /** + * dome shutter controll. + */ + DOME_SHUTTER(SHUTTER_OPEN, SHUTTER_CLOSE), + /** + * Dome go to position. + */ + DOME_GOTO(DOME_HOME, DOME_PARK), + /** + * Dome position parameters. + */ + DOME_PARAMS(HOME_POSITION, PARK_POSITION, AUTOSYNC_THRESHOLD), + /** + * (Dis/En)able dome slaving. + */ + DOME_AUTOSYNC(DOME_AUTOSYNC_ENABLE, DOME_AUTOSYNC_DISABLE), + /** + * Dome mesurements / dimentions. + */ + DOME_MEASUREMENTS(DM_DOME_RADIUS, DOME_SHUTTER_WIDTH, DM_NORTH_DISPLACEMENT, DM_EAST_DISPLACEMENT, DM_UP_DISPLACEMENT, DM_OTA_OFFSET), + /** + * text property of the Name of active devices. If defined, at least one + * member below must be defined in the vector.ACTIVE_DEVICES is used to aid + * clients in automatically providing the users with a list of active + * devices (i.e. CONNECTION is ON) whenever needed. For example, a CCD + * driver may define ACTIVE_DEVICES property with one member: + * ACTIVE_TELESCOPE. Suppose that the client is also running LX200 Basic + * driver to control the telescope. If the telescope is connected, the + * client may automatically fill the ACTIVE_TELESCOPE field or provide a + * drop-down list of active telescopes to select from. Once set, the CCD + * driver may record, for example, the telescope name, RA, DEC, among other + * metadata once it captures an image. Therefore, ACTIVE_DEVICES is + * primarily used to link together different classes of devices to exchange + * information if required. + */ + ACTIVE_DEVICES(ACTIVE_TELESCOPE, ACTIVE_CCD, ACTIVE_FILTER, ACTIVE_FOCUSER, ACTIVE_DOME, ACTIVE_LOCATION, ACTIVE_WEATHER, ACTIVE_TIME, ACTIVE_SWITCH), + /** + * generic SWICH property. + */ + SWITCH_MODULE(SWITCHn); + + /** + * standard elements of this property. + */ + private final INDIStandardElement[] elements; + + /** + * constructor. + * + * @param elements standard elements of the property. + */ + INDIStandardProperty(INDIStandardElement... elements) { + this.elements = elements; + } + + /** + * @return the array of elements this property generally has. + */ + public final INDIStandardElement[] elements() { + return this.elements; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefBlob.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefBlob.java new file mode 100644 index 0000000000000000000000000000000000000000..4e14b99d786bc27a3250273e8cac93059c33e1c9 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefBlob.java @@ -0,0 +1,51 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defBLOB") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + DefElement.class +}) +public class DefBlob extends DefElement { + + @Override + public boolean isBlob() { + return true; + } + + @Override + public boolean isDefBlobElement() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefBlobVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefBlobVector.java new file mode 100644 index 0000000000000000000000000000000000000000..fff0c4ab2f788def980b9301222ecd7c52e82e62 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefBlobVector.java @@ -0,0 +1,49 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defBLOBVector") +public class DefBlobVector extends DefVector { + + @Override + public boolean isBlob() { + return true; + } + + @Override + public boolean isDefBlobVector() { + return true; + } + + @Override + public boolean isVector() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefElement.java new file mode 100644 index 0000000000000000000000000000000000000000..100e55a07f8fdf4e7f7944e4196e32b66b62d99a --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefElement.java @@ -0,0 +1,107 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @param type for the builder + * @author Richard van Nieuwenhoven + */ +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + DefElement.class +}) +public abstract class DefElement extends INDIProtocol { + + /** + * INDI XML protocol label attribute. + */ + @XStreamAsAttribute + private String label; + + /** + * the text content value of the element. + */ + private String textContent; + + /** + * @return label attribute of the element . + */ + public String getLabel() { + return label; + } + + @Override + public boolean isDef() { + return true; + } + + @Override + public boolean isElement() { + return true; + } + + /** + * sets the label attribute of the element. + * + * @param newLabel the label to set. + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setLabel(String newLabel) { + this.label = newLabel; + return (T) this; + } + + /** + * @return the text content of the element. + */ + public String getTextContent() { + return textContent; + } + + /** + * set the test content of the element. + * + * @param newTextContent the new text content value. + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setTextContent(String newTextContent) { + this.textContent = newTextContent; + return (T) this; + } + + @Override + public T trim() { + this.label = trim(this.label); + this.textContent = trim(this.textContent); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefLight.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefLight.java new file mode 100644 index 0000000000000000000000000000000000000000..f10d12c0ad53d41462feae3dfc1459dc73e1651a --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefLight.java @@ -0,0 +1,51 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defLight") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + DefElement.class +}) +public class DefLight extends DefElement { + + @Override + public boolean isDefLightElement() { + return true; + } + + @Override + public boolean isLight() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefLightVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefLightVector.java new file mode 100644 index 0000000000000000000000000000000000000000..8f0f3dd8c64cbc6fa3dc59acb0b39918ffeb2fab --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefLightVector.java @@ -0,0 +1,45 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defLightVector") +public class DefLightVector extends DefVector { + + @Override + public boolean isDefLightElement() { + return true; + } + + @Override + public boolean isDefLightVector() { + return true; + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefNumber.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefNumber.java new file mode 100644 index 0000000000000000000000000000000000000000..c0bb5ece5102187c52c93809b55ebdd37eb80217 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefNumber.java @@ -0,0 +1,158 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defNumber") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + DefElement.class +}) +public class DefNumber extends DefElement { + + /** + * the format element attribute. + */ + @XStreamAsAttribute + private String format; + + /** + * the max element attribute. + */ + @XStreamAsAttribute + private String max; + + /** + * the min element attribute. + */ + @XStreamAsAttribute + private String min; + + /** + * The step element attribute. + */ + @XStreamAsAttribute + private String step; + + /** + * @return the format element attribute. + */ + public String getFormat() { + return format; + } + + /** + * @return the max element attribute. + */ + public String getMax() { + return max; + } + + /** + * @return the min element attribute. + */ + public String getMin() { + return min; + } + + /** + * @return the step element attribute. + */ + public String getStep() { + return step; + } + + @Override + public boolean isDefNumberElement() { + return true; + } + + @Override + public boolean isNumber() { + return true; + } + + /** + * set the format element atttribute. + * + * @param newFormat the new format value + * @return this for builder pattern. + */ + public DefNumber setFormat(String newFormat) { + format = newFormat; + return this; + } + + /** + * set the max element atttribute. + * + * @param newMax the new max value + * @return this for builder pattern. + */ + public DefNumber setMax(String newMax) { + max = newMax; + return this; + } + + /** + * set the min element atttribute. + * + * @param newMin the new min value + * @return this for builder pattern. + */ + public DefNumber setMin(String newMin) { + min = newMin; + return this; + } + + /** + * set the step element atttribute. + * + * @param newLeft the new step value + * @return this for builder pattern. + */ + public DefNumber setStep(String newLeft) { + step = newLeft; + return this; + } + + @Override + public DefNumber trim() { + min = trim(min); + max = trim(max); + format = trim(format); + step = trim(step); + return super.trim(); + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefNumberVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefNumberVector.java new file mode 100644 index 0000000000000000000000000000000000000000..3e6f0a029463ba954482ab2c1aa084afdbb7083c --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefNumberVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defNumberVector") +public class DefNumberVector extends DefVector { + + @Override + public boolean isDefNumberVector() { + return true; + } + + @Override + public boolean isNumber() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefSwitch.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefSwitch.java new file mode 100644 index 0000000000000000000000000000000000000000..eceedd6b146c73f068eb4061dd69949efaf3e855 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefSwitch.java @@ -0,0 +1,42 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defSwitch") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + DefElement.class +}) +public class DefSwitch extends DefElement { + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefSwitchVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefSwitchVector.java new file mode 100644 index 0000000000000000000000000000000000000000..b95eca70d0b96d48586aada20137e35c03e11fb3 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefSwitchVector.java @@ -0,0 +1,75 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defSwitchVector") +public class DefSwitchVector extends DefVector { + + /** + * the rule element attribute. + */ + @XStreamAsAttribute + private String rule; + + @Override + public boolean isDefSwitchVector() { + return true; + } + + @Override + public boolean isSwitch() { + return true; + } + + /** + * @return the rule element attribute. + */ + public String getRule() { + return rule; + } + + /** + * set the rule element atttribute. + * + * @param newRule the new rule value + * @return this for builder pattern. + */ + public DefSwitchVector setRule(String newRule) { + rule = newRule; + return this; + } + + @Override + public DefSwitchVector trim() { + rule = trim(rule); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefText.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefText.java new file mode 100644 index 0000000000000000000000000000000000000000..e6368085286c10c99e0ae582e5d1418954b34110 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefText.java @@ -0,0 +1,51 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defText") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + DefElement.class +}) +public class DefText extends DefElement { + + @Override + public boolean isDefTextElement() { + return true; + } + + @Override + public boolean isText() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefTextVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefTextVector.java new file mode 100644 index 0000000000000000000000000000000000000000..7982f36df5f5c3e84c14a458be8f3d4a13b68ac4 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefTextVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("defTextVector") +public class DefTextVector extends DefVector { + + @Override + public boolean isDefTextVector() { + return true; + } + + @Override + public boolean isText() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefVector.java new file mode 100644 index 0000000000000000000000000000000000000000..3c021f347833f43b91433e5b787dfb2a28c82e94 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DefVector.java @@ -0,0 +1,193 @@ +package leigh.astro.indi.protocol; + +/* + * #%L INDI Protocol implementation %% Copyright (C) 2012 - 2014 indiforjava %% + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Lesser Public License for more details. You should have received a copy of + * the GNU General Lesser Public License along with this program. If not, see + * . #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamImplicit; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class represents an INDI XML protocol element. + * + * @param type for the builder + * @author Richard van Nieuwenhoven + */ +public abstract class DefVector extends INDIProtocol { + + /** + * the group element attribute. + */ + @XStreamAsAttribute + private String group; + + /** + * the label element attribute. + */ + @XStreamAsAttribute + private String label; + + /** + * the perm element attribute. + */ + @XStreamAsAttribute + private String perm; + + /** + * the state element attribute. + */ + @XStreamAsAttribute + private String state; + + /** + * the timeout element attribute. + */ + @XStreamAsAttribute + private String timeout; + + /** + * the child elements of the vector. + */ + @XStreamImplicit + private List> elements; + + /** + * @return the group element attribute. + */ + public String getGroup() { + return group; + } + + /** + * @return the label element attribute. + */ + public String getLabel() { + return label; + } + + /** + * @return the perm element attribute. + */ + public String getPerm() { + return perm; + } + + /** + * @return the state element attribute. + */ + public String getState() { + return state; + } + + /** + * @return the timeout element attribute. + */ + public String getTimeout() { + return timeout; + } + + @Override + public boolean isDef() { + return true; + } + + @Override + public boolean isVector() { + return true; + } + + /** + * set the group element atttribute. + * + * @param newGroup the new group value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setGroup(String newGroup) { + this.group = newGroup; + return (T) this; + } + + /** + * set the label element atttribute. + * + * @param newLabel the new label value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setLabel(String newLabel) { + this.label = newLabel; + return (T) this; + } + + /** + * set the perm element atttribute. + * + * @param newPerm the new perm value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setPerm(String newPerm) { + this.perm = newPerm; + return (T) this; + } + + /** + * set the state element atttribute. + * + * @param newState the new state value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setState(String newState) { + this.state = newState; + return (T) this; + } + + /** + * set the timeout element atttribute. + * + * @param newTimeout the new timeout value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setTimeout(String newTimeout) { + this.timeout = newTimeout; + return (T) this; + } + + /** + * @return the list of element children of this element. + */ + public List> getElements() { + if (elements == null) { + elements = new ArrayList<>(); + } + return elements; + } + + @Override + public T trim() { + this.group = trim(this.group); + this.label = trim(this.label); + this.perm = trim(this.perm); + this.state = trim(this.state); + this.timeout = trim(this.timeout); + for (DefElement element : getElements()) { + element.trim(); + } + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DelProperty.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DelProperty.java new file mode 100644 index 0000000000000000000000000000000000000000..baeea185dc924c6720407b27ec7ea50037391274 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/DelProperty.java @@ -0,0 +1,65 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("delProperty") +public class DelProperty extends INDIProtocol { + + /** + * the version attribute of the element. + */ + @XStreamAsAttribute + private String version; + + /** + * @return the version attribute of the element. + */ + public String getVersion() { + return version; + } + + /** + * set the version attribute of the element. + * + * @param newVersion the new attibute version value + * @return this for builder pattern. + */ + public DelProperty setVersion(String newVersion) { + version = newVersion; + return this; + } + + @Override + public DelProperty trim() { + version = trim(version); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/EnableBLOB.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/EnableBLOB.java new file mode 100644 index 0000000000000000000000000000000000000000..30783cec60376712a6d1ebfac39b9c489e7ab1b0 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/EnableBLOB.java @@ -0,0 +1,75 @@ +package leigh.astro.indi.protocol; + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("enableBLOB") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + EnableBLOB.class +}) +public class EnableBLOB extends INDIProtocol { + + @Override + public boolean isEnableBLOB() { + return true; + } + + /** + * the text content value of the element. + */ + private String textContent; + + /** + * @return the text content of the element. + */ + public String getTextContent() { + return textContent; + } + + /** + * set the test content of the element. + * + * @param newTextContent the new text content value. + * @return this for builder pattern. + */ + public EnableBLOB setTextContent(String newTextContent) { + textContent = newTextContent; + return this; + } + + @Override + public EnableBLOB trim() { + textContent = trim(textContent); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/GetProperties.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/GetProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..f1b05757d74418d618cfc35a9c26318820253d8b --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/GetProperties.java @@ -0,0 +1,96 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("getProperties") +public class GetProperties extends INDIProtocol { + + /** + * the property attribute of the element. + */ + @XStreamAsAttribute + private String property; + + /** + * the version attribute of the element. + */ + @XStreamAsAttribute + private String version; + + /** + * @return the property attribute of the element. + */ + public String getProperty() { + if (property == null) { + return ""; + } + return property.trim(); + } + + /** + * @return the version attribute of the element. + */ + public String getVersion() { + if (version == null) { + return ""; + } + return version; + } + + /** + * set the property attribute of the element. + * + * @param newProperty the new attibute property value + * @return this for builder pattern. + */ + public GetProperties setProperty(String newProperty) { + property = newProperty; + return this; + } + + /** + * set the version attribute of the element. + * + * @param newVersion the new attibute version value + * @return this for builder pattern. + */ + public GetProperties setVersion(String newVersion) { + version = newVersion; + return this; + } + + @Override + public GetProperties trim() { + property = trim(property); + version = trim(version); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/INDIProtocol.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/INDIProtocol.java new file mode 100644 index 0000000000000000000000000000000000000000..364da9214ce886c2d57fdfd2accc656ca2718f44 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/INDIProtocol.java @@ -0,0 +1,472 @@ +package leigh.astro.indi.protocol; + +/* + * #%L INDI Protocol implementation %% Copyright (C) 2012 - 2014 indiforjava %% + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Lesser Public License for more details. You should have received a copy of + * the GNU General Lesser Public License along with this program. If not, see + * . #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import leigh.astro.indi.protocol.io.INDIProtocolFactory; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; + +/** + * This class represents an INDI XML protocol element. + * + * @param type for the builder + * @author Richard van Nieuwenhoven + */ +public abstract class INDIProtocol { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * the device element attribute. + */ + @XStreamAsAttribute + private String device; + + /** + * the name element attribute. + */ + @XStreamAsAttribute + private String name; + + /** + * the message element attribute. + */ + @XStreamAsAttribute + private String message; + + /** + * the timestamp attribute of the element. + */ + @XStreamAsAttribute + private String timestamp; + + /** + * @return the message element attribute. + */ + public final String getMessage() { + return message; + } + + /** + * @return the timestamp attribute of the element. + */ + public final String getTimestamp() { + return timestamp; + } + + /** + * set the max message atttribute. + * + * @param newMessage the new message value + * @return this for builder pattern. + */ + + @SuppressWarnings("unchecked") + public T setMessage(String newMessage) { + this.message = newMessage; + return (T) this; + } + + /** + * set the timestamp attribute of the element. + * + * @param newTimestamp the new attibute timestamp value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setTimestamp(String newTimestamp) { + this.timestamp = newTimestamp; + return (T) this; + } + + /** + * @return the name element attribute. + */ + public String getName() { + return name; + } + + /** + * @return is this a blob element. + */ + public boolean isBlob() { + return false; + } + + /** + * @return is this a definition element. + */ + public boolean isDef() { + return false; + } + + /** + * @return is this a definition blob element. + */ + public boolean isDefBlobElement() { + return false; + } + + /** + * @return is this a definition blob vector. + */ + public boolean isDefBlobVector() { + return false; + } + + /** + * @return is this a definition element. + */ + public boolean isDefElement() { + return false; + } + + /** + * @return is this a definition light element. + */ + public boolean isDefLightElement() { + return false; + } + + /** + * @return is this a definition light vector. + */ + public boolean isDefLightVector() { + return false; + } + + /** + * @return is this a definition number element. + */ + public boolean isDefNumberElement() { + return false; + } + + /** + * @return is this a definition number vector. + */ + public boolean isDefNumberVector() { + return false; + } + + /** + * @return is this a definition switch vector. + */ + public boolean isDefSwitchVector() { + return false; + } + + /** + * @return is this a definition text element. + */ + public boolean isDefTextElement() { + return false; + } + + /** + * @return is this a definition text vector. + */ + public boolean isDefTextVector() { + return false; + } + + /** + * @return is this a definition vector. + */ + public boolean isDefVector() { + return false; + } + + /** + * @return is this a definition element. + */ + public boolean isElement() { + return false; + } + + /** + * @return is this a enable blob message. + */ + public boolean isEnableBLOB() { + return false; + } + + /** + * @return is this a get properties. + */ + public boolean isGetProperties() { + return false; + } + + /** + * @return is this a light element. + */ + public boolean isLight() { + return false; + } + + /** + * @return is this a new properties. + */ + public boolean isNew() { + return false; + } + + /** + * @return is this a new properties. + */ + public boolean isNewBlobVector() { + return false; + } + + /** + * @return is this a n ewproperties. + */ + public boolean isNewLightVector() { + return false; + } + + /** + * @return is this a new properties. + */ + public boolean isNewNumberVector() { + return false; + } + + /** + * @return is this a new properties. + */ + public boolean isNewSwitchVector() { + return false; + } + + /** + * @return is this a new properties. + */ + public boolean isNewTextVector() { + return false; + } + + /** + * @return is this a new properties. + */ + public boolean isNewVector() { + return false; + } + + /** + * @return is this a number element. + */ + public boolean isNumber() { + return false; + } + + /** + * @return is this a one element. + */ + public boolean isOne() { + return false; + } + + /** + * @return is this a one blob element. + */ + public boolean isOneBlob() { + return false; + } + + /** + * @return is this a one element. + */ + public boolean isOneElement() { + return false; + } + + /** + * @return is this a one light element. + */ + public boolean isOneLight() { + return false; + } + + /** + * @return is this a one number element. + */ + public boolean isOneNumber() { + return false; + } + + /** + * @return is this a one text element. + */ + public boolean isOneText() { + return false; + } + + /** + * @return is this a set element. + */ + public boolean isSet() { + return false; + } + + /** + * @return is this a set blob vector. + */ + public boolean isSetBlobVector() { + return false; + } + + /** + * @return is this a set light vector. + */ + public boolean isSetLightVector() { + return false; + } + + /** + * @return is this a set number vector. + */ + public boolean isSetNumberVector() { + return false; + } + + /** + * @return is this a set switch vector. + */ + public boolean isSetSwitchVector() { + return false; + } + + /** + * @return is this a set text vector. + */ + public boolean isSetTextVector() { + return false; + } + + /** + * @return is this a set vector. + */ + public boolean isSetVector() { + return false; + } + + /** + * @return is this a switch. + */ + public boolean isSwitch() { + return false; + } + + /** + * @return is this a text element. + */ + public boolean isText() { + return false; + } + + /** + * @return is this a vector. + */ + public boolean isVector() { + return false; + } + + /** + * set the name element attribute. + * + * @param newName the new name of the attribute. + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setName(String newName) { + this.name = newName; + return (T) this; + } + + /** + * set the device element atttribute. + * + * @param newDevice the new device value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public final T setDevice(String newDevice) { + this.device = newDevice; + return (T) this; + } + + /** + * @return the device element attribute. + */ + public final String getDevice() { + return device; + } + + @Override + public String toString() { + return INDIProtocolFactory.toString(this); + } + + /** + * @return true when a non empty name is available. + */ + public boolean hasName() { + return getName() != null && !getName().trim().isEmpty(); + } + + /** + * @return true when a non empty device is available. + */ + public boolean hasDevice() { + return getDevice() != null && !getDevice().trim().isEmpty(); + } + + /** + * @return true when a non empty message is available. + */ + public boolean hasMessage() { + return getMessage() != null && !getMessage().trim().isEmpty(); + } + + /** + * thrim all strings in the structure so all places working with the object + * do not have to trim any stings. + * + * @return myself + */ + public T trim() { + this.name = trim(this.name); + this.device = trim(this.device); + this.message = trim(this.message); + this.timestamp = trim(this.timestamp); + return (T) this; + } + + /** + * Trim one value but keep it null when it was null. + * + * @param value the value to trim + * @return the trimmed string or null. + */ + protected String trim(String value) { + if (value != null) { + return value.trim(); + } + return null; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/Message.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/Message.java new file mode 100644 index 0000000000000000000000000000000000000000..672d16906e9816a1a7372872704262a483c14cc0 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/Message.java @@ -0,0 +1,35 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("message") +public class Message extends INDIProtocol { + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewBlobVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewBlobVector.java new file mode 100644 index 0000000000000000000000000000000000000000..5fb2d888a2edf5e43f19e6a517b4420c7cfa7fa4 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewBlobVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("newBLOBVector") +public class NewBlobVector extends NewVector { + + @Override + public boolean isBlob() { + return true; + } + + @Override + public boolean isNewBlobVector() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewLightVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewLightVector.java new file mode 100644 index 0000000000000000000000000000000000000000..46a9f46a7cc1eb72e4112329945674e04aacdac6 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewLightVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("newLightVector") +public class NewLightVector extends NewVector { + + @Override + public boolean isLight() { + return true; + } + + @Override + public boolean isNewLightVector() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewNumberVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewNumberVector.java new file mode 100644 index 0000000000000000000000000000000000000000..92baacb32edde8279bbfd232a4ed06e7509869a4 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewNumberVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("newNumberVector") +public class NewNumberVector extends NewVector { + + @Override + public boolean isNewNumberVector() { + return true; + } + + @Override + public boolean isNumber() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewSwitchVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewSwitchVector.java new file mode 100644 index 0000000000000000000000000000000000000000..9b381fefaf95547484c3e71260c490fb0bc8383d --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewSwitchVector.java @@ -0,0 +1,75 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("newSwitchVector") +public class NewSwitchVector extends NewVector { + + /** + * the rule attribute of the element. + */ + @XStreamAsAttribute + private String rule; + + /** + * @return the rule attribute of the element. + */ + public String getRule() { + return rule; + } + + @Override + public boolean isNewSwitchVector() { + return true; + } + + @Override + public boolean isSwitch() { + return true; + } + + /** + * set the rule attribute of the element. + * + * @param newRule the new value for the rule attribute. + * @return this for builder pattern. + */ + public NewSwitchVector setRule(String newRule) { + rule = newRule; + return this; + } + + @Override + public NewSwitchVector trim() { + rule = trim(rule); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewTextVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewTextVector.java new file mode 100644 index 0000000000000000000000000000000000000000..efd952c0cefb7e850deb5c1a3d64769a5052c416 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewTextVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("newTextVector") +public class NewTextVector extends NewVector { + + @Override + public boolean isNewTextVector() { + return true; + } + + @Override + public boolean isText() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewVector.java new file mode 100644 index 0000000000000000000000000000000000000000..70e5b1538ada686ae46b7c7b4bbce3761c48c861 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/NewVector.java @@ -0,0 +1,136 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamImplicit; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class represents an INDI XML protocol element. + * + * @param type for the builder + * @author Richard van Nieuwenhoven + */ +public abstract class NewVector extends INDIProtocol { + + /** + * the child elements of the vector. + */ + @XStreamImplicit + private List> elements; + + /** + * the state attribute of the element. + */ + @XStreamAsAttribute + private String state; + + /** + * the timeout attribute of the element. + */ + @XStreamAsAttribute + private String timeout; + + /** + * add one element to the list. + * + * @param element the element to add. + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T addElement(OneElement element) { + getElements().add(element); + return (T) this; + } + + /** + * @return the list of element children of this element. + */ + public List> getElements() { + if (elements == null) { + elements = new ArrayList<>(); + } + return elements; + } + + /** + * @return the state attribute of the element. + */ + public String getState() { + return state; + } + + /** + * @return the timeout attribute of the element. + */ + public String getTimeout() { + return timeout; + } + + @Override + public boolean isNew() { + return true; + } + + @Override + public boolean isNewVector() { + return true; + } + + /** + * set the state attribute of the element. + * + * @param newState the new attibute state value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setState(String newState) { + this.state = newState; + return (T) this; + } + + /** + * set the timeout attribute of the element. + * + * @param newTimeout the new attibute timeout value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setTimeout(String newTimeout) { + this.timeout = newTimeout; + return (T) this; + } + + @Override + public T trim() { + this.state = trim(this.state); + this.timeout = trim(this.timeout); + for (OneElement element : getElements()) { + element.trim(); + } + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneBlob.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneBlob.java new file mode 100644 index 0000000000000000000000000000000000000000..27787221db80cebd7f09b04909f5323b387bffb0 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneBlob.java @@ -0,0 +1,124 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("oneBLOB") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "byteContent" +}, types = { + OneBlob.class +}) +public class OneBlob extends OneElement { + + /** + * The byte content of the blob. Attention the textContent should not be + * used in the blob! + */ + @XStreamConverter(leigh.astro.indi.protocol.converter.EncodedByteArrayConverter.class) + private byte[] byteContent; + + /** + * the format attribute of the element. + */ + private String format; + + /** + * the size attribute of the element. + */ + private String size; + + /** + * @return the byte content of the element. + */ + public byte[] getByteContent() { + return byteContent; + } + + /** + * @return the format attribute of the element. + */ + public String getFormat() { + return format; + } + + /** + * @return the size attribute of the element. + */ + public String getSize() { + return size; + } + + @Override + public boolean isBlob() { + return true; + } + + @Override + public boolean isOneBlob() { + return true; + } + + /** + * set the byte content of the element. (and use the length to set the + * size). + * + * @param newByteContent the new byte content. + * @return this for builder pattern. + */ + public OneBlob setByteContent(byte[] newByteContent) { + byteContent = newByteContent; + if (byteContent != null) { + size = Integer.toString(byteContent.length); + } else { + size = Integer.toString(0); + } + return this; + } + + /** + * set the format attribute of the element. + * + * @param newFormat the new format value of the element. + * @return this for builder pattern. + */ + public OneBlob setFormat(String newFormat) { + format = newFormat; + return this; + } + + @Override + public OneBlob trim() { + format = trim(format); + size = trim(size); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneElement.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneElement.java new file mode 100644 index 0000000000000000000000000000000000000000..d7b960665f4b1b4a1c9df4fd7b6cea11bc931969 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneElement.java @@ -0,0 +1,75 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @param type for the builder + * @author Richard van Nieuwenhoven + */ +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + OneElement.class +}) +public abstract class OneElement extends INDIProtocol { + + /** + * the text content value of the element. + */ + private String textContent; + + /** + * @return the text content of the element. + */ + public String getTextContent() { + return textContent; + } + + @Override + public boolean isOne() { + return true; + } + + /** + * set the test content of the element. + * + * @param newTextContent the new text content value. + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setTextContent(String newTextContent) { + this.textContent = newTextContent; + return (T) this; + } + + @Override + public T trim() { + this.textContent = trim(this.textContent); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneLight.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneLight.java new file mode 100644 index 0000000000000000000000000000000000000000..939b507f572a7cab9c01d678546a7f9fbbe53f76 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneLight.java @@ -0,0 +1,51 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("oneLight") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + OneElement.class +}) +public class OneLight extends OneElement { + + @Override + public boolean isLight() { + return true; + } + + @Override + public boolean isOneLight() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneNumber.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneNumber.java new file mode 100644 index 0000000000000000000000000000000000000000..26c7e6edc5e91fed0e5a86a22ff5e7ddb70c64d2 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneNumber.java @@ -0,0 +1,107 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("oneNumber") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + OneElement.class +}) +public class OneNumber extends OneElement { + + /** + * the max attribute of the element. + */ + @XStreamAsAttribute + private String max; + + /** + * the min attribute of the element. + */ + @XStreamAsAttribute + private String min; + + /** + * @return the max attribute of the element. + */ + public String getMax() { + return max; + } + + /** + * @return the min attribute of the element. + */ + public String getMin() { + return min; + } + + @Override + public boolean isNumber() { + return true; + } + + @Override + public boolean isOneNumber() { + return true; + } + + /** + * set the max attribute of the element. + * + * @param newMax the new max attribute value of the element + * @return this for builder pattern. + */ + public OneNumber setMax(String newMax) { + max = newMax; + return this; + } + + /** + * set the min attribute of the element. + * + * @param newMin the new min attribute value of the element + * @return this for builder pattern. + */ + public OneNumber setMin(String newMin) { + min = newMin; + return this; + } + + @Override + public OneNumber trim() { + min = trim(min); + max = trim(max); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneSwitch.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneSwitch.java new file mode 100644 index 0000000000000000000000000000000000000000..cb6c17791e0da0858a15fcb208b8ffeab6c38879 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneSwitch.java @@ -0,0 +1,51 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("oneSwitch") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + OneElement.class +}) +public class OneSwitch extends OneElement { + + @Override + public boolean isLight() { + return true; + } + + @Override + public boolean isOneLight() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneText.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneText.java new file mode 100644 index 0000000000000000000000000000000000000000..c98af7c2154619a7443cd544f9284ced12ff60e3 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/OneText.java @@ -0,0 +1,51 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("oneText") +@XStreamConverter(value = ToAttributedValueConverter.class, strings = { + "textContent" +}, types = { + OneElement.class +}) +public class OneText extends OneElement { + + @Override + public boolean isOneText() { + return true; + } + + @Override + public boolean isText() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetBlobVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetBlobVector.java new file mode 100644 index 0000000000000000000000000000000000000000..a4d032323475ece40dd85b4adccc53bc6ef2a033 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetBlobVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("setBLOBVector") +public class SetBlobVector extends SetVector { + + @Override + public boolean isBlob() { + return true; + } + + @Override + public boolean isSetBlobVector() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetLightVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetLightVector.java new file mode 100644 index 0000000000000000000000000000000000000000..b9bf32f4cde3fad1b68d1f60bd56d6d6483b239f --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetLightVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("setLightVector") +public class SetLightVector extends SetVector { + + @Override + public boolean isLight() { + return true; + } + + @Override + public boolean isSetLightVector() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetNumberVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetNumberVector.java new file mode 100644 index 0000000000000000000000000000000000000000..458821980a0eac75c767f4e502a37102d0a45e62 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetNumberVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("setNumberVector") +public class SetNumberVector extends SetVector { + + @Override + public boolean isNumber() { + return true; + } + + @Override + public boolean isSetNumberVector() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetSwitchVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetSwitchVector.java new file mode 100644 index 0000000000000000000000000000000000000000..ca95262ffec52af00acef2392b7bb51fb5246070 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetSwitchVector.java @@ -0,0 +1,75 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("setSwitchVector") +public class SetSwitchVector extends SetVector { + + /** + * the rule attribute of the element. + */ + @XStreamAsAttribute + private String rule; + + /** + * @return the rule attribute of the element. + */ + public String getRule() { + return rule; + } + + @Override + public boolean isSetSwitchVector() { + return true; + } + + @Override + public boolean isSwitch() { + return true; + } + + /** + * set the rule attribute of the element. + * + * @param newRule the new value for the rule attribute. + * @return this for builder pattern. + */ + public SetSwitchVector setRule(String newRule) { + rule = newRule; + return this; + } + + @Override + public SetSwitchVector trim() { + rule = trim(rule); + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetTextVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetTextVector.java new file mode 100644 index 0000000000000000000000000000000000000000..8eafb5996686e9da919b78622457f266d9fa92ce --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetTextVector.java @@ -0,0 +1,44 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + * This class represents an INDI XML protocol element. + * + * @author Richard van Nieuwenhoven + */ +@XStreamAlias("setTextVector") +public class SetTextVector extends SetVector { + + @Override + public boolean isSetTextVector() { + return true; + } + + @Override + public boolean isText() { + return true; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetVector.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetVector.java new file mode 100644 index 0000000000000000000000000000000000000000..969beb7e892b6ea6c5745f7b1d6c03e02ae5bbe9 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/SetVector.java @@ -0,0 +1,136 @@ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamImplicit; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class represents an INDI XML protocol element. + * + * @param type for the builder + * @author Richard van Nieuwenhoven + */ +public abstract class SetVector extends INDIProtocol { + + /** + * the child elements of the vector. + */ + @XStreamImplicit + private List> elements; + + /** + * the state attribute of the element. + */ + @XStreamAsAttribute + private String state; + + /** + * the timeout attribute of the element. + */ + @XStreamAsAttribute + private String timeout; + + /** + * add one element to the list. + * + * @param element the element to add. + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T addElement(OneElement element) { + getElements().add(element); + return (T) this; + } + + /** + * @return the list of element children of this element. + */ + public List> getElements() { + if (elements == null) { + elements = new ArrayList<>(); + } + return elements; + } + + /** + * @return the state attribute of the element. + */ + public String getState() { + return state; + } + + /** + * @return the timeout attribute of the element. + */ + public String getTimeout() { + return timeout; + } + + @Override + public boolean isSet() { + return true; + } + + @Override + public boolean isSetVector() { + return true; + } + + /** + * set the state attribute of the element. + * + * @param newState the new attibute state value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setState(String newState) { + this.state = newState; + return (T) this; + } + + /** + * set the timeout attribute of the element. + * + * @param newTimeout the new attibute timeout value + * @return this for builder pattern. + */ + @SuppressWarnings("unchecked") + public T setTimeout(String newTimeout) { + this.timeout = newTimeout; + return (T) this; + } + + @Override + public T trim() { + this.state = trim(this.state); + this.timeout = trim(this.timeout); + for (OneElement element : getElements()) { + element.trim(); + } + return super.trim(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..5e3e959374bf493b528482b4ad9ebb46b9b223a5 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIConnection.java @@ -0,0 +1,60 @@ +package leigh.astro.indi.protocol.api; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.io.IOException; +import java.net.URL; + +/** + * Abstract interface that defines a indi protocol connection. The different + * implementations must provide and deliver the stream of indi objects. The + * difference betreen the implementations will be the means of transport. + * + * @author Richard van Nieuwenhoven + */ +public interface INDIConnection { + + /** + * @return the input stream of indi protokol objects. + * @throws IOException if there was a connection problem. + */ + INDIInputStream getINDIInputStream() throws IOException; + + /** + * @return the output stream of indi protokol objects. + * @throws IOException if there was a connection problem. + */ + INDIOutputStream getINDIOutputStream() throws IOException; + + /** + * close the connection together with the in and output stream. + * + * @throws IOException if there was a connection problem. + */ + void close() throws IOException; + + /** + * @return the url representing this connection. + */ + URL getURL(); +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIInputStream.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIInputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..38cd6254af4f4e90d8881d3b588d431d4fc4684a --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIInputStream.java @@ -0,0 +1,52 @@ +package leigh.astro.indi.protocol.api; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.INDIProtocol; + +import java.io.Closeable; +import java.io.IOException; + +/** + * INDI Input stream interface to read indi protocol object from a stream. + * + * @author Richard van Nieuwenhoven + * @author C. Alexander Leigh + */ +public interface INDIInputStream extends Closeable { + + /** + * closes the underlaying input stream. + * + * @throws IOException when something went wrong with the underlaying input stream. + */ + void close() throws IOException; + + /** + * @return the next indi protocol object from the stream. (blocking till the + * next is available or null at end of stream) + * @throws IOException if something went wrong with the desiralisation or the + * underlaying stream. + */ + INDIProtocol readObject() throws IOException; +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIOutputStream.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIOutputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..f93cb4d3102d2f7e33d7276430753fa0f49f8c0b --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/api/INDIOutputStream.java @@ -0,0 +1,50 @@ +package leigh.astro.indi.protocol.api; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.INDIProtocol; + +import java.io.IOException; + +/** + * INDI Output stream interface to write indi protocol object to a stream. + * + * @author Richard van Nieuwenhoven + */ +public interface INDIOutputStream { + + /** + * close the underlaying output stream. + * + * @throws IOException when something went wrong with the underlaying output stream. + */ + void close() throws IOException; + + /** + * Write an INDI protocol object to the output stream. (and flush it) + * + * @param element the element to write + * @throws IOException when something went wrong with the underlaying output stream. + */ + void writeObject(INDIProtocol element) throws IOException; +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/converter/EncodedByteArrayConverter.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/converter/EncodedByteArrayConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..8f8ab83f2f8603fa06a77f1d4f62a87896696e6a --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/converter/EncodedByteArrayConverter.java @@ -0,0 +1,68 @@ +package leigh.astro.indi.protocol.converter; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.SingleValueConverter; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; +import org.apache.commons.codec.Charsets; +import org.apache.commons.codec.binary.Base64; + +/** + * The cunking of the normal xstream base64 encoder is not good in our case so + * we use the commons encoding one. + * + * @author Richard van Nieuwenhoven + */ +public class EncodedByteArrayConverter implements Converter, SingleValueConverter { + + @Override + public boolean canConvert(@SuppressWarnings("rawtypes") Class type) { + return type.isArray() && type.getComponentType().equals(byte.class); + } + + @Override + public Object fromString(String str) { + return Base64.decodeBase64(str); + } + + @Override + public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { + writer.setValue(toString(source)); + + } + + @Override + public String toString(Object obj) { + return new String(Base64.encodeBase64((byte[]) obj), Charsets.UTF_8); + } + + @Override + public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { + return fromString(reader.getValue()); + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIInputStreamImpl.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIInputStreamImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..e78ae06aa0686ae0ff026980ddb167d03c87dc5a --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIInputStreamImpl.java @@ -0,0 +1,93 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.INDIProtocol; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; + +/** + * Input stream of INDIProtocol objects. deserialized from a xml stream. + * + * @author Richard van Nieuwenhoven + */ +public class INDIInputStreamImpl extends InputStream implements INDIInputStream { + + /** + * logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIInputStreamImpl.class); + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * The xstream object input stream that deserializes the INDIProtocol + * objects. + */ + private final ObjectInputStream in; + + /** + * create an INDI inputstream over an object input stream. + * + * @param in the object input stream + * @throws IOException when something with the underlaying stream went wrong. + */ + protected INDIInputStreamImpl(ObjectInputStream in) throws IOException { + this.in = in; + } + + @Override + public void close() throws IOException { + in.close(); + } + + @Override + public int read() throws IOException { + throw new IOException("not supported method"); + } + + @Override + public INDIProtocol readObject() throws IOException { + try { + INDIProtocol readObject = (INDIProtocol) in.readObject(); + readObject.trim(); + if (LOG.isTraceEnabled()) { + LOG.trace("received indi object " + readObject); + } + return readObject; + } catch (EOFException e) { + return null; + } catch (ClassNotFoundException e) { + throw new IOException("could not deserialize xml", e); + } + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIOutputStreamImpl.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIOutputStreamImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..4bde4469f1df2fcfb5a7d77f3c34cf69ff4eeb92 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIOutputStreamImpl.java @@ -0,0 +1,84 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.core.util.CustomObjectOutputStream; +import leigh.astro.indi.protocol.INDIProtocol; +import leigh.astro.indi.protocol.api.INDIOutputStream; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * OutPut stream of INDIProtocol objects. Serialized to a xml stream. + * + * @author Richard van Nieuwenhoven + */ +public class INDIOutputStreamImpl extends OutputStream implements INDIOutputStream { + + /** + * logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIOutputStreamImpl.class); + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * The xstream serializer. + */ + private CustomObjectOutputStream out; + + /** + * Constructor of the indi output stream. + * + * @param out the underlaying stream + * @throws IOException when something went wrong with the underlaying output stream. + */ + protected INDIOutputStreamImpl(CustomObjectOutputStream out) throws IOException { + this.out = out; + } + + @Override + public void close() throws IOException { + out.close(); + } + + @Override + public void write(int b) throws IOException { + throw new IOException("not supported method"); + } + + @Override + public synchronized void writeObject(INDIProtocol element) throws IOException { + if (LOG.isTraceEnabled()) { + LOG.trace("sending indi object " + element); + } + out.writeObject(element); + out.flush(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIPipedConnections.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIPipedConnections.java new file mode 100644 index 0000000000000000000000000000000000000000..d62f8dbbdf984d56ea55b8d094552aac75c0beb1 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIPipedConnections.java @@ -0,0 +1,264 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.INDIProtocol; +import leigh.astro.indi.protocol.api.INDIConnection; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.api.INDIOutputStream; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * Create two connected INDI protocol streams that have a blocking connection, + * reading a protokol object will block until one becomes available. + * + * @author Richard van Nieuwenhoven + */ +public final class INDIPipedConnections { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * The one end of a piped connection. + */ + private static final class INDIPipedConnection implements INDIConnection { + + /** + * a closed indicator to indicate the connection was closed. + */ + private boolean closed = false; + + /** + * the input stream of the connection. + */ + private INDIInputStream inputStream; + + /** + * the output stream of the connection. + */ + private INDIOutputStream outputStream; + + /** + * constructor of the piped connection with the in and out blocking + * queue s as a parameter. + * + * @param inputQueue the blocking input queue + * @param outputQueue the blocking output queue + */ + public INDIPipedConnection(final LinkedBlockingQueue> inputQueue, final LinkedBlockingQueue> outputQueue) { + inputStream = new INDIPipedInputStream(inputQueue, this); + outputStream = new INDIPipedOutputStream(outputQueue, this); + } + + /** + * close the connection. + */ + @Override + public void close() { + closed = true; + } + + @Override + public INDIInputStream getINDIInputStream() throws IOException { + return inputStream; + } + + @Override + public INDIOutputStream getINDIOutputStream() throws IOException { + return outputStream; + } + + /** + * @return is the connection closed. + */ + public boolean isClosed() { + return closed; + } + + @Override + public URL getURL() { + try { + return new URL("indi:///?pipe"); + } catch (MalformedURLException e) { + LOG.error("illegal std url, should never happen!", e); + return null; + } + } + } + + /** + * This class wrapes an INDIInputstream around a blocking queue. + */ + private static final class INDIPipedInputStream implements INDIInputStream { + + /** + * the parent connection this end is part of. + */ + private final INDIPipedConnection connection; + + /** + * the wrapped blocking queue. + */ + private final LinkedBlockingQueue> inputQueue; + + /** + * constructor of the wrapper. + * + * @param inputQueue the wrapped blocking queue. + * @param connection the parent connection this end is part of. + */ + private INDIPipedInputStream(LinkedBlockingQueue> inputQueue, INDIPipedConnection connection) { + this.inputQueue = inputQueue; + this.connection = connection; + } + + @Override + public void close() throws IOException { + connection.close(); + } + + @Override + public INDIProtocol readObject() throws IOException { + if (connection.isClosed()) { + return null; + } + try { + INDIProtocol readObject = inputQueue.take(); + if (readObject instanceof INDIProtokolEndMarker) { + return null; + } + readObject.trim(); + return readObject; + } catch (InterruptedException e) { + connection.close(); + return null; + } + } + } + + /** + * This class wrapes an INDIOutputstream around a blocking queue. + */ + private static final class INDIPipedOutputStream implements INDIOutputStream { + + /** + * the parent connection this end is part of. + */ + private final INDIPipedConnection connection; + + /** + * the wrapped blocking queue. + */ + private final LinkedBlockingQueue> outputQueue; + + /** + * constructor of the wrapper. + * + * @param outputQueue the wrapped blocking queue. + * @param connection the parent connection this end is part of. + */ + private INDIPipedOutputStream(LinkedBlockingQueue> outputQueue, INDIPipedConnection connection) { + this.outputQueue = outputQueue; + this.connection = connection; + } + + @Override + public void close() throws IOException { + connection.close(); + try { + outputQueue.put(new INDIProtokolEndMarker()); + } catch (InterruptedException e) { + LOG.error("closing on a closed stream, ignoring it", e); + } + } + + @Override + public synchronized void writeObject(INDIProtocol element) throws IOException { + if (connection.isClosed()) { + throw new IOException("stream closed"); + } + try { + outputQueue.put(element); + } catch (InterruptedException e) { + connection.close(); + throw new IOException("queue closed", e); + } + } + } + + /** + * Indicator class to indicate the end of stream. + */ + private static final class INDIProtokolEndMarker extends INDIProtocol { + + } + + /** + * the logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIPipedConnections.class); + + /** + * the first connection that is internaly connected to the second. + */ + private final INDIPipedConnection first; + + /** + * the second connection that is internaly connected to the first. + */ + private final INDIPipedConnection second; + + /** + * create the piped connection pair. + */ + public INDIPipedConnections() { + LinkedBlockingQueue> firstToSecondQueue = new LinkedBlockingQueue>(); + LinkedBlockingQueue> secondToFirstQueue = new LinkedBlockingQueue>(); + first = new INDIPipedConnection(firstToSecondQueue, secondToFirstQueue); + second = new INDIPipedConnection(secondToFirstQueue, firstToSecondQueue); + } + + /** + * @return the first connection that is internaly connected to the second. + */ + public INDIConnection first() { + return first; + } + + /** + * @return the second connection that is internaly connected to the first. + */ + public INDIConnection second() { + return second; + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIProcessConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIProcessConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..ce0ea80b67b8a4ad34c434bb83ddffa088fe6991 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIProcessConnection.java @@ -0,0 +1,108 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.api.INDIConnection; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.api.INDIOutputStream; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +/** + * This class implements an indi protocol connector to an other process. the in + * and out put stream are connected to the in an d output stream of the external + * program. + * + * @author Richard van Nieuwenhoven + */ +public class INDIProcessConnection implements INDIConnection { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * the logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIProcessConnection.class); + + /** + * the input stream from the process deserialized as indi protocol objects. + */ + private INDIInputStream inputStream; + + /** + * the ouput stream from the process serialized from indi protocol objects. + */ + private INDIOutputStream outputStream; + + /** + * the process from with the in and output stream come. + */ + private final Process process; + + /** + * construct the indi connection around the process. + * + * @param process the process to use. + */ + public INDIProcessConnection(Process process) { + this.process = process; + } + + @Override + public INDIInputStream getINDIInputStream() throws IOException { + if (inputStream == null) { + inputStream = INDIProtocolFactory.createINDIInputStream(process.getInputStream()); + } + return inputStream; + } + + @Override + public INDIOutputStream getINDIOutputStream() throws IOException { + if (inputStream == null) { + outputStream = INDIProtocolFactory.createINDIOutputStream(process.getOutputStream()); + } + return outputStream; + } + + @Override + public void close() throws IOException { + + } + + @Override + public URL getURL() { + try { + return new URL("indi:///?process=" + process.toString()); + } catch (MalformedURLException e) { + LOG.error("illegal std url, should never happen!", e); + return null; + } + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIProtocolFactory.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIProtocolFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..635c357a7872d15dea3c318ae232dfea596c4831 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIProtocolFactory.java @@ -0,0 +1,227 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.core.util.CustomObjectOutputStream; +import com.thoughtworks.xstream.io.HierarchicalStreamDriver; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; +import com.thoughtworks.xstream.io.StatefulWriter; +import com.thoughtworks.xstream.io.xml.XppDriver; +import leigh.astro.indi.protocol.*; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.api.INDIOutputStream; + +import java.io.*; +import java.util.Enumeration; +import java.util.Map; + +/** + * Xstream definitions factory for the indi protocol. + * + * @author Richard van Nieuwenhoven + */ +public final class INDIProtocolFactory { + + /** + * Buffer to use for the core in and output streams. + */ + private static final int BUFFER_SIZE = 16 * 1024; + + /** + * bytes for a dummy root close tag. + */ + private static final byte[] CLOSE_BYTES = "".getBytes(); + + /** + * bytes for a dummy root open tag. + */ + private static final byte[] OPEN_BYTES = "".getBytes(); + + /** + * the XSTREAM driver to use. + */ + private static final HierarchicalStreamDriver STREAM_DRIVER; + + /** + * static cache of the XSTREAM INDI protokol instance. + */ + private static final XStream XSTREAM; + + /** + * untility class never instanciated. + */ + private INDIProtocolFactory() { + } + + static { + STREAM_DRIVER = new XppDriver() { + + @Override + public HierarchicalStreamWriter createWriter(Writer out) { + return new Printwriter(out); + } + }; + XSTREAM = new XStream(STREAM_DRIVER); + XSTREAM.processAnnotations(new Class[]{ + DefBlob.class, + DefBlobVector.class, + DefElement.class, + DefLight.class, + DefLightVector.class, + DefNumber.class, + DefNumberVector.class, + DefSwitch.class, + DefSwitchVector.class, + DefText.class, + DefTextVector.class, + DefVector.class, + DelProperty.class, + EnableBLOB.class, + GetProperties.class, + INDIProtocol.class, + Message.class, + NewBlobVector.class, + NewLightVector.class, + NewNumberVector.class, + NewSwitchVector.class, + NewTextVector.class, + NewVector.class, + OneBlob.class, + OneElement.class, + OneLight.class, + OneNumber.class, + OneText.class, + OneSwitch.class, + SetBlobVector.class, + SetLightVector.class, + SetNumberVector.class, + SetSwitchVector.class, + SetTextVector.class, + SetVector.class + }); + } + + /** + * create an indi protocol input stream around an input stream. + * + * @param in the underlaying input stream where the xml will be read. + * @return the resultung indi input stream + * @throws IOException when something went wrong with the underlaying intput stream. + */ + public static INDIInputStream createINDIInputStream(InputStream in) throws IOException { + return new INDIInputStreamImpl(XSTREAM.createObjectInputStream(inputStreamWithRootTag(new BufferedInputStream(new MinimalBlockinInputStream(in), BUFFER_SIZE)))); + } + + /** + * create an indi protocol output stream around an output stream. + * + * @param out the underlaying output stream where the xml will be written. + * @return the resultung indi output stream + * @throws IOException when something went wrong with the underlaying output stream. + */ + public static INDIOutputStream createINDIOutputStream(OutputStream out) throws IOException { + final StatefulWriter statefulWriter = new StatefulWriter(STREAM_DRIVER.createWriter(new BufferedOutputStream(out, BUFFER_SIZE))); + return new INDIOutputStreamImpl(new CustomObjectOutputStream(new CustomObjectOutputStream.StreamCallback() { + + @Override + public void close() { + if (statefulWriter.state() != StatefulWriter.STATE_CLOSED) { + statefulWriter.close(); + } + } + + @Override + public void defaultWriteObject() throws NotActiveException { + throw new NotActiveException("not in call to writeObject"); + } + + @Override + public void flush() { + statefulWriter.flush(); + } + + @Override + public void writeFieldsToStream(@SuppressWarnings("rawtypes") Map fields) throws NotActiveException { + throw new NotActiveException("not in call to writeObject"); + } + + @Override + public void writeToStream(Object object) { + XSTREAM.marshal(object, statefulWriter); + } + })); + + } + + /** + * create an combined inputstream around the input stream parameter that + * creates a root tag around the xml parts in the input stream. + * + * @param in the underlaying input stream where the xml's will be read. + * @return the resultung input stream + */ + private static InputStream inputStreamWithRootTag(final InputStream in) { + Enumeration streamEnum = new Enumeration() { + + private int index = 0; + + private final InputStream[] streams = { + new ByteArrayInputStream(OPEN_BYTES), + in, + new ByteArrayInputStream(CLOSE_BYTES) + }; + + @Override + public boolean hasMoreElements() { + return index < streams.length; + } + + @Override + public InputStream nextElement() { + return streams[index++]; + } + }; + return new SequenceInputStream(streamEnum); + } + + /** + * nice toString for the protocol objects. + * + * @param protocol the protocol object. + * @return the toString. + */ + public static String toString(INDIProtocol protocol) { + return protocol.getClass().getSimpleName() + " " + XSTREAM.toXML(protocol); + } + + /** + * simple toXml for the protocol objects. + * + * @param protocol the protocol object. + * @return the toString. + */ + public static String toXml(INDIProtocol protocol) { + return XSTREAM.toXML(protocol); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDISocketConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDISocketConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..d8f2d91c87bd92e2539884ff6d73793c3094dd7e --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDISocketConnection.java @@ -0,0 +1,182 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.api.INDIConnection; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.api.INDIOutputStream; +import leigh.astro.indi.protocol.url.INDIURLStreamHandler; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.MalformedURLException; +import java.net.Socket; +import java.net.URL; + +/** + * Indi protocol connection around a tcp/ip socket. + * + * @author Ricard van Nieuwenhoven + */ +public class INDISocketConnection implements INDIConnection { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * the logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDISocketConnection.class); + + /** + * timeout to use with tcp connections. + */ + private static final int CONNECT_TIMEOUT = 20000; + + /** + * the indi protocol input stream. + */ + private INDIInputStream inputStream; + + /** + * the indi protocol output stream. + */ + private INDIOutputStream ouputStream; + + /** + * the socket over with to communicate. + */ + private final Socket socket; + + /** + * constructor around an existing socket. this is probalby only usefull in a + * server case where the accept of a server socket returns a client socket. + * + * @param socket the socket to connecto to + */ + public INDISocketConnection(Socket socket) { + this.socket = socket; + } + + /** + * create a indi socket connection the the specified host and port. + * + * @param host the host name to connect to. + * @param port the port to connect to. + * @throws IOException if the connection fails. + */ + public INDISocketConnection(String host, int port) throws IOException { + this(new Socket()); + socket.connect(new InetSocketAddress(host, port), CONNECT_TIMEOUT); + } + + @Override + public INDIInputStream getINDIInputStream() throws IOException { + if (inputStream == null) { + inputStream = INDIProtocolFactory.createINDIInputStream(wrap(socket.getInputStream())); + } + return inputStream; + } + + /** + * possibility for subclasses to wrap the input stream. + * + * @param coreInputStream the input stream. + * @return the inputstream itself or a wrapped version of it + */ + protected InputStream wrap(InputStream coreInputStream) { + return coreInputStream; + } + + /** + * possibility for subclasses to wrap the output stream. + * + * @param coreOutputStream the output stream. + * @return the outputStream itself or a wrapped version of it + */ + protected OutputStream wrap(OutputStream coreOutputStream) { + return coreOutputStream; + } + + @Override + public INDIOutputStream getINDIOutputStream() throws IOException { + if (ouputStream == null) { + ouputStream = INDIProtocolFactory.createINDIOutputStream(wrap(socket.getOutputStream())); + } + return ouputStream; + } + + @Override + public void close() throws IOException { + socket.shutdownInput(); + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (Exception e) { + LOG.warn("inputStream close problem", e); + } + try { + if (ouputStream != null) { + ouputStream.close(); + } + } catch (Exception e) { + LOG.warn("ouputStream close problem", e); + } + try { + if (socket != null && !socket.isClosed()) { + socket.close(); + } + } catch (Exception e) { + LOG.warn("socket close problem", e); + } + } + + @Override + public String toString() { + return getClass().getName() + "(" + getURL().toString() + ")"; + } + + @Override + public URL getURL() { + try { + return new URL(getProtocol(), socket.getInetAddress().getHostAddress(), socket.getPort(), "/"); + } catch (MalformedURLException e) { + LOG.error("illegal std url, should never happen!", e); + return null; + } + } + + /** + * @return the protokol for this connection. + */ + protected String getProtocol() { + return INDIURLStreamHandler.PROTOCOL; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIZipSocketConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIZipSocketConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..09c229ee201842cb8c3bcdb99f4f64f2d32873f6 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/INDIZipSocketConnection.java @@ -0,0 +1,94 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.url.INDIURLZipStreamHandler; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.InflaterInputStream; + +/** + * Create a socket connection that communicates with a zipped data streams. And + * by that vastly reducing the xml overhead. + * + * @author Richard van Nieuwenhoven + */ +public class INDIZipSocketConnection extends INDISocketConnection { + + /** + * constructor for the zip compressed socket stream. + * + * @param socket the socket to connect the in and output streams. + */ + public INDIZipSocketConnection(Socket socket) { + super(socket); + } + + /** + * constructor for the zip compressed socket stream. + * + * @param host the host name to connect to. + * @param port the port to connect to. + * @throws IOException if the connection fails. + */ + public INDIZipSocketConnection(String host, int port) throws IOException { + super(host, port); + } + + @Override + protected InputStream wrap(InputStream coreInputStream) { + return new InflaterInputStream(new MinimalBlockinInputStream(coreInputStream)) { + + /** + * available() should return the number of bytes that can be read + * without running into blocking wait. Accomplishing this feast + * would eventually require to pre-inflate a huge chunk of data, so + * we rather opt for a more relaxed contract + * (java.util.zip.InflaterInputStream does not fit the bill). This + * code has been tested to work with BufferedReader.readLine(); + */ + @Override + public int available() throws IOException { + if (!inf.finished() && !inf.needsInput()) { + return 1; + } else { + return in.available(); + } + } + }; + } + + @Override + protected OutputStream wrap(OutputStream coreOutputStream) { + return new DeflaterOutputStream(coreOutputStream, true); + } + + @Override + protected String getProtocol() { + return INDIURLZipStreamHandler.PROTOCOL; + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/MinimalBlockinInputStream.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/MinimalBlockinInputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..7c0a20ef555b8c70eae757e6f1ba384dd2d78158 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/MinimalBlockinInputStream.java @@ -0,0 +1,109 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.io.IOException; +import java.io.InputStream; + +/** + * This is a very special class for the system, it protects the system against + * blocking on input stream reading, especialy if there is somthing to read but + * not enouth for the buffer. This class will pass all methods throu to the + * wrapped input stream, only the read is handled differently. It will only read + * maximal as much as is available on the wrapped input stream, if nothing is + * available it will only try to read 1 byte. an then check if there is more. + * + * @author Richard van Nieuwenhoven + */ +public class MinimalBlockinInputStream extends InputStream { + + /** + * the wrapped input stream. + */ + private final InputStream in; + + /** + * Constructor for the wrapped input stream. + * + * @param in the wrapped input stream. + */ + public MinimalBlockinInputStream(InputStream in) { + this.in = in; + } + + @Override + public int read() throws IOException { + return in.read(); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + if (len > 0) { + // we want to minimize blocking so we will only read as much as is + // available. + if (in.available() > 0) { + return in.read(b, off, Math.min(in.available(), len)); + } else { + // we wait for one byte to come. + int count = in.read(b, off, 1); + // maybe there is more than one byte available now? + if (in.available() > 0) { + return in.read(b, off + count, Math.min(in.available(), len - count)) + count; + } + return count; + } + } else { + return 0; + } + } + + @Override + public long skip(long n) throws IOException { + return in.skip(n); + } + + @Override + public int available() throws IOException { + return in.available(); + } + + @Override + public void close() throws IOException { + in.close(); + } + + @Override + public synchronized void mark(int readlimit) { + in.mark(readlimit); + } + + @Override + public synchronized void reset() throws IOException { + in.reset(); + } + + @Override + public boolean markSupported() { + return in.markSupported(); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/Printwriter.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/Printwriter.java new file mode 100644 index 0000000000000000000000000000000000000000..88f0a3eecddf6130f9580ca128ae0241998102f4 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/io/Printwriter.java @@ -0,0 +1,89 @@ +package leigh.astro.indi.protocol.io; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; +import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; + +import java.io.Writer; +import java.lang.reflect.Field; +import java.security.AccessController; +import java.security.PrivilegedAction; + +/** + * Print writer for xml output where all elements get an end tag. even if the + * value is empty. If that is not nessesary this class can be deleted. + * + * @author Richard van Nieuwenhoven + */ +final class Printwriter extends PrettyPrintWriter { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * tagIsEmpty field of the superclass. + */ + private final Field tagIsEmpty; + + /** + * instanciate the writer. + * + * @param writer the deeper writer to write the xml on. + */ + protected Printwriter(Writer writer) { + super(writer, XML_QUIRKS, new char[0], new XmlFriendlyNameCoder()); + try { + tagIsEmpty = PrettyPrintWriter.class.getDeclaredField("tagIsEmpty"); + final Field field = tagIsEmpty; + AccessController.doPrivileged(new PrivilegedAction() { + + @Override + public Object run() { + field.setAccessible(true); + return null; + } + }); + } catch (Exception e) { + throw new IllegalStateException("this should not happen, did the super class change?", e); + } + } + + @Override + public void endNode() { + try { + tagIsEmpty.set(this, false); + super.endNode(); + } catch (Exception e) { + throw new RuntimeException("?", e); + } + } + + @Override + protected String getNewLine() { + return ""; + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/package-info.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..e208b3b4fa0a1431c1029c45e01c29e2c98b0a31 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/package-info.java @@ -0,0 +1,29 @@ +/** + * This package provides the indi xml protokol definition for xstream. + * + * @author Richard van Nieuwenhoven + */ +package leigh.astro.indi.protocol; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..a73cd781a9be8672d851dcbc591f79ae713dedf8 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLConnection.java @@ -0,0 +1,159 @@ +package leigh.astro.indi.protocol.url; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.api.INDIConnection; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.api.INDIOutputStream; +import leigh.astro.indi.protocol.io.INDISocketConnection; +import leigh.astro.indi.protocol.io.INDIZipSocketConnection; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLDecoder; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * This class represents a indi connection to a server over an url referense. + * The url is decoded to get the connection data. Future extentions could also + * handle the selection of device and property as part of the url path. + * + * @author Richard van Nieuwenhoven + */ +public class INDIURLConnection extends URLConnection implements INDIConnection { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * the undelaying socket indi connection. + */ + private INDISocketConnection socketConnection; + + /** + * constructor using the url. + * + * @param url the connection specification. + */ + protected INDIURLConnection(URL url) { + super(url); + } + + @Override + public synchronized void connect() throws IOException { + if (socketConnection == null) { + int port = getURL().getPort(); + if (port <= 0) { + port = getURL().getDefaultPort(); + } + String host = getURL().getHost(); + if (host == null || host.isEmpty()) { + host = "localhost"; + } + try { + if (INDIURLZipStreamHandler.PROTOCOL.equals(getURL().getProtocol())) { + socketConnection = new INDIZipSocketConnection(host, port); + } else { + socketConnection = new INDISocketConnection(host, port); + } + } catch (IOException e) { + throw new IOException("Problem connecting to " + host + ":" + port); + } + connected = true; + } + } + + @Override + public INDIInputStream getINDIInputStream() throws IOException { + return getSocketConnection().getINDIInputStream(); + } + + @Override + public INDIOutputStream getINDIOutputStream() throws IOException { + return getSocketConnection().getINDIOutputStream(); + } + + @Override + public InputStream getInputStream() throws IOException { + return (InputStream) getINDIInputStream(); + } + + @Override + public OutputStream getOutputStream() throws IOException { + return (OutputStream) getINDIOutputStream(); + } + + /** + * @return the initialized socket connection. + * @throws IOException is the connection could not be initialized. + */ + private INDIConnection getSocketConnection() throws IOException { + connect(); + return socketConnection; + } + + @Override + public void close() throws IOException { + if (socketConnection != null) { + socketConnection.close(); + } + } + + /** + * helper method to parse an url for its query parameters. This method does + * not take all possibilities in account but it is good anouth for indi + * urls. + * + * @param url the url to parse the query + * @return the map with query keys and there list with values.(never null) + */ + public static Map> splitQuery(URL url) { + final Map> queryPairs = new LinkedHashMap>(); + try { + if (url != null && url.getQuery() != null) { + final String[] pairs = url.getQuery().split("&"); + for (String pair : pairs) { + final int idx = pair.indexOf("="); + final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair; + if (!queryPairs.containsKey(key)) { + queryPairs.put(key, new LinkedList()); + } + final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : null; + queryPairs.get(key).add(value); + } + } + return queryPairs; + } catch (UnsupportedEncodingException e) { + return queryPairs; + } + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLStreamHandler.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLStreamHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..6a0a43bc807909f60417ff2e9410aeebcafdb339 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLStreamHandler.java @@ -0,0 +1,61 @@ +package leigh.astro.indi.protocol.url; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; + +/** + * A handler for INDI connections. This is still a work in progress + * + * @author Richard van Nieuwenhoven [ritchie [at] gmx.at] + */ +public class INDIURLStreamHandler extends URLStreamHandler { + + /** + * The protocol name for the normal indi tcp protocol. + */ + public static final String PROTOCOL = "indi"; + + /** + * The indi default port number. + */ + private static final int INDI_DEFAULT_PORT = 7624; + + @Override + protected final int getDefaultPort() { + return INDI_DEFAULT_PORT; + } + + @Override + protected final URLConnection openConnection(final URL url) throws IOException { + return new INDIURLConnection(url); + } + + @Override + protected final void parseURL(final URL u, final String spec, final int start, final int end) { + super.parseURL(u, spec, start, end); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLStreamHandlerFactory.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLStreamHandlerFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..23660d18c31fc37f3d9ff9684c34ccaccc0b587c --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLStreamHandlerFactory.java @@ -0,0 +1,67 @@ +package leigh.astro.indi.protocol.url; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.websocket.INDIWebSocketStreamHandler; + +import java.net.URL; +import java.net.URLStreamHandler; +import java.net.URLStreamHandlerFactory; + +/** + * A class to handle INDI Streams. + * + * @author Richard van Nieuwenhoven [ritchie [at] gmx.at] + */ +public class INDIURLStreamHandlerFactory implements URLStreamHandlerFactory { + + /** + * is the handler already initialized. + */ + private static boolean initialized = false; + + /** + * initialize the indi protokol. + */ + public static void init() { + if (!initialized) { + initialized = true; + if (System.getProperty(INDIURLStreamHandlerFactory.class.getSimpleName() + ".auto.register", "true").equalsIgnoreCase("true")) { + URL.setURLStreamHandlerFactory(new INDIURLStreamHandlerFactory()); + } + } + } + + @Override + public final URLStreamHandler createURLStreamHandler(final String protocol) { + if (INDIURLStreamHandler.PROTOCOL.equals(protocol)) { + return new INDIURLStreamHandler(); + } else if (INDIURLZipStreamHandler.PROTOCOL.equals(protocol)) { + return new INDIURLZipStreamHandler(); + } else if (INDIWebSocketStreamHandler.PROTOCOL.equals(protocol)) { + return new INDIWebSocketStreamHandler(); + } + return null; + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLZipStreamHandler.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLZipStreamHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..a4eeaec38bb3ba91e795e65ec755bb16f05accdd --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/url/INDIURLZipStreamHandler.java @@ -0,0 +1,61 @@ +package leigh.astro.indi.protocol.url; + +/* + * #%L + * INDI for Java Base Library + * %% + * Copyright (C) 2013 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; + +/** + * A handler for INDI connections. This is still a work in progress + * + * @author Richard van Nieuwenhoven [ritchie [at] gmx.at] + */ +public class INDIURLZipStreamHandler extends URLStreamHandler { + + /** + * The protocol name for the normal indi tcp protocol. + */ + public static final String PROTOCOL = "indiz"; + + /** + * The indi default port number. + */ + public static final int INDI_DEFAULT_PORT = 7625; + + @Override + protected final int getDefaultPort() { + return INDI_DEFAULT_PORT; + } + + @Override + protected final URLConnection openConnection(final URL url) throws IOException { + return new INDIURLConnection(url); + } + + @Override + protected final void parseURL(final URL u, final String spec, final int start, final int end) { + super.parseURL(u, spec, start, end); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebSocketConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebSocketConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..22ee9d7155fef0b6e653c0a0d481189af65911c5 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebSocketConnection.java @@ -0,0 +1,189 @@ +package leigh.astro.indi.protocol.websocket; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.api.INDIConnection; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.api.INDIOutputStream; +import leigh.astro.indi.protocol.io.INDIProtocolFactory; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.websocket.MessageHandler; +import javax.websocket.Session; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.ByteBuffer; + +/** + * Indi protocol connection around a websocket entpoint on a websocket server. + * + * @author Ricard van Nieuwenhoven + */ +public class INDIWebSocketConnection implements INDIConnection { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * Logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIWebSocketConnection.class); + + /** + * the indi protocol input stream. + */ + private INDIInputStream inputStream; + + /** + * the indi protocol output stream. + */ + private INDIOutputStream ouputStream; + + /** + * the websocket server session. + */ + private Session session; + + /** + * constructor around an existing session. + * + * @param session the web socket session to connecto to + */ + public INDIWebSocketConnection(Session session) { + + this.session = session; + try { + createINDIInputStream(); + createINDIOutPutStream(); + } catch (IOException e) { + LOG.error("cound not create INDI streams on websocket endpoint", e); + try { + close(); + } catch (IOException e1) { + LOG.warn("cound not close websocket endpoint properly", e1); + } + } + } + + @Override + public INDIInputStream getINDIInputStream() throws IOException { + return inputStream; + } + + /** + * create a indiinputstream around the websocket. + * + * @throws IOException if some streams where instable. + */ + protected void createINDIInputStream() throws IOException { + PipedInputStream bytesIn = new PipedInputStream(); + final PipedOutputStream bytesOut = new PipedOutputStream(bytesIn); + + inputStream = INDIProtocolFactory.createINDIInputStream(bytesIn); + session.addMessageHandler(new MessageHandler.Partial() { + + @Override + public void onMessage(byte[] message, boolean last) { + try { + bytesOut.write(message); + bytesOut.flush(); + } catch (IOException e) { + LOG.error("cound not create INDI input stream on websocket endpoint", e); + try { + close(); + } catch (IOException e1) { + LOG.warn("cound not close websocket endpoint properly", e1); + } + } + } + }); + } + + @Override + public INDIOutputStream getINDIOutputStream() throws IOException { + return ouputStream; + } + + /** + * create an indi output stream around a websocket endpoint. + * + * @throws IOException if some streams where instable. + */ + protected void createINDIOutPutStream() throws IOException { + ouputStream = INDIProtocolFactory.createINDIOutputStream(new OutputStream() { + + @Override + public void write(int b) throws IOException { + byte[] bytes = new byte[1]; + bytes[0] = (byte) b; + session.getBasicRemote().sendBinary(ByteBuffer.wrap(bytes)); + } + + @Override + public void write(byte[] bytes) throws IOException { + session.getBasicRemote().sendBinary(ByteBuffer.wrap(bytes)); + } + + @Override + public void write(byte[] bytes, int off, int len) throws IOException { + session.getBasicRemote().sendBinary(ByteBuffer.wrap(bytes, off, len)); + } + + @Override + public void flush() throws IOException { + session.getBasicRemote().sendBinary(ByteBuffer.wrap(new byte[0]), true); + } + }); + + } + + @Override + public void close() throws IOException { + inputStream.close(); + ouputStream.close(); + session.close(); + } + + @Override + public String toString() { + return getClass().getName() + "(" + session.getRequestURI() + ")"; + } + + @Override + public URL getURL() { + try { + return session.getRequestURI().toURL(); + } catch (MalformedURLException e) { + LOG.error("illegal std url, should never happen!", e); + return null; + } + } + +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebSocketStreamHandler.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebSocketStreamHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..eeba18051a1276127ec12bed429e5b5f041eb8cf --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebSocketStreamHandler.java @@ -0,0 +1,69 @@ +package leigh.astro.indi.protocol.websocket; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; + +/** + * The webseocket url handler. + * + * @author Richard van Nieuwenhoven + */ +public class INDIWebSocketStreamHandler extends URLStreamHandler { + + /** + * Logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIWebSocketStreamHandler.class); + + /** + * The indi default port number. + */ + public static final int WEBSOCKET_DEFAULT_PORT = 8080; + + /** + * The protokol name for indi over websockets. + */ + public static final String PROTOCOL = "indiw"; + + @Override + protected final int getDefaultPort() { + return WEBSOCKET_DEFAULT_PORT; + } + + @Override + protected final URLConnection openConnection(final URL url) throws IOException { + return new INDIWebsocketURLConnection(url); + } + + @Override + protected final void parseURL(final URL u, final String spec, final int start, final int end) { + super.parseURL(u, spec, start, end); + } +} diff --git a/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebsocketURLConnection.java b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebsocketURLConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..2c900188550ec447d441f58d14206dec0f117e33 --- /dev/null +++ b/leigh-astro-indi/src/main/java/leigh/astro/indi/protocol/websocket/INDIWebsocketURLConnection.java @@ -0,0 +1,133 @@ +package leigh.astro.indi.protocol.websocket; + +/* + * #%L + * INDI Protocol implementation + * %% + * Copyright (C) 2012 - 2014 indiforjava + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ + +import leigh.astro.indi.protocol.api.INDIConnection; +import leigh.astro.indi.protocol.api.INDIInputStream; +import leigh.astro.indi.protocol.api.INDIOutputStream; +import leigh.astro.indi.protocol.url.INDIURLStreamHandlerFactory; +import org.glassfish.tyrus.client.ClientManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.websocket.ClientEndpointConfig; +import javax.websocket.Endpoint; +import javax.websocket.EndpointConfig; +import javax.websocket.Session; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URI; +import java.net.URL; +import java.net.URLConnection; + +/** + * This class represents a indi connection to a server over an url referense. + * The url is decoded to get the connection data. Future extentions could also + * handle the selection of device and property as part of the url path. + * + * @author Richard van Nieuwenhoven + */ +public class INDIWebsocketURLConnection extends URLConnection implements INDIConnection { + + static { + INDIURLStreamHandlerFactory.init(); + } + + /** + * Logger to log to. + */ + private static final Logger LOG = LoggerFactory.getLogger(INDIWebsocketURLConnection.class); + + /** + * the undelaying socket indi connection. + */ + private INDIWebSocketConnection socketConnection; + + /** + * constructor using the url. + * + * @param url the connection specification. + */ + protected INDIWebsocketURLConnection(URL url) { + super(url); + } + + @Override + public synchronized void connect() throws IOException { + if (socketConnection == null) { + try { + final ClientEndpointConfig cec = ClientEndpointConfig.Builder.create().build(); + + ClientManager client = ClientManager.createClient(); + Session session = client.connectToServer(new Endpoint() { + + @Override + public void onOpen(Session session, EndpointConfig config) { + socketConnection = new INDIWebSocketConnection(session); + } + }, cec, new URI(getURL().toExternalForm().replace(INDIWebSocketStreamHandler.PROTOCOL + ":", "ws:"))); + socketConnection = new INDIWebSocketConnection(session); + } catch (Exception e) { + LOG.error("could not connect to websocket", e); + } + } + } + + @Override + public INDIInputStream getINDIInputStream() throws IOException { + return getSocketConnection().getINDIInputStream(); + } + + @Override + public INDIOutputStream getINDIOutputStream() throws IOException { + return getSocketConnection().getINDIOutputStream(); + } + + @Override + public InputStream getInputStream() throws IOException { + return (InputStream) getINDIInputStream(); + } + + @Override + public OutputStream getOutputStream() throws IOException { + return (OutputStream) getINDIOutputStream(); + } + + /** + * @return the initialized socket connection. + * @throws IOException is the connection could not be initialized. + */ + private INDIConnection getSocketConnection() throws IOException { + connect(); + return socketConnection; + } + + @Override + public void close() throws IOException { + if (socketConnection != null) { + socketConnection.close(); + } + } + +} diff --git a/leigh-astro/.gitignore b/leigh-astro/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-astro/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-astro/LICENSE b/leigh-astro/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-astro/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-astro/README.txt b/leigh-astro/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..eb6c263c4133b887dfaf271b42feb31ca5c464f7 --- /dev/null +++ b/leigh-astro/README.txt @@ -0,0 +1,10 @@ + +-= INSTALLATION =- + +* Create an empty MySQL Database. + +* Use Gnusto to run the astro.sql scripts. + +* Use CatalogLoaderApp to load the stellar catalog into SQL. + +* Use SqlLoaderApp to process subs and load their meta-data into SQL. diff --git a/leigh-astro/build.gradle b/leigh-astro/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..bfb8d79fcf17c003cc024cb37b1ea647363322f5 --- /dev/null +++ b/leigh-astro/build.gradle @@ -0,0 +1,86 @@ +plugins { + id 'java' + id 'application' + id 'distribution' + id 'maven-publish' + id 'java-library' +} + +repositories { + mavenCentral() +} + +group 'leigh' +version leigh_astro_ver + +java { + withJavadocJar() +} + +dependencies { + testImplementation group: 'junit', name: 'junit', version: '4.12' + api group: 'net.sf.opencsv', name: 'opencsv', version: '2.3' + api group: 'gov.nasa.gsfc.heasarc', name: 'nom-tam-fits', version: '1.15.2' + api group: 'org.javastro', name: 'jsofa', version: '20200721' + api group: 'c3p0', name: 'c3p0', version: '0.9.1.2' + api group: 'mysql', name: 'mysql-connector-java', version: '8.0.22' + api project(':leigh-eo') + api project(':leigh-mecha-exec') + api group: 'org.shredzone.commons', name: 'commons-suncalc', version: '3.4' +} + +application { + mainClass = 'leigh.astro.app.TelescopeControllerApp' +} + +jar { + manifest { + attributes('Implementation-Title': 'LEIGH Astronomy', 'Implementation-Version': archiveVersion) + } +} + +publishing { + publications { + mavenJava(MavenPublication) { + artifactId = 'leigh-astro' + from components.java + versionMapping { + usage('java-api') { + fromResolutionOf('runtimeClasspath') + } + usage('java-runtime') { + fromResolutionResult() + } + } + pom { + name = 'LEIGH Astronomy' + description = 'Astronomy Package' + url = 'http://leigh-co.com' + licenses { + license { + name = 'COMMERCIAL' + url = 'http://leigh-co.com' + } + } + developers { + developer { + id = 'aleigh' + name = 'C. Alexander Leigh' + email = 'a@leigh-co.com' + } + } + } + } + } + repositories { + maven { + url = "$buildDir/repos/dist" + } + } +} + +configurations { + doc { + transitive true + } +} \ No newline at end of file diff --git a/leigh-astro/sql/astro-1.sql b/leigh-astro/sql/astro-1.sql new file mode 100644 index 0000000000000000000000000000000000000000..85ba75ff374c5b32a002b237dd085d9009398958 --- /dev/null +++ b/leigh-astro/sql/astro-1.sql @@ -0,0 +1,84 @@ +DROP TABLE IF EXISTS ast_sub_t; +DROP TABLE IF EXISTS ast_sub_type_t; +DROP TABLE IF EXISTS ast_filter_t; +DROP TABLE IF EXISTS ast_filter_type_t; + +CREATE TABLE ast_sub_type_t +( + id INT PRIMARY KEY, + nm VARCHAR(8) NOT NULL +) ENGINE = INNODB; + +INSERT INTO ast_sub_type_t +VALUES (1, 'light'); +INSERT INTO ast_sub_type_t +VALUES (2, 'dark'); +INSERT INTO ast_sub_type_t +VALUES (3, 'flat'); +INSERT INTO ast_sub_type_t +VALUES (4, 'bias'); + +CREATE TABLE ast_filter_type_t +( + id INT PRIMARY KEY, + nm VARCHAR(16) NOT NULL +) ENGINE = INNODB; + +INSERT INTO ast_filter_type_t (id, nm) +VALUES (1, 'red'); +INSERT INTO ast_filter_type_t (id, nm) +VALUES (2, 'green'); +INSERT INTO ast_filter_type_t (id, nm) +VALUES (3, 'blue'); +INSERT INTO ast_filter_type_t (id, nm) +VALUES (4, 'ha'); +INSERT INTO ast_filter_type_t (id, nm) +VALUES (5, 'sii'); +INSERT INTO ast_filter_type_t (id, nm) +VALUES (6, 'oiii'); +INSERT INTO ast_filter_type_t (id, nm) +VALUES (7, 'lum'); + +CREATE TABLE ast_filter_t +( + id INT PRIMARY KEY AUTO_INCREMENT, + serial VARCHAR(16) NOT NULL, + filter_type_id INT NOT NULL, + size_mm INT NOT NULL, + width_nm INT, + FOREIGN KEY (filter_type_id) REFERENCES ast_filter_type_t (id) +) ENGINE = INNODB; + +INSERT INTO ast_filter_t (id, serial, filter_type_id, size_mm) +VALUES (1, '9-1006', 1, 36); +INSERT INTO ast_filter_t (id, serial, filter_type_id, size_mm) +VALUES (2, '9-1007', 2, 36); +INSERT INTO ast_filter_t (id, serial, filter_type_id, size_mm) +VALUES (3, '9-1008', 3, 36); +INSERT INTO ast_filter_t (id, serial, filter_type_id, size_mm, width_nm) +VALUES (4, '9-1010', 4, 36, 3); +INSERT INTO ast_filter_t (id, serial, filter_type_id, size_mm, width_nm) +VALUES (5, '9-1012', 5, 36, 3); +INSERT INTO ast_filter_t (id, serial, filter_type_id, size_mm, width_nm) +VALUES (6, '9-1011', 6, 36, 3); +INSERT INTO ast_filter_t (id, serial, filter_type_id, size_mm) +VALUES (7, '9-1009', 7, 36); + +DROP TABLE IF EXISTS ast_sub_t; +CREATE TABLE ast_sub_t +( + id binary(16) primary key, + capture_ts TIMESTAMP NOT NULL, + sub_type_id int NOT NULL, + FOREIGN KEY (sub_type_id) REFERENCES ast_sub_type_t (id), + filter_id int NOT NULL, + FOREIGN KEY (filter_id) REFERENCES ast_filter_t (id), + length_sec DOUBLE NOT NULL, + gain INT NOT NULL, + off INT NOT NULL, + width_px INT NOT NULL, + height_px INT NOT NULL, + ccd_temp DOUBLE NOT NULL, + center_ra_deg DOUBLE NOT NULL, + center_dec_deg DOUBLE NOT NULL +) ENGINE = INNODB; \ No newline at end of file diff --git a/leigh-astro/sql/astro-2.sql b/leigh-astro/sql/astro-2.sql new file mode 100644 index 0000000000000000000000000000000000000000..ee69bd24fcaa1f8ed7649866b0b9a4fc1a4363ab --- /dev/null +++ b/leigh-astro/sql/astro-2.sql @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS ast_train_t; +CREATE TABLE ast_train_t +( + id INT PRIMARY KEY AUTO_INCREMENT, + label VARCHAR(36) NOT NULL +); + + +INSERT INTO ast_train_t (id, label) VALUES (0, 'Undefined'); +INSERT INTO ast_train_t (id, label) VALUES (1, 'ED80 ASI1600MM-Pro'); +INSERT INTO ast_train_t (id, label) VALUES (2, 'ED80 ASI1600MM-Pro'); + +ALTER TABLE ast_sub_t + ADD COLUMN (train_id INT NOT NULL DEFAULT 0, + FOREIGN KEY (train_id) REFERENCES ast_train_t (id)); diff --git a/leigh-astro/sql/astro-3.sql b/leigh-astro/sql/astro-3.sql new file mode 100644 index 0000000000000000000000000000000000000000..d247aa55c7641f0636752d74e9681fa8b33e8283 --- /dev/null +++ b/leigh-astro/sql/astro-3.sql @@ -0,0 +1,5 @@ +ALTER TABLE ast_sub_t + DROP PRIMARY KEY; +ALTER TABLE ast_sub_t RENAME COLUMN id to bin_id; +ALTER TABLE ast_sub_t + ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY FIRST; \ No newline at end of file diff --git a/leigh-astro/sql/astro-4.sql b/leigh-astro/sql/astro-4.sql new file mode 100644 index 0000000000000000000000000000000000000000..df46eb9165c8e923619f9df8094dd569791f3d0e --- /dev/null +++ b/leigh-astro/sql/astro-4.sql @@ -0,0 +1,2 @@ +ALTER TABLE ast_sub_t + ADD CONSTRAINT ast_sub_binid_uc UNIQUE (bin_id); \ No newline at end of file diff --git a/leigh-astro/sql/astro-5.sql b/leigh-astro/sql/astro-5.sql new file mode 100644 index 0000000000000000000000000000000000000000..843cda2e5582fe3e40a0c91d4f7cc72537c7ff88 --- /dev/null +++ b/leigh-astro/sql/astro-5.sql @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS ast_catalog_t; + +CREATE TABLE ast_catalog_t +( + id INT PRIMARY KEY AUTO_INCREMENT, + nm VARCHAR(32) NOT NULL, + ra_deg DOUBLE NOT NULL, + dec_deg DOUBLE NOT NULL +) ENGINE = innodb; + +ALTER TABLE ast_train_t + ENGINE =innodb; \ No newline at end of file diff --git a/leigh-astro/sql/astro-6.sql b/leigh-astro/sql/astro-6.sql new file mode 100644 index 0000000000000000000000000000000000000000..823a8a8104d91cb555825b63c74ad92a3fd4164e --- /dev/null +++ b/leigh-astro/sql/astro-6.sql @@ -0,0 +1,47 @@ +CREATE TABLE ast_catalog_type_t +( + id INT PRIMARY KEY AUTO_INCREMENT, + nm VARCHAR(16) NOT NULL +); + +INSERT INTO ast_catalog_type_t (nm) +VALUES ('*'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('**'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('*Ass'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('Cl+N'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('Dup'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('EmN'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('G'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('GCl'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('GGroup'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('GPair'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('GTrpl'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('HII'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('Neb'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('Nova'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('OCl'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('PN'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('RfN'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('SNR'); +INSERT INTO ast_catalog_type_t (nm) +VALUES ('Other'); + +ALTER TABLE ast_catalog_t + ADD COLUMN (catalog_type_id INT, FOREIGN KEY (catalog_type_id) REFERENCES ast_catalog_type_t (id)); diff --git a/leigh-astro/src/main/java/leigh/astro/app/BundlerApp.java b/leigh-astro/src/main/java/leigh/astro/app/BundlerApp.java new file mode 100644 index 0000000000000000000000000000000000000000..60ee9f96da93fd91b5cdb79c61136339d1951855 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/BundlerApp.java @@ -0,0 +1,138 @@ +package leigh.astro.app; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.catalog.StellarCatalog; +import leigh.astro.fits.AstroSub; +import leigh.astro.fits.AstroSubType; +import leigh.astro.fits.AstroSubUtil; +import leigh.astro.fits.FitsScanner; +import leigh.astro.iraf.Photometry; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; +import leigh.mecha.util.VelocityWatch; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * Bundle a series of fits files together for a particular observation target. This gathers both the lights + * and calibrations together into a human-friendly package for further processing. + *

+ * Usage: BundlerApp adbPath object + *

+ * Limitations: Calibrations will be gathered via AstroSubUtil.matchCalibrations() for the + * only one of the light subs. Which sub is undefined. For observation bundles which do not require multiple + * calibration sets (same equipment, same configuration, same time period) this should be sufficient, but + * is really not correct. + * + * @author C. Alexander Leigh + */ +public class BundlerApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(BundlerApp.class); + private static final boolean qualityArmed = false; + + public static void main(String args[]) throws Exception { + if (args.length != 2) { + logger.info("BundlerApp adbPath object"); + System.exit(UniversalJob.RET_BADARGS); + } + + // Which subs do we have + FitsScanner scanner = new FitsScanner(); + Path adbPath = Paths.get(args[0]); + List allSubs = scanner.scanPath(adbPath); + logger.info("Located subs. [count: {}]", allSubs.size()); + + // Which lights are of NGC6888 + StellarCatalog cat = new StellarCatalog(); + CatalogObject obj = cat.get(args[1]); + + if (obj == null) { + logger.warn("Could not locate target object in catalog."); + System.exit(UniversalJob.RET_OK); + } + + logger.info("Located object in catalog. {}", obj); + + ArrayList mySubs = new ArrayList<>(); + + for (AstroSub sub : allSubs) { + if (sub.contains(obj)) { + mySubs.add(sub); + } + } + + if (mySubs.size() == 0) { + logger.warn("No matching lights found. Exiting."); + System.exit(UniversalJob.RET_OK); + } + + logger.info("Matched lights. [count: {}]", mySubs.size()); + + // FIXME: This should be handled on a per-sub/per-group basis + AstroSub ex = allSubs.get(0); + AstroSubUtil bundler = new AstroSubUtil(); + mySubs.addAll(bundler.matchCalibrations(ex, allSubs)); + + Path objPath = Paths.get(args[1].toLowerCase()); + Files.createDirectory(objPath); + + ExecutorService svc = Executors.newFixedThreadPool(8); + + VelocityWatch vw = new VelocityWatch(logger); + for (AstroSub sub : mySubs) { + if (qualityArmed) { + // If this is a light, does it meet quality requirements? + if (sub.getFrameType().equals(AstroSubType.LIGHT)) { + Photometry pm = sub.getPhotometry(); + logger.info("sub [id: {}] [filter: {}] [fwhm: {}] [stars: {}] [sharp: {}] [round: {}]", + sub.getId(), sub.getFilter(), pm.averageFWHM(), pm.getCount(), pm.averageSharp(), pm.averageRound()); + + // Not enough stars is a warning sign, and more sharp is more better. + if (pm.getCount() < 100 && pm.averageSharp() < 1.2) { + vw.event("discard"); + continue; + } + } + } + + svc.submit(() -> { + try { + Path src = adbPath.resolve(sub.getId().toString() + ".fits"); + Path dst = getDstFile(sub, objPath); + Files.copy(src, dst); + vw.event("copy"); + logger.info("Copy: {}", dst); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + + svc.shutdown(); + vw.status(); + } + + /** + * Given a sub return its bundle path, including filter, in the given distribution directory. For example, + * given a distribution directory of /tmp the method might return /tmp/H_Alpha/1234.fits. + */ + private static Path getDstFile(AstroSub sub, Path dst) throws IOException { + // Everything else must be a calibration + String dir = sub.getFrameType().toString() + "-" + sub.getFilter(); + Path filterPath = dst.resolve(dir.toLowerCase()); + // Performance of this is poor, but perhaps we do not care in this context. + if (!Files.exists(filterPath)) { + Files.createDirectory(filterPath); + } + + return filterPath.resolve(sub.getId() + ".fits"); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/app/CatalogLoaderApp.java b/leigh-astro/src/main/java/leigh/astro/app/CatalogLoaderApp.java new file mode 100644 index 0000000000000000000000000000000000000000..f117e065ca3b8564d35fff97fcafd34f6438ed63 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/CatalogLoaderApp.java @@ -0,0 +1,26 @@ +package leigh.astro.app; + +import com.mchange.v2.c3p0.ComboPooledDataSource; +import leigh.astro.catalog.StellarCatalog; +import leigh.astro.db.AstroSql; + +import java.beans.PropertyVetoException; +import java.io.IOException; +import java.sql.Connection; +import java.sql.SQLException; + +/** + * A utility to load the {@link StellarCatalog} into SQL. + * + * @author C. Alexander Leigh + */ +public class CatalogLoaderApp { + public static void main(String[] args) throws PropertyVetoException, IOException, SQLException { + ComboPooledDataSource ds = AstroSql.getDataSource(); + StellarCatalog cat = new StellarCatalog(); + + try (Connection con = ds.getConnection()) { + cat.writeToSql(con); + } + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/app/ConvertExample.java b/leigh-astro/src/main/java/leigh/astro/app/ConvertExample.java new file mode 100644 index 0000000000000000000000000000000000000000..4de8d97a93103be44d6e120229d376ea6248aa67 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/ConvertExample.java @@ -0,0 +1,41 @@ +package leigh.astro.app; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.jastronomy.jsofa.JSOFA; +import org.jastronomy.jsofa.JSOFAIllegalParameter; +import org.jastronomy.jsofa.JSOFAInternalError; + +public class ConvertExample { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ConvertExample.class); + + public static void main(String[] args) throws JSOFAInternalError, JSOFAIllegalParameter { + double rc, dc, pr, pd, px, rv, utc1, utc2, dut1, + elong, phi, hm, xp, yp, phpa, tc, rh, wl; + + rc = 2.71; + dc = 0.174; + pr = 1e-5; + pd = 5e-6; + px = 0.1; + rv = 55.0; + utc1 = 2456384.5; + utc2 = 0.969254051; + dut1 = 0.1550675; + elong = -0.527800806; + phi = -1.2345856; + hm = 2738.0; + xp = 2.47230737e-7; + yp = 1.82640464e-6; + phpa = 731.0; + tc = 12.8; + rh = 0.59; + wl = 0.55; + + JSOFA.ObservedPositionEO localPosition = JSOFA.jauAtco13(rc, dc, pr, pd, px, rv, + utc1, utc2, dut1, elong, phi, hm, xp, yp, + phpa, tc, rh, wl); + + logger.info("Conversion: [az rads: {}] [ha rads: {}]", localPosition.op.aob, localPosition.op.rob); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/app/FitsListApp.java b/leigh-astro/src/main/java/leigh/astro/app/FitsListApp.java new file mode 100644 index 0000000000000000000000000000000000000000..b17ac94c00b224cbcbdba8fe4dafa9cb97bc4a8e --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/FitsListApp.java @@ -0,0 +1,134 @@ +package leigh.astro.app; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.catalog.StellarCatalog; +import leigh.astro.fits.AstroSub; +import leigh.astro.fits.AstroSubType; +import leigh.astro.fits.FitsScanner; +import leigh.astro.iraf.Photometry; +import leigh.mecha.lang.Counter; +import leigh.mecha.lang.CountingList; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; +import leigh.mecha.util.VelocityWatch; + +import java.io.IOException; +import java.nio.file.Paths; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * Development utility for producing various test reports on a FITS file repo. + * + * @author C. Alexander Leigh + */ +public class FitsListApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FitsListApp.class); + + public static void main(String[] args) throws Exception { + if (args.length != 1) { + logger.info("Usage: FitsListApp path"); + System.exit(UniversalJob.RET_BADARGS); + } + + FitsScanner fs = new FitsScanner(); + List allSubs = fs.scanPath(Paths.get(args[0])); + + StellarCatalog catalog = new StellarCatalog(); + + Counter c = new Counter(); + for (AstroSub sub : allSubs) { + if (sub.getFrameType() == AstroSubType.LIGHT) { + List objs = sub.contains(catalog.getObjects()); + c.count(objs); + } + } + + c.print(logger); + } + + private static void process(List allSubs) throws IOException { + CountingList filterTime = new CountingList<>(); + CountingList temps = new CountingList<>(); + StellarCatalog catalog = new StellarCatalog(); + CatalogObject obj = catalog.get("NGC6888"); + List subs = new ArrayList<>(); + for (AstroSub sub : allSubs) { + if (sub.getObj().isNear(obj.getJ2000Coordinate())) { + subs.add(sub); + } + } + + double len = 0; + int light = 0; + int bias = 0; + int dark = 0; + int flat = 0; + + for (AstroSub sub : subs) { + len += sub.getLengthSeconds(); + filterTime.increment(sub.getFilter(), (int) sub.getLengthSeconds()); + temps.increment(Double.toString(sub.getCcdTemp()), 1); + switch (sub.getFrameType()) { + case BIAS: + bias++; + break; + case LIGHT: + light++; + break; + case DARK: + dark++; + break; + case FLAT: + flat++; + break; + } + } + + logger.info("Subs: [cnt: {}] [len: {}] [light: {}] [dark: {}] [bias: {}] [flat: {}]", + subs.size(), + Duration.ofSeconds((long) len), + bias, light, dark, flat); + + for (Map.Entry filters : filterTime.getCounts().entrySet()) { + logger.info("Filter: [name: {}] [len: {}]", filters.getKey(), Duration.ofSeconds(filters.getValue())); + } + + for (Map.Entry temp : temps.getCounts().entrySet()) { + logger.info("Temp: [ccd: {}] [qty: {}]", temp.getKey(), temp.getValue()); + } + + ExecutorService executor = Executors.newFixedThreadPool(8); + + VelocityWatch vw = new VelocityWatch(logger); + + for (AstroSub sub : subs) { + if (sub.getFrameType() == AstroSubType.LIGHT && sub.getFilter().equals("H_Alpha")) { + executor.submit(() -> { + try { + Photometry pm = sub.getPhotometry(); + + logger.info("sub [id: {}] [fwhm: {}] [stars: {}] [sharp: {}] [round: {}]", + sub.getId(), pm.averageFWHM(), pm.getCount(), pm.averageSharp(), pm.averageRound()); + + if (pm.averageHWHM() > 2.0) { + + vw.event("bad"); + } else { + vw.event("good"); + } + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + } + + executor.shutdown(); + } +} \ No newline at end of file diff --git a/leigh-astro/src/main/java/leigh/astro/app/FitsRemoveDupeApp.java b/leigh-astro/src/main/java/leigh/astro/app/FitsRemoveDupeApp.java new file mode 100644 index 0000000000000000000000000000000000000000..cd0f25578d649a0705cf0c30af8a9d025ae551bd --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/FitsRemoveDupeApp.java @@ -0,0 +1,29 @@ +package leigh.astro.app; + +import leigh.astro.fits.FitsScanner; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; + +import java.io.IOException; +import java.nio.file.Paths; + +/** + * A utility operation to scan a path of FITS files and remove any duplicates which are found. This app uses + * the {@link FitsScanner} class and obeys the mechanics of the removeDupes method. + * + * @author C. Alexander Leigh + */ +public class FitsRemoveDupeApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FitsRemoveDupeApp.class); + + public static void main(String args[]) throws IOException { + if (args.length != 1) { + logger.info("Usage: FitsRemoveDupeAPp path"); + System.exit(UniversalJob.RET_BADARGS); + } + + FitsScanner scanner = new FitsScanner(); + scanner.removeDupes(Paths.get(args[0])); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/app/FixupApp.java b/leigh-astro/src/main/java/leigh/astro/app/FixupApp.java new file mode 100644 index 0000000000000000000000000000000000000000..695f6c47a4ab1e6f1c4444dcdf18160730368054 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/FixupApp.java @@ -0,0 +1,70 @@ +package leigh.astro.app; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import nom.tam.fits.Fits; +import nom.tam.fits.FitsException; +import nom.tam.fits.Header; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; + +/** + * Utility application designed to fix the header information in FITS files which were created prior to + * Standardization. This would be FITS files with the old filter names, and with improper instrument data. + * + * @author C. Alexander Leigh + */ +public class FixupApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FixupApp.class); + public static String KEY_FILTER = "FILTER"; + + + public static void main(String[] args) throws IOException { + logger.info("Version: {}", FixupApp.class.getPackage().getImplementationVersion()); + Files.walkFileTree(Path.of("/Volumes/cal326/adb"), new SimpleFileVisitor<>() { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + if (file.toString().endsWith(".fits") || file.toString().endsWith(".fit")) { + try { + Fits f = new Fits(file.toAbsolutePath().toString()); + Header header = f.getHDU(0).getHeader(); + + String filter = header.getStringValue(KEY_FILTER); + + switch (filter) { + case "H_Alpha": + header.addValue(KEY_FILTER, "HA_AD_3NM", "Filter"); + break; + case "SII": + header.addValue(KEY_FILTER, "SII_AD_3NM", "Filter"); + break; + case "OIII": + header.addValue(KEY_FILTER, "OIII_AD_3NM", "Filter"); + break; + case "Red": + header.addValue(KEY_FILTER, "RED_AD_GEN2E", "Filter"); + break; + case "Green": + header.addValue(KEY_FILTER, "GREEN_AD_GEN2E", "Filter"); + break; + case "Blue": + header.addValue(KEY_FILTER, "BLUE_AD_GEN2E", "Filter"); + break; + } + + logger.debug("Read. [fn: {}] [filter: {}]", file, filter); + } catch (FitsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return FileVisitResult.CONTINUE; + } + }); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/app/ObjFindApp.java b/leigh-astro/src/main/java/leigh/astro/app/ObjFindApp.java new file mode 100644 index 0000000000000000000000000000000000000000..aa9c54b76c58b3756da84dcb590b6390d715b9e4 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/ObjFindApp.java @@ -0,0 +1,37 @@ +package leigh.astro.app; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.catalog.StellarCatalog; +import leigh.astro.wcstools.Sky2XYExecutor; +import leigh.astro.wcstools.Sky2XYTask; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; + +/** + * Reference application for calculating astrometric solutions. + * + * @author C. Alexander Leigh + */ +public class ObjFindApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ObjFindApp.class); + + public static void main(String[] args) throws Exception { + StellarCatalog catalog = new StellarCatalog(); + ArrayList skyCoords = new ArrayList<>(); + skyCoords.add(catalog.get("NGC6888")); + skyCoords.add(catalog.get("NGC7000")); + skyCoords.add(catalog.get("NGC1234")); + + Sky2XYTask task = new Sky2XYTask(skyCoords); + + Sky2XYExecutor exec = new Sky2XYExecutor("/Users/aleigh/fits/3cb38d47-e4cd-47ff-b431-ffa03197fd5d.fits", + task.getTmpFile().getAbsolutePath()); + + exec.exec(task); + + logger.info("Matched: {}", task.getMatched()); + + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/app/SubLoaderApp.java b/leigh-astro/src/main/java/leigh/astro/app/SubLoaderApp.java new file mode 100644 index 0000000000000000000000000000000000000000..0b295e53eb66b35518a7d252ca8ef335ac79d22d --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/SubLoaderApp.java @@ -0,0 +1,142 @@ +package leigh.astro.app; + +import com.mchange.v2.c3p0.ComboPooledDataSource; +import leigh.astro.db.AstroSql; +import leigh.astro.fits.AstroSub; +import leigh.astro.fits.AstroSubType; +import leigh.astro.fits.FitsScanner; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; + +import java.beans.PropertyVetoException; +import java.io.IOException; +import java.nio.file.Path; +import java.sql.*; +import java.util.List; +import java.util.UUID; + +/** + * This application processes FITS subs (light, dark, flat, bias) and loads their meta-information into a SQL + * database using the astro schema. The app will attempt to process all FITS files not already present in the + * database (based on the ID of the FITS file). The filenames for the FITS files are expected to be in the form + * id.fits where id is a valid UUID. + * + * @author C. Alexander Leigh + */ +public class SubLoaderApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SubLoaderApp.class); + private final int FILTER_RED_ID = 1; + private final int FILTER_GREEN_ID = 2; + private final int FILTER_BLUE_ID = 3; + private final int FILTER_HA_ID = 4; + private final int FILTER_SII_ID = 5; + private final int FILTER_OIII_ID = 6; + private final int FILTER_LUM_ID = 7; + + public static void main(String[] args) throws IOException, PropertyVetoException, SQLException { + if (args.length != 1) { + logger.info("Usage: SubLoaderApp path"); + System.exit(UniversalJob.RET_BADARGS); + } + + SubLoaderApp loader = new SubLoaderApp(); + loader.process(Path.of(args[0])); + } + + public void process(Path path) throws SQLException, IOException, PropertyVetoException { + ComboPooledDataSource cpds = AstroSql.getDataSource(); + + try (Connection con = cpds.getConnection()) { + FitsScanner fs = new FitsScanner(); + List allSubs = fs.scanPath(path); + logger.info("Located subs: {}", allSubs.size()); + + PreparedStatement insert = con.prepareStatement( + "INSERT INTO ast_sub_t (bin_id,capture_ts,sub_type_id,filter_id,length_sec,gain,off," + + "width_px,height_px,ccd_temp,center_ra_deg, center_dec_deg, train_id) VALUES " + + "(UUID_TO_BIN(?), ?,?,?,?,?,?,?,?,?,?,?,?)"); + + for (AstroSub sub : allSubs) { + if (!isLoaded(con, sub.getId())) { + logger.info("Loading metadata for sub: {}", sub); + insert.setString(1, sub.getId().toString()); + insert.setTimestamp(2, Timestamp.from(sub.getTime())); + insert.setInt(3, getSubTypeId(sub.getFrameType())); + insert.setInt(4, getFilterId(sub.getFilter())); + insert.setDouble(5, sub.getLengthSeconds()); + insert.setInt(6, sub.getGain()); + insert.setInt(7, sub.getOffset()); + insert.setInt(8, sub.getWidthPx()); + insert.setInt(9, sub.getHeightPx()); + insert.setDouble(10, sub.getCcdTemp()); + insert.setDouble(11, sub.getObj().getX()); + insert.setDouble(12, sub.getObj().getY()); + // The current image train is id:2 + insert.setInt(13, 2); + insert.execute(); + } else { + logger.info("Skipping already-loaded sub: {}", sub); + } + } + } + } + + /** + * Returns true if the ast_sub_t table already contains a record for the given + * id. + */ + public boolean isLoaded(Connection con, UUID id) throws SQLException { + try (PreparedStatement ps = con.prepareStatement( + "SELECT COUNT(*) FROM ast_sub_t WHERE bin_id=UUID_TO_BIN(?)")) { + ps.setString(1, id.toString()); + try (ResultSet rs = ps.executeQuery()) { + // We assume this worked given the query. Anything else is an exception. + rs.next(); + int x = rs.getInt(1); + if (x > 0) return true; + } + } + return false; + } + + public int getSubTypeId(AstroSubType type) { + switch (type) { + case LIGHT: + return 1; + case DARK: + return 2; + case FLAT: + return 3; + case BIAS: + return 4; + } + throw new IllegalArgumentException(); + } + + /** + * Returns the SQL filter ID for the given FITS name. The FITS name is that which is stored in the FITS + * file which is being processed. This very simplistic implementation is hard-coded with the known SQL + * ids. Note that this is the sub_filter_t(id), not sub_filter_type(id). + */ + public int getFilterId(String fitsName) { + switch (fitsName) { + case "Red": + return FILTER_RED_ID; + case "Green": + return FILTER_GREEN_ID; + case "Blue": + return FILTER_BLUE_ID; + case "H_Alpha": + return FILTER_HA_ID; + case "SII": + return FILTER_SII_ID; + case "OIII": + return FILTER_OIII_ID; + case "LPR": + return FILTER_LUM_ID; + } + + throw new IllegalArgumentException(); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/app/TelescopeControllerApp.java b/leigh-astro/src/main/java/leigh/astro/app/TelescopeControllerApp.java new file mode 100644 index 0000000000000000000000000000000000000000..20e1d519cf225c27e54100436ac401e0ef2eb61c --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/app/TelescopeControllerApp.java @@ -0,0 +1,32 @@ +package leigh.astro.app; + +import leigh.astro.scheduler.Planner; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +/** + * This application controls a telescope deployment for the purposes of automated observation. + *

+ * Limitations: The application does not understand twilight, and will schedule jobs to run after sundown but before + * twilight ends. This will cause the job to pause in Ekos if the twilight constraint is set, so it winds up + * working in the end. + *

+ * If the Ekos job stalls due to lack of observational quality (clouds, obstructions, etc) that prevent guiding + * or aligning, Ekos will leave the mount in tracking mode, which could (unverified) lead to a mount crash. + * If the job does eventually resume due to conditions improving, it will complete but will run "long" + * which in turn can stall the job since Ekos will not abort it when the object sets (or descends past the minimum + * elevation). This will result in observations being stalled until the next night, or human intervention. + * + * @author C. Alexander Leigh + */ +public class TelescopeControllerApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(TelescopeControllerApp.class); + + public static void main(String[] args) throws Exception { + String ver = TelescopeControllerApp.class.getPackage().getImplementationVersion(); + logger.info("Ver: {}", ver); + + Planner s = new Planner(); + s.run(); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/astrometrics/AirMass.java b/leigh-astro/src/main/java/leigh/astro/astrometrics/AirMass.java new file mode 100644 index 0000000000000000000000000000000000000000..913e394ac65d1650cefa60ac25b41dd4615ba0a6 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/astrometrics/AirMass.java @@ -0,0 +1,49 @@ +package leigh.astro.astrometrics; + +import static java.lang.Math.cos; +import static java.lang.StrictMath.pow; +import static java.lang.StrictMath.sqrt; + +/** + * Provides a method for estimating the airmass of an observation. + * + * @author Jack Martin + */ +public class AirMass { + /** + * Calculate the airmass as an index, where 1 is equal to the airmass directly at the zenith at sea level at + * standard pressure. + * + * @param altDeg The observer horizontal altitude for the observation, in degrees. + * @return The airmass index. + */ + public static double airMass(double altDeg) { + + double zenithRad = Math.toRadians(90 - altDeg); + + double seaLevel = 1 / ((cos(zenithRad) + (0.50572 * (Math.pow((96.07995 - zenithRad), -1.6364))))); + + return seaLevel; + } + + /** + * Calculate airmass as an index, adjusted for observers elevation above sea level. Airmass directly at + * zenith can be less than one. + * + * @param altDeg The observer horizontal altitude for the observation, in degrees. + * @param elevation The observer's elevation above sea level in kilometers. + * @return The airmass index. + */ + + public static double airMass(double altDeg, double elevation) { + + double re = 6367.5; + double yatm = 100; + double z = Math.toRadians(90 - altDeg); + + double airMass = sqrt(pow(((re + elevation) / yatm), 2) * pow(StrictMath.cos(z), 2) + (2 * re) / pow(yatm, 2) * + (yatm - elevation) - pow((elevation / yatm), 2) + 1) - (re + elevation) / yatm * StrictMath.cos(z); + + return airMass; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/astrometrics/Astrometrics.java b/leigh-astro/src/main/java/leigh/astro/astrometrics/Astrometrics.java new file mode 100644 index 0000000000000000000000000000000000000000..cc4a6ef6e69c37b07bb3ce568885515b6f8e0881 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/astrometrics/Astrometrics.java @@ -0,0 +1,177 @@ +package leigh.astro.astrometrics; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.catalog.StellarCatalog; +import leigh.astro.unit.Rect; +import leigh.astro.unit.SphericalCoordinate; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.NumberUtil; + +import java.io.IOException; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +/** + * This class contains various astrometrics related calculations. + * + * @author C. Alexander Leigh + */ +public class Astrometrics { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Astrometrics.class); + + public static void main(String args[]) throws IOException { + StellarCatalog ngc = new StellarCatalog(); + double mst = meanSiderealTime(new Date(), -111); + + int totalObj = 0; + int visibleObj = 0; + int windowObj = 0; + int filtered = 0; + Rect window = new Rect(new SphericalCoordinate(225, 20), new SphericalCoordinate(315, 45)); + + for (CatalogObject object : ngc.getObjects()) { + totalObj++; + + SphericalCoordinate cel = object.getJ2000Coordinate(); + SphericalCoordinate horiz = calc(mst - cel.getX(), cel.getY(), 33.0); + + if (horiz.getY() > 0) visibleObj++; + if (window.isWithin(horiz)) { + windowObj++; + logger.info("Window target: [name: {}] [airmass: {}] [hcs: {}]", + object.getName(), + NumberUtil.precision(AirMass.airMass(horiz.getY()), 2), horiz); + } + } + + logger.info("Catalog processed. [total: {}] [visible: {}] [window: {}] [rejected: {}]", + totalObj, visibleObj, windowObj, filtered); + } + + /** + * Calculate the horizon alt/az for an object's ra/dec at a given hour angle. + */ + public static SphericalCoordinate calc(double ha, double dec, double lat) { + logger.debug("Called. [ha: {}] [dec: {}] [lat: {}]", ha, dec, lat); + double haRad = Math.toRadians(ha); + double sh = Math.sin(haRad); + double ch = Math.cos(haRad); + + double decRad = Math.toRadians(dec); + double sd = Math.sin(decRad); + double cd = Math.cos(decRad); + + double latRad = Math.toRadians(lat); + double sl = Math.sin(latRad); + double cl = Math.cos(latRad); + + double x = -ch * cd * sl + sd * cl; + double y = -sh * cd; + double z = ch * cd * cl + sd * sl; + double r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); + + double az = Math.toDegrees(Math.atan2(y, x)); + double alt = Math.toDegrees(Math.atan2(z, r)); + + az = normalizeAngle(az); + + return new SphericalCoordinate(az, alt); + } + + /** + * For the given date and a longitude, calculate the local sidereal time. + */ + public static float meanSiderealTime(Date date, float longitude) { + // First, calculate number of Julian days since J2000.0. + double jd = calculateJulianDay(date); + double delta = jd - 2451545.0f; + + // Calculate the global and local sidereal times + double gst = 280.461f + 360.98564737f * delta; + double lst = normalizeAngle(gst + longitude); + + return (float) lst; + } + + /** + * Calculate the Julian Day for a given date using the following formula: + * JD = 367 * Y - INT(7 * (Y + INT((M + 9)/12))/4) + INT(275 * M / 9) + D + 1721013.5 + UT/24 + *

+ * Note that this is only valid for the year range 1900 - 2099. + */ + public static double calculateJulianDay(Date date) { + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + cal.setTime(date); + + double hour = cal.get(Calendar.HOUR_OF_DAY) + + cal.get(Calendar.MINUTE) / 60.0f + + cal.get(Calendar.SECOND) / 3600.0f; + + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + int day = cal.get(Calendar.DAY_OF_MONTH); + + double jd = 367.0 + * year + - Math.floor(7.0 * (year + Math.floor((month + 9.0) / 12.0)) / 4.0) + + Math.floor(275.0 * month / 9.0) + day + 1721013.5 + hour + / 24.0; + + return jd; + } + + /** + * Normalize the angle to the range 0 <= value < 360. + */ + public static double normalizeAngle(double angle) { + double remainder = angle % 360; + if (remainder < 0) + remainder += 360; + return remainder; + } + + public static double dmsToDeg(double d, double m, double s) { + return Math.signum(d) * (Math.abs(d) + (m / 60.0) + (s / 3600.0)); + } + + public static double hmsToDeg(double h, double m, double s) { + return (15 * h) + (15 * m / 60) + (15 * s / 3600); + } + + + /** + * Parse a [+|-]HH:MM;SS.SSS format into a double. + * + * @param str The string to parse. + * @return The parsed value. + */ + public static double parseHms(String str) { + String sign = "+"; + if (str.startsWith("+") || str.startsWith("-")) { + sign = str.substring(0, 1); + str = str.substring(1); + } + + String[] tm = str.split(":", 3); + double x = Astrometrics.hmsToDeg(Double.parseDouble(tm[0]), Double.parseDouble(tm[1]), Double.parseDouble(tm[2])); + if (sign.equals("-")) x = -x; + + return x; + } + + public static double parseDms(String str) { + String sign = "+"; + if (str.startsWith("+") || str.startsWith("-")) { + sign = str.substring(0, 1); + str = str.substring(1); + } + + String[] tm = str.split(":", 3); + double x = Astrometrics.dmsToDeg(Double.parseDouble(tm[0]), Double.parseDouble(tm[1]), Double.parseDouble(tm[2])); + if (sign.equals("-")) x = -x; + + return x; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/astrometrics/Location.java b/leigh-astro/src/main/java/leigh/astro/astrometrics/Location.java new file mode 100644 index 0000000000000000000000000000000000000000..2ba300a3b4842c019e989e6a881bab85adefdc3f --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/astrometrics/Location.java @@ -0,0 +1,68 @@ +package leigh.astro.astrometrics; + +import java.time.Instant; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.Objects; + +/** + * Class representing a terrestrial observing location. + * + * @author C. Alexander Leigh + */ +public class Location { + private final String name; + private final double lng; + private final double lat; + private final String tz = "US/Arizona"; + + public Location(String name, double lat, double lng) { + this.name = name; + this.lng = lng; + this.lat = lat; + } + + /** + * Return the local time at this observing location for the given time. + */ + public LocalTime getLocalTime(Instant t) { + return LocalTime.from(t.atZone(ZoneId.of(tz))); + } + + public double getLng() { + return lng; + } + + public String getName() { + return name; + } + + public double getLat() { + return lat; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Location location = (Location) o; + return Double.compare(location.lng, lng) == 0 && + Double.compare(location.lat, lat) == 0 && + Objects.equals(name, location.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, lng, lat); + } + + @Override + public String toString() { + return "Location{" + + "name='" + name + '\'' + + ", lng=" + lng + + ", lat=" + lat + + '}'; + } + +} diff --git a/leigh-astro/src/main/java/leigh/astro/catalog/CatalogObject.java b/leigh-astro/src/main/java/leigh/astro/catalog/CatalogObject.java new file mode 100644 index 0000000000000000000000000000000000000000..6d9efb2c6cb186ae679ccb2dc72d6c10aab6c579 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/catalog/CatalogObject.java @@ -0,0 +1,58 @@ +package leigh.astro.catalog; + +import leigh.astro.unit.SphericalCoordinate; + +/** + * A stellar catalog object. + * + * @author C. Alexander Leigh + */ +public class CatalogObject { + private final String name; + private final SphericalCoordinate coordinate; + private final String type; + private final int id; + + public String getName() { + return name; + } + + /** + * Return the celestial coordinates for the catalog object in the J20000 epoch. + * + * @return The coordinate. + */ + public SphericalCoordinate getJ2000Coordinate() { + return coordinate; + } + + public CatalogObject(String name, SphericalCoordinate coordinate, String type, int id) { + this.name = name; + this.coordinate = coordinate; + this.type = type; + this.id = id; + } + + public String getType() { + return type; + } + + @Override + public String toString() { + return "CatalogObject{" + + "name='" + name + '\'' + + ", coordinate=" + coordinate + + ", type='" + type + '\'' + + ", id=" + id + + '}'; + } + + public SphericalCoordinate getCoordinate() { + return coordinate; + } + + public int getId() { + return id; + } + +} diff --git a/leigh-astro/src/main/java/leigh/astro/catalog/StellarCatalog.java b/leigh-astro/src/main/java/leigh/astro/catalog/StellarCatalog.java new file mode 100644 index 0000000000000000000000000000000000000000..fb7f88249a552b312a45c599eabb8ce72eef8f07 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/catalog/StellarCatalog.java @@ -0,0 +1,129 @@ +package leigh.astro.catalog; + +import au.com.bytecode.opencsv.CSVReader; +import leigh.astro.astrometrics.Astrometrics; +import leigh.astro.unit.SphericalCoordinate; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * This class implements a stellar catalog, which maintains an index of stellar objects. All objects in the provided + * catalogs have their positions noted in J2000 format. + * + * @author C. Alexander Leigh + */ +public class StellarCatalog { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(StellarCatalog.class); + private final List objects = new ArrayList<>(); + + /** + * Initialize a new catalog. This will load the stellar data from disk. + * + * @throws IOException + */ + public StellarCatalog() throws IOException { + load(); + logger.info("Built stellar catalog. [size: {}]", getObjects().size()); + } + + /** + * Write the entire stellar catalog into the ast_catalog_t table in the astro schema. + */ + public void writeToSql(Connection con) throws SQLException { + try (PreparedStatement ps = con.prepareStatement( + "INSERT INTO ast_catalog_t (nm, ra_deg, dec_deg, catalog_type_id) VALUES (?,?,?,?)")) { + for (CatalogObject obj : objects) { + ps.setString(1, obj.getName()); + ps.setDouble(2, obj.getJ2000Coordinate().getX()); + ps.setDouble(3, obj.getJ2000Coordinate().getY()); + ps.setInt(4, getTypeId(con, obj.getType())); + getTypeId(con, obj.getType()); + ps.execute(); + } + } + } + + /** + * For the given catalog type, return the type ID in the astro schema. This consults the + * ast_catalog_type_t table. Returns -1 if no match is found. + */ + public int getTypeId(Connection con, String typeName) throws SQLException { + try (PreparedStatement ps = con.prepareStatement("SELECT id FROM ast_catalog_type_t WHERE nm = ?")) { + ps.setString(1, typeName); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + logger.info("Found type id: {}", rs.getInt(1)); + return rs.getInt(1); + } + } + } + logger.warn("Failed tp find catalog type in dictionary table: {}", typeName); + return -1; + } + + /** + * Load the built-in catalog. This currently consists of a database of the NGC objects. The object names + * are formated such as . + * + * @throws IOException + */ + private void load() throws IOException { + Class cls = this.getClass(); + InputStream i = cls.getClassLoader().getResourceAsStream("leigh/astro/catalog/ngc.csv"); + + CSVReader reader = new CSVReader(new InputStreamReader(new BufferedInputStream(i)), ';'); + String[] record; + + // Header + reader.readNext(); + + int cnt = 0; + + while ((record = reader.readNext()) != null) { + logger.debug("Processing: {}", record[0]); + double raDeg = Astrometrics.parseHms(record[2]); + double decDeg = Astrometrics.parseDms(record[3]); + + logger.debug("Object: [name: {}] [raDeg: {}] [decDeg: {}]", record[0], raDeg, decDeg); + + CatalogObject obj = new CatalogObject(record[0], new SphericalCoordinate(raDeg, decDeg), + record[1], cnt); + objects.add(obj); + cnt++; + } + } + + /** + * Return a {@link List} containing all the objects in this catalog. + * + * @return The list. + */ + public List getObjects() { + return objects; + } + + /** + * Find a particular object by name in the catalog. + * + * @param name The name to search for. + * @return The object or null. + */ + public CatalogObject get(String name) { + for (CatalogObject obj : objects) { + if (obj.getName().equals(name)) return obj; + } + return null; + } + +} diff --git a/leigh-astro/src/main/java/leigh/astro/control/TelescopeMount.java b/leigh-astro/src/main/java/leigh/astro/control/TelescopeMount.java new file mode 100644 index 0000000000000000000000000000000000000000..6bda560c18afff951d7091c1b1a2f24f1fb02902 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/control/TelescopeMount.java @@ -0,0 +1,36 @@ +package leigh.astro.control; + +/** + * Classes implementing this interface represent a telescope mount. + * + * @author C. Alexander Leigh + */ +public interface TelescopeMount { + /** + * Return the science telescope's focal length in millimeters. + * + * @return The focal length in mm. + */ + double getFocalLength(); + + /** + * Return the science telescope's aperture in millimeters. + * + * @return The aperture in mm. + */ + double getAperture(); + + /** + * Return the guide scope's focal length in millimeters. + * + * @return The focal length in mm. + */ + double getGuideFocalLength(); + + /** + * Return the guide scope's aperture in millimeters. + * + * @return The aperture in mm. + */ + double getGuideAperture(); +} diff --git a/leigh-astro/src/main/java/leigh/astro/db/AstroSql.java b/leigh-astro/src/main/java/leigh/astro/db/AstroSql.java new file mode 100644 index 0000000000000000000000000000000000000000..51d24f530ff38ac6b34a367fbf7b5a8a70a746df --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/db/AstroSql.java @@ -0,0 +1,16 @@ +package leigh.astro.db; + +import com.mchange.v2.c3p0.ComboPooledDataSource; + +import java.beans.PropertyVetoException; + +public class AstroSql { + public static ComboPooledDataSource getDataSource() throws PropertyVetoException { + ComboPooledDataSource cpds = new ComboPooledDataSource(); + cpds.setDriverClass("com.mysql.cj.jdbc.Driver"); + cpds.setJdbcUrl("jdbc:mysql://localhost/astro"); + cpds.setUser("astro"); + cpds.setPassword(System.getenv("BADPASSWORD")); + return cpds; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/db/AstroStore.java b/leigh-astro/src/main/java/leigh/astro/db/AstroStore.java new file mode 100644 index 0000000000000000000000000000000000000000..62284c3d23ff6fd724ff405cc20aee58ece90038 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/db/AstroStore.java @@ -0,0 +1,63 @@ +package leigh.astro.db; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.fits.Exposure; +import leigh.astro.scheduler.Tasking; +import leigh.astro.unit.SphericalCoordinate; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; + +/** + * This class provides access to a remote Astro schema store. This particular implementation supports MySQL. + * + * @author C. Alexander Leigh + */ +public class AstroStore { + private final Connection con; + + public AstroStore(Connection con) { + this.con = con; + } + + /** + * Return a list of taskings to the caller. The taskings are the goals, so they have not had the actuals + * subtracted. + */ + public List getTaskings() throws SQLException { + ArrayList tasks = new ArrayList<>(); + + try (PreparedStatement ps = con.prepareStatement( + "SELECT a.id, a.nm, a.ra_deg, a.dec_deg, b.nm\n" + + "FROM ast_catalog_t a,\n" + + " ast_catalog_type_t b\n" + + "WHERE a.catalog_type_id = b.id\n" + + " AND (catalog_type_id = 13 OR catalog_type_id = 12)\n" + + " AND a.nm LIKE 'NGC%'")) { + try (ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + int id = rs.getInt(1); + String nm = rs.getString(2); + double ra = rs.getDouble(3); + double dec = rs.getDouble(4); + String type = rs.getString(5); + + CatalogObject obj = new CatalogObject(nm, new SphericalCoordinate(ra, dec), type, id); + Tasking t = new Tasking(obj, Instant.now()); + t.putTasking(new Exposure(240, 200, 10, Exposure.KEY_HA), 200); + t.putTasking(new Exposure(240, 200, 10, Exposure.KEY_OIII), 200); + t.putTasking(new Exposure(240, 200, 10, Exposure.KEY_SII), 200); + tasks.add(t); + } + } + } + + return tasks; + } + +} diff --git a/leigh-astro/src/main/java/leigh/astro/fits/AstroSub.java b/leigh-astro/src/main/java/leigh/astro/fits/AstroSub.java new file mode 100644 index 0000000000000000000000000000000000000000..9e34902acd4faf629df48e581bbb6d739eee5b97 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/fits/AstroSub.java @@ -0,0 +1,280 @@ +package leigh.astro.fits; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.iraf.IRAF; +import leigh.astro.iraf.Photometry; +import leigh.astro.iraf.StarFindTask; +import leigh.astro.unit.SphericalCoordinate; +import leigh.astro.wcstools.Sky2XYExecutor; +import leigh.astro.wcstools.Sky2XYTask; + +import java.nio.file.Path; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +/** + * This class represents the metadata for a sub. Typically, the sub would be stored somewhere on disk in a FITS + * file. + *

+ * Limitations: + *

+ * Note that there is not perfect fidelity between the meta-information in this class, and the information + * in an actual FITS header, so it is not possible to accurately re-create a FITS header using the information + * cotnained within this class. + * + * @author C. Alexander Leigh + */ + +/* +2020-12-08T02:48:50,237 {} INFO FitsScanner:87 - info(): header: COMMENT Generated by INDI +2020-12-08T02:48:50,237 {} INFO FitsScanner:87 - info(): header: GAIN = 300. / Gain +2020-12-08T02:48:50,237 {} INFO FitsScanner:87 - info(): header: OFFSET = 10. / Offset +2020-12-08T02:48:50,237 {} INFO FitsScanner:87 - info(): header: END +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: SIMPLE = T / file does conform to FITS standard +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: BITPIX = 16 / number of bits per data pixel +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: NAXIS = 2 / number of data axes +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: NAXIS1 = 4656 / length of data axis 1 +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: NAXIS2 = 3520 / length of data axis 2 +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: EXTEND = T / FITS dataset may contain extensions +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: BZERO = 32768 / offset data range to that of unsigned short +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: BSCALE = 1 / default scaling factor +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: ROWORDER= 'TOP-DOWN' / Row Order +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: INSTRUME= 'ZWO CCD ASI1600MM Pro' / CCD Name +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: TELESCOP= 'EQMod Mount' / Telescope name +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: OBSERVER= 'Unknown ' / Observer name +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: OBJECT = 'NGC_6960' / Object name +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: EXPTIME = 2.400000E+02 / Total Exposure Time (s) +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: CCD-TEMP= -2.80E+01 / CCD Temperature (Celsius) +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: PIXSIZE1= 3.800000E+00 / Pixel Size 1 (microns) +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: PIXSIZE2= 3.800000E+00 / Pixel Size 2 (microns) +2020-12-08T02:48:50,238 {} INFO FitsScanner:87 - info(): header: XBINNING= 1 / Binning factor in width +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: YBINNING= 1 / Binning factor in height +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: XPIXSZ = 3.800000E+00 / X binned pixel size in microns +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: YPIXSZ = 3.800000E+00 / Y binned pixel size in microns +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: FRAME = 'Light ' / Frame Type +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: IMAGETYP= 'Light Frame' / Frame Type +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: FILTER = 'SII ' / Filter +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: FOCALLEN= 6.00E+02 / Focal Length (mm) +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: APTDIA = 8.00E+01 / Telescope diameter (mm) +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: SCALE = 1.306567E+00 / arcsecs per pixel +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: SITELAT = 3.365110E+01 / Latitude of the imaging site in degrees +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: SITELONG= -1.119350E+02 / Longitude of the imaging site in degrees +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: AIRMASS = 1.442554E+00 / Airmass +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: OBJCTRA = '20 46 00.58' / Object J2000 RA in Hours +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: OBJCTDEC= '30 14 57.93' / Object J2000 DEC in Degrees +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: RA = 3.115024E+02 / Object J2000 RA in Degrees +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: DEC = 3.024943E+01 / Object J2000 DEC in Degrees +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: EQUINOX = 2000 / Equinox +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CRVAL1 = 3.1150242536E+02 / CRVAL1 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CRVAL2 = 3.0249425947E+01 / CRVAL1 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: RADECSYS= 'FK5 ' / RADECSYS +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CTYPE1 = 'RA---TAN' / CTYPE1 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CTYPE2 = 'DEC--TAN' / CTYPE2 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CRPIX1 = 2.3280000000E+03 / CRPIX1 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CRPIX2 = 1.7600000000E+03 / CRPIX2 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: SECPIX1 = 1.3065666503E+00 / SECPIX1 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: SECPIX2 = 1.3065666503E+00 / SECPIX2 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CDELT1 = 3.6293518063E-04 / CDELT1 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CDELT2 = 3.6293518063E-04 / CDELT2 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CROTA1 = 2.9975000000E+01 / CROTA1 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: CROTA2 = 2.9975000000E+01 / CROTA2 +2020-12-08T02:48:50,239 {} INFO FitsScanner:87 - info(): header: DATE-OBS= '2020-11-29T03:20:21.997' / UTC start date of observation + */ + +public class AstroSub { + private final UUID id; + private final String telescope; + private final String instrument; + private final AstroSubType frameType; + private final double length; + private final int gain; + private final int offset; + private final String filter; + private final SphericalCoordinate obj; + private final Instant time; + // Must not be included in equals()! + private final Path path; + private final double ccdTemp; + private Photometry photometry; + private final int heightPx; + private final int widthPx; + + public AstroSub(UUID id, String telescope, String instrument, AstroSubType frameType, + double length, int gain, int offset, + String filter, double objRa, double objDec, Instant time, Path path, double ccdTemp, int heightPx, int widthPx) { + this.id = id; + this.telescope = telescope; + this.instrument = instrument; + this.frameType = frameType; + this.length = length; + this.gain = gain; + this.offset = offset; + this.filter = filter; + this.time = time; + this.path = path; + this.ccdTemp = ccdTemp; + this.heightPx = heightPx; + this.widthPx = widthPx; + obj = new SphericalCoordinate(objRa, objDec); + } + + /** + * Return the photometry associated with this sub. This call is only valid in the contest of a light sub. + */ + public Photometry getPhotometry() throws Exception { + if (photometry == null) { + IRAF iraf = new IRAF(); + StarFindTask starfind = new StarFindTask(id, path.getParent().toString()); + iraf.exec(starfind); + photometry = starfind.getPhotometry(); + } + + return photometry; + } + + public Instant getTime() { + return time; + } + + public Path getPath() { + return path; + } + + public double getCcdTemp() { + return ccdTemp; + } + + public UUID getId() { + return id; + } + + @Override + public String toString() { + return "AstroSub{" + + "id=" + id + + ", telescope='" + telescope + '\'' + + ", instrument='" + instrument + '\'' + + ", frameType=" + frameType + + ", length=" + length + + ", gain=" + gain + + ", offset=" + offset + + ", filter='" + filter + '\'' + + ", obj=" + obj + + ", time=" + time + + ", path=" + path + + ", ccdTemp=" + ccdTemp + + ", photometry=" + photometry + + ", heightPx=" + heightPx + + ", widthPx=" + widthPx + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + AstroSub astroSub = (AstroSub) o; + return Double.compare(astroSub.length, length) == 0 && + gain == astroSub.gain && + offset == astroSub.offset && + Double.compare(astroSub.ccdTemp, ccdTemp) == 0 && + Objects.equals(id, astroSub.id) && + Objects.equals(telescope, astroSub.telescope) && + Objects.equals(instrument, astroSub.instrument) && + frameType == astroSub.frameType && + Objects.equals(filter, astroSub.filter) && + Objects.equals(obj, astroSub.obj) && + Objects.equals(time, astroSub.time) && + Objects.equals(path, astroSub.path); + } + + @Override + public int hashCode() { + return Objects.hash(id, telescope, instrument, frameType, length, gain, offset, filter, obj, time, path, ccdTemp); + } + + /** + * Return the {@link SphericalCoordinate} indicating the RA and Declination in J2000 which was used to center + * this sub. Note that this coordinate may be wrong within the pointing accuracy of the telescope equipment + * which was used to make the observation. + */ + public SphericalCoordinate getObj() { + return obj; + } + + /** + * Return a new {@link Exposure} object which represents the exposure configuration of this sub. + * + * @return The new exposure. + */ + public Exposure getExposure() { + return new Exposure(length, gain, offset, filter); + } + + /** + * Return the filter which was used to take this sub. The caller should not make too many assumptions about the + * business meaning of the returned filter, for example, it would be a mistake to assume that all Sodium filters + * return "SII". The actual filter values could be instrument, site, or installation-specific. + */ + public String getFilter() { + return filter; + } + + public String getTelescope() { + return telescope; + } + + public String getInstrument() { + return instrument; + } + + public AstroSubType getFrameType() { + return frameType; + } + + public double getLengthSeconds() { + return length; + } + + public int getGain() { + return gain; + } + + public int getOffset() { + return offset; + } + + /** + * Determine of any of the provide {@link CatalogObject} objects are contained within the frame of this + * sub. The list of objects which match the frame is returned to the caller. + */ + public List contains(List objs) throws Exception { + Sky2XYTask task = new Sky2XYTask(objs); + Sky2XYExecutor exec = new Sky2XYExecutor(path.toString(), task.getTmpFile().getAbsolutePath()); + exec.exec(task); + return task.getMatched(); + } + + /** + * Returns true if this sub contains the provided object within the frame. + */ + public boolean contains(CatalogObject obj) throws Exception { + ArrayList lst = new ArrayList<>(); + lst.add(obj); + List has = contains(lst); + return has.contains(obj); + } + + public int getHeightPx() { + return heightPx; + } + + public int getWidthPx() { + return widthPx; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/fits/AstroSubType.java b/leigh-astro/src/main/java/leigh/astro/fits/AstroSubType.java new file mode 100644 index 0000000000000000000000000000000000000000..9eb1dda61079c0185553eba80991da3234e00084 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/fits/AstroSubType.java @@ -0,0 +1,5 @@ +package leigh.astro.fits; + +public enum AstroSubType { + LIGHT, DARK, BIAS, FLAT +} diff --git a/leigh-astro/src/main/java/leigh/astro/fits/AstroSubUtil.java b/leigh-astro/src/main/java/leigh/astro/fits/AstroSubUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..77002b0796f229a5ddada3c5c8ce8d3760239c4b --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/fits/AstroSubUtil.java @@ -0,0 +1,68 @@ +package leigh.astro.fits; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * Utility methods for working with {@link AstroSub} objects. + * + * @author Jack Martin + */ +public class AstroSubUtil { + + /** + * Attempt to locate up to count subs from the provided {@link List} of subs which were taken closest + * in time to the provided time. A matching sub may be before, after, or on the provided time. + */ + public List findNearest(List subs, Instant time, int count) { + List sortedSubs = new ArrayList<>(); + + subs.sort(Comparator.comparing(astroSub -> Math.abs(Duration.between(astroSub.getTime(), time).toSeconds()))); + + for (int i = 0; i < count && i < subs.size(); i++) { + sortedSubs.add(subs.get(i)); + } + + return sortedSubs; + } + + /** + * Given a Light sub and a list of potential calibration subs, generate a list of calibrations which are related + * to the light frame. A calibration frame is related if it matches, based on its type, the following rules: + *

+ * Darks: A dark sub matches if the temperature, exposure length, gain, and offset settings are the same. + * Flats: A flat sub matches if the filter is the same. + * Bias: A bias sub matches if the temperature, gain and offset are the same. + */ + public List matchCalibrations(AstroSub light, List calibrations) { + ArrayList matches = new ArrayList<>(); + + for (AstroSub sub : calibrations) { + switch (sub.getFrameType()) { + case DARK: + if (sub.getCcdTemp() == light.getCcdTemp() && sub.getLengthSeconds() == light.getLengthSeconds() + && sub.getGain() == light.getGain() && sub.getOffset() == light.getOffset()) { + matches.add(sub); + } + break; + case FLAT: + if (sub.getFilter().equals(light.getFilter())) { + matches.add(sub); + } + break; + case BIAS: + if (sub.getCcdTemp() == light.getCcdTemp() && sub.getGain() == light.getGain() + && sub.getOffset() == light.getOffset()) { + + matches.add(sub); + } + break; + } + } + return matches; + } + +} \ No newline at end of file diff --git a/leigh-astro/src/main/java/leigh/astro/fits/Exposure.java b/leigh-astro/src/main/java/leigh/astro/fits/Exposure.java new file mode 100644 index 0000000000000000000000000000000000000000..9f2ecdbd105754d65a7a7d38ff8f9a4f05f77c47 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/fits/Exposure.java @@ -0,0 +1,72 @@ +package leigh.astro.fits; + +import java.util.Objects; + +/** + * This class represents an exposure configuration. + * + * @author C. Alexander Leigh + */ +public class Exposure { + public static final String KEY_RED = "Red"; + public static final String KEY_GREEN = "Green"; + public static final String KEY_BLUE = "Blue"; + public static final String KEY_LUMINANCE = "LPR"; + public static final String KEY_HA = "H_Alpha"; + public static final String KEY_OIII = "OIII"; + public static final String KEY_SII = "SII"; + + private final double exp; + private final int gain; + private final int offset; + private final String filter; + + public Exposure(double exp, int gain, int offset, String filter) { + this.exp = exp; + this.gain = gain; + this.offset = offset; + this.filter = filter; + } + + public double getLength() { + return exp; + } + + public int getGain() { + return gain; + } + + public int getOffset() { + return offset; + } + + public String getFilter() { + return filter; + } + + @Override + public String toString() { + return "Exposure{" + + "exp=" + exp + + ", gain=" + gain + + ", offset=" + offset + + ", filter='" + filter + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Exposure exposure = (Exposure) o; + return Double.compare(exposure.exp, exp) == 0 && + gain == exposure.gain && + offset == exposure.offset && + Objects.equals(filter, exposure.filter); + } + + @Override + public int hashCode() { + return Objects.hash(exp, gain, offset, filter); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/fits/ExposureCounter.java b/leigh-astro/src/main/java/leigh/astro/fits/ExposureCounter.java new file mode 100644 index 0000000000000000000000000000000000000000..e2c5d320e5438af44d81a44e1e5cee83fccd4551 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/fits/ExposureCounter.java @@ -0,0 +1,37 @@ +package leigh.astro.fits; + +import java.util.HashMap; +import java.util.List; + +/** + * This class counts unique exposures in a given set. + * + * @author C. Alexander Leigh + */ +public class ExposureCounter { + private HashMap counter = new HashMap<>(); + + public void count(List subs) { + for (AstroSub sub : subs) { + Integer cnt = counter.get(sub.getExposure()); + if (cnt == null) { + counter.put(sub.getExposure(), 1); + } else { + counter.put(sub.getExposure(), cnt + 1); + } + } + } + + public int getCount(Exposure exp) { + Integer cnt = counter.get(exp); + if (cnt == null) return 0; + return cnt; + } + + @Override + public String toString() { + return "FilterCounter{" + + "counter=" + counter + + '}'; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/fits/FitsScanner.java b/leigh-astro/src/main/java/leigh/astro/fits/FitsScanner.java new file mode 100644 index 0000000000000000000000000000000000000000..c95d2f4e507c525629d75acfca636d4e04404bba --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/fits/FitsScanner.java @@ -0,0 +1,183 @@ +package leigh.astro.fits; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.ListUtil; +import leigh.mecha.util.Snavig; +import nom.tam.fits.Fits; +import nom.tam.fits.FitsException; +import nom.tam.fits.Header; +import nom.tam.fits.HeaderCard; +import nom.tam.util.Cursor; +import org.apache.commons.io.FilenameUtils; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * This class scans a directory hierarchy for .fits files, and builds a catalog of + * {@link AstroSub} objects describing the files it finds. + * + * @author C. Alexander Leigh + */ +public class FitsScanner { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FitsScanner.class); + private ArrayList subs = new ArrayList<>(); + + public static void debugFits(Fits f) throws FitsException, IOException { + for (Cursor it = f.getHDU(0).getHeader().iterator(); it.hasNext(); ) { + HeaderCard c = it.next(); + logger.info("header: {}", c); + } + } + + public void removeDupes(Path path) throws IOException { + List subs = scanPath(path); + List uniq = new ArrayList<>(); + List dupes = new ArrayList<>(); + + ListUtil.unique(uniq, dupes, subs); + + logger.info("Found subs. [count: {}] [uniq: {}] [dupe: {}]", + subs.size(), uniq.size(), dupes.size()); + + for (AstroSub sub : dupes) { + logger.info("Removing duplicate sub. [fn: {}]", sub.getPath()); + sub.getPath().toFile().delete(); + + } + } + + public void dump(Path fitsFile) throws FitsException, IOException { + Fits f = new Fits(fitsFile.toString()); + Header header = f.getHDU(0).getHeader(); + logger.info("Header: {}", header); + } + + /** + * Ingest the given files into the database. + */ + + // TODO This should also read the sub into the subs array + public void ingest(Path dstPath, Path srcPath) throws IOException { + Files.walkFileTree(srcPath, new SimpleFileVisitor<>() { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + if (file.toString().endsWith(".fits") || file.toString().endsWith(".fit")) { + try { + Fits f = new Fits(file.toAbsolutePath().toString()); + f.getHDU(0).getHeader(); + + // If we got this far, the file was probably legal. + + UUID fileId = UUID.randomUUID(); + Path newFn = dstPath.resolve(fileId + ".fits"); + + logger.info("Moving file: {} {}", file, newFn); + + Files.move(file, newFn); + + } catch (FitsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return FileVisitResult.CONTINUE; + } + }); + } + + public void scan(Path base) throws IOException { + // TODO Implement support for incrementally adding / multiple paths. + subs.clear(); + + Files.walkFileTree(base, new SimpleFileVisitor<>() { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + if (file.toString().endsWith(".fits") || file.toString().endsWith(".fit")) { + try { + Fits f = new Fits(file.toAbsolutePath().toString()); + Header header = f.getHDU(0).getHeader(); + + UUID id = UUID.fromString(FilenameUtils.removeExtension(file.getFileName().toString())); + + AstroSub sub = new AstroSub( + id, header.getStringValue("TELESCOP"), + header.getStringValue("INSTRUME"), + AstroSubType.valueOf(header.getStringValue("FRAME").toUpperCase()), + header.getDoubleValue("EXPTIME"), + header.getIntValue("GAIN"), + header.getIntValue("OFFSET"), + header.getStringValue("FILTER"), + header.getDoubleValue("RA"), + header.getDoubleValue("DEC"), + Snavig.convertToInstant(header.getStringValue("DATE-OBS") + "Z"), + file, header.getDoubleValue("CCD-TEMP"), + header.getIntValue("NAXIS2"), + header.getIntValue("NAXIS1")); + subs.add(sub); + } catch (FitsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return FileVisitResult.CONTINUE; + } + }); + } + + /** + * Scan the given path recursively for fits-format images, and generate a list of {@link AstroSub} + * objects. A file will be considered if it ends in .fit or .fits and contains + * a valid FITS header. + */ + public List scanPath(Path base) throws IOException { + ArrayList result = new ArrayList<>(); + + Files.walkFileTree(base, new SimpleFileVisitor<>() { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + if (file.toString().endsWith(".fits") || file.toString().endsWith(".fit")) { + try { + Fits f = new Fits(file.toAbsolutePath().toString()); + Header header = f.getHDU(0).getHeader(); + + // debugFits(f); + UUID id = UUID.fromString(FilenameUtils.removeExtension(file.getFileName().toString())); + + AstroSub sub = new AstroSub( + id, header.getStringValue("TELESCOP"), + header.getStringValue("INSTRUME"), + AstroSubType.valueOf(header.getStringValue("FRAME").toUpperCase()), + header.getDoubleValue("EXPTIME"), + header.getIntValue("GAIN"), + header.getIntValue("OFFSET"), + header.getStringValue("FILTER"), + header.getDoubleValue("RA"), + header.getDoubleValue("DEC"), + Snavig.convertToInstant(header.getStringValue("DATE-OBS") + "Z"), + file, header.getDoubleValue("CCD-TEMP"), header.getIntValue("NAXIS2"), + header.getIntValue("NAXIS1")); + result.add(sub); + } catch (FitsException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return FileVisitResult.CONTINUE; + } + }); + return result; + } + + public ArrayList getSubs() { + return subs; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/fits/SubManifest.java b/leigh-astro/src/main/java/leigh/astro/fits/SubManifest.java new file mode 100644 index 0000000000000000000000000000000000000000..3dc59774b154cf4fec1142b6c4ac08b44b52306d --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/fits/SubManifest.java @@ -0,0 +1,46 @@ +package leigh.astro.fits; + +import java.time.Duration; +import java.util.ArrayList; + +/** + * A manifest of {@link AstroSub} objects. + * + * @author C. Alexander Leigh + */ +public class SubManifest { + private final ArrayList subs; + + public SubManifest(ArrayList subs) { + this.subs = subs; + } + + public Duration duration() { + long exp = 0; + for (AstroSub s : subs) { + exp += (long) s.getLengthSeconds(); + } + return Duration.ofSeconds(exp); + } + + public int count() { + return subs.size(); + } + + public ExposureCounter filterCount() { + ExposureCounter fc = new ExposureCounter(); + fc.count(subs); + return fc; + } + + public int size() { + return subs.size(); + } + + @Override + public String toString() { + return "SubManifest{" + + "subs=" + subs + + '}'; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/iraf/IRAF.java b/leigh-astro/src/main/java/leigh/astro/iraf/IRAF.java new file mode 100644 index 0000000000000000000000000000000000000000..ea9e5a520722776280a74bac7dcfe371e1c113be --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/iraf/IRAF.java @@ -0,0 +1,14 @@ +package leigh.astro.iraf; + +import leigh.mecha.exec.BatchExecutor; + +/** + * This class implements a Java-based wrapper around a locally installed iraf distribution. + * + * @author C. Alexander Leigh + */ +public class IRAF extends BatchExecutor { + public IRAF() { + super("/opt/iraf/iraf/bin/cl.e", new String[]{}); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/iraf/IRAFApp.java b/leigh-astro/src/main/java/leigh/astro/iraf/IRAFApp.java new file mode 100644 index 0000000000000000000000000000000000000000..9944ab9bd24fd8ef8d5e3c6ead061c72cebfe290 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/iraf/IRAFApp.java @@ -0,0 +1,27 @@ +package leigh.astro.iraf; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.UUID; + +/** + * Test application for the IRAF script execution facility, mostly used for development purposes. + * + * @author C. Alexander Leigh + */ +public class IRAFApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(IRAFApp.class); + + public static void main(String[] args) throws Exception { + IRAF iraf = new IRAF(); + StarFindTask starfind = new StarFindTask(UUID.fromString("f4fc0bf8-808d-48a7-a76b-39c671741f50"), + "/Volumes/cal326/adb"); + + iraf.exec(starfind); + + logger.info("Stars. [avgHwhm: {}] [cnt: {}]", + starfind.getPhotometry().averageHWHM(), + starfind.getPhotometry().getCount()); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/iraf/Photometry.java b/leigh-astro/src/main/java/leigh/astro/iraf/Photometry.java new file mode 100644 index 0000000000000000000000000000000000000000..70931f7dd824f86b43b272dd8b4125cfc5f89517 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/iraf/Photometry.java @@ -0,0 +1,61 @@ +package leigh.astro.iraf; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class contains photometric data for a astronomical science image. + * + * @author C. Alexander Leigh + */ +public class Photometry { + private final List stars = new ArrayList<>(); + + + public void addStar(StarInfo star) { + stars.add(star); + } + + public int getCount() { + return stars.size(); + } + + public double averageHWHM() { + double x = 0; + for (StarInfo star : stars) { + x += star.getHwhm(); + } + return x / stars.size(); + } + + public double averageFWHM() { + return averageHWHM() * 2; + } + + public double averageSharp() { + double x = 0; + for (StarInfo star : stars) { + x += star.getSharp(); + } + return x / stars.size(); + } + + public double averageRound() { + double x = 0; + for (StarInfo star : stars) { + x += star.getRound(); + } + return x / stars.size(); + } + + public List getStars() { + return stars; + } + + @Override + public String toString() { + return "Photometry{" + + "stars=" + stars + + '}'; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/iraf/StarFindTask.java b/leigh-astro/src/main/java/leigh/astro/iraf/StarFindTask.java new file mode 100644 index 0000000000000000000000000000000000000000..1eff4501e932d1116394798c138a74d226964605 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/iraf/StarFindTask.java @@ -0,0 +1,86 @@ +package leigh.astro.iraf; + +import au.com.bytecode.opencsv.CSVReader; +import leigh.mecha.exec.VelocityTask; +import leigh.mecha.util.StringUtil; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.util.List; +import java.util.UUID; + +/** + * Starfind searches the input image for local density maxima with half-widths at half-maxima of + * hwhmpsf and peak amplitudes greater than ~threshold above the local + * background, and stores the result in an array of {@link StarInfo} objects. + * + * @author C. Alexander Leigh + */ +public class StarFindTask extends VelocityTask { + private final UUID imageUUID; + private final String workDir; + private final File tmpFile = File.createTempFile("leigh-astro", "txt"); + private final Photometry photometry = new Photometry(); + + public StarFindTask(UUID imageUUID, String workDir) throws IOException { + super("/leigh/astro/iraf/starfind.vm"); + this.imageUUID = imageUUID; + this.workDir = workDir; + } + + @SuppressWarnings("unused") + public UUID getImageUUID() { + return imageUUID; + } + + public Photometry getPhotometry() { + return photometry; + } + + + @SuppressWarnings("unused") + public String getWorkDir() { + return workDir; + } + + @SuppressWarnings("unused") + public File getTmpFile() { + return tmpFile; + } + + @Override + public String toString() { + return "StarFindTask{" + + "imageUUID=" + imageUUID + + ", workDir='" + workDir + '\'' + + ", tmpFile=" + tmpFile + + ", photometry=" + photometry + + "} " + super.toString(); + } + + @Override + public void finished(String result) throws IOException { + super.finished(result); + Reader in = new FileReader(tmpFile); + + /* + * # Columns + * # 1: X 2: Y + * # 3: Mag 4: Area + * # 5: Hwhm 6: Roundness + * # 7: Pa 8: Sharpness + */ + + try (CSVReader reader = new CSVReader(in, ' ')) { + String[] record; + while ((record = reader.readNext()) != null) { + List rec = StringUtil.makeList(record); + if (rec.size() == 0) continue; + if (rec.get(0).equals("#")) continue; + photometry.addStar(new StarInfo(rec)); + } + } + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/iraf/StarInfo.java b/leigh-astro/src/main/java/leigh/astro/iraf/StarInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..6d89d288d55c1f3cf45b3013201bf796ef45f7e9 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/iraf/StarInfo.java @@ -0,0 +1,103 @@ +package leigh.astro.iraf; + +import java.util.List; +import java.util.Objects; + +public class StarInfo { + private final double x; + private final double y; + private final double mag; + private final double area; + private final double hwhm; + private final double round; + private final double pa; + private final double sharp; + + public StarInfo(double x, double y, double mag, double area, double hwhm, double round, double pa, double sharp) { + this.x = x; + this.y = y; + this.mag = mag; + this.area = area; + this.hwhm = hwhm; + this.round = round; + this.pa = pa; + this.sharp = sharp; + } + + public StarInfo(List lst) { + this.x = Double.parseDouble(lst.get(0)); + this.y = Double.parseDouble(lst.get(1)); + this.mag = Double.parseDouble(lst.get(2)); + this.area = Double.parseDouble(lst.get(3)); + this.hwhm = Double.parseDouble(lst.get(4)); + this.round = Double.parseDouble(lst.get(5)); + this.pa = Double.parseDouble(lst.get(6)); + this.sharp = Double.parseDouble(lst.get(7)); + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + + public double getMag() { + return mag; + } + + public double getArea() { + return area; + } + + public double getHwhm() { + return hwhm; + } + + public double getRound() { + return round; + } + + public double getPa() { + return pa; + } + + public double getSharp() { + return sharp; + } + + @Override + public String toString() { + return "StarInfo{" + + "x=" + x + + ", y=" + y + + ", mag=" + mag + + ", area=" + area + + ", hwhm=" + hwhm + + ", round=" + round + + ", pa=" + pa + + ", sharp=" + sharp + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + StarInfo starInfo = (StarInfo) o; + return Double.compare(starInfo.x, x) == 0 && + Double.compare(starInfo.y, y) == 0 && + Double.compare(starInfo.mag, mag) == 0 && + Double.compare(starInfo.area, area) == 0 && + Double.compare(starInfo.hwhm, hwhm) == 0 && + Double.compare(starInfo.round, round) == 0 && + Double.compare(starInfo.pa, pa) == 0 && + Double.compare(starInfo.sharp, sharp) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(x, y, mag, area, hwhm, round, pa, sharp); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/scheduler/Objective.java b/leigh-astro/src/main/java/leigh/astro/scheduler/Objective.java new file mode 100644 index 0000000000000000000000000000000000000000..f4be3e07de16aa6ea2d63f87bbe0201020306472 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/scheduler/Objective.java @@ -0,0 +1,23 @@ +package leigh.astro.scheduler; + +import leigh.astro.catalog.CatalogObject; + +/** + * This class represents a mission objective in the astronomy planning ecosystem. A mission consists of an + * observational goal. In the currently limited implementation, all objectives are said to be basic 80mm visual + * observations in the narrowband ranges of Ha, OIII, SII. + * + * @author C. Alexander Leigh + */ +public class Objective { + private final CatalogObject object; + + public Objective(CatalogObject object) { + this.object = object; + } + + public CatalogObject getObject() { + return object; + } + +} \ No newline at end of file diff --git a/leigh-astro/src/main/java/leigh/astro/scheduler/Planner.java b/leigh-astro/src/main/java/leigh/astro/scheduler/Planner.java new file mode 100644 index 0000000000000000000000000000000000000000..f99f906a599b4b6ab24f37314bda00838c46ad47 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/scheduler/Planner.java @@ -0,0 +1,322 @@ +package leigh.astro.scheduler; + +import com.mchange.v2.c3p0.ComboPooledDataSource; +import leigh.astro.app.SubLoaderApp; +import leigh.astro.astrometrics.Astrometrics; +import leigh.astro.astrometrics.Location; +import leigh.astro.catalog.CatalogObject; +import leigh.astro.catalog.StellarCatalog; +import leigh.astro.db.AstroSql; +import leigh.astro.db.AstroStore; +import leigh.astro.fits.AstroSub; +import leigh.astro.fits.Exposure; +import leigh.astro.fits.FitsScanner; +import leigh.astro.scheduler.ekos.EkosController; +import leigh.astro.scheduler.ekos.EkosPlan; +import leigh.astro.unit.Rect; +import leigh.astro.unit.SphericalCoordinate; +import leigh.mecha.cred.Credential; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.VelocityWatch; +import org.shredzone.commons.suncalc.SunTimes; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.Connection; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Implementation of an astronomy scheduler (tasker). + *

+ * Night of 12/18/20 is the first ed80+moonlite+asi1200mm+efw night. + * + * @author C. Alexander Leigh + */ +public class Planner implements Runnable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Planner.class); + private final Location slateHouse = new Location("Slate House", 33.65125, -111.93546); + public static final int UNLIMITED = -1; + private final FitsScanner scanner = new FitsScanner(); + private final Path adb = Paths.get("/Volumes/cal326/adb"); + private final StellarCatalog ngc = new StellarCatalog(); + private final boolean armed = true; + + public Planner() throws IOException { + scanner.scan(adb); + } + + /** + * Return a {@link Location} object representing Slate House in Phoenix, AZ. + */ + public Location getSlateHouse() { + return slateHouse; + } + + /** + * Return the {@link StellarCatalog} associated with this planner. + */ + public StellarCatalog getNgc() { + return ngc; + } + + /** + * Find subs that match the given target. + * + * @param coords + */ + public ArrayList find(SphericalCoordinate coords) { + ArrayList result = new ArrayList<>(); + + for (AstroSub sub : scanner.getSubs()) { + if (coords.isNear(sub.getObj())) result.add(sub); + } + + return result; + } + + + /** + * Determine the earliest and latest tasking dates for the given set of tasks, and print it to the screen. + * + * @param tasks The tasks to process. + */ + public void taskingInfo(List tasks) { + Instant earliest = null; + Instant latest = null; + + for (Tasking t : tasks) { + Instant start = t.getMinTime(); + Instant end = t.getMinTime().plus((long) t.getLength(), ChronoUnit.SECONDS); + + if (earliest == null) { + earliest = start; + } else { + if (start.isBefore(earliest)) earliest = start; + } + + if (latest == null) { + latest = end; + } else { + if (end.isAfter(latest)) latest = end; + } + } + + logger.info("Taskings. [from: {}] [to: {}]", earliest, latest); + } + + /** + * Create an observation plan for the given taskings, beginning at the given start time and running until + * the following sunrise, for the given observation location. The planner will treat taskings in priority + * order where a lower index in the list means a higher priority. + *

+ * For every possible of usable observatory time, the scheduler will attempt to find an exposure. For example, + * if the first tasking can run, it will. If it cannot due to observation limitations then the second tasking + * will be evaluated, etc. This is re-evaluated on a per-exposure basis, so if 30 exposures are desired for B, + * but A becomes available 15 exposures in, the 16th exposure will be of A. + * + * limit specifies how many taskings to produce a plan for. If a limit is set, then the plan will + * only include that many tasks, and therefore will not include the entire possible observation period. This is + * required to produce single-shot jobs for EKOS to avoid imperfections in their scheduler implementation. To + * create an unlimited number of taskings, set this value to Scheduler.UNLIMITED. + */ + public List plan(List todo, Instant startTime, Location location, int limit, Instant endTime) { + Rect balcony = new Rect(new SphericalCoordinate(225, 20), new SphericalCoordinate(330, 38)); + Instant simTime = startTime; + + logger.info("Generating observation plan. [startTime: {}] [endTime: {}] [limit: {}]", + startTime, endTime, limit); + + // These are the commands we'll schedule + ArrayList commands = new ArrayList<>(); + + VelocityWatch vw = new VelocityWatch(logger); + + Tasking lastCmd = null; + + while (simTime.isBefore(endTime)) { + vw.event("tick"); + + SunTimes yesterdayTimes = SunTimes.compute() + .on(Date.from(simTime.minus(1, ChronoUnit.DAYS))) // set a date + .at(location.getLat(), location.getLng()) // set a location + .execute(); // get the results + + SunTimes todayTimes = SunTimes.compute() + .on(Date.from(simTime)) // set a date + .at(location.getLat(), location.getLng()) // set a location + .execute(); // get the results + + logger.debug("Sim time: {} set {}", simTime, yesterdayTimes.getSet().toInstant()); + + // Is it daytime? + if (simTime.isAfter(yesterdayTimes.getSet().toInstant()) && + simTime.isBefore(todayTimes.getRise().toInstant())) { + vw.event("nightTick"); + + // Calculate MST for the schedule time + double mst = Astrometrics.meanSiderealTime(Date.from(simTime), (float) location.getLng()); + Exposure next = null; + + // Search for a tasking. We will take the first available for this timeslot, in priority order. + for (Tasking task : todo) { + // Determine if the object is visible + CatalogObject object = task.getCatalogObject(); + SphericalCoordinate taskObj = object.getJ2000Coordinate(); + + // Calculate the object position for this simTime + SphericalCoordinate apparent = + Astrometrics.calc(mst - taskObj.getX(), taskObj.getY(), location.getLat()); + + logger.info("Candidate object hcs: [apparent: {}] [obj: {}]", apparent, object); + + if (balcony.isWithin(apparent)) { + vw.event("visibleObj"); + logger.info("Object is visible at this time: [time: {}] [obj: {}]", simTime, object); + Exposure e = task.pop(); + if (e != null) { + next = e; + + Tasking newCmd = null; + + if (lastCmd != null && lastCmd.getCatalogObject().equals(object)) newCmd = lastCmd; + + if (newCmd == null) { + // Before we do this, check to see if we are at our limit already. + if (limit != UNLIMITED && commands.size() >= limit) { + // We are at our limit, so we need to exit now. + vw.status(); + return commands; + } + + newCmd = new Tasking(object, simTime); + commands.add(newCmd); + lastCmd = newCmd; + vw.event("tasking"); + } + + newCmd.increment(e); + logger.debug("Enqueue Exposure: {} {}", simTime, e); + break; + } + + // We might be done - are all taskings empty? + boolean empty = true; + for (Tasking t : todo) { + for (int cnt : t.getExposures().values()) { + if (cnt != 0) { + empty = false; + break; + } + } + if (empty == false) { + break; + } + } + + if (empty) { + logger.info("Depleted all tasks."); + vw.status(); + return commands; + } + + } else { + vw.event("rejectedObj"); + logger.debug("Object rejected, outside of viewport."); + } + } + + if (next == null) { + logger.debug("Ran out of available tasking. Skipping 30s."); + simTime = simTime.plus(30, ChronoUnit.SECONDS); + } else { + logger.debug("Skipping time for exposure: {}", next); + simTime = simTime.plus((long) next.getLength(), ChronoUnit.SECONDS); + } + } else { + // It's daytime. + vw.event("dayTick"); + simTime = simTime.plus(5, ChronoUnit.MINUTES); + } + } + + logger.info("End time reached. Stopping planning. [simTime: {}]", simTime); + + vw.status(); + // Note this is not the only exit point + return commands; + } + + @Override + public void run() { + // FIXME If EKOS is offline, the planner won't attempt to recover any FITS files that might be on the remote + // TODO: Move this to the TelescopeController class, since that's really what it is + try { + ComboPooledDataSource sql = AstroSql.getDataSource(); + Runtime run = Runtime.getRuntime(); + EkosController controller = new EkosController("telescope", + new Credential("aleigh", "foo")); + SubLoaderApp loader = new SubLoaderApp(); + + while (true) { + if (controller.isRunning() && armed) { + // TODO: Check if it is daylight - if it's daylight and EKOS is running a job, kill the job. + logger.info("EKOS is already running a job. Sleeping."); + } else { + if (armed) { + logger.info("Retrieving image data from remote controller..."); + Process proc = run.exec("/Volumes/cal326/astro/sync.sh"); + proc.waitFor(); + scanner.ingest(adb, Paths.get("/Volumes/cal326/astro")); + proc.waitFor(); + logger.info("Data transfer complete."); + loader.process(Path.of("/Volumes/cal326/adb")); + } + + scanner.scan(adb); + + List todo; + try (Connection con = sql.getConnection()) { + AstroStore store = new AstroStore(con); + todo = store.getTaskings(); + } + + logger.info("Generating observation plan..."); + + // Plan no more than 8 hours ahead, working on the premise no job will wind up that long + // and prevents us from planning into the next night. + List commands = plan(todo, Instant.now(), getSlateHouse(), 1, + Instant.now().plus(8, ChronoUnit.HOURS)); + + EkosPlan plan = controller.generate(commands, getSlateHouse()); + + logger.info("Generated observation plan. [sequences: {}]", plan.getSequences().size()); + + if (plan.getStartTime() != null && plan.getStartTime().isBefore(Instant.now())) { + if (armed) { + logger.info("Publishing plan to remote controller..."); + controller.scheduleStop(); + controller.publishScheduleFile(plan); + controller.loadSchedlule(plan.getId()); + controller.scheduleStart(); + } else { + logger.warn("Scheduler is disarmed. Would have transmitted schedule."); + } + logger.info("Observation plan published. Remote controller started."); + } else { + logger.info("Plan begins in the future or is empty. Sleeping. [start: {}]", + plan.getStartTime()); + } + } + Thread.sleep(60 * 1000); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/leigh-astro/src/main/java/leigh/astro/scheduler/Tasking.java b/leigh-astro/src/main/java/leigh/astro/scheduler/Tasking.java new file mode 100644 index 0000000000000000000000000000000000000000..2e86a7a1827194e0fea7992c5a3926aca836e833 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/scheduler/Tasking.java @@ -0,0 +1,165 @@ +package leigh.astro.scheduler; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.fits.Exposure; +import leigh.astro.fits.ExposureCounter; +import leigh.astro.fits.SubManifest; +import leigh.mecha.lang.IdentifiedObject; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * This class represents a specific tasking for stellar observation. + * + * @author C. Alexander Leigh + */ + +/* WARNING : CHANGING METHOD NAMES HERE MUST MATCH IN THE .VM TEMPLATE FILES */ + +public class Tasking implements IdentifiedObject { + private final HashMap exposures = new HashMap<>(); + private final CatalogObject catalogObject; + private final UUID id = UUID.randomUUID(); + private final Instant startTime; + + /** + * Create a new tasking for the given catalog object, beginning no sooner than the given minimum time. A newly + * created tasking will be empty (will not have any exposures set). + */ + public Tasking(CatalogObject catalogObject, Instant minTime) { + // TODO: Add end-time for taskings which can expire + this.catalogObject = catalogObject; + this.startTime = minTime; + } + + /** + * Add an {@link Exposure} to this tasking. Note that any exposure configuration can only be present in the tasking + * once, so setting this replaces any existing value. + */ + public void putTasking(Exposure e, int cnt) { + exposures.put(e, cnt); + } + + /** + * Return the {@link Exposure} objects, if any, associated with this tasking. If no exposures are associated, + * an empty map is returned. The value of the map indicates the count of exposures tasked. + * + * @return The map of exposures. + */ + public HashMap getExposures() { + return exposures; + } + + /** + * Increment the {@link Exposure} of the given type by 1. If the exposure is not already in the tasking, it will be + * added with a value of 1. + * + * @param e The exposure to increment. + */ + public void increment(Exposure e) { + Integer cnt = exposures.get(e); + if (cnt == null) { + exposures.put(e, 1); + return; + } + + cnt++; + exposures.put(e, cnt); + } + + @Override + public String toString() { + return "Tasking{" + + "exposures=" + exposures + + ", catalogObject=" + catalogObject + + ", id=" + id + + ", startTime=" + startTime + + '}'; + } + + /** + * Return the minimum time for the task. This is the earliest the task could be considered eligible to be + * performed. + * + * @return The minimum time. + */ + public Instant getMinTime() { + return startTime; + } + + /** + * Given the provided manifest, determine what if anything is required in order to complete the tasking. + */ + public HashMap missing(SubManifest manifest) { + HashMap remaining = new HashMap<>(); + ExposureCounter fc = manifest.filterCount(); + + for (Map.Entry entry : exposures.entrySet()) { + int haveCnt = fc.getCount(entry.getKey()); + int need = entry.getValue() - haveCnt; + if (need > 0) remaining.put(entry.getKey(), need); + } + + return remaining; + } + + /** + * Return the length of time in seconds the entire task will take, if performed. + * + * @return The length of time in seconds. + */ + public double getLength() { + double length = 0; + for (Map.Entry exp : exposures.entrySet()) { + double len = exp.getValue() * exp.getKey().getLength(); + length += len; + } + return length; + } + + /** + * Return the {@link CatalogObject} this task refers to. + * + * @return The catalog object. + */ + public CatalogObject getCatalogObject() { + return catalogObject; + } + + /** + * Add all the given exposures, and their counts, to this object. If an exposure already exists which is stated + * in the provided map, its exposure count will be overwritten. + * + * @param exp The map of exposures and counts. + */ + public void putAll(Map exp) { + exposures.putAll(exp); + } + + /** + * Return the unique ID for this task. + */ + public UUID getId() { + return id; + } + + /** + * Pop an exposure off this tasking. This will decrement it from the task list. + */ + public Exposure pop() { + for (Map.Entry entry : exposures.entrySet()) { + Exposure exp = entry.getKey(); + int cnt = entry.getValue(); + + if (cnt > 0) { + cnt--; + exposures.put(exp, cnt); + return exp; + } + } + return null; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/scheduler/ekos/EkosController.java b/leigh-astro/src/main/java/leigh/astro/scheduler/ekos/EkosController.java new file mode 100644 index 0000000000000000000000000000000000000000..42faaa2f2a1cb89be31993b4c575e8c8f12c4293 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/scheduler/ekos/EkosController.java @@ -0,0 +1,178 @@ +package leigh.astro.scheduler.ekos; + +import leigh.astro.astrometrics.Location; +import leigh.astro.scheduler.Tasking; +import leigh.mecha.cred.Credential; +import leigh.mecha.exec.ProcessExecution; +import leigh.mecha.exec.SshExecutor; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.Snavig; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.runtime.RuntimeConstants; +import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; + +import java.io.ByteArrayInputStream; +import java.io.StringWriter; +import java.time.Instant; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +/** + * This class implements support for controlling a remote Ekos installation. + *

+ * This class works over SSH and in companion with a python script on the remote controller, ekos.py, which + * must be installed in advance. The timezone of the controller must be UTC, or the scheduler will not generate times \ + * properly. This is due to the EKOS schedule xml lacking timezone. + * + * @author C. Alexander Leigh + */ +public class EkosController { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EkosController.class); + public static final String KEY_TASKINGS = "taskings"; + public static final String KEY_TASKING = "tasking"; + public static final String KEY_CONTROLLER = "controller"; + public static final String KEY_LOCATION = "location"; + + private final String hostname; + private final Credential credential; + + public EkosController(String hostname, Credential credential) { + this.hostname = hostname; + this.credential = credential; + } + + /** + * Stop the remote scheduler in EKOS. If jobs were running, they will be marked as Aborted. This is the same + * behavior as hitting the stop button in the EKOS job window on the remote controller. + */ + public void scheduleStop() throws Exception { + try (SshExecutor ssh = new SshExecutor(hostname, 22, credential.getUsername(), credential.getPassword())) { + ssh.execute("/home/aleigh/dbus/ekos.py", new String[]{"--stop_scheduler"}); + } + } + + /** + * Start the remote scheduler in EKOS. This is the same behavior as hitting the start button in the EKOS job + * window on the remote controller. + */ + public void scheduleStart() throws Exception { + try (SshExecutor ssh = new SshExecutor(hostname, 22, credential.getUsername(), credential.getPassword())) { + ssh.execute("/home/aleigh/dbus/ekos.py", new String[]{"--start_scheduler"}); + } + } + + /** + * Reset the status of all the jobs in EKOS. This is the same behavior as hitting the refresh button on the EKOS + * kob window in the remote controller. + */ + public void schedulerReset() throws Exception { + try (SshExecutor ssh = new SshExecutor(hostname, 22, credential.getUsername(), credential.getPassword())) { + ssh.execute("/home/aleigh/dbus/ekos.py", new String[]{"--reset_scheduler"}); + } + } + + /** + * Returns true if EKOS is currently running on the remote controller. If a schedule is running, + * this does not necessarily mean that the telescope is actively operating, rather, that a job is at least + * scheduled and the EKOS scheduler is running. It could be waiting for the job to complete, or there could be + * a mechanical or other error with the telescope (for example, it is caught in a plate solving loop). + */ + public boolean isRunning() throws Exception { + try (SshExecutor ssh = new SshExecutor(hostname, 22, credential.getUsername(), credential.getPassword())) { + ProcessExecution pr = ssh.execute("/home/aleigh/dbus/status.sh"); + String result = pr.drainInput(); + int x = Snavig.convertToInteger(result); + if (x == 2) return true; + return false; + } + } + + /** + * Return the temporary ID that will be used on the controller for a file of the given UUID. This is currently + * setup to generate files in the /tmp directory. + */ + public static String buildFilename(UUID id) { + return "/tmp/ekos-" + id + ".xml"; + } + + /** + * Publish a schedule file to the remote controller. + */ + public void publishScheduleFile(EkosPlan plan) throws Exception { + try (SshExecutor ssh = new SshExecutor(hostname, 22, credential.getUsername(), credential.getPassword())) { + // First we publish the sequences. + for (Map.Entry sequence : plan.getSequences().entrySet()) { + String seqFn = buildFilename(sequence.getKey()); + byte[] seqData = sequence.getValue().getBytes(); + ssh.upload(seqFn, new ByteArrayInputStream(seqData), seqData.length); + } + String schedFn = buildFilename(plan.getId()); + byte[] schedData = plan.getSchedule().getBytes(); + ssh.upload(schedFn, new ByteArrayInputStream(schedData), schedData.length); + } + } + + public void loadSchedlule(UUID id) throws Exception { + String schedFile = buildFilename(id); + try (SshExecutor ssh = new SshExecutor(hostname, 22, credential.getUsername(), credential.getPassword())) { + ssh.execute("/home/aleigh/dbus/ekos.py", new String[]{"--load_schedule", schedFile}); + } + } + + /** + * Generate a new {@link EkosPlan} for the given taskings. Note that the task configuration is subject to the + * limitations of the EKOS scheduler, so should only contain taskings which actually should be (and can be) + * completed in this run. + *

+ * The plan will contain a single schedule entry for each tasking, and a separate sequence file for that + * tasking. The caller should take care not to duplicate taskings for the same object in the request. The plan + * will build properly, but EKOS may have problem processing such a plan. + */ + public EkosPlan generate(List taskings, Location location) { + Velocity.init(); + VelocityEngine ve = new VelocityEngine(); + ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); + ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); + + Template sequenceTemplate = ve.getTemplate("leigh/astro/scheduler/ekos/sequence.vm"); + // Before we can create the schedule, we have to build sequences. + + HashMap sequenceFiles = new HashMap<>(); + + for (Tasking t : taskings) { + VelocityContext ctx = new VelocityContext(); + ctx.put(KEY_TASKING, t); + StringWriter sw = new StringWriter(); + sequenceTemplate.merge(ctx, sw); + sequenceFiles.put(t.getId(), sw.getBuffer().toString()); + } + + Template schedTemplate = ve.getTemplate("leigh/astro/scheduler/ekos/schedule.vm"); + + VelocityContext context = new VelocityContext(); + context.put(KEY_TASKINGS, taskings); + context.put(KEY_CONTROLLER, this); + context.put(KEY_LOCATION, location); + StringWriter sw = new StringWriter(); + schedTemplate.merge(context, sw); + + // We need to know the earliest tasking. + Instant startTime = null; + for (Tasking t : taskings) { + if (startTime == null) { + startTime = t.getMinTime(); + } else { + if (t.getMinTime().isBefore(startTime)) startTime = t.getMinTime(); + } + } + + return new EkosPlan(sw.getBuffer().toString(), sequenceFiles, startTime); + } + +} diff --git a/leigh-astro/src/main/java/leigh/astro/scheduler/ekos/EkosPlan.java b/leigh-astro/src/main/java/leigh/astro/scheduler/ekos/EkosPlan.java new file mode 100644 index 0000000000000000000000000000000000000000..6346a4e364981f2b104a1a67f6b89a6d2f583e97 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/scheduler/ekos/EkosPlan.java @@ -0,0 +1,58 @@ +package leigh.astro.scheduler.ekos; + +import leigh.mecha.lang.IdentifiedObject; + +import java.time.Instant; +import java.util.HashMap; +import java.util.UUID; + +/** + * This class holds an Ekos execution plan, which may be published to an Ekos instance using the + * {@link EkosController} class. + *

+ * The user should avoid tasking the same object multiple times, as this can cause problems with Ekos. Include + * a tasking only once, and then specify unique exposure sequences as required. + *

+ * The startTime + * + * @author C. Alexander Leigh + */ +public class EkosPlan implements IdentifiedObject { + private final String schedule; + private final HashMap sequences; + private final UUID id = UUID.randomUUID(); + private final Instant startTime; + + public EkosPlan(String schedule, HashMap sequences, Instant startTime) { + this.schedule = schedule; + this.sequences = sequences; + this.startTime = startTime; + } + + @Override + public UUID getId() { + return id; + } + + public Instant getStartTime() { + return startTime; + } + + public String getSchedule() { + return schedule; + } + + public HashMap getSequences() { + return sequences; + } + + @Override + public String toString() { + return "EkosPlan{" + + "schedule='" + schedule + '\'' + + ", sequences=" + sequences + + ", id=" + id + + ", startTime=" + startTime + + '}'; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/unit/DegreesMinutesSeconds.java b/leigh-astro/src/main/java/leigh/astro/unit/DegreesMinutesSeconds.java new file mode 100644 index 0000000000000000000000000000000000000000..8d18f20be0358bafd1603f57301df06818ff4979 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/unit/DegreesMinutesSeconds.java @@ -0,0 +1,66 @@ +package leigh.astro.unit; + +import org.jastronomy.jsofa.JSOFA; + +import java.util.Objects; + +public class DegreesMinutesSeconds { + private final double degrees; + private final double minutes; + private final double seconds; + + public DegreesMinutesSeconds(double degrees) { + double xRads = Math.toRadians(degrees); + int[] idmsf = new int[4]; + + JSOFA.jauA2af(9, xRads, idmsf); + + this.degrees = idmsf[0]; + minutes = idmsf[1]; + seconds = idmsf[2]; + } + + public DegreesMinutesSeconds(double degrees, double minutes, double seconds) { + this.degrees = degrees; + this.minutes = minutes; + this.seconds = seconds; + } + + public String asString() { + return degrees + ":" + minutes + ":" + seconds; + } + + public double getDegrees() { + return degrees; + } + + public double getMinutes() { + return minutes; + } + + public double getSeconds() { + return seconds; + } + + @Override + public String toString() { + return "DegreesMinutesSeconds{" + + "degrees=" + degrees + + ", minutes=" + minutes + + ", seconds=" + seconds + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DegreesMinutesSeconds that = (DegreesMinutesSeconds) o; + return Double.compare(that.degrees, degrees) == 0 && Double.compare(that.minutes, minutes) == 0 && Double.compare(that.seconds, seconds) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(degrees, minutes, seconds); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/unit/HoursMinutesSeconds.java b/leigh-astro/src/main/java/leigh/astro/unit/HoursMinutesSeconds.java new file mode 100644 index 0000000000000000000000000000000000000000..00853069617801b6fb8f73e923b565e2371eef34 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/unit/HoursMinutesSeconds.java @@ -0,0 +1,66 @@ +package leigh.astro.unit; + +import org.jastronomy.jsofa.JSOFA; + +import java.util.Objects; + +public class HoursMinutesSeconds { + private final double hours; + private final double minutes; + private final double seconds; + + public HoursMinutesSeconds(double degrees) { + double xRads = Math.toRadians(degrees); + int[] idmsf = new int[4]; + + JSOFA.jauA2tf(9, xRads, idmsf); + + hours = idmsf[0]; + minutes = idmsf[1]; + seconds = idmsf[2]; + } + + public HoursMinutesSeconds(double hours, double minutes, double seconds) { + this.hours = hours; + this.minutes = minutes; + this.seconds = seconds; + } + + public double getHours() { + return hours; + } + + public double getMinutes() { + return minutes; + } + + public double getSeconds() { + return seconds; + } + + public String asString() { + return hours + ":" + minutes + ":" + seconds; + } + + @Override + public String toString() { + return "HoursMinutesSeconds{" + + "hours=" + hours + + ", minutes=" + minutes + + ", seconds=" + seconds + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + HoursMinutesSeconds that = (HoursMinutesSeconds) o; + return Double.compare(that.hours, hours) == 0 && Double.compare(that.minutes, minutes) == 0 && Double.compare(that.seconds, seconds) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(hours, minutes, seconds); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/unit/Rect.java b/leigh-astro/src/main/java/leigh/astro/unit/Rect.java new file mode 100644 index 0000000000000000000000000000000000000000..2356b7458e0ebcef3e99f02a58a5c028db19ec49 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/unit/Rect.java @@ -0,0 +1,31 @@ +package leigh.astro.unit; + +/** + * This class represents a rectangle defined by a pair of {@link SphericalCoordinate}s. + * + * @author C. Alexander Leigh + */ +public class Rect { + private final SphericalCoordinate a; + private final SphericalCoordinate b; + + public Rect(SphericalCoordinate a, SphericalCoordinate b) { + this.a = a; + this.b = b; + } + + /** + * Evaluate whether or not the given coordinate is within the coordinates bounded by this object. + */ + public boolean isWithin(SphericalCoordinate x) { + return x.getX() >= a.getX() && x.getY() >= a.getY() && x.getX() < b.getX() && x.getY() < b.getY(); + } + + @Override + public String toString() { + return "Rect{" + + "a=" + a + + ", b=" + b + + '}'; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/unit/SphericalCoordinate.java b/leigh-astro/src/main/java/leigh/astro/unit/SphericalCoordinate.java new file mode 100644 index 0000000000000000000000000000000000000000..9cc1c090d4f2f4778f02ca0725e22abd2baa759f --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/unit/SphericalCoordinate.java @@ -0,0 +1,104 @@ +package leigh.astro.unit; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.NumberUtil; + +import java.util.Objects; + +/** + * Holds a spherical coordinate, with both units internally represented as degrees. + * + * @author C. Alexander Leigh + */ +public class SphericalCoordinate { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SphericalCoordinate.class); + + private final double x; + private final double y; + + public SphericalCoordinate(double x, double dec) { + this.x = x; + this.y = dec; + } + + /** + * Return X in degrees. + */ + public double getX() { + return x; + } + + /** + * Return Y in degrees. + */ + public double getY() { + return y; + } + + /** + * Return X in radians. + */ + public double getXrad() { + return Math.toRadians(x); + } + + /** + * Return Y in radians. + */ + public double getYrad() { + return Math.toRadians(y); + } + + /** + * Return X in hours. + */ + public double getXhours() { + return x / 15; + } + + + public HoursMinutesSeconds getHms() { + return new HoursMinutesSeconds(x); + } + + /** + * This method is deprecated on account of being stupid. + */ + @Deprecated + public boolean isNear(SphericalCoordinate c) { + logger.debug("comparing: {} {}", this, c); + double slop = 1; + + double xt = NumberUtil.precision(x, 1); + double yt = NumberUtil.precision(y, 1); + double cx = NumberUtil.precision(c.getX(), 1); + double cy = NumberUtil.precision(c.getY(), 1); + + logger.debug("Comparing: {} {} {} {}", xt, cx, yt, cy); + if (cx < xt + slop && cx > xt - slop && cy < yt + slop && cy > yt - slop) return true; + return false; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SphericalCoordinate that = (SphericalCoordinate) o; + return Double.compare(that.x, x) == 0 && + Double.compare(that.y, y) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } + + @Override + public String toString() { + return "SphericalCoordinate{" + + "x=" + x + + ", y=" + y + + '}'; + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/wcstools/Sky2XYExecutor.java b/leigh-astro/src/main/java/leigh/astro/wcstools/Sky2XYExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..ceeaefa870ea380b45968b0d13ae9e45a62c350e --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/wcstools/Sky2XYExecutor.java @@ -0,0 +1,17 @@ +package leigh.astro.wcstools; + +import leigh.mecha.exec.BatchExecutor; + +/** + * Wrapper for the wcstools sky2xy application. + * + * @author C. Alexander Leigh + */ +public class Sky2XYExecutor extends BatchExecutor { + /** + * Create a new batch executor. + */ + public Sky2XYExecutor(String fitsFile, String coordFile) { + super("/opt/wcstools/bin/sky2xy", new String[]{fitsFile, "@" + coordFile}); + } +} diff --git a/leigh-astro/src/main/java/leigh/astro/wcstools/Sky2XYTask.java b/leigh-astro/src/main/java/leigh/astro/wcstools/Sky2XYTask.java new file mode 100644 index 0000000000000000000000000000000000000000..a949771572198252905a76af14b4a7e30bd142c7 --- /dev/null +++ b/leigh-astro/src/main/java/leigh/astro/wcstools/Sky2XYTask.java @@ -0,0 +1,87 @@ +package leigh.astro.wcstools; + +import leigh.astro.catalog.CatalogObject; +import leigh.astro.unit.DegreesMinutesSeconds; +import leigh.astro.unit.HoursMinutesSeconds; +import leigh.astro.unit.SphericalCoordinate; +import leigh.mecha.exec.BatchTask; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +/** + * This implementation makes a basic assumption that the order of output lines from sky2xy is the same as the order + * of input lines in the tmp file. If sky2xy were to output in a different order, the results would be undefined. + * + * @author C. Alexander Leigh + */ +public class Sky2XYTask implements BatchTask { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Sky2XYTask.class); + private final File tmpFile = File.createTempFile("leigh-astro", "txt"); + private final List objs; + private final ArrayList matched = new ArrayList<>(); + + public Sky2XYTask(List objs) throws IOException { + this.objs = objs; + + // Write the coordinates to our sky file + BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(tmpFile)); + for (CatalogObject obj : objs) { + SphericalCoordinate coord = obj.getJ2000Coordinate(); + HoursMinutesSeconds hms = new HoursMinutesSeconds(coord.getX()); + DegreesMinutesSeconds dms = new DegreesMinutesSeconds(coord.getY()); + String s = hms.asString() + " " + dms.asString() + "\n"; + fos.write(s.getBytes()); + } + fos.close(); + } + + /** + * Return the temporary file containing the sky coordinates. + */ + public File getTmpFile() { + return tmpFile; + } + + @Override + public void writeScript(OutputStream os) throws IOException { + // Intentionally Blank + } + + @Override + public void finished(String result) throws IOException { + /* + * 20.0:12.0:6.0 38.0:21.0:17.0 J2000 -> 2310.276 1720.798 + * 20.0:59.0:17.0 44.0:31.0:43.0 J2000 -> 25917.614 20265.029 (off image) + * 3.0:9.0:39.0 7.0:50.0:46.0 J2000 -> 0.000 0.000 (offscale) + */ + + String[] lines = result.split("\n"); + logger.debug("Solution. [got: {}] [expected: {}]", lines.length, objs.size()); + + if (lines.length != objs.size()) { + logger.error("Bad solution: {}", result); + return; + } + + int i = 0; + + for (String line : lines) { + String[] parts = line.split(" "); + // Anything other than 6 is off-scale or off-image + if (parts.length == 6) { + logger.debug("match: {}", objs.get(i)); + matched.add(objs.get(i)); + } + i++; + } + + } + + public ArrayList getMatched() { + return matched; + } +} diff --git a/leigh-astro/src/main/resources/leigh/astro/catalog/ngc.csv b/leigh-astro/src/main/resources/leigh/astro/catalog/ngc.csv new file mode 100644 index 0000000000000000000000000000000000000000..af4f775598d9803a3e44c4848d9c0cd210a39e02 --- /dev/null +++ b/leigh-astro/src/main/resources/leigh/astro/catalog/ngc.csv @@ -0,0 +1,13945 @@ +Name;Type;RA;Dec;Const;MajAx;MinAx;PosAng;B-Mag;V-Mag;J-Mag;H-Mag;K-Mag;SurfBr;Hubble;Cstar U-Mag;Cstar B-Mag;Cstar V-Mag;M;NGC;IC;Cstar Names;Identifiers;Common names;NED notes;OpenNGC notes +IC0001;**;00:08:27.05;+27:43:03.6;Peg;;;;;;;;;;;;;;;;;;;;; +IC0002;G;00:11:00.88;-12:49:22.3;Cet;0.98;0.32;142;15.46;;12.26;11.48;11.17;23.45;Sb;;;;;;;;2MASX J00110081-1249206,IRAS 00084-1306,MCG -02-01-031,PGC 000778;;;B-Mag taken from LEDA. +IC0003;G;00:12:06.09;-00:24:54.8;Psc;0.93;0.67;53;15.10;;11.53;10.79;10.54;23.50;E;;;;;;;;2MASX J00120604-0024543,MCG +00-01-038,PGC 000836,SDSS J001206.08-002454.7,SDSS J001206.09-002454.7,SDSS J001206.09-002454.8,SDSS J001206.10-002454.8;;; +IC0004;G;00:13:26.94;+17:29:11.2;Peg;1.17;0.84;12;14.20;;11.51;10.65;10.50;23.01;Sc;;;;;;;;2MASX J00132695+1729111,IRAS 00108+1712,MCG +03-01-029,PGC 000897,UGC 00123;;; +IC0005;G;00:17:34.93;-09:32:36.1;Cet;0.99;0.66;9;14.57;;11.50;10.85;10.50;23.40;E;;;;;;;;2MASX J00173495-0932364,MCG -02-01-047,PGC 001145,SDSS J001734.93-093236.0,SDSS J001734.93-093236.1;;;B-Mag taken from LEDA. +IC0006;G;00:18:55.04;-03:16:33.9;Psc;1.23;1.08;146;14.50;;11.03;10.32;10.08;23.89;E;;;;;;;;2MASX J00185505-0316339,MCG -01-01-075,PGC 001228;;; +IC0007;G;00:18:53.16;+10:35:40.9;Psc;0.90;0.63;174;14.70;;11.33;10.57;10.26;23.22;S0;;;;;;;;2MASX J00185316+1035410,PGC 001216;;; +IC0008;G;00:19:02.72;-03:13:19.5;Psc;0.82;0.34;129;15.16;;12.70;12.08;12.08;23.40;E?;;;;;;;;2MASX J00190272-0313196,MCG -01-01-076,PGC 001234;;;B-Mag taken from LEDA. +IC0009;G;00:19:43.98;-14:07:18.8;Cet;0.59;0.46;122;15.41;;12.38;11.71;11.28;22.88;Sa;;;;;;;;2MASX J00194400-1407184,MCG -02-02-001,PGC 001271;;;B-Mag taken from LEDA. +IC0010;G;00:20:17.34;+59:18:13.6;Cas;6.76;6.03;129;13.60;9.50;7.23;6.34;6.01;24.53;IB;;;;;;;;2MASX J00201733+5918136,IRAS 00175+5902,IRAS 00177+5900,MCG +10-01-001,PGC 001305,UGC 00192;;The 2MASX position refers to the center of the IR isophotes.; +IC0011;Dup;00:52:59.35;+56:37:18.8;Cas;;;;;;;;;;;;;;;0281;;;;;; +IC0012;G;00:20:15.05;-02:39:11.2;Psc;0.96;0.32;20;15.08;;12.02;11.30;10.92;22.93;Sbc;;;;;;;;2MASX J00201505-0239112,IRAS 00177-0255,MCG -01-02-003,PGC 001299;;;B-Mag taken from LEDA. +IC0013;G;00:20:20.09;+07:42:01.8;Psc;1.29;0.53;162;15.00;;12.57;11.78;11.72;23.53;Sbc;;;;;;;;2MASX J00202007+0742016,MCG +01-02-003,PGC 001301,SDSS J002020.09+074202.2,UGC 00195;;; +IC0014;**;00:22:31.29;+10:29:24.9;Psc;;;;;;;;;;;;;;;;;;;;; +IC0015;G;00:27:57.59;-00:03:40.6;Cet;0.44;0.38;91;15.91;;12.98;12.33;12.03;22.85;SBb;;;;;;;;2MASX J00275754-0003404,IRAS 00253-0020,LEDA 165298,SDSS J002757.58-000340.6,SDSS J002757.59-000340.5,SDSS J002757.59-000340.6;;; +IC0016;G;00:28:07.65;-13:05:38.1;Cet;0.58;0.32;62;15.15;;12.75;12.05;11.71;23.00;S0-a;;;;;;;;2MASX J00280763-1305379,IRAS 00255-1322,MCG -02-02-017,PGC 001730;;;B-Mag taken from LEDA. +IC0017;G;00:28:29.78;+02:38:55.0;Psc;0.67;0.54;102;14.80;;11.68;10.96;10.78;23.04;E?;;;;;;;;2MASX J00282976+0238549,MCG +00-02-044,PGC 001753;;; +IC0018;G;00:28:34.96;-11:35:12.1;Cet;1.08;0.41;29;15.03;;12.14;11.39;11.04;23.62;Sb;;;;;;;;2MASX J00283495-1135123,MCG -02-02-023,PGC 001759;;;B-Mag taken from LEDA. +IC0019;G;00:28:39.48;-11:38:26.8;Cet;0.79;0.67;30;15.00;;11.65;10.96;10.74;23.52;E;;;;;;;;2MASX J00283951-1138262,MCG -02-02-024,PGC 001762;;; +IC0020;G;00:28:39.68;-13:00:37.1;Cet;0.91;0.77;18;14.88;;11.40;10.65;10.51;23.41;S0;;;;;;;;2MASX J00283968-1300366,MCG -02-02-021,PGC 001755;;;B-Mag taken from LEDA. +IC0021;G;00:29:10.43;-00:09:49.6;Cet;0.49;0.45;6;14.50;;13.05;12.42;12.11;22.96;SBb;;;;;;;;2MASX J00291043-0009490,MCG +00-02-053,PGC 001785,SDSS J002910.42-000949.5,SDSS J002910.42-000949.6;;; +IC0022;G;00:29:33.17;-09:04:50.7;Cet;0.81;0.44;45;14.73;;11.63;10.98;10.73;23.07;S0;;;;;;;;2MASX J00293318-0904510,MCG -02-02-027,PGC 001815,SDSS J002933.17-090450.6,SDSS J002933.17-090450.7;;;B-Mag taken from LEDA. +IC0023;G;00:30:50.80;-12:43:12.9;Cet;0.85;0.77;20;15.06;;11.75;11.23;10.95;23.52;E;;;;;;;;2MASX J00305083-1243120,MCG -02-02-032,PGC 001872;;;B-Mag taken from LEDA. +IC0024;**;00:31:16.63;+30:50:21.5;And;;;;;;;;;;;;;;;;;;;;; +IC0025;G;00:31:12.09;-00:24:26.5;Cet;0.86;0.44;34;16.00;;12.15;11.43;11.17;23.68;S0-a;;;;;;;;2MASX J00311206-0024262,IRAS 00286-0040,MCG +00-02-064,PGC 001905,SDSS J003112.09-002426.4,SDSS J003112.09-002426.5;;; +IC0026;Dup;00:31:45.94;-13:20:14.9;Cet;;;;;;;;;;;;;;;0135;;;;;; +IC0027;G;00:33:06.24;-13:22:17.4;Cet;0.58;0.34;148;15.60;;13.49;12.84;12.39;23.37;;;;;;;;;2MASX J00330625-1322173,LEDA 143572;;; +IC0028;G;00:33:08.72;-13:27:22.6;Cet;0.30;0.22;85;12.00;;13.14;12.53;12.27;;E;;;;;;;;2MASX J00330879-1327223,IRAS 00306-1343,LEDA 169992;;; +IC0029;G;00:34:10.80;-02:10:39.5;Cet;0.66;0.49;160;15.60;;11.76;11.09;10.69;23.75;E;;;;;;;;2MASX J00341079-0210394,MCG +00-02-072,PGC 002042;;; +IC0030;G;00:34:14.72;-02:05:04.5;Cet;0.69;0.39;23;15.17;;12.08;11.28;11.00;23.71;S0-a;;;;;;;;2MASX J00341472-0205044,MCG +00-02-074,PGC 002050;;;B-Mag taken from LEDA. +IC0031;G;00:34:24.63;+12:16:05.4;Psc;1.16;0.23;90;15.50;;11.44;10.55;10.24;23.86;Sab;;;;;;;;2MASX J00342461+1216066,MCG +02-02-021,PGC 002062,UGC 00340;;; +IC0032;G;00:35:01.69;-02:08:30.1;Cet;0.62;0.39;1;16.15;;12.22;11.52;11.16;23.62;S0-a;;;;;;;;2MASX J00350169-0208294,MCG +00-02-080,PGC 002096;;;B-Mag taken from LEDA. +IC0033;G;00:35:05.16;-02:08:15.7;Cet;0.78;0.58;123;15.29;;12.12;11.46;11.19;23.60;;;;;;;;;2MASX J00350516-0208154,MCG +00-02-082,PGC 002101;;;B-Mag taken from LEDA. +IC0034;G;00:35:36.42;+09:07:27.3;Psc;2.81;1.05;156;13.90;;10.36;9.65;9.42;24.32;SBa;;;;;;;;2MASX J00353642+0907272,MCG +01-02-032,PGC 002134,UGC 00351;;; +IC0035;G;00:37:39.88;+10:21:28.7;Psc;0.90;0.74;18;15.00;;11.99;11.23;10.93;23.36;Sc;;;;;;;;2MASX J00373987+1021287,MCG +02-02-024,PGC 002246,UGC 00374;;; +IC0036;G;00:37:49.65;-15:26:28.6;Cet;0.31;0.30;60;15.62;;12.72;12.07;11.67;;;;;;;;;;2MASX J00374962-1526288,IRAS 00353-1542,PGC 138202;;; +IC0037;G;00:38:34.18;-15:21:31.3;Cet;0.67;0.38;158;16.23;;13.19;12.37;11.97;23.37;SBbc;;;;;;;;2MASX J00383418-1521312,MCG -03-02-029,PGC 002299;;The APM image includes a superposed star.;B-Mag taken from LEDA. +IC0038;G;00:38:38.76;-15:25:11.4;Cet;0.77;0.57;65;15.02;;12.41;11.72;11.39;22.93;Sc;;;;;;;;2MASX J00383875-1525112,IRAS 00361-1541,MCG -03-02-030,PGC 002311;;;B-Mag taken from LEDA. +IC0039;Dup;00:39:08.40;-14:10:22.2;Cet;;;;;;;;;;;;;;;0178;;;;;; +IC0040;G;00:39:21.40;+02:27:22.4;Cet;1.05;0.43;14;15.10;;11.79;11.08;10.76;23.27;Sb;;;;;;;;2MASX J00392139+0227225,MCG +00-02-106,PGC 002376,UGC 00413;;; +IC0041;G;00:39:40.37;-14:10:27.6;Cet;0.71;0.45;162;15.20;;13.52;12.87;12.63;23.20;;;;;;;;;2MASX J00394036-1410274,LEDA 138206;;;B-Mag taken from LEDA. +IC0042;G;00:41:05.84;-15:25:41.1;Cet;0.76;0.53;56;15.38;;12.81;11.98;11.74;23.25;SABc;;;;;;;;2MASX J00410585-1525410,MCG -03-02-036,PGC 002463;;;B-Mag taken from LEDA. +IC0043;G;00:42:22.06;+29:38:29.9;And;1.26;1.15;87;14.40;;11.23;10.56;10.24;23.13;SABc;;;;;;;;2MASX J00422206+2938298,IRAS 00396+2922,MCG +05-02-040,PGC 002536,SDSS J004222.06+293830.0,UGC 00448;;; +IC0044;Dup;00:42:15.88;+00:50:43.8;Cet;;;;;;;;;;;;;;;0223;;;;;; +IC0045;Other;00:42:36.34;+29:39:18.9;And;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC0046;G;00:42:57.97;+27:15:12.5;And;0.80;0.61;82;14.70;;12.30;11.69;11.45;22.83;E-S0;;;;;;;;2MASX J00425798+2715134,IRAS 00402+2658,PGC 002575;;; +IC0047;G;00:42:55.01;-13:44:26.6;Cet;0.41;0.24;100;16.09;;12.72;12.02;11.75;;;;;;;;;;2MASX J00425503-1344264,PGC 3093693;;;B-Mag taken from LEDA. +IC0048;G;00:43:34.47;-08:11:11.4;Cet;1.12;0.92;172;14.11;;11.03;10.34;10.03;23.01;S0;;;;;;1577;;2MASX J00433448-0811114,IRAS 00410-0827,MCG -01-03-001,MCG -02-03-001,PGC 002603;;; +IC0049;G;00:43:56.13;+01:51:01.0;Cet;1.28;1.04;77;14.50;;12.83;12.62;12.06;23.39;SABc;;;;;;;;2MASX J00435616+0151011,MCG +00-03-003,PGC 002617,SDSS J004356.15+015101.3,UGC 00468;;; +IC0050;G;00:46:05.71;-09:30:10.8;Cet;1.02;0.87;169;14.74;;11.45;10.71;10.49;23.71;E;;;;;;;;2MASX J00460569-0930109,MCG -02-03-010,PGC 002698,SDSS J004605.70-093010.7,SDSS J004605.70-093010.8,SDSS J004605.71-093010.8;;;B-Mag taken from LEDA. +IC0051;G;00:46:24.22;-13:26:32.5;Cet;1.70;1.11;55;13.41;;11.26;10.61;10.25;23.63;S0;;;;;;;;2MASX J00462421-1326326,IRAS 00438-1342,MCG -02-03-011,PGC 002710;;; +IC0052;G;00:48:23.78;+04:05:30.7;Psc;0.95;0.41;96;15.40;;13.18;12.74;12.54;23.41;Sb;;;;;;;;2MASX J00482376+0405307,MCG +01-03-005,PGC 002834,UGC 00494;;Contains the set of three apparent emission centers UM 069.; +IC0053;G;00:50:40.77;+10:36:01.0;Psc;0.87;0.62;94;15.50;;11.34;10.64;10.30;23.75;E-S0;;;;;;;;2MASX J00504075+1036005,MCG +02-03-005,PGC 002951,UGC 00516;;; +IC0054;**;00:50:46.85;-02:17:16.0;Cet;;;;;;;;;;;;;;;;;;;;; +IC0055;G;00:51:42.39;+07:43:06.7;Psc;0.55;0.28;175;14.50;;11.26;10.51;10.26;22.14;Sa;;;;;;;;2MASX J00514237+0743071,MCG +01-03-006,PGC 003025;;; +IC0056;G;00:51:29.94;-12:50:39.5;Cet;0.82;0.74;116;16.50;;13.14;12.60;12.60;23.23;SABc;;;;;;;;2MASX J00512994-1250396,MCG -02-03-030,PGC 003014;;; +IC0057;G;00:54:48.50;+11:50:28.3;Psc;1.03;0.96;10;15.70;;12.32;11.47;11.40;24.30;S0;;;;;;;;2MASX J00544855+1150280,MCG +02-03-010,PGC 003229,UGC 00559;;; +IC0058;G;00:55:02.44;-13:40:41.1;Cet;0.84;0.50;105;15.51;;12.03;11.25;10.97;23.74;E-S0;;;;;;;;2MASX J00550242-1340415,MCG -02-03-041,PGC 003257;;;B-Mag taken from LEDA. +IC0059;RfN;00:57:28.61;+61:08:37.2;Cas;10.00;5.00;;;;;;;;;;;;;;;;LBN 620;;; +IC0060;G;00:56:04.23;-13:21:28.5;Cet;1.04;0.76;48;15.75;;11.61;10.88;10.52;24.14;Sc;;;;;;;;2MASX J00560423-1321292,MCG -02-03-049,PGC 003324;;;B-Mag taken from LEDA. +IC0061;G;00:57:07.20;+07:30:25.5;Psc;1.34;1.29;175;15.30;;11.65;10.97;10.54;24.61;S0;;;;;;;;2MASX J00570722+0730255,MCG +01-03-009,PGC 003408,UGC 00589;;; +IC0062;G;00:58:43.94;+11:48:28.8;Psc;0.76;0.46;25;15.00;;11.79;11.08;10.77;22.85;Sbc;;;;;;;;2MASX J00584393+1148286,MCG +02-03-021,PGC 003507,UGC 00606;;; +IC0063;HII;00:59:28.84;+60:54:42.1;Cas;10.00;3.00;;13.33;;;;;;;;;;;;;;LBN 622;;; +IC0064;G;00:59:24.42;+27:03:32.6;Psc;1.03;0.65;148;15.60;;11.80;11.03;10.77;23.88;S0;;;;;;;;2MASX J00592444+2703319,MCG +04-03-031,PGC 003550,UGC 00613;;; +IC0065;G;01:00:55.42;+47:40:55.1;And;2.56;0.73;154;13.80;;10.50;9.78;9.51;23.45;Sbc;;;;;;;;2MASX J01005543+4740551,IRAS 00580+4724,MCG +08-03-005,PGC 003635,UGC 00625;;; +IC0066;G;01:00:32.50;+30:47:50.0;Psc;1.23;0.42;124;15.00;;11.73;11.12;10.74;23.66;Sa;;;;;;;;2MASX J01003251+3047500,MCG +05-03-033,PGC 003606,UGC 00623;;; +IC0069;G;01:01:23.66;+31:02:27.0;Psc;0.76;0.41;71;14.70;;11.89;11.02;10.86;23.04;SABb;;;;;;;;2MASX J01012367+3102269,MCG +05-03-041,PGC 003666;;; +IC0070;G;01:01:03.95;+00:03:02.7;Cet;0.42;0.24;147;16.77;;13.37;12.65;12.29;23.65;S0-a;;;;;;;;LEDA 173286;;;B-Mag taken from LEDA. +IC0071;*;01:01:19.26;-06:46:01.8;Cet;;;;;;;;;;;;;;;;;;;;ID as IC 0071 is not certain, but there is no other reasonable candidate.; +IC0072;*;01:01:34.71;-06:46:40.6;Cet;;;;;;;;;;;;;;;;;;;;; +IC0073;G;01:04:52.95;+04:46:01.7;Psc;0.62;0.48;149;15.40;;13.30;12.43;12.50;23.23;;;;;;;;;2MASX J01045304+0446027,PGC 003842;;; +IC0074;G;01:05:55.95;+04:05:24.9;Psc;0.57;0.46;5;15.70;;12.32;11.73;11.50;23.10;E-S0;;;;;;;;2MASX J01055595+0405246,PGC 003897;;; +IC0075;G;01:07:11.61;+10:50:12.8;Psc;0.66;0.51;31;15.00;;12.38;11.67;11.24;22.80;Sb;;;;;;;;2MASX J01071159+1050125,MCG +02-03-035,PGC 003959,UGC 00684;;; +IC0076;G;01:08:11.71;-04:33:16.2;Cet;0.81;0.36;116;15.50;;11.98;11.21;10.87;23.52;S0-a;;;;;;;;2MASX J01081173-0433164,MCG -01-04-001,PGC 004035;;; +IC0077;G;01:08:43.75;-15:25:15.3;Cet;0.52;0.44;90;16.23;;12.60;11.91;11.75;23.56;S0;;;;;;;;2MASX J01084373-1525148,LEDA 073653;;;B-Mag taken from LEDA. +IC0078;G;01:08:47.70;-15:50:42.3;Cet;1.75;0.75;126;15.24;;11.08;10.40;10.08;24.55;Sa;;;;;;;;2MASX J01084768-1550427,MCG -03-04-010,PGC 004079;;The position in 1999ApJS..120..147M is 9 arcsec north of the nucleus.;B-Mag taken from LEDA. +IC0079;G;01:08:49.71;-15:56:54.9;Cet;1.24;0.91;158;14.93;;11.25;10.54;10.29;24.12;E-S0;;;;;;;;2MASX J01084970-1556547,MCG -03-04-011,PGC 004082;;;B-Mag taken from LEDA. +IC0080;GPair;01:08:50.90;-15:24:27.0;Cet;1.20;;;;;;;;;;;;;;;;;;;Consists of the galaxies MCG -03-04-008 and -009.;Diameter of the group inferred by the author. +IC0080 NED01;G;01:08:50.70;-15:24:32.2;Cet;1.50;1.03;83;14.75;;;;;24.48;E;;;;;;;;MCG -03-04-009,PGC 004072;;; +IC0080 NED02;G;01:08:51.13;-15:24:22.7;Cet;1.50;1.06;50;14.60;;11.16;10.42;10.27;23.66;E;;;;;;;;2MASX J01085113-1524227,MCG -03-04-008,PGC 004071;;; +IC0081;G;01:09:22.26;-01:41:45.1;Cet;1.17;0.91;145;14.80;;11.40;10.71;10.44;23.57;E?;;;;;;;;2MASX J01092224-0141453,MCG +00-04-015,PGC 004127;;The APM image includes a neighboring star.; +IC0082;G;01:09:05.79;-16:00:01.1;Cet;0.91;0.83;93;14.85;;11.75;11.09;10.70;23.32;S0;;;;;;;;2MASX J01090578-1600011,MCG -03-04-013,PGC 004103;;;B-Mag taken from LEDA. +IC0083;G;01:10:29.78;+01:41:21.7;Cet;0.68;0.45;114;15.20;;12.30;11.57;11.30;23.20;;;;;;;;;2MASX J01102978+0141218,MCG +00-04-021,PGC 004182;;; +IC0084;G;01:11:25.60;+01:38:24.7;Cet;0.67;0.43;12;15.00;;11.89;11.13;11.07;23.13;S0-a;;;;;;;;2MASX J01112564+0138250,MCG +00-04-029,PGC 004265;;; +IC0085;*;01:11:49.55;-00:27:08.9;Cet;;;;;;;;;;;;;;;;;;;;; +IC0086;G;01:13:28.52;-16:14:30.0;Cet;0.72;0.34;142;15.34;;12.33;11.55;11.26;23.29;S0-a;;;;;;;;2MASX J01132852-1614301,IRAS 01110-1630,LEDA 165316;;; +IC0087;G;01:14:15.79;+00:45:55.2;Cet;0.69;0.63;66;15.40;;12.79;12.26;11.76;23.21;Sbc;;;;;;;;2MASX J01141582+0045556,MCG +00-04-048,PGC 004454,SDSS J011415.78+004555.1,SDSS J011415.79+004555.1,SDSS J011415.79+004555.2,SDSS J011415.80+004555.2;;; +IC0088;G;01:14:31.30;+00:47:30.3;Cet;0.53;0.44;129;18.81;18.07;13.16;12.62;12.09;23.15;Sbc;;;;;;;;2MASX J01143129+0047306,LEDA 1175571,SDSS J011431.30+004730.2,SDSS J011431.30+004730.3,SDSS J011431.32+004730.2;;; +IC0089;Dup;01:16:03.61;+04:17:38.8;Psc;;;;;;;;;;;;;;;0446;;;;;; +IC0090;G;01:16:30.35;-07:58:37.7;Cet;1.25;1.12;146;14.52;;11.02;10.36;10.12;24.14;E;;;;;;;;2MASX J01163034-0758369,MCG -01-04-023,PGC 004606;;; +IC0091;G;01:18:39.43;+02:33:13.2;Cet;0.71;0.26;64;16.48;;12.91;12.16;11.82;24.30;;;;;;;;;2MASX J01183943+0233132,LEDA 1230543;;;B-Mag taken from LEDA. +IC0092;Dup;01:19:48.50;+32:46:04.0;Psc;;;;;;;;;;;;;;;0468;;;;;; +IC0093;G;01:19:02.34;-17:03:37.4;Cet;1.21;0.56;171;14.30;13.57;11.79;11.08;10.85;22.91;Sb;;;;;;1671;;2MASX J01190234-1703374,IRAS 01165-1719,MCG -03-04-043,PGC 004724;;; +IC0094;*;01:20:05.49;+32:43:02.4;Psc;;;;;;;;;;;;;;;;;;;;; +IC0095;G;01:19:17.88;-12:34:26.9;Cet;0.61;0.50;54;15.95;;12.64;11.76;11.54;23.72;;;;;;;;;2MASX J01191787-1234264,LEDA 950887;;; +IC0096;G;01:20:33.22;+29:37:02.1;Psc;0.78;0.30;44;14.70;;12.93;12.56;12.01;22.48;Sbc;;;;;;;;MCG +05-04-023,PGC 004840;;; +IC0097;Dup;01:20:02.00;+14:51:39.8;Psc;;;;;;;;;;;;;;;0475;;;;;; +IC0098;G;01:20:54.88;-12:36:17.0;Cet;0.68;0.61;55;16.30;;12.14;11.39;11.14;23.87;;;;;;;;;2MASX J01205488-1236162,MCG -02-04-027,PGC 004869;;;B-Mag taken from LEDA. +IC0099;G;01:22:27.36;-12:57:09.2;Cet;0.58;0.52;54;15.82;;12.64;12.16;11.59;23.10;Sc;;;;;;;;2MASX J01222735-1257091,MCG -02-04-034,PGC 004997;;;B-Mag taken from LEDA. +IC0100;G;01:22:53.96;-04:38:34.9;Cet;1.04;0.77;88;14.48;;11.26;10.56;10.24;23.36;E-S0;;;;;;;;2MASX J01225395-0438353,MCG -01-04-030,PGC 005029;;;B-Mag taken from LEDA. +IC0101;G;01:24:08.55;+09:55:49.9;Psc;1.24;0.59;124;15.10;;12.48;11.78;11.88;23.76;Sb;;;;;;;;2MASX J01240854+0955500,MCG +02-04-036,PGC 005147,UGC 00949;;; +IC0102;G;01:24:26.33;+09:53:11.6;Psc;0.75;0.37;111;15.60;;12.65;11.95;11.68;23.59;S0-a;;;;;;;;2MASX J01242632+0953114,PGC 005172,UGC 00954;;; +IC0103;G;01:24:36.44;+02:02:39.3;Cet;0.95;0.67;128;15.30;;11.63;10.94;10.60;23.94;E-S0;;;;;;;;2MASX J01243643+0202392,MCG +00-04-117,PGC 005192,UGC 00963;;; +IC0104;**;01:24:33.60;-01:27:24.2;Cet;;;;8.79;;;;;;;;;;;;;;;;; +IC0105;G;01:24:46.25;+02:04:31.0;Cet;0.58;0.29;47;11.50;;12.66;11.90;11.63;23.28;S0-a;;;;;;;;2MASX J01244623+0204312,PGC 005206;;; +IC0106;Dup;01:24:41.65;-01:35:13.5;Cet;;;;;;;;;;;;;;;0530;;;;;; +IC0107;G;01:25:24.66;+14:51:52.6;Psc;1.62;1.31;6;13.78;;10.79;10.05;9.81;24.13;E;;;;;;1700;;2MASX J01252468+1451528,MCG +02-04-041,PGC 005271,SDSS J012524.65+145152.6,UGC 00986;;; +IC0108;G;01:24:38.96;-12:38:08.1;Cet;1.30;0.36;4;15.48;;12.27;11.52;11.14;23.66;Sc;;;;;;;;2MASX J01243897-1238081,MCG -02-04-041,PGC 005205;;;B-Mag taken from LEDA. +IC0109;G;01:25:13.09;+02:03:58.4;Cet;0.76;0.57;70;14.90;;11.91;11.25;10.88;23.06;S0;;;;;;;;2MASX J01251301+0204010,MCG +00-04-128,PGC 005251,UGC 00980;;; +IC0110;Other;01:25:46.60;+33:30:52.9;Psc;;;;;;;;;;;;;;;;;;;;Nominal position. IC 110 may be the stars at 01 23 00, +33 15.7 (B1950).; +IC0111;Other;01:26:00.13;+33:29:49.6;Psc;;;;;;;;;;;;;;;;;;;;Nominal position. IC 111 may be the stars at 01 23 10, +33 14.6 (B1950).; +IC0112;G;01:26:03.02;+11:26:34.7;Psc;0.72;0.37;127;14.20;;12.22;11.56;11.29;21.61;Sd;;;;;;;;2MASX J01260303+1126347,IRAS 01234+1110,MCG +02-04-047,PGC 005328,SDSS J012602.99+112634.6,UGC 01008;;; +IC0113;G;01:26:25.50;+19:11:31.1;Psc;0.35;0.26;160;;;13.06;12.20;11.97;;;;;;;;;;2MASX J01262551+1911308;;; +IC0114;G;01:26:22.58;+09:54:35.8;Psc;1.40;0.56;154;15.70;;11.82;11.11;10.96;24.91;S0;;;;;;;;2MASX J01262257+0954358,MCG +02-04-048,PGC 005343,UGC 01015;;; +IC0115;G;01:26:54.44;+19:12:52.9;Psc;0.76;0.76;80;15.20;;11.69;11.01;10.84;23.46;E;;;;;;;;2MASX J01265442+1912517,MCG +03-04-039,PGC 005395;;; +IC0116;G;01:26:50.57;-04:58:56.2;Cet;0.87;0.56;125;14.50;;12.67;12.03;11.90;22.72;Sbc;;;;;;;;2MASX J01265058-0458560,MCG -01-04-049,PGC 005389;;; +IC0117;*;01:27:25.41;-01:51:36.7;Cet;;;;11.22;10.54;9.35;9.02;8.91;;;;;;;;;;TYC 4682-651-1;;; +IC0118;G;01:27:36.04;-04:59:50.9;Cet;0.72;0.55;31;15.81;;12.19;11.49;11.23;23.90;E;;;;;;;;2MASX J01273603-0459505,MCG -01-04-053,PGC 005446;;;B-Mag taken from LEDA. +IC0119;G;01:27:55.02;-02:02:25.7;Cet;1.19;0.58;77;15.00;;11.60;10.93;10.70;24.04;S0-a;;;;;;;;2MASX J01275502-0202255,MCG +00-04-157,PGC 005465,UGC 01047;;; +IC0120;G;01:28:12.96;-01:54:55.9;Cet;0.92;0.33;138;15.20;;12.03;11.35;11.05;23.73;S0;;;;;;;;2MASX J01281297-0154555,PGC 005484;;; +IC0121;G;01:28:21.78;+02:30:46.9;Cet;1.00;0.62;108;14.30;;11.57;11.00;10.58;22.64;Sbc;;;;;;;;2MASX J01282178+0230469,IRAS 01257+0215,MCG +00-04-159,PGC 005492,SDSS J012821.76+023046.8,UGC 01053;;; +IC0122;G;01:28:13.20;-14:50:20.0;Cet;0.65;0.32;14;15.96;;12.81;12.11;11.82;23.64;S0-a;;;;;;;;2MASX J01281322-1450197,LEDA 919275;;;B-Mag taken from LEDA. +IC0123;G;01:28:51.46;+02:26:47.2;Cet;0.67;0.47;44;16.09;15.21;12.11;11.45;11.14;23.24;E;;;;;;;;2MASX J01285148+0226476,MCG +00-04-161,PGC 005524;;; +IC0124;*;01:29:09.08;-01:56:13.3;Cet;;;;14.40;;;;;;;;;;;;;;;;; +IC0125;G;01:29:18.35;-13:16:47.4;Cet;0.61;0.59;53;16.18;;12.37;11.58;11.49;23.50;;;;;;;;;2MASX J01291837-1316471,MCG -02-04-060,PGC 005560;;;B-Mag taken from LEDA. +IC0126;G;01:29:47.86;-01:59:01.5;Cet;0.89;0.81;30;15.40;;11.89;11.25;10.92;24.03;;;;;;;;;2MASX J01294785-0159015,PGC 005577,SDSS J012947.86-015901.4,UGC 01071;;; +IC0127;G;01:29:47.61;-06:58:48.2;Cet;1.69;0.45;110;9.90;9.20;10.94;10.00;9.79;23.47;Sb;;;;;;;;2MASX J01294759-0658482,MCG -01-04-057,PGC 005581;;; +IC0128;G;01:31:23.87;-12:37:27.8;Cet;0.82;0.61;165;15.35;;13.31;12.73;12.82;23.31;SBc;;;;;;;;2MASX J01312388-1237277,MCG -02-04-063,PGC 005659;;;B-Mag taken from LEDA. +IC0129;G;01:31:31.26;-12:39:15.8;Cet;1.23;0.60;63;14.70;;11.59;10.95;10.64;24.28;S0-a;;;;;;;;2MASX J01313126-1239147,MCG -02-05-001,PGC 005675;;; +IC0130;G;01:31:28.74;-15:35:29.8;Cet;0.75;0.64;27;15.49;;12.26;11.61;11.31;23.52;S0;;;;;;;;2MASX J01312872-1535297,MCG -03-05-001,PGC 005671;;;B-Mag taken from LEDA. +IC0131;HII;01:33:14.58;+30:45:11.7;Tri;0.30;;;12.52;;;;;;;;;;;;;;IRAS 01303+3029;;HII region in Messier 033. The IC object includes the surrounding star cloud.;Dimensions taken from LEDA +IC0132;HII;01:33:15.92;+30:56:44.2;Tri;0.67;0.55;;14.87;14.82;;;;;;;;;;;;;;;;Diameters taken from SIMBAD. +IC0133;HII;01:33:15.18;+30:53:18.2;Tri;0.45;0.45;;18.28;18.45;14.48;13.91;13.51;;;;;;;;;;2MASX J01331516+3053196,IRAS 01304+3037;;HII region in Messier 033. The IC object includes the surrounding star cloud.;Diameters taken from SIMBAD. +IC0134;*;01:33:25.00;+30:54:02.4;Tri;;;;16.82;15.98;14.51;14.09;13.97;;;;;;;;;;2MASS J01332504+3054022;;Foreground Galactic star superposed on Messier 033.; +IC0135;HII;01:34:15.53;+30:37:12.3;Tri;0.40;;;;;;;;;;;;;;;;;;;HII region in Messier 033.; +IC0136;*Ass;01:34:16.04;+30:33:43.4;Tri;;;;11.04;;;;;;;;;;;;;;IRAS 01314+3018;;Stellar association in Messier 033.; +IC0137;*Ass;01:33:38.91;+30:31:21.0;Tri;;;;;;;;;;;;;;;;;;;;Star cloud in Messier 033.; +IC0138;G;01:33:01.98;-00:41:23.4;Cet;1.12;0.74;23;14.90;;11.90;11.18;10.98;23.37;SABc;;;;;;;;2MASX J01330196-0041235,MCG +00-05-003,PGC 005771,SDSS J013301.98-004123.3,SDSS J013301.98-004123.4,UGC 01106;;; +IC0139;*Ass;01:33:59.24;+30:34:02.8;Tri;;;;13.10;;;;;;;;;;;;;;;;Star cloud in Messier 033.; +IC0140;*Ass;01:33:58.17;+30:33:00.5;Tri;;;;;;;;;;;;;;;;;;;;Star cloud in Messier 033.; +IC0141;G;01:32:51.71;-14:48:52.6;Cet;1.23;0.91;5;14.07;;11.87;11.35;10.99;23.33;Sbc;;;;;;;;2MASX J01325169-1448527,IRAS 01304-1504,MCG -03-05-004,PGC 005765;;Star superposed.; +IC0142;HII;01:33:55.53;+30:45:28.1;Tri;0.50;;;11.30;14.20;;;;;;;;;;;;;;;HII region in Messier 033.;Dimensions taken from LEDA +IC0143;HII;01:34:10.93;+30:46:35.1;Tri;0.30;;;11.40;;;;;;;;;;;;;;;;HII region in Messier 033.;Dimensions taken from LEDA +IC0144;G;01:37:40.85;-13:18:52.8;Cet;0.74;0.67;46;15.75;;12.00;11.35;11.00;24.01;E;;;;;;;;2MASX J01374084-1318528,MCG -02-05-028,PGC 006027;;;B-Mag taken from LEDA. +IC0145;G;01:38:38.48;+00:44:29.4;Cet;0.69;0.50;6;15.60;;12.49;11.83;11.52;23.17;Sb;;;;;;;;2MASX J01383845+0044297,MCG +00-05-020,PGC 006084,SDSS J013838.48+004429.4,SDSS J013838.48+004429.5;;; +IC0146;Dup;01:38:39.79;-17:49:52.3;Cet;;;;;;;;;;;;;;;0648;;;;;; +IC0147;G;01:39:59.75;-14:51:45.5;Cet;0.76;0.42;58;15.53;;12.55;11.78;11.45;22.97;Sc;;;;;;;;2MASX J01395976-1451454,IRAS 01375-1506,MCG -03-05-013,PGC 006164;;; +IC0148;G;01:42:26.97;+13:58:37.3;Psc;1.82;0.57;45;13.44;;;;;23.07;I;;;;;;;;MCG +02-05-011,PGC 006292,SDSS J014226.97+135837.2,SDSS J014226.98+135837.1,SDSS J014226.99+135837.1,SDSS J014227.13+135837.6,UGC 01195;;Confused HIPASS source; +IC0149;G;01:42:25.38;-16:18:01.5;Cet;1.27;0.41;82;14.40;;11.52;10.80;10.46;22.82;Sbc;;;;;;;;2MASX J01422536-1618012,IRAS 01400-1633,MCG -03-05-015,PGC 006289;;;B-Mag taken from LEDA. +IC0150;G;01:42:57.52;+04:12:00.6;Psc;0.88;0.50;137;14.90;;12.71;12.33;11.77;22.99;Sb;;;;;;;;2MASX J01425752+0412006,MCG +01-05-026,PGC 006316,UGC 01202;;; +IC0151;Other;01:43:57.47;+13:12:09.4;Psc;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing here."; +IC0152;Other;01:44:07.39;+13:02:09.1;Psc;;;;;;;;;;;;;;;;;;;;"Nominal position; the galaxy CGCG 437-016 may be IC 0152."; +IC0153;Other;01:44:36.21;+12:37:44.2;Psc;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing here."; +IC0154;G;01:45:16.27;+10:38:57.1;Psc;1.19;0.23;66;14.80;;11.23;10.52;10.23;22.86;Sb;;;;;;;;2MASX J01451628+1038581,MCG +02-05-023,PGC 006439,UGC 01229;;; +IC0155;Other;01:47:32.33;+60:36:39.0;Cas;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing here."; +IC0156;G;01:45:29.21;+10:33:09.8;Psc;1.51;1.33;105;15.00;;11.01;10.35;10.07;24.50;Sa;;;;;;;;2MASX J01452923+1033101,MCG +02-05-025,PGC 006448,UGC 01231;;; +IC0157;Other;01:45:42.40;+12:52:24.0;Psc;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing here."; +IC0158;G;01:45:53.52;-06:56:08.5;Cet;0.70;0.53;140;15.66;;12.06;11.45;11.26;23.74;;;;;;;;;2MASX J01455353-0656086,LEDA 144318;;; +IC0159;G;01:46:25.05;-08:38:11.8;Cet;1.35;0.75;28;14.18;;12.32;11.65;11.51;23.12;SBb;;;;;;;;2MASX J01462508-0838126,IRAS 01439-0853,MCG -02-05-042,PGC 006505,SDSS J014625.05-083811.8,SDSS J014625.05-083811.9;;;B-Mag taken from LEDA. +IC0160;G;01:46:29.56;-13:14:51.8;Cet;1.28;0.86;85;14.88;;11.32;10.63;10.32;24.16;E-S0;;;;;;;;2MASX J01462955-1314514,MCG -02-05-044,PGC 006511;;;B-Mag taken from LEDA. +IC0161;G;01:48:43.74;+10:30:28.4;Ari;0.90;0.54;67;14.80;;11.54;10.88;10.59;22.95;S0-a;;;;;;;;2MASX J01484377+1030287,MCG +02-05-036,PGC 006644,UGC 01266;;; +IC0162;G;01:48:53.43;+10:31:17.8;Ari;1.32;1.28;85;14.80;;10.29;9.56;9.29;23.77;S0;;;;;;;;2MASX J01485346+1031177,MCG +02-05-038,PGC 006643,UGC 01267;;; +IC0163;G;01:49:14.99;+20:42:40.7;Ari;1.62;0.73;90;13.80;;11.56;10.94;10.64;23.05;SBd;;;;;;;;2MASX J01491498+2042407,IRAS 01465+2027,MCG +03-05-018,PGC 006675,UGC 01276;;; +IC0164;G;01:49:08.41;-03:54:15.8;Cet;1.58;1.35;167;13.50;;10.63;9.95;9.67;23.90;E;;;;;;;;2MASX J01490840-0354157,MCG -01-05-037,PGC 006666;;; +IC0165;Dup;01:50:14.02;+27:38:44.4;Tri;;;;;;;;;;;;;;;0684;;;;;; +IC0166;OCl;01:52:23.82;+61:51:09.4;Cas;7.50;;;13.00;11.70;;;;;;;;;;;;;MWSC 0146;;; +IC0167;G;01:51:08.56;+21:54:46.1;Ari;1.60;0.94;107;14.00;;12.75;11.78;11.69;22.95;Sc;;;;;;;;2MASX J01510855+2154461,IRAS 01483+2139,MCG +04-05-021,PGC 006833,UGC 01313;;; +IC0168;G;01:50:27.63;-08:31:22.6;Cet;1.12;0.39;104;14.85;;11.35;10.63;10.38;23.46;S0-a;;;;;;;;2MASX J01502761-0831226,MCG -02-05-058,PGC 006763,SDSS J015027.63-083122.5,SDSS J015027.63-083122.6;;;B-Mag taken from LEDA. +IC0169;G;01:50:39.36;-12:40:46.6;Cet;0.74;0.51;76;15.46;;12.03;11.42;11.04;23.77;E-S0;;;;;;;;2MASX J01503934-1240462,LEDA 949241;;; +IC0170;G;01:51:57.52;-08:31:03.4;Cet;0.78;0.60;92;15.34;;12.20;11.57;11.39;23.59;E;;;;;;;;2MASX J01515753-0831039,MCG -02-05-066,PGC 006890,SDSS J015157.51-083103.4,SDSS J015157.52-083103.4;;;B-Mag taken from LEDA. +IC0171;G;01:55:10.21;+35:16:54.8;Tri;2.26;1.90;107;13.80;;9.90;9.01;8.89;24.18;S0-a;;;;;;;;2MASX J01551021+3516550,MCG +06-05-050,PGC 007139,UGC 01388;;; +IC0172;G;01:54:54.23;+00:48:40.4;Cet;0.48;0.37;95;14.60;;12.33;11.62;11.36;22.24;SBbc;;;;;;;;2MASX J01545425+0048399,IRAS 01523+0033,MCG +00-05-049,PGC 007116,SDSS J015454.23+004840.2,SDSS J015454.23+004840.3,SDSS J015454.23+004840.4,SDSS J015454.24+004840.3;;; +IC0173;G;01:55:57.15;+01:17:06.6;Cet;0.92;0.72;90;14.90;;12.17;11.61;11.35;23.35;SBbc;;;;;;;;2MASX J01555713+0117066,MCG +00-06-001,PGC 007217,UGC 01402;;; +IC0174;G;01:56:16.08;+03:45:42.7;Psc;1.49;0.99;97;14.60;;11.36;10.70;10.54;24.10;S0;;;;;;;;2MASX J01561609+0345426,MCG +01-06-008,PGC 007249,UGC 01409;;; +IC0175;G;01:56:18.86;+01:19:56.7;Cet;0.52;0.46;9;13.10;;13.07;12.33;12.03;23.14;;;;;;;;;2MASX J01561887+0119566,PGC 007261;;; +IC0176;G;01:56:53.40;-02:01:08.3;Cet;1.78;0.38;94;14.60;;12.04;11.46;11.08;23.57;Sc;;;;;;;;2MASX J01565340-0201083,MCG +00-06-004,PGC 007306,UGC 01426;;; +IC0177;G;01:57:00.58;-00:05:23.5;Cet;0.51;0.47;11;15.40;;12.91;12.09;11.88;22.79;Sbc;;;;;;;;2MASX J01570057-0005233,PGC 007326,SDSS J015700.57-000523.4,SDSS J015700.58-000523.4,SDSS J015700.58-000523.5;;; +IC0178;G;01:58:54.87;+36:40:28.9;And;0.94;0.79;159;14.00;;11.07;10.40;10.10;22.55;Sab;;;;;;;;2MASX J01585479+3640299,IRAS 01559+3625,MCG +06-05-070,PGC 007488,UGC 01456;;; +IC0179;G;02:00:11.50;+38:01:16.8;And;1.12;0.90;111;13.40;;10.43;9.74;9.47;22.67;E;;;;;;;;2MASX J02001151+3801171,MCG +06-05-075,PGC 007581,UGC 01475;;; +IC0180;G;02:00:00.41;+23:36:15.6;Ari;0.83;0.34;150;15.30;;11.81;11.15;10.85;23.04;Sb;;;;;;;;2MASX J02000040+2336156,MCG +04-05-029,PGC 007558;;; +IC0181;G;02:00:02.33;+23:39:31.1;Ari;0.57;0.49;55;15.70;;12.73;11.97;11.75;23.43;;;;;;;;;2MASX J02000236+2339306,MCG +04-05-030,PGC 007559;;; +IC0182;G;01:59:51.81;+07:24:42.6;Psc;1.06;0.70;36;14.60;;12.07;11.55;11.17;23.26;Sb;;;;;;;;2MASX J01595182+0724424,IRAS 01572+0710,MCG +01-06-026,PGC 007556,UGC 01473;;; +IC0183;G;01:59:34.05;-05:20:49.7;Cet;1.19;0.37;98;14.89;;11.47;10.84;10.63;23.88;S0;;;;;;;;2MASX J01593403-0520495,MCG -01-06-015,PGC 007538;;;B-Mag taken from LEDA. +IC0184;G;01:59:51.23;-06:50:25.4;Cet;1.12;0.59;178;14.92;14.10;11.59;10.92;10.62;23.35;SBa;;;;;;;;2MASX J01595121-0650253,MCG -01-06-021,PGC 007554;;; +IC0185;G;02:00:06.04;-01:31:42.0;Cet;0.79;0.33;82;15.72;;12.39;11.58;11.40;23.46;Sab;;;;;;;;2MASX J02000603-0131420,MCG +00-06-019,PGC 007576;;;B-Mag taken from LEDA. +IC0186;GTrpl;02:00:24.50;-01:33:06.2;Cet;1.10;;;;;;;;;;;;;;;;;;;Contains the GPair MCG +00-06-021.;Diameter of the group inferred by the author. +IC0186A;G;02:00:24.00;-01:33:10.3;Cet;1.21;0.76;33;15.30;;11.74;10.56;10.52;23.56;S0;;;;;;;;2MASX J02002399-0133100,MCG +00-06-020,PGC 007599;;MCG lists both this and MCG +00-06-021 as IC 0186.; +IC0186B;G;02:00:25.45;-01:32:59.3;Cet;0.69;0.47;0;15.50;;;;;23.74;;;;;;;;;MCG +00-06-021,PGC 007600;;Part of the GTrpl IC 0186. MCG lists both this and MCG +00-06-020 as IC 0186.; +IC0186 NED03;G;02:00:25.40;-01:33:03.0;Cet;;;;;;;;;;;;;;;;;;MCG +00-06-021 NED02;;;No data available in LEDA +IC0187;G;02:01:30.76;+26:28:51.5;Ari;2.23;0.73;70;13.90;;11.08;10.36;10.10;23.83;Sa;;;;;;;;2MASX J02013075+2628515,IRAS 01587+2614,MCG +04-05-037,PGC 007683,UGC 01507;;; +IC0188;G;02:01:46.50;+26:32:48.8;Ari;0.54;0.28;46;14.40;;11.94;11.18;10.78;21.27;SABc;;;;;;;;2MASX J02014649+2632491,IRAS 01589+2618,MCG +04-05-038,PGC 007706,UGC 01510;;; +IC0189;G;02:01:52.91;+23:33:05.4;Ari;0.78;0.67;86;13.72;;12.38;11.60;11.26;23.18;SBc;;;;;;;;2MASX J02015290+2333057,IRAS 01590+2318,MCG +04-05-039,PGC 007716;;; +IC0190;G;02:02:07.28;+23:32:59.4;Ari;0.25;0.20;95;15.10;;11.90;11.21;10.91;;E;;;;;;;;2MASX J02020727+2332596,MCG +04-05-040,PGC 007731;;; +IC0191;Dup;02:02:29.33;+18:22:22.8;Ari;;;;;;;;;;;;;;;0794;;;;;; +IC0192;G;02:02:32.39;+16:00:51.0;Ari;0.95;0.67;148;14.80;;11.64;11.11;10.74;23.51;S0;;;;;;;;2MASX J02023238+1600509,MCG +03-06-025,PGC 007768,UGC 01530;;; +IC0193;G;02:02:30.98;+11:05:35.1;Ari;1.36;0.97;154;14.70;;11.11;10.48;10.61;23.58;Sc;;;;;;;;2MASX J02023096+1105352,MCG +02-06-016,PGC 007765,UGC 01529;;; +IC0194;G;02:03:05.22;+02:36:51.3;Psc;1.85;0.33;14;15.40;;11.68;10.86;10.53;24.00;Sb;;;;;;;;2MASX J02030523+0236514,MCG +00-06-026,PGC 007812,UGC 01542;;; +IC0195;G;02:03:44.61;+14:42:33.4;Ari;1.46;0.72;135;14.30;;11.21;10.49;10.28;23.63;S0;;;;;;;;2MASX J02034457+1442334,MCG +02-06-017,PGC 007846,SDSS J020344.59+144233.4,SDSS J020344.60+144233.4,SDSS J020344.61+144233.4,UGC 01555;;; +IC0196;G;02:03:49.80;+14:44:20.9;Ari;2.47;0.67;9;14.20;;10.79;10.06;9.77;24.13;Sab;;;;;;;;2MASX J02034980+1444204,MCG +02-06-018,PGC 007856,SDSS J020349.78+144420.9,SDSS J020349.79+144420.8,SDSS J020349.80+144420.9,UGC 01556;;; +IC0197;G;02:04:04.93;+02:47:12.6;Psc;1.01;0.53;54;14.30;;11.90;11.09;10.85;22.69;Sbc;;;;;;;;2MASX J02040493+0247125,IRAS 02015+0232,MCG +00-06-027,PGC 007875,UGC 01564;;; +IC0198;G;02:06:03.12;+09:17:44.0;Cet;1.01;0.56;51;14.80;;12.15;11.52;11.09;23.21;Sbc;;;;;;;;2MASX J02060312+0917439,MCG +01-06-040,PGC 008011,UGC 01592;;; +IC0199;G;02:06:19.40;+09:13:38.7;Cet;1.28;0.56;24;15.40;;11.98;11.18;10.97;24.07;Sab;;;;;;1778;;2MASX J02061940+0913386,MCG +01-06-041,PGC 008026,UGC 01594;;; +IC0200;G;02:05:26.64;+31:10:31.2;Tri;1.38;1.06;92;14.00;;11.20;10.50;10.10;23.24;Sb;;;;;;;;2MASX J02052662+3110312,IRAS 02025+3056,MCG +05-06-002,PGC 007967,UGC 01577;;; +IC0201;G;02:07:15.29;+09:06:54.2;Cet;0.54;0.50;60;16.77;;13.13;12.56;12.34;23.89;;;;;;;;;2MASX J02071528+0906548,PGC 212916;;;B-Mag taken from LEDA. +IC0202;G;02:07:28.66;+09:10:05.9;Cet;1.35;0.36;131;15.30;;12.24;11.42;11.04;23.81;Sb;;;;;;;;2MASX J02072865+0910059,MCG +01-06-043,PGC 008101,UGC 01610;;; +IC0203;G;02:07:29.65;+09:07:21.5;Cet;0.60;0.51;10;16.90;;13.02;12.16;11.85;24.52;;;;;;;;;2MASX J02072966+0907219,LEDA 212915;;;B-Mag taken from LEDA. +IC0204;G;02:07:27.08;-01:25:48.7;Cet;0.55;0.36;155;15.70;;12.76;12.11;11.69;23.02;Sab;;;;;;;;2MASX J02072707-0125482,PGC 008100;;; +IC0205;G;02:07:27.43;-02:05:28.6;Cet;0.92;0.82;40;14.80;;11.95;11.22;11.03;23.21;Sa;;;;;;;;2MASX J02072743-0205284,MCG +00-06-034,PGC 008098,UGC 01613;;; +IC0206;G;02:09:30.68;-06:58:06.2;Cet;1.22;0.39;130;14.80;;12.43;11.74;11.55;23.42;S0;;;;;;;;2MASX J02093067-0658061,MCG -01-06-053,PGC 008238;;; +IC0207;G;02:09:39.35;-06:55:19.9;Cet;1.81;0.45;98;14.51;;11.26;10.52;10.17;24.43;S0-a;;;;;;;;2MASX J02093935-0655196,IRAS 02071-0709,MCG -01-06-054,PGC 008251;;; +IC0208;G;02:08:27.74;+06:23:41.7;Cet;1.32;1.13;168;14.80;;11.85;11.12;10.68;23.93;Sbc;;;;;;;;2MASX J02082773+0623415,MCG +01-06-044,PGC 008167,SDSS J020827.75+062342.1,UGC 01635;;; +IC0209;G;02:08:58.71;-07:03:32.1;Cet;1.51;1.03;82;13.81;;11.15;10.63;10.27;23.09;SBbc;;;;;;;;2MASX J02085870-0703320,IRAS 02064-0717,MCG -01-06-051,PGC 008200;;HOLM 056B is a star.;B-Mag taken from LEDA. +IC0210;G;02:09:28.28;-09:40:49.2;Cet;2.35;0.65;66;13.70;;10.50;9.74;9.37;23.44;SBbc;;;;;;;;2MASX J02092822-0940481,IRAS 02070-0954,MCG -02-06-032,PGC 008232,SDSS J020928.28-094049.1;;Confused HIPASS source; +IC0211;G;02:11:08.00;+03:51:09.0;Cet;1.66;0.76;56;14.50;;12.44;11.64;11.48;23.29;SABc;;;;;;;;2MASX J02110799+0351089,IRAS 02085+0337,MCG +01-06-053,PGC 008360,SDSS J021107.97+035108.9,UGC 01678;;; +IC0212;G;02:13:38.26;+16:35:38.2;Ari;0.79;0.54;84;15.60;;12.91;12.21;11.78;23.67;Sbc;;;;;;;;IRAS 02108+1621,PGC 008527;;; +IC0213;G;02:14:04.28;+16:27:21.2;Ari;1.43;1.01;148;15.40;;11.27;10.59;10.14;24.46;SABb;;;;;;;;2MASX J02140427+1627212,MCG +03-06-046,PGC 008556,UGC 01719;;; +IC0214;G;02:14:05.59;+05:10:23.7;Cet;0.58;0.45;65;14.40;;12.29;11.42;11.00;22.07;Sbc;;;;;;;;IRAS 02114+0456,MCG +01-06-057,PGC 008562,UGC 01720;;Noted as a pair in UGC and a group of four in MCG.; +IC0215;G;02:14:09.46;-06:48:22.8;Cet;0.84;0.19;78;15.62;;12.05;11.39;11.13;23.01;Sb;;;;;;;;2MASX J02140946-0648228,IRAS 02116-0702,MCG -01-06-076,PGC 008566;;;B-Mag taken from LEDA. +IC0216;G;02:15:55.52;-02:00:54.4;Cet;0.50;0.32;25;15.70;;13.32;12.67;12.43;23.14;S0-a;;;;;;;;2MASX J02155550-0200546,PGC 008650;;; +IC0217;G;02:16:10.44;-11:55:36.2;Cet;2.00;0.45;35;16.52;;11.69;11.08;10.75;23.76;Sc;;;;;;1787;;2MASX J02161043-1155361,IRAS 02137-1209,MCG -02-06-046,PGC 008673;;; +IC0218;G;02:17:07.25;+01:16:56.4;Cet;0.91;0.30;75;15.70;;12.24;11.37;11.38;23.30;Sbc;;;;;;;;2MASX J02170726+0116570,MCG +00-06-061,PGC 008716;;; +IC0219;G;02:18:38.83;-06:54:12.0;Cet;1.56;1.19;177;14.44;;10.98;10.24;9.98;24.27;E;;;;;;;;2MASX J02183884-0654118,MCG -01-06-088,PGC 008813,SDSS J021838.82-065412.0;;;B-Mag taken from LEDA. +IC0220;G;02:19:11.73;-12:46:53.9;Cet;0.67;0.32;34;15.08;;12.06;11.33;10.96;22.94;Sb;;;;;;;;2MASX J02191172-1246536,IRAS 02167-1300,MCG -02-06-057,PGC 008847;;;B-Mag taken from LEDA. +IC0221;G;02:22:40.90;+28:15:25.1;Tri;1.54;1.19;16;13.90;;10.86;10.13;9.89;23.28;Sc;;;;;;;;2MASX J02224090+2815253,IRAS 02197+2801,MCG +05-06-034,PGC 009035,UGC 01835;;; +IC0222;G;02:22:47.85;+11:38:18.0;Ari;0.84;0.65;42;14.50;;11.86;11.09;10.72;23.36;SABa;;;;;;;;2MASX J02224783+1138182,IRAS 02201+1124,MCG +02-07-004,PGC 009036;;; +IC0223;G;02:22:01.10;-20:44:45.3;Cet;1.15;0.59;143;14.04;;15.29;14.89;14.65;22.54;IB;;;;;;;;ESO 545-008,ESO-LV 545-0080,IRAS 02197-2058,MCG -04-06-031,PGC 008998;;; +IC0224;G;02:24:45.14;-12:33:52.1;Cet;0.86;0.59;130;15.00;;12.02;11.38;11.08;23.16;Sab;;;;;;;;2MASX J02244515-1233521,MCG -02-07-005,PGC 009148;;;B-Mag taken from LEDA. +IC0225;G;02:26:28.29;+01:09:37.9;Cet;1.01;0.90;158;14.70;;12.70;12.23;11.97;23.45;E;;;;;;;;2MASX J02262825+0109374,MCG +00-07-013,PGC 009283,SDSS J022628.28+010937.7,SDSS J022628.28+010937.8,SDSS J022628.28+010938.0,SDSS J022628.29+010937.9,UGC 01907;;; +IC0226;G;02:27:45.93;+28:12:31.8;Tri;0.81;0.72;55;16.00;;11.38;10.63;10.21;23.92;E;;;;;;;;2MASX J02274583+2812332,MCG +05-06-046,PGC 009373,UGC 01922;;; +IC0227;G;02:28:03.61;+28:10:31.2;Tri;2.01;1.77;80;15.50;;10.56;9.75;9.49;25.78;E;;;;;;;;2MASX J02280361+2810312,MCG +05-06-048,PGC 009383,UGC 01932;;; +IC0228;Dup;02:26:41.53;-14:30:56.3;Cet;;;;;;;;;;;;;;;0944;;;;;; +IC0229;Other;02:27:22.09;-23:48:46.8;Cet;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0230;G;02:28:47.29;-10:49:52.9;Cet;0.64;0.42;87;15.54;;12.47;11.95;11.70;23.42;S0-a;;;;;;;;2MASX J02284729-1049531,MCG -02-07-016,PGC 009436;;;B-Mag taken from LEDA. +IC0231;G;02:29:56.39;+01:10:44.7;Cet;0.74;0.33;162;15.00;;11.95;11.16;11.00;23.31;S0;;;;;;;;2MASX J02295638+0110441,MCG +00-07-025,PGC 009514,SDSS J022956.38+011044.6,SDSS J022956.39+011044.6,SDSS J022956.39+011044.7,UGC 01978;;; +IC0232;G;02:31:11.62;+01:15:56.3;Cet;1.10;0.67;154;14.20;;11.21;10.55;10.31;23.42;E;;;;;;;;2MASX J02311162+0115565,MCG +00-07-028,PGC 009588,SDSS J023111.62+011556.3,UGC 01994;;; +IC0233;G;02:31:40.70;+02:48:35.7;Cet;0.33;0.26;100;15.70;;13.50;13.04;12.65;21.68;Sbc;;;;;;;;2MASX J02314070+0248357,PGC 009622;;; +IC0234;G;02:31:37.72;-00:08:24.9;Cet;0.69;0.35;158;15.20;;12.94;12.24;11.75;22.81;SBc;;;;;;;;2MASX J02313771-0008237,IRAS 02290-0021,PGC 009613,SDSS J023137.71-000824.9,SDSS J023137.72-000824.9,SDSS J023137.72-000825.0;;; +IC0235;G;02:32:50.79;+20:38:28.5;Ari;0.39;0.30;35;14.50;;12.68;12.04;11.74;21.56;;;;;;;;;2MASX J02325079+2038285,IRAS 02300+2025,PGC 009698,SDSS J023250.79+203828.3,UGC 02016;;; +IC0236;G;02:32:55.81;-00:07:52.5;Cet;0.74;0.37;23;15.87;;12.56;11.80;11.54;23.88;S0-a;;;;;;;;2MASX J02325583-0007527,LEDA 1151183,SDSS J023255.80-000752.4,SDSS J023255.80-000752.5,SDSS J023255.81-000752.3,SDSS J023255.81-000752.5;;; +IC0237;G;02:33:31.57;+01:08:23.6;Cet;0.54;0.51;11;14.60;;12.18;11.59;11.26;22.32;SBb;;;;;;;;2MASX J02333157+0108236,MCG +00-07-042,PGC 009742,SDSS J023331.56+010823.6,SDSS J023331.57+010823.6;;; +IC0238;G;02:35:22.68;+12:50:15.8;Ari;1.38;0.79;35;14.10;;10.60;9.87;9.52;23.54;S0;;;;;;;;2MASX J02352268+1250156,MCG +02-07-016,PGC 009835,UGC 02070;;; +IC0239;G;02:36:27.88;+38:58:11.7;And;4.25;4.01;75;12.10;;9.54;9.09;8.78;23.72;SABc;;;;;;;;2MASX J02362783+3858085,IRAS 02333+3845,MCG +06-06-065,PGC 009899,UGC 02080;;; +IC0240;Other;02:38:58.57;+41:43:09.9;Per;;;;;;;;;;;;;;;;;;;;Line of 3-4 Galactic stars.; +IC0241;G;02:37:54.50;+02:19:40.9;Cet;0.90;0.59;152;14.50;;11.54;10.90;10.56;23.12;E-S0;;;;;;;;2MASX J02375452+0219410,MCG +00-07-058,PGC 009969,UGC 02115;;; +IC0242;**;02:38:23.93;-06:56:02.2;Cet;;;;;;;;;;;;;;;;;;;;IC 0242 is a Galactic double star.; +IC0243;G;02:38:32.16;-06:54:07.7;Cet;1.22;0.70;20;15.46;;11.61;10.91;10.53;24.22;Sa;;;;;;;;2MASX J02383216-0654076,MCG -01-07-026,PGC 010009;;;B-Mag taken from LEDA. +IC0244;G;02:39:24.73;+02:43:43.7;Cet;0.70;0.47;176;15.30;;12.79;12.15;11.75;22.95;SABc;;;;;;;;2MASX J02392473+0243436,MCG +00-07-074,PGC 010061;;; +IC0245;G;02:38:54.64;-14:18:20.0;Cet;1.11;0.29;25;15.11;;12.27;11.59;11.34;22.95;Sbc;;;;;;;;2MASX J02385464-1418200,IRAS 02365-1431,MCG -03-07-046,PGC 010032;;; +IC0246;G;02:40:28.60;+02:28:43.1;Cet;0.69;0.61;48;15.50;;11.76;11.28;10.79;23.40;S0;;;;;;;;2MASX J02402858+0228433,MCG +00-07-078,PGC 010116;;; +IC0247;G;02:40:08.78;-11:44:01.6;Cet;0.88;0.64;45;14.74;;11.59;10.88;10.55;22.96;SBbc;;;;;;;;2MASX J02400879-1144017,MCG -02-07-052,PGC 010100;;;B-Mag taken from LEDA. +IC0248;G;02:41:25.83;+17:48:44.0;Ari;0.99;0.74;147;14.40;;11.08;10.30;9.98;22.92;Sa;;;;;;;;2MASX J02412581+1748438,IRAS 02386+1735,MCG +03-07-044,PGC 010197,UGC 02170;;; +IC0249;Dup;02:41:02.49;-06:56:09.3;Cet;;;;;;;;;;;;;;;0961;;;;;; +IC0250;G;02:40:54.27;-13:18:48.8;Cet;0.91;0.73;178;15.05;;12.20;11.64;11.31;23.42;SABb;;;;;;;;2MASX J02405425-1318486,MCG -02-07-064,PGC 010162;;;B-Mag taken from LEDA. +IC0251;G;02:41:13.85;-14:57:28.2;Cet;0.84;0.74;96;15.00;;11.91;11.25;10.79;23.41;E;;;;;;;;2MASX J02411385-1457276,MCG -03-07-054,PGC 010184;;;B-Mag taken from LEDA. +IC0252;G;02:41:45.13;-14:50:53.7;Cet;1.01;0.62;26;15.20;;11.96;11.27;11.07;23.86;S0-a;;;;;;;;2MASX J02414512-1450537,LEDA 144971;;; +IC0253;G;02:42:05.75;-15:02:48.6;Cet;0.95;0.74;162;14.87;;11.44;10.76;10.47;23.46;S0;;;;;;;;2MASX J02420573-1502489,MCG -03-07-058,PGC 010226;;;B-Mag taken from LEDA. +IC0254;G;02:42:04.98;-15:06:23.9;Cet;0.26;0.25;55;14.91;;12.68;11.96;11.73;;;;;;;;;;2MASX J02420497-1506239;;;B-Mag taken from LEDA. +IC0255;G;02:47:03.21;+16:17:16.9;Ari;0.59;0.40;45;15.70;;13.19;12.32;12.32;23.19;SABb;;;;;;;;2MASX J02470319+1617167,MCG +03-08-008,PGC 010540;;; +IC0256;G;02:49:40.30;+46:57:16.8;Per;0.46;0.29;30;14.31;;12.12;11.30;11.12;;E;;;;;;;;2MASX J02494026+4657162,PGC 010737;;; +IC0257;G;02:49:45.44;+46:58:34.3;Per;1.93;1.19;154;14.50;;;;;24.12;E;;;;;;;;MCG +08-06-011,PGC 010729,UGC 02298;;; +IC0258;G;02:49:46.10;+41:03:06.0;Per;1.48;1.23;170;15.60;;11.61;10.84;10.59;25.10;S0-a;;;;;;;;2MASX J02494600+4103062,IRAS 02465+4050,PGC 010730,UGC 02306;;Incorrectly called IC 0259 in CGCG.; +IC0259;G;02:49:40.88;+41:03:18.4;Per;0.69;0.53;130;15.50;;11.78;11.11;10.84;23.30;S0;;;;;;;;2MASX J02494087+4103182,PGC 010721;;Incorrectly called IC 0258 in CGCG.; +IC0260;G;02:51:00.88;+46:57:17.2;Per;1.53;0.75;170;15.20;;10.52;9.85;9.50;24.64;E;;;;;;;;2MASX J02510087+4657175,MCG +08-06-014,PGC 010812,UGC 02325;;One of two 6cm sources associated with [WB92] 0247+4645; +IC0261;Dup;02:49:04.09;-14:28:14.5;Eri;;;;;;;;;;;;;;;1120;;;;;; +IC0262;G;02:51:43.27;+42:49:41.8;Per;2.10;1.74;36;14.80;;10.97;10.27;9.92;25.05;S0;;;;;;;;2MASX J02514329+4249416,MCG +07-06-080,PGC 010850,SDSS J025143.25+424942.1,UGC 02335;;; +IC0263;G;02:49:39.96;-00:04:11.5;Cet;0.65;0.44;168;15.04;;12.13;11.40;11.14;22.65;S0-a;;;;;;;;2MASX J02494000-0004110,IRAS 02471-0016,PGC 010716,SDSS J024939.96-000411.4,SDSS J024939.96-000411.5,SDSS J024939.96-000411.6;;; +IC0264;G;02:48:47.62;-00:06:33.1;Cet;0.50;0.37;28;17.53;16.88;12.93;12.29;12.00;23.25;E;;;;;;;;2MASX J02484759-0006329,PGC 010644,SDSS J024847.62-000633.0,SDSS J024847.62-000633.1;;; +IC0265;G;02:54:43.98;+41:39:19.2;Per;0.71;0.63;60;15.70;;11.46;10.78;10.51;23.64;E;;;;;;;;2MASX J02544397+4139188,MCG +07-07-006,PGC 010978;;; +IC0266;G;02:55:04.83;+42:15:44.4;Per;0.74;0.31;136;15.70;;11.04;10.39;10.08;24.09;S0-a;;;;;;;;2MASX J02550488+4215438,MCG +07-07-010,PGC 011002;;; +IC0267;G;02:53:50.25;+12:50:57.2;Ari;1.86;0.69;170;14.10;;10.77;10.03;9.73;23.27;Sb;;;;;;;;2MASX J02535024+1250568,IRAS 02511+1238,MCG +02-08-028,PGC 010932,UGC 02368;;; +IC0268;G;02:55:26.95;-14:06:10.8;Eri;0.97;0.55;68;15.31;;12.77;12.09;11.59;23.63;SABa;;;;;;;;2MASX J02552693-1406106,MCG -02-08-024,PGC 011032;;;B-Mag taken from LEDA. +IC0269;G;02:55:26.49;-14:04:00.5;Eri;1.19;0.35;126;15.34;;11.56;10.79;10.71;24.20;S0-a;;;;;;;;2MASX J02552652-1404006,MCG -02-08-023,PGC 011033;;;B-Mag taken from LEDA. +IC0270;G;02:55:44.19;-14:12:28.4;Eri;1.80;1.43;51;14.14;;10.17;9.53;9.21;24.00;E-S0;;;;;;;;2MASX J02554422-1412278,MCG -02-08-028,PGC 011061;;;B-Mag taken from LEDA. +IC0271;G;02:55:59.45;-12:00:28.3;Eri;1.06;0.61;131;14.73;;;;;23.56;S0-a;;;;;;;;MCG -02-08-029,PGC 011078;;; +IC0272;G;02:56:06.44;-14:11:11.9;Eri;0.96;0.67;30;14.86;;11.72;10.93;10.73;23.22;Sbc;;;;;;;;2MASX J02560643-1411119,MCG -02-08-030,PGC 011086;;;B-Mag taken from LEDA. +IC0273;G;02:57:10.78;+02:46:30.2;Cet;1.49;0.46;32;14.40;;11.22;10.52;10.19;23.62;Sa;;;;;;;;2MASX J02571077+0246302,IRAS 02546+0234,MCG +00-08-052,PGC 011156,UGC 02425;;; +IC0274;Other;03:00:05.23;+44:12:47.4;Per;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing obvious here."; +IC0275;GTrpl;03:00:57.30;+44:20:54.0;Per;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC0275 NED01;G;03:00:55.87;+44:20:46.7;Per;;;;;;;;;;;;;;;;;;2MASS J03005582+4420463,PGC 011388;;;No diameter data available in LEDA +IC0275 NED02;G;03:00:55.90;+44:21:01.3;Per;1.38;1.20;25;14.44;;11.00;10.38;9.88;24.01;E;;;;;;;;2MASX J03005590+4421014,PGC 011389;;;B-Mag taken from LEDA. +IC0275 NED03;G;03:00:58.67;+44:21:00.6;Per;;;;16.56;;;;;;;;;;;;;;2MASS J03005867+4421000,PGC 011390;;;B-Mag taken from LEDA. No diameter data available in LEDA +IC0276;G;02:58:41.06;-15:42:11.2;Eri;1.67;0.61;62;14.09;;10.84;10.21;10.17;23.91;S0;;;;;;;;2MASX J02584169-1542067,MCG -03-08-054,PGC 011264;;; +IC0277;G;02:59:50.60;+02:46:16.9;Cet;1.00;0.89;44;13.80;15.50;11.17;10.43;10.11;22.54;SBbc;;;;;;;;2MASX J02595060+0246168,IRAS 02572+0234,MCG +00-08-064,PGC 011336,UGC 02460;;; +IC0278;G;03:01:30.44;+37:45:57.6;Per;2.17;2.17;125;14.80;;10.60;9.87;9.59;25.25;E;;;;;;;;2MASX J03013044+3745578,MCG +06-07-032,PGC 011414,UGC 02481;;; +IC0279;G;03:01:12.21;+16:12:33.2;Ari;0.54;0.45;166;15.20;;12.26;11.50;11.20;22.75;Sbc;;;;;;;;2MASX J03011222+1612331,PGC 011401;;; +IC0280;Other;03:03:03.61;+42:21:33.5;Per;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +IC0281;Dup;03:04:37.13;+42:21:46.2;Per;;;;;;;;;;;;;;;1177;;;;;; +IC0282;Dup;03:06:13.24;+41:50:56.2;Per;;;;;;;;;;;;;;;1198;;;;;; +IC0283;G;03:03:50.46;-00:12:16.0;Cet;0.71;0.54;5;18.60;17.93;12.68;11.98;11.66;22.98;Sc;;;;;;;;2MASX J03035045-0012159,IRAS 03012-0024,MCG +00-08-076,PGC 011539,SDSS J030350.45-001215.9,SDSS J030350.46-001215.9;;; +IC0284;G;03:06:09.91;+42:22:18.9;Per;4.29;2.15;14;13.80;;10.03;9.81;9.28;23.82;Sd;;;;;;;;2MASX J03060989+4222189,IRAS 03029+4211,MCG +07-07-023,PGC 011643,UGC 02531;;; +IC0285;G;03:04:06.22;-12:00:55.6;Eri;1.45;0.36;117;15.02;;11.62;11.13;10.90;23.45;Sbc;;;;;;;;2MASX J03040620-1200556,MCG -02-08-044,PGC 011557;;;B-Mag taken from LEDA. +IC0286;Other;03:04:47.22;-06:29:04.3;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0287;G;03:04:57.82;-12:04:13.6;Eri;0.81;0.59;9;15.22;;11.69;10.96;10.76;23.37;Sc;;;;;;;;2MASX J03045782-1204137,LEDA 170040;;; +IC0288;G;03:07:32.91;+42:23:15.2;Per;1.01;0.28;41;15.00;;10.57;9.80;9.45;22.98;Sab;;;;;;;;2MASX J03073290+4223151,MCG +07-07-027,PGC 011702,UGC 02544;;; +IC0289;PN;03:10:19.26;+61:19:00.4;Cas;0.58;;;12.30;13.20;15.59;15.62;15.14;;;;15.10;15.90;;;;;IRAS 03062+6107,PK 138+02 1,PN G138.8+02.8;;; +IC0290;G;03:09:42.74;+40:58:27.2;Per;1.24;0.32;129;15.50;;12.02;11.27;11.06;23.74;Sb;;;;;;1884;;2MASX J03094272+4058269,PGC 011817,UGC 02561;;; +IC0291;G;03:07:26.45;-12:35:14.8;Eri;1.19;0.52;91;14.65;;11.60;10.91;10.65;23.51;S0-a;;;;;;;;2MASX J03072644-1235147,IRAS 03050-1246,MCG -02-09-001,PGC 011699;;;B-Mag taken from LEDA. +IC0292;G;03:10:12.92;+40:45:56.4;Per;1.19;0.65;73;14.30;;11.25;10.52;10.25;22.78;Scd;;;;;;1887;;2MASX J03101293+4045564,IRAS 03069+4034,MCG +07-07-030,PGC 011846,UGC 02567;;; +IC0293;G;03:10:56.16;+41:08:13.6;Per;1.05;0.76;108;15.70;;11.37;10.64;10.39;24.14;S0-a;;;;;;1888;;2MASX J03105615+4108135,MCG +07-07-031,PGC 011873;;; +IC0294;G;03:11:03.11;+40:37:19.6;Per;1.49;1.17;106;15.60;;10.66;9.97;9.72;24.73;S0-a;;;;;;1889;;2MASX J03110311+4037195,MCG +07-07-033,PGC 011878,UGC 02574;;; +IC0295;Other;03:11:00.74;+40:36:54.9;Per;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0296;Other;03:11:04.77;+40:37:36.7;Per;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0297;**;03:13:18.38;+42:08:55.6;Per;;;;;;;;;;;;;;;;;;;;The identity as IC 0297 is not certain.; +IC0298;GPair;03:11:18.90;+01:18:53.0;Cet;0.80;;;;;;;;;;;;;;;;;MCG +00-09-015;;;Diameter of the group inferred by the author. +IC0298A;G;03:11:18.50;+01:18:54.1;Cet;0.54;0.34;35;15.50;;14.17;13.64;12.92;23.52;;;;;;;;;2MASX J03111863+0118498,MCG +00-09-015 NED01,PGC 1190197;;; +IC0298B;G;03:11:19.53;+01:18:48.2;Cet;0.43;0.33;5;;;;;;;Sbc;;;;;;;;2MASX J03111950+0118478,IRAS 03087+0107,MCG +00-09-015 NED02,PGC 011890;;; +IC0299;G;03:11:02.55;-13:06:34.5;Eri;0.87;0.68;30;15.51;;12.10;11.54;11.16;23.87;S0-a;;;;;;;;2MASX J03110251-1306342,LEDA 942795;;; +IC0300;G;03:14:16.02;+42:24:55.2;Per;0.65;0.60;115;16.06;;12.15;11.51;11.14;23.98;E;;;;;;;;2MASX J03141604+4224550,PGC 2198416;;;B-Mag taken from LEDA. +IC0301;G;03:14:47.71;+42:13:21.5;Per;1.26;1.11;177;15.20;;10.60;9.82;9.50;24.09;E;;;;;;;;2MASX J03144769+4213212,MCG +07-07-036,PGC 012074,UGC 02606;;; +IC0302;G;03:12:51.27;+04:42:25.3;Cet;1.84;1.20;22;13.81;13.00;10.64;9.99;9.64;23.34;Sbc;;;;;;;;2MASX J03125128+0442251,IRAS 03102+0431,MCG +01-09-002,PGC 011972,SDSS J031251.27+044225.3,UGC 02595;;; +IC0303;G;03:12:40.87;-11:41:23.8;Eri;0.59;0.46;47;15.82;;12.31;11.73;11.69;23.56;;;;;;;;;2MASX J03124084-1141231,LEDA 962881;;; +IC0304;G;03:15:01.37;+37:52:54.6;Per;1.06;0.65;29;14.80;;11.37;10.66;10.34;23.26;Sb;;;;;;;;2MASX J03150136+3752544,IRAS 03118+3741,MCG +06-08-005,PGC 012080,UGC 02609;;; +IC0305;G;03:15:03.80;+37:51:36.0;Per;0.79;0.64;74;15.70;;11.01;10.27;9.99;23.77;E;;;;;;;;2MASX J03150381+3751364,MCG +06-08-006,PGC 012083;;; +IC0306;G;03:13:00.21;-11:42:56.5;Eri;0.71;0.58;79;15.37;;12.69;11.90;11.66;23.13;SABc;;;;;;;;2MASX J03130021-1142562,MCG -02-09-015,PGC 011985;;; +IC0307;G;03:13:45.21;-00:14:29.2;Cet;1.60;0.60;67;14.60;;11.20;10.44;10.09;23.89;Sa;;;;;;;;2MASX J03134522-0014295,IRAS 03112-0025,MCG +00-09-027,PGC 012017,SDSS J031345.21-001429.1,SDSS J031345.21-001429.2,UGC 02600;;; +IC0308;G;03:16:15.83;+41:10:50.7;Per;1.16;0.93;4;16.50;;11.38;10.61;10.33;24.44;S0;;;;;;;;2MASX J03161580+4110507,PGC 012152,UGC 02619;;; +IC0309;G;03:16:06.29;+40:48:16.4;Per;1.02;0.95;30;14.90;;10.97;10.22;9.99;23.54;S0;;;;;;;;2MASX J03160629+4048161,MCG +07-07-043,PGC 012141;;; +IC0310;G;03:16:42.98;+41:19:29.9;Per;1.50;1.42;25;14.30;;10.25;9.47;9.15;23.49;S0;;;;;;;;2MASX J03164302+4119291,IRAS 03135+4108,MCG +07-07-045,PGC 012171,UGC 02624;;; +IC0311;G;03:16:46.73;+40:00:13.0;Per;1.00;1.00;100;15.70;;10.53;9.71;9.40;24.39;Sb;;;;;;;;2MASX J03164671+4000132,PGC 012177,UGC 02625;;; +IC0312;G;03:18:08.61;+41:45:14.8;Per;1.19;0.57;125;14.90;;10.79;10.01;9.78;23.84;E;;;;;;;;2MASX J03180835+4145157,MCG +07-07-051,PGC 012279,UGC 02644;;; +IC0313;G;03:20:57.90;+41:53:37.8;Per;1.26;0.87;42;15.10;;10.86;10.12;9.82;24.18;E;;;;;;;;2MASX J03205786+4153377,MCG +07-07-073,PGC 012558,UGC 02682;;; +IC0314;Dup;03:18:49.81;-01:58:24.0;Eri;;;;;;;;;;;;;;;1289;;;;;; +IC0315;G;03:19:09.34;+04:02:18.8;Cet;0.68;0.33;45;15.10;;11.91;11.17;10.85;;S0;;;;;;;;2MASX J03190932+0402184,PGC 012364;;; +IC0316;GPair;03:21:19.90;+41:55:50.0;Per;0.80;;;;;;;;;;;;;;;;;MCG +07-07-074;;; +IC0316 NED01;G;03:21:19.95;+41:55:44.2;Per;0.45;0.17;116;15.26;;;;;22.28;;;;;;;;;2MASSJ03211996+4155443,IRAS 03179+4145,MCG +07-07-074 NED01,PGC 012576,UGC 02688 NOTES01;;;B-Mag taken from LEDA. +IC0316 NED02;G;03:21:19.90;+41:55:54.9;Per;1.06;0.79;64;15.00;;11.50;10.84;10.47;23.64;S?;;;;;;;;2MASX J03211989+4155551,MCG +07-07-074 NED02,PGC 012578,UGC 02688;;; +IC0317;G;03:18:55.51;-12:44:24.7;Eri;0.88;0.71;58;14.87;;11.80;11.07;10.77;22.99;SABc;;;;;;;;2MASX J03185550-1244249,MCG -02-09-026,PGC 012346;;;B-Mag taken from LEDA. +IC0318;G;03:20:43.83;-14:34:05.6;Eri;1.08;0.45;134;14.72;;11.52;10.69;10.40;23.24;Sa;;;;;;;;2MASX J03204383-1434053,IRAS 03183-1444,MCG -03-09-023,PGC 012532;;;B-Mag taken from LEDA. +IC0319;*;03:23:29.05;+41:24:58.9;Per;;;;;;;;;;;;;;;;;;;;; +IC0320;G;03:25:59.18;+40:47:20.5;Per;1.12;0.91;99;15.40;;10.98;10.29;9.93;24.02;Sab;;;;;;;;2MASX J03255919+4047203,MCG +07-08-007,PGC 012819,UGC 02732;;; +IC0321;G;03:24:29.59;-14:59:07.7;Eri;1.03;0.95;25;14.79;;11.55;10.80;10.58;23.73;E;;;;;;;;2MASX J03242964-1459076,MCG -03-09-035,PGC 012742;;;B-Mag taken from LEDA. +IC0322;G;03:26:00.47;+03:40:50.0;Tau;0.76;0.38;6;15.40;;12.40;12.02;11.75;23.77;;;;;;;;;2MASX J03260046+0340498,PGC 012820;;; +IC0323;Other;03:29:33.55;+41:51:18.3;Per;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC0324;Dup;03:26:28.29;-21:21:19.1;Eri;;;;;;;;;;;;;;;1331;;;;;; +IC0325;G;03:30:48.86;-07:02:48.2;Eri;0.83;0.74;80;15.17;;12.54;11.88;11.54;23.80;Sab;;;;;;;;2MASX J03304887-0702478,PGC 1025189,SDSS J033048.85-070248.2,SDSS J033048.86-070248.2;;; +IC0326;G;03:30:36.61;-14:25:32.0;Eri;1.13;0.84;101;15.41;;11.45;10.86;10.41;24.21;E-S0;;;;;;;;2MASX J03303662-1425319,MCG -03-09-049,PGC 013030;;;B-Mag taken from LEDA. +IC0327;G;03:31:09.98;-14:41:31.7;Eri;0.80;0.47;70;15.21;;12.96;12.41;12.16;23.18;Sab;;;;;;;;2MASX J03310997-1441314,MCG -03-09-050,PGC 013057;;;B-Mag taken from LEDA. +IC0328;G;03:31:10.95;-14:38:16.3;Eri;0.67;0.48;16;14.59;;12.31;11.68;11.37;22.41;Sc;;;;;;;;2MASX J03311094-1438164,IRAS 03288-1448,MCG -03-09-051,PGC 013063;;;B-Mag taken from LEDA. +IC0329;G;03:32:01.37;+00:16:46.0;Tau;1.00;0.48;63;14.50;;11.74;11.08;10.80;24.02;E;;;;;;;;2MASX J03320135+0016456,MCG +00-10-001,PGC 013109,SDSS J033201.36+001646.0,SDSS J033201.37+001646.0,SDSS J033201.37+001646.1;;; +IC0330;G;03:32:08.03;+00:21:12.2;Tau;1.02;0.32;73;15.00;;11.88;11.14;10.87;23.43;SBab;;;;;;;;2MASX J03320801+0021127,MCG +00-10-002,PGC 013117,SDSS J033208.02+002112.1,SDSS J033208.03+002112.1,UGC 02779;;; +IC0331;G;03:32:19.08;+00:16:57.2;Tau;0.91;0.91;105;14.50;;11.42;10.66;10.43;23.51;E;;;;;;;;2MASX J03321908+0016567,MCG +00-10-003,PGC 013119,SDSS J033219.08+001657.2;;; +IC0332;G;03:32:37.42;+01:22:57.2;Tau;0.97;0.50;44;15.00;;11.58;11.02;10.54;23.81;S0-a;;;;;;;;2MASX J03323745+0122569,MCG +00-10-004,PGC 013137;;; +IC0333;Other;03:34:03.38;-04:35:05.6;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0334;G;03:45:17.08;+76:38:17.9;Cam;2.34;1.85;58;12.45;11.33;8.75;7.96;7.71;23.06;S?;;;;;;;;2MASX J03451709+7638177,MCG +13-03-007,PGC 013759,UGC 02824;;; +IC0335;G;03:35:31.04;-34:26:49.4;For;2.62;0.80;83;12.90;;10.11;9.47;9.15;23.73;S0;;;;;;1963;;2MASX J03353102-3426495,ESO 358-026,ESO-LV 358-0260,MCG -06-08-031,PGC 013277;;; +IC0336;Neb;03:37:57.04;+23:21:47.3;Tau;;;;;;;;;;;;;;;;;;;;; +IC0337;Other;03:37:04.30;-06:43:16.3;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0338;G;03:37:38.10;+03:07:07.6;Tau;0.84;0.68;176;15.00;;12.25;11.48;11.11;23.24;Sc;;;;;;;;2MASX J03373810+0307077,MCG +00-10-007,PGC 013373;;; +IC0339;*;03:38:02.23;-18:23:52.0;Eri;;;;;;;;;;;;;;;;;;;;; +IC0340;G;03:39:29.11;-13:06:54.4;Eri;1.61;0.58;90;14.76;;11.92;11.24;10.87;24.25;S0-a;;;;;;;;2MASX J03392911-1306544,MCG -02-10-005,PGC 013464,SDSS J033929.02-130655.1;;;B-Mag taken from LEDA. +IC0341;Neb;03:40:55.69;+21:57:36.7;Tau;134.90;;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC0342;G;03:46:48.50;+68:05:46.9;Cam;19.77;18.79;0;10.50;;5.66;5.01;4.56;24.85;SABc;;;;;;;;2MASX J03464851+6805459,C 005,IRAS 03419+6756,MCG +11-05-003,PGC 013826,UGC 02847;;; +IC0343;G;03:40:07.14;-18:26:36.5;Eri;1.51;0.66;113;14.17;13.19;11.32;10.72;10.50;23.67;S0-a;;;;;;;;2MASX J03400714-1826364,ESO 548-066,ESO-LV 548-0660,MCG -03-10-029,PGC 013495;;; +IC0344;G;03:41:29.53;-04:39:57.1;Eri;0.89;0.47;42;14.92;;12.50;11.78;11.93;22.89;SBbc;;;;;;;;2MASX J03412959-0439568,MCG -01-10-020,PGC 013568;;;B-Mag taken from LEDA. +IC0345;G;03:41:09.13;-18:18:50.9;Eri;0.88;0.73;37;14.57;;11.93;11.28;11.05;23.18;S0;;;;;;;;2MASX J03410912-1818510,ESO 548-074,ESO-LV 548-0740,MCG -03-10-032,PGC 013552;;; +IC0346;G;03:41:44.66;-18:16:01.1;Eri;1.95;1.47;69;13.53;;10.59;9.90;9.78;23.80;S0-a;;;;;;;;2MASX J03414466-1816014,ESO 548-078,ESO-LV 548-0780,MCG -03-10-035,PGC 013575;;; +IC0347;G;03:42:32.65;-04:17:55.1;Eri;1.37;1.02;138;13.50;;10.53;9.83;9.57;23.43;S0;;;;;;;;2MASX J03423266-0417551,IRAS 03399-0427,MCG -01-10-024,PGC 013622;;; +IC0348;Cl+N;03:44:34.19;+32:09:46.2;Per;10.00;10.00;;;;;;;;;;;;;;1985;;BD +31 0643,HIP 017465,LBN 758,MWSC 0301;omi Per Cloud;; +IC0349;RfN;03:46:20.11;+23:56:23.3;Tau;25.70;;;;;;;;;;;;;;;;;;Barnard's Merope Nebula;Part of the Merope Nebula = NGC 1435.;Dimensions taken from LEDA +IC0350;G;03:44:36.65;-11:48:02.7;Eri;1.09;0.79;165;14.41;;12.43;11.57;11.56;23.45;Sab;;;;;;;;2MASX J03443664-1148029,MCG -02-10-010,PGC 013731;;; +IC0351;PN;03:47:33.01;+35:02:48.9;Per;0.12;;;12.40;11.90;13.01;12.82;12.18;;;;15.90;15.80;;;;;2MASX J03473301+3502487,IRAS 03443+3453,PK 159-15 1,PN G159.0-15.1,TYC 2364-855-1;;; +IC0352;G;03:47:37.43;-08:43:54.6;Eri;0.70;0.48;119;15.65;;12.14;11.45;11.19;23.66;S0-a;;;;;;;;2MASX J03473743-0843546,LEDA 176624;;; +IC0353;Neb;03:53:01.07;+25:50:52.8;Tau;181.97;30.20;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC0354;Neb;03:53:57.91;+23:08:49.2;Tau;128.82;;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC0355;G;03:53:46.26;+19:58:26.1;Tau;0.67;0.56;161;15.40;15.40;11.95;11.03;10.83;23.21;Sc;;;;;;;;2MASX J03534627+1958259,IRAS 03509+1949,MCG +03-10-010,PGC 014052;;; +IC0356;G;04:07:46.91;+69:48:44.8;Cam;4.02;3.73;90;13.30;;7.16;6.33;6.04;23.27;Sb;;;;;;;;2MASX J04074690+6948447,IRAS 04025+6940,MCG +12-04-011,PGC 014508,UGC 02953;;; +IC0357;G;04:03:44.00;+22:09:32.8;Tau;0.94;0.61;147;14.30;;10.75;9.98;9.60;22.90;SBb;;;;;;;;2MASX J04034398+2209325,IRAS 04007+2201,MCG +04-10-016,PGC 014384,UGC 02941;;; +IC0358;G;04:03:42.88;+19:53:41.8;Tau;1.18;0.28;63;15.30;;11.12;10.32;10.04;24.19;S0;;;;;;;;2MASX J04034287+1953415,MCG +03-11-006,PGC 014382,UGC 02940;;; +IC0359;G;04:12:28.36;+27:42:07.1;Tau;1.30;1.30;105;15.40;;9.58;8.78;8.47;24.84;E;;;;;;;;2MASX J04122834+2742065,MCG +05-10-009,PGC 014653,UGC 02980;;; +IC0359A;RfN;04:18:41.00;+28:17:24.0;Tau;15.00;10.00;;;;;;;;;;;;;;;;LBN 782;;;Object not present in NED. +IC0360;Neb;04:09:02.57;+26:07:52.3;Tau;180.00;100.00;;;;;;;;;;;;;;;;LBN 786;;; +IC0361;OCl;04:18:50.70;+58:14:58.2;Cam;7.20;;;12.92;11.70;;;;;;;;;;;;;MWSC 0362;;; +IC0362;G;04:16:42.43;-12:12:00.4;Eri;1.77;1.03;5;14.18;;10.61;10.02;9.60;24.24;E;;;;;;;;2MASX J04164244-1212000,MCG -02-11-031,PGC 014782;;;B-Mag taken from LEDA. +IC0363;G;04:18:55.42;+03:01:58.9;Tau;0.33;0.31;25;15.40;;12.13;11.38;11.24;;E;;;;;;;;2MASX J04185539+0301586,PGC 014847;;; +IC0364;G;04:19:06.70;+03:11:20.2;Tau;0.78;0.49;72;15.20;;11.64;10.94;10.67;23.49;S0-a;;;;;;;;2MASX J04190667+0311206,PGC 014854;;; +IC0365;G;04:19:14.14;+03:20:54.0;Tau;0.88;0.56;34;14.80;;10.81;10.04;9.69;23.30;S0-a;;;;;;;;2MASX J04191415+0320536,MCG +01-11-017,PGC 014860;;; +IC0366;G;04:19:41.54;+02:21:35.3;Tau;0.34;0.20;20;15.60;;11.99;11.36;11.10;22.13;E;;;;;;;;2MASX J04194152+0221355,PGC 014887;;; +IC0367;G;04:20:40.99;-14:46:51.8;Eri;1.74;0.61;140;14.47;;10.94;10.21;10.03;24.31;E-S0;;;;;;;;2MASX J04204100-1446519,MCG -02-12-001,PGC 014917;;;B-Mag taken from LEDA. +IC0368;G;04:22:42.72;-12:36:54.6;Eri;0.99;0.83;164;15.08;;11.49;10.79;10.52;23.59;S0;;;;;;;;2MASX J04224270-1236544,MCG -02-12-009,PGC 014994;;;B-Mag taken from LEDA. +IC0369;G;04:23:28.22;-11:47:24.3;Eri;0.76;0.76;35;15.37;;11.90;11.16;10.91;23.53;S0;;;;;;;;2MASX J04232824-1147243,MCG -02-12-010,PGC 015020;;;B-Mag taken from LEDA. +IC0370;G;04:24:01.67;-09:23:41.4;Eri;0.99;0.89;123;14.50;;12.22;11.54;11.11;23.57;Sc;;;;;;;;2MASX J04240171-0923408,MCG -02-12-011,PGC 015029;;; +IC0371;*;04:30:12.59;-00:33:39.6;Eri;;;;;;;;;;;;;;;;;;;;; +IC0372;G;04:30:04.24;-05:00:35.9;Eri;0.97;0.45;30;15.32;;11.74;11.07;10.82;23.93;S0-a;;;;;;;;2MASX J04300421-0500358,LEDA 177340;;; +IC0373;G;04:30:42.76;-04:52:12.9;Eri;0.98;0.76;109;15.04;;11.14;10.41;10.19;23.59;S0-a;;;;;;;;2MASX J04304279-0452129,MCG -01-12-013,PGC 015335;;;B-Mag taken from LEDA. +IC0374;G;04:32:32.75;+16:38:03.0;Tau;0.23;0.19;80;15.70;;10.96;10.16;9.86;21.33;S0-a;;;;;;;;2MASX J04323273+1638031,MCG +03-12-001,PGC 015474;;; +IC0375;G;04:31:03.14;-12:58:26.3;Eri;0.82;0.54;59;14.63;;11.77;11.02;10.59;23.27;SBb;;;;;;;;2MASX J04310313-1258262,LEDA 088275;;; +IC0376;G;04:31:13.79;-12:26:00.1;Eri;0.59;0.48;50;15.98;;12.53;11.99;11.69;23.65;;;;;;;;;2MASX J04311379-1226002,LEDA 952848;;; +IC0377;G;04:31:16.54;-12:27:18.3;Eri;1.00;0.83;99;14.84;;11.59;10.82;10.63;23.70;E;;;;;;;;2MASX J04311652-1227182,MCG -02-12-031,PGC 015366;;Misidentified as IC 0376 in MCG.;B-Mag taken from LEDA. +IC0378;G;04:31:27.92;-12:17:59.1;Eri;0.79;0.48;69;15.66;;11.89;11.12;10.94;23.71;E-S0;;;;;;;;2MASX J04312793-1217592,LEDA 954841;;; +IC0379;G;04:31:50.93;-07:14:18.1;Eri;0.93;0.82;35;14.70;;11.71;10.95;10.63;23.33;SABb;;;;;;;;2MASX J04315094-0714180,MCG -01-12-021,PGC 015428;;;B-Mag taken from LEDA. +IC0380;G;04:31:41.32;-12:55:37.3;Eri;0.76;0.46;75;15.25;;12.83;12.19;12.13;23.06;SABb;;;;;;;;2MASX J04314131-1255372,MCG -02-12-034,PGC 015398;;;B-Mag taken from LEDA. +IC0381;Dup;04:44:28.50;+75:38:23.1;Cam;;;;;;;;;;;;;;;1530A;;;;;; +IC0382;G;04:37:55.55;-09:31:09.6;Eri;1.99;1.18;173;13.00;;10.65;10.02;9.71;23.33;SABc;;;;;;;;2MASX J04375557-0931092,IRAS 04355-0937,MCG -02-12-049,PGC 015691;;; +IC0383;G;04:38:58.03;+09:53:33.1;Tau;0.63;0.56;36;15.60;;11.34;10.56;10.27;23.35;E-S0;;;;;;;;2MASX J04385802+0953336,PGC 1371560;;;B-Mag taken from LEDA. +IC0384;G;04:39:18.28;-07:50:20.8;Eri;0.49;0.48;94;15.14;;12.15;11.47;11.17;;E;;;;;;;;2MASX J04391828-0750208,PGC 2816418;;; +IC0385;G;04:39:31.46;-07:05:50.9;Eri;1.15;0.58;107;14.60;;11.32;10.50;10.34;24.19;S0;;;;;;;;2MASX J04393149-0705508,PGC 015746;;; +IC0386;Dup;04:39:58.58;-09:27:22.4;Eri;;;;;;;;;;;;;;;1632;;;;;; +IC0387;G;04:41:44.21;-07:05:10.3;Eri;1.60;1.11;84;13.85;;10.81;10.14;9.90;23.32;SABc;;;;;;;;2MASX J04414426-0705109,IRAS 04393-0710,MCG -01-12-044,PGC 015831;;;B-Mag taken from LEDA. +IC0388;GPair;04:41:53.33;-07:18:19.9;Eri;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC0388 NED01;G;04:41:52.42;-07:18:16.7;Eri;0.54;0.44;54;16.01;;12.79;12.03;11.86;23.53;;;;;;;;;2MASX J04415239-0718169,PGC 1021211;;; +IC0388 NED02;G;04:41:54.32;-07:18:23.3;Eri;0.89;0.40;10;15.87;;12.35;11.60;11.45;24.37;E;;;;;;;;2MASX J04415434-0718229,PGC 1021186;;; +IC0389;G;04:41:59.62;-07:18:41.3;Eri;1.09;0.82;20;15.07;;11.02;10.27;10.01;23.82;E-S0;;;;;;;;2MASX J04415960-0718410,MCG -01-12-045,PGC 015840;;;B-Mag taken from LEDA. +IC0390;G;04:42:03.87;-07:12:23.2;Eri;1.14;0.40;35;15.48;;11.49;10.77;10.46;24.34;S0-a;;;;;;;;2MASX J04420390-0712230,MCG -01-12-046,PGC 015844,SDSS J044203.90-071223.1;;;B-Mag taken from LEDA. +IC0391;G;04:57:21.13;+78:11:19.8;Cam;1.39;1.33;25;12.80;;10.84;10.17;9.93;22.41;Sc;;;;;;;;2MASX J04572110+7811195,IRAS 04497+7806,MCG +13-04-011,PGC 016402,UGC 03190;;; +IC0392;G;04:46:25.76;+03:30:20.0;Ori;1.45;1.00;168;14.80;;11.61;10.91;10.61;23.01;S0;;;;;;;;2MASX J04462575+0330199,IRAS 04438+0324,MCG +01-13-001,PGC 015973,UGC 03158;;; +IC0393;G;04:47:51.80;-15:31:30.7;Eri;0.81;0.77;7;14.87;;11.45;10.75;10.38;23.30;E;;;;;;;;2MASX J04475180-1531305,MCG -03-13-012,PGC 016028;;;B-Mag taken from LEDA. +IC0394;Other;04:48:50.71;-06:16:48.7;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0395;Dup;04:49:34.03;+00:15:10.3;Ori;;;;;;;;;;;;;;;1671;;;;;; +IC0396;G;04:57:58.99;+68:19:24.2;Cam;2.38;1.45;86;13.20;;9.50;8.76;8.50;23.22;Sbc;;;;;;;;2MASX J04575911+6819249,IRAS 04527+6814,MCG +11-07-002,PGC 016423,UGC 03203;;; +IC0397;Other;05:01:06.63;+40:25:29.6;Aur;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +IC0398;G;04:58:12.56;-07:46:48.9;Eri;1.18;0.34;2;;;10.95;10.24;9.88;;SBbc;;;;;;;;2MASX J04581253-0746493,IRAS 04558-0751,MCG -01-13-040,PGC 016433;;; +IC0399;G;05:01:44.01;-04:17:19.5;Eri;0.54;0.45;81;15.00;14.80;13.11;12.62;12.22;22.71;IAB;;;;;;;;2MASX J05014410-0417194,PGC 016582;;; +IC0400;G;05:03:45.64;-15:49:08.7;Lep;;;;16.70;;;;;;;;;;;;;;6dF J0503456-154909;;Identity as IC 0400 is very uncertain.; +IC0401;G;05:04:19.64;-10:04:35.5;Eri;1.75;0.58;55;13.60;;11.04;10.44;10.15;23.16;SBb;;;;;;;;2MASX J05041962-1004359,IRAS 05019-1008,MCG -02-13-040,PGC 016672;;; +IC0402;G;05:06:14.83;-09:06:26.7;Eri;1.26;0.56;146;13.00;;11.97;11.09;10.80;22.96;SABc;;;;;;;;2MASX J05061487-0906257,MCG -02-13-043,PGC 016742,UGCA 099;;; +IC0403;Other;05:15:15.69;+39:58:19.6;Aur;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC0404;G;05:13:19.60;+09:45:17.7;Ori;0.73;0.53;130;15.70;;11.31;10.44;10.26;;S0-a;;;;;;;;2MASX J05131960+0945174,PGC 016935;;; +IC0405;Neb;05:16:29.48;+34:21:22.2;Aur;50.00;30.00;;10.00;;;;;;;;;;;;;;C 031,LBN 795;Flaming Star Nebula;;B-Mag taken from LEDA. +IC0406;Other;05:17:49.00;+39:53:09.7;Aur;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +IC0407;G;05:17:42.61;-15:31:24.4;Lep;1.93;0.36;164;14.20;;10.90;10.15;9.91;;Sc;;;;;;;;2MASX J05174261-1531240,IRAS 05154-1534,MCG -03-14-013,PGC 017056;;; +IC0408;**;05:18:04.14;-25:10:16.5;Lep;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC0409;GPair;05:19:33.55;+03:19:06.2;Ori;0.95;0.72;19;;;;;;23.63;E;;;;;;;;2MASX J05193366+0319036,MCG +01-14-024,PGC 017105;;; +IC0410;Dup;05:22:44.14;+33:24:43.3;Aur;;;;;;;;;;;;;;;1893;;;;;; +IC0411;G;05:20:18.61;-25:19:28.2;Lep;1.36;1.00;129;14.12;;10.89;10.18;9.92;23.53;S0;;;;;;;;2MASX J05201860-2519281,ESO 486-056,ESO-LV 486-0560,MCG -04-13-011,PGC 017130;;; +IC0412;G;05:21:56.70;+03:29:11.0;Ori;1.17;0.65;0;14.80;;;;;23.35;Sab;;;;;;2123;;MCG +01-14-034,PGC 017180,UGC 03298;;; +IC0413;G;05:21:58.78;+03:28:55.8;Ori;1.08;0.80;140;14.90;;10.75;10.12;9.80;23.58;S0;;;;;;2124;;2MASX J05215877+0328554,MCG +01-14-035,PGC 017181,UGC 03299;;; +IC0414;G;05:21:54.96;+03:20:31.3;Ori;0.60;0.44;140;14.90;14.40;12.20;11.43;11.16;22.63;E;;;;;;;;2MASX J05215497+0320314,IRAS 05192+0317,MCG +01-14-033,PGC 017179;;; +IC0415;G;05:21:21.63;-15:32:33.3;Lep;0.76;0.58;148;15.45;;12.41;11.76;11.44;;;;;;;;;;2MASX J05212161-1532332,IRAS 05190-1535,LEDA 2816473;;; +IC0416;G;05:23:56.38;-17:15:37.5;Lep;1.41;0.70;71;13.90;;11.71;11.10;10.91;;SBc;;;;;;;;2MASX J05235642-1715372,IRAS 05217-1718,MCG -03-14-014,PGC 017229,TYC 5919-141-1;;; +IC0417;HII;05:28:06.00;+34:25:26.2;Aur;13.00;10.00;;;;;;;;;;;;;;;;LBN 804;;; +IC0418;PN;05:27:28.19;-12:41:50.2;Lep;0.20;;;10.28;9.44;;;;;;;10.00;10.17;;;;BD -12 1172,HD 35914;IRAS 05251-1244,PK 215-24 1,PN G215.2-24.2,TYC 5340-684-1;;Identified as a planetary nebula in PKSCAT90 (version 1.01).; +IC0419;Other;05:30:52.02;+30:07:04.5;Aur;;;;;;;;;;;;;;;;;;;;Line of four Galactic stars.; +IC0420;Neb;05:32:09.50;-04:30:17.1;Ori;6.03;;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC0421;G;05:32:08.58;-07:55:06.0;Ori;2.96;2.22;108;12.60;;10.32;9.59;9.16;;Sbc;;;;;;;;2MASX J05320852-0755054,MCG -01-15-001,PGC 017407,UGCA 111;;; +IC0422;G;05:32:18.55;-17:13:25.9;Lep;1.04;0.93;130;;;10.74;10.05;9.77;;E;;;;;;2131;;2MASX J05321853-1713259,IRAS 05301-1715,MCG -03-15-001,PGC 017409;;; +IC0423;Neb;05:33:22.01;-00:36:52.2;Ori;6.00;3.50;;;;;;;;;;;;;;;;LBN 913;;;Dimensions from LEDA are wrong, so we pulled them from Simbad +IC0424;Neb;05:33:37.24;-00:24:47.3;Ori;2.50;1.70;;;;;;;;;;;;;;;;LBN 914;;;Dimensions from LEDA are wrong, values inferred by author +IC0425;Other;05:37:09.92;+32:25:46.8;Aur;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0426;Neb;05:36:31.38;-00:17:53.9;Ori;10.00;3.00;;;;;;;;;;;;;;;;LBN 921;;; +IC0427;Neb;05:36:18.02;-06:36:59.2;Ori;;;;;;;;;;;;;;;;;;;;; +IC0428;Neb;05:36:24.21;-06:27:05.6;Ori;;;;;;;;;;;;;;;;;;;;; +IC0429;Neb;05:38:18.86;-07:02:25.8;Ori;;;;;;;;;;;;;;;;;;;;; +IC0430;Neb;05:38:35.97;-07:04:59.2;Ori;10.96;;;;14.40;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC0431;RfN;05:40:14.03;-01:27:46.1;Ori;8.00;5.00;;;;;;;;;;;;;;;;LBN 944;;; +IC0432;RfN;05:40:55.98;-01:30:25.2;Ori;10.00;10.00;;;;;;;;;;;;;;;;LBN 946;;; +IC0433;G;05:40:31.35;-11:39:56.1;Lep;1.42;1.12;138;;;10.93;10.19;9.85;;E;;;;;;;;2MASX J05403134-1139561,MCG -02-15-008,PGC 017580;;; +IC0434;HII;05:41:00.88;-02:27:13.6;Ori;90.00;30.00;;11.00;;;;;;;;;;;;;;LBN 953;Flame Nebula,Orion B;The Horsehead Nebula is an absorption patch in this.;B-Mag taken from LEDA. +IC0435;RfN;05:43:00.57;-02:18:45.4;Ori;3.98;3.02;;;;;;;;;;;;;;;;BD -02 1350,HD 038087,HIP 026939;;;Dimensions taken from LEDA +IC0436;G;05:53:40.08;+38:37:29.2;Aur;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC0437;G;05:51:37.40;-12:33:53.9;Lep;0.97;0.46;7;15.28;;11.28;10.50;10.11;23.39;Sa;;;;;;;;2MASX J05513743-1233535,IRAS 05493-1234,LEDA 090030;;; +IC0438;G;05:53:00.08;-17:52:33.9;Lep;2.80;1.82;63;12.75;;10.59;9.93;9.70;23.70;SABc;;;;;;;;2MASX J05530007-1752337,ESO 555-009,ESO-LV 555-0090,IRAS 05508-1753,MCG -03-15-025,PGC 018047,UGCA 115;;This pair is made up of IC 0438 and IC 2151.; +IC0439;Other;05:56:39.51;+32:01:21.7;Aur;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0440;G;06:19:13.31;+80:04:06.5;Cam;1.77;1.00;36;14.30;;10.67;9.99;9.77;23.80;Sb;;;;;;;;2MASX J06191339+8004065,IRAS 06102+8005,MCG +13-05-021,PGC 018807,UGC 03427;;; +IC0441;G;06:02:42.63;-12:29:56.9;Lep;1.22;1.13;40;14.00;;11.81;11.02;10.84;23.50;Sc;;;;;;;;2MASX J06024268-1229575,MCG -02-16-001,PGC 018315;;; +IC0442;G;06:36:11.89;+82:58:05.7;Cam;1.25;1.25;5;13.70;;10.55;9.84;9.59;23.25;S0-a;;;;;;;;2MASX J06361228+8258088,MCG +14-04-003,PGC 019306,UGC 03470;;; +IC0443;SNR;06:16:37.41;+22:31:54.0;Gem;50.00;40.00;;12.00;;;;;;;;;;;;;;LBN 844,LEDA 2817561;Gem A;Incorrectly identified as IC 0433 in PKSCAT90 (version 1.01).;B-Mag taken from LEDA. +IC0444;RfN;06:18:34.00;+23:18:48.0;Gem;8.00;4.00;;7.03;;;;;;;;;;;;;;LBN 840;;;Coordinates provided by NED seem to point nothing, we consider right the coordinates from Simbad. +IC0445;G;06:37:21.25;+67:51:35.5;Cam;0.87;0.70;20;14.30;;11.42;10.72;10.44;22.81;S0;;;;;;;;2MASX J06372127+6751353,MCG +11-09-001,PGC 019328,UGC 03497;;; +IC0446;Cl+N;06:31:06.18;+10:27:33.4;Mon;5.00;4.00;;;;;;;;;;;;;;2167;;LBN 898, MWSC 0890;;; +IC0447;HII;06:31:00.32;+09:53:50.8;Mon;25.00;20.00;;7.70;;;;;;;;;;;;2169;;LBN 903;;; +IC0448;HII;06:32:45.34;+07:23:19.1;Mon;15.00;10.00;;;;;;;;;;;;;;;;LBN 931;;; +IC0449;G;06:45:41.11;+71:20:37.8;Cam;1.77;1.34;83;13.70;;10.40;9.66;9.45;23.80;E;;;;;;;;2MASX J06454107+7120378,MCG +12-07-014,PGC 019554,UGC 03515;;; +IC0450;G;06:52:12.25;+74:25:37.5;Cam;1.38;0.80;130;15.16;14.19;11.08;10.22;9.56;24.32;S0-a;;;;;;;;2MASX J06521236+7425372,IRAS 06457+7429,MCG +12-07-018,PGC 019756,UGC 03547;;One of two 6cm sources associated with [WB92] 0645+7429; +IC0451;G;06:52:52.01;+74:28:50.6;Cam;1.34;1.07;144;14.90;;11.09;10.36;10.05;23.97;SABb;;;;;;;;2MASX J06525198+7428506,MCG +12-07-019,PGC 019775,UGC 03550;;; +IC0452;Dup;06:48:39.11;-16:54:05.8;CMa;;;;;;;;;;;;;;;2296;;;;;; +IC0453;*;06:49:11.45;-16:54:24.3;CMa;;;;;;;;;;;;;;;;;;;;; +IC0454;G;06:51:06.30;+12:55:19.3;Gem;1.69;0.88;138;14.50;;10.46;9.66;9.39;23.97;SBab;;;;;;;;2MASX J06510628+1255193,IRAS 06482+1258,MCG +02-18-002,PGC 019725,UGC 03570;;; +IC0455;G;07:34:57.68;+85:32:13.9;Cep;1.06;0.65;78;14.30;;10.90;10.20;9.96;23.12;S0;;;;;;;;2MASX J07345760+8532138,MCG +14-04-033,PGC 021334,UGC 03815;;; +IC0456;G;07:00:17.54;-30:09:49.6;CMa;2.33;1.60;4;12.96;;9.82;9.10;8.86;23.60;S0;;;;;;;;2MASX J07001752-3009497,ESO 427-024,ESO-LV 427-0240,MCG -05-17-002,PGC 019993;;; +IC0457;Dup;07:09:28.40;+50:09:09.1;Lyn;;;;;;;;;;;;;;;2330;;;;;; +IC0458;G;07:10:34.15;+50:07:08.1;Lyn;0.90;0.39;173;14.40;;11.10;10.38;10.09;22.84;E-S0;;;;;;;;2MASX J07103411+5007081,MCG +08-13-085,PGC 020306,UGC 03713;;; +IC0459;G;07:10:38.69;+50:10:38.4;Lyn;0.59;0.49;1;15.50;;12.42;11.71;11.29;23.38;;;;;;;;;2MASX J07103863+5010377,PGC 020311;;; +IC0460;G;07:10:44.27;+50:12:08.8;Lyn;0.85;0.49;178;15.40;;11.88;11.32;10.92;23.77;;;;;;;;;2MASX J07104425+5012088,MCG +08-13-089,PGC 020318;;; +IC0461;G;07:10:45.04;+50:04:53.1;Lyn;0.63;0.48;36;15.70;;12.34;11.55;11.32;23.38;;;;;;;;;2MASX J07104502+5004528,MCG +08-13-088,PGC 020319;;; +IC0462;*;07:10:55.81;+50:10:51.0;Lyn;;;;;;;;;;;;;;;;;;;;IC 0462 is a Galactic star 13 arcsec southeast of 2MASX J07105477+5010569.; +IC0463;G;07:11:00.89;+50:07:03.7;Lyn;0.28;0.20;95;;;;;;;;;;;;;;;2MASX J07110091+5007039;;; +IC0464;G;07:11:04.75;+50:08:12.8;Lyn;0.80;0.37;60;14.80;;11.51;10.79;10.48;23.07;E;;;;;;;;2MASX J07110476+5008129,MCG +08-13-092,PGC 020332,PGC 020334;;; +IC0465;Dup;07:11:33.65;+50:14:53.7;Lyn;;;;;;;;;;;;;;;2334;;;;;; +IC0466;HII;07:08:38.80;-04:19:04.8;Mon;1.00;;;12.71;12.06;10.56;10.25;9.94;;;;;;;;;;2MASX J07083878-0419046,IRAS 07061-0414;;;Dimensions taken from LEDA +IC0467;G;07:30:18.39;+79:52:21.1;Cam;1.99;0.94;73;12.70;;10.75;10.28;10.04;22.80;SABc;;;;;;;;2MASX J07301840+7952209,IRAS 07218+7958,MCG +13-06-007,PGC 021164,UGC 03834;;; +IC0468;Other;07:17:19.00;-13:13:07.3;CMa;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC0469;G;07:55:59.08;+85:09:32.1;Cep;2.35;0.91;88;13.60;;10.07;9.25;9.11;23.47;SABa;;;;;;;;2MASX J07555910+8509320,MCG +14-04-038,PGC 022213,UGC 03994;;; +IC0470;**;07:23:31.50;+46:04:43.2;Lyn;;;;13.89;12.93;12.37;12.11;12.04;;;;;;;;;;;;;Formed by UCAC3 273-105055 + UCAC3 273-105054. Magnitudes referred to UCAC3 273-105055. +IC0471;G;07:43:36.45;+49:40:03.2;Lyn;0.66;0.66;23;14.20;;10.97;10.25;9.95;22.20;E;;;;;;;;2MASX J07433643+4940035,MCG +08-14-035,PGC 021659,SDSS J074336.44+494003.2,SDSS J074336.44+494003.4,SDSS J074336.45+494003.2,UGC 03982;;; +IC0472;G;07:43:50.34;+49:36:51.1;Lyn;1.61;1.15;166;14.50;;10.95;10.27;10.01;23.83;Sb;;;;;;;;2MASX J07435033+4936515,MCG +08-14-036,PGC 021665,SDSS J074350.34+493651.0,SDSS J074350.34+493651.1,SDSS J074350.35+493651.1,UGC 03985;;; +IC0473;Other;07:42:24.62;+09:15:19.0;CMi;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC0474;G;07:46:07.31;+26:30:18.4;Gem;1.27;0.40;113;15.20;;11.38;10.83;10.55;23.88;S0-a;;;;;;;;2MASX J07460729+2630188,MCG +04-19-001,PGC 021749,SDSS J074607.30+263018.3,SDSS J074607.31+263018.4;;; +IC0475;G;07:47:09.23;+30:29:19.7;Gem;0.75;0.45;133;14.90;;12.20;11.55;11.33;22.70;Sa;;;;;;;;2MASX J07470921+3029194,IRAS 07439+3036,MCG +05-19-005,PGC 021795,SDSS J074709.23+302919.6,SDSS J074709.24+302919.7;;; +IC0476;G;07:47:16.33;+26:57:03.5;Gem;0.62;0.48;99;15.50;;12.94;12.58;12.14;23.02;Sc;;;;;;;;2MASX J07471628+2657037,MCG +05-19-006,PGC 021796,SDSS J074716.33+265703.4,SDSS J074716.34+265703.5;;; +IC0477;G;07:52:06.93;+23:28:58.9;Gem;1.15;1.15;30;15.39;;11.32;10.64;10.32;24.56;E;;;;;;;;2MASX J07520692+2328583,PGC 022037,SDSS J075206.92+232858.8;;;B-Mag taken from LEDA. +IC0478;G;07:53:41.57;+26:29:33.7;Gem;0.66;0.48;12;15.20;;;;;22.90;Sb;;;;;;;;PGC 022109,SDSS J075341.56+262933.6,SDSS J075341.57+262933.6,SDSS J075341.57+262933.7;;; +IC0479;G;07:54:22.22;+27:00:31.8;Gem;0.61;0.51;171;15.00;;12.53;11.96;11.63;22.68;SABc;;;;;;;;2MASX J07542224+2700312,IRAS 07513+2708,MCG +05-19-020,PGC 022138,SDSS J075422.22+270031.6,SDSS J075422.22+270031.8;;; +IC0480;G;07:55:23.19;+26:44:36.0;Gem;1.75;0.33;167;15.04;;12.17;11.29;10.87;23.71;Sbc;;;;;;;;2MASX J07552302+2644459,IRAS 07523+2652,PGC 022188,SDSS J075523.19+264428.4,SDSS J075523.22+264428.0,SDSS J075523.23+264428.0,UGC 04096;;Multiple SDSS entries describe this object.;B-Mag taken from LEDA. +IC0481;G;07:59:02.86;+24:09:38.3;Gem;0.93;0.26;4;15.10;;11.95;11.19;10.90;22.81;Sb;;;;;;;;2MASX J07590282+2409378,MCG +04-19-013,PGC 022374,SDSS J075902.85+240938.2,SDSS J075902.86+240938.3,UGC 04130;;; +IC0482;G;07:59:47.28;+25:21:25.1;Cnc;0.63;0.52;151;15.00;;12.40;11.85;11.45;22.68;SABb;;;;;;;;2MASX J07594730+2521245,IRAS 07567+2529,MCG +04-19-016,PGC 022409,SDSS J075947.27+252125.0,SDSS J075947.28+252125.0,SDSS J075947.28+252125.1;;; +IC0483;**;07:59:52.38;+25:55:31.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC0484;G;08:00:01.06;+26:39:57.1;Cnc;0.89;0.40;43;15.30;;12.27;11.54;11.35;23.30;Sb;;;;;;;;2MASX J08000108+2639575,PGC 022419,SDSS J080001.06+263957.0,SDSS J080001.06+263957.1,SDSS J080001.07+263957.0;;; +IC0485;G;08:00:19.77;+26:42:05.2;Cnc;1.17;0.24;154;15.50;;11.90;11.17;10.85;23.80;SABa;;;;;;;;2MASX J08001977+2642053,IRAS 07572+2650,PGC 022443,SDSS J080019.76+264205.1,SDSS J080019.77+264205.2,UGC 04156;;; +IC0486;G;08:00:20.98;+26:36:48.7;Cnc;0.87;0.66;138;17.05;16.36;11.51;10.83;10.50;22.95;SBa;;;;;;;;2MASX J08002097+2636483,IRAS 07572+2645,MCG +04-19-018,PGC 022445,SDSS J080020.98+263648.6,SDSS J080020.98+263648.7,SDSS J080020.99+263648.7,UGC 04155;;; +IC0487;Dup;07:59:07.14;-00:38:16.5;Mon;;;;;;;;;;;;;;;2494;;;;;; +IC0488;Other;08:00:49.51;+25:54:06.7;Cnc;;;;;;;;;;;;;;;;;;SDSS J080049.51+255406.7;;Faint galaxy + Galactic star. Identity as IC 0488 is not certain.; +IC0489;*;08:01:37.74;+25:59:47.0;Cnc;;;;;;;;;;;;;;;;;;;;; +IC0490;G;08:03:20.12;+25:48:41.1;Cnc;0.59;0.47;95;15.60;;12.90;12.20;11.91;23.08;Sbc;;;;;;;;2MASX J08032012+2548411,PGC 022607,SDSS J080320.11+254841.0,SDSS J080320.11+254841.1,SDSS J080320.12+254841.0,SDSS J080320.12+254841.1;;; +IC0491;G;08:03:55.00;+26:31:14.2;Cnc;0.65;0.28;115;15.30;;13.03;12.20;11.92;22.72;Sc;;;;;;;;2MASX J08035500+2631143,PGC 022631;;; +IC0492;G;08:05:38.66;+26:10:05.5;Cnc;1.02;0.77;31;17.83;17.19;11.75;11.07;10.70;22.88;SBbc;;;;;;;;2MASX J08053868+2610058,MCG +04-19-024,PGC 022724,SDSS J080538.66+261005.4,SDSS J080538.66+261005.5,UGC 04212;;; +IC0493;G;08:07:27.59;+25:08:02.5;Cnc;0.81;0.61;18;14.80;;11.99;11.27;10.96;22.86;Sb;;;;;;;;2MASX J08072763+2507585,IRAS 08044+2516,MCG +04-19-026,PGC 022795,SDSS J080727.58+250802.4,SDSS J080727.58+250802.5,SDSS J080727.59+250802.5;;; +IC0494;G;08:06:24.12;+01:02:09.8;CMi;1.32;0.64;48;14.30;;10.95;10.22;10.00;23.57;S0;;;;;;;;2MASX J08062413+0102097,MCG +00-21-004,PGC 022755,SDSS J080624.10+010209.7,UGC 04224;;; +IC0495;G;08:08:19.42;+09:00:50.0;Cnc;0.47;0.40;88;15.40;;12.07;11.43;11.06;;E;;;;;;;;2MASX J08081938+0900499,PGC 022841,SDSS J080819.42+090049.9,SDSS J080819.42+090050.0;;; +IC0496;G;08:09:44.16;+25:52:53.8;Cnc;0.63;0.39;30;14.70;;12.32;11.60;11.33;23.06;E-S0;;;;;;2229;;2MASX J08094417+2552542,LEDA 093095,MCG +04-19-028 NED01,SDSS J080944.15+255253.7;;"CGCG and MCG misprint name as ""IC 495""."; +IC0497;G;08:10:06.07;+24:55:19.5;Cnc;0.78;0.39;177;15.17;14.26;11.97;11.26;11.02;22.98;Sa;;;;;;;;2MASX J08100603+2455194,IRAS 08070+2503,MCG +04-20-001,PGC 022918,SDSS J081006.06+245519.5,SDSS J081006.07+245519.5;;; +IC0498;G;08:09:30.27;+05:16:50.5;CMi;1.21;1.08;66;14.60;;11.86;11.33;10.76;23.63;Sb;;;;;;;;2MASX J08093029+0516503,MCG +01-21-015,PGC 022895,SDSS J080930.26+051650.5,UGC 04255;;; +IC0499;G;08:45:17.30;+85:44:24.1;Cam;1.88;0.90;77;13.50;;10.29;9.58;9.38;23.56;Sa;;;;;;;;2MASX J08451691+8544237,MCG +14-04-054,PGC 024602,UGC 04463;;; +IC0500;G;08:12:39.60;-16:03:02.9;Pup;1.77;0.71;54;;;10.72;10.04;9.75;;S0-a;;;;;;;;2MASX J08123960-1603028,MCG -03-21-007,PGC 023011;;; +IC0501;G;08:18:47.59;+24:32:14.7;Cnc;0.73;0.55;125;15.50;;12.76;12.02;11.85;23.43;SBa;;;;;;;;2MASX J08184761+2432146,PGC 023305,SDSS J081847.58+243214.7,SDSS J081847.59+243214.7;;; +IC0502;G;08:22:03.61;+08:45:09.4;Cnc;0.56;0.54;62;15.40;;12.37;11.73;11.49;23.02;E;;;;;;;;2MASX J08220358+0845096,PGC 023469,SDSS J082203.60+084509.3;;; +IC0503;G;08:22:10.68;+03:16:05.0;Hya;1.33;1.03;110;14.00;;13.50;11.08;10.54;23.51;Sa;;;;;;;;2MASX J08221069+0316045,IRAS 08195+0325,MCG +01-22-004,PGC 023474,SDSS J082210.58+031604.4,SDSS J082210.68+031604.9,SDSS J082210.68+031605.0,UGC 04366;;; +IC0504;G;08:22:41.20;+04:15:44.7;Hya;1.51;1.09;139;14.30;;10.58;9.92;9.63;23.84;S0;;;;;;;;2MASX J08224116+0415443,MCG +01-22-005,PGC 023495,SDSS J082241.19+041544.7,UGC 04372;;; +IC0505;G;08:23:21.67;+04:22:20.9;Hya;1.38;0.99;144;14.80;;11.03;10.28;9.98;23.63;Sab;;;;;;;;2MASX J08232169+0422207,MCG +01-22-008,PGC 023528,SDSS J082321.66+042220.8,SDSS J082321.66+042220.9,SDSS J082321.67+042220.9,UGC 04382;;; +IC0506;G;08:23:30.73;+04:17:58.2;Hya;1.19;0.86;171;14.70;;11.53;10.87;10.54;23.92;E;;;;;;;;2MASX J08233072+0417587,MCG +01-22-009,PGC 023536,SDSS J082330.72+041758.2;;; +IC0507;Dup;08:25:02.00;-00:35:29.0;Hya;;;;;;;;;;;;;;;2590;;;;;; +IC0508;G;08:28:22.31;+25:07:29.0;Cnc;0.79;0.70;97;14.80;;12.30;11.66;11.35;22.91;SBc;;;;;;;;2MASX J08282250+2507300,IRAS 08253+2517,MCG +04-20-063,PGC 023762,SDSS J082822.30+250728.9,SDSS J082822.31+250729.0;;; +IC0509;G;08:32:03.50;+24:00:39.3;Cnc;1.02;0.92;57;14.60;;12.14;11.53;11.10;22.53;SABc;;;;;;;;2MASX J08320355+2400391,MCG +04-20-066,PGC 023936,SDSS J083203.49+240039.2,SDSS J083203.50+240039.3,UGC 04456;;; +IC0510;GPair;08:32:10.60;-02:09:44.0;Hya;0.80;;;;;;;;;;;;;;;;;MCG +00-22-015,UGC 04460;;;Diameter of the group inferred by the author. +IC0510 NED01;G;08:32:10.19;-02:09:43.6;Hya;;;;;;;;;;;;;;;;;;MCG +00-22-015 NED01,PGC 200242,UGC 04460 NED01;;;No data available in LEDA +IC0510 NED02;G;08:32:10.93;-02:09:44.6;Hya;0.91;0.52;137;15.20;;12.27;11.77;11.53;23.29;SBbc;;;;;;;;2MASX J08321093-0209444,MCG +00-22-015 NED02,PGC 023940,UGC 04460 NED02;;; +IC0511;G;08:40:50.45;+73:29:12.0;Cam;1.22;0.46;142;14.50;;11.03;10.40;10.19;23.32;S0-a;;;;;;;;2MASX J08405044+7329118,MCG +12-09-003,PGC 024397,UGC 04510;;; +IC0512;G;09:03:49.83;+85:30:06.1;Cam;1.72;1.34;174;13.20;;10.85;10.23;9.93;22.93;SABc;;;;;;;;2MASX J09034969+8530060,IRAS 08508+8541,MCG +14-05-002,PGC 025451,UGC 04646;;; +IC0513;G;08:33:05.06;-12:21:20.0;Hya;1.49;1.00;39;14.59;;11.02;10.26;9.96;24.11;S0;;;;;;;;2MASX J08330507-1221200,MCG -02-22-019,PGC 023983;;;B-Mag taken from LEDA. +IC0514;G;08:35:22.28;-02:02:49.4;Hya;0.57;0.34;160;15.30;;12.87;12.02;11.82;22.94;S0-a;;;;;;;;2MASX J08352226-0202492,PGC 024119;;; +IC0515;G;08:35:31.29;-01:54:04.0;Hya;1.04;0.58;34;15.60;;11.67;10.97;10.69;24.28;S0-a;;;;;;;;2MASX J08353128-0154032,PGC 024125,UGC 04488;;; +IC0516;G;08:35:50.77;-01:52:16.4;Hya;0.59;0.30;65;15.70;;12.68;11.98;11.59;23.52;S0-a;;;;;;;;2MASX J08355077-0152161,PGC 024155;;; +IC0517;G;08:36:22.10;-02:03:20.0;Hya;0.61;0.34;29;15.40;;13.14;12.29;11.96;22.82;Sab;;;;;;;;2MASX J08362210-0203200,PGC 024179;;; +IC0518;Other;08:36:06.95;+00:41:33.3;Hya;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0519;G;08:40:34.41;+02:36:40.8;Hya;0.50;0.48;28;15.40;;11.93;11.18;10.91;23.29;E;;;;;;;;2MASX J08403443+0236404,PGC 024389,SDSS J084034.40+023640.7,SDSS J084034.41+023640.7,SDSS J084034.41+023640.8;;; +IC0520;G;08:53:42.26;+73:29:27.4;Cam;2.10;1.63;175;11.90;;9.67;9.00;8.72;22.87;SABa;;;;;;;;2MASX J08534227+7329273,IRAS 08483+7340,MCG +12-09-026,PGC 024970,UGC 04630;;; +IC0521;G;08:46:43.96;+02:32:14.7;Hya;0.93;0.67;80;14.80;;11.45;10.71;10.39;23.25;S?;;;;;;;;2MASX J08464397+0232144,MCG +01-23-002,PGC 024658,SDSS J084643.96+023214.7;;; +IC0522;G;08:54:34.91;+57:10:00.2;UMa;1.24;1.02;165;13.97;;10.95;10.28;9.97;23.10;S0;;;;;;;;2MASX J08543491+5709598,MCG +10-13-031,PGC 025009,SDSS J085434.90+571000.4,SDSS J085434.91+571000.1,SDSS J085434.91+571000.2,SDSS J085434.92+571000.1,UGC 04654;;; +IC0523;G;08:53:11.32;+09:08:53.4;Cnc;0.86;0.56;95;15.00;;12.38;11.66;11.48;23.25;Sab;;;;;;;;2MASX J08531133+0908530,MCG +02-23-009,PGC 024948,SDSS J085311.31+090853.3,SDSS J085311.32+090853.3,SDSS J085311.32+090853.4,SDSS J085311.33+090853.3,UGC 04652;;; +IC0524;G;08:58:12.83;-19:11:30.9;Hya;0.94;0.63;21;15.01;;11.30;10.53;10.29;23.65;S0;;;;;;;;2MASX J08581284-1911304,ESO 564-001,ESO-LV 564-0010,PGC 025198;;; +IC0525;G;09:01:22.47;-01:51:14.3;Hya;0.95;0.33;10;14.90;;12.54;11.88;11.65;22.95;Sbc;;;;;;;;2MASX J09012249-0151147,MCG +00-23-019,PGC 025344,UGC 04735;;; +IC0526;G;09:02:40.78;+10:50:29.9;Cnc;0.77;0.45;41;14.70;;12.41;11.76;11.41;22.71;Sb;;;;;;;;2MASX J09024074+1050293,IRAS 08599+1102,MCG +02-23-022,PGC 025401,SDSS J090240.76+105029.2,SDSS J090240.77+105029.2;;; +IC0527;G;09:09:41.78;+37:36:05.7;Lyn;1.37;1.13;71;14.60;;11.39;10.73;10.27;23.95;SBc;;;;;;;;2MASX J09094175+3736060,MCG +06-20-039,PGC 025821,SDSS J090941.77+373605.6,SDSS J090941.77+373605.7,SDSS J090941.78+373605.7,UGC 04810;;; +IC0528;G;09:09:22.55;+15:47:46.2;Cnc;1.39;0.62;162;15.14;;11.92;11.23;10.92;23.96;Sab;;;;;;;;2MASX J09092254+1547458,MCG +03-24-001,PGC 025783,SDSS J090922.55+154746.1,UGC 04811;;; +IC0529;G;09:18:32.80;+73:45:33.6;Cam;3.21;1.53;142;12.00;;10.16;9.54;9.48;23.25;Sc;;;;;;;;2MASX J09183278+7345335,IRAS 09134+7358,MCG +12-09-035,PGC 026295,UGC 04888;;; +IC0530;G;09:15:16.97;+11:53:08.5;Cnc;1.93;0.31;87;14.30;;10.94;10.23;9.91;23.36;Sab;;;;;;;;2MASX J09151695+1153083,MCG +02-24-003,PGC 026101,SDSS J091516.96+115308.4,UGC 04880;;; +IC0531;G;09:17:50.81;-00:16:42.5;Hya;0.79;0.42;60;14.44;;11.91;11.02;10.67;22.73;Sab;;;;;;;;2MASX J09175079-0016418,IRAS 09152-0004,MCG +00-24-006,PGC 026258,SDSS J091750.79-001642.3,SDSS J091750.80-001642.5,UGC 04923;;; +IC0532;Other;09:19:03.76;-16:45:17.8;Hya;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0533;G;09:20:23.40;-03:59:31.3;Hya;0.95;0.27;155;15.72;;12.46;11.72;11.56;24.35;;;;;;;;;2MASX J09202341-0359313,LEDA 3081596;;; +IC0534;G;09:21:15.45;+03:09:04.1;Hya;1.19;0.31;148;15.10;;13.13;12.58;12.49;23.44;Sb;;;;;;;;2MASX J09211543+0309036,PGC 026471,SDSS J092115.42+030904.1,SDSS J092115.44+030904.0,SDSS J092115.45+030904.1,UGC 04968;;; +IC0535;G;09:22:16.22;-01:02:25.2;Hya;0.65;0.53;5;15.60;;12.42;11.66;11.42;23.73;E;;;;;;;;2MASX J09221622-0102248,PGC 026524,SDSS J092216.22-010225.2;;; +IC0536;G;09:24:40.10;+25:06:36.7;Leo;1.09;0.22;24;15.30;;11.50;10.75;10.49;23.34;Sa;;;;;;;;2MASX J09244012+2506365,MCG +04-22-045,PGC 026669,SDSS J092440.09+250636.6,SDSS J092440.10+250636.6,SDSS J092440.10+250636.7,UGC 05006;;; +IC0537;G;09:25:22.61;-12:23:30.4;Hya;1.32;1.22;160;14.15;;10.64;9.98;9.71;23.40;S0-a;;;;;;;;2MASX J09252259-1223294,IRAS 09229-1210,MCG -02-24-020,PGC 026717;;;B-Mag taken from LEDA. +IC0538;Dup;09:27:18.51;+23:01:12.4;Leo;;;;;;;;;;;;;;;2885;;;;;; +IC0539;G;09:29:08.24;-02:32:56.9;Hya;0.97;0.73;130;14.30;;11.62;10.96;10.70;22.80;Sc;;;;;;;;2MASX J09290823-0232573,IRAS 09266-0219,MCG +00-24-017,PGC 026909,SDSS J092908.23-023256.8,UGC 05054;;; +IC0540;G;09:30:10.33;+07:54:09.9;Leo;1.07;0.27;171;14.80;;11.47;10.73;10.52;22.81;Sab;;;;;;;;2MASX J09301026+0754091,MCG +01-24-025,PGC 026968,SDSS J093010.33+075409.9,UGC 05064;;; +IC0541;Other;09:30:30.79;-04:15:13.2;Hya;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0542;G;09:31:06.22;-13:10:52.9;Hya;1.21;0.39;95;15.02;;11.64;10.88;10.52;23.74;S0-a;;;;;;;;2MASX J09310624-1310525,IRAS 09286-1257,MCG -02-24-031,PGC 027012;;;B-Mag taken from LEDA. +IC0543;Other;09:31:09.10;-14:46:21.0;Hya;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0544;G;09:35:53.38;+24:53:41.5;Leo;0.80;0.25;24;15.30;;12.82;12.10;11.79;22.93;Sbc;;;;;;;;2MASX J09355338+2453420,IRAS 09330+2507,MCG +04-23-012,PGC 027293,SDSS J093553.37+245341.4,SDSS J093553.37+245341.5,SDSS J093553.38+245341.5;;; +IC0545;G;09:36:05.36;+24:56:56.2;Leo;0.56;0.42;44;14.80;;12.97;12.35;12.38;22.36;Sab;;;;;;;;2MASX J09360536+2456561,IRAS 09332+2510,MCG +04-23-013,PGC 027307;;; +IC0546;G;09:34:50.24;-16:23:03.9;Hya;1.27;0.70;103;14.83;;11.23;10.66;10.53;23.84;S0-a;;;;;;;;2MASX J09345025-1623036,MCG -03-25-007,PGC 027234;;Star (mag. 15) superposed 13 arcsec north of nucleus.;B-Mag taken from LEDA. +IC0547;Dup;09:36:05.79;-12:26:12.2;Hya;;;;;;;;;;;;;;;2947;;;;;; +IC0548;G;09:38:19.30;+09:26:45.5;Leo;0.76;0.19;166;15.30;;12.28;11.49;11.28;23.13;S0-a;;;;;;;;2MASX J09381929+0926458,PGC 027463,SDSS J093819.29+092645.5,SDSS J093819.30+092645.5;;; +IC0549;G;09:40:43.23;+03:57:35.1;Sex;0.60;0.37;180;14.80;;13.81;13.05;12.54;22.36;I;;;;;;;;2MASX J09404325+0357349,MCG +01-25-010,PGC 027622,SDSS J094043.19+035734.9;;; +IC0550;G;09:40:28.58;-06:56:45.8;Sex;1.07;0.70;34;14.50;;11.41;10.76;10.55;23.62;S0;;;;;;;;2MASX J09402859-0656459,MCG -01-25-014,PGC 027607;;; +IC0551;G;09:41:00.11;+06:56:09.9;Leo;0.81;0.53;155;14.50;;11.88;11.23;10.86;22.63;Sbc;;;;;;;;2MASX J09410011+0656098,MCG +01-25-012,PGC 027645,SDSS J094100.10+065609.9,SDSS J094100.11+065609.9,UGC 05168;;; +IC0552;G;09:41:16.57;+10:38:49.2;Leo;1.12;0.63;2;14.50;;11.19;10.47;10.22;23.36;S0;;;;;;;;2MASX J09411656+1038489,MCG +02-25-017,PGC 027665,SDSS J094116.56+103849.1,SDSS J094116.57+103849.1,SDSS J094116.57+103849.2,UGC 05171;;; +IC0553;G;09:40:45.13;-05:26:07.3;Sex;1.07;0.85;118;14.45;;11.65;11.03;10.68;23.30;SBa;;;;;;;;2MASX J09404513-0526074,MCG -01-25-016,PGC 027625;;;B-Mag taken from LEDA. +IC0554;G;09:41:56.89;+12:17:46.6;Leo;1.29;0.57;18;14.40;;11.42;10.66;10.44;23.61;S0;;;;;;0555;;2MASX J09415692+1217468,MCG +02-25-020,PGC 027716,SDSS J094156.89+121746.6,UGC 05178;;; +IC0555;Dup;09:41:56.89;+12:17:46.6;Leo;;;;;;;;;;;;;;;;0554;;;;; +IC0556;Dup;09:43:40.38;+11:03:39.1;Leo;;;;;;;;;;;;;;;2984;;;;;; +IC0557;G;09:44:02.40;+10:59:17.2;Leo;1.11;0.64;38;14.70;;11.91;11.24;10.92;23.31;SBab;;;;;;;;2MASX J09440241+1059174,MCG +02-25-027,PGC 027866,SDSS J094402.40+105917.1,SDSS J094402.40+105917.2;;; +IC0558;G;09:45:00.35;+29:27:08.3;Leo;0.93;0.72;165;14.90;13.90;11.62;10.89;10.61;23.60;E;;;;;;;;2MASX J09450033+2927079,MCG +05-23-033,PGC 027931,SDSS J094500.34+292708.2,SDSS J094500.35+292708.2,SDSS J094500.35+292708.3;;; +IC0559;G;09:44:43.89;+09:36:54.0;Leo;1.09;0.92;87;15.00;;;;;23.60;I;;;;;;;;MCG +02-25-029,PGC 027910,SDSS J094443.89+093654.0;;Multiple SDSS entries describe this source.; +IC0560;G;09:45:53.44;-00:16:05.9;Sex;1.41;0.54;20;14.60;;10.93;10.30;10.12;23.80;S0-a;;;;;;;;2MASX J09455343-0016055,MCG +00-25-013,PGC 027998,SDSS J094553.43-001605.9,TYC 4895-1899-1,UGC 05223;;; +IC0561;G;09:45:58.81;+03:08:42.7;Sex;0.51;0.42;6;15.00;;12.79;12.29;11.72;22.38;Sc;;;;;;;;2MASX J09455879+0308429,MCG +01-25-019,PGC 028002,SDSS J094558.80+030842.7,SDSS J094558.81+030842.6,SDSS J094558.81+030842.7;;; +IC0562;G;09:46:03.90;-03:58:16.2;Sex;1.22;0.28;162;14.67;;11.94;11.21;10.87;23.06;Sbc;;;;;;;;2MASX J09460402-0358186,IRAS 09435-0344,MCG -01-25-036,PGC 028011;;; +IC0563;G;09:46:20.35;+03:02:44.1;Sex;0.97;0.40;111;14.70;;11.88;11.12;10.81;23.04;Sab;;;;;;;;2MASX J09462036+0302438,MCG +01-25-022,PGC 028032,SDSS J094620.34+030244.1,SDSS J094620.35+030244.1,UGC 05230 NOTES01;;; +IC0564;G;09:46:21.08;+03:04:16.9;Sex;1.64;0.45;68;14.10;;11.19;10.45;10.03;22.94;SABc;;;;;;;;2MASX J09462109+0304168,MCG +01-25-023,PGC 028033,SDSS J094621.07+030416.9,SDSS J094621.08+030416.9,UGC 05230;;; +IC0565;GPair;09:47:50.76;+15:51:09.2;Leo;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC0565 NED01;G;09:47:49.67;+15:51:07.3;Leo;0.68;0.16;178;16.74;;;;;;;;;;;;;;2MASX J09474970+1551068,SDSS J094749.66+155107.2,UGC 05248 NOTES01;;;B-Mag taken from LEDA +IC0565 NED02;G;09:47:50.53;+15:51:06.8;Leo;1.24;0.27;51;15.10;;11.98;11.23;10.83;23.27;Sc;;;;;;;;2MASX J09475018+1551043,MCG +03-25-028,PGC 028159,UGC 05248;;; +IC0566;G;09:49:56.39;-00:13:52.9;Sex;0.60;0.53;84;15.50;;12.04;11.32;11.12;23.00;S0-a;;;;;;;;2MASX J09495641-0013529,PGC 028279,SDSS J094956.38-001352.8,SDSS J094956.38-001352.9,SDSS J094956.39-001352.9;;; +IC0567;*;09:50:33.78;+12:47:05.0;Leo;;;;;;;;;;;;;;;;;;SDSS J095033.78+124705.0;;; +IC0568;G;09:51:08.33;+15:43:49.6;Leo;1.07;0.64;106;14.80;;11.72;11.15;10.56;23.37;Sb;;;;;;;;2MASX J09510833+1543497,IRAS 09484+1557,MCG +03-25-031,PGC 028368,SDSS J095108.32+154349.5,UGC 05285;;; +IC0569;G;09:51:28.15;+10:55:12.2;Leo;0.78;0.54;164;15.10;;12.07;11.31;11.39;23.62;E;;;;;;;;2MASX J09512817+1055117,MCG +02-25-048,PGC 028391,SDSS J095128.14+105512.2,SDSS J095128.15+105512.1,SDSS J095128.15+105512.2;;; +IC0570;G;09:51:50.98;+15:45:20.7;Leo;0.46;0.34;61;15.60;;13.23;12.36;12.28;22.98;Sc;;;;;;;;2MASX J09515095+1545203,MCG +03-25-032,PGC 028407,SDSS J095150.98+154520.6;;; +IC0571;G;09:52:31.57;+15:46:31.6;Leo;0.71;0.54;133;15.30;;11.86;11.07;10.71;23.27;SBab;;;;;;;;2MASX J09523158+1546316,MCG +03-25-035,PGC 028445,SDSS J095231.57+154631.6;;; +IC0572;G;09:52:32.81;+15:49:36.7;Leo;0.54;0.53;130;14.80;;12.05;11.36;11.05;22.47;Sc;;;;;;;;2MASX J09523282+1549366,MCG +03-25-036,PGC 028456,SDSS J095232.81+154936.6,SDSS J095232.81+154936.7;;; +IC0573;Dup;09:53:36.17;-12:28:55.6;Hya;;;;;;;;;;;;;;;3058 NED02;;;;;; +IC0574;G;09:54:27.03;-06:57:12.2;Sex;1.05;0.87;4;14.80;;10.76;10.05;9.79;23.57;E-S0;;;;;;;;2MASX J09542701-0657122,MCG -01-25-056,PGC 028569;;;B-Mag taken from LEDA. +IC0575;G;09:54:32.93;-06:51:27.2;Sex;1.52;1.17;50;14.31;;10.60;9.87;9.51;23.68;Sa;;;;;;;;2MASX J09543292-0651273,MCG -01-25-058,PGC 028575;;;B-Mag taken from LEDA. +IC0576;G;09:55:07.04;+11:02:22.4;Leo;0.59;0.51;168;16.00;;12.67;11.87;11.65;23.13;S0-a;;;;;;;;2MASX J09550702+1102226,PGC 028603,SDSS J095507.02+110222.3,SDSS J095507.03+110222.3,SDSS J095507.04+110222.4;;; +IC0577;G;09:56:03.97;+10:29:55.9;Leo;0.62;0.57;117;14.40;;12.45;11.83;11.52;22.51;Sc;;;;;;;;2MASX J09560399+1029559,MCG +02-26-001,PGC 028662,SDSS J095603.96+102955.8,SDSS J095603.97+102955.8,SDSS J095603.97+102955.9,UGC 05334;;; +IC0578;G;09:56:16.15;+10:29:09.9;Leo;1.25;0.54;66;14.70;;11.99;11.29;10.94;23.66;Sa;;;;;;;;2MASX J09561613+1029099,IRAS 09535+1043,MCG +02-26-002,PGC 028674,SDSS J095616.14+102909.8,SDSS J095616.14+102909.9,SDSS J095616.15+102909.8,SDSS J095616.15+102909.9,UGC 05337;;; +IC0579;G;09:56:39.42;-13:46:29.6;Hya;1.12;0.41;132;15.15;;11.86;11.08;10.70;23.40;SBab;;;;;;;;2MASX J09563939-1346295,IRAS 09542-1332,MCG -02-26-005,PGC 028702;;Identity as IC 0579 is not certain.;B-Mag taken from LEDA. +IC0580;Dup;09:57:56.70;+10:25:56.8;Leo;;;;;;;;;;;;;;;3069;;;;;; +IC0581;G;09:58:11.58;+15:56:49.1;Leo;1.00;0.71;129;15.00;;11.87;11.16;10.91;23.53;Sab;;;;;;;;2MASX J09581155+1556490,MCG +03-26-008,MCG +03-26-008 NOTES01,PGC 028800,SDSS J095811.57+155649.0,SDSS J095811.58+155649.1,UGC 05352;;; +IC0582;G;09:59:00.23;+17:49:01.7;Leo;0.97;0.91;85;14.70;;11.91;11.26;10.98;23.22;Sb;;;;;;;;2MASX J09590018+1749021,MCG +03-26-011,PGC 028838,SDSS J095900.22+174901.6,SDSS J095900.22+174901.7,SDSS J095900.23+174901.7,UGC 05362;;; +IC0583;G;09:59:05.08;+17:49:17.2;Leo;0.89;0.19;113;15.20;;11.98;11.19;10.79;22.84;Sab;;;;;;;;2MASX J09590508+1749171,MCG +03-26-012,PGC 028844,SDSS J095905.07+174917.1,SDSS J095905.07+174917.2,SDSS J095905.08+174917.2,UGC 05363;;; +IC0584;G;09:59:05.13;+10:21:40.1;Leo;0.50;0.43;149;14.70;;13.32;12.79;12.46;22.54;Sa;;;;;;;;2MASX J09590512+1021399,MCG +02-26-010,PGC 028839,SDSS J095905.12+102140.0,SDSS J095905.13+102140.1;;; +IC0585;G;09:59:44.12;+12:59:18.9;Leo;1.21;0.86;123;14.80;;11.67;10.90;10.63;24.01;E-S0;;;;;;;;2MASX J09594411+1259192,MCG +02-26-014,PGC 028897,SDSS J095944.12+125918.8,SDSS J095944.12+125918.9,UGC 05371;;UGC misprints R.A. as 09h57.1m. UGC galactic coordinates are correct.; +IC0586;G;09:59:50.30;-06:55:22.2;Sex;0.76;0.70;55;15.16;;11.71;10.99;10.78;23.42;E;;;;;;;;2MASX J09595028-0655218,MCG -01-26-004,PGC 028906;;;B-Mag taken from LEDA. +IC0587;G;10:03:05.17;-02:24:00.1;Sex;1.25;0.56;106;14.14;;11.94;11.19;10.67;22.96;SABb;;;;;;;;2MASX J10030519-0224005,IRAS 10005-0209,MCG +00-26-012,PGC 029127,SDSS J100305.17-022400.0,UGC 05411;;; +IC0588;G;10:02:07.04;+03:03:27.7;Sex;0.90;0.53;164;14.82;14.25;12.04;11.41;11.06;23.43;Sa;;;;;;;;2MASX J10020701+0303277,MCG +01-26-010,PGC 029057,SDSS J100207.03+030327.6,SDSS J100207.04+030327.6,SDSS J100207.04+030327.7,UGC 05399;;; +IC0589;G;10:04:23.90;-05:40:44.1;Sex;0.69;0.51;20;15.43;;12.00;11.36;11.03;23.42;E;;;;;;;;2MASX J10042392-0540440,LEDA 154597;;; +IC0590;GPair;10:05:50.23;+00:37:58.6;Sex;0.90;;;;;;;;;;;;;;;;;MCG +00-26-018,UGC 05443;;;Diameter of the group inferred by the author. +IC0590 NED01;G;10:05:49.83;+00:38:00.1;Sex;1.06;0.78;105;14.20;;10.85;10.35;9.91;23.47;E-S0;;;;;;;;2MASX J10054983+0038001,MCG +00-26-018 NED01,PGC 029316,SDSS J100549.83+003800.0,SDSS J100549.83+003800.1,UGC 05443 NED01;;; +IC0590 NED02;G;10:05:50.67;+00:37:54.5;Sex;0.79;0.76;33;14.97;;;;;23.20;E-S0;;;;;;;;MCG +00-26-018 NED02,PGC 093102,SDSS J100550.66+003754.4,SDSS J100550.66+003754.5,SDSS J100550.67+003754.4,SDSS J100550.67+003754.5,UGC 05443 NED02;;; +IC0591;G;10:07:27.69;+12:16:28.2;Leo;0.93;0.60;164;14.00;;12.16;11.60;11.27;22.65;SBc;;;;;;;;2MASX J10072771+1216282,IRAS 10047+1231,MCG +02-26-025,PGC 029435,SDSS J100727.69+121628.1,SDSS J100727.69+121628.2,UGC 05458;;; +IC0592;G;10:07:58.75;-02:29:50.1;Sex;0.92;0.75;26;14.00;;;;;22.63;Sbc;;;;;;;;MCG +00-26-020,PGC 029465,UGC 05465;;; +IC0593;G;10:08:18.01;-02:31:36.5;Sex;0.81;0.58;97;14.20;;12.58;11.82;11.36;22.51;Sbc;;;;;;;;2MASX J10081797-0231361,MCG +00-26-021,PGC 029482,SDSS J100818.00-023136.4,UGC 05469;;; +IC0594;G;10:08:32.00;-00:40:00.7;Sex;1.11;0.56;131;14.70;;12.05;11.33;11.36;23.23;Sbc;;;;;;;;2MASX J10083197-0040003,MCG +00-26-023,PGC 029496,SDSS J100831.99-004000.6,SDSS J100831.99-004000.7,SDSS J100831.99-004000.8,SDSS J100832.00-004000.7,UGC 05472;;; +IC0595;G;10:09:38.12;+11:00:00.9;Leo;0.81;0.58;172;15.10;;12.13;11.36;11.39;23.70;E;;;;;;;;2MASX J10093816+1100010,PGC 029555,SDSS J100938.11+110000.8,SDSS J100938.11+110000.9,SDSS J100938.12+110000.8,SDSS J100938.12+110000.9,SDSS J100938.13+110000.8;;; +IC0596;G;10:10:31.35;+10:02:32.6;Leo;0.96;0.31;18;15.00;;12.07;11.33;10.95;23.12;Sbc;;;;;;;;2MASX J10103136+1002323,MCG +02-26-030,PGC 029621,SDSS J101031.34+100232.5,SDSS J101031.35+100232.5,SDSS J101031.35+100232.6;;; +IC0597;G;10:10:11.96;-06:53:57.3;Sex;0.50;0.23;170;15.57;;12.15;11.47;11.25;23.11;S0-a;;;;;;;;2MASX J10101201-0653564,LEDA 154761;;; +IC0598;G;10:12:48.57;+43:08:43.9;UMa;1.65;0.41;7;13.80;;11.05;10.40;10.15;23.28;S0-a;;;;;;;;2MASX J10124858+4308439,MCG +07-21-016,PGC 029745,SDSS J101248.56+430843.9,SDSS J101248.57+430843.9,UGC 05502;;; +IC0599;G;10:13:12.51;-05:37:44.4;Sex;1.17;0.29;36;15.25;;12.38;11.66;11.37;23.04;Sc;;;;;;;;2MASX J10131251-0537445,MCG -01-26-032,PGC 029771;;; +IC0600;G;10:17:10.91;-03:29:52.0;Sex;1.92;1.03;13;16.40;16.30;12.13;11.64;11.72;23.36;SBd;;;;;;;;2MASX J10171092-0329519,MCG +00-26-034,PGC 030041,UGCA 209;;Noted as possibly interacting in VV Atlas and in MCG.; +IC0601;G;10:18:15.29;+07:02:19.8;Leo;0.47;0.22;37;15.00;;13.78;13.31;13.57;22.38;Scd;;;;;;;;2MASX J10181525+0702199,MCG +01-26-033,PGC 030086,SDSS J101815.28+070219.8,SDSS J101815.29+070219.8;;; +IC0602;G;10:18:19.73;+07:02:57.5;Leo;0.97;0.50;173;13.40;;11.39;10.84;10.55;22.55;Sc;;;;;;;;2MASX J10181970+0702571,IRAS 10157+0717,MCG +01-26-034,PGC 030090,SDSS J101819.72+070257.5,SDSS J101819.73+070257.5,UGC 05561;;; +IC0603;G;10:19:25.05;-05:39:22.2;Sex;1.31;0.79;174;14.50;;11.37;10.66;10.43;23.93;SBa;;;;;;;;2MASX J10192504-0539223,MCG -01-26-041,PGC 030166;;; +IC0604;Dup;10:23:44.66;+57:01:36.7;UMa;;;;;;;;;;;;;;;3220;;;;;; +IC0605;G;10:22:24.13;+01:11:53.7;Sex;0.77;0.54;9;14.50;;12.64;12.07;11.88;22.57;Sc;;;;;;;;2MASX J10222407+0111534,IRAS 10197+0127,MCG +00-27-003,PGC 030363,SDSS J102224.12+011153.6,SDSS J102224.12+011153.7,SDSS J102224.13+011153.6,SDSS J102224.13+011153.7,UGC 05606;;; +IC0606;Dup;10:23:32.62;+10:57:35.0;Leo;;;;;;;;;;;;;;;3217;;;;;; +IC0607;G;10:24:08.58;+16:44:30.8;Leo;1.27;0.96;87;14.90;;12.25;11.62;11.53;23.66;Sbc;;;;;;;;2MASX J10240858+1644307,MCG +03-27-018,PGC 030496,SDSS J102408.57+164430.8,UGC 05628;;Position in 1986AJ.....91..705B is incorrect.; +IC0608;G;10:24:21.13;-06:02:21.5;Sex;0.95;0.54;108;14.77;;12.09;11.48;11.14;23.24;S0-a;;;;;;;;2MASX J10242114-0602215,MCG -01-27-008,PGC 030500;;;B-Mag taken from LEDA. +IC0609;G;10:25:35.43;-02:12:54.8;Sex;1.35;0.39;19;14.40;;11.26;10.66;10.34;22.92;Sbc;;;;;;;;2MASX J10253539-0212546,MCG +00-27-009,PGC 030600,SDSS J102535.42-021254.8,UGC 05641;;; +IC0610;G;10:26:28.37;+20:13:41.5;Leo;1.89;0.33;28;14.80;;11.13;10.29;9.94;23.58;Sbc;;;;;;0611;;2MASX J10262836+2013417,IRAS 10237+2028,MCG +03-27-034,PGC 030670,SDSS J102628.44+201339.8,UGC 05653;;; +IC0611;Dup;10:26:28.37;+20:13:41.5;Leo;;;;;;;;;;;;;;;;0610;;;;; +IC0612;G;10:27:05.86;+11:03:17.6;Leo;0.42;0.25;174;15.30;;12.19;11.52;11.23;22.60;S0;;;;;;;;2MASX J10270587+1103173,MCG +02-27-019,PGC 030729,SDSS J102705.85+110317.5,SDSS J102705.86+110317.5;;; +IC0613;G;10:27:07.79;+11:00:38.6;Leo;0.77;0.70;12;15.10;;11.63;10.92;10.69;23.34;E;;;;;;;;2MASX J10270777+1100383,MCG +02-27-018,PGC 030728,SDSS J102707.78+110038.5,SDSS J102707.79+110038.5,SDSS J102707.79+110038.6;;; +IC0614;G;10:26:51.85;-03:27:53.1;Sex;0.78;0.53;18;14.80;;12.91;12.00;12.06;23.01;Sab;;;;;;;;2MASX J10265183-0327532,MCG +00-27-015,PGC 030699;;; +IC0615;G;10:27:21.98;+11:04:47.9;Leo;1.22;0.36;143;15.10;;11.63;10.85;10.41;23.66;Sb;;;;;;;;2MASX J10272197+1104483,MCG +02-27-020,PGC 030751,SDSS J102721.97+110447.8,SDSS J102721.97+110447.9,SDSS J102721.98+110447.9,UGC 05665;;; +IC0616;G;10:32:47.56;+15:51:39.0;Leo;0.93;0.75;160;14.60;;12.12;11.45;11.28;23.03;Sc;;;;;;;;2MASX J10324755+1551387,MCG +03-27-060,PGC 031159,SDSS J103247.55+155138.9,SDSS J103247.56+155138.9,UGC 05730;;; +IC0617;Dup;10:32:43.81;-12:38:14.3;Hya;;;;;;;;;;;;;;;3280B;;;;;; +IC0618;Dup;10:32:45.40;-12:43:02.7;Hya;;;;;;;;;;;;;;;3296;;;;;; +IC0619;G;10:33:49.98;+12:52:42.1;Leo;0.84;0.65;177;14.80;;12.16;11.53;11.41;23.10;Sbc;;;;;;;;2MASX J10335000+1252426,MCG +02-27-025,PGC 031235,SDSS J103349.97+125242.0,SDSS J103349.98+125242.0,SDSS J103349.99+125242.1,UGC 05735;;; +IC0620;G;10:33:33.43;+11:52:17.0;Leo;0.73;0.60;88;15.20;;12.44;11.81;11.46;23.18;Sbc;;;;;;;;2MASX J10333344+1152178,LEDA 2800960,SDSS J103333.42+115216.9,SDSS J103333.43+115216.9,SDSS J103333.43+115217.0;;; +IC0621;G;10:33:21.04;+02:36:58.1;Sex;0.90;0.62;82;15.10;;12.53;11.74;11.57;23.35;Sc;;;;;;;;2MASX J10332103+0236582,PGC 031196,SDSS J103321.03+023658.0,SDSS J103321.04+023658.0,SDSS J103321.04+023658.1;;; +IC0622;Dup;10:34:42.80;+11:11:50.4;Leo;;;;;;;;;;;;;;;3279;;;;;; +IC0623;G;10:35:21.01;+03:33:30.2;Sex;0.94;0.32;151;15.00;;12.02;11.28;11.01;22.76;Sbc;;;;;;;;2MASX J10352103+0333298,MCG +01-27-017,PGC 031356,SDSS J103521.00+033330.1,SDSS J103521.00+033330.2,SDSS J103521.01+033330.2,UGC 05748;;; +IC0624;G;10:36:15.18;-08:20:02.2;Sex;2.42;0.55;39;13.50;;10.48;9.92;9.51;24.13;Sa;;;;;;;;2MASX J10361516-0820021,MCG -01-27-026,PGC 031426;;; +IC0625;G;10:42:38.05;-23:56:08.2;Hya;2.25;0.53;105;13.72;;;;;23.15;Sc;;;;;;;;2MASX J10423745-2356055,2MASX J10423804-2356091,IRAS 10402-2340,MCG -04-26-001,PGC 031919;;This may also be NGC 3355.; +IC0626;G;10:36:57.10;-07:01:25.9;Sex;1.21;0.95;137;15.19;;11.21;10.47;10.12;24.08;E-S0;;;;;;;;2MASX J10365709-0701258,MCG -01-27-028,PGC 031501;;;B-Mag taken from LEDA. +IC0627;G;10:37:19.89;-03:21:28.1;Sex;0.72;0.57;175;14.10;;11.88;11.17;10.77;22.52;Sa;;;;;;;;2MASX J10371990-0321275,MCG +00-27-032,PGC 031543,SDSS J103719.88-032128.1;;; +IC0628;G;10:37:36.19;+05:36:13.3;Sex;0.89;0.67;120;14.80;;11.89;11.15;10.86;23.13;Sab;;;;;;;;2MASX J10373619+0536133,MCG +01-27-022,PGC 031567,SDSS J103736.18+053613.3,SDSS J103736.19+053613.2,SDSS J103736.19+053613.3,UGC 05780;;; +IC0629;Dup;10:37:02.52;-27:33:54.2;Hya;;;;;;;;;;;;;;;3312;;;;;; +IC0630;G;10:38:33.61;-07:10:13.9;Sex;2.12;1.67;150;13.30;;9.54;9.32;8.65;23.35;S0;;;;;;;;2MASX J10383359-0710147,MCG -01-27-029,PGC 031636;;; +IC0631;G;10:38:58.90;-07:03:08.6;Sex;0.67;0.59;147;15.74;;12.12;11.43;10.98;23.91;E;;;;;;;;2MASX J10385891-0703080,LEDA 155542;;; +IC0632;G;10:39:11.79;-00:24:34.1;Sex;0.98;0.57;30;14.60;14.18;12.15;11.44;11.10;23.18;SBa;;;;;;;;2MASX J10391179-0024340,MCG +00-27-035,PGC 031673,SDSS J103911.79-002434.0,SDSS J103911.79-002434.1,SDSS J103911.79-002434.2,UGC 05792;;; +IC0633;G;10:39:24.38;-00:23:21.5;Sex;0.65;0.27;103;14.50;14.62;13.47;12.77;12.22;22.38;Sab;;;;;;;;2MASX J10392440-0023207,MCG +00-27-037,PGC 031691,SDSS J103924.37-002321.4,SDSS J103924.38-002321.4,SDSS J103924.38-002321.5,SDSS J103924.39-002321.4,SDSS J103924.48-002321.4,UGC 05796;;; +IC0634;G;10:40:54.89;+05:59:30.6;Sex;1.00;0.38;116;15.10;;11.90;11.12;10.76;22.98;Sc;;;;;;;;2MASX J10405489+0559308,PGC 031799,SDSS J104055.19+055929.0,SDSS J104055.19+055929.1,UGC 05811;;; +IC0635;G;10:41:45.30;+15:38:36.0;Leo;1.09;0.33;7;15.20;;12.17;11.52;11.08;23.14;Sbc;;;;;;;;MCG +03-27-069,PGC 031858,SDSS J104145.30+153835.8,UGC 05821;;; +IC0636;G;10:41:50.59;+04:19:50.8;Sex;0.95;0.41;49;14.90;;12.10;11.35;11.12;22.93;SBbc;;;;;;;;2MASX J10415061+0419511,MCG +01-27-028,PGC 031867,SDSS J104150.58+041950.7,SDSS J104150.58+041950.8,SDSS J104150.59+041950.8,UGC 05824;;; +IC0637;G;10:42:21.92;+15:21:34.6;Leo;0.75;0.50;17;15.30;;12.33;11.58;11.13;23.41;S0-a;;;;;;;;2MASX J10422188+1521346,PGC 031900,SDSS J104221.91+152134.5,SDSS J104221.91+152134.6,SDSS J104221.92+152134.6;;; +IC0638;G;10:43:47.98;+15:53:42.5;Leo;0.77;0.38;2;15.40;;12.58;11.88;11.56;23.32;Sab;;;;;;;;2MASX J10434797+1553431,IRAS 10411+1609,PGC 031988,SDSS J104347.97+155342.5,SDSS J104347.98+155342.5;;; +IC0639;G;10:45:52.02;+16:55:49.6;Leo;1.41;0.42;180;14.80;;12.30;11.60;11.25;23.51;Sbc;;;;;;;;2MASX J10455200+1655498,IRAS 10432+1711,MCG +03-28-007,PGC 032129,SDSS J104552.02+165549.5,SDSS J104552.02+165549.6;;; +IC0640;Other;10:46:50.45;+34:46:03.5;LMi;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0641;Other;10:47:49.41;+34:40:22.2;LMi;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0642;G;10:48:08.13;+18:11:19.3;Leo;1.45;1.36;19;14.00;;10.64;9.91;9.72;23.41;E-S0;;;;;;;;2MASX J10480814+1811189,MCG +03-28-010,PGC 032278,SDSS J104808.12+181119.2,SDSS J104808.12+181119.3,UGC 05905;;; +IC0643;G;10:49:27.18;+12:12:03.6;Leo;1.34;0.46;73;15.30;;11.71;10.99;10.82;24.25;S0-a;;;;;;;;2MASX J10492718+1212041,PGC 032392,SDSS J104927.17+121203.6,SDSS J104927.18+121203.6;;; +IC0644;Dup;10:51:31.43;+55:23:27.5;UMa;;;;;;;;;;;;;;;3398;;;;;; +IC0645;G;10:50:09.35;-06:02:34.4;Sex;0.48;0.42;59;15.43;;12.51;11.84;11.61;;;;;;;;;;2MASX J10500934-0602343,IRAS 10476-0546,LEDA 2816724;;; +IC0646;G;10:51:35.18;+55:27:57.0;UMa;0.84;0.43;147;15.70;;12.11;11.46;11.13;23.45;Sa;;;;;;;;2MASX J10513522+5527568,MCG +09-18-039,PGC 032568,SDSS J105135.17+552756.9,SDSS J105135.17+552757.2,SDSS J105135.18+552757.0;;; +IC0647;G;10:50:34.49;-12:51:17.3;Crt;0.68;0.39;62;15.55;;12.59;11.85;11.66;23.62;S0-a;;;;;;;;2MASX J10503444-1251152,LEDA 946616;;; +IC0648;G;10:51:00.32;+12:17:14.6;Leo;0.94;0.74;158;14.90;;12.39;11.76;11.67;23.32;SBc;;;;;;;;2MASX J10510033+1217147,MCG +02-28-017,PGC 032522,SDSS J105100.31+121714.5,SDSS J105100.32+121714.6;;; +IC0649;GPair;10:50:52.20;+01:09:50.0;Leo;0.70;;;;;;;;;;;;;;;;;MCG +00-28-019;;;Diameter of the group inferred by the author. +IC0649 NED01;G;10:50:52.09;+01:09:55.2;Leo;0.70;0.56;15;14.90;;12.70;12.07;11.40;23.36;Sbc;;;;;;;;2MASX J10505208+0109554,MCG +00-28-019 NED01,PGC 032506,SDSS J105051.78+011001.2;;One SDSS position applies to the knot northwest of the center.; +IC0649 NED02;G;10:50:52.20;+01:09:42.0;Leo;0.32;0.21;0;14.90;;;;;;Sbc;;;;;;;;MCG +00-28-019 NED02,PGC 093105;;; +IC0650;G;10:50:40.55;-13:26:31.4;Crt;0.93;0.67;10;14.99;;12.49;12.00;11.51;23.20;Sc;;;;;;;;2MASX J10504053-1326312,IRAS 10481-1310,LEDA 170094;;; +IC0651;G;10:50:58.41;-02:09:01.3;Leo;0.72;0.71;20;12.90;;11.20;10.52;10.21;21.10;SBd;;;;;;;;2MASX J10505844-0209011,IRAS 10484-0153,MCG +00-28-020,PGC 032517,SDSS J105058.41-020901.3,UGC 05956;;; +IC0652;Dup;10:50:57.63;-12:26:54.7;Crt;;;;;;;;;;;;;;;3421;;;;;; +IC0653;G;10:52:06.78;-00:33:38.8;Leo;2.07;0.71;57;13.75;;10.90;10.14;9.91;24.06;Sa;;;;;;;;2MASX J10520675-0033388,MCG +00-28-022,PGC 032611,SDSS J105206.77-003338.8,SDSS J105206.78-003338.8,SDSS J105206.78-003338.9,UGC 05985;;HOLM 220B is a double star.; +IC0654;G;10:53:50.39;-11:43:32.1;Crt;1.20;0.44;133;15.14;;11.99;11.29;10.97;24.12;S0-a;;;;;;;;2MASX J10535040-1143319,MCG -02-28-018,PGC 032716;;;B-Mag taken from LEDA. +IC0655;G;10:54:22.24;-00:21:53.9;Leo;1.00;0.27;48;15.30;;12.42;11.59;11.31;23.10;Sbc;;;;;;;;2MASX J10542222-0021544,PGC 032758,SDSS J105422.23-002153.8,SDSS J105422.24-002153.8,SDSS J105422.24-002153.9;;; +IC0656;Other;10:55:08.14;+17:36:46.4;Leo;;;;;;;;;;;;;;;;;;;;Three Galactic stars plus a faint galaxy. This may also be NGC 3457.; +IC0657;G;10:57:53.57;-04:54:17.8;Leo;1.14;0.43;169;15.23;;12.13;11.35;11.28;23.85;SBa;;;;;;;;2MASX J10575355-0454179,MCG -01-28-009,PGC 032966;;MCG decs for MCG -01-28 field are 10 arcmin too far north (MCG4 errata).; +IC0658;G;10:58:16.26;+08:14:30.0;Leo;1.08;0.85;43;14.60;;11.58;11.04;10.57;23.66;E;;;;;;;;2MASX J10581628+0814296,MCG +02-28-033,PGC 033004,SDSS J105816.26+081430.0;;; +IC0659;G;10:58:03.86;-06:15:37.9;Leo;1.24;0.86;60;15.50;;11.74;10.71;10.36;24.75;E;;;;;;;;2MASX J10580384-0615380,MCG -01-28-010,PGC 032979;;MCG decs for MCG -01-28 field are 10 arcmin too far north (MCG4 errata).; +IC0660;G;10:58:26.66;+01:22:58.5;Leo;0.79;0.52;31;15.70;;12.04;11.44;11.26;23.86;E;;;;;;;;2MASX J10582669+0122583,PGC 033017,SDSS J105826.65+012258.4,SDSS J105826.66+012258.4,SDSS J105826.66+012258.5;;; +IC0661;G;10:58:51.50;+01:39:02.3;Leo;0.77;0.55;31;15.70;;12.18;11.54;11.16;23.54;E-S0;;;;;;;;2MASX J10585152+0139022,PGC 033051,SDSS J105851.49+013902.3,SDSS J105851.50+013902.2,SDSS J105851.50+013902.3;;; +IC0662;G;10:59:20.55;+01:35:55.8;Leo;0.78;0.58;71;15.46;;12.13;11.42;11.26;23.89;E;;;;;;;;2MASX J10592052+0135556,PGC 033091,SDSS J105920.54+013555.7,SDSS J105920.55+013555.8;;; +IC0663;G;11:00:37.27;+10:26:13.9;Leo;0.85;0.57;172;15.60;;12.09;11.41;11.07;23.80;E-S0;;;;;;;;2MASX J11003725+1026137,PGC 033182,SDSS J110037.27+102613.8,SDSS J110037.27+102613.9;;; +IC0664;G;11:00:45.35;+10:33:11.0;Leo;1.87;1.30;53;14.80;;11.29;10.65;10.24;24.67;E-S0;;;;;;;;2MASX J11004538+1033117,MCG +02-28-042,PGC 033191,SDSS J110045.34+103311.4,SDSS J110045.35+103311.3;;; +IC0665;G;11:00:29.93;-13:52:00.5;Crt;1.03;0.35;148;15.29;;11.83;11.16;10.97;23.36;Sab;;;;;;;;2MASX J11002991-1352001,LEDA 170101;;; +IC0666;G;11:01:14.81;+10:28:52.0;Leo;0.58;0.33;147;15.30;;12.22;11.69;10.95;22.65;S0-a;;;;;;;;2MASX J11011479+1028524,PGC 033232,SDSS J110114.81+102852.0,SDSS J110114.82+102852.0;;; +IC0667;G;11:06:36.55;+15:05:19.4;Leo;0.68;0.58;32;15.50;;12.67;11.74;11.51;23.69;E;;;;;;;;2MASX J11063651+1505192,PGC 033603,SDSS J110636.55+150519.4;;; +IC0668;G;11:06:39.56;+15:02:27.3;Leo;0.66;0.39;95;15.40;;12.26;11.54;11.49;23.00;Sa;;;;;;;;2MASX J11063955+1502272,MCG +03-28-059,PGC 033613,SDSS J110639.55+150227.3;;; +IC0669;G;11:07:16.57;+06:18:08.9;Leo;1.08;0.67;169;14.30;;11.29;10.60;10.25;23.27;S0;;;;;;;;2MASX J11071654+0618084,MCG +01-28-040,PGC 033662,SDSS J110716.56+061808.8,SDSS J110716.56+061808.9,SDSS J110716.57+061808.8,SDSS J110716.57+061808.9,UGC 06174;;; +IC0670;G;11:07:28.81;+06:42:51.3;Leo;1.11;0.98;65;14.70;;11.18;10.49;10.10;23.55;E-S0;;;;;;;;2MASX J11072877+0642515,MCG +01-28-041,PGC 033680,SDSS J110728.80+064251.2,SDSS J110728.80+064251.3,SDSS J110728.81+064251.2,SDSS J110728.81+064251.3,UGC 06178;;; +IC0671;G;11:07:31.60;+00:46:59.2;Leo;1.21;0.95;21;14.10;;11.47;10.88;10.31;23.58;Sb;;;;;;;;2MASX J11073161+0046592,MCG +00-28-031,PGC 033689,SDSS J110731.60+004659.1,SDSS J110731.60+004659.2,SDSS J110731.61+004659.2,UGC 06180;;; +IC0672;G;11:08:03.23;-12:29:03.0;Crt;0.75;0.33;155;;;11.94;11.22;10.83;;S0-a;;;;;;;;2MASX J11080324-1229032,IRAS 11055-1212,MCG -02-29-002,PGC 033724;;; +IC0673;G;11:09:25.31;-00:05:51.8;Leo;1.29;0.59;168;14.06;;11.83;11.15;10.99;23.47;SABb;;;;;;;;2MASX J11092527-0005514,IRAS 11068+0010,MCG +00-29-003,PGC 033817,SDSS J110925.18-000548.8,SDSS J110925.30-000551.8,SDSS J110925.31-000551.7,SDSS J110925.31-000551.8,SDSS J110925.32-000551.8,UGC 06200;;; +IC0674;G;11:11:06.36;+43:37:58.8;UMa;1.37;0.41;121;14.50;;11.43;10.64;10.49;23.24;Sab;;;;;;;;2MASX J11110633+4337587,MCG +07-23-027,PGC 033982,SDSS J111106.35+433758.8,SDSS J111106.36+433758.8,SDSS J111106.37+433758.8,UGC 06221;;; +IC0675;**;11:10:57.36;+03:35:39.2;Leo;;;;;;;;;;;;;;;;;;;;The identification as IC 0675 is not certain.; +IC0676;G;11:12:39.82;+09:03:21.0;Leo;1.85;1.31;0;13.40;;10.69;9.95;9.70;23.57;S0-a;;;;;;;;2MASX J11123981+0903206,IRAS 11100+0919,MCG +02-29-009,PGC 034107,SDSS J111239.81+090321.0,UGC 06245;;; +IC0677;G;11:13:56.50;+12:18:03.9;Leo;1.43;0.60;45;13.60;;11.53;11.02;10.71;22.70;Sbc;;;;;;;;2MASX J11135671+1218097,IRAS 11113+1234,MCG +02-29-013,PGC 034211,SDSS J111356.49+121803.8,SDSS J111356.50+121803.8,SDSS J111356.50+121803.9,UGC 06262;;; +IC0678;G;11:14:06.38;+06:34:37.9;Leo;0.78;0.50;141;15.10;;11.74;11.01;10.85;23.72;E;;;;;;;;2MASX J11140638+0634376,MCG +01-29-021,PGC 034222,SDSS J111406.37+063437.9,SDSS J111406.38+063437.9;;; +IC0679;G;11:16:36.61;-13:58:19.5;Crt;0.53;0.37;125;15.24;;11.65;10.94;10.64;;E;;;;;;;;2MASX J11163661-1358185,PGC 170124;;; +IC0680;G;11:17:54.70;-01:56:47.2;Leo;0.81;0.56;154;14.60;;11.93;11.23;10.87;22.79;SBa;;;;;;;;2MASX J11175470-0156470,IRAS 11153-0140,MCG +00-29-012,PGC 034520;;; +IC0681;G;11:18:31.93;-12:08:24.8;Crt;0.87;0.45;35;14.79;;12.80;12.18;11.95;22.68;Sc;;;;;;;;2MASX J11183192-1208249,MCG -02-29-017,PGC 034572;;;B-Mag taken from LEDA. +IC0682;Dup;11:22:14.74;+20:12:30.7;Leo;;;;;;;;;;;;;;;3649;;;;;; +IC0683;G;11:21:31.78;+02:45:06.5;Leo;0.69;0.49;175;15.60;;12.34;11.47;11.17;23.62;E;;;;;;;;2MASX J11213177+0245062,PGC 034807,SDSS J112131.78+024506.5;;; +IC0684;Dup;11:21:32.87;+02:48:37.6;Leo;;;;;;;;;;;;;;;3644;;;;;; +IC0685;G;11:22:06.52;+17:45:12.3;Leo;0.68;0.43;176;16.33;;13.18;12.58;12.17;24.34;E;;;;;;;;2MASX J11220653+1745123,PGC 034871,SDSS J112206.51+174512.2;;;B-Mag taken from LEDA. +IC0686;G;11:23:05.27;+05:38:40.8;Leo;0.51;0.26;42;15.30;;13.27;12.77;12.38;22.50;Sc;;;;;;;;2MASX J11230527+0538409,PGC 034950;;; +IC0687;G;11:24:17.33;+47:50:51.1;UMa;1.08;1.03;121;15.00;;11.48;10.69;10.48;23.87;E;;;;;;;;2MASX J11241735+4750511,MCG +08-21-032,PGC 035029,SDSS J112417.33+475051.0,SDSS J112417.33+475051.1;;; +IC0688;G;11:23:40.24;-09:47:44.0;Crt;0.98;0.49;98;15.25;;12.11;11.42;11.13;23.32;Sab;;;;;;;;2MASX J11234024-0947438,IRAS 11211-0931,LEDA 156572;;; +IC0689;Dup;11:23:38.43;-13:49:52.0;Crt;;;;;;;;;;;;;;;3661;;;;;; +IC0690;G;11:24:20.61;-08:20:31.1;Crt;1.17;0.46;170;15.60;;11.90;11.21;10.91;23.59;Sc;;;;;;;;2MASX J11242059-0820305,LEDA 170138;;; +IC0691;G;11:26:44.32;+59:09:19.5;UMa;1.14;0.72;148;14.20;;11.92;11.27;10.86;21.78;S0;;;;;;;;2MASX J11264427+5909197,IRAS 11238+5925,MCG +10-16-139,PGC 035206,SDSS J112644.31+590919.5,SDSS J112644.32+590919.5,UGC 06447;;; +IC0692;G;11:25:53.47;+09:59:15.0;Leo;0.85;0.56;118;14.10;;12.51;11.82;11.65;22.75;E;;;;;;;;2MASX J11255349+0959141,MCG +02-29-027,PGC 035151,SDSS J112553.47+095914.9,SDSS J112553.47+095915.0,UGC 06438;;; +IC0693;G;11:26:48.62;-05:00:14.4;Leo;0.98;0.48;90;14.65;;12.04;11.31;10.98;22.97;Sab;;;;;;;;2MASX J11264861-0500141,IRAS 11242-0443,MCG -01-29-022,PGC 035208;;;B-Mag taken from LEDA. +IC0694;G;11:28:27.30;+58:34:42.5;UMa;0.21;0.18;51;18.20;;14.25;13.47;12.92;;E;;;;;;;;2MASX J11282731+5834422,MCG +10-17-002,PGC 035325,SDSS J112827.29+583442.5;;Often confused with NGC 3690 in the literature.; +IC0695;G;11:27:58.29;-11:42:55.2;Crt;0.65;0.21;85;15.50;;12.53;11.85;11.42;;Sc;;;;;;;;2MASX J11275827-1142549,PGC 170143;;; +IC0696;G;11:28:39.92;+09:05:55.3;Leo;0.92;0.85;16;14.50;;12.09;11.46;11.18;23.08;Scd;;;;;;;;2MASX J11283992+0905552,MCG +02-29-034,PGC 035332,SDSS J112839.91+090555.2,SDSS J112839.91+090555.3,SDSS J112839.92+090555.3,UGC 06477;;; +IC0697;G;11:28:34.45;-01:37:46.5;Leo;0.67;0.47;131;15.30;;12.22;11.50;11.22;23.33;S0;;;;;;;;2MASX J11283443-0137462,PGC 035327,SDSS J112834.45-013746.4,SDSS J112834.45-013746.5;;; +IC0698;G;11:29:03.84;+09:06:43.4;Leo;1.04;0.50;147;14.40;;11.34;10.55;10.17;23.20;S0-a;;;;;;;;2MASX J11290382+0906439,IRAS 11264+0923,MCG +02-29-035,PGC 035364,SDSS J112903.83+090643.3,SDSS J112903.83+090643.4,SDSS J112903.84+090643.3,SDSS J112903.84+090643.4,UGC 06482;;; +IC0699;G;11:29:06.49;+08:59:18.9;Leo;1.21;0.34;12;14.60;;11.20;10.42;10.20;22.85;SABb;;;;;;;;2MASX J11290646+0859189,MCG +02-29-036,PGC 035365,SDSS J112906.48+085918.9,SDSS J112906.49+085918.9,UGC 06485;;; +IC0700;GGroup;11:29:15.48;+20:35:05.7;Leo;1.10;;;;;;;;;;;;;;;;;MCG +04-27-047,UGC 06487;;;Diameter of the group inferred by the author. +IC0700 NED01;G;11:29:14.16;+20:34:52.0;Leo;0.20;0.13;0;16.38;;;;;21.22;I;;;;;;;;MCG +04-27-047 NED01,PGC 035380,SDSS J112914.15+203451.9,SDSS J112914.15+203452.0,UGC 06487 NED01;;; +IC0700 NED02;G;11:29:15.30;+20:34:59.4;Leo;0.94;0.46;71;14.16;;13.42;13.28;12.93;22.12;S?;;;;;;;;2MASX J11291529+2034595,MCG +04-27-047 NED02,PGC 035382,SDSS J112915.29+203459.3,UGC 06487 NED02;;; +IC0700 NED03;G;11:29:16.36;+20:35:11.7;Leo;0.30;0.28;25;17.05;;;;;23.29;I;;;;;;;;MCG +04-27-047 NED03,PGC 035384,SDSS J112916.36+203511.7,UGC 06487 NED03;;Multiple SDSS entries describe this source.; +IC0700 NED04;G;11:29:16.70;+20:35:16.3;Leo;0.25;0.11;54;18.26;;;;;23.68;I;;;;;;;;MCG +04-27-047 NED04,PGC 035385,UGC 06487 NED04;;; +IC0701;G;11:31:00.68;+20:28:08.2;Leo;0.74;0.55;77;14.70;;12.58;11.88;11.54;22.90;Sd;;;;;;;;2MASX J11310065+2028085,LEDA 086632,MCG +04-27-051,SDSS J113100.68+202808.1,SDSS J113100.68+202808.2,UGC 06503 NED01;;; +IC0702;G;11:30:54.71;-04:55:19.2;Leo;0.75;0.42;130;15.63;;12.07;11.29;11.03;23.64;S0-a;;;;;;;;2MASX J11305469-0455190,LEDA 1051683;;; +IC0703;Dup;11:30:04.65;-11:32:46.8;Crt;;;;;;;;;;;;;;;3704;;;;;; +IC0704;Dup;11:30:11.56;-11:32:36.6;Crt;;;;;;;;;;;;;;;3707;;;;;; +IC0705;G;11:32:56.35;+50:14:30.7;UMa;0.77;0.50;34;15.10;;12.31;11.66;11.41;23.27;S0;;;;;;;;2MASX J11325631+5014310,MCG +08-21-049,PGC 035644,SDSS J113256.34+501430.6,SDSS J113256.34+501430.7,SDSS J113256.34+501431.0;;; +IC0706;G;11:33:12.62;-13:20:17.0;Crt;1.52;0.27;111;14.98;;11.51;10.85;10.59;24.16;S0-a;;;;;;;;2MASX J11331262-1320169,MCG -02-30-004,PGC 035658;;;B-Mag taken from LEDA. +IC0707;G;11:33:44.64;+21:22:48.2;Leo;0.65;0.52;5;14.40;;12.02;11.36;11.11;21.93;Sc;;;;;;;;2MASX J11334460+2122474,IRAS 11311+2139,MCG +04-27-064,PGC 035708,SDSS J113344.63+212248.1,UGC 06543;;; +IC0708;G;11:33:59.22;+49:03:43.4;UMa;1.50;0.98;140;14.20;;11.11;10.33;10.10;23.86;E;;;;;;;;2MASX J11335920+4903432,MCG +08-21-056,PGC 035720,SDSS J113359.22+490343.6,SDSS J113359.23+490343.3,SDSS J113359.23+490343.4,UGC 06549;;; +IC0709;G;11:34:14.54;+49:02:35.4;UMa;1.05;0.93;25;15.00;;11.80;10.98;10.66;23.92;E;;;;;;;;2MASX J11341457+4902352,MCG +08-21-057,PGC 035736,SDSS J113414.53+490235.4,SDSS J113414.53+490235.6,SDSS J113414.54+490235.4;;; +IC0710;G;11:34:27.41;+25:52:35.3;Leo;0.80;0.49;180;15.70;;11.84;11.13;10.77;23.74;S0;;;;;;;;2MASX J11342740+2552350,PGC 035750,SDSS J113427.40+255235.2,SDSS J113427.41+255235.3;;; +IC0711;G;11:34:46.56;+48:57:22.0;UMa;0.87;0.81;27;15.20;;12.04;11.29;11.09;23.70;E;;;;;;;;2MASX J11344658+4857217,MCG +08-21-062,PGC 035780,SDSS J113446.54+485722.1,SDSS J113446.55+485721.9,SDSS J113446.55+485722.0,SDSS J113446.56+485722.0;;; +IC0712;G;11:34:49.31;+49:04:39.7;UMa;3.02;0.89;91;14.80;;10.84;10.17;9.89;25.42;E;;;;;;;;2MASX J11344932+4904388,MCG +08-21-063,PGC 035785,SDSS J113449.29+490439.4,SDSS J113449.29+490439.5,SDSS J113449.29+490439.7,SDSS J113449.30+490439.5;;; +IC0713;*;11:34:44.22;+16:50:48.8;Leo;;;;;;;;;;;;;;;;;;SDSS J113444.21+165048.8;;The identification with IC 0713 is not certain.; +IC0714;Dup;11:36:30.19;-09:50:48.1;Crt;;;;;;;;;;;;;;;3763;;;;;; +IC0715;GPair;11:36:54.63;-08:22:38.6;Crt;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC0715NW;G;11:36:54.21;-08:22:32.9;Crt;0.87;0.40;157;15.18;;12.01;11.29;11.19;23.56;;;;;;;;;2MASX J11365422-0822327,PGC 170166;;; +IC0715SE;G;11:36:54.94;-08:22:43.4;Crt;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC0716;G;11:39:03.33;-00:12:21.6;Vir;1.59;0.30;123;14.80;;11.66;10.86;10.55;23.42;Sbc;;;;;;;;2MASX J11390337-0012219,MCG +00-30-018,PGC 036102,SDSS J113903.32-001221.6,SDSS J113903.33-001221.5,SDSS J113903.33-001221.6,SDSS J113903.33-001221.7,UGC 06612;;; +IC0717;Dup;11:38:51.05;-10:35:01.5;Crt;;;;;;;;;;;;;;;3779;;;;;; +IC0718;G;11:39:52.77;+08:52:28.3;Vir;1.15;0.57;180;14.60;;;;;23.06;IB;;;;;;;;MCG +02-30-007,PGC 036174,SDSS J113952.77+085228.3,UGC 06626;;; +IC0719;G;11:40:18.51;+09:00:35.6;Vir;1.22;0.39;52;13.60;;10.68;9.98;9.67;22.85;S0;;;;;;;;2MASX J11401849+0900354,IRAS 11377+0917,MCG +02-30-008,PGC 036205,SDSS J114018.50+090035.5,SDSS J114018.51+090035.6,UGC 06633;;; +IC0720;GPair;11:42:22.30;+08:46:04.0;Vir;1.30;;;;;;;;;;;;;;;;;MCG +02-30-016;;The position in 1989H&RHI.C...0000H is incorrect.;Diameter of the group inferred by the author. +IC0720 NED01;G;11:42:22.30;+08:45:55.7;Vir;1.05;0.93;8;14.95;;;;;23.73;SBab;;;;;;;;MCG +02-30-016 NED01,PGC 093112,SDSS J114222.29+084555.6,SDSS J114222.29+084555.7,SDSS J114222.30+084555.7;;;B-Mag taken from LEDA. +IC0720 NED02;G;11:42:22.34;+08:46:11.5;Vir;0.75;0.52;172;14.70;;11.06;10.34;10.10;22.99;S0-a;;;;;;;;2MASX J11422229+0846118,LEDA 036333,MCG +02-30-016 NED02,SDSS J114222.33+084611.4,SDSS J114222.33+084611.5,SDSS J114222.34+084611.5;;; +IC0721;G;11:42:28.88;-08:20:25.2;Crt;1.63;0.29;99;15.50;;12.52;11.86;11.44;23.57;SBc;;;;;;;;2MASX J11422887-0820251,IRAS 11399-0803,MCG -01-30-026,PGC 036354;;; +IC0722;G;11:42:43.76;+08:58:27.2;Vir;0.92;0.57;76;14.90;;12.16;11.50;11.22;23.15;Sbc;;;;;;;;2MASX J11424375+0858271,MCG +02-30-019,PGC 036365;;; +IC0723;G;11:42:57.60;-08:19:57.0;Crt;0.80;0.62;149;15.50;;12.21;11.59;11.34;22.70;I;;;;;;;;2MASX J11425761-0819558,IRAS 11404-0803,MCG -01-30-027,PGC 036384;;; +IC0724;G;11:43:34.67;+08:56:32.9;Vir;2.39;0.73;59;13.80;;10.33;9.58;9.39;23.79;Sa;;;;;;;;2MASX J11433467+0856331,MCG +02-30-022,PGC 036450,SDSS J114334.66+085632.8,SDSS J114334.67+085632.8,SDSS J114334.67+085632.9,UGC 06695;;; +IC0725;G;11:43:29.34;-01:40:04.7;Vir;0.74;0.66;125;15.10;;11.76;11.04;10.72;23.20;E;;;;;;;;2MASX J11432935-0140048,PGC 036444,SDSS J114329.33-014004.6,SDSS J114329.34-014004.6,SDSS J114329.34-014004.7,SDSS J114329.34-014004.8;;; +IC0726;G;11:43:45.30;+33:23:31.0;UMa;0.87;0.77;103;15.91;;12.90;12.20;11.76;24.48;E;;;;;;;;2MASX J11434531+3323309,LEDA 213876,SDSS J114345.30+332331.0;;;B-Mag taken from LEDA. +IC0727;G;11:44:28.60;+10:47:01.7;Leo;1.65;0.28;161;15.00;;11.59;10.78;10.55;23.71;Sb;;;;;;;;2MASX J11442860+1047016,MCG +02-30-025,PGC 036536,SDSS J114428.59+104701.6,SDSS J114428.60+104701.6,SDSS J114428.60+104701.7,UGC 06715;;; +IC0728;G;11:44:50.47;-01:36:04.8;Vir;1.20;0.58;63;14.70;;12.00;11.28;10.84;23.12;Sb;;;;;;;;2MASX J11445046-0136042,IRAS 11422-0119,MCG +00-30-021,PGC 036580,SDSS J114450.47-013604.7,SDSS J114450.47-013604.8,UGC 06720;;; +IC0729;G;11:45:18.32;+33:20:08.9;UMa;0.57;0.25;4;15.50;;12.17;11.48;11.29;;S0;;;;;;;;2MASX J11451829+3320090,PGC 036627,SDSS J114518.32+332008.8,SDSS J114518.32+332008.9;;; +IC0730;Dup;11:45:35.25;+03:13:54.6;Vir;;;;;;;;;;;;;;;3849;;;;;; +IC0731;G;11:45:18.08;+49:34:13.5;UMa;0.70;0.36;83;15.60;;13.92;13.43;12.94;23.67;SBc;;;;;;;;2MASX J11451810+4934130,MCG +08-21-096,PGC 036626,SDSS J114518.07+493413.9,SDSS J114518.08+493413.5;;; +IC0732;GPair;11:45:59.60;+20:26:34.0;Leo;1.10;;;;;;;;;;;;;;;;;MCG +04-28-050;;;Diameter of the group inferred by the author. +IC0732N;G;11:45:59.43;+20:26:49.3;Leo;0.65;0.27;155;15.10;;12.87;12.00;11.58;23.10;I;;;;;;;;2MASX J11455945+2026498,MCG +04-28-050 NED01,PGC 036688,SDSS J114559.42+202649.3;;Multiple SDSS entries describe this object.; +IC0732S;G;11:45:59.87;+20:26:20.1;Leo;0.74;0.39;128;15.10;;12.03;11.42;11.05;23.42;S0-a;;;;;;;;2MASX J11455988+2026198,MCG +04-28-050 NED02,PGC 083488;;; +IC0733;G;11:45:58.56;-08:09:21.0;Crt;0.72;0.19;90;16.05;;12.52;11.81;11.44;24.11;;;;;;;;;2MASX J11455856-0809208,LEDA 1007508;;; +IC0734;GPair;11:46:03.80;-08:16:04.0;Crt;1.10;;;;;;;;;;;;;;;;;MCG -01-30-031;;;Diameter of the group inferred by the author. +IC0734 NED01;G;11:46:03.75;-08:16:15.7;Crt;0.95;0.47;15;15.75;;11.98;11.34;11.18;24.49;E;;;;;;;;2MASX J11460375-0816158,MCG -01-30-031 NED01,PGC 036701;;; +IC0734 NED02;G;11:46:03.88;-08:15:53.9;Crt;0.83;0.71;12;;;;;;23.98;;;;;;;;;2MASSJ11460383-0815539,MCG -01-30-031 NED02,PGC1005962;;; +IC0735;G;11:48:12.80;+13:12:33.8;Leo;1.16;0.69;154;15.00;;13.57;12.96;12.77;23.69;SBd;;;;;;;;2MASX J11481278+1312314,MCG +02-30-038,PGC 036849,SDSS J114812.79+131233.7,SDSS J114812.80+131233.7,SDSS J114812.80+131233.8,UGC 06775;;; +IC0736;G;11:48:20.12;+12:42:59.7;Leo;0.66;0.63;82;15.30;;12.67;12.00;11.77;23.53;E;;;;;;;;2MASX J11482014+1242594,MCG +02-30-037,PGC 036853,SDSS J114820.11+124259.6;;; +IC0737;G;11:48:27.52;+12:43:38.6;Leo;0.82;0.70;108;14.70;;12.02;11.41;11.18;23.10;S0-a;;;;;;;;2MASX J11482751+1243383,IRAS 11459+1300,MCG +02-30-039,PGC 036861;;; +IC0738;G;11:48:54.87;-04:40:55.0;Vir;0.80;0.47;99;14.69;;12.73;11.93;11.75;22.66;I;;;;;;;;2MASX J11485487-0440551,IRAS 11463-0424,LEDA 2816780,PGC 036895;;; +IC0739;G;11:51:31.29;+23:51:46.3;Leo;1.09;0.76;151;15.10;;11.91;11.27;10.93;23.63;Sab;;;;;;;;2MASX J11513128+2351464,MCG +04-28-072,PGC 037097,SDSS J115131.28+235146.2,SDSS J115131.28+235146.3,UGC 06830;;; +IC0740;Dup;11:50:38.94;+55:21:13.9;UMa;;;;;;;;;;;;;;;3913;;;;;; +IC0741;G;11:50:31.77;-04:50:09.2;Vir;1.03;0.52;136;14.99;;11.42;10.74;10.42;23.73;S0-a;;;;;;;;2MASX J11503178-0450091,MCG -01-30-037,PGC 037008;;;B-Mag taken from LEDA. +IC0742;G;11:51:02.25;+20:47:59.0;Leo;1.07;0.86;121;15.10;;11.65;10.97;11.20;23.53;Sab;;;;;;;;2MASX J11510223+2047591,MCG +04-28-068,PGC 037056,SDSS J115102.25+204758.9,UGC 06822;;; +IC0743;G;11:53:22.26;-13:15:53.5;Crt;1.19;0.31;144;15.18;;12.00;11.38;11.47;23.22;SBc;;;;;;;;2MASX J11532223-1315537,IRAS 11508-1259,MCG -02-30-037,PGC 037267;;;B-Mag taken from LEDA. +IC0744;G;11:54:04.75;+23:11:32.0;Leo;0.63;0.38;52;15.70;;12.68;12.04;11.75;23.24;SBb;;;;;;;;2MASX J11540473+2311318,PGC 037333,SDSS J115404.74+231131.9,SDSS J115404.74+231132.0;;; +IC0745;G;11:54:12.27;+00:08:11.9;Vir;0.78;0.76;10;14.59;14.19;11.75;11.19;10.87;22.25;S0;;;;;;;;2MASX J11541224+0008116,MCG +00-30-034,PGC 037339,SDSS J115412.26+000811.8,SDSS J115412.27+000811.7,SDSS J115412.27+000811.8,SDSS J115412.27+000811.9,UGC 06877;;; +IC0746;G;11:55:35.13;+25:53:22.0;Leo;1.01;0.46;169;14.50;;12.48;11.90;11.61;22.77;SBbc;;;;;;;;2MASX J11553511+2553220,IRAS 11530+2609,MCG +04-28-096,PGC 037440,SDSS J115535.13+255321.9,SDSS J115535.13+255322.0,UGC 06898;;; +IC0747;G;11:57:04.90;-08:17:32.4;Vir;0.65;0.30;40;15.34;;11.63;10.92;10.68;23.23;E;;;;;;;;2MASX J11570484-0817318,LEDA 3094695;;; +IC0748;G;11:57:26.71;+07:27:39.4;Vir;0.85;0.67;78;15.20;;12.12;11.44;11.04;23.53;E;;;;;;;;2MASX J11572674+0727397,IRAS 11548+0744,MCG +01-31-006,PGC 037600,SDSS J115726.70+072739.4,SDSS J115726.71+072739.4;;; +IC0749;G;11:58:34.05;+42:44:02.5;UMa;2.13;1.71;159;13.40;12.52;11.28;10.69;10.45;23.04;Sc;;;;;;;;2MASX J11583398+4244027,MCG +07-25-008,PGC 037692,SDSS J115834.04+424402.5,SDSS J115834.05+424402.5,UGC 06962;;; +IC0750;G;11:58:52.20;+42:43:20.9;UMa;2.11;1.02;40;12.70;12.17;9.25;8.48;8.12;22.73;Sab;;;;;;;;2MASX J11585222+4243206,MCG +07-25-010,PGC 037719,SDSS J115852.19+424320.9,SDSS J115852.20+424320.9,UGC 06973;;; +IC0751;G;11:58:52.60;+42:34:13.2;UMa;1.10;0.41;30;15.39;14.39;11.72;10.97;10.63;23.25;Sb;;;;;;;;2MASX J11585255+4234136,MCG +07-25-011,PGC 037721,SDSS J115852.58+423413.2,SDSS J115852.59+423413.2,SDSS J115852.60+423413.2,UGC 06972;;; +IC0752;G;11:59:15.00;+42:34:00.6;UMa;0.58;0.43;91;15.20;;13.28;12.57;12.41;22.80;SBc;;;;;;;;2MASX J11591498+4234011,PGC 037747,SDSS J115914.99+423400.6,SDSS J115915.00+423400.6;;; +IC0753;G;11:59:12.88;-00:31:25.8;Vir;1.07;0.69;24;14.30;;11.75;11.09;10.90;23.37;S0;;;;;;;;2MASX J11591286-0031260,MCG +00-31-012,PGC 037745,SDSS J115912.87-003125.7,SDSS J115912.88-003125.7,SDSS J115912.88-003125.8,UGC 06979;;; +IC0754;G;11:59:23.55;-01:39:16.3;Vir;0.96;0.74;29;14.05;;10.91;10.27;10.02;23.11;E;;;;;;;;2MASX J11592357-0139167,MCG +00-31-013,PGC 037757,SDSS J115923.55-013916.3,UGC 06984;;; +IC0755;Dup;12:01:10.42;+14:06:15.5;Com;;;;;;;;;;;;;;;4019;;;;;; +IC0756;G;12:02:57.81;+04:50:45.1;Vir;1.70;0.70;99;18.06;17.54;11.48;10.75;10.48;23.75;SBc;;;;;;;;2MASX J12025779+0450449,MCG +01-31-015,PGC 038054,SDSS J120257.80+045045.0,SDSS J120257.81+045045.0,SDSS J120257.81+045045.1,UGC 07026;;; +IC0757;Dup;12:04:00.78;+52:35:17.8;UMa;;;;;;;;;;;;;;;4068;;;;;; +IC0758;G;12:04:11.88;+62:30:19.3;UMa;1.75;0.80;28;14.40;;;;;23.59;Sc;;;;;;;;MCG +11-15-014,PGC 038173,SDSS J120411.87+623019.2,SDSS J120411.87+623019.3,SDSS J120411.88+623019.3,UGC 07056;;; +IC0759;Other;12:05:09.33;+20:15:36.0;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0760;G;12:05:53.51;-29:17:31.5;Hya;1.82;0.53;149;13.44;;10.36;9.68;9.39;23.46;S0;;;;;;;;2MASX J12055352-2917314,ESO 440-052,ESO-LV 440-0520,MCG -05-29-010,PGC 038345;;; +IC0761;G;12:05:53.70;-12:40:24.0;Crv;1.00;0.38;108;15.44;;11.97;11.27;11.03;23.52;Sb;;;;;;;;2MASX J12055366-1240232,MCG -02-31-014,PGC 038353;;;B-Mag taken from LEDA. +IC0762;G;12:08:11.96;+25:45:25.7;Com;0.79;0.50;144;14.80;;12.16;11.43;11.15;22.80;Sab;;;;;;;;2MASX J12081195+2545261,IRAS 12056+2602,MCG +04-29-034,PGC 038532,SDSS J120811.95+254525.6,SDSS J120811.95+254525.7;;; +IC0763;G;12:08:15.31;+25:48:41.4;Com;0.91;0.45;86;15.30;;11.94;11.20;10.95;23.48;SBa;;;;;;;;2MASX J12081534+2548410,MCG +04-29-035,PGC 038525,SDSS J120815.31+254841.4;;; +IC0764;G;12:10:14.19;-29:44:12.5;Hya;4.84;1.14;177;13.03;;10.66;10.09;9.71;23.93;SABc;;;;;;;;2MASX J12101419-2944125,ESO 441-013,ESO-LV 441-0130,IRAS 12076-2927,MCG -05-29-025,PGC 038711,UGCA 273;;; +IC0765;Other;12:10:30.97;+16:08:06.7;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0766;G;12:10:53.60;-12:39:18.9;Crv;1.77;0.31;168;14.88;;11.33;10.52;10.29;24.71;S0-a;;;;;;;;2MASX J12105362-1239181,MCG -02-31-020,PGC 038775;;;B-Mag taken from LEDA. +IC0767;G;12:11:02.73;+12:06:14.4;Vir;0.93;0.68;75;14.60;;11.92;11.27;11.21;23.12;E;;;;;;;;2MASX J12110275+1206139,MCG +02-31-042,PGC 038792,SDSS J121102.73+120614.4;;; +IC0768;G;12:11:47.62;+12:08:37.4;Vir;1.29;0.57;112;14.80;;11.94;11.33;11.37;23.11;Sc;;;;;;;;2MASX J12114764+1208376,MCG +02-31-044,PGC 038848,SDSS J121147.61+120837.3,SDSS J121147.62+120837.4,UGC 07192;;; +IC0769;G;12:12:32.33;+12:07:25.7;Vir;2.20;1.51;37;14.10;;11.49;10.74;10.42;23.54;Sbc;;;;;;;;2MASX J12123232+1207254,IRAS 12099+1224,MCG +02-31-047,PGC 038916,SDSS J121232.32+120725.7,SDSS J121232.33+120725.7,UGC 07209;;; +IC0770;G;12:13:02.33;-04:33:12.1;Vir;0.46;0.43;40;16.05;;14.00;13.32;13.14;23.09;;;;;;;;;2MASX J12130229-0433122,PGC 1056625;;; +IC0771;G;12:15:13.24;+13:11:04.3;Vir;0.72;0.58;92;14.90;;12.94;12.11;12.23;22.59;SBc;;;;;;;;2MASX J12151319+1311042,MCG +02-31-067,PGC 039176,SDSS J121513.23+131104.2,SDSS J121513.23+131104.3,SDSS J121513.24+131104.3;;; +IC0772;G;12:15:15.89;+23:57:29.4;Com;0.78;0.36;96;15.50;;11.90;11.15;10.96;23.46;S0-a;;;;;;3067;;2MASX J12151589+2357296,PGC 039178,SDSS J121515.89+235729.3,SDSS J121515.89+235729.4;;; +IC0773;G;12:18:08.09;+06:08:22.4;Vir;0.78;0.65;9;15.20;;11.81;11.16;10.91;22.70;S0-a;;;;;;;;2MASX J12180809+0608222,IRAS 12155+0625,MCG +01-31-044,PGC 039493,SDSS J121808.09+060822.3,SDSS J121808.09+060822.4;;; +IC0774;G;12:18:51.26;-06:45:59.6;Vir;0.80;0.47;142;15.07;;11.72;11.13;10.77;23.81;S0;;;;;;;;2MASX J12185128-0645589,LEDA 157582;;; +IC0775;G;12:18:53.67;+12:54:45.6;Vir;1.05;0.77;11;14.80;;11.21;10.49;10.24;23.09;E-S0;;;;;;;;2MASX J12185371+1254457,MCG +02-31-087,PGC 039587,SDSS J121853.67+125445.6,UGC 07350;;; +IC0776;G;12:19:02.90;+08:51:22.0;Vir;1.12;0.62;93;14.90;;;;;22.81;SBd;;;;;;;;MCG +02-31-088,PGC 039613,UGC 07352;;; +IC0777;G;12:19:23.76;+28:18:35.8;Com;0.84;0.40;144;14.50;;12.02;11.35;11.04;22.54;SBb;;;;;;;;2MASX J12192381+2818355,IRAS 12168+2835,MCG +05-29-052,PGC 039663,SDSS J121923.76+281835.8,SDSS J121923.77+281835.8,UGC 07363;;; +IC0778;Dup;12:14:22.05;+56:00:41.2;UMa;;;;;;;;;;;;;;;4198;;;;;; +IC0779;G;12:19:38.73;+29:52:59.5;Com;0.97;0.93;50;15.40;;12.83;11.98;11.79;23.59;S?;;;;;;;;2MASX J12193875+2952592,MCG +05-29-053,PGC 039690,SDSS J121938.73+295259.5,UGC 07369;;; +IC0780;G;12:19:58.38;+25:46:18.1;Com;1.18;0.83;8;14.50;;11.11;10.41;10.09;23.41;E-S0;;;;;;;;2MASX J12195839+2546181,MCG +04-29-064,PGC 039745,SDSS J121958.37+254618.1,UGC 07381;;; +IC0781;G;12:20:03.30;+14:57:41.5;Com;1.30;1.24;30;14.80;;11.55;10.87;10.84;23.50;E-S0;;;;;;;;2MASX J12200327+1457412,MCG +03-32-002,PGC 039754,SDSS J122003.29+145741.4,SDSS J122003.29+145741.5;;; +IC0782;G;12:21:36.97;+05:45:56.7;Vir;1.14;0.64;61;15.10;;11.24;10.76;10.79;23.13;S0-a;;;;;;;;2MASX J12213697+0545564,MCG +01-32-020,PGC 039962,SDSS J122136.96+054556.7,SDSS J122136.97+054556.7;;; +IC0783;G;12:21:38.79;+15:44:42.4;Com;1.23;1.13;100;14.60;;11.82;11.19;11.06;23.26;S0-a;;;;;;;;2MASX J12213877+1544427,MCG +03-32-008,PGC 039965,SDSS J122138.78+154442.3,SDSS J122138.78+154442.4,SDSS J122138.79+154442.4,UGC 07415;;; +IC0784;G;12:22:30.05;-04:39:09.7;Vir;2.11;0.60;96;13.90;;11.03;10.35;10.16;23.48;SABb;;;;;;;;2MASX J12223004-0439096,IRAS 12199-0422,MCG -01-32-006,PGC 040092;;HOLM 384B is a star.; +IC0785;G;12:23:02.08;-13:13:25.1;Crv;1.13;0.49;70;15.32;;12.30;11.56;11.49;23.56;SBc;;;;;;;;2MASX J12230205-1313253,IRAS 12204-1256,MCG -02-32-007,PGC 040167;;;B-Mag taken from LEDA. +IC0786;G;12:23:10.95;-13:12:16.8;Crv;1.03;0.89;176;15.00;;11.12;10.45;10.15;23.63;S0;;;;;;;;2MASX J12231096-1312168,MCG -02-32-008,PGC 040189;;;B-Mag taken from LEDA. +IC0787;G;12:25:25.12;+16:07:27.1;Com;1.06;0.44;180;15.20;;11.51;10.92;10.56;23.42;Sa;;;;;;;;2MASX J12252510+1607270,MCG +03-32-031,PGC 040517,SDSS J122525.11+160727.0,SDSS J122525.12+160727.1;;; +IC0788;Dup;12:26:07.15;+16:10:51.6;Com;;;;;;;;;;;;;;;4405;;;;;; +IC0789;G;12:26:20.52;+07:27:36.6;Vir;1.01;0.58;140;15.20;;11.96;11.22;11.05;23.54;S0;;;;;;;;2MASX J12262048+0727364,MCG +01-32-061,PGC 040673,SDSS J122620.52+072736.5,SDSS J122620.52+072736.6,UGC 07533;;; +IC0790;Dup;12:26:35.50;+09:02:07.7;Vir;;;;;;;;;;;;;;;4410C;;;;;; +IC0791;G;12:26:59.48;+22:38:22.5;Com;1.05;0.97;78;14.20;;11.47;10.77;10.45;23.20;Sa;;;;;;;;2MASX J12265947+2238224,MCG +04-29-071,PGC 040783,SDSS J122659.47+223822.4,SDSS J122659.47+223822.5,UGC 07555;;; +IC0792;G;12:27:08.77;+16:19:31.4;Com;1.02;0.45;56;14.80;;12.24;11.59;11.26;23.02;Sb;;;;;;;;2MASX J12270877+1619312,MCG +03-32-040,PGC 040800,SDSS J122708.77+161931.4,UGC 07558;;; +IC0793;Dup;12:28:15.93;+09:26:10.3;Vir;;;;;;;;;;;;;;;4445;;;;;; +IC0794;G;12:28:08.61;+12:05:35.9;Vir;1.32;0.94;103;14.07;13.44;11.70;10.70;10.76;23.77;E;;;;;;;;2MASX J12280859+1205356,MCG +02-32-070,PGC 040964,SDSS J122808.61+120535.8,SDSS J122808.61+120535.9,UGC 07585;;; +IC0795;G;12:28:31.34;+23:18:17.8;Com;0.66;0.33;155;15.30;;11.87;11.16;10.88;23.10;S0;;;;;;;;2MASX J12283135+2318180,PGC 041026,SDSS J122831.33+231817.7,SDSS J122831.34+231817.7;;; +IC0796;G;12:29:26.35;+16:24:17.2;Com;1.46;0.46;145;14.07;;11.25;10.61;10.34;23.15;S0-a;;;;;;;;2MASX J12292635+1624170,IRAS 12268+1641,MCG +03-32-051,PGC 041160,SDSS J122926.32+162417.0,UGC 07623;;ASIAGO3 273 is the bar of IC 0796.; +IC0797;G;12:31:54.76;+15:07:26.2;Com;1.10;0.75;105;13.90;;11.58;11.07;10.80;22.18;Sc;;;;;;;;2MASX J12315475+1507261,IRAS 12293+1524,MCG +03-32-058,PGC 041504,SDSS J123154.77+150726.8,UGC 07676;;; +IC0798;G;12:32:33.41;+15:24:55.4;Com;0.90;0.87;36;15.30;;12.43;11.74;11.64;23.67;E;;;;;;;;2MASX J12323339+1524557,PGC 041589,SDSS J123233.40+152455.4;;; +IC0799;Dup;12:33:49.90;-07:22:32.0;Vir;;;;;;;;;;;;;;;4520;;;;;; +IC0800;G;12:33:56.66;+15:21:17.4;Com;1.51;1.10;151;14.30;;11.19;11.34;10.58;23.11;Sc;;;;;;;;2MASX J12335671+1521163,MCG +03-32-069,PGC 041763,SDSS J123356.66+152117.3,SDSS J123356.66+152117.4,UGC 07716;;; +IC0801;G;12:33:44.95;+52:15:17.3;CVn;1.10;0.92;55;14.80;;11.15;10.45;10.20;23.60;Sa;;;;;;;;2MASX J12334501+5215170,MCG +09-21-017,PGC 041739,SDSS J123344.95+521517.2,UGC 07717;;; +IC0802;*;12:35:57.63;+74:18:04.8;Dra;;;;;;;;;;;;;;;;;;;;; +IC0803;GGroup;12:39:37.01;+16:35:16.9;Com;1.20;;;;;;;;;;;;;;;;;MCG +03-32-080;;;Diameter of the group inferred by the author. +IC0803 NED01;G;12:39:35.86;+16:35:16.2;Com;1.00;0.32;75;16.35;;;;;24.37;Sab;;;;;;;;2MASX J12393585+1635161,PGC 215034,MCG +03-32-080 NED01,SDSS J123935.85+163516.1,SDSS J123935.86+163516.1;;;B-Mag taken from LEDA. +IC0803 NED02;G;12:39:37.51;+16:35:18.7;Com;0.89;0.14;125;15.30;;13.37;12.68;12.47;22.41;Sbc;;;;;;;;2MASX J12393745+1635191,IRAS 12371+1651,MCG +03-32-080 NED02,PGC 042367,SDSS J123937.50+163518.6;;HOLM 435B is part of this object.; +IC0804;G;12:41:15.97;-05:00:32.8;Vir;1.03;0.49;64;14.96;;11.25;10.46;10.35;23.46;S0;;;;;;;;2MASX J12411596-0500330,PGC 042549;;; +IC0805;Dup;12:41:25.45;+13:43:46.3;Com;;;;;;;;;;;;;;;4611;;;;;; +IC0806;G;12:42:08.43;-17:20:57.7;Crv;0.94;0.61;107;15.47;;11.84;11.22;10.93;23.64;SBab;;;;;;;;2MASX J12420844-1720569,MCG -03-32-019,PGC 042642;;;B-Mag taken from LEDA. +IC0807;G;12:42:12.49;-17:24:12.8;Crv;1.13;0.70;67;14.61;;11.26;10.58;10.09;23.59;E-S0;;;;;;;;2MASX J12421249-1724129,MCG -03-32-020,PGC 042635,SDSS J124212.47-172412.6;;;B-Mag taken from LEDA. +IC0808;Other;12:41:54.55;+19:55:55.6;Com;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC0809;G;12:42:08.66;+11:45:15.4;Vir;0.97;0.91;4;15.10;;11.59;10.89;10.61;23.27;E;;;;;;3672;;2MASX J12420866+1145159,MCG +02-32-184,PGC 042638,SDSS J124208.66+114515.4,UGC 07863;;; +IC0810;G;12:42:09.08;+12:35:48.5;Vir;1.62;0.58;167;14.70;;11.72;11.16;11.13;23.96;S0-a;;;;;;;;2MASX J12420911+1235486,MCG +02-32-185,PGC 042643,SDSS J124209.08+123548.4,UGC 07864;;; +IC0811;Dup;12:44:47.05;-10:11:52.2;Vir;;;;;;;;;;;;;;;4663;;;;;; +IC0812;G;12:44:50.86;-04:26:04.6;Vir;0.90;0.56;118;14.85;;12.23;11.65;11.49;;S0-a;;;;;;;;2MASX J12445087-0426046,IRAS 12422-0409,PGC 042952,SDSS J124450.84-042604.5;;; +IC0813;G;12:45:11.84;+23:02:10.1;Com;0.94;0.74;21;14.40;;11.05;10.36;10.13;22.83;Sb;;;;;;;;2MASX J12451185+2302101,MCG +04-30-019 NED01,PGC 042981,SDSS J124511.84+230210.0,UGC 07928;;UGC incorrectly says IC 0813 = IC 3734.; +IC0814;G;12:45:34.14;-08:05:31.9;Vir;0.85;0.35;170;15.64;;12.05;11.41;11.08;24.11;E-S0;;;;;;;;2MASX J12453412-0805301,LEDA 158051;;; +IC0815;G;12:46:22.67;+11:52:35.8;Vir;0.85;0.74;138;15.50;;11.89;11.18;10.98;23.79;E;;;;;;;;2MASX J12462267+1152357,MCG +02-33-015,PGC 043086,SDSS J124622.67+115235.7,SDSS J124622.68+115235.8;;; +IC0816;G;12:46:46.34;+09:51:02.0;Vir;1.10;0.70;34;15.10;;11.65;10.88;10.63;23.58;Sa;;;;;;;;2MASX J12464634+0951016,MCG +02-33-019,PGC 043111,SDSS J124646.33+095101.9,SDSS J124646.33+095102.0,SDSS J124646.34+095102.0,UGC 07944;;; +IC0817;G;12:46:56.80;+09:51:25.6;Vir;0.73;0.66;91;15.40;;12.09;11.41;11.28;23.11;E;;;;;;3764;;2MASX J12465678+0951254,MCG +02-33-020,PGC 043126,SDSS J124656.79+095125.5,SDSS J124656.80+095125.5,SDSS J124656.80+095125.6,UGC 07944 NOTES01;;UGC notes a small superposed companion.; +IC0818;G;12:46:44.55;+29:44:07.0;Com;0.89;0.25;47;15.10;;12.11;11.44;11.15;22.85;Sb;;;;;;;;2MASX J12464453+2944068,MCG +05-30-078,PGC 043113,SDSS J124644.55+294407.0;;; +IC0819;Dup;12:46:10.11;+30:43:54.9;Com;;;;;;;;;;;;;;;4676A;;;;;; +IC0820;Dup;12:46:11.24;+30:43:21.9;Com;;;;;;;;;;;;;;;4676B;;;;;; +IC0821;G;12:47:26.16;+29:47:16.0;Com;1.00;0.92;121;14.50;;12.10;11.44;11.68;23.20;SABb;;;;;;;;2MASX J12472618+2947154,MCG +05-30-083,PGC 043161,SDSS J124726.15+294716.0,SDSS J124726.16+294716.0,UGC 07957;;; +IC0822;G;12:47:45.57;+30:04:37.9;Com;0.74;0.55;98;15.44;;11.97;11.30;10.90;23.66;E;;;;;;;;2MASX J12474550+3004378,MCG +05-30-085,PGC 043196,SDSS J124745.56+300437.8,SDSS J124745.56+300437.9;;;B-Mag taken from LEDA. +IC0823;*;12:47:50.86;+27:12:33.0;Com;;;;;;;;;;;;;;;;;;;;The IC identification is not sure, but IC 0823 is certainly not NGC 4692.; +IC0824;Dup;12:49:41.85;-04:34:47.0;Vir;;;;;;;;;;;;;;;4678;;;;;; +IC0825;G;12:50:19.17;-05:21:46.8;Vir;0.62;0.45;79;15.43;;13.82;13.63;12.94;23.29;E-S0;;;;;;;;2MASX J12501917-0521468,LEDA 170209;;The IC number may apply to NGC 4718.; +IC0826;G;12:51:19.93;+31:03:34.7;Com;0.69;0.48;62;14.90;;11.93;11.34;10.97;22.56;SBab;;;;;;;;2MASX J12511994+3103351,MCG +05-30-106,PGC 043538,SDSS J125119.92+310334.6,SDSS J125119.93+310334.6,SDSS J125119.93+310334.7;;; +IC0827;G;12:51:55.06;+16:16:58.3;Com;0.89;0.42;103;15.00;;11.94;11.22;10.88;22.74;Sd;;;;;;;;2MASX J12515504+1616576,IRAS 12494+1633,MCG +03-33-014,PGC 043607,SDSS J125155.05+161658.2,UGC 08008;;; +IC0828;G;12:52:15.63;-08:07:58.3;Vir;0.69;0.27;145;15.02;;11.38;10.64;10.44;;S0;;;;;;;;2MASX J12521564-0807584;;; +IC0829;G;12:52:27.43;-15:31:06.7;Crv;0.38;0.38;105;14.40;;11.10;10.07;10.10;21.06;S0;;;;;;;;2MASX J12522742-1531070,MCG -02-33-037,PGC 043663,PGC 043675;;;B-Mag taken from LEDA. +IC0830;G;12:51:16.52;+53:41:46.7;UMa;1.16;0.60;164;14.30;;11.19;10.54;10.20;23.11;S0-a;;;;;;;;2MASX J12511651+5341465,MCG +09-21-055,PGC 043533,SDSS J125116.51+534146.6,SDSS J125116.52+534146.7,SDSS J125116.52+534146.9,UGC 08003;;; +IC0831;G;12:52:44.07;+26:28:13.5;Com;0.86;0.41;96;15.50;;11.76;11.04;10.79;23.54;E-S0;;;;;;;;2MASX J12524408+2628135,MCG +05-30-113,PGC 043708,SDSS J125244.06+262813.4,SDSS J125244.07+262813.4,SDSS J125244.07+262813.5;;; +IC0832;G;12:53:59.11;+26:26:38.6;Com;0.78;0.74;2;15.00;;11.70;11.05;10.87;23.26;E;;;;;;;;2MASX J12535906+2626381,MCG +05-30-119,PGC 043848,SDSS J125359.11+262638.5;;; +IC0833;G;12:56:38.20;-06:44:00.3;Vir;0.43;0.34;138;16.51;;12.92;12.15;12.14;23.59;;;;;;;;;2MASX J12563821-0644000,PGC 158287;;; +IC0834;G;12:56:18.60;+26:21:32.1;Com;0.91;0.54;96;15.20;;11.61;10.93;10.66;23.64;E;;;;;;;;2MASX J12561859+2621320,MCG +05-31-011,PGC 044138,SDSS J125618.59+262132.0,SDSS J125618.59+262132.1;;; +IC0835;G;12:56:52.28;+26:29:15.8;Com;0.76;0.70;144;14.90;;12.37;11.65;11.39;23.01;SBab;;;;;;;;2MASX J12565229+2629158,MCG +05-31-021,PGC 044200,SDSS J125652.28+262915.7,SDSS J125652.28+262915.8;;; +IC0836;G;12:55:54.02;+63:36:44.4;Dra;1.23;0.24;74;14.60;;11.30;10.55;10.18;22.84;Sab;;;;;;;;2MASX J12555423+6336426,IRAS 12538+6352,MCG +11-16-007,PGC 044092,SDSS J125554.01+633644.4,SDSS J125554.02+633644.4,SDSS J125554.29+633641.8,UGC 08059;;Multiple SDSS entries describe this object.; +IC0837;G;12:57:31.21;+26:30:43.8;Com;0.92;0.33;12;15.40;;12.51;11.91;11.51;23.54;Sab;;;;;;;;2MASX J12573116+2630428,IRAS 12551+2646,MCG +05-31-028,PGC 044322,SDSS J125731.20+263043.7,SDSS J125731.20+263043.8,SDSS J125731.21+263043.8;;; +IC0838;G;12:58:13.57;+26:25:36.8;Com;0.67;0.60;4;14.90;;13.18;12.56;12.34;23.37;Sb;;;;;;;;2MASX J12581357+2625366,MCG +05-31-043,PGC 044444,SDSS J125813.56+262536.7,SDSS J125813.57+262536.8;;; +IC0839;G;12:58:15.05;+28:07:33.3;Com;0.48;0.28;84;15.50;14.56;12.73;12.01;11.72;22.67;S0;;;;;;;;2MASX J12581504+2807327,PGC 044423,SDSS J125815.04+280733.2;;; +IC0840;G;12:58:42.03;+10:36:59.4;Vir;0.82;0.65;161;15.10;;12.55;11.74;11.33;23.23;Sa;;;;;;;;2MASX J12584201+1036592,MCG +02-33-040,PGC 044495,SDSS J125842.03+103659.4,UGC 08090;;; +IC0841;G;12:59:47.34;+21:48:47.6;Com;0.96;0.55;130;15.40;;11.81;11.04;10.73;23.40;SBb;;;;;;;;2MASX J12594731+2148470,IRAS 12573+2204,MCG +04-31-002,PGC 044665,SDSS J125947.33+214847.5;;; +IC0842;G;13:00:39.55;+29:01:09.9;Com;1.14;0.57;56;14.72;13.93;11.78;11.19;10.76;23.20;SBbc;;;;;;;;2MASX J13003953+2901096,MCG +05-31-087,PGC 044795,SDSS J130039.55+290109.8,SDSS J130039.55+290109.9,UGC 08118;;; +IC0843;G;13:01:33.60;+29:07:50.2;Com;1.06;0.53;135;14.62;13.84;11.27;10.55;10.23;23.63;S0;;;;;;;;2MASX J13013361+2907497,MCG +05-31-100,PGC 044908,SDSS J130133.59+290750.1,SDSS J130133.60+290750.1,SDSS J130133.60+290750.2,UGC 08137;;; +IC0844;G;13:03:18.22;-30:31:15.9;Cen;1.77;0.54;100;13.69;;10.43;9.69;9.51;23.59;S0;;;;;;;;2MASX J13031822-3031157,ESO 443-040,ESO-LV 443-0400,MCG -05-31-024,PGC 045086;;; +IC0845;G;13:04:57.42;+12:04:44.6;Vir;0.84;0.64;129;15.50;;11.91;11.28;10.94;23.65;E-S0;;;;;;;;2MASX J13045741+1204446,MCG +02-33-053 NED01,PGC 045234,SDSS J130457.41+120444.6,SDSS J130457.42+120444.5,SDSS J130457.42+120444.6;;; +IC0846;G;13:05:21.11;+23:05:44.0;Com;0.73;0.62;154;15.50;;11.82;11.15;10.90;23.35;E;;;;;;;;2MASX J13052110+2305438,PGC 045267,SDSS J130521.11+230544.0;;; +IC0847;Dup;13:05:32.15;+53:41:06.5;UMa;;;;;;;;;;;;;;;4973;;;;;; +IC0848;G;13:07:01.56;+16:00:25.6;Com;0.73;0.54;165;15.40;;12.94;12.48;11.86;23.23;Sbc;;;;;;;;2MASX J13070154+1600253,MCG +03-33-031,PGC 045414,SDSS J130701.55+160025.5;;; +IC0849;G;13:07:38.69;-00:56:32.9;Vir;1.02;0.90;91;14.00;;11.90;11.06;11.05;22.89;SABc;;;;;;;;2MASX J13073872-0056327,IRAS 13050-0040,MCG +00-34-002,PGC 045480,SDSS J130738.66-005632.6,SDSS J130738.69-005632.8,SDSS J130738.69-005632.9,UGC 08202;;; +IC0850;G;13:07:50.23;-00:52:06.4;Vir;0.95;0.26;68;15.50;;12.60;11.81;11.45;22.77;SBcd;;;;;;;;2MASX J13075031-0052057,IRAS 13052-0036,MCG +00-34-003,PGC 045491,SDSS J130750.22-005206.3;;; +IC0851;G;13:08:34.34;+21:02:59.2;Com;1.13;0.41;152;14.90;;11.87;11.41;11.19;22.50;Sc;;;;;;;;2MASX J13083435+2102590,IRAS 13061+2118,MCG +04-31-009,PGC 045552,SDSS J130834.28+210259.8,UGC 08219;;; +IC0852;G;13:07:36.76;+60:09:25.9;UMa;1.17;0.98;24;14.80;;11.50;10.83;10.52;23.86;E-S0;;;;;;;;2MASX J13073674+6009256,MCG +10-19-035,PGC 045472,SDSS J130736.76+600925.9,SDSS J130736.76+600926.2,SDSS J130736.77+600925.9,UGC 08213;;; +IC0853;G;13:08:41.73;+52:46:27.4;UMa;1.03;0.96;14;15.00;;11.34;10.66;10.34;23.26;Sab;;;;;;4205;;2MASX J13084168+5246271,MCG +09-22-019,PGC 045560,SDSS J130841.72+524627.3,SDSS J130841.72+524627.5,SDSS J130841.73+524627.3,SDSS J130841.73+524627.4,UGC 08230;;; +IC0854;G;13:09:49.97;+24:34:39.2;Com;0.92;0.69;122;15.10;;12.20;11.49;11.21;23.29;SABb;;;;;;;;2MASX J13094995+2434390,MCG +04-31-011 NED01,PGC 045664,SDSS J130949.98+243439.2;;; +IC0855;G;13:10:36.90;-04:29:04.3;Vir;0.72;0.63;15;14.98;;12.93;12.23;12.08;22.88;;;;;;;;;2MASX J13103691-0429042,PGC 045725;;; +IC0856;G;13:10:41.61;+20:32:12.4;Com;0.73;0.21;64;15.20;;12.15;11.38;11.03;22.99;SBab;;;;;;;;2MASX J13104161+2032123,IRAS 13082+2048,PGC 045733;;; +IC0857;G;13:13:50.17;+17:04:34.5;Com;0.99;0.74;100;14.70;;11.91;11.23;10.75;23.03;Sb;;;;;;;;2MASX J13135016+1704345,MCG +03-34-006,PGC 045983,SDSS J131350.17+170435.5,SDSS J131350.18+170434.4,UGC 08310;;; +IC0858;G;13:14:51.94;+17:13:36.4;Com;1.56;1.09;100;14.70;;10.91;10.22;9.92;24.40;S0;;;;;;;;2MASX J13145194+1713364,MCG +03-34-007,PGC 046069,SDSS J131451.94+171336.3,UGC 08321;;; +IC0859;G;13:14:57.28;+17:13:30.6;Com;0.68;0.61;142;15.20;;11.59;10.85;10.66;23.14;E;;;;;;;;2MASX J13145724+1713304,MCG +03-34-008,PGC 046074,SDSS J131457.26+171330.5,UGC 08321 NOTES01;;; +IC0860;G;13:15:03.53;+24:37:07.9;Com;0.96;0.60;19;14.80;;11.56;10.81;10.59;22.87;SBab;;;;;;;;2MASX J13150351+2437074,IRAS 13126+2452,MCG +04-31-015,PGC 046086,SDSS J131503.51+243707.7,SDSS J131503.51+243707.8;;; +IC0861;G;13:15:07.42;+34:19:43.6;CVn;0.84;0.58;76;15.60;;11.54;10.84;10.58;23.83;S0-a;;;;;;;;2MASX J13150738+3419434,MCG +06-29-068,PGC 046092,SDSS J131507.42+341943.5,SDSS J131507.42+341943.6,UGC 08326;;; +IC0862;G;13:16:15.38;+20:02:51.6;Com;0.54;0.54;80;15.20;;12.01;11.28;11.19;22.82;E;;;;;;;;2MASX J13161539+2002511,MCG +03-34-011,PGC 046181,SDSS J131615.38+200251.5,SDSS J131615.38+200251.6;;MCG declination is -1 degree in error.; +IC0863;G;13:17:12.40;-17:15:16.1;Vir;1.14;0.79;45;14.24;;11.09;10.46;10.25;23.16;S0-a;;;;;;;;2MASX J13171239-1715162,IRAS 13145-1659,MCG -03-34-043,PGC 046270;;; +IC0864;G;13:17:08.49;+20:41:30.2;Com;0.58;0.27;23;16.99;;13.08;12.20;11.96;23.03;SBc;;;;;;;;2MASX J13170852+2041313,PGC 163379,SDSS J131708.48+204130.1,SDSS J131708.48+204130.2;;;B-Mag taken from LEDA. +IC0865;G;13:17:35.49;-05:50:02.0;Vir;0.73;0.61;40;15.29;;12.09;11.48;10.95;23.25;Sc;;;;;;;;2MASX J13173550-0550020,LEDA 158675;;; +IC0866;G;13:17:16.75;+20:41:27.6;Com;0.67;0.37;34;15.60;;12.39;11.70;11.34;22.96;SBb;;;;;;;;2MASX J13171672+2041273,IRAS 13148+2057,MCG +04-31-019,PGC 046279,SDSS J131716.74+204127.5,UGC 08354;;; +IC0867;G;13:17:19.79;+20:38:17.1;Com;1.27;0.90;18;15.50;;12.08;11.33;11.10;23.83;Sc;;;;;;;;2MASX J13171978+2038173,MCG +04-31-020,PGC 046283,SDSS J131719.78+203817.0,UGC 08353;;; +IC0868;G;13:17:28.54;+20:36:44.4;Com;0.79;0.74;9;15.40;;11.68;11.03;10.73;23.14;E;;;;;;;;2MASX J13172854+2036443,MCG +04-31-021,PGC 046281,SDSS J131728.54+203644.4;;; +IC0869;GPair;13:17:30.76;+20:40:51.9;Com;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC0869 NED01;G;13:17:29.96;+20:41:03.1;Com;0.55;0.44;80;15.90;;12.84;12.17;11.73;23.32;Sab;;;;;;;;2MASX J13172997+2041033,PGC 1633609,SDSS J131729.95+204103.0;;;B-Mag taken from LEDA. +IC0869 NED02;G;13:17:31.64;+20:40:39.3;Com;0.33;0.29;80;16.58;;13.50;12.84;12.47;23.28;E;;;;;;;;2MASX J13173161+2040393,PGC 1633431,SDSS J131731.63+204039.3;;;B-Mag taken from LEDA. +IC0870;G;13:17:30.90;+20:36:00.4;Com;0.79;0.48;45;15.40;;12.15;11.48;11.14;23.05;Sc;;;;;;;;2MASX J13173089+2036003,IRAS 13150+2051,MCG +04-31-022,PGC 046286;;; +IC0871;G;13:17:58.66;+04:24:12.3;Vir;1.57;0.79;70;14.80;;11.29;10.59;10.29;23.81;Sb;;;;;;;;2MASX J13175865+0424122,IRAS 13155+0439,MCG +01-34-016,PGC 046321,SDSS J131758.65+042412.2,SDSS J131758.66+042412.2,SDSS J131758.66+042412.3,UGC 08358;;Coordinates in A&AS 93, 173, 1992 refer to a star.; +IC0872;G;13:17:01.60;+06:21:25.5;Vir;1.16;0.93;117;15.00;;11.78;11.05;10.97;23.92;Sb;;;;;;;;2MASX J13170157+0621257,MCG +01-34-014,PGC 046250,SDSS J131701.60+062125.4,UGC 08349;;Identity as IC 0872 is not certain.; +IC0873;G;13:18:16.28;+04:27:51.5;Vir;0.94;0.86;120;15.30;;12.01;11.26;10.94;23.82;S0;;;;;;;;2MASX J13181624+0427512,PGC 046345,SDSS J131816.27+042751.4,SDSS J131816.27+042751.5,SDSS J131816.28+042751.4,SDSS J131816.28+042751.5;;; +IC0874;G;13:19:00.52;-27:37:42.8;Hya;1.29;1.05;56;13.46;;10.60;9.92;9.68;22.81;S0;;;;;;;;2MASX J13190052-2737425,ESO 508-042,ESO-LV 508-0420,MCG -04-31-050,PGC 046410;;; +IC0875;G;13:17:07.57;+57:32:22.0;UMa;1.55;1.14;149;13.90;;11.18;10.51;10.30;23.52;S0;;;;;;;;2MASX J13170752+5732218,MCG +10-19-059,PGC 046263,SDSS J131707.56+573222.2,UGC 08355;;; +IC0876;G;13:18:34.58;+04:29:10.7;Vir;0.90;0.76;174;14.80;;11.56;11.01;10.94;23.15;SABb;;;;;;;;2MASX J13183460+0429110,IRAS 13160+0445,MCG +01-34-017,PGC 046370,SDSS J131834.58+042910.6,SDSS J131834.58+042910.7;;; +IC0877;Other;13:17:57.37;+06:04:55.4;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0878;Other;13:18:00.36;+06:07:13.5;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0879;G;13:19:40.57;-27:25:44.3;Hya;0.84;0.34;136;14.01;;11.74;10.85;10.89;21.96;SBab;;;;;;4222;;2MASX J13194056-2725442,ESO 508-047,ESO-LV 508-0470,MCG -04-31-052,PGC 046479;;; +IC0880;Other;13:18:07.36;+06:06:43.6;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0881;G;13:19:56.35;+15:51:01.9;Com;1.53;0.35;12;14.80;;11.26;10.60;10.30;23.62;SBa;;;;;;;;2MASX J13195637+1551019,MCG +03-34-016,PGC 046498,SDSS J131956.34+155101.8,SDSS J131956.34+155101.9,UGC 08375;;; +IC0882;G;13:20:06.94;+15:53:53.3;Com;0.81;0.70;66;15.00;;11.72;11.05;10.70;23.29;E;;;;;;;;2MASX J13200691+1553529,MCG +03-34-017,PGC 046508,SDSS J132006.93+155353.2;;; +IC0883;G;13:20:35.34;+34:08:22.2;CVn;0.79;0.47;152;14.80;;11.99;11.23;10.93;22.59;Sm;;;;;;;;2MASX J13203537+3408218,IRAS 13183+3423,PGC 046560,SDSS J132035.40+340821.5,SDSS J132035.40+340821.7,SDSS J132035.41+340821.6,UGC 08387;;; +IC0884;Other;13:21:54.91;-12:43:47.0;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0885;G;13:22:30.92;+21:18:59.1;Com;1.01;0.89;170;14.90;;11.04;10.33;10.07;23.34;E;;;;;;;;2MASX J13223088+2118589,MCG +04-32-008,PGC 046722,SDSS J132230.91+211859.0,SDSS J132230.91+211859.1;;; +IC0886;G;13:23:57.49;-04:23:43.6;Vir;0.66;0.54;58;15.64;;12.37;11.63;11.39;23.82;;;;;;;;;2MASX J13235748-0423425,LEDA 1058761;;; +IC0887;Other;13:24:11.94;-12:27:37.5;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0888;Dup;13:24:51.41;+13:44:16.3;Vir;;;;;;;;;;;;;;;5136;;;;;; +IC0889;G;13:26:37.54;+11:52:10.2;Vir;0.89;0.76;13;15.50;;12.26;11.61;11.38;23.81;E;;;;;;;;2MASX J13263758+1152105,PGC 047050,SDSS J132637.53+115210.2;;; +IC0890;G;13:28:25.59;-16:05:32.4;Vir;1.16;0.47;146;15.27;;11.46;10.78;10.48;23.86;Sa;;;;;;;;2MASX J13282558-1605326,LEDA 170253;;; +IC0891;G;13:29:59.92;+00:18:18.4;Vir;0.78;0.73;30;14.70;;11.52;10.80;10.67;23.04;E;;;;;;;;2MASX J13295990+0018183,MCG +00-34-040,PGC 047418,SDSS J132959.91+001818.3,SDSS J132959.92+001818.3,SDSS J132959.92+001818.4;;One APM position is east of the nucleus.; +IC0892;G;13:31:45.88;-02:42:47.0;Vir;1.60;0.84;19;14.50;;10.87;10.21;9.99;24.25;S0;;;;;;;;2MASX J13314591-0242464,MCG +00-35-001,PGC 047564,SDSS J133145.87-024247.0,SDSS J133145.88-024247.0,UGC 08512;;; +IC0893;G;13:31:47.38;-02:36:41.8;Vir;1.01;0.20;52;14.79;;11.58;10.80;10.58;22.75;SABa;;;;;;;;2MASX J13314738-0236414,MCG +00-35-002,PGC 047566,SDSS J133147.38-023641.8,UGC 08513;;; +IC0894;G;13:32:04.82;+17:02:56.3;Com;1.14;0.50;79;17.07;16.37;11.58;10.91;10.65;23.78;S0-a;;;;;;;;2MASX J13320482+1702562,MCG +03-35-002,PGC 047597,SDSS J133204.81+170256.2;;; +IC0895;Other;13:32:17.11;+35:39:30.2;CVn;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0896;G;13:34:10.22;+04:52:06.5;Vir;1.04;0.71;29;15.00;;11.58;10.96;10.62;23.79;E;;;;;;;;2MASX J13341021+0452062,MCG +01-35-007,PGC 047794,SDSS J133410.20+045206.4,SDSS J133410.21+045206.4,SDSS J133410.21+045206.5,SDSS J133410.22+045206.5,UGC 08545;;; +IC0897;G;13:34:19.45;+17:50:53.0;Com;0.75;0.32;56;15.60;;12.48;11.85;11.47;23.77;S0-a;;;;;;;;2MASX J13341945+1750534,PGC 047816,SDSS J133419.44+175052.9,SDSS J133419.45+175052.9;;; +IC0898;G;13:34:09.41;+13:16:51.0;Vir;0.61;0.43;163;15.40;;12.44;11.77;11.55;23.18;S0;;;;;;;;2MASX J13340943+1316504,PGC 047796,SDSS J133409.41+131650.9,SDSS J133409.41+131651.0;;; +IC0899;G;13:34:59.46;-08:05:29.9;Vir;0.85;0.71;91;14.91;;11.51;10.82;10.47;23.53;E;;;;;;;;2MASX J13345943-0805291,LEDA 170267;;; +IC0900;G;13:34:43.01;+09:20:12.7;Vir;1.28;0.85;29;14.30;;11.50;10.86;10.43;22.69;SABc;;;;;;;;2MASX J13344300+0920122,IRAS 13322+0935,MCG +02-35-004,PGC 047855,SDSS J133443.01+092012.7,UGC 08555;;; +IC0901;G;13:35:42.40;+13:19:51.3;Boo;0.74;0.53;91;15.20;;12.46;11.84;11.41;23.11;S?;;;;;;;;2MASX J13354238+1319514,MCG +02-35-011,PGC 047954,SDSS J133542.39+131951.2,SDSS J133542.40+131951.3;;Both UGC 08576 and IC 0901 contribute to IRAS 13331+1334.; +IC0902;G;13:36:01.22;+49:57:39.0;UMa;2.18;0.55;162;14.70;;11.44;10.60;10.42;23.98;Sb;;;;;;;;2MASX J13360121+4957385,IRAS 13340+5012,MCG +08-25-024,PGC 047985,SDSS J133601.21+495739.0,SDSS J133601.22+495739.0,UGC 08593;;; +IC0903;G;13:38:26.07;-00:13:39.5;Vir;1.64;0.62;178;14.70;13.62;11.50;10.83;10.59;23.55;Sab;;;;;;;;2MASX J13382611-0013390,MCG +00-35-013,PGC 048207,SDSS J133826.07-001339.4,SDSS J133826.07-001339.5,UGC 08625;;; +IC0904;G;13:38:32.21;+00:32:24.7;Vir;1.05;0.54;129;15.10;14.21;12.06;11.42;11.14;23.66;S0-a;;;;;;;;2MASX J13383217+0032250,MCG +00-35-014,PGC 048217,SDSS J133832.21+003224.6,UGC 08628;;; +IC0905;G;13:40:02.93;+23:08:34.7;Boo;0.86;0.70;130;15.00;;11.87;11.13;10.87;23.47;E;;;;;;;;2MASX J13400291+2308351,IRAS 13376+2323,MCG +04-32-020,PGC 048349,SDSS J134002.92+230834.6,SDSS J134002.92+230834.7;;; +IC0906;G;13:40:09.99;+23:20:27.9;Boo;0.84;0.29;145;15.70;;12.74;12.07;11.74;23.05;Sc;;;;;;;;2MASX J13401000+2320281,MCG +04-32-021,PGC 048348,SDSS J134009.99+232027.8;;; +IC0907;G;13:39:23.01;+51:03:03.8;UMa;1.11;0.21;20;15.30;;11.91;11.15;10.90;23.16;Sb;;;;;;;;2MASX J13392302+5103036,MCG +09-22-090,PGC 048286,SDSS J133923.00+510303.8,SDSS J133923.01+510303.8,UGC 08643;;; +IC0908;G;13:41:18.94;-04:20:39.1;Vir;0.90;0.55;82;14.67;;12.90;12.26;;22.58;SABc;;;;;;;;2MASX J13411893-0420390,MCG -01-35-009,PGC 048443;;; +IC0909;G;13:40:51.16;+24:28:23.8;Boo;0.73;0.67;2;14.90;;12.03;11.26;11.08;22.85;Sa;;;;;;;;2MASX J13405113+2428239,IRAS 13385+2443,MCG +04-32-023,PGC 048408,SDSS J134051.15+242823.8,SDSS J134051.16+242823.8;;; +IC0910;G;13:41:07.86;+23:16:55.4;Boo;0.68;0.56;120;15.10;;12.17;11.50;11.16;22.81;Sab;;;;;;;;2MASX J13410784+2316550,MCG +04-32-025 NED01,PGC 048424,SDSS J134107.85+231655.3;;; +IC0911;G;13:41:25.37;+23:14:50.9;Boo;0.56;0.40;99;15.60;;12.35;11.67;11.29;22.78;SBab;;;;;;;;2MASX J13412534+2314505,MCG +04-32-027,PGC 048448,SDSS J134125.37+231450.9,UGC 08665 NED01;;; +IC0912;G;13:41:28.86;+23:14:43.6;Boo;0.72;0.35;100;15.60;;12.55;11.82;11.72;23.19;Sa;;;;;;;;2MASX J13412883+2314435,MCG +04-32-028,PGC 048449,SDSS J134128.86+231443.5,UGC 08665 NED02;;; +IC0913;G;13:41:29.66;+23:10:01.0;Boo;0.72;0.49;63;15.60;;12.50;11.81;11.40;23.13;Sb;;;;;;;;2MASX J13412963+2310005,MCG +04-32-029,PGC 048458,SDSS J134129.65+231001.0,SDSS J134129.66+231001.0,UGC 08664;;; +IC0914;G;13:41:40.61;+23:11:20.5;Boo;0.79;0.65;165;15.20;;12.81;12.30;11.82;23.27;Sc;;;;;;;;2MASX J13414063+2311194,MCG +04-32-030,PGC 048475,SDSS J134140.60+231120.5;;; +IC0915;G;13:43:27.35;-17:19:58.1;Vir;0.45;0.41;110;15.29;;11.86;11.14;10.92;;E-S0;;;;;;;;2MASX J13432733-1719576,IRAS 13407-1704,PGC 088922;;; +IC0916;G;13:42:38.15;+24:27:54.2;Boo;0.86;0.83;85;15.40;;12.06;11.32;11.06;23.87;E;;;;;;;;2MASX J13423818+2427544,MCG +04-32-031,PGC 048564,SDSS J134238.14+242754.2;;; +IC0917;*;13:42:31.25;+55:38:12.9;UMa;;;;;;;;;;;;;;;;;;SDSS J134231.25+553812.8;;Identification as IC 0917 is not certain.; +IC0918;G;13:42:37.81;+55:31:46.4;UMa;0.63;0.23;102;17.97;;;;;23.80;Sb;;;;;;;;2MASX J13423764+5531467,PGC 250533,SDSS J134237.80+553146.3,SDSS J134237.81+553146.4;;May contribute to the IR source IRAS F13407+5547.;B-Mag taken from LEDA. +IC0919;G;13:42:47.50;+55:31:17.0;UMa;0.54;0.32;25;15.60;;12.52;11.80;11.49;23.00;S0-a;;;;;;;;2MASX J13424753+5531167,PGC 048570,SDSS J134247.46+553117.1,SDSS J134247.49+553116.9,SDSS J134247.50+553117.0;;Identification as IC 0919 is not certain.; +IC0920;G;13:45:24.67;-12:34:27.0;Vir;0.87;0.77;10;14.33;;10.96;10.26;9.97;23.02;E;;;;;;;;2MASX J13452467-1234271,MCG -02-35-015,PGC 048779;;;B-Mag taken from LEDA. +IC0921;G;13:43:08.00;+55:39:04.4;UMa;0.29;0.20;104;;;;;;23.46;E;;;;;;;;2MASX J13430804+5539043,PGC 250964,SDSS J134307.99+553904.3,SDSS J134308.00+553904.4;;Identification as IC 0921 is not certain.; +IC0922;G;13:42:56.36;+55:36:14.0;UMa;0.78;0.47;120;18.05;;;;;24.12;E;;;;;;;;2MASX J13425640+5536137,PGC 250797,SDSS J134256.34+553614.2,SDSS J134256.35+553613.9,SDSS J134256.35+553614.0,SDSS J134256.36+553614.0;;Identification as IC 0922 is not certain.;B-Mag taken from LEDA. +IC0923;G;13:43:14.19;+55:36:11.3;UMa;0.56;0.50;101;16.37;;;;;24.00;E;;;;;;;;2MASX J13431420+5536113,SDSS J134314.18+553611.3,SDSS J134314.19+553611.3;;Identification as IC 0923 is not certain.;B-Mag taken from LEDA +IC0924;G;13:45:37.59;-12:27:18.3;Vir;0.78;0.47;77;15.41;;;;;23.10;Sab;;;;;;;;PGC 170293;;; +IC0925;G;13:43:16.10;+55:36:56.9;UMa;0.54;0.17;106;17.49;;;;;23.55;Sbc;;;;;;;;2MASX J13431609+5536563,PGC 250835,SDSS J134316.09+553656.8,SDSS J134316.10+553656.8,SDSS J134316.11+553656.8;;Identification as IC 0925 is not certain.;B-Mag taken from LEDA. +IC0926;G;13:43:39.27;+55:37:53.5;UMa;0.35;0.18;94;17.46;;;;;24.01;E;;;;;;;;2MASX J13433923+5537534,SDSS J134339.26+553753.4,SDSS J134339.27+553753.5;;Identification as IC 0926 is not certain.;B-Mag taken from LEDA. +IC0927;G;13:45:52.39;-12:27:52.2;Vir;0.87;0.74;75;15.27;;;;;23.55;Sbc;;;;;;;;PGC 170296;;; +IC0928;G;13:43:48.00;+55:34:04.3;UMa;0.34;0.25;11;18.67;;;;;23.92;E;;;;;;;;2MASX J13434806+5534044,PGC 250671,SDSS J134347.99+553404.2,SDSS J134348.00+553404.2,SDSS J134348.00+553404.3;;Identification as IC 0928 is not certain.;B-Mag taken from LEDA. +IC0929;G;13:43:45.02;+55:38:01.6;UMa;0.46;0.37;81;17.83;;;;;23.56;E;;;;;;;;2MASX J13434501+5538014,PGC 250902,SDSS J134345.00+553801.8,SDSS J134345.01+553801.6,SDSS J134345.02+553801.6;;Identification as IC 0929 is not certain.;B-Mag taken from LEDA. +IC0930;G;13:43:45.55;+55:38:47.5;UMa;0.40;0.33;99;17.10;;;;;24.00;E;;;;;;;;2MASX J13434549+5538474,SDSS J134345.54+553847.4,SDSS J134345.55+553847.4,SDSS J134345.55+553847.5;;Identification as IC 0930 is not certain.;B-Mag taken from LEDA +IC0931;G;13:43:49.19;+55:37:26.3;UMa;0.25;0.19;61;;;;;;23.11;Sb;;;;;;;;2MASX J13434914+5537264,PGC 250864,SDSS J134349.18+553726.3,SDSS J134349.19+553726.3;;Identification as IC 0931 is not certain.; +IC0932;G;13:43:51.20;+55:38:48.3;UMa;0.47;0.23;64;18.13;;;;;24.32;;;;;;;;;2MASX J13435116+5538483,PGC 250948,SDSS J134351.23+553848.5;;Identification as IC 0932 is not certain.;B-Mag taken from LEDA. +IC0933;G;13:45:16.16;+23:13:08.2;Boo;1.19;0.85;150;14.70;;11.08;10.35;10.08;23.50;S0;;;;;;;;2MASX J13451616+2313086,MCG +04-32-036,PGC 048760,SDSS J134516.16+231308.2,UGC 08697;;; +IC0934;G;13:43:52.39;+55:39:24.5;UMa;0.36;0.28;174;17.38;;;;;23.70;Sbc;;;;;;0935;;2MASX J13435235+5539243,SDSS J134352.38+553924.5,SDSS J134352.39+553924.5;;Identification as IC 0934 is not certain.;B-Mag taken from LEDA +IC0935;Dup;13:43:52.39;+55:39:24.5;UMa;;;;;;;;;;;;;;;;0934;;;;; +IC0936;G;13:44:08.55;+55:42:22.0;UMa;0.41;0.21;93;17.39;;;;;23.75;Sb;;;;;;;;PGC 2511548,SDSS J134408.54+554221.9,SDSS J134408.55+554221.9,SDSS J134408.55+554222.0;;Identification as IC 0936 is not certain.;B-Mag taken from LEDA. +IC0937;G;13:44:28.93;+55:37:48.7;UMa;0.52;0.47;114;17.50;;;;;24.75;Sab;;;;;;;;2MASX J13442896+5537482,SDSS J134428.92+553748.6,SDSS J134428.92+553748.7,SDSS J134428.93+553748.7;;Identification as IC 0937 is not certain.;B-Mag taken from LEDA. +IC0938;G;13:44:31.25;+55:37:38.6;UMa;0.76;0.29;156;16.50;;;;;24.04;Sab;;;;;;;;2MASX J13443120+5537382,SDSS J134431.24+553738.5,SDSS J134431.25+553738.6;;Identification as IC 0938 is not certain.;B-Mag taken from LEDA. +IC0939;G;13:47:43.13;+03:24:41.3;Vir;1.02;0.93;121;14.70;;11.12;10.36;10.05;23.40;E;;;;;;;;2MASX J13474311+0324408,MCG +01-35-036,PGC 048914,SDSS J134743.13+032441.3,SDSS J134743.13+032441.4,SDSS J134743.14+032441.4;;; +IC0940;G;13:47:57.71;+03:26:58.7;Vir;0.67;0.38;124;15.30;;;;;23.14;S0-a;;;;;;;;PGC 048933,SDSS J134757.71+032658.6,SDSS J134757.71+032658.7;;; +IC0941;G;13:48:35.64;+24:00:54.3;Boo;0.90;0.49;112;15.20;;11.48;10.76;10.45;23.37;Sa;;;;;;;;2MASX J13483563+2400543,MCG +04-33-007,PGC 048998,SDSS J134835.64+240054.3;;; +IC0942;G;13:47:41.14;+56:37:17.7;UMa;1.00;0.66;96;15.30;;11.96;11.04;10.79;23.96;E;;;;;;;;2MASX J13474115+5637181,MCG +10-20-031,PGC 048903,SDSS J134741.13+563717.7,SDSS J134741.14+563717.6,SDSS J134741.14+563717.7,SDSS J134741.14+563718.0;;; +IC0943;G;13:50:32.13;+03:11:39.0;Vir;0.86;0.82;1;14.80;;11.91;11.24;10.84;23.08;SBa;;;;;;;;2MASX J13503214+0311394,MCG +01-35-041,PGC 049130,SDSS J135032.12+031138.9,SDSS J135032.13+031138.9,SDSS J135032.13+031139.0;;; +IC0944;G;13:51:30.87;+14:05:32.0;Boo;1.53;0.74;107;14.70;;10.75;;9.67;23.68;Sa;;;;;;;;2MASX J13513089+1405316,IRAS 13490+1420,MCG +02-35-019,PGC 049204,SDSS J135130.86+140531.9,SDSS J135130.87+140532.0,UGC 08766;;; +IC0945;G;13:47:07.80;+72:04:13.4;UMi;1.00;0.59;118;15.10;;12.02;11.41;11.12;23.45;Sb;;;;;;;;2MASX J13470784+7204135,MCG +12-13-010,PGC 048867,UGC 08732;;; +IC0946;G;13:52:08.36;+14:06:58.4;Boo;0.90;0.70;104;14.50;;11.21;10.51;10.25;22.80;Sa;;;;;;;;2MASX J13520831+1406585,MCG +02-35-021,PGC 049244,SDSS J135208.35+140658.3,SDSS J135208.35+140658.4,SDSS J135208.36+140658.4,UGC 08772;;; +IC0947;G;13:52:35.90;+00:49:06.1;Vir;1.67;1.09;65;14.20;;9.25;8.79;8.67;23.84;E-S0;;;;;;;;2MASX J13523589+0049058,MCG +00-35-023,PGC 049287,UGC 08784;;The APM image includes a bright superposed star.; +IC0948;G;13:52:26.71;+14:05:28.6;Boo;1.18;0.66;151;14.40;;10.85;10.14;9.88;23.47;E;;;;;;;;2MASX J13522671+1405281,MCG +02-35-023,PGC 049281,SDSS J135226.71+140528.5,SDSS J135226.71+140528.6,UGC 08779;;; +IC0949;G;13:52:16.76;+22:31:17.7;Boo;1.27;0.44;137;15.40;;11.98;11.21;10.88;23.49;Sd;;;;;;;;2MASX J13521678+2231171,IRAS 13499+2246,MCG +04-33-015,PGC 049265,SDSS J135216.76+223117.6,SDSS J135216.76+223117.7,UGC 08777;;; +IC0950;GPair;13:52:26.20;+14:29:23.0;Boo;0.80;;;;;;;;;;;;;;;;;MCG +03-35-032,UGC 08780;;;Diameter of the group inferred by the author. +IC0950 NED01;G;13:52:25.64;+14:29:19.4;Boo;1.23;0.38;124;16.28;;;;;25.00;Sa;;;;;;;;2MASS J13522563+1429193,PGC 3442468,SDSS J135225.63+142919.2,SDSS J135225.64+142919.3,UGC 08780 NED01;;;B-Mag taken from LEDA. +IC0950 NED02;G;13:52:26.73;+14:29:27.2;Boo;0.99;0.89;152;15.12;;11.73;11.00;10.65;23.75;Sab;;;;;;;;2MASX J13522667+1429271,PGC 049280,SDSS J135226.64+142927.4,SDSS J135226.64+142927.5,SDSS J135226.65+142927.5,UGC 08780 NED02;;;B-Mag taken from LEDA. +IC0951;G;13:51:47.21;+50:58:42.0;UMa;1.05;1.00;5;14.40;;11.87;11.08;10.84;23.19;Scd;;;;;;;;2MASX J13514724+5058419,MCG +09-23-012,PGC 049215,SDSS J135147.20+505841.9,SDSS J135147.20+505842.0,SDSS J135147.21+505842.0,UGC 08775;;; +IC0952;G;13:53:41.92;+03:22:38.6;Vir;1.25;0.47;94;14.77;;11.92;11.25;11.06;23.20;SBbc;;;;;;;;2MASX J13534191+0322390,MCG +01-35-049,PGC 049373,SDSS J135341.91+032238.6,SDSS J135341.92+032238.6,UGC 08808;;; +IC0953;Other;13:54:57.22;-30:16:59.9;Cen;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing obvious here."; +IC0954;G;13:49:56.90;+71:09:52.4;UMi;0.96;0.53;80;14.50;;11.62;11.02;10.73;22.74;Sab;;;;;;;;2MASX J13495692+7109522,MCG +12-13-018,PGC 049083,UGC 08765;;The 2MASS position refers to the eastern of two bright knots.; +IC0955;Other;13:55:43.32;-30:15:40.3;Cen;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC0956;GPair;13:54:40.68;+20:43:17.3;Boo;0.80;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC0956 NED01;G;13:54:40.28;+20:43:11.3;Boo;0.47;0.41;129;15.70;;;;;23.12;Sab;;;;;;;;2MASSJ13544017+2043127,PGC 049444;;; +IC0956 NED02;G;13:54:40.56;+20:43:01.2;Boo;0.59;0.49;29;15.95;;12.70;11.52;11.63;23.66;E;;;;;;;;2MASX J13544057+2043014,PGC 3441829,SDSS J135440.55+204301.2;;;B-Mag taken from LEDA. +IC0957;Other;13:56:08.36;-30:14:15.5;Cen;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing obvious here."; +IC0958;Dup;13:55:38.75;+04:59:06.2;Vir;;;;;;;;;;;;;;;5360;;;;;; +IC0959;G;13:56:03.40;+13:30:21.0;Boo;1.50;0.88;2;14.40;;11.14;10.36;10.05;23.67;Sa;;;;;;;;2MASX J13560341+1330207,MCG +02-36-001,PGC 049540,SDSS J135603.40+133021.0,UGC 08848;;; +IC0960;GPair;13:55:59.57;+17:30:21.0;Boo;1.80;;;;;;;;;;;;;;;;;UGC 08849;;;Diameter of the group inferred by the author. +IC0960A;G;13:55:59.09;+17:29:57.2;Boo;0.64;0.34;110;14.80;;13.72;12.90;12.69;23.17;Sb;;;;;;;;2MASX J13555904+1729577,MCG +03-36-003,PGC 049535,SDSS J135559.08+172957.2,UGC 08849 NED01;;Component 'a)' in UGC notes.; +IC0960B;G;13:56:00.12;+17:30:41.6;Boo;0.89;0.34;24;14.80;;11.99;11.13;10.78;23.64;S0;;;;;;;;2MASX J13560009+1730417,MCG +03-36-004,PGC 049536,SDSS J135600.11+173041.7,UGC 08849 NED02;;Component 'b)' in UGC notes.; +IC0961;G;13:55:46.79;+25:50:25.3;Boo;0.81;0.74;10;15.50;;12.47;11.74;11.56;23.63;SBab;;;;;;;;2MASX J13554678+2550250,MCG +04-33-031,PGC 049522,SDSS J135546.78+255025.3,SDSS J135546.79+255025.3;;; +IC0962;G;13:57:13.20;+12:01:16.8;Boo;0.85;0.84;85;14.00;;11.25;10.50;10.22;22.42;S0;;;;;;;;2MASX J13571321+1201163,IRAS 13547+1215,MCG +02-36-003,PGC 049626,SDSS J135713.19+120116.7,SDSS J135713.20+120116.8,UGC 08868;;; +IC0963;G;13:57:25.02;+17:24:27.9;Boo;0.64;0.53;5;15.20;;12.75;12.09;11.82;22.80;SBc;;;;;;;;2MASX J13572502+1724278,MCG +03-36-009,PGC 049647,SDSS J135725.02+172428.3;;; +IC0964;G;13:57:41.35;+17:30:31.4;Boo;0.64;0.56;134;15.30;;13.03;12.32;11.92;23.13;Sbc;;;;;;;;2MASX J13574129+1730319,MCG +03-36-010,PGC 049661,SDSS J135741.34+173031.4;;; +IC0965;G;13:57:47.50;+17:30:37.9;Boo;0.80;0.61;64;15.20;;12.06;11.48;11.14;23.45;E-S0;;;;;;;;2MASX J13574751+1730379,MCG +03-36-011,PGC 049667,SDSS J135747.49+173037.8,SDSS J135747.49+173037.9;;; +IC0966;G;13:58:14.00;+05:24:29.8;Vir;0.92;0.77;155;15.00;;11.75;11.19;10.87;23.22;S0;;;;;;;;2MASX J13581402+0524296,MCG +01-36-006,PGC 049704,SDSS J135813.99+052429.8,SDSS J135814.00+052429.8,UGC 08884;;; +IC0967;G;13:58:22.95;+14:27:26.1;Boo;0.97;0.42;26;14.70;;11.78;11.08;10.82;23.05;Sa;;;;;;;;2MASX J13582293+1427261,IRAS 13559+1442,MCG +03-36-015,PGC 049721;;; +IC0968;GPair;14:00:37.22;-02:54:27.3;Vir;1.10;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC0968 NED01;G;14:00:36.61;-02:54:32.8;Vir;0.69;0.43;123;14.80;;12.29;11.68;11.28;23.27;E-S0;;;;;;;;2MASX J14003658-0254321,MCG +00-36-007,PGC 049866,SDSS J140036.61-025432.7;;; +IC0968 NED02;G;14:00:37.96;-02:54:22.7;Vir;0.68;0.34;7;16.21;;12.53;11.90;11.75;23.77;E-S0;;;;;;;;2MASX J14003799-0254221,PGC 1080186,SDSS J140037.96-025422.7;;; +IC0969;G;14:01:46.20;-04:10:49.4;Vir;0.60;0.39;176;16.05;;12.61;11.97;11.85;23.60;S0-a;;;;;;;;2MASX J14014624-0410489,LEDA 1061769;;; +IC0970;G;14:02:34.21;+14:33:09.2;Boo;1.26;0.35;54;14.56;;11.61;10.93;10.63;23.47;S0-a;;;;;;;;2MASX J14023356+1433025,MCG +03-36-028,PGC 050010,SDSS J140234.20+143309.1,SDSS J140234.21+143309.1,SDSS J140234.21+143309.2,UGC 08949;;;B-Mag taken from LEDA. +IC0971;G;14:03:52.79;-10:08:26.1;Vir;2.26;1.29;129;13.33;;11.56;10.99;10.47;23.37;Sc;;;;;;;;2MASX J14035278-1008260,IRAS 14012-0954,MCG -02-36-005,PGC 050120;;;B-Mag taken from LEDA. +IC0972;PN;14:04:25.91;-17:13:41.5;Vir;0.70;;;14.90;13.90;15.78;15.41;15.16;;;;17.91;;;;;;PK 326+42 1,PN G326.7+42.2;;; +IC0973;Dup;14:06:29.50;-05:28:53.3;Vir;;;;;;;;;;;;;;;5467;;;;;; +IC0974;*;14:06:34.36;-05:29:32.7;Vir;;;;17.33;16.72;15.32;14.92;14.87;;;;;;;;;;2MASS J14063426-0529335;;Identification as IC 0974 is not certain.; +IC0975;G;14:07:08.84;+15:19:05.1;Boo;0.75;0.57;174;15.60;;12.03;11.57;10.93;23.70;E;;;;;;;;2MASX J14070882+1519047,MCG +03-36-048,PGC 050362,SDSS J140708.84+151905.0;;; +IC0976;G;14:08:43.29;-01:09:41.9;Vir;1.52;0.62;174;14.10;;11.18;10.59;10.35;23.61;S0-a;;;;;;;;2MASX J14084326-0109420,MCG +00-36-020,PGC 050479,SDSS J140843.28-010941.8,SDSS J140843.28-010941.9,SDSS J140843.29-010941.9,UGC 09040;;; +IC0977;G;14:08:42.05;-03:00:08.8;Vir;0.69;0.53;132;15.30;;13.33;12.59;12.71;23.00;Sbc;;;;;;;;2MASX J14084204-0300090,PGC 050477,SDSS J140842.05-030008.7,SDSS J140842.06-030008.8;;; +IC0978;G;14:08:58.10;-02:58:25.6;Vir;0.97;0.51;25;15.00;;13.54;12.57;12.66;23.29;Scd;;;;;;;;2MASX J14085808-0258258,MCG +00-36-021,PGC 050493,SDSS J140858.10-025825.5,SDSS J140858.10-025825.6;;; +IC0979;G;14:09:32.37;+14:49:54.6;Boo;1.09;0.66;172;14.50;;11.22;10.56;10.28;22.99;SBab;;;;;;;;2MASX J14093239+1449541,MCG +03-36-061,PGC 050530,SDSS J140932.36+144954.6,UGC 09053;;; +IC0980;G;14:10:22.41;-07:20:33.3;Vir;0.83;0.73;64;14.98;;11.54;10.97;10.62;23.66;E;;;;;;;;2MASX J14102244-0720332,LEDA 1020574;;; +IC0981;G;14:10:28.14;-04:10:17.2;Vir;0.86;0.43;73;15.09;;12.28;11.55;11.12;23.41;;;;;;;;;2MASX J14102813-0410173,LEDA 1061875;;; +IC0982;G;14:09:59.09;+17:41:46.0;Boo;0.95;0.90;35;14.60;;11.33;10.76;10.39;23.23;S0;;;;;;;;2MASX J14095907+1741455,MCG +03-36-066,PGC 050560,SDSS J140959.09+174146.0,UGC 09059;;; +IC0983;G;14:10:04.37;+17:44:01.8;Boo;2.32;2.01;125;14.30;;10.00;9.39;9.08;23.19;SBbc;;;;;;;;2MASX J14100440+1744016,MCG +03-36-068,PGC 050577,SDSS J141004.37+174401.8,UGC 09061;;; +IC0984;G;14:10:07.76;+18:21:52.8;Boo;1.90;0.47;36;14.50;;11.14;10.46;10.18;23.61;Sb;;;;;;;;2MASX J14100775+1821520,MCG +03-36-070,PGC 050580,SDSS J141007.75+182152.8,SDSS J141007.76+182152.8,UGC 09062;;HOLM 596B is a star.; +IC0985;G;14:11:32.87;-03:13:11.1;Vir;0.75;0.42;58;14.80;;12.50;11.84;11.82;22.66;Sa;;;;;;;;2MASX J14113288-0313111,MCG +00-36-024,PGC 050671,SDSS J141132.86-031311.1,SDSS J141132.87-031311.1;;; +IC0986;G;14:11:26.23;+01:17:11.5;Vir;0.81;0.76;52;14.80;;11.45;10.77;10.50;23.00;E-S0;;;;;;;;2MASX J14112625+0117117,MCG +00-36-025,PGC 050662,SDSS J141126.22+011711.4,SDSS J141126.23+011711.4,SDSS J141126.23+011711.5;;; +IC0987;G;14:11:31.88;+19:10:20.2;Boo;0.61;0.38;79;15.40;;;;;22.77;SBb;;;;;;;;MCG +03-36-078,PGC 050663,SDSS J141131.87+191020.2,SDSS J141131.88+191020.2;;; +IC0988;G;14:14:32.06;+03:11:24.9;Vir;0.61;0.40;41;14.80;;11.69;10.97;10.83;22.21;S0-a;;;;;;;;2MASX J14143206+0311242,MCG +01-36-026,PGC 050873,SDSS J141432.05+031124.8,SDSS J141432.05+031124.9,SDSS J141432.06+031124.8,SDSS J141432.06+031124.9;;; +IC0989;G;14:14:51.34;+03:07:51.2;Vir;0.98;0.84;72;14.40;;10.85;10.17;9.59;22.84;E;;;;;;;;2MASX J14145136+0307512,MCG +01-36-027,PGC 050891,SDSS J141451.34+030751.3,SDSS J141451.35+030751.2,SDSS J141451.35+030751.3,SDSS J141451.36+030751.3,UGC 09114;;UGC misprints name as 'MCG +00-36-(27)'.; +IC0990;G;14:15:49.19;+39:47:52.5;Boo;0.54;0.43;54;15.40;;12.12;11.38;11.35;22.92;E;;;;;;;;2MASX J14154924+3947523,MCG +07-29-056,PGC 050958,SDSS J141549.18+394752.4,SDSS J141549.19+394752.4,SDSS J141549.19+394752.5;;; +IC0991;G;14:17:48.58;-13:52:22.6;Vir;1.56;0.97;104;13.60;;10.84;10.01;9.96;23.05;SBc;;;;;;;;2MASX J14174858-1352224,IRAS 14151-1338,MCG -02-36-019,PGC 051059;;; +IC0992;G;14:18:14.91;+00:53:27.9;Vir;0.88;0.67;114;14.90;;12.77;12.08;11.92;23.12;SABb;;;;;;;;2MASX J14181491+0053277,IRAS 14156+0107,MCG +00-36-033,PGC 051090,SDSS J141814.91+005327.8,SDSS J141814.91+005327.9,SDSS J141814.91+005328.0,UGC 09147;;"CGCG misprints name as 'IC 0942'; corrected in vol III (errata)."; +IC0993;G;14:18:18.62;+11:12:59.0;Boo;0.77;0.48;169;15.40;;12.80;12.16;11.88;23.32;Sb;;;;;;;;2MASX J14181860+1112594,MCG +02-36-063,PGC 051093,SDSS J141818.61+111259.0,SDSS J141818.62+111259.0,UGC 09153 NOTES01;;; +IC0994;G;14:18:22.63;+11:11:42.6;Boo;1.46;0.60;13;14.80;;11.30;10.67;10.44;23.75;SABa;;;;;;;;2MASX J14182261+1111424,MCG +02-36-064,PGC 051095,SDSS J141822.63+111142.5,SDSS J141822.63+111142.6,UGC 09153;;; +IC0995;G;14:16:31.11;+57:48:36.4;UMa;1.67;0.43;147;14.50;;12.42;11.58;11.57;23.29;Sd;;;;;;;;2MASX J14163108+5748373,MCG +10-20-091,PGC 050990,SDSS J141631.09+574836.6,SDSS J141631.10+574836.4,SDSS J141631.10+574836.8,SDSS J141631.11+574836.4,UGC 09145;;; +IC0996;G;14:17:22.07;+57:37:47.5;UMa;1.35;0.21;153;14.60;;12.24;11.60;11.21;22.76;Sbc;;;;;;;;2MASX J14172205+5737480,IRAS 14157+5751,MCG +10-20-092,PGC 051036,SDSS J141722.06+573747.4,SDSS J141722.07+573747.4,SDSS J141722.07+573747.5,SDSS J141722.07+573747.7,UGC 09152;;; +IC0997;GPair;14:19:59.25;-04:27:04.5;Vir;1.50;;;;;;;;;;;;;;;;;;;Identification as IC 0997 is not certain.;Diameter of the group inferred by the author. +IC0997 NED01;G;14:19:59.25;-04:27:04.3;Vir;1.41;0.83;10;14.50;;10.65;9.95;9.56;23.38;Sc;;;;;;;;2MASX J14195923-0427044,IRAS 14173-0413,MCG -01-37-001,PGC 051220;;; +IC0997 NED02;G;14:19:59.75;-04:27:08.3;Vir;1.00;0.50;163;15.71;;;;;24.45;;;;;;;;;PGC 1057935;;;B-Mag taken from LEDA. +IC0998;G;14:20:19.29;-04:24:59.2;Vir;0.93;0.26;55;15.67;;12.21;11.54;11.34;24.26;;;;;;;;;2MASX J14201929-0424594,LEDA 1058483;;Identification as IC 0998 is not at all certain.;B-Mag taken from LEDA. +IC0999;G;14:19:32.67;+17:52:31.1;Boo;0.85;0.69;144;14.50;;11.46;10.74;10.50;22.99;S0;;;;;;;;2MASX J14193264+1752308,MCG +03-37-001,PGC 051189,SDSS J141932.67+175231.0,UGC 09168;;; +IC1000;G;14:19:40.31;+17:51:16.9;Boo;1.01;0.50;20;14.40;;11.22;10.51;10.30;23.22;S0;;;;;;;;2MASX J14194035+1751168,MCG +03-37-003,PGC 051201,SDSS J141940.30+175116.8,UGC 09170;;; +IC1001;G;14:20:39.67;+05:25:38.5;Vir;0.81;0.32;94;15.00;;12.70;12.08;11.88;22.76;Sbc;;;;;;;;2MASX J14203963+0525384,PGC 051249,SDSS J142039.67+052538.4,SDSS J142039.67+052538.5;;; +IC1002;G;14:20:42.28;+05:29:08.8;Vir;0.59;0.23;90;15.20;;12.88;11.89;11.73;22.50;Sc;;;;;;;;2MASX J14204231+0529084,IRAS 14181+0542,PGC 051248;;; +IC1003;G;14:21:29.76;+05:04:23.5;Vir;1.04;0.33;36;15.30;;12.76;11.99;11.62;23.41;SABb;;;;;;;;2MASX J14212976+0504233,IRAS 14189+0518,PGC 051303,SDSS J142129.75+050423.5,SDSS J142129.76+050423.5,UGC 09190;;; +IC1004;G;14:21:02.28;+17:42:02.1;Boo;0.95;0.58;180;15.40;;12.25;12.16;11.55;24.52;E;;;;;;;;2MASX J14210227+1742020,MCG +03-37-007,PGC 051273,SDSS J142102.28+174202.0;;HOLM 634B is a star.; +IC1005;Dup;14:19:26.70;+71:35:17.6;UMi;;;;;;;;;;;;;;;5607;;;;;; +IC1006;G;14:22:59.10;+23:47:39.6;Boo;0.89;0.61;99;15.30;;12.41;11.82;11.50;23.24;Sbc;;;;;;;;2MASX J14225909+2347393,MCG +04-34-023,PGC 051378,SDSS J142259.10+234739.6;;; +IC1007;G;14:24:36.59;+04:33:33.0;Vir;0.75;0.55;86;15.00;;12.35;11.67;11.53;23.05;Sa;;;;;;;;2MASX J14243659+0433333,PGC 051465,SDSS J142436.58+043333.0,SDSS J142436.59+043333.0;;; +IC1008;GPair;14:23:42.59;+28:20:52.3;Boo;0.80;;;;;;;;;;;;;;;4414;;MCG +05-34-027;;;Diameter of the group inferred by the author. +IC1008 NED01;G;14:23:42.26;+28:20:45.9;Boo;0.57;0.36;17;15.33;;12.21;11.48;11.23;22.72;Sb;;;;;;4414A;;2MASX J14234230+2820460,PGC 051414,SDSS J142342.25+282045.9,SDSS J142342.26+282045.9,SDSS J142342.27+282045.9;;;B-Mag taken from LEDA. +IC1008 NED02;G;14:23:43.15;+28:20:50.7;Boo;0.86;0.56;18;15.20;;11.76;11.05;10.70;23.25;Sbc;;;;;;4414B;;2MASX J14234315+2820504,PGC 087674,SDSS J142343.14+282050.7;;; +IC1009;G;14:26:17.60;+12:21:10.5;Boo;0.87;0.48;69;15.30;;12.22;11.58;11.29;23.46;S0-a;;;;;;;;2MASX J14261759+1221108,PGC 051546,SDSS J142617.59+122110.5;;; +IC1010;G;14:27:20.36;+01:01:33.1;Vir;1.52;1.28;169;14.80;;11.58;10.80;10.57;23.92;Sb;;;;;;;;2MASX J14272036+0101333,MCG +00-37-006,PGC 051612,SDSS J142720.36+010133.0,SDSS J142720.36+010133.1,SDSS J142720.37+010133.1,SDSS J142720.37+010133.2,UGC 09254;;; +IC1011;G;14:28:04.53;+01:00:22.7;Vir;0.84;0.56;114;14.70;;12.70;12.04;11.58;22.82;S?;;;;;;;;2MASX J14280456+0100228,IRAS 14255+0113,MCG +00-37-008,PGC 051662,SDSS J142804.53+010022.5,SDSS J142804.53+010022.6,SDSS J142804.53+010022.7,SDSS J142804.53+010022.8,SDSS J142804.54+010022.8;;; +IC1012;G;14:27:09.50;+30:56:53.6;Boo;1.09;0.66;112;14.80;;12.40;11.81;11.96;23.42;Sb;;;;;;4431;;2MASX J14270944+3056532,MCG +05-34-043,PGC 051600,SDSS J142709.50+305653.5,SDSS J142709.50+305653.6,UGC 09257;;; +IC1013;G;14:27:58.86;+25:51:58.8;Boo;0.95;0.44;136;16.62;;;;;24.61;Scd;;;;;;;;PGC 214272,SDSS J142758.86+255158.7,SDSS J142758.87+255158.8;;;B-Mag taken from LEDA. +IC1014;G;14:28:18.43;+13:46:48.8;Boo;2.00;1.11;82;14.10;;12.07;11.49;11.26;23.58;Sd;;;;;;;;IRAS 14259+1400,MCG +02-37-012,PGC 051685,SDSS J142818.42+134648.8,SDSS J142818.43+134648.8,UGC 09275;;; +IC1015;GGroup;14:28:19.15;+15:25:12.4;Boo;1.00;;;;;;;;;;;;;;;;;MCG +03-37-018;;;Diameter of the group inferred by the author. +IC1015 NED01;G;14:28:18.88;+15:24:58.9;Boo;0.59;0.23;40;15.20;;;;;22.40;Sbc;;;;;;;;IRAS 14259+1538,MCG +03-37-018 NED01,PGC 051686,SDSS J142818.88+152458.9;;; +IC1015 NED02;G;14:28:19.71;+15:25:19.0;Boo;;;;;;;;;;;;;;;;;;MCG +03-37-018 NED02;;;No data available in LEDA +IC1015 NED03;G;14:28:19.26;+15:25:16.2;Boo;0.74;0.40;66;16.10;;;;;23.68;Sc;;;;;;;;2MASS J14281932+1525151;;;B-Mag taken from LEDA +IC1015 NED04;G;14:28:19.69;+15:25:19.0;Boo;0.72;0.30;82;16.54;;12.69;11.91;11.68;23.84;Sc;;;;;;;;2MASX J14281967+1525192,PGC 2800988;;;B-Mag taken from LEDA. +IC1016;Dup;14:27:32.37;+04:49:17.8;Vir;;;;;;;;;;;;;;;5619B;;;;;; +IC1017;G;14:28:07.23;+25:52:07.6;Boo;1.07;0.60;129;14.90;;11.07;10.39;10.13;23.41;S0;;;;;;;;2MASX J14280724+2552077,MCG +04-34-032,PGC 051668,SDSS J142807.22+255207.5,SDSS J142807.23+255207.5,SDSS J142807.23+255207.6,UGC 09276;;; +IC1018;G;14:28:12.80;+25:49:49.9;Boo;0.57;0.46;179;15.60;;13.24;12.69;12.39;23.65;E;;;;;;;;2MASX J14281279+2549497,PGC 051675,SDSS J142812.79+254949.8,SDSS J142812.79+254949.9;;; +IC1019;G;14:28:13.48;+25:56:50.7;Boo;0.60;0.44;134;15.30;;11.63;11.06;10.63;22.52;S0;;;;;;;;2MASX J14281346+2556507,MCG +04-34-033,PGC 051667,SDSS J142813.48+255650.7;;; +IC1020;G;14:28:49.49;+26:01:56.2;Boo;1.06;0.23;175;15.20;;11.62;10.92;10.72;23.64;S0;;;;;;;;2MASX J14284949+2601557,MCG +04-34-035,PGC 051728,SDSS J142849.48+260156.1,SDSS J142849.49+260156.2,UGC 09289;;; +IC1021;G;14:29:17.13;+20:39:16.3;Boo;0.62;0.26;133;15.20;;11.55;10.89;10.63;22.39;SBa;;;;;;;;2MASX J14291710+2039166,MCG +04-34-038,PGC 051764,SDSS J142917.12+203916.3,SDSS J142917.13+203916.3,UGC 09296;;; +IC1022;G;14:30:01.84;+03:46:22.3;Vir;0.97;0.33;163;15.05;;12.78;12.13;11.70;23.06;SBb;;;;;;;;2MASX J14300186+0346240,PGC 051808,SDSS J143001.84+034622.2,SDSS J143001.84+034622.3,UGC 09311;;; +IC1023;OCl;14:32:25.14;-35:48:12.9;Cen;5.10;;;;;;;;;;;;;;;;;MWSC 2228;;; +IC1024;G;14:31:27.20;+03:00:32.7;Vir;1.11;0.47;29;13.87;;11.07;10.42;10.07;23.00;S0;;;;;;;;2MASX J14312722+0300327,IRAS 14289+0313,MCG +01-37-022,PGC 051895,UGC 09341;;; +IC1025;G;14:31:28.28;+07:03:50.1;Vir;0.58;0.36;130;15.30;;13.03;12.58;12.18;22.73;SBbc;;;;;;;;2MASX J14312829+0703499,IRAS 14290+0717,PGC 051898,SDSS J143128.27+070350.1,SDSS J143128.28+070350.1;;; +IC1026;Dup;14:30:10.42;+31:12:55.8;Boo;;;;;;;;;;;;;;;5653;;;;;; +IC1027;G;14:29:48.50;+53:57:54.1;Boo;1.35;1.05;180;15.40;;11.70;11.03;10.73;24.68;E;;;;;;;;2MASX J14294841+5357542,MCG +09-24-009,PGC 051796,SDSS J142948.49+535754.0,SDSS J142948.49+535754.1,SDSS J142948.49+535754.3,SDSS J142948.50+535754.1,UGC 09331;;; +IC1028;G;14:33:16.43;+41:39:01.4;Boo;1.04;0.56;15;14.80;;11.39;10.77;10.50;23.09;Sbc;;;;;;;;2MASX J14331640+4139012,MCG +07-30-025,PGC 052005,SDSS J143316.42+413901.3,UGC 09368;;The IC identification is not certain.; +IC1029;G;14:32:27.26;+49:54:16.6;Boo;2.78;0.45;151;13.70;12.65;9.98;9.22;8.95;22.01;SABb;;;;;;;;2MASX J14322720+4954171,IRAS 14307+5007,MCG +08-26-042,PGC 051955,SDSS J143227.25+495416.6,UGC 09361;;; +IC1030;Dup;14:32:38.34;+31:40:12.6;Boo;;;;;;;;;;;;;;;5672;;;;;; +IC1031;G;14:34:23.98;+48:02:14.8;Boo;0.79;0.60;57;15.40;;11.99;11.26;11.05;23.80;E;;;;;;;;2MASX J14342403+4802148,PGC 052082,SDSS J143424.00+480214.8,SDSS J143424.00+480214.9,SDSS J143424.01+480214.8;;; +IC1032;G;14:34:39.48;+47:58:04.7;Boo;0.65;0.56;93;15.60;;12.27;11.58;11.26;23.38;Sab;;;;;;;;2MASX J14343918+4758059,PGC 052097,SDSS J143439.02+475806.0,SDSS J143439.47+475804.7,SDSS J143439.48+475804.7;;; +IC1033;G;14:34:41.75;+47:56:16.1;Boo;1.05;0.98;0;15.30;;11.74;11.14;10.84;23.99;E;;;;;;;;2MASX J14344177+4756159,PGC 052099,SDSS J143441.74+475616.0,SDSS J143441.75+475616.1;;; +IC1034;G;14:37:13.73;+14:39:54.5;Boo;0.59;0.47;5;15.60;;12.50;11.97;11.61;23.04;Sab;;;;;;;;2MASX J14371372+1439547,IRAS 14348+1452,PGC 052244,SDSS J143713.73+143954.5;;; +IC1035;G;14:38:10.21;+09:20:09.7;Boo;1.07;0.89;150;15.20;;11.64;10.87;10.66;23.96;E;;;;;;;;2MASX J14381019+0920093,MCG +02-37-028,PGC 052305,SDSS J143810.20+092009.7,SDSS J143810.21+092009.7,SDSS J143810.21+092009.8;;HOLM 664B is the star superposed on the northeast side.; +IC1036;G;14:38:22.79;+18:06:40.4;Boo;0.58;0.30;43;15.60;;13.01;12.33;11.90;22.87;Sb;;;;;;;;2MASX J14382275+1806405,IRAS 14360+1819,PGC 052320,SDSS J143822.78+180640.3,SDSS J143822.78+180640.4,SDSS J143822.79+180640.4;;; +IC1037;G;14:38:25.37;+18:11:02.5;Boo;0.99;0.66;107;15.00;;11.40;10.70;10.44;23.68;E;;;;;;;;2MASX J14382534+1811025,MCG +03-37-028,PGC 052319,SDSS J143825.37+181102.4;;; +IC1038;G;14:39:27.43;+11:55:43.1;Boo;0.63;0.49;171;15.30;;12.16;11.44;11.23;23.33;E;;;;;;;;2MASX J14392741+1155434,PGC 052377,SDSS J143927.42+115543.0;;; +IC1039;G;14:40:29.40;+03:25:57.9;Vir;0.68;0.34;41;15.60;;12.29;11.51;11.46;23.60;S0;;;;;;;;2MASX J14402938+0325581,PGC 052428,SDSS J144029.40+032557.8,SDSS J144029.40+032557.9;;; +IC1040;G;14:40:22.73;+09:28:34.1;Boo;0.50;0.45;153;15.30;;13.45;12.94;12.61;22.71;Sc;;;;;;;;2MASX J14402269+0928339,PGC 052418,SDSS J144022.72+092834.0,SDSS J144022.73+092834.0,SDSS J144022.73+092834.1;;; +IC1041;G;14:40:37.90;+03:22:37.3;Vir;0.87;0.63;52;15.10;;11.29;10.58;10.26;23.09;SBa;;;;;;;;2MASX J14403793+0322375,MCG +01-37-045,PGC 052434,SDSS J144037.89+032237.2,SDSS J144037.89+032237.3,SDSS J144037.90+032237.3;;; +IC1042;G;14:40:39.02;+03:28:11.0;Vir;1.13;1.10;98;14.90;;11.15;10.53;10.01;23.74;S0;;;;;;;;2MASX J14403900+0328105,MCG +01-37-046,PGC 052433,SDSS J144039.01+032810.9,SDSS J144039.01+032811.0,UGC 09457;;; +IC1043;G;14:40:43.35;+03:22:26.5;Vir;0.74;0.37;19;15.10;;12.37;11.64;11.39;23.49;Sa;;;;;;;;2MASX J14404334+0322265,LEDA 2800989,SDSS J144043.35+032226.4,SDSS J144043.35+032226.5;;; +IC1044;G;14:41:29.02;+09:25:51.3;Boo;1.51;0.84;1;15.00;;11.87;11.14;10.79;24.26;S0-a;;;;;;;;2MASX J14412901+0925515,MCG +02-37-029,PGC 052477,SDSS J144129.02+092551.3;;; +IC1045;Dup;14:40:09.21;+42:46:46.4;Boo;;;;;;;;;;;;;;;5731;;;;;; +IC1046;G;14:37:53.42;+69:00:52.1;UMi;0.78;0.45;86;14.70;;12.27;11.59;11.26;22.59;Sc;;;;;;;;2MASX J14375344+6900519,IRAS 14371+6913,MCG +12-14-011,PGC 052284;;; +IC1047;G;14:42:19.97;+19:11:30.6;Boo;0.72;0.61;9;15.70;;12.68;11.89;11.59;23.39;SBbc;;;;;;;;2MASX J14421998+1911302,MCG +03-37-038,PGC 052522,SDSS J144219.96+191130.6;;; +IC1048;G;14:42:58.00;+04:53:22.1;Vir;2.08;0.50;163;14.00;;10.63;9.83;9.55;23.30;Sb;;;;;;;;2MASX J14425787+0453244,IRAS 14404+0506,MCG +01-37-051,PGC 052564,SDSS J144258.00+045322.0,SDSS J144258.02+045322.5,UGC 09483;;HOLM 670B is a star.; +IC1049;G;14:39:33.12;+62:00:10.6;Dra;0.92;0.80;66;14.80;;11.82;11.20;10.85;23.22;Sa;;;;;;;;2MASX J14393312+6200107,MCG +10-21-021,PGC 052379,SDSS J143933.10+620010.5,SDSS J143933.11+620010.5,SDSS J143933.12+620010.6,UGC 09461;;; +IC1050;G;14:44:07.12;+18:00:45.5;Boo;0.83;0.42;31;15.10;;12.34;11.65;11.37;23.05;Sbc;;;;;;;;2MASX J14440710+1800452,IRAS 14417+1813,MCG +03-38-002,PGC 052630,SDSS J144407.11+180045.4;;; +IC1051;G;14:44:11.59;+19:01:12.8;Boo;0.74;0.61;54;15.40;;12.05;11.24;10.95;23.55;E;;;;;;;;2MASX J14441161+1901132,PGC 052629,SDSS J144411.58+190112.8;;; +IC1052;G;14:44:14.11;+20:36:50.4;Boo;1.02;0.28;31;15.30;;12.05;11.63;11.47;23.01;Sc;;;;;;;;2MASX J14441411+2036501,MCG +04-35-007,PGC 052632,SDSS J144414.10+203650.4,SDSS J144414.11+203650.4,UGC 09494;;; +IC1053;G;14:45:43.23;+16:56:48.9;Boo;0.55;0.34;27;15.10;;12.73;12.12;11.70;22.27;Sb;;;;;;;;2MASX J14454322+1656490,MCG +03-38-008,PGC 052709,SDSS J144543.25+165648.7;;; +IC1054;G;14:46:31.24;+01:16:29.1;Vir;1.03;0.75;10;15.20;;11.30;10.63;10.30;23.59;S0;;;;;;;;2MASX J14463127+0116286,PGC 052752,SDSS J144631.24+011629.1,UGC 09514;;; +IC1055;G;14:47:25.69;-13:42:58.1;Lib;2.26;0.76;5;13.30;;10.39;9.68;9.43;22.95;Sb;;;;;;4491;;2MASX J14472570-1342580,IRAS 14446-1330,MCG -02-38-011,PGC 052811;;HOLM 677B,C are stars.; +IC1056;G;14:45:49.05;+50:23:38.6;Boo;1.51;0.94;22;14.40;;12.03;11.54;11.22;23.68;Sb;;;;;;1057;;2MASX J14454903+5023388,IRAS 14441+5036,MCG +08-27-023,PGC 052713,SDSS J144549.04+502338.5,SDSS J144549.04+502338.7,SDSS J144549.05+502338.5,SDSS J144549.05+502338.6,UGC 09516;;; +IC1057;Dup;14:45:49.05;+50:23:38.6;Boo;;;;;;;;;;;;;;;;1056;;;;; +IC1058;G;14:49:12.39;+17:01:15.4;Boo;1.49;0.39;115;14.80;;11.61;10.90;10.59;23.72;Sab;;;;;;;;2MASX J14491241+1701148,MCG +03-38-029,PGC 052915,SDSS J144912.39+170115.3,UGC 09538;;; +IC1059;G;14:50:42.56;-00:52:32.9;Lib;0.88;0.77;120;15.60;;;;;23.62;S0-a;;;;;;;;PGC 052996,SDSS J145042.55-005232.8,SDSS J145042.55-005232.9,SDSS J145042.56-005232.8,SDSS J145042.56-005232.9;;; +IC1060;G;14:51:47.35;-07:13:57.5;Lib;1.22;0.66;93;14.00;;11.27;10.50;10.27;23.74;SBa;;;;;;;;2MASX J14514732-0713576,IRAS 14491-0701,MCG -01-38-004,PGC 053075;;; +IC1061;G;14:51:14.24;+18:45:27.2;Boo;0.49;0.39;146;16.20;;12.75;12.03;11.79;23.32;E;;;;;;;;2MASX J14511422+1845271,LEDA 095545,SDSS J145114.23+184527.1;;Mislabeled as A1983 D in Colless, et al. (1993,MNRAS,262,475).; +IC1062;G;14:51:17.66;+18:41:13.1;Boo;0.94;0.78;114;15.30;;11.78;11.20;10.76;23.86;S0-a;;;;;;;;2MASX J14511767+1841131,MCG +03-38-041 NED01,PGC 053044,SDSS J145117.65+184113.5,SDSS J145117.66+184113.5;;Mislabeled as A1983 E in Colless, et al. (1993,MNRAS,262,475).; +IC1063;G;14:52:11.02;+04:40:55.4;Vir;0.74;0.57;145;14.20;;11.91;11.12;10.83;22.83;SBb;;;;;;;;2MASX J14521101+0440543,IRAS 14496+0453,MCG +01-38-007,PGC 053094,SDSS J145211.02+044055.3,UGC 09565;;; +IC1065;G;14:49:21.57;+63:16:14.0;Dra;0.88;0.70;95;17.30;16.39;11.70;11.05;10.64;22.96;S0;;;;;;;;2MASX J14492161+6316142,MCG +11-18-008,PGC 052924,SDSS J144921.57+631613.9,SDSS J144921.57+631614.0,SDSS J144921.58+631613.9,SDSS J144921.58+631614.0,SDSS J144921.59+631613.9,SDSS J144921.59+631614.0,UGC 09553;;; +IC1066;G;14:53:02.86;+03:17:45.7;Vir;1.21;0.66;69;14.20;;11.46;10.73;10.48;22.96;SABb;;;;;;;;2MASX J14530282+0317451,MCG +01-38-009,PGC 053176,SDSS J145302.85+031745.7,SDSS J145302.86+031745.7,UGC 09573;;; +IC1067;G;14:53:05.25;+03:19:54.4;Vir;1.82;1.48;128;13.60;;10.93;10.26;9.85;23.50;Sb;;;;;;;;2MASX J14530523+0319541,MCG +01-38-010,PGC 053178,SDSS J145305.24+031954.4,SDSS J145305.25+031954.4,UGC 09574;;; +IC1068;G;14:53:32.92;+03:04:38.3;Vir;0.92;0.69;138;14.90;;11.35;10.63;10.31;23.41;E;;;;;;;;2MASX J14533289+0304380,MCG +01-38-012,PGC 053223,SDSS J145332.91+030438.2,SDSS J145332.91+030438.3,SDSS J145332.92+030438.3;;; +IC1069;G;14:50:46.52;+54:24:40.2;Boo;1.47;0.76;50;15.10;;11.60;11.08;10.66;24.42;S0;;;;;;;;2MASX J14504653+5424401,MCG +09-24-044,PGC 053000,SDSS J145046.51+542440.2,SDSS J145046.51+542440.3,SDSS J145046.52+542440.2,SDSS J145046.52+542440.5,UGC 09563;;; +IC1070;G;14:53:51.28;+03:29:04.8;Vir;0.78;0.31;121;15.40;;12.62;12.01;11.78;23.38;Sbc;;;;;;;;2MASX J14535130+0329050,PGC 053245,SDSS J145351.28+032904.7,SDSS J145351.28+032904.8,SDSS J145351.29+032904.8;;; +IC1071;G;14:54:12.50;+04:45:00.1;Vir;1.09;0.69;153;14.22;;10.72;10.01;9.70;23.45;S0;;;;;;;;2MASX J14541249+0445006,MCG +01-38-015,PGC 053260,UGC 09582;;; +IC1072;G;14:54:13.14;+04:50:29.6;Vir;0.87;0.53;152;15.10;;11.82;11.17;10.89;23.82;E;;;;;;;;2MASX J14541316+0450296,MCG +01-38-016,PGC 053258,SDSS J145413.11+045029.5,SDSS J145413.13+045029.5,SDSS J145413.13+045029.6,SDSS J145413.14+045029.6;;; +IC1073;G;14:54:14.35;+04:47:39.8;Vir;0.52;0.41;159;15.30;;12.52;11.89;11.63;22.85;S0;;;;;;;;2MASX J14541437+0447396,PGC 053259,SDSS J145414.34+044739.8,SDSS J145414.35+044739.7,SDSS J145414.35+044739.8;;; +IC1074;G;14:51:57.32;+51:15:53.6;Boo;0.92;0.33;116;15.20;;11.94;11.28;10.96;22.82;Sbc;;;;;;;;2MASX J14515733+5115535,MCG +09-24-047,PGC 053084,SDSS J145157.32+511553.4,SDSS J145157.32+511553.5,SDSS J145157.32+511553.6,SDSS J145157.32+511553.7,UGC 09572;;; +IC1075;G;14:54:49.25;+18:06:21.5;Boo;1.19;0.52;155;14.90;;12.46;11.92;11.63;23.34;SBb;;;;;;;;2MASX J14544922+1806211,MCG +03-38-053,PGC 053314,SDSS J145449.24+180621.4,UGC 09593;;; +IC1076;G;14:54:59.62;+18:02:14.4;Boo;0.91;0.49;9;13.90;;11.90;11.19;10.98;22.32;SBb;;;;;;;;2MASX J14545961+1802141,IRAS 14526+1814,MCG +03-38-055,PGC 053320,SDSS J145459.61+180214.4,SDSS J145459.62+180214.4,UGC 09595;;; +IC1077;G;14:57:21.72;-19:12:49.3;Lib;1.31;1.08;61;13.46;;10.59;9.89;9.56;22.63;SBbc;;;;;;;;2MASX J14572172-1912491,ESO 581-002,ESO-LV 581-0020,IRAS 14545-1900,MCG -03-38-030,PGC 053450;;; +IC1078;G;14:56:29.02;+09:21:16.3;Boo;0.99;0.81;19;14.80;;12.07;11.53;10.98;23.43;Sa;;;;;;;;2MASX J14562897+0921161,MCG +02-38-025,PGC 053411,SDSS J145629.01+092116.3,UGC 09608;;; +IC1079;G;14:56:36.16;+09:22:11.1;Boo;1.46;0.85;81;14.80;;10.76;9.83;9.81;24.19;E;;;;;;;;2MASX J14563613+0922111,MCG +02-38-026,PGC 053418,SDSS J145636.15+092211.0,SDSS J145636.16+092211.0,UGC 09611;;; +IC1080;G;14:57:59.82;-06:43:23.9;Lib;1.22;0.92;33;14.50;;10.85;10.16;9.75;24.00;E-S0;;;;;;;;2MASX J14575980-0643236,MCG -01-38-010,PGC 053480;;; +IC1081;G;14:58:55.06;-19:14:20.7;Lib;1.66;0.58;153;14.77;;11.29;10.60;10.30;24.22;S0-a;;;;;;;;2MASX J14585504-1914206,ESO 581-009,ESO-LV 581-0090,MCG -03-38-036,PGC 053525;;; +IC1082;G;14:58:52.49;+07:00:26.3;Vir;0.86;0.70;43;15.20;;11.76;11.00;10.82;23.70;E-S0;;;;;;;;2MASX J14585247+0700264,PGC 053523,SDSS J145852.48+070026.2;;; +IC1083;G;14:55:33.41;+68:24:30.9;UMi;0.72;0.57;94;15.20;;12.11;11.45;11.16;22.97;Sbc;;;;;;;;2MASX J14553340+6824307,IRAS 14549+6836,MCG +12-14-014,PGC 053362;;; +IC1084;G;15:01:14.88;-07:28:29.7;Lib;0.87;0.60;156;14.50;;12.19;11.36;11.53;23.48;E-S0;;;;;;;;2MASX J15011485-0728297,MCG -01-38-017,PGC 053648;;The position in 1992PASP..104...57V is not for the nucleus.; +IC1085;G;15:02:43.37;+17:15:09.1;Boo;0.94;0.84;24;15.00;;11.63;10.95;10.59;23.60;E;;;;;;;;2MASX J15024337+1715091,MCG +03-38-074,PGC 053710,SDSS J150243.36+171509.0;;; +IC1086;G;15:03:29.17;+17:06:51.9;Boo;0.69;0.47;165;15.40;;12.13;11.45;11.28;23.16;S0-a;;;;;;;;2MASX J15032915+1706522,MCG +03-38-077,PGC 053734,SDSS J150329.16+170651.9,SDSS J150329.17+170651.9;;; +IC1087;G;15:06:43.89;+03:46:36.6;Vir;0.74;0.33;74;15.10;;12.22;11.49;11.33;23.37;Sa;;;;;;;;2MASX J15064391+0346364,MCG +01-38-031,PGC 053952,SDSS J150643.89+034636.6,UGC 09710 NOTES01;;; +IC1088;*;15:06:47.42;+03:47:30.7;Vir;;;;;;;;;;;;;;;;;;SDSS J150647.41+034730.6;;; +IC1089;G;15:07:25.99;+07:07:00.3;Vir;0.97;0.64;140;15.40;;11.74;11.03;10.72;23.96;E;;;;;;;;2MASX J15072597+0706596,PGC 053989,SDSS J150725.98+070700.2,SDSS J150725.99+070700.3;;; +IC1090;Other;15:05:43.15;+42:40:56.5;Boo;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1091;G;15:08:13.51;-11:08:27.3;Lib;1.09;0.82;132;14.34;;11.27;10.57;10.24;22.96;Sb;;;;;;;;2MASX J15081350-1108272,MCG -02-39-001,PGC 054044;;;B-Mag taken from LEDA. +IC1092;G;15:07:36.12;+09:21:29.6;Boo;1.01;1.00;72;15.10;;11.94;11.29;11.09;23.74;S0-a;;;;;;;;2MASX J15073614+0921298,PGC 053998,SDSS J150736.11+092129.6;;; +IC1093;G;15:07:35.64;+14:32:52.8;Boo;1.00;0.74;90;14.90;;12.50;11.90;11.62;23.50;SABb;;;;;;;;2MASX J15073566+1432525,IRAS 15052+1444,MCG +03-39-002,PGC 054002,SDSS J150735.63+143252.7,SDSS J150735.63+143252.8,UGC 09727;;; +IC1094;GTrpl;15:07:42.20;+14:37:30.0;Boo;0.80;;;;;;;;;;;;;;;;;MCG +03-39-006;;;Diameter of the group inferred by the author. +IC1094 NED01;G;15:07:41.81;+14:37:18.8;Boo;0.55;0.51;155;16.57;;12.63;12.01;11.53;23.43;E;;;;;;;;2MASX J15074179+1437185,MCG +03-39-006 NED01,PGC 054009,SDSS J150741.80+143717.8;;;B-Mag taken from LEDA. +IC1094 NED02;G;15:07:42.19;+14:37:40.7;Boo;0.54;0.41;105;16.30;;13.19;12.39;12.29;23.84;Sa;;;;;;;;2MASX J15074220+1437405,MCG +03-39-006 NED02,PGC 054011,SDSS J150742.19+143740.7,SDSS J150742.19+143740.8;;;B-Mag taken from LEDA. +IC1094 NED03;G;15:07:42.59;+14:37:36.3;Boo;0.52;0.32;141;17.14;;;;;24.16;Sab;;;;;;;;MCG +03-39-006 NED03,PGC 054006,SDSS J150742.58+143736.4;;;B-Mag taken from LEDA. +IC1095;G;15:08:35.05;+13:40:14.2;Boo;0.65;0.60;82;15.20;;12.87;12.27;11.77;23.16;Sbc;;;;;;;;2MASX J15083503+1340145,MCG +02-39-002,PGC 054063,SDSS J150835.05+134014.2;;; +IC1096;G;15:08:21.57;+19:11:31.6;Boo;0.56;0.38;76;15.60;;13.13;12.55;12.20;23.21;S0-a;;;;;;;;2MASX J15082158+1911317,MCG +03-39-008,PGC 054050,SDSS J150821.57+191131.6;;; +IC1097;G;15:08:31.30;+19:11:03.6;Boo;0.91;0.42;55;14.70;;12.44;11.66;11.63;23.25;SBa;;;;;;;;2MASX J15083125+1911038,IRAS 15062+1922,MCG +03-39-010,PGC 054059,SDSS J150831.30+191103.6,UGC 09735;;; +IC1098;*;15:06:25.24;+55:36:06.0;Dra;;;;;;;;;;;;;;;;;;;;; +IC1099;G;15:06:54.65;+56:30:32.4;Dra;1.12;0.81;4;15.00;;11.64;11.01;10.71;23.42;Sc;;;;;;;;2MASX J15065457+5630322,MCG +09-25-021,PGC 053967,SDSS J150654.65+563032.3,SDSS J150654.65+563032.4,SDSS J150654.65+563032.6,UGC 09731;;; +IC1100;Dup;15:06:20.82;+62:58:51.5;Dra;;;;;;;;;;;;;;;5881;;;;;; +IC1101;G;15:10:56.10;+05:44:41.2;Se1;1.20;0.60;25;15.10;;11.17;10.43;10.11;24.42;E-S0;;;;;;;;2MASX J15105610+0544416,PGC 054167,UGC 09752;;; +IC1102;G;15:11:04.95;+04:17:37.9;Se1;1.04;0.58;18;14.83;;11.89;11.35;11.09;23.48;SABb;;;;;;;;2MASX J15110497+0417388,PGC 054188,SDSS J151104.94+041737.8,SDSS J151104.94+041737.9,SDSS J151104.95+041737.9,UGC 09754;;; +IC1103;G;15:11:35.87;+19:12:28.0;Se1;0.91;0.50;178;15.81;;12.04;11.47;11.21;24.34;E;;;;;;;;2MASX J15113588+1912277,LEDA 1584180,SDSS J151135.87+191228.0;;;B-Mag taken from LEDA. +IC1104;*;15:12:49.88;-05:03:20.2;Lib;;;;;;;;;;;;;;;;;;;;; +IC1105;G;15:13:13.91;+04:17:15.2;Se1;0.95;0.52;92;14.80;;11.52;10.76;10.46;23.13;S?;;;;;;;;2MASX J15131389+0417150,MCG +01-39-007,PGC 054338,SDSS J151313.91+041715.2;;; +IC1106;G;15:13:56.28;+04:42:39.5;Se1;0.91;0.43;34;15.20;;12.07;11.44;11.15;23.21;SBb;;;;;;;;2MASX J15135624+0442391,PGC 054375,SDSS J151356.27+044239.4;;; +IC1107;G;15:14:08.96;+04:42:51.9;Se1;0.70;0.57;142;15.50;;12.37;11.38;11.25;23.66;Sab;;;;;;;;2MASX J15140895+0442521,LEDA 1272206,SDSS J151408.95+044251.8;;; +IC1108;Dup;15:16:50.00;-45:38:57.5;Lup;;;;;;;;;;;;;;;5882;;;;;; +IC1109;G;15:17:03.98;+05:15:22.0;Se1;0.81;0.69;52;15.50;;11.79;11.06;10.79;23.79;E;;;;;;;;2MASX J15170399+0515223,PGC 054549,SDSS J151703.97+051521.9;;; +IC1110;G;15:12:05.07;+67:21:45.3;UMi;1.26;0.50;76;14.90;;11.20;10.44;10.15;23.65;Sa;;;;;;;;2MASX J15120513+6721459,MCG +11-19-001,PGC 054265,SDSS J151205.06+672145.3,UGC 09773;;; +IC1111;Dup;15:09:31.56;+54:30:23.4;Boo;;;;;;;;;;;;;;;5876;;;;;; +IC1112;G;15:17:47.35;+07:13:05.8;Se1;1.02;0.60;124;15.30;;11.86;11.25;10.98;23.51;SBab;;;;;;;;2MASX J15174735+0713058,LEDA 093492,PGC 054604,SDSS J151747.34+071305.8,SDSS J151747.35+071305.7;;; +IC1113;G;15:18:15.11;+12:29:19.2;Se1;0.87;0.77;17;15.20;;13.02;12.43;12.22;23.61;Sbc;;;;;;;;2MASX J15181515+1229192,MCG +02-39-012,PGC 054629,SDSS J151815.10+122919.1,SDSS J151815.11+122919.1;;; +IC1114;*;15:11:25.69;+75:25:36.1;UMi;;;;;;;;;;;;;;;;;;;;The IC identification is not certain.; +IC1115;**;15:22:19.02;-04:28:25.9;Lib;;;;;;;;;;;;;;;;;;;;; +IC1116;G;15:21:55.27;+08:25:25.6;Se1;1.07;0.68;3;14.90;;11.37;10.66;10.38;23.58;E;;;;;;;;2MASX J15215529+0825259,MCG +02-39-017,PGC 054848,SDSS J152155.27+082525.5,SDSS J152155.27+082525.6,SDSS J152155.28+082525.6;;; +IC1117;G;15:24:22.90;+15:29:18.9;Se1;0.73;0.35;117;15.60;;12.51;11.93;11.66;23.28;Sab;;;;;;;;2MASX J15242291+1529184,PGC 055003,SDSS J152422.89+152918.8;;; +IC1118;G;15:24:59.53;+13:26:42.3;Se1;1.23;1.23;73;15.20;;11.52;10.90;10.61;24.19;E;;;;;;4543;;2MASX J15245954+1326421,MCG +02-39-029,PGC 055035,SDSS J152459.52+132642.3;;; +IC1119;GPair;15:25:44.28;-03:39:22.7;Lib;1.00;;;;;;;;;;;;;;;;;MCG +00-39-025;;;Diameter of the group inferred by the author. +IC1119 NED01;G;15:25:44.15;-03:39:14.2;Lib;0.52;0.33;179;16.50;;;;;23.84;;;;;;;;;2MASS J15254407-0339141,MCG +00-39-025 NED01,PGC 1068507;;;B-Mag taken from LEDA. +IC1119 NED02;G;15:25:44.62;-03:39:29.0;Lib;0.62;0.43;17;15.30;;;;;22.71;Sab;;;;;;;;IRAS 15231-0328,PGC 055062;;; +IC1120;GPair;15:26:10.87;+18:52:18.0;Se1;0.80;;;;;;;;;;;;;;;;;;;Is the superposed star a compact galaxy?;Diameter of the group inferred by the author. +IC1120 NED01;G;15:26:10.80;+18:52:14.8;Se1;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC1120 NED02;G;15:26:11.04;+18:52:20.4;Se1;0.67;0.29;32;16.23;;;;;23.25;I;;;;;;;;2MASX J15261102+1852201,PGC 1573089;;;B-Mag taken from LEDA. +IC1121;G;15:27:44.06;+06:48:14.0;Se1;1.05;0.82;54;15.60;;11.56;10.81;10.51;24.39;E;;;;;;;;2MASX J15274407+0648139,PGC 055152,SDSS J152744.06+064813.9;;; +IC1122;G;15:29:23.07;+07:37:02.7;Se1;0.60;0.56;55;15.58;;12.64;11.85;11.65;23.29;SBb;;;;;;;;2MASX J15292307+0737028,PGC 1326415,SDSS J152923.07+073702.6;;;B-Mag taken from LEDA. +IC1123;*;15:28:54.11;+42:53:54.7;Boo;;;;;;;;;;;;;;;;;;SDSS J152854.10+425354.6;;; +IC1124;G;15:30:00.87;+23:38:18.3;Se1;1.10;0.42;77;14.50;;11.52;10.82;10.51;22.82;Sb;;;;;;;;2MASX J15300060+2338175,IRAS 15278+2348,MCG +04-37-001,PGC 055254,SDSS J153000.86+233818.2,SDSS J153000.87+233818.3,UGC 09869;;; +IC1125;G;15:33:05.61;-01:37:41.7;Se1;1.61;0.86;153;13.80;;11.67;10.99;10.63;23.49;Scd;;;;;;1128;;2MASX J15330561-0137417,2MASX J15330596-0137519,IRAS 15305-0127,MCG +00-40-003,PGC 055388,SDSS J153305.47-013743.6,SDSS J153305.61-013741.6,SDSS J153305.61-013741.7,UGC 09888;;Noted possibly interacting in MCG/UGC, coalescent pair in VV. Star superposed.; +IC1126;*;15:35:00.82;+04:59:25.5;Se1;;;;;;;;;;;;;;;;;;SDSS J153500.81+045925.5;;; +IC1127;Dup;15:34:57.25;+23:30:11.3;Se1;;;;;;;;;;;;;;;;4553;;;;; +IC1128;Dup;15:33:05.61;-01:37:41.7;Se1;;;;;;;;;;;;;;;;1125;;;;; +IC1129;G;15:32:00.82;+68:14:46.8;UMi;1.01;0.86;3;13.70;;12.26;11.53;11.68;22.35;Sc;;;;;;;;2MASX J15320082+6814469,IRAS 15316+6825,MCG +11-19-010,PGC 055330,UGC 09899;;; +IC1130;G;15:37:44.03;+17:14:39.9;Se1;0.74;0.52;37;15.50;;12.95;12.43;12.30;23.38;SBb;;;;;;;;2MASX J15374401+1714404,MCG +03-40-014,PGC 055644,SDSS J153744.02+171439.9;;; +IC1131;G;15:38:51.70;+12:04:50.3;Se1;0.85;0.65;153;14.80;;11.90;11.28;11.06;23.20;E;;;;;;;;2MASX J15385172+1204498,MCG +02-40-008,PGC 055683,SDSS J153851.70+120450.2,SDSS J153851.70+120450.3;;HOLM 717B is a star.; +IC1132;G;15:40:06.76;+20:40:50.2;Se1;1.05;0.97;48;14.40;;11.74;10.99;11.03;23.20;Sc;;;;;;;;2MASX J15400677+2040500,IRAS 15378+2050,MCG +04-37-020,PGC 055750,SDSS J154006.76+204050.1,UGC 09965;;; +IC1133;G;15:41:11.99;+15:34:24.3;Se1;1.27;0.39;131;14.80;;12.52;11.96;11.42;23.09;SBc;;;;;;;;IRAS 15388+1544,MCG +03-40-025,PGC 055793,SDSS J154111.99+153424.2,UGC 09973;;; +IC1134;G;15:44:58.50;+16:57:43.6;Se1;0.87;0.54;164;15.20;;11.77;11.19;10.76;23.81;S0;;;;;;;;2MASX J15445851+1657440,MCG +03-40-034,PGC 055937,SDSS J154458.50+165743.6;;"A faint companion is superposed on the corona 11"" southeast."; +IC1135;G;15:45:34.71;+17:42:00.3;Se1;0.85;0.31;63;15.14;;;;;23.56;S0-a;;;;;;;;2MASX J15453473+1742000,MCG +03-40-036,PGC 055964,SDSS J154534.70+174200.2;;;B-Mag taken from LEDA. +IC1136;G;15:47:34.39;-01:32:43.0;Se1;0.75;0.70;50;15.40;;11.53;10.79;10.49;23.32;S0;;;;;;;;2MASX J15473438-0132426,PGC 056049,SDSS J154734.39-013243.0;;; +IC1137;G;15:48:32.60;+08:35:16.5;Se1;0.86;0.79;115;14.72;;11.94;11.35;11.08;23.09;E?;;;;;;;;2MASX J15483260+0835169,IRAS 15461+0844,PGC 2816978,SDSS J154832.59+083516.5,SDSS J154832.60+083516.5;;;B-Mag taken from LEDA. +IC1138;G;15:48:15.77;+26:12:22.4;CrB;1.04;0.21;41;15.30;;11.90;11.17;10.82;23.81;S0-a;;;;;;;;2MASX J15481583+2612235,PGC 056070,UGC 10038;;; +IC1139;G;15:29:26.10;+82:35:01.9;UMi;0.65;0.28;54;15.60;;12.52;11.82;11.54;23.51;;;;;;;;;2MASX J15292616+8235024,PGC 055236;;; +IC1140;Other;15:49:25.26;+19:06:48.4;Se1;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +IC1141;G;15:49:46.94;+12:23:57.6;Se1;0.47;0.45;69;14.50;;11.74;11.07;10.63;21.61;SABa;;;;;;;;2MASX J15494695+1223576,IRAS 15474+1232,MCG +02-40-014,PGC 056141,SDSS J154946.94+122357.5,SDSS J154946.94+122357.6,UGC 10051;;; +IC1142;G;15:50:25.92;+18:08:22.5;Se1;1.03;0.77;160;15.10;;12.21;11.41;11.07;23.52;SBc;;;;;;;;2MASX J15502591+1808227,MCG +03-40-050,PGC 056169,SDSS J155025.91+180822.4,SDSS J155025.91+180822.5,SDSS J155025.92+180822.5,UGC 10055;;; +IC1143;G;15:30:55.96;+82:27:20.8;UMi;1.45;1.38;150;14.70;;10.46;9.80;9.51;24.31;E;;;;;;;;2MASX J15305641+8227211,MCG +14-07-022,PGC 055279,UGC 09932;;; +IC1144;G;15:51:21.69;+43:25:03.6;Her;0.74;0.52;107;14.40;;11.71;10.97;10.66;22.79;E-S0;;;;;;;;2MASX J15512167+4325036,MCG +07-33-001,PGC 056216,SDSS J155121.69+432503.5,UGC 10069;;; +IC1145;G;15:44:08.55;+72:25:52.2;UMi;1.45;0.43;168;15.20;;11.86;11.21;10.96;23.66;Sbc;;;;;;;;2MASX J15440857+7225522,MCG +12-15-015,PGC 055904,UGC 10032;;; +IC1146;G;15:48:22.08;+69:23:08.1;Dra;1.29;0.94;90;14.70;;11.32;10.61;10.29;23.93;S0;;;;;;;;2MASX J15482208+6923077,MCG +12-15-019,PGC 056085;;; +IC1147;G;15:50:11.61;+69:33:36.2;Dra;0.45;0.45;125;15.50;;12.25;11.47;11.14;22.53;;;;;;;;;2MASX J15501166+6933364,MCG +12-15-027,PGC 056159;;; +IC1148;Dup;15:57:08.14;+22:24:16.5;Se1;;;;;;;;;;;;;;;6020;;;;;; +IC1149;G;15:58:07.98;+12:04:13.0;Se1;1.07;0.85;164;14.10;;11.59;10.86;10.56;22.86;Sbc;;;;;;;;2MASX J15580799+1204130,IRAS 15557+1212,MCG +02-41-001,PGC 056511,SDSS J155807.97+120413.0,UGC 10108;;; +IC1150;Other;15:58:18.56;+15:52:28.3;Se1;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1151;G;15:58:32.34;+17:26:29.3;Se1;2.23;0.88;32;13.40;;11.45;10.77;10.41;23.18;SBc;;;;;;;;2MASX J15583232+1726295,IRAS 15562+1734,MCG +03-41-015,PGC 056537,SDSS J155832.33+172629.2,SDSS J155832.34+172629.3,UGC 10113;;; +IC1152;G;15:56:43.32;+48:05:42.0;Her;1.15;1.03;19;14.40;;10.86;10.22;9.91;23.42;E;;;;;;;;2MASX J15564332+4805418,MCG +08-29-024,PGC 056450,SDSS J155643.31+480542.0,SDSS J155643.32+480542.0,UGC 10103;;; +IC1153;G;15:57:03.01;+48:10:06.2;Her;1.20;1.00;0;13.60;;10.71;10.02;9.68;22.86;S0;;;;;;;;2MASX J15570299+4810063,MCG +08-29-026,PGC 056462,SDSS J155703.00+481006.1,SDSS J155703.01+481006.1,SDSS J155703.01+481006.2,UGC 10107;;; +IC1154;G;15:52:28.61;+70:22:30.3;UMi;1.77;1.12;142;14.80;;11.33;10.67;10.39;24.75;E;;;;;;;;2MASX J15522859+7022305,MCG +12-15-035,PGC 056273,UGC 10088;;; +IC1155;G;16:00:35.76;+15:41:08.3;Se1;0.79;0.74;11;14.90;;12.50;11.84;11.79;23.11;SABb;;;;;;;;2MASX J16003578+1541080,IRAS 15582+1549,MCG +03-41-023,PGC 056648,SDSS J160035.76+154108.2;;; +IC1156;G;16:00:37.36;+19:43:23.6;Her;1.10;1.01;10;14.90;;11.29;10.57;10.33;23.55;E;;;;;;;;2MASX J16003734+1943240,MCG +03-41-025,PGC 056650,SDSS J160037.36+194323.5,SDSS J160037.36+194323.6;;; +IC1157;G;16:00:56.26;+15:31:35.2;Se1;0.82;0.41;135;15.70;;12.71;12.03;11.79;23.53;SABa;;;;;;;;2MASX J16005623+1531355,MCG +03-41-031,PGC 056680,SDSS J160056.25+153135.1;;; +IC1158;G;16:01:34.08;+01:42:28.2;Se1;1.89;0.94;134;13.20;;11.74;11.05;10.24;23.38;SABc;;;;;;;;2MASX J16013407+0142281,IRAS 15590+0150,MCG +00-41-002,PGC 056723,SDSS J160134.06+014228.1,SDSS J160134.07+014228.1,UGC 10133;;; +IC1159;G;16:01:01.46;+15:25:11.9;Se1;0.76;0.52;30;15.66;;12.69;11.94;11.59;23.69;S0-a;;;;;;;;2MASX J16010143+1525115,PGC 1484166,SDSS J160101.45+152511.8;;;B-Mag taken from LEDA. +IC1160;G;16:01:02.51;+15:29:40.9;Se1;0.77;0.49;143;15.70;;12.67;12.02;11.97;23.61;S0-a;;;;;;;;2MASX J16010253+1529405,MCG +03-41-032,PGC 056683,SDSS J160102.51+152940.8;;; +IC1161;G;16:01:16.82;+15:38:43.5;Se1;0.71;0.52;96;15.20;;12.01;11.32;10.97;23.28;E;;;;;;;;2MASX J16011679+1538435,MCG +03-41-036,PGC 056695,SDSS J160116.81+153843.4;;; +IC1162;G;16:01:16.33;+17:40:40.2;Her;0.72;0.56;161;15.20;;13.24;12.70;12.33;23.11;SABb;;;;;;;;2MASX J16011637+1740405,IRAS 15590+1748,MCG +03-41-034,PGC 056693,SDSS J160116.33+174040.1,SDSS J160116.33+174040.2;;; +IC1163;G;16:01:30.55;+15:30:14.1;Se1;0.79;0.73;11;15.30;;11.91;11.27;10.86;23.30;E;;;;;;;;2MASX J16013052+1530136,MCG +03-41-039,PGC 056717,SDSS J160130.54+153014.0;;; +IC1164;*;15:55:02.71;+70:35:13.1;UMi;;;;;;;;;;;;;;;;;;;;; +IC1165;GPair;16:02:08.20;+15:41:38.0;Se1;0.90;;;;;;;;;;;;;;;;;;;VV misprints dec as +15d54'.;Diameter of the group inferred by the author. +IC1165 NED01;G;16:02:08.03;+15:41:47.6;Se1;0.69;0.64;41;14.60;;11.49;10.73;10.51;23.04;E-S0;;;;;;;;2MASX J16020801+1541472,MCG +03-41-048,PGC 056769,SDSS J160208.02+154147.5,SDSS J160208.03+154147.6;;; +IC1165 NED02;G;16:02:08.64;+15:41:35.4;Se1;0.63;0.54;171;14.60;;;;;23.49;E;;;;;;;;MCG +03-41-049,PGC 056768,SDSS J160208.63+154135.4,SDSS J160208.64+154135.4;;; +IC1166;GPair;16:02:08.90;+26:19:38.0;CrB;0.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1166 NED01;G;16:02:08.92;+26:19:45.6;CrB;0.53;0.31;52;17.18;16.77;13.59;12.86;12.35;23.36;E;;;;;;;;2MASX J16020888+2619456,IRAS 16000+2628,PGC 056771SDSS J160208.91+261945.5,SDSS J160208.92+261945.5,SDSS J160208.92+261945.6;;; +IC1166 NED02;G;16:02:08.83;+26:19:31.2;CrB;0.41;0.28;152;17.07;;14.14;13.40;12.87;23.47;SBb;;;;;;;;2MASX J16020881+2619316,PGC 1771884,SDSS J160208.82+261931.1;;;B-Mag taken from LEDA. +IC1167;G;16:03:52.86;+14:56:47.2;Se1;0.62;0.55;117;15.50;;12.62;11.76;11.83;23.34;E;;;;;;;;2MASX J16035289+1456471,MCG +03-41-065,PGC 056900,SDSS J160352.86+145647.1,SDSS J160352.86+145647.2;;;B-Mag taken from LEDA. +IC1168;G;16:03:55.69;+14:54:08.7;Se1;1.32;0.56;169;15.60;;12.27;11.52;11.48;24.81;E;;;;;;;;2MASX J16035566+1454091,MCG +03-41-066,PGC 056901;;; +IC1169;G;16:04:13.43;+13:44:38.5;Se1;1.06;0.72;10;14.10;;11.06;10.33;10.06;22.89;S0-a;;;;;;;;2MASX J16041344+1344383,MCG +02-41-004,PGC 056925,SDSS J160413.42+134438.4,UGC 10161;;; +IC1170;G;16:04:31.69;+17:43:17.3;Her;0.50;0.28;84;15.80;;12.79;12.15;12.03;24.61;E-S0;;;;;;;;2MASX J16043169+1743172,PGC 056955,SDSS J160431.69+174317.3;;; +IC1171;*;16:04:51.84;+17:58:41.6;Her;;;;;;11.83;11.12;11.01;;;;;;;;;;2MASS J16045183+1758417,SDSS J160451.83+175841.5;;; +IC1172;Dup;16:04:59.68;+17:52:13.3;Her;;;;;;;;;;;;;;;6044;;;;;; +IC1173;G;16:05:12.56;+17:25:22.3;Her;0.92;0.45;63;15.60;;12.35;11.74;11.54;23.34;SABc;;;;;;;;2MASX J16051257+1725219,MCG +03-41-089,PGC 057037,SDSS J160512.56+172522.2,SDSS J160512.56+172522.3,SDSS J160512.57+172522.3,UGC 10180;;; +IC1174;G;16:05:26.82;+15:01:31.2;Se1;1.03;0.75;51;14.50;;11.29;10.63;10.38;23.03;S0-a;;;;;;;;2MASX J16052685+1501308,MCG +03-41-091,PGC 057059,SDSS J160526.82+150131.1,SDSS J160526.82+150131.2,UGC 10185;;; +IC1175;**;16:05:22.62;+18:09:47.2;Her;;;;;;;;;;;;;;;;;;;;; +IC1176;Dup;16:05:31.28;+17:57:49.1;Her;;;;;;;;;;;;;;;6056;;;;;; +IC1177;G;16:05:19.79;+18:18:55.3;Her;0.54;0.41;164;16.23;;;;;23.51;S0-a;;;;;;;;2MASX J16051980+1818546,PGC 057048,SDSS J160519.78+181855.3,SDSS J160519.79+181855.3;;;B-Mag taken from LEDA. +IC1178;G;16:05:33.12;+17:36:05.2;Her;1.34;0.66;145;15.00;;11.41;10.68;10.43;24.34;E-S0;;;;;;;;2MASX J16053310+1736048,MCG +03-41-097,PGC 057062,SDSS J160533.12+173605.1,SDSS J160533.13+173605.2,UGC 10188;;; +IC1179;Dup;16:05:22.22;+17:45:15.1;Her;;;;;;;;;;;;;;;6050B;;;;;; +IC1180;*;16:05:30.11;+18:08:58.8;Her;;;;;;;;;;;;;;;;;;SDSS J160530.10+180858.8;;; +IC1181;G;16:05:33.85;+17:35:37.3;Her;1.01;0.73;58;15.00;;12.17;11.38;11.17;24.56;S0-a;;;;;;;;2MASX J16053387+1735368,MCG +03-41-098,PGC 057063,SDSS J160533.84+173537.3,SDSS J160533.85+173537.3,UGC 10189;;; +IC1182;G;16:05:36.80;+17:48:07.7;Her;0.84;0.68;80;16.20;15.19;12.00;11.27;10.90;23.63;S0-a;;;;;;;;2MASX J16053680+1748078,MCG +03-41-104,PGC 057084,SDSS J160536.79+174807.5,SDSS J160536.80+174807.6,UGC 10192;;; +IC1183;Dup;16:05:38.15;+17:46:04.4;Her;;;;;;;;;;;;;;;6054;;;;;; +IC1184;Other;16:05:42.80;+17:47:24.0;Her;;;;;;;;;;;;;;;;;;;;This is a triple star.; +IC1185;G;16:05:44.69;+17:43:01.3;Her;0.74;0.54;8;15.10;;11.55;10.88;10.64;22.76;Sab;;;;;;;;2MASX J16054464+1743008,MCG +03-41-110,PGC 057096,SDSS J160544.68+174301.3;;; +IC1186;G;16:05:44.22;+17:21:43.8;Her;0.78;0.48;5;15.40;;12.28;11.60;11.33;23.49;Sb;;;;;;;;MCG +03-41-111,PGC 057095,SDSS J160544.22+172143.8,SDSS J160544.23+172143.8;;; +IC1187;G;15:59:10.18;+70:33:25.1;UMi;0.35;0.22;100;15.70;;12.40;11.92;11.53;;Sbc;;;;;;;;2MASX J15591018+7033250,MCG +12-15-040,PGC 056589;;; +IC1188;GPair;16:06:07.68;+17:27:36.0;Her;0.70;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1188A;G;16:06:07.30;+17:27:38.9;Her;0.55;0.41;8;15.65;;12.58;11.96;11.48;23.05;S0-a;;;;;;;;2MASX J16060732+1727392,PGC 057127,SDSS J160607.29+172738.8,SDSS J160607.30+172738.9;;;B-Mag taken from LEDA. +IC1188B;G;16:06:08.28;+17:27:41.9;Her;0.28;0.18;47;17.42;;;;;23.14;Sab;;;;;;;;PGC 1533342,SDSS J160608.27+172741.8,SDSS J160608.28+172741.9;;;B-Mag taken from LEDA. +IC1189;G;16:06:14.83;+18:10:58.4;Her;0.79;0.56;179;15.50;;12.37;11.62;11.36;23.46;S0-a;;;;;;;;2MASX J16061486+1810582,IRAS 16040+1818,MCG +03-41-119,PGC 057135,SDSS J160614.83+181058.3,SDSS J160614.83+181058.4,SDSS J160614.84+181058.4;;Position in Kiso list (1985AnTok..202.237T) is for faint object south-following.; +IC1190;G;16:05:52.41;+18:13:13.9;Her;1.28;0.35;119;15.60;;12.35;11.54;11.31;24.00;SABb;;;;;;;;2MASX J16055240+1813139,MCG +03-41-113,PGC 057111,SDSS J160552.42+181313.7,UGC 10195;;;B-Mag taken from LEDA. +IC1191;GPair;16:06:28.75;+18:16:04.4;Her;0.70;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1191 NED01;G;16:06:28.99;+18:16:04.3;Her;0.71;0.16;163;16.63;;;;;23.82;Sab;;;;;;;;2MASX J16062897+1816042,IRAS 16042+1824,PGC 057152SDSS J160628.98+181603.9;;;B-Mag taken from LEDA. +IC1191 NED02;G;16:06:29.70;+18:16:04.3;Her;0.40;0.21;153;17.00;;14.05;13.24;13.06;23.87;E;;;;;;;;2MASX J16062968+1816042,PGC 057154,SDSS J160629.69+181604.2,SDSS J160629.70+181604.2,SDSS J160629.71+181604.3;;;B-Mag taken from LEDA. +IC1192;G;16:06:33.13;+17:46:32.3;Her;0.91;0.43;114;15.50;;12.43;11.66;11.25;23.99;SBb;;;;;;;;PGC 057157,SDSS J160633.13+174632.3;;; +IC1193;G;16:06:32.20;+17:42:49.9;Her;0.78;0.65;2;15.50;;12.05;11.23;10.98;23.69;S0-a;;;;;;;;2MASX J16063222+1742501,PGC 057155,SDSS J160632.19+174249.9,SDSS J160632.20+174249.9;;;B-Mag taken from LEDA. +IC1194;G;16:06:39.35;+17:45:40.3;Her;0.64;0.49;20;15.33;;11.88;11.19;10.88;23.08;S0;;;;;;;;2MASX J16063935+1745401,MCG +03-41-128,PGC 057172,SDSS J160639.34+174540.2,SDSS J160639.34+174540.3,SDSS J160639.35+174540.3;;;B-Mag taken from LEDA. +IC1195;G;16:06:40.88;+17:11:30.5;Her;0.61;0.43;13;15.40;;12.45;11.83;11.57;23.02;SBbc;;;;;;;;MCG +03-41-126,PGC 057175,SDSS J160640.88+171130.5;;; +IC1196;G;16:07:58.37;+10:46:46.7;Se1;1.04;0.51;5;14.80;;12.01;11.23;10.97;23.20;Sa;;;;;;;;2MASX J16075837+1046468,IRAS 16055+1054,MCG +02-41-009,PGC 057246,SDSS J160758.35+104646.5,UGC 10218;;; +IC1197;G;16:08:17.27;+07:32:18.6;Se1;2.56;0.54;57;14.70;;12.10;11.41;11.10;23.84;Sc;;;;;;;;2MASX J16081729+0732187,MCG +01-41-013,PGC 057261,SDSS J160817.26+073218.6,SDSS J160817.27+073218.6,UGC 10219;;; +IC1198;G;16:08:36.37;+12:19:51.4;Se1;0.79;0.41;111;15.63;14.94;12.12;11.37;10.90;22.72;SBab;;;;;;;;2MASX J16083635+1219518,IRAS 16062+1227,MCG +02-41-011,PGC 057273,SDSS J160836.37+121951.5,SDSS J160836.38+121951.5;;; +IC1199;G;16:10:34.35;+10:02:25.3;Her;1.19;0.42;158;14.60;;11.17;10.64;10.56;22.87;Sbc;;;;;;;;2MASX J16103434+1002255,IRAS 16081+1010,MCG +02-41-013,PGC 057373,SDSS J161034.34+100225.3,TYC 949-1438-1,UGC 10242;;; +IC1200;Dup;16:04:29.21;+69:39:56.8;Dra;;;;;;;;;;;;;;;6079;;;;;; +IC1201;G;16:05:41.65;+69:35:37.7;Dra;0.68;0.22;114;15.60;;12.32;11.56;11.39;23.07;Sb;;;;;;;;2MASX J16054165+6935374,MCG +12-15-051,PGC 057104,UGC 10221;;; +IC1202;Dup;16:12:56.86;+09:52:01.6;Her;;;;;;;;;;;;;;;6081;;;;;; +IC1203;*Ass;16:15:16.00;-22:22:14.1;Sco;3.50;2.00;;;;;;;;;;;;;;;;;;Asterism of 6-8 stars, 3.5 x 2.0 arcmin. Identity as IC 1203 uncertain.; +IC1204;G;16:07:15.48;+69:55:53.3;UMi;0.65;0.30;65;15.50;;12.08;11.36;11.03;;Sa;;;;;;;;2MASX J16071547+6955533,IRAS 16073+7003,MCG +12-15-053,PGC 057206;;; +IC1205;G;16:14:15.92;+09:32:13.9;Her;0.69;0.59;110;14.60;;11.90;11.21;11.02;22.41;SBab;;;;;;;;2MASX J16141594+0932136,IRAS 16118+0939,MCG +02-41-022,PGC 057574,SDSS J161415.91+093213.8;;; +IC1206;G;16:15:13.07;+11:17:50.6;Her;1.12;0.64;2;14.80;;11.86;10.96;10.69;23.49;Sab;;;;;;;;2MASX J16151307+1117505,MCG +02-41-023,PGC 057623,SDSS J161513.07+111750.5,UGC 10293;;; +IC1207;*Ass;16:19:26.72;-29:39:04.0;Sco;2.00;0.50;;;;;;;;;;;;;;;;;;Asterism of six to eight stars, 2.0 x 0.5 arcmin.; +IC1208;G;16:15:47.89;+36:31:38.4;CrB;1.25;0.32;95;15.30;;11.98;11.17;11.07;24.16;S0-a;;;;;;;;2MASX J16154791+3631378,PGC 057650,SDSS J161547.88+363138.3,SDSS J161547.89+363138.3,SDSS J161547.89+363138.4;;; +IC1209;G;16:18:39.62;+15:33:30.1;Her;1.36;0.88;3;15.10;;11.23;10.49;10.26;24.16;E-S0;;;;;;;;2MASX J16183964+1533294,MCG +03-41-149,PGC 057796,SDSS J161839.61+153330.1,SDSS J161839.61+153330.2,UGC 10329;;; +IC1210;G;16:14:30.15;+62:32:12.1;Dra;1.38;0.42;169;13.80;;11.76;11.10;10.81;23.70;Sab;;;;;;;;2MASX J16143012+6232121,IRAS 16138+6239,MCG +10-23-048,PGC 057589,UGC 10304;;; +IC1211;G;16:16:51.98;+53:00:21.7;Dra;1.34;1.25;65;13.80;;10.64;9.94;9.68;23.34;E;;;;;;;;2MASX J16165191+5300213,MCG +09-27-009,PGC 057707,SDSS J161651.97+530021.6,UGC 10314;;; +IC1212;G;16:15:30.75;+64:13:29.3;Dra;0.77;0.66;5;15.20;;11.62;11.03;10.61;23.61;E;;;;;;;;2MASX J16153078+6413302,PGC 057633;;; +IC1213;Dup;16:22:10.30;-01:30:53.5;Oph;;;;;;;;;;;;;;;6172;;;;;; +IC1214;G;16:16:11.70;+65:58:07.6;Dra;1.05;0.44;17;15.00;;11.42;10.80;10.41;23.60;S0-a;;;;;;;;2MASX J16161172+6558075,MCG +11-20-009,PGC 057675,UGC 10323;;; +IC1215;G;16:15:35.13;+68:23:51.6;Dra;0.91;0.68;163;14.80;;12.06;11.30;11.10;22.34;SBbc;;;;;;;;2MASX J16153517+6823514,IRAS 16155+6831,MCG +11-20-009a,PGC 057638,UGC 10315;;; +IC1216;G;16:15:55.38;+68:20:59.6;Dra;0.75;0.63;49;14.90;;13.01;12.54;12.23;23.02;Sc;;;;;;;;2MASX J16155536+6820594,MCG +11-20-010,PGC 057664,UGC 10326;;; +IC1217;Other;16:16:04.10;+69:40:35.4;Dra;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1218;G;16:16:37.10;+68:12:09.5;Dra;0.92;0.92;60;15.30;;12.06;11.41;11.15;23.07;Sb;;;;;;;;2MASX J16163709+6812093,IRAS 16165+6819,MCG +11-20-011,PGC 057699;;; +IC1219;G;16:24:27.45;+19:28:57.3;Her;1.31;0.52;122;15.40;;11.59;10.88;10.44;24.34;S0;;;;;;;;2MASX J16242743+1928573,IRAS 16222+1936,MCG +03-42-005,PGC 058037,SDSS J162427.44+192857.2,UGC 10371;;; +IC1220;G;16:29:38.30;+08:27:02.6;Her;1.24;1.17;142;15.00;;10.96;10.29;10.02;24.07;E;;;;;;;;2MASX J16293826+0827023,MCG +01-42-005,PGC 058340,SDSS J162938.29+082702.6;;; +IC1221;G;16:34:41.63;+46:23:31.4;Her;1.00;0.92;35;14.40;;11.94;11.29;10.99;23.32;Sc;;;;;;;;2MASX J16344160+4623319,MCG +08-30-030,PGC 058528,SDSS J163441.62+462331.4,UGC 10458;;; +IC1222;G;16:35:09.20;+46:12:50.1;Her;1.51;1.12;49;14.16;13.45;11.63;10.99;10.71;23.48;Sbc;;;;;;;;2MASX J16350921+4612500,2MASX J16351005+4612572,IRAS 16336+4618,MCG +08-30-032,PGC 058544,SDSS J163509.18+461250.1,SDSS J163509.19+461250.0,UGC 10461;;; +IC1223;G;16:35:42.46;+49:13:13.9;Her;0.82;0.60;20;15.40;;11.86;11.17;10.98;23.39;Sb;;;;;;;;2MASX J16354249+4913137,MCG +08-30-033,PGC 058567,SDSS J163542.46+491313.9;;; +IC1224;G;16:42:56.29;+19:15:15.7;Her;1.28;0.84;87;15.50;;11.30;10.55;10.33;24.46;E-S0;;;;;;;;2MASX J16425629+1915158,MCG +03-42-027,PGC 058824,SDSS J164256.29+191515.7;;; +IC1225;G;16:36:52.52;+67:37:45.9;Dra;1.37;0.45;71;15.50;;12.16;11.43;11.19;23.91;Sb;;;;;;;;2MASX J16365251+6737460,MCG +11-20-022,PGC 058607,UGC 10494;;; +IC1226;G;16:41:06.57;+46:00:14.6;Her;0.57;0.50;53;15.40;;12.43;11.77;11.45;22.79;SBa;;;;;;1232;;2MASX J16410658+4600141,PGC 058754,SDSS J164106.56+460014.5,SDSS J164106.56+460014.6,SDSS J164106.56+460014.8,SDSS J164106.57+460014.6;;Identification as IC 1232 is not certain.; +IC1227;Dup;16:40:07.90;+58:37:02.5;Dra;;;;;;;;;;;;;;;6206;;;;;; +IC1228;G;16:42:06.48;+65:35:07.8;Dra;1.32;0.71;122;14.50;;11.41;10.71;10.31;23.34;Sb;;;;;;;;2MASX J16420650+6535077,IRAS 16418+6540,MCG +11-20-026,PGC 058804,UGC 10524;;; +IC1229;G;16:44:58.82;+51:18:29.1;Dra;0.44;0.17;106;15.96;;13.09;12.44;11.96;23.19;Sb;;;;;;;;2MASX J16445880+5118291,MCG +09-27-072,PGC 058902,SDSS J164458.82+511829.0;;;B-Mag taken from LEDA. +IC1230;GPair;16:45:01.48;+51:15:34.5;Her;0.92;0.59;159;;;;;;24.13;E;;;;;;;;2MASX J16450159+5115371,MCG +09-27-073,PGC 058903,SDSS J164501.58+511537.4,UGC 10538;;; +IC1231;G;16:46:59.02;+58:25:23.4;Dra;1.88;0.86;153;13.85;13.20;11.21;10.53;10.27;23.23;Sc;;;;;;;;2MASX J16465901+5825234,IRAS 16461+5830,MCG +10-24-056,PGC 058973,UGC 10560;;; +IC1232;Dup;16:41:06.57;+46:00:14.6;Her;;;;;;;;;;;;;;;;1226;;;;; +IC1233;Dup;16:48:20.24;+62:58:35.1;Dra;;;;;;;;;;;;;;;6247;;;;;; +IC1234;*;16:52:50.91;+56:52:40.0;Dra;;;;;;;;;;;;;;;;;;;;; +IC1235;G;16:52:03.63;+63:06:56.9;Dra;0.76;0.53;13;15.04;;;;;23.03;Sc;;;;;;;;2MASX J16520357+6306564,PGC 059146,SDSS J165203.63+630656.8,SDSS J165203.63+630656.9,SDSS J165203.63+630657.1,SDSS J165203.65+630656.9;;;B-Mag taken from LEDA. +IC1236;G;16:58:29.60;+20:02:29.3;Her;1.17;1.07;146;14.60;;11.97;11.32;10.85;23.25;Sc;;;;;;;;2MASX J16582961+2002292,IRAS 16563+2006,MCG +03-43-010,PGC 059350,SDSS J165829.59+200229.2,SDSS J165829.60+200229.2,SDSS J165829.60+200229.3,UGC 10633;;; +IC1237;G;16:56:16.05;+55:01:35.3;Dra;1.97;0.58;22;14.70;;11.34;10.70;10.33;23.86;Sbc;;;;;;;;2MASX J16561605+5501351,IRAS 16552+5505,MCG +09-28-010,PGC 059280,UGC 10621;;; +IC1238;**;17:00:30.15;+23:04:36.3;Her;;;;;;;;;;;;;;;;;;;;; +IC1239;Dup;17:00:45.09;+23:02:38.4;Her;;;;;;;;;;;;;;;6276;;;;;; +IC1240;Other;17:00:58.87;+61:03:01.6;Dra;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1241;G;17:01:28.22;+63:41:28.0;Dra;1.16;0.93;59;16.20;;12.06;11.45;11.03;23.25;SBc;;;;;;;;2MASX J17012817+6341277,IRAS 17011+6345,PGC 059452,SDSS J170128.21+634128.0,SDSS J170128.22+634128.0,SDSS J170128.22+634128.2,UGC 10670;;; +IC1242;G;17:08:42.88;+04:02:59.6;Oph;0.84;0.51;120;14.90;;12.44;11.65;11.21;22.86;Sb;;;;;;;;2MASX J17084287+0402596,IRAS 17062+0406,MCG +01-44-001,PGC 059688,UGC 10718;;; +IC1243;Other;17:10:24.55;+10:45:59.8;Oph;;;;;;;;;;;;;;;;;;;;Five Galactic stars.; +IC1244;G;17:10:33.71;+36:18:11.9;Her;1.13;1.13;130;14.70;;10.98;10.34;9.97;23.66;E;;;;;;;;2MASX J17103364+3618127,MCG +06-38-003,PGC 059746,SDSS J171033.68+361812.3,UGC 10739;;; +IC1245;G;17:12:36.60;+38:01:13.6;Her;1.85;0.97;126;15.00;;11.10;10.38;10.08;24.72;S0;;;;;;;;2MASX J17123656+3801133,MCG +06-38-007,PGC 059835,SDSS J171236.60+380113.5,UGC 10755;;; +IC1246;*;17:14:12.28;+20:14:14.3;Her;;;;;;;;;;;;;;;;;;;;; +IC1247;*;17:16:22.14;-12:46:51.2;Se2;;;;;;;;;;;;;;;;;;;;; +IC1248;G;17:11:40.18;+59:59:44.2;Dra;0.82;0.64;17;14.30;;12.60;12.05;11.71;22.87;Sc;;;;;;;;2MASX J17114026+5959449,MCG +10-24-106,PGC 059740,PGC 059791,SDSS J171140.16+595944.2,SDSS J171140.18+595944.2,SDSS J171140.19+595944.3,SDSS J171140.19+595944.5,UGC 10756;;; +IC1249;G;17:14:55.12;+35:31:12.4;Her;0.24;0.22;147;14.90;;12.54;11.96;11.80;;Sbc;;;;;;;;IRAS 17131+3534,PGC 059919;;; +IC1250;G;17:14:29.17;+57:25:00.4;Dra;0.59;0.30;70;15.95;;12.79;12.07;11.77;23.74;E;;;;;;;;2MASX J17142919+5724597,LEDA 2565010,SDSS J171429.17+572500.3;;;B-Mag taken from LEDA. +IC1251;G;17:10:12.90;+72:24:37.8;Dra;1.21;0.64;67;14.23;;12.86;12.22;12.07;23.10;Sc;;;;;;;;2MASX J17101322+7224386,MCG +12-16-021,PGC 059735,SDSS J171012.89+722437.8,UGC 10757;;; +IC1252;G;17:15:50.38;+57:22:00.5;Dra;1.06;0.32;141;15.70;;12.07;11.46;11.12;23.78;Sab;;;;;;4649;;2MASX J17155037+5722006,MCG +10-24-120,PGC 059962,SDSS J171550.39+572200.3,UGC 10788;;; +IC1253;Dup;17:19:54.67;+16:39:38.5;Her;;;;;;;;;;;;;;;6347;;;;;; +IC1254;G;17:11:33.41;+72:24:07.2;Dra;0.91;0.54;38;15.00;13.84;12.24;11.61;11.67;23.25;Sb;;;;;;;;2MASX J17113334+7224072,MCG +12-16-024,PGC 059783,UGC 10769;;; +IC1255;G;17:23:05.39;+12:41:43.6;Oph;0.98;0.48;11;14.20;;11.37;10.64;10.28;22.36;Sb;;;;;;;;2MASX J17230538+1241435,IRAS 17207+1244,MCG +02-44-003,PGC 060180,UGC 10826;;; +IC1256;G;17:23:47.31;+26:29:11.5;Her;1.28;0.75;93;14.30;13.55;11.59;10.98;10.69;23.25;Sb;;;;;;;;2MASX J17234732+2629114,IRAS 17217+2631,MCG +04-41-007,PGC 060203,UGC 10829;;; +IC1257;GCl;17:27:08.38;-07:05:35.1;Oph;3.30;;;;;;;;;;;;;;;;;2MASX J17270839-0705350,MWSC 2599;;; +IC1258;G;17:27:17.38;+58:29:07.7;Dra;0.91;0.72;65;14.40;;11.19;10.47;10.24;22.93;Sa;;;;;;;;2MASX J17271733+5829078,MCG +10-25-035,PGC 060320,SDSS J172717.37+582907.9,SDSS J172717.38+582907.6,SDSS J172717.39+582907.7,UGC 10867;;; +IC1259;GPair;17:27:25.80;+58:31:00.0;Dra;0.90;;;;;;;;;;;;;;;;;UGC 10869;;Part of the GGroup Arp 311.;Diameter of the group inferred by the author. +IC1259 NED01;G;17:27:24.71;+58:31:00.9;Dra;0.91;0.59;152;15.22;;10.77;10.10;9.84;23.73;E-S0;;;;;;;;MCG +10-25-037a,PGC 060323,SDSS J172724.70+583100.8,UGC 10869 NED01;;;B-Mag taken from LEDA. +IC1259 NED02;G;17:27:26.78;+58:30:59.6;Dra;1.11;1.06;35;14.11;;10.77;10.10;9.84;23.10;E-S0;;;;;;;;2MASX J17272678+5830598,MCG +10-25-037,PGC 060325,SDSS J172726.78+583059.5,UGC 10869 NED02;;;B-Mag taken from LEDA. +IC1260;G;17:27:31.72;+58:28:33.1;Dra;0.42;0.34;138;15.70;;12.38;11.69;11.55;22.65;S0-a;;;;;;;;2MASX J17273174+5828328,MCG +10-25-040,PGC 060324,SDSS J172731.71+582833.0,SDSS J172731.71+582833.1,SDSS J172731.71+582833.3,SDSS J172731.72+582833.0;;; +IC1261;GPair;17:23:23.36;+71:15:49.1;Dra;1.10;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1261 NED01;G;17:23:26.12;+71:15:46.1;Dra;0.84;0.68;63;14.90;;11.57;10.91;10.57;24.19;E;;;;;;;;2MASX J17232604+7115462,MCG +12-16-032a,PGC 060185,SDSS J172326.12+711546.0;;; +IC1261 NED02;G;17:23:20.88;+71:15:51.7;Dra;0.69;0.61;0;;;;;;;E-S0;;;;;;;;MCG +12-16-032b,PGC 060186,SDSS J172320.88+711551.6;;; +IC1262;G;17:33:02.02;+43:45:34.6;Her;1.64;0.82;84;14.90;;11.32;10.66;10.36;24.60;E;;;;;;;;2MASX J17330202+4345345,MCG +07-36-020,PGC 060479,UGC 10900;;; +IC1263;G;17:33:07.20;+43:49:19.5;Her;1.63;0.68;178;14.80;;11.59;10.86;10.76;23.82;Sb;;;;;;;;2MASX J17330719+4349195,MCG +07-36-021,PGC 060481,UGC 10902;;; +IC1264;G;17:33:16.84;+43:37:45.2;Her;1.37;1.22;60;15.60;;11.79;11.26;11.07;24.96;S0;;;;;;;;2MASX J17331686+4337455,MCG +07-36-022,PGC 060484,UGC 10904;;; +IC1265;G;17:36:39.43;+42:05:18.3;Her;1.85;0.81;78;14.30;;11.83;11.22;11.00;23.62;Sab;;;;;;;;2MASX J17363945+4205181,MCG +07-36-027,PGC 060568,UGC 10917;;; +IC1266;PN;17:45:35.30;-46:05:23.5;Ara;0.16;;;11.59;11.20;10.41;10.11;9.19;;;;11.20;11.38;;;;HD 161044;2MASX J17453533-4605233,ESO 279-007,IRAS 17418-4604,PK 345-08 1,PN G345.2-08.8,TYC 8343-1781-1;;; +IC1267;G;17:38:45.89;+59:22:23.3;Dra;1.38;0.95;55;14.50;;11.61;10.87;10.62;23.33;SBb;;;;;;;;2MASX J17384582+5922234,MCG +10-25-077,PGC 060635,SDSS J173845.89+592223.2,UGC 10937;;; +IC1268;G;17:50:39.29;+17:12:34.0;Her;0.66;0.49;90;15.10;;12.33;11.69;11.42;22.80;Sc;;;;;;;;2MASX J17503935+1712333,IRAS 17484+1713,MCG +03-45-036,PGC 060971;;; +IC1269;G;17:52:06.00;+21:34:10.7;Her;1.32;0.85;135;14.03;13.22;11.62;10.95;10.64;22.43;Sbc;;;;;;;;2MASX J17520585+2134090,2MASX J17520693+2134230,IRAS 17499+2134,MCG +04-42-009,PGC 061023,UGC 11013;;; +IC1270;*;17:47:57.00;+62:13:24.4;Dra;;;;;;;;;;;;;;;;;;;;; +IC1271;Neb;18:05:13.11;-24:24:37.9;Sgr;;;;;;;;;;;;;;;;;;;;; +IC1272;Other;18:04:55.75;+25:07:45.1;Her;;;;;;;;;;;;;;;;;;;;Group of 4-5 Galactic stars.; +IC1273;**;18:05:02.75;+25:07:55.6;Her;;;;;;;;;;;;;;;;;;;;; +IC1274;HII;18:09:51.03;-23:38:53.6;Sgr;20.00;5.00;;;;;;;;;;;;;;;;LBN 33;;; +IC1275;Neb;18:10:07.19;-23:45:40.4;Sgr;;;;;;;;;;;;;;;;;;;;; +IC1276;GCl;18:10:44.27;-07:12:27.3;Se2;9.60;;;;;;;;;;;;;;;;;MWSC 2835;;; +IC1277;G;18:10:27.29;+31:00:11.4;Her;0.98;0.67;21;15.00;;12.69;12.31;11.76;23.44;Sc;;;;;;;;2MASX J18102728+3100112,MCG +05-43-005,PGC 061491,UGC 11135;;; +IC1278;Other;18:10:41.65;+31:08:59.7;Her;;;;;;;;;;;;;;;;;;;;Group of 4-5 Galactic stars.; +IC1279;G;18:11:15.38;+36:00:28.0;Her;2.34;0.59;159;14.50;;11.21;10.54;10.27;23.95;Sb;;;;;;;;2MASX J18111538+3600280,MCG +06-40-009,PGC 061518,UGC 11143;;; +IC1280;Dup;18:12:18.42;+25:39:44.5;Her;;;;;;;;;;;;;;;6581;;;;;; +IC1281;GPair;18:11:38.10;+35:59:32.0;Her;1.30;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1281 NED01;G;18:11:38.02;+35:59:14.7;Her;0.54;0.31;26;16.39;;13.41;12.73;12.38;23.94;;;;;;;;;2MASX J18113801+3559148,PGC 2073160;;;B-Mag taken from LEDA. +IC1281 NED02;G;18:11:38.16;+35:59:50.1;Her;0.57;0.38;15;15.50;;12.52;11.80;11.45;23.19;;;;;;;;;2MASX J18113817+3559508,PGC 061527;;; +IC1282;Other;18:14:05.25;+21:06:07.9;Her;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +IC1283;HII;18:17:16.85;-19:45:44.0;Sgr;15.00;15.00;;;;;;;;;;;;;;;;LBN 47;;; +IC1284;Neb;18:17:39.63;-19:40:19.3;Sgr;16.98;15.14;;7.70;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC1285;Other;18:16:10.17;+25:06:01.2;Her;;;;;;;;;;;;;;;;;;;;Five Galactic stars.; +IC1286;G;18:16:14.27;+55:35:27.6;Dra;1.42;0.44;86;14.80;;11.91;11.30;11.02;23.59;Sab;;;;;;;;2MASX J18161427+5535277,IRAS 18153+5534,MCG +09-30-010,PGC 061666,UGC 11191;;; +IC1287;RfN;18:31:25.69;-10:47:44.9;Sct;20.00;10.00;;6.10;;;;;;;;;;;;;;BD -10 4713,HD 170740,HIP 090804,LBN 75;;; +IC1288;G;18:29:22.46;+39:42:48.1;Lyr;1.09;0.61;5;14.30;;11.17;10.51;10.20;22.89;SBa;;;;;;;;2MASX J18292247+3942479,IRAS 18276+3940,MCG +07-38-007,PGC 061941,UGC 11256;;; +IC1289;G;18:30:02.29;+39:57:50.5;Lyr;0.66;0.33;145;15.30;;12.70;12.03;11.74;23.37;;;;;;;;;2MASX J18300229+3957505,MCG +07-38-009,PGC 061958;;; +IC1290;*Ass;18:38:35.31;-24:05:48.6;Sgr;;;;;;;;;;;;;;;;;;;;Asterism of six to eight stars.; +IC1291;G;18:33:52.57;+49:16:43.0;Dra;1.33;1.15;17;14.20;;13.18;12.90;12.71;22.84;Sd;;;;;;;;2MASX J18335257+4916428,IRAS 18326+4914,MCG +08-34-004,PGC 062049,UGC 11283;;; +IC1292;Other;18:44:40.45;-27:48:58.6;Sgr;;;;;;;;;;;;;;;;;;;;"Nominal position for a ""planetary nebula""; nothing here."; +IC1293;Other;18:41:36.65;+56:19:04.0;Dra;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +IC1294;Other;18:49:50.45;+40:12:33.8;Lyr;;;;;;;;;;;;;;;;;;;;Group of 3-4 Galactic stars. The IC identification is not certain.; +IC1295;PN;18:54:37.13;-08:49:37.3;Sct;1.50;;;15.00;12.50;;;;;;;15.50;;;;;;IRAS 18519-0853,PK 25-04 2,PN G025.4-04.7;;; +IC1296;G;18:53:18.83;+33:03:59.7;Lyr;0.99;0.53;69;15.40;;12.98;12.35;12.41;23.63;SBbc;;;;;;;;2MASX J18531883+3303596,MCG +06-41-022,PGC 062532,UGC 11374;;; +IC1297;PN;19:17:23.40;-39:36:47.0;CrA;0.12;;;10.60;10.70;;;;;;;14.80;14.20;;;;HD 180206;ESO 337-020,IRAS 19139-3942,PK 358-21 1,PN G358.3-21.6;;; +IC1298;Other;19:18:35.69;-01:35:46.3;Aql;;;;;;;;;;;;;;;;;;;;Group of 8-9 Galactic stars.; +IC1299;OCl;19:22:42.03;+20:44:22.4;Vul;2.00;1.00;;14.00;;;;;;;;;;;;;;;;;Dimensions and B-Mag taken from LEDA +IC1300;Dup;19:24:03.17;+53:37:29.2;Cyg;;;;;;;;;;;;;;;6798;;;;;; +IC1301;G;19:26:31.98;+50:07:31.0;Cyg;1.44;0.69;19;14.30;;10.78;10.09;9.84;23.67;S0-a;;;;;;4867;;2MASX J19263197+5007308,MCG +08-35-010,PGC 063207,UGC 11437;;; +IC1302;G;19:30:52.89;+35:47:06.9;Cyg;0.95;0.51;50;14.08;;11.25;10.60;10.35;22.20;SABc;;;;;;;;2MASX J19305289+3547067,IRAS 19290+3540,MCG +06-43-002,PGC 063307;;;B-Mag taken from LEDA. +IC1303;G;19:31:30.06;+35:52:35.8;Cyg;1.18;0.73;104;15.00;;11.39;10.78;10.36;23.53;Sc;;;;;;;;2MASX J19313005+3552358,IRAS 19296+3546,MCG +06-43-004,PGC 063328,SDSS J193130.09+355235.7,UGC 11452;;; +IC1304;*Ass;19:35:34.49;+41:06:42.6;Cyg;;;;;;;;;;;;;;;;;;;;Probably random clumping of Milky Way field stars.; +IC1305;Other;19:39:17.10;+20:11:39.4;Vul;;;;;;;;;;;;;;;;;;;;Group of 4-5 Galactic stars.; +IC1306;*Ass;19:41:41.19;+37:41:06.7;Cyg;;;;;;;;;;;;;;;;;;;;Probably random clumping of Milky Way field stars.; +IC1307;*Ass;19:42:32.10;+27:45:09.5;Vul;;;;;;;;;;;;;;;;;;;;; +IC1308;HII;19:45:05.24;-14:43:12.9;Sgr;;;;;;;;;;;;;;;;;;IRAS 19422-1450;;HII region in NGC 6822.; +IC1309;G;20:03:01.52;-17:13:55.5;Sgr;0.87;0.64;58;15.15;;11.81;11.15;10.82;23.25;SABb;;;;;;;;2MASX J20030152-1713556,IRAS 20001-1722,PGC 064030;;; +IC1310;Cl+N;20:10:00.98;+34:58:08.0;Cyg;15.00;3.00;;;;;;;;;;;;;;;;LBN 181,MWSC 3273;;; +IC1311;OCl;20:10:47.82;+41:10:26.2;Cyg;6.30;;;;13.10;;;;;;;;;;;;;MWSC 3271;;; +IC1312;Other;20:16:51.50;+18:02:45.5;Sge;;;;;;;;;;;;;;;;;;;;"Group of 12-15 Galactic stars; probably not a cluster."; +IC1313;G;20:18:43.66;-16:56:45.5;Cap;1.61;1.02;26;13.50;;10.63;9.93;9.60;23.81;Sab;;;;;;;;2MASX J20184365-1656456,LEDA 891211,MCG -03-51-008,PGC 064463;;; +IC1314;*Ass;20:17:50.00;+25:05:23.2;Vul;;;;;;;;;;;;;;;;;;;;; +IC1315;Other;20:17:21.95;+30:41:20.7;Cyg;;;;;;;;;;;;;;;;;;;;Group of 5-6 Galactic stars.; +IC1316;Other;20:22:25.84;+06:30:06.1;Aql;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1317;G;20:23:15.59;+00:39:53.0;Aql;0.76;0.57;98;14.50;;11.32;10.60;10.31;22.80;E;;;;;;;;2MASX J20231560+0039528,MCG +00-52-004,PGC 064586,UGC 11546;;; +IC1318;*;20:22:13.69;+40:15:24.1;Cyg;;;;2.90;2.23;1.11;0.83;0.72;;;;;;;;;;BD +39 4159,HD 194093,HIP 100453;gam Cyg;;Variable star. +IC1319;G;20:26:01.93;-18:30:14.7;Cap;0.79;0.49;8;14.86;;11.52;10.82;10.51;22.69;Sbc;;;;;;;;ESO 596-037,ESO-LV 596-0370,IRAS 20231-1840,MCG -03-52-007,PGC 064675;;; +IC1320;G;20:26:25.66;+02:54:35.0;Del;1.07;0.61;87;14.50;;11.70;10.98;10.70;22.99;SBb;;;;;;;;2MASX J20262565+0254350,IRAS 20239+0244,MCG +00-52-009,PGC 064685,UGC 11560;;; +IC1321;G;20:28:11.05;-18:17:29.4;Cap;1.10;0.71;96;15.23;;12.00;11.40;10.97;23.84;SBbc;;;;;;;;2MASX J20281105-1817292,ESO 596-043,ESO-LV 596-0430,MCG -03-52-011,PGC 064751;;; +IC1322;G;20:30:08.48;-15:13:40.2;Cap;1.10;0.56;114;15.97;;11.80;11.03;10.76;24.03;S0-a;;;;;;;;2MASX J20300848-1513401,IRAS 20273-1523,PGC 064822;;; +IC1323;**;20:30:29.00;-15:10:55.0;Cap;;;;;;;;;;;;;;;;;;;;; +IC1324;G;20:32:12.31;-09:03:22.0;Cap;1.25;1.12;55;14.29;;10.75;10.10;9.80;23.54;S0-a;;;;;;;;2MASX J20321230-0903214,MCG -02-52-012,PGC 064906;;;B-Mag taken from LEDA. +IC1325;Dup;20:32:50.22;+09:55:35.1;Del;;;;;;;;;;;;;;;6928;;;;;; +IC1327;G;20:35:41.27;-00:00:20.8;Aql;0.93;0.90;15;15.00;;11.63;11.05;10.73;23.51;S0-a;;;;;;;;2MASX J20354128-0000209,IRAS 20331-0010,PGC 065027;;; +IC1328;G;20:41:57.04;-19:37:59.0;Cap;0.89;0.36;50;14.88;;12.09;11.42;11.04;;Sc;;;;;;;;2MASX J20415704-1937587,ESO 597-028,IRAS 20390-1948,MCG -03-52-023,PGC 065217;;; +IC1329;Other;20:43:42.11;+15:35:50.7;Del;;;;;;;;;;;;;;;;;;;;Group of 8-10 Galactic stars.; +IC1330;G;20:46:14.94;-14:01:23.6;Aqr;1.25;0.41;109;;;11.65;10.89;10.54;;Sc;;;;;;;;2MASX J20461497-1401243,IRAS 20434-1412,MCG -02-53-002,PGC 065345;;; +IC1331;G;20:47:48.77;-09:59:45.4;Aqr;1.75;0.49;85;14.69;;10.92;10.18;9.93;24.35;S0-a;;;;;;;;2MASX J20474877-0959453,MCG -02-53-005,PGC 065396;;;B-Mag taken from LEDA. +IC1332;G;20:51:51.39;-13:42:41.5;Aqr;1.16;0.69;64;15.88;;11.84;11.15;10.72;23.98;Sab;;;;;;;;2MASX J20515137-1342408,MCG -02-53-011,PGC 065584;;;B-Mag taken from LEDA. +IC1333;G;20:52:17.20;-16:17:08.7;Cap;1.37;0.73;83;15.46;;11.02;10.28;9.98;24.37;S0-a;;;;;;1334;;2MASX J20521721-1617083,MCG -03-53-008,PGC 065614;;;B-Mag taken from LEDA. +IC1334;Dup;20:52:17.20;-16:17:08.7;Cap;;;;;;;;;;;;;;;;1333;;;;; +IC1335;G;20:53:06.12;-16:20:07.6;Cap;0.89;0.64;16;15.28;;11.69;10.98;10.73;24.37;E;;;;;;;;2MASX J20530614-1620078,LEDA 899456;;May contribute to the radio flux of PKS 2050-16.; +IC1336;G;20:55:04.92;-18:02:19.4;Cap;0.86;0.49;44;15.28;;12.36;11.62;11.34;23.58;S0-a;;;;;;;;2MASX J20550491-1802195,ESO 598-001,ESO-LV 598-0010,MCG -03-53-009,PGC 065706;;; +IC1337;G;20:56:52.70;-16:35:09.0;Cap;0.84;0.61;16;14.52;;11.79;11.07;10.75;22.81;SABb;;;;;;;;2MASX J20565274-1635088,IRAS 20540-1646,MCG -03-53-012,PGC 065760;;; +IC1338;G;20:56:57.84;-16:29:33.4;Cap;0.76;0.50;6;15.50;;12.34;11.63;11.37;23.41;SBab;;;;;;;;2MASX J20565781-1629328,IRAS 20541-1641,LEDA 140938;;; +IC1339;G;20:57:55.52;-17:56:34.2;Cap;1.51;0.94;49;14.17;;10.86;10.04;9.79;23.45;Sb;;;;;;;;2MASX J20575551-1756343,ESO 598-008,ESO-LV 598-0080,MCG -03-53-013,PGC 065799;;; +IC1340;SNR;20:56:08.25;+31:02:52.3;Cyg;25.12;19.95;;;;;;;;;;;;;;;;;;Bright knot in the Veil Nebula.;Dimensions taken from LEDA +IC1341;G;21:00:16.68;-13:58:34.8;Aqr;0.95;0.53;61;15.24;;12.15;11.49;11.19;23.85;S0-a;;;;;;;;2MASX J21001666-1358354,MCG -02-53-016,PGC 065876;;;B-Mag taken from LEDA. +IC1342;G;21:00:25.44;-14:29:45.1;Aqr;1.08;0.41;74;;;11.66;10.96;10.59;;Sab;;;;;;;;2MASX J21002552-1429444,IRAS 20576-1441,MCG -03-53-017,PGC 065878;;; +IC1343;G;21:01:00.66;-15:24:13.3;Cap;1.02;0.43;173;15.23;;11.78;11.12;10.86;23.78;S0-a;;;;;;;;2MASX J21010067-1524129,LEDA 187855;;; +IC1344;G;21:01:16.45;-13:22:49.0;Aqr;1.15;0.52;50;14.57;;;11.33;10.95;23.14;Sab;;;;;;;;2MASX J21011644-1322489,MCG -02-53-018,PGC 065913;;;B-Mag taken from LEDA. +IC1345;G;21:01:22.20;-13:23:51.4;Aqr;0.48;0.41;158;15.58;;12.65;11.98;11.64;22.93;;;;;;;;;2MASX J21012219-1323509,LEDA 938504;;;B-Mag taken from LEDA. +IC1346;G;21:01:37.02;-13:57:38.5;Aqr;1.23;0.62;98;14.92;;12.08;11.38;10.89;23.61;Sb;;;;;;;;2MASX J21013703-1357385,MCG -02-53-019,PGC 065927;;;B-Mag taken from LEDA. +IC1347;G;21:01:44.39;-13:18:47.9;Aqr;1.42;0.65;2;15.62;;11.38;10.70;10.34;24.77;S0;;;;;;;;2MASX J21014441-1318475,MCG -02-53-020,PGC 065928;;;B-Mag taken from LEDA. +IC1348;G;21:01:44.11;-13:21:28.8;Aqr;0.37;0.26;155;15.83;;12.25;11.62;11.30;;;;;;;;;;2MASX J21014400-1321265,PGC 3093671;;; +IC1349;G;21:01:50.45;-13:15:55.8;Aqr;0.72;0.43;51;15.47;;12.44;11.69;11.40;23.64;S0-a;;;;;;;;2MASX J21015044-1315555,LEDA 940379;;;B-Mag taken from LEDA. +IC1350;G;21:01:52.29;-13:51:09.6;Aqr;0.91;0.56;160;14.79;;11.42;10.80;10.44;23.28;S0-a;;;;;;1354;;2MASX J21015228-1351095,MCG -02-53-021,PGC 065939;;;B-Mag taken from LEDA. +IC1351;G;21:01:52.44;-13:12:06.7;Aqr;0.74;0.23;25;15.65;;12.48;11.79;11.58;23.93;;;;;;;;;2MASX J21015241-1312065,LEDA 941325;;;B-Mag taken from LEDA. +IC1352;G;21:01:54.90;-13:23:02.7;Aqr;0.50;0.30;30;16.38;;;;;23.62;;;;;;;;;2MASX J21015490-1323025,PGC 938673;;;B-Mag taken from LEDA. +IC1353;G;21:01:56.32;-13:16:22.2;Aqr;0.45;0.35;134;16.38;;13.19;12.60;12.33;23.36;;;;;;;;;2MASX J21015633-1316225,PGC 940278;;; +IC1354;Dup;21:01:52.29;-13:51:09.6;Aqr;;;;;;;;;;;;;;;;1350;;;;; +IC1355;G;21:01:58.39;-13:10:22.8;Aqr;0.40;0.34;50;15.79;;12.19;11.64;11.40;;;;;;;;;;2MASX J21015835-1310222,PGC 2800921;;; +IC1356;G;21:02:53.00;-15:48:41.7;Cap;0.82;0.58;163;15.20;;11.13;10.37;10.09;23.58;E;;;;;;;;2MASX J21025299-1548413,MCG -03-53-022,PGC 065965;;;B-Mag taken from LEDA. +IC1357;G;21:05:57.31;-10:42:58.5;Aqr;1.28;0.48;38;15.07;;12.04;11.35;11.08;24.45;SBa;;;;;;;;2MASX J21055731-1042582,PGC 066092;;; +IC1358;G;21:06:29.41;-16:12:16.0;Cap;0.50;0.23;38;15.65;;12.42;11.58;11.30;22.88;;;;;;;;;2MASX J21062942-1612163,IRAS 21037-1624,LEDA 2817440;;; +IC1359;G;21:08:43.02;+12:29:03.4;Peg;1.16;0.49;171;14.80;;11.12;10.37;10.13;23.28;Sab;;;;;;;;2MASX J21084300+1229032,MCG +02-54-001,PGC 066189,UGC 11684;;; +IC1360;G;21:10:50.32;+05:04:16.9;Equ;0.80;0.40;20;15.60;;11.94;11.13;10.76;;Sb;;;;;;;;2MASX J21105028+0504169,IRAS 21083+0451,PGC 066266;;; +IC1361;G;21:11:29.14;+05:03:15.6;Equ;0.78;0.55;48;15.40;;12.59;11.97;11.35;23.45;Sb;;;;;;;;2MASX J21112917+0503156,IRAS 21089+0450,MCG +01-54-002,PGC 066297,UGC 11692;;; +IC1362;G;21:11:52.65;+02:19:44.3;Aqr;0.62;0.45;167;15.70;;12.26;11.57;11.28;23.55;E-S0;;;;;;;;2MASX J21115263+0219446,PGC 066316;;; +IC1363;OCl;21:10:40.42;+46:52:12.2;Cyg;;;;;;;;;;;;;;;;;;;;; +IC1364;G;21:13:24.68;+02:46:11.0;Equ;1.07;0.78;124;14.70;;11.20;10.46;10.27;23.44;E;;;;;;;;2MASX J21132469+0246113,MCG +00-54-006,PGC 066367;;; +IC1365;GGroup;21:13:55.91;+02:33:55.4;Equ;1.00;;;;;;;;;;;;;;;;;MCG +00-54-007;;;Diameter of the group inferred by the author. +IC1365 NED01;G;21:13:55.92;+02:33:55.4;Equ;1.66;0.85;57;15.10;;;;;24.88;E;;;;;;;;MCG +00-54-007 NED01,PGC 066381;;; +IC1365 NED02;G;21:13:54.66;+02:33:49.7;Equ;1.38;0.81;74;17.00;;;;;26.36;;;;;;;;;2MASX J21135465+0233487;;;B-Mag taken from LEDA +IC1366;G;21:14:08.02;+01:46:34.0;Aqr;0.81;0.41;23;15.70;;12.08;11.48;11.08;24.01;S0;;;;;;;;2MASX J21140805+0146336,PGC 066386;;; +IC1367;G;21:14:09.70;+02:59:37.7;Equ;0.65;0.50;152;15.30;;12.44;11.65;11.54;23.35;;;;;;;;;2MASX J21140971+0259376,PGC 066390;;; +IC1368;G;21:14:12.59;+02:10:40.8;Aqr;1.36;0.52;47;14.30;;11.22;10.54;10.16;23.25;Sa;;;;;;;;2MASX J21141259+0210406,IRAS 21116+0158,MCG +00-54-008,PGC 066389,UGC 11703;;; +IC1369;OCl;21:12:09.04;+47:46:06.6;Cyg;5.10;;;;;;;;;;;;;;;;;MWSC 3481;;; +IC1370;G;21:15:14.27;+02:11:31.3;Aqr;0.66;0.49;54;15.10;;12.25;11.50;11.35;23.09;;;;;;;;;2MASX J21151427+0211314,PGC 066418;;; +IC1371;G;21:20:15.65;-04:52:35.5;Aqr;1.42;0.83;13;14.98;;11.08;10.39;10.09;24.38;E-S0;;;;;;;;2MASX J21201566-0452356,MCG -01-54-013,PGC 066578,SDSS J212015.64-045235.2;;;B-Mag taken from LEDA. +IC1372;G;21:20:17.09;-05:36:16.5;Aqr;0.83;0.63;127;15.04;;12.72;11.94;11.67;23.14;Sc;;;;;;;;2MASX J21201708-0536166,IRAS 21176-0548,LEDA 3083153;;; +IC1373;G;21:20:37.25;+01:05:32.7;Aqr;0.89;0.61;38;15.34;;11.81;10.82;10.55;23.96;E;;;;;;;;2MASX J21203723+0105330,MCG +00-54-013 NED02,PGC 066589,SDSS J212037.24+010532.7;;;B-Mag taken from LEDA. +IC1374;G;21:21:02.65;+01:42:46.7;Aqr;0.63;0.44;113;15.70;;12.80;11.95;11.66;23.33;Sbc;;;;;;;;2MASX J21210267+0142464,PGC 066605;;; +IC1375;G;21:20:59.79;+03:59:07.5;Equ;0.58;0.37;125;15.10;;11.78;10.96;10.67;;E;;;;;;;;2MASX J21205981+0359074,PGC 066603;;; +IC1376;Other;21:24:41.10;-05:44:32.8;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1377;G;21:25:26.63;+04:18:51.2;Peg;0.73;0.56;118;14.80;;11.77;11.07;10.60;22.72;SBab;;;;;;;;2MASX J21252656+0418508,IRAS 21229+0405,MCG +01-54-009,PGC 066722;;; +IC1378;Other;21:22:51.71;+55:27:51.5;Cep;;;;;;;;;;;;;;;;;;;;Asterism of 10-15 Galactic stars (or a Galactic open cluster?); +IC1379;G;21:26:01.26;+03:05:50.6;Peg;0.59;0.47;132;15.70;;12.28;11.37;11.41;23.33;;;;;;;;;2MASX J21260126+0305513,PGC 066741;;; +IC1380;G;21:27:11.01;+02:43:03.6;Peg;0.68;0.58;145;15.50;;12.20;11.47;11.32;23.60;;;;;;;;;2MASX J21271100+0243033,PGC 066779;;; +IC1381;G;21:27:33.70;-01:11:19.0;Aqr;0.90;0.59;69;15.60;;12.31;11.53;11.31;23.68;Sab;;;;;;;;2MASX J21273371-0111188,MCG +00-54-016,PGC 066789,SDSS J212733.69-011119.0,SDSS J212733.70-011119.0;;; +IC1382;Dup;21:22:07.56;+18:39:56.4;Peg;;;;;;;;;;;;;;;7056;;;;;; +IC1383;G;21:27:39.64;-01:06:07.8;Aqr;0.62;0.22;126;16.22;;12.87;12.06;11.61;23.06;Sb;;;;;;;;2MASX J21273960-0106078,IRAS 21250-0119,PGC 066792,SDSS J212739.64-010607.8;;; +IC1384;G;21:27:53.07;-01:22:06.8;Aqr;0.77;0.63;63;15.40;;12.89;12.05;11.68;23.49;;;;;;;;;2MASX J21275307-0122068,MCG +00-54-017,PGC 066796;;; +IC1385;G;21:28:51.19;-01:04:12.4;Aqr;0.59;0.53;141;19.06;18.25;12.60;11.85;11.58;22.99;SABb;;;;;;;;2MASX J21285116-0104121,MCG +00-54-022,PGC 066832,SDSS J212851.12-010412.4,SDSS J212851.19-010412.4,SDSS J212851.20-010412.4;;; +IC1386;G;21:29:37.43;-21:11:44.5;Cap;0.97;0.77;131;13.78;;10.69;10.06;9.74;22.92;E-S0;;;;;;;;2MASX J21293744-2111443,ESO 599-016,ESO-LV 599-0160,MCG -04-50-030,PGC 066852;;; +IC1387;G;21:29:34.47;-01:21:03.3;Aqr;0.48;0.46;15;15.00;;12.52;12.12;11.76;22.35;;;;;;;;;2MASX J21293449-0121032,MCG +00-54-026,PGC 066851;;; +IC1388;G;21:29:52.18;-00:37:52.6;Aqr;0.82;0.41;137;15.00;;11.74;11.03;10.75;23.32;S0-a;;;;;;;;2MASX J21295220-0037522,MCG +00-54-027,PGC 066857,SDSS J212952.17-003752.5,SDSS J212952.18-003752.6;;; +IC1389;G;21:32:07.84;-18:01:06.1;Cap;0.81;0.49;119;15.46;;12.68;12.02;11.66;23.64;S0-a;;;;;;;;2MASX J21320783-1801060,ESO 599-018,ESO-LV 599-0180,MCG -03-55-001,PGC 066916;;; +IC1390;G;21:32:24.78;-01:51:45.1;Aqr;0.65;0.61;102;15.10;;12.92;12.23;11.91;22.95;;;;;;;;;2MASX J21322478-0151450,MCG +00-55-004,PGC 066922;;; +IC1391;G;21:35:00.40;-00:30:41.2;Aqr;0.64;0.49;84;15.70;;13.07;12.43;12.34;23.74;E;;;;;;;;2MASX J21350042-0030407,MCG +00-55-007,PGC 067002,SDSS J213500.38-003041.2,SDSS J213500.39-003041.1,SDSS J213500.39-003041.2,SDSS J213500.40-003041.2;;; +IC1392;G;21:35:32.69;+35:23:54.0;Cyg;1.53;1.22;73;13.00;;9.94;9.23;8.93;22.61;E-S0;;;;;;;;2MASX J21353268+3523541,MCG +06-47-003,PGC 067017,UGC 11772;;; +IC1393;G;21:40:14.25;-22:24:41.0;Cap;0.74;0.48;175;15.95;;11.71;11.07;10.76;23.60;S0;;;;;;;;2MASX J21401427-2224408,ESO 531-020,MCG -04-51-009,PGC 067147;;; +IC1394;G;21:40:13.03;+14:37:58.9;Peg;1.23;1.15;37;15.30;;11.21;10.51;10.28;24.12;E;;;;;;;;2MASX J21401304+1437585,MCG +02-55-006,PGC 067145;;; +IC1395;G;21:41:41.41;+04:06:16.3;Peg;0.74;0.68;85;15.50;;11.65;11.19;10.62;23.65;E;;;;;;;;2MASX J21414138+0406167,PGC 067183;;; +IC1396;Cl+N;21:38:57.62;+57:29:20.6;Cep;14.00;4.00;;;;;;;;;;;;;;;;BD +56 2617,HD 206267,HIP 106886,LBN 451,LBN 452,MWSC 3539;;; +IC1397;G;21:44:02.31;-04:53:05.3;Aqr;0.85;0.52;172;15.28;;11.81;11.18;10.93;23.55;S0-a;;;;;;;;2MASX J21440227-0453055,LEDA 170372;;; +IC1398;G;21:45:51.43;+09:28:31.2;Peg;0.76;0.43;70;15.40;;12.25;11.61;11.32;23.04;Sc;;;;;;;;2MASX J21455142+0928310,MCG +01-55-009,PGC 067306;;; +IC1399;G;21:46:08.91;+04:24:08.0;Peg;0.68;0.46;162;15.60;;12.22;11.53;11.37;23.55;;;;;;;;;2MASX J21460892+0424085,PGC 067316;;; +IC1400;*Ass;21:44:16.28;+52:58:01.3;Cyg;;;;;;;;;;;;;;;;;;;;"Perhaps not a cluster; just a random clumping of 20-30 Milky Way stars?"; +IC1401;G;21:46:59.49;+01:42:45.9;Aqr;1.68;0.56;180;14.70;;11.81;11.15;10.82;23.44;SABb;;;;;;;;2MASX J21465950+0142457,IRAS 21444+0128,MCG +00-55-015,PGC 067339,UGC 11810;;; +IC1402;*Ass;21:44:58.97;+53:15:45.0;Cyg;;;;;;;;;;;;;;;;;;;;"Perhaps not a cluster; just a random clumping of 20-30 Milky Way stars?"; +IC1403;G;21:50:29.08;-02:42:58.2;Aqr;0.49;0.35;153;16.22;;14.22;13.41;13.14;23.61;;;;;;;;;2MASX J21502909-0242580,LEDA 1084587;;; +IC1404;G;21:50:56.38;-09:15:59.7;Cap;0.97;0.81;47;14.15;;11.13;10.37;10.11;23.41;E;;;;;;;;2MASX J21505637-0915594,LEDA 170377;;; +IC1405;G;21:50:49.84;+02:01:14.9;Aqr;0.87;0.63;117;15.00;;11.81;11.01;10.80;23.37;Sab;;;;;;;;2MASX J21504984+0201144,MCG +00-55-020,PGC 067470,UGC 11826;;; +IC1406;G;21:51:04.87;+01:59:13.4;Aqr;0.62;0.47;65;15.50;;12.11;11.48;10.86;23.44;E;;;;;;;;2MASX J21510485+0159134,PGC 067478;;; +IC1407;G;21:52:23.44;+03:25:37.8;Peg;0.76;0.56;84;15.10;;11.86;11.33;10.98;23.26;E-S0;;;;;;;;2MASX J21522342+0325375,PGC 067538;;Not to be associated with NGC 7148 which is a double star.; +IC1408;G;21:53:09.02;-13:20:48.4;Cap;1.00;0.52;33;14.92;;11.30;10.60;10.31;23.59;S0;;;;;;;;2MASX J21530900-1320481,MCG -02-55-007,PGC 067574;;;B-Mag taken from LEDA. +IC1409;G;21:53:19.60;-07:29:59.5;Aqr;0.69;0.43;28;15.62;;;;;23.30;Sab;;;;;;;;2MASX J21531960-0729596,PGC 1017940,SDSS J215319.59-072959.4,SDSS J215319.60-072959.4,SDSS J215319.61-072959.5;;;B-Mag taken from LEDA. +IC1410;G;21:56:02.14;-02:54:01.0;Aqr;0.83;0.54;132;15.06;;11.69;10.90;10.66;23.96;E;;;;;;;;2MASX J21560217-0254006,LEDA 1080332;;; +IC1411;G;21:56:00.59;-01:31:01.4;Aqr;0.87;0.56;36;14.50;;10.79;10.06;9.78;23.06;E;;;;;;;;2MASX J21560065-0131006,MCG +00-56-001,PGC 067660,UGC 11850;;The APM image includes a neighboring star and three faint galaxies.; +IC1412;G;21:58:18.46;-17:10:34.2;Aqr;1.27;0.71;102;14.40;;12.13;11.52;11.20;23.77;S0-a;;;;;;;;2MASX J21581847-1710341,IRAS 21555-1724,MCG -03-56-001,PGC 067747;;; +IC1413;G;21:58:26.61;-03:06:08.7;Aqr;0.93;0.26;74;15.43;;11.79;11.01;10.58;23.29;Sc;;;;;;;;2MASX J21582660-0306084,LEDA 1076468;;; +IC1414;G;21:58:18.05;+08:25:25.7;Peg;0.47;0.40;5;14.90;;11.76;10.97;10.73;;E;;;;;;;;2MASX J21581802+0825264,PGC 067762;;; +IC1415;Other;21:58:42.64;+01:21:01.3;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1416;Other;21:58:49.48;+01:27:05.6;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1417;G;22:00:21.61;-13:08:50.5;Aqr;1.65;0.54;110;14.36;;11.27;10.52;10.28;23.48;Sb;;;;;;;;2MASX J22002162-1308504,IRAS 21576-1323,MCG -02-56-003,PGC 067811;;;B-Mag taken from LEDA. +IC1418;G;22:01:59.92;+04:23:03.6;Peg;0.86;0.86;160;15.30;;12.49;11.88;11.65;23.66;Sbc;;;;;;;;2MASX J22015989+0423041,MCG +01-56-009,PGC 067872;;; +IC1419;G;22:02:58.84;-09:55:15.5;Aqr;0.54;0.30;164;16.14;;12.74;12.04;11.76;23.55;S0-a;;;;;;;;2MASX J22025883-0955152,LEDA 984740;;; +IC1420;GPair;22:02:31.97;+19:45:00.4;Peg;1.30;;;;;;;;;;;;;;;;;MCG +03-56-005,UGC 11880;;Colliding pair, not noted as double in CGCG, MCG, or UGC.;Diameter of the group inferred by the author. +IC1420 NED01;G;22:02:31.30;+19:45:01.3;Peg;1.32;1.07;0;14.50;;;;;23.51;Scd;;;;;;;;MCG +03-56-005 NED01,PGC 067900,UGC 11880 NED01;;; +IC1420 NED02;G;22:02:32.28;+19:45:00.4;Peg;0.86;0.60;90;15.53;;13.33;12.65;12.09;23.63;Sd;;;;;;;;2MASX J22023229+1945002,MCG +03-56-005 NED02,PGC 093140,UGC 11880 NED02;;;B-Mag taken from LEDA. +IC1421;G;22:03:04.03;-09:58:41.4;Aqr;0.63;0.57;5;15.45;;12.10;11.32;10.98;23.47;E;;;;;;;;2MASX J22030405-0958411,MCG -02-56-009,PGC 067924;;;B-Mag taken from LEDA. +IC1422;G;22:03:00.06;+02:35:56.0;Peg;0.46;0.30;142;15.70;;13.08;12.30;12.16;23.03;;;;;;;;;2MASX J22030006+0235563,PGC 067922;;; +IC1423;G;22:03:12.69;+04:17:51.3;Peg;0.92;0.44;40;14.80;;12.42;11.45;11.32;22.80;Sb;;;;;;;;2MASX J22031268+0417513,MCG +01-56-010,PGC 067931,UGC 11883;;; +IC1424;*;22:03:09.39;+11:11:49.7;Peg;;;;;;;;;;;;;;;;;;;;; +IC1425;G;22:03:24.51;+02:35:41.7;Peg;0.79;0.62;98;15.00;;11.46;10.81;10.39;23.48;E;;;;;;;;2MASX J22032452+0235411,PGC 067939;;; +IC1426;**;22:03:51.28;-09:55:09.5;Aqr;;;;;;;;;;;;;;;;;;;;Identification as IC 1426 is very uncertain.; +IC1427;G;22:03:35.16;+15:06:24.4;Peg;1.14;0.83;103;15.20;;11.04;10.38;10.19;24.32;E;;;;;;;;2MASX J22033515+1506244,MCG +02-56-010,PGC 067948,SDSS J220335.16+150624.3,UGC 11889;;; +IC1428;G;22:04:27.67;+02:37:51.1;Peg;0.71;0.37;61;15.60;;12.82;12.25;11.96;23.63;;;;;;;;;2MASX J22042767+0237510,PGC 067979;;; +IC1429;*;22:07:02.45;+10:06:33.2;Peg;;;;;;;;;;;;;;;;;;;;; +IC1430;G;22:07:29.82;-13:34:52.3;Aqr;0.56;0.47;55;16.21;;12.70;11.92;12.04;23.34;;;;;;;;;2MASX J22072978-1334523,LEDA 936014;;; +IC1431;G;22:07:39.60;-13:30:48.2;Aqr;0.75;0.70;20;15.27;;12.61;11.99;11.75;23.29;Sa;;;;;;;;2MASX J22073959-1330482,MCG -02-56-015,PGC 068087;;;B-Mag taken from LEDA. +IC1432;G;22:10:03.97;+03:41:22.5;Peg;0.44;0.28;30;16.75;;12.30;11.54;11.16;;S0;;;;;;;;2MASX J22100394+0341219,PGC 3092375;;;B-Mag taken from LEDA. +IC1433;GTrpl;22:12:10.20;-12:45:55.0;Aqr;1.00;;;;;;;;;;;;;;;;;MCG -02-56-021;;;Diameter of the group inferred by the author. +IC1433 NED01;G;22:12:10.64;-12:45:56.1;Aqr;0.83;0.41;99;15.64;;12.20;11.54;11.21;23.92;S0-a;;;;;;;;2MASX J22121067-1245559,MCG -02-56-021 NED01,PGC 068267;;;B-Mag taken from LEDA. +IC1433 NED02;G;22:12:09.85;-12:45:56.2;Aqr;;;;;;;;;;;;;;;;;;MCG -02-56-021 NED02;;;No data available in LEDA +IC1433 NED03;G;22:12:09.22;-12:45:47.3;Aqr;0.21;0.19;111;17.74;;;;;23.13;;;;;;;;;2MASX J22120923-1245469,MCG -02-56-021 NED03,PGC 947946;;;B-Mag taken from LEDA. +IC1434;OCl;22:10:42.16;+52:51:00.3;Lac;4.80;;;;;;;;;;;;;;;;;MWSC 3592;;; +IC1435;G;22:13:26.29;-22:05:48.1;Aqr;1.07;0.65;9;13.88;;11.27;10.50;10.25;22.42;Sb;;;;;;;;2MASX J22132630-2205481,ESO 601-030,ESO-LV 601-0300,IRAS 22106-2220,MCG -04-52-025,PGC 068320;;; +IC1436;G;22:13:51.44;-10:11:30.4;Aqr;0.56;0.42;57;16.06;;12.54;11.90;11.78;23.43;E-S0;;;;;;;;2MASX J22135146-1011297,MCG -02-56-024,PGC 068337;;;B-Mag taken from LEDA. +IC1437;G;22:15:44.99;+02:03:57.4;Aqr;1.08;0.94;52;14.90;;11.00;10.29;10.07;23.60;S0-a;;;;;;;;2MASX J22154497+0203574,MCG +00-56-016,PGC 068438,UGC 11965;;; +IC1438;G;22:16:29.09;-21:25:50.5;Aqr;2.33;2.16;119;12.63;;10.23;9.54;9.30;23.28;Sa;;;;;;;;2MASX J22162910-2125506,ESO 602-001,ESO-LV 602-0010,IRAS 22137-2140,MCG -04-52-029,PGC 068469;;; +IC1439;G;22:16:40.14;-21:29:09.4;Aqr;1.25;0.65;28;14.68;;12.02;11.29;10.74;23.70;SBa;;;;;;;;2MASX J22164013-2129096,ESO 602-002,ESO-LV 602-0020,MCG -04-52-030,PGC 068476;;; +IC1440;G;22:16:33.22;-16:00:59.2;Aqr;1.67;0.48;76;14.91;;11.51;10.85;10.58;23.71;Sc;;;;;;;;2MASX J22163319-1600593,MCG -03-56-013,PGC 068470;;;B-Mag taken from LEDA. +IC1441;G;22:15:19.14;+37:18:05.4;Lac;1.07;0.58;38;15.30;;11.97;11.19;10.90;23.90;SBb;;;;;;;;2MASX J22151913+3718054,IRAS 22131+3703,MCG +06-48-023,PGC 068413;;; +IC1442;OCl;22:16:01.33;+53:59:28.8;Lac;4.20;;;9.53;9.10;;;;;;;;;;;;;MWSC 3606;;; +IC1443;G;22:19:03.66;-20:56:23.7;Aqr;1.55;1.21;42;13.48;;10.42;9.79;9.54;23.32;E;;;;;;;;2MASX J22190364-2056236,ESO 602-005,ESO-LV 602-0050,MCG -04-52-033,PGC 068558;;; +IC1444;G;22:22:23.92;+05:08:21.0;Peg;0.58;0.37;5;15.40;;11.86;11.29;10.94;23.45;E;;;;;;;;2MASX J22222390+0508206,PGC 068665;;; +IC1445;G;22:25:30.33;-17:14:35.9;Aqr;1.41;1.15;87;13.65;;10.66;10.02;9.76;23.07;E-S0;;;;;;;;2MASX J22253032-1714361,ESO 602-019,ESO-LV 602-0190,MCG -03-57-007,PGC 068826;;; +IC1446;G;22:29:04.70;-01:11:05.7;Aqr;0.78;0.49;29;15.70;;11.85;11.27;11.01;23.73;E-S0;;;;;;;;2MASX J22290466-0111060,LEDA 192446,SDSS J222904.69-011105.6,SDSS J222904.69-011105.7,SDSS J222904.70-011105.6,SDSS J222904.70-011105.7;;; +IC1447;G;22:29:59.80;-05:07:11.6;Aqr;1.48;0.77;95;13.71;;11.05;10.39;10.25;22.82;Sb;;;;;;;;2MASX J22295979-0507117,IRAS 22273-0522,MCG -01-57-014,PGC 068996;;;B-Mag taken from LEDA. +IC1448;Dup;22:34:32.14;-12:56:01.9;Aqr;;;;;;;;;;;;;;;7308;;;;;; +IC1449;G;22:35:07.00;-08:45:55.2;Aqr;0.57;0.34;48;15.22;;13.25;12.61;12.36;23.05;;;;;;;;;2MASX J22350698-0845550,LEDA 192966,SDSS J223506.99-084555.2,SDSS J223507.00-084555.2;;; +IC1450;**;22:37:57.93;+34:32:07.8;Peg;;;;;;;;;;;;;;;;;;;;; +IC1451;G;22:46:07.46;-10:22:09.9;Aqr;0.91;0.87;46;15.00;;12.67;11.92;11.44;23.54;Sc;;;;;;;;2MASX J22460744-1022098,MCG -02-58-002,PGC 069684,SDSS J224607.46-102209.9;;;B-Mag taken from LEDA. +IC1452;Dup;22:45:59.19;+10:52:03.0;Peg;;;;;;;;;;;;;;;7374B;;;;;; +IC1453;G;22:46:54.23;-13:26:58.6;Aqr;0.84;0.71;158;15.10;;12.05;11.34;10.95;23.26;SABb;;;;;;;;2MASX J22465423-1326588,MCG -02-58-004,PGC 069701;;;B-Mag taken from LEDA. +IC1454;PN;22:42:25.01;+80:26:32.0;Cep;0.47;;;14.80;14.00;;;;;;;18.80;;;;;;IRAS 22419+8010,PK 117+18 1,PN G117.5+18.9;;; +IC1455;G;22:53:46.06;+01:22:19.1;Psc;1.00;0.56;40;14.90;;11.10;10.46;10.19;23.17;SBa;;;;;;;;2MASX J22534603+0122191,MCG +00-58-011,PGC 069943,UGC 12232;;; +IC1456;G;22:55:18.19;-12:43:55.2;Aqr;0.95;0.21;125;15.91;;12.39;11.54;11.37;24.46;;;;;;;;;2MASX J22551819-1243551,LEDA 948407;;; +IC1457;Other;22:55:23.76;-05:33:45.9;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1458;Dup;22:56:41.38;-07:22:44.6;Aqr;;;;;;;;;;;;;;;7441;;;;;; +IC1459;G;22:57:10.61;-36:27:44.0;Gru;4.61;3.23;43;10.96;11.85;7.69;7.07;6.81;23.12;E;;;;;;5265;;2MASX J22571068-3627449,ESO 406-030,ESO-LV 406-0300,IRAS 22544-3643,MCG -06-50-016,PGC 070090;;Confused HIPASS source; +IC1460;G;22:57:04.08;+04:40:37.3;Psc;0.61;0.48;158;15.50;;12.06;11.54;11.09;22.81;E;;;;;;;;2MASX J22570408+0440367,IRAS 22545+0424,MCG +01-58-015,PGC 070086;;; +IC1461;G;22:58:34.30;+15:10:22.0;Peg;0.60;0.55;12;15.41;;12.30;11.62;11.25;22.57;Sc;;;;;;;;2MASX J22583427+1510223,IRAS 22560+1454,PGC 070153,SDSS J225834.29+151021.9,SDSS J225834.30+151022.0;;; +IC1462;*;22:58:37.15;+08:26:28.7;Peg;;;;;;;;;;;;;;;;;;;;; +IC1463;**;22:59:20.93;-10:31:51.1;Aqr;;;;;;;;;;;;;;;;;;;;; +IC1464;GPair;23:03:11.60;-08:59:27.0;Aqr;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1464A;G;23:03:12.08;-08:59:34.7;Aqr;0.26;0.15;81;15.32;;;;;21.52;;;;;;;;;MCG -02-58-020,PGC 070345,SDSS J230312.08-085934.6,SDSS J230312.08-085934.7,SDSS J230312.09-085934.6;;;B-Mag taken from LEDA. +IC1464B;G;23:03:11.04;-08:59:21.0;Aqr;0.68;0.45;135;14.97;;11.28;9.95;10.02;22.89;;;;;;;;;2MASX J23031100-0859205,MCG -02-58-021,PGC 070344,SDSS J230311.04-085920.9;;;B-Mag taken from LEDA. +IC1465;Other;23:02:53.20;+16:34:56.9;Peg;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC1466;G;23:03:39.05;-02:46:31.6;Psc;0.60;0.50;124;14.30;;11.58;10.80;10.52;22.30;Sm;;;;;;;;2MASX J23033905-0246313,PGC 135879;;; +IC1467;G;23:04:49.71;-03:13:47.8;Psc;0.79;0.38;3;14.75;;11.88;11.21;10.91;22.53;Sc;;;;;;;;2MASX J23044969-0313478,IRAS 23022-0329,MCG -01-58-017,PGC 070413;;;B-Mag taken from LEDA. +IC1468;G;23:05:07.57;-03:12:16.2;Psc;1.06;0.49;171;15.50;;11.74;11.03;10.83;24.04;S0-a;;;;;;;;2MASX J23050758-0312164,MCG -01-58-019,PGC 070429,SDSS J230507.56-031215.9;;; +IC1469;G;23:06:28.67;-13:32:11.7;Aqr;0.45;0.36;105;;;12.32;11.46;11.26;;;;;;;;;;2MASX J23062866-1332118,PGC 164479;;; +IC1470;HII;23:05:10.21;+60:14:38.7;Cep;1.80;1.80;90;11.50;;;;;;;;;;;;;;2MASX J23050983+6014560;;;Diameters taken from SIMBAD. +IC1471;G;23:08:44.85;-12:38:22.0;Aqr;1.07;0.65;169;14.63;;11.40;10.68;10.33;23.18;Sa;;;;;;;;2MASX J23084486-1238219,MCG -02-59-003,PGC 070561;;;B-Mag taken from LEDA. +IC1472;G;23:09:06.68;+17:15:32.9;Peg;1.01;0.60;60;15.50;;11.48;10.82;10.56;23.93;S0-a;;;;;;;;2MASX J23090669+1715331,MCG +03-59-004,PGC 070573;;; +IC1473;G;23:11:05.41;+29:38:36.4;Peg;1.74;0.85;176;14.20;;;;;24.04;S0;;;;;;;;IRAS 23086+2922,MCG +05-54-043,PGC 070633,UGC 12404;;The 2MASS position is 5 arcsec northwest of the nucleus.; +IC1474;G;23:12:51.27;+05:48:22.9;Psc;1.04;0.48;149;14.90;;11.57;10.89;10.59;22.92;Sc;;;;;;;;2MASX J23125126+0548229,IRAS 23103+0532,MCG +01-59-011,PGC 070702,UGC 12417;;; +IC1475;Other;23:14:02.22;-28:25:20.8;Scl;;;;;;;;;;;;;;;;;;;;"Nominal position for IC 1475; nothing here."; +IC1476;G;23:14:16.35;+30:33:05.3;Peg;0.91;0.91;165;15.60;;11.60;10.81;10.64;24.07;S0-a;;;;;;;;2MASX J23141631+3033053,MCG +05-54-051,PGC 070764;;UGC incorrectly identifies MCG +05-54-051 as UGC 12444.; +IC1477;Dup;23:17:12.00;-06:54:43.2;Aqr;;;;;;;;;;;;;;;7596;;;;;; +IC1478;Dup;23:18:13.92;+10:17:53.9;Peg;;;;;;;;;;;;;;;7594;;;;;; +IC1479;G;23:18:46.41;-10:23:57.3;Aqr;1.16;0.96;25;14.60;;11.23;10.53;10.18;23.67;E-S0;;;;;;;;2MASX J23184637-1023575,MCG -02-59-010,PGC 071021,SDSS J231846.41-102357.2,SDSS J231846.41-102357.3;;;B-Mag taken from LEDA. +IC1480;Dup;23:18:59.24;+11:20:30.2;Peg;;;;;;;;;;;;;;;7607;;;;;; +IC1481;G;23:19:25.12;+05:54:22.2;Psc;0.73;0.65;45;14.50;;11.57;10.96;10.62;22.43;Sd;;;;;;;;2MASX J23192510+0554223,IRAS 23168+0537,PGC 071070,SDSS J231925.09+055421.6,UGC 12505;;; +IC1482;G;23:20:49.52;+01:44:20.5;Psc;0.81;0.63;135;15.30;;11.79;10.99;10.78;23.56;E;;;;;;;;2MASX J23204954+0144202,MCG +00-59-029,PGC 071142;;; +IC1483;Dup;23:22:33.12;+11:19:43.7;Peg;;;;;;;;;;;;;;;7638;;;;;; +IC1484;G;23:22:39.94;+11:23:04.1;Peg;0.62;0.32;49;15.50;;12.85;12.19;11.87;24.81;;;;;;;;;2MASX J23223991+1123035,LEDA 1392792,MCG +02-59-032;;; +IC1485;Dup;23:22:48.23;+11:22:22.3;Peg;;;;;;;;;;;;;;;7639;;;;;; +IC1486;Dup;23:23:54.02;+09:40:02.9;Peg;;;;;;;;;;;;;;;7648;;;;;; +IC1487;Dup;23:24:20.09;+14:38:49.7;Peg;;;;;;;;;;;;;;;7649;;;;;; +IC1488;G;23:25:38.55;+15:21:15.9;Peg;1.08;0.24;172;15.73;;12.17;11.42;11.02;24.09;Sa;;;;;;;;2MASX J23253854+1521163,LEDA 2800840,SDSS J232538.54+152115.8,SDSS J232538.54+152115.9,SDSS J232538.55+152115.9;;;B-Mag taken from LEDA. +IC1489;G;23:26:32.13;-12:30:59.4;Aqr;0.54;0.52;25;15.11;;12.99;12.13;11.66;22.51;;;;;;;;;2MASX J23263213-1230597,IRAS 23239-1247,MCG -02-59-016,PGC 071443;;;B-Mag taken from LEDA. +IC1490;G;23:59:10.72;-04:07:37.2;Psc;1.45;0.84;83;17.80;;10.92;10.16;9.88;23.02;SABb;;;;;;1524;;2MASX J23591071-0407375,IRAS 23566-0424,MCG -01-01-011,PGC 073151;;; +IC1491;G;23:29:24.69;-16:18:59.8;Aqr;0.77;0.42;150;15.03;;13.00;12.30;12.11;22.73;Sbc;;;;;;;;2MASX J23292469-1618598,MCG -03-59-010,PGC 071580;;;B-Mag taken from LEDA. +IC1492;G;23:30:36.10;-03:02:23.7;Psc;1.47;1.11;32;14.37;;10.65;10.00;9.66;23.88;S0-a;;;;;;;;2MASX J23303610-0302237,MCG -01-59-028,PGC 071629;;;B-Mag taken from LEDA. +IC1493;G;23:30:27.51;+14:27:31.9;Peg;0.52;0.29;135;16.55;;;;;23.88;;;;;;;;;2MASX J23302745+1427323,PGC 1458643,SDSS J233027.51+142731.9;;;B-Mag taken from LEDA. +IC1494;G;23:30:46.14;-12:43:28.3;Aqr;0.73;0.34;125;15.83;;12.50;11.84;11.56;23.80;S0-a;;;;;;;;2MASX J23304614-1243284,LEDA 948530;;; +IC1495;G;23:30:47.74;-13:29:07.6;Aqr;1.33;0.83;25;14.14;;11.42;10.76;10.41;23.16;Sb;;;;;;5327;;2MASX J23304773-1329076,IRAS 23281-1345,MCG -02-59-024,PGC 071631;;;B-Mag taken from LEDA. +IC1496;G;23:30:53.51;-02:56:03.5;Psc;1.65;1.22;65;14.41;;10.94;10.25;9.96;24.03;S0-a;;;;;;;;2MASX J23305352-0256037,MCG -01-59-029,PGC 071634,SDSS J233053.51-025603.3;;;B-Mag taken from LEDA. +IC1497;Other;23:28:50.09;+11:59:13.2;Peg;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1498;G;23:31:53.65;-05:00:25.1;Aqr;2.24;0.57;3;14.03;;10.76;10.01;9.75;23.78;SBa;;;;;;;;2MASX J23315364-0500252,MCG -01-60-002,PGC 071677;;;B-Mag taken from LEDA. +IC1499;**;23:31:57.03;-13:26:22.9;Aqr;;;;;;;;;;;;;;;;;;;;The IC identification is not certain.; +IC1500;G;23:33:09.36;+04:33:09.1;Psc;0.47;0.38;20;15.40;;11.93;11.16;10.95;;S0-a;;;;;;;;2MASX J23330934+0433091,PGC 071727;;; +IC1501;G;23:34:40.06;-03:09:10.2;Psc;1.48;0.67;133;14.50;;12.01;11.46;11.16;23.49;SABb;;;;;;;;2MASX J23344004-0309102,IRAS 23320-0325,MCG -01-60-009,PGC 071786,SDSS J233440.06-030910.3;;; +IC1502;G;23:36:20.52;+75:38:53.3;Cep;1.01;0.58;51;14.70;;9.97;9.15;8.87;23.37;S0-a;;;;;;;;2MASX J23362072+7538534,MCG +12-01-001,MCG +13-01-002,PGC 071864,UGC 12105,UGC 12706;;UGC RA (22h 34.1m) for UGC 12105 is 1 hour too small.; +IC1503;G;23:38:27.11;+04:48:05.1;Psc;0.90;0.43;71;14.26;;;;;22.13;Sd;;;;;;;;2MASX J23382645+0447580,2MASX J23382698+0448050,IRAS 23359+0431,MCG +01-60-016,PGC 071982,UGC 12715;;Contains the probable HII region UM 001.;B-Mag taken from LEDA. +IC1504;G;23:41:19.49;+04:01:02.9;Psc;1.64;0.49;92;14.50;;11.02;10.29;9.94;23.39;Sb;;;;;;;;2MASX J23411948+0401028,IRAS 23387+0344,MCG +01-60-020,PGC 072117,SDSS J234119.48+040103.1,UGC 12734;;; +IC1505;G;23:41:37.11;-03:33:54.3;Aqr;0.60;0.60;150;14.67;;11.12;10.34;10.16;22.45;E;;;;;;;;2MASX J23413712-0333536,MCG -01-60-020,PGC 072133;;;B-Mag taken from LEDA. +IC1506;G;23:44:48.41;+04:44:08.4;Psc;0.91;0.56;135;15.40;;11.98;11.31;11.02;24.04;S0;;;;;;;;2MASX J23444842+0444079,MCG +01-60-029,PGC 072291;;; +IC1507;G;23:45:33.17;+01:41:19.5;Psc;1.29;0.47;130;14.80;;11.53;10.80;10.61;23.99;S0-a;;;;;;;;2MASX J23453318+0141193,MCG +00-60-044,PGC 072330,UGC 12770;;; +IC1508;G;23:45:55.07;+12:03:42.3;Peg;0.76;0.37;169;14.60;;11.24;10.56;10.26;21.49;Scd;;;;;;;;2MASX J23455505+1203422,IRAS 23433+1147,MCG +02-60-016,PGC 072345,SDSS J234555.08+120342.5,UGC 12773;;; +IC1509;G;23:47:16.68;-15:18:23.1;Aqr;1.29;0.22;11;15.21;;12.18;11.39;11.25;23.11;Sc;;;;;;;;2MASX J23471669-1518230,MCG -03-60-014,PGC 072392;;;B-Mag taken from LEDA. +IC1510;GGroup;23:50:32.80;+02:04:24.0;Psc;1.00;;;;;;;;;;;;;;;;;MCG +00-60-053;;;Diameter of the group inferred by the author. +IC1510 NED01;G;23:50:32.50;+02:04:29.0;Psc;0.51;0.35;139;16.96;;;;;24.25;;;;;;;;;MCG +00-60-053 NED01,PGC 1215207;;;B-Mag taken from LEDA. +IC1510 NED02;G;23:50:33.04;+02:04:20.5;Psc;0.68;0.49;16;15.20;;12.34;11.62;11.18;23.23;;;;;;;;;2MASX J23503305+0204205,MCG +00-60-053 NED02,PGC 072589;;; +IC1511;*;23:51:00.45;+27:03:39.1;Peg;;;;;;;;;;;;;;;;;;;;; +IC1512;*;23:51:01.43;+27:01:37.7;Peg;;;;;;;;;;;;;;;;;;;;; +IC1513;G;23:53:29.38;+11:19:03.4;Peg;1.10;0.40;106;15.10;;11.96;11.23;11.04;23.45;Sab;;;;;;;;2MASX J23532941+1119032,MCG +02-60-024,PGC 072773,UGC 12832;;; +IC1514;Dup;23:54:16.56;-13:35:11.2;Aqr;;;;;;;;;;;;;;;7776;;;;;; +IC1515;G;23:56:03.91;-00:59:18.7;Psc;1.31;1.08;4;14.80;;11.41;10.74;10.43;23.58;Sb;;;;;;;;2MASX J23560391-0059182,MCG +00-01-004,PGC 072922,SDSS J235603.90-005918.6,UGC 12848;;; +IC1516;G;23:56:07.09;-00:54:59.5;Psc;1.19;1.00;3;13.60;;11.16;10.51;10.18;23.11;Sbc;;;;;;;;2MASX J23560711-0054592,IRAS 23535-0111,MCG +00-01-006,PGC 072927,SDSS J235607.08-005459.4,SDSS J235607.09-005459.4,SDSS J235607.09-005459.5,UGC 12852;;; +IC1517;G;23:56:18.81;-00:18:20.2;Psc;1.01;0.75;172;14.80;;11.19;10.44;10.26;23.36;S0;;;;;;;;2MASX J23561882-0018205,MCG +00-01-008,PGC 072942,SDSS J235618.80-001820.1,SDSS J235618.81-001820.1,SDSS J235618.81-001820.2;;; +IC1518;G;23:57:06.12;+12:27:53.9;Peg;0.50;0.37;88;15.70;;12.55;11.73;11.60;23.21;S0;;;;;;;;2MASX J23570613+1227543,PGC 073011;;; +IC1519;G;23:57:08.37;+12:27:27.2;Peg;0.63;0.50;140;15.70;;12.34;11.68;11.40;23.68;E-S0;;;;;;;;2MASX J23570838+1227273,PGC 073010;;; +IC1520;G;23:57:54.46;-14:02:21.6;Cet;0.55;0.55;20;14.69;;12.46;11.89;11.47;22.12;Sc;;;;;;;;2MASX J23575445-1402216,IRAS 23553-1418,MCG -02-01-007,PGC 073057;;;B-Mag taken from LEDA. +IC1521;G;23:58:59.66;-07:08:48.4;Cet;0.92;0.55;108;15.17;;12.37;11.71;11.41;23.56;S0;;;;;;;;2MASX J23585964-0708484,LEDA 170418;;; +IC1522;G;23:59:03.45;+01:43:11.6;Psc;0.76;0.29;13;15.30;;12.03;11.34;11.04;23.26;Sb;;;;;;;;2MASX J23590344+0143115,MCG +00-01-012,PGC 073139;;; +IC1523;G;23:59:06.60;+06:52:23.0;Psc;0.36;0.26;15;16.28;;12.57;11.84;11.55;;;;;;;;5368;;2MASX J23590655+0652231,PGC 3091908;;;B-Mag taken from LEDA. +IC1524;Dup;23:59:10.72;-04:07:37.2;Psc;;;;;;;;;;;;;;;;1490;;;;; +IC1525;G;23:59:15.75;+46:53:22.8;And;1.79;1.24;26;13.30;;10.36;9.63;9.35;23.02;Sb;;;;;;;;2MASX J23591579+4653213,IRAS 23567+4636,MCG +08-01-016,PGC 073150,UGC 12883;;; +IC1526;G;00:01:31.52;+11:20:45.2;Peg;0.74;0.51;136;15.10;;12.10;11.46;11.17;22.85;Sc;;;;;;;;2MASX J00013148+1120465,IRAS 23589+1104,PGC 000117;;; +IC1527;G;00:02:21.60;+04:05:23.1;Psc;0.91;0.65;132;14.50;;11.88;11.28;10.95;23.80;Sa;;;;;;;;2MASX J00022165+0405230,MCG +01-01-012,PGC 000164;;; +IC1528;G;00:05:05.37;-07:05:36.3;Cet;2.15;0.85;73;13.50;;11.15;10.53;10.16;23.32;SBb;;;;;;;;2MASX J00050536-0705363,IRAS 00025-0722,MCG -01-01-028,PGC 000312;;MCG RA is -0.5 minutes in error.; +IC1529;G;00:05:13.17;-11:30:10.1;Cet;1.15;0.94;22;14.00;;11.09;10.54;10.14;23.54;S0;;;;;;;;2MASX J00051322-1130093,MCG -02-01-019,PGC 000364;;; +IC1530;Dup;00:07:19.53;+32:36:33.3;And;;;;;;;;;;;;;;;7831;;;;;; +IC1531;G;00:09:35.58;-32:16:37.2;Scl;1.89;1.31;124;13.48;;10.45;9.89;9.55;23.60;E-S0;;;;;;;;2MASX J00093552-3216365,ESO 349-035,ESO-LV 349-0350,MCG -05-01-038,PGC 000684;;; +IC1532;G;00:09:52.80;-64:22:19.5;Tuc;1.83;0.54;73;14.83;;;;;23.90;SBbc;;;;;;;;ESO 078-017,ESO-LV 78-0170,PGC 000695;;; +IC1533;Other;00:10:36.41;-07:24:54.5;Cet;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position. Is IC 1533 = MCG -01-01-044?"; +IC1534;G;00:13:45.44;+48:09:04.9;And;1.02;0.44;70;15.20;;11.71;10.97;10.69;23.85;S0;;;;;;;;2MASX J00134544+4809044,MCG +08-01-028,PGC 000910,UGC 00125;;; +IC1535;G;00:13:57.34;+48:09:28.7;And;0.99;0.29;170;15.20;;11.79;10.96;10.62;23.02;Sb;;;;;;;;2MASX J00135733+4809285,MCG +08-01-030,PGC 000922,UGC 00131;;; +IC1536;G;00:14:19.01;+48:08:35.8;And;0.81;0.53;172;15.50;;11.88;11.08;10.84;23.85;E;;;;;;;;2MASX J00141901+4808355,MCG +08-01-032,PGC 000949;;; +IC1537;Other;00:15:51.27;-39:15:43.5;Scl;1.32;0.59;80;16.04;;;;;;;;;;;;;;ESO 294-001,PGC 001050;;Eastern portion of NGC 0055.;Diameters taken from SIMBAD. +IC1538;Other;00:18:01.56;+30:01:45.4;And;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1539;Dup;00:18:22.54;+30:04:46.5;And;;;;;;;;;;;;;;;0070;;;;;; +IC1540;G;00:19:48.75;+23:46:21.4;And;0.97;0.41;28;14.90;;11.77;11.04;10.71;22.98;SBb;;;;;;;;2MASX J00194874+2346214,MCG +04-01-050,PGC 001276,UGC 00186;;; +IC1541;G;00:20:01.96;+21:59:59.1;And;0.72;0.28;36;15.50;;11.87;11.23;10.93;23.55;S0;;;;;;;;2MASX J00200193+2159588,PGC 001287;;; +IC1542;G;00:20:41.19;+22:35:32.8;And;0.53;0.43;70;15.00;;13.40;12.88;12.83;22.77;;;;;;;;;2MASX J00204118+2235327,IRAS 00181+2219,MCG +04-02-001,PGC 001328;;; +IC1543;G;00:20:55.45;+21:51:57.7;And;0.80;0.68;36;14.20;;11.75;11.13;10.90;22.52;Sbc;;;;;;;;2MASX J00205544+2151577,IRAS 00183+2135,MCG +04-02-002,PGC 001333,UGC 00198;;; +IC1544;G;00:21:17.50;+23:05:27.1;And;1.10;0.77;143;14.60;;12.02;11.58;11.25;23.45;SABc;;;;;;;;2MASX J00211748+2305271,MCG +04-02-006,PGC 001362,UGC 00204;;; +IC1545;G;00:21:20.91;+21:59:00.4;And;0.45;0.36;14;16.67;;13.08;12.34;12.09;23.49;;;;;;;;;2MASX J00212088+2159001,LEDA 1661236;;;B-Mag taken from LEDA. +IC1546;Dup;00:21:29.03;+22:30:21.1;And;;;;;;;;;;;;;;;0085B;;;;;; +IC1547;Other;00:21:35.69;+22:30:23.2;And;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1548;G;00:21:55.16;+22:00:22.7;And;0.68;0.42;78;15.60;;12.04;11.33;11.05;23.63;E;;;;;;;;2MASX J00215517+2200231,PGC 001407;;; +IC1549;G;00:22:49.83;+06:57:51.4;Psc;1.45;1.45;150;14.90;;11.55;10.79;10.57;24.52;S0-a;;;;;;;;2MASX J00224987+0657515,MCG +01-02-005,PGC 001464,SDSS J002249.85+065751.5,UGC 00218;;; +IC1550;G;00:24:27.65;+38:11:08.3;And;0.91;0.91;150;15.10;;11.25;10.58;10.36;23.59;S0;;;;;;;;2MASX J00242766+3811085,MCG +06-02-002,PGC 001533;;; +IC1551;G;00:27:35.49;+08:52:39.0;Psc;2.42;0.68;3;15.00;;12.08;11.41;11.06;24.53;SBc;;;;;;;;2MASX J00273551+0852392,IRAS 00250+0836,MCG +01-02-013,PGC 001700,UGC 00268;;; +IC1552;G;00:29:43.71;+21:28:36.6;Psc;0.94;0.27;126;15.40;;12.05;11.33;10.92;22.99;Sc;;;;;;;;2MASX J00294368+2128365,IRAS 00271+2111,MCG +03-02-015,PGC 001817,UGC 00297;;; +IC1553;G;00:32:40.12;-25:36:27.1;Scl;1.36;0.34;15;14.31;;11.84;11.06;10.69;22.66;Scd;;;;;;;;2MASX J00324011-2536271,ESO 473-026,ESO-LV 473-0260,IRAS 00301-2553,MCG -04-02-017,PGC 001977;;; +IC1554;G;00:33:07.35;-32:15:30.1;Scl;1.38;0.80;27;13.59;;11.04;10.39;10.14;23.20;S0-a;;;;;;;;2MASX J00330736-3215301,ESO 350-033,ESO-LV 350-0330,IRAS 00306-3232,MCG -05-02-015,PGC 002000;;; +IC1555;G;00:34:32.64;-30:01:04.3;Scl;1.31;0.74;129;14.39;;12.76;12.11;11.84;23.13;Scd;;;;;;;;ESO 410-021,ESO-LV 410-0210,MCG -05-02-019,PGC 002071;;; +IC1556;G;00:35:02.91;-09:22:06.3;Cet;0.84;0.34;40;15.21;;12.88;12.12;11.81;23.05;Sb;;;;;;;;2MASX J00350290-0922063,IRAS 00325-0938,MCG -02-02-057,PGC 002086,SDSS J003502.90-092206.2,SDSS J003502.91-092206.3;;;B-Mag taken from LEDA. +IC1557;G;00:35:34.52;-02:52:35.1;Cet;0.69;0.24;116;15.54;;12.32;11.68;11.28;23.45;S0-a;;;;;;;;2MASX J00353454-0252355,MCG -01-02-037,PGC 002130;;;B-Mag taken from LEDA. +IC1558;G;00:35:47.07;-25:22:27.9;Scl;2.80;1.52;143;13.21;12.22;;;;23.30;SABm;;;;;;;;ESO 474-002,ESO-LV 474-0020,MCG -04-02-024,PGC 002142,TYC 6421-1932-1,UGCA 008;;; +IC1559;Dup;00:36:52.33;+23:59:05.9;And;;;;;;;;;;;;;;;0169A;;;;;; +IC1560;Other;00:37:39.23;+02:40:17.6;Psc;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position. Is IC 1560 identical to NGC 0164?"; +IC1561;G;00:38:32.49;-24:20:23.8;Cet;1.41;0.51;103;14.92;;13.04;12.33;12.02;23.81;SBb;;;;;;;;2MASX J00383248-2420237,ESO 474-008,ESO-LV 474-0080,MCG -04-02-029,PGC 002305;;; +IC1562;G;00:38:33.96;-24:16:26.6;Cet;1.50;1.41;49;13.56;;11.22;10.64;10.27;23.18;SBc;;;;;;;;2MASX J00383395-2416267,ESO 474-009,ESO-LV 474-0090,IRAS 00360-2432,MCG -04-02-030,PGC 002308;;; +IC1563;Dup;00:39:00.24;-09:00:52.5;Cet;;;;;;;;;;;;;;;0191A;;;;;; +IC1564;G;00:39:05.13;+06:01:15.8;Psc;1.01;0.50;84;14.80;;12.49;11.67;11.44;23.07;SABb;;;;;;;;2MASX J00390512+0601159,MCG +01-02-044,PGC 002342,UGC 00399;;; +IC1565;G;00:39:26.27;+06:44:03.3;Psc;1.80;1.76;20;14.41;;10.92;10.33;9.93;24.65;E;;;;;;1567;;2MASX J00392632+0644028,MCG +01-02-047,PGC 002372,UGC 00410;;The identification as IC 1567 is not certain.; +IC1566;G;00:39:33.36;+06:48:54.5;Psc;0.91;0.74;125;15.40;;11.71;10.97;10.69;24.11;E;;;;;;;;2MASX J00393335+0648541,LEDA 073393,MCG +01-02-048;;; +IC1567;Dup;00:39:26.27;+06:44:03.3;Psc;;;;;;;;;;;;;;;;1565;;;;; +IC1568;G;00:39:55.96;+06:50:54.9;Psc;1.15;0.87;76;15.60;;11.44;10.73;10.26;24.52;S0;;;;;;;;2MASX J00395598+0650550,MCG +01-02-052,PGC 002404;;; +IC1569;G;00:40:28.02;+06:43:10.9;Psc;0.72;0.60;12;15.50;;12.14;11.40;11.19;23.73;S0;;;;;;;;2MASX J00402804+0643114,MCG +01-02-053,PGC 002430;;; +IC1570;G;00:40:34.10;+06:45:09.6;Psc;0.58;0.27;4;16.24;;13.27;12.51;12.19;23.88;S0-a;;;;;;;;2MASX J00403408+0645094,LEDA 073426;;; +IC1571;G;00:40:37.85;-00:19:50.4;Cet;1.05;0.84;14;14.80;;12.00;11.22;11.15;23.30;Sb;;;;;;;;2MASX J00403787-0019501,MCG +00-02-121,PGC 002440,SDSS J004037.85-001950.4,UGC 00432;;; +IC1572;Other;00:41:12.10;+16:14:15.0;Psc;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1573;G;00:42:10.46;-23:35:29.7;Cet;1.29;0.17;68;16.68;;13.34;12.59;12.10;24.29;Sc;;;;;;;;2MASX J00421046-2335294,ESO 474-013,ESO-LV 474-0130,MCG -04-02-036,PGC 002521;;; +IC1574;G;00:43:03.82;-22:14:48.8;Cet;1.83;0.70;176;14.73;14.35;;;;23.67;IB;;;;;;;;ESO 474-018,ESO-LV 474-0180,MCG -04-02-043,PGC 002578,UGCA 009;;; +IC1575;G;00:43:33.36;-04:07:04.2;Cet;0.87;0.77;140;16.22;14.85;10.77;10.02;9.77;22.79;Sa;;;;;;;;2MASX J00433334-0407045,PGC 002601;;; +IC1576;G;00:44:14.15;-25:06:33.4;Scl;0.76;0.46;143;15.67;;12.95;12.31;12.47;23.24;Sc;;;;;;;;2MASX J00441416-2506332,ESO 474-020,ESO-LV 474-0200,MCG -04-02-045,PGC 002630;;; +IC1577;Dup;00:43:34.47;-08:11:11.4;Cet;;;;;;;;;;;;;;;;0048;;;;; +IC1578;G;00:44:25.93;-25:04:36.6;Scl;0.84;0.37;18;15.29;;12.52;11.83;11.66;23.05;Sb;;;;;;;;ESO 474-021,ESO-LV 474-0210,IRAS 00419-2521,MCG -04-03-001,PGC 002637;;; +IC1579;G;00:45:32.45;-26:33:55.6;Scl;1.02;0.53;6;14.99;;12.42;11.74;11.77;22.99;SBc;;;;;;;;2MASX J00453246-2633557,ESO 474-022,ESO-LV 474-0220,MCG -05-03-002,PGC 002667;;; +IC1580;Other;00:46:21.33;+29:56:11.8;And;;;;;;;;;;;;;;;;;;;;This is three Galactic stars.; +IC1581;G;00:45:46.32;-25:55:12.6;Scl;1.00;0.20;48;16.24;;13.87;12.99;12.63;23.66;Sc;;;;;;;;2MASX J00454630-2555126,ESO 474-023,ESO-LV 474-0230,PGC 002676;;; +IC1582;G;00:46:16.82;-24:16:45.6;Cet;1.21;0.30;47;15.85;;12.91;12.21;11.83;23.84;Sbc;;;;;;;;2MASX J00461681-2416456,ESO 474-024,ESO-LV 474-0240,MCG -04-03-003,PGC 002701;;; +IC1583;G;00:47:10.30;+23:04:25.8;And;0.60;0.46;28;15.00;;11.98;11.34;10.99;23.05;S0-a;;;;;;;;2MASX J00471028+2304257,MCG +04-03-001,PGC 002760;;; +IC1584;G;00:47:18.58;+27:49:39.6;And;1.38;1.20;95;15.00;;11.09;10.00;9.99;24.35;SABb;;;;;;;;2MASX J00471856+2749398,MCG +05-03-004,PGC 002766,UGC 00489;;; +IC1585;G;00:47:14.30;+23:03:12.8;And;0.75;0.55;110;14.90;;11.70;10.96;10.83;23.42;S0;;;;;;;;2MASX J00471427+2303127,MCG +04-03-002,PGC 002764;;; +IC1586;G;00:47:56.32;+22:22:22.4;And;0.28;0.23;20;15.00;;12.92;12.23;11.98;;;;;;;;;;2MASX J00475630+2222225,IRAS 00452+2205,PGC 002813;;; +IC1587;G;00:48:43.30;-23:33:42.0;Cet;1.16;0.44;30;15.57;;12.18;11.54;11.25;24.50;S0;;;;;;;;2MASX J00484328-2333420,ESO 474-031,ESO-LV 474-0310,MCG -04-03-015,PGC 002852;;; +IC1588;G;00:50:57.71;-23:33:28.6;Cet;0.69;0.35;153;16.37;;13.26;12.62;12.23;24.11;S0-a;;;;;;;;2MASX J00505771-2333287,ESO 474-033,ESO-LV 474-0330,PGC 002965;;; +IC1589;**;00:51:59.36;-34:25:19.4;Scl;;;;;;;;;;;;;;;;;;;;The IC identification is not certain.; +IC1590;Cl+N;00:52:50.20;+56:38:34.9;Cas;6.30;;;;;;;;;;;;;;;;;MWSC 0085;;Involved with the nebula NGC 281.; +IC1591;Dup;00:52:06.57;-22:40:48.5;Cet;;;;;;;;;;;;;;;0276;;;;;; +IC1592;G;00:53:27.04;+05:46:13.4;Psc;0.86;0.68;167;15.40;;12.50;12.04;11.86;23.60;Sbc;;;;;;;;2MASX J00532704+0546135,PGC 003139,UGC 00543;;; +IC1593;**;00:54:39.63;+32:31:10.1;Psc;;;;;;;;;;;;;;;;;;;;; +IC1594;G;00:53:45.33;-47:38:50.9;Phe;1.25;0.39;129;15.18;;12.32;11.60;11.29;23.55;SABb;;;;;;;;2MASX J00534533-4738508,ESO 195-012,ESO-LV 195-0120,PGC 003161;;; +IC1595;G;00:53:47.05;-45:11:11.9;Phe;1.45;0.26;12;15.38;;13.42;12.68;12.07;23.77;Sb;;;;;;;;2MASX J00534665-4511268,2MASX J00534703-4511118,PGC 003162;;;B-Mag taken from LEDA. +IC1596;G;00:54:42.83;+21:31:21.5;Psc;1.88;0.75;118;15.10;;12.21;11.70;11.43;24.53;Sab;;;;;;;;2MASX J00544282+2131215,MCG +03-03-007,PGC 003219,UGC 00550;;; +IC1597;G;00:53:32.09;-58:06:25.7;Tuc;1.61;0.42;152;15.01;;12.59;11.82;11.64;23.79;SBb;;;;;;;;2MASX J00533211-5806256,ESO 112-010,ESO-LV 112-0100,PGC 003144;;; +IC1598;G;00:54:41.77;+05:46:25.7;Psc;1.01;0.51;3;15.00;;11.52;10.82;10.53;23.41;Sa;;;;;;;;2MASX J00544177+0546259,MCG +01-03-007,PGC 003217,UGC 00553;;; +IC1599;G;00:54:32.81;-23:29:41.7;Cet;1.19;0.28;107;15.52;;12.23;11.47;11.15;23.45;Sbc;;;;;;;;2MASX J00543280-2329415,ESO 474-042,ESO-LV 474-0420,MCG -04-03-030,PGC 003210;;; +IC1600;G;00:55:04.24;-23:31:29.6;Cet;0.80;0.47;92;15.59;;12.81;12.04;11.76;23.31;Sbc;;;;;;;;2MASX J00550423-2331296,ESO 474-043,ESO-LV 474-0430,MCG -04-03-031,PGC 003253;;; +IC1601;G;00:55:34.84;-24:09:12.2;Cet;0.92;0.44;116;14.50;;11.61;10.89;10.60;22.45;Sbc;;;;;;;;2MASX J00553485-2409121,ESO 474-044,ESO-LV 474-0440,IRAS 00531-2425,MCG -04-03-032,PGC 003287;;; +IC1602;G;00:55:51.89;-09:59:08.4;Cet;1.08;0.80;149;15.44;;11.48;10.80;10.40;24.35;E;;;;;;;;2MASX J00555190-0959088,MCG -02-03-047,PGC 003306,SDSS J005551.88-095908.1,SDSS J005551.88-095908.3,SDSS J005551.89-095908.3,SDSS J005551.89-095908.4;;;B-Mag taken from LEDA. +IC1603;G;00:56:59.68;-45:24:46.6;Phe;1.41;0.55;112;14.62;;12.56;11.88;11.83;23.35;Sc;;;;;;;;2MASX J00565967-4524466,ESO 243-014,ESO-LV 243-0140,PGC 003401;;; +IC1604;Other;00:57:58.95;-16:13:48.2;Cet;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1605;G;00:57:37.64;-48:54:09.6;Phe;1.68;1.35;143;13.82;;11.17;10.55;10.21;23.41;SBbc;;;;;;;;2MASX J00573759-4854095,ESO 195-019,ESO-LV 195-0190,PGC 003436;;; +IC1606;Other;00:58:22.17;-12:10:42.6;Cet;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1607;G;00:58:48.86;+00:35:14.1;Cet;0.94;0.76;138;14.40;;11.95;11.24;11.08;22.89;Sc;;;;;;;;2MASX J00584882+0035137,MCG +00-03-047,PGC 003512,SDSS J005848.82+003512.1,SDSS J005848.85+003514.1,SDSS J005848.86+003514.0,SDSS J005848.86+003514.1,UGC 00611;;Confused HIPASS source; +IC1608;G;00:59:24.37;-34:19:44.2;Scl;2.05;0.68;171;13.70;;10.37;9.70;9.49;23.90;S0-a;;;;;;;;2MASX J00592434-3419439,ESO 351-027,ESO-LV 351-0270,MCG -06-03-013,PGC 003549;;; +IC1609;G;00:59:46.62;-40:20:00.8;Phe;1.13;0.99;44;13.59;;10.53;9.83;9.56;22.73;S0;;;;;;;;2MASX J00594662-4020007,ESO 295-026,ESO-LV 295-0260,MCG -07-03-004,PGC 003567;;; +IC1610;G;01:01:42.58;-15:34:04.0;Cet;1.59;1.41;110;13.86;;10.80;10.12;9.84;23.60;S0-a;;;;;;;;2MASX J01014259-1534041,MCG -03-03-020,PGC 003681;;;B-Mag taken from LEDA. +IC1611;OCl;00:59:47.90;-72:19:56.4;Tuc;1.50;1.50;;12.26;11.96;;;;;;;;;;;;;ESO 029-027;;This is an open cluster in the Small Magellanic Cloud.; +IC1612;OCl;00:59:58.61;-72:22:14.6;Tuc;1.20;0.80;20;12.84;12.31;;;;;;;;;;;;;ESO 029-028;;This is an open cluster in the Small Magellanic Cloud.; +IC1613;G;01:04:47.79;+02:07:04.0;Cet;18.32;17.14;50;10.42;10.01;;;;25.00;I;;;;;;;;C 051,MCG +00-03-070,PGC 003844,UGC 00668;;Position is for the center of the bar.; +IC1614;G;01:05:06.96;+33:11:23.3;Psc;0.62;0.51;60;17.62;;12.54;11.69;11.52;24.61;;;;;;;;;2MASX J01050697+3311235,LEDA 2025913;;;B-Mag taken from LEDA. +IC1615;G;01:04:07.04;-51:07:59.0;Phe;1.33;0.60;148;14.29;;11.40;10.70;10.43;23.05;SBbc;;;;;;;;2MASX J01040703-5107590,ESO 195-027,ESO-LV 195-0270,IRAS 01019-5124,PGC 003812;;; +IC1616;G;01:04:56.18;-27:25:45.7;Scl;1.63;1.50;5;13.35;12.89;10.82;10.14;9.87;23.12;Sbc;;;;;;;;2MASX J01045619-2725454,ESO 412-004,ESO-LV 412-0040,IRAS 01025-2741,MCG -05-03-022,PGC 003846;;; +IC1617;G;01:04:16.80;-51:01:58.1;Phe;1.35;0.49;124;14.59;;11.55;10.85;10.53;23.73;S0-a;;;;;;;;2MASX J01041679-5101580,ESO 195-028,ESO-LV 195-0280,PGC 003818;;; +IC1618;G;01:05:55.98;+32:24:43.8;Psc;0.86;0.46;156;15.60;;12.15;11.35;11.26;23.98;S0;;;;;;;;2MASX J01055601+3224437,PGC 003899,UGC 00671;;; +IC1619;G;01:07:22.44;+33:04:02.2;Psc;0.75;0.60;93;15.00;;11.78;11.13;10.75;23.47;S0;;;;;;;;2MASX J01072245+3304021,MCG +05-03-054,PGC 003975;;; +IC1620;G;01:07:14.25;+13:57:18.4;Psc;0.96;0.68;87;14.20;;12.28;11.61;11.23;23.09;Sbc;;;;;;;;2MASX J01071423+1357180,MCG +02-03-034,PGC 003960,SDSS J010714.24+135718.4,SDSS J010714.25+135718.4,UGC 00681;;; +IC1621;G;01:06:22.63;-46:43:31.8;Phe;1.38;0.43;3;14.61;;;;;23.16;Sbc;;;;;;;;ESO 243-028,ESO-LV 243-0280,PGC 003915;;; +IC1622;G;01:07:36.67;-17:32:19.1;Cet;0.70;0.56;160;14.65;;11.94;11.35;10.92;22.46;Sab;;;;;;;;2MASX J01073666-1732190,ESO 541-022,ESO-LV 541-0220,MCG -03-04-001,PGC 003997;;; +IC1623;GPair;01:07:47.18;-17:30:25.3;Cet;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1623A;G;01:07:46.70;-17:30:26.0;Cet;1.05;0.87;63;14.26;;;;;22.95;S?;;;;;;;;IRAS 01053-1746,MCG -03-04-003,PGC 004007;;;B-Mag taken from LEDA. +IC1623B;G;01:07:47.56;-17:30:25.1;Cet;0.80;0.60;12;15.04;;11.27;9.97;10.03;22.44;I;;;;;;;;2MASX J01074756-1730250,ESO-LV 541-0231,MCG -03-04-004,PGC 004008;;The 2MASX position applies to both components.; +IC1624;OCl;01:05:21.84;-72:02:33.1;Tuc;0.90;0.90;;12.60;12.42;12.67;12.33;12.60;;;;;;;;;;2MASX J01052189-7202333,ESO 051-017;;This is an open cluster in the Small Magellanic Cloud.; +IC1625;G;01:07:42.61;-46:54:27.3;Phe;1.80;1.41;9;13.11;;10.26;9.53;9.29;23.03;E-S0;;;;;;;;2MASX J01074258-4654272,ESO 243-033,ESO-LV 243-0330,PGC 004001;;; +IC1626;OCl;01:06:13.43;-73:17:46.0;Tuc;1.00;1.00;;14.01;13.82;;;;;;;;;;;;;ESO 029-030;;; +IC1627;G;01:08:10.84;-46:05:38.6;Phe;1.62;0.64;139;13.71;;10.61;10.03;9.63;23.01;SBbc;;;;;;;;2MASX J01081084-4605385,ESO 243-034,ESO-LV 243-0340,PGC 004027;;The APM position is southeast of the center of the galaxy.; +IC1628;G;01:08:47.53;-28:34:56.4;Scl;1.65;1.53;112;13.50;;10.38;9.64;9.41;23.49;E;;;;;;;;2MASX J01084753-2834565,ESO 412-007,ESO-LV 412-0070,MCG -05-03-027,PGC 004075;;; +IC1629;G;01:09:18.20;+02:34:02.9;Cet;0.78;0.63;56;15.70;;12.02;11.11;11.10;24.06;;;;;;;;;2MASX J01091820+0234035,PGC 004122;;; +IC1630;G;01:08:16.77;-46:45:14.5;Phe;1.65;0.28;64;15.18;;12.74;11.97;11.46;23.82;Sb;;;;;;;;2MASX J01081675-4645145,ESO 243-036,ESO-LV 243-0360,PGC 004036;;; +IC1631;G;01:08:44.87;-46:28:32.9;Phe;0.81;0.52;85;14.22;;12.19;11.49;11.17;22.34;Sab;;;;;;;;2MASX J01084486-4628327,ESO 243-040,ESO-LV 243-0400,IRAS 01065-4644,PGC 004068;;; +IC1632;G;01:10:43.38;+17:40:59.7;Psc;0.23;0.22;5;16.48;;13.41;12.55;12.18;;E;;;;;;;;2MASX J01104339+1740598,PGC 004205;;; +IC1633;G;01:09:55.58;-45:55:52.3;Phe;2.90;2.16;97;12.23;;9.36;8.66;8.40;23.73;E;;;;;;;;2MASX J01095559-4555523,ESO 243-046,ESO-LV 243-0460,PGC 004149;;The APM position is northeast of the center of the galaxy.; +IC1634;G;01:11:03.79;+17:39:47.0;Psc;0.83;0.72;153;15.66;;;;;24.14;E;;;;;;;;MCG +03-04-008,PGC 004232,UGC 00740;;;B-Mag taken from LEDA. +IC1635;G;01:11:03.53;+17:39:07.3;Psc;1.15;0.65;148;17.20;;11.44;10.75;10.36;24.58;E;;;;;;;;2MASX J01110354+1739071,MCG +03-04-009,PGC 004231,UGC 00739;;; +IC1636;G;01:11:34.96;+33:21:55.4;Psc;0.55;0.44;103;14.90;;12.06;11.40;11.15;22.41;S0;;;;;;;;2MASX J01113747+3321151,PGC 004280;;Possibly an interacting double galaxy?; +IC1637;G;01:11:01.14;-30:26:18.7;Scl;1.69;1.30;90;13.59;;10.94;10.33;9.93;23.18;SBc;;;;;;;;2MASX J01110112-3026186,ESO 412-010,ESO-LV 412-0100,IRAS 01086-3042,MCG -05-04-003,PGC 004227;;; +IC1638;G;01:12:21.81;+33:21:52.3;Psc;0.75;0.68;105;14.90;;11.52;10.81;10.50;23.23;E;;;;;;;;2MASX J01122179+3321515,MCG +05-03-082,PGC 004338;;; +IC1639;G;01:11:46.55;-00:39:51.7;Cet;0.76;0.70;100;14.20;;11.58;10.90;10.63;22.64;E;;;;;;;;2MASX J01114656-0039520,MCG +00-04-031,PGC 004292,SDSS J011146.55-003951.6,UGC 00750;;; +IC1640;G;01:11:51.30;-00:37:49.3;Cet;0.18;0.18;20;15.10;;12.67;11.96;11.75;20.56;Sb;;;;;;;;2MASX J01115130-0037492,PGC 004299;;; +IC1641;OCl;01:09:39.19;-71:46:08.3;Tuc;0.75;0.65;40;15.12;14.99;;;;;;;;;;;;;ESO 051-021;;This is an open cluster in the Small Magellanic Cloud.; +IC1643;G;01:12:08.63;-00:24:36.7;Cet;0.90;0.67;79;15.40;;12.08;11.42;11.35;23.54;SBa;;;;;;;;2MASX J01120864-0024372,MCG +00-04-033,PGC 004328,SDSS J011208.63-002436.7,SDSS J011208.63-002436.8,SDSS J011208.63-002436.9;;; +IC1644;HII;01:09:13.01;-73:11:38.8;Tuc;0.80;0.65;40;;11.70;12.01;11.92;11.40;;;;;;;;;;2MASX J01091306-7311389,ESO 029-035,IRAS 01077-7327;;Within boundaries of SMC.; +IC1645;G;01:12:27.34;+15:45:00.3;Psc;0.86;0.77;11;15.50;;11.96;11.30;10.97;23.95;E;;;;;;;;2MASX J01122734+1545000,LEDA 095507,MCG +02-04-008,SDSS J011227.33+154500.2,SDSS J011227.34+154500.3;;; +IC1646;G;01:12:43.83;+15:42:28.1;Psc;0.65;0.61;17;15.30;;13.38;12.75;12.49;23.48;SABc;;;;;;;;2MASX J01124382+1542281,MCG +02-04-009,PGC 004357,SDSS J011243.82+154228.1,SDSS J011243.83+154228.1;;; +IC1647;G;01:13:14.61;+38:53:07.0;And;0.90;0.40;40;15.20;;12.91;12.36;11.99;23.19;Sc;;;;;;;;2MASX J01131461+3853068,MCG +06-03-024,PGC 004390;;; +IC1648;G;01:13:42.12;+33:13:05.6;Psc;0.40;0.40;155;15.00;;12.18;11.33;11.18;21.91;S0;;;;;;;;2MASX J01134212+3313052,PGC 004417;;; +IC1649;G;01:11:50.94;-55:51:26.4;Phe;1.90;0.31;136;14.71;;11.59;10.79;10.51;23.55;Sbc;;;;;;;;2MASX J01115093-5551265,ESO 151-030,ESO-LV 151-0300,PGC 004298;;The APMUKS position applies to the southeastern end of the galaxy.; +IC1650;G;01:12:19.09;-50:24:06.2;Phe;1.32;0.65;62;14.36;;11.49;10.77;10.50;23.22;SBb;;;;;;;;2MASX J01121907-5024062,ESO 195-034,ESO-LV 195-0340,IRAS 01101-5039,PGC 004334;;; +IC1651;Other;01:13:27.56;+02:04:09.0;Cet;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC1652;G;01:14:56.26;+31:56:54.6;Psc;1.32;0.17;170;14.30;;11.39;10.65;10.46;23.21;S0-a;;;;;;;;2MASX J01145624+3156546,MCG +05-04-003,PGC 004498,UGC 00792;;; +IC1653;Dup;01:15:07.59;+33:22:38.4;Psc;;;;;;;;;;;;;;;0443;;;;;; +IC1654;G;01:15:11.88;+30:11:41.4;Psc;0.99;0.46;50;14.30;;11.82;11.16;10.49;23.02;Sa;;;;;;;;2MASX J01151181+3011415,MCG +05-04-004,PGC 004520,UGC 00798;;; +IC1655;OCl;01:11:54.10;-71:19:50.2;Tuc;1.70;1.50;50;14.10;14.00;;;;;;;;;;;;;ESO 051-023;;This is an open cluster in the Small Magellanic Cloud.; +IC1656;Dup;01:15:37.63;+33:04:03.8;Psc;;;;;;;;;;;;;;;0447;;;;;; +IC1657;G;01:14:07.02;-32:39:03.2;Scl;2.32;0.52;170;13.16;;10.43;9.76;9.48;22.68;SBbc;;;;;;1663;;2MASX J01140701-3239032,ESO 352-024,ESO-LV 352-0240,IRAS 01117-3254,MCG -06-03-030,PGC 004440;;; +IC1658;Dup;01:15:49.60;+31:04:48.9;Psc;;;;;;;;;;;;;;;0444;;;;;; +IC1659;G;01:16:06.02;+30:20:56.7;Psc;0.83;0.74;18;14.60;;11.12;10.34;10.13;23.11;E;;;;;;;;2MASX J01160599+3020568,MCG +05-04-008,PGC 004584,UGC 00812;;; +IC1660;OCl;01:12:37.67;-71:45:42.3;Tuc;1.10;1.10;;13.68;13.51;;;;;;;;;;;;;ESO 051-024;;This is an open cluster in the Small Magellanic Cloud.; +IC1661;Dup;01:16:12.40;+33:03:50.8;Psc;;;;;;;;;;;;;;;0451;;;;;; +IC1662;OCl;01:12:32.75;-73:27:24.3;Tuc;1.20;1.20;;14.18;14.03;;;;;;;;;;;;;ESO 029-037;;This is an open cluster in the Small Magellanic Cloud.; +IC1663;Dup;01:14:07.02;-32:39:03.2;Scl;;;;;;;;;;;;;;;;1657;;;;; +IC1664;Other;01:14:18.51;-69:48:41.5;Tuc;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC1665;Other;01:17:44.91;+34:42:06.0;And;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC1666;G;01:19:53.39;+32:28:02.4;Psc;0.93;0.86;73;14.40;;11.85;11.19;10.74;22.94;Sc;;;;;;;;2MASX J01195340+3228025,IRAS 01170+3212,MCG +05-04-019,PGC 004782,UGC 00857;;; +IC1667;G;01:18:42.35;-17:03:00.8;Cet;0.96;0.68;45;15.41;;13.33;12.79;12.68;23.65;Sc;;;;;;;;2MASX J01184235-1703005,MCG -03-04-039,PGC 004694;;;B-Mag taken from LEDA. +IC1668;G;01:18:53.10;+33:10:23.0;Psc;0.34;0.24;50;15.70;;14.21;13.65;13.16;21.89;Sc;;;;;;;;2MASX J01185299+3310222,PGC 004712;;; +IC1669;G;01:20:06.84;+33:11:05.1;Psc;0.77;0.26;5;15.70;;13.15;12.67;12.06;24.02;;;;;;;;;2MASX J01200684+3311051,PGC 004802,SDSS J012006.81+331104.5;;; +IC1670;GPair;01:18:50.80;-16:48:10.0;Cet;3.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1670A;G;01:18:48.84;-16:48:12.4;Cet;1.60;0.56;114;14.77;;11.30;10.50;10.29;23.56;Sbc;;;;;;;;2MASX J01184882-1648125,IRAS 01163-1703,MCG -03-04-040,PGC 004711;;;B-Mag taken from LEDA. +IC1670B;G;01:18:52.85;-16:48:12.4;Cet;1.99;0.44;102;14.50;;10.97;10.28;10.05;24.67;S0;;;;;;;;2MASX J01185286-1648125,MCG -03-04-041,PGC 004707;;;B-Mag taken from LEDA. +IC1671;Dup;01:19:02.34;-17:03:37.4;Cet;;;;;;;;;;;;;;;;0093;;;;; +IC1672;G;01:20:38.20;+29:41:55.8;Psc;1.42;1.00;138;14.00;;11.21;10.52;10.23;23.19;Sab;;;;;;;;2MASX J01203820+2941555,MCG +05-04-024,PGC 004848,UGC 00872;;; +IC1673;G;01:20:46.35;+33:02:41.8;Psc;0.54;0.54;70;14.60;;11.84;11.21;10.93;22.33;E;;;;;;;;2MASX J01204631+3302412,PGC 004855;;; +IC1674;G;01:19:18.44;-50:57:48.9;Phe;0.52;0.29;23;14.94;;12.39;11.95;11.69;21.95;Sbc;;;;;;;;2MASX J01191842-5057488,ESO 196-002,ESO-LV 196-0020,ESO-LV 1960020,IRAS F01171-5113,PGC 004746;;;NED nominal entry for IC1674 points nothing. +IC1675;G;01:20:59.90;+34:14:55.0;And;0.72;0.23;58;14.30;;11.51;10.77;10.53;21.65;Sab;;;;;;;;2MASX J01205979+3414552,MCG +06-04-004,PGC 004876,UGC 00879;;; +IC1676;G;01:20:58.59;+30:15:34.1;Psc;0.59;0.44;179;15.70;;11.85;11.10;10.85;23.36;E;;;;;;;;2MASX J01205855+3015342,PGC 004871;;; +IC1677;G;01:21:07.09;+33:12:58.1;Psc;0.65;0.30;129;15.20;;;;;22.34;Sc;;;;;;;;MCG +05-04-025,PGC 004891;;; +IC1678;G;01:21:02.53;+05:33:37.9;Psc;0.34;0.24;145;15.50;;12.56;11.85;11.74;;;;;;;;;;2MASX J01210252+0533380,PGC 004875;;; +IC1679;G;01:21:44.60;+33:29:37.0;Psc;0.60;0.51;46;15.50;;12.50;11.78;11.45;23.13;S0-a;;;;;;;;2MASX J01214453+3329381,MCG +05-04-027,PGC 004944;;; +IC1680;G;01:21:51.20;+33:16:57.0;Psc;0.70;0.53;103;14.90;;11.94;11.32;11.00;23.01;S0-a;;;;;;;;2MASX J01215113+3316573,MCG +05-04-028,PGC 004956;;; +IC1681;G;01:21:21.32;+00:05:25.4;Cet;1.00;0.49;101;15.00;;13.28;12.60;12.36;23.04;Sd;;;;;;;;2MASX J01212131+0005257,MCG +00-04-097,PGC 004916,SDSS J012121.31+000525.4,SDSS J012121.32+000525.3,SDSS J012121.32+000525.4,SDSS J012121.32+000525.5,UGC 00894;;; +IC1682;G;01:22:13.30;+33:15:37.0;Psc;0.86;0.40;119;14.30;;11.63;10.94;10.62;22.50;Sab;;;;;;;;2MASX J01221322+3315373,MCG +05-04-032,PGC 004983,UGC 00912;;; +IC1683;G;01:22:39.00;+34:26:13.0;And;1.32;0.57;173;14.20;;11.42;10.75;10.40;22.90;Sb;;;;;;;;2MASX J01223886+3426132,IRAS 01197+3410,MCG +06-04-008,PGC 005008,UGC 00916;;; +IC1684;G;01:22:53.20;+33:24:49.0;Psc;0.68;0.45;124;15.77;;12.37;11.63;11.43;23.64;S0;;;;;;;;2MASX J01225306+3324491,LEDA 169770;;;B-Mag taken from LEDA. +IC1685;G;01:23:06.60;+33:11:22.0;Psc;0.40;0.30;165;;;13.15;12.32;11.97;;;;;;;;;;2MASX J01230660+3311212,PGC 169771;;; +IC1686;Dup;01:23:11.50;+33:27:38.0;Psc;;;;;;;;;;;;;;;0499;;;;;; +IC1687;G;01:23:19.10;+33:16:31.0;Psc;0.68;0.48;0;14.80;;11.63;10.96;10.81;22.88;S0-a;;;;;;;;2MASX J01231911+3316392,MCG +05-04-039,PGC 005074;;; +IC1688;G;01:23:28.10;+33:04:59.0;Psc;0.38;0.31;64;16.42;;13.21;12.44;12.29;23.18;E;;;;;;;;2MASX J01232801+3304592,LEDA 169774;;;B-Mag taken from LEDA. +IC1689;G;01:23:47.86;+33:03:19.2;Psc;0.62;0.41;171;14.80;;11.74;11.11;10.86;22.70;S0;;;;;;;;2MASX J01234783+3303192,MCG +05-04-046,PGC 005108;;; +IC1690;G;01:23:49.54;+33:09:22.6;Psc;0.49;0.26;130;14.90;;12.11;11.30;11.02;;S0;;;;;;;;2MASX J01234950+3309222,PGC 005110;;; +IC1691;G;01:24:25.80;+33:24:25.0;Psc;0.46;0.39;122;16.26;;13.01;12.33;12.39;23.25;S0-a;;;;;;;;2MASX J01242573+3324255,LEDA 169777;;;B-Mag taken from LEDA. +IC1692;G;01:24:39.56;+33:14:08.9;Psc;0.50;0.36;144;15.60;;12.72;12.03;11.77;22.93;S0;;;;;;;;2MASX J01243952+3314085,PGC 005203;;; +IC1693;G;01:24:02.40;-01:39:25.3;Cet;0.65;0.27;162;15.30;;12.65;11.99;11.45;23.73;S0-a;;;;;;;;2MASX J01240239-0139256,LEDA 073940;;; +IC1694;G;01:24:47.80;+01:36:25.8;Cet;1.12;0.71;4;14.90;;11.67;11.04;10.73;23.89;E;;;;;;;;2MASX J01244771+0136272,PGC 005221;;; +IC1695;G;01:25:07.63;+08:41:58.2;Psc;1.84;1.08;86;14.87;;11.23;10.42;10.17;25.25;E;;;;;;;;2MASX J01250764+0841576,MCG +01-04-055,PGC 005245,UGC 00977;;; +IC1696;G;01:24:52.36;-01:37:01.4;Cet;0.83;0.75;16;14.70;;11.45;10.75;10.47;23.10;E;;;;;;;;2MASX J01245237-0137014,MCG +00-04-122,PGC 005231,UGC 00973;;; +IC1697;G;01:25:02.94;+00:26:39.7;Cet;0.81;0.46;104;14.90;;11.94;11.17;10.90;23.27;S0-a;;;;;;;;2MASX J01250297+0026400,IRAS 01224+0011,MCG +00-04-125,PGC 005238,SDSS J012502.93+002639.6,SDSS J012502.94+002639.5,SDSS J012502.94+002639.7,UGC 00976;;; +IC1698;G;01:25:22.14;+14:50:19.4;Psc;1.87;0.76;117;14.43;;11.71;11.00;10.72;24.86;S0;;;;;;1699;;2MASX J01252213+1450198,MCG +02-04-040,PGC 005261,SDSS J012522.13+145019.3,SDSS J012522.14+145019.4,UGC 00983;;The identificaiton as IC 1699 is very uncertain.; +IC1699;Dup;01:25:22.14;+14:50:19.4;Psc;;;;;;;;;;;;;;;;1698;;;;; +IC1700;Dup;01:25:24.66;+14:51:52.6;Psc;;;;;;;;;;;;;;;;0107;;;;; +IC1701;G;01:25:50.40;+18:11:04.1;Psc;0.79;0.60;92;15.30;;11.52;10.83;10.58;23.66;E;;;;;;;;2MASX J01255044+1811038,MCG +03-04-035,PGC 005309,UGC 01002;;; +IC1702;G;01:25:56.29;+16:36:06.5;Psc;1.13;0.68;172;14.50;;11.70;10.99;10.75;23.05;Sc;;;;;;;;2MASX J01255630+1636066,MCG +03-04-036,PGC 005321,UGC 01005;;; +IC1703;Dup;01:26:25.15;-01:38:19.4;Cet;;;;;;;;;;;;;;;0557;;;;;; +IC1704;G;01:27:09.53;+14:46:34.6;Psc;1.08;0.76;162;14.20;;12.01;11.43;11.11;23.02;Sc;;;;;;;;2MASX J01270953+1446345,IRAS 01244+1431,MCG +02-04-052,PGC 005411,SDSS J012709.53+144634.5,SDSS J012709.53+144634.6,UGC 01027;;; +IC1705;G;01:26:44.84;-03:30:05.3;Cet;0.63;0.48;107;14.50;;11.06;10.36;10.09;23.86;E;;;;;;;;2MASX J01264483-0330054,MCG -01-04-048,PGC 005377;;; +IC1706;G;01:27:31.02;+14:49:10.4;Psc;0.50;0.48;85;15.40;;13.34;12.87;12.25;22.94;SBcd;;;;;;;;2MASX J01273097+1449107,PGC 005433,SDSS J012731.03+144911.2,SDSS J012731.03+144911.3,SDSS J012731.06+144911.3;;; +IC1707;Other;01:28:00.32;+37:07:01.4;And;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1708;OCl;01:24:56.08;-71:11:04.0;Hyi;1.20;1.20;;14.30;;;;;;;;;;;;;;2MASX J01245608-7111039,ESO 052-002;;This is an open cluster in the Small Magellanic Cloud.; +IC1709;Dup;01:27:57.01;-35:43:03.7;Scl;;;;;;;;;;;;;;;0568;;;;;; +IC1710;Dup;01:30:46.64;+21:26:25.5;Psc;;;;;;;;;;;;;;;0575;;;;;; +IC1711;G;01:30:55.26;+17:11:18.8;Psc;2.49;0.48;42;14.80;;10.68;9.84;9.54;24.32;Sb;;;;;;;;2MASX J01305526+1711185,IRAS 01282+1655,MCG +03-04-052,PGC 005643,UGC 01082;;; +IC1712;Dup;01:31:20.75;-06:52:05.0;Cet;;;;;;;;;;;;;;;0584;;;;;; +IC1713;*;01:32:43.80;+35:19:28.1;Tri;;;;;;;;;;;;;;;;;;;;; +IC1714;G;01:32:53.17;-13:01:29.9;Cet;0.62;0.50;94;16.57;;;;;24.26;;;;;;;;;PGC 944130;;; +IC1715;G;01:33:34.14;+12:35:07.6;Psc;0.65;0.50;95;14.50;;12.63;11.99;11.89;22.28;I;;;;;;;;2MASX J01333414+1235078,IRAS 01309+1219,MCG +02-05-002,PGC 005805,UGC 01115;;; +IC1716;*;01:33:26.85;-12:18:28.6;Cet;;;;;;;;;;;;;;;;;;;;; +IC1717;Other;01:32:30.33;-67:32:12.6;Hyi;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC1718;G;01:38:26.75;+33:21:59.5;Tri;0.68;0.38;120;15.00;;12.80;12.14;11.85;22.87;;;;;;;;;2MASX J01382676+3321594,PGC 006068;;; +IC1719;G;01:37:35.92;-33:55:26.7;Scl;1.49;1.08;173;13.79;;10.77;10.11;9.80;23.56;S0;;;;;;;;2MASX J01373593-3355265,ESO 353-027,ESO-LV 353-0270,MCG -06-04-059,PGC 006020;;; +IC1720;G;01:40:21.59;-28:54:45.9;Scl;1.21;0.91;155;13.71;;11.10;10.39;10.10;22.73;Sbc;;;;;;;;2MASX J01402160-2854459,ESO 413-019,ESO-LV 413-0190,IRAS 01380-2909,MCG -05-05-008,PGC 006180;;; +IC1721;G;01:41:24.44;+08:31:31.9;Psc;1.05;0.46;100;14.30;;11.86;11.22;11.03;22.77;Sbc;;;;;;;;2MASX J01412439+0831317,MCG +01-05-019,PGC 006235,UGC 01187;;; +IC1722;G;01:43:02.71;-34:11:15.8;Scl;1.52;0.39;51;14.71;;12.87;12.21;12.05;23.37;SABb;;;;;;;;ESO 353-034,ESO-LV 353-0340,MCG -06-04-067,PGC 006319;;; +IC1723;G;01:43:14.18;+08:53:21.7;Psc;2.45;0.50;28;14.20;;10.89;10.13;9.81;23.67;Sb;;;;;;;;2MASX J01431417+0853215,IRAS 01406+0838,MCG +01-05-028,PGC 006332,UGC 01205;;; +IC1724;G;01:43:09.68;-34:14:30.8;Scl;1.29;0.50;126;14.09;;10.98;10.30;10.04;23.42;S0-a;;;;;;;;2MASX J01430966-3414305,ESO 353-035,ESO-LV 353-0350,MCG -06-04-068,PGC 006328;;; +IC1725;G;01:45:11.83;+21:46:35.6;Psc;0.52;0.45;60;15.46;;13.11;12.37;12.22;22.79;Sc;;;;;;;;2MASX J01451183+2146355,PGC 006432;;; +IC1726;G;01:45:19.67;+04:37:06.7;Psc;0.30;0.30;35;14.80;;12.83;12.10;11.88;;;;;;;;;;2MASX J01451975+0437071,IRAS 01427+0422,PGC 006441;;; +IC1727;G;01:47:29.89;+27:20:00.1;Tri;6.52;2.44;150;12.54;11.98;11.07;10.24;10.29;24.02;SBm;;;;;;;;2MASX J01472988+2720000,IRAS 01446+2705,MCG +04-05-009,PGC 006574,UGC 01249;;; +IC1728;G;01:47:44.49;-33:36:05.4;For;1.29;0.80;6;14.17;;11.06;10.42;10.12;23.00;Sbc;;;;;;;;2MASX J01474446-3336055,ESO 353-047,ESO-LV 353-0470,IRAS 01455-3350,MCG -06-05-002,PGC 006584;;; +IC1729;G;01:47:55.26;-26:53:31.7;For;2.22;1.25;142;13.03;;10.52;9.87;9.67;24.03;E;;;;;;;;2MASX J01475527-2653319,ESO 477-004,ESO-LV 477-0040,MCG -05-05-014,PGC 006598;;; +IC1730;G;01:49:57.94;+22:00:43.6;Ari;0.75;0.48;64;15.50;;12.30;11.63;11.43;23.54;S?;;;;;;;;2MASX J01495792+2200440,MCG +04-05-015a,PGC 006732;;; +IC1731;G;01:50:12.34;+27:11:46.2;Tri;1.45;0.80;134;14.20;;11.79;11.21;10.83;23.33;SABc;;;;;;;;2MASX J01501233+2711464,MCG +04-05-018,PGC 006756,SDSS J015012.38+271145.8,UGC 01291;;; +IC1732;G;01:50:47.90;+35:55:57.9;And;1.32;0.38;61;15.10;;11.22;10.49;10.27;23.86;S0-a;;;;;;;;2MASX J01504792+3555581,MCG +06-05-016,PGC 006805,UGC 01307;;; +IC1733;G;01:50:42.89;+33:04:55.3;Tri;1.54;1.43;70;14.70;;10.88;10.21;9.90;23.97;E;;;;;;;;2MASX J01504290+3304551,MCG +05-05-016,PGC 006796,UGC 01301;;; +IC1734;G;01:49:17.05;-32:44:33.4;For;1.63;1.52;21;13.59;;11.17;10.49;10.16;23.20;Sc;;;;;;;;2MASX J01491704-3244336,ESO 353-048,ESO-LV 353-0480,IRAS 01470-3259,MCG -06-05-003,PGC 006679;;; +IC1735;G;01:50:51.74;+33:05:32.4;Tri;0.85;0.69;157;17.20;;12.12;11.37;11.01;23.66;S0;;;;;;;;2MASX J01505173+3305321,PGC 006803,SDSS J015051.73+330532.5;;; +IC1736;G;01:50:53.20;+18:18:10.0;Ari;1.04;0.28;35;15.00;;;;;23.04;Sbc;;;;;;;;MCG +03-05-020,PGC 006814,UGC 01309;;; +IC1737;Other;01:51:42.72;+36:15:04.3;And;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC1738;G;01:51:07.90;-09:47:31.3;Cet;0.93;0.69;76;14.70;;11.57;10.99;10.70;22.99;Sb;;;;;;;;2MASX J01510790-0947313,MCG -02-05-061,PGC 006832,SDSS J015107.89-094731.3,SDSS J015107.90-094731.3;;;B-Mag taken from LEDA. +IC1739;G;01:50:29.60;-34:03:20.1;For;0.88;0.55;86;14.91;;12.31;11.91;11.49;22.88;Sb;;;;;;;;2MASX J01502959-3403200,ESO 354-001,ESO-LV 354-0010,MCG -06-05-007,PGC 006777;;The APMUKS position is east of the nucleus.; +IC1740;**;01:48:51.56;-30:05:09.5;For;;;;;;;;;;;;;;;;;;;;The identification as IC 1740 is uncertain.; +IC1741;G;01:51:56.73;-16:47:16.9;Cet;1.05;0.58;168;15.52;;11.67;11.03;10.71;24.24;S0-a;;;;;;;;2MASX J01515675-1647169,MCG -03-05-023,PGC 006900;;;B-Mag taken from LEDA. +IC1742;G;01:53:14.23;+22:43:17.0;Ari;0.68;0.46;48;15.20;;12.73;12.15;11.74;22.97;Sc;;;;;;;;2MASX J01531422+2243169,MCG +04-05-023,PGC 006996;;; +IC1743;Dup;01:52:59.68;+12:42:30.5;Ari;;;;;;;;;;;;;;;0716;;;;;; +IC1744;Dup;01:53:38.84;+19:50:25.5;Ari;;;;;;;;;;;;;;;0719;;;;;; +IC1745;G;01:52:59.09;-16:40:08.4;Cet;0.75;0.31;138;15.98;;12.45;11.79;11.49;24.09;S0-a;;;;;;;;2MASX J01525903-1640090,LEDA 174317;;; +IC1746;G;01:54:24.31;+04:48:14.0;Psc;1.58;0.47;95;15.10;;11.99;11.34;11.06;24.66;S0;;;;;;;;2MASX J01542431+0448138,MCG +01-05-043,PGC 007076,UGC 01371;;; +IC1747;PN;01:57:35.73;+63:19:18.4;Cas;0.22;;;13.60;12.00;12.12;11.88;11.03;;;;15.80;15.40;;;;HD 11758;2MASX J01573573+6319183,IRAS 01539+6304 ,PK 130+01 1,PN G130.2+01.3;;; +IC1748;G;01:56:08.86;+17:38:28.6;Ari;0.69;0.49;122;14.70;;12.59;12.03;11.95;22.66;Sbc;;;;;;;;2MASX J01560885+1738284,MCG +03-06-002,PGC 007229,UGC 01403;;; +IC1749;G;01:56:11.10;+06:44:41.8;Psc;1.06;0.69;150;14.80;;12.05;11.33;11.04;23.54;S0;;;;;;;;2MASX J01561109+0644413,IRAS 01535+0630,MCG +01-06-001,PGC 007235,UGC 01407;;; +IC1750;G;01:56:18.56;+04:04:34.6;Psc;1.02;0.18;64;15.40;;12.10;11.35;10.99;23.78;S0-a;;;;;;;;2MASX J01561856+0404346,PGC 007266,UGC 01412;;; +IC1751;Dup;01:56:21.03;+05:37:44.2;Psc;;;;;;;;;;;;;;;0741;;;;;; +IC1752;G;01:57:15.42;+28:36:48.6;Tri;0.62;0.28;123;16.50;;13.39;12.74;12.39;24.05;;;;;;;;;2MASX J01571543+2836482,MCG +05-05-032,PGC 007337;;The IC number includes the two flanking Galactic foreground stars.; +IC1753;G;01:57:19.31;+28:35:21.3;Tri;0.84;0.57;140;15.00;;12.94;11.95;11.77;23.28;E-S0;;;;;;;;2MASX J01571930+2835212,MCG +05-05-033,PGC 007353;;; +IC1754;G;01:56:49.88;+04:01:32.2;Psc;0.92;0.92;80;15.40;;12.22;11.61;11.34;23.92;;;;;;;;;2MASX J01564993+0401322,PGC 007307,UGC 01424;;; +IC1755;G;01:57:09.79;+14:32:59.6;Ari;1.46;0.37;155;14.70;;11.59;10.85;10.61;23.72;SABa;;;;;;;;2MASX J01570981+1432592,MCG +02-06-005,PGC 007341,SDSS J015709.78+143259.5,SDSS J015709.79+143259.5,SDSS J015709.79+143259.6,SDSS J015709.80+143259.5,UGC 01428;;; +IC1756;G;01:57:05.34;-00:28:05.7;Cet;1.31;0.24;154;15.50;;12.17;11.37;10.97;23.49;Sc;;;;;;;;2MASX J01570524-0028053,IRAS 01545-0042,MCG +00-06-005,PGC 007328,SDSS J015705.33-002805.7,SDSS J015705.34-002806.0,UGC 01429;;; +IC1757;G;01:57:11.36;-00:28:26.3;Cet;0.40;0.24;55;16.89;;13.74;13.04;12.76;23.65;E;;;;;;;;2MASX J01571138-0028262,PGC 174458,SDSS J015711.35-002826.3,SDSS J015711.36-002826.3,SDSS J015711.36-002826.4;;; +IC1758;G;01:56:52.49;-16:32:31.4;Cet;0.56;0.20;50;15.46;;12.40;11.69;11.52;;S0;;;;;;;;2MASX J01565247-1632315,PGC 170024;;; +IC1759;G;01:57:55.36;-32:59:13.4;For;1.47;1.26;11;13.82;;11.20;10.52;10.39;23.35;Sbc;;;;;;;;2MASX J01575535-3259131,ESO 354-018,ESO-LV 354-0180,MCG -06-05-016,PGC 007400;;; +IC1760;G;01:57:24.68;-31:59:18.0;For;0.62;0.41;172;16.67;;;;;23.91;Scd;;;;;;;;ESO 414-015,ESO-LV 414-0150,ESOLV 4140150,PGC 007357;;ESO/Uppsala lists the identification with IC 1760 as doubtful.; +IC1761;G;01:58:52.29;+00:34:05.9;Cet;0.63;0.28;47;15.50;;12.35;11.71;11.56;23.16;S0-a;;;;;;;;2MASX J01585227+0034058,PGC 007484,SDSS J015852.29+003405.8,SDSS J015852.29+003405.9,SDSS J015852.30+003405.8,SDSS J015852.30+003405.9;;; +IC1762;G;01:57:48.64;-33:14:23.3;For;1.69;0.55;43;14.36;;11.73;11.10;10.80;23.23;SBbc;;;;;;;;2MASX J01574863-3314231,ESO 354-017,ESO-LV 354-0170,MCG -06-05-015,PGC 007393;;; +IC1763;G;01:59:11.75;-27:48:38.5;For;1.09;0.92;45;14.70;;12.52;12.21;11.40;23.37;Sbc;;;;;;;;2MASX J01591175-2748385,ESO 414-020,ESO-LV 414-0200,MCG -05-05-025,PGC 007514;;; +IC1764;G;02:00:23.37;+24:34:50.0;Ari;1.20;0.87;10;14.50;;11.71;10.96;10.55;23.45;Sb;;;;;;;;2MASX J02002337+2434500,IRAS 01575+2420,MCG +04-05-033,PGC 007603,SDSS J020023.37+243449.8,UGC 01486;;; +IC1765;Dup;02:01:06.61;+31:52:56.9;Tri;;;;;;;;;;;;;;;0783;;;;;; +IC1766;Dup;02:01:40.00;+31:49:35.4;Tri;;;;;;;;;;;;;;;0785;;;;;; +IC1767;G;01:59:59.38;-11:04:44.3;Cet;1.69;0.56;75;14.50;;11.38;10.71;10.46;24.03;Sa;;;;;;;;2MASX J01595936-1104443,MCG -02-06-012,PGC 007568;;May contribute to IRAS flux of IRAS F01576-1118.; +IC1768;G;02:00:49.87;-25:01:36.1;For;1.45;1.20;47;14.17;;11.17;10.51;10.23;23.84;S0;;;;;;;;2MASX J02004986-2501361,ESO 477-021,ESO-LV 477-0210,MCG -04-05-026,PGC 007636;;; +IC1769;G;02:00:54.92;-31:55:11.2;For;0.93;0.26;76;15.52;;12.59;11.82;11.55;23.23;Sb;;;;;;;;2MASX J02005491-3155111,ESO 414-021,ESO-LV 414-0210,PGC 007645;;; +IC1770;G;02:02:14.39;+09:58:51.4;Psc;1.41;1.36;50;15.40;;11.15;10.50;10.24;24.83;S0;;;;;;;;2MASX J02021436+0958511,MCG +02-06-013,PGC 007751,UGC 01522;;; +IC1771;G;02:02:15.86;+09:58:06.9;Psc;0.75;0.75;175;14.50;;11.81;11.13;10.80;23.48;E-S0;;;;;;;;2MASX J02021585+0958071,MCG +02-06-014,PGC 007737;;; +IC1772;G;02:02:42.93;+07:44:43.9;Psc;0.68;0.68;0;;;;;;;;;;;;;;;MCG +01-06-033,PGC 007781;;; +IC1773;Dup;02:04:02.11;+30:49:58.3;Tri;;;;;;;;;;;;;;;0804;;;;;; +IC1774;G;02:03:59.00;+15:19:05.0;Ari;1.41;0.66;127;15.20;;;;;24.05;SABc;;;;;;;;MCG +02-06-020,PGC 007863,UGC 01559;;; +IC1775;G;02:05:17.54;+13:30:20.6;Ari;0.75;0.67;167;15.52;;12.99;12.24;12.17;23.69;SABa;;;;;;;;2MASX J02051755+1330204,MCG +02-06-023,PGC 007958,SDSS J020517.53+133020.7,SDSS J020517.54+133020.5,SDSS J020517.54+133020.6;;;B-Mag taken from LEDA. +IC1776;G;02:05:15.22;+06:06:24.6;Psc;1.26;1.00;172;14.40;;12.98;12.31;12.15;23.55;Scd;;;;;;;;2MASX J02051524+0606249,MCG +01-06-038,PGC 007952,UGC 01579;;; +IC1777;G;02:06:08.70;+15:12:34.1;Ari;0.91;0.91;130;15.50;;11.54;10.76;10.46;24.08;E;;;;;;;;2MASX J02060874+1512343,MCG +02-06-029,PGC 008021;;; +IC1778;Dup;02:06:19.40;+09:13:38.7;Cet;;;;;;;;;;;;;;;;0199;;;;; +IC1779;G;02:06:25.93;+03:42:21.5;Cet;0.37;0.28;105;15.20;;12.42;11.83;11.44;;;;;;;;;;2MASX J02062594+0342215,PGC 008039;;; +IC1780;G;02:06:51.16;+14:43:18.9;Ari;0.64;0.37;9;15.50;;12.79;12.05;11.78;23.30;S0-a;;;;;;;;2MASX J02065114+1443193,MCG +02-06-032,PGC 008070,SDSS J020651.15+144318.8;;; +IC1781;G;02:06:52.79;-00:31:05.1;Cet;0.68;0.52;126;15.72;;12.96;12.24;12.07;23.53;Sbc;;;;;;;;2MASX J02065277-0031053,PGC 008067,SDSS J020652.79-003105.1,SDSS J020653.01-003059.4,SDSS J020653.01-003059.5,SDSS J020653.01-003059.7;;Multiple SDSS entries describe this object.; +IC1782;Dup;02:07:20.05;-25:26:30.8;For;;;;;;;;;;;;;;;0823;;;;;; +IC1783;G;02:10:06.13;-32:56:23.5;For;1.98;0.80;4;13.30;;10.42;9.77;9.50;22.75;Sb;;;;;;;;2MASX J02100613-3256236,ESO 354-046,ESO-LV 354-0460,IRAS 02079-3310,MCG -06-05-037,PGC 008279;;The APMUKS position is north of the nucleus.; +IC1784;G;02:16:12.79;+32:38:58.2;Tri;1.40;0.74;94;14.50;;11.12;10.35;10.15;23.00;Sbc;;;;;;;;2MASX J02161279+3238583,IRAS 02132+3225,MCG +05-06-019,PGC 008676,UGC 01744;;Position in 1991PNAOJ...2...37T is incorrect.; +IC1785;G;02:16:21.04;+32:39:59.5;Tri;0.81;0.44;146;15.60;;12.12;11.37;11.13;23.78;S0;;;;;;;;2MASX J02162102+3239594,MCG +05-06-021,PGC 008682;;; +IC1786;G;02:16:05.63;+05:08:43.7;Cet;0.66;0.43;154;15.50;;13.05;12.64;11.92;23.50;;;;;;;;;2MASX J02160561+0508436,PGC 008662;;; +IC1787;Dup;02:16:10.44;-11:55:36.2;Cet;;;;;;;;;;;;;;;;0217;;;;; +IC1788;G;02:15:49.96;-31:12:03.6;For;2.53;1.07;28;13.11;12.37;10.27;9.59;9.26;23.16;SBbc;;;;;;;;2MASX J02154997-3112035,ESO 415-015,ESO-LV 415-0150,IRAS 02136-3125,MCG -05-06-011,PGC 008649;;; +IC1789;G;02:17:51.18;+32:23:45.7;Tri;1.95;0.42;30;14.80;;11.08;10.25;9.94;24.20;Sa;;;;;;;;2MASX J02175117+3223454,IRAS 02149+3210,MCG +05-06-024,PGC 008766,UGC 01763;;; +IC1790;G;02:17:37.79;+12:30:32.3;Ari;0.82;0.28;63;15.70;;12.82;12.05;12.09;23.12;Sc;;;;;;;;2MASX J02173778+1230319,MCG +02-06-055,PGC 008752,UGC 01762;;; +IC1791;G;02:17:41.34;+12:28:14.2;Ari;1.09;1.08;95;14.60;;10.72;10.05;9.76;23.49;S0;;;;;;;;2MASX J02174133+1228139,MCG +02-06-056,PGC 008758,UGC 01764;;; +IC1792;G;02:19:01.09;+34:27:44.6;Tri;1.39;0.96;26;14.00;;10.76;10.02;9.72;23.96;Sb;;;;;;;;2MASX J02190111+3427447,MCG +06-06-015,PGC 008839,UGC 01781;;; +IC1793;G;02:21:32.40;+32:32:40.2;Tri;1.28;0.63;36;14.80;;11.24;10.51;10.10;23.59;Sab;;;;;;;;2MASX J02213239+3232400,IRAS 02186+3219,MCG +05-06-027,PGC 008969,UGC 01816;;; +IC1794;G;02:21:30.17;+15:45:41.9;Ari;0.93;0.71;90;15.00;;11.83;11.10;10.91;23.59;S0-a;;;;;;;;2MASX J02213017+1545419,IRAS 02187+1532,MCG +03-07-003,PGC 008963;;; +IC1795;HII;02:26:31.96;+62:02:29.9;Cas;12.00;12.00;;;;;;;;;;;;;;;;LBN 645;;; +IC1796;G;02:22:47.32;-41:22:15.9;Phe;1.07;0.70;86;14.16;;10.84;10.15;9.85;23.10;E-S0;;;;;;;;2MASX J02224730-4122159,ESO 298-038,ESO-LV 298-0380,MCG -07-06-001,PGC 009041;;; +IC1797;G;02:25:27.89;+20:23:43.2;Ari;0.97;0.37;142;15.30;;11.99;11.17;10.84;23.29;SBb;;;;;;;;2MASX J02252787+2023430,IRAS 02226+2010,MCG +03-07-010,PGC 009205,UGC 01880;;; +IC1798;G;02:26:15.51;+13:25:50.8;Ari;0.31;0.21;100;;;;;;;;;;;;;;;2MASX J02261552+1325504;;; +IC1799;G;02:28:45.91;+45:58:14.3;And;0.79;0.37;40;15.00;;11.17;10.50;10.16;22.80;Sc;;;;;;;;2MASX J02284584+4558142,MCG +08-05-012,PGC 009432,UGC 01943;;; +IC1800;Other;02:28:31.16;+31:24:34.8;Tri;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC1801;G;02:28:12.75;+19:35:00.0;Ari;1.18;0.54;30;14.73;13.98;11.52;10.82;10.52;23.27;Sb;;;;;;;;2MASX J02281275+1934599,MCG +03-07-016,PGC 009392,UGC 01936;;; +IC1802;G;02:29:13.98;+23:04:57.7;Ari;0.98;0.79;105;15.00;;10.79;10.04;9.75;23.38;E;;;;;;;;2MASX J02291399+2304579,MCG +04-06-057,PGC 009462;;; +IC1803;G;02:29:49.94;+23:06:30.9;Ari;0.46;0.46;35;15.72;;11.56;10.79;10.54;22.90;E;;;;;;;;2MASX J02294993+2306310,MCG +04-06-058,PGC 009507;;The IC identification is not certain.;B-Mag taken from LEDA. +IC1804;G;02:29:54.42;+23:05:49.5;Ari;0.97;0.86;136;15.70;;11.20;10.50;10.25;24.37;E;;;;;;;;2MASX J02295443+2305490,MCG +04-06-060,PGC 009512;;The IC identification is not certain.; +IC1805;Cl+N;02:32:41.51;+61:27:24.8;Cas;60.00;60.00;;7.03;6.50;;;;;;;;;;;;;LBN 654,MWSC 0209;;; +IC1806;G;02:29:34.95;+22:56:35.6;Ari;0.63;0.47;156;15.59;;11.81;11.00;10.70;23.56;E;;;;;;;;2MASX J02293494+2256351,LEDA 095515;;; +IC1807;G;02:30:31.00;+22:56:59.0;Ari;0.56;0.49;24;15.70;;11.99;11.26;10.91;23.20;E;;;;;;;;2MASX J02303102+2256586,LEDA 095516,MCG +04-06-062,PGC 009547;;; +IC1808;Dup;02:30:31.28;-04:12:55.5;Cet;;;;;;;;;;;;;;;0963;;;;;; +IC1809;G;02:31:40.35;+22:55:01.9;Ari;0.85;0.51;50;15.00;;11.58;10.96;10.54;22.99;SBab;;;;;;;;2MASX J02314035+2255020,IRAS 02288+2241,MCG +04-07-004,PGC 009616,SDSS J023140.35+225502.0,UGC 01996;;; +IC1810;G;02:29:26.83;-43:04:34.8;Eri;1.37;0.97;150;14.19;;11.29;10.64;10.32;23.29;Sab;;;;;;;;2MASX J02292683-4304346,ESO 246-018,ESO-LV 246-0180,MCG -07-06-009,PGC 009477;;; +IC1811;G;02:30:38.19;-34:15:51.0;For;1.15;0.68;7;14.35;;11.56;10.91;10.57;23.12;SBab;;;;;;;;2MASX J02303819-3415508,ESO 355-020,ESO-LV 355-0200,MCG -06-06-008,PGC 009555;;; +IC1812;G;02:29:31.78;-42:48:40.9;Eri;2.08;1.60;35;13.21;;10.22;9.48;9.14;23.67;E;;;;;;;;2MASX J02293177-4248406,ESO 246-019,ESO-LV 246-0190,MCG -07-06-008,PGC 009486;;; +IC1813;G;02:30:49.49;-34:13:15.2;For;1.13;0.75;100;14.20;;11.07;10.36;10.08;23.27;S0-a;;;;;;;;2MASX J02304950-3413155,ESO 355-022,ESO-LV 355-0220,MCG -06-06-009,PGC 009567;;; +IC1814;Dup;02:31:05.79;-36:02:04.8;For;;;;;;;;;;;;;;;0964;;;;;; +IC1815;G;02:34:20.00;+32:25:46.1;Tri;1.35;1.20;123;14.30;;10.60;9.90;9.61;23.74;S0;;;;;;;;2MASX J02342001+3225460,MCG +05-07-014,PGC 009794,UGC 02047;;; +IC1816;G;02:31:51.00;-36:40:19.4;For;1.26;1.22;125;13.86;14.26;10.88;10.19;9.91;23.01;SBab;;;;;;;;2MASX J02315100-3640192,ESO 355-025,ESO-LV 355-0250,IRAS 02297-3653,MCG -06-06-011,PGC 009634;;Called a Seyfert 2 by de Grijp, et al (1992, A&AS, 96, 389).; +IC1817;GPair;02:33:50.20;+11:12:12.0;Ari;0.90;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1817 NED01;G;02:33:49.60;+11:12:11.9;Ari;0.49;0.25;12;14.90;;;;;23.03;Sd;;;;;;;;MCG +02-07-014,PGC 009757;;; +IC1817 NED02;G;02:33:50.78;+11:12:12.6;Ari;0.67;0.43;161;15.50;;12.39;11.62;11.43;22.96;Sc;;;;;;;;2MASX J02335077+1112128,IRAS 02311+1059,MCG +02-07-015,PGC 009764;;; +IC1818;G;02:34:07.14;-11:02:26.7;Cet;0.83;0.71;78;15.11;;11.94;11.20;10.78;23.69;E;;;;;;;;2MASX J02340713-1102261,LEDA 970700;;; +IC1819;G;02:35:41.83;+04:03:06.5;Cet;2.01;0.62;25;15.00;;11.53;10.80;10.54;25.33;E;;;;;;;;2MASX J02354182+0403063,PGC 009858;;; +IC1820;G;02:35:52.67;+06:02:26.2;Cet;0.53;0.28;65;15.40;;12.70;12.03;11.64;;;;;;;;;;2MASX J02355267+0602263,PGC 009866;;; +IC1821;GPair;02:36:26.13;+13:46:46.4;Ari;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1821 NED01;G;02:36:25.41;+13:46:48.6;Ari;0.70;0.30;45;15.40;;12.63;11.94;11.65;;;;;;;;;;2MASXJ02362546+1346496,IRAS 02336+1333,PGC 009898;;; +IC1821 NED02;G;02:36:26.70;+13:46:44.1;Ari;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC1822;*;02:35:42.35;-08:33:46.1;Cet;;;;;;;;;;;;;;;;;;SDSS J023542.35-083346.0;;; +IC1823;G;02:38:36.98;+32:04:10.9;Tri;1.38;0.83;78;14.80;;11.24;10.54;10.59;24.05;Sc;;;;;;;;2MASX J02383701+3204111,IRAS 02356+3151,MCG +05-07-024,PGC 010013,UGC 02125;;; +IC1824;Dup;02:42:35.06;+61:35:39.7;Cas;;;;;;;;;;;;;;;1027;;;;;; +IC1825;G;02:38:55.63;+09:05:50.5;Cet;1.15;0.79;22;14.90;;11.58;10.91;10.46;23.56;Sc;;;;;;;;2MASX J02385563+0905504,IRAS 02362+0853,PGC 010031,UGC 02138;;; +IC1826;G;02:39:03.55;-27:26:35.3;For;2.06;1.81;107;12.86;;10.82;10.16;10.03;23.46;S0-a;;;;;;1830;;2MASX J02390354-2726351,ESO 416-006,ESO-LV 416-0060,IRAS 02368-2739,MCG -05-07-012,PGC 010041,UGCA 037;;; +IC1827;G;02:39:46.46;+01:33:29.8;Cet;1.09;0.23;154;14.50;;11.25;10.54;10.34;22.98;Sa;;;;;;;;2MASX J02394646+0133297,LEDA 175363,MCG +00-07-075,PGC 010087,UGC 02152;;; +IC1828;Dup;02:40:28.99;+19:17:49.6;Ari;;;;;;;;;;;;;;;1036;;;;;; +IC1829;G;02:40:32.79;+14:17:52.6;Ari;0.94;0.73;26;15.70;;11.92;11.11;10.90;24.46;E;;;;;;;;2MASX J02403277+1417523,PGC 010131;;+5 degree error in IC declination.; +IC1830;Dup;02:39:03.55;-27:26:35.3;For;;;;;;;;;;;;;;;;1826;;;;; +IC1831;Neb;02:43:56.40;+62:24:41.9;Cas;120.23;;;;;;;;;;;;;;;;;;;The IC identification is very uncertain.;Dimensions taken from LEDA +IC1832;G;02:41:57.66;+19:01:48.3;Ari;0.74;0.69;140;15.10;;11.64;10.95;10.65;23.26;S0;;;;;;;;2MASX J02415767+1901486,MCG +03-07-045,PGC 010216;;; +IC1833;G;02:41:38.70;-28:10:16.6;For;1.43;0.74;64;14.10;;11.23;10.64;10.31;23.62;S0;;;;;;;;2MASX J02413870-2810165,ESO 416-007,ESO-LV 416-0070,MCG -05-07-013,PGC 010205;;; +IC1834;G;02:42:48.09;+03:05:03.0;Cet;0.69;0.61;16;15.20;;11.89;11.27;10.91;23.15;Sb;;;;;;;;2MASX J02424807+0305030,MCG +00-07-085,PGC 010267,UGC 02189;;; +IC1835;GGroup;02:43:49.15;+14:53:22.5;Ari;0.72;0.58;28;;;;;;23.82;E;;;;;;;;2MASX J02434911+1453222,PGC 010342;;; +IC1836;G;02:43:23.46;+03:06:19.4;Cet;0.63;0.50;42;15.60;;13.74;13.07;12.76;23.64;;;;;;;;;2MASX J02432344+0306194,MCG +00-07-087,PGC 010306;;; +IC1837;Dup;02:43:31.31;+00:18:24.5;Cet;;;;;;;;;;;;;;;1072;;;;;; +IC1838;G;02:44:42.99;+19:27:18.4;Ari;0.64;0.23;175;15.20;;12.23;11.44;11.24;22.08;Sc;;;;;;;;2MASX J02444299+1927181,MCG +03-08-002,PGC 010389;;; +IC1839;G;02:44:42.91;+15:14:24.3;Ari;0.97;0.40;96;15.30;;12.44;11.78;11.51;23.27;Sbc;;;;;;;;2MASX J02444291+1514242,MCG +02-08-001,PGC 010394,UGC 02220;;; +IC1840;Dup;02:43:41.98;-15:42:20.1;Cet;;;;;;;;;;;;;;;1105;;;;;; +IC1841;G;02:45:36.23;+18:55:44.1;Ari;0.64;0.48;50;15.10;;12.38;11.62;11.24;22.96;SBb;;;;;;;;2MASX J02453623+1855442,IRAS 02427+1843,PGC 010442;;; +IC1842;G;02:45:23.42;+11:27:29.2;Ari;1.07;0.30;20;15.70;;12.09;11.16;10.89;23.96;Sa;;;;;;;;2MASX J02452340+1127290,PGC 010428;;; +IC1843;G;02:45:24.62;+02:52:49.9;Cet;1.04;0.63;74;14.20;;11.89;11.22;11.02;22.89;SBab;;;;;;;;2MASX J02452461+0252501,IRAS 02428+0240,MCG +00-08-004,PGC 010429,UGC 02228;;; +IC1844;G;02:45:49.40;+03:13:49.1;Cet;0.94;0.37;97;15.00;;12.21;11.61;11.30;22.96;Sbc;;;;;;;;2MASX J02454932+0313517,IRAS 02432+0301,MCG +00-08-007,PGC 010448,SDSS J024549.32+031351.1;;; +IC1845;**;02:43:56.90;-27:58:08.1;For;;;;10.78;10.17;9.20;8.94;8.88;;;;;;;;;;;;;Formed by TYC 6436-1141-1 + UCAC2 20301045. Magnitudes referred to TYC 6436-1141-1 only. +IC1846;Dup;02:47:43.58;+13:15:19.2;Ari;;;;;;;;;;;;;;;1109;;;;;; +IC1847;G;02:47:53.67;+14:30:18.4;Ari;0.56;0.47;131;15.70;;13.00;12.36;11.95;23.39;;;;;;;;;2MASX J02475365+1430188,PGC 010580;;; +IC1848;Cl+N;02:51:10.59;+60:24:08.9;Cas;40.00;10.00;;6.87;6.50;;;;;;;;;;;;;LBN 667,MWSC 0236;;Immersed in nebulosity.; +IC1849;G;02:47:44.63;+09:21:24.5;Cet;0.83;0.46;90;15.50;;11.05;10.38;9.98;23.75;E-S0;;;;;;;;2MASX J02474463+0921244,MCG +01-08-002,PGC 010582;;; +IC1850;Dup;02:48:39.35;+13:15:34.3;Ari;;;;;;;;;;;;;;;1111;;;;;; +IC1851;*;02:51:45.92;+58:18:51.5;Cas;;;;6.56;6.44;6.21;6.17;6.13;;;;;;;;;;2MASS J02514588+5818514,BD +57 0651,HD 017581,HIP 013347,IDS 02443+5754 A,TYC 3712-1696-1,WDS J02518+5819A;;;Spectroscopic binary. +IC1852;Dup;02:49:00.37;+13:13:25.5;Ari;;;;;;;;;;;;;;;1112;;;;;; +IC1853;G;02:48:04.27;-13:59:35.2;Eri;1.39;0.39;94;14.93;;12.47;11.82;11.70;23.54;SBb;;;;;;;;2MASX J02480427-1359352,MCG -02-08-006,PGC 010595;;;B-Mag taken from LEDA. +IC1854;G;02:49:20.72;+19:18:14.1;Ari;0.52;0.43;154;15.86;14.81;12.10;11.30;11.01;22.71;S0;;;;;;;;2MASX J02492066+1918143,PGC 010684;;; +IC1855;G;02:49:04.31;+13:26:34.4;Ari;0.45;0.31;40;16.27;;12.53;11.79;11.68;23.23;S0-a;;;;;;;;2MASX J02490431+1326347,PGC 1431167;;;B-Mag taken from LEDA. +IC1856;G;02:48:50.80;-00:46:02.6;Cet;1.14;0.51;56;14.50;;11.47;10.82;10.51;23.03;Sab;;;;;;;;2MASX J02485079-0046029,IRAS 02463-0058,MCG +00-08-021,PGC 010647,SDSS J024850.79-004602.5,SDSS J024850.79-004602.6,SDSS J024850.80-004602.6,UGC 02291;;; +IC1857;G;02:49:38.92;+14:37:11.3;Ari;0.79;0.43;149;15.10;;12.30;11.70;11.24;22.97;Sab;;;;;;;;2MASX J02493891+1437113,MCG +02-08-013,PGC 010715,UGC 02312;;; +IC1858;G;02:49:08.41;-31:17:22.5;For;1.88;0.86;174;14.15;;11.18;10.44;10.16;24.22;S0-a;;;;;;;;2MASX J02490842-3117231,ESO 416-029,ESO-LV 416-0290,MCG -05-07-033,PGC 010671;;; +IC1859;G;02:49:03.92;-31:10:21.0;For;1.30;0.85;15;14.27;;11.05;10.61;10.27;23.24;SBbc;;;;;;;;2MASX J02490389-3110211,ESO 416-028,ESO-LV 416-0280,IRAS 02469-3122,MCG -05-07-032,PGC 010665;;; +IC1860;G;02:49:33.71;-31:11:20.8;For;2.64;1.80;4;13.00;;10.21;9.61;9.26;24.58;E;;;;;;;;2MASX J02493387-3111219,ESO 416-031,ESO-LV 416-0310,MCG -05-07-035,PGC 010707;;; +IC1861;G;02:53:06.98;+25:29:25.4;Ari;1.28;0.80;150;14.70;;10.97;10.29;9.97;23.78;S0;;;;;;;;2MASX J02530696+2529252,MCG +04-07-028,PGC 010905,UGC 02357;;; +IC1862;G;02:51:58.80;-33:20:24.6;For;2.67;0.59;4;14.49;;11.11;10.38;9.94;24.32;Sbc;;;;;;;;ESO 356-015,ESO-LV 356-0150,IRAS 02499-3332,MCG -06-07-010,PGC 010858;;; +IC1863;G;02:54:50.74;+08:47:03.8;Cet;0.60;0.60;180;15.70;;11.82;11.06;10.81;23.36;S0;;;;;;;;2MASX J02545071+0847038,MCG +01-08-015,PGC 010997;;; +IC1864;G;02:53:39.31;-34:11:51.5;For;1.30;0.76;63;13.66;;10.57;9.91;9.64;23.11;E;;;;;;;;2MASX J02533933-3411515,ESO 356-017,ESO-LV 356-0170,MCG -06-07-011,PGC 010925;;; +IC1865;G;02:55:20.18;+08:49:41.4;Cet;1.30;1.01;91;15.00;;11.42;10.69;10.30;24.04;Sbc;;;;;;;;2MASX J02552017+0849412,MCG +01-08-017,PGC 011035,UGC 02391;;; +IC1866;G;02:54:52.99;-15:39:09.2;Eri;1.01;0.81;84;15.22;;11.42;10.58;10.40;23.81;E-S0;;;;;;;;2MASX J02545299-1539094,MCG -03-08-044,PGC 010992;;;B-Mag taken from LEDA. +IC1867;G;02:55:52.23;+09:18:42.6;Cet;1.52;1.17;17;15.00;;10.79;10.05;9.63;24.66;;;;;;;;;2MASX J02555226+0918423,MCG +01-08-019,PGC 011070,UGC 02400;;; +IC1868;G;02:56:05.85;+09:22:43.8;Cet;0.40;0.36;35;15.86;;12.29;11.34;11.06;;;;;;;;;;2MASX J02560584+0922433,PGC 3091399;;;B-Mag taken from LEDA. +IC1869;G;02:58:11.69;+05:50:11.7;Cet;0.70;0.27;124;15.60;;12.00;11.18;10.90;23.45;S0;;;;;;;;2MASX J02581169+0550119,PGC 011224;;; +IC1870;G;02:57:53.53;-02:20:49.5;Eri;1.55;0.90;133;12.70;;12.22;11.83;11.01;23.05;Sm;;;;;;;;2MASX J02575353-0220496,IRAS 02553-0232,MCG -01-08-020,PGC 011202,UGCA 046;;The position in 1996AJ....111..865D is for the southeastern end of the galaxy.; +IC1871;HII;02:57:21.79;+60:40:20.5;Cas;4.00;4.00;;;;;;;;;;;;;;;;LBN 675;;; +IC1872;Other;03:04:34.61;+42:48:38.4;Per;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +IC1873;G;03:03:52.88;+09:36:47.7;Cet;1.17;0.46;26;15.30;;11.13;10.34;9.95;24.17;S0-a;;;;;;;;2MASX J03035282+0936479,MCG +01-08-039,PGC 011541;;; +IC1874;G;03:06:21.98;+36:00:52.3;Per;0.94;0.66;85;14.80;;11.00;10.25;9.99;23.24;S0-a;;;;;;;;2MASX J03062196+3600523,IRAS 03032+3549,MCG +06-07-039,PGC 011652;;; +IC1875;G;03:03:56.64;-39:26:25.5;For;1.57;0.87;19;13.89;;10.97;10.29;10.09;23.12;E-S0;;;;;;;;2MASX J03035662-3926254,ESO 300-006,ESO-LV 300-0060,MCG -07-07-002,PGC 011549;;; +IC1876;G;03:04:32.29;-27:27:37.8;For;1.16;1.12;7;14.31;;11.55;10.88;10.51;23.49;S0;;;;;;;;2MASX J03043228-2727380,ESO 417-013,ESO-LV 417-0130,MCG -05-08-013,PGC 011577;;; +IC1877;G;03:03:09.58;-50:30:42.9;Hor;0.90;0.20;153;16.30;;;;;23.77;Sb;;;;;;;;ESO 199-011,ESO-LV 199-0110,PGC 011495;;; +IC1878;G;03:03:40.20;-52:06:28.9;Hor;0.58;0.39;180;15.96;;12.99;12.58;11.88;22.93;;;;;;;;;2MASX J03034020-5206290,ESO 199-013,ESO-LV 199-0130,PGC 011528;;; +IC1879;G;03:03:52.45;-52:07:03.9;Hor;1.21;0.23;137;15.95;;12.50;11.80;11.51;23.77;Sc;;;;;;;;2MASX J03035246-5207040,ESO 199-014,ESO-LV 199-0140,PGC 011542;;; +IC1880;G;03:06:28.62;-09:43:53.3;Eri;1.85;1.09;34;14.86;;10.84;10.14;9.88;24.68;E-S0;;;;;;;;2MASX J03062848-0943518,MCG -02-08-049,PGC 011656;;;B-Mag taken from LEDA. +IC1881;Dup;03:09:17.31;+38:38:58.0;Per;;;;;;;;;;;;;;;1213;;;;;; +IC1882;G;03:07:49.30;+03:08:52.4;Cet;1.14;0.39;22;15.10;;11.57;10.81;10.48;23.28;Sb;;;;;;;;2MASX J03074931+0308525,MCG +00-09-002,PGC 011718,UGC 02551;;; +IC1883;Dup;03:09:42.23;+40:53:35.1;Per;;;;;;;;;;;;;;;1212;;;;;; +IC1884;Dup;03:09:42.74;+40:58:27.2;Per;;;;;;;;;;;;;;;;0290;;;;; +IC1885;G;03:06:40.43;-32:51:49.1;For;1.45;0.46;137;14.87;;12.52;11.97;11.88;23.44;Sc;;;;;;;;2MASX J03064031-3251477,ESO 357-003,ESO-LV 357-0030,PGC 011665;;; +IC1886;G;03:08:03.24;-04:23:59.4;Eri;1.11;0.88;1;15.50;;11.26;10.56;10.34;23.78;S0;;;;;;;;2MASX J03080326-0423593,MCG -01-09-001,PGC 011724;;; +IC1887;Dup;03:10:12.92;+40:45:56.4;Per;;;;;;;;;;;;;;;;0292;;;;; +IC1888;Dup;03:10:56.16;+41:08:13.6;Per;;;;;;;;;;;;;;;;0293;;;;; +IC1889;Dup;03:11:03.11;+40:37:19.6;Per;;;;;;;;;;;;;;;;0294;;;;; +IC1890;G;03:09:58.43;+19:12:29.0;Ari;1.02;1.02;150;15.60;;11.02;10.24;9.95;24.43;S0;;;;;;;;2MASX J03095845+1912293,MCG +03-09-004,PGC 011837;;87GB source with large sky, narrow minor axis, or very bad confusion.; +IC1891;G;03:10:12.02;+19:36:23.6;Ari;0.44;0.34;44;16.61;;;;;23.55;;;;;;;;;2MASX J03101202+1936233,PGC 1598762;;;B-Mag taken from LEDA. +IC1892;GPair;03:08:27.80;-23:03:16.0;Eri;2.00;;;;;;;;;;;;;;;;;MCG -04-08-030,UGCA 055;;Part of the GGroup Arp 332.;Diameter of the group inferred by the author. +IC1892 NED01;G;03:08:27.23;-23:03:20.8;Eri;1.78;0.98;12;13.80;;13.47;12.77;12.96;23.29;SBd;;;;;;;;2MASX J03082723-2303207,ESO 480-036,ESO-LV 480-0360,MCG -04-08-030 NED01,PGC 011750,UGCA 055 NED01;;; +IC1892 NED02;G;03:08:28.35;-23:03:17.8;Eri;;;;;;;;;;;;;;;;;;MCG -04-08-030 NED02,UGCA 055 NED02;;;No data available in LEDA +IC1893;G;03:10:16.57;+19:37:00.7;Ari;0.39;0.25;54;17.13;;;;;23.78;S0-a;;;;;;;;2MASX J03101655+1937003,PGC 1599154;;;B-Mag taken from LEDA. +IC1894;G;03:10:25.47;+19:36:23.8;Ari;0.78;0.52;3;15.60;;11.89;11.18;10.85;23.91;S0;;;;;;;;2MASX J03102544+1936235,PGC 011857;;; +IC1895;G;03:09:36.22;-25:15:12.9;For;1.40;1.05;164;13.95;;11.18;10.56;10.28;23.61;S0-a;;;;;;;;2MASX J03093622-2515129,ESO 481-001,ESO-LV 481-0010,MCG -04-08-033,PGC 011807;;; +IC1896;G;03:07:52.52;-54:12:52.1;Hor;0.81;0.31;18;15.80;;;;;23.51;Sab;;;;;;;;ESO 155-004,ESO-LV 155-0040,PGC 011722;;; +IC1897;G;03:10:45.93;-10:47:45.8;Eri;0.99;0.57;31;14.67;;12.13;11.48;11.19;23.35;S0-a;;;;;;;;2MASX J03104591-1047464,IRAS 03083-1059,MCG -02-09-009,PGC 011866;;;B-Mag taken from LEDA. +IC1898;G;03:10:19.79;-22:24:17.5;Eri;3.66;0.65;73;13.58;;11.02;10.35;10.04;23.70;SBc;;;;;;;;2MASX J03101907-2224216,ESO 481-002,ESO-LV 481-0020,IRAS 03081-2235,MCG -04-08-036,PGC 011851,UGCA 056;;; +IC1899;G;03:12:13.11;-25:18:17.7;For;1.32;0.39;161;14.30;;11.74;10.99;10.70;23.50;S0-a;;;;;;;;2MASX J03121312-2518175,ESO 481-008,ESO-LV 481-0080,IRAS 03100-2529,MCG -04-08-041,PGC 011930;;; +IC1900;G;03:15:55.23;+37:09:14.8;Per;0.83;0.65;92;14.87;13.86;11.33;10.58;10.28;23.29;S0;;;;;;;;2MASX J03155518+3709142,MCG +06-08-007,PGC 012124;;; +IC1901;G;03:16:02.61;+37:06:44.8;Per;0.91;0.27;164;17.46;16.76;11.57;10.77;10.46;23.69;S0-a;;;;;;;;2MASX J03160262+3706452,MCG +06-08-008,PGC 012136;;; +IC1902;G;03:16:12.42;+37:10:38.8;Per;0.69;0.43;67;15.70;;12.05;11.30;11.16;23.57;S0-a;;;;;;;;2MASX J03161242+3710387,PGC 012150;;; +IC1903;GPair;03:13:10.35;-50:34:11.4;Hor;1.90;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1903 NED01;G;03:13:08.56;-50:33:45.4;Hor;0.48;0.15;60;17.46;;;;;24.34;S0-a;;;;;;;;ESO-LV 199-0241,PGC 011986;;; +IC1903 NED02;G;03:13:12.55;-50:34:39.9;Hor;0.65;0.23;0;16.60;;;;;24.30;E-S0;;;;;;;;2MASX J03131256-5034402,PGC 011990;;;B-Mag taken from LEDA. +IC1904;G;03:15:00.77;-30:42:28.9;For;1.37;0.61;102;14.41;;11.36;10.64;10.29;23.35;SBab;;;;;;;;2MASX J03150078-3042289,ESO 417-022,ESO-LV 417-0220,IRAS 03129-3053,MCG -05-08-024,PGC 012079;;; +IC1905;Other;03:18:48.00;+41:21:55.6;Per;;;;;;;;;;;;;;;;;;;;Galactic triple star. Another nearby star may also be part of IC 1905.; +IC1906;G;03:16:05.65;-34:21:38.3;For;1.21;0.51;64;14.47;;11.87;11.19;10.86;22.95;SBbc;;;;;;;;2MASX J03160565-3421385,ESO 357-011,ESO-LV 357-0110,IRAS 03141-3432,MCG -06-08-001,PGC 012138;;; +IC1907;Dup;03:19:54.15;+41:33:48.2;Per;;;;;;;;;;;;;;;1278;;;;;; +IC1908;G;03:15:05.30;-54:49:11.9;Hor;1.23;0.68;68;14.53;;12.14;11.51;11.03;23.57;SBb;;;;;;;;ESO 155-013,ESO-LV 155-0130,IRAS 03137-5500,PGC 012085;;; +IC1909;G;03:17:20.02;-33:41:24.2;For;1.25;0.68;60;14.48;;11.53;10.91;10.64;23.27;SBb;;;;;;;;2MASX J03172000-3341240,ESO 357-014,ESO-LV 357-0140,MCG -06-08-003,PGC 012212;;; +IC1910;Other;03:17:57.79;-21:26:05.1;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the original Harvard plate."; +IC1911;*;03:20:49.18;+35:19:18.5;Per;;;;;;;;;;;;;;;;;;;;The IC identification is very uncertain.; +IC1912;G;03:16:43.43;-50:39:17.6;Hor;1.05;0.21;6;15.82;;13.71;12.47;12.49;23.38;Sc;;;;;;;;2MASX J03164331-5039258,ESO 200-001,ESO-LV 200-0010,IRAS 03151-5050,PGC 012172;;; +IC1913;G;03:19:34.54;-32:27:54.1;For;1.96;0.41;149;14.38;;12.27;11.65;11.41;23.53;SBb;;;;;;;;ESO 357-016,ESO-LV 357-0160,MCG -05-08-027,PGC 012404;;; +IC1914;G;03:19:25.24;-49:35:59.0;Hor;1.95;1.45;112;13.28;;13.42;12.68;12.70;23.39;SABc;;;;;;;;2MASX J03192525-4935592,ESO 200-003,ESO-LV 200-0030,PGC 012390;;; +IC1915;G;03:19:51.95;-50:41:28.3;Hor;0.61;0.52;29;16.16;;14.04;12.99;12.90;23.61;SBc;;;;;;;;2MASX J03195195-5041283,ESO 200-005,ESO-LV 200-0050,PGC 012435;;; +IC1916;G;03:20:16.52;-49:02:30.9;Hor;0.86;0.55;81;15.39;;12.29;11.59;11.20;23.36;SBc;;;;;;;;2MASX J03201652-4902308,ESO 200-008,ESO-LV 200-0080,PGC 012482;;; +IC1917;G;03:22:12.36;-53:11:06.7;Hor;0.83;0.47;12;15.99;;12.72;11.98;11.89;24.36;S0-a;;;;;;;;2MASX J03221231-5311066,2MASX J03221362-5310547,LEDA 100539;;"Brightest in a cluster; several nearby companions."; +IC1918;G;03:26:17.89;+04:32:27.7;Tau;0.60;0.20;150;15.20;;12.41;11.75;11.35;;Sb;;;;;;;;2MASX J03261793+0432277,PGC 012834;;; +IC1919;G;03:26:02.24;-32:53:40.4;For;1.73;1.08;84;13.78;;11.28;10.72;10.76;23.69;E-S0;;;;;;;;2MASX J03260225-3253405,ESO 358-001,ESO-LV 358-0010,MCG -06-08-015,PGC 012825;;; +IC1920;G;03:24:24.40;-52:42:48.9;Hor;0.56;0.41;148;16.41;;14.06;13.40;13.24;23.44;S0-a;;;;;;;;2MASX J03242439-5242489,LEDA 074394;;The IC identification is not certain.; +IC1921;Other;03:24:42.11;-50:41:52.8;Hor;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing here."; +IC1922;G;03:24:43.03;-50:44:25.9;Hor;0.41;0.28;31;16.89;;14.50;14.07;13.35;23.31;Sbc;;;;;;;;2MASX J03244303-5044261,ESO 200-013,ESO-LV 200-0130,PGC 012749;;; +IC1923;GPair;03:24:52.64;-50:33:21.0;Hor;0.60;;;;;;;;;;;;;;;;;;;The western component may be a Galactic star.;Diameter of the group inferred by the author. +IC1923 NED01;G;03:24:52.91;-50:33:20.0;Hor;0.30;0.19;91;17.60;;;;;23.69;;;;;;;;;2MASS J03245305-5033196,PGC 465294;;;B-Mag taken from LEDA. +IC1923 NED02;G;03:24:51.77;-50:33:20.5;Hor;;;;;;;;;;;;;;;;;;;;This may be a Galactic star.;No data available in LEDA +IC1924;G;03:25:07.67;-51:42:12.4;Hor;0.74;0.30;76;16.68;;;;;23.99;Sbc;;;;;;;;ESO 200-017,ESO-LV 200-0170,PGC 012781;;; +IC1925;Other;03:25:15.69;-51:15:24.8;Hor;;;;;;;;;;;;;;;;;;;;This IC number may apply to the galaxy IC 1929.; +IC1926;G;03:25:19.03;-51:42:03.8;Hor;0.55;0.21;81;16.58;;13.84;13.41;12.89;23.23;Sbc;;;;;;;;2MASX J03251901-5142037,ESO 200-020,ESO-LV 200-0200,PGC 012790;;; +IC1927;**;03:25:19.69;-51:43:10.0;Hor;;;;;;;;;;;;;;;;;;;;Identification as IC 1927 is uncertain.; +IC1928;G;03:27:29.18;-21:33:36.6;Eri;1.77;0.46;30;14.09;;10.96;10.25;9.95;23.36;Sab;;;;;;;;2MASX J03272918-2133367,ESO 548-020,ESO-LV 548-0200,MCG -04-09-013,PGC 012884;;; +IC1929;G;03:25:25.85;-51:16:01.9;Hor;0.94;0.59;139;14.88;;12.04;11.39;11.01;23.19;SBab;;;;;;;;2MASX J03252584-5116017,ESO 200-021,ESO-LV 200-0210,PGC 012799;;; +IC1930;G;03:28:46.26;+04:23:00.8;Tau;0.76;0.62;14;15.81;;12.19;11.24;10.97;24.07;E;;;;;;;;2MASX J03284626+0423007,PGC 1267477;;;B-Mag taken from LEDA. +IC1931;G;03:28:57.72;+01:45:02.6;Tau;0.80;0.76;78;15.50;;12.37;11.55;11.71;23.77;;;;;;;;;2MASX J03285772+0145026,MCG +00-09-087,PGC 012950;;; +IC1932;G;03:25:54.03;-51:20:35.4;Hor;0.94;0.41;15;15.38;;12.50;11.62;10.54;23.98;S0;;;;;;;;2MASX J03255402-5120355,ESO 200-022,ESO-LV 200-0220,PGC 012817;;; +IC1933;G;03:25:39.89;-52:47:07.8;Hor;2.27;1.21;54;12.91;;10.97;10.33;10.20;22.90;Sc;;;;;;;;2MASX J03253988-5247077,ESO 155-025,ESO-LV 155-0250,IRAS 03242-5257,PGC 012807;;; +IC1934;G;03:31:14.02;+42:47:32.2;Per;0.99;0.51;135;16.00;;11.42;10.70;10.40;24.30;S0;;;;;;;;2MASX J03311401+4247319,PGC 013080,UGC 02769;;; +IC1935;G;03:26:13.30;-50:00:37.6;Hor;1.00;0.71;67;14.36;;12.93;12.42;11.83;23.08;Sc;;;;;;;;2MASX J03261329-5000376,ESO 200-023,ESO-LV 200-0230,PGC 012833;;; +IC1936;G;03:26:28.04;-51:19:23.5;Hor;0.64;0.30;146;16.03;;13.03;12.25;11.96;23.19;Sc;;;;;;;;2MASX J03262806-5119235,ESO 200-024,ESO-LV 200-0240,PGC 012847;;; +IC1937;G;03:26:47.64;-48:42:09.2;Hor;0.89;0.54;58;14.88;;13.03;12.75;12.20;22.90;Sc;;;;;;;;2MASX J03264771-4842094,ESO 200-025,ESO-LV 200-0250,PGC 012856;;A-M +1m RA error.; +IC1938;G;03:27:10.44;-53:00:35.6;Hor;0.82;0.61;82;15.50;;13.80;13.84;13.33;23.61;Sb;;;;;;;;2MASX J03271046-5300354,ESO 155-032,ESO-LV 155-0320,PGC 012874,TYC 8493-977-1;;; +IC1939;Other;03:27:44.57;-51:04:15.3;Hor;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the Harvard plate."; +IC1940;G;03:27:42.34;-52:08:22.0;Hor;0.96;0.87;37;14.77;;11.78;11.16;10.84;23.29;Sab;;;;;;;;2MASX J03274235-5208220,ESO 200-026,ESO-LV 200-0260,PGC 012896;;; +IC1941;Other;03:32:14.94;+24:23:01.4;Tau;;;;;;;;;;;;;;;;;;;;Line of three or four stars.; +IC1942;GPair;03:27:53.30;-52:40:37.0;Hor;0.70;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1942 NED01;G;03:27:52.75;-52:40:38.9;Hor;0.39;0.12;179;17.28;;;;;23.37;E;;;;;;;;PGC 012907;;;B-Mag taken from LEDA. +IC1942 NED02;G;03:27:53.91;-52:40:32.9;Hor;0.89;0.69;10;15.36;;11.74;11.02;10.62;23.92;E;;;;;;;;2MASX J03275389-5240329,ESO 155-034,ESO-LV 155-0340,PGC 012908;;; +IC1943;Dup;03:38:44.87;-44:06:02.2;Hor;;;;;;;;;;;;;;;1411;;;;;; +IC1944;G;03:29:40.00;-47:59:46.2;Hor;0.50;0.36;15;15.74;;13.40;12.93;12.65;22.72;Sc;;;;;;;;2MASX J03293999-4759461,ESO 200-028,ESO-LV 200-0280,PGC 012987;;; +IC1945;G;03:29:16.56;-52:37:37.8;Hor;0.81;0.26;127;16.00;;12.81;12.07;11.84;24.45;S0-a;;;;;;;;2MASX J03291659-5237384,ESO 155-038,ESO-LV 155-0380,PGC 012970;;; +IC1946;G;03:29:22.19;-52:37:09.6;Hor;0.91;0.45;64;15.30;;12.04;11.42;10.99;23.68;S0-a;;;;;;;;2MASX J03292219-5237094,ESO 155-039,ESO-LV 155-0390,PGC 012972;;; +IC1947;G;03:30:32.82;-50:20:18.7;Hor;0.58;0.49;131;15.50;;12.76;12.04;11.77;22.89;Sc;;;;;;;;2MASX J03303282-5020186,ESO 200-030,ESO-LV 200-0300,PGC 013027;;; +IC1948;G;03:30:50.05;-47:57:53.5;Hor;0.83;0.64;162;15.53;;13.93;13.06;13.12;23.75;Sb;;;;;;;;2MASX J03305004-4757533,ESO 200-032,ESO-LV 200-0320,PGC 013045;;; +IC1949;G;03:30:52.82;-47:58:45.3;Hor;1.18;0.87;16;13.85;;11.55;10.79;10.50;22.57;SBc;;;;;;;;2MASX J03305283-4758453,ESO 200-033,ESO-LV 200-0330,IRAS 03293-4808,PGC 013047;;; +IC1950;G;03:31:04.52;-50:26:00.3;Hor;1.56;0.42;153;14.93;;12.28;11.53;11.16;23.70;Sc;;;;;;;;2MASX J03310449-5026004,ESO 200-035,ESO-LV 200-0350,IRAS 03295-5036,PGC 013053;;; +IC1951;G;03:30:56.33;-53:07:34.3;Hor;0.54;0.16;56;17.12;;14.21;13.60;13.11;23.54;Sbc;;;;;;;;2MASX J03305634-5307343,ESO 155-043,ESO-LV 155-0430,PGC 013048;;; +IC1952;G;03:33:26.67;-23:42:46.0;Eri;2.58;0.55;140;13.57;;10.82;10.13;9.87;23.18;SBbc;;;;;;;;2MASX J03332668-2342460,ESO 482-008,ESO-LV 482-0080,IRAS 03312-2352,MCG -04-09-025,PGC 013171;;; +IC1953;G;03:33:41.87;-21:28:43.1;Eri;2.26;1.19;125;12.41;;10.53;9.72;9.65;22.36;Sc;;;;;;;;2MASX J03334188-2128430,ESO 548-038,ESO-LV 548-0380,IRAS 03314-2138,MCG -04-09-026,PGC 013184,UGCA 078;;; +IC1954;G;03:31:31.39;-51:54:17.4;Hor;2.99;1.71;60;12.14;;9.65;9.01;8.75;22.84;Sb;;;;;;;;2MASX J03313139-5154175,ESO 200-036,ESO-LV 200-0360,IRAS 03300-5204,PGC 013090;;The APM position is southwest of the nucleus.; +IC1955;G;03:31:24.68;-57:14:30.7;Ret;0.68;0.55;176;15.76;;13.91;13.22;13.07;23.48;Sbc;;;;;;;;2MASX J03312472-5714305,ESO 155-045,ESO-LV 155-0450,PGC 013086;;; +IC1956;G;03:35:33.17;+05:04:01.2;Tau;1.32;0.47;33;15.60;;11.82;10.91;10.62;24.06;Sbc;;;;;;;;2MASX J03353316+0504013,IRAS 03329+0454,MCG +01-10-001,PGC 013279,SDSS J033533.14+050401.4,UGC 02795;;; +IC1957;G;03:32:13.48;-52:27:23.9;Hor;1.02;0.18;33;16.53;;12.85;11.98;11.64;23.83;Sc;;;;;;;;2MASX J03321348-5227239,ESO 155-048,ESO-LV 155-0480,PGC 013120;;; +IC1958;G;03:32:46.41;-51:26:30.1;Hor;0.46;0.27;79;16.02;;13.18;12.50;12.31;22.64;Sc;;;;;;;;2MASX J03324641-5126301,ESO 200-038,ESO-LV 200-0380,PGC 013144;;; +IC1959;G;03:33:12.59;-50:24:51.3;Hor;3.05;0.72;148;13.32;12.96;11.77;11.22;11.04;23.08;SBm;;;;;;;;2MASX J03331257-5024511,ESO 200-039,ESO-LV 200-0390,IRAS 03317-5034,PGC 013163;;; +IC1960;G;03:32:32.97;-57:12:23.8;Ret;1.13;0.27;111;15.20;;11.85;11.14;10.82;23.39;Sab;;;;;;;;2MASX J03323295-5712236,ESO 155-050,ESO-LV 155-0500,PGC 013135;;; +IC1961;G;03:33:33.35;-48:57:02.3;Hor;0.63;0.42;19;15.47;;13.27;12.50;12.23;22.88;Sc;;;;;;;;2MASX J03333334-4857022,ESO 200-041,ESO-LV 200-0410,IRAS 03320-4907,PGC 013175;;; +IC1962;G;03:35:37.49;-21:17:38.6;Eri;2.25;0.50;1;14.67;;;;;23.92;SBd;;;;;;;;ESO 548-050,ESO-LV 548-0500,MCG -04-09-031,PGC 013283;;; +IC1963;Dup;03:35:31.04;-34:26:49.4;For;;;;;;;;;;;;;;;;0335;;;;; +IC1964;G;03:33:30.08;-53:10:23.3;Ret;0.55;0.34;92;16.60;;13.64;13.24;12.59;23.59;Sbc;;;;;;;;2MASX J03333007-5310232,ESO 155-052,ESO-LV 155-0520,PGC 013173;;; +IC1965;G;03:33:11.04;-56:33:14.7;Ret;0.96;0.63;117;15.56;;;;;23.91;SABc;;;;;;;;ESO 155-051,ESO-LV 155-0510,PGC 013162;;; +IC1966;G;03:34:03.39;-51:19:20.1;Hor;0.58;0.25;114;15.60;;14.37;13.55;13.82;22.46;Scd;;;;;;;;2MASX J03340340-5119200,ESO 200-042,ESO-LV 200-0420,PGC 013206;;; +IC1967;G;03:37:47.72;+03:16:15.7;Tau;0.83;0.44;64;14.50;;12.06;11.10;11.14;23.07;Sbc;;;;;;;;2MASX J03374771+0316157,MCG +00-10-008,PGC 013382;;; +IC1968;G;03:34:37.79;-50:39:04.6;Hor;0.46;0.35;97;16.19;;13.54;12.84;12.46;22.96;Sc;;;;;;;;2MASX J03343778-5039046,ESO 200-043,ESO-LV 200-0430,PGC 013236;;; +IC1969;G;03:36:13.86;-45:10:46.6;Hor;1.32;0.35;39;15.60;14.88;12.34;11.75;11.41;24.14;Sab;;;;;;;;2MASX J03361383-4510465,ESO 249-005,ESO-LV 249-0050,PGC 013303;;; +IC1970;G;03:36:31.52;-43:57:24.6;Hor;2.99;0.76;75;12.86;12.44;10.17;9.40;9.08;23.14;Sb;;;;;;;;2MASX J03363152-4357246,ESO 249-007,ESO-LV 249-0070,IRAS 03348-4407,MCG -07-08-003,PGC 013322;;Confused HIPASS source; +IC1971;G;03:35:57.39;-52:39:04.5;Hor;0.78;0.38;173;15.90;;;;;23.59;Sab;;;;;;;;PGC 013295;;;B-Mag taken from LEDA. +IC1972;G;03:36:21.32;-51:58:05.3;Hor;0.69;0.20;152;16.40;;;;;23.39;Sc;;;;;;;;ESO 200-048,ESO-LV 200-0480,PGC 013310;;; +IC1973;G;03:36:21.02;-51:59:39.0;Hor;0.50;0.19;10;16.70;;14.40;13.36;13.11;23.93;;;;;;;;;2MASX J03362106-5159390,ESO 200-049,ESO-LV 200-0490,PGC 013309;;; +IC1974;G;03:36:42.24;-49:33:01.0;Hor;0.78;0.36;159;15.89;;12.52;11.85;11.66;23.44;Sc;;;;;;;;2MASX J03364221-4933010,ESO 200-050,ESO-LV 200-0500,PGC 013325;;; +IC1975;G;03:39:03.55;-15:30:00.5;Eri;0.42;0.38;65;15.85;;13.81;13.38;13.09;22.40;;;;;;;;;2MASX J03390357-1530005,PGC 3080474;;; +IC1976;G;03:37:08.76;-47:26:16.5;Hor;0.80;0.59;128;15.77;;;;;23.72;Scd;;;;;;;;ESO 200-051,ESO-LV 200-0510,PGC 013355;;; +IC1977;G;03:40:45.12;+17:44:28.2;Tau;0.85;0.62;180;14.60;;11.27;10.52;10.14;22.88;Sb;;;;;;;;2MASX J03404513+1744282,IRAS 03378+1734,MCG +03-10-005,PGC 013536,UGC 02815;;; +IC1978;G;03:37:05.59;-50:09:03.0;Hor;1.21;0.20;8;15.69;;13.10;12.40;12.23;23.87;Sab;;;;;;;;2MASX J03370562-5009029,ESO 200-052,ESO-LV 200-0520,PGC 013350;;; +IC1979;**;03:36:46.27;-57:56:40.4;Ret;;;;;;;;;;;;;;;;;;;;; +IC1980;G;03:36:58.99;-57:58:25.9;Ret;1.27;0.41;21;14.95;;;;;23.40;Sb;;;;;;;;ESO 117-002,ESO-LV 117-0020,PGC 013345;;; +IC1981;Dup;03:40:29.37;-26:51:44.1;For;;;;;;;;;;;;;;;1412;;;;;; +IC1982;G;03:37:42.47;-57:46:34.6;Ret;0.49;0.39;61;15.65;;13.52;12.65;12.34;22.80;Sab;;;;;;;;2MASX J03374249-5746347,ESO 117-004,ESO-LV 117-0040,PGC 013378;;; +IC1983;Dup;03:40:56.86;-22:33:52.1;Eri;;;;;;;;;;;;;;;1415;;;;;; +IC1984;G;03:39:50.23;-47:04:33.0;Hor;0.75;0.25;139;16.38;;13.35;12.78;12.46;23.53;Sc;;;;;;;;2MASX J03395025-4704327,ESO 249-012,ESO-LV 249-0120,PGC 013487;;; +IC1985;Dup;03:44:34.19;+32:09:46.2;Per;;;;;;;;;;;;;;;;0348;;;;; +IC1986;G;03:40:35.15;-45:21:20.9;Hor;1.27;0.23;102;14.84;;;;;22.67;Sm;;;;;;;;ESO 249-013,ESO-LV 249-0130,PGC 013521;;; +IC1987;GGroup;03:40:11.27;-55:03:17.3;Ret;1.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC1987 NED01;G;03:40:09.69;-55:03:17.6;Ret;0.56;0.32;147;16.50;;;;;24.00;;;;;;;;;PGC 413193;;;B-Mag taken from LEDA. +IC1987 NED02;G;03:40:11.54;-55:03:32.7;Ret;0.78;0.28;11;14.58;;11.92;11.18;11.22;24.28;E;;;;;;;;2MASX J03401154-5503325,PGC 013502;;; +IC1987 NED03;G;03:40:12.04;-55:03:12.4;Ret;0.79;0.79;0;16.39;;;;;25.27;;;;;;;;;PGC 2801162;;;B-Mag taken from LEDA. +IC1987 NED04;G;03:40:12.21;-55:03:22.6;Ret;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC1988;Other;03:42:45.61;-39:53:13.6;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position. IC 1988 may be NGC 1425."; +IC1989;G;03:41:54.67;-50:57:28.1;Hor;1.37;0.76;132;14.60;;11.50;10.84;10.42;23.97;E-S0;;;;;;;;2MASX J03415466-5057282,ESO 200-055,ESO-LV 200-0550,PGC 013581;;; +IC1990;Neb;03:47:13.83;+24:20:02.0;Tau;;;;;;;;;;;;;;;;;;;;; +IC1991;G;03:44:46.79;-51:31:24.3;Hor;0.84;0.28;40;16.17;;13.39;13.14;12.53;23.56;Sc;;;;;;;;2MASX J03444677-5131242,ESO 200-056,ESO-LV 200-0560,PGC 013734;;; +IC1992;Other;03:45:08.04;-51:00:16.9;Hor;;;;;;;;;;;;;;;;;;;;Nominal position. Probably a defect on the original Harvard plate.; +IC1993;G;03:47:04.81;-33:42:35.5;For;2.81;2.48;57;12.50;;9.59;8.97;8.71;23.41;SABb;;;;;;;;2MASX J03470480-3342354,ESO 358-065,ESO-LV 358-0650,IRAS 03451-3351,MCG -06-09-032,PGC 013840;;Marginal HIPASS detection.; +IC1994;G;03:45:55.05;-51:38:36.0;Hor;0.73;0.22;4;16.01;;;;;24.05;;;;;;;;;ESO 200-058,ESO-LV 200-0580,PGC 013795;;; +IC1995;Neb;03:50:18.54;+25:34:50.8;Tau;2.00;2.00;90;;;;;;;;;;;;;;;;;;Diameters taken from SIMBAD. +IC1996;G;03:45:07.69;-57:19:29.3;Ret;0.92;0.21;102;16.35;;13.09;12.55;12.22;23.64;Sc;;;;;;;;2MASX J03450768-5719296,ESO 156-010,ESO-LV 156-0100,PGC 013755;;; +IC1997;G;03:44:51.90;-59:08:15.6;Ret;1.01;0.70;76;14.54;;12.52;11.86;11.60;22.60;Sa;;;;;;;;2MASX J03445178-5908166,ESO 117-007,ESO-LV 117-0070,PGC 013740;;; +IC1998;G;03:51:31.32;+01:11:23.3;Tau;0.77;0.61;12;15.70;;11.64;10.88;10.73;24.00;E;;;;;;;;2MASX J03513133+0111232,PGC 013978,SDSS J035131.31+011123.2,SDSS J035131.31+011123.3,SDSS J035131.32+011123.3;;; +IC1999;G;03:47:42.84;-56:57:07.5;Ret;0.79;0.68;148;15.50;;13.04;12.33;11.97;23.89;Sbc;;;;;;;;2MASX J03474282-5657073,ESO 156-014,ESO-LV 156-0140,PGC 013861;;; +IC2000;G;03:49:07.74;-48:51:29.5;Hor;4.88;0.85;82;12.90;;11.08;10.48;10.18;23.65;SBc;;;;;;;;2MASX J03490774-4851294,ESO 201-003,ESO-LV 201-0030,IRAS 03476-4900,PGC 013912;;The APM position is east of the center of the galaxy.; +IC2001;**;03:50:51.72;-48:35:58.7;Hor;;;;;;;;;;;;;;;;;;;;; +IC2002;Dup;03:54:30.35;+10:42:25.2;Tau;;;;;;;;;;;;;;;1474;;;;;; +IC2003;PN;03:56:22.03;+33:52:29.5;Per;0.14;;;12.60;11.40;12.43;12.28;11.51;;;;14.70;15.00;;;;;2MASX J03562202+3352292,IRAS 03531+3343 ,PK 161-14 1,PN G161.2-14.8;;Identified as a planetary neb. by Strauss, et al (1992, ApJS, 83, 29).; +IC2004;G;03:51:45.73;-49:25:10.6;Hor;0.91;0.68;46;15.02;;;;;23.45;S0-a;;;;;;;;ESO 201-006,ESO-LV 201-0060,PGC 013986;;; +IC2005;G;03:57:39.54;+36:47:14.9;Per;0.34;0.23;47;15.70;;11.03;10.27;9.90;23.07;E;;;;;;;;2MASX J03573954+3647149,PGC 014168;;; +IC2006;G;03:54:28.45;-35:58:01.7;Eri;2.36;1.98;35;12.39;;9.40;8.73;8.48;22.97;E;;;;;;;;2MASX J03542842-3558017,ESO 359-007,ESO-LV 359-0070,MCG -06-09-037,PGC 014077;;; +IC2007;G;03:55:22.76;-28:09:30.0;Eri;1.29;0.60;48;13.70;;11.33;10.71;10.42;22.44;Sbc;;;;;;2008;;2MASX J03552274-2809299,ESO 419-011,ESO-LV 419-0110,IRAS 03533-2818,MCG -05-10-005,PGC 014106,PGC 014110;;Position in 1997AJ....113.1548C is incorrect.; +IC2008;Dup;03:55:22.76;-28:09:30.0;Eri;;;;;;;;;;;;;;;;2007;;;;; +IC2009;G;03:53:34.85;-48:59:22.1;Hor;1.50;0.99;66;14.61;;;;;24.09;IAB;;;;;;;;ESO 201-008,ESO-LV 201-0080,PGC 014041;;; +IC2010;G;03:51:58.03;-59:55:45.7;Ret;1.19;0.48;71;14.52;;11.85;11.16;10.85;23.07;SABa;;;;;;;;2MASX J03515803-5955459,ESO 117-011,ESO-LV 117-0110,IRAS 03510-6004,PGC 013995;;; +IC2011;**;03:52:27.15;-57:28:06.3;Ret;;;;;;;;;;;;;;;;;;;;; +IC2012;GPair;03:52:55.32;-58:39:03.6;Ret;0.70;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC2012 NED01;G;03:52:55.26;-58:38:58.4;Ret;0.51;0.42;18;16.25;;13.02;12.41;12.14;23.60;S0-a;;;;;;;;2MASX J03525527-5838584,ESO 117-013,ESO-LV 117-0130,PGC 014027;;; +IC2013;Other;03:56:44.06;-17:06:34.2;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the original Harvard plate."; +IC2014;G;03:55:21.68;-56:44:46.7;Ret;0.63;0.47;18;15.52;;13.50;13.06;12.80;23.17;SBc;;;;;;;;2MASX J03552167-5644468,ESO 156-020,ESO-LV 156-0200,PGC 014108;;; +IC2015;G;03:58:11.42;-40:23:20.9;Hor;0.59;0.44;102;15.65;;13.77;13.12;12.92;22.96;Sc;;;;;;;;2MASX J03581143-4023205,ESO 302-022,ESO-LV 302-0220,PGC 014184;;; +IC2016;G;04:01:59.87;+20:14:25.6;Tau;0.51;0.25;2;15.70;;12.51;11.75;11.43;23.16;S0;;;;;;;;2MASX J04015988+2014255,PGC 014322;;; +IC2017;G;03:56:39.37;-59:23:41.1;Ret;1.11;0.74;21;14.90;;11.88;11.07;10.69;23.88;S0;;;;;;;;2MASX J03563937-5923413,ESO 117-015,ESO-LV 117-0150,IRAS 03557-5932,PGC 014140;;; +IC2018;G;03:57:54.53;-52:46:52.0;Dor;0.79;0.55;137;15.76;;12.94;11.91;11.58;23.57;SABb;;;;;;;;2MASX J03575450-5246522,ESO 156-021,ESO-LV 156-0210,PGC 014173;;; +IC2019;G;04:01:53.65;+05:38:22.0;Tau;0.84;0.47;64;15.30;;11.02;10.28;9.92;23.61;S0;;;;;;;;2MASX J04015363+0538221,MCG +01-11-007 NED02,PGC 014324,UGC 02930 NED02;;; +IC2020;G;03:58:53.14;-54:03:27.4;Ret;0.67;0.53;58;15.61;;13.78;13.31;13.01;23.21;Sc;;;;;;;;2MASX J03585313-5403271,ESO 156-022,ESO-LV 156-0220,PGC 014211;;; +IC2021;G;03:59:23.93;-52:39:24.2;Dor;0.65;0.49;123;15.75;;12.99;12.39;11.71;23.21;Sbc;;;;;;;;2MASX J03592393-5239243,ESO 156-024,ESO-LV 156-0240,PGC 014229;;; +IC2022;G;03:58:40.01;-59:02:37.2;Ret;1.10;0.24;1;16.13;;14.10;13.32;13.21;23.85;Sc;;;;;;;;2MASX J03584002-5902371,ESO 117-017,ESO-LV 117-0170,PGC 014203;;; +IC2023;G;03:59:40.63;-52:40:52.1;Dor;0.59;0.44;43;15.85;;13.13;12.58;12.31;23.14;Sc;;;;;;;;2MASX J03594064-5240523,ESO 156-025,ESO-LV 156-0250,PGC 014238;;; +IC2024;G;04:00:04.14;-53:22:15.6;Ret;1.10;0.26;30;15.54;;12.24;11.54;11.08;23.23;SBc;;;;;;;;2MASX J04000411-5322153,ESO 156-026,ESO-LV 156-0260,IRAS 03588-5330,PGC 014249;;; +IC2025;G;04:00:23.18;-53:03:56.2;Ret;1.16;0.25;124;16.00;;12.97;12.10;11.90;24.12;Sb;;;;;;;;2MASX J04002318-5303564,ESO 156-028,ESO-LV 156-0280,PGC 014257;;; +IC2026;Dup;04:03:55.20;-11:10:44.5;Eri;;;;;;;;;;;;;;;1509;;;;;; +IC2027;G;04:06:39.59;+37:06:56.7;Per;0.94;0.78;100;16.00;;11.07;10.31;9.97;24.27;E;;;;;;;;2MASX J04063959+3706567,MCG +06-09-019,PGC 014473,UGC 02957;;; +IC2028;G;04:01:18.23;-52:42:26.8;Dor;0.86;0.52;54;14.94;;11.95;11.24;11.03;23.06;Sc;;;;;;;;2MASX J04011823-5242268,ESO 156-032,ESO-LV 156-0320,LEDA 439854,PGC 014299;;; +IC2029;G;04:01:17.95;-52:48:02.8;Dor;1.03;0.40;180;15.73;;13.05;12.32;12.20;23.65;SBc;;;;;;;;2MASX J04011794-5248028,ESO 156-033,ESO-LV 156-0330,PGC 014298;;; +IC2030;Other;04:04:56.29;-19:13:53.3;Eri;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the original Harvard plate."; +IC2031;G;04:06:14.72;-05:39:06.8;Eri;0.56;0.48;103;15.97;;12.58;11.89;11.66;22.99;Sab;;;;;;;;2MASX J04061469-0539065,PGC 146069,SDSS J040614.72-053906.7,SDSS J040614.72-053906.8;;; +IC2032;G;04:07:03.04;-55:19:25.8;Dor;1.12;0.41;75;14.78;14.73;;;;23.02;IAB;;;;;;;;ESO 156-042,ESO-LV 156-0420,PGC 014481;;; +IC2033;G;04:07:14.42;-53:40:51.3;Dor;1.19;0.47;127;15.01;;11.95;11.35;11.02;23.66;SABa;;;;;;;;2MASX J04071443-5340513,ESO 156-043,ESO-LV 156-0430,PGC 014491;;; +IC2034;G;04:06:36.83;-57:57:41.0;Ret;1.35;0.20;119;15.89;;13.11;12.41;11.87;23.79;Sc;;;;;;;;2MASX J04063682-5757409,ESO 117-022,ESO-LV 117-0220,PGC 014469;;; +IC2035;G;04:09:01.87;-45:31:03.1;Hor;1.41;1.17;84;12.48;;9.81;9.13;8.87;21.91;E-S0;;;;;;;;2MASX J04090186-4531029,ESO 250-007,ESO-LV 250-0070,PGC 014558;;; +IC2036;G;04:09:55.10;-39:41:19.3;Eri;1.12;0.73;84;14.47;;11.26;10.77;10.33;23.03;SBc;;;;;;;;2MASX J04095508-3941194,ESO 303-001,ESO-LV 303-0010,MCG -07-09-010,PGC 014586;;; +IC2037;G;04:08:19.00;-58:45:04.2;Ret;1.74;0.30;90;14.76;;11.58;10.80;10.45;23.57;Sb;;;;;;;;2MASX J04081898-5845042,ESO 118-001,ESO-LV 118-0010,PGC 014521;;; +IC2038;G;04:08:53.75;-55:59:22.4;Dor;1.85;0.49;155;14.82;;14.69;14.39;14.11;24.32;Scd;;;;;;;;2MASX J04085379-5559221,ESO 157-001,ESO-LV 157-0010,PGC 014553;;; +IC2039;G;04:09:02.37;-56:00:42.1;Dor;1.09;0.93;124;14.97;;12.90;12.35;11.96;23.92;E-S0;;;;;;;;2MASX J04090238-5600421,ESO 157-002,ESO-LV 157-0020,PGC 014560;;; +IC2040;G;04:12:59.77;-32:33:11.8;Eri;1.35;0.66;68;13.59;;11.60;10.95;10.86;23.00;S0-a;;;;;;;;2MASX J04125976-3233116,ESO 359-030,ESO-LV 359-0300,IRAS 04110-3240,MCG -05-11-004,PGC 014670,PGC 014671;;; +IC2041;G;04:12:34.90;-32:49:02.5;Eri;1.07;0.74;136;14.77;;12.41;11.72;11.72;23.55;S0;;;;;;2048;;2MASX J04123491-3249023,ESO 359-028,ESO-LV 359-0280,PGC 014656;;; +IC2042;*;04:11:43.26;-47:16:12.3;Hor;;;;11.36;10.94;9.72;9.37;9.31;;;;;;;;;;2MASS J04114301-4716159,TYC 8068-402-1;;; +IC2043;G;04:11:09.45;-53:41:11.9;Dor;1.43;0.27;12;15.29;;11.82;11.03;10.58;23.87;Sb;;;;;;;;2MASX J04110945-5341121,ESO 157-004,ESO-LV 157-0040,PGC 014623;;; +IC2044;G;04:11:13.97;-54:31:57.2;Dor;0.62;0.38;54;16.50;;;;;23.71;SABc;;;;;;;;ESO 157-006,ESO-LV 157-0060,PGC 014624;;; +IC2045;G;04:14:36.01;-13:10:29.7;Eri;0.91;0.68;126;15.29;;11.75;11.00;10.86;24.04;E;;;;;;;;2MASX J04143599-1310289,MCG -02-11-027,PGC 014722;;This may also be NGC 1538.; +IC2046;G;04:11:24.54;-54:40:23.5;Dor;0.82;0.56;104;15.12;;12.70;12.05;11.80;23.11;SBbc;;;;;;;;2MASX J04112453-5440237,ESO 157-007,ESO-LV 157-0070,PGC 014628;;; +IC2047;Dup;04:14:56.08;-13:11:30.2;Eri;;;;;;;;;;;;;;;1538;;;;;; +IC2048;Dup;04:12:34.90;-32:49:02.5;Eri;;;;;;;;;;;;;;;;2041;;;;; +IC2049;G;04:12:04.28;-58:33:25.2;Ret;1.06;0.80;10;15.15;14.74;;;;23.23;SABc;;;;;;;;ESO 118-009,ESO-LV 118-0090,PGC 014636;;; +IC2050;G;04:13:56.13;-53:28:31.3;Dor;1.17;0.82;36;14.78;;12.18;11.60;11.08;23.32;SBb;;;;;;;;2MASX J04135610-5328312,ESO 157-011,ESO-LV 157-0110,PGC 014704;;; +IC2051;G;03:52:00.83;-83:49:50.5;Men;2.86;1.72;68;12.32;;9.09;8.36;8.11;22.87;SBbc;;;;;;;;2MASX J03520081-8349503,ESO 004-007,ESO-LV 4-0070,IRAS 03583-8358,PGC 013999;;; +IC2052;G;04:14:58.52;-54:20:10.3;Dor;1.06;0.39;165;15.37;;;;;23.41;Sc;;;;;;;;2MASX J04145853-5420159,2MASX J04145854-5420104,PGC 014729;;The 2MASS XSC position applies to a knot 5.7 arcsec south of the nucleus.;B-Mag taken from LEDA. +IC2053;G;04:15:55.62;-49:21:30.0;Dor;0.53;0.48;73;15.26;;12.61;11.84;11.65;22.65;S0-a;;;;;;;;2MASX J04155565-4921300,ESO 201-028,ESO-LV 201-0280,PGC 014760;;ESO Declination -10 arcmin in error for ESO 201- ? 027.; +IC2054;G;04:07:26.34;-78:15:11.9;Men;0.46;0.42;115;16.37;;13.69;12.99;12.66;23.36;Sab;;;;;;;;2MASX J04072636-7815116,ESO 015-007,ESO-LV 15-0070,PGC 014497;;; +IC2055;Other;04:17:48.52;-48:55:26.8;Dor;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the original Harvard plate."; +IC2056;G;04:16:24.54;-60:12:24.5;Ret;1.85;1.61;14;12.49;;10.03;9.39;9.15;22.39;Sbc;;;;;;;;2MASX J04162454-6012246,ESO 118-016,ESO-LV 118-0160,IRAS 04155-6019,PGC 014773;;; +IC2057;G;04:21:56.09;+04:02:55.1;Tau;0.63;0.52;65;15.20;;11.62;10.96;10.51;22.80;SABa;;;;;;;;2MASX J04215608+0402552,IRAS 04192+0355,PGC 014962;;; +IC2058;G;04:17:54.35;-55:55:58.4;Dor;3.40;0.48;18;13.90;;11.95;11.09;10.99;23.46;Scd;;;;;;;;2MASX J04175435-5555583,ESO 157-018,ESO-LV 157-0180,IRAS 04168-5603,PGC 014824;;Confused HIPASS source; +IC2059;G;04:20:26.30;-31:43:28.5;Eri;1.34;0.55;170;13.87;;10.84;10.17;9.91;23.30;S0;;;;;;;;2MASX J04202629-3143286,ESO 420-017,ESO-LV 420-0170,MCG -05-11-007,PGC 014910;;Identification as IC 2059 is called doubtful in ESO/U, is absent in MCG.; +IC2060;G;04:17:53.36;-56:36:58.5;Ret;1.25;0.82;158;14.32;;11.31;10.63;10.31;24.05;E-S0;;;;;;;;2MASX J04175334-5636583,ESO 157-019,ESO-LV 157-0190,PGC 014823;;; +IC2061;Other;04:24:00.13;+21:04:59.5;Tau;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the original Harvard plate."; +IC2062;*;04:32:01.86;+71:55:11.5;Cam;;;;;;;;;;;;;;;;;;;;RC2 is incorrect in equating IC 2062 with NGC 1560.; +IC2063;G;04:22:40.32;-15:39:37.8;Eri;0.87;0.48;174;19.34;;12.55;11.93;11.54;22.90;Sab;;;;;;;;2MASX J04224035-1539374,LEDA 908152,MCG -03-12-005;;; +IC2064;G;04:23:26.74;-15:41:06.6;Eri;0.53;0.47;47;16.32;;12.92;12.53;11.99;23.38;;;;;;;;;2MASX J04232671-1541070,PGC 146225;;; +IC2065;G;04:21:27.98;-55:55:59.9;Dor;1.19;0.39;36;14.60;;11.77;11.08;10.87;23.25;Sa;;;;;;;;2MASX J04212799-5555598,ESO 157-021,ESO-LV 157-0210,PGC 014943;;; +IC2066;G;04:23:32.33;-54:44:00.2;Dor;0.86;0.64;133;15.26;;12.60;11.55;11.56;23.38;SBbc;;;;;;;;2MASX J04233231-5444002,ESO 157-025,ESO-LV 157-0250,PGC 015019;;; +IC2067;Neb;04:30:51.03;+35:26:46.2;Per;;;;12.36;11.49;;;;;;;;;;;;;;;; +IC2068;G;04:26:36.88;-42:05:37.4;Cae;1.29;0.91;171;14.29;;11.00;10.36;10.01;23.43;S0-a;;;;;;;;2MASX J04263689-4205372,ESO 303-017,ESO-LV 303-0170,MCG -07-10-004,PGC 015106;;; +IC2069;Other;04:25:56.14;-48:12:29.0;Cae;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2070;G;04:24:35.69;-57:58:51.2;Dor;1.44;0.67;88;14.49;;11.94;11.10;11.13;23.39;SABc;;;;;;;;2MASX J04243569-5758512,ESO 118-023,ESO-LV 118-0230,PGC 015048;;; +IC2071;GGroup;04:26:13.19;-53:09:07.6;Dor;1.20;;;;;;;;;;;;;;;;;PGC 015088;;;NED lists this object as GGroup, but does not provide members positions. +IC2072;Other;04:26:54.60;-48:22:39.0;Cae;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2073;G;04:26:33.84;-53:11:14.4;Dor;1.43;0.58;50;14.39;14.55;13.23;12.74;12.20;23.23;SBc;;;;;;;;2MASX J04263383-5311145,ESO 157-029,ESO-LV 157-0290,IRAS 04253-5317,PGC 015102;;; +IC2074;Other;04:31:23.03;+07:42:09.4;Tau;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC2075;Dup;04:30:51.59;-05:47:53.8;Eri;;;;;;;;;;;;;;;1594;;;;;; +IC2076;Other;04:28:07.81;-48:13:43.9;Cae;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2077;Dup;04:32:06.12;+00:34:02.5;Tau;;;;;;;;;;;;;;;1593;;;;;; +IC2078;*;04:31:52.22;-04:41:55.3;Eri;;;;14.40;;13.24;12.88;12.77;;;;;;;;;;2MASS J04315226-0441553;;; +IC2079;G;04:28:30.82;-53:44:16.5;Dor;1.40;0.39;125;14.81;;11.95;11.23;10.88;23.59;Sab;;;;;;;;2MASX J04283084-5344167,ESO 157-033,ESO-LV 157-0330,PGC 015200,PGC 015279;;RC3 +1m RA error.; +IC2080;G;04:31:52.15;-05:45:24.6;Eri;0.78;0.47;15;15.55;;11.81;11.13;10.78;23.67;Sa;;;;;;;;2MASX J04315214-0545247,IRAS 04294-0551,PGC 015426;;; +IC2081;G;04:29:00.90;-53:36:49.3;Dor;1.00;0.77;75;14.46;;11.05;10.37;10.13;22.95;E-S0;;;;;;;;2MASX J04290090-5336493,ESO 157-034,ESO-LV 157-0340,PGC 015231,PGC 015272;;RC3 +30s RA error.; +IC2082;GPair;04:29:07.60;-53:49:38.0;Dor;1.40;;;;;;;;;;;;;;;;;ESO 157-035;;;Diameter of the group inferred by the author. +IC2082 NED01;G;04:29:08.21;-53:49:40.6;Dor;1.02;0.55;123;13.90;12.79;10.80;10.10;9.76;23.63;E-S0;;;;;;;;PGC 015239;;"SSEP24 source was ""passively deblended"". See 2010ApJS..191..212S."; +IC2082 NED02;G;04:29:07.02;-53:49:36.1;Dor;1.23;0.58;125;13.90;12.79;10.80;10.10;9.76;;E;;;;;;;;2MASX J04290824-5349403,PGC 075184;;; +IC2083;G;04:30:44.27;-53:58:51.0;Dor;0.95;0.51;102;14.92;;12.52;11.51;11.46;23.38;S0-a;;;;;;;;2MASX J04304429-5358512,ESO 157-037,ESO-LV 157-0370,PGC 015339;;; +IC2084;Other;04:32:06.17;-48:17:17.9;Cae;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2085;G;04:31:24.24;-54:25:00.6;Dor;2.45;0.54;112;14.26;;11.38;10.69;10.40;24.51;S0-a;;;;;;;;2MASX J04312423-5425007,ESO 157-038,ESO-LV 157-0380,PGC 015388;;; +IC2086;G;04:31:32.17;-53:38:51.5;Dor;0.64;0.57;141;15.70;;12.83;12.43;11.74;23.61;E;;;;;;;;2MASX J04313219-5338514,ESO 157-040,ESO-LV 157-0400,PGC 015392;;; +IC2087;Neb;04:39:59.97;+25:44:32.0;Tau;4.00;4.00;;;;10.67;8.05;6.28;;;;;;;;;;2MASS J04395574+2545020,IRAS 04369+2539,LBN 813;;; +IC2088;Neb;04:31:04.56;+26:36:25.3;Tau;;;;;;;;;;;;;;;;;;;;The IC identification is not certain.; +IC2089;G;04:32:50.44;-75:32:22.0;Men;0.99;0.88;36;15.12;;14.33;13.59;12.94;23.77;Sm;;;;;;;;2MASX J04325040-7532214,ESO 032-015,ESO-LV 32-0150,PGC 015487;;Marginal HIPASS detection.; +IC2090;Other;04:44:44.07;-33:59:38.7;Cae;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2091;Other;04:46:39.22;-04:40:18.5;Eri;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +IC2092;Other;04:46:47.62;-04:56:36.1;Eri;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +IC2093;*;04:47:32.28;-02:42:32.5;Ori;;;;;;;;;;;;;;;;;;;;; +IC2094;G;04:48:24.83;-05:21:09.5;Eri;1.04;0.27;71;15.84;;;;;24.65;;;;;;;;;2MASX J04482483-0521095,LEDA 1045867,SDSS J044824.85-052109.7;;; +IC2095;G;04:48:45.63;-05:07:29.3;Eri;1.46;0.20;55;16.18;;;;;24.05;Sc;;;;;;;;MCG -01-13-014,PGC 016067;;; +IC2096;Other;04:49:40.86;-04:58:43.1;Eri;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +IC2097;G;04:50:24.22;-05:04:52.4;Eri;1.16;0.29;116;15.49;;13.60;12.83;12.72;23.15;IB;;;;;;;;2MASX J04502424-0504527,PGC 016134;;; +IC2098;G;04:50:44.31;-05:25:07.2;Eri;2.45;0.33;96;14.50;;11.48;10.56;10.20;23.74;Sc;;;;;;;;2MASX J04504430-0525067,IRAS 04482-0530,MCG -01-13-018,PGC 016144;;; +IC2099;Dup;04:50:52.07;-04:53:33.8;Eri;;;;;;;;;;;;;;;1677;;;;;; +IC2100;**;04:51:14.94;-04:49:51.3;Eri;;;;;;;;;;;;;;;;;;;;; +IC2101;G;04:51:42.24;-06:13:53.2;Eri;1.76;0.38;152;14.50;;11.52;10.75;10.44;23.17;SBc;;;;;;;;2MASX J04514224-0613532,IRAS 04492-0618,MCG -01-13-024,PGC 016187;;; +IC2102;G;04:51:55.32;-04:57:05.8;Eri;1.28;1.14;65;14.20;;14.32;13.59;14.11;23.70;SBc;;;;;;;;2MASX J04515534-0457055,MCG -01-13-027,PGC 016197,SDSS J045155.24-045707.4;;; +IC2103;G;04:39:48.05;-76:50:12.5;Men;2.02;0.34;88;14.66;;11.47;10.67;10.44;23.68;Sc;;;;;;;;2MASX J04394808-7650125,ESO 032-018,ESO-LV 32-0180,PGC 015758;;; +IC2104;G;04:56:18.96;-15:47:52.4;Lep;2.11;1.14;100;13.60;;10.94;10.23;10.06;23.67;Sbc;;;;;;;;2MASX J04561905-1547536,IRAS 04540-1552,MCG -03-13-034,PGC 016367;;; +IC2105;Cl+N;04:49:26.66;-69:12:03.3;Dor;0.65;0.60;170;9.90;11.30;;;;;;;;;;;;;2MASX J04492734-6912056,ESO 056-007,HD 269686,IRAS 04496-6917;;Within boundaries of LMC; +IC2106;G;04:56:33.89;-28:30:14.1;Cae;1.79;1.04;156;13.78;;11.02;10.32;10.04;23.32;SBb;;;;;;;;2MASX J04563389-2830140,ESO 422-012,ESO-LV 422-0120,IRAS 04545-2834,MCG -05-12-011,PGC 016373;;Confused HIPASS source; +IC2107;Dup;04:58:20.61;+08:14:18.1;Ori;;;;;;;;;;;;;;;1707;;;;;; +IC2108;Dup;04:57:17.07;-15:17:20.4;Lep;;;;;;;;;;;;;;;1710;;;;;; +IC2109;*;04:58:59.18;-00:18:19.1;Ori;;;;;;;;;;;;;;;;;;;;; +IC2110;*;04:59:01.80;-00:18:09.5;Ori;;;;;;;;;;;;;;;;;;;;; +IC2111;Cl+N;04:51:52.12;-69:23:31.8;Dor;0.65;0.55;130;;;;;;;;;;;;;;;2MASX J04515204-6923318,ESO 056-013;;One 2MASS source is 8.5 arcsec southwest of the center of the nebula.; +IC2112;G;05:00:30.15;+04:23:11.5;Ori;0.32;0.21;26;15.30;;12.32;11.52;11.20;22.76;;;;;;;;;2MASX J05003015+0423113,PGC 016534;;; +IC2113;Dup;04:59:31.83;-15:49:25.1;Lep;;;;;;;;;;;;;;;1730;;;;;; +IC2114;Dup;04:54:25.97;-69:11:02.8;Dor;;;;;;;;;;;;;;;1748;;;;;; +IC2115;*;04:57:08.72;-66:23:24.7;Dor;;;;11.39;11.27;11.10;11.08;10.97;;;;;;;;;;2MASS J04570882-6623251,HD 268726,TYC 8889-603-1,UCAC2 2670877;;The IC identification is uncertain.; +IC2116;HII;04:57:16.26;-66:23:20.5;Dor;0.60;0.60;;13.88;14.21;12.11;11.83;11.07;;;;;;;;;;2MASX J04571624-6623202,IRAS 04571-6627,UCAC4 119-004935;;"HII region in the LMC; nearly stellar on the DSS."; +IC2117;Cl+N;04:57:15.21;-68:26:29.3;Dor;1.00;0.90;110;;;;;;;;;;;;;;;2MASX J04571529-6826292;;"HII region in the LMC; part of the NGC 1770 association."; +IC2118;Dup;05:04:55.44;-07:15:56.3;Eri;;;;;;;;;;;;;;;1909;;;;;; +IC2119;G;05:06:50.95;-20:20:42.7;Lep;1.20;0.63;54;14.68;;11.58;10.90;10.62;23.34;SBb;;;;;;;;2MASX J05065095-2020428,ESO 553-005,ESO-LV 553-0050,MCG -03-13-073,PGC 016759;;10 degree error in IC declination.; +IC2120;Other;05:19:10.30;+38:11:06.0;Aur;;;;;;;;;;;;;;;;;;;;This is a measurement of Comet 113P/Spitaler 1890 mistaken for a nebula.; +IC2121;G;05:19:44.86;-25:03:51.6;Lep;1.95;0.97;162;13.81;;10.88;10.32;10.28;24.02;S0;;;;;;;;2MASX J05194486-2503514,ESO 486-053,ESO-LV 486-0530,PGC 017110;;ESO/Uppsala lists the identification with IC 0408 as doubtful.; +IC2122;G;05:19:01.40;-37:05:21.8;Col;1.75;1.51;66;13.83;;10.45;9.70;9.41;23.85;E-S0;;;;;;;;2MASX J05190139-3705217,ESO 362-014,ESO-LV 362-0140,MCG -06-12-017,PGC 017081;;; +IC2123;Dup;05:21:56.70;+03:29:11.0;Ori;;;;;;;;;;;;;;;;0412;;;;; +IC2124;Dup;05:21:58.78;+03:28:55.8;Ori;;;;;;;;;;;;;;;;0413;;;;; +IC2125;G;05:24:28.12;-27:00:57.8;Lep;1.02;0.75;126;14.43;;11.52;10.86;10.50;23.29;S0;;;;;;;;2MASX J05242810-2700574,ESO 487-008,ESO-LV 487-0080,PGC 017238;;; +IC2126;Dup;05:21:58.71;-67:57:26.6;Dor;;;;;;;;;;;;;;;1935;;;;;; +IC2127;Dup;05:22:13.96;-67:58:41.9;Dor;;;;;;;;;;;;;;;1936;;;;;; +IC2128;Cl+N;05:22:44.17;-68:03:39.9;Dor;4.80;3.60;40;;11.10;;;;;;;;;;;;;ESO 056-113,ESO 056-113 ;;LMC stellar association, includes the star cluster ESO 056-SC 113.; +IC2129;G;05:31:50.47;-23:08:42.2;Lep;1.82;0.88;103;13.84;;;;;23.20;SBd;;;;;;2130;;ESO 487-019,ESO-LV 487-0190,MCG -04-14-002,PGC 017402;;; +IC2130;Dup;05:31:50.47;-23:08:42.2;Lep;;;;;;;;;;;;;;;;2129;;;;; +IC2131;Dup;05:32:18.55;-17:13:25.9;Lep;;;;;;;;;;;;;;;;0422;;;;; +IC2132;G;05:32:28.67;-13:55:37.6;Lep;1.88;0.62;175;14.15;;10.53;9.75;9.43;23.81;SABa;;;;;;;;2MASX J05322858-1355372,IRAS 05301-1357,MCG -02-15-002,PGC 017415;;;B-Mag taken from LEDA. +IC2133;Dup;05:42:04.65;+69:22:42.4;Cam;;;;;;;;;;;;;;;1961;;;;;; +IC2134;GCl;05:23:05.84;-75:26:48.6;Men;1.40;1.40;;14.73;13.94;;;;;;;;;;;;;2MASX J05230579-7526488,ESO 033-019,ESO 033-019 ;;Globular cluster in the LMC.; +IC2135;G;05:33:12.90;-36:23:55.8;Col;3.24;0.66;110;13.27;;10.61;9.95;9.66;23.24;Sc;;;;;;2136;;2MASX J05331289-3623556,ESO 363-007,ESO-LV 363-0070,IRAS 05314-3626,MCG -06-13-004,PGC 017433;;Sometimes incorrectly called NGC 1963 which is a star cluster.; +IC2136;Dup;05:33:12.90;-36:23:55.8;Col;;;;;;;;;;;;;;;;2135;;;;; +IC2137;G;05:34:21.68;-23:32:00.0;Lep;1.29;0.81;83;13.91;;11.04;10.59;10.29;22.96;SABa;;;;;;2138;;2MASX J05342166-2332001,ESO 487-027,ESO-LV 487-0270,MCG -04-14-006,PGC 017463;;; +IC2138;Dup;05:34:21.68;-23:32:00.0;Lep;;;;;;;;;;;;;;;;2137;;;;; +IC2139;*Ass;05:35:16.23;-17:56:01.2;Lep;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC2140;GCl;05:33:21.91;-75:22:31.3;Men;2.30;2.30;;14.21;13.48;;;;;;;;;;;;;ESO 033-024,ESO 033-024 ;;Globular star cluster in the LMC.; +IC2141;*Ass;05:42:22.34;-51:01:58.3;Pic;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC2142;G;05:33:09.16;-78:01:09.9;Men;0.86;0.48;27;15.52;;13.57;13.22;12.45;23.44;Sbc;;;;;;;;2MASX J05330919-7801098,ESO 016-007,ESO-LV 16-0070,PGC 017430;;; +IC2143;G;05:46:52.61;-18:43:35.0;Lep;1.90;0.92;99;13.41;;10.63;10.01;9.71;23.00;SBb;;;;;;;;2MASX J05465261-1843349,ESO 554-034,ESO-LV 554-0340,IRAS 05447-1844,LEDA 864492,MCG -03-15-013,PGC 017810;;; +IC2144;G;05:50:13.89;+23:52:20.7;Tau;1.00;1.00;0;;;;;;;;;;;;;;;IRAS 05471+2351;;Claimed to be a galactic object by Takata et al. (1994, A&AS, 104, 529).; +IC2145;Neb;05:40:24.75;-69:40:13.1;Dor;0.19;;;;12.00;;;;;;;;;;;;;2MASX J05402473-6940128;;Emission nebula in the LMC.;Diameters taken from SIMBAD. +IC2146;GCl;05:37:46.93;-74:46:59.5;Men;3.30;3.30;;13.10;12.41;;;;;;;;;;;;;2MASX J05374621-7446399,2MASX J05374874-7447019,ESO 033-026;;Globular star cluster in the LMC.; +IC2147;G;05:43:28.06;-30:29:42.1;Col;1.56;1.29;86;13.61;;11.70;11.13;10.77;23.10;Scd;;;;;;;;2MASX J05432804-3029421,ESO 424-013,ESO-LV 424-0130,MCG -05-14-013,PGC 017662;;; +IC2148;GCl;05:39:11.86;-75:33:44.8;Men;1.30;1.30;;14.98;14.23;;;;;;;;;;;;;ESO 033-028;;Globular star cluster in the LMC.; +IC2149;PN;05:56:23.89;+46:06:17.2;Aur;0.14;;;11.17;10.78;10.37;10.31;9.70;;;;11.28;11.59;;;;BD +46 1067,HD 39659;2MASX J05562386+4606175,IRAS 05526+4605 ,PK 166+10 1,PN G166.1+10.4;;; +IC2150;G;05:51:18.56;-38:19:13.7;Col;2.90;0.80;83;13.60;;10.89;10.49;9.99;23.50;SBc;;;;;;;;2MASX J05511855-3819136,ESO 306-032,ESO-LV 306-0320,IRAS 05496-3819,MCG -06-13-016,PGC 018000;;; +IC2151;G;05:52:36.43;-17:47:14.2;Lep;1.24;0.64;93;14.16;;12.27;11.52;11.07;22.95;Sbc;;;;;;;;2MASX J05523642-1747144,ESO 555-008,ESO-LV 555-0080,IRAS 05504-1747,MCG -03-15-024,PGC 018040;;; +IC2152;G;05:57:53.41;-23:10:50.8;Lep;1.65;1.15;50;13.44;;10.81;10.14;9.95;23.13;SBa;;;;;;;;2MASX J05575341-2310507,ESO 488-047,ESO-LV 488-0470,MCG -04-15-001,PGC 018148;;; +IC2153;GPair;06:00:05.18;-33:55:11.1;Col;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC2153 NED01;G;06:00:04.23;-33:55:12.3;Col;1.15;0.89;68;14.16;;;;;23.29;S0-a;;;;;;;;ESO 364-022,ESO-LV 364-0220,IRAS 05582-3355,PGC 018212,TYC 7079-1676-1;;; +IC2153 NED02;G;06:00:05.44;-33:55:05.5;Col;1.08;0.84;69;14.67;;12.31;11.75;11.61;23.01;I;;;;;;;;2MASX J06000544-3355056,PGC 018213;;; +IC2154;Dup;06:01:07.81;-23:40:21.5;Lep;;;;;;;;;;;;;;;2139;;;;;; +IC2155;G;06:00:38.43;-33:59:50.4;Col;;;;16.54;;;;;;;;;;;;;;;;Identity as IC 2155 is not certain.;Only B-Mag available from LEDA +IC2156;OCl;06:04:52.41;+24:09:30.4;Gem;;;;;;;;;;;;;;;;;;;;Probably part of the star cluster IC 2157.; +IC2157;OCl;06:04:47.58;+24:04:15.7;Gem;2.70;;;8.91;8.40;;;;;;;;;;;;;MWSC 0722;;; +IC2158;G;06:05:17.96;-27:51:25.1;Col;1.36;1.08;115;12.90;;10.49;9.89;9.60;22.31;SBab;;;;;;;;2MASX J06051797-2751251,ESO 425-007,ESO-LV 425-0070,IRAS 06033-2751,MCG -05-15-004,PGC 018388;;; +IC2159;Neb;06:09:57.62;+20:25:53.0;Ori;;;;;;;;;;;;;;;;;;;;Part of the emission nebula NGC 2175.; +IC2160;G;05:55:28.56;-76:55:12.9;Men;1.80;0.89;108;13.76;;11.20;10.49;10.25;23.29;SBc;;;;;;;;2MASX J05552852-7655128,ESO 033-032,ESO-LV 33-0320,IRAS 05576-7655,PGC 018092;;; +IC2161;GCl;05:57:24.86;-75:08:22.1;Men;1.60;1.60;;14.90;14.24;;;;;;;;;;;;;ESO 033-035;;Globular cluster in the LMC.; +IC2162;HII;06:13:04.70;+17:58:48.3;Ori;4.00;4.00;;;;;;;;;;;;;;;;2MASX J06130651+1758545,LBN 859;;One of two 6cm sources associated with [WB92] 0610+1759; +IC2163;G;06:16:27.98;-21:22:33.1;CMa;3.37;0.95;103;12.55;;9.61;8.96;8.56;22.11;Sc;;;;;;;;2MASX J06162800-2122330,ESO 556-009,ESO-LV 556-0090,MCG -04-15-021,PGC 018751,UGCA 125;;; +IC2164;G;06:06:52.26;-75:21:52.9;Men;1.15;0.97;122;14.56;;11.30;10.56;10.21;23.42;Sab;;;;;;;;2MASX J06065224-7521527,ESO 034-005,ESO-LV 34-0050,IRAS 06085-7521,PGC 018424;;; +IC2165;PN;06:21:42.70;-12:59:14.0;CMa;0.15;;;12.90;10.50;;;;;;;;17.90;;;;;IRAS 06194-1257,PK 221-12 1,PN G221.3-12.3;;; +IC2166;G;06:26:55.64;+59:04:48.3;Lyn;2.20;1.08;116;12.68;12.01;10.38;9.72;9.30;23.27;SABc;;;;;;;;2MASX J06265562+5904483,IRAS 06225+5906,MCG +10-10-001,PGC 019064,UGC 03463;;; +IC2167;Dup;06:31:06.18;+10:27:33.4;Mon;;;;;;;;;;;;;;;;0446;;;;; +IC2168;**;06:33:47.72;+44:41:07.7;Aur;;;;;;;;;;;;;;;;;;;;; +IC2169;Dup;06:31:00.32;+09:53:50.8;Mon;;;;;;;;;;;;;;;;0447;;;;; +IC2170;Other;06:34:04.91;+44:41:18.4;Aur;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +IC2171;G;06:44:27.69;-17:55:56.9;CMa;1.63;0.34;91;15.19;;;;;23.58;IB;;;;;;;;2MASX J06442732-1755568,2MASX J06442769-1755566,IRAS 06422-1752,MCG -03-18-001,PGC 019526;;;B-Mag taken from LEDA. +IC2173;*;06:50:47.16;+33:27:29.0;Gem;;;;;;;;;;;;;;;;;;;;; +IC2174;G;07:09:05.61;+75:21:10.9;Cam;0.78;0.78;125;15.00;;11.37;10.68;10.42;22.60;SBa;;;;;;;;2MASX J07090560+7521108,MCG +13-06-002,PGC 020252,UGC 03666;;; +IC2175;**;07:08:39.66;+35:17:17.7;Gem;;;;;;;;;;;;;;;;;;;;; +IC2176;G;07:07:31.83;+32:28:11.1;Gem;0.93;0.76;180;15.10;;11.26;10.58;10.57;23.74;E;;;;;;;;2MASX J07073182+3228113,MCG +05-17-011,PGC 020193;;; +IC2177;RfN;07:04:36.91;-10:28:15.8;Mon;20.00;20.00;;;;;;;;;;;;;;;;LBN 1027;;; +IC2178;G;07:07:37.66;+32:30:44.6;Gem;0.59;0.35;140;15.70;;12.58;11.79;11.55;23.54;;;;;;;;;2MASX J07073763+3230449,PGC 020196;;; +IC2179;G;07:15:32.31;+64:55:34.3;Cam;0.85;0.79;95;13.40;;10.33;9.71;9.37;22.04;E;;;;;;;;2MASX J07153231+6455343,MCG +11-09-038a,PGC 020516,UGC 03750;;; +IC2180;G;07:11:19.58;+26:22:17.5;Gem;0.90;0.79;10;15.00;;11.28;10.61;10.29;23.38;Sab;;;;;;;;2MASX J07111958+2622175,PGC 020344,UGC 03727;;; +IC2181;G;07:13:10.35;+18:59:45.0;Gem;1.02;0.56;140;14.80;;11.83;11.08;10.87;23.27;Sab;;;;;;;;2MASX J07131030+1859458,MCG +03-19-005,PGC 020417,UGC 03744;;; +IC2182;G;07:14:11.03;+18:56:42.1;Gem;1.51;0.78;103;14.89;;11.32;10.58;10.35;24.47;S0-a;;;;;;;;2MASX J07141102+1856424,PGC 1575387;;;B-Mag taken from LEDA. +IC2183;Other;07:16:56.28;-20:24:37.7;CMa;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2184;GGroup;07:29:25.40;+72:07:44.0;Cam;1.10;;;;;;;;;;;;;;;;;MCG +12-07-041,UGC 03852;;"CGCG says 'Triple system';UGC says 'double or triple';MRK says 'two doubles'.";Diameter of the group inferred by the author. +IC2184 NED01;G;07:29:24.16;+72:07:40.4;Cam;0.86;0.40;145;14.29;;;;;22.12;Sbc;;;;;;;;2MASX J07292419+7207404,IRAS 07236+7213,MCG +12-07-041 NED01,PGC 021123,UGC 03852 NED01;;MRK calls this one of 'two tightly merged double galaxies'.;B-Mag taken from LEDA. +IC2184 NED02;G;07:29:27.02;+72:07:51.5;Cam;0.73;0.30;15;14.00;;14.18;14.57;13.32;;Sab;;;;;;;;2MASX J07292701+7207514,MCG +12-07-041 NED02,PGC 093090,UGC 03852 NED02;;MRK calls this one of 'two tightly merged double galaxies'.; +IC2185;G;07:23:16.04;+32:29:43.2;Gem;0.60;0.36;125;14.90;;12.16;11.49;11.22;22.10;Sbc;;;;;;;;2MASX J07231603+3229432,IRAS 07200+3235,MCG +05-18-008,PGC 020889;;; +IC2186;G;07:22:47.78;+21:31:45.3;Gem;0.33;0.22;30;16.09;;12.63;11.98;11.71;;;;;;;;;;2MASX J07224774+2131452,PGC 3089868;;;B-Mag taken from LEDA. +IC2187;G;07:22:43.31;+21:29:00.1;Gem;0.20;0.20;175;15.30;;11.40;10.69;10.46;;E;;;;;;;;2MASX J07224331+2129001,MCG +04-18-010,PGC 020857;;; +IC2188;G;07:22:43.18;+21:30:46.9;Gem;1.10;0.72;112;15.10;;11.37;10.68;10.38;23.92;S0;;;;;;;;2MASX J07224316+2130471,MCG +04-18-011,PGC 020858;;; +IC2189;Other;07:24:57.59;+08:55:14.5;CMi;;;;;;;;;;;;;;;;;;;;"Nominal position; only stars nearby."; +IC2190;G;07:29:54.30;+37:27:06.3;Lyn;0.93;0.61;19;14.80;;11.71;11.10;10.75;22.94;Sbc;;;;;;;;2MASX J07295432+3727063,MCG +06-17-013,PGC 021144,SDSS J072954.29+372706.3,SDSS J072954.30+372706.3,UGC 03880;;; +IC2191;G;07:30:17.46;+24:19:39.8;Gem;0.81;0.53;20;15.30;;11.63;11.01;10.66;23.57;E;;;;;;;;2MASX J07301738+2419400,MCG +04-18-024,PGC 021163;;; +IC2192;G;07:33:20.31;+31:21:41.0;Gem;0.52;0.41;134;15.56;;12.85;12.06;12.15;23.48;;;;;;;;;2MASX J07332029+3121418,LEDA 1943561;;;B-Mag taken from LEDA. +IC2193;G;07:33:23.71;+31:29:00.8;Gem;1.47;0.96;87;14.70;;10.94;10.19;9.95;23.88;Sb;;;;;;;;2MASX J07332371+3129008,IRAS 07301+3135,MCG +05-18-018,PGC 021276,SDSS J073323.71+312900.6,UGC 03902;;; +IC2194;G;07:33:40.19;+31:20:03.9;Gem;1.51;0.38;50;15.10;;11.23;10.53;10.26;24.48;S0-a;;;;;;;;2MASX J07334020+3120038,MCG +05-18-020,PGC 021285;;; +IC2195;Other;07:28:27.63;-51:15:26.7;Car;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2196;G;07:34:09.74;+31:24:20.4;Gem;1.67;0.86;153;14.00;;10.22;9.52;9.24;23.90;E;;;;;;;;2MASX J07340975+3124212,MCG +05-18-021,PGC 021300,UGC 03910;;; +IC2197;G;07:34:25.31;+31:25:19.2;Gem;0.50;0.33;138;17.07;;;;;24.31;;;;;;;;;2MASX J07342529+3125191,PGC 213402;;Star superposed.;B-Mag taken from LEDA. +IC2198;G;07:34:11.13;+23:57:58.8;Gem;0.65;0.62;60;15.30;;11.97;11.27;11.04;23.23;E;;;;;;;;2MASX J07341112+2357586,PGC 021298;;; +IC2199;G;07:34:55.74;+31:16:34.5;Gem;1.03;0.58;26;13.60;;11.40;10.78;10.40;21.90;SBbc;;;;;;;;2MASX J07345574+3116346,IRAS 07317+3123,MCG +05-18-022,PGC 021328,UGC 03915;;; +IC2200;G;07:28:17.51;-62:21:10.5;Car;1.33;0.78;59;13.82;;10.58;9.90;9.60;22.96;SABb;;;;;;;;2MASX J07281750-6221103,ESO 123-012,ESO-LV 123-0120,IRAS 07276-6214,PGC 021075;;; +IC2201;G;07:36:16.81;+33:07:21.8;Gem;1.16;0.29;66;14.90;;11.48;10.80;10.56;23.41;Sa;;;;;;;;2MASX J07361682+3307213,MCG +06-17-020,PGC 021372,SDSS J073616.80+330721.7,SDSS J073616.81+330721.7,UGC 03926;;; +IC2202;G;07:27:54.74;-67:34:27.2;Vol;2.16;0.67;164;13.63;;10.43;9.66;9.45;23.12;SBbc;;;;;;;;2MASX J07275470-6734273,ESO 088-016,ESO-LV 88-0160,IRAS 07278-6728,PGC 021057;;; +IC2203;G;07:40:33.61;+34:13:48.2;Gem;0.90;0.70;154;14.50;;12.69;11.95;11.68;22.99;SBc;;;;;;;;2MASX J07403361+3413481,IRAS 07373+3420,MCG +06-17-025,PGC 021555,SDSS J074033.57+341348.5,SDSS J074033.60+341348.2,SDSS J074033.61+341348.0,SDSS J074033.61+341348.2,UGC 03958;;Multiple SDSS entries describe this object.; +IC2204;G;07:41:18.10;+34:13:55.8;Gem;0.89;0.82;138;16.93;16.26;11.63;10.89;10.65;23.75;Sab;;;;;;;;2MASX J07411808+3413560,IRAS 07380+3420,MCG +06-17-026,PGC 021581,SDSS J074118.10+341355.8,SDSS J074118.11+341355.8,UGC 03965;;; +IC2205;G;07:46:54.57;+26:52:20.4;Gem;0.71;0.35;52;15.20;;;;;23.08;E;;;;;;;;PGC 021773,SDSS J074654.57+265220.3,SDSS J074654.58+265220.4;;; +IC2206;*;07:45:50.39;-34:19:48.6;Pup;;;;11.43;10.50;8.45;8.11;7.55;;;;;;;;;;2MASS J07455041-3419483,HD 063099,HIP 037876,TYC 7114-644-1;;;Wolf-Rayet Star. +IC2207;G;07:49:50.89;+33:57:44.2;Gem;1.71;0.28;124;15.40;;11.59;10.69;10.22;23.54;SBc;;;;;;;;2MASX J07495085+3357432,IRAS 07466+3405,MCG +06-17-029,PGC 021918,SDSS J074950.89+335744.2,UGC 04040;;; +IC2208;G;07:52:07.84;+27:29:02.1;Gem;0.43;0.33;12;15.20;;11.65;10.95;10.66;22.53;S0;;;;;;;;2MASX J07520782+2729023,PGC 022040,SDSS J075207.83+272902.0,SDSS J075207.83+272902.1,SDSS J075207.84+272902.1;;; +IC2209;G;07:56:14.21;+60:18:14.7;Cam;0.84;0.75;145;14.50;;12.51;11.76;11.81;22.64;SBb;;;;;;;;2MASX J07561422+6018149,IRAS 07519+6026,MCG +10-12-017,PGC 022232,UGC 04093;;; +IC2210;**;07:56:56.49;+56:40:56.4;Lyn;;;;;;;;;;;;;;;;;;;;; +IC2211;G;07:57:45.66;+32:33:29.2;Gem;0.82;0.45;139;14.50;;11.46;10.71;10.47;22.68;SBa;;;;;;;;2MASX J07574566+3233295,IRAS 07546+3241,MCG +05-19-023,PGC 022314,SDSS J075745.65+323329.2,SDSS J075745.66+323329.1,SDSS J075745.66+323329.2,UGC 04119;;; +IC2212;G;07:58:57.20;+32:36:44.1;Gem;0.73;0.64;103;15.30;;12.02;11.22;11.03;23.49;S0-a;;;;;;;;2MASX J07585721+3236446,MCG +05-19-024,PGC 022371,SDSS J075857.19+323644.1,SDSS J075857.20+323644.1;;; +IC2213;G;07:59:06.55;+27:27:50.4;Gem;0.73;0.61;71;15.40;;12.02;11.22;11.02;23.39;S0-a;;;;;;;;2MASX J07590658+2727507,MCG +05-19-025,PGC 022372,SDSS J075906.55+272750.4;;; +IC2214;G;07:59:53.81;+33:17:25.9;Lyn;0.92;0.81;40;14.40;;11.70;10.89;10.54;23.00;SBab;;;;;;;;2MASX J07595380+3317259,IRAS 07566+3325,MCG +06-18-007,PGC 022417,SDSS J075953.79+331725.8,SDSS J075953.80+331725.8,SDSS J075953.81+331725.9,UGC 04143;;; +IC2215;Other;07:59:33.15;+24:55:44.3;Cnc;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2216;**;07:59:27.55;+05:36:52.2;CMi;;;;;;;;;;;;;;;;;;;;; +IC2217;G;08:00:49.73;+27:30:01.1;Cnc;0.59;0.42;87;14.20;;11.83;11.19;10.90;22.04;Sc;;;;;;;;2MASX J08004972+2730010,IRAS 07577+2738,MCG +05-19-031,PGC 022476,UGC 04160;;; +IC2218;G;08:01:38.49;+24:25:56.8;Cnc;0.85;0.30;19;15.70;;12.48;11.64;11.42;24.02;E;;;;;;;;2MASX J08013851+2425562,PGC 022509,SDSS J080138.48+242556.8;;; +IC2219;G;08:02:36.53;+27:26:15.0;Cnc;1.16;0.55;176;14.50;;11.44;10.71;10.57;22.89;Sc;;;;;;;;2MASX J08023653+2726150,IRAS 07595+2734,MCG +05-19-035,PGC 022565,SDSS J080236.52+272614.9,SDSS J080236.52+272615.0,UGC 04180;;; +IC2220;RfN;07:56:50.95;-59:07:32.8;Car;5.00;;;;;;;;;;;;;;;;;ESO 124-003,HD 065750,HIP 038834,IRAS 07559-5859;Toby Jug Nebula;Includes a Galactic star, SAO 235638.;Dimensions taken from LEDA +IC2221;G;08:05:07.95;+37:27:02.3;Lyn;0.64;0.45;23;16.22;;13.16;12.46;11.79;24.14;E;;;;;;;;2MASX J08050794+3727021,PGC 2101054,SDSS J080507.94+372702.1,SDSS J080507.94+372702.2,SDSS J080507.95+372702.3;;;B-Mag taken from LEDA. +IC2222;G;08:05:14.77;+37:28:21.3;Lyn;0.79;0.41;121;15.30;;12.64;12.03;11.60;23.23;SBbc;;;;;;;;2MASX J08051477+3728211,PGC 022700,SDSS J080514.76+372821.2,SDSS J080514.77+372821.2,SDSS J080514.77+372821.3;;; +IC2223;G;08:05:50.31;+37:27:36.2;Lyn;0.46;0.30;71;16.31;;12.92;12.16;12.02;23.32;S0;;;;;;2224;;2MASX J08055028+3727364,LEDA 2101266,SDSS J080550.30+372736.1,SDSS J080550.31+372736.1,SDSS J080550.31+372736.2;;The identification as IC 2223 is very uncertain.;B-Mag taken from LEDA. +IC2224;Dup;08:05:50.31;+37:27:36.2;Lyn;;;;;;;;;;;;;;;;2223;;;;; +IC2225;G;08:05:28.12;+35:56:48.1;Lyn;1.07;0.75;87;15.00;;11.59;10.91;10.60;23.49;SBa;;;;;;;;2MASX J08052807+3556480,MCG +06-18-012,PGC 022708,SDSS J080528.11+355648.0,SDSS J080528.11+355648.1,SDSS J080528.12+355648.1;;; +IC2226;G;08:06:11.22;+12:32:36.6;Cnc;1.05;0.78;142;14.90;;11.58;10.87;10.82;22.92;SABa;;;;;;;;2MASX J08061122+1232361,MCG +02-21-016,PGC 022747,SDSS J080611.21+123236.6,UGC 04220;;; +IC2227;G;08:07:07.18;+36:14:00.5;Lyn;1.11;0.58;30;14.79;14.19;12.05;11.35;10.78;23.54;SBa;;;;;;;;2MASX J08070717+3614001,IRAS 08038+3622,PGC 022787,SDSS J080707.17+361400.4,SDSS J080707.18+361400.4,SDSS J080707.18+361400.5;;; +IC2228;*;08:07:05.65;+08:01:31.3;Cnc;;;;;;;;;;;;;;;;;;;;CGCG 031-048 is often incorrectly called IC 2228.; +IC2229;Dup;08:09:44.16;+25:52:53.8;Cnc;;;;;;;;;;;;;;;;0496;;;;; +IC2230;G;08:10:56.55;+25:41:04.9;Cnc;0.57;0.46;159;15.60;;12.47;11.68;11.40;23.26;S0;;;;;;;;2MASX J08105653+2541050,PGC 022944,SDSS J081056.55+254104.9;;; +IC2231;G;08:11:01.60;+05:05:14.4;Hya;1.67;1.67;120;15.00;;10.36;9.70;9.39;24.91;E;;;;;;;;2MASX J08110158+0505143,MCG +01-21-018,PGC 022950,UGC 04265;;; +IC2232;Dup;08:12:57.92;+36:15:16.7;Lyn;;;;;;;;;;;;;;;2543;;;;;; +IC2233;G;08:13:58.91;+45:44:31.7;Lyn;2.88;0.40;172;13.41;12.63;11.46;10.95;10.75;21.84;SBc;;;;;;;;2MASX J08135890+4544317,MCG +08-15-052,PGC 023071,SDSS J081358.80+454442.3,UGC 04278;;Many SDSS entries strung out along the plane of this galaxy.; +IC2234;G;08:13:51.62;+35:29:34.5;Lyn;0.54;0.51;124;15.98;;12.46;11.84;11.43;23.52;E;;;;;;;;2MASX J08135159+3529340,PGC 2065350,SDSS J081351.61+352934.4,SDSS J081351.61+352934.5,SDSS J081351.62+352934.4,SDSS J081351.62+352934.5,SDSS J081351.62+352934.6;;;B-Mag taken from LEDA. +IC2235;**;08:13:33.83;+24:04:36.4;Cnc;;;;;;;;;;;;;;;;;;SDSS J081333.82+240436.3;;; +IC2236;**;08:13:37.52;+24:02:55.7;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2237;*;08:14:08.09;+24:40:45.5;Cnc;;;;;;;;;;;;;;;;;;SDSS J081408.08+244045.4;;; +IC2238;*;08:14:08.61;+24:39:42.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J081408.61+243942.8;;; +IC2239;G;08:14:06.79;+23:51:58.9;Cnc;0.84;0.71;140;15.30;;11.36;10.69;10.34;23.44;S0-a;;;;;;;;2MASX J08140678+2351588,IRAS 08111+2401,MCG +04-20-006,PGC 023078,SDSS J081406.79+235158.9;;; +IC2240;*;08:14:47.48;+24:28:03.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J081447.48+242803.2;;; +IC2241;**;08:15:08.64;+24:07:45.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J081508.64+240745.7;;; +IC2242;*;08:15:11.46;+24:07:58.6;Cnc;;;;;;;;;;;;;;;;;;SDSS J081511.45+240758.5;;; +IC2243;*;08:15:18.43;+23:57:44.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2244;*;08:15:22.27;+24:32:45.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J081522.27+243244.9;;; +IC2245;*;08:15:28.42;+24:32:09.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J081528.42+243209.8;;; +IC2246;*;08:16:00.79;+23:50:59.1;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2247;G;08:15:59.10;+23:11:58.6;Cnc;1.82;0.27;149;15.20;;11.26;10.50;10.11;22.74;Sbc;;;;;;;;2MASX J08155906+2311583,IRAS 08130+2321,MCG +04-20-008,PGC 023169,SDSS J081559.09+231158.5,SDSS J081559.09+231158.6,SDSS J081559.10+231158.7,UGC 04299;;; +IC2248;G;08:16:04.81;+23:08:02.5;Cnc;0.79;0.46;52;15.10;;11.74;11.07;10.88;23.03;Sa;;;;;;;;2MASX J08160478+2308019,MCG +04-20-009,PGC 023176,SDSS J081604.80+230802.4,SDSS J081604.81+230802.5;;; +IC2249;G;08:16:34.43;+24:29:37.4;Cnc;0.31;0.25;122;16.50;;14.86;14.12;14.13;22.84;Sbc;;;;;;;;2MASX J08163443+2429369,PGC 023202,SDSS J081634.43+242937.4;;; +IC2250;G;08:16:32.16;+23:37:58.7;Cnc;0.41;0.31;122;16.58;;;;;23.33;Sd;;;;;;;;2MASX J08163213+2337588,LEDA 1690833,SDSS J081632.15+233758.7;;;B-Mag taken from LEDA. +IC2251;**;08:16:38.79;+23:56:58.7;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2252;*;08:16:41.95;+24:41:38.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J081641.94+244137.9;;; +IC2253;G;08:16:33.88;+21:24:35.6;Cnc;0.95;0.58;168;15.00;;11.35;10.65;10.30;23.32;S0;;;;;;;;2MASX J08163389+2124356,MCG +04-20-011,PGC 023204,SDSS J081633.88+212435.5,SDSS J081633.88+212435.6;;; +IC2254;G;08:16:45.51;+24:46:48.8;Cnc;0.70;0.43;119;15.40;;12.26;11.48;11.19;23.33;S0;;;;;;;;2MASX J08164548+2446483,PGC 023206,SDSS J081645.50+244648.8,SDSS J081645.51+244648.8;;; +IC2255;**;08:16:43.18;+23:27:25.6;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2256;G;08:16:54.43;+24:10:36.6;Cnc;0.79;0.40;8;15.20;;12.85;12.06;11.89;22.79;SABc;;;;;;;;2MASX J08165441+2410372,MCG +04-20-012,PGC 023214,SDSS J081654.43+241036.5,SDSS J081654.43+241036.6;;; +IC2257;**;08:17:10.81;+23:38:59.7;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2258;*;08:17:16.44;+23:34:39.1;Cnc;;;;;;;;;;;;;;;;;;SDSS J081716.43+233439.0;;; +IC2259;*;08:17:18.15;+23:33:56.3;Cnc;;;;;;;;;;;;;;;;;;SDSS J081718.15+233356.2;;The IC identification is not certain.; +IC2260;*;08:17:27.58;+24:40:23.7;Cnc;;;;;;;;;;;;;;;;;;SDSS J081727.57+244023.7;;; +IC2261;**;08:17:32.82;+23:30:44.4;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2262;*;08:17:22.56;+18:27:16.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2263;*;08:17:40.92;+23:34:48.4;Cnc;;;;;;;;;;;;;;;;;;SDSS J081740.92+233448.4;;; +IC2264;*;08:17:44.93;+23:42:53.1;Cnc;;;;;;;;;;;;;;;;;;SDSS J081744.92+234253.0;;; +IC2265;*;08:17:50.23;+24:11:36.7;Cnc;;;;;;;;;;;;;;;;;;SDSS J081750.22+241136.6;;; +IC2266;*;08:17:38.45;+18:24:37.3;Cnc;;;;;;;;;;;;;;;;;;SDSS J081738.44+182437.3;;; +IC2267;G;08:18:01.61;+24:44:07.2;Cnc;1.85;0.24;152;15.10;;;;;23.72;Sc;;;;;;;;MCG +04-20-016,PGC 023266,SDSS J081801.60+244407.1,SDSS J081801.61+244407.1,UGC 04315;;"The CGCG/UGC ""companion"" is a giant HII region at the south end."; +IC2268;G;08:18:06.56;+24:47:47.2;Cnc;0.38;0.37;90;15.30;;13.63;13.04;12.91;22.32;E;;;;;;;;2MASX J08180656+2447469,PGC 023273,SDSS J081806.55+244747.1,SDSS J081806.55+244747.2,SDSS J081806.56+244747.2;;; +IC2269;G;08:18:08.76;+23:02:51.3;Cnc;0.98;0.21;30;15.60;;12.29;11.55;11.16;23.37;Sb;;;;;;;;2MASX J08180877+2302518,PGC 023278,SDSS J081808.76+230251.2,SDSS J081808.76+230251.3;;; +IC2270;**;08:18:00.37;+19:05:51.6;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2271;G;08:18:19.70;+24:31:36.9;Cnc;0.40;0.31;150;15.30;;14.14;13.44;13.09;22.61;E;;;;;;;;2MASX J08181972+2431363,PGC 023283,SDSS J081819.69+243136.9,SDSS J081819.70+243136.9;;; +IC2272;**;08:18:07.17;+18:44:09.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2273;*;08:18:12.82;+18:24:06.0;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2274;Other;08:18:14.01;+18:39:57.0;Cnc;;;;;;;;;;;;;;;;;;;;This is a Galactic triple star.; +IC2275;*;08:18:13.72;+18:24:41.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J081813.71+182441.1;;; +IC2276;Other;08:18:29.37;+18:28:39.8;Cnc;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC2277;*;08:18:32.44;+18:39:00.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2278;Other;08:18:34.45;+18:27:41.5;Cnc;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC2279;*;08:18:35.52;+18:34:04.6;Cnc;;;;;;;;;;;;;;;;;;SDSS J081835.51+183404.6;;; +IC2280;*;08:18:38.52;+18:26:59.1;Cnc;;;;;;;;;;;;;;;;;;SDSS J081838.52+182659.0;;The IC number includes a defect on the original Heidelberg plate.; +IC2281;*;08:18:54.15;+18:54:32.8;Cnc;;;;12.71;12.29;10.89;10.66;10.62;;;;;;;;;;2MASS J08185414+1854328,SDSS J081854.14+185432.7,TYC 1386-48-1;;; +IC2282;G;08:19:15.53;+24:47:33.5;Cnc;0.88;0.77;45;15.30;;12.58;12.01;11.92;22.82;Sbc;;;;;;;;2MASX J08191550+2447335,MCG +04-20-020,PGC 023333,SDSS J081915.52+244733.5;;; +IC2283;*;08:19:17.53;+24:47:11.1;Cnc;;;;;;;;;;;;;;;;;;SDSS J081917.52+244711.0;;; +IC2284;*;08:18:58.68;+18:36:20.1;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2285;**;08:19:02.81;+18:54:52.8;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2286;*;08:19:04.09;+18:57:22.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J081904.08+185722.0;;; +IC2287;*;08:19:07.63;+19:24:01.7;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2288;G;08:19:22.38;+23:44:50.3;Cnc;0.53;0.31;68;15.50;;14.04;13.44;13.39;22.87;SABc;;;;;;;;2MASX J08192236+2344505,MCG +04-20-023,PGC 023342,SDSS J081922.37+234450.1,SDSS J081922.38+234450.2,SDSS J081922.38+234450.3;;Position in 1997AJ....113...22G is incorrect.; +IC2289;*;08:19:07.64;+18:29:53.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J081907.64+182953.8;;; +IC2290;G;08:19:15.86;+19:18:47.7;Cnc;0.58;0.42;149;15.20;;13.31;12.67;12.46;22.84;S?;;;;;;;;2MASX J08191584+1918475,PGC 023334,SDSS J081915.85+191847.6,SDSS J081915.86+191847.7;;; +IC2291;*;08:19:18.15;+18:30:30.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J081918.14+183030.2;;; +IC2292;*;08:19:21.99;+19:33:48.9;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2293;G;08:19:32.11;+21:23:39.5;Cnc;0.89;0.67;125;15.20;;12.64;11.88;11.64;23.38;SBab;;;;;;;;2MASX J08193208+2123394,MCG +04-20-024,PGC 023352,SDSS J081932.11+212339.4,SDSS J081932.11+212339.5;;; +IC2294;*;08:19:26.04;+18:59:04.9;Cnc;;;;;;;;;;;;;;;;;;SDSS J081926.03+185904.9;;; +IC2295;**;08:19:26.99;+18:24:51.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J081926.99+182451.1;;; +IC2296;*;08:19:28.55;+18:53:55.5;Cnc;;;;;;;;;;;;;;;;;;SDSS J081928.54+185355.4;;; +IC2297;*;08:20:04.62;+18:22:55.1;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2298;*;08:20:07.08;+18:24:11.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2299;**;08:20:09.41;+19:20:14.8;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2300;*;08:20:12.60;+18:25:12.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J082012.60+182512.2;;; +IC2301;*;08:20:13.93;+18:26:01.5;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2302;*;08:20:17.28;+19:21:26.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082017.27+192125.9;;; +IC2303;*;08:20:19.27;+19:25:08.4;Cnc;;;;;;;;;;;;;;;;;;SDSS J082019.27+192508.3;;; +IC2304;**;08:20:35.69;+19:26:22.3;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2305;*;08:20:40.08;+19:27:10.5;Cnc;;;;;;;;;;;;;;;;;;SDSS J082040.07+192710.4;;; +IC2306;*;08:20:39.40;+19:06:37.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082039.40+190637.0;;; +IC2307;G;08:20:42.82;+19:26:26.4;Cnc;0.85;0.36;162;15.50;;12.26;11.59;11.21;23.79;S0-a;;;;;;;;2MASX J08204284+1926264,PGC 023417,SDSS J082042.81+192626.3,SDSS J082042.81+192626.4;;; +IC2308;GTrpl;08:20:45.25;+19:21:44.2;Cnc;0.63;0.32;93;;;;;;22.85;Sab;;;;;;;;2MASX J08204524+1921444,IRAS 08178+1931,MCG +03-22-001,PGC 023415;;;NED does not clearly specify components. +IC2308 NED01;G;08:20:44.85;+19:21:44.0;Cnc;0.28;0.11;87;17.10;;;;;;Sbc;;;;;;;;SDSS J082044.84+192143.9;;;B-Mag taken from LEDA +IC2309;G;08:20:43.61;+18:23:52.2;Cnc;0.76;0.25;6;15.60;;13.21;12.49;12.21;23.23;Sc;;;;;;;;2MASX J08204363+1823524,PGC 023416,SDSS J082043.60+182352.2,SDSS J082043.61+182352.2;;; +IC2310;*;08:20:46.32;+18:27:48.6;Cnc;;;;;;;;;;;;;;;;;;SDSS J082046.31+182748.5;;; +IC2311;G;08:18:45.98;-25:22:11.1;Pup;2.14;1.99;47;12.49;;9.31;8.60;8.36;23.02;E;;;;;;;;2MASX J08184597-2522111,ESO 495-002,ESO-LV 495-0020,MCG -04-20-007,PGC 023304;;|b| < 10 degrees.; +IC2312;GPair;08:20:53.38;+18:30:39.2;Cnc;0.70;;;;;;;;;;;;;;;;;;;The IC number includes two neighboring stars.;Diameter of the group inferred by the author. +IC2312 NED01;G;08:20:53.26;+18:30:30.7;Cnc;0.44;0.27;175;16.68;;13.60;12.91;12.58;23.17;Sbc;;;;;;;;2MASX J08205326+1830304,PGC 1561585,SDSS J082053.55+183044.5,SDSS J082053.55+183044.6;;;B-Mag taken from LEDA. +IC2312 NED02;G;08:20:53.55;+18:30:44.6;Cnc;0.25;0.17;55;18.21;;;;;24.00;;;;;;;;;2MASX J08205355+1830444,PGC 1561719,SDSS J082053.26+183030.6;;;B-Mag taken from LEDA. +IC2313;*;08:20:54.58;+18:30:51.1;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2314;**;08:21:03.64;+18:45:45.6;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2315;*;08:21:10.69;+18:54:54.9;Cnc;;;;;;;;;;;;;;;;;;SDSS J082110.69+185454.9;;; +IC2316;**;08:21:15.20;+19:45:33.9;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2317;*;08:21:21.46;+18:50:39.6;Cnc;;;;;;;;;;;;;;;;;;SDSS J082121.46+185039.5;;; +IC2318;*;08:21:32.76;+18:37:22.4;Cnc;;;;;;;;;;;;;;;;;;SDSS J082132.76+183722.3;;The IC identification is not certain.; +IC2319;*;08:21:33.06;+18:28:36.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2320;*;08:21:35.40;+18:40:12.9;Cnc;;;;;;;;;;;;;;;;;;SDSS J082135.39+184012.8;;; +IC2321;*;08:21:39.17;+18:28:08.9;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2322;*;08:21:38.98;+18:29:02.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J082138.97+182902.8;;; +IC2323;*;08:21:41.22;+18:36:47.7;Cnc;;;;;;;;;;;;;;;;;;SDSS J082141.21+183647.6;;; +IC2324;*;08:21:58.73;+19:11:38.5;Cnc;;;;;;;;;;;;;;;;;;SDSS J082158.72+191138.5;;; +IC2325;Other;08:22:08.73;+18:54:43.7;Cnc;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC2326;Other;08:22:12.14;+19:00:43.5;Cnc;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC2327;G;08:21:27.97;+03:10:09.4;Hya;1.21;0.39;169;13.90;;11.90;11.25;10.94;22.55;SABa;;;;;;;;2MASX J08212796+0310094,IRAS 08188+0319,MCG +01-22-002,PGC 023447,UGC 04356;;; +IC2328;Other;08:22:17.38;+19:36:59.2;Cnc;;;;;;;;;;;;;;;;;;;;This is a defect (or an asteroid trail) on the original Heidelberg plate.; +IC2329;G;08:22:19.48;+19:24:57.5;Cnc;2.00;0.36;116;15.00;;;;;23.66;SABd;;;;;;;;MCG +03-22-005,PGC 023483,SDSS J082219.48+192457.5,UGC 04365;;Position in 1986AJ.....91..705B is incorrect.; +IC2330;*;08:22:23.14;+18:51:13.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082223.13+185113.0;;The IC number includes a defect (or an asteroid trail).; +IC2331;**;08:22:35.15;+19:40:46.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J082235.14+194046.8;;; +IC2332;*;08:22:39.63;+19:55:23.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082239.63+195523.0;;; +IC2333;*;08:23:00.85;+19:04:54.7;Cnc;;;;;;;;;;;;;;;;;;SDSS J082300.84+190454.6;;; +IC2334;*;08:22:59.97;+18:36:49.6;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2335;G;08:23:07.04;+19:24:28.9;Cnc;0.45;0.29;164;16.77;;;;;23.76;;;;;;;;;2MASX J08230702+1924289,PGC 1591222;;The IC number includes a nearby star.;B-Mag taken from LEDA. +IC2336;*;08:23:19.04;+18:32:14.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J082319.04+183214.8;;; +IC2337;G;08:23:20.29;+18:32:06.8;Cnc;0.48;0.26;46;15.70;;13.21;12.50;12.03;23.24;S0-a;;;;;;;;2MASX J08232025+1832065,IRAS 08205+1841,PGC 023529,SDSS J082320.28+183206.7,SDSS J082320.29+183206.8;;; +IC2338;G;08:23:32.67;+21:20:17.1;Cnc;0.55;0.40;32;14.70;;12.74;12.52;11.89;22.60;SBc;;;;;;;;2MASX J08233267+2120174,MCG +04-20-044,PGC 023542,SDSS J082332.66+212017.1,SDSS J082332.67+212017.1,UGC 04383 NED01;;Component 'a)' in UGC notes.; +IC2339;G;08:23:34.21;+21:20:51.5;Cnc;0.89;0.45;61;14.70;;12.24;11.58;11.37;22.68;Sc;;;;;;;;2MASX J08233424+2120514,MCG +04-20-045,PGC 023546,SDSS J082334.21+212051.5,UGC 04383 NED02;;Component 'b)' in UGC notes.; +IC2340;G;08:23:30.05;+18:44:58.0;Cnc;1.07;0.73;160;14.60;;11.15;10.38;10.19;23.39;E-S0;;;;;;;;2MASX J08233004+1844574,MCG +03-22-006,PGC 023544,SDSS J082330.05+184457.9,SDSS J082330.05+184458.0;;; +IC2341;G;08:23:41.44;+21:26:05.6;Cnc;1.18;0.57;3;14.90;;11.25;10.60;10.31;23.78;E-S0;;;;;;;;2MASX J08234141+2126048,MCG +04-20-046,PGC 023552,SDSS J082341.44+212605.5,SDSS J082341.45+212605.6,UGC 04384;;; +IC2342;*;08:23:32.10;+18:34:46.6;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2343;*;08:23:53.93;+19:01:32.3;Cnc;;;;;;;;;;;;;;;;;;SDSS J082353.93+190132.3;;; +IC2344;*;08:23:54.74;+18:39:35.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082354.73+183935.0;;; +IC2345;*;08:24:08.44;+19:57:07.8;Cnc;;;;;;;;;;;;;;;;;;SDSS J082408.44+195707.8;;; +IC2346;*;08:24:10.90;+19:42:22.4;Cnc;;;;;;;;;;;;;;;;;;SDSS J082410.89+194222.3;;; +IC2347;*;08:24:14.08;+18:46:25.9;Cnc;;;;;;;;;;;;;;;;;;SDSS J082414.08+184625.9;;; +IC2348;G;08:24:20.25;+20:31:59.7;Cnc;0.66;0.32;91;15.60;;12.92;12.14;11.87;23.17;Sab;;;;;;;;2MASX J08242022+2031594,MCG +04-20-049,PGC 023589,SDSS J082420.24+203159.6,SDSS J082420.24+203159.7,SDSS J082420.25+203159.7;;; +IC2349;*;08:24:16.71;+19:00:29.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082416.70+190029.0;;; +IC2350;Other;08:24:28.38;+19:33:07.4;Cnc;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2351;*;08:24:30.20;+18:35:19.6;Cnc;;;;;;;;;;;;;;;;;;SDSS J082430.19+183519.5;;; +IC2352;*;08:24:39.98;+19:36:10.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082439.98+193610.0;;; +IC2353;*;08:24:37.70;+18:39:23.6;Cnc;;;;;;;;;;;;;;;;;;SDSS J082437.69+183923.5;;; +IC2354;**;08:24:40.76;+18:39:59.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2355;**;08:24:51.81;+20:27:48.5;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2356;*;08:25:00.86;+19:29:51.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J082500.86+192951.2;;; +IC2357;*;08:25:04.56;+19:30:31.9;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2358;*;08:25:05.10;+19:29:42.7;Cnc;;;;;;;;;;;;;;;;;;SDSS J082505.10+192942.6;;; +IC2359;Dup;08:25:12.07;+20:20:05.1;Cnc;;;;;;;;;;;;;;;2582;;;;;; +IC2360;*;08:25:15.09;+19:30:59.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J082515.09+193059.1;;; +IC2361;G;08:25:44.50;+27:52:28.5;Cnc;1.56;0.50;78;14.90;;12.09;11.54;11.16;23.80;SBab;;;;;;;;2MASX J08254451+2752281,IRAS 08227+2802,MCG +05-20-012,PGC 023646,SDSS J082544.49+275228.4,SDSS J082544.50+275228.4,UGC 04394;;; +IC2362;**;08:25:41.42;+19:56:32.0;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2363;G;08:25:45.42;+19:26:57.4;Cnc;0.83;0.70;5;15.00;;11.88;11.26;10.93;23.12;Sbc;;;;;;;;2MASX J08254545+1926576,IRAS 08228+1936,MCG +03-22-011,PGC 023650,SDSS J082545.41+192657.4,SDSS J082545.42+192657.4;;; +IC2364;**;08:25:51.49;+19:45:35.0;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2365;G;08:26:18.06;+27:50:24.5;Cnc;1.21;0.85;44;14.70;;11.42;10.69;10.44;23.70;S0;;;;;;2366;;2MASX J08261809+2750244,MCG +05-20-014,PGC 023673,SDSS J082618.05+275024.4,SDSS J082618.06+275024.4,SDSS J082618.06+275024.5,UGC 04402;;The identification with IC 2365 is not certain.; +IC2366;Dup;08:26:18.06;+27:50:24.5;Cnc;;;;;;;;;;;;;;;;2365;;;;; +IC2367;G;08:24:10.08;-18:46:32.0;Pup;2.45;1.30;60;12.40;;9.69;8.89;8.44;22.97;Sb;;;;;;;;2MASX J08241008-1846318,ESO 562-005,IRAS 08219-1836,MCG -03-22-001,PGC 023579;;; +IC2368;*;08:26:01.29;+19:52:58.8;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2369;*;08:26:16.06;+20:13:56.1;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2370;*;08:26:22.82;+19:38:17.0;Cnc;;;;;;;;;;;;;;;;;;SDSS J082622.82+193817.0;;; +IC2371;*;08:26:36.98;+19:47:54.9;Cnc;;;;;;;;;;;;;;;;;;SDSS J082636.97+194754.9;;; +IC2372;*;08:26:40.62;+19:52:59.1;Cnc;;;;;;;;;;;;;;;;;;SDSS J082640.62+195259.1;;; +IC2373;G;08:26:48.98;+20:21:53.4;Cnc;0.59;0.48;160;15.50;;14.05;13.46;13.29;22.74;Sc;;;;;;;;2MASX J08264898+2021535,MCG +04-20-054,PGC 023695,SDSS J082648.97+202153.4,SDSS J082648.98+202153.4,UGC 04409;;; +IC2374;G;08:28:22.14;+30:26:35.5;Cnc;0.53;0.48;161;15.30;;13.15;12.39;11.94;23.38;SBb;;;;;;;;2MASX J08282217+3026353,MCG +05-20-016,PGC 023758,SDSS J082822.13+302635.5,SDSS J082822.14+302635.5;;; +IC2375;G;08:26:19.67;-13:18:11.3;Pup;2.18;0.35;84;;;11.12;10.34;10.07;;SBb;;;;;;;;2MASX J08261966-1318113,MCG -02-22-014,PGC 023672;;; +IC2376;G;08:28:26.13;+30:24:27.7;Cnc;0.89;0.60;64;15.50;;12.43;11.63;11.34;24.25;E;;;;;;;;2MASX J08282612+3024273,PGC 023764,SDSS J082826.12+302427.6;;; +IC2377;G;08:26:26.08;-13:18:22.2;Pup;1.05;0.62;21;14.76;;11.62;10.98;10.66;23.24;Sa;;;;;;;;2MASX J08262609-1318223,MCG -02-22-015,PGC 023681;;;B-Mag taken from LEDA. +IC2378;G;08:28:31.65;+30:25:52.8;Cnc;1.31;0.92;23;15.30;;11.10;10.35;10.03;23.70;E-S0;;;;;;;;2MASX J08283161+3025523,MCG +05-20-017,PGC 023771,SDSS J082831.64+302552.7,SDSS J082831.65+302552.8;;; +IC2379;G;08:26:27.80;-13:17:34.3;Pup;0.96;0.49;35;;;11.68;11.12;10.70;;S0-a;;;;;;;;2MASX J08262781-1317343,MCG -02-22-016,PGC 023683;;; +IC2380;G;08:28:43.89;+30:24:16.3;Cnc;0.80;0.72;162;15.50;;11.97;11.22;11.08;23.54;S0;;;;;;;;2MASX J08284390+3024163,MCG +05-20-019,PGC 023777,SDSS J082843.88+302416.3,SDSS J082843.89+302416.3;;; +IC2381;**;08:28:21.74;+19:47:29.9;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2382;G;08:28:46.12;+22:03:12.5;Cnc;0.89;0.58;165;14.90;;11.19;10.51;10.22;23.17;S0;;;;;;;;2MASX J08284612+2203124,MCG +04-20-064,PGC 023787,SDSS J082846.11+220312.4,SDSS J082846.11+220312.5,SDSS J082846.12+220312.5;;; +IC2383;G;08:29:41.35;+30:41:16.7;Cnc;0.61;0.45;93;15.70;;12.11;11.26;10.97;23.18;E-S0;;;;;;;;2MASX J08294135+3041163,PGC 023829,SDSS J082941.35+304116.7;;; +IC2384;G;08:34:23.48;+32:26:05.2;Cnc;0.88;0.65;73;15.30;;12.13;11.37;11.31;23.82;S0-a;;;;;;;;2MASX J08342348+3226055,MCG +06-19-009 NED01,PGC 024062,SDSS J083423.48+322605.1;;; +IC2385;G;08:35:10.36;+37:15:57.5;Lyn;0.79;0.52;27;15.10;;12.22;11.56;11.16;22.98;Sbc;;;;;;;;2MASX J08351034+3715576,IRAS 08319+3726,MCG +06-19-010,PGC 024103,SDSS J083510.35+371557.4,SDSS J083510.36+371557.4,SDSS J083510.36+371557.5;;; +IC2386;*;08:34:43.84;+25:48:24.1;Cnc;;;;;;;;;;;;;;;;;;SDSS J083443.84+254824.1;;; +IC2387;G;08:38:34.00;+30:47:55.3;Cnc;1.16;0.53;18;14.80;;12.00;11.41;11.09;23.16;Sc;;;;;;;;2MASX J08383400+3047554,IRAS 08354+3058,MCG +05-21-003,PGC 024299,SDSS J083833.99+304755.2,SDSS J083834.00+304755.2,SDSS J083834.00+304755.3,UGC 04511;;; +IC2388;G;08:39:56.52;+19:38:43.1;Cnc;0.57;0.33;150;15.70;;13.02;12.37;11.89;23.41;S0-a;;;;;;;;2MASX J08395655+1938427,PGC 024365,SDSS J083956.52+193843.0,SDSS J083956.52+193843.1;;; +IC2389;G;08:47:57.77;+73:32:21.1;Cam;1.30;0.30;125;13.20;;12.13;11.72;11.50;22.31;SBb;;;;;;;;2MASX J08475768+7332216,MCG +12-09-011,PGC 024711,UGC 04576;;; +IC2390;Dup;08:41:51.74;+19:42:09.1;Cnc;;;;;;;;;;;;;;;2643;;;;;; +IC2391;OCl;08:40:31.88;-53:02:07.7;Vel;29.10;;;;2.50;;;;;;;;;;;;;C 085,MWSC 1529;omi Vel Cluster;; +IC2392;G;08:44:30.80;+18:17:10.1;Cnc;0.61;0.46;5;14.60;;12.50;12.08;11.68;22.41;Sc;;;;;;;;2MASX J08443081+1817102,IRAS 08416+1828,MCG +03-23-001,PGC 024559;;; +IC2393;G;08:46:49.19;+28:10:16.7;Cnc;1.18;0.80;27;14.60;;10.91;10.18;9.93;23.57;E;;;;;;;;2MASX J08464916+2810165,MCG +05-21-007,PGC 024669,SDSS J084649.18+281016.7,SDSS J084649.19+281016.7,UGC 04589;;; +IC2394;G;08:47:06.91;+28:14:11.6;Cnc;0.68;0.59;98;15.20;;12.06;11.46;11.15;23.03;Sb;;;;;;;;2MASX J08470688+2814114,MCG +05-21-009,PGC 024678,SDSS J084706.90+281411.6,SDSS J084706.91+281411.5,SDSS J084706.91+281411.6,UGC 04595;;; +IC2395;OCl;08:42:30.11;-48:09:02.0;Vel;6.00;;;;4.60;;;;;;;;;;;;;MWSC 1537;;; +IC2396;*;08:46:40.59;+17:38:57.1;Cnc;;;;;;;;;;;;;;;;;;SDSS J084640.59+173857.0;;; +IC2397;**;08:46:41.86;+17:39:35.2;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2398;G;08:46:44.57;+17:45:17.7;Cnc;0.64;0.33;6;14.80;;12.76;12.06;11.47;23.14;S0-a;;;;;;;;2MASX J08464456+1745177,IRAS 08439+1756,MCG +03-23-003,PGC 024664,SDSS J084644.57+174517.6,SDSS J084644.57+174517.7;;; +IC2399;G;08:47:49.73;+18:54:42.8;Cnc;0.53;0.50;3;15.60;;13.83;13.28;13.45;23.19;SBc;;;;;;;;2MASX J08474969+1854427,PGC 024709,SDSS J084749.72+185442.7,SDSS J084749.72+185442.8,SDSS J084749.73+185442.8;;IC identification is not certain.; +IC2400;G;08:47:59.15;+38:04:11.3;Lyn;0.90;0.38;112;15.00;;12.70;11.97;11.72;23.01;Sc;;;;;;;;2MASX J08475913+3804114,IRAS 08447+3815,MCG +06-20-002,PGC 024714,SDSS J084759.15+380411.2,SDSS J084759.15+380411.3,SDSS J084759.16+380411.2;;; +IC2401;G;08:48:10.30;+37:45:19.3;Lyn;1.12;0.74;101;15.00;;11.41;10.69;10.39;23.88;S0;;;;;;;;2MASX J08481028+3745194,MCG +06-20-005,PGC 024728,SDSS J084810.29+374519.3,SDSS J084810.30+374519.3,UGC 04600;;; +IC2402;G;08:47:59.04;+31:47:08.3;Cnc;0.82;0.75;120;14.99;;11.76;10.97;10.59;23.68;S0-a;;;;;;;;2MASX J08475906+3147083,MCG +05-21-010,PGC 024720,SDSS J084759.04+314708.3;;; +IC2403;G;08:46:09.33;-15:21:25.2;Hya;0.70;0.38;120;15.42;;11.70;10.91;10.60;23.24;S0-a;;;;;;;;2MASX J08460933-1521252,IRAS 08438-1510,LEDA 090089;;; +IC2404;G;08:48:10.45;+29:29:28.9;Cnc;0.76;0.55;109;15.50;14.75;12.39;11.61;11.29;23.47;S0-a;;;;;;;;2MASX J08481050+2929288,PGC 024725,SDSS J084810.45+292928.9;;; +IC2405;G;08:48:42.76;+37:13:07.1;Lyn;0.76;0.57;7;14.80;;12.46;11.67;11.52;22.93;Sbc;;;;;;;;2MASX J08484272+3713068,MCG +06-20-006,PGC 024766,SDSS J084842.75+371307.0,SDSS J084842.75+371307.1;;; +IC2406;G;08:48:04.61;+17:42:08.6;Cnc;1.64;0.77;173;14.40;;11.19;10.47;10.13;23.82;S0-a;;;;;;;;2MASX J08480462+1742089,IRAS 08452+1753,MCG +03-23-005,PGC 024721,SDSS J084804.60+174208.5,SDSS J084804.61+174208.5,SDSS J084804.61+174208.6,UGC 04606;;; +IC2407;G;08:48:09.15;+17:36:41.3;Cnc;1.25;0.23;86;15.10;;12.15;11.49;11.08;23.16;Sbc;;;;;;;;2MASX J08480916+1736409,MCG +03-23-006,PGC 024726,SDSS J084809.14+173641.2,SDSS J084809.15+173641.3,UGC 04607;;; +IC2408;*;08:48:20.24;+19:02:14.7;Cnc;;;;16.50;;13.70;13.12;12.96;;;;;;;;;;2MASS J08482024+1902147,SDSS J084820.24+190214.7;;; +IC2409;G;08:48:24.66;+18:19:52.1;Cnc;0.92;0.73;148;14.40;;11.60;11.06;10.78;22.81;Sa;;;;;;;;2MASX J08482467+1819518,IRAS 08455+1830,MCG +03-23-008,PGC 024748,SDSS J084824.65+181952.0,SDSS J084824.66+181952.1,UGC 04608;;; +IC2410;Dup;08:48:27.25;+19:01:10.2;Cnc;;;;;;;;;;;;;;;2667;;;;;; +IC2411;Dup;08:48:30.17;+19:02:38.0;Cnc;;;;;;;;;;;;;;;2667B;;;;;; +IC2412;*;08:49:23.71;+18:32:35.4;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2413;**;08:49:31.57;+18:44:41.1;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2414;G;08:49:50.12;+18:47:32.7;Cnc;0.58;0.39;46;15.70;;12.72;12.11;11.96;23.23;E;;;;;;;;2MASX J08495011+1847324,PGC 024811,SDSS J084950.11+184732.7;;; +IC2415;*;08:50:01.91;+18:39:05.8;Cnc;;;;16.30;;14.27;13.83;13.83;;;;;;;;;;2MASS J08500190+1839057,SDSS J085001.90+183905.7;;; +IC2416;*;08:50:32.15;+18:33:34.6;Cnc;;;;;;;;;;;;;;;;;;SDSS J085032.15+183334.6;;; +IC2417;*;08:51:08.16;+18:37:29.7;Cnc;;;;15.00;14.50;13.22;12.83;12.74;;;;;;;;;;2MASS J08510815+1837297,SDSS J085108.16+183729.7;;; +IC2418;G;08:51:25.08;+17:56:42.9;Cnc;0.39;0.33;111;16.42;;;;;23.14;Sc;;;;;;;;2MASX J08512508+1756423,PGC 1545976,SDSS J085125.08+175642.9;;;B-Mag taken from LEDA. +IC2419;**;08:52:09.40;+18:06:04.9;Cnc;;;;;;;;;;;;;;;;;;;;; +IC2420;G;08:51:33.76;+03:06:02.5;Hya;0.84;0.72;141;15.10;;11.73;11.07;10.81;23.38;E;;;;;;;;2MASX J08513378+0306024,PGC 024883,SDSS J085133.75+030602.4,SDSS J085133.75+030602.5,SDSS J085133.76+030602.5;;; +IC2421;G;08:54:21.60;+32:40:51.1;Cnc;1.41;0.95;53;14.90;;13.16;12.38;12.14;23.11;Sc;;;;;;;;2MASX J08542159+3240511,MCG +06-20-013,PGC 024996,SDSS J085421.59+324051.0,SDSS J085421.59+324051.1,SDSS J085421.60+324051.1,UGC 04658;;; +IC2422;G;08:54:24.31;+20:13:29.3;Cnc;0.66;0.62;130;15.60;;12.64;11.98;11.45;23.63;E;;;;;;;;2MASX J08542435+2013285,MCG +03-23-016,PGC 024998,SDSS J085424.31+201329.2,SDSS J085424.31+201329.3;;; +IC2423;G;08:54:47.08;+20:13:13.0;Cnc;0.84;0.64;114;14.70;;11.81;11.11;10.87;22.80;Sb;;;;;;;;2MASX J08544709+2013125,MCG +03-23-017,PGC 025021,SDSS J085447.08+201312.9,UGC 04667;;; +IC2424;Dup;08:56:47.69;+39:22:55.9;Lyn;;;;;;;;;;;;;;;2704;;;;;; +IC2425;*;08:55:50.13;-03:25:23.3;Hya;;;;;;;;;;;;;;;;;;;;; +IC2426;G;08:58:30.48;+02:55:31.8;Hya;0.61;0.44;119;15.10;;12.31;11.72;11.39;22.89;S0;;;;;;;;2MASX J08583049+0255314,MCG +01-23-014,PGC 025208,SDSS J085830.47+025531.7,SDSS J085830.48+025531.7,SDSS J085830.48+025531.8;;; +IC2427;G;09:01:01.70;+37:52:31.6;Lyn;0.74;0.61;98;15.70;;12.18;11.47;11.15;23.78;E;;;;;;;;2MASX J09010169+3752312,PGC 025330,SDSS J090101.69+375231.6,SDSS J090101.70+375231.5,SDSS J090101.70+375231.6;;; +IC2428;G;09:03:14.70;+30:35:28.8;Cnc;1.61;0.41;76;14.70;;11.73;11.08;10.76;23.29;Sc;;;;;;;;2MASX J09031465+3035290,IRAS 09002+3047,MCG +05-22-001,PGC 025423,SDSS J090314.69+303528.7,SDSS J090314.70+303528.7,SDSS J090314.70+303528.8;;; +IC2429;G;09:03:42.53;+29:17:45.6;Cnc;0.59;0.41;146;15.20;14.61;12.52;11.95;11.75;22.84;Sab;;;;;;;;2MASX J09034250+2917454,MCG +05-22-003,PGC 025446,SDSS J090342.52+291745.6;;; +IC2430;G;09:04:22.83;+27:57:10.8;Cnc;0.96;0.50;40;14.40;;12.17;11.39;11.23;22.87;S0-a;;;;;;;;2MASX J09042283+2757103,IRAS 09013+2809,MCG +05-22-005,PGC 025467,SDSS J090422.82+275710.8,SDSS J090422.83+275710.8,UGC 04755;;; +IC2431;GGroup;09:04:35.35;+14:35:38.7;Cnc;1.00;;;;;;;;;;;;;;;;;MCG +03-23-030,UGC 04756;;;Diameter of the group inferred by the author. +IC2431 NED01;G;09:04:34.56;+14:35:52.4;Cnc;0.04;0.02;134;17.47;;;;;;Scd;;;;;;;;MCG +03-23-030 NED01,PGC 200245,SDSS J090434.55+143552.3,UGC 04756 NED01;;;B-Mag taken from LEDA. +IC2431 NED02;G;09:04:34.72;+14:35:44.8;Cnc;0.60;0.48;32;14.30;;;;;22.06;I;;;;;;;;IRAS 09018+1447,MCG +03-23-030 NED02,PGC 025476,UGC 04756 NED02;Browning;; +IC2431 NED03;G;09:04:34.82;+14:35:36.3;Cnc;0.45;0.33;5;;;12.30;11.77;11.04;;Sd;;;;;;;;2MASX J09043486+1435354,MCG +03-23-030 NED03,PGC 200246,SDSS J090434.82+143536.3,UGC 04756 NED03;;; +IC2431 NED04;G;09:04:35.44;+14:35:42.2;Cnc;0.28;0.23;98;17.44;;;;;23.38;;;;;;;;;LEDA 200247,MCG +03-23-030 NED04,UGC 04756 NED04;;;B-Mag taken from LEDA. +IC2432;G;09:04:39.54;+05:30:43.4;Hya;0.82;0.30;131;15.50;;12.78;12.12;11.78;23.38;Sab;;;;;;;;2MASX J09043951+0530433,PGC 025479,SDSS J090439.54+053043.3,SDSS J090439.55+053043.4;;; +IC2433;G;09:05:28.73;+22:36:08.0;Cnc;0.82;0.40;109;15.40;;12.63;11.98;11.60;22.98;Sc;;;;;;;;2MASX J09052877+2236082,IRAS 09025+2248,MCG +04-22-010,PGC 025514,SDSS J090528.73+223607.9,SDSS J090528.73+223608.0;;; +IC2434;G;09:07:16.06;+37:12:55.0;Lyn;1.30;0.63;19;14.50;;11.28;10.58;10.24;23.24;SBbc;;;;;;;;2MASX J09071631+3712555,IRAS 09041+3725,MCG +06-20-025,PGC 025609,SDSS J090716.05+371255.3,UGC 04785;;HOLM 109B,C are stars.; +IC2435;G;09:06:49.79;+26:16:31.6;Cnc;0.88;0.39;116;15.20;;11.80;11.09;10.88;23.59;E;;;;;;;;2MASX J09064976+2616317,MCG +04-22-014,PGC 025571,SDSS J090649.79+261631.6,UGC 04782;;; +IC2436;**;09:05:23.72;-19:09:55.7;Hya;;;;;;;;;;;;;;;;;;;;; +IC2437;G;09:05:33.11;-19:12:25.6;Hya;1.79;1.23;119;13.68;;10.36;9.62;9.39;23.92;E-S0;;;;;;;;2MASX J09053310-1912254,ESO 564-021,ESO-LV 564-0210,MCG -03-23-020,PGC 025518;;; +IC2438;Other;09:14:08.83;+73:25:02.5;Cam;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +IC2439;G;09:08:38.46;+32:35:34.6;Cnc;1.40;0.42;31;17.24;16.06;11.48;10.75;10.54;23.64;Sa;;;;;;;;2MASX J09083840+3235344,MCG +06-20-032,PGC 025719,SDSS J090838.45+323534.6,SDSS J090838.46+323534.6;;; +IC2440;*;09:15:50.16;+73:27:32.6;Cam;;;;;;;;;;;;;;;;;;;;; +IC2441;GPair;09:10:02.30;+22:51:12.0;Cnc;0.90;;;;;;;;;;;;;;;;;MCG +04-22-020;;;Diameter of the group inferred by the author. +IC2441 NED01;G;09:10:01.82;+22:51:18.2;Cnc;0.63;0.24;155;15.30;;11.93;10.67;10.70;23.21;E;;;;;;;;2MASX J09100181+2251177,PGC 025844,SDSS J091001.81+225118.1;;; +IC2441 NED02;G;09:10:02.90;+22:51:06.4;Cnc;0.66;0.47;162;15.78;;;;;23.38;Sb;;;;;;;;PGC 3442463,SDSS J091002.89+225106.4,SDSS J091002.90+225106.4;;;B-Mag taken from LEDA. +IC2442;G;09:10:05.17;+22:50:18.0;Cnc;0.83;0.78;155;15.20;;12.55;11.84;11.40;23.62;Sb;;;;;;;;2MASX J09100520+2250177,MCG +04-22-021,PGC 025843,SDSS J091005.19+225018.0;;; +IC2443;G;09:11:30.89;+28:49:35.7;Cnc;0.66;0.57;12;15.10;14.21;11.95;11.31;10.97;22.91;S0;;;;;;;;2MASX J09113086+2849359,MCG +05-22-011,PGC 025908,SDSS J091130.88+284935.7,SDSS J091130.89+284935.7;;; +IC2444;G;09:12:50.86;+30:12:44.2;Cnc;0.82;0.71;48;15.10;;12.03;11.50;11.24;23.59;S0-a;;;;;;;;2MASX J09125088+3012448,MCG +05-22-012,PGC 025969,SDSS J091250.85+301244.2,SDSS J091250.86+301244.2;;; +IC2445;G;09:13:12.60;+31:48:28.3;Cnc;0.76;0.41;18;15.20;;13.64;12.90;12.78;23.13;SBbc;;;;;;;;2MASX J09131272+3148334,MCG +05-22-013,PGC 025985,SDSS J091312.59+314828.3,SDSS J091312.60+314828.3,UGC 04854;;; +IC2446;G;09:13:31.38;+28:57:06.3;Cnc;1.49;0.61;147;15.00;13.64;11.18;10.38;10.10;23.88;Sa;;;;;;2447;;2MASX J09133134+2857059,MCG +05-22-015,PGC 026002,SDSS J091331.37+285706.3,SDSS J091331.38+285706.3,UGC 04855;;The identification as IC 2447 is very uncertain.; +IC2447;Dup;09:13:31.38;+28:57:06.3;Cnc;;;;;;;;;;;;;;;;2446;;;;; +IC2448;PN;09:07:06.26;-69:56:30.6;Car;0.15;;;11.50;10.40;11.92;11.80;11.07;;;;13.97;14.22;;;;HD 78991;2MASX J09070626-6956305,ESO 061-001,ESO 061-01 ,IRAS 09066-6944,PK 285-14 1,PN G285.7-14.9;;; +IC2449;Dup;09:13:33.15;+30:00:00.5;Cnc;;;;;;;;;;;;;;;2783B;;;;;; +IC2450;G;09:17:05.28;+25:25:45.0;Cnc;1.35;0.72;156;14.00;;11.69;11.16;10.93;23.31;S0-a;;;;;;;;2MASX J09170531+2525451,IRAS 09141+2538,MCG +04-22-029,PGC 026218,SDSS J091705.28+252544.9,SDSS J091705.28+252545.0,SDSS J091705.29+252545.0,UGC 04902;;; +IC2451;G;09:15:47.78;+23:29:47.1;Cnc;0.93;0.71;105;15.70;;12.57;11.90;11.65;24.16;Sb;;;;;;;;2MASX J09154776+2329467,PGC 026119,SDSS J091547.78+232947.1;;; +IC2452;G;09:15:57.58;+23:28:20.1;Cnc;0.68;0.31;132;15.60;;12.32;11.69;11.43;23.16;Sab;;;;;;;;2MASX J09155757+2328207,PGC 026129;;; +IC2453;G;09:15:54.53;+20:55:44.0;Cnc;0.72;0.41;62;15.50;;12.20;11.37;;23.04;Sab;;;;;;;;2MASX J09155451+2055437,IRAS 09130+2108,PGC 026131,SDSS J091554.53+205543.9,SDSS J091554.54+205544.0;;; +IC2454;G;09:16:01.77;+17:49:14.5;Cnc;0.97;0.68;100;14.40;;11.65;10.94;10.65;23.05;Sa;;;;;;;;2MASX J09160180+1749144,IRAS 09132+1801,MCG +03-24-019,PGC 026139,SDSS J091601.76+174914.4,SDSS J091601.77+174914.5,UGC 04886;;; +IC2455;Dup;09:16:50.01;+20:11:54.6;Cnc;;;;;;;;;;;;;;;2804;;;;;; +IC2456;G;09:17:24.24;+34:40:27.8;Lyn;0.63;0.45;54;15.66;;12.85;12.15;11.88;23.43;E-S0;;;;;;;;2MASX J09172428+3440282,LEDA 3088630,SDSS J091724.23+344027.7,SDSS J091724.24+344027.7,SDSS J091724.24+344027.8;;The identification as IC 2456 is not certain.;B-Mag taken from LEDA. +IC2457;G;09:17:04.14;+20:05:36.6;Cnc;0.55;0.40;75;16.21;;13.32;12.52;12.28;23.45;SBab;;;;;;;;2MASX J09170413+2005368,PGC 1616119,SDSS J091704.13+200536.5,SDSS J091704.14+200536.6;;;B-Mag taken from LEDA. +IC2458;Dup;09:21:30.07;+64:14:19.3;UMa;;;;;;;;;;;;;;;2820A;;;;;; +IC2459;G;09:18:59.47;+34:51:43.9;Lyn;0.66;0.38;118;15.78;;13.07;12.45;12.34;23.91;E;;;;;;;;2MASX J09185946+3451446,LEDA 2055725,SDSS J091859.46+345143.8,SDSS J091859.47+345143.9;;;B-Mag taken from LEDA. +IC2460;Dup;09:19:19.01;+33:52:50.9;Lyn;;;;;;;;;;;;;;;2827;;;;;; +IC2461;G;09:19:58.03;+37:11:28.5;Lyn;2.41;0.51;143;15.10;;11.27;10.47;10.05;24.22;Sb;;;;;;;;2MASX J09195802+3711277,IRAS 09168+3724,MCG +06-21-019,PGC 026390,SDSS J091958.02+371128.5,UGC 04943;;; +IC2462;G;09:22:56.25;+22:41:10.9;Leo;0.69;0.25;62;16.06;;12.91;12.17;11.81;23.24;Sbc;;;;;;;;2MASX J09225621+2241109,PGC 1674360,SDSS J092256.24+224110.8,SDSS J092256.25+224110.9;;;B-Mag taken from LEDA. +IC2463;G;09:23:00.25;+22:37:06.8;Leo;0.54;0.44;103;15.70;;12.81;12.04;11.86;23.05;Sab;;;;;;;;2MASX J09230026+2237070,PGC 026557,SDSS J092300.24+223706.8,SDSS J092300.25+223706.8;;; +IC2464;G;09:23:22.27;+22:37:48.9;Leo;0.80;0.54;147;15.40;;12.26;11.60;11.38;23.24;Sab;;;;;;;;2MASX J09232227+2237483,MCG +04-22-036,PGC 026585,SDSS J092322.26+223748.8,SDSS J092322.26+223748.9;;; +IC2465;G;09:23:31.51;+24:26:44.5;Leo;0.97;0.56;89;15.09;;11.91;11.10;10.76;23.60;S0-a;;;;;;;;2MASX J09233148+2426447,PGC 3084878,SDSS J092331.50+242644.4,SDSS J092331.51+242644.5;;;B-Mag taken from LEDA. +IC2466;G;09:23:45.03;+24:31:06.4;Leo;0.83;0.49;92;15.50;;11.50;10.82;10.48;23.77;E-S0;;;;;;;;2MASX J09234501+2431063,MCG +04-22-044,PGC 026629,SDSS J092345.02+243106.4;;Star superposed.; +IC2467;G;09:24:52.72;+38:21:06.3;LMi;0.95;0.92;45;14.80;;11.39;10.75;10.45;23.50;E;;;;;;;;2MASX J09245275+3821066,MCG +07-20-005,PGC 026683,SDSS J092452.71+382106.3,SDSS J092452.72+382106.3,SDSS J092452.72+382106.4;;; +IC2468;G;09:25:01.49;+38:20:38.5;LMi;0.51;0.47;60;16.10;;12.75;12.10;11.88;23.26;S0;;;;;;;;2MASX J09250150+3820389,MCG +07-20-007,PGC 026691,SDSS J092501.49+382038.4,SDSS J092501.49+382038.5;;;B-Mag taken from LEDA. +IC2469;G;09:23:01.06;-32:26:59.1;Pyx;5.79;1.17;37;12.07;;8.37;7.55;7.33;23.73;SBab;;;;;;;;2MASX J09230105-3226591,ESO 433-017,MCG -05-22-008,PGC 026561,UGCA 163;;;B-Mag taken from LEDA. +IC2470;G;09:25:41.32;+23:21:41.8;Leo;1.01;0.94;105;15.60;;11.77;11.06;10.80;23.85;S0-a;;;;;;;;2MASX J09254128+2321413,MCG +04-22-049,PGC 026729,PGC 026730,SDSS J092541.31+232141.8,SDSS J092541.32+232141.8;;MCG Declination is -5 arcmin in error.; +IC2471;G;09:25:12.17;-06:49:47.7;Hya;1.08;0.52;151;14.50;;10.93;10.22;9.95;23.44;S0;;;;;;;;2MASX J09251217-0649476,MCG -01-24-015,PGC 026707;;; +IC2472;G;09:26:33.72;+21:23:06.1;Leo;0.62;0.51;4;15.50;;13.01;12.26;11.87;23.00;SBbc;;;;;;;;2MASX J09263370+2123063,PGC 026779,SDSS J092633.72+212306.0;;; +IC2473;G;09:27:23.50;+30:26:26.9;Leo;1.08;0.74;92;14.60;;11.49;10.84;10.55;23.33;Sbc;;;;;;;;2MASX J09272351+3026263,IRAS 09244+3039,MCG +05-22-047,PGC 026817,SDSS J092723.49+302626.9,SDSS J092723.50+302626.9,UGC 05038;;; +IC2474;G;09:27:11.41;+23:02:03.4;Leo;0.59;0.22;96;15.75;;12.59;11.87;11.59;22.66;Sbc;;;;;;;;2MASX J09271138+2302041,MCG +04-22-057,PGC 026810,SDSS J092711.40+230203.4,SDSS J092711.41+230203.4;;The IC number includes the star close to the southeast.;B-Mag taken from LEDA. +IC2475;G;09:27:54.33;+29:47:30.7;Leo;1.01;0.34;111;15.70;;12.21;11.48;11.19;23.52;Sbc;;;;;;;;2MASX J09275435+2947303,MCG +05-22-049,PGC 026851,SDSS J092754.33+294730.6;;; +IC2476;G;09:27:52.83;+29:59:08.7;Leo;1.30;1.04;40;14.50;;11.03;10.35;10.03;23.59;E-S0;;;;;;;;2MASX J09275281+2959085,MCG +05-23-001,PGC 026854,SDSS J092752.81+295908.6,SDSS J092752.83+295908.7,UGC 05043;;; +IC2477;G;09:28:17.83;+29:42:21.8;Leo;0.60;0.43;172;15.50;14.65;12.46;11.64;11.53;23.11;S0-a;;;;;;2480;;2MASX J09281784+2942212,PGC 026883,SDSS J092817.82+294221.7,SDSS J092817.83+294221.7,SDSS J092817.83+294221.8;;The identification as IC 2477 is not certain.; +IC2478;G;09:28:00.93;+30:02:13.1;Leo;0.57;0.42;140;15.60;;12.53;11.94;11.65;23.29;E;;;;;;;;2MASX J09280090+3002135,MCG +05-23-003,PGC 026865,SDSS J092800.92+300213.0,SDSS J092800.93+300213.1;;; +IC2479;G;09:28:04.09;+29:59:29.2;Leo;0.58;0.33;152;15.50;;13.11;12.40;12.03;22.81;SBb;;;;;;;;2MASX J09280405+2959294,IRAS 09251+3012,MCG +05-23-002,PGC 026866,SDSS J092804.09+295929.1,SDSS J092804.09+295929.2;;; +IC2480;Dup;09:28:17.83;+29:42:21.8;Leo;;;;;;;;;;;;;;;;2477;;;;; +IC2481;G;09:27:28.81;+03:55:46.6;Hya;0.83;0.47;161;14.50;;12.10;11.50;11.10;22.46;SBbc;;;;;;;;2MASX J09272880+0355470,IRAS 09248+0408,MCG +01-24-022,PGC 026826,SDSS J092728.80+035546.5,SDSS J092728.81+035546.5,SDSS J092728.81+035546.6,UGC 05040A;;; +IC2482;G;09:26:59.22;-12:06:32.1;Hya;2.84;1.84;145;13.92;;9.88;9.22;8.94;25.03;E;;;;;;;;2MASX J09265922-1206323,MCG -02-24-025,PGC 026796;;;B-Mag taken from LEDA. +IC2483;G;09:29:25.79;+30:59:41.0;Leo;0.66;0.45;103;15.70;;12.73;12.05;11.71;23.27;Sb;;;;;;;;2MASX J09292577+3059407,PGC 026928,SDSS J092925.79+305940.9,SDSS J092925.79+305941.0;;; +IC2484;Other;09:26:50.28;-42:50:34.1;Vel;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2485;Other;09:27:11.88;-39:17:05.0;Ant;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2486;G;09:30:17.37;+26:38:28.6;Leo;0.92;0.62;135;15.10;;12.20;11.51;11.47;23.26;Sbc;;;;;;;;2MASX J09301740+2638279,MCG +05-23-006,PGC 026982,SDSS J093017.36+263828.5,SDSS J093017.37+263828.5,SDSS J093017.37+263828.6,UGC 05062;;; +IC2487;G;09:30:09.17;+20:05:27.1;Leo;1.84;0.46;164;14.20;;11.13;10.47;10.24;23.31;Sb;;;;;;;;2MASX J09300918+2005272,IRAS 09273+2018,MCG +03-24-061,PGC 026966,SDSS J093009.16+200527.0,SDSS J093009.17+200527.1,UGC 05059;;"CGCG misprints name as 'IC 2489'; corrected in CGCG errata."; +IC2488;OCl;09:27:38.23;-57:00:25.0;Car;7.20;;;;7.40;;;;;;;;;;;;;MWSC 1671;;; +IC2489;Other;09:31:11.63;-05:53:03.0;Hya;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2490;G;09:33:03.65;+29:55:42.1;Leo;0.97;0.65;177;14.70;;11.79;11.08;10.90;23.09;SABb;;;;;;;;2MASX J09330359+2955417,MCG +05-23-010,PGC 027121,SDSS J093303.64+295542.0,SDSS J093303.64+295542.1,UGC 05087;;; +IC2491;G;09:35:14.22;+34:43:54.0;LMi;0.87;0.61;74;15.00;;11.79;11.01;10.78;23.31;S0;;;;;;;;2MASX J09351419+3443536,MCG +06-21-053,PGC 027254,SDSS J093514.22+344354.0,UGC 05104;;; +IC2492;G;09:33:14.87;-37:51:58.8;Ant;0.76;0.31;48;15.77;;11.71;10.93;10.72;23.39;Sab;;;;;;;;2MASX J09331488-3751587,ESO 315-013,ESO-LV 315-0130,PGC 027129;;The IC identification is very uncertain.; +IC2493;G;09:36:17.54;+37:21:50.4;LMi;0.97;0.72;1;15.00;;11.60;10.90;10.67;23.51;E;;;;;;;;2MASX J09361758+3721502,MCG +06-21-056,PGC 027322,SDSS J093617.53+372150.3,SDSS J093617.53+372150.4,SDSS J093617.54+372150.4;;; +IC2494;Dup;09:36:05.79;-12:26:12.2;Hya;;;;;;;;;;;;;;;2947;;;;;; +IC2495;G;09:38:07.39;+28:03:27.6;Leo;0.73;0.30;11;14.80;;12.04;11.46;11.31;22.49;Sab;;;;;;;;2MASX J09380740+2803273,MCG +05-23-023,PGC 027455,SDSS J093807.38+280327.5,SDSS J093807.39+280327.6;;; +IC2496;G;09:38:44.50;+34:43:36.4;LMi;0.73;0.43;33;15.50;;12.59;11.94;11.61;23.09;Sbc;;;;;;;;2MASX J09384453+3443361,IRAS 09357+3457,PGC 027499,SDSS J093844.50+344336.3,SDSS J093844.50+344336.4;;; +IC2497;G;09:41:04.09;+34:43:57.8;LMi;0.72;0.38;115;15.78;;12.54;11.71;11.41;23.51;SBa;;;;;;;;2MASX J09410407+3443585,IRAS 09380+3457,LEDA 165538,SDSS J094104.11+344358.4;;;B-Mag taken from LEDA. +IC2498;G;09:41:21.94;+28:06:52.1;Leo;0.83;0.31;25;15.30;;12.23;11.69;11.55;23.12;Sb;;;;;;;;2MASX J09412191+2806518,PGC 027668,SDSS J094121.93+280652.0,SDSS J094121.93+280652.1,SDSS J094121.94+280652.1;;; +IC2499;G;09:41:24.63;+27:53:42.9;Leo;0.63;0.26;125;16.21;;;;;23.80;Sa;;;;;;;;2MASX J09412462+2753428,PGC 1820853,SDSS J094124.63+275342.9;;;B-Mag taken from LEDA. +IC2500;G;09:42:23.37;+36:20:58.9;LMi;1.35;0.43;164;15.20;;11.73;11.01;10.75;23.69;SBab;;;;;;;;2MASX J09422335+3620591,MCG +06-21-074,PGC 027748,SDSS J094223.37+362058.8,SDSS J094223.37+362058.9,SDSS J094223.38+362058.8;;; +IC2501;PN;09:38:47.18;-60:05:30.7;Car;0.03;;;11.30;10.40;10.39;10.24;9.24;;;;14.42;14.48;;;;HD 83832;2MASX J09384714-6005305,ESO 126-026,IRAS 09373-5951 ,PK 281-05 1,PN G281.0-05.6;;; +IC2502;Other;09:43:06.74;+33:03:37.1;LMi;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2503;Other;09:43:09.58;+33:06:28.0;LMi;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2504;Other;09:38:33.82;-69:05:06.4;Car;;;;;;;;;;;;;;;;;;;;"Nothing at this position; probably a defect on the Harvard plate."; +IC2505;G;09:45:06.95;+27:16:06.9;Leo;0.75;0.55;18;15.70;;12.83;12.23;11.79;23.73;Sab;;;;;;;;2MASX J09450693+2716069,MCG +05-23-034,PGC 027936,SDSS J094506.95+271606.9;;; +IC2506;G;09:45:12.77;+27:15:07.2;Leo;0.55;0.41;79;15.60;;12.60;11.80;11.21;22.98;Sab;;;;;;;;2MASX J09451278+2715069,MCG +05-23-035,PGC 027940,SDSS J094512.76+271507.1,SDSS J094512.77+271507.1,SDSS J094512.77+271507.2;;; +IC2507;G;09:44:33.90;-31:47:24.0;Ant;1.74;0.86;48;17.22;;11.73;11.18;11.05;22.65;IB;;;;;;;;2MASX J09443293-3147307,MCG -05-23-009,PGC 027903;;; +IC2508;G;09:47:07.08;+33:30:29.0;LMi;0.69;0.44;19;15.70;;12.88;12.17;11.94;23.85;E;;;;;;;;2MASX J09470711+3330290,PGC 028106,SDSS J094707.07+333028.9,SDSS J094707.08+333029.0;;; +IC2509;*;09:46:55.92;+05:42:07.0;Sex;;;;;;;;;;;;;;;;;;SDSS J094655.91+054207.0;;; +IC2510;G;09:47:43.48;-32:50:14.8;Ant;1.59;0.86;148;15.50;;11.05;10.32;10.01;;Sb;;;;;;;;2MASX J09474350-3250148,2MASX J09474417-3250247,ESO 373-029,MCG -05-23-017,PGC 028147;;; +IC2511;G;09:49:24.55;-32:50:21.1;Ant;4.22;0.81;43;13.01;;10.12;9.31;9.07;24.13;SABa;;;;;;2512;;2MASX J09492462-3250198,ESO 374-049,ESO-LV 374-0490,MCG -05-23-018,PGC 028246;;; +IC2512;Dup;09:49:24.55;-32:50:21.1;Ant;;;;;;;;;;;;;;;;2511;;;;; +IC2513;G;09:50:00.79;-32:52:58.2;Ant;3.39;0.68;63;13.29;;9.48;8.78;8.50;23.80;Sab;;;;;;2514;;2MASX J09500078-3252578,ESO 374-050,ESO-LV 374-0500,MCG -05-23-019,PGC 028283,PGC 028290;;; +IC2514;Dup;09:50:00.79;-32:52:58.2;Ant;;;;;;;;;;;;;;;;2513;;;;; +IC2515;G;09:54:39.42;+37:24:30.9;LMi;1.13;0.40;174;15.10;;11.70;10.92;10.60;23.27;Sb;;;;;;;;2MASX J09543943+3724308,IRAS 09516+3738,MCG +06-22-027,PGC 028581,SDSS J095439.41+372430.9,SDSS J095439.42+372430.9,UGC 05321;;; +IC2516;G;09:54:48.36;+37:41:13.0;LMi;0.97;0.87;13;15.00;;11.73;11.02;10.75;23.54;E-S0;;;;;;;;2MASX J09544835+3741128,MCG +06-22-028,PGC 028589,SDSS J095448.35+374113.0,SDSS J095448.36+374113.0;;; +IC2517;G;09:52:50.67;-33:44:31.0;Ant;0.68;0.56;98;15.43;;;;;23.36;S0;;;;;;;;ESO 374-006,ESO-LV 374-0060,PGC 028466;;; +IC2518;G;09:55:58.53;+37:09:19.9;LMi;0.70;0.53;110;15.60;;12.73;12.04;11.92;23.81;E;;;;;;;;2MASX J09555853+3709202,PGC 028659,SDSS J095558.52+370919.7,SDSS J095558.52+370919.8,SDSS J095558.53+370919.9;;; +IC2519;G;09:55:58.81;+34:02:11.7;LMi;0.35;0.25;90;15.60;;12.48;11.69;11.41;;E;;;;;;;;2MASX J09555878+3402123,IRAS 09530+3416,PGC 028660,SDSS J095558.80+340211.6,SDSS J095558.81+340211.7;;; +IC2520;G;09:56:20.12;+27:13:39.3;Leo;0.88;0.74;57;14.30;;11.39;10.66;10.38;22.75;S0-a;;;;;;;;2MASX J09562016+2713393,IRAS 09534+2727,MCG +05-24-003,PGC 028682,SDSS J095620.11+271339.2,SDSS J095620.12+271339.3,UGC 05335;;; +IC2521;G;09:57:15.75;+33:58:34.7;LMi;0.61;0.57;15;15.30;;13.42;12.89;12.69;23.28;SBbc;;;;;;;;2MASX J09571571+3358343,MCG +06-22-035,PGC 028740,SDSS J095715.74+335834.7,SDSS J095715.75+335834.7;;; +IC2522;G;09:55:08.96;-33:08:13.7;Ant;2.30;1.74;180;12.60;;10.24;9.61;9.32;23.38;Sc;;;;;;;;2MASX J09550896-3308137,ESO 374-010,ESO-LV 374-0100,IRAS 09529-3254,MCG -05-24-004,PGC 028606,UGCA 189;;; +IC2523;G;09:55:09.52;-33:12:36.8;Ant;1.43;0.86;30;13.62;;11.12;10.48;10.07;22.74;SBbc;;;;;;;;2MASX J09550951-3312367,ESO 374-011,ESO-LV 374-0110,IRAS 09529-3258,MCG -05-24-005,PGC 028607;;; +IC2524;G;09:57:32.86;+33:37:11.0;LMi;0.74;0.44;64;14.80;;13.10;12.54;12.19;22.86;S0-a;;;;;;;;2MASX J09573287+3337101,MCG +06-22-039,PGC 028758,SDSS J095732.85+333711.0,SDSS J095732.86+333711.0;;; +IC2525;G;09:58:24.96;+37:06:06.7;LMi;0.65;0.61;55;15.70;;12.40;11.97;11.37;23.76;E;;;;;;;;2MASX J09582493+3706071,PGC 028807,SDSS J095824.95+370606.7,SDSS J095824.96+370606.7;;; +IC2526;G;09:57:03.03;-32:15:24.7;Ant;2.07;0.70;56;13.65;;9.95;9.27;9.04;23.91;S0;;;;;;;;2MASX J09570304-3215248,ESO 435-012,ESO-LV 435-0120,MCG -05-24-008,PGC 028732;;; +IC2527;G;10:00:06.49;+38:10:19.9;LMi;0.57;0.48;123;15.20;;13.21;12.48;12.15;23.02;SBc;;;;;;;;2MASX J10000654+3810201,PGC 028920,SDSS J100006.49+381019.9;;; +IC2528;Dup;09:59:06.42;-27:07:43.7;Ant;;;;;;;;;;;;;;;3084;;;;;; +IC2529;Dup;09:59:29.54;-22:49:34.6;Hya;;;;;;;;;;;;;;;3081;;;;;; +IC2530;G;10:01:31.06;+37:12:14.2;LMi;0.97;0.94;20;15.00;;11.78;11.02;10.84;23.65;E;;;;;;;;2MASX J10013106+3712139,MCG +06-22-053,PGC 029019,SDSS J100131.06+371214.2;;; +IC2531;G;09:59:55.77;-29:37:01.1;Ant;6.55;0.60;74;13.19;;9.61;8.84;8.51;23.91;Sc;;;;;;;;2MASX J09595554-2937040,ESO 435-025,ESO-LV 435-0250,MCG -05-24-015,PGC 028909,UGCA 191;;The 2MASX position is weighted toward the south by the J-band image.; +IC2532;G;10:00:05.40;-34:13:41.8;Ant;2.04;1.12;36;13.91;;10.82;10.23;10.02;23.96;Sa;;;;;;;;2MASX J10000541-3413417,ESO 374-016,ESO-LV 374-0160,IRAS 09579-3359,MCG -06-22-007,PGC 028915;;; +IC2533;G;10:00:31.67;-31:14:42.0;Ant;2.04;1.45;180;12.89;;9.66;8.95;8.73;23.23;E-S0;;;;;;;;2MASX J10003168-3114419,ESO 435-027,ESO-LV 435-0270,MCG -05-24-017,PGC 028948;;; +IC2534;G;10:01:29.86;-34:06:44.7;Ant;1.84;1.25;98;13.38;;10.30;9.61;9.36;23.45;S0-a;;;;;;;;2MASX J10012985-3406445,ESO 374-019,ESO-LV 374-0190,MCG -06-22-011,PGC 029016;;; +IC2535;G;10:04:31.83;+38:00:21.7;LMi;0.85;0.74;75;14.60;;11.97;11.26;10.87;23.06;Sb;;;;;;;;2MASX J10043179+3800215,MCG +06-22-065,PGC 029222,SDSS J100431.82+380021.7,SDSS J100431.83+380021.7;;; +IC2536;G;10:03:30.22;-33:56:59.1;Ant;1.88;0.40;45;14.57;;11.37;10.62;10.37;23.44;SBc;;;;;;;;2MASX J10033022-3356590,ESO 374-026,ESO-LV 374-0260,IRAS 10012-3342,PGC 029157;;; +IC2537;G;10:03:51.89;-27:34:15.1;Ant;2.61;1.82;17;12.88;12.09;10.50;9.81;9.40;23.33;Sc;;;;;;;;2MASX J10035188-2734151,ESO 499-039,ESO-LV 499-0390,MCG -04-24-015,PGC 029179,UGCA 197;;; +IC2538;G;10:03:56.49;-34:48:27.1;Ant;1.49;0.75;180;14.62;;11.44;10.74;10.43;23.92;SABc;;;;;;;;2MASX J10035647-3448270,ESO 374-027,ESO-LV 374-0270,IRAS 10017-3434,MCG -06-22-015,PGC 029181;;; +IC2539;G;10:04:16.21;-31:21:46.6;Ant;1.98;0.56;25;14.04;;11.07;10.36;10.05;23.33;Sbc;;;;;;;;2MASX J10041619-3121464,ESO 435-034,ESO-LV 435-0340,IRAS 10020-3107,MCG -05-24-020,PGC 029203;;; +IC2540;G;10:06:46.71;+31:28:32.6;LMi;0.91;0.59;158;15.20;;11.92;11.21;11.20;23.76;E-S0;;;;;;;;2MASX J10064674+3128329,MCG +05-24-014,PGC 029389,SDSS J100646.71+312832.5,SDSS J100646.71+312832.6;;; +IC2541;G;10:05:48.01;-17:26:04.4;Hya;1.47;0.64;4;13.88;;11.25;10.59;10.29;22.82;SBbc;;;;;;;;2MASX J10054801-1726041,MCG -03-26-017,PGC 029309;;;B-Mag taken from LEDA. +IC2542;G;10:07:50.54;+34:18:55.1;LMi;1.04;0.77;171;14.60;;11.90;11.28;10.98;23.14;SBc;;;;;;;;2MASX J10075047+3418548,IRAS 10048+3433,MCG +06-22-076,PGC 029453,SDSS J100750.53+341855.0,SDSS J100750.54+341855.1;;; +IC2543;GPair;10:08:23.80;+37:50:34.0;LMi;0.80;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC2543 NED01;G;10:08:23.56;+37:50:29.5;LMi;0.74;0.29;134;15.70;;12.59;11.78;11.44;23.17;Sb;;;;;;;;2MASX J10082361+3750299,IRAS 10054+3805,PGC 029485;;; +IC2543 NED02;G;10:08:23.97;+37:50:39.2;LMi;0.20;0.14;6;17.51;;;;;22.73;;;;;;;;;SDSS J100823.97+375039.2;;;B-Mag taken from LEDA +IC2544;G;10:08:29.73;+33:20:47.0;LMi;0.52;0.40;65;15.10;;13.51;13.17;12.74;22.56;SBcd;;;;;;;;2MASX J10082971+3320467,PGC 029491,SDSS J100829.72+332046.9,SDSS J100829.73+332046.9;;; +IC2545;**;10:06:35.06;-33:51:29.8;Ant;;;;;;;;;;;;;;;;;;;;The IC identification is uncertain, but IRAS F10038-3338 is not IC 2545.; +IC2546;G;10:07:05.92;-33:15:40.9;Ant;0.83;0.60;95;15.59;;;;;23.93;;;;;;;;;ESO 374-036,ESO-LV 374-0360,PGC 029407;;; +IC2547;G;10:10:04.49;+36:30:08.8;LMi;0.82;0.36;121;15.70;;12.78;12.13;11.67;23.49;Sb;;;;;;;;2MASX J10100448+3630092,PGC 029582,SDSS J101004.48+363008.8,SDSS J101004.49+363008.8;;; +IC2548;G;10:07:54.95;-35:13:46.6;Ant;2.17;1.42;70;13.90;;10.99;10.35;10.11;24.07;SBbc;;;;;;;;2MASX J10075496-3513468,ESO 374-037,ESO-LV 374-0370,MCG -06-23-001,PGC 029461;;; +IC2549;G;10:10:10.16;+36:27:53.5;LMi;0.47;0.32;143;15.60;;13.60;12.95;12.57;22.81;Sbc;;;;;;;;2MASX J10101012+3627532,PGC 029592,SDSS J101010.15+362753.4,SDSS J101010.16+362753.5;;; +IC2550;G;10:10:27.92;+27:57:22.0;Leo;0.93;0.68;109;14.60;;11.88;11.15;10.88;22.85;SABb;;;;;;;;2MASX J10102794+2757221,IRAS 10076+2811,MCG +05-24-023,PGC 029615,SDSS J101027.91+275721.9,SDSS J101027.91+275722.0,UGC 05484;;; +IC2551;G;10:10:40.32;+24:24:50.9;Leo;0.76;0.56;36;14.60;;11.70;11.08;10.74;22.67;Sa;;;;;;;;2MASX J10104029+2424510,IRAS 10078+2439,MCG +04-24-016,PGC 029632,SDSS J101040.31+242450.9,SDSS J101040.32+242450.9,UGC 05488;;; +IC2552;G;10:10:46.14;-34:50:40.9;Ant;1.87;1.68;89;13.42;;9.94;9.26;8.97;23.19;E-S0;;;;;;;;2MASX J10104613-3450405,ESO 374-040,ESO-LV 374-0400,MCG -06-23-007,PGC 029637;;; +IC2553;PN;10:09:20.87;-62:36:49.3;Car;0.15;;;13.00;10.30;12.51;12.63;11.64;;;;15.40;15.50;;;;HD 88367;ESO 127-010,IRAS 10077-6222,PK 285-05 1,PN G285.4-05.3;;; +IC2554;G;10:08:50.56;-67:01:51.1;Car;3.31;1.29;8;12.43;13.20;9.56;8.86;8.56;23.11;SBbc;;;;;;;;2MASX J10085056-6701510,ESO 092-012,ESO-LV 92-0120,IRAS 10075-6647,PGC 029512;;"SGC calls this object double (1 plate only); RC1,2,3 and ESO call it single."; +IC2555;Dup;10:11:42.43;-31:38:34.3;Ant;;;;;;;;;;;;;;;3157;;;;;; +IC2556;G;10:12:37.63;-34:43:43.9;Ant;1.83;0.95;119;14.29;;13.11;12.28;12.50;23.90;Scd;;;;;;;;2MASX J10123762-3443440,ESO 374-042,ESO-LV 374-0420,IRAS 10104-3428,MCG -06-23-012,PGC 029727;;; +IC2557;G;10:16:05.87;+38:06:33.2;LMi;0.60;0.41;95;15.70;;12.46;11.73;11.67;23.12;S0-a;;;;;;;;2MASX J10160583+3806334,MCG +06-23-003,PGC 029977,SDSS J101605.87+380633.2;;; +IC2558;G;10:14:44.14;-34:20:19.4;Ant;1.01;0.61;17;14.48;;11.92;11.20;11.12;22.63;Sm;;;;;;;;2MASX J10144414-3420196,ESO 375-001,ESO-LV 375-0010,IRAS 10125-3405,MCG -06-23-018,PGC 029895;;; +IC2559;G;10:14:45.39;-34:03:31.7;Ant;1.69;0.53;17;14.39;;11.54;10.91;10.56;23.47;SBb;;;;;;;;2MASX J10144539-3403316,ESO 375-002,ESO-LV 375-0020,IRAS 10125-3348,MCG -06-23-019,PGC 029898;;; +IC2560;G;10:16:18.72;-33:33:49.7;Ant;3.55;1.67;46;12.53;13.31;9.68;8.97;8.69;23.55;SBb;;;;;;;;2MASX J10161866-3333498,ESO 375-004,ESO-LV 375-0040,IRAS 10140-3318,MCG -05-25-001,PGC 029993;;; +IC2561;G;10:19:08.61;+34:40:30.1;LMi;0.89;0.55;14;14.90;;12.33;11.60;11.28;23.02;Sb;;;;;;;;2MASX J10190862+3440303,IRAS 10162+3455,MCG +06-23-007,PGC 030147,SDSS J101908.60+344030.0,SDSS J101908.61+344030.1,UGC 05567;;; +IC2562;G;10:18:54.50;+16:09:19.9;Leo;0.66;0.44;166;15.20;;11.66;11.00;10.70;22.62;Sa;;;;;;;;2MASX J10185447+1609193,MCG +03-26-053,PGC 030119,SDSS J101854.50+160919.8,SDSS J101854.50+160919.9;;; +IC2563;G;10:18:51.93;-32:35:47.6;Ant;0.91;0.38;110;15.57;;;;;23.29;SBcd;;;;;;;;ESO 436-009,ESO-LV 436-0090,PGC 030125;;; +IC2564;G;10:21:27.70;+36:27:07.4;LMi;0.71;0.60;50;15.83;;12.46;11.81;11.64;24.06;E;;;;;;;;2MASX J10212774+3627075,LEDA 2080857,SDSS J102127.69+362707.3,SDSS J102127.70+362707.4;;;B-Mag taken from LEDA. +IC2565;G;10:21:17.87;+27:55:48.3;Leo;0.67;0.42;70;15.20;;11.81;11.19;10.81;23.07;S0-a;;;;;;;;2MASX J10211787+2755484,PGC 030288;;; +IC2566;G;10:22:19.39;+36:34:58.9;LMi;0.98;0.64;6;14.90;;11.60;10.88;10.56;23.54;S0-a;;;;;;;;2MASX J10221939+3634585,IRAS 10194+3650,MCG +06-23-008,PGC 030357,SDSS J102219.38+363458.8,SDSS J102219.38+363458.9,SDSS J102219.39+363458.9;;; +IC2567;G;10:21:57.80;+24:39:18.8;Leo;0.79;0.59;57;15.70;;12.03;11.42;11.09;23.59;S0-a;;;;;;;;2MASX J10215780+2439184,MCG +04-25-010,PGC 030339,SDSS J102157.80+243918.7,SDSS J102157.80+243918.8;;; +IC2568;G;10:22:30.01;+36:35:57.5;LMi;1.10;0.55;93;15.00;;11.77;11.08;10.83;23.65;SBa;;;;;;;;2MASX J10223002+3635574,MCG +06-23-009,PGC 030371,SDSS J102230.01+363557.4,UGC 05603;;; +IC2569;G;10:22:53.59;+24:36:23.1;Leo;0.67;0.57;146;15.46;;12.18;11.73;11.27;23.61;E;;;;;;;;2MASX J10225359+2436225,LEDA 1711559,SDSS J102253.59+243623.0,SDSS J102253.59+243623.1;;;B-Mag taken from LEDA. +IC2570;G;10:21:34.30;-33:37:23.6;Ant;0.82;0.44;172;16.04;;12.80;12.05;11.76;23.79;SBbc;;;;;;;;2MASX J10213427-3337234,ESO 375-011,ESO-LV 375-0110,PGC 030307;;; +IC2571;Dup;10:21:35.08;-34:16:00.5;Ant;;;;;;;;;;;;;;;3223;;;;;; +IC2572;G;10:25:07.28;+28:05:41.3;LMi;0.90;0.43;26;15.60;;12.45;11.68;11.55;23.64;Sa;;;;;;;;2MASX J10250725+2805409,IRAS 10222+2820,MCG +05-25-008,PGC 030562,SDSS J102507.27+280541.3,SDSS J102507.28+280541.3,UGC 05636;;; +IC2573;G;10:23:30.18;-35:27:20.1;Ant;1.50;0.33;2;15.37;;13.13;12.81;12.58;23.66;SBcd;;;;;;;;2MASX J10233017-3527199,ESO 375-017,ESO-LV 375-0170,PGC 030442;;; +IC2574;G;10:28:23.48;+68:24:43.7;UMa;12.91;5.57;48;11.07;10.87;11.48;10.91;10.72;24.38;SABm;;;;;;;;2MASX J10282348+6824437,MCG +12-10-038,PGC 030819,UGC 05666;Coddington's Nebula;; +IC2575;G;10:25:24.00;-32:38:10.5;Ant;0.63;0.58;55;15.90;;13.12;12.59;12.01;23.54;Sbc;;;;;;;;2MASX J10252399-3238102,ESO 436-017,ESO-LV 436-0170,PGC 030586;;; +IC2576;G;10:25:58.98;-32:54:12.5;Ant;0.94;0.63;42;14.81;;12.39;11.86;11.35;23.11;Sb;;;;;;;;2MASX J10255899-3254123,ESO 375-023,ESO-LV 375-0230,IRAS 10236-3238,MCG -05-25-003,PGC 030634;;; +IC2577;G;10:28:01.45;+32:45:50.0;LMi;0.70;0.41;103;15.30;;13.12;12.40;11.80;23.09;Sb;;;;;;;;2MASX J10280142+3245498,MCG +06-23-018,PGC 030797,SDSS J102801.45+324549.9,SDSS J102801.45+324550.0;;; +IC2578;G;10:27:22.69;-33:52:38.4;Ant;1.51;0.35;143;14.99;;11.56;10.78;10.50;23.48;Sc;;;;;;;;2MASX J10272268-3352384,ESO 375-029,ESO-LV 375-0290,IRAS 10250-3337,PGC 030753;;; +IC2579;Dup;10:29:16.84;+26:05:57.3;Leo;;;;;;;;;;;;;;;3251;;;;;; +IC2580;G;10:28:17.98;-31:31:04.9;Ant;2.05;1.75;128;13.21;;10.96;10.35;10.04;23.54;Sc;;;;;;;;2MASX J10281798-3131049,ESO 436-025,ESO-LV 436-0250,ESO-LV 436-0271,IRAS 10260-3115,MCG -05-25-004,PGC 030814;;ESO-LV has two entries for this object.; +IC2581;OCl;10:27:29.15;-57:37:02.3;Car;6.00;;;4.79;4.30;;;;;;;;;;;;;MWSC 1805;;; +IC2582;G;10:29:11.00;-30:20:33.0;Ant;1.29;1.25;150;13.68;;11.34;10.58;10.14;22.89;Sbc;;;;;;;;2MASX J10291098-3020329,ESO 436-028,ESO-LV 436-0280,IRAS 10268-3005,MCG -05-25-006,PGC 030880;;; +IC2583;G;10:31:10.44;+26:03:18.2;Leo;0.59;0.49;124;15.10;;11.98;11.29;11.05;22.78;E;;;;;;;;2MASX J10311044+2603185,MCG +04-25-027,PGC 031033,SDSS J103110.44+260318.0,SDSS J103110.44+260318.1,SDSS J103110.44+260318.2;;; +IC2584;G;10:29:51.49;-34:54:41.9;Ant;1.44;0.59;134;13.62;12.80;10.40;9.71;9.42;23.07;S0;;;;;;;;2MASX J10295150-3454417,ESO 375-043,ESO-LV 375-0430,MCG -06-23-037,PGC 030938;;; +IC2585;Dup;10:30:26.49;-35:21:34.2;Ant;;;;;;;;;;;;;;;3271;;;;;; +IC2586;G;10:31:02.40;-28:42:59.9;Hya;1.53;1.19;85;13.68;;10.32;9.58;9.37;23.34;E;;;;;;;;2MASX J10310240-2842597,ESO 436-030,ESO-LV 436-0300,MCG -05-25-008,PGC 031025;;; +IC2587;G;10:30:59.60;-34:33:46.6;Ant;1.98;1.47;36;13.38;12.95;10.07;9.37;9.11;23.56;E-S0;;;;;;;;2MASX J10305958-3433466,ESO 375-051,ESO-LV 375-0510,MCG -06-23-047,PGC 031020;;; +IC2588;G;10:31:50.14;-30:23:04.3;Ant;1.65;1.31;154;13.65;;10.51;9.82;9.42;23.27;Sa;;;;;;;;2MASX J10315013-3023044,ESO 436-033,ESO-LV 436-0330,IRAS 10295-3007,MCG -05-25-009,PGC 031088;;; +IC2589;G;10:32:20.82;-24:02:15.2;Hya;0.82;0.39;11;14.27;;11.41;10.72;10.42;22.21;Sb;;;;;;;;2MASX J10322081-2402152,ESO 501-004,ESO-LV 501-0040,IRAS 10299-2346,PGC 031126;;; +IC2590;G;10:36:16.58;+26:57:44.9;LMi;0.97;0.97;10;14.70;;11.25;10.41;10.19;23.43;S0;;;;;;;;2MASX J10361658+2657444,MCG +05-25-024,PGC 031429,SDSS J103616.57+265744.8,UGC 05756;;; +IC2591;G;10:36:38.67;+35:03:10.5;LMi;1.00;0.62;134;14.50;;12.31;11.50;11.38;22.98;SBc;;;;;;;;2MASX J10363862+3503109,IRAS 10337+3518,MCG +06-23-022,PGC 031474,SDSS J103638.66+350310.4,SDSS J103638.67+350310.5,UGC 05763;;; +IC2592;Dup;10:35:08.28;-43:41:30.5;Vel;;;;;;;;;;;;;;;3366;;;;;; +IC2593;G;10:36:15.95;-12:43:32.9;Hya;0.87;0.58;88;15.26;;12.26;11.48;11.38;23.93;S0-a;;;;;;;;2MASX J10361594-1243320,LEDA 155439;;; +IC2594;G;10:36:04.17;-24:19:23.1;Hya;1.66;1.39;112;13.39;;10.27;9.59;9.35;23.34;E-S0;;;;;;;;2MASX J10360418-2419229,ESO 501-028,ESO-LV 501-0280,MCG -04-25-028,PGC 031405;;; +IC2595;Other;10:37:33.12;-11:07:00.2;Sex;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2596;G;10:34:12.46;-73:14:24.5;Car;1.32;0.81;179;15.60;;10.83;10.09;9.72;22.89;Sab;;;;;;;;2MASX J10341244-7314245,ESO 038-002,IRAS 10329-7258,PGC 031265;;; +IC2597;G;10:37:47.45;-27:04:54.1;Hya;2.62;1.73;8;12.75;;9.46;8.78;8.53;23.86;E;;;;;;;;2MASX J10374734-2704524,ESO 501-058,ESO-LV 501-0580,MCG -04-25-051,PGC 031586;;; +IC2598;G;10:39:42.33;+26:43:39.2;LMi;0.66;0.39;152;15.10;;12.26;11.48;11.05;22.87;Sa;;;;;;;;2MASX J10394233+2643394,IRAS 10369+2659,PGC 031713;;; +IC2599;HII;10:37:27.09;-58:44:00.2;Car;20.00;20.00;;;;;;;;;;;;;;;;HD 092207,HIP 052004;;This is part of the emission nebula NGC 3324, and includes a star.; +IC2600;G;10:46:38.80;+72:19:13.6;UMa;0.62;0.45;115;15.60;;12.19;11.42;11.21;23.29;;;;;;;;;2MASX J10463880+7219136,MCG +12-10-075,PGC 032151;;; +IC2601;G;10:47:13.32;+72:19:22.9;UMa;0.35;0.28;165;15.50;;11.55;10.87;10.50;;E;;;;;;;;2MASX J10471326+7219228,MCG +12-10-078,PGC 032187;;; +IC2602;OCl;10:42:57.47;-64:23:39.1;Car;48.00;;;;;;;;;;;;;;;;;C 102,MWSC 1841;tet Car Cluster;; +IC2603;Other;10:48:25.36;+32:55:38.3;LMi;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2604;G;10:49:25.07;+32:46:21.8;LMi;1.18;1.03;40;15.00;;12.96;12.32;12.64;23.74;SBm;;;;;;;;2MASX J10492498+3246217,MCG +06-24-016,PGC 032390,SDSS J104925.06+324621.7,SDSS J104925.07+324621.8,UGC 05927;;; +IC2605;Other;10:49:47.54;+32:58:23.5;LMi;0.40;0.20;0;15.39;;;;;;;;;;;;;;;;This is the southwestern arm of NGC 3395. B-Mag taken from LEDA.; +IC2606;G;10:50:17.65;+37:57:22.4;LMi;1.07;0.40;112;14.80;;11.47;10.73;10.42;23.27;S0-a;;;;;;;;2MASX J10501764+3757221,MCG +06-24-021,PGC 032465,SDSS J105017.64+375722.3,SDSS J105017.65+375722.4;;; +IC2607;G;10:50:18.94;+37:59:38.2;LMi;0.75;0.48;63;15.30;;12.80;12.24;11.82;23.19;SBab;;;;;;;;2MASX J10501890+3759381,MCG +06-24-023,PGC 032468,SDSS J105018.93+375938.1,SDSS J105018.94+375938.2;;; +IC2608;G;10:50:15.52;+32:46:05.4;LMi;0.79;0.31;121;15.60;;13.16;12.54;12.21;22.99;SBc;;;;;;;;2MASX J10501549+3246055,PGC 032464,SDSS J105015.51+324605.3,SDSS J105015.51+324605.4,SDSS J105015.52+324605.4;;; +IC2609;Dup;10:50:17.98;-12:06:31.4;Hya;;;;;;;;;;;;;;;3404;;;;;; +IC2610;Other;10:52:08.07;+33:04:59.4;LMi;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2611;*;10:52:38.93;+10:08:10.9;Leo;;;;;;;;;;;;;;;;;;SDSS J105238.93+100810.8;;; +IC2612;G;10:53:37.16;+32:46:03.5;LMi;0.82;0.56;108;15.78;;12.25;11.60;11.60;24.06;E-S0;;;;;;;;2MASX J10533714+3246034,MCG +06-24-033,PGC 032704,SDSS J105337.15+324603.5,SDSS J105337.16+324603.4,SDSS J105337.16+324603.5;;;B-Mag taken from LEDA. +IC2613;Dup;10:49:50.11;+32:58:58.3;LMi;;;;;;;;;;;;;;;3395;;;;;; +IC2614;G;11:01:33.80;+38:48:13.2;UMa;0.24;0.24;16;16.50;;;;;;SBab;;;;;;;;2MASX J11013383+3848137,SDSS J110133.80+384813.2,SDSS J110133.81+384813.2;;;B-Mag taken from LEDA. +IC2615;G;11:02:02.28;+37:56:42.9;UMa;0.38;0.34;80;15.50;;12.53;11.83;11.61;;S0-a;;;;;;;;2MASX J11020228+3756427,PGC 033289,SDSS J110202.27+375642.8,SDSS J110202.28+375642.9;;; +IC2616;G;11:02:05.76;+38:47:14.1;UMa;0.66;0.48;69;15.60;;12.03;11.30;11.11;23.39;E;;;;;;;;2MASX J11020574+3847137,MCG +07-23-012,PGC 033291,SDSS J110205.75+384714.0,SDSS J110205.76+384714.0,SDSS J110205.76+384714.1;;; +IC2617;G;11:02:07.63;+38:39:51.3;UMa;0.89;0.45;97;15.00;;11.71;10.95;10.68;23.39;S0;;;;;;;;2MASX J11020760+3839511,MCG +07-23-011,PGC 033292,SDSS J110207.62+383951.2,SDSS J110207.63+383951.3;;; +IC2618;**;11:01:58.82;+27:47:21.3;LMi;;;;;;;;;;;;;;;;;;;;; +IC2619;G;11:02:15.26;+37:57:57.9;UMa;0.33;0.22;67;15.70;;13.01;12.35;12.02;;E;;;;;;;;2MASX J11021525+3757582,PGC 033297,SDSS J110215.25+375757.9,SDSS J110215.26+375757.9;;; +IC2620;G;11:02:23.95;+38:30:18.1;UMa;1.04;0.94;110;14.90;;11.73;10.99;10.67;23.88;S0-a;;;;;;;;2MASX J11022392+3830182,MCG +07-23-013,PGC 033301,SDSS J110223.95+383018.0,SDSS J110223.95+383018.1,UGC 06107;;; +IC2621;PN;11:00:19.99;-65:14:57.7;Car;0.08;;;11.30;11.20;11.61;11.46;10.52;;;;16.40;15.40;;;;HD 95541;ESO 093-004,IRAS 10583-6458,PK 291-04 1,PN G291.6-04.8;;Within 10 degrees of the galactic plane.; +IC2622;Dup;11:02:59.67;-16:17:22.0;Crt;;;;;;;;;;;;;;;3508;;;;;; +IC2623;G;11:03:50.96;-20:05:35.0;Crt;1.06;0.73;64;14.37;;11.50;10.84;10.55;23.32;E-S0;;;;;;;;2MASX J11035096-2005347,ESO 569-033,ESO-LV 569-0330,MCG -03-28-034,PGC 033418;;; +IC2624;Dup;11:07:18.07;-19:28:17.6;Crt;;;;;;;;;;;;;;;3497;;;;;; +IC2625;Dup;11:07:19.12;-19:33:20.3;Crt;;;;;;;;;;;;;;;3529;;;;;; +IC2626;G;11:09:03.87;+26:54:15.0;Leo;0.77;0.34;50;15.70;;13.08;12.38;12.10;23.43;Sb;;;;;;;;2MASX J11090387+2654152,PGC 033791,SDSS J110903.87+265415.0;;; +IC2627;G;11:09:53.39;-23:43:33.4;Crt;2.40;1.70;43;12.67;;9.90;9.18;8.99;23.04;SABc;;;;;;;;2MASX J11095340-2343335,ESO 502-021,ESO-LV 502-0210,IRAS 11074-2327,MCG -04-27-002,PGC 033860,UGCA 227;;; +IC2628;G;11:11:37.87;+12:07:19.1;Leo;0.75;0.69;110;15.10;;12.97;12.25;11.91;23.81;SBa;;;;;;;;2MASX J11113786+1207196,PGC 034038,SDSS J111137.87+120719.1;;; +IC2629;G;11:12:36.94;+12:06:17.8;Leo;0.70;0.34;28;16.20;;14.25;13.56;13.12;23.84;Sa;;;;;;;;2MASX J11123698+1206176,SDSS J111236.93+120617.7,SDSS J111236.94+120617.8;;;B-Mag taken from LEDA. +IC2630;*;11:12:43.19;+12:19:08.2;Leo;;;;;;;;;;;;;;;;;;SDSS J111243.19+121908.2;;; +IC2631;Neb;11:09:52.79;-76:36:51.5;Cha;;;;;;;;;;;;;;;;;;HD 97300;;; +IC2632;G;11:13:05.94;+11:40:23.8;Leo;0.41;0.37;55;17.07;;14.11;13.15;12.82;23.95;E;;;;;;;;2MASX J11130592+1140235,PGC 1397074,SDSS J111305.93+114023.7,SDSS J111305.93+114023.8,SDSS J111305.94+114023.8;;;B-Mag taken from LEDA. +IC2633;G;11:13:10.04;+11:36:03.6;Leo;0.62;0.36;17;16.53;;;;;23.79;Sc;;;;;;;;PGC 1396016,SDSS J111310.04+113603.5,SDSS J111310.04+113603.6;;;B-Mag taken from LEDA. +IC2634;G;11:13:28.25;+10:29:09.5;Leo;0.90;0.82;110;15.00;;12.61;11.91;11.75;23.52;Sb;;;;;;;;2MASX J11132821+1029090,MCG +02-29-010,PGC 034178,SDSS J111328.24+102909.4,SDSS J111328.25+102909.4,SDSS J111328.25+102909.5;;; +IC2635;**;11:13:29.81;+11:27:50.0;Leo;;;;;;;;;;;;;;;;;;;;; +IC2636;G;11:13:34.04;+11:27:22.2;Leo;0.67;0.37;73;16.60;;12.88;12.20;12.25;24.51;E;;;;;;;;2MASX J11133406+1127220,LEDA 1393913,SDSS J111334.04+112722.2;;;B-Mag taken from LEDA. +IC2637;G;11:13:49.75;+09:35:10.7;Leo;0.97;0.86;62;14.88;14.17;11.53;10.81;10.45;22.73;E-S0;;;;;;;;2MASX J11134972+0935106,IRAS 11112+0951,MCG +02-29-011,PGC 034199,SDSS J111349.73+093510.6,SDSS J111349.74+093510.6,SDSS J111349.74+093510.7,SDSS J111349.75+093510.7,UGC 06259;;; +IC2638;G;11:13:51.91;+10:33:48.2;Leo;0.97;0.65;100;15.10;;12.17;11.43;11.29;23.76;S0-a;;;;;;;;2MASX J11135191+1033476,MCG +02-29-012,PGC 034205,SDSS J111351.90+103348.2,UGC 06261;;; +IC2639;G;11:13:55.54;+09:38:34.1;Leo;0.57;0.42;100;16.43;;13.35;12.60;12.46;23.93;S0;;;;;;;;2MASX J11135553+0938336,LEDA 1367973,SDSS J111355.53+093834.0,SDSS J111355.53+093834.1,SDSS J111355.54+093834.1;;;B-Mag taken from LEDA. +IC2640;G;11:14:05.49;+10:59:51.6;Leo;0.43;0.35;105;16.65;;;;;23.50;Sc;;;;;;;;2MASX J11140548+1059516,PGC 1387441,SDSS J111405.48+105951.5,SDSS J111405.49+105951.5,SDSS J111405.49+105951.6;;;B-Mag taken from LEDA. +IC2641;*;11:14:10.55;+09:23:57.6;Leo;;;;;;;;;;;;;;;;;;SDSS J111410.55+092357.5;;; +IC2642;Other;11:14:15.80;+12:15:56.4;Leo;;;;;;;;;;;;;;;;;;;;;NED lists this object as type G, but there's nothing at these coords. +IC2643;*;11:14:26.56;+10:07:34.4;Leo;;;;;;;;;;;;;;;;;;SDSS J111426.55+100734.3;;; +IC2644;G;11:14:29.81;+10:46:06.5;Leo;0.61;0.36;76;16.52;;;;;24.28;E;;;;;;;;2MASX J11142982+1046062,SDSS J111429.80+104606.4,SDSS J111429.80+104606.5;;;B-Mag taken from LEDA. +IC2645;G;11:14:30.82;+11:53:12.4;Leo;0.79;0.29;92;15.70;;12.96;12.10;11.87;23.70;S0-a;;;;;;;;2MASX J11143084+1153122,PGC 034250,SDSS J111430.82+115312.3,SDSS J111430.82+115312.4;;; +IC2646;G;11:14:37.60;+12:31:42.6;Leo;0.45;0.34;2;16.91;;;;;23.70;Sc;;;;;;;;2MASX J11143759+1231427,PGC 1411161,SDSS J111437.59+123142.6;;;B-Mag taken from LEDA. +IC2647;*;11:14:38.62;+12:08:31.2;Leo;;;;;;;;;;;;;;;;;;SDSS J111438.61+120831.2;;; +IC2648;G;11:14:45.63;+10:13:29.4;Leo;0.58;0.46;16;15.70;;13.91;13.45;12.78;23.53;Sb;;;;;;;;2MASX J11144560+1013292,PGC 034267,SDSS J111445.62+101329.3,SDSS J111445.63+101329.3,SDSS J111445.63+101329.4;;; +IC2649;G;11:14:46.45;+11:07:39.7;Leo;0.85;0.74;74;15.00;;11.95;11.42;11.11;23.88;E;;;;;;;;2MASX J11144643+1107393,MCG +02-29-015,PGC 034273,SDSS J111446.44+110739.6;;; +IC2650;G;11:14:52.66;+13:51:08.9;Leo;0.48;0.43;21;16.74;;;;;23.74;Sbc;;;;;;;;2MASX J11145254+1351086,PGC 1442333,SDSS J111452.66+135108.8,SDSS J111452.66+135108.9;;;B-Mag taken from LEDA. +IC2651;G;11:14:52.28;+12:14:23.2;Leo;0.52;0.39;84;16.27;;;;;23.48;Sb;;;;;;;;2MASX J11145228+1214226,PGC 1406082,SDSS J111452.28+121423.0,SDSS J111452.28+121423.1,SDSS J111452.28+121423.2;;;B-Mag taken from LEDA. +IC2652;G;11:14:52.32;+12:26:53.0;Leo;0.67;0.64;45;16.32;;12.88;12.14;11.88;24.31;E;;;;;;;;2MASX J11145234+1226526,PGC 3090987,SDSS J111452.31+122653.0,SDSS J111452.32+122653.0;;;B-Mag taken from LEDA. +IC2653;**;11:14:53.83;+10:32:54.1;Leo;;;;;;;;;;;;;;;;;;;;; +IC2654;G;11:15:02.86;+12:29:58.1;Leo;0.41;0.35;93;16.85;;;;;23.77;E;;;;;;;;2MASX J11150285+1229576,SDSS J111502.85+122958.0,SDSS J111502.86+122958.1;;;B-Mag taken from LEDA. +IC2655;G;11:15:05.16;+12:09:51.8;Leo;0.36;0.30;68;17.44;;;;;24.09;E;;;;;;;;2MASX J11150517+1209516,PGC 1404832,SDSS J111505.15+120951.7,SDSS J111505.16+120951.8;;;B-Mag taken from LEDA. +IC2656;G;11:15:05.38;+12:22:44.9;Leo;0.64;0.30;128;16.88;;;;;24.10;Sbc;;;;;;;;2MASX J11150531+1222446,PGC 1408477,SDSS J111505.37+122244.8,SDSS J111505.38+122244.9;;;B-Mag taken from LEDA. +IC2657;G;11:15:08.71;+13:41:41.0;Leo;0.29;0.17;131;17.27;;;;;;E;;;;;;;;2MASX J11150874+1341406,SDSS J111508.70+134140.9,SDSS J111508.71+134140.9,SDSS J111508.71+134141.0;;;B-Mag taken from LEDA. +IC2658;*;11:15:08.75;+12:59:47.8;Leo;;;;;;;;;;;;;;;;;;SDSS J111508.75+125947.7;;; +IC2659;*;11:15:27.84;+12:53:15.6;Leo;;;;;;;;;;;;;;;;;;SDSS J111527.83+125315.6;;; +IC2660;G;11:15:28.44;+12:26:13.9;Leo;0.40;0.31;158;16.78;;;;;23.45;Sb;;;;;;;;2MASX J11152842+1226139,PGC 1409536,SDSS J111528.44+122613.9;;;B-Mag taken from LEDA. +IC2661;G;11:15:29.17;+13:36:31.2;Leo;0.68;0.26;110;15.40;;13.47;12.50;12.49;23.96;S0-a;;;;;;;;PGC 034330,SDSS J111529.05+133631.2;;; +IC2662;Other;11:15:30.79;+12:46:15.8;Leo;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC2663;*;11:15:32.38;+12:36:14.1;Leo;;;;;;;;;;;;;;;;;;SDSS J111532.38+123614.0;;; +IC2664;**;11:15:38.44;+12:33:45.7;Leo;;;;;;;;;;;;;;;;;;SDSS J111538.43+123345.6;;; +IC2665;G;11:15:40.78;+11:43:26.9;Leo;0.59;0.21;103;17.51;;;;;24.19;Sm;;;;;;;;PGC 1397841,SDSS J111540.78+114326.8,SDSS J111540.78+114326.9;;;B-Mag taken from LEDA. +IC2666;G;11:15:43.77;+13:46:56.1;Leo;1.07;0.72;167;14.60;;11.50;10.75;10.53;23.05;S0-a;;;;;;;;2MASX J11154377+1346559,MCG +02-29-016,PGC 034342,SDSS J111543.76+134656.1,SDSS J111543.77+134656.1;;; +IC2667;G;11:15:44.04;+12:07:00.6;Leo;0.63;0.51;173;16.68;;;;;24.56;E;;;;;;;;2MASX J11154408+1207009,PGC 1404066,SDSS J111544.03+120700.5,SDSS J111544.04+120700.5,SDSS J111544.04+120700.6;;;B-Mag taken from LEDA. +IC2668;G;11:15:32.28;-14:10:15.9;Crt;1.55;0.54;140;14.59;;11.72;11.04;10.66;23.79;SBa;;;;;;;;2MASX J11153229-1410158,IRAS 11130-1353,MCG -02-29-015,PGC 034333;;;B-Mag taken from LEDA. +IC2669;**;11:15:53.22;+13:25:46.4;Leo;;;;;;;;;;;;;;;;;;;;; +IC2670;G;11:15:59.56;+11:47:00.1;Leo;0.46;0.29;166;16.57;;;;;23.46;Sab;;;;;;;;2MASX J11155959+1147005,PGC 1398699,SDSS J111559.55+114700.1;;;B-Mag taken from LEDA. +IC2671;*;11:16:03.32;+13:07:27.3;Leo;;;;;;;;;;;;;;;;;;SDSS J111603.32+130727.2;;; +IC2672;*;11:16:03.82;+10:09:26.2;Leo;;;;;;;;;;;;;;;;;;;;; +IC2673;G;11:16:04.13;+10:09:45.2;Leo;0.85;0.55;35;15.30;;13.92;13.40;13.22;23.57;Sc;;;;;;;;2MASX J11160413+1009445,MCG +02-29-017,PGC 034368,SDSS J111604.13+100945.1,SDSS J111604.13+100945.2,SDSS J111604.14+100945.2,UGC 06288;;"Incorrectly called IC 2672 in CGCG; IC 2672 is a star 20 arcsec south."; +IC2674;G;11:16:08.25;+11:02:55.1;Leo;1.12;0.65;23;15.30;;;;;24.09;Sc;;;;;;;;PGC 034373,SDSS J111608.25+110255.1,SDSS J111608.26+110255.1,UGC 06290;;; +IC2675;*;11:16:10.81;+12:14:57.5;Leo;;;;;;;;;;;;;;;;;;SDSS J111610.80+121457.5;;; +IC2676;G;11:16:18.51;+09:49:18.6;Leo;0.14;0.11;155;17.69;;;;;21.97;Sc;;;;;;;;2MASX J11161848+0949188,SDSS J111618.50+094918.5,SDSS J111618.51+094918.6;;;B-Mag taken from LEDA. +IC2677;G;11:16:19.30;+12:12:57.1;Leo;0.23;0.19;10;18.16;;;;;23.69;;;;;;;;;SDSS J111619.29+121257.0,SDSS J111619.30+121257.1;;The IC number includes a neighboring star.;B-Mag taken from LEDA +IC2678;G;11:16:21.64;+11:56:56.8;Leo;0.67;0.26;121;16.39;;;;;24.27;S0-a;;;;;;;;2MASX J11162163+1156564,PGC 1401305,SDSS J111621.63+115656.7,SDSS J111621.64+115656.8;;;B-Mag taken from LEDA. +IC2679;G;11:16:23.20;+12:00:55.4;Leo;0.87;0.56;23;15.67;;12.61;12.06;11.75;24.17;S0-a;;;;;;;;2MASX J11162320+1200554,PGC 1402378,SDSS J111623.19+120055.3,SDSS J111623.20+120055.4;;;B-Mag taken from LEDA. +IC2680;G;11:16:25.53;+09:48:25.7;Leo;0.79;0.28;132;15.60;;13.41;12.70;12.29;23.82;S0-a;;;;;;;;2MASX J11162551+0948259,PGC 034387,SDSS J111625.53+094825.7;;; +IC2681;Other;11:16:33.25;+11:12:25.9;Leo;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC2682;**;11:16:36.12;+09:24:38.8;Leo;;;;;;;;;;;;;;;;;;;;; +IC2683;G;11:16:54.30;+12:05:57.4;Leo;0.42;0.28;87;17.01;;;;;23.98;E;;;;;;;;SDSS J111654.29+120557.3,SDSS J111654.30+120557.4;;;B-Mag taken from LEDA. +IC2684;G;11:17:01.05;+13:05:58.7;Leo;0.76;0.57;171;15.40;;;;;24.91;I;;;;;;;;PGC 034438,SDSS J111701.05+130558.6,SDSS J111701.05+130558.7;;; +IC2685;*;11:17:00.09;+10:05:38.7;Leo;;;;;;;;;;;;;;;;;;SDSS J111700.09+100538.6;;; +IC2686;*;11:17:02.51;+12:57:06.0;Leo;;;;;;;;;;;;;;;;;;SDSS J111702.51+125706.0;;; +IC2687;**;11:17:11.98;+10:09:29.2;Leo;;;;;;;;;;;;;;;;;;SDSS J111711.97+100929.1;;; +IC2689;G;11:17:19.50;+12:57:35.8;Leo;0.66;0.24;31;16.94;;;;;23.96;Sm;;;;;;;;LEDA 1419739,SDSS J111719.49+125735.7,SDSS J111719.50+125735.8;;;B-Mag taken from LEDA. +IC2690;G;11:17:21.59;+12:58:31.5;Leo;0.28;0.26;47;18.03;;;;;24.06;;;;;;;;;2MASX J11172157+1258310,PGC 1420052,SDSS J111721.58+125831.5;;;B-Mag taken from LEDA. +IC2691;*;11:17:24.58;+12:01:51.9;Leo;;;;;;;;;;;;;;;;;;SDSS J111724.58+120151.9;;; +IC2692;G;11:17:33.22;+10:46:05.0;Leo;0.52;0.39;100;16.62;;13.28;12.31;12.12;24.05;E;;;;;;;;2MASX J11173324+1046050,LEDA 1384189,SDSS J111733.21+104604.8,SDSS J111733.21+104604.9,SDSS J111733.21+104605.0,SDSS J111733.22+104604.9;;;B-Mag taken from LEDA. +IC2693;*;11:17:36.31;+13:32:55.8;Leo;;;;;;;;;;;;;;;;;;SDSS J111736.30+133255.8;;; +IC2694;G;11:17:38.60;+13:22:34.0;Leo;0.76;0.36;86;15.30;;;;;23.17;SBbc;;;;;;;;PGC 034491;;Possibly a GPair.; +IC2695;G;11:17:48.57;+13:43:39.6;Leo;0.51;0.39;58;16.53;;;;;23.60;Sbc;;;;;;;;PGC 1438811,SDSS J111748.57+134339.5,SDSS J111748.57+134339.6;;;B-Mag taken from LEDA. +IC2696;*;11:17:48.93;+12:45:20.7;Leo;;;;;;;;;;;;;;;;;;SDSS J111748.93+124520.6;;; +IC2697;*;11:17:51.13;+13:23:59.9;Leo;;;;;;;;;;;;;;;;;;SDSS J111751.13+132359.9;;; +IC2698;G;11:17:51.02;+11:53:08.8;Leo;0.70;0.48;43;15.60;;;;;23.68;Scd;;;;;;;;PGC 034510,SDSS J111751.01+115308.7,SDSS J111751.02+115308.8;;Interacting compact companion superposed 8 arcsec east.; +IC2699;*;11:17:52.65;+11:54:33.2;Leo;;;;;;;;;;;;;;;;;;SDSS J111752.64+115433.2;;; +IC2700;G;11:17:54.18;+12:03:15.1;Leo;0.38;0.31;120;17.03;;;;;23.59;Sc;;;;;;;;2MASX J11175419+1203144,PGC 1402998,SDSS J111754.18+120315.1;;;B-Mag taken from LEDA. +IC2701;G;11:17:57.02;+11:07:05.0;Leo;0.44;0.22;78;17.20;;;;;23.55;Sc;;;;;;;;PGC 1389044,SDSS J111757.01+110704.9,SDSS J111757.02+110705.0;;;B-Mag taken from LEDA. +IC2702;G;11:17:57.23;+09:24:44.9;Leo;0.40;0.34;117;17.01;;13.99;13.57;13.16;23.72;Sb;;;;;;;;2MASX J11175723+0924445,LEDA 1364735,SDSS J111757.22+092444.9,SDSS J111757.23+092444.9;;;B-Mag taken from LEDA. +IC2703;G;11:18:05.13;+17:38:58.3;Leo;0.93;0.82;19;15.70;;12.85;11.97;12.07;24.23;S0;;;;;;;;2MASX J11180516+1738574,MCG +03-29-026,PGC 034536,SDSS J111805.12+173858.2;;; +IC2704;G;11:18:04.01;+12:27:15.1;Leo;0.65;0.40;70;15.50;;13.09;12.54;12.06;23.25;Sab;;;;;;;;2MASX J11180401+1227154,PGC 034533,SDSS J111804.00+122715.0,SDSS J111804.01+122715.0,SDSS J111804.01+122715.1;;; +IC2705;*;11:18:03.68;+11:54:14.7;Leo;;;;;;;;;;;;;;;;;;SDSS J111803.68+115414.6;;; +IC2706;*;11:18:29.20;+12:32:54.4;Leo;;;;;;;;;;;;;;;;;;SDSS J111829.20+123254.4;;; +IC2707;G;11:18:30.84;+09:28:29.5;Leo;0.46;0.38;148;16.51;;;;;23.49;SBbc;;;;;;;;2MASX J11183086+0928291,PGC 1365644,SDSS J111830.83+092829.4,SDSS J111830.83+092829.5,SDSS J111830.84+092829.5;;;B-Mag taken from LEDA. +IC2708;G;11:18:34.61;+12:42:40.0;Leo;0.92;0.77;63;15.10;;12.04;11.26;11.10;23.79;E;;;;;;;;2MASX J11183461+1242400,PGC 034584,SDSS J111834.60+124239.9,SDSS J111834.61+124239.9,SDSS J111834.61+124240.0;;; +IC2709;G;11:18:42.16;+12:33:42.1;Leo;0.54;0.38;153;17.47;;;;;24.56;I;;;;;;;;SDSS J111842.18+123341.7;;The IC number includes a nearby star and a defect on the original plate.;B-Mag taken from LEDA +IC2710;**;11:18:44.32;+13:33:59.7;Leo;;;;;;;;;;;;;;;;;;SDSS J111844.31+133359.7;;; +IC2711;*;11:18:46.49;+13:44:18.4;Leo;;;;;;;;;;;;;;;;;;;;; +IC2712;G;11:18:52.78;+09:37:36.8;Leo;0.46;0.41;44;16.55;;14.36;13.49;13.33;23.58;Sb;;;;;;;;2MASX J11185281+0937362,LEDA 3091441,SDSS J111852.77+093736.7,SDSS J111852.78+093736.8;;The IC number also includes a faint galaxy 20 arcsec southwest.;B-Mag taken from LEDA. +IC2713;G;11:19:10.22;+12:09:53.3;Leo;0.59;0.57;40;16.29;;13.22;12.31;11.88;24.01;E;;;;;;;;2MASX J11191020+1209535,PGC 3090989,SDSS J111910.21+120953.3,SDSS J111910.22+120953.1,SDSS J111910.22+120953.3;;;B-Mag taken from LEDA. +IC2714;OCl;11:17:27.35;-62:43:30.4;Car;7.20;;;;8.20;;;;;;;;;;;;;MWSC 1930;;; +IC2715;G;11:19:14.39;+11:57:07.8;Leo;0.74;0.37;100;21.01;;;;;28.48;I;;;;;;;;SDSS J111914.39+115707.7,SDSS J111914.39+115707.8;;;B-Mag taken from LEDA +IC2716;G;11:19:16.34;+11:41:54.8;Leo;0.38;0.19;81;17.70;;;;;23.70;Sm;;;;;;;;PGC 1397453,SDSS J111916.33+114154.7,SDSS J111916.34+114154.8;;;B-Mag taken from LEDA. +IC2717;*;11:19:18.77;+12:02:54.8;Leo;;;;;;;;;;;;;;;;;;SDSS J111918.77+120254.8;;; +IC2718;G;11:19:20.90;+12:01:20.2;Leo;0.59;0.26;99;15.60;;13.64;13.11;12.98;23.12;Sbc;;;;;;;;2MASX J11192097+1201205,PGC 034644,SDSS J111920.89+120120.1,SDSS J111920.89+120120.2,SDSS J111920.90+120120.2;;; +IC2719;G;11:19:32.20;+12:03:35.2;Leo;0.22;0.21;83;17.87;;;;;23.48;E;;;;;;;;2MASX J11193218+1203351,SDSS J111932.19+120335.2,SDSS J111932.20+120335.2;;;B-Mag taken from LEDA +IC2720;G;11:19:35.65;+12:04:35.7;Leo;0.79;0.59;24;15.60;;12.41;11.65;11.46;24.01;E;;;;;;;;2MASX J11193566+1204361,2MASX J11193598+1204432,PGC 034662,SDSS J111935.64+120435.6,SDSS J111935.64+120435.7,SDSS J111935.65+120435.6,SDSS J111935.65+120435.7;;; +IC2721;Other;11:19:42.81;+12:18:38.3;Leo;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2722;GTrpl;11:19:44.36;+13:57:46.5;Leo;0.70;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC2722 NED01;G;11:19:43.94;+13:57:50.1;Leo;0.69;0.48;70;16.10;;12.47;11.92;11.42;24.15;E;;;;;;;;2MASX J11194398+1357503,SDSS J111943.94+135750.1;;;B-Mag taken from LEDA +IC2722 NED03;G;11:19:44.36;+13:57:46.5;Leo;0.11;0.07;80;17.08;;;;;;Sa;;;;;;;;2MASS J11194435+1357465,SDSS J111944.36+135746.5;;;B-Mag taken from LEDA +IC2723;G;11:19:47.90;+12:02:00.4;Leo;0.47;0.25;104;17.38;;;;;24.58;E;;;;;;;;2MASX J11194792+1202004,PGC 1402669,SDSS J111947.90+120200.3,SDSS J111947.90+120200.4;;;B-Mag taken from LEDA. +IC2724;G;11:19:48.44;+10:42:59.6;Leo;0.48;0.44;85;16.84;;13.87;13.15;12.76;23.91;Sb;;;;;;;;2MASX J11194843+1043002,PGC 3091274,SDSS J111948.46+104300.5,SDSS J111948.46+104300.6;;;B-Mag taken from LEDA. +IC2725;G;11:19:57.44;+13:25:45.4;Leo;0.48;0.42;116;17.20;;13.52;12.51;12.23;24.34;E;;;;;;;;2MASX J11195746+1325455,LEDA 1430824,SDSS J111957.44+132545.4;;;B-Mag taken from LEDA. +IC2726;Other;11:19:58.44;+13:24:56.1;Leo;;;;;;;;;;;;;;;;;;;;"Only a faint star nearby; nominal position."; +IC2727;G;11:20:00.07;+12:02:00.0;Leo;0.43;0.38;70;16.70;;;;;23.52;Sbc;;;;;;;;PGC 1402667,SDSS J112000.06+120159.9,SDSS J112000.07+120159.9,SDSS J112000.07+120200.0,SDSS J112000.08+120200.0;;;B-Mag taken from LEDA. +IC2728;*;11:20:05.13;+13:25:37.2;Leo;;;;;;;;;;;;;;;;;;SDSS J112005.12+132537.1;;The IC identification is uncertain.; +IC2729;G;11:20:06.77;+13:24:33.5;Leo;0.43;0.23;177;17.65;;;;;23.90;Sc;;;;;;;;2MASX J11200675+1324333,PGC 1430330,SDSS J112006.76+132433.4,SDSS J112006.77+132433.5;;The IC identification is uncertain.;B-Mag taken from LEDA. +IC2730;*;11:20:07.39;+12:21:59.5;Leo;;;;;;;;;;;;;;;;;;SDSS J112007.39+122159.5;;; +IC2731;*;11:20:10.27;+13:33:29.8;Leo;;;;;;;;;;;;;;;;;;SDSS J112010.26+133329.7;;; +IC2732;G;11:20:12.38;+12:24:14.5;Leo;0.40;0.34;114;17.17;;;;;23.76;Sbc;;;;;;;;2MASX J11201239+1224143,PGC 1408926,SDSS J112012.37+122414.4;;;B-Mag taken from LEDA. +IC2733;**;11:20:17.31;+13:50:06.9;Leo;;;;;;;;;;;;;;;;;;;;The IC identification is uncertain.; +IC2734;G;11:20:23.82;+12:26:34.9;Leo;0.84;0.30;12;16.51;;13.27;12.61;12.07;24.00;SBc;;;;;;;;2MASX J11202380+1226353,LEDA 1409656,SDSS J112023.81+122634.8,SDSS J112023.82+122634.8,SDSS J112023.82+122634.9;;;B-Mag taken from LEDA. +IC2735;G;11:21:03.90;+34:20:38.2;UMa;1.18;0.25;100;15.40;;11.46;10.65;10.30;23.36;Sab;;;;;;;;2MASX J11210388+3420388,MCG +06-25-048,PGC 034772,SDSS J112103.89+342038.1,SDSS J112103.89+342038.2,SDSS J112103.90+342038.2,UGC 06364;;; +IC2736;*;11:20:54.62;+12:24:31.2;Leo;;;;;;;;;;;;;;;;;;SDSS J112054.62+122431.2;;; +IC2737;*;11:21:08.25;+14:17:35.5;Leo;;;;;;;;;;;;;;;;;;;;; +IC2738;G;11:21:23.06;+34:21:24.0;UMa;0.85;0.75;144;15.30;;11.74;11.10;10.79;23.50;E-S0;;;;;;;;2MASX J11212302+3421244,MCG +06-25-049,PGC 034797,SDSS J112123.04+342124.3;;; +IC2739;G;11:21:12.43;+11:54:53.1;Leo;0.37;0.31;65;16.86;;;;;23.46;Sbc;;;;;;;;2MASX J11211247+1154529,PGC 1400779,SDSS J112112.42+115453.0,SDSS J112112.43+115453.0,SDSS J112112.43+115453.1;;;B-Mag taken from LEDA. +IC2740;G;11:21:17.06;+08:45:08.3;Leo;0.37;0.30;57;17.39;;;;;23.78;Sb;;;;;;;;2MASX J11211707+0845089,PGC 1353045,SDSS J112117.06+084508.3;;;B-Mag taken from LEDA. +IC2741;G;11:21:17.47;+09:09:08.5;Leo;0.42;0.31;122;16.65;;;;;23.72;SBbc;;;;;;;;PGC 1360528,SDSS J112117.47+090908.5,SDSS J112117.48+090908.5;;"Star 17"" north-northwest of galaxy.";B-Mag taken from LEDA. +IC2742;G;11:21:18.73;+10:26:48.2;Leo;0.34;0.16;38;17.46;;;;;23.51;Sc;;;;;;;;PGC 1379662,SDSS J112118.72+102648.2,SDSS J112118.73+102648.2;;;B-Mag taken from LEDA. +IC2743;*;11:21:24.99;+08:41:35.2;Leo;;;;;;;;;;;;;;;;;;SDSS J112124.98+084135.1;;; +IC2744;G;11:21:42.51;+34:21:46.1;UMa;1.12;0.74;38;15.50;14.77;11.90;11.18;11.00;24.23;E-S0;;;;;;;;2MASX J11214248+3421455,MCG +06-25-052,PGC 034833,SDSS J112142.50+342146.0;;; +IC2745;G;11:21:31.76;+13:25:35.8;Leo;0.62;0.21;70;15.30;;12.29;11.57;11.24;;SBb;;;;;;;;2MASX J11213146+1325353,PGC 034811,SDSS J112131.75+132535.8,SDSS J112131.76+132535.7,SDSS J112131.76+132535.8;;; +IC2746;G;11:21:36.42;+11:44:13.5;Leo;0.53;0.34;166;16.72;;14.00;13.18;12.97;24.18;E;;;;;;;;2MASX J11213641+1144142,LEDA 3090990,SDSS J112136.41+114413.5,SDSS J112136.42+114413.5;;;B-Mag taken from LEDA. +IC2747;**;11:21:40.16;+08:48:11.7;Leo;;;;;;;;;;;;;;;;;;;;; +IC2748;G;11:21:44.04;+08:48:17.9;Leo;0.54;0.43;91;16.63;;13.14;12.59;12.25;24.15;E;;;;;;;;2MASX J11214406+0848182,LEDA 3091442,SDSS J112144.03+084817.9,SDSS J112144.04+084817.9;;;B-Mag taken from LEDA. +IC2749;G;11:21:45.20;+08:34:29.2;Leo;0.60;0.34;84;15.60;;15.15;14.23;14.07;23.25;SABc;;;;;;;;2MASX J11214515+0834282,PGC 034829,SDSS J112145.20+083429.1,SDSS J112145.20+083429.2;;; +IC2750;G;11:21:50.79;+09:39:30.4;Leo;0.43;0.20;43;17.37;;;;;23.74;Sbc;;;;;;;;2MASX J11215073+0939312,PGC 1368199,SDSS J112150.78+093930.3,SDSS J112150.79+093930.4;;;B-Mag taken from LEDA. +IC2751;G;11:22:07.39;+34:21:58.9;UMa;0.63;0.54;133;15.70;;12.46;11.75;11.55;23.44;E;;;;;;;;2MASX J11220737+3421587,LEDA 2048050,SDSS J112207.39+342158.8,SDSS J112207.39+342158.9;;; +IC2752;G;11:22:01.94;+14:07:28.2;Leo;0.63;0.19;100;16.73;;;;;24.58;E;;;;;;;;2MASX J11220194+1407279,PGC 1449874,SDSS J112201.94+140728.1,SDSS J112201.94+140728.2;;;B-Mag taken from LEDA. +IC2753;G;11:21:59.71;+09:52:41.0;Leo;0.32;0.31;80;16.66;;;;;23.09;E;;;;;;;;2MASX J11215967+0952412,SDSS J112159.70+095240.9,SDSS J112159.71+095241.0;;;B-Mag taken from LEDA. +IC2754;G;11:22:02.38;+14:08:38.6;Leo;0.52;0.24;82;16.97;;;;;23.73;Sc;;;;;;;;2MASX J11220235+1408389,PGC 1450402,SDSS J112202.37+140838.5,SDSS J112202.37+140838.6,SDSS J112202.38+140838.6;;;B-Mag taken from LEDA. +IC2755;*;11:22:02.41;+13:47:35.2;Leo;;;;;;;;;;;;;;;;;;SDSS J112202.40+134735.2;;; +IC2756;G;11:22:00.91;+09:57:36.6;Leo;0.51;0.19;101;17.10;;;;;23.62;Sbc;;;;;;;;PGC 1372583,SDSS J112200.90+095736.5,SDSS J112200.91+095736.6;;;B-Mag taken from LEDA. +IC2757;G;11:22:02.10;+08:23:37.8;Leo;0.72;0.52;79;15.10;;12.86;12.01;11.84;23.34;SBa;;;;;;;;2MASX J11220207+0823372,PGC 034858,SDSS J112202.09+082337.8,SDSS J112202.10+082337.8;;; +IC2758;G;11:22:03.33;+07:48:48.7;Leo;0.65;0.23;34;15.30;;12.21;11.51;11.13;22.88;Sa;;;;;;;;2MASX J11220334+0748482,PGC 034857,SDSS J112203.32+074848.6,SDSS J112203.32+074848.7;;; +IC2759;G;11:22:13.28;+24:19:01.8;Leo;0.73;0.65;178;15.41;;12.15;11.42;11.09;23.28;E;;;;;;;;2MASX J11221325+2419017,MCG +04-27-027,PGC 034881,SDSS J112213.28+241901.7;;; +IC2760;G;11:22:12.80;+12:39:55.5;Leo;0.45;0.33;108;17.39;;;;;24.45;E;;;;;;;;2MASX J11221278+1239553,PGC 1413842,SDSS J112212.79+123955.5,SDSS J112212.80+123955.4,SDSS J112212.80+123955.5;;;B-Mag taken from LEDA. +IC2761;G;11:22:17.17;+14:10:39.3;Leo;0.40;0.34;175;16.79;;;;;23.57;Sab;;;;;;;;2MASX J11221719+1410393,PGC 1451251,SDSS J112217.16+141039.2,SDSS J112217.17+141039.3;;;B-Mag taken from LEDA. +IC2762;G;11:22:17.92;+12:43:21.1;Leo;0.92;0.31;145;15.50;;14.42;13.57;13.71;23.62;Sd;;;;;;;;2MASX J11221784+1243223,PGC 034888,SDSS J112217.91+124321.1,SDSS J112217.92+124321.1;;; +IC2763;G;11:22:18.56;+13:03:54.2;Leo;1.44;0.39;98;14.90;;13.24;12.82;12.53;23.53;Sc;;;;;;;;2MASX J11221838+1303543,MCG +02-29-021,PGC 034887,SDSS J112218.55+130354.1,SDSS J112218.56+130354.2,UGC 06387;;; +IC2764;G;11:27:05.03;-28:58:48.8;Hya;2.20;1.18;179;13.15;;10.11;9.48;9.25;23.49;S0-a;;;;;;;;2MASX J11270503-2858488,ESO 439-008,ESO-LV 439-0080,MCG -05-27-012,PGC 035222;;; +IC2765;G;11:22:23.12;+14:11:56.6;Leo;0.31;0.21;90;17.17;;;;;23.63;E;;;;;;;;2MASX J11222310+1411563,PGC 1451814,SDSS J112223.12+141156.5,SDSS J112223.12+141156.6;;;B-Mag taken from LEDA. +IC2766;G;11:22:23.06;+12:54:12.5;Leo;0.53;0.35;149;17.12;;;;;24.19;Sc;;;;;;;;2MASX J11222303+1254123,PGC 1418531,SDSS J112223.05+125412.4,SDSS J112223.06+125412.4,SDSS J112223.06+125412.5;;;B-Mag taken from LEDA. +IC2767;G;11:22:23.19;+13:04:40.1;Leo;0.87;0.30;90;14.89;;;;;24.52;S?;;;;;;;;MCG +02-29-021 NOTES01,SDSS J112223.18+130440.1,SDSS J112223.19+130440.1,UGC 06387 NOTES01;;;B-Mag taken from LEDA. +IC2768;G;11:22:23.56;+12:31:44.1;Leo;0.40;0.30;46;17.32;;;;;23.91;SBb;;;;;;;;2MASX J11222358+1231433,PGC 1411172,SDSS J112223.55+123144.0,SDSS J112223.56+123144.1;;;B-Mag taken from LEDA. +IC2769;G;11:22:25.65;+14:11:45.2;Leo;0.43;0.32;166;15.60;;13.82;12.94;13.05;22.79;Sb;;;;;;;;2MASX J11222564+1411453,PGC 034894,SDSS J112225.64+141145.2;;; +IC2770;G;11:22:24.76;+09:13:14.4;Leo;0.39;0.38;169;16.64;;13.99;13.43;12.94;23.30;Sb;;;;;;;;2MASX J11222474+0913144,PGC 3091444,SDSS J112224.75+091314.4,SDSS J112224.76+091314.4;;;B-Mag taken from LEDA. +IC2771;G;11:22:28.05;+12:31:09.0;Leo;0.28;0.20;22;18.11;;;;;24.12;;;;;;;;;SDSS J112228.04+123109.0,SDSS J112228.05+123109.0;;;B-Mag taken from LEDA. +IC2772;*;11:22:30.40;+13:35:56.9;Leo;;;;;;;;;;;;;;;;;;SDSS J112230.39+133556.8;;; +IC2773;*;11:22:35.31;+13:34:28.3;Leo;;;;;;;;;;;;;;;;;;SDSS J112235.31+133428.3;;The IC identification is uncertain.; +IC2774;*;11:22:37.15;+12:30:53.8;Leo;;;;;;;;;;;;;;;;;;SDSS J112237.15+123053.8;;; +IC2775;G;11:22:39.56;+12:30:43.2;Leo;0.32;0.25;60;17.73;;;;;24.14;E;;;;;;;;2MASX J11223958+1230435,PGC 1410888,SDSS J112239.55+123043.1,SDSS J112239.55+123043.2,SDSS J112239.56+123043.2;;;B-Mag taken from LEDA. +IC2776;G;11:22:39.99;+13:19:49.9;Leo;0.87;0.44;160;15.15;;;;;23.37;Sc;;;;;;;;2MASX J11223998+1319495,MCG +02-29-022 NED01,PGC 034924,SDSS J112239.99+131949.9;;;B-Mag taken from LEDA. +IC2777;G;11:22:40.55;+12:01:32.1;Leo;0.79;0.59;154;15.40;;12.87;12.23;12.04;23.34;Sb;;;;;;;;2MASX J11224057+1201317,PGC 034923,SDSS J112240.54+120132.0,SDSS J112240.54+120132.1;;; +IC2778;Other;11:22:41.93;+12:31:34.7;Leo;;;;;;;;;;;;;;;;;;SDSS J112241.92+123134.7;;;NED lists this object as type G, but there's nothing at these coords in LEDA. +IC2779;G;11:22:44.51;+13:20:43.1;Leo;0.30;0.26;179;14.90;;;;;23.48;Sd;;;;;;;;MCG +02-29-022 NED02,PGC 1428682,SDSS J112244.49+132043.3,SDSS J112244.50+132043.4;;; +IC2780;G;11:22:48.13;+10:08:58.4;Leo;0.65;0.41;5;16.53;;;;;24.45;E;;;;;;;;2MASX J11224813+1008577,SDSS J112248.13+100858.3;;;B-Mag taken from LEDA. +IC2781;G;11:22:50.67;+12:20:41.6;Leo;0.36;0.34;146;17.19;;;;;23.67;I;;;;;;;;PGC 1407849,SDSS J112250.66+122041.6,SDSS J112250.67+122041.5,SDSS J112250.67+122041.6;;;B-Mag taken from LEDA. +IC2782;G;11:22:55.36;+13:26:28.6;Leo;0.94;0.84;19;15.20;;13.93;13.21;13.08;23.71;Sd;;;;;;;;2MASX J11225519+1326266,MCG +02-29-023,PGC 034934,SDSS J112255.35+132628.6,SDSS J112255.36+132628.6,UGC 06395;;; +IC2783;G;11:22:53.63;+08:53:02.6;Leo;0.70;0.27;162;16.36;;13.02;12.43;11.98;23.84;Sa;;;;;;;;2MASX J11225363+0853027,LEDA 3091445,SDSS J112253.62+085302.6,SDSS J112253.63+085302.6;;;B-Mag taken from LEDA. +IC2784;G;11:23:11.63;+13:07:03.8;Leo;0.65;0.38;17;16.37;;13.25;12.67;12.26;23.83;SBab;;;;;;;;2MASX J11231160+1307041,LEDA 3090855,SDSS J112311.62+130703.7,SDSS J112311.63+130703.7,SDSS J112311.63+130703.8;;;B-Mag taken from LEDA. +IC2785;G;11:23:15.36;+13:23:28.5;Leo;0.87;0.72;2;15.20;;12.36;11.69;11.41;24.14;E;;;;;;;;2MASX J11231537+1323281,MCG +02-29-024 NED01,PGC 034968,SDSS J112315.36+132328.5;;; +IC2786;G;11:23:17.50;+13:23:31.2;Leo;0.95;0.34;115;16.55;;12.96;12.08;11.77;24.60;Sab;;;;;;;;MCG +02-29-024 NED02,PGC 1429884,SDSSJ112317.48+132331.3,SDSSJ112317.49+132331.3;;;B-Mag taken from LEDA. +IC2787;G;11:23:19.08;+13:37:47.2;Leo;0.80;0.74;34;15.50;;;;;23.84;Sc;;;;;;;;PGC 034969,SDSS J112319.07+133747.1,SDSS J112319.07+133747.2,UGC 06401;;; +IC2788;G;11:23:26.97;+12:41:52.9;Leo;0.42;0.25;156;18.15;;;;;24.98;;;;;;;;;PGC 1414481,SDSS J112326.96+124152.8,SDSS J112326.97+124152.9;;;B-Mag taken from LEDA. +IC2789;G;11:23:32.66;+14:11:16.9;Leo;0.05;0.03;132;18.04;;;;;;;;;;;;;;SDSS J112332.65+141116.8,SDSS J112332.66+141116.9;;"Star superposed 5"" south of galaxy.";B-Mag taken from LEDA +IC2790;G;11:23:34.06;+09:33:19.3;Leo;0.46;0.32;15;16.91;;;;;23.65;Sc;;;;;;;;PGC 1366741,SDSS J112334.06+093319.2,SDSS J112334.06+093319.3;;;B-Mag taken from LEDA. +IC2791;G;11:23:37.62;+12:53:44.8;Leo;0.57;0.36;156;17.08;;;;;24.24;I;;;;;;;;SDSS J112337.61+125344.8,SDSS J112337.62+125344.8;;;B-Mag taken from LEDA. +IC2792;G;11:23:41.51;+11:24:17.4;Leo;0.49;0.29;82;17.06;;;;;24.34;E;;;;;;;;SDSS J112341.50+112417.3,SDSS J112341.51+112417.3,SDSS J112341.52+112417.4;;;B-Mag taken from LEDA. +IC2793;GPair;11:23:47.39;+09:26:59.2;Leo;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC2793 NED01;G;11:23:47.28;+09:27:04.8;Leo;0.35;0.27;94;17.65;;;;;24.25;E;;;;;;;;2MASX J11234725+0927050,SDSS J112347.27+092704.8,SDSS J112347.28+092704.8;;;B-Mag taken from LEDA +IC2793 NED02;G;11:23:47.54;+09:26:54.4;Leo;0.36;0.20;83;17.69;;;;;24.21;;;;;;;;;SDSS J112347.53+092654.3;;;B-Mag taken from LEDA +IC2794;*;11:24:03.65;+12:47:27.5;Leo;;;;;;;;;;;;;;;;;;SDSS J112403.65+124727.5;;The IC identification is uncertain.; +IC2795;G;11:24:04.07;+12:08:06.4;Leo;0.36;0.33;37;17.36;;14.84;14.17;13.46;23.79;Sc;;;;;;;;2MASX J11240401+1208052,PGC 1404358,SDSS J112404.06+120806.3,SDSS J112404.06+120806.4;;;B-Mag taken from LEDA. +IC2796;GPair;11:24:08.35;+09:20:38.9;Leo;0.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC2796 NED01;G;11:24:08.39;+09:20:44.6;Leo;0.51;0.26;5;17.44;;;;;24.23;Sb;;;;;;;;2MASX J11240837+0920442,SDSS J112408.38+092044.5;;;B-Mag taken from LEDA +IC2796 NED02;G;11:24:08.42;+09:20:34.5;Leo;0.37;0.17;17;18.19;;;;;24.79;;;;;;;;;PGC 1363734,SDSS J112408.41+092034.4,SDSS J112408.42+092034.5;;;B-Mag taken from LEDA. +IC2797;G;11:24:21.06;+11:42:21.4;Leo;0.76;0.47;136;16.41;;13.10;12.45;12.20;24.65;E;;;;;;;;2MASX J11242105+1142212,LEDA 3091132,SDSS J112421.05+114221.3,SDSS J112421.06+114221.3,SDSS J112421.06+114221.4;;;B-Mag taken from LEDA. +IC2798;G;11:24:23.99;+12:24:56.2;Leo;0.77;0.26;173;16.94;;13.91;12.86;12.55;24.16;Sc;;;;;;;;2MASX J11242396+1224574,LEDA 091114,SDSS J112423.99+122456.1,SDSS J112423.99+122456.2;;;B-Mag taken from LEDA. +IC2799;G;11:24:26.67;+13:50:56.8;Leo;0.45;0.32;137;17.18;;14.83;13.88;13.66;23.88;SBbc;;;;;;;;2MASX J11242669+1350564,LEDA 1442248,SDSS J112426.66+135056.7,SDSS J112426.66+135056.8,SDSS J112426.67+135056.8;;;B-Mag taken from LEDA. +IC2800;G;11:24:27.08;+12:12:31.7;Leo;0.63;0.19;92;17.35;;;;;24.08;Sc;;;;;;;;2MASX J11242708+1212314,SDSS J112427.08+121231.7;;;B-Mag taken from LEDA. +IC2801;G;11:24:29.03;+10:11:01.8;Leo;0.50;0.32;84;16.34;;;;;23.43;Sb;;;;;;;;2MASX J11242901+1011012,PGC 1375823,SDSS J112429.02+101101.8,SDSS J112429.03+101101.8;;;B-Mag taken from LEDA. +IC2802;G;11:24:30.36;+12:12:31.5;Leo;0.28;0.23;61;17.80;;;;;;;;;;;;;;PGC 1405555,SDSS J112430.35+121231.4,SDSS J112430.36+121231.5;;;B-Mag taken from LEDA. +IC2803;G;11:24:35.41;+09:51:00.1;Leo;0.43;0.21;65;17.30;;;;;23.75;Sb;;;;;;;;2MASX J11243543+0950595,PGC 1370912,SDSS J112435.40+095100.0,SDSS J112435.41+095100.0,SDSS J112435.41+095100.1;;;B-Mag taken from LEDA. +IC2804;G;11:24:55.73;+13:13:19.4;Leo;0.87;0.23;18;15.11;;12.52;11.73;11.42;22.64;Sb;;;;;;;;2MASX J11245604+1313315,MCG +02-29-026,PGC 035083,SDSS J112455.72+131319.4,SDSS J112455.73+131319.4;;;B-Mag taken from LEDA. +IC2805;*;11:24:59.89;+14:00:52.1;Leo;;;;;;;;;;;;;;;;;;;;Faint star or galaxy just west.; +IC2806;*;11:25:15.30;+09:39:08.0;Leo;;;;;;;;;;;;;;;;;;SDSS J112515.29+093907.9;;; +IC2807;G;11:25:17.05;+11:31:48.2;Leo;0.32;0.18;30;17.47;;;;;23.31;Sbc;;;;;;;;PGC 1394989,SDSS J112517.04+113148.2,SDSS J112517.05+113148.2;;;B-Mag taken from LEDA. +IC2808;*;11:25:26.88;+09:07:55.4;Leo;;;;;;;;;;;;;;;;;;SDSS J112526.87+090755.4;;; +IC2809;*;11:25:37.77;+08:31:34.6;Leo;;;;;;;;;;;;;;;;;;SDSS J112537.76+083134.5;;; +IC2810;G;11:25:45.05;+14:40:35.7;Leo;1.03;0.41;33;15.40;;12.12;11.37;11.07;23.58;SBab;;;;;;;;2MASX J11254505+1440359,IRAS 11231+1456,MCG +03-29-043,PGC 035142,SDSS J112545.04+144035.6,SDSS J112545.04+144035.7,SDSS J112545.05+144035.7,UGC 06436;;Called 'IC 2810a' in MCG.; +IC2811;G;11:25:44.65;+09:10:13.9;Leo;0.73;0.35;89;16.70;;;;;24.20;Sb;;;;;;;;2MASX J11254464+0910132,SDSS J112544.64+091013.8,SDSS J112544.64+091013.9;;;B-Mag taken from LEDA. +IC2812;G;11:25:55.82;+11:31:47.7;Leo;0.52;0.23;24;16.94;;;;;23.62;Sc;;;;;;;;PGC 1394991,SDSS J112555.82+113147.7,SDSS J112555.83+113147.7;;;B-Mag taken from LEDA. +IC2813;G;11:26:06.50;+11:15:20.7;Leo;0.48;0.40;71;16.75;;14.27;13.68;13.53;23.75;Sb;;;;;;;;2MASX J11260649+1115207,LEDA 3091133,SDSS J112606.49+111520.6,SDSS J112606.50+111520.6,SDSS J112606.50+111520.7;;;B-Mag taken from LEDA. +IC2814;G;11:26:08.51;+09:39:42.5;Leo;0.40;0.29;58;16.70;;;;;23.58;E;;;;;;;;2MASX J11260847+0939417,SDSS J112608.50+093942.4,SDSS J112608.51+093942.5;;;B-Mag taken from LEDA. +IC2815;G;11:26:16.55;+12:48:13.8;Leo;0.50;0.35;116;17.09;;;;;24.13;Sab;;;;;;;;2MASX J11261657+1248136,PGC 1416518,SDSS J112616.54+124813.8;;;B-Mag taken from LEDA. +IC2816;G;11:26:18.28;+10:38:11.4;Leo;0.74;0.27;180;16.58;;;;;23.92;Sbc;;;;;;;;2MASX J11261831+1038117,SDSS J112618.27+103811.4,SDSS J112618.28+103811.4;;;B-Mag taken from LEDA. +IC2817;*;11:26:18.81;+09:08:56.4;Leo;;;;;;;;;;;;;;;;;;;;; +IC2818;G;11:26:26.87;+12:55:15.4;Leo;0.46;0.34;94;17.31;;14.10;13.34;13.01;24.43;E;;;;;;;;2MASX J11262683+1255156,LEDA 1418899,SDSS J112626.88+125516.0,SDSS J112626.89+125516.0;;;B-Mag taken from LEDA. +IC2819;G;11:26:27.44;+13:50:41.6;Leo;0.59;0.28;59;15.70;;14.07;13.31;13.17;23.25;Sc;;;;;;;;2MASX J11262743+1350416,PGC 035194;;; +IC2820;G;11:26:26.85;+10:14:18.5;Leo;0.54;0.25;24;16.55;;13.39;12.75;12.59;23.28;Sc;;;;;;;;2MASX J11262683+1014187,LEDA 3091278,SDSS J112626.85+101418.5;;;B-Mag taken from LEDA. +IC2821;G;11:26:34.88;+13:57:46.5;Leo;0.25;0.18;32;16.82;;;;;;E;;;;;;;;2MASX J11263491+1357461,SDSS J112634.87+135746.4,SDSS J112634.87+135746.5,SDSS J112634.88+135746.5;;;B-Mag taken from LEDA. +IC2822;G;11:26:34.05;+11:26:24.3;Leo;1.35;0.60;118;15.20;;13.18;12.72;12.42;23.97;SBbc;;;;;;;;2MASX J11263405+1126250,PGC 035196,SDSS J112634.03+112624.2,SDSS J112634.04+112624.2,SDSS J112634.05+112624.3,UGC 06449;;; +IC2823;G;11:26:44.67;+12:50:54.3;Leo;0.89;0.31;12;15.50;;13.24;12.41;12.11;23.55;Sb;;;;;;;;2MASX J11264467+1250541,PGC 035205,SDSS J112644.66+125054.3,SDSS J112644.67+125054.3;;Two MAPS entries for the same object.; +IC2824;*;11:27:04.87;+14:05:07.0;Leo;;;;;;;;;;;;;;;;;;SDSS J112704.86+140507.0;;; +IC2825;*;11:27:03.56;+08:26:38.1;Leo;;;;;;;;;;;;;;;;;;SDSS J112703.55+082638.1;;; +IC2826;G;11:27:06.08;+13:14:19.4;Leo;0.73;0.70;56;15.10;;13.71;12.99;12.76;23.46;Sbc;;;;;;;;2MASX J11270610+1314191,PGC 035223,SDSS J112706.08+131419.3,SDSS J112706.09+131419.4;;; +IC2827;*;11:27:09.67;+11:30:51.8;Leo;;;;;;;;;;;;;;;;;;SDSS J112709.66+113051.7;;; +IC2828;G;11:27:10.94;+08:43:51.8;Leo;1.01;0.44;52;14.70;;13.35;12.69;12.66;23.10;I;;;;;;;;2MASX J11271096+0843517,MCG +02-29-028,PGC 035225,SDSS J112710.93+084351.7,SDSS J112710.94+084351.7,SDSS J112710.94+084351.8;;; +IC2829;G;11:27:14.98;+10:19:20.5;Leo;0.88;0.52;175;15.40;;12.40;11.62;11.28;23.93;Sa;;;;;;;;2MASX J11271496+1019207,PGC 035226,SDSS J112714.97+101920.4,SDSS J112714.98+101920.5;;; +IC2830;G;11:27:21.58;+07:48:51.5;Leo;0.50;0.44;58;15.20;;13.64;12.95;13.01;22.87;Sbc;;;;;;;;2MASX J11272159+0748516,PGC 035240,SDSS J112721.58+074851.4,SDSS J112721.58+074851.5;;; +IC2831;*;11:27:22.61;+08:58:44.1;Leo;;;;;;;;;;;;;;;;;;SDSS J112722.60+085844.0;;; +IC2832;*;11:27:25.12;+13:59:22.0;Leo;;;;;;;;;;;;;;;;;;;;; +IC2833;*;11:27:26.11;+13:36:10.1;Leo;;;;;;;;;;;;;;;;;;SDSS J112726.10+133610.0;;; +IC2834;G;11:27:31.82;+13:34:13.2;Leo;0.45;0.37;17;17.47;;;;;24.42;E;;;;;;;;2MASX J11273179+1334135,PGC 1434524,SDSS J112731.81+133413.2,SDSS J112731.82+133413.2;;;B-Mag taken from LEDA. +IC2835;G;11:27:31.59;+12:08:34.4;Leo;0.59;0.30;149;16.87;;13.55;12.77;12.33;24.54;E;;;;;;;;2MASX J11273159+1208339,LEDA 3090991,SDSS J112731.58+120834.3,SDSS J112731.59+120834.4;;;B-Mag taken from LEDA. +IC2836;*;11:27:37.21;+09:05:05.3;Leo;;;;;;;;;;;;;;;;;;SDSS J112737.21+090505.3;;; +IC2837;G;11:27:41.96;+10:18:47.0;Leo;0.43;0.37;39;16.48;;;;;23.52;E;;;;;;;;2MASX J11274195+1018476,SDSS J112741.96+101846.9,SDSS J112741.96+101847.0;;;B-Mag taken from LEDA. +IC2838;G;11:27:45.24;+14:00:40.5;Leo;0.22;0.19;173;16.82;;14.13;13.34;13.08;;Sbc;;;;;;;;2MASX J11274523+1400406,LEDA 3090746,SDSS J112745.23+140040.4,SDSS J112745.24+140040.5;;;B-Mag taken from LEDA. +IC2839;G;11:27:45.42;+10:49:11.1;Leo;0.54;0.24;0;17.15;;;;;24.64;E;;;;;;;;2MASX J11274542+1049106,SDSS J112745.42+104911.0,SDSS J112745.42+104911.1;;;B-Mag taken from LEDA. +IC2840;G;11:27:47.60;+13:25:33.2;Leo;0.43;0.29;154;17.28;;;;;23.83;Sc;;;;;;;;PGC 1430728,SDSS J112747.59+132533.1,SDSS J112747.60+132533.2;;;B-Mag taken from LEDA. +IC2841;*;11:27:48.86;+12:36:11.2;Leo;;;;;;;;;;;;;;;;;;SDSS J112748.86+123611.2;;; +IC2842;G;11:27:47.69;+09:39:07.1;Leo;0.45;0.24;63;17.12;;;;;23.66;Sbc;;;;;;;;2MASX J11274771+0939076,PGC 1368101,SDSS J112747.69+093907.1;;;B-Mag taken from LEDA. +IC2843;G;11:27:58.09;+13:11:02.1;Leo;0.73;0.68;15;15.40;;13.97;13.25;13.32;23.88;Sc;;;;;;;;2MASX J11275811+1311025,PGC 035284,SDSS J112758.08+131102.0,SDSS J112758.09+131102.1;;; +IC2844;G;11:27:58.10;+11:27:11.8;Leo;0.70;0.35;127;16.38;;;;;23.81;Sbc;;;;;;;;2MASX J11275806+1127119,PGC 1393867,SDSS J112758.09+112711.7,SDSS J112758.10+112711.7,SDSS J112758.10+112711.8;;;B-Mag taken from LEDA. +IC2845;G;11:28:00.46;+12:31:47.1;Leo;0.71;0.50;81;16.75;;13.14;12.31;12.15;24.58;S0-a;;;;;;;;2MASX J11280047+1231475,LEDA 1411193,SDSS J112800.45+123147.0,SDSS J112800.46+123147.0,SDSS J112800.46+123147.1;;;B-Mag taken from LEDA. +IC2846;G;11:28:00.49;+11:09:29.8;Leo;0.89;0.74;119;14.80;;12.14;11.20;10.75;23.40;SBa;;;;;;;;2MASX J11280051+1109299,IRAS 11254+1126,MCG +02-29-029,PGC 035283,SDSS J112800.49+110929.8;;; +IC2847;G;11:28:03.39;+13:55:49.4;Leo;0.17;0.12;15;17.20;;;;;;E;;;;;;;;2MASX J11280338+1355486,SDSS J112803.38+135549.3,SDSS J112803.38+135549.4;;;B-Mag taken from LEDA. +IC2848;G;11:28:13.67;+13:01:49.7;Leo;0.47;0.39;9;17.12;;;;;24.30;Sc;;;;;;;;SDSS J112813.67+130149.7;;;B-Mag taken from LEDA. +IC2849;*;11:28:11.66;+09:05:38.4;Leo;;;;;;;;;;;;;;;;;;SDSS J112811.65+090538.3;;; +IC2850;G;11:28:12.96;+09:03:44.1;Leo;0.80;0.28;126;14.80;;13.32;12.60;12.43;22.49;Sc;;;;;;;;2MASX J11281296+0903439,IRAS 11256+0920,MCG +02-29-030,PGC 035301,SDSS J112812.96+090344.1;;; +IC2851;G;11:28:14.61;+11:23:39.8;Leo;0.44;0.23;46;17.27;;;;;23.72;Sc;;;;;;;;PGC 1392951,SDSS J112814.61+112339.7,SDSS J112814.61+112339.8;;;B-Mag taken from LEDA. +IC2852;G;11:28:14.05;+09:48:01.7;Leo;0.49;0.31;119;16.73;;;;;23.55;SABc;;;;;;;;PGC 1370252,SDSS J112814.05+094801.7;;;B-Mag taken from LEDA. +IC2853;G;11:28:14.86;+09:08:49.3;Leo;0.91;0.44;172;14.60;;11.78;11.05;10.77;22.57;Sab;;;;;;;;2MASX J11281485+0908499,IRAS 11256+0925,MCG +02-29-031,PGC 035302,SDSS J112814.86+090849.3,SDSS J112814.86+090849.4,UGC 06470;;UGC misprints name as 'MCG +01-29-031'.; +IC2854;*;11:28:19.87;+08:58:07.4;Leo;;;;;;;;;;;;;;;;;;SDSS J112819.87+085807.4;;; +IC2855;G;11:28:24.99;+09:41:15.9;Leo;0.34;0.19;121;18.49;;;;;24.86;;;;;;;;;SDSSJ112824.93+094114.3;;;B-Mag taken from LEDA. +IC2856;G;11:28:16.31;-12:53:26.5;Crt;0.99;0.43;45;14.60;;11.92;11.26;10.92;22.81;Sab;;;;;;;;2MASX J11281630-1253265,IRAS 11257-1236,MCG -02-29-033,PGC 035304;;;B-Mag taken from LEDA. +IC2857;G;11:28:31.04;+09:06:15.9;Leo;1.79;0.32;160;15.30;;12.27;11.44;11.05;23.97;Sc;;;;;;;;2MASX J11283107+0906162,IRAS 11259+0922,MCG +02-29-033,PGC 035320,SDSS J112831.04+090615.8,SDSS J112831.04+090615.9,SDSS J112831.05+090615.9,UGC 06475;;; +IC2858;G;11:28:35.96;+13:39:41.4;Leo;0.21;0.17;111;16.95;;;;;;E;;;;;;;;2MASX J11283591+1339408,SDSS J112835.95+133941.3,SDSS J112835.95+133941.4;;;B-Mag taken from LEDA. +IC2859;*;11:28:41.76;+09:06:30.6;Leo;;;;;;;;;;;;;;;;;;SDSS J112841.75+090630.5;;; +IC2860;G;11:28:44.60;+14:02:30.8;Leo;0.29;0.20;157;16.64;;;;;;E;;;;;;;;2MASX J11284461+1402298,SDSS J112844.59+140230.6,SDSS J112844.59+140230.7,SDSS J112844.60+140230.8;;;B-Mag taken from LEDA. +IC2861;G;11:28:58.97;+38:51:04.6;UMa;0.83;0.74;113;15.50;;12.19;11.40;11.19;23.57;S0-a;;;;;;;;2MASX J11285898+3851042,MCG +07-24-011,PGC 035357,SDSS J112858.96+385104.5,SDSS J112858.97+385104.6;;; +IC2862;G;11:28:43.32;+10:07:38.2;Leo;0.54;0.30;31;16.91;;13.45;12.78;12.22;24.41;E;;;;;;;;2MASX J11284331+1007382,LEDA 3091279,SDSS J112843.31+100738.2,SDSS J112843.32+100738.2;;;B-Mag taken from LEDA. +IC2863;*;11:28:53.98;+09:05:43.1;Leo;;;;;;;;;;;;;;;;;;SDSS J112853.98+090543.1;;; +IC2864;G;11:28:59.67;+12:22:03.8;Leo;0.61;0.39;157;16.80;;13.36;12.66;12.19;24.25;Sa;;;;;;;;2MASX J11285965+1222038,LEDA 3090992,SDSS J112859.66+122203.7,SDSS J112859.67+122203.7,SDSS J112859.67+122203.8;;;B-Mag taken from LEDA. +IC2865;*;11:28:59.75;+09:06:55.8;Leo;;;;;;;;;;;;;;;;;;;;; +IC2866;*;11:29:00.03;+09:02:31.9;Leo;;;;;;;;;;;;;;;;;;SDSS J112900.03+090231.9;;; +IC2867;G;11:29:00.54;+09:05:21.8;Leo;0.45;0.36;88;15.60;;;;;23.08;Sc;;;;;;;;PGC 035358,SDSS J112900.53+090521.7,SDSS J112900.54+090521.7,SDSS J112900.54+090521.8;;; +IC2868;*;11:29:05.80;+09:05:39.5;Leo;;;;;;;;;;;;;;;;;;SDSS J112905.80+090539.4;;; +IC2869;*;11:29:08.72;+09:01:02.6;Leo;;;;;;;;;;;;;;;;;;SDSS J112908.71+090102.6;;; +IC2870;G;11:29:12.42;+11:51:55.8;Leo;1.05;0.95;0;18.00;;;;;26.74;I;;;;;;;;PGC 035377,SDSS J112912.42+115155.8,UGC 06486;;Multiple SDSS entries describe this source.;B-Mag taken from LEDA. +IC2871;G;11:29:20.69;+08:36:08.5;Leo;0.91;0.66;81;15.20;;12.99;12.51;12.04;23.57;SABc;;;;;;;;2MASX J11292068+0836089,MCG +02-29-037,PGC 035388,SDSS J112920.68+083608.4,SDSS J112920.69+083608.3,SDSS J112920.69+083608.4,SDSS J112920.69+083608.5;;; +IC2872;Neb;11:28:08.03;-62:59:20.2;Cen;15.14;6.03;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC2873;GPair;11:29:27.43;+13:13:05.9;Leo;0.70;;;;;;;;;;;;;;;;;MCG +02-29-038;;;Diameter of the group inferred by the author. +IC2873 NED01;G;11:29:27.47;+13:12:56.5;Leo;0.42;0.37;98;17.39;;;;;24.11;Sbc;;;;;;;;SDSS J112927.46+131256.5,SDSS J112927.47+131256.5;;;B-Mag taken from LEDA +IC2873 NED02;G;11:29:27.64;+13:13:12.4;Leo;0.82;0.58;2;15.08;;;;;23.21;I;;;;;;;;2MASX J11292762+1313121,MCG +02-29-038 NED02,PGC 035406,SDSS J112927.63+131312.4,SDSS J112927.64+131312.4;;;B-Mag taken from LEDA. +IC2874;G;11:29:27.55;+10:37:45.0;Leo;0.45;0.27;50;16.85;;;;;23.41;Sm;;;;;;;;PGC 1382231,SDSS J112927.55+103745.0;;;B-Mag taken from LEDA. +IC2875;*;11:29:34.93;+12:59:23.6;Leo;;;;;;;;;;;;;;;;;;SDSS J112934.92+125923.6;;; +IC2876;G;11:29:33.60;+09:00:58.2;Leo;0.62;0.32;176;16.74;;;;;23.90;Sbc;;;;;;;;2MASX J11293360+0900580,PGC 1358040,SDSS J112933.59+090058.2,SDSS J112933.60+090058.2;;;B-Mag taken from LEDA. +IC2877;G;11:29:37.74;+12:51:11.8;Leo;0.58;0.45;110;15.70;;14.26;13.85;13.51;23.62;Sbc;;;;;;;;2MASX J11293772+1251110,PGC 035408,SDSS J112937.73+125111.7,SDSS J112937.74+125111.8;;; +IC2878;G;11:29:38.21;+09:58:03.3;Leo;0.53;0.25;119;16.54;;;;;24.01;E;;;;;;;;2MASX J11293819+0958030,SDSS J112938.21+095803.3;;;B-Mag taken from LEDA. +IC2879;G;11:29:44.29;+09:00:49.9;Leo;0.44;0.33;170;16.84;;;;;23.62;Sb;;;;;;;;2MASX J11294427+0900500,PGC 1357989,SDSS J112944.29+090049.8;;;B-Mag taken from LEDA. +IC2880;*;11:29:53.02;+13:11:55.8;Leo;;;;;;;;;;;;;;;;;;;;; +IC2881;G;11:29:54.41;+12:30:40.4;Leo;0.32;0.21;90;18.52;;;;;24.75;;;;;;;;;PGC 1410870,SDSS J112954.40+123040.4,SDSS J112954.41+123040.4;;;B-Mag taken from LEDA. +IC2882;*;11:30:09.44;+11:59:20.9;Leo;;;;;;;;;;;;;;;;;;SDSS J113009.43+115920.9;;; +IC2883;G;11:30:15.79;+10:54:39.3;Leo;0.33;0.28;94;17.23;;14.36;13.58;13.55;23.45;Sc;;;;;;;;2MASX J11301578+1054394,LEDA 3091134,SDSS J113015.78+105439.3,SDSS J113015.79+105439.4;;;B-Mag taken from LEDA. +IC2884;*Ass;11:27:41.05;-79:44:03.8;Cha;;;;;;;;;;;;;;;;;;;;Six or seven Galactic stars in a line.; +IC2885;*;11:30:22.61;+09:46:19.4;Leo;;;;;;;;;;;;;;;;;;SDSS J113022.60+094619.4;;; +IC2886;G;11:30:24.44;+11:33:45.6;Leo;0.32;0.25;15;17.06;;;;;23.43;E;;;;;;;;2MASX J11302441+1133458,SDSS J113024.43+113345.5,SDSS J113024.44+113345.6;;;B-Mag taken from LEDA. +IC2887;Dup;11:30:29.72;+09:23:16.6;Leo;;;;;;;;;;;;;;;3705A;;;;;; +IC2888;Other;11:30:35.11;+09:54:30.6;Leo;;;;;;;;;;;;;;;;;;;;;NED lists this object as type G, but there's nothing at these coords in LEDA. +IC2889;G;11:30:28.99;-13:05:27.6;Crt;1.22;0.69;151;14.70;;12.10;11.34;10.99;23.20;SABc;;;;;;;;2MASX J11302898-1305276,MCG -02-29-038,PGC 035469;;;B-Mag taken from LEDA. +IC2890;*;11:30:46.15;+13:10:54.6;Leo;;;;;;;;;;;;;;;;;;SDSS J113046.14+131054.6;;; +IC2891;G;11:30:48.14;+12:40:39.8;Leo;0.46;0.35;118;16.65;;;;;23.52;SBbc;;;;;;;;2MASX J11304818+1240397,PGC 1414074,SDSS J113048.13+124039.7,SDSS J113048.14+124039.8;;;B-Mag taken from LEDA. +IC2892;G;11:30:48.91;+10:35:18.8;Leo;0.68;0.23;118;16.95;;;;;23.96;Sc;;;;;;;;2MASX J11304892+1035188,SDSS J113048.91+103518.8;;;B-Mag taken from LEDA. +IC2893;GPair;11:30:53.28;+13:23:27.7;Leo;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC2893 NED01;G;11:30:53.21;+13:23:31.1;Leo;0.06;0.05;73;17.75;;;;;;;;;;;;;;SDSS J113053.20+132331.0,SDSS J113053.20+132331.1;;;B-Mag taken from LEDA +IC2893 NED02;G;11:30:53.46;+13:23:23.7;Leo;0.45;0.28;180;15.60;;14.64;14.50;13.32;22.81;Sd;;;;;;;;2MASX J11305347+1323267,PGC 035488,SDSS J113053.45+132323.6,SDSS J113053.46+132323.7;;The 2MASX position applies to the northern end of the galaxy.; +IC2894;G;11:30:57.50;+13:14:07.3;Leo;0.62;0.32;70;15.70;;13.17;12.49;12.27;23.28;SBb;;;;;;;;2MASX J11305750+1314067,PGC 035493,SDSS J113057.49+131407.2,SDSS J113057.50+131407.2,SDSS J113057.50+131407.3;;; +IC2895;*;11:30:57.29;+09:58:36.7;Leo;;;;;;;;;;;;;;;;;;SDSS J113057.29+095836.6;;; +IC2896;G;11:31:13.43;+12:21:00.2;Leo;0.47;0.31;159;16.56;;13.97;13.34;13.03;23.33;Sc;;;;;;;;2MASX J11311343+1220599,LEDA 3090993,SDSS J113113.42+122100.1;;;B-Mag taken from LEDA. +IC2897;*;11:31:19.37;+11:32:56.6;Leo;;;;;;;;;;;;;;;;;;SDSS J113119.37+113256.5;;; +IC2898;G;11:31:20.41;+13:20:10.4;Leo;0.48;0.33;146;16.63;;;;;23.55;Sbc;;;;;;;;2MASX J11312044+1320099,PGC 1428474,SDSS J113120.41+132010.3,SDSS J113120.42+132010.4;;;B-Mag taken from LEDA. +IC2899;**;11:31:20.37;+10:38:05.0;Leo;;;;;;;;;;;;;;;;;;;;; +IC2900;G;11:31:29.69;+13:10:02.3;Leo;0.33;0.28;114;17.31;;14.45;13.66;13.52;23.47;SBbc;;;;;;;;2MASX J11312967+1310019,LEDA 1424467,SDSS J113129.68+131002.2,SDSS J113129.69+131002.3;;;B-Mag taken from LEDA. +IC2901;G;11:31:32.13;+12:41:59.0;Leo;0.61;0.37;114;16.97;;13.18;12.34;11.94;24.44;S0-a;;;;;;;;2MASX J11313214+1241589,LEDA 1414499,SDSS J113132.13+124158.9,SDSS J113132.13+124159.0;;;B-Mag taken from LEDA. +IC2902;*;11:31:33.16;+14:13:21.9;Leo;;;;;;;;;;;;;;;;;;SDSS J113133.16+141321.8;;; +IC2903;G;11:31:40.76;+12:38:33.3;Leo;0.44;0.27;34;16.81;;;;;23.39;Sb;;;;;;;;2MASX J11314076+1238340,PGC 1413381,SDSS J113140.75+123833.2,SDSS J113140.75+123833.3;;;B-Mag taken from LEDA. +IC2904;*;11:31:42.37;+13:11:02.9;Leo;;;;16.80;;15.68;15.62;;;;;;;;;;;2MASS J11314236+1311028,SDSS J113142.36+131102.9;;; +IC2905;*;11:31:46.98;+09:06:25.1;Leo;;;;;;;;;;;;;;;;;;SDSS J113146.98+090625.0;;; +IC2906;*;11:31:49.61;+13:07:58.4;Leo;;;;;;;;;;;;;;;;;;SDSS J113149.61+130758.4;;; +IC2907;*;11:31:48.75;+09:53:58.0;Leo;;;;;;;;;;;;;;;;;;;;; +IC2908;*;11:31:50.48;+12:56:16.4;Leo;;;;;;;;;;;;;;;;;;SDSS J113150.47+125616.3;;; +IC2909;G;11:31:50.89;+11:28:12.8;Leo;0.24;0.21;35;17.77;;;;;23.44;;;;;;;;;PGC 1394107,SDSS J113150.88+112812.8,SDSS J113150.89+112812.8;;;B-Mag taken from LEDA. +IC2910;G;11:31:54.71;-09:43:31.3;Crt;1.28;0.88;139;14.64;;10.91;10.20;9.92;23.83;S0-a;;;;;;;;2MASX J11315470-0943304,MCG -01-30-001,PGC 035557;;;B-Mag taken from LEDA. +IC2911;**;11:32:04.63;+12:58:38.5;Leo;;;;;;;;;;;;;;;;;;;;; +IC2912;G;11:32:07.11;+11:42:35.1;Leo;0.55;0.19;84;17.11;;;;;23.73;Sc;;;;;;;;2MASX J11320710+1142351,PGC 1397617,SDSS J113207.11+114235.1;;;B-Mag taken from LEDA. +IC2913;G;11:31:51.35;-30:24:38.8;Hya;1.00;0.79;143;13.75;;11.41;10.75;10.48;22.72;S0-a;;;;;;;;2MASX J11315134-3024386,ESO 439-016,ESO-LV 439-0160,IRAS 11293-3008,MCG -05-27-016,PGC 035554;;; +IC2914;G;11:32:12.43;+13:29:32.9;Leo;0.65;0.34;179;15.30;;13.61;12.77;12.67;23.08;Sc;;;;;;;;2MASX J11321243+1329328,PGC 035580,SDSS J113212.42+132932.8,SDSS J113212.43+132932.8,SDSS J113212.43+132932.9;;; +IC2916;*;11:32:16.15;+11:41:01.4;Leo;;;;;;;;;;;;;;;;;;SDSS J113216.15+114101.4;;; +IC2917;G;11:32:19.33;+10:56:43.6;Leo;0.26;0.19;38;18.01;;;;;23.79;;;;;;;;;PGC 1386736,SDSS J113219.33+105643.5,SDSS J113219.33+105643.6;;;B-Mag taken from LEDA. +IC2918;*;11:32:26.23;+13:14:54.6;Leo;;;;;;;;;;;;;;;;;;SDSS J113226.23+131454.6;;; +IC2919;G;11:32:34.90;+14:11:21.2;Leo;0.55;0.31;45;15.50;;14.22;13.61;13.09;23.13;Sd;;;;;;;;2MASX J11323487+1411222,PGC 035614,SDSS J113234.89+141121.2;;; +IC2920;*;11:32:48.67;+12:33:25.6;Leo;;;;;;;;;;;;;;;;;;SDSS J113248.66+123325.6;;; +IC2921;G;11:32:49.28;+10:17:47.3;Leo;0.59;0.25;124;17.61;16.94;12.80;12.06;11.62;23.49;Sa;;;;;;;;2MASX J11324928+1017473,LEDA 3091281,SDSS J113249.27+101747.2,SDSS J113249.28+101747.3;;; +IC2922;*;11:32:51.22;+12:55:22.2;Leo;;;;;;;;;;;;;;;;;;SDSS J113251.22+125522.2;;; +IC2923;G;11:32:53.55;+13:09:50.3;Leo;0.41;0.29;12;16.79;;;;;23.84;E;;;;;;;;2MASX J11325356+1309502,PGC 1424388,SDSS J113253.54+130950.2,SDSS J113253.54+130950.3;;;B-Mag taken from LEDA. +IC2924;*;11:32:52.19;+09:01:23.8;Leo;;;;;;;;;;;;;;;;;;SDSS J113252.18+090123.7;;; +IC2925;G;11:33:13.23;+34:15:54.4;UMa;0.48;0.18;21;15.60;;12.15;11.45;11.08;22.24;S0-a;;;;;;;;2MASX J11331323+3415543,PGC 035667,SDSS J113313.22+341554.4,SDSS J113313.23+341554.4;;; +IC2926;*;11:33:04.07;+12:26:11.2;Leo;;;;;;;;;;;;;;;;;;SDSS J113304.06+122611.1;;; +IC2927;*;11:33:04.77;+13:05:08.6;Leo;;;;;;;;;;;;;;;;;;SDSS J113304.77+130508.6;;; +IC2928;G;11:33:29.96;+34:18:58.5;UMa;0.90;0.74;143;14.70;;12.23;11.62;11.25;23.11;SABb;;;;;;;;2MASX J11333001+3418584,MCG +06-25-086,PGC 035687,SDSS J113329.95+341858.4,SDSS J113329.96+341858.5,UGC 06540;;HOLM 264C does not exist (it is probably a plate defect).; +IC2929;G;11:33:31.47;+12:08:14.4;Leo;0.53;0.43;118;16.21;;;;;23.86;E?;;;;;;;;2MASX J11333147+1208143,LEDA 1404385,SDSS J113331.46+120814.3,SDSS J113331.47+120814.4;;;B-Mag taken from LEDA. +IC2930;G;11:33:44.14;+10:05:19.2;Leo;0.69;0.29;58;15.70;;13.12;12.43;12.16;23.21;Sb;;;;;;;;2MASX J11334411+1005189,PGC 035700,SDSS J113344.13+100519.1,SDSS J113344.14+100519.2;;; +IC2931;*;11:33:50.49;+12:28:02.0;Leo;;;;;;;;;;;;;;;;;;SDSS J113350.49+122802.0;;; +IC2932;**;11:33:53.71;+10:32:36.2;Leo;;;;;;;;;;;;;;;;;;;;; +IC2933;G;11:34:12.75;+34:18:45.0;UMa;1.18;0.36;7;15.20;;11.43;10.71;10.46;23.38;SBab;;;;;;;;2MASX J11341269+3418450,MCG +06-26-004,PGC 035732,SDSS J113412.74+341844.9,SDSS J113412.75+341845.0,UGC 06550;;; +IC2934;G;11:34:19.55;+13:19:19.2;Leo;0.74;0.38;153;14.80;;15.60;14.83;14.43;22.90;Sd;;;;;;;;2MASX J11341986+1319135,MCG +02-30-002,PGC 035739,SDSS J113419.54+131919.1,SDSS J113419.55+131919.1,SDSS J113419.55+131919.2;;; +IC2935;*;11:34:48.21;+10:15:00.5;Leo;;;;;;;;;;;;;;;;;;SDSS J113448.21+101500.5;;; +IC2936;G;11:34:56.82;+13:00:31.7;Leo;0.39;0.35;109;16.48;;;;;23.06;Sbc;;;;;;;;PGC 1420782,SDSS J113456.81+130031.6,SDSS J113456.82+130031.7;;;B-Mag taken from LEDA. +IC2937;*;11:35:03.37;+10:06:12.1;Leo;;;;;;;;;;;;;;;;;;SDSS J113503.37+100612.0;;; +IC2938;G;11:35:36.30;+13:40:50.6;Leo;0.89;0.62;130;15.30;;11.82;11.18;10.80;23.86;E;;;;;;;;2MASX J11353633+1340507,PGC 035837,SDSS J113536.29+134050.6;;; +IC2939;*;11:35:37.98;+10:41:49.5;Leo;;;;;;;;;;;;;;;;;;SDSS J113537.97+104149.4;;; +IC2940;Other;11:36:02.74;+21:57:42.0;Leo;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2941;G;11:36:09.97;+10:03:20.1;Leo;0.85;0.59;73;15.00;;12.84;12.04;11.70;23.28;Sbc;;;;;;;;2MASX J11360997+1003195,MCG +02-30-003,PGC 035881,SDSS J113609.97+100320.0,SDSS J113609.97+100320.1;;; +IC2942;G;11:36:12.21;+11:48:57.2;Leo;0.66;0.35;68;16.18;;;;;23.49;Sc;;;;;;;;PGC 1399175,SDSS J113612.20+114857.1,SDSS J113612.20+114857.2,SDSS J113612.21+114857.2;;;B-Mag taken from LEDA. +IC2943;G;11:36:42.31;+54:50:45.7;UMa;0.41;0.33;25;15.00;;12.78;12.05;11.71;21.87;Sa;;;;;;;;2MASX J11364237+5450455,IRAS 11339+5507,PGC 035926,SDSS J113642.30+545045.7,SDSS J113642.30+545046.0,SDSS J113642.31+545045.7;;; +IC2944;Cl+N;11:35:46.93;-63:01:11.4;Cen;7.20;;;4.50;;;;;;;;;;;;;;C 100,HD 100841,HIP 056561,MWSC 1957;lam Cen Nebula;Position is for Lambda Centauri, more or less centered in 40' x 20' nebula.;B-Mag taken from LEDA. +IC2945;GPair;11:37:04.29;+12:55:35.7;Leo;1.00;;;;;;;;;;;;;;;;;MCG +02-30-004,UGC 06585;;;Diameter of the group inferred by the author. +IC2945 NED01;G;11:37:04.30;+12:55:35.2;Leo;0.96;0.70;115;15.00;;11.86;11.12;10.80;23.96;E;;;;;;;;2MASX J11370431+1255361,MCG +02-30-004 NED01,PGC 035958,SDSS J113704.29+125535.7,SDSS J113704.30+125535.7,UGC 06585 NED01;;; +IC2946;G;11:37:29.69;+32:15:08.9;UMa;0.46;0.27;154;15.20;;12.15;11.47;11.12;;SBab;;;;;;;;2MASX J11372968+3215088,PGC 035984,SDSS J113729.68+321508.8,SDSS J113729.69+321508.8,SDSS J113729.69+321508.9;;; +IC2947;G;11:37:30.97;+31:21:44.4;UMa;0.75;0.56;3;14.60;;12.43;11.78;11.57;22.52;SBm;;;;;;;;2MASX J11373079+3121437,MCG +05-28-002,PGC 035981,SDSS J113730.97+312144.3,SDSS J113730.97+312144.4;;; +IC2948;Cl+N;11:39:05.94;-63:26:37.9;Cen;6.00;;;;;;;;;;;;;;;;;MWSC 1961;;The open cluster ESO 094-SC 005 may be associated with this nebula.; +IC2949;**;11:40:54.35;-46:27:16.5;Cen;;;;;;;;;;;;;;;;;;;;IC identification is uncertain.; +IC2950;G;11:41:37.92;+37:59:31.6;UMa;0.65;0.56;81;14.80;;12.49;11.78;11.51;22.57;Sc;;;;;;;;2MASX J11413792+3759310,PGC 036287,SDSS J114137.92+375931.6;;; +IC2951;G;11:43:24.56;+19:44:59.3;Leo;1.54;0.43;81;14.98;13.55;11.23;10.44;10.23;23.65;Sa;;;;;;;;2MASX J11432453+1944595,MCG +03-30-061,PGC 036436,SDSS J114324.55+194459.3,UGC 06688;;; +IC2952;G;11:44:17.13;+33:21:04.9;UMa;0.35;0.28;161;15.60;;13.60;12.81;12.35;22.07;Sbc;;;;;;;;2MASX J11441709+3321050,MCG +06-26-024,PGC 036508,SDSS J114417.12+332104.9,SDSS J114417.13+332104.9,SDSS J114417.13+332105.0;;; +IC2953;Dup;11:44:25.78;+33:21:18.3;UMa;;;;;;;;;;;;;;;3855;;;;;; +IC2954;*;11:45:03.26;+26:47:11.4;Leo;;;;;;;;;;;;;;;;;;;;; +IC2955;G;11:45:03.91;+19:37:14.2;Leo;0.38;0.37;5;15.20;;11.91;11.26;11.14;21.86;E-S0;;;;;;;;2MASX J11450385+1937139,MCG +03-30-096,PGC 036603,SDSS J114503.90+193714.1;;; +IC2956;G;11:45:17.56;+26:46:02.6;Leo;0.94;0.80;56;14.90;;11.91;11.06;10.74;23.39;Sbc;;;;;;;;2MASX J11451760+2646025,MCG +05-28-027,PGC 036625,SDSS J114517.56+264602.6,UGC 06729;;; +IC2957;G;11:45:36.94;+31:17:58.4;UMa;0.79;0.47;23;15.00;;12.32;11.63;11.47;23.28;S0;;;;;;;;2MASX J11453698+3117584,MCG +05-28-028,PGC 036653,SDSS J114536.93+311758.4,SDSS J114536.93+311758.5;;Not to be confused with IC 2954 which is a star 4.5 degrees away.; +IC2958;G;11:45:42.32;+33:09:16.0;UMa;0.71;0.58;55;15.70;;13.10;12.40;12.07;23.62;Sbc;;;;;;;;2MASX J11454232+3309154,MCG +06-26-030,PGC 036665,SDSS J114542.32+330915.9,SDSS J114542.32+330916.0;;;B-Mag taken from LEDA. +IC2959;Dup;11:46:10.14;+33:06:31.5;UMa;;;;;;;;;;;;;;;3871;;;;;; +IC2960;G;11:46:19.70;+35:00:13.5;UMa;0.83;0.72;104;15.60;;12.52;11.89;11.62;23.66;Sb;;;;;;;;2MASX J11461969+3500131,PGC 036709,SDSS J114619.69+350013.4,SDSS J114619.70+350013.5;;; +IC2961;G;11:47:49.57;+31:20:41.1;UMa;0.48;0.29;21;15.50;;13.87;13.36;12.93;23.02;S0;;;;;;;;2MASX J11474957+3120415,PGC 036812,SDSS J114749.57+312041.0,SDSS J114749.57+312041.1;;; +IC2962;Other;11:49:05.99;-12:18:40.9;Crt;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2963;Dup;11:49:24.53;-05:07:06.4;Vir;;;;;;;;;;;;;;;3915;;;;;; +IC2964;Other;11:49:52.47;+12:03:01.1;Leo;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2965;Dup;11:54:01.51;-19:34:08.0;Crt;;;;;;;;;;;;;;;3957;;;;;; +IC2966;RfN;11:50:13.55;-64:52:22.6;Mus;3.00;2.00;130;;;;;;;;;;;;;;;2MASX J11501351-6452222;;; +IC2967;G;11:50:55.13;+30:51:02.5;UMa;0.85;0.63;17;14.80;;11.73;10.99;10.75;23.34;E;;;;;;;;2MASX J11505514+3051032,MCG +05-28-038,PGC 037042,SDSS J115055.12+305102.4,SDSS J115055.13+305102.5;;; +IC2968;G;11:52:30.53;+20:37:31.7;Leo;0.89;0.39;80;15.50;;12.55;11.91;11.52;23.90;S0-a;;;;;;;;2MASX J11523053+2037317,PGC 037192,SDSS J115230.53+203731.6,SDSS J115230.53+203731.7;;; +IC2969;G;11:52:31.27;-03:52:20.1;Vir;1.30;0.74;95;13.80;;11.91;11.36;11.15;22.66;SBbc;;;;;;;;2MASX J11523127-0352199,IRAS 11499-0335,MCG -01-30-040,PGC 037196;;Confused HIPASS source; +IC2970;Other;11:53:09.75;-23:07:23.8;Crt;;;;;;;;;;;;;;;;;;;;"Nominal position; nothing here."; +IC2971;G;11:53:27.54;+30:41:48.9;UMa;0.70;0.48;150;15.70;;12.47;11.71;11.63;23.84;E;;;;;;;;2MASX J11532757+3041487,PGC 037275,SDSS J115327.53+304148.8,SDSS J115327.54+304148.8,SDSS J115327.54+304148.9;;; +IC2972;Dup;11:53:40.63;-03:59:47.5;Vir;;;;;;;;;;;;;;;3952;;;;;; +IC2973;G;11:53:50.76;+33:21:55.8;UMa;1.42;0.82;120;14.50;;12.64;11.93;11.73;23.51;SBcd;;;;;;;;2MASX J11535082+3321563,MCG +06-26-052,PGC 037308,SDSS J115350.56+332158.1,SDSS J115351.07+332153.7,UGC 06872;;; +IC2974;G;11:53:48.73;-05:10:04.2;Vir;2.19;0.47;100;13.84;;10.83;10.00;9.78;23.13;Sc;;;;;;2975;;2MASX J11534872-0510044,IRAS 11512-0453,MCG -01-30-045,PGC 037304;;The identification as IC 2975 is not certain.; +IC2975;Dup;11:53:48.73;-05:10:04.2;Vir;;;;;;;;;;;;;;;;2974;;;;; +IC2976;Dup;11:56:01.05;-02:43:15.1;Vir;;;;;;;;;;;;;;;3979;;;;;; +IC2977;G;11:55:14.66;-37:41:46.7;Cen;2.14;1.17;121;13.28;;10.14;9.46;9.12;23.03;I;;;;;;;;2MASX J11551464-3741464,ESO 379-009,ESO-LV 379-0090,MCG -06-26-014,PGC 037405;;; +IC2978;G;11:56:23.23;+32:02:19.4;UMa;1.00;0.42;130;15.40;;13.68;13.77;13.08;23.48;SBcd;;;;;;;;2MASX J11562287+3202144,MCG +05-28-051,PGC 037515,SDSS J115623.22+320219.4,SDSS J115623.23+320219.4,UGC 06915;;; +IC2979;G;11:56:54.24;+32:09:31.7;UMa;0.84;0.54;174;14.50;;11.58;10.89;10.66;22.98;S0;;;;;;;;2MASX J11565423+3209321,MCG +05-28-054,PGC 037559,SDSS J115654.23+320931.7,SDSS J115654.24+320931.7,UGC 06925;;; +IC2980;G;11:57:30.16;-73:41:04.2;Mus;2.04;1.29;41;14.60;;10.06;9.27;9.07;23.65;E;;;;;;;;2MASX J11573016-7341042,ESO 039-005,PGC 037612;;; +IC2981;G;11:55:42.62;+32:11:20.0;UMa;0.53;0.42;3;14.70;;12.71;12.11;11.84;22.44;SBa;;;;;;;;2MASX J11554260+3211203,MCG +05-28-048,PGC 037462,SDSS J115542.62+321120.0;;Often mistakenly called NGC 3966.; +IC2982;Dup;11:57:51.38;+27:52:07.2;Com;;;;;;;;;;;;;;;4004B;;;;;; +IC2983;Other;11:58:16.73;-02:06:36.2;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2984;G;11:59:07.23;+30:41:49.0;UMa;0.73;0.49;77;15.60;;14.71;14.28;14.07;23.45;SBd;;;;;;;;MCG +05-28-068,PGC 037734;;; +IC2985;G;11:59:12.75;+30:43:52.4;UMa;0.90;0.43;139;15.20;;13.93;13.38;13.07;23.85;S0;;;;;;;;2MASX J11591277+3043521,MCG +05-28-069,PGC 037744,SDSS J115912.75+304352.3,SDSS J115912.75+304352.4,SDSS J115912.76+304352.4,UGC 06981;;; +IC2986;G;11:59:49.61;+30:50:39.9;UMa;0.99;0.91;15;15.00;;11.95;11.35;11.18;23.46;S0;;;;;;;;2MASX J11594960+3050397,MCG +05-28-072,PGC 037795,SDSS J115949.60+305039.8,SDSS J115949.61+305039.9;;; +IC2987;G;12:03:24.54;+38:48:47.9;UMa;0.60;0.42;64;15.30;;12.72;12.05;11.67;22.85;SBbc;;;;;;;;2MASX J12032450+3848479,PGC 038088,SDSS J120324.53+384847.9,SDSS J120324.54+384847.9,SDSS J120324.54+384848.0;;; +IC2988;Other;12:03:42.20;+03:25:45.3;Vir;;;;;;;;;;;;;;;;;;SDSS J120342.19+032545.2;;;No exact match in LEDA. +IC2989;Dup;12:04:34.03;+01:48:05.8;Vir;;;;;;;;;;;;;;;4139;;;;;; +IC2990;G;12:04:38.60;+11:03:00.2;Vir;0.73;0.32;15;15.10;;12.92;12.20;12.17;22.82;Sb;;;;;;;;2MASX J12043860+1102599,MCG +02-31-022,PGC 038219,SDSS J120438.58+110300.4,SDSS J120438.59+110300.1,SDSS J120438.60+110300.1,SDSS J120438.60+110300.2;;; +IC2991;G;12:05:12.51;+10:38:25.3;Vir;0.67;0.24;35;15.50;;13.99;13.67;13.49;23.19;Sc;;;;;;;;2MASX J12051250+1038252,MCG +02-31-025,PGC 038273,SDSS J120512.50+103825.2,SDSS J120512.51+103825.3;;; +IC2992;G;12:05:15.83;+30:51:20.3;UMa;0.63;0.52;161;14.80;;13.21;12.63;12.44;22.52;S?;;;;;;;;2MASX J12051584+3051194,MCG +05-29-008,PGC 038277,SDSS J120515.83+305120.2,SDSS J120515.83+305120.3;;; +IC2993;G;12:05:38.33;+32:49:19.9;Com;0.35;0.31;6;16.01;;12.66;12.05;11.37;;E;;;;;;;;2MASX J12053836+3249203,PGC 3088758,SDSS J120538.33+324919.9;;;B-Mag taken from LEDA. +IC2994;G;12:05:27.87;+12:42:10.4;Vir;0.47;0.39;62;15.60;;13.64;12.84;12.78;22.75;Sc;;;;;;;;2MASX J12052789+1242105,PGC 038291,SDSS J120527.86+124210.4,SDSS J120527.87+124210.4;;; +IC2995;G;12:05:46.91;-27:56:24.5;Hya;3.37;0.85;114;13.03;;10.25;9.87;9.32;23.46;SBc;;;;;;;;2MASX J12054690-2756244,ESO 440-050,ESO-LV 440-0500,IRAS 12032-2739,MCG -05-29-008,PGC 038330,UGCA 268;;; +IC2996;G;12:05:48.63;-29:58:18.9;Hya;1.78;0.44;23;14.27;;11.91;11.21;11.05;23.34;Sb;;;;;;;;2MASX J12054863-2958188,ESO 440-051,ESO-LV 440-0510,IRAS 12032-2941,MCG -05-29-009,PGC 038334;;; +IC2997;Other;12:05:44.47;+20:16:51.1;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2998;Other;12:05:55.24;+20:45:12.1;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC2999;G;12:05:57.54;+31:20:54.6;Com;0.67;0.26;51;15.60;;13.16;12.40;12.13;22.93;Sc;;;;;;;;2MASX J12055752+3120543,PGC 038352,SDSS J120557.53+312054.5,SDSS J120557.54+312054.6;;; +IC3000;Other;12:06:08.55;-29:40:24.2;Hya;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3001;G;12:06:16.81;+33:31:33.1;CVn;0.73;0.37;73;15.70;;12.12;11.41;11.28;23.09;SBbc;;;;;;;;2MASX J12061679+3331332,MCG +06-27-007,PGC 038379,SDSS J120616.80+333133.1,SDSS J120616.81+333133.1;;; +IC3002;G;12:07:04.19;+33:22:58.2;Com;0.61;0.47;86;15.60;;13.52;13.06;12.59;23.26;Sc;;;;;;;;2MASX J12070421+3322583,MCG +06-27-010,PGC 038443,SDSS J120704.18+332258.1,SDSS J120704.19+332258.2;;; +IC3003;G;12:07:32.62;+32:48:46.8;Com;0.80;0.58;145;15.00;;11.78;11.02;10.87;23.20;S0-a;;;;;;;;2MASX J12073262+3248471,MCG +06-27-013,PGC 038490,SDSS J120732.62+324846.7,SDSS J120732.63+324846.8;;; +IC3004;G;12:07:10.24;+13:14:51.1;Vir;0.61;0.40;24;15.60;;;;;23.58;SBc;;;;;;;;MCG +02-31-030,PGC 038457,SDSS J120710.23+131451.0,SDSS J120710.24+131451.0,SDSS J120710.24+131451.1;;; +IC3005;G;12:07:14.17;-30:01:28.7;Hya;2.42;0.66;160;13.80;;11.07;10.30;9.97;23.58;SBc;;;;;;;;2MASX J12071415-3001287,ESO 441-002,ESO-LV 441-0020,IRAS 12046-2944,MCG -05-29-018,PGC 038464;;; +IC3006;Other;12:07:24.34;+12:59:36.2;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the original Harvard plate."; +IC3007;G;12:07:30.78;+31:20:53.2;Com;0.69;0.42;75;15.50;;12.51;11.60;11.49;23.67;E;;;;;;;;2MASX J12073077+3120531,PGC 038486,SDSS J120730.78+312053.1,SDSS J120730.78+312053.2;;; +IC3008;G;12:07:51.80;+13:34:38.3;Com;0.93;0.51;22;15.00;;12.48;11.94;11.71;23.03;Sb;;;;;;;;MCG +02-31-031,PGC 038512;;; +IC3009;Other;12:08:00.11;+12:38:47.3;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3010;G;12:07:57.41;-30:20:22.1;Hya;2.09;1.91;84;13.22;;10.15;9.46;9.20;23.55;S0-a;;;;;;;;2MASX J12075742-3020222,ESO 441-006,ESO-LV 441-0060,MCG -05-29-020,PGC 038511;;; +IC3011;Dup;12:08:09.62;+10:22:44.0;Vir;;;;;;;;;;;;;;;4119;;;;;; +IC3012;G;12:08:23.94;+11:10:35.8;Vir;0.59;0.26;46;15.40;;12.73;12.10;11.74;23.15;Sa;;;;;;;;2MASX J12082392+1110360,PGC 038546,SDSS J120823.91+111035.7,SDSS J120823.93+111035.7,SDSS J120823.94+111035.7;;; +IC3013;G;12:08:25.58;+10:01:00.0;Vir;0.58;0.41;159;15.30;;14.40;13.74;13.30;22.92;Sc;;;;;;;;2MASX J12082559+1001000,MCG +02-31-037,PGC 038547,SDSS J120825.57+100100.0,SDSS J120825.58+100100.0;;; +IC3014;G;12:08:37.00;+38:49:54.4;CVn;0.82;0.58;20;14.40;;11.85;11.14;10.85;22.66;Sb;;;;;;;;2MASX J12083696+3849543,MCG +07-25-028a,PGC 038562,SDSS J120837.00+384954.3,UGC 07119;;; +IC3015;G;12:09:00.28;-31:31:11.6;Hya;0.72;0.23;164;13.15;;9.78;9.12;8.81;20.64;Sbc;;;;;;;;2MASX J12090026-3131114,ESO 441-009,ESO-LV 441-0090,IRAS 12064-3114,MCG -05-29-023,PGC 038588;;; +IC3016;G;12:09:18.54;+11:25:48.8;Vir;0.49;0.45;16;15.60;;13.71;13.08;12.82;22.42;SBbc;;;;;;;;2MASX J12091849+1125488,PGC 038620,SDSS J120918.53+112548.7,SDSS J120918.54+112548.7,SDSS J120918.54+112548.8;;; +IC3017;G;12:09:22.83;+13:37:05.4;Com;0.60;0.35;50;16.44;;13.81;13.21;12.84;23.75;SBbc;;;;;;;;2MASX J12092282+1337050,PGC 1435797,SDSS J120922.82+133705.3,SDSS J120922.83+133705.4;;;B-Mag taken from LEDA. +IC3018;G;12:09:24.96;+13:34:28.0;Com;0.66;0.25;176;15.30;;13.58;12.92;12.64;23.16;Sab;;;;;;;;2MASX J12092495+1334290,LEDA 1434085,PGC 038627,SDSS J120924.95+133427.9,SDSS J120924.96+133428.0;;Often mistakenly called IC 3017.; +IC3019;G;12:09:22.26;+13:59:32.7;Com;1.26;0.99;130;15.00;;;;;23.34;E;;;;;;;;MCG +02-31-038,PGC 038624,SDSS J120922.25+135932.7,SDSS J120922.26+135932.7,UGC 07136;;; +IC3020;G;12:09:27.22;+14:13:28.2;Com;0.36;0.28;77;16.42;;13.14;12.56;11.99;23.21;E;;;;;;;;2MASX J12092723+1413280,LEDA 1452566,SDSS J120927.22+141328.1,SDSS J120927.22+141328.2;;;B-Mag taken from LEDA. +IC3021;G;12:09:54.57;+13:02:59.9;Vir;1.29;0.81;178;15.40;;;;;24.41;SABm;;;;;;;;PGC 038684,SDSS J120954.57+130259.9,UGC 07149;;; +IC3022;G;12:10:02.38;+38:44:23.9;CVn;0.20;0.20;179;14.60;;11.44;10.74;10.51;;E;;;;;;;;2MASX J12100235+3844243,MCG +07-25-039,PGC 038694,SDSS J121002.37+384423.8,SDSS J121002.37+384423.9,SDSS J121002.38+384423.9;;; +IC3023;G;12:10:01.75;+14:22:00.7;Com;1.04;0.64;138;16.00;;;;;24.31;I;;;;;;;;MCG +03-31-051,PGC 038692,SDSS J121001.74+142200.7,SDSS J121001.75+142200.7,UGC 07150;;; +IC3024;G;12:10:11.93;+12:19:32.4;Vir;0.90;0.29;168;15.10;;12.50;11.79;11.46;22.92;Sab;;;;;;;;2MASX J12101195+1219323,IRAS 12076+1236,MCG +02-31-039,PGC 038709,SDSS J121011.93+121932.3,SDSS J121011.94+121932.4,UGC 07161;;; +IC3025;G;12:10:23.09;+10:11:18.8;Vir;0.73;0.43;102;15.30;;13.38;12.84;12.42;22.97;E-S0;;;;;;;;2MASX J12102318+1011186,MCG +02-31-040,PGC 038726,SDSS J121023.08+101118.7,SDSS J121023.09+101118.7,SDSS J121023.09+101118.8;;; +IC3026;Other;12:10:34.30;-29:55:23.6;Hya;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3027;Other;12:10:30.07;+14:11:36.7;Com;;;;;;;;;;;;;;;;;;;;This is a defect on the original Harvard plate.; +IC3028;G;12:10:35.69;+11:45:38.9;Vir;0.55;0.31;152;14.90;;13.54;12.74;12.57;23.12;S0;;;;;;;;2MASX J12103572+1145386,PGC 038747,SDSS J121035.68+114538.9,SDSS J121035.69+114538.9;;; +IC3029;G;12:10:41.86;+13:19:52.6;Vir;1.26;0.43;30;15.00;;12.44;11.83;11.47;23.25;SBc;;;;;;;;2MASX J12104186+1319525,MCG +02-31-041 NED01,PGC 038755,SDSS J121041.85+131952.5,SDSS J121041.86+131952.6,UGC 07171;;; +IC3030;Other;12:11:06.03;+14:08:36.8;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3031;G;12:11:04.18;+13:18:30.4;Vir;0.61;0.22;31;16.99;;13.99;13.37;13.05;24.07;Sbc;;;;;;;;2MASX J12110415+1318301,LEDA 092941,SDSS J121104.17+131830.4,SDSS J121104.18+131830.4;;;B-Mag taken from LEDA. +IC3032;G;12:11:07.76;+14:16:29.3;Com;0.59;0.52;40;15.30;;12.82;12.34;12.17;22.86;E-S0;;;;;;;;2MASX J12110776+1416301,MCG +03-31-059,PGC 038800,SDSS J121107.75+141629.3,SDSS J121107.76+141629.3;;; +IC3033;G;12:11:09.95;+13:35:15.0;Com;1.03;0.47;3;14.92;;;;;23.20;Sd;;;;;;;;MCG +02-31-043,PGC 038803,SDSS J121109.95+133515.0,UGC 07181;;; +IC3034;G;12:11:47.80;+14:12:04.1;Com;0.74;0.23;150;16.23;;13.14;12.21;12.11;23.48;Sbc;;;;;;;;2MASX J12114782+1412036,LEDA 1451880,SDSS J121147.80+141204.1;;;B-Mag taken from LEDA. +IC3035;Dup;12:12:11.80;+13:14:47.5;Vir;;;;;;;;;;;;;;;4165;;;;;; +IC3036;G;12:12:15.11;+12:29:18.2;Vir;0.88;0.47;165;15.30;;;;;22.70;SABm;;;;;;;;PGC 038888,UGC 07200;;; +IC3037;G;12:12:20.48;+09:59:11.2;Vir;0.48;0.44;40;15.50;;14.22;13.29;13.12;22.42;Sbc;;;;;;;;2MASX J12122046+0959110,PGC 038894,SDSS J121220.47+095911.1,SDSS J121220.47+095911.2,SDSS J121220.48+095911.1,SDSS J121220.48+095911.2;;; +IC3038;G;12:12:32.61;+11:21:10.2;Vir;0.41;0.30;106;15.70;;13.72;13.03;12.45;21.99;Sab;;;;;;;;2MASX J12123263+1121101,PGC 038920,SDSS J121232.60+112110.1,SDSS J121232.61+112110.2;;; +IC3039;G;12:12:32.57;+12:18:35.6;Vir;0.91;0.37;22;15.20;;12.97;12.55;12.24;22.94;SBbc;;;;;;;;2MASX J12123256+1218354,MCG +02-31-048,PGC 038919,SDSS J121232.57+121835.5;;; +IC3040;G;12:12:34.53;+11:04:30.1;Vir;0.77;0.69;171;15.60;;;;;23.37;S?;;;;;;;;MCG +02-31-049,PGC 038922,SDSS J121234.53+110430.1;;; +IC3041;G;12:12:42.66;+12:45:46.2;Vir;0.62;0.17;60;16.96;;;;;23.50;Sd;;;;;;;;PGC 1415716,SDSS J121242.66+124546.2;;;B-Mag taken from LEDA. +IC3042;Dup;12:12:46.45;+10:51:57.5;Vir;;;;;;;;;;;;;;;4178;;;;;; +IC3043;G;12:12:47.18;+10:00:34.8;Vir;0.93;0.22;170;16.60;;13.97;13.10;13.05;24.41;Sab;;;;;;;;2MASX J12124717+1000345,SDSS J121247.17+100034.8,SDSS J121247.18+100034.8;;;B-Mag taken from LEDA. +IC3044;G;12:12:48.52;+13:58:35.3;Com;1.26;0.50;70;14.70;;;;;22.74;Sc;;;;;;;;MCG +02-31-051,PGC 038945,UGC 07216;;; +IC3045;Other;12:12:59.67;+12:46:46.2;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3046;G;12:13:07.87;+12:55:05.6;Vir;1.34;0.29;132;15.29;;12.33;11.61;11.30;23.53;Sbc;;;;;;;;2MASX J12130788+1255053,MCG +02-31-052,PGC 038977,SDSS J121307.86+125505.5,SDSS J121307.87+125505.6,UGC 07220;;; +IC3047;G;12:13:14.63;+12:59:51.6;Vir;0.58;0.35;37;16.54;;14.71;14.03;13.92;23.91;Sbc;;;;;;;;2MASX J12131463+1259513,PGC 1420536,SDSS J121314.63+125951.5,SDSS J121314.63+125951.6;;;B-Mag taken from LEDA. +IC3048;*;12:13:21.44;+13:04:08.5;Vir;;;;;;;;;;;;;;;;;;;;; +IC3049;G;12:13:33.70;+14:28:49.0;Com;0.90;0.60;0;15.70;;;;;23.82;Sm;;;;;;;;PGC 039009,UGC 07227;;; +IC3050;Dup;12:13:47.27;+13:25:29.3;Com;;;;;;;;;;;;;;;4189;;;;;; +IC3051;Dup;12:13:53.59;+13:10:22.3;Vir;;;;;;;;;;;;;;;4193;;;;;; +IC3052;G;12:13:48.27;+12:41:26.0;Vir;0.49;0.33;131;16.30;;;;;23.99;I;;;;;;;;PGC 039031,SDSS J121348.27+124125.9,SDSS J121348.27+124126.0;;; +IC3053;G;12:13:51.93;+14:13:22.7;Com;0.56;0.35;4;15.70;;13.41;13.03;12.42;22.49;Sab;;;;;;;;2MASX J12135191+1413224,PGC 039038,SDSS J121351.93+141322.6,SDSS J121351.93+141322.7;;; +IC3054;G;12:14:14.43;+13:32:34.6;Com;0.68;0.54;158;16.33;;;;;24.34;E;;;;;;;;PGC 039080,SDSS J121414.42+133234.5,SDSS J121414.42+133234.6,SDSS J121414.43+133234.6;;;B-Mag taken from LEDA. +IC3055;GTrpl;12:14:22.30;+12:05:29.0;Vir;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3055 NED01;G;12:14:21.87;+12:05:26.0;Vir;0.52;0.26;61;17.47;;;;;24.47;Sa;;;;;;;;2MASX J12142188+1205256,SDSS J121421.86+120526.0,SDSS J121421.87+120526.0;;;B-Mag taken from LEDA +IC3055 NED02;G;12:14:22.11;+12:05:30.8;Vir;;;;;;;;;;;;;;;;;;SDSS J121422.10+120530.8;;;No data available in LEDA +IC3055 NED03;G;12:14:22.61;+12:05:29.9;Vir;0.42;0.29;69;16.46;;;;;23.06;Sbc;;;;;;;;2MASX J12142260+1205292,PGC 1403639,SDSS J121422.61+120529.9;;;B-Mag taken from LEDA. +IC3056;G;12:14:36.94;+12:48:42.7;Vir;1.30;0.50;62;15.43;14.73;;;;24.00;IAB;;;;;;;;MCG +02-31-056,PGC 039113,SDSS J121436.93+124842.6,SDSS J121436.94+124842.7,UGC 07249;;; +IC3057;Other;12:15:02.67;-44:28:22.7;Cen;;;;;;;;;;;;;;;;;;;;"Nothing here; probably a defect on the original Harvard plate."; +IC3058;G;12:14:47.45;+14:05:43.8;Com;0.54;0.35;127;16.29;;14.02;13.25;12.63;23.32;Scd;;;;;;;;PGC 1449108,SDSS J121447.45+140543.8;;;B-Mag taken from LEDA. +IC3059;G;12:14:55.02;+13:27:37.9;Com;1.69;1.39;3;14.70;14.19;;;;24.48;I;;;;;;;;MCG +02-31-062,PGC 039142,UGC 07254;;; +IC3060;G;12:15:02.09;+12:32:49.6;Vir;0.72;0.53;178;15.10;;12.61;11.88;11.69;22.69;Sab;;;;;;;;2MASX J12150210+1232493,MCG +02-31-061,PGC 039147,SDSS J121502.08+123249.5,SDSS J121502.08+123249.6;;; +IC3061;G;12:15:04.44;+14:01:44.3;Com;2.22;0.40;120;14.90;;11.59;10.87;10.64;23.49;SBc;;;;;;;;2MASX J12150451+1401443,MCG +02-31-063,PGC 039152,SDSS J121504.43+140144.2,SDSS J121504.44+140144.3,UGC 07255;;; +IC3062;G;12:15:05.37;+13:35:41.1;Com;0.81;0.67;175;14.90;;12.36;11.69;11.31;22.75;Sc;;;;;;;;2MASX J12150536+1335413,MCG +02-31-065,PGC 039156,SDSS J121505.36+133541.0,SDSS J121505.37+133541.0,SDSS J121505.37+133541.1;;; +IC3063;G;12:15:06.73;+12:01:00.2;Vir;0.98;0.49;18;14.90;;12.06;11.37;11.31;23.16;Sa;;;;;;;;MCG +02-31-064,PGC 039160,SDSS J121506.72+120100.2,SDSS J121506.73+120100.2,UGC 07259;;; +IC3064;Dup;12:15:16.81;+13:01:26.3;Vir;;;;;;;;;;;;;;;4206;;;;;; +IC3065;G;12:15:12.56;+14:25:58.4;Com;1.24;0.88;179;14.70;;11.79;11.23;10.95;23.59;S0;;;;;;;;2MASX J12151254+1425582,MCG +03-31-082,PGC 039173,SDSS J121512.56+142558.3,SDSS J121512.56+142558.4;;; +IC3066;G;12:15:16.58;+13:28:23.3;Com;0.97;0.32;138;15.58;;13.71;13.54;13.18;23.51;Sc;;;;;;;;2MASX J12151612+1328292,MCG +02-31-068,PGC 039181,SDSS J121516.58+132822.9,UGC 07262;;; +IC3067;Dup;12:15:15.89;+23:57:29.4;Com;;;;;;;;;;;;;;;;0772;;;;; +IC3068;G;12:15:23.20;+11:30:39.2;Vir;0.46;0.21;44;16.52;;;;;22.90;SBcd;;;;;;;;PGC 1394706,SDSS J121523.20+113039.1,SDSS J121523.21+113039.2;;;B-Mag taken from LEDA. +IC3069;G;12:15:19.87;+10:09:38.9;Vir;0.50;0.21;111;16.58;;;;;23.08;Sc;;;;;;;;PGC 1375482,SDSS J121519.87+100938.9;;;B-Mag taken from LEDA. +IC3070;*;12:15:24.67;+13:02:22.1;Vir;;;;;;;;;;;;;;;;;;SDSS J121524.67+130222.1;;; +IC3071;*;12:15:31.86;+09:32:44.0;Vir;;;;;;;;;;;;;;;;;;SDSS J121531.85+093243.9;;; +IC3072;*;12:15:38.13;+09:33:20.3;Vir;;;;;;;;;;;;;;;;;;SDSS J121538.13+093320.2;;; +IC3073;G;12:15:35.60;+13:37:09.0;Com;0.88;0.67;103;15.19;;;;;23.37;I;;;;;;;;PGC 039215,SDSS J121535.60+133709.0,UGC 07274;;; +IC3074;G;12:15:46.19;+10:41:57.1;Vir;0.34;0.29;157;15.10;;;;;21.07;SBd;;;;;;;;MCG +02-31-071,PGC 039233,SDSS J121546.00+104203.3,SDSS J121546.19+104157.1,UGC 07279;;; +IC3075;G;12:15:55.09;+23:35:44.0;Com;0.93;0.55;62;15.10;;11.80;11.13;11.01;23.37;Sa;;;;;;;;2MASX J12155507+2335438,MCG +04-29-056,PGC 039240,SDSS J121555.08+233543.9;;; +IC3076;*;12:16:03.98;+09:04:44.2;Vir;;;;;;;;;;;;;;;;;;SDSS J121603.98+090444.2;;; +IC3077;G;12:15:56.34;+14:25:58.9;Com;1.07;0.73;179;15.40;;13.44;12.76;12.69;23.17;Sc;;;;;;;;MCG +03-31-085,PGC 039256,SDSS J121556.33+142558.9,SDSS J121556.34+142558.9,UGC 07285;;; +IC3078;G;12:16:00.04;+12:41:14.3;Vir;0.58;0.50;31;18.03;17.17;12.58;11.92;11.53;22.36;Sb;;;;;;;;2MASX J12160000+1241138,MCG +02-31-073,PGC 039263,SDSS J121600.04+124114.3;;; +IC3079;G;12:16:04.13;+11:32:05.5;Vir;0.71;0.44;22;15.50;;12.68;12.01;11.95;23.16;S0-a;;;;;;;;2MASX J12160411+1132050,PGC 039273,SDSS J121604.12+113205.4,SDSS J121604.13+113205.5;;; +IC3080;G;12:16:02.67;+14:11:21.8;Com;0.73;0.60;55;15.40;;12.31;11.51;11.53;23.01;SBa;;;;;;;;2MASX J12160268+1411218,LEDA 4103623,PGC 039269,SDSS J121602.66+141121.8,SDSS J121602.67+141121.8;;; +IC3081;G;12:16:09.06;+12:41:28.7;Vir;0.77;0.40;86;15.60;;13.38;12.64;12.61;23.77;E-S0;;;;;;;;2MASX J12160902+1241288,MCG +02-31-074,PGC 039282,SDSS J121609.06+124128.6,SDSS J121609.06+124128.7;;; +IC3082;G;12:16:12.10;+23:50:31.5;Com;0.67;0.19;8;15.91;;12.76;11.95;11.86;23.71;S0-a;;;;;;;;2MASX J12161209+2350319,PGC 1694700,SDSS J121612.09+235031.5,SDSS J121612.10+235031.5;;;B-Mag taken from LEDA. +IC3083;G;12:16:21.24;+12:31:40.0;Vir;0.47;0.40;21;17.14;;;;;24.09;Sb;;;;;;;;2MASX J12162126+1231404,PGC 1411150,SDSS J121621.23+123140.0,SDSS J121621.24+123140.0;;The IC identification is not certain.;B-Mag taken from LEDA. +IC3084;G;12:16:23.46;+23:55:04.4;Com;0.45;0.34;0;15.70;;;;;22.67;;;;;;;;;MCG +04-29-057,PGC 039301;;; +IC3085;*;12:16:26.01;+09:28:08.4;Vir;;;;;;;;;;;;;;;;;;SDSS J121626.00+092808.4;;; +IC3086;**;12:16:27.74;+09:00:33.0;Vir;;;;;;;;;;;;;;;;;;;;; +IC3087;**;12:16:26.50;+13:17:16.0;Vir;;;;;;;;;;;;;;;;;;;;; +IC3088;*;12:16:28.36;+09:27:31.7;Vir;;;;;;;;;;;;;;;;;;SDSS J121628.36+092731.6;;; +IC3089;G;12:16:29.70;+23:49:39.8;Com;0.73;0.73;58;15.70;;12.45;11.76;11.56;23.88;E;;;;;;;;2MASX J12162968+2349398,MCG +04-29-058,PGC 039302,SDSS J121629.69+234939.8;;; +IC3090;**;12:16:31.61;+09:26:22.0;Vir;;;;;;;;;;;;;;;;;;;;; +IC3091;G;12:16:29.17;+14:00:44.5;Com;1.08;0.50;125;14.70;;11.72;10.97;10.74;23.24;S0-a;;;;;;;;2MASX J12162914+1400444,MCG +02-31-077,PGC 039318,SDSS J121629.16+140044.4,SDSS J121629.17+140044.4,SDSS J121629.17+140044.5;;; +IC3092;G;12:16:32.29;+10:02:47.1;Vir;0.37;0.26;159;16.38;;;;;22.96;Sb;;;;;;;;2MASX J12163231+1002466,PGC 1373788,SDSS J121632.28+100247.1,SDSS J121632.29+100247.1;;;B-Mag taken from LEDA. +IC3093;G;12:16:42.36;+14:16:40.1;Com;0.37;0.26;177;15.40;;13.54;12.90;12.71;21.11;Sc;;;;;;;;PGC 039342,SDSS J121642.36+141640.1;;; +IC3094;G;12:16:56.01;+13:37:31.5;Com;0.54;0.46;108;14.10;;12.14;11.45;11.25;21.83;Sab;;;;;;;;2MASX J12165600+1337310,MCG +02-31-078,PGC 039362,SDSS J121656.00+133731.4,SDSS J121656.00+133731.5,SDSS J121656.01+133731.5,UGC 07305;;; +IC3095;G;12:16:55.54;+23:57:28.5;Com;0.53;0.36;77;15.60;;13.38;13.22;12.81;22.82;Sc;;;;;;;;2MASX J12165551+2357285,MCG +04-29-059,PGC 039357,SDSS J121655.54+235728.4;;; +IC3096;G;12:16:52.36;+14:30:52.5;Com;1.11;0.37;96;15.40;;12.87;12.10;12.01;23.73;Sa;;;;;;;;MCG +03-31-090,PGC 039358,SDSS J121652.36+143052.5;;; +IC3097;G;12:17:01.11;+09:24:27.2;Vir;0.79;0.53;26;15.30;;13.67;13.33;13.16;23.61;E;;;;;;;;2MASX J12170107+0924275,PGC 039375,SDSS J121701.10+092427.1,SDSS J121701.10+092427.2,SDSS J121701.11+092427.2;;; +IC3098;Dup;12:17:09.88;+07:11:29.7;Vir;;;;;;;;;;;;;;;4235;;;;;; +IC3099;G;12:17:09.27;+12:27:14.5;Vir;1.85;0.33;174;15.10;;12.46;11.57;11.81;23.61;Sc;;;;;;;;MCG +02-31-079,PGC 039390,SDSS J121709.27+122714.4,SDSS J121709.27+122714.5,UGC 07313;;; +IC3100;G;12:17:05.55;+12:17:23.4;Vir;1.41;0.44;58;15.30;;13.03;12.51;12.38;24.49;S0;;;;;;;;PGC 039381,UGC 07312;;; +IC3101;G;12:17:19.65;+11:56:36.5;Vir;0.63;0.49;37;15.50;;13.83;13.26;12.92;23.59;E;;;;;;;;2MASX J12171966+1156369,PGC 039405,SDSS J121719.65+115636.4,SDSS J121719.65+115636.5;;; +IC3102;Dup;12:17:25.81;+06:41:24.3;Vir;;;;;;;;;;;;;;;4223;;;;;; +IC3103;*;12:17:28.45;+09:21:37.6;Vir;;;;15.29;14.56;;;;;;;;;;;;;SDSS J121728.45+092137.6,UCAC2 35031960,UCAC3 199-127258,UCAC4 497-057518;;; +IC3104;G;12:18:46.06;-79:43:33.8;Cha;2.40;1.32;42;13.66;;;;;23.74;IB;;;;;;;;2MASX J12184412-7943165,PGC 039573;;The diameter in the AM catalogue is incorrect.;B-Mag taken from LEDA. +IC3105;G;12:17:33.75;+12:23:17.2;Vir;1.55;0.31;28;15.00;;;;;23.07;I;;;;;;;;MCG +02-31-080,PGC 039431,SDSS J121733.75+122317.1,SDSS J121733.75+122317.2,UGC 07326;;; +IC3106;*;12:17:45.81;+09:36:47.3;Vir;;;;;;;;;;;;;;;;;;SDSS J121745.80+093647.2;;; +IC3107;G;12:17:46.93;+10:50:40.7;Vir;1.25;0.55;130;14.50;;11.70;10.96;10.71;22.91;Sbc;;;;;;;;2MASX J12174695+1050411,MCG +02-31-082,PGC 039458,SDSS J121746.92+105040.6,SDSS J121746.92+105040.7,SDSS J121746.93+105040.6,SDSS J121746.93+105040.7,SDSS J121746.94+105040.6,UGC 07330;;; +IC3108;G;12:17:42.70;+13:22:47.7;Vir;0.77;0.21;93;14.76;;;;;22.26;Sab;;;;;;;;2MASX J12174270+1322477,PGC 039449,SDSS J121742.69+132247.7,SDSS J121742.70+132247.6,SDSS J121742.70+132247.7;;;B-Mag taken from LEDA +IC3109;G;12:17:44.11;+13:10:15.7;Vir;0.67;0.51;160;15.30;;12.86;12.19;11.91;22.54;Sbc;;;;;;;;2MASX J12174409+1310157,MCG +02-31-081,PGC 039451,SDSS J121744.10+131015.7;;; +IC3110;G;12:17:44.84;+37:23:58.9;CVn;0.27;0.22;44;16.39;;13.91;13.38;12.88;;Sb;;;;;;;;2MASX J12174479+3723584,PGC 3088320,SDSS J121744.83+372358.9,SDSS J121744.84+372358.9;;;B-Mag taken from LEDA. +IC3111;G;12:17:50.81;+08:25:49.0;Vir;0.62;0.30;18;15.50;;12.74;12.09;11.71;22.31;Sab;;;;;;;;2MASX J12175087+0825491,PGC 039464,SDSS J121750.80+082548.9,SDSS J121750.81+082549.0;;; +IC3112;G;12:17:48.36;+26:01:50.6;Com;1.14;0.57;174;15.30;;11.90;11.10;10.84;23.50;Sb;;;;;;;;2MASX J12174831+2601507,MCG +04-29-061,PGC 039450,SDSS J121748.35+260150.5;;; +IC3113;Dup;12:17:58.12;+07:11:09.3;Vir;;;;;;;;;;;;;;;4246;;;;;; +IC3114;*;12:17:56.75;+09:08:07.4;Vir;;;;;;;;;;;;;;;;;;SDSS J121756.75+090807.4;;; +IC3115;Dup;12:17:59.90;+06:39:15.1;Vir;;;;;;;;;;;;;;;4241;;;;;; +IC3116;G;12:17:57.17;+25:04:35.5;Com;0.45;0.41;19;16.50;;14.61;13.93;13.85;23.17;Sc;;;;;;;;2MASX J12175727+2504350,PGC 089574,SDSS J121757.16+250435.4;;; +IC3117;**;12:18:04.66;+09:04:35.5;Vir;;;;;;;;;;;;;;;;;;;;; +IC3118;G;12:18:11.05;+09:29:59.3;Vir;1.29;0.52;171;15.20;;;;;23.22;I;;;;;;;;MCG +02-31-083,PGC 039503,UGC 07339;;; +IC3119;G;12:18:08.48;+24:41:17.9;Com;0.57;0.51;146;15.40;;12.98;12.34;11.93;22.82;Sbc;;;;;;;;2MASX J12180846+2441180,PGC 039490,SDSS J121808.47+244117.9;;; +IC3120;G;12:18:15.35;+13:44:56.9;Com;0.64;0.54;134;15.30;;15.05;14.39;14.20;23.57;E-S0;;;;;;;;2MASX J12181523+1344570,PGC 039513,SDSS J121815.34+134456.9;;; +IC3121;GPair;12:18:17.50;+13:15:26.0;Vir;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3121 NED01;G;12:18:17.69;+13:15:23.2;Vir;0.53;0.27;129;18.10;;13.43;13.06;12.53;23.73;Sab;;;;;;;;2MASX J12181772+1315230,PGC 039512,SDSS J121817.69+131523.1,SDSS J121817.69+131523.2;;; +IC3121 NED02;G;12:18:17.36;+13:15:29.8;Vir;0.49;0.43;158;17.50;;;;;24.55;Sb;;;;;;;;PGC 039508,SDSS J121817.36+131529.7;;;B-Mag taken from LEDA. +IC3122;G;12:18:21.42;+25:13:00.5;Com;1.27;0.57;150;14.70;;11.86;11.14;11.01;23.24;Sb;;;;;;;;2MASX J12182145+2513001,MCG +04-29-062,PGC 039519,SDSS J121821.42+251300.3,SDSS J121821.42+251300.4,UGC 07341;;; +IC3123;*;12:18:27.59;+08:03:53.7;Vir;;;;8.30;7.26;5.56;5.13;4.93;;;;;;;;;;BD +08 2586,HD 107035,HIP 060013,SDSS J121827.59+080353.7,TYC 873-87-1;;; +IC3124;*;12:18:27.53;+09:35:18.2;Vir;;;;;;;;;;;;;;;;;;SDSS J121827.53+093518.2;;; +IC3125;*;12:18:25.47;+24:21:54.4;Com;;;;;;;;;;;;;;;;;;SDSS J121825.46+242154.3;;; +IC3126;G;12:18:37.16;+13:48:54.6;Com;0.50;0.38;26;16.18;;;;;23.65;Sc;;;;;;;;2MASX J12183713+1348540,PGC 1441312,SDSS J121837.15+134854.6,SDSS J121837.16+134854.6;;;B-Mag taken from LEDA. +IC3127;G;12:18:35.23;+11:52:13.5;Vir;0.52;0.45;24;15.70;;14.17;13.40;12.89;22.58;Sc;;;;;;;;2MASX J12183518+1152125,MCG +02-31-084,PGC 039546,SDSS J121835.23+115213.3,SDSS J121835.23+115213.4,SDSS J121835.23+115213.5;;; +IC3128;GTrpl;12:18:40.20;+11:44:01.0;Vir;1.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3128A;G;12:18:41.87;+11:43:54.6;Vir;0.65;0.34;156;15.20;;13.70;12.78;12.64;22.25;Sc;;;;;;;;2MASX J12184186+1143555,IRAS 12161+1200,MCG +02-31-085,PGC 039562;;ALFALFA source may include the galaxy VIII Zw 180 NOTES03.; +IC3128B;G;12:18:38.56;+11:44:06.1;Vir;0.33;0.17;179;17.60;;;;;23.98;Sb;;;;;;;;MCG +02-31-086,PGC 039557,SDSS J121838.55+114406.0,SDSS J121838.56+114406.1;;; +IC3129;*;12:18:44.96;+09:35:26.4;Vir;;;;;;;;;;;;;;;;;;SDSS J121844.96+093526.3;;; +IC3130;**;12:18:49.60;+08:13:58.7;Vir;;;;;;;;;;;;;;;;;;;;; +IC3131;G;12:18:50.89;+07:51:42.8;Vir;1.00;0.99;50;14.80;;11.63;11.11;11.09;22.86;E-S0;;;;;;3132;;2MASX J12185089+0751425,MCG +01-31-046,PGC 039583;;; +IC3132;Dup;12:18:50.89;+07:51:42.8;Vir;;;;;;;;;;;;;;;;3131;;;;; +IC3133;Other;12:18:54.56;+07:38:22.8;Vir;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +IC3134;G;12:18:56.12;+08:57:41.8;Vir;0.80;0.33;169;15.40;;12.01;11.34;10.99;22.77;S0-a;;;;;;;;2MASX J12185609+0857415,PGC 039593,SDSS J121856.11+085741.7,SDSS J121856.12+085741.7,SDSS J121856.12+085741.8;;; +IC3135;G;12:18:52.58;+27:29:29.4;Com;0.33;0.24;117;16.50;;;;;23.15;Sc;;;;;;;;PGC 089577,SDSS J121852.58+272929.4;;; +IC3136;G;12:18:57.37;+06:11:03.8;Vir;1.22;0.46;33;14.70;;11.91;11.32;10.98;23.27;SBc;;;;;;;;2MASX J12185732+0611035,MCG +01-31-048,PGC 039601,SDSS J121857.36+061103.7,SDSS J121857.37+061103.8,UGC 07349;;; +IC3137;G;12:18:54.67;+12:28:12.2;Vir;0.67;0.17;43;16.50;;14.19;13.53;13.16;23.65;Sc;;;;;;;;2MASX J12185469+1228117,PGC 039580,SDSS J121854.67+122812.2,UGC 07347;;; +IC3138;GPair;12:18:56.20;+12:26:38.0;Vir;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3138 NED01;G;12:18:56.16;+12:26:43.0;Vir;0.44;0.32;72;16.53;;;;;23.58;E;;;;;;;;PGC 213972,SDSS J121856.16+122643.0;;;B-Mag taken from LEDA. +IC3138 NED02;G;12:18:56.20;+12:26:31.6;Vir;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC3139;*;12:19:00.76;+09:07:36.4;Vir;;;;;;;;;;;;;;;;;;SDSS J121900.75+090736.4;;; +IC3140;*;12:18:57.88;+27:07:46.1;Com;;;;;;;;;;;;;;;;;;SDSS J121857.88+270746.0;;Possibly a double star?; +IC3141;G;12:18:58.44;+24:11:10.6;Com;0.89;0.51;36;15.70;;12.04;11.23;10.88;23.72;S0-a;;;;;;;;2MASX J12185844+2411105,PGC 039590,SDSS J121858.41+241110.7;;; +IC3142;GPair;12:19:03.50;+13:58:53.0;Com;1.40;;;;;;;;;;;;;;;;;UGC 07355;;;Diameter of the group inferred by the author. +IC3142 NED01;G;12:19:01.98;+13:58:56.8;Com;0.67;0.58;33;15.39;;;;;23.39;E;;;;;;;;MCG +02-31-089,PGC 039610,SDSS J121901.98+135856.8,UGC 07355 NED01;;Component 'b)' in UGC notes.;B-Mag taken from LEDA. +IC3142 NED02;G;12:19:05.15;+13:58:49.9;Com;0.86;0.37;140;15.40;;;;;22.87;IAB;;;;;;;;MCG +02-31-090,PGC 039619,SDSS J121905.38+135848.3,UGC 07355 NED02;;Identified in VCC as bright component of IC 3142. Mult. SDSS entries.; +IC3143;G;12:19:05.39;+27:17:54.3;Com;0.63;0.44;146;15.70;;13.78;13.30;13.08;23.28;Sc;;;;;;;;2MASX J12190540+2717535,PGC 039617,SDSS J121905.39+271754.3;;; +IC3144;G;12:19:09.76;+25:17:49.1;Com;0.38;0.29;29;16.50;;;;;23.16;Sbc;;;;;;;;PGC 089578,SDSS J121909.77+251749.0;;; +IC3145;*;12:19:10.49;+24:17:38.9;Com;;;;;;;;;;;;;;;;;;SDSS J121910.48+241738.9;;; +IC3146;G;12:19:12.50;+25:42:54.1;Com;0.51;0.47;54;16.77;;15.02;14.85;14.51;24.00;Sc;;;;;;;;2MASX J12191254+2542535,LEDA 089579,SDSS J121912.49+254254.0,SDSS J121912.49+254254.1;;;B-Mag taken from LEDA. +IC3147;GPair;12:19:17.90;+12:01:02.0;Vir;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3147 NED01;G;12:19:17.19;+12:00:58.3;Vir;0.66;0.39;74;15.50;;12.67;12.00;11.77;23.63;S?;;;;;;;;MCG +02-31-091,PGC 039644,SDSS J121917.19+120058.3;;; +IC3147 NED02;G;12:19:18.67;+12:01:05.5;Vir;0.51;0.33;71;15.50;;13.54;12.85;12.71;23.52;S0-a;;;;;;;;MCG +02-31-092,PGC 039643,SDSS J121918.67+120105.5;;; +IC3148;G;12:19:21.62;+07:52:13.2;Vir;0.62;0.41;42;15.30;;;;;22.93;SBm;;;;;;;;MCG +01-31-055,PGC 039658,SDSS J121921.62+075213.1;;Multiple SDSS entries describe this source.; +IC3149;G;12:19:24.21;+12:18:05.0;Vir;0.64;0.62;85;15.60;;12.80;12.01;11.61;23.01;S0-a;;;;;;;;MCG +02-31-093,PGC 039664,SDSS J121924.21+121805.0;;; +IC3150;G;12:19:28.49;+07:47:53.6;Vir;0.36;0.23;37;15.50;;;;;21.65;Sbc;;;;;;;;PGC 039673,SDSS J121928.52+074754.7;;; +IC3151;G;12:19:32.88;+09:24:51.2;Vir;0.90;0.39;115;15.10;;12.09;11.37;11.14;22.93;SBa;;;;;;;;2MASX J12193286+0924508,MCG +02-32-002,PGC 039682,SDSS J121932.87+092451.1,SDSS J121932.87+092451.2,SDSS J121932.88+092451.1,SDSS J121932.88+092451.2;;; +IC3152;G;12:19:35.99;-26:08:43.8;Hya;1.66;1.45;41;13.28;;9.99;9.38;9.08;23.30;E-S0;;;;;;;;2MASX J12193599-2608440,ESO 506-001,ESO-LV 506-0010,MCG -04-29-018,PGC 039688;;; +IC3153;G;12:19:36.84;+05:23:52.1;Vir;0.54;0.45;44;15.20;;12.75;12.14;11.85;22.28;SBbc;;;;;;;;2MASX J12193685+0523524,PGC 039693,SDSS J121936.84+052352.1,SDSS J121936.84+052352.2;;; +IC3154;G;12:19:33.99;+25:35:09.3;Com;0.61;0.44;105;15.99;;12.98;12.40;12.23;23.74;E;;;;;;;;2MASX J12193402+2535092,LEDA 3089509,SDSS J121933.98+253509.3,SDSS J121933.99+253509.3;;;B-Mag taken from LEDA. +IC3155;G;12:19:45.31;+06:00:20.7;Vir;1.00;0.46;34;15.00;;11.63;11.07;10.97;23.11;S0;;;;;;;;2MASX J12194529+0600211,MCG +01-32-003,PGC 039708,SDSS J121945.31+060021.1,SDSS J121945.32+060021.2;;; +IC3156;G;12:19:44.14;+09:08:54.9;Vir;0.72;0.49;64;15.00;;13.16;12.94;12.42;22.43;SBcd;;;;;;;;2MASX J12194408+0908548,MCG +02-32-003,PGC 039703,SDSS J121944.14+090854.8,SDSS J121944.14+090854.9;;; +IC3157;G;12:19:47.92;+12:25:19.0;Vir;0.96;0.54;109;15.50;;12.11;11.36;11.04;23.73;S0;;;;;;;;2MASX J12194788+1225191,PGC 039716,SDSS J121947.91+122518.9,SDSS J121947.92+122519.0;;; +IC3158;**;12:19:49.86;+09:17:23.1;Vir;;;;;;;;;;;;;;;;;;;;The IC identification is not certain.; +IC3159;G;12:19:53.21;+11:40:28.1;Vir;0.50;0.35;29;16.50;;;;;23.55;SBc;;;;;;;;PGC 139797,SDSS J121953.20+114028.0,SDSS J121953.20+114028.1,SDSS J121953.21+114028.1;;; +IC3160;*;12:19:59.85;+09:06:06.8;Vir;;;;;;;;;;;;;;;;;;SDSS J121959.85+090606.7;;; +IC3161;*;12:20:01.21;+08:59:56.6;Vir;;;;;;;;;;;;;;;;;;SDSS J122001.20+085956.5;;; +IC3162;*;12:20:03.13;+08:59:49.1;Vir;;;;;;;;;;;;;;;;;;SDSS J122003.13+085949.0;;; +IC3163;**;12:20:05.75;+09:15:20.2;Vir;;;;;;;;;;;;;;;;;;;;The IC identification is very uncertain.; +IC3164;**;12:20:04.89;+24:57:21.3;Com;;;;;;;;;;;;;;;;;;;;; +IC3165;G;12:20:04.77;+27:58:31.2;Com;1.00;0.63;9;14.90;;12.04;11.14;10.91;23.17;Sb;;;;;;;;2MASX J12200478+2758312,MCG +05-29-061,PGC 039749,SDSS J122004.76+275831.1,SDSS J122004.77+275831.2,UGC 07384;;; +IC3166;Other;12:19:54.00;+60:41:39.4;UMa;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3167;G;12:20:18.78;+09:32:43.3;Vir;1.35;0.78;110;15.10;;12.66;11.93;11.93;24.09;S0;;;;;;;;2MASX J12201881+0932411,PGC 039795,SDSS J122018.77+093243.3,SDSS J122018.78+093243.3;;; +IC3168;G;12:20:18.54;+27:55:13.4;Com;0.72;0.43;58;15.70;;12.91;12.20;12.03;23.31;SBbc;;;;;;;;2MASX J12201852+2755132,MCG +05-29-064,PGC 039793,SDSS J122018.54+275513.3,SDSS J122018.54+275513.4;;; +IC3169;G;12:20:21.39;+25:35:58.2;Com;0.48;0.33;136;16.57;;;;;23.80;E;;;;;;;;2MASX J12202133+2535582,SDSS J122021.38+253558.1;;;B-Mag taken from LEDA. +IC3170;G;12:20:26.55;+09:25:27.3;Vir;0.58;0.57;55;15.00;;12.72;12.08;11.60;22.23;Sbc;;;;;;;;2MASX J12202651+0925271,MCG +02-32-007,PGC 039816,SDSS J122026.54+092527.3,SDSS J122026.55+092527.3,SDSS J122026.55+092527.4;;; +IC3171;G;12:20:24.06;+25:33:38.1;Com;0.92;0.68;56;14.80;;11.50;10.76;10.56;23.28;E;;;;;;;;2MASX J12202407+2533382,MCG +04-29-065,PGC 039796,SDSS J122024.05+253338.0;;; +IC3172;G;12:20:24.55;+27:49:07.6;Com;0.68;0.49;6;16.29;;;;;23.97;Sb;;;;;;;;2MASX J12202455+2749072,SDSS J122024.53+274907.6,SDSS J122024.54+274907.6,SDSS J122024.54+274907.7;;;B-Mag taken from LEDA. +IC3173;G;12:20:30.18;+11:20:27.4;Vir;0.72;0.54;85;15.60;;12.48;11.78;11.37;23.22;Sa;;;;;;;;2MASX J12203019+1120269,PGC 039823,SDSS J122030.17+112027.3,SDSS J122030.18+112027.3,SDSS J122030.18+112027.4;;; +IC3174;G;12:20:29.53;+10:14:42.6;Vir;0.63;0.40;149;15.60;;13.25;12.36;12.11;22.74;Sab;;;;;;;;2MASX J12202950+1014419,PGC 039822,SDSS J122029.52+101442.6,SDSS J122029.53+101442.6;;; +IC3175;G;12:20:33.35;+09:51:12.3;Vir;0.83;0.39;53;15.50;;12.35;11.62;11.40;22.86;Sb;;;;;;;;2MASX J12203338+0951119,PGC 039831,SDSS J122033.35+095112.2,SDSS J122033.36+095112.3;;; +IC3176;G;12:20:30.08;+25:30:55.5;Com;0.67;0.26;151;16.33;;;;;24.24;E;;;;;;;;2MASX J12203006+2530553,SDSS J122030.07+253055.4,SDSS J122030.07+253055.5;;;B-Mag taken from LEDA. +IC3177;Other;12:20:34.33;+14:07:39.4;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3178;*;12:20:35.06;+26:10:09.5;Com;;;;;;;;;;;;;;;;;;SDSS J122035.05+261009.4;;; +IC3179;G;12:20:37.73;+26:09:55.4;Com;0.32;0.32;123;16.50;;14.37;13.80;13.38;23.02;Sbc;;;;;;;;2MASX J12203774+2609554,PGC 089585;;; +IC3180;Other;12:20:23.74;+60:41:39.6;UMa;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3181;Dup;12:20:42.09;+29:20:45.2;Com;;;;;;;;;;;;;;;4286;;;;;; +IC3182;**;12:20:47.76;+12:43:48.5;Vir;;;;;;;;;;;;;;;;;;;;; +IC3183;**;12:20:48.87;+06:41:12.2;Vir;;;;;;;;;;;;;;;;;;SDSS J122048.87+064112.1;;; +IC3184;G;12:20:46.80;+24:54:56.1;Com;0.77;0.39;42;15.60;;13.17;12.52;12.18;23.24;Sbc;;;;;;;;2MASX J12204678+2454554,PGC 039847,SDSS J122046.79+245456.0;;; +IC3185;G;12:20:52.68;+25:25:46.9;Com;0.68;0.22;106;15.70;;13.81;13.30;12.89;23.20;Sbc;;;;;;;;2MASX J12205266+2525474,PGC 039874,SDSS J122052.67+252546.8;;; +IC3186;G;12:20:55.88;+24:40:06.9;Com;0.53;0.41;155;15.00;;12.44;11.79;11.48;22.23;Sb;;;;;;;;2MASX J12205567+2440084,MCG +04-29-066,PGC 039875,SDSS J122055.88+244006.8,SDSS J122055.88+244006.9;;; +IC3187;G;12:20:54.68;+11:09:42.5;Vir;0.69;0.42;101;15.60;;13.14;12.86;12.06;23.06;Sbc;;;;;;;;2MASX J12205466+1109429,PGC 039871,SDSS J122054.67+110942.5,SDSS J122054.68+110942.5;;; +IC3188;G;12:20:55.10;+11:00:32.0;Vir;0.77;0.55;54;15.10;;12.61;11.93;11.63;22.75;Sc;;;;;;;;2MASX J12205506+1100319,MCG +02-32-008,PGC 039872,SDSS J122055.09+110032.0;;; +IC3189;G;12:20:56.32;+25:25:35.5;Com;0.60;0.30;111;16.24;;;;;23.34;Sbc;;;;;;;;2MASX J12205628+2525354,PGC 3098279,SDSS J122056.31+252535.4,SDSS J122056.31+252535.5;;;B-Mag taken from LEDA. +IC3190;*;12:21:02.41;+09:34:11.2;Vir;;;;;;;;;;;;;;;;;;SDSS J122102.40+093411.1;;; +IC3191;*;12:21:05.15;+07:42:15.9;Vir;;;;;;;;;;;;;;;;;;SDSS J122105.14+074215.8;;; +IC3192;G;12:21:04.81;+11:45:16.6;Vir;0.58;0.45;170;16.11;;;;;23.75;E;;;;;;;;PGC 039893,SDSS J122104.80+114516.5,SDSS J122104.80+114516.6;;;B-Mag taken from LEDA. +IC3193;G;12:21:01.28;+27:53:55.6;Com;0.98;0.38;132;15.70;;12.78;12.29;12.18;23.60;Sbc;;;;;;;;2MASX J12210131+2753548,MCG +05-29-067,PGC 039870;;; +IC3194;G;12:21:09.00;+25:08:00.6;Com;0.57;0.43;172;16.37;;;;;24.00;E;;;;;;;;2MASX J12210897+2508008,SDSS J122109.00+250800.5;;;B-Mag taken from LEDA. +IC3195;G;12:21:17.43;+25:48:29.8;Com;0.52;0.46;44;16.38;;;;;23.84;E;;;;;;;;2MASX J12211739+2548298,SDSS J122117.42+254829.7;;;B-Mag taken from LEDA. +IC3196;G;12:21:26.63;+11:45:28.0;Vir;0.53;0.41;88;16.43;;13.08;12.53;12.22;23.60;Sbc;;;;;;;;2MASX J12212664+1145279,PGC 165092,SDSS J122126.62+114528.0,SDSS J122126.63+114528.0;;;B-Mag taken from LEDA. +IC3197;*;12:21:25.90;+25:26:38.0;Com;;;;;;;;;;;;;;;;;;SDSS J122125.90+252637.9;;; +IC3198;*;12:21:31.14;+26:21:58.7;Com;;;;;;;;;;;;;;;;;;SDSS J122131.14+262158.7;;; +IC3199;G;12:21:45.60;+10:35:44.3;Vir;1.00;0.52;2;15.40;;11.89;11.23;10.99;23.38;SBab;;;;;;;;2MASX J12214563+1035438,PGC 039983,SDSS J122145.60+103544.2,SDSS J122145.60+103544.3,UGC 07417;;; +IC3200;G;12:21:37.19;+26:45:38.8;Com;0.53;0.39;6;16.46;;;;;23.94;E;;;;;;;;2MASX J12213715+2645385,SDSS J122137.18+264538.7,SDSS J122137.19+264538.8;;;B-Mag taken from LEDA. +IC3201;G;12:21:40.37;+25:43:33.6;Com;0.40;0.25;111;17.05;;13.81;13.05;12.69;23.42;Sc;;;;;;;;2MASX J12214041+2543325,LEDA 3089427,SDSS J122140.37+254333.6;;;B-Mag taken from LEDA. +IC3202;G;12:21:44.33;+27:03:25.6;Com;0.67;0.55;130;16.69;;13.02;12.39;11.85;24.67;E;;;;;;;;2MASX J12214431+2703255,LEDA 3089316,SDSS J122144.32+270325.5,SDSS J122144.32+270325.6,SDSS J122144.33+270325.6;;;B-Mag taken from LEDA. +IC3203;G;12:21:45.63;+25:53:04.8;Com;1.31;0.22;146;15.70;;11.70;10.84;10.53;23.55;Sb;;;;;;;;2MASX J12214567+2553045,MCG +04-29-067,PGC 039984,SDSS J122145.62+255304.7,UGC 07419;;; +IC3204;G;12:21:50.43;+24:14:56.8;Com;0.52;0.30;108;16.50;;14.42;13.56;13.15;23.67;Sbc;;;;;;;;2MASX J12215043+2414565,LEDA 089593,SDSS J122150.42+241456.7,SDSS J122150.43+241456.7;;; +IC3205;G;12:21:50.94;+26:20:27.6;Com;0.62;0.52;113;15.70;;12.09;11.26;11.00;23.40;E;;;;;;;;2MASX J12215094+2620275,PGC 039989,SDSS J122150.93+262027.5,SDSS J122150.94+262027.5,SDSS J122150.94+262027.6;;; +IC3206;G;12:21:51.31;+26:21:48.9;Com;0.53;0.31;106;15.70;;13.93;13.22;12.92;22.95;Sc;;;;;;;;2MASX J12215132+2621485,PGC 039988,SDSS J122151.30+262148.8,SDSS J122151.31+262148.8,SDSS J122151.31+262148.9;;; +IC3207;G;12:21:52.23;+24:21:16.4;Com;0.79;0.31;91;16.37;;;;;24.05;Sab;;;;;;;;2MASX J12215219+2421165,SDSS J122152.22+242116.4,SDSS J122152.23+242116.4;;;B-Mag taken from LEDA. +IC3208;G;12:21:55.58;+11:58:00.6;Vir;0.98;0.40;78;15.96;;;;;23.85;IB;;;;;;;;PGC 040005,SDSS J122155.57+115800.5,SDSS J122155.58+115800.5,SDSS J122155.58+115800.6,UGC 07421;;;B-Mag taken from LEDA. +IC3209;G;12:22:06.15;+11:45:17.0;Vir;1.00;0.36;151;15.30;;12.36;11.65;11.38;22.91;Sc;;;;;;;;2MASX J12220613+1145167,PGC 040038,SDSS J122206.14+114516.9,SDSS J122206.15+114517.0;;; +IC3210;G;12:22:00.98;+28:25:51.9;Com;0.66;0.50;85;15.50;;12.30;11.69;11.34;23.20;S0-a;;;;;;;;2MASX J12220096+2825515,MCG +05-29-070,PGC 039987,SDSS J122200.98+282551.8,SDSS J122200.99+282551.9;;; +IC3211;Dup;12:22:07.32;+08:59:26.0;Vir;;;;;;;;;;;;;;;4307A;;;;;; +IC3212;G;12:22:03.40;+28:11:09.6;Com;0.71;0.65;110;15.70;;12.96;12.55;12.26;23.47;Sc;;;;;;;;2MASX J12220335+2811095,MCG +05-29-071,PGC 040036,SDSS J122203.39+281109.5,SDSS J122203.40+281109.6;;; +IC3213;G;12:22:07.67;+23:52:10.6;Com;0.49;0.28;175;15.70;;12.12;11.34;11.03;;E-S0;;;;;;;;2MASX J12220764+2352106,IRAS 12195+2409,PGC 040042,SDSS J122207.67+235210.6;;; +IC3214;*;12:22:09.11;+27:14:06.3;Com;;;;;;;;;;;;;;;;;;SDSS J122209.11+271406.3;;; +IC3215;G;12:22:10.38;+26:03:07.0;Com;1.27;0.35;93;15.70;;;;;23.76;Sd;;;;;;;;MCG +04-29-068,PGC 040040,SDSS J122210.18+260307.7,UGC 07434;;; +IC3216;G;12:22:11.81;+25:17:12.1;Com;0.52;0.40;104;16.52;;;;;23.68;SBab;;;;;;;;2MASX J12221180+2517121,SDSS J122211.80+251712.0,SDSS J122211.81+251712.0;;;B-Mag taken from LEDA. +IC3217;G;12:22:13.07;+26:23:16.9;Com;0.41;0.23;40;17.53;;;;;23.86;Scd;;;;;;;;2MASX J12221301+2623161,SDSS J122213.07+262316.8,SDSS J122213.07+262316.9;;The IC number includes a nearby star.;B-Mag taken from LEDA +IC3218;G;12:22:19.52;+06:55:40.5;Vir;0.64;0.56;74;15.60;;13.50;12.98;13.38;23.57;E;;;;;;;;2MASX J12221947+0655398,MCG +01-32-026,PGC 040067,SDSS J122219.52+065540.4,SDSS J122219.52+065540.5;;The IC number includes a nearby star.; +IC3219;G;12:22:15.03;+25:57:04.8;Com;0.84;0.25;5;16.45;;;;;23.84;Sc;;;;;;;;2MASX J12221498+2557051,SDSS J122215.02+255704.8,SDSS J122215.03+255704.8;;;B-Mag taken from LEDA. +IC3220;G;12:22:21.59;+10:36:07.1;Vir;1.05;0.48;4;15.95;;;;;24.85;E;;;;;;;;PGC 040074;;;B-Mag taken from LEDA. +IC3221;G;12:22:20.15;+25:17:01.6;Com;0.57;0.27;128;17.14;;;;;24.09;Sbc;;;;;;;;2MASX J12222013+2517012,SDSS J122220.14+251701.5;;;B-Mag taken from LEDA. +IC3222;G;12:22:19.47;+28:49:53.7;Com;0.59;0.36;16;15.99;15.10;12.88;12.23;11.86;23.12;Sc;;;;;;;;2MASX J12221942+2849541,IRAS 12198+2906,MCG +05-29-073,PGC 040065,SDSS J122219.46+284953.7,SDSS J122219.47+284953.7,UGC 07437;;; +IC3223;Other;12:22:30.61;+09:29:14.1;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3224;G;12:22:35.91;+12:09:28.9;Vir;0.38;0.31;51;16.30;;;;;22.74;I;;;;;;;;PGC 040100,SDSS J122235.91+120928.9;;;B-Mag taken from LEDA. +IC3225;G;12:22:38.99;+06:40:37.4;Vir;0.91;0.40;34;14.90;;12.87;12.31;12.38;22.21;Sd;;;;;;;;2MASX J12223914+0640421,2MASX J12223988+0640491,MCG +01-32-028,PGC 040111,SDSS J122238.99+064037.3,SDSS J122239.00+064037.4,UGC 07441;;; +IC3226;*;12:22:34.95;+26:04:02.4;Com;;;;;;;;;;;;;;;;;;SDSS J122234.94+260402.3;;The IC number may include the neighboring star about 20 arcsec southwest.; +IC3227;G;12:22:35.66;+24:05:06.5;Com;0.46;0.22;169;16.52;;14.95;14.25;14.18;23.55;S0;;;;;;;;2MASX J12223570+2405063,PGC 040093,SDSS J122235.65+240508.0;;;B-Mag taken from LEDA. +IC3228;G;12:22:39.38;+24:19:48.3;Com;1.11;0.25;141;16.19;;13.41;12.63;12.37;24.05;Sc;;;;;;;;2MASX J12223933+2419483,SDSS J122239.37+241948.3,SDSS J122239.38+241948.3;;;B-Mag taken from LEDA. +IC3229;G;12:22:52.80;+06:40:47.5;Vir;1.23;0.41;43;15.00;;13.78;12.87;12.85;23.59;SBbc;;;;;;;;2MASX J12225276+0640501,MCG +01-32-030,PGC 040147,SDSS J122252.79+064047.5,SDSS J122252.80+064047.5,UGC 07448;;; +IC3230;G;12:22:39.68;+27:44:49.1;Com;0.44;0.32;101;16.41;;14.85;14.19;14.02;23.16;Sc;;;;;;;;2MASX J12223954+2744493,PGC 040113,SDSS J122239.67+274449.1,SDSS J122239.68+274449.1;;;B-Mag taken from LEDA. +IC3231;G;12:22:43.78;+24:49:13.7;Com;0.65;0.47;0;;;;;;;Sc;;;;;;;;PGC 089595,SDSS J122243.77+244913.7;;; +IC3232;*;12:22:47.79;+24:25:28.3;Com;;;;;;;;;;;;;;;;;;;;; +IC3233;G;12:22:54.89;+12:34:00.4;Vir;0.69;0.34;90;15.50;;13.62;13.16;12.88;23.99;S?;;;;;;;;2MASX J12225487+1234006,SDSS J122254.89+123400.2,SDSS J122254.89+123400.3,SDSS J122254.89+123400.4;;; +IC3234;G;12:22:52.16;+28:06:45.1;Com;0.42;0.38;82;16.93;;;;;23.73;Sa;;;;;;;;2MASX J12225212+2806453,SDSS J122252.15+280645.1,SDSS J122252.16+280645.0;;;B-Mag taken from LEDA. +IC3235;G;12:22:57.90;+13:32:44.8;Com;0.62;0.33;146;16.10;;14.31;14.29;13.74;23.83;Sc;;;;;;;;2MASX J12225786+1332446,PGC 040155,SDSS J122257.90+133244.8;;; +IC3236;G;12:23:00.23;+10:06:04.4;Vir;0.42;0.23;132;16.46;;14.33;13.93;12.60;23.06;Sc;;;;;;;;2MASX J12230017+1006040,PGC 1374570,SDSS J122300.23+100604.4;;;B-Mag taken from LEDA +IC3237;G;12:22:58.01;+28:29:39.0;Com;0.47;0.32;67;15.89;;;;;23.11;Sbc;;;;;;;;2MASX J12225797+2829383,PGC 1837411,SDSS J122258.00+282938.9,SDSS J122258.01+282939.0;;;B-Mag taken from LEDA +IC3238;G;12:23:06.38;+14:27:30.0;Com;0.67;0.47;11;15.20;;12.12;11.39;11.10;22.54;S0;;;;;;;;2MASX J12230637+1427299,MCG +03-32-017,PGC 040182,SDSS J122306.37+142729.9;;; +IC3239;G;12:23:09.57;+11:43:33.6;Vir;0.78;0.30;147;15.60;;;13.59;;23.52;Scd;;;;;;;;PGC 040187,SDSS J122309.57+114333.6,SDSS J122309.58+114333.5;;; +IC3240;G;12:23:07.32;+10:21:44.2;Vir;0.46;0.31;77;16.54;;13.29;12.96;12.19;23.32;Sbc;;;;;;;;2MASX J12230735+1021440,PGC 165116,SDSS J122307.32+102144.2;;;B-Mag taken from LEDA +IC3241;G;12:23:08.44;+26:54:19.0;Com;0.67;0.49;17;16.33;;12.93;12.37;11.95;24.32;E;;;;;;;;2MASX J12230841+2654187,LEDA 3089318,SDSS J122308.43+265419.0,SDSS J122308.44+265419.0;;;B-Mag taken from LEDA. +IC3242;G;12:23:10.44;+26:14:56.0;Com;0.63;0.38;158;16.48;;;;;23.85;Sb;;;;;;;;2MASX J12231046+2614557,SDSS J122310.44+261456.0;;;B-Mag taken from LEDA. +IC3243;G;12:23:11.33;+27:45:56.5;Com;0.75;0.36;62;15.70;;13.08;12.48;12.26;23.33;Sbc;;;;;;;;2MASX J12231129+2745567,PGC 040197,SDSS J122311.32+274556.4,SDSS J122311.33+274556.5;;; +IC3244;G;12:23:12.26;+14:23:20.3;Com;0.77;0.61;80;15.30;;12.74;11.92;11.73;22.97;Sc;;;;;;;;2MASX J12231223+1423199,IRAS 12206+1439,MCG +03-32-018,PGC 040196,SDSS J122312.26+142320.2,SDSS J122312.26+142320.3;;; +IC3245;Other;12:23:17.71;+09:07:46.4;Vir;;;;;;;;;;;;;;;;;;;;This is a defect on the original Harvard plate.; +IC3246;G;12:23:17.15;+13:03:06.6;Vir;0.54;0.48;43;16.32;;13.35;12.66;12.67;23.63;SBbc;;;;;;;;2MASX J12231716+1303069,PGC 040202,SDSS J122317.14+130306.5,SDSS J122317.15+130306.6;;;B-Mag taken from LEDA. +IC3247;G;12:23:13.99;+28:53:37.5;Com;1.86;0.26;174;15.60;;13.34;12.47;12.12;24.38;Sc;;;;;;;;2MASX J12231393+2853387,MCG +05-29-077,PGC 040205,SDSS J122313.99+285337.5,UGC 07459;;; +IC3248;*;12:23:16.88;+25:33:07.3;Com;;;;;;;;;;;;;;;;;;SDSS J122316.87+253307.3;;; +IC3249;G;12:23:17.93;+25:26:40.8;Com;0.37;0.21;13;16.79;;;;;;E;;;;;;;;SDSS J122317.93+252640.7;;"Brightest in a group; cD?";B-Mag taken from LEDA. +IC3250;*;12:23:17.82;+25:37:43.7;Com;;;;;;;;;;;;;;;;;;SDSS J122317.82+253743.6;;; +IC3251;*;12:23:18.89;+25:39:12.2;Com;;;;;;;;;;;;;;;;;;SDSS J122318.88+253912.1;;; +IC3252;**;12:23:24.92;+28:37:05.6;Com;;;;;;;;;;;;;;;;;;;;; +IC3253;G;12:23:45.22;-34:37:19.9;Cen;3.02;1.20;24;12.81;11.62;10.08;9.38;9.11;22.99;Sc;;;;;;;;2MASX J12234523-3437198,ESO 380-024,ESO-LV 380-0240,IRAS 12211-3420,MCG -06-27-021,PGC 040265;;; +IC3254;Dup;12:23:29.83;+19:25:36.9;Com;;;;;;;;;;;;;;;4336;;;;;; +IC3255;G;12:23:34.74;+09:38:55.0;Vir;0.60;0.49;101;15.30;;12.69;11.97;11.95;22.25;SBbc;;;;;;;;2MASX J12233474+0938551,IRAS 12210+0955,PGC 040241,SDSS J122334.64+093903.5;;; +IC3256;Dup;12:23:39.00;+07:03:14.4;Vir;;;;;;;;;;;;;;;4342;;;;;; +IC3257;Other;12:23:44.71;+07:15:13.6;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3258;G;12:23:44.47;+12:28:42.0;Vir;1.35;1.09;88;14.30;;15.18;14.81;14.80;22.98;IB;;;;;;;;2MASX J12234449+1228420,IRAS 12211+1245,MCG +02-32-021,PGC 039911,PGC 040264,SDSS J122344.46+122841.9,UGC 07470;;Multiple SDSS entries describe this object.; +IC3259;G;12:23:48.52;+07:11:12.6;Vir;1.64;0.83;18;14.70;;12.07;11.47;11.06;23.45;SABd;;;;;;;;2MASX J12234849+0711071,MCG +01-32-040,PGC 040273,SDSS J122348.52+071112.6,UGC 07469;;"CGCG misprints R.A. as 12h21.2m; corrected in CGCG errata in vol III."; +IC3260;Dup;12:23:53.56;+07:06:25.6;Vir;;;;;;;;;;;;;;;4341;;;;;; +IC3261;G;12:23:52.50;+11:28:52.7;Vir;0.47;0.24;110;17.21;;;;;23.91;SBab;;;;;;;;2MASX J12235252+1128521,PGC 169197,SDSS J122352.49+112852.6,SDSS J122352.50+112852.7;;The IC identification is not certain.;B-Mag taken from LEDA. +IC3262;G;12:23:48.17;+27:23:39.4;Com;0.77;0.38;149;15.30;;12.33;11.65;11.35;23.06;SBab;;;;;;;;2MASX J12234820+2723391,PGC 040271,SDSS J122348.16+272339.3,SDSS J122348.17+272339.4;;; +IC3263;G;12:23:50.59;+28:11:58.2;Com;0.60;0.57;57;15.10;;12.33;11.72;11.47;22.70;SBbc;;;;;;;;2MASX J12235054+2811581,MCG +05-29-078,PGC 040270,SDSS J122350.58+281158.1,SDSS J122350.59+281158.2;;; +IC3264;G;12:23:51.95;+25:33:26.6;Com;0.59;0.36;145;16.72;;;;;24.39;E;;;;;;;;2MASX J12235191+2533261,SDSS J122351.94+253326.5,SDSS J122351.94+253326.6;;;B-Mag taken from LEDA. +IC3265;*;12:23:58.83;+07:48:13.6;Vir;;;;;;;;;;;;;;;;;;SDSS J122358.83+074813.6;;; +IC3266;Dup;12:24:00.26;+07:47:06.7;Vir;;;;;;;;;;;;;;;4353;;;;;; +IC3267;G;12:24:05.53;+07:02:28.6;Vir;1.21;1.17;30;14.60;;11.90;11.37;10.95;23.25;Sc;;;;;;;;2MASX J12240554+0702288,MCG +01-32-044,PGC 040317,SDSS J122405.52+070228.6,SDSS J122405.53+070228.6,UGC 07474;;"CGCG misprints R.A. as 12h21.5m; corrected in CGCG errata in vol III."; +IC3268;G;12:24:07.44;+06:36:26.9;Vir;1.00;0.80;12;14.20;;12.13;11.65;11.49;22.32;I;;;;;;;;2MASX J12240743+0636268,IRAS 12215+0653,MCG +01-32-045,PGC 040321,SDSS J122407.38+063630.9,UGC 07477;;HOLM 392B is a star.; +IC3269;G;12:24:04.40;+27:26:05.2;Com;0.75;0.43;167;16.48;;;;;24.19;Sb;;;;;;;;2MASX J12240435+2726050,SDSS J122404.40+272605.1,SDSS J122404.40+272605.2;;;B-Mag taken from LEDA. +IC3270;G;12:24:05.85;+27:34:40.4;Com;0.61;0.52;128;16.34;;;;;23.89;SBb;;;;;;;;2MASX J12240587+2734400,SDSS J122405.84+273440.4,SDSS J122405.85+273440.4;;;B-Mag taken from LEDA. +IC3271;G;12:24:13.93;+07:57:10.7;Vir;0.79;0.71;102;15.00;;13.31;12.72;12.01;22.81;SABc;;;;;;;;2MASX J12241393+0757118,MCG +01-32-047,PGC 040337,SDSS J122413.91+075710.8,SDSS J122413.92+075710.7,SDSS J122413.93+075710.7,UGC 07481;;; +IC3272;G;12:24:09.31;+23:17:04.7;Com;0.51;0.25;153;16.81;;;;;23.45;Sbc;;;;;;;;2MASX J12240926+2317041,PGC 1684676,SDSS J122409.30+231704.6;;;B-Mag taken from LEDA. +IC3273;Dup;12:24:14.53;+08:32:09.1;Vir;;;;;;;;;;;;;;;4356;;;;;; +IC3274;Dup;12:24:14.72;+09:16:00.7;Vir;;;;;;;;;;;;;;;4360B;;;;;; +IC3275;G;12:24:19.48;+10:26:46.8;Vir;0.53;0.35;89;16.49;;13.46;12.98;12.47;23.59;Sc;;;;;;;;2MASX J12241948+1026468,PGC 165137,SDSS J122419.47+102646.7,SDSS J122419.47+102646.8,SDSS J122419.48+102646.7,SDSS J122419.48+102646.8;;;B-Mag taken from LEDA. +IC3276;G;12:24:14.10;+25:49:07.6;Com;0.57;0.43;102;16.49;;;;;24.13;E;;;;;;;;2MASX J12241409+2549072,SDSS J122414.08+254907.9;;;B-Mag taken from LEDA. +IC3277;Other;12:24:15.71;+25:33:50.4;Com;;;;;;;;;;;;;;;;;;;;;NED lists this object as type G, but listed as Unknown in LEDA. +IC3278;GTrpl;12:24:14.96;+27:25:14.9;Com;0.90;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3278 NED01;G;12:24:14.35;+27:25:24.5;Com;0.36;0.32;9;17.69;;;;;24.10;Sb;;;;;;;;SDSS J122414.34+272524.4,SDSS J122414.35+272524.5;;;B-Mag taken from LEDA +IC3278 NED02;G;12:24:15.06;+27:25:23.7;Com;0.54;0.49;10;16.71;;;;;24.23;E;;;;;;;;2MASX J12241505+2725232,SDSS J122415.05+272523.7,SDSS J122415.06+272523.7;;;B-Mag taken from LEDA +IC3278 NED03;G;12:24:15.44;+27:25:06.5;Com;0.43;0.30;86;16.50;;;;;23.34;SBbc;;;;;;;;PGC 040345,SDSS J122415.44+272506.5;;; +IC3279;**;12:24:24.03;+12:51:08.8;Vir;;;;;;;;;;;;;;;;;;SDSS J122424.02+125108.8;;; +IC3280;G;12:24:26.74;+13:14:00.4;Vir;0.70;0.57;38;16.40;;12.99;12.21;12.10;22.95;Sbc;;;;;;;;2MASX J12242675+1313595,MCG +02-32-030,PGC 040372,SDSS J122426.74+131400.3,SDSS J122426.74+131400.4;;; +IC3281;Other;12:24:27.91;+07:49:08.9;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3282;*;12:24:28.05;+25:40:14.3;Com;;;;;;;;;;;;;;;;;;SDSS J122428.05+254014.2;;; +IC3283;G;12:24:28.02;+27:12:40.5;Com;0.68;0.32;46;;;;;;23.86;Sb;;;;;;;;2MASX J12242804+2712403,PGC 3788276,SDSS J122428.01+271240.4,SDSS J122428.02+271240.5;;; +IC3284;G;12:24:37.56;+10:50:20.5;Vir;0.55;0.50;137;15.60;;13.00;12.18;11.93;22.69;SBab;;;;;;;;2MASX J12243754+1050203,PGC 040400,SDSS J122437.55+105020.5,SDSS J122437.56+105020.5,SDSS J122437.57+105020.5;;; +IC3285;*;12:24:33.49;+24:51:34.8;Com;;;;;;;;;;;;;;;;;;SDSS J122433.49+245134.7;;; +IC3286;G;12:24:34.48;+23:44:52.4;Com;0.49;0.40;69;16.11;;;;;23.41;E;;;;;;;;2MASX J12243449+2344522,PGC 1692968,SDSS J122434.47+234452.3;;;B-Mag taken from LEDA. +IC3287;G;12:24:36.96;+24:35:41.0;Com;0.21;0.19;16;17.60;;;;;;;;;;;;;;SDSS J122436.92+243539.5;;;B-Mag taken from LEDA. +IC3288;G;12:24:39.41;+24:56:59.5;Com;0.55;0.36;131;16.31;;;;;23.84;E;;;;;;;;2MASX J12243940+2456592,SDSS J122439.40+245659.5;;;B-Mag taken from LEDA. +IC3289;G;12:24:57.45;-26:01:50.6;Hya;1.15;1.08;28;14.07;;10.64;9.96;9.69;23.22;S0;;;;;;;;2MASX J12245743-2601508,ESO 506-007,ESO-LV 506-0070,MCG -04-29-023,PGC 040446;;; +IC3290;G;12:25:08.96;-39:46:31.8;Cen;2.22;1.49;36;12.97;;9.99;9.36;9.00;23.91;S0-a;;;;;;;;2MASX J12250897-3946317,ESO 322-004,ESO-LV 322-0040,MCG -06-27-024,PGC 040470;;; +IC3291;G;12:24:48.41;+12:01:06.6;Vir;0.57;0.37;80;16.46;;13.07;12.40;12.14;23.76;Sa;;;;;;;;2MASX J12244836+1201063,LEDA 165140,SDSS J122448.40+120106.6,SDSS J122448.41+120106.6;;;B-Mag taken from LEDA. +IC3292;G;12:24:48.36;+18:11:42.4;Com;1.09;0.82;134;15.50;;12.55;11.93;11.83;23.96;S0;;;;;;;;2MASX J12244836+1811422,PGC 040425,SDSS J122448.35+181142.4,SDSS J122448.36+181142.4;;; +IC3293;G;12:24:53.51;+17:25:56.7;Com;0.69;0.44;65;16.31;;;;;23.88;SBbc;;;;;;;;2MASX J12245354+1725573,SDSS J122453.51+172556.6,SDSS J122453.51+172556.7;;;B-Mag taken from LEDA. +IC3294;G;12:24:49.73;+25:35:50.9;Com;0.38;0.29;2;17.28;;;;;24.02;E;;;;;;;;2MASX J12244975+2535506,SDSS J122449.72+253550.9;;;B-Mag taken from LEDA +IC3295;Other;12:24:48.98;+28:42:28.2;Com;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC3296;G;12:24:57.84;+24:22:58.3;Com;0.49;0.35;101;15.60;;12.44;11.72;11.43;22.84;E;;;;;;;;2MASX J12245778+2422586,PGC 040450,SDSS J122457.83+242258.2,SDSS J122457.83+242258.3;;; +IC3297;*;12:24:58.14;+26:46:16.3;Com;;;;;;;;;;;;;;;;;;SDSS J122458.13+264616.2;;; +IC3298;G;12:25:03.80;+17:00:55.2;Com;1.28;0.37;156;15.30;;13.15;12.20;12.34;23.46;SBcd;;;;;;;;MCG +03-32-024,PGC 040458;;; +IC3299;G;12:25:03.14;+27:22:28.1;Com;0.60;0.41;36;17.20;;13.53;12.71;12.53;24.24;SBbc;;;;;;;;2MASX J12250313+2722286,LEDA 3089319,SDSS J122503.13+272228.0,SDSS J122503.14+272228.1;;;B-Mag taken from LEDA. +IC3300;G;12:25:04.98;+25:57:27.2;Com;1.15;0.30;80;15.30;;12.22;11.55;11.15;23.05;Sc;;;;;;;;2MASX J12250498+2557266,MCG +04-29-070,PGC 040459,SDSS J122504.97+255727.1,UGC 07495;;; +IC3301;G;12:25:17.54;+14:10:21.2;Com;0.52;0.40;31;16.12;;14.10;13.71;13.38;23.58;E;;;;;;3307;;2MASX J12251758+1410230,PGC 040491,SDSS J122517.53+141021.2,SDSS J122517.54+141021.2;;;B-Mag taken from LEDA. +IC3302;G;12:25:10.43;+25:52:47.3;Com;0.37;0.35;29;16.98;;;;;23.53;Sc;;;;;;;;2MASX J12251047+2552476,SDSS J122510.42+255247.2;;;B-Mag taken from LEDA. +IC3303;G;12:25:15.20;+12:42:52.6;Vir;0.95;0.55;70;15.10;14.24;12.66;11.73;11.95;23.73;E;;;;;;;;2MASX J12251519+1242519,MCG +02-32-035,PGC 040485,SDSS J122515.20+124252.6,UGC 07500;;; +IC3304;G;12:25:11.72;+25:25:27.4;Com;0.24;0.17;92;18.61;;;;;24.29;;;;;;;;;;;;B-Mag taken from LEDA. +IC3305;G;12:25:14.50;+11:50:58.6;Vir;1.08;0.44;41;15.12;;13.59;13.11;12.95;23.86;E;;;;;;;;2MASX J12251449+1150584,MCG +02-32-036,PGC 040488,SDSS J122514.50+115058.5,UGC 07499;;; +IC3306;G;12:25:12.48;+27:24:08.5;Com;0.94;0.32;142;16.15;;;;;23.95;Sbc;;;;;;;;2MASX J12251245+2724086,SDSS J122512.48+272408.4,SDSS J122512.48+272408.5;;;B-Mag taken from LEDA. +IC3307;Dup;12:25:17.54;+14:10:21.2;Com;;;;;;;;;;;;;;;;3301;;;;; +IC3308;G;12:25:18.21;+26:42:54.4;Com;0.58;0.28;64;15.40;;;;;22.54;Sd;;;;;;;;MCG +05-29-081,PGC 040495,UGC 07505;;; +IC3309;G;12:25:20.13;+28:22:51.6;Com;1.00;0.37;87;15.70;;;;;23.80;Sc;;;;;;;;MCG +05-29-082,PGC 040501,SDSS J122520.13+282251.6,UGC 07509;;; +IC3310;*;12:25:55.30;+15:40:49.9;Com;;;;;;;;;;;;;;;;;;;;Superposed on the northwestern arm of NGC 4396.; +IC3311;G;12:25:33.11;+12:15:37.2;Vir;1.85;0.44;134;14.87;;13.09;11.81;12.01;23.52;Scd;;;;;;;;2MASX J12253310+1215370,MCG +02-32-038,PGC 040530,SDSS J122533.00+121538.0,SDSS J122533.35+121533.3,UGC 07510;;; +IC3312;G;12:25:29.90;+23:34:53.9;Com;0.50;0.30;157;17.05;;;;;24.37;E;;;;;;;;2MASX J12252986+2334538,SDSS J122529.89+233453.8;;;B-Mag taken from LEDA +IC3313;G;12:25:36.44;+15:49:47.4;Com;1.34;1.27;179;15.60;;;10.83;;23.72;E;;;;;;;;MCG +03-32-033,PGC 040551,SDSS J122536.42+154947.3,SDSS J122536.43+154947.4,SDSS J122536.44+154947.4;;; +IC3314;G;12:25:31.49;+23:35:27.8;Com;0.53;0.47;19;16.26;;12.66;12.10;11.61;23.68;E;;;;;;;;2MASX J12253146+2335278,LEDA 1690073,SDSS J122531.48+233527.7,SDSS J122531.49+233527.7;;;B-Mag taken from LEDA. +IC3315;G;12:25:38.93;+12:18:49.5;Vir;0.60;0.49;85;15.90;;;;;23.67;E;;;;;;;;PGC 040556,SDSS J122538.92+121849.5,SDSS J122538.93+121849.5;;;B-Mag taken from LEDA. +IC3316;G;12:25:36.15;+26:09:47.7;Com;0.46;0.40;96;16.55;;;;;23.83;Sc;;;;;;;;LEDA 089598,SDSS J122536.14+260947.7;;;B-Mag taken from LEDA. +IC3317;G;12:25:38.91;+25:20:38.1;Com;0.52;0.48;14;17.16;;;;;24.62;E;;;;;;;;SDSS J122538.91+252038.1;;;B-Mag taken from LEDA. +IC3318;*;12:25:49.85;+09:45:46.1;Vir;;;;12.67;11.44;9.50;8.94;8.78;;;;;;;;;;2MASS J12254984+0945460,SDSS J122549.85+094546.0,TYC 874-225-1,UCAC3 200-124833;;;Variable star - Classical Cepheid. +IC3319;Other;12:25:50.93;+10:23:27.6;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3320;Dup;12:25:50.67;+10:27:32.6;Vir;;;;;;;;;;;;;;;4390;;;;;; +IC3321;G;12:25:46.18;+26:04:57.1;Com;0.71;0.32;8;16.55;;;;;24.70;E;;;;;;;;2MASX J12254617+2604571,SDSS J122546.17+260456.9;;;B-Mag taken from LEDA. +IC3322;G;12:25:54.10;+07:33:17.2;Vir;2.33;0.65;156;14.70;;11.37;10.68;10.47;23.57;SABc;;;;;;;;2MASX J12255412+0733173,IRAS 12233+0750,MCG +01-32-057,PGC 040607,SDSS J122554.09+073317.1,SDSS J122554.10+073317.2,UGC 07518;;; +IC3323;*;12:25:48.08;+27:32:32.6;Com;;;;;;;;;;;;;;;;;;SDSS J122548.08+273232.6;;Superposed on the southwestern side of NGC 4393.; +IC3324;G;12:25:49.16;+26:44:23.6;Com;0.30;0.27;171;17.06;;;;;23.33;E;;;;;;;;2MASX J12254914+2644237,SDSS J122549.16+264423.6;;"The IC number includes a star 6"" SW of the galaxy.";B-Mag taken from LEDA +IC3325;G;12:25:51.47;+23:53:45.3;Com;0.71;0.59;26;15.85;;;;;23.71;Sb;;;;;;;;2MASX J12255142+2353451,SDSS J122551.46+235345.2;;;B-Mag taken from LEDA. +IC3326;G;12:25:52.75;+23:46:06.4;Com;0.44;0.22;168;16.66;;;;;23.24;Sb;;;;;;;;2MASX J12255272+2346061,PGC 1693354,SDSS J122552.74+234606.4;;;B-Mag taken from LEDA. +IC3327;G;12:26:02.78;+14:52:49.3;Com;0.90;0.78;42;15.50;;12.44;11.76;11.24;23.53;SBa;;;;;;;;2MASX J12260276+1452492,PGC 040624,SDSS J122602.77+145249.2;;; +IC3328;G;12:25:57.93;+10:03:13.6;Vir;0.88;0.82;45;14.90;;11.97;11.48;11.30;22.86;E-S0;;;;;;;;2MASX J12255796+1003133,MCG +02-32-042,PGC 040616,SDSS J122557.92+100313.5,SDSS J122557.93+100313.6;;; +IC3329;HII;12:25:55.92;+27:33:50.8;Com;;;;;;;;;;;;;;;;;;SDSS J122555.91+273350.8;;HII region in NGC 4393.;SIMBAD considers this a duplicate of NGC4393. +IC3330;G;12:25:56.31;+30:50:36.9;Com;1.14;0.50;101;14.90;;12.21;11.56;11.32;23.51;Sab;;;;;;;;2MASX J12255632+3050370,MCG +05-29-084,PGC 040612,SDSS J122556.30+305036.8,SDSS J122556.31+305036.9,UGC 07527;;HOLM 404B is a star.; +IC3331;G;12:26:05.32;+11:48:44.0;Vir;1.02;0.54;51;15.20;;13.02;12.29;12.34;23.92;E;;;;;;;;2MASX J12260536+1148433,MCG +02-32-043,PGC 040638,SDSS J122605.31+114843.9,SDSS J122605.32+114844.0;;; +IC3332;G;12:26:05.19;+25:16:47.4;Com;0.28;0.12;135;;;;;;;;;;;;;;;2MASX J12260514+2516478,SDSS J122605.19+251647.3;;; +IC3333;*;12:26:08.77;+13:07:58.6;Vir;;;;15.88;14.80;12.95;12.43;12.30;;;;;;;;;;2MASS J12260875+1307583,SDSS J122608.76+130758.5;;; +IC3334;G;12:26:09.53;+28:27:57.0;Com;0.75;0.65;2;;;;;;24.21;I;;;;;;;;PGC 4326375,SDSS J122609.52+282757.0,SDSS J122609.53+282757.0;;; +IC3335;G;12:26:19.13;+26:07:45.5;Com;0.34;0.25;10;17.25;;;;;23.76;E;;;;;;;;2MASX J12261909+2607457,SDSS J122619.12+260745.5,SDSS J122619.13+260745.5;;;B-Mag taken from LEDA. +IC3336;G;12:26:19.89;+26:50:18.4;Com;0.64;0.29;74;15.50;;12.12;11.46;11.21;22.91;Sa;;;;;;;;2MASX J12261987+2650182,PGC 040669,SDSS J122619.88+265018.3;;; +IC3337;G;12:26:21.47;+25:18:41.5;Com;0.55;0.47;44;16.93;;;;;24.22;Sc;;;;;;;;PGC 089603,SDSS J122621.46+251841.4,SDSS J122621.46+251841.5;;;B-Mag taken from LEDA. +IC3338;G;12:26:22.28;+25:53:10.4;Com;0.83;0.36;67;15.94;;;;;23.68;Sbc;;;;;;;;2MASX J12262228+2553102,SDSS J122622.27+255310.7;;;B-Mag taken from LEDA. +IC3339;Dup;12:26:30.10;+08:52:20.0;Vir;;;;;;;;;;;;;;;4411;;;;;; +IC3340;G;12:26:32.71;+16:50:40.8;Com;0.70;0.36;24;15.41;;12.72;11.97;11.52;22.92;SBb;;;;;;;;2MASX J12263269+1650410,IRAS 12240+1707,MCG +03-32-037,PGC 040708,SDSS J122632.70+165040.7,SDSS J122632.71+165040.7;;;B-Mag taken from LEDA. +IC3341;G;12:26:23.19;+27:44:43.9;Com;0.46;0.26;72;16.50;;;;;23.54;I;;;;;;;;PGC 040682,SDSS J122623.34+274443.9;;; +IC3342;*;12:26:27.37;+27:08:19.1;Com;;;;;;;;;;;;;;;;;;SDSS J122627.37+270819.1;;; +IC3343;*;12:26:35.10;+08:52:27.4;Vir;;;;;;;;;;;;;;;;;;;;; +IC3344;G;12:26:32.39;+13:34:43.6;Com;0.80;0.44;60;15.20;;13.18;12.51;12.65;23.86;E;;;;;;;;2MASX J12263242+1334440,MCG +02-32-050,PGC 040706,SDSS J122632.39+133443.5,SDSS J122632.39+133443.6;;; +IC3345;G;12:26:33.34;+24:22:07.9;Com;0.33;0.30;106;17.19;;;;;23.67;E;;;;;;;;2MASX J12263332+2422073,SDSS J122633.33+242207.8,SDSS J122633.34+242207.8;;;B-Mag taken from LEDA. +IC3346;G;12:26:44.43;+11:22:47.0;Vir;0.65;0.50;147;15.78;;;12.15;;23.70;E;;;;;;;;PGC 040739,SDSS J122644.41+112247.0,SDSS J122644.43+112247.0;;;B-Mag taken from LEDA. +IC3347;G;12:26:44.57;+10:55:06.9;Vir;0.55;0.36;141;16.31;;14.79;14.46;14.24;23.50;Sc;;;;;;;;2MASX J12264455+1055074,PGC 165158,SDSS J122644.56+105506.8;;;B-Mag taken from LEDA. +IC3348;G;12:26:38.11;+25:37:29.6;Com;0.41;0.36;66;17.30;;;;;24.06;Sc;;;;;;;;SDSS J122638.11+253729.6;;;B-Mag taken from LEDA. +IC3349;G;12:26:47.06;+12:27:14.3;Vir;0.90;0.85;25;15.30;13.98;12.74;12.25;11.88;23.47;E;;;;;;;;2MASX J12264704+1227147,PGC 040744,SDSS J122647.06+122714.3,SDSS J122647.07+122714.3;;; +IC3350;**;12:26:46.43;+09:26:33.4;Vir;;;;12.86;12.68;11.08;10.84;10.83;;;;;;;;;;2MASS J12264641+0926335,SDSS J122646.42+092633.3,TYC 874-632-1;;;Main component is TYC 874-632-1. +IC3351;*;12:26:40.99;+27:36:20.1;Com;;;;;;;;;;;;;;;;;;SDSS J122640.98+273620.1;;; +IC3352;Other;12:26:47.80;+08:45:27.0;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3353;G;12:26:45.08;+27:54:44.4;Com;0.83;0.15;98;16.82;;;;;23.84;Sc;;;;;;;;PGC 040741,SDSS J122645.07+275444.3,SDSS J122645.08+275444.4;;;B-Mag taken from LEDA. +IC3354;*;12:26:51.46;+12:05:49.7;Vir;;;;;;;;;;;;;;;;;;SDSS J122651.45+120549.7;;; +IC3355;G;12:26:51.14;+13:10:32.6;Vir;1.09;0.43;166;15.18;14.86;;13.36;;23.49;I;;;;;;;;MCG +02-32-056,PGC 040754,UGC 07548;;Several SDSS objects comprise this galaxy.; +IC3356;G;12:26:50.49;+11:33:32.5;Vir;1.47;0.80;70;15.19;;;;;24.49;IB;;;;;;;;PGC 040761,SDSS J122650.49+113332.4,SDSS J122650.49+113332.5,UGC 07547;;The position in 1995ApJS...96..359Y is for a superposed star.; +IC3357;G;12:26:51.35;+09:46:39.0;Vir;0.51;0.25;164;15.40;;13.37;12.85;12.38;22.14;Sbc;;;;;;;;2MASX J12265135+0946388,PGC 040757,SDSS J122651.35+094638.9,SDSS J122651.35+094639.0;;; +IC3358;G;12:26:54.34;+11:39:50.3;Vir;1.05;0.82;118;14.28;13.52;12.27;11.50;11.45;23.30;E;;;;;;;;2MASX J12265442+1139488,MCG +02-32-057,PGC 040764,SDSS J122654.33+113950.2,SDSS J122654.33+113950.3,SDSS J122654.34+113950.3,UGC 07550;;; +IC3359;G;12:26:51.40;+23:29:53.4;Com;0.51;0.28;70;16.50;;14.34;13.38;13.12;23.47;Sbc;;;;;;;;2MASX J12265135+2329534,IRAS 12243+2346,LEDA 089605,SDSS J122651.39+232953.3,SDSS J122651.39+232953.4;;; +IC3360;*;12:26:50.72;+26:02:47.9;Com;;;;;;;;;;;;;;;;;;SDSS J122650.71+260247.8;;; +IC3361;G;12:26:54.55;+10:39:57.1;Vir;1.02;0.71;119;15.49;;;12.58;;24.40;E;;;;;;;;PGC 040759,SDSS J122654.55+103957.0,SDSS J122654.55+103957.1;;"The IC identification is not certain; nothing at nominal position.";B-Mag taken from LEDA. +IC3362;G;12:26:54.41;+26:41:24.3;Com;0.80;0.56;118;16.15;;12.68;12.20;11.98;24.05;SBab;;;;;;;;2MASX J12265440+2641239,LEDA 3089430,SDSS J122654.40+264124.2,SDSS J122654.41+264124.3;;;B-Mag taken from LEDA. +IC3363;G;12:27:03.07;+12:33:38.9;Vir;0.97;0.43;124;15.31;14.54;13.64;13.09;12.75;24.26;E;;;;;;;;2MASX J12270330+1233376,PGC 040786,SDSS J122703.06+123338.9,SDSS J122703.07+123338.9;;; +IC3364;G;12:27:04.91;+25:33:47.7;Com;0.59;0.40;86;16.54;;;;;23.86;Sab;;;;;;;;2MASX J12270493+2533479,SDSS J122704.91+253347.6,SDSS J122704.91+253347.7;;;B-Mag taken from LEDA. +IC3365;G;12:27:11.18;+15:53:48.0;Com;0.87;0.66;67;14.36;;14.88;14.19;14.04;22.49;I;;;;;;;;2MASX J12271135+1553472,MCG +03-32-041,PGC 040811,SDSS J122711.17+155347.9,SDSS J122711.18+155348.0,UGC 07563;;; +IC3366;G;12:27:12.12;+09:24:36.7;Vir;0.37;0.21;154;16.56;;;;;23.25;E;;;;;;;;PGC 213994;;;B-Mag taken from LEDA. PGC 213994 is the best matching object found in LEDA for these NED coords. +IC3367;GPair;12:27:11.90;+26:57:24.3;Com;1.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. Only one component is specified in NED. +IC3367 NED01;G;12:27:10.07;+26:57:26.7;Com;0.72;0.59;84;15.70;;12.46;11.61;11.65;24.04;E;;;;;;;;2MASX J12271004+2657268,PGC 040812,SDSS J122710.06+265726.7,SDSS J122710.07+265726.7;;; +IC3368;G;12:27:20.38;+16:25:42.9;Com;0.71;0.52;0;15.08;;;12.72;;23.19;I;;;;;;;;PGC 040835,SDSS J122720.42+162542.0;;; +IC3369;G;12:27:16.94;+16:01:28.1;Com;0.81;0.55;136;15.10;;12.15;11.59;11.43;23.01;E-S0;;;;;;;;2MASX J12271690+1601282,MCG +03-32-043,PGC 040828,SDSS J122716.93+160128.0,SDSS J122716.94+160128.1;;; +IC3370;G;12:27:37.33;-39:20:16.0;Cen;3.12;2.29;53;11.99;12.12;8.83;8.11;7.86;23.32;E;;;;;;;;2MASX J12273730-3920161,ESO 322-014,ESO-LV 322-0140,MCG -06-27-029,PGC 040887;;; +IC3371;G;12:27:22.25;+10:52:00.4;Vir;1.17;0.26;54;15.00;;;12.79;;23.09;Sc;;;;;;;;MCG +02-32-060,PGC 040839,SDSS J122722.25+105200.4,UGC 07565;;; +IC3372;G;12:27:24.54;+25:17:14.0;Com;0.28;0.27;98;17.02;;14.92;13.83;13.61;23.16;E;;;;;;;;2MASX J12272451+2517141,PGC 089606,SDSS J122724.54+251713.9;;The IC number includes a defect on the original Heidelberg plate.;B-Mag taken from LEDA. +IC3373;G;12:27:27.81;+25:27:14.1;Com;0.68;0.38;99;16.37;;;;;23.80;SBc;;;;;;;;2MASX J12272781+2527141,SDSS J122727.81+252714.0;;;B-Mag taken from LEDA. +IC3374;G;12:27:33.48;+10:00:13.6;Vir;0.95;0.50;155;15.60;;;12.87;;23.46;IB;;;;;;;;PGC 040876,SDSS J122733.24+100009.1,SDSS J122733.24+100009.2;;; +IC3375;*;12:27:40.36;+27:21:53.1;Com;;;;;;;;;;;;;;;;;;SDSS J122740.36+272153.1;;; +IC3376;G;12:27:50.34;+26:59:36.7;Com;0.87;0.60;81;14.40;;11.27;10.56;10.29;22.68;SBa;;;;;;;;2MASX J12275036+2659361,IRAS 12253+2716,MCG +05-29-087,PGC 040920,SDSS J122750.33+265936.6,SDSS J122750.34+265936.6,SDSS J122750.34+265936.7,UGC 07578;;; +IC3377;G;12:27:51.95;+24:56:31.8;Com;0.51;0.30;129;16.18;;13.16;12.46;12.28;23.08;SBab;;;;;;;;2MASX J12275199+2456311,LEDA 3089512,SDSS J122751.94+245631.8,SDSS J122751.95+245631.8;;;B-Mag taken from LEDA. +IC3378;G;12:28:01.51;+17:17:46.7;Com;0.54;0.34;175;15.30;;13.94;13.37;13.07;23.30;Sc;;;;;;;;2MASX J12280152+1717474,SDSS J122801.55+171747.3,SDSS J122801.56+171747.3;;; +IC3379;G;12:28:04.26;+17:18:20.7;Com;0.73;0.35;32;15.30;;13.94;13.37;13.07;23.52;Sbc;;;;;;;;PGC 040955;;; +IC3380;G;12:28:05.53;+26:40:22.3;Com;0.51;0.43;109;16.82;;;;;24.25;E;;;;;;;;PGC 3089432,SDSS J122805.52+264022.2,SDSS J122805.53+264022.3;;;B-Mag taken from LEDA. +IC3381;G;12:28:14.88;+11:47:23.4;Vir;1.19;0.87;104;14.42;;11.67;10.97;11.05;23.18;E;;;;;;;;2MASX J12281485+1147236,MCG +02-32-074,PGC 040985,SDSS J122814.88+114723.3,SDSS J122814.88+114723.4,UGC 07589;;; +IC3382;G;12:28:13.54;+13:34:14.5;Com;1.00;0.28;150;16.00;;13.17;12.50;12.08;24.01;Sc;;;;;;;;2MASX J12281360+1334139,PGC 040954,SDSS J122813.53+133414.4,SDSS J122813.54+133414.5,UGC 07588;;; +IC3383;G;12:28:12.32;+10:17:51.6;Vir;0.78;0.54;29;15.50;15.18;13.09;12.50;12.82;23.33;E-S0;;;;;;;;2MASX J12281237+1017516,MCG +02-32-075,PGC 040970,SDSS J122812.31+101751.5,SDSS J122812.32+101751.5,SDSS J122812.32+101751.6;;; +IC3384;G;12:28:12.26;+25:05:28.8;Com;0.68;0.30;52;16.50;;;;;25.73;Sm;;;;;;;;PGC 089610;;Multiple SDSS entries describe this object.; +IC3385;G;12:28:14.95;+25:25:57.4;Com;0.78;0.51;147;16.47;;;;;24.48;Sbc;;;;;;;;SDSS J122814.94+252557.4;;;B-Mag taken from LEDA. +IC3386;G;12:28:23.68;+13:11:44.7;Vir;0.81;0.35;100;16.01;15.47;;13.18;;24.35;E;;;;;;;;PGC 041007,SDSS J122823.67+131144.6,SDSS J122823.68+131144.7;;;B-Mag taken from LEDA. +IC3387;G;12:28:18.82;+27:59:44.6;Com;0.35;0.27;24;16.50;;14.22;13.68;13.08;22.93;Sbc;;;;;;;;2MASX J12281878+2759451,PGC 040994,SDSS J122818.82+275944.5,SDSS J122818.82+275944.6;;; +IC3388;G;12:28:28.06;+12:49:25.2;Vir;0.74;0.55;74;15.40;14.73;;12.71;;23.67;E;;;;;;;;PGC 041018,SDSS J122828.05+124925.2,SDSS J122828.06+124925.2;;; +IC3389;G;12:28:23.52;+27:50:41.8;Com;0.33;0.20;159;18.11;;;;;24.42;;;;;;;;;2MASX J12282352+2750420,2MASX J12282435+2750420,SDSS J122823.52+275041.7,SDSS J122823.52+275041.8;;;B-Mag taken from LEDA. +IC3390;G;12:28:28.57;+24:48:33.6;Com;0.61;0.46;107;16.56;;;;;24.01;SBbc;;;;;;;;2MASX J12282854+2448335,SDSS J122828.56+244833.6,SDSS J122828.57+244833.5;;;B-Mag taken from LEDA. +IC3391;G;12:28:27.30;+18:24:54.1;Com;1.03;0.83;71;13.90;;11.51;11.30;10.45;22.28;Sc;;;;;;;;2MASX J12282727+1824550,IRAS 12259+1841,MCG +03-32-047,PGC 041013,SDSS J122827.30+182454.1,UGC 07595;;; +IC3392;G;12:28:43.26;+14:59:58.2;Com;2.60;1.10;39;13.30;;10.20;9.52;9.26;23.25;Sab;;;;;;;;2MASX J12284329+1459578,IRAS 12262+1516,MCG +03-32-049,PGC 041061,SDSS J122843.25+145958.2,SDSS J122843.26+145958.2,UGC 07602;;; +IC3393;G;12:28:41.71;+12:54:57.3;Vir;1.10;0.48;132;14.85;14.24;12.55;11.86;11.75;23.83;S0;;;;;;;;2MASX J12284172+1254568,MCG +02-32-081,PGC 041054,SDSS J122841.71+125457.2,SDSS J122841.71+125457.3,SDSS J122841.72+125457.3;;; +IC3394;G;12:28:41.21;+26:47:54.3;Com;0.59;0.50;143;15.86;;12.21;11.48;11.13;23.53;E;;;;;;;;2MASX J12284126+2647536,MCG +05-30-003,PGC 041073,SDSS J122841.25+264754.0,SDSS J122841.26+264754.1;;;B-Mag taken from LEDA. +IC3395;G;12:28:44.50;+25:02:05.1;Com;0.58;0.30;50;16.43;;13.64;12.80;12.60;23.54;Sab;;;;;;;;2MASX J12284448+2502046,SDSS J122844.49+250205.0;;;B-Mag taken from LEDA. +IC3396;G;12:28:44.98;+25:03:00.8;Com;0.11;0.08;84;17.23;;14.31;13.84;13.46;;E;;;;;;;;2MASX J12284500+2503006,SDSS J122844.97+250300.7;;;B-Mag taken from LEDA. +IC3397;G;12:28:46.56;+25:43:54.9;Com;0.61;0.53;10;15.99;;13.64;12.72;12.39;23.54;SBb;;;;;;;;2MASX J12284655+2543546,SDSS J122846.55+254354.9;;;B-Mag taken from LEDA. +IC3399;*;12:28:55.98;+25:41:45.9;Com;;;;;;;;;;;;;;;;;;SDSS J122855.97+254145.9;;; +IC3400;*;12:29:02.90;+09:24:22.2;Vir;;;;11.72;11.50;10.35;10.09;9.96;;;;;;;;;;2MASS J12290289+0924220,SDSS J122902.90+092422.1,TYC 874-198-1;;; +IC3401;G;12:28:58.84;+26:27:36.3;Com;0.41;0.37;5;17.28;;14.38;13.35;13.22;24.00;Sb;;;;;;;;2MASX J12285887+2627360,LEDA 3089434,SDSS J122858.83+262736.2,SDSS J122858.83+262736.3,SDSS J122858.84+262736.3;;;B-Mag taken from LEDA. +IC3402;G;12:28:59.32;+28:51:43.0;Com;1.17;0.21;7;15.70;15.16;13.26;12.35;12.18;23.64;Sbc;;;;;;;;2MASX J12285930+2851430,PGC 041100,SDSS J122859.31+285142.9,SDSS J122859.32+285143.0,UGC 07616;;; +IC3403;G;12:29:01.46;+24:37:57.6;Com;0.43;0.42;35;15.70;;13.66;13.25;12.88;22.95;Sc;;;;;;;;2MASX J12290147+2437581,PGC 041105,SDSS J122901.45+243757.5,SDSS J122901.46+243757.5;;; +IC3404;Other;12:29:10.72;+07:09:14.2;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3405;G;12:28:59.61;+37:43:48.4;CVn;0.71;0.32;27;16.30;;12.80;12.09;11.88;23.63;Sbc;;;;;;;;2MASX J12285963+3743489,LEDA 2108047,SDSS J122859.61+374348.3,SDSS J122859.61+374348.4,SDSS J122859.61+374348.4 bg,SDSS J122859.62+374348.4;;;B-Mag taken from LEDA. +IC3406;G;12:29:02.63;+27:38:25.9;Com;0.65;0.40;70;15.70;;13.15;12.66;12.15;23.11;Sbc;;;;;;;;2MASX J12290263+2738251,MCG +05-30-004,PGC 041116,SDSS J122902.62+273825.8,SDSS J122902.63+273825.9;;; +IC3407;G;12:29:03.86;+27:46:43.9;Com;0.97;0.54;147;14.70;;11.98;11.34;10.98;22.92;SBb;;;;;;;;2MASX J12290381+2746441,IRAS 12265+2803,MCG +05-30-005,PGC 041112,SDSS J122903.85+274643.8,SDSS J122903.86+274643.9,UGC 07615;;; +IC3408;*;12:29:15.79;+11:52:33.2;Vir;;;;11.55;10.87;9.89;9.65;9.59;;;;;;;;;;2MASS J12291585+1152324,TYC 877-865-1;;; +IC3409;G;12:29:21.23;+14:47:21.5;Com;0.58;0.52;156;15.96;;13.19;12.54;12.25;23.43;SBc;;;;;;;;MCG +03-32-050,PGC 041147,SDSS J122921.23+144721.5;;;B-Mag taken from LEDA. +IC3410;G;12:29:06.17;+19:00:17.2;Com;0.69;0.62;8;15.70;;12.59;11.90;11.65;23.77;E;;;;;;;;2MASX J12290620+1900178,PGC 041122,SDSS J122906.16+190017.1;;; +IC3411;G;12:29:12.39;+24:35:03.1;Com;0.70;0.23;170;17.22;;14.46;13.84;13.06;24.36;Sbc;;;;;;;;2MASX J12291233+2435031,SDSS J122912.38+243503.0,SDSS J122912.38+243503.1;;;B-Mag taken from LEDA. +IC3412;G;12:29:22.65;+09:59:20.5;Vir;0.74;0.34;9;15.40;;;;;22.96;Sm;;;;;;;;PGC 041152,SDSS J122922.64+095920.4,SDSS J122922.65+095920.5;;; +IC3413;G;12:29:22.51;+11:26:02.0;Vir;1.21;0.70;164;15.20;;11.88;11.02;11.25;23.60;E;;;;;;;;2MASX J12292248+1126016,MCG +02-32-088,PGC 041155,SDSS J122922.51+112601.9,UGC 07620;;; +IC3414;G;12:29:28.78;+06:46:18.5;Vir;0.81;0.38;32;14.20;;12.95;12.34;12.04;21.60;Sd;;;;;;;;2MASX J12292882+0646186,MCG +01-32-079,PGC 041166,SDSS J122928.77+064618.5,UGC 07621;;; +IC3415;*;12:29:21.61;+26:45:58.4;Com;;;;;;;;;;;;;;;;;;SDSS J122921.61+264558.3;;; +IC3416;G;12:29:34.96;+10:47:35.1;Vir;0.95;0.52;71;15.30;;;12.71;;23.49;I;;;;;;;;MCG +02-32-091,PGC 041178,SDSS J122934.96+104735.1;;MCG notes this as a possible interacting pair.; +IC3417;*;12:29:39.22;+07:51:40.6;Vir;;;;;;;;;;;;;;;;;;SDSS J122939.22+075140.6;;; +IC3418;G;12:29:43.92;+11:24:16.9;Vir;1.32;0.90;68;16.50;;;;;23.38;IB;;;;;;;;MCG +02-32-092,PGC 041207,SDSS J122943.91+112416.8,SDSS J122943.92+112416.8,UGC 07630;;Star superposed.; +IC3419;G;12:29:44.58;+15:01:29.1;Com;0.68;0.43;1;16.30;;;;;24.29;E;;;;;;;;PGC 041211,SDSS J122944.58+150129.1;;;B-Mag taken from LEDA. +IC3420;*;12:29:42.56;+13:26:47.1;Com;;;;;;;;;;;;;;;;;;;;; +IC3421;G;12:29:38.59;+26:13:50.2;Com;0.69;0.53;17;15.48;;13.55;13.56;12.82;23.65;Sbc;;;;;;;;2MASX J12293863+2613502,MCG +05-30-007,PGC 041204,SDSS J122938.59+261350.2;;;B-Mag taken from LEDA. +IC3422;G;12:29:54.61;+14:41:18.1;Com;0.58;0.45;88;16.08;;13.11;12.31;11.90;23.42;Sc;;;;;;;;2MASX J12295460+1441182,PGC 165191,SDSS J122954.61+144118.1,SDSS J122954.62+144118.1;;;B-Mag taken from LEDA. +IC3423;*;12:29:46.52;+13:39:31.6;Com;;;;15.60;;14.43;14.04;14.01;;;;;;;;;;2MASS J12294651+1339314,SDSS J122946.51+133931.6;;; +IC3424;G;12:29:45.04;+24:24:31.2;Com;0.41;0.20;105;17.49;;;;;24.36;E;;;;;;;;SDSS J122945.03+242431.2;;;B-Mag taken from LEDA. +IC3425;G;12:29:56.39;+10:36:55.2;Vir;0.61;0.32;35;15.30;;12.98;11.85;11.83;22.26;S0-a;;;;;;;;2MASX J12295635+1036551,MCG +02-32-095,PGC 041244,SDSS J122956.38+103655.2,UGC 07633;;; +IC3426;*;12:30:01.46;+13:35:53.4;Com;;;;15.10;14.90;13.28;12.88;12.81;;;;;;;;;;2MASS J12300146+1335534,SDSS J123001.46+133553.4;;; +IC3427;Dup;12:30:10.33;+10:46:46.1;Vir;;;;;;;;;;;;;;;4482;;;;;; +IC3428;*;12:30:07.51;+23:40:30.1;Com;;;;;;;;;;;;;;;;;;SDSS J123007.51+234030.1;;; +IC3429;G;12:30:07.94;+23:32:42.5;Com;0.38;0.33;18;16.95;;13.92;12.78;12.70;23.47;Sb;;;;;;;;2MASX J12300799+2332426,SDSS J123007.93+233242.4;;;B-Mag taken from LEDA. +IC3430;G;12:30:16.88;+09:05:06.4;Vir;1.11;0.38;112;15.40;;;;;24.14;S0-a;;;;;;;;PGC 041294,UGC 07643;;; +IC3431;G;12:30:24.18;+11:36:52.1;Vir;0.47;0.32;13;16.60;;;;;23.64;Sc;;;;;;;;PGC 139911,SDSS J123024.17+113652.1,SDSS J123024.18+113652.1;;; +IC3432;G;12:30:27.84;+14:09:36.7;Com;0.69;0.42;56;15.10;;12.96;12.30;12.07;22.32;Sc;;;;;;;;2MASX J12302783+1409368,MCG +02-32-102,PGC 041320,SDSS J123027.83+140936.6,SDSS J123027.84+140936.7;;ASIAGO3 320 is the bar of IC 3432.; +IC3433;G;12:30:28.21;+17:18:35.0;Com;0.80;0.57;87;15.14;;13.82;12.83;13.07;24.50;E-S0;;;;;;;;2MASX J12302824+1718348,PGC 041321,SDSS J123028.21+171834.9;;; +IC3434;G;12:30:27.26;+18:48:35.0;Com;0.76;0.40;55;15.40;;12.82;12.06;11.70;23.14;Sb;;;;;;;;2MASX J12302726+1848353,PGC 041324,SDSS J123027.26+184834.9,SDSS J123027.26+184835.0;;; +IC3435;G;12:30:39.88;+15:07:46.9;Com;1.35;0.47;141;15.70;;12.57;12.06;11.97;24.53;S0;;;;;;;;2MASX J12303979+1507472,MCG +03-32-053,PGC 041338,SDSS J123039.87+150746.8,UGC 07650;;UGC misprints name as 'IC 3455'.; +IC3436;G;12:30:29.93;+19:40:22.9;Com;0.75;0.44;144;15.00;;12.26;11.57;11.39;22.96;S0;;;;;;;;2MASX J12302995+1940233,MCG +03-32-052,PGC 041323,SDSS J123029.93+194022.9;;; +IC3437;G;12:30:45.91;+11:20:35.5;Vir;0.61;0.39;68;15.50;;13.47;13.09;12.78;23.44;E;;;;;;;;2MASX J12304595+1120354,PGC 041350,SDSS J123045.90+112035.5;;; +IC3438;Dup;12:30:59.71;+08:04:40.3;Vir;;;;;;;;;;;;;;;4492;;;;;; +IC3439;G;12:30:59.47;+25:33:42.5;Com;0.66;0.58;40;16.29;;;;;24.04;Sbc;;;;;;;;SDSS J123059.47+253342.6;;;B-Mag taken from LEDA. +IC3440;G;12:31:05.16;+12:01:47.5;Vir;0.60;0.49;85;16.75;;;;;24.21;Sc;;;;;;;;PGC 169460,SDSS J123105.15+120147.4,SDSS J123105.16+120147.5;;;B-Mag taken from LEDA. +IC3441;G;12:31:04.42;+28:51:09.7;Com;0.64;0.43;142;15.79;15.11;12.20;11.46;11.33;23.48;E-S0;;;;;;;;2MASX J12310444+2851099,MCG +05-30-010,PGC 041412,SDSS J123104.42+285109.7;;;B-Mag taken from LEDA. +IC3442;G;12:31:20.19;+14:06:54.7;Com;0.94;0.71;20;15.40;;;;;23.28;E;;;;;;;;MCG +02-32-111,PGC 041435,SDSS J123120.19+140654.7;;; +IC3443;G;12:31:15.73;+12:19:54.4;Vir;0.55;0.51;49;16.15;14.95;13.29;12.64;12.61;23.48;E;;;;;;;;2MASX J12311570+1219545,MCG +02-32-112,PGC 041421,SDSS J123115.72+121954.3,SDSS J123115.73+121954.3,SDSS J123115.73+121954.4;;; +IC3444;**;12:31:13.89;+27:32:58.7;Com;;;;;;;;;;;;;;;;;;SDSS J123113.89+273258.7;;; +IC3445;G;12:31:19.43;+12:44:16.8;Vir;0.47;0.35;36;16.51;15.87;15.10;14.56;14.19;23.73;E;;;;;;;;2MASX J12311932+1244174,PGC 041432,SDSS J123119.42+124416.8;;;B-Mag taken from LEDA. +IC3446;G;12:31:22.94;+11:29:32.6;Vir;0.62;0.39;1;15.63;;14.55;14.13;14.05;22.82;I;;;;;;;;2MASX J12312313+1129341,PGC 041440,SDSS J123122.93+112932.5,SDSS J123122.94+112932.6;;; +IC3447;G;12:31:17.90;+10:40:48.6;Vir;0.37;0.32;6;16.69;;14.32;13.78;13.05;23.30;Sc;;;;;;;;2MASX J12311792+1040481,PGC 165209,SDSS J123117.90+104048.5,SDSS J123117.90+104048.6;;;B-Mag taken from LEDA. +IC3448;G;12:31:23.19;+17:12:23.1;Com;0.97;0.57;97;16.50;;14.79;14.31;14.10;24.17;E-S0;;;;;;;;2MASX J12312269+1712254,PGC 041439,SDSS J123123.18+171223.0,SDSS J123123.19+171223.0;;; +IC3449;G;12:31:22.94;+25:54:50.4;Com;0.31;0.22;142;16.50;;15.14;14.43;14.06;23.16;SBc;;;;;;;;2MASX J12312299+2554499,LEDA 089615,SDSS J123122.94+255450.3;;; +IC3450;G;12:31:24.82;+26:47:46.1;Com;0.47;0.27;158;16.40;;14.22;13.65;13.72;23.31;Sc;;;;;;;;2MASX J12312481+2647439,LEDA 089616,SDSS J123124.81+264746.1,SDSS J123124.82+264746.1;;;B-Mag taken from LEDA. +IC3451;G;12:31:24.07;+28:51:18.7;Com;0.68;0.48;92;15.67;14.65;12.09;11.63;11.12;23.55;S0;;;;;;;;2MASX J12312406+2851189,MCG +05-30-011,PGC 041437,SDSS J123124.07+285118.6,SDSS J123124.08+285118.7;;;B-Mag taken from LEDA. +IC3452;Dup;12:31:32.53;+11:37:29.0;Vir;;;;;;;;;;;;;;;4497;;;;;; +IC3453;G;12:31:37.74;+14:51:35.3;Com;0.95;0.26;164;14.80;;;;;22.28;IB;;;;;;;;2MASX J12313803+1451241,MCG +03-32-057,PGC 041466,SDSS J123137.74+145135.2,SDSS J123137.74+145135.3,UGC 07666;;"MRK 1328 is the 'head' of the ""comet-like"" galaxy UGC 07666.";B-Mag taken from LEDA. +IC3454;G;12:31:38.65;+27:29:44.6;Com;1.12;0.26;26;15.70;;12.47;11.93;11.52;23.59;Sb;;;;;;;;2MASX J12313858+2729438,MCG +05-30-013,PGC 041468,SDSS J123138.64+272944.5,UGC 07670;;; +IC3455;G;12:31:44.55;+25:47:09.9;Com;0.59;0.31;0;16.71;;13.88;13.03;12.90;23.79;Sbc;;;;;;;;2MASX J12314455+2547098,SDSS J123144.54+254709.9,SDSS J123144.55+254709.8;;;B-Mag taken from LEDA. +IC3456;Other;12:31:43.75;+28:21:25.8;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3457;G;12:31:51.34;+12:39:25.2;Vir;1.00;0.67;143;14.69;14.56;;12.34;;23.68;E;;;;;;;;MCG +02-32-114,PGC 041494,SDSS J123151.34+123925.2,UGC 07672;;The 2MASS peak is 5 arcsec southwest of the optical nucleus.; +IC3458;G;12:31:44.00;+28:08:50.5;Com;0.67;0.58;76;15.73;;13.33;12.74;12.13;23.48;Sbc;;;;;;;;2MASX J12314400+2808508,SDSS J123143.99+280850.5,SDSS J123144.00+280850.5;;;B-Mag taken from LEDA. +IC3459;G;12:31:55.92;+12:10:26.5;Vir;1.11;0.86;163;14.83;;13.41;13.19;12.63;23.65;I;;;;;;;;2MASX J12315603+1210261,MCG +02-32-115,PGC 041505,SDSS J123155.91+121026.5,UGC 07674;;; +IC3460;G;12:31:50.39;+27:23:12.8;Com;0.62;0.20;109;16.22;;;;;23.16;Sd;;;;;;;;PGC 041492,SDSS J123150.38+272312.7,SDSS J123150.39+272312.8;;;B-Mag taken from LEDA. +IC3461;G;12:32:02.74;+11:53:24.3;Vir;0.73;0.55;154;15.40;14.88;12.88;12.27;12.41;23.34;E;;;;;;;;2MASX J12320274+1153231,MCG +02-32-116,PGC 041529,SDSS J123202.73+115324.2,SDSS J123202.73+115324.3;;; +IC3462;G;12:32:09.58;+15:18:03.4;Com;0.67;0.39;43;16.09;;14.55;13.70;13.82;24.07;E;;;;;;;;2MASX J12320960+1518047,PGC 041544,SDSS J123209.58+151803.3,SDSS J123209.58+151803.4;;;B-Mag taken from LEDA. +IC3463;Other;12:32:04.58;+12:19:09.9;Vir;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC3464;*;12:32:00.20;+26:00:17.4;Com;;;;;;;;;;;;;;;;;;;;The IC number includes a defect on the original Heidelberg plate.; +IC3465;G;12:32:12.24;+12:03:41.6;Vir;0.44;0.32;110;16.93;16.16;15.18;14.61;14.24;23.67;E;;;;;;;;2MASX J12321236+1203397,PGC 041548,SDSS J123212.24+120341.5,SDSS J123212.24+120341.6;;; +IC3466;G;12:32:05.68;+11:49:04.5;Vir;0.65;0.46;69;15.30;;;10.85;;23.26;I;;;;;;;;MCG +02-32-117,PGC 041536,SDSS J123205.68+114904.4,SDSS J123205.68+114904.5;;Noted in MCG as a possible interacting system.; +IC3467;G;12:32:24.57;+11:47:15.3;Vir;0.96;0.27;69;15.28;15.40;13.97;13.50;13.55;22.94;SABc;;;;;;;;2MASX J12322464+1147165,MCG +02-32-121,PGC 041572,SDSS J123224.57+114715.3,UGC 07686;;; +IC3468;G;12:32:14.21;+10:15:05.3;Vir;1.28;1.15;170;14.60;;11.39;10.76;10.51;23.30;E;;;;;;;;2MASX J12321420+1015055,MCG +02-32-119,PGC 041552,SDSS J123214.21+101505.2,SDSS J123214.21+101505.3,UGC 07681;;; +IC3469;G;12:32:10.98;+25:48:10.0;Com;0.34;0.27;55;17.64;;15.59;15.05;14.33;23.87;Sb;;;;;;;;2MASX J12321099+2548098,SDSS J123210.95+254810.2;;;B-Mag taken from LEDA. +IC3470;G;12:32:23.39;+11:15:46.7;Vir;0.95;0.95;21;15.00;;11.93;11.37;11.18;23.33;E;;;;;;;;2MASX J12322335+1115475,MCG +02-32-122,PGC 041573,SDSS J123223.38+111546.6,SDSS J123223.39+111546.7;;; +IC3471;G;12:32:22.82;+16:01:07.8;Com;1.00;0.58;1;15.70;;;12.77;;23.75;I;;;;;;;;MCG +03-32-063,PGC 041567;;; +IC3472;G;12:32:18.78;+24:43:41.7;Com;0.50;0.45;136;17.10;;;;;24.17;Sd;;;;;;;;LEDA 086418,SDSS J123218.77+244341.7,SDSS J123218.78+244341.7;;;B-Mag taken from LEDA. +IC3473;G;12:32:19.12;+18:14:38.9;Com;1.05;0.70;37;15.40;;;;;22.91;Sc;;;;;;;;MCG +03-32-062,PGC 041558,SDSS J123219.07+181441.0,UGC 07684;;; +IC3474;G;12:32:36.51;+02:39:41.5;Vir;2.26;0.39;43;15.00;;;;;23.61;Scd;;;;;;;;MCG +01-32-091,PGC 041599,SDSS J123236.09+023931.3,UGC 07687;;Multiple SDSS entries describe this object.; +IC3475;G;12:32:41.06;+12:46:15.6;Vir;1.56;1.29;84;15.40;13.29;;10.69;;23.92;E;;;;;;;;MCG +02-32-123,PGC 041606,UGC 07692;;; +IC3476;G;12:32:41.88;+14:03:01.6;Com;1.67;1.18;28;13.50;;11.75;11.40;10.91;22.86;Sm;;;;;;;;2MASX J12324174+1403058,IRAS 12301+1419,MCG +02-32-125,PGC 041608,SDSS J123241.88+140301.5,UGC 07695;;ASIAGO3 396 is a knot in IC 3476.; +IC3477;*;12:32:38.21;+26:02:18.4;Com;;;;;;;;;;;;;;;;;;SDSS J123238.20+260218.4;;; +IC3478;G;12:32:44.20;+14:11:46.3;Com;0.91;0.81;120;15.00;;12.14;11.48;11.45;22.92;S0;;;;;;;;2MASX J12324421+1411458,MCG +02-32-126,PGC 041614,SDSS J123244.19+141146.2,SDSS J123244.20+141146.3,UGC 07696;;; +IC3479;G;12:32:40.93;+25:24:22.0;Com;0.29;0.20;6;17.13;;14.62;13.87;13.87;23.11;Sb;;;;;;;;2MASX J12324089+2524221,LEDA 089618,SDSS J123240.92+252421.9;;;B-Mag taken from LEDA. +IC3480;**;12:32:41.49;+26:49:42.8;Com;;;;;;;;;;;;;;;;;;;;; +IC3481;G;12:32:52.26;+11:24:15.8;Vir;0.87;0.84;33;14.80;;11.09;10.28;10.13;23.18;E-S0;;;;;;;;2MASX J12325228+1124151,MCG +02-32-127,PGC 041634,SDSS J123252.25+112415.6,SDSS J123252.25+112415.7,SDSS J123252.26+112415.8;;"VCC declination should read ""+11d40.8m"", not ""+11d40.0m""."; +IC3482;G;12:33:01.00;+27:49:49.1;Com;0.43;0.18;44;16.61;;;;;23.00;Sab;;;;;;;;2MASX J12330103+2749491,PGC 1819127,SDSS J123300.99+274949.0,SDSS J123300.99+274949.1,SDSS J123301.00+274949.1;;;B-Mag taken from LEDA. +IC3483;G;12:33:10.06;+11:20:50.4;Vir;0.87;0.55;177;15.40;;12.20;11.50;11.55;23.09;SABb;;;;;;;;2MASX J12331006+1120507,MCG +02-32-129,PGC 041670,SDSS J123310.05+112050.4;;; +IC3484;G;12:33:05.30;+17:24:10.8;Com;0.78;0.63;27;15.40;;12.52;11.89;11.78;23.04;Sc;;;;;;;;MCG +03-32-066,PGC 041655;;; +IC3485;*;12:33:11.26;+09:13:02.2;Vir;;;;;;;;;;;;;;;;;;SDSS J123311.26+091302.1;;; +IC3486;G;12:33:14.01;+12:51:28.2;Vir;0.82;0.56;39;15.30;;12.88;12.41;11.94;23.58;E;;;;;;;;2MASX J12331402+1251277,MCG +02-32-131,PGC 041682,SDSS J123314.01+125128.1,SDSS J123314.01+125128.2;;Identified incorrectly as IC 3492 in CGCG.; +IC3487;G;12:33:13.44;+09:23:50.5;Vir;0.92;0.54;76;15.10;;13.12;12.08;12.23;23.57;E-S0;;;;;;;;2MASX J12331360+0923497,MCG +02-32-133,PGC 041680,SDSS J123313.43+092350.4,SDSS J123313.43+092350.5,SDSS J123313.44+092350.4;;; +IC3488;G;12:33:08.45;+26:20:57.7;Com;0.64;0.59;73;15.60;;12.06;11.32;11.15;23.39;E;;;;;;;;2MASX J12330846+2620571,MCG +05-30-019,PGC 041671,SDSS J123308.43+262057.6,SDSS J123308.44+262057.6,SDSS J123308.44+262057.7,SDSS J123308.45+262057.7;;; +IC3489;G;12:33:13.70;+12:14:49.2;Vir;0.65;0.60;5;15.20;;12.49;11.97;11.49;22.58;Sbc;;;;;;;;2MASX J12331368+1214487,IRAS 12307+1231,MCG +02-32-130,PGC 041683,SDSS J123313.69+121449.1,SDSS J123313.69+121449.2,SDSS J123313.70+121449.2;;; +IC3490;G;12:33:13.90;+10:55:42.7;Vir;0.59;0.33;64;15.60;;;13.76;;23.70;E;;;;;;;;PGC 041681,SDSS J123313.90+105542.7;;; +IC3491;G;12:33:08.99;+27:05:39.8;Com;0.83;0.21;6;16.05;;13.12;12.41;11.93;23.35;Sc;;;;;;;;2MASX J12330893+2705401,LEDA 086322,SDSS J123308.99+270539.7,SDSS J123308.99+270539.8;;;B-Mag taken from LEDA. +IC3492;G;12:33:19.78;+12:51:12.4;Vir;0.70;0.57;56;15.12;15.30;13.46;12.83;12.90;23.20;E;;;;;;;;2MASX J12331977+1251127,MCG +02-32-132,PGC 041698,SDSS J123319.77+125112.3;;;B-Mag taken from LEDA. +IC3493;*;12:33:18.88;+09:23:35.5;Vir;;;;;;;;;;;;;;;;;;SDSS J123318.87+092335.5;;; +IC3494;G;12:33:13.71;+27:35:02.8;Com;0.30;0.24;127;17.14;;15.72;15.06;14.62;23.27;E;;;;;;;;2MASX J12331373+2735021,LEDA 1812401,SDSS J123313.70+273502.6,SDSS J123313.71+273502.7,SDSS J123313.71+273502.8;;;B-Mag taken from LEDA. +IC3495;**;12:33:16.29;+26:48:31.7;Com;;;;;;;;;;;;;;;;;;SDSS J123316.28+264831.6;;; +IC3496;*;12:33:19.31;+26:45:19.6;Com;;;;;;;;;;;;;;;;;;SDSS J123319.31+264519.6;;The IC number includes a defect on the original Heidelberg plate.; +IC3497;*;12:33:28.54;+25:29:19.5;Com;;;;;;;;;;;;;;;;;;SDSS J123328.53+252919.5;;; +IC3498;G;12:33:28.97;+26:44:17.0;Com;0.69;0.24;56;16.50;;14.12;13.17;13.17;23.44;Sc;;;;;;;;2MASX J12332905+2644170,LEDA 086323,SDSS J123328.96+264416.9,SDSS J123328.97+264417.0;;; +IC3499;G;12:33:45.00;+10:59:44.6;Vir;1.61;0.56;125;14.50;;11.31;10.67;10.46;23.76;S0-a;;;;;;;;2MASX J12334500+1059445,MCG +02-32-138,PGC 041738,SDSS J123344.99+105944.6,UGC 07712;;; +IC3500;G;12:33:49.67;+13:57:46.0;Com;0.57;0.40;93;15.30;;;;;22.39;SBc;;;;;;;;PGC 041751,SDSS J123349.66+135745.9,SDSS J123349.67+135746.0;;; +IC3501;G;12:33:51.62;+13:19:20.8;Vir;0.93;0.84;25;15.00;;12.07;11.56;11.24;23.40;E;;;;;;;;2MASX J12335160+1319213,MCG +02-32-139,PGC 041754,SDSS J123351.61+131920.7,SDSS J123351.61+131920.8,SDSS J123351.62+131920.8;;; +IC3502;G;12:33:42.33;+26:37:02.5;Com;0.76;0.22;5;17.44;;;;;24.51;SBm;;;;;;;;SDSS J123342.33+263702.4,SDSS J123342.33+263702.5;;The IC number includes a neighboring star.;B-Mag taken from LEDA. +IC3503;*;12:33:48.27;+37:47:21.5;CVn;;;;;;;;;;;;;;;;;;SDSS J123348.27+374721.5;;; +IC3504;*;12:34:07.85;+06:53:10.9;Vir;;;;;;;;;;;;;;;;;;SDSS J123407.85+065310.9;;; +IC3505;G;12:34:10.31;+15:58:05.6;Com;0.85;0.35;172;15.30;;12.41;11.72;11.31;22.68;SBcd;;;;;;;;2MASX J12341031+1558058,IRAS 12316+1614,MCG +03-32-070,PGC 041792,SDSS J123410.30+155805.5,SDSS J123410.31+155805.6;;; +IC3506;G;12:34:06.74;+12:44:29.8;Vir;0.71;0.65;49;16.67;15.93;;12.83;;24.02;E;;;;;;;;PGC 041782,SDSS J123406.73+124429.7,SDSS J123406.74+124429.8;;; +IC3507;G;12:34:04.45;+25:21:46.2;Com;0.41;0.35;158;17.26;;14.08;13.45;12.83;24.20;E;;;;;;;;2MASX J12340447+2521461,LEDA 3089514,SDSS J123404.44+252146.1,SDSS J123404.44+252146.2;;;B-Mag taken from LEDA. +IC3508;G;12:34:06.95;+26:40:14.8;Com;1.03;0.95;49;15.40;;12.07;11.26;11.06;24.13;S0-a;;;;;;;;2MASX J12340693+2640151,MCG +05-30-021,PGC 041774,SDSS J123406.94+264014.8,SDSS J123406.95+264014.8;;; +IC3509;G;12:34:11.53;+12:02:56.3;Vir;1.01;0.72;69;15.30;;12.67;12.16;11.98;24.03;E;;;;;;;;2MASX J12341156+1202558,PGC 041797,SDSS J123411.53+120256.2,SDSS J123411.54+120256.3;;; +IC3510;G;12:34:14.81;+11:04:17.5;Vir;0.81;0.62;15;15.20;;12.30;11.79;11.42;23.26;E;;;;;;;;2MASX J12341479+1104177,MCG +02-32-142,PGC 041803,SDSS J123414.80+110417.4,UGC 07728;;; +IC3511;*;12:34:09.49;+27:20:55.1;Com;;;;;;;;;;;;;;;;;;;;The IC number includes a defect on the original Heidelberg plate.; +IC3512;*;12:34:09.66;+27:21:40.0;Com;;;;;;;;;;;;;;;;;;SDSS J123409.66+272140.0;;The IC number includes a defect on the original Heidelberg plate.; +IC3513;*;12:34:11.61;+27:19:50.0;Com;;;;;;;;;;;;;;;;;;SDSS J123411.60+271950.0;;The IC number includes a defect on the original Heidelberg plate.; +IC3514;**;12:34:15.79;+26:42:02.2;Com;;;;;;;;;;;;;;;;;;;;; +IC3515;G;12:34:16.10;+27:51:44.1;Com;0.65;0.26;62;15.61;;12.65;11.65;11.60;22.93;Sbc;;;;;;;;2MASX J12341609+2751441,PGC 1819983,SDSS J123416.09+275144.0,SDSS J123416.09+275144.1;;;B-Mag taken from LEDA. +IC3516;G;12:34:17.14;+27:27:08.3;Com;0.87;0.17;70;16.00;;13.07;12.42;12.11;23.40;Sbc;;;;;;;;2MASX J12341734+2727084,MCG +05-30-022,PGC 041808,SDSS J123417.14+272708.2,SDSS J123417.14+272708.3,UGC 07724;;The position in 1989H&RHI.C...0000H is incorrect.; +IC3517;G;12:34:30.76;+09:09:17.1;Vir;1.16;0.72;16;15.30;;;11.41;;23.94;SABd;;;;;;;;MCG +02-32-143,PGC 041829,UGC 07733;;; +IC3518;G;12:34:31.29;+09:37:24.4;Vir;1.32;0.54;37;14.79;;;;;23.34;I;;;;;;;;2MASX J12343187+0937347,PGC 041828,SDSS J123431.29+093724.3,SDSS J123431.29+093724.4,UGC 07734;;The 2MASX position is for a knot 13 arcsec northeast of the center.;B-Mag taken from LEDA. +IC3519;G;12:34:38.40;+15:36:09.7;Com;0.68;0.49;14;15.88;;;;;23.89;E;;;;;;;;PGC 041845;;;B-Mag taken from LEDA. +IC3520;G;12:34:31.81;+13:30:13.2;Com;0.85;0.60;26;15.40;;;12.71;;23.88;Sd;;;;;;;;PGC 041830,SDSS J123431.80+133013.2,SDSS J123431.81+133013.2;;2MASS position is off the western edge.; +IC3521;G;12:34:39.51;+07:09:36.7;Vir;1.39;1.03;21;13.74;;11.93;11.31;11.01;22.93;IB;;;;;;;;2MASX J12343901+0709260,IRAS 12321+0726,MCG +01-32-106,PGC 041847,SDSS J123439.50+070936.6,SDSS J123439.51+070936.7,UGC 07736;;2MASS position is in the southwestern portion.;B-Mag taken from LEDA. +IC3522;G;12:34:45.58;+15:13:14.8;Com;1.08;0.58;93;15.41;;;12.64;;23.77;I;;;;;;;;MCG +03-32-072,PGC 041865,SDSS J123445.57+151314.8,SDSS J123445.58+151314.8,UGC 07737;;;B-Mag taken from LEDA. +IC3523;G;12:34:39.40;+14:01:00.4;Com;0.38;0.32;139;17.08;;;;;23.74;Sbc;;;;;;;;2MASX J12343931+1401002,PGC 169559,SDSS J123439.40+140100.3,SDSS J123439.40+140100.4;;;B-Mag taken from LEDA. +IC3524;*;12:34:43.10;+14:14:39.6;Com;;;;;;;;;;;;;;;;;;SDSS J123443.10+141439.5;;; +IC3525;G;12:34:46.44;+10:10:36.1;Vir;0.36;0.29;6;16.49;;;;;23.36;Sc;;;;;;;;LEDA 1375716,SDSS J123446.43+101036.0,SDSS J123446.43+101036.1;;;B-Mag taken from LEDA. +IC3526;**;12:34:40.61;+25:41:02.9;Com;;;;;;;;;;;;;;;;;;;;; +IC3527;**;12:34:42.29;+26:09:18.4;Com;;;;;;;;;;;;;;;;;;;;; +IC3528;G;12:34:55.90;+15:33:56.2;Com;0.33;0.33;115;17.62;17.00;12.47;11.79;11.37;21.76;SABb;;;;;;;;2MASX J12345592+1533561,MCG +03-32-074a,PGC 041882,SDSS J123455.90+153356.1,SDSS J123455.90+153356.2,SDSS J123455.91+153356.2,UGC 07742 NOTES01;;; +IC3529;*;12:34:49.76;+25:41:55.6;Com;;;;;;;;;;;;;;;;;;SDSS J123449.76+254155.5;;; +IC3530;G;12:34:49.32;+17:48:51.4;Com;1.75;1.22;133;15.20;;12.30;11.66;11.43;24.48;E-S0;;;;;;;;2MASX J12344930+1748522,MCG +03-32-073,PGC 041853;;; +IC3531;G;12:34:56.54;+26:37:35.7;Com;0.43;0.39;80;16.55;;13.91;13.20;12.93;23.56;E;;;;;;;;2MASX J12345653+2637358,SDSS J123456.54+263735.6,SDSS J123456.55+263735.7;;;B-Mag taken from LEDA. +IC3532;*;12:34:57.52;+25:52:50.3;Com;;;;;;;;;;;;;;;;;;;;The IC number may include a faint neighboring galaxy.; +IC3533;G;12:35:01.28;+25:46:47.0;Com;0.44;0.30;27;15.70;;13.09;12.25;11.99;22.84;Sab;;;;;;;;2MASX J12350125+2546468,PGC 041891,SDSS J123501.27+254647.0,SDSS J123501.28+254646.9;;; +IC3534;G;12:34:52.13;+14:58:41.4;Com;0.48;0.47;106;16.12;;;;;23.23;SBc;;;;;;;;2MASX J12345214+1458412,PGC 165235,SDSS J123452.13+145841.4;;;B-Mag taken from LEDA. +IC3535;*;12:35:10.90;+25:43:55.1;Com;;;;;;;;;;;;;;;;;;;;; +IC3536;G;12:35:12.49;+26:32:00.3;Com;0.87;0.19;155;16.13;;13.97;13.30;13.17;23.53;Sc;;;;;;;;2MASX J12351248+2631598,MCG +05-30-024,PGC 041912,SDSS J123512.48+263200.3,SDSS J123512.49+263200.3;;;B-Mag taken from LEDA. +IC3537;*;12:35:22.46;+07:39:10.8;Vir;;;;;;;;;;;;;;;;;;SDSS J123522.46+073910.8;;; +IC3538;*;12:35:15.56;+26:14:07.9;Com;;;;;;;;;;;;;;;;;;;;; +IC3539;*;12:35:20.09;+23:58:59.3;Com;;;;;;;;;;;;;;;;;;SDSS J123520.08+235859.2;;; +IC3540;G;12:35:27.23;+12:45:00.9;Vir;0.88;0.79;68;14.80;;12.15;11.51;11.28;23.04;S0;;;;;;;;2MASX J12352723+1245014,MCG +02-32-146,PGC 041936,SDSS J123527.22+124500.7,SDSS J123527.22+124500.8;;; +IC3541;*;12:35:21.72;+23:58:30.9;Com;;;;;;;;;;;;;;;;;;SDSS J123521.72+235830.8;;; +IC3542;G;12:35:41.19;+11:40:01.8;Vir;0.66;0.43;164;15.65;;12.54;11.80;11.62;23.19;SBb;;;;;;;;2MASX J12354122+1140020,IRAS 12332+1156,PGC 041970,SDSS J123541.18+114001.7,SDSS J123541.18+114001.8,SDSS J123541.19+114001.8;;Listed incorrectly as CGCG 1233.2+1158 (non-existent galaxy) in VCC.;B-Mag taken from LEDA. +IC3543;Dup;12:35:41.42;+26:17:09.0;Com;;;;;;;;;;;;;;;4565C;;;;;; +IC3544;**;12:35:47.40;+14:18:02.0;Com;;;;;;;;;;;;;;;;;;;;; +IC3545;Dup;12:35:41.18;+26:31:23.2;Com;;;;;;;;;;;;;;;4555;;;;;; +IC3546;Dup;12:35:41.69;+26:13:19.9;Com;;;;;;;;;;;;;;;4565B;;;;;; +IC3547;*;12:35:48.89;+26:19:44.8;Com;;;;;;;;;;;;;;;;;;SDSS J123548.88+261944.7;;; +IC3548;G;12:35:56.63;+10:56:10.7;Vir;0.74;0.48;122;16.10;;;12.82;;24.30;E;;;;;;;;PGC 042001,SDSS J123556.62+105610.6;;;B-Mag taken from LEDA. +IC3549;*;12:35:50.85;+26:23:42.8;Com;;;;;;14.55;13.97;13.91;;;;;;;;;;2MASS J12355084+2623430,SDSS J123550.85+262342.8;;; +IC3550;Dup;12:35:52.12;+27:55:55.5;Com;;;;;;;;;;;;;;;4559C;;;;;; +IC3551;HII;12:35:53.71;+27:57:51.0;Com;;;;;;;;;;;;;;;;;;;;Group of HII regions in NGC 4559.; +IC3552;HII;12:35:53.90;+27:59:38.0;Com;;;;;;;;;;;;;;;;;;;;HII region in NGC 4559.; +IC3553;*;12:35:55.93;+26:11:35.0;Com;;;;;;;;;;;;;;;;;;SDSS J123555.93+261135.0;;; +IC3554;*;12:35:55.19;+27:55:38.4;Com;;;;;;;;;;;;;;;;;;SDSS J123555.19+275538.3;;; +IC3555;HII;12:35:55.95;+27:59:20.0;Com;;;;;;;;;;;;;;;;;;;;Group of HII regions in NGC 4559.; +IC3556;G;12:35:58.46;+26:57:57.8;Com;0.56;0.34;177;15.60;;12.71;12.08;11.81;23.08;S0;;;;;;;;2MASX J12355844+2657570,MCG +05-30-029,PGC 042005,SDSS J123558.45+265757.7,SDSS J123558.45+265757.8,UGC 07765 NOTES03;;UGC NOTES misprints the identification as 'NGC 4536'.; +IC3557;GPair;12:36:08.17;+16:38:27.1;Com;0.40;;;;;;;;;;;;;;;;;MCG +03-32-077;;;Diameter of the group inferred by the author. +IC3557 NED01;G;12:36:08.14;+16:38:29.3;Com;0.95;0.90;85;15.97;;12.20;11.51;11.05;24.73;E;;;;;;;;2MASX J12360813+1638291,MCG +03-32-077 NED01,PGC 042015,SDSS J123608.14+163829.3;;;B-Mag taken from LEDA. +IC3557 NED02;G;12:36:08.44;+16:38:26.1;Com;0.10;0.10;129;17.56;;;;;;;;;;;;;;SDSS J123608.45+163825.3,SDSS J123608.45+163825.2;;Forms a close GPair with IC 3557 NED01.;B-Mag taken from LEDA +IC3558;G;12:36:02.80;+11:50:59.3;Vir;0.33;0.30;51;17.39;;14.62;13.56;13.23;23.71;Sbc;;;;;;;;2MASX J12360281+1150595,PGC 165253,SDSS J123602.79+115059.2,SDSS J123602.80+115059.3;;;B-Mag taken from LEDA. +IC3559;G;12:36:03.36;+26:59:14.5;Com;0.50;0.18;69;15.60;;13.68;12.92;12.38;23.15;Sbc;;;;;;;;2MASX J12360338+2659141,MCG +05-30-031,PGC 042012,SDSS J123603.35+265914.4,SDSS J123603.36+265914.5;;; +IC3560;G;12:36:03.91;+27:04:41.5;Com;0.78;0.64;52;16.38;;13.04;12.26;12.01;24.20;SBab;;;;;;;;2MASX J12360390+2704411,LEDA 3089322,SDSS J123603.90+270441.5,SDSS J123603.91+270441.5;;;B-Mag taken from LEDA. +IC3561;G;12:36:04.79;+26:53:58.6;Com;0.60;0.19;71;15.70;;12.54;11.71;11.62;23.41;E;;;;;;;;2MASX J12360480+2653581,MCG +05-30-032,PGC 042013,SDSS J123604.79+265358.5,SDSS J123604.80+265358.5;;; +IC3562;G;12:36:10.56;+09:55:21.4;Vir;0.93;0.36;46;15.60;;;13.95;;23.93;I;;;;;;;;PGC 042021,SDSS J123610.55+095521.4,SDSS J123610.56+095521.4;;; +IC3563;HII;12:36:07.22;+27:55:38.5;Com;;;;;;;;;;;;;;;;;;;;HII region in NGC 3559.; +IC3564;*Ass;12:36:08.09;+27:55:42.2;Com;;;;;;;;;;;;;;;;;;;;"Stellar association in NGC 3559; IC number includes a neighboring star."; +IC3565;G;12:36:12.26;+26:45:22.0;Com;0.31;0.23;23;16.96;;14.49;13.96;13.72;23.48;E;;;;;;;;2MASX J12361227+2645221,LEDA 1787382,SDSS J123612.26+264521.9,SDSS J123612.26+264522.0;;;B-Mag taken from LEDA. +IC3566;Other;12:36:21.72;+11:09:53.6;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3567;G;12:36:22.72;+13:36:10.3;Com;0.67;0.52;15;15.30;;13.47;12.85;12.71;22.90;Sbc;;;;;;;;2MASX J12362267+1336101,PGC 042044,SDSS J123622.72+133610.3;;; +IC3568;PN;12:33:06.78;+82:33:50.1;Cam;0.17;;;12.80;10.60;11.37;11.40;10.84;;;;;;;;;;2MASX J12330668+8233506,IRAS 12317+8250,PK 123+34 1,PN G123.6+34.5,UGC 07731;;; +IC3569;Dup;12:36:08.20;+19:19:22.5;Com;;;;;;;;;;;;;;;4561;;;;;; +IC3570;*;12:36:18.28;+24:04:42.5;Com;;;;;;;;;;;;;;;;;;SDSS J123618.27+240442.5;;; +IC3571;G;12:36:19.99;+26:05:01.6;Com;0.60;0.51;121;17.52;;;;;25.03;I;;;;;;;;PGC 2793674,SDSS J123619.99+260501.5;;;B-Mag taken from LEDA. +IC3572;**;12:36:27.93;+11:37:06.6;Vir;;;;;;;;;;;;;;;;;;;;; +IC3573;G;12:36:27.22;+11:45:32.8;Vir;0.46;0.32;141;16.65;;13.58;12.77;12.62;23.40;Sc;;;;;;;;2MASX J12362720+1145335,LEDA 165255,SDSS J123627.18+114533.7;;;B-Mag taken from LEDA. +IC3574;G;12:36:27.83;+12:24:18.6;Vir;0.73;0.58;121;15.34;;12.17;11.50;11.14;23.54;E;;;;;;;;2MASX J12362782+1224191,PGC 042052,SDSS J123627.82+122418.6;;;B-Mag taken from LEDA. +IC3575;G;12:36:32.38;+13:44:54.3;Com;0.66;0.47;156;16.26;;;;;24.21;E;;;;;;;;PGC 042062,SDSS J123632.37+134454.3,SDSS J123632.38+134454.3;;;B-Mag taken from LEDA. +IC3576;G;12:36:37.68;+06:37:15.2;Vir;2.30;2.17;0;15.90;15.40;;11.83;;24.86;Sm;;;;;;;;MCG +01-32-112,PGC 042074,SDSS J123637.67+063715.1,SDSS J123637.67+063715.2,SDSS J123637.68+063715.2,UGC 07781;;; +IC3577;Other;12:36:36.27;+11:53:49.7;Vir;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC3578;G;12:36:39.41;+11:06:06.7;Vir;0.85;0.35;138;15.10;;;12.64;;22.90;Sc;;;;;;;;MCG +02-32-153,PGC 042079,SDSS J123639.41+110606.7,UGC 07782;;; +IC3579;*;12:36:32.74;+26:06:14.9;Com;;;;;;;16.67;15.76;;;;;;;;;;2MASS J12363272+2606149,SDSS J123632.74+260614.9;;; +IC3580;G;12:36:29.23;+18:18:01.8;Com;0.86;0.76;57;15.67;;;;;24.23;E;;;;;;;;2MASX J12362919+1818022,SDSS J123629.22+181801.7,SDSS J123629.23+181801.7;;;B-Mag taken from LEDA. +IC3581;G;12:36:38.11;+24:25:44.5;Com;0.79;0.48;49;14.90;;11.82;11.12;10.73;22.74;SBb;;;;;;;;2MASX J12363799+2425429,IRAS 12341+2442,MCG +04-30-009,PGC 042076,SDSS J123637.87+242541.8,SDSS J123638.05+242543.5,SDSS J123638.06+242543.5,SDSS J123638.11+242544.4;;; +IC3582;G;12:36:36.91;+26:14:04.8;Com;0.29;0.25;54;16.67;;13.87;13.03;13.05;23.02;E;;;;;;;;2MASX J12363689+2614049,LEDA 1768338,SDSS J123636.90+261404.8,SDSS J123636.91+261404.8;;;B-Mag taken from LEDA. +IC3583;G;12:36:43.49;+13:15:33.6;Vir;1.05;0.52;5;13.31;;;11.51;;21.23;IB;;;;;;;;IRAS 12341+1332,MCG +02-32-154,PGC 042081,UGC 07784;;; +IC3584;*;12:36:45.10;+12:13:59.0;Vir;;;;;;;;;;;;;;;;;;;;; +IC3585;G;12:36:39.90;+26:49:47.8;Com;0.82;0.67;108;15.00;;11.45;10.70;10.51;23.31;S0;;;;;;;;2MASX J12363990+2649479,MCG +05-30-035,PGC 042067,SDSS J123639.89+264947.7,SDSS J123639.90+264947.7,SDSS J123639.90+264947.8,SDSS J123639.91+264947.7,UGC 07783;;; +IC3586;G;12:36:54.85;+12:31:12.3;Vir;1.16;1.00;73;15.30;;13.02;12.46;12.13;23.58;S0;;;;;;;;2MASX J12365485+1231124,MCG +02-32-157,PGC 042099,SDSS J123654.84+123112.2,SDSS J123654.84+123112.3;;; +IC3587;G;12:36:48.33;+27:32:54.7;Com;1.43;0.21;121;16.00;;12.57;11.68;11.25;23.78;SBc;;;;;;;;2MASX J12364835+2732549,IRAS 12343+2749,MCG +05-30-036,PGC 042083,SDSS J123648.36+273256.2,SDSS J123648.37+273256.1,SDSS J123648.37+273256.2,UGC 07787;;Multiple SDSS entries describe this object.; +IC3588;Dup;12:36:56.38;+14:13:02.5;Com;;;;;;;;;;;;;;;4571;;;;;; +IC3589;*;12:37:01.20;+06:56:13.2;Vir;;;;15.60;;13.93;13.58;13.54;;;;;;;;;;2MASS J12370120+0656133,SDSS J123701.20+065613.2;;IC 3591 = UGC 07790 is often mistakenly called IC 3589.; +IC3590;G;12:36:50.71;+27:16:41.3;Com;0.91;0.24;127;15.62;;12.51;11.81;11.57;23.44;Sab;;;;;;;;2MASX J12365067+2716409,LEDA 1803149,SDSS J123650.70+271641.3,SDSS J123650.71+271641.3;;;B-Mag taken from LEDA. +IC3591;G;12:37:03.04;+06:55:35.9;Vir;0.79;0.49;46;14.60;;;11.29;;22.20;I;;;;;;;;MCG +01-32-115,PGC 042108,UGC 07790;;HOLM 428B = IC 3589 is a star.; +IC3592;Dup;12:36:53.44;+27:51:43.3;Com;;;;;;;;;;;;;;;4559A;;;;;; +IC3593;Dup;12:36:53.93;+27:44:56.8;Com;;;;;;;;;;;;;;;4559B;;;;;; +IC3594;*;12:36:56.39;+26:06:55.8;Com;;;;;;;;;;;;;;;;;;SDSS J123656.39+260655.7;;The IC number includes a defect on the original Heidelberg plate.; +IC3595;G;12:37:06.40;+23:47:12.8;Com;0.39;0.27;109;16.80;;;;;23.51;Sc;;;;;;;;2MASX J12370638+2347120,PGC 1693713,SDSS J123706.39+234712.7,SDSS J123706.40+234712.7;;;B-Mag taken from LEDA. +IC3596;Other;12:37:18.90;+26:31:15.3;Com;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC3597;G;12:37:24.64;+23:51:50.6;Com;0.82;0.62;78;16.65;;;;;24.80;SBc;;;;;;;;LEDA 086325,SDSS J123724.63+235150.5,SDSS J123724.64+235150.6;;;B-Mag taken from LEDA. +IC3598;G;12:37:21.08;+28:12:29.4;Com;1.41;0.40;139;14.74;;11.68;10.97;10.64;23.77;Sab;;;;;;;;2MASX J12372104+2812294,MCG +05-30-040,PGC 042137,SDSS J123721.07+281229.3,SDSS J123721.08+281229.3,SDSS J123721.08+281229.4,UGC 07791;;; +IC3599;G;12:37:41.20;+26:42:27.6;Com;0.51;0.30;129;15.70;16.50;12.98;12.55;11.97;22.84;Sb;;;;;;;;2MASX J12374117+2642272,PGC 042154,SDSS J123741.18+264227.4,SDSS J123741.19+264227.5,SDSS J123741.20+264227.5;;; +IC3600;G;12:37:41.16;+27:07:46.4;Com;0.67;0.61;134;15.50;;13.72;12.78;12.72;23.56;S0;;;;;;;;2MASX J12374116+2707442,MCG +05-30-041,PGC 042161,SDSS J123741.16+270746.4;;; +IC3601;G;12:37:53.64;+15:13:28.8;Com;0.79;0.52;152;15.73;;12.41;11.73;11.63;23.84;E?;;;;;;;;2MASX J12375363+1513287,PGC 165275,SDSS J123753.64+151328.7;;;B-Mag taken from LEDA. +IC3602;G;12:38:18.30;+10:04:22.2;Vir;0.82;0.28;74;16.35;;13.04;12.34;11.84;24.71;E;;;;;;;;2MASX J12381827+1004222,LEDA 3091291,SDSS J123818.30+100422.2;;The IC identification is not certain.;B-Mag taken from LEDA. +IC3603;G;12:38:16.15;+15:34:11.3;Com;0.36;0.24;157;16.12;;12.78;12.23;11.74;;E;;;;;;;;2MASX J12381616+1534110,PGC 3090633,SDSS J123816.15+153411.2,SDSS J123816.15+153411.3;;;B-Mag taken from LEDA. +IC3604;G;12:38:20.72;+11:43:50.6;Vir;0.52;0.36;174;15.98;;;;;23.37;SBa;;;;;;;;2MASX J12382074+1143502,PGC 1397945,SDSS J123820.71+114350.5,SDSS J123820.71+114350.6,SDSS J123820.72+114350.6;;;B-Mag taken from LEDA. +IC3605;G;12:38:20.95;+19:32:28.8;Com;0.70;0.45;12;16.50;;;;;23.36;Sm;;;;;;;;LEDA 086642,SDSS J123820.95+193228.7;;; +IC3606;G;12:38:25.09;+12:36:38.2;Vir;0.61;0.49;16;16.49;;12.91;12.15;11.88;24.27;E;;;;;;;;2MASX J12382508+1236380,PGC 1412725,SDSS J123825.09+123638.2;;;B-Mag taken from LEDA. +IC3607;G;12:38:32.17;+10:22:35.5;Vir;0.42;0.25;141;16.58;;;;;23.49;E;;;;;;;;PGC 042248,SDSS J123832.16+102235.5;;;B-Mag taken from LEDA. +IC3608;G;12:38:37.33;+10:28:33.2;Vir;3.35;0.45;93;15.40;;12.12;11.07;10.69;24.76;Sb;;;;;;;;2MASX J12383732+1028342,PGC 042264,SDSS J123837.33+102833.1,SDSS J123837.33+102833.2,SDSS J123837.35+102833.1,UGC 07808;;; +IC3609;G;12:38:34.72;+14:21:08.7;Com;0.38;0.26;18;14.96;;;;;21.45;Sa;;;;;;;;2MASX J12383473+1421082,PGC 042251,SDSS J123834.72+142108.6,SDSS J123834.72+142108.7;;;B-Mag taken from LEDA. +IC3610;G;12:38:47.14;+26:52:22.3;Com;0.32;0.18;130;17.43;;15.24;15.03;14.40;23.42;Sb;;;;;;;;2MASX J12384716+2652221,PGC 1790902,SDSS J123847.13+265222.2,SDSS J123847.13+265222.3,SDSS J123847.14+265222.3;;The IC number also includes a neighboring star.;B-Mag taken from LEDA. +IC3611;G;12:39:04.14;+13:21:48.7;Vir;1.37;0.70;132;14.70;;12.37;11.84;11.42;23.14;S?;;;;;;;;2MASX J12390399+1321496,MCG +02-32-164,PGC 042307,SDSS J123904.05+132149.2,SDSS J123904.22+132146.6,SDSS J123904.22+132146.7,UGC 07817;;; +IC3612;G;12:39:04.70;+14:43:52.1;Com;1.05;0.63;44;15.40;;13.94;13.50;13.57;23.84;S0;;;;;;3616;;2MASX J12390464+1443456,PGC 042309,SDSS J123904.70+144352.0,SDSS J123904.71+144352.1,UGC 07814;;; +IC3613;G;12:39:04.79;+13:45:32.4;Com;0.49;0.28;159;17.03;;13.09;12.36;12.04;24.08;S0-a;;;;;;;;2MASX J12390481+1345316,PGC 165284,SDSS J123904.78+134532.4,SDSS J123904.79+134532.4;;;B-Mag taken from LEDA. +IC3614;G;12:39:01.08;+26:18:10.2;Com;0.30;0.22;158;17.73;;;;;23.56;Sc;;;;;;;;PGC 169886,SDSS J123901.07+261810.2;;The IC number includes a neighboring star.;B-Mag taken from LEDA. +IC3615;G;12:39:01.61;+18:12:02.4;Com;1.06;0.31;11;15.40;;12.97;12.21;12.38;23.09;Sc;;;;;;;;2MASX J12390161+1812023,MCG +03-32-079,PGC 042306,SDSS J123901.61+181202.7,UGC 07815;;; +IC3616;Dup;12:39:04.70;+14:43:52.1;Com;;;;;;;;;;;;;;;;3612;;;;; +IC3617;G;12:39:25.00;+07:57:57.0;Vir;0.74;0.31;63;14.80;;;12.19;;21.79;I;;;;;;;;MCG +01-32-127,PGC 042348,UGC 07822;;; +IC3618;G;12:39:17.13;+26:40:40.0;Com;0.50;0.48;74;15.50;;12.27;11.48;11.17;22.84;S0;;;;;;;;2MASX J12391710+2640394,PGC 042315,SDSS J123917.12+264039.9,SDSS J123917.13+264040.0;;; +IC3619;**;12:39:18.78;+24:08:32.7;Com;;;;;;;;;;;;;;;;;;;;; +IC3620;G;12:39:18.02;+27:54:31.1;Com;0.76;0.22;165;15.60;;12.80;12.09;11.74;22.86;Sc;;;;;;;;2MASX J12391801+2754314,PGC 042330,SDSS J123918.01+275431.0,SDSS J123918.02+275431.1;;; +IC3621;G;12:39:33.58;+15:30:09.4;Com;1.01;0.75;14;15.00;;12.23;11.46;11.27;24.52;E;;;;;;;;2MASX J12393357+1530091,LEDA 3090634,SDSS J123933.58+153009.3;;; +IC3622;G;12:39:32.48;+15:25:55.4;Com;0.30;0.25;131;16.03;;;;;;Sbc;;;;;;;;2MASX J12393247+1525550,SDSS J123932.48+152555.3,SDSS J123932.49+152555.4;;;B-Mag taken from LEDA. +IC3623;G;12:39:27.62;+27:06:08.4;Com;0.80;0.58;56;15.20;;12.13;11.43;11.16;23.51;E;;;;;;;;2MASX J12392764+2706084,MCG +05-30-050,PGC 042353,SDSS J123927.62+270608.3,SDSS J123927.62+270608.4,SDSS J123927.63+270608.3;;; +IC3624;G;12:39:34.48;+11:58:55.9;Vir;0.49;0.40;99;16.52;;;;;23.67;Sb;;;;;;;;2MASX J12393449+1158561,PGC 1401857,SDSS J123934.47+115855.8,SDSS J123934.47+115855.9,SDSS J123934.48+115855.9;;;B-Mag taken from LEDA. +IC3625;G;12:39:33.17;+10:58:03.6;Vir;0.43;0.41;80;15.50;;12.55;11.77;11.46;22.37;S0;;;;;;;;2MASX J12393314+1058037,MCG +02-32-165,PGC 042361,PGC 042364,SDSS J123933.16+105803.6,SDSS J123933.17+105803.6;;Identified by VCC as bright component of CGCG 1237.1+1115.; +IC3626;G;12:39:31.64;+25:40:38.6;Com;0.54;0.32;15;15.70;;13.17;12.49;12.16;23.01;SBc;;;;;;;;2MASX J12393166+2540384,PGC 042355,SDSS J123931.64+254038.6;;; +IC3627;G;12:39:32.00;+27:29:50.2;Com;0.44;0.25;76;16.37;;13.22;12.54;12.25;23.47;E;;;;;;;;2MASX J12393201+2729504,IRAS 12370+2746,LEDA 139990,SDSS J123932.01+272950.4,SDSS J123932.01+272950.5;;;B-Mag taken from LEDA. +IC3628;*;12:39:38.81;+26:14:20.0;Com;;;;;;;;;;;;;;;;;;SDSS J123938.80+261420.0;;; +IC3629;G;12:39:46.66;+13:31:59.9;Com;0.98;0.47;73;15.20;;12.62;11.86;11.51;23.49;SBab;;;;;;;;2MASX J12394667+1332001,MCG +02-32-167,PGC 042387,SDSS J123946.65+133159.8,SDSS J123946.66+133159.8,SDSS J123946.66+133159.9,SDSS J123946.67+133159.9;;; +IC3630;*;12:39:46.60;+25:25:57.1;Com;;;;;;;;;;;;;;;;;;SDSS J123946.59+252557.0;;; +IC3631;G;12:39:48.01;+12:58:26.3;Vir;1.06;0.72;91;14.50;;11.91;11.26;11.11;23.05;S0-a;;;;;;;;2MASX J12394804+1258261,MCG +02-32-169,PGC 042389,SDSS J123948.00+125826.2,SDSS J123948.01+125826.2,SDSS J123948.01+125826.3,UGC 07825;;; +IC3632;G;12:40:00.00;+26:40:56.0;Com;0.40;0.30;92;16.75;;15.09;14.44;14.09;24.09;E;;;;;;;;2MASX J12395987+2640552,PGC 169888;;;B-Mag taken from LEDA. +IC3633;G;12:40:11.25;+09:53:46.1;Vir;0.58;0.44;125;15.40;;14.17;13.42;13.50;23.45;E;;;;;;;;2MASX J12401125+0953454,PGC 042426,SDSS J124011.25+095346.0,SDSS J124011.25+095346.1;;; +IC3634;G;12:40:11.36;+09:50:52.0;Vir;0.93;0.72;48;15.75;;;13.69;;24.47;E;;;;;;;;PGC 042425,SDSS J124011.36+095051.9;;Multiple SDSS entries describe this source.;B-Mag taken from LEDA. +IC3635;G;12:40:13.38;+12:52:29.2;Vir;0.85;0.65;165;15.50;;13.24;12.53;12.74;23.47;S?;;;;;;;;2MASX J12401333+1252299,PGC 042430,SDSS J124013.37+125229.1,SDSS J124013.37+125229.2,UGC 07830;;; +IC3636;**;12:40:15.54;+22:04:28.4;Com;;;;;;;;;;;;;;;;;;;;; +IC3637;G;12:40:19.57;+14:42:54.0;Com;1.23;0.74;19;15.60;;;11.52;;24.00;E-S0;;;;;;;;PGC 042443,SDSS J124019.56+144253.9,SDSS J124019.57+144254.0;;; +IC3638;G;12:40:16.60;+10:31:06.7;Vir;0.68;0.58;55;14.60;;12.62;11.74;11.47;22.20;Sbc;;;;;;;;2MASX J12401660+1031064,MCG +02-32-172,PGC 042435,SDSS J124016.59+103106.7;;; +IC3639;G;12:40:52.85;-36:45:21.1;Cen;1.24;1.16;41;13.01;13.50;10.57;9.93;9.60;22.21;SBbc;;;;;;;;2MASX J12405287-3645210,ESO 381-008,ESO-LV 381-0080,IRAS 12381-3628,MCG -06-28-011,PGC 042504;;; +IC3640;G;12:40:25.20;+26:31:27.0;Com;0.45;0.25;47;15.97;;13.11;12.44;12.18;23.31;E;;;;;;;;2MASX J12402516+2631287,LEDA 169892;;;B-Mag taken from LEDA. +IC3641;G;12:40:26.88;+26:31:17.7;Com;0.66;0.14;174;17.90;;;;;25.75;;;;;;;;;PGC 2800811,SDSS J124026.87+263117.7,SDSS J124026.88+263117.7;;;B-Mag taken from LEDA. +IC3642;G;12:40:25.73;+26:43:52.4;Com;0.37;0.34;26;16.41;;14.05;13.39;12.84;23.16;E;;;;;;;;2MASX J12402569+2643517,PGC 1786619;;;B-Mag taken from LEDA. +IC3643;G;12:40:40.87;+12:24:23.7;Vir;0.53;0.34;109;16.61;;;;;23.78;Sb;;;;;;;;2MASX J12404087+1224237,PGC 1408965,SDSS J124040.86+122423.7,SDSS J124040.87+122423.7;;;B-Mag taken from LEDA. +IC3644;G;12:40:36.23;+26:30:16.6;Com;0.91;0.23;15;15.40;;12.72;11.92;11.58;23.72;SBb;;;;;;;;2MASX J12403619+2630207,MCG +05-30-052,PGC 042479,SDSS J124036.23+263016.6;;; +IC3645;*;12:40:37.61;+26:32:28.9;Com;;;;;;;;;;;;;;;;;;SDSS J124037.60+263228.9;;; +IC3646;G;12:40:38.50;+26:31:34.3;Com;0.69;0.30;89;15.40;;13.30;12.81;12.53;22.90;Sbc;;;;;;;;2MASX J12403850+2631336,MCG +05-30-053,PGC 042478,SDSS J124038.50+263134.3;;; +IC3647;G;12:40:53.11;+10:28:31.3;Vir;1.34;0.84;140;15.30;;;11.75;;24.08;I;;;;;;;;MCG +02-32-173,PGC 042503,SDSS J124053.11+102831.3,UGC 07834;;Multiple SDSS entries describe this source.; +IC3648;*;12:40:52.19;+12:59:06.0;Vir;;;;;;;;;;;;;;;;;;;;; +IC3649;G;12:40:49.69;+21:06:17.1;Com;0.30;0.26;97;16.94;;14.73;13.86;13.84;23.18;Sbc;;;;;;;;2MASX J12404968+2106175,PGC 1642864,SDSS J124049.68+210617.0;;;B-Mag taken from LEDA. +IC3650;**;12:40:48.51;+26:28:21.8;Com;;;;;;;;;;;;;;;;;;;;; +IC3651;G;12:40:52.91;+26:43:41.3;Com;1.05;1.04;95;14.40;;11.35;10.68;10.43;23.30;S0;;;;;;;;2MASX J12405286+2643405,MCG +05-30-054,PGC 042500,SDSS J124052.90+264341.2,UGC 07835;;; +IC3652;G;12:40:58.56;+11:11:04.2;Vir;0.99;0.92;94;15.10;;11.85;11.24;11.05;23.15;E;;;;;;;;2MASX J12405858+1111038,MCG +02-32-175,PGC 042521,SDSS J124058.56+111104.1,SDSS J124058.56+111104.2,UGC 07838;;; +IC3653;G;12:41:15.73;+11:23:14.1;Vir;0.62;0.48;15;14.70;;11.46;10.79;10.58;22.25;E;;;;;;;;2MASX J12411572+1123138,MCG +02-32-178,PGC 042550,SDSS J124115.73+112314.0,SDSS J124115.73+112314.1;;; +IC3654;G;12:41:12.50;+22:35:22.0;Com;0.39;0.30;49;16.99;;13.62;12.82;12.65;23.72;E;;;;;;;;2MASX J12411246+2235221,LEDA 086326,SDSS J124112.49+223522.0;;;B-Mag taken from LEDA. +IC3655;G;12:41:14.46;+20:39:58.3;Com;0.30;0.23;114;16.75;;14.53;13.81;13.51;23.05;Sab;;;;;;;;2MASX J12411443+2039581,LEDA 1633163,SDSS J124114.46+203958.1,SDSS J124114.46+203958.2;;;B-Mag taken from LEDA. +IC3656;G;12:41:13.93;+22:35:41.9;Com;0.41;0.21;94;16.50;;13.52;12.67;12.46;23.28;Sbc;;;;;;;;2MASX J12411390+2235421,LEDA 086327,SDSS J124113.93+223541.8,SDSS J124113.93+223541.9;;; +IC3657;G;12:41:19.02;+21:40:21.0;Com;0.23;0.19;20;17.82;;;;;23.50;E;;;;;;;;SDSS J124119.02+214020.9;;The IC number includes a defect on the original Heidelberg plate.;B-Mag taken from LEDA +IC3658;G;12:41:20.63;+14:42:02.0;Com;1.34;0.70;74;15.50;;;11.83;;24.68;E;;;;;;;;PGC 042558,SDSS J124120.63+144201.9;;; +IC3659;G;12:41:27.62;+22:55:50.9;Com;0.47;0.25;76;16.09;;14.13;13.47;13.34;23.04;Sbc;;;;;;;;2MASX J12412760+2255508,LEDA 086328,SDSS J124127.61+225550.8,SDSS J124127.62+225550.8;;;B-Mag taken from LEDA. +IC3660;*;12:41:36.84;+21:05:36.1;Com;;;;;;;;;;;;;;;;;;SDSS J124136.83+210536.0;;; +IC3661;G;12:41:35.73;+22:29:41.5;Com;0.55;0.14;109;17.25;;;;;23.46;Sm;;;;;;;;PGC 1670992,SDSS J124135.72+222941.4;;;B-Mag taken from LEDA. +IC3662;G;12:41:36.27;+23:25:30.6;Com;0.63;0.47;133;15.20;;12.41;11.77;11.29;22.78;Sb;;;;;;;;2MASX J12413628+2325308,MCG +04-30-014,PGC 042583,SDSS J124136.26+232530.5;;; +IC3663;G;12:41:39.41;+12:14:50.6;Vir;0.95;0.56;3;15.65;;;12.40;;24.19;E;;;;;;;;PGC 042586,SDSS J124139.41+121450.6;;; +IC3664;*;12:41:41.55;+19:56:38.9;Com;;;;;;;;;;;;;;;;;;SDSS J124141.55+195638.8;;; +IC3665;G;12:41:46.70;+11:29:17.7;Vir;0.82;0.58;85;15.30;;;11.85;;23.09;I;;;;;;;;MCG +02-32-180,PGC 042598,SDSS J124146.70+112917.7,UGC 07855;;Multiple SDSS entries describe this object.; +IC3666;*;12:41:53.37;+07:50:42.1;Vir;;;;;;;;;;;;;;;;;;SDSS J124153.36+075042.1;;; +IC3667;Dup;12:41:32.85;+41:09:02.8;CVn;;;;;;;;;;;;;;;4618;;;;;; +IC3668;Other;12:41:32.89;+41:07:27.0;CVn;0.79;0.44;31;13.13;;;;;;;;;;;;;;2MASX J12413292+4107257,SDSS J124132.87+410726.9,SDSS J124132.89+410727.0;;This is part of the galaxy NGC 4618. B-Mag taken from LEDA.; +IC3669;Other;12:41:35.91;+41:08:11.7;CVn;0.02;0.02;0;19.07;;;;;;;;;;;;;;;;This is part of the galaxy NGC 4618. B-Mag taken from LEDA.; +IC3670;G;12:41:55.02;+11:46:27.0;Vir;0.37;0.30;55;15.86;;;;;22.26;Sbc;;;;;;;;PGC 1398556,SDSS J124155.01+114626.9,SDSS J124155.02+114627.0;;;B-Mag taken from LEDA. +IC3671;G;12:41:51.38;+23:30:38.4;Com;0.58;0.56;35;15.50;;;;;23.06;Sbc;;;;;;;;MCG +04-30-015,PGC 042599,SDSS J124151.37+233038.3;;; +IC3672;Dup;12:42:08.66;+11:45:15.4;Vir;;;;;;;;;;;;;;;;0809;;;;; +IC3673;*;12:42:04.32;+21:08:18.0;Com;;;;;;;;;;;;;;;;;;SDSS J124204.32+210818.0;;; +IC3674;**;12:42:05.12;+22:30:38.8;Com;;;;;;;;;;;;;;;;;;;;; +IC3675;Dup;12:41:52.72;+41:16:26.3;CVn;;;;;;;;;;;;;;;4625;;;;;; +IC3676;*;12:42:12.28;+13:33:35.4;Com;;;;;;;;;;;;;;;;;;SDSS J124212.27+133335.3;;; +IC3677;G;12:42:11.84;+20:53:05.5;Com;0.36;0.28;49;16.78;;13.23;12.62;12.05;23.46;E;;;;;;;;2MASX J12421183+2053055,LEDA 1638014,SDSS J124211.83+205305.4;;;B-Mag taken from LEDA. +IC3678;G;12:42:12.58;+20:52:49.7;Com;0.32;0.22;46;16.86;;;;;23.43;E;;;;;;;;2MASX J12421255+2052495,PGC 1637920,SDSS J124212.58+205249.7;;;B-Mag taken from LEDA. +IC3679;**;12:42:11.23;+22:49:05.8;Com;;;;;;;;;;;;;;;;;;;;; +IC3680;*;12:42:00.91;+39:06:15.3;CVn;;;;;;;;;;;;;;;;;;SDSS J124200.90+390615.3;;; +IC3681;*;12:42:01.75;+39:05:00.3;CVn;;;;;;;;;;;;;;;;;;SDSS J124201.74+390500.2;;; +IC3682;*;12:42:19.48;+20:51:52.0;Com;;;;;;;;;;;;;;;;;;SDSS J124219.47+205151.9;;; +IC3683;G;12:42:20.64;+20:52:16.7;Com;0.36;0.29;24;16.54;;13.23;12.61;12.13;23.02;SBb;;;;;;;;2MASX J12422061+2052165,LEDA 1637726,SDSS J124220.64+205216.7;;;B-Mag taken from LEDA. +IC3684;G;12:42:26.51;+11:44:25.1;Vir;0.91;0.31;4;15.99;;;12.48;;24.45;E-S0;;;;;;;;PGC 042679,SDSS J124226.50+114425.0,SDSS J124226.51+114425.1;;;B-Mag taken from LEDA. +IC3685;*;12:42:32.24;+06:52:15.3;Vir;;;;;;;;;;;;;;;;;;SDSS J124232.24+065215.3;;; +IC3686;G;12:42:36.00;+10:33:55.1;Vir;0.84;0.34;172;15.60;;12.76;12.09;12.04;22.77;Sc;;;;;;;;2MASX J12423601+1033548,MCG +02-32-186,PGC 042698,SDSS J124236.00+103355.1;;HOLM 444B is part of this galaxy.; +IC3687;G;12:42:15.10;+38:30:12.0;CVn;3.34;3.08;0;15.50;;;;;25.04;IAB;;;;;;;;MCG +07-26-039,PGC 042656,UGC 07866;;; +IC3688;Dup;12:42:37.38;+14:21:25.9;Com;;;;;;;;;;;;;;;4633;;;;;; +IC3689;G;12:42:36.96;+20:51:01.8;Com;0.62;0.47;84;16.26;;13.00;12.20;12.13;24.09;E;;;;;;;;2MASX J12423696+2051018,SDSS J124236.95+205101.7;;;B-Mag taken from LEDA. +IC3690;G;12:42:49.19;+10:21:26.9;Vir;0.86;0.36;4;15.30;;12.48;11.75;11.26;23.10;SBa;;;;;;;;2MASX J12424923+1021268,IRAS 12402+1037,PGC 042732,SDSS J124249.18+102126.8,SDSS J124249.19+102126.8,UGC 07879;;; +IC3691;G;12:42:49.53;+22:46:20.0;Com;0.38;0.28;34;16.47;;;;;22.86;Sc;;;;;;;;PGC 1675869;;;B-Mag taken from LEDA. +IC3692;G;12:42:54.00;+20:59:23.1;Com;0.82;0.62;95;14.80;;11.56;10.81;10.52;23.07;Sa;;;;;;;;2MASX J12425397+2059225,MCG +04-30-016,PGC 042743,SDSS J124253.99+205923.0,UGC 07885;;; +IC3693;G;12:42:58.02;+10:40:54.5;Vir;0.66;0.46;94;15.40;;;12.53;;23.64;E;;;;;;;;PGC 042754,SDSS J124258.03+104054.9;;; +IC3694;G;12:43:07.28;+11:12:43.2;Vir;0.53;0.38;42;15.30;;13.37;12.45;12.20;22.05;Sbc;;;;;;;;2MASX J12430724+1112429,MCG +02-32-192,PGC 042766,SDSS J124307.28+111243.1,SDSS J124307.28+111243.2;;; +IC3695;*;12:43:06.80;+22:44:31.0;Com;;;;;;;;;;;;;;;;;;SDSS J124306.80+224430.9;;; +IC3696;G;12:43:09.64;+19:55:40.9;Com;0.39;0.22;94;17.59;;;;;24.39;E;;;;;;;;SDSS J124309.63+195540.9,SDSS J124309.64+195540.9;;;B-Mag taken from LEDA. +IC3697;G;12:42:58.85;+39:50:44.4;CVn;0.77;0.66;56;15.88;;13.18;12.32;12.13;23.95;Sb;;;;;;;;2MASX J12425885+3950442,MCG +07-26-041,PGC 042756,SDSS J124258.84+395044.4;;;B-Mag taken from LEDA. +IC3698;G;12:43:17.30;+11:12:41.5;Vir;0.49;0.41;5;15.40;;13.95;13.36;12.96;22.10;Sc;;;;;;;;2MASX J12431730+1112419,MCG +02-32-193,PGC 042790,SDSS J124317.29+111241.5,SDSS J124317.30+111241.5;;; +IC3699;**;12:43:17.13;+19:00:00.7;Com;;;;;;;;;;;;;;;;;;;;; +IC3700;GPair;12:43:20.46;+19:15:54.7;Com;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3700 NED01;G;12:43:20.00;+19:15:57.4;Com;;;;;;;;;;;;;;;;;;SDSS J124319.99+191557.4;;;No data available in LEDA +IC3700 NED02;G;12:43:20.96;+19:15:51.4;Com;0.04;0.03;156;21.00;;;;;;;;;;;;;;SDSS J124320.94+191551.5;;;B-Mag taken from LEDA +IC3701;G;12:43:30.91;+11:02:49.7;Vir;0.45;0.34;59;16.59;;;;;23.58;E-S0;;;;;;;;PGC 042812,SDSS J124330.88+110249.5,SDSS J124331.16+110250.4;;Multiple SDSS entries describe this source.;B-Mag taken from LEDA. +IC3702;G;12:43:28.37;+10:52:25.9;Vir;0.49;0.34;43;15.50;;13.93;13.45;13.20;21.97;SBc;;;;;;;;2MASX J12432837+1052264,PGC 042810,SDSS J124328.36+105225.8;;; +IC3703;*;12:43:22.00;+37:58:28.3;CVn;;;;;;;;;;;;;;;;;;SDSS J124322.00+375828.2;;; +IC3704;G;12:43:45.61;+10:46:12.3;Vir;1.28;0.36;41;14.70;;12.04;11.26;11.10;23.05;SBbc;;;;;;;;2MASX J12434561+1046124,IRAS 12412+1102,MCG +02-33-003,PGC 042836,SDSS J124345.57+104611.7,UGC 07899;;; +IC3705;GPair;12:43:41.51;+19:19:31.0;Com;0.70;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3705 NED01;G;12:43:41.52;+19:19:37.3;Com;0.37;0.34;20;17.33;;;;;24.04;E;;;;;;;;2MASX J12434154+1919369,SDSS J124341.52+191937.2,SDSS J124341.52+191937.3;;;B-Mag taken from LEDA +IC3705 NED02;G;12:43:41.52;+19:19:23.3;Com;0.38;0.18;163;17.62;;;;;23.67;Sbc;;;;;;;;2MASX J12434154+1919229,SDSS J124341.51+191923.2,SDSS J124341.51+191923.3;;;B-Mag taken from LEDA +IC3706;**;12:43:47.99;+09:13:52.1;Vir;;;;;;;;;;;;;;;;;;SDSS J124347.99+091352.1;;; +IC3707;*;12:43:28.68;+37:58:57.7;CVn;;;;;;;;;;;;;;;;;;SDSS J124328.67+375857.6;;; +IC3708;Other;12:43:52.55;+13:08:15.1;Vir;;;;;;;;;;;;;;;;;;;;This is the northwestern arm of NGC 4654.; +IC3709;G;12:44:04.03;+09:03:48.0;Vir;0.67;0.58;4;15.30;;12.89;12.01;11.84;22.73;Sbc;;;;;;;;2MASX J12440405+0903482,PGC 042869,SDSS J124404.02+090347.9,SDSS J124404.03+090347.9;;; +IC3710;G;12:44:09.45;+12:06:59.5;Vir;1.17;0.85;131;16.50;;;;;24.54;I;;;;;;;;PGC 042881,UGC 07906;;; +IC3711;G;12:44:09.37;+11:10:35.8;Vir;0.81;0.60;41;15.65;;;12.63;;24.05;E;;;;;;;;PGC 042878,SDSS J124409.36+111035.7;;;B-Mag taken from LEDA. +IC3712;Other;12:44:16.65;+10:22:28.4;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3713;G;12:44:03.17;+41:10:08.1;CVn;0.70;0.52;136;15.50;;11.99;11.30;10.97;23.07;S0-a;;;;;;;;2MASX J12440320+4110079,MCG +07-26-046,PGC 042867,SDSS J124403.16+411008.1,SDSS J124403.17+411008.1;;; +IC3714;G;12:44:23.08;+10:11:19.8;Vir;0.71;0.43;143;15.60;;13.61;13.08;13.10;22.93;SBab;;;;;;;;2MASX J12442309+1011199,MCG +02-33-005,PGC 042899,SDSS J124423.08+101119.7;;; +IC3715;G;12:44:21.41;+20:01:27.6;Com;0.56;0.53;64;16.54;;;;;24.11;SBc;;;;;;;;SDSS J124421.41+200127.6;;;B-Mag taken from LEDA. +IC3716;Other;12:44:45.14;+08:06:07.8;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3717;G;12:44:22.96;+39:31:20.3;CVn;0.80;0.22;155;15.97;;13.12;12.35;12.06;24.16;E?;;;;;;;;2MASX J12442295+3931207,MCG +07-26-047,PGC 042900,SDSS J124422.95+393120.2,SDSS J124422.96+393120.3;;;B-Mag taken from LEDA. +IC3718;G;12:44:45.98;+12:21:05.2;Vir;2.24;0.72;71;14.70;;13.25;12.25;11.91;24.37;S0;;;;;;;;2MASX J12444599+1221052,MCG +02-33-008,PGC 042944,SDSS J124445.22+122108.5,UGC 07920;;The SDSS position is 12 arcsec northwest of the nucleus.; +IC3719;G;12:44:47.50;+08:06:24.9;Vir;0.49;0.33;87;15.50;;;13.14;;22.87;I;;;;;;;;PGC 042947,SDSS J124447.49+080624.8,SDSS J124447.50+080624.8,SDSS J124447.50+080624.9;;"Often incorrectly called IC 3716; that does not exist."; +IC3720;G;12:44:47.48;+12:03:51.5;Vir;2.34;1.36;125;16.00;;;12.05;;25.66;E;;;;;;;;PGC 042949,UGC 07919;;; +IC3721;G;12:44:53.12;+18:45:18.9;Com;0.96;0.37;136;14.40;;11.38;10.63;10.31;22.19;Sm;;;;;;3725;;2MASX J12445314+1845182,IRAS 12423+1901,MCG +03-33-002,PGC 042956,SDSS J124453.11+184518.9,UGC 07923;;; +IC3722;Other;12:44:50.69;+11:46:42.9;Vir;;;;;;;;;;;;;;;;;;;;Two double stars.; +IC3723;G;12:44:30.55;+40:44:12.8;CVn;0.33;0.22;106;15.50;;13.58;12.91;12.70;21.89;S?;;;;;;;;2MASX J12443060+4044127,MCG +07-26-048,PGC 042914,SDSS J124430.54+404412.8,SDSS J124430.55+404412.9;;; +IC3724;G;12:44:53.76;+10:16:56.5;Vir;0.63;0.45;40;15.60;;14.29;13.69;13.35;22.78;Sc;;;;;;;;2MASX J12445373+1016570,PGC 042960,SDSS J124453.75+101656.4,SDSS J124453.76+101656.4;;; +IC3725;Dup;12:44:53.12;+18:45:18.9;Com;;;;;;;;;;;;;;;;3721;;;;; +IC3726;G;12:44:42.59;+40:40:44.4;CVn;1.33;0.29;115;15.60;;11.84;11.00;10.62;23.44;Sc;;;;;;;;2MASX J12444253+4040439,IRAS 12423+4057,MCG +07-26-049,PGC 042938,SDSS J124442.59+404044.3,SDSS J124442.59+404044.4,UGC 07921;;; +IC3727;G;12:45:05.66;+10:54:03.2;Vir;1.23;1.07;139;15.60;;;10.70;;23.79;Sc;;;;;;;;MCG +02-33-009,PGC 042969,SDSS J124505.66+105403.1,UGC 07927;;; +IC3728;G;12:45:03.13;+20:58:26.7;Com;0.37;0.33;116;16.61;;14.10;13.51;12.94;23.38;Sbc;;;;;;;;2MASX J12450313+2058261,PGC 1639926,SDSS J124503.12+205826.6;;;B-Mag taken from LEDA. +IC3729;G;12:44:53.12;+39:21:04.3;CVn;0.34;0.26;44;16.32;;;;;22.82;SBb;;;;;;;;MCG +07-26-050,PGC 042958,SDSS J124453.12+392104.2,SDSS J124453.12+392104.3;;;B-Mag taken from LEDA. +IC3730;G;12:45:06.56;+21:10:10.5;Com;0.55;0.53;136;15.30;;12.42;11.71;11.55;22.50;Scd;;;;;;;;2MASX J12450657+2110101,IRAS 12426+2126,MCG +04-30-018,PGC 042971,SDSS J124506.55+211010.4;;; +IC3731;G;12:45:05.26;+12:26:46.9;Vir;0.55;0.45;129;16.05;;13.33;12.54;12.41;23.23;Sbc;;;;;;;;2MASX J12450528+1226467,LEDA 1409720,SDSS J124505.25+122646.9,SDSS J124505.26+122646.9;;;B-Mag taken from LEDA. +IC3732;G;12:45:11.96;+10:19:28.0;Vir;0.49;0.36;47;16.35;;;;;23.28;I;;;;;;;;PGC 042980,SDSS J124511.82+101927.4;;;B-Mag taken from LEDA. +IC3733;*;12:45:16.72;+06:57:24.8;Vir;;;;;;;;;;;;;;;;;;SDSS J124516.72+065724.8;;; +IC3734;G;12:45:09.28;+23:02:20.6;Com;0.41;0.22;131;17.74;;14.05;13.51;13.40;23.79;SBc;;;;;;;;2MASX J12450925+2302211,LEDA 214024,MCG +04-30-019 NED02,SDSS J124509.27+230220.5,SDSS J124509.28+230220.6,UGC 07928 NOTES01;;;B-Mag taken from LEDA. +IC3735;G;12:45:20.42;+13:41:33.6;Com;1.18;0.87;151;15.10;;12.41;11.80;11.38;23.79;E;;;;;;;;2MASX J12452037+1341337,MCG +02-33-010,PGC 042991,SDSS J124520.42+134133.5;;; +IC3736;G;12:45:18.96;+21:32:08.7;Com;0.48;0.38;170;15.70;;14.19;13.11;13.05;23.00;Sc;;;;;;;;2MASX J12451901+2132090,MCG +04-30-020,PGC 042986,SDSS J124518.95+213208.7,SDSS J124518.96+213208.7;;; +IC3737;**;12:45:19.87;+21:57:29.4;Com;;;;;;;;;;;;;;;;;;;;; +IC3738;G;12:45:25.74;+19:13:51.1;Com;0.25;0.12;57;19.08;;;;;24.78;;;;;;;;;;;The IC number includes two neighboring stars.;B-Mag taken from LEDA +IC3739;Other;12:45:32.27;+12:59:50.5;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3740;G;12:45:30.62;+20:48:57.4;Com;0.64;0.29;7;15.60;;13.38;12.93;12.82;22.68;Sc;;;;;;;;2MASX J12453062+2048579,PGC 042995,SDSS J124530.61+204857.4;;; +IC3741;**;12:45:33.28;+19:12:14.9;Com;;;;;;;;;;;;;;;;;;SDSS J124533.27+191214.8;;; +IC3742;G;12:45:32.02;+13:19:57.3;Vir;1.02;0.32;45;14.60;;;11.39;;21.98;SBc;;;;;;;;MCG +02-33-011,PGC 043001,SDSS J124532.01+131957.2,SDSS J124532.02+131957.3,UGC 07932;;The 2MASX position applies to a knot north of the center.; +IC3743;Other;12:45:41.30;+11:06:07.6;Vir;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +IC3744;G;12:45:41.48;+19:30:01.2;Com;0.70;0.47;161;16.29;;13.18;12.39;11.94;23.96;Sb;;;;;;;;2MASX J12454151+1930019,LEDA 3090098,SDSS J124541.52+193002.0;;;B-Mag taken from LEDA. +IC3745;G;12:45:44.86;+19:10:38.1;Com;1.04;0.91;39;15.00;;12.15;11.43;11.32;23.73;S0-a;;;;;;;;2MASX J12454486+1910379,MCG +03-33-003,PGC 043009,SDSS J124544.85+191038.1,SDSS J124544.86+191038.1;;; +IC3746;G;12:45:31.91;+37:49:24.8;CVn;0.54;0.44;37;15.60;;13.85;13.30;12.83;23.33;Sbc;;;;;;;;2MASX J12453187+3749252,PGC 043000,SDSS J124531.90+374924.7,SDSS J124531.91+374924.8;;; +IC3747;*;12:45:34.42;+37:58:06.7;CVn;;;;;;;;;;;;;;;;;;SDSS J124534.41+375806.6;;; +IC3748;*;12:45:50.92;+19:25:49.2;Com;;;;;;;;;;;;;;;;;;SDSS J124550.91+192549.2;;; +IC3749;*;12:45:51.38;+19:32:08.1;Com;;;;;;;;;;;;;;;;;;SDSS J124551.37+193208.0;;; +IC3750;*;12:45:57.06;+19:06:13.9;Com;;;;;;;;;;;;;;;;;;SDSS J124557.06+190613.8;;; +IC3751;G;12:45:45.10;+37:49:23.0;CVn;0.20;0.17;85;16.60;;14.40;13.61;13.42;;Sc;;;;;;;;2MASX J12454512+3749232,LEDA 3088212,SDSS J124545.10+374922.9,SDSS J124545.11+374923.0;;;B-Mag taken from LEDA. +IC3752;**;12:46:04.09;+19:00:41.2;Com;;;;;;;;;;;;;;;;;;SDSS J124604.09+190041.1;;; +IC3753;*;12:46:04.38;+19:07:16.2;Com;;;;;;;;;;;;;;;;;;SDSS J124604.37+190716.1;;; +IC3754;G;12:46:15.54;+08:20:54.4;Vir;1.32;0.57;126;14.90;;11.42;10.68;10.47;23.38;Sab;;;;;;;;2MASX J12461549+0820540,MCG +02-33-013,PGC 043074,SDSS J124615.53+082054.4,UGC 07937;;; +IC3755;**;12:46:09.41;+19:09:26.1;Com;;;;;;;;;;;;;;;;;;;;; +IC3756;G;12:46:10.10;+11:54:52.6;Vir;0.38;0.30;26;16.86;;;;;23.28;SBc;;;;;;;;2MASX J12461012+1154519,PGC 1400776,SDSS J124610.09+115452.5,SDSS J124610.10+115452.6;;Position is for the eccentric nucleus.;B-Mag taken from LEDA. +IC3757;Other;12:45:59.78;+38:30:55.1;CVn;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC3758;G;12:45:59.67;+40:46:29.5;CVn;0.58;0.54;53;15.50;;12.28;11.68;11.40;22.95;E;;;;;;;;2MASX J12455970+4046289,PGC 043046,SDSS J124559.66+404629.4,SDSS J124559.67+404629.4;;; +IC3759;G;12:46:17.77;+20:46:58.8;Com;0.62;0.18;157;16.31;;13.21;12.43;12.15;23.27;Sc;;;;;;;;2MASX J12461777+2046594,PGC 1635801,SDSS J124617.76+204658.8;;;B-Mag taken from LEDA. +IC3760;G;12:46:18.26;+11:52:24.9;Vir;0.43;0.33;120;15.50;;13.21;12.62;12.27;23.52;E;;;;;;;;2MASX J12461822+1152249,MCG +02-33-014,PGC 043076,SDSS J124618.26+115224.8,SDSS J124618.26+115224.9;;; +IC3761;G;12:46:27.33;+20:17:20.9;Com;0.32;0.17;60;17.43;;14.69;14.02;13.25;23.85;E;;;;;;;;2MASX J12462732+2017213,LEDA 1622809,SDSS J124627.33+201720.8;;;B-Mag taken from LEDA. +IC3762;G;12:46:37.60;+22:14:46.9;Com;0.38;0.21;40;17.80;;;;;23.91;I;;;;;;;;SDSS J124637.59+221446.8,SDSS J124637.60+221446.8;;;B-Mag taken from LEDA. +IC3763;G;12:46:46.03;+21:59:06.4;Com;0.40;0.35;130;16.50;;14.06;13.51;12.86;23.56;SBbc;;;;;;;;2MASX J12464601+2159064,LEDA 086329,SDSS J124646.02+215906.3,SDSS J124646.02+215906.4;;; +IC3764;Dup;12:46:56.80;+09:51:25.6;Vir;;;;;;;;;;;;;;;;0817;;;;; +IC3765;**;12:46:35.15;+38:34:26.0;CVn;;;;;;;;;;;;;;;;;;SDSS J124635.15+383425.9;;The IC number includes a defect on the original Heidelberg plate.; +IC3766;G;12:46:53.52;+19:06:38.1;Com;0.41;0.35;47;16.99;;14.45;13.97;13.61;23.70;Sb;;;;;;;;2MASX J12465355+1906384,LEDA 3090099,SDSS J124653.51+190638.4;;;B-Mag taken from LEDA. +IC3767;G;12:46:55.48;+10:10:56.7;Vir;1.07;0.34;77;16.07;;;;;24.99;E;;;;;;;;PGC 043119,SDSS J124655.47+101056.6,SDSS J124655.48+101056.6;;;B-Mag taken from LEDA. +IC3768;*;12:46:40.71;+40:35:51.6;CVn;;;;;;;;;;;;;;;;;;;;; +IC3769;*;12:46:48.07;+40:28:12.7;CVn;;;;;;;;;;;;;;;;;;SDSS J124648.07+402812.7;;; +IC3770;*;12:47:15.70;+09:11:56.8;Vir;;;;;;;;;;;;;;;;;;SDSS J124715.70+091156.8;;; +IC3771;G;12:46:52.69;+39:10:23.0;CVn;0.33;0.26;83;16.78;;14.45;13.80;13.31;23.05;SBb;;;;;;;;2MASX J12465263+3910230,LEDA 2144774,SDSS J124652.68+391022.9,SDSS J124652.69+391023.0;;The IC number includes a defect on the original Heidelberg plate.;B-Mag taken from LEDA. +IC3772;G;12:46:56.09;+36:31:51.4;CVn;0.83;0.52;15;15.70;;12.96;12.36;12.26;23.55;Sbc;;;;;;;;2MASX J12465609+3631510,IRAS 12445+3648,MCG +06-28-028,PGC 043123,SDSS J124656.08+363151.3,SDSS J124656.08+363151.4;;; +IC3773;G;12:47:15.30;+10:12:12.9;Vir;1.93;0.73;20;14.30;;11.70;11.17;10.93;24.29;E;;;;;;;;2MASX J12471526+1012124,MCG +02-33-021,PGC 043146,SDSS J124715.29+101212.8,SDSS J124715.29+101212.9,UGC 07952;;The IC number includes a nearby star.; +IC3774;G;12:47:01.09;+36:17:17.9;CVn;0.97;0.42;106;16.00;;12.97;12.32;12.08;23.74;Sbc;;;;;;;;2MASX J12470110+3617180,MCG +06-28-029,PGC 043117,SDSS J124701.09+361717.8,SDSS J124701.09+361717.9,UGC 07947;;; +IC3775;G;12:47:16.10;+11:45:36.8;Vir;0.81;0.34;51;16.00;;;;;23.77;Sc;;;;;;;;PGC 043148,SDSS J124716.09+114536.7,SDSS J124716.10+114536.7,SDSS J124716.10+114536.8,UGC 07953;;; +IC3776;G;12:47:12.21;+22:29:04.6;Com;0.50;0.21;37;16.50;;;;;23.05;Sc;;;;;;;;PGC 086432,SDSS J124712.22+222904.0;;;B-Mag taken from LEDA. +IC3777;*;12:47:25.35;+09:08:36.5;Vir;;;;;;;;;;;;;;;;;;SDSS J124725.35+090836.4;;; +IC3778;G;12:47:01.97;+40:35:47.1;CVn;0.55;0.35;38;15.60;;13.25;12.20;12.10;22.57;Sbc;;;;;;;;2MASX J12470193+4035470,IRAS 12446+4052,PGC 043131,SDSS J124701.93+403547.1,SDSS J124701.94+403547.1;;; +IC3779;G;12:47:20.64;+12:09:59.1;Vir;0.90;0.53;126;15.50;;13.84;12.63;12.81;24.06;E;;;;;;;;2MASX J12472028+1209595,PGC 043154,SDSS J124720.63+120959.1,SDSS J124720.64+120959.1;;; +IC3780;*;12:47:08.08;+40:14:09.7;CVn;;;;;;;;;;;;;;;;;;SDSS J124708.07+401409.7;;; +IC3781;**;12:47:24.57;+22:34:11.2;Com;;;;;;;;;;;;;;;;;;;;; +IC3782;*;12:47:15.67;+40:22:03.9;CVn;;;;;;;;;;;;;;;;;;SDSS J124715.66+402203.8;;; +IC3783;G;12:47:27.84;+40:33:59.7;CVn;0.66;0.52;98;15.60;;13.07;12.75;12.55;23.14;Sbc;;;;;;;;2MASX J12472782+4033591,MCG +07-26-052,PGC 043163,SDSS J124727.84+403359.6;;; +IC3784;G;12:47:50.70;+19:23:02.6;Com;0.56;0.32;45;16.77;;;;;23.75;SBbc;;;;;;;;LEDA 089739,SDSS J124750.71+192303.0;;;B-Mag taken from LEDA. +IC3785;G;12:47:52.17;+19:16:30.8;Com;0.18;0.16;157;17.46;;;;;;Sb;;;;;;;;2MASX J12475214+1916311,SDSS J124752.17+191630.8;;;B-Mag taken from LEDA. +IC3786;G;12:47:36.90;+39:02:45.7;CVn;0.34;0.26;168;16.67;;14.22;13.69;13.26;22.95;Sbc;;;;;;;;2MASX J12473687+3902461,LEDA 2142309,SDSS J124736.89+390245.6,SDSS J124736.90+390245.7;;;B-Mag taken from LEDA. +IC3787;**;12:47:41.85;+40:37:25.6;CVn;;;;;;;;;;;;;;;;;;;;; +IC3788;G;12:48:07.26;+18:52:07.9;Com;0.66;0.66;20;15.95;;13.36;12.96;12.65;23.79;Sbc;;;;;;;;2MASX J12480725+1852076,MCG +03-33-005,PGC 043220,SDSS J124807.26+185207.8;;;B-Mag taken from LEDA. +IC3789;G;12:48:07.10;+20:11:38.5;Com;0.48;0.40;3;16.10;;13.25;12.60;12.36;23.35;Sb;;;;;;;;2MASX J12480706+2011386,PGC 1619535,SDSS J124807.09+201138.4,SDSS J124807.09+201138.5;;;B-Mag taken from LEDA. +IC3790;*;12:48:14.65;+11:06:27.3;Vir;;;;;;;;;;;;;;;;;;SDSS J124814.64+110627.3;;; +IC3791;Dup;12:47:32.11;+54:22:29.4;UMa;;;;;;;;;;;;;;;4695;;;;;; +IC3792;**;12:48:14.16;+11:05:10.8;Vir;;;;;;;;;;;;;;;;;;;;"Nominal position is 20 arcsec south; includes a defect on original plate?"; +IC3793;G;12:48:11.89;+19:09:06.1;Com;0.43;0.23;74;17.35;;;;;23.78;Sbc;;;;;;;;2MASX J12481188+1909056,SDSS J124811.88+190906.0;;;B-Mag taken from LEDA. +IC3794;*;12:48:21.51;+19:10:13.1;Com;;;;;;;;;;;;;;;;;;SDSS J124821.50+191013.1;;; +IC3795;G;12:48:05.11;+40:43:10.7;CVn;0.90;0.24;18;15.70;;13.27;12.30;12.41;24.21;E;;;;;;;;2MASX J12480514+4043104,MCG +07-26-053,PGC 043221,SDSS J124805.10+404310.6,SDSS J124805.11+404310.6,SDSS J124805.11+404310.7;;; +IC3796;*;12:48:27.00;+20:02:15.7;Com;;;;;;;;;;;;;;;;;;SDSS J124827.00+200215.7;;; +IC3797;Other;12:48:34.91;+11:35:52.1;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3798;*;12:48:42.92;+09:14:27.7;Vir;;;;;;;;;;;;;;;;;;SDSS J124842.92+091427.7;;; +IC3799;G;12:48:59.64;-14:23:57.2;Crv;2.77;0.38;32;14.10;;11.50;10.76;10.49;23.85;SBcd;;;;;;;;2MASX J12485965-1423572,MCG -02-33-011,PGC 043313;;Confused HIPASS source; +IC3800;GPair;12:48:26.43;+36:34:33.1;CVn;0.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3800 NED01;G;12:48:26.42;+36:34:33.1;CVn;0.32;0.21;47;18.31;;;;;24.60;;;;;;;;;2MASX J12482642+3634332,SDSS J124826.41+363433.0;;;B-Mag taken from LEDA +IC3800 NED02;G;12:48:27.25;+36:34:31.3;CVn;0.54;0.36;100;16.55;;;;;24.07;E;;;;;;;;2MASX J12482726+3634313,SDSS J124827.25+363431.2,SDSS J124827.25+363431.3;;;B-Mag taken from LEDA +IC3801;Other;12:49:00.65;+10:57:21.5;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3802;*;12:48:42.61;+38:14:47.2;CVn;;;;;;;;;;;;;;;;;;SDSS J124842.60+381447.2;;; +IC3803;*;12:49:04.40;+10:37:54.5;Vir;;;;;;;;;;;;;;;;;;SDSS J124904.39+103754.5;;; +IC3804;Dup;12:48:45.87;+35:19:57.7;CVn;;;;;;;;;;;;;;;4711;;;;;; +IC3805;**;12:48:42.63;+38:15:11.0;CVn;;;;;;;;;;;;;;;;;;;;; +IC3806;G;12:48:55.36;+14:54:28.4;Com;1.29;0.44;179;14.60;;11.46;10.77;10.61;22.98;Sa;;;;;;;;2MASX J12485538+1454273,MCG +03-33-006,PGC 043303,SDSS J124855.36+145428.3,SDSS J124855.36+145428.4,UGC 07974;;; +IC3807;Other;12:49:29.80;-04:24:08.2;Vir;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3808;G;12:48:58.76;+40:35:45.3;CVn;0.95;0.42;156;18.20;17.19;12.22;11.50;11.34;23.36;Sbc;;;;;;;;2MASX J12485871+4035455,MCG +07-26-055,PGC 043312,SDSS J124858.76+403545.3;;"This is sometimes incorrectly called IC 3810; that is a star."; +IC3809;G;12:49:04.51;+36:29:20.7;CVn;0.64;0.38;159;16.29;;13.29;12.59;12.31;23.61;Sb;;;;;;;;2MASX J12490454+3629205,LEDA 3088424,SDSS J124904.50+362920.6,SDSS J124904.51+362920.7;;;B-Mag taken from LEDA. +IC3810;*;12:49:03.18;+40:38:47.9;CVn;;;;;;;;;;;;;;;;;;SDSS J124903.17+403847.8;;; +IC3811;*;12:49:25.57;+21:27:43.7;Com;;;;;;;;;;;;;;;;;;SDSS J124925.57+212743.6;;; +IC3812;G;12:49:53.80;-06:43:02.8;Vir;1.13;0.41;6;14.85;;11.18;10.38;10.01;23.34;Sab;;;;;;;;2MASX J12495381-0643027,IRAS 12472-0626,MCG -01-33-019,PGC 043409;;;B-Mag taken from LEDA. +IC3813;G;12:50:02.32;-25:55:14.5;Hya;1.32;0.96;179;13.72;;10.41;9.66;9.51;23.12;S0;;;;;;;;2MASX J12500230-2555143,ESO 507-019,ESO-LV 507-0190,MCG -04-30-024,PGC 043418;;; +IC3814;G;12:49:32.41;+20:03:01.7;Com;0.59;0.38;132;16.52;;;;;24.07;Sbc;;;;;;;;2MASX J12493246+2002594,PGC 1614633,SDSS J124932.40+200301.7,SDSS J124932.41+200301.7;;;B-Mag taken from LEDA. +IC3815;G;12:49:38.53;+19:16:30.1;Com;0.55;0.36;150;16.50;;14.26;13.87;13.17;24.05;Sbc;;;;;;;;2MASX J12493852+1916295,LEDA 089740,SDSS J124938.53+191630.0;;; +IC3816;G;12:49:28.47;+37:13:49.0;CVn;0.81;0.76;7;15.67;;12.38;11.68;11.47;24.07;E;;;;;;;;2MASX J12492846+3713488,MCG +06-28-034,PGC 043369,SDSS J124928.46+371349.0,SDSS J124928.47+371349.0;;;B-Mag taken from LEDA. +IC3817;G;12:49:43.47;+22:49:52.9;Com;0.26;0.18;34;17.29;;14.31;13.69;13.26;23.04;Sbc;;;;;;;;2MASX J12494348+2249525,PGC 1676864,SDSS J124943.47+224952.5;;;B-Mag taken from LEDA. +IC3818;G;12:49:46.73;+21:45:08.0;Com;0.41;0.19;169;16.92;;14.31;13.85;13.45;23.49;Sb;;;;;;;;2MASX J12494675+2145075,PGC 1656496,SDSS J124946.72+214507.9,SDSS J124946.72+214508.0;;;B-Mag taken from LEDA. +IC3819;G;12:50:16.37;-14:22:50.7;Crv;0.56;0.45;70;16.36;;12.77;12.19;11.84;23.61;;;;;;;;;2MASX J12501632-1422505,LEDA 925330;;;B-Mag taken from LEDA. +IC3820;G;12:49:38.95;+37:07:01.8;CVn;0.46;0.43;54;16.99;;14.52;13.98;13.12;24.04;Sc;;;;;;;;2MASX J12493886+3707009,PGC 2093327,SDSS J124938.94+370701.7,SDSS J124938.94+370701.8;;The IC number includes a defect on the original Heidelberg plate.;B-Mag taken from LEDA. +IC3821;**;12:49:57.55;+20:58:08.5;Com;;;;;;;;;;;;;;;;;;;;; +IC3822;G;12:50:22.73;-14:19:18.7;Crv;1.43;0.31;35;15.34;;11.93;11.16;10.92;23.48;Sc;;;;;;;;2MASX J12502272-1419185,2MASX J12502370-1418578,MCG -02-33-019,PGC 043443;;;B-Mag taken from LEDA. +IC3823;*;12:49:43.98;+40:53:00.4;CVn;;;;16.70;;14.71;14.35;14.19;;;;;;;;;;2MASS J12494397+4053005,SDSS J124943.97+405300.3;;; +IC3824;G;12:50:30.55;-14:25:33.3;Crv;1.13;0.71;0;14.83;;11.39;10.66;10.40;24.12;S0-a;;;;;;;;2MASX J12503058-1425328,LEDA 170210;;; +IC3825;G;12:50:37.05;-14:28:58.1;Crv;0.60;0.38;178;15.77;;13.43;12.60;12.15;;;;;;;;;;2MASX J12503705-1428578,LEDA 3082083;;; +IC3826;G;12:50:39.90;-09:01:51.9;Vir;1.84;0.65;178;14.26;;11.18;10.55;10.26;24.24;S0;;;;;;;;2MASX J12503990-0901518,MCG -01-33-025,PGC 043473;;;B-Mag taken from LEDA. +IC3827;G;12:50:52.12;-14:29:30.8;Crv;1.13;0.83;162;14.05;;12.01;11.39;11.00;22.80;Sc;;;;;;3838;;2MASX J12505213-1429308,IRAS 12482-1413,MCG -02-33-021,PGC 043487;;;B-Mag taken from LEDA. +IC3828;G;12:50:20.70;+37:56:56.2;CVn;0.68;0.34;53;16.06;;13.51;12.96;12.56;23.59;Sab;;;;;;;;2MASX J12502065+3756566,LEDA 3088213,SDSS J125020.69+375656.1,SDSS J125020.69+375656.2;;;B-Mag taken from LEDA. +IC3829;G;12:52:13.30;-29:50:26.4;Hya;3.41;1.04;10;12.55;;9.41;8.71;8.42;23.97;S0;;;;;;;;2MASX J12521331-2950262,ESO 442-026,ESO-LV 442-0260,IRAS 12495-2934,MCG -05-30-011,PGC 043642;;The IC identification is not certain.; +IC3830;*;12:50:51.37;+19:50:12.1;Com;;;;;;;;;;;;;;;;;;SDSS J125051.36+195012.0;;; +IC3831;G;12:51:18.59;-14:34:24.9;Crv;1.50;1.11;138;14.22;;10.38;9.68;9.49;23.69;S0;;;;;;;;2MASX J12511856-1434248,MCG -02-33-027,PGC 043536;;;B-Mag taken from LEDA. +IC3832;G;12:50:49.20;+39:48:37.7;CVn;0.46;0.39;72;16.17;;;;;23.28;SBc;;;;;;;;MCG +07-26-057,PGC 043482,SDSS J125049.19+394837.7,SDSS J125049.20+394837.7;;;B-Mag taken from LEDA. +IC3833;Dup;12:51:32.39;-13:19:48.1;Crv;;;;;;;;;;;;;;;4722;;;;;; +IC3834;G;12:51:32.40;-14:13:17.0;Crv;0.95;0.55;70;17.00;;11.30;10.60;10.29;23.04;Sb;;;;;;;;2MASX J12513238-1413162,MCG -02-33-030,PGC 043559;;Incorrectly called NGC 4726 by VCV.; +IC3835;G;12:50:55.84;+40:11:12.3;CVn;0.50;0.25;98;13.80;;13.75;13.12;12.65;22.96;Sc;;;;;;;;2MASX J12505586+4011119,PGC 2161970,SDSS J125055.83+401112.2,SDSS J125055.84+401112.2,SDSS J125055.84+401112.3;;; +IC3836;G;12:51:03.72;+40:11:03.2;CVn;0.49;0.22;86;16.47;;;;;23.20;SBc;;;;;;;;2MASX J12510372+4011039,PGC 2161937,SDSS J125103.72+401103.1,SDSS J125103.72+401103.2;;;B-Mag taken from LEDA. +IC3837;G;12:51:33.01;+19:43:23.0;Com;0.56;0.32;73;17.02;;;;;24.00;I;;;;;;;;SDSS J125133.00+194322.9;;;B-Mag taken from LEDA. +IC3838;Dup;12:50:52.12;-14:29:30.8;Crv;;;;;;;;;;;;;;;;3827;;;;; +IC3839;*;12:51:46.26;+20:25:15.5;Com;;;;;;;;;;;;;;;;;;SDSS J125146.26+202515.5;;; +IC3840;G;12:51:46.10;+21:44:06.7;Com;0.78;0.78;76;16.02;;;;;24.21;Sm;;;;;;;;PGC 086644;;;B-Mag taken from LEDA. +IC3841;**;12:51:50.50;+22:20:40.2;Com;;;;;;;;;;;;;;;;;;;;; +IC3842;G;12:51:35.88;+40:22:16.9;CVn;0.34;0.30;164;16.09;;12.95;12.14;12.13;;E;;;;;;;;2MASX J12513585+4022166,PGC 3088021,SDSS J125135.88+402216.8,SDSS J125135.88+402216.9;;;B-Mag taken from LEDA. +IC3843;G;12:51:39.19;+39:00:04.7;CVn;0.49;0.25;179;16.54;;;;;23.19;Sc;;;;;;;;PGC 2141362,SDSS J125139.19+390004.7;;;B-Mag taken from LEDA. +IC3844;G;12:52:06.50;+39:49:05.7;CVn;0.39;0.30;31;16.34;;13.95;13.34;12.78;22.90;Sc;;;;;;;;2MASX J12520646+3949060,MCG +07-26-059,PGC 043622,SDSS J125206.50+394905.6,SDSS J125206.50+394905.7;;;B-Mag taken from LEDA. +IC3845;*;12:52:08.66;+38:37:08.4;CVn;;;;;;;;;;;;;;;;;;;;; +IC3846;Other;12:52:39.22;+13:38:50.0;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC3847;G;12:52:33.74;+22:03:53.0;Com;0.30;0.25;126;16.50;;15.10;14.18;14.27;23.29;Sc;;;;;;;;2MASX J12523380+2203524,LEDA 086330,SDSS J125233.73+220352.9;;; +IC3848;GPair;12:52:40.19;+21:24:58.0;Com;0.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3848 NED01;G;12:52:40.00;+21:25:00.0;Com;0.55;0.28;113;17.56;;;;;25.09;E;;;;;;;;SDSS J125240.15+212500.2,SDSS J125240.14+212500.2,SDSS J125240.14+212500.1;;;B-Mag taken from LEDA +IC3848 NED02;G;12:52:40.59;+21:24:52.7;Com;0.67;0.38;158;16.57;;12.76;12.13;11.79;24.54;E;;;;;;;;2MASX J12524055+2124524,PGC 1649526,SDSS J125240.59+212452.6,SDSS J125240.59+212452.7;;;B-Mag taken from LEDA. +IC3849;Other;12:52:36.83;+40:46:20.0;CVn;;;;;;;;;;;;;;;;;;SDSS J125236.82+404619.9;;;NED lists this object as type G, but there's nothing at these coords in LEDA. +IC3850;G;12:52:39.52;+40:06:11.0;CVn;0.72;0.48;49;15.29;;12.34;11.66;11.43;23.64;E;;;;;;;;2MASX J12523956+4006110,MCG +07-27-001,PGC 043702,SDSS J125239.51+400611.0,SDSS J125239.52+400611.0,SDSS J125239.53+400610.9;;;B-Mag taken from LEDA. +IC3851;*;12:53:04.73;+21:54:33.0;Com;;;;;;;;;;;;;;;;;;SDSS J125304.72+215433.0;;The IC number includes a defect on the original Heidelberg plate.; +IC3852;G;12:53:03.30;+35:46:24.4;CVn;1.10;0.43;60;16.00;;15.32;14.91;14.39;24.24;Scd;;;;;;;;2MASX J12530328+3546247,MCG +06-28-038,PGC 043750,UGC 08019;;; +IC3853;G;12:53:10.30;+38:49:45.4;CVn;0.36;0.28;6;17.29;;;;;23.62;Sbc;;;;;;;;PGC 2137536,SDSS J125310.30+384945.4,SDSS J125310.31+384945.5;;;B-Mag taken from LEDA. +IC3854;G;12:53:14.54;+40:50:53.4;CVn;0.37;0.24;24;16.59;;13.58;12.95;12.54;22.96;SBa;;;;;;;;2MASX J12531450+4050529,LEDA 2171843,SDSS J125314.53+405053.4;;;B-Mag taken from LEDA. +IC3855;G;12:53:22.69;+36:47:09.6;CVn;0.85;0.35;107;16.39;;13.18;12.54;12.26;24.70;E;;;;;;;;2MASX J12532267+3647100,LEDA 3088326,SDSS J125322.69+364709.5,SDSS J125322.69+364709.6;;;B-Mag taken from LEDA. +IC3856;G;12:53:45.92;+20:05:31.5;Com;0.67;0.20;122;16.60;;13.96;13.16;13.03;23.77;Sc;;;;;;;;2MASX J12534596+2005318,LEDA 1616133;;;B-Mag taken from LEDA. +IC3857;G;12:53:56.06;+19:36:25.7;Com;0.42;0.34;109;17.51;;;;;24.38;Sbc;;;;;;;;2MASX J12535604+1936258,PGC 1598782,SDSS J125356.09+193625.4;;;B-Mag taken from LEDA. +IC3858;*;12:53:55.54;+20:47:20.5;Com;;;;;;;;;;;;;;;;;;;;; +IC3859;G;12:54:19.86;-09:07:03.8;Vir;1.12;0.32;159;14.94;;11.31;10.62;10.39;22.88;Sc;;;;;;;;2MASX J12541987-0907039,LEDA 170216;;; +IC3860;G;12:54:06.71;+19:18:02.6;Com;0.36;0.32;119;17.66;;;;;24.20;;;;;;;;;SDSS J125406.70+191802.5,SDSS J125406.71+191802.5;;;B-Mag taken from LEDA +IC3861;G;12:53:50.83;+38:16:54.5;CVn;0.44;0.34;133;16.54;;;;;23.33;SBb;;;;;;;;2MASX J12535081+3816541,SDSS J125350.83+381654.4,SDSS J125350.84+381654.5;;;B-Mag taken from LEDA. +IC3862;GPair;12:53:53.40;+36:05:13.0;CVn;0.90;;;;;;;;;;;;;;;;;MCG +06-28-039,UGC 08023;;;Diameter of the group inferred by the author. +IC3862 NED01;G;12:53:52.96;+36:05:13.0;CVn;0.87;0.42;134;16.00;;15.16;14.71;13.85;24.20;Sd;;;;;;;;2MASX J12535292+3605131,MCG +06-28-039 NED01,PGC 043844,UGC 08023 NED01;;; +IC3862 NED02;G;12:53:53.44;+36:05:19.3;CVn;;;;;;;;;;;;;;;;;;MCG +06-28-039 NED02,PGC 200292,SDSS J125353.12+360512.8,SDSS J125353.44+360519.2,UGC 08023 NED02;;; +IC3863;G;12:53:53.84;+38:28:49.6;CVn;0.71;0.28;86;16.02;;12.79;12.01;11.67;23.50;Sab;;;;;;;;2MASX J12535384+3828501,LEDA 2128241,SDSS J125353.83+382849.5,SDSS J125353.84+382849.6;;"Star superposed 7"" north.";B-Mag taken from LEDA. +IC3864;G;12:54:12.34;+18:57:04.6;Com;0.23;0.16;146;18.57;;;;;24.13;;;;;;;;;;;The IC number includes the superposed star, SDSS J125412.42+185705.1.;B-Mag taken from LEDA. +IC3865;G;12:54:14.15;+18:52:08.2;Com;0.48;0.35;145;16.49;;;;;23.75;E;;;;;;;;2MASX J12541413+1852086,SDSS J125414.15+185208.1,SDSS J125414.15+185208.2;;;B-Mag taken from LEDA. +IC3866;GPair;12:54:15.22;+22:21:42.6;Com;0.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3866 NED01;G;12:54:14.97;+22:21:34.7;Com;0.33;0.22;123;17.66;;;;;23.77;SBbc;;;;;;;;2MASX J12541498+2221346,PGC 1668455,SDSS J125414.97+222135.1;;;B-Mag taken from LEDA. +IC3866 NED02;G;12:54:15.50;+22:21:51.4;Com;0.34;0.26;15;16.95;;;;;23.31;SBbc;;;;;;;;2MASX J12541549+2221516,PGC 1668545,SDSS J125415.49+222151.4;;;B-Mag taken from LEDA. +IC3867;G;12:54:19.58;+18:56:30.5;Com;0.67;0.42;115;16.41;;13.20;12.57;11.98;24.10;SBb;;;;;;;;2MASX J12541955+1856306,LEDA 087471,SDSS J125419.57+185630.4;;; +IC3868;G;12:54:21.00;+18:59:25.2;Com;0.41;0.25;63;17.32;;;;;23.76;SBb;;;;;;;;2MASX J12542096+1859246,SDSS J125420.99+185925.1,SDSS J125421.00+185925.1,SDSS J125421.00+185925.2;;;B-Mag taken from LEDA. +IC3869;G;12:54:21.27;+18:58:17.1;Com;0.59;0.25;64;17.57;;13.84;13.11;12.74;23.87;Sc;;;;;;;;2MASX J12542125+1858176,LEDA 087472,SDSS J125421.26+185817.1,SDSS J125421.27+185817.1;;; +IC3870;G;12:54:21.58;+22:22:54.1;Com;0.30;0.27;34;17.15;;14.93;13.89;13.75;23.43;Sb;;;;;;;;2MASX J12542154+2222536,PGC 1668852,SDSS J125421.58+222254.0,SDSS J125421.58+222254.1;;;B-Mag taken from LEDA. +IC3871;G;12:54:25.67;+18:55:44.9;Com;0.52;0.43;17;16.51;;13.47;12.83;12.35;23.94;E;;;;;;;;2MASX J12542568+1855446,SDSS J125425.66+185544.9,SDSS J125425.67+185544.9;;;B-Mag taken from LEDA. +IC3872;G;12:54:30.56;+18:57:47.4;Com;0.23;0.18;38;16.54;;;;;;E;;;;;;;;2MASX J12543055+1857476,SDSS J125430.56+185747.4;;;B-Mag taken from LEDA. +IC3873;G;12:54:31.60;+18:52:57.6;Com;0.43;0.42;120;16.76;;;;;24.00;SBb;;;;;;;;2MASX J12543160+1852566,PGC 1573410,SDSS J125431.60+185257.6;;;B-Mag taken from LEDA. +IC3874;G;12:54:34.42;+18:57:25.2;Com;0.45;0.38;102;16.23;;13.48;12.74;12.63;23.95;E;;;;;;;;2MASX J12543443+1857246,LEDA 087473,SDSS J125434.42+185725.2;;; +IC3875;G;12:54:37.17;+22:02:11.2;Com;0.35;0.27;11;16.74;;;;;22.99;Sbc;;;;;;;;PGC 1662288,SDSS J125437.17+220211.1,SDSS J125437.17+220211.2;;;B-Mag taken from LEDA. +IC3876;G;12:54:48.33;+19:00:55.2;Com;0.40;0.23;43;17.79;;;;;24.09;Sbc;;;;;;;;2MASX J12544834+1900550,SDSS J125448.32+190055.8;;;B-Mag taken from LEDA. +IC3877;G;12:54:48.68;+19:10:41.8;Com;3.07;0.73;25;14.10;;12.27;11.79;11.96;23.92;SBc;;;;;;;;2MASX J12544868+1910420,MCG +03-33-016,PGC 043961,UGC 08036;;Often incorrectly called IC 3881.; +IC3878;*;12:54:29.56;+40:04:11.0;CVn;;;;;;;;;;;;;;;;;;SDSS J125429.55+400411.0;;; +IC3879;G;12:54:31.87;+38:37:42.8;CVn;0.64;0.42;179;16.03;;13.77;13.09;13.23;23.58;Sbc;;;;;;;;2MASX J12543185+3837425,MCG +07-27-002,PGC 043911,SDSS J125431.87+383742.7,SDSS J125431.87+383742.8;;;B-Mag taken from LEDA. +IC3880;G;12:54:47.99;+22:30:08.0;Com;0.42;0.25;175;17.03;;14.50;13.84;13.77;23.57;SBbc;;;;;;;;2MASX J12544795+2230080,LEDA 1671124,SDSS J125447.98+223008.0;;;B-Mag taken from LEDA. +IC3881;G;12:54:53.95;+19:07:05.0;Com;0.40;0.31;94;13.93;;;;;23.91;SBb;;;;;;;;2MASX J12545391+1907050,SDSS J125453.94+190704.9,SDSS J125453.95+190704.9;;;B-Mag taken from LEDA. +IC3882;G;12:54:53.71;+22:34:32.1;Com;0.53;0.28;157;16.72;;14.51;14.22;13.58;23.84;Sb;;;;;;;;2MASX J12545373+2234310,PGC 1672479,SDSS J125453.71+223432.0;;;B-Mag taken from LEDA. +IC3883;G;12:55:13.52;-08:07:11.1;Vir;1.09;0.54;11;14.18;;11.66;11.02;10.73;22.64;Sb;;;;;;;;2MASX J12551352-0807110,IRAS 12526-0750,MCG -01-33-049,PGC 044016;;;B-Mag taken from LEDA. +IC3884;G;12:54:57.73;+19:40:52.6;Com;0.85;0.62;147;16.36;;13.72;12.88;12.57;24.50;Sbc;;;;;;;;2MASX J12545772+1940530,LEDA 3090101,SDSS J125457.72+194052.5,SDSS J125457.73+194052.6;;;B-Mag taken from LEDA. +IC3885;G;12:54:42.73;+37:09:17.0;CVn;0.48;0.39;35;16.75;;14.14;13.48;13.08;23.74;Sbc;;;;;;;;2MASX J12544269+3709165,PGC 2094086,SDSS J125442.72+370917.0,SDSS J125442.73+370917.0;;;B-Mag taken from LEDA. +IC3886;G;12:55:00.30;+19:00:42.1;Com;0.40;0.34;22;17.75;;;;;24.49;;;;;;;;;SDSS J125500.30+190042.1;;;B-Mag taken from LEDA. +IC3887;**;12:54:43.77;+40:18:16.7;CVn;;;;;;;;;;;;;;;;;;;;; +IC3888;G;12:54:46.37;+39:34:16.6;CVn;0.90;0.35;57;15.24;;12.06;11.35;11.01;23.39;Sa;;;;;;;;2MASX J12544637+3934165,MCG +07-27-003,PGC 043956,SDSS J125446.36+393416.5,SDSS J125446.36+393416.6;;;B-Mag taken from LEDA. +IC3889;*;12:54:50.90;+36:01:00.6;CVn;;;;;;;;;;;;;;;;;;SDSS J125450.89+360100.5;;The IC number may also include two other stars and a faint galaxy.; +IC3890;G;12:54:50.26;+37:11:07.1;CVn;0.44;0.34;19;17.32;;14.47;13.83;13.69;24.06;Sc;;;;;;;;2MASX J12545022+3711075,PGC 2094744,SDSS J125450.25+371107.0,SDSS J125450.26+371107.0,SDSS J125450.26+371107.1;;;B-Mag taken from LEDA. +IC3891;G;12:54:58.25;+36:03:09.8;CVn;0.46;0.34;105;16.86;;15.15;14.37;14.41;23.83;Sbc;;;;;;;;2MASX J12545821+3603103,LEDA 2074181,SDSS J125458.24+360309.7,SDSS J125458.25+360309.7,SDSS J125458.25+360309.8;;;B-Mag taken from LEDA. +IC3892;G;12:55:06.04;+39:13:19.0;CVn;1.22;0.55;176;15.70;;12.13;11.49;11.33;24.16;S0-a;;;;;;;;2MASX J12550600+3913193,MCG +07-27-005,PGC 044001,SDSS J125506.03+391318.9,SDSS J125506.04+391319.0,UGC 08044;;; +IC3893;G;12:55:07.45;+38:37:25.9;CVn;0.58;0.18;72;16.91;;13.93;12.97;12.72;23.45;SBm;;;;;;;;2MASX J12550744+3837263,PGC 2132124,SDSS J125507.44+383725.8,SDSS J125507.44+383725.9,SDSS J125507.45+383725.9;;;B-Mag taken from LEDA. +IC3894;**;12:55:27.61;+19:04:08.8;Com;;;;;;;;;;;;;;;;;;;;; +IC3895;G;12:55:09.23;+39:12:11.7;CVn;0.71;0.69;18;15.70;;12.84;12.19;12.15;23.57;Sb;;;;;;;;2MASX J12550918+3912113,MCG +07-27-006,PGC 044010,SDSS J125509.22+391211.6,SDSS J125509.23+391211.6;;; +IC3896;G;12:56:43.23;-50:20:48.7;Cen;3.05;2.12;6;12.53;11.60;8.76;8.01;7.79;23.45;E;;;;;;;;2MASX J12564324-5020486,ESO 219-012,ESO-LV 219-0120,PGC 044180;;; +IC3897;G;12:55:19.10;+39:40:21.4;CVn;0.15;0.08;19;16.57;;;;;;Sc;;;;;;;;PGC 3088119,SDSS J125519.09+394021.6,SDSS J125519.09+394021.7;;;B-Mag taken from LEDA. +IC3898;G;12:55:23.84;+37:34:58.4;CVn;0.31;0.25;166;17.23;;14.50;13.69;13.17;23.28;Sc;;;;;;;;2MASX J12552386+3734583,LEDA 3088328,SDSS J125523.83+373458.3,SDSS J125523.84+373458.4;;;B-Mag taken from LEDA. +IC3899;G;12:55:40.66;+20:38:11.2;Com;0.43;0.23;40;17.06;;14.03;13.69;12.81;23.57;Sbc;;;;;;;;2MASX J12554067+2038112,LEDA 1632466,SDSS J125540.65+203811.2;;;B-Mag taken from LEDA. +IC3900;G;12:55:41.30;+27:15:02.7;Com;0.96;0.59;178;14.80;;11.65;10.97;10.77;23.49;S0;;;;;;;;2MASX J12554133+2715025,MCG +05-31-009,PGC 044068,SDSS J125541.29+271502.7,SDSS J125541.30+271502.7,SDSS J125541.30+271502.8;;; +IC3901;*;12:55:50.50;+21:56:20.5;Com;;;;;;;;;;;;;;;;;;SDSS J125550.49+215620.4;;; +IC3902;*;12:55:38.58;+35:59:45.0;CVn;;;;;;;;;;;;;;;;;;;;; +IC3903;*;12:55:38.74;+40:23:58.8;CVn;;;;;;;;;;;;;;;;;;SDSS J125538.73+402358.7;;; +IC3904;G;12:55:45.60;+36:17:36.3;CVn;0.62;0.37;72;15.70;;13.05;12.50;12.16;23.01;SABb;;;;;;;;2MASX J12554559+3617361,MCG +06-28-043,PGC 044075,SDSS J125545.60+361736.2,SDSS J125545.60+361736.3;;; +IC3905;GTrpl;12:56:08.59;+19:51:07.5;Com;0.90;;;;;;;;;;;;;;;;;;;IC 3905 includes the three brightest galaxies of a quadruple system.;Diameter of the group inferred by the author. +IC3905 NED01;G;12:56:07.99;+19:51:21.2;Com;0.22;0.11;30;19.11;;;;;24.58;;;;;;;;;SDSSJ125608.05+195120.4;;;B-Mag taken from LEDA +IC3905 NED02;G;12:56:08.58;+19:51:11.6;Com;0.48;0.32;123;16.99;;;;;23.84;Sb;;;;;;;;2MASX J12560862+1951109,SDSS J125608.60+195111.0;;;B-Mag taken from LEDA +IC3905 NED03;G;12:56:09.27;+19:50:48.2;Com;;;;;;;;;;;;;;;;;;SDSS J125609.26+195048.1;;;No data available in LEDA +IC3906;*;12:55:51.06;+40:27:49.9;CVn;;;;;;;;;;;;;;;;;;;;; +IC3907;G;12:56:18.18;+18:47:02.5;Com;0.46;0.20;2;17.51;;;;;24.56;;;;;;;;;SDSS J125618.17+184702.4,SDSS J125618.18+184702.4;;;B-Mag taken from LEDA. +IC3908;G;12:56:40.62;-07:33:46.0;Vir;2.43;0.79;172;13.50;;10.25;9.45;9.10;23.16;SBcd;;;;;;;;2MASX J12564062-0733460,IRAS 12540-0717,MCG -01-33-056,PGC 044166;;The APM position refers to the northern arm.; +IC3909;G;12:56:02.82;+40:23:07.6;CVn;0.37;0.28;55;16.64;;;;;23.03;Sb;;;;;;;;PGC 2165019,SDSS J125602.81+402307.5,SDSS J125602.81+402307.6,SDSS J125602.82+402307.6;;;B-Mag taken from LEDA. +IC3910;**;12:56:04.53;+39:43:11.6;CVn;;;;;;;;;;;;;;;;;;;;; +IC3911;GPair;12:56:09.43;+35:38:17.7;CVn;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC3911 NED01;G;12:56:09.22;+35:38:12.3;CVn;0.56;0.38;26;16.26;;13.40;12.69;12.46;23.77;E;;;;;;;;2MASX J12560925+3538115,PGC 2067661,SDSS J125609.23+353812.1,SDSS J125609.23+353812.2;;;B-Mag taken from LEDA. +IC3911 NED02;G;12:56:09.60;+35:38:23.0;CVn;0.50;0.24;36;18.43;;;;;25.77;E;;;;;;;;2MASS J12560966+3538216,SDSS J125609.64+353821.8;;;B-Mag taken from LEDA +IC3912;*;12:56:07.54;+39:54:38.4;CVn;;;;;;;;;;;;;;;;;;SDSS J125607.54+395438.3;;; +IC3913;G;12:56:28.57;+27:17:28.6;Com;0.66;0.45;57;15.82;;13.27;12.65;12.42;23.15;SABc;;;;;;;;2MASX J12562853+2717280,MCG +05-31-012,PGC 044147,SDSS J125628.56+271728.7,SDSS J125628.57+271728.5,SDSS J125628.57+271728.6;;; +IC3914;G;12:56:22.78;+36:21:39.3;CVn;0.36;0.25;112;17.29;;14.19;13.61;12.94;23.50;Sc;;;;;;;;2MASX J12562277+3621393,PGC 2079346,SDSS J125622.77+362139.2,SDSS J125622.78+362139.2,SDSS J125622.78+362139.3;;The IC number includes a neighboring star.;B-Mag taken from LEDA. +IC3915;*;12:56:39.02;+20:17:30.1;Com;;;;;;;;;;;;;;;;;;SDSS J125639.02+201730.0;;; +IC3916;G;12:56:31.17;+38:36:48.4;CVn;0.89;0.60;124;15.60;;11.88;11.10;10.82;23.45;Sab;;;;;;;;2MASX J12563118+3836483,MCG +07-27-008,PGC 044150,SDSS J125631.16+383648.4,SDSS J125631.17+383648.4,UGC 08063;;; +IC3917;*;12:56:51.63;+22:00:21.8;Com;;;;;;;;;;;;;;;;;;SDSS J125651.63+220021.8;;The IC number includes a defect on the original Heidelberg plate.; +IC3918;G;12:56:53.54;+22:22:25.0;Com;0.55;0.40;164;15.60;;13.84;13.17;12.97;23.00;Sc;;;;;;;;2MASX J12565354+2222254,PGC 044205,SDSS J125653.54+222224.9;;Often mistakenly called IC 3917 (that is a nearby star).; +IC3919;G;12:56:48.71;+38:35:19.5;CVn;0.59;0.43;108;15.87;;13.08;12.34;12.12;23.60;E;;;;;;;;2MASX J12564871+3835195,LEDA 3088214,SDSS J125648.71+383519.4,SDSS J125648.71+383519.5;;;B-Mag taken from LEDA. +IC3920;G;12:56:50.05;+39:57:31.2;CVn;0.68;0.21;16;15.83;;12.82;12.20;11.91;23.70;E-S0;;;;;;;;2MASX J12565002+3957315,LEDA 2158373,SDSS J125650.04+395731.2,SDSS J125650.05+395731.2;;;B-Mag taken from LEDA. +IC3921;G;12:56:56.65;+38:38:22.2;CVn;0.52;0.25;73;16.12;;14.19;13.37;12.86;23.10;Sc;;;;;;;;2MASX J12565656+3838215,PGC 2132575,SDSS J125656.64+383822.2,SDSS J125656.65+383822.2;;;B-Mag taken from LEDA. +IC3922;G;12:56:57.50;+38:28:41.8;CVn;0.72;0.23;90;16.12;;13.20;12.45;12.12;23.42;Sb;;;;;;;;2MASX J12565750+3828415,IRAS 12546+3844,LEDA 140039,SDSS J125657.49+382841.7,SDSS J125657.49+382841.8,SDSS J125657.50+382841.8;;;B-Mag taken from LEDA. +IC3923;**;12:57:01.13;+37:57:20.6;CVn;;;;;;;;;;;;;;;;;;;;; +IC3924;G;12:57:24.88;+18:46:53.5;Com;0.42;0.29;121;18.11;;;;;25.13;E;;;;;;;;2MASX J12572484+1846530,PGC 1570093,SDSS J125724.87+184653.4,SDSS J125724.88+184653.4;;;B-Mag taken from LEDA. +IC3925;**;12:57:15.12;+36:25:19.2;CVn;;;;;;;;;;;;;;;;;;;;; +IC3926;*;12:57:30.41;+22:48:43.0;Com;;;;;;;;;;;;;;;;;;SDSS J125730.41+224843.0;;; +IC3927;G;12:58:10.39;-22:52:33.7;Hya;1.29;1.05;166;13.63;;10.30;9.58;9.34;23.02;E-S0;;;;;;;;2MASX J12581040-2252334,ESO 507-058,ESO-LV 507-0580,MCG -04-31-012,PGC 044419;;; +IC3928;G;12:57:18.29;+40:26:29.8;CVn;0.33;0.26;145;17.00;;;;;23.04;Sbc;;;;;;;;2MASX J12571827+4026298,PGC 2165833,SDSS J125718.29+402629.8;;;B-Mag taken from LEDA. +IC3929;G;12:57:41.09;+20:23:48.8;Com;0.38;0.28;40;17.08;;13.48;12.76;12.27;23.55;Sb;;;;;;;;2MASX J12574102+2023480,IRAS 12551+2040,LEDA 1626078;;Double nuclei.;B-Mag taken from LEDA. +IC3930;G;12:57:22.39;+38:45:53.7;CVn;0.57;0.29;7;16.23;;;;;23.20;Sbc;;;;;;;;2MASX J12572240+3845539,LEDA 2135973,SDSS J125722.38+384553.6,SDSS J125722.38+384553.7;;;B-Mag taken from LEDA. +IC3931;G;12:57:57.20;+19:37:03.5;Com;0.73;0.39;154;16.08;;13.24;12.51;12.09;23.68;Sb;;;;;;;;2MASX J12575716+1937036,SDSS J125757.19+193703.4;;;B-Mag taken from LEDA. +IC3932;*;12:58:05.30;+19:35:00.4;Com;;;;;;;;;;;;;;;;;;SDSS J125805.30+193500.4;;; +IC3933;*;12:57:57.20;+36:38:42.2;CVn;;;;;;;;;;;;;;;;;;SDSS J125757.19+363842.1;;; +IC3934;G;12:58:17.56;+18:49:31.5;Com;0.51;0.48;58;16.47;;;;;23.98;SBbc;;;;;;;;2MASX J12581756+1849316,PGC 1571543,SDSS J125817.54+184931.4,SDSS J125817.55+184931.5;;;B-Mag taken from LEDA. +IC3935;Dup;12:58:12.68;+26:23:48.8;Com;;;;;;;;;;;;;;;4849;;;;;; +IC3936;Other;12:58:19.93;+19:03:29.8;Com;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +IC3937;G;12:58:24.74;+18:49:07.2;Com;0.54;0.40;111;16.63;;;;;24.13;E;;;;;;;;2MASX J12582475+1849066,SDSS J125824.73+184907.1;;;B-Mag taken from LEDA. +IC3938;*;12:58:25.36;+18:45:09.5;Com;;;;;;;;;;;;;;;;;;SDSS J125825.36+184509.4;;; +IC3939;*;12:58:28.02;+18:45:06.7;Com;;;;;;;;;;;;;;;;;;SDSS J125828.02+184506.6;;; +IC3940;G;12:58:16.47;+35:50:20.2;CVn;0.64;0.33;136;15.66;;13.02;12.22;11.90;23.09;Sb;;;;;;;;2MASX J12581646+3550195,IRAS 12559+3606,PGC 044429,SDSS J125816.46+355020.1,SDSS J125816.46+355020.2;;;B-Mag taken from LEDA. +IC3941;G;12:58:13.91;+39:46:22.2;CVn;0.65;0.49;14;16.41;;13.15;12.30;12.03;24.33;E;;;;;;;;2MASX J12581387+3946225,LEDA 3088023,SDSS J125813.91+394622.1;;The IC number includes a defect on the original Heidelberg plate.;B-Mag taken from LEDA. +IC3942;*;12:58:19.89;+36:06:31.5;CVn;;;;;;;;;;;;;;;;;;SDSS J125819.88+360631.4;;; +IC3943;G;12:58:36.35;+28:06:49.5;Com;0.92;0.33;59;15.60;14.13;12.20;11.45;11.27;23.91;S0;;;;;;;;2MASX J12583636+2806497,PGC 044485,SDSS J125836.34+280649.4,SDSS J125836.35+280649.4,SDSS J125836.36+280649.3;;; +IC3944;G;12:58:44.75;+23:46:51.8;Com;0.56;0.34;63;16.10;;13.27;12.59;12.26;23.28;Sab;;;;;;;;PGC 140043;;;B-Mag taken from LEDA. +IC3945;G;12:58:29.63;+39:56:09.3;CVn;0.49;0.19;13;16.07;;;;;;Sc;;;;;;;;2MASX J12582961+3956088,SDSS J125829.62+395609.3,SDSS J125829.63+395609.3;;;B-Mag taken from LEDA. +IC3946;G;12:58:48.72;+27:48:37.4;Com;0.86;0.44;71;15.30;13.85;11.89;11.19;11.12;23.46;S0;;;;;;;;2MASX J12584869+2748368,MCG +05-31-050,PGC 044508,SDSS J125848.72+274837.4;;Position in 1973A&AS...12...89G is incorrect.; +IC3947;G;12:58:52.10;+27:47:06.2;Com;0.66;0.49;100;15.87;14.61;12.69;12.01;11.63;23.58;S0;;;;;;;;2MASX J12585208+2747059,PGC 044515,SDSS J125852.09+274706.1,SDSS J125852.09+274706.2,SDSS J125852.10+274706.3;;; +IC3948;G;12:58:58.15;+24:03:40.9;Com;0.33;0.29;5;17.57;;14.56;13.97;13.38;24.08;E;;;;;;;;2MASX J12585817+2403409,PGC 1698944,SDSS J125858.14+240340.9,SDSS J125858.15+240340.9;;;B-Mag taken from LEDA. +IC3949;G;12:58:56.01;+27:50:00.1;Com;1.01;0.16;72;15.10;14.26;11.98;11.36;11.01;23.72;S0;;;;;;;;2MASX J12585577+2749589,MCG +05-31-052,PGC 044524,SDSS J125855.94+275000.2,SDSS J125855.96+275000.1,SDSS J125855.96+275000.2,SDSS J125855.97+275000.2,UGC 08096;;Position in Gallouet et al (1973A&AS...12...89G) is incorrect.; +IC3950;G;12:59:06.12;+18:44:08.2;Com;0.58;0.49;145;16.48;;13.29;12.45;11.88;23.91;SBb;;;;;;;;2MASX J12590615+1844077,LEDA 3090103,SDSS J125906.11+184408.1,SDSS J125906.12+184408.1;;;B-Mag taken from LEDA. +IC3951;G;12:59:10.20;+18:45:51.4;Com;0.60;0.37;157;16.53;;13.26;12.64;12.18;24.24;E;;;;;;;;2MASX J12591016+1845507,LEDA 3090104,SDSS J125910.19+184551.3,SDSS J125910.19+184551.4;;The IC number includes a defect on the original Heidelberg plate.;B-Mag taken from LEDA. +IC3952;G;12:58:52.15;+38:52:10.2;CVn;0.52;0.38;153;16.68;;;;;23.85;Sbc;;;;;;;;2MASX J12585210+3852099,SDSS J125852.15+385210.2,SDSS J125852.16+385210.2;;;B-Mag taken from LEDA. +IC3953;G;12:59:09.12;+23:05:11.8;Com;0.37;0.32;45;16.89;;14.05;13.32;12.80;23.50;Sab;;;;;;;;2MASX J12590913+2305117,PGC 1681197,SDSS J125909.11+230511.7,SDSS J125909.12+230511.7;;;B-Mag taken from LEDA. +IC3954;G;12:59:12.65;+19:16:22.6;Com;0.22;0.15;83;17.08;;;;;;Sb;;;;;;;;2MASX J12591261+1916227,SDSS J125912.64+191622.5;;;B-Mag taken from LEDA. +IC3955;G;12:59:06.03;+27:59:48.1;Com;0.77;0.51;41;15.59;14.31;12.35;11.64;11.38;23.51;S0;;;;;;;;2MASX J12590603+2759479,PGC 044544,SDSS J125906.02+275948.0,SDSS J125906.02+275948.1;;; +IC3956;G;12:58:56.38;+37:23:53.4;CVn;0.51;0.41;165;15.92;;12.71;12.23;11.83;23.30;E;;;;;;;;2MASX J12585640+3723538,LEDA 2099843,SDSS J125856.38+372353.4;;;B-Mag taken from LEDA. +IC3957;G;12:59:07.49;+27:46:04.0;Com;0.56;0.54;40;15.86;14.72;12.71;11.79;11.81;23.40;E;;;;;;;;2MASX J12590745+2746039,MCG +05-31-060,PGC 044554,SDSS J125907.48+274604.0,SDSS J125907.49+274603.9;;; +IC3958;G;12:59:11.41;+24:01:20.2;Com;0.53;0.40;112;16.71;;13.76;12.88;12.57;24.18;E;;;;;;;;2MASX J12591138+2401199,SDSS J125911.40+240120.1;;;B-Mag taken from LEDA. +IC3959;G;12:59:08.20;+27:47:02.9;Com;0.70;0.70;10;15.20;14.03;11.98;11.33;11.09;23.35;E;;;;;;;;2MASX J12590821+2747029,MCG +05-31-059,PGC 044553,SDSS J125908.19+274702.8,SDSS J125908.20+274702.7,SDSS J125908.20+274702.8;;; +IC3960;G;12:59:07.96;+27:51:18.0;Com;0.55;0.53;14;15.50;14.47;12.36;11.82;11.50;23.33;S0;;;;;;;;2MASX J12590791+2751179,MCG +05-31-055,PGC 044551,SDSS J125907.94+275117.8,SDSS J125907.94+275117.9,SDSS J125907.94+275118.0;;; +IC3961;Dup;12:59:02.34;+34:51:34.0;CVn;;;;;;;;;;;;;;;4861;;;;;; +IC3962;*;12:59:14.98;+23:40:04.8;Com;;;;;;;;;;;;;;;;;;;;; +IC3963;G;12:59:13.50;+27:46:28.6;Com;0.70;0.41;82;15.84;14.72;12.65;12.03;11.89;23.62;S0;;;;;;;;2MASX J12591348+2746289,MCG +05-31-061,PGC 044567,SDSS J125913.48+274628.5,SDSS J125913.49+274628.5;;; +IC3964;*;12:59:13.73;+27:51:03.4;Com;;;;16.52;15.91;14.80;14.45;14.46;;;;;;;;;;2MASS J12591371+2751032,SDSS J125913.72+275103.4;;; +IC3965;G;12:59:22.68;+18:50:34.6;Com;0.33;0.25;158;17.15;;;;;23.31;Sb;;;;;;;;2MASX J12592270+1850341,SDSS J125922.67+185034.6;;;B-Mag taken from LEDA. +IC3966;G;12:59:13.12;+35:51:19.2;CVn;0.74;0.50;15;15.43;;12.91;12.31;11.93;23.24;Sc;;;;;;;;2MASX J12591317+3551190,MCG +06-29-007,PGC 044565,SDSS J125913.12+355119.2;;;B-Mag taken from LEDA. +IC3967;G;12:59:12.90;+36:07:45.4;CVn;0.76;0.49;42;15.70;;12.32;11.62;11.33;23.61;E?;;;;;;;;2MASX J12591294+3607460,MCG +06-29-005,PGC 044561,SDSS J125912.89+360745.4,SDSS J125912.90+360745.3,SDSS J125912.90+360745.4;;; +IC3968;G;12:59:25.49;+27:58:23.5;Com;0.44;0.36;48;16.80;15.32;13.36;12.74;12.45;23.29;E-S0;;;;;;;;2MASX J12592544+2758238,PGC 044598,SDSS J125925.48+275823.5,SDSS J125925.49+275823.5;;; +IC3969;GTrpl;12:59:32.91;+19:39:07.2;Com;0.80;;;;;;;;;;;;;;;;;;;The IC number also includes a neighboring star.;Diameter of the group inferred by the author. +IC3969 NED01;G;12:59:32.71;+19:39:11.0;Com;0.69;0.39;99;17.21;;;;;24.75;SBb;;;;;;;;2MASX J12593270+1939111,PGC 1600532;;;B-Mag taken from LEDA. +IC3969 NED02;G;12:59:32.65;+19:38:51.2;Com;0.30;0.20;89;18.58;;;;;24.70;;;;;;;;;2MASX J12593263+1938511,SDSS J125932.65+193851.1;;;B-Mag taken from LEDA +IC3969 NED03;G;12:59:33.73;+19:39:17.1;Com;0.23;0.12;149;19.48;;;;;25.06;;;;;;;;;SDSS J125933.73+193917.0;;;B-Mag taken from LEDA +IC3970;*;12:59:11.43;+40:24:06.9;CVn;;;;;;;;;;;;;;;;;;SDSS J125911.42+402406.9;;; +IC3971;G;12:59:31.79;+22:50:41.3;Com;0.38;0.33;119;16.68;;13.53;12.97;12.31;23.28;Sbc;;;;;;;;2MASX J12593176+2250411,PGC 044617,SDSS J125931.79+225041.2;;;B-Mag taken from LEDA. +IC3972;*;12:59:17.15;+37:16:44.9;CVn;;;;;;;;;;;;;;;;;;SDSS J125917.15+371644.9;;; +IC3973;G;12:59:30.82;+27:53:03.2;Com;0.76;0.44;141;15.20;14.03;12.19;11.48;11.10;23.49;S0;;;;;;;;2MASX J12593079+2753028,PGC 044612,SDSS J125930.81+275303.1,SDSS J125930.82+275303.1,SDSS J125930.82+275303.2;;; +IC3974;Dup;13:05:20.20;-35:20:14.7;Cen;;;;;;;;;;;;;;;4947;;;;;; +IC3975;G;12:59:15.69;+38:52:57.9;CVn;0.87;0.51;31;15.13;;11.99;11.18;10.94;23.46;S0-a;;;;;;;;2MASX J12591570+3852580,MCG +07-27-009,PGC 044555,SDSS J125915.68+385257.8,SDSS J125915.69+385257.9;;;B-Mag taken from LEDA. +IC3976;G;12:59:29.40;+27:51:00.5;Com;0.66;0.31;153;15.50;14.42;12.49;11.75;11.50;23.62;E;;;;;;;;2MASX J12592936+2751008,PGC 044603,SDSS J125929.40+275100.4,SDSS J125929.40+275100.5,SDSS J125929.40+275100.7;;; +IC3977;*;12:59:19.66;+36:47:53.1;CVn;;;;;;;;;;;;;;;;;;;;; +IC3978;G;12:59:37.45;+19:37:20.0;Com;0.21;0.19;131;18.62;;;;;23.96;;;;;;;;;SDSS J125937.45+193720.0;;;B-Mag taken from LEDA. +IC3979;*;12:59:20.75;+36:19:27.6;CVn;;;;;;;;;;;;;;;;;;;;The IC number also includes a defect on the original plate.; +IC3980;G;12:59:18.60;+39:09:04.5;CVn;0.36;0.31;45;16.82;;;;;23.25;SBb;;;;;;;;2MASX J12591861+3909040,PGC 2144346,SDSS J125918.60+390904.4;;;B-Mag taken from LEDA. +IC3981;*;12:59:21.45;+37:13:40.1;CVn;;;;;;;;;;;;;;;;;;;;; +IC3982;*;12:59:18.59;+40:04:49.9;CVn;;;;;;;;;;;;;;;;;;SDSS J125918.58+400449.9;;; +IC3983;**;12:59:20.51;+39:14:47.9;CVn;;;;;;;;;;;;;;;;;;;;; +IC3984;GPair;12:59:40.31;+19:37:28.3;Com;0.50;;;;;;;;;;;;;;;;;;;The IC number also includes a neighboring star.;Diameter of the group inferred by the author. +IC3984 NED01;G;12:59:40.39;+19:37:32.6;Com;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC3984 NED02;G;12:59:40.26;+19:37:23.1;Com;0.35;0.33;70;17.66;;;;;24.25;E;;;;;;;;2MASX J12594027+1937231,SDSS J125940.25+193723.0;;;B-Mag taken from LEDA +IC3985;G;12:59:43.15;+19:35:28.0;Com;0.37;0.33;75;16.44;;15.06;14.39;14.01;22.94;Sc;;;;;;;;2MASX J12594311+1935281,PGC 3090105,SDSS J125943.15+193527.9;;;B-Mag taken from LEDA. +IC3986;G;13:01:32.14;-32:17:27.8;Cen;1.85;1.38;124;13.35;;9.80;9.10;8.85;23.54;E;;;;;;;;2MASX J13013213-3217276,ESO 443-032,ESO-LV 443-0320,MCG -05-31-016,PGC 044905;;; +IC3987;G;12:59:25.04;+38:44:00.4;CVn;0.49;0.41;40;15.63;;12.77;12.06;11.80;23.07;E;;;;;;;;2MASX J12592502+3844000,LEDA 2135098,SDSS J125925.03+384400.3,SDSS J125925.04+384400.4;;;B-Mag taken from LEDA. +IC3988;*;12:59:26.82;+37:14:41.9;CVn;;;;;;;;;;;;;;;;;;;;; +IC3989;*;12:59:28.74;+36:45:23.7;CVn;;;;;;;;;;;;;;;;;;SDSS J125928.73+364523.6;;; +IC3990;G;12:59:39.11;+28:53:43.9;Com;0.87;0.29;30;15.00;14.00;11.61;10.87;10.51;22.83;Sa;;;;;;;;2MASX J12593914+2853437,MCG +05-31-071,PGC 044633,SDSS J125939.11+285343.8,SDSS J125939.11+285343.9,SDSS J125939.12+285343.8,SDSS J125939.12+285343.9;;; +IC3991;G;12:59:39.79;+28:55:35.7;Com;0.91;0.41;66;15.50;14.36;12.12;11.44;11.23;23.69;E-S0;;;;;;;;2MASX J12593975+2855357,MCG +05-31-072,PGC 044632,SDSS J125939.78+285535.6,SDSS J125939.79+285535.7;;; +IC3992;*;12:59:33.29;+36:46:18.6;CVn;;;;;;;;;;;;;;;;;;SDSS J125933.28+364618.6;;; +IC3993;G;12:59:30.47;+40:36:06.4;CVn;0.48;0.41;1;15.90;;13.36;12.53;12.00;23.17;E;;;;;;;;2MASX J12593044+4036060,LEDA 3088024,SDSS J125930.46+403606.3;;;B-Mag taken from LEDA. +IC3994;G;12:59:50.84;+22:43:00.3;Com;0.30;0.23;164;17.22;;;;;23.09;SBc;;;;;;;;PGC 1674890,SDSS J125950.83+224300.3;;;B-Mag taken from LEDA. +IC3995;*;12:59:33.93;+39:02:23.2;CVn;;;;;;;;;;;;;;;;;;SDSS J125933.92+390223.2;;; +IC3996;**;12:59:31.50;+40:28:03.2;CVn;;;;;;;;;;;;;;;;;;SDSS J125931.49+402803.2;;; +IC3997;G;12:59:36.93;+36:41:44.4;CVn;0.38;0.31;45;16.88;;;;;23.65;E;;;;;;;;PGC 2085297,SDSS J125936.93+364144.4;;;B-Mag taken from LEDA. +IC3998;G;12:59:46.78;+27:58:25.9;Com;0.56;0.41;8;15.91;14.61;12.63;11.89;11.57;23.04;S0;;;;;;;;2MASX J12594681+2758252,PGC 044664,SDSS J125946.77+275825.8,SDSS J125946.77+275826.0,SDSS J125946.78+275825.8;;; +IC3999;Dup;12:59:30.82;-14:07:56.4;Vir;;;;;;;;;;;;;;;4862;;;;;; +IC4000;G;12:59:36.62;+39:35:15.9;CVn;0.36;0.26;53;17.14;;;;;23.33;Sbc;;;;;;;;2MASX J12593659+3935159,PGC 2152407,SDSS J125936.62+393515.9;;;B-Mag taken from LEDA. +IC4001;G;12:59:37.93;+38:52:12.9;CVn;0.58;0.34;32;15.74;;;;;23.47;E;;;;;;;;2MASX J12593796+3852129,LEDA 2138467,SDSS J125937.92+385212.8,SDSS J125937.93+385212.9;;;B-Mag taken from LEDA. +IC4002;G;12:59:40.61;+36:45:48.5;CVn;0.43;0.23;68;17.14;;;;;23.46;Sm;;;;;;;;PGC 044648,SDSS J125940.61+364548.5;;Multiple SDSS entries describe this object.;B-Mag taken from LEDA. +IC4003;G;12:59:39.33;+38:48:56.1;CVn;1.07;1.07;91;15.40;;12.09;11.37;11.10;24.13;E;;;;;;;;2MASX J12593931+3848557,2MASX J12594016+3849157,MCG +07-27-010,PGC 044619,SDSS J125939.32+384856.1,SDSS J125939.33+384856.1;;; +IC4004;G;12:59:42.77;+38:48:40.7;CVn;0.87;0.81;143;15.41;;12.34;11.86;11.45;23.99;E;;;;;;;;2MASX J12594273+3848408,MCG +07-27-011,PGC 044618,SDSS J125942.76+384840.6,SDSS J125942.76+384840.7,SDSS J125942.77+384840.7;;;B-Mag taken from LEDA. +IC4005;**;13:00:02.54;+22:38:23.7;Com;;;;;;;;;;;;;;;;;;;;; +IC4006;*;12:59:48.72;+37:00:39.9;CVn;;;;;;;;;;;;;;;;;;SDSS J125948.72+370039.8;;The IC number includes a defect on the original Heidelberg plate.; +IC4007;GPair;13:00:06.85;+19:57:50.8;Com;0.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4007 NED01;G;13:00:06.63;+19:57:43.7;Com;;;;;;;;;;;;;;;;;;SDSS J130006.62+195743.7;;;No data available in LEDA +IC4007 NED02;G;13:00:06.99;+19:57:52.8;Com;0.34;0.22;146;16.33;;13.35;12.67;12.25;;E;;;;;;;;2MASX J13000700+1957531,SDSS J130006.99+195752.8;;;B-Mag taken from LEDA +IC4008;**;13:00:05.74;+22:21:01.8;Com;;;;;;;;;;;;;;;;;;;;; +IC4009;*;12:59:52.80;+36:39:38.7;CVn;;;;;;;;;;;;;;;;;;;;; +IC4010;G;12:59:54.04;+37:51:32.8;CVn;0.52;0.28;65;16.31;;13.27;12.53;12.27;23.18;Sab;;;;;;;;2MASX J12595407+3751329,LEDA 2111366,SDSS J125954.04+375132.8;;;B-Mag taken from LEDA. +IC4011;G;13:00:06.39;+28:00:14.9;Com;0.40;0.38;1;16.21;15.05;13.01;12.39;12.14;22.95;E;;;;;;;;2MASX J13000643+2800142,PGC 044705,SDSS J130006.38+280014.7,SDSS J130006.38+280014.8;;; +IC4012;G;13:00:07.99;+28:04:42.8;Com;0.51;0.42;131;15.95;14.64;12.62;11.98;11.59;23.38;E;;;;;;;;2MASX J13000803+2804422,PGC 044714,SDSS J130007.99+280442.8,SDSS J130007.99+280442.9;;; +IC4013;*;12:59:57.83;+37:11:57.8;CVn;;;;;;;;;;;;;;;;;;;;; +IC4014;G;13:00:13.90;+22:29:58.6;Com;0.40;0.36;4;16.76;;14.20;13.39;13.13;23.61;Sb;;;;;;;;2MASX J13001390+2229591,PGC 1671081,SDSS J130013.89+222958.5,SDSS J130013.89+222958.6;;;B-Mag taken from LEDA. +IC4015;Dup;12:59:59.61;+37:11:36.2;CVn;;;;;;;;;;;;;;;4893;;;;;; +IC4016;Dup;12:59:59.84;+37:11:17.3;CVn;;;;;;;;;;;;;;;4893A;;;;;; +IC4017;G;13:00:15.92;+22:33:20.5;Com;0.39;0.20;91;17.44;;14.65;13.92;13.15;23.65;SBc;;;;;;;;2MASX J13001592+2233203,LEDA 1672129,SDSS J130015.93+223320.5;;;B-Mag taken from LEDA. +IC4018;G;12:59:57.44;+40:29:19.4;CVn;0.18;0.15;168;17.01;;;;;;E;;;;;;;;2MASX J12595745+4029189,SDSS J125957.43+402919.3,SDSS J125957.44+402919.4;;The IC number includes the star 25 arcsec south-southwest.;B-Mag taken from LEDA. +IC4019;**;13:00:17.43;+23:43:15.0;Com;;;;;;;;;;;;;;;;;;;;; +IC4020;G;13:00:03.40;+38:36:35.6;CVn;0.93;0.19;80;16.59;;13.47;12.58;12.10;23.89;Sc;;;;;;;;2MASX J13000344+3836359,LEDA 2131719,SDSS J130003.39+383635.6,SDSS J130003.40+383635.6;;;B-Mag taken from LEDA. +IC4021;G;13:00:14.74;+28:02:28.7;Com;0.40;0.38;26;15.97;14.75;12.74;12.02;11.78;22.60;E;;;;;;;;2MASX J13001475+2802282,MCG +05-31-080,PGC 044726,SDSS J130014.73+280228.6,SDSS J130014.74+280228.6;;; +IC4022;*;13:00:04.93;+38:28:44.1;CVn;;;;;;;;;;;;;;;;;;SDSS J130004.93+382844.0;;; +IC4023;G;13:00:26.54;+19:05:50.4;Com;0.62;0.35;176;16.60;;;;;24.40;E;;;;;;;;2MASX J13002654+1905503,SDSS J130026.52+190550.4,SDSS J130026.53+190550.4;;;B-Mag taken from LEDA +IC4024;*;13:00:03.97;+40:30:32.9;CVn;;;;;;;;;;;;;;;;;;SDSS J130003.97+403032.9;;; +IC4025;G;13:00:28.36;+19:06:18.1;Com;0.62;0.35;176;16.60;;;;;24.40;E;;;;;;;;SDSS J130028.35+190618.1;;;B-Mag taken from LEDA. +IC4026;G;13:00:22.14;+28:02:49.2;Com;0.58;0.41;73;15.50;14.63;12.44;11.78;11.55;23.11;S0;;;;;;;;2MASX J13002215+2802495,PGC 044749,SDSS J130022.12+280249.2,SDSS J130022.13+280249.2;;; +IC4027;G;13:00:13.62;+37:08:29.1;CVn;0.45;0.33;167;16.31;;;;;23.29;S0-a;;;;;;;;2MASX J13001358+3708289,LEDA 2093834,SDSS J130013.61+370829.1,SDSS J130013.62+370829.1;;;B-Mag taken from LEDA. +IC4028;G;13:00:16.13;+36:15:14.8;CVn;0.78;0.61;151;15.50;;12.60;12.13;11.90;23.32;Sc;;;;;;;;2MASX J13001616+3615152,MCG +06-29-012,PGC 044731,SDSS J130016.13+361514.8,SDSS J130016.14+361514.8,UGC 08115;;; +IC4029;G;13:00:14.20;+38:45:35.0;CVn;0.42;0.20;109;16.57;;;;;23.58;E;;;;;;;;2MASX J13001419+3845352,PGC 2135829,SDSS J130014.19+384535.0,SDSS J130014.20+384535.0;;;B-Mag taken from LEDA. +IC4030;G;13:00:27.97;+27:57:21.5;Com;0.53;0.36;16;16.50;15.27;13.31;12.58;12.36;23.77;S0;;;;;;;;2MASX J13002798+2757216,PGC 044763,SDSS J130027.96+275721.5,SDSS J130027.96+275721.6,SDSS J130027.97+275721.5;;; +IC4031;G;13:00:15.48;+39:08:41.8;CVn;0.21;0.17;124;16.42;;;;;;Sb;;;;;;;;2MASX J13001542+3908422,SDSS J130015.47+390841.8,SDSS J130015.48+390841.8;;;B-Mag taken from LEDA. +IC4032;G;13:00:25.65;+28:52:04.1;Com;0.60;0.44;176;15.40;14.68;12.29;11.52;11.43;22.93;E-S0;;;;;;;;2MASX J13002568+2852036,MCG +05-31-083,PGC 044756,SDSS J130025.64+285204.1,SDSS J130025.65+285204.0,SDSS J130025.65+285204.1;;; +IC4033;G;13:00:28.39;+27:58:20.7;Com;0.50;0.28;100;16.74;15.23;13.02;12.16;12.29;23.44;S0;;;;;;;;2MASX J13002835+2758206,PGC 044771,SDSS J130028.39+275820.6;;; +IC4034;G;13:00:19.59;+37:02:46.3;CVn;0.41;0.24;63;16.26;;;;;22.60;Sc;;;;;;;;PGC 214050,SDSS J130019.58+370246.3,SDSS J130019.59+370246.3;;;B-Mag taken from LEDA. +IC4035;GPair;13:00:17.34;+40:18:05.2;CVn;0.80;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4035 NED01;G;13:00:16.69;+40:17:58.7;CVn;0.48;0.23;34;16.89;;;;;23.25;Sbc;;;;;;;;2MASX J13001667+4017582,PGC 2163772,SDSS J130016.68+401758.6,SDSS J130016.68+401758.7,SDSS J130016.69+401758.7;;;B-Mag taken from LEDA. +IC4035 NED02;G;13:00:18.00;+40:18:08.5;CVn;0.55;0.09;179;18.80;;;;;26.24;;;;;;;;;SDSS J130017.99+401808.2;;;B-Mag taken from LEDA +IC4036;*;13:00:20.75;+36:54:32.6;CVn;;;;;;;;;;;;;;;;;;SDSS J130020.75+365432.6;;; +IC4037;G;13:00:19.42;+39:00:09.5;CVn;0.35;0.28;109;16.54;;13.90;13.09;12.62;22.79;Sb;;;;;;;;2MASX J13001939+3900092,LEDA 2141402,SDSS J130019.41+390009.4,SDSS J130019.41+390009.5,SDSS J130019.42+390009.5;;;B-Mag taken from LEDA. +IC4038;G;13:00:21.77;+37:02:21.7;CVn;0.59;0.31;168;16.18;;13.04;12.37;12.06;23.86;E;;;;;;;;2MASX J13002176+3702212,LEDA 214051,SDSS J130021.76+370221.6,SDSS J130021.76+370221.7;;;B-Mag taken from LEDA. +IC4039;G;13:00:39.38;+21:41:30.2;Com;0.50;0.42;10;16.04;;13.22;12.38;12.40;23.31;SBa;;;;;;;;2MASX J13003938+2141293,LEDA 1655188,SDSS J130039.38+214130.1;;;B-Mag taken from LEDA. +IC4040;G;13:00:37.93;+28:03:26.5;Com;0.78;0.34;152;15.10;14.76;12.92;12.29;11.84;22.81;SABc;;;;;;;;2MASX J13003794+2803266,IRAS 12582+2819,MCG +05-31-085,PGC 044789,SDSS J130037.78+280326.8,SDSS J130037.78+280327.0,SDSS J130037.87+280329.2,SDSS J130037.94+280326.6;;Multiple SDSS entries describe this object.; +IC4041;G;13:00:40.85;+27:59:47.8;Com;0.61;0.44;44;15.88;14.77;12.58;12.11;11.67;23.16;E;;;;;;;;2MASX J13004081+2759476,MCG +05-31-086,PGC 044802,PGC 044804,SDSS J130040.84+275947.7,SDSS J130040.85+275947.8;;; +IC4042;G;13:00:42.77;+27:58:17.0;Com;0.72;0.60;2;15.27;14.01;11.79;10.97;10.76;23.18;S0;;;;;;;;2MASX J13004277+2758166,PGC 044808,SDSS J130042.74+275816.6,SDSS J130042.75+275816.5,SDSS J130042.77+275816.7;;; +IC4043;G;13:00:34.68;+37:04:18.9;CVn;0.98;0.30;160;16.50;;;;;24.09;SBd;;;;;;;;PGC 044814,SDSS J130034.67+370418.9,SDSS J130034.68+370418.9,SDSS J130034.68+370418.9 bg,UGC 08123;;; +IC4044;G;13:00:47.41;+27:55:19.8;Com;0.48;0.30;43;16.81;15.47;13.24;12.68;12.50;23.45;S0-a;;;;;;;;2MASX J13004737+2755196,PGC 044821,SDSS J130047.40+275519.7,SDSS J130047.40+275519.8,SDSS J130047.40+275519.9,SDSS J130047.41+275519.8;;; +IC4045;G;13:00:48.64;+28:05:26.8;Com;0.79;0.44;109;15.10;13.77;11.85;11.05;10.90;23.20;E;;;;;;;;2MASX J13004867+2805266,MCG +05-31-088,PGC 044818,SDSS J130048.64+280526.5,SDSS J130048.64+280526.6,SDSS J130048.65+280526.5;;; +IC4046;*;13:00:39.43;+36:41:09.3;CVn;;;;;;;;;;;;;;;;;;SDSS J130039.43+364109.3;;; +IC4047;G;13:00:57.69;+19:41:13.2;Com;0.88;0.81;90;15.70;;12.77;12.19;11.73;23.97;Sbc;;;;;;;;2MASX J13005770+1941130,MCG +03-33-021,PGC 044816,SDSS J130057.68+194113.1,SDSS J130057.69+194113.1;;; +IC4048;G;13:00:38.15;+39:49:51.5;CVn;0.46;0.21;178;16.84;;13.77;13.22;12.67;23.16;SBbc;;;;;;;;2MASX J13003817+3949512,LEDA 2156354,SDSS J130038.15+394951.4,SDSS J130038.16+394951.5;;;B-Mag taken from LEDA. +IC4049;G;13:00:42.66;+36:20:44.0;CVn;1.07;1.07;69;15.30;;11.82;11.04;10.74;23.88;S0;;;;;;;;2MASX J13004264+3620442,MCG +06-29-013,PGC 044806,SDSS J130042.65+362043.9,SDSS J130042.66+362044.0,UGC 08124;;; +IC4050;**;13:00:43.82;+36:44:23.5;CVn;;;;;;;;;;;;;;;;;;SDSS J130043.82+364423.5;;; +IC4051;G;13:00:51.56;+28:02:34.1;Com;0.96;0.58;51;14.90;13.58;11.67;10.88;10.66;23.39;E;;;;;;;;2MASX J13005158+2802341,MCG +05-31-092,PGC 044828,SDSS J130051.54+280234.3,SDSS J130051.55+280234.4;;The identifications of IC 4051 and NGC 4908 are often confused.; +IC4052;**;13:00:41.92;+39:40:03.5;CVn;;;;;;;;;;;;;;;;;;SDSS J130041.91+394003.4;;; +IC4053;*;13:01:01.31;+22:55:29.0;Com;;;;;;;;;;;;;;;;;;SDSS J130101.30+225528.9;;; +IC4054;*;13:01:01.36;+22:54:18.1;Com;;;;;;;;;;;;;;;;;;SDSS J130101.36+225418.0;;; +IC4055;Other;13:01:02.63;+22:54:30.8;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4056;G;13:00:44.29;+39:45:14.9;CVn;0.68;0.37;96;16.00;;13.61;12.95;12.60;23.46;SBbc;;;;;;;;2MASX J13004431+3945141,MCG +07-27-012,PGC 044810,SDSS J130044.28+394514.8,SDSS J130044.29+394514.9,UGC 08126;;The position in 2002PNAOJ...6..107M refers to a superposed star.; +IC4057;GGroup;13:01:05.23;+23:09:44.9;Com;0.70;;;;;;;;;;;;;;;;;;;The IC number includes a neighboring star.;Diameter of the group inferred by the author. +IC4057 NED01;G;13:01:04.92;+23:09:44.7;Com;;;;;;;;;;;;;;;;;;SDSS J130104.92+230944.6;;;No data available in LEDA +IC4057 NED02;G;13:01:05.29;+23:09:36.9;Com;0.35;0.13;82;19.01;;;;;25.42;;;;;;;;;2MASX J13010525+2309370,PGC 1682504,SDSS J130105.28+230936.8;;;B-Mag taken from LEDA. +IC4057 NED03;G;13:01:05.60;+23:09:49.4;Com;;;;;;;;;;;;;;;;;;SDSS J130105.59+230949.4;;;No data available in LEDA +IC4057 NED04;G;13:01:06.13;+23:09:53.8;Com;;;;;;;;;;;;;;;;;;SDSS J130106.13+230953.7;;;No data available in LEDA +IC4058;G;13:01:09.34;+19:29:39.0;Com;0.62;0.34;116;16.35;;13.27;12.46;12.04;23.59;SBbc;;;;;;;;2MASX J13010937+1929390,SDSS J130109.33+192938.9,SDSS J130109.33+192939.0;;;B-Mag taken from LEDA. +IC4059;G;13:01:15.47;+19:16:24.8;Com;0.41;0.33;58;17.00;;;;;23.91;E;;;;;;;;2MASX J13011549+1916249,SDSS J130115.46+191624.7;;;B-Mag taken from LEDA. +IC4060;G;13:00:52.56;+40:35:04.4;CVn;0.79;0.59;147;15.11;;12.34;11.46;11.42;23.12;Sb;;;;;;;;2MASX J13005254+4035048,MCG +07-27-013,PGC 044823,SDSS J130052.55+403504.4,SDSS J130052.56+403504.4;;;B-Mag taken from LEDA. +IC4061;GPair;13:00:57.64;+39:34:57.9;CVn;0.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4061 NED01;G;13:00:57.39;+39:34:59.2;CVn;0.39;0.30;122;15.96;;;;;;E;;;;;;;;2MASX J13005735+3934589,SDSS J130057.39+393459.2;;;B-Mag taken from LEDA +IC4061 NED02;G;13:00:58.10;+39:35:02.2;CVn;0.48;0.37;123;17.01;;;;;24.25;E;;;;;;;;SDSS J130058.10+393502.1;;;B-Mag taken from LEDA +IC4062;G;13:00:58.64;+39:51:32.2;CVn;0.38;0.38;93;15.00;;;;;21.52;SABb;;;;;;;;MCG +07-27-014,PGC 044836,SDSS J130058.63+395132.1,SDSS J130058.64+395132.1,SDSS J130058.65+395132.2;;UGC says CGCG 1258.8+4007 is incorrectly identified as IC 4062.; +IC4063;G;13:01:06.65;+39:14:42.7;CVn;0.30;0.24;158;16.92;;;;;22.88;Sb;;;;;;;;2MASX J13010665+3914430,PGC 2146202,SDSS J130106.64+391442.6,SDSS J130106.65+391442.6,SDSS J130106.65+391442.7;;;B-Mag taken from LEDA. +IC4064;G;13:01:06.73;+39:50:29.3;CVn;1.40;1.08;35;15.00;;10.75;10.04;9.72;23.79;S0;;;;;;;;2MASX J13010676+3950290,MCG +07-27-015,PGC 044867,SDSS J130106.72+395029.3,SDSS J130106.73+395029.2,SDSS J130106.73+395029.3,SDSS J130106.74+395029.3,UGC 08131;;Often mistakenly called IC 4062.; +IC4065;G;13:01:10.99;+39:44:40.1;CVn;0.73;0.38;155;15.32;;12.30;11.63;11.20;23.04;SBb;;;;;;;;2MASX J13011101+3944400,MCG +07-27-016,PGC 044868,SDSS J130110.98+394440.0,SDSS J130110.99+394440.0,SDSS J130110.99+394440.1;;;B-Mag taken from LEDA. +IC4066;*;13:01:40.16;+19:16:21.4;Com;;;;;;;;;;;;;;;;;;SDSS J130140.15+191621.3;;; +IC4067;G;13:01:20.10;+39:56:25.3;CVn;0.38;0.25;12;16.30;;;;;23.16;E;;;;;;;;2MASX J13012005+3956250,LEDA 2158105,SDSS J130120.09+395625.2,SDSS J130120.10+395625.3;;;B-Mag taken from LEDA. +IC4068;G;13:01:20.18;+39:53:56.6;CVn;0.57;0.35;70;15.87;;13.04;12.36;12.04;23.37;E?;;;;;;;;2MASX J13012013+3953570,MCG +07-27-017,PGC 044889,SDSS J130120.17+395356.6,SDSS J130120.18+395356.6;;Often mistakenly called IC 4067.;B-Mag taken from LEDA. +IC4069;G;13:01:24.78;+36:06:45.8;CVn;0.41;0.23;13;16.85;;14.92;14.09;13.91;23.32;Scd;;;;;;;;2MASX J13012480+3606460,LEDA 2075162,SDSS J130124.77+360645.7,SDSS J130124.78+360645.8;;;B-Mag taken from LEDA. +IC4070;G;13:01:43.29;+19:18:07.0;Com;0.58;0.39;44;16.21;;;;;23.47;SBb;;;;;;;;2MASX J13014326+1918070,SDSS J130143.28+191806.9,SDSS J130143.28+191807.0;;;B-Mag taken from LEDA. +IC4071;G;13:02:04.09;-07:36:11.5;Vir;0.97;0.55;8;14.70;;11.99;11.36;11.42;23.38;S0;;;;;;;;2MASX J13020410-0736118,IRAS 12594-0720,MCG -01-33-073,PGC 044956;;;B-Mag taken from LEDA. +IC4072;*;13:01:25.84;+37:21:13.4;CVn;;;;;;;;;;;;;;;;;;;;; +IC4073;G;13:01:25.71;+39:54:51.4;CVn;0.81;0.27;143;15.45;;12.17;11.42;11.10;23.20;Sab;;;;;;;;2MASX J13012570+3954509,MCG +07-27-018,PGC 044888,SDSS J130125.71+395451.4;;;B-Mag taken from LEDA. +IC4074;G;13:01:48.98;+19:00:31.9;Com;0.59;0.38;43;16.90;;;;;24.15;Sbc;;;;;;;;2MASX J13014900+1900315,SDSS J130148.98+190031.8;;;B-Mag taken from LEDA. +IC4075;G;13:01:48.56;+19:57:54.0;Com;0.44;0.31;104;16.80;;;;;23.87;E;;;;;;;;2MASX J13014853+1957535,SDSS J130148.55+195753.9;;;B-Mag taken from LEDA. +IC4076;G;13:01:48.59;+23:23:20.8;Com;0.41;0.37;143;16.75;;13.78;13.28;12.79;23.53;Sb;;;;;;;;2MASX J13014858+2323205,LEDA 1686546,SDSS J130148.58+232320.7,SDSS J130148.59+232320.7;;;B-Mag taken from LEDA. +IC4077;G;13:01:34.05;+37:23:10.4;CVn;0.42;0.28;61;16.22;;13.31;12.63;12.20;22.81;SBbc;;;;;;;;2MASX J13013405+3723097,PGC 044907,SDSS J130134.05+372310.3,SDSS J130134.05+372310.4;;;B-Mag taken from LEDA. +IC4078;**;13:01:35.66;+36:35:35.6;CVn;;;;;;;;;;;;;;;;;;;;; +IC4079;G;13:01:56.79;+19:14:55.7;Com;0.42;0.37;10;17.41;;14.94;14.12;13.85;24.39;Sab;;;;;;;;2MASX J13015679+1914556,PGC 1585609,SDSS J130156.78+191455.6;;May contribute to the IR flux of IRAS 12594+1931.;B-Mag taken from LEDA. +IC4080;GPair;13:01:57.80;+19:15:16.9;Com;0.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4080 NED01;G;13:01:57.71;+19:15:11.7;Com;0.79;0.16;38;17.28;;15.13;14.85;14.16;24.27;Sc;;;;;;;;2MASX J13015771+1915116,SDSS J130157.70+191511.6;;May contribute to the IR flux of IRAS 12594+1931.;B-Mag taken from LEDA +IC4080 NED02;G;13:01:58.25;+19:15:21.3;Com;0.23;0.12;64;18.66;;;;;24.19;;;;;;;;;2MASS J13015825+1915210,SDSS J130158.24+191521.2;;May contribute to the IR flux of IRAS 12594+1931.;B-Mag taken from LEDA +IC4081;G;13:01:55.30;+22:46:15.7;Com;0.42;0.28;157;16.59;;14.02;13.43;13.08;23.64;E;;;;;;;;2MASX J13015529+2246156,LEDA 1675832,SDSS J130155.30+224616.2;;;B-Mag taken from LEDA. +IC4082;G;13:01:39.09;+37:20:29.9;CVn;0.44;0.27;92;16.57;;14.77;14.02;13.70;23.16;Sc;;;;;;;;2MASX J13013908+3720297,PGC 2098435;;;B-Mag taken from LEDA. +IC4083;G;13:01:38.91;+38:08:32.5;CVn;0.41;0.26;20;16.29;;;;;22.86;SBbc;;;;;;;;2MASX J13013894+3808328,LEDA 2118953,SDSS J130138.90+380832.5,SDSS J130138.91+380832.5;;;B-Mag taken from LEDA. +IC4084;**;13:01:41.03;+36:57:56.4;CVn;;;;;;;;;;;;;;;;;;;;; +IC4085;G;13:01:38.19;+39:42:09.7;CVn;0.30;0.25;132;16.01;;12.98;12.28;11.99;;E;;;;;;;;2MASX J13013821+3942097,PGC 3088120,SDSS J130138.19+394209.7,SDSS J130138.20+394209.7;;;B-Mag taken from LEDA. +IC4086;G;13:01:42.84;+36:38:54.3;CVn;0.82;0.66;178;15.70;;12.91;11.98;11.84;23.70;SABc;;;;;;;;2MASX J13014278+3638538,MCG +06-29-017,PGC 044920,SDSS J130142.83+363854.3,UGC 08141;;; +IC4087;G;13:02:00.41;+19:59:42.7;Com;0.23;0.13;9;17.04;;;;;;SBb;;;;;;;;2MASX J13020037+1959426,SDSS J130200.40+195942.6,SDSS J130200.40+195942.7;;;B-Mag taken from LEDA. +IC4088;G;13:01:43.37;+29:02:40.8;Com;1.45;0.40;88;14.70;13.82;11.70;10.99;10.72;23.53;SABa;;;;;;;;2MASX J13014338+2902407,MCG +05-31-102,PGC 044921,SDSS J130143.36+290240.9,SDSS J130143.37+290240.7,SDSS J130143.37+290240.8,UGC 08140;;; +IC4089;G;13:02:01.85;+19:30:10.4;Com;0.36;0.32;149;17.44;;;;;23.88;SBb;;;;;;;;2MASX J13020185+1930106,SDSS J130201.84+193010.3;;;B-Mag taken from LEDA. +IC4090;*;13:01:46.30;+36:50:16.6;CVn;;;;;;;;;;;;;;;;;;SDSS J130146.29+365016.5;;The IC number also includes a defect on the original Heidelberg plate.; +IC4091;G;13:02:12.96;+19:53:34.8;Com;0.52;0.26;131;16.85;;;;;23.65;Sbc;;;;;;;;2MASX J13021293+1953347,SDSS J130212.95+195334.7,SDSS J130212.95+195334.8;;;B-Mag taken from LEDA. +IC4092;*;13:02:13.63;+19:11:03.0;Com;;;;;;;;;;;;;;;;;;;;; +IC4093;Other;13:02:03.99;+28:59:41.1;Com;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4094;G;13:01:58.59;+37:47:42.1;CVn;0.44;0.30;132;16.30;;14.42;13.68;13.58;23.06;Sc;;;;;;;;2MASX J13015857+3747418,LEDA 2109709,SDSS J130158.59+374742.1;;;B-Mag taken from LEDA. +IC4095;G;13:02:20.38;+19:05:58.9;Com;0.77;0.33;27;16.25;;12.92;12.20;11.95;23.83;SBb;;;;;;;;2MASX J13022035+1905592,LEDA 3090106,SDSS J130220.36+190558.9,SDSS J130220.37+190558.9;;;B-Mag taken from LEDA. +IC4096;G;13:02:16.96;+24:00:39.0;Com;0.67;0.52;132;16.70;;13.13;12.72;12.25;24.69;E;;;;;;;;2MASX J13021696+2400389,LEDA 140053,SDSS J130216.95+240039.0;;;B-Mag taken from LEDA. +IC4097;*;13:02:04.94;+36:36:19.6;CVn;;;;;;;;;;;;;;;;;;SDSS J130204.94+363619.5;;; +IC4098;G;13:02:03.84;+37:58:51.2;CVn;0.51;0.28;112;16.33;;;;;23.20;SBbc;;;;;;;;2MASX J13020388+3758511,LEDA 2114739,SDSS J130203.83+375851.2;;;B-Mag taken from LEDA. +IC4099;G;13:02:23.23;+24:01:45.0;Com;0.65;0.49;104;16.38;;12.81;12.21;11.98;24.23;E;;;;;;;;2MASX J13022324+2401449,LEDA 1698322,SDSS J130223.22+240144.9;;;B-Mag taken from LEDA. +IC4100;G;13:02:04.91;+40:24:30.1;CVn;1.16;0.75;104;15.10;;11.68;11.07;10.84;23.41;Sc;;;;;;;;2MASX J13020491+4024301,MCG +07-27-019,PGC 044963,SDSS J130204.91+402430.0,SDSS J130204.91+402430.1,UGC 08144;;; +IC4101;*;13:02:13.75;+39:56:25.3;CVn;;;;;;;;;;;;;;;;;;SDSS J130213.74+395625.2;;; +IC4102;G;13:02:17.99;+36:09:08.8;CVn;0.34;0.22;78;16.97;;;;;23.16;Sc;;;;;;;;2MASX J13021788+3609083,LEDA 2075831,SDSS J130217.99+360908.7,SDSS J130217.99+360908.8,SDSS J130218.00+360908.8;;The IC number includes a neighboring star.;B-Mag taken from LEDA. +IC4103;G;13:02:19.05;+38:01:03.0;CVn;0.76;0.52;64;15.88;;13.35;12.28;12.40;23.70;Sbc;;;;;;;;2MASX J13021910+3801032,MCG +06-29-019,PGC 044989,SDSS J130219.05+380102.9,SDSS J130219.05+380103.0;;;B-Mag taken from LEDA. +IC4104;G;13:02:18.12;+38:35:32.7;CVn;0.51;0.37;167;15.95;;;;;23.42;E;;;;;;;;2MASX J13021808+3835322,LEDA 2131244,SDSS J130218.11+383532.6,SDSS J130218.12+383532.7;;;B-Mag taken from LEDA. +IC4105;G;13:02:19.00;+38:16:16.6;CVn;0.48;0.39;89;16.47;;;;;23.73;E;;;;;;;;2MASX J13021898+3816162,SDSS J130218.99+381616.6,SDSS J130219.00+381616.6;;;B-Mag taken from LEDA. +IC4106;G;13:02:38.44;+28:06:52.5;Com;0.74;0.55;135;15.50;;12.50;11.83;12.03;23.49;S0-a;;;;;;;;2MASX J13023845+2806523,MCG +05-31-109,PGC 045025,SDSS J130238.44+280652.4,SDSS J130238.44+280652.5;;; +IC4107;G;13:02:41.87;+21:59:50.6;Com;0.89;0.81;0;16.62;;;;;25.24;E;;;;;;;;PGC 087149,SDSS J130241.87+215950.6;;Multiple SDSS entries describe this source.;B-Mag taken from LEDA. +IC4108;G;13:02:31.53;+38:28:42.6;CVn;0.71;0.37;132;15.40;;12.38;11.69;11.47;23.55;E;;;;;;;;2MASX J13023155+3828423,MCG +07-27-020,PGC 045005,SDSS J130231.53+382842.5,SDSS J130231.53+382842.6;;;B-Mag taken from LEDA. +IC4109;*;13:02:57.97;+19:00:13.3;Com;;;;;;;;;;;;;;;;;;SDSS J130257.97+190013.3;;; +IC4110;G;13:02:58.29;+19:13:37.1;Com;0.20;0.14;151;17.71;;;;;;Sab;;;;;;;;2MASX J13025826+1913368,SDSS J130258.28+191337.0;;;B-Mag taken from LEDA. +IC4111;G;13:02:56.57;+28:04:13.5;Com;0.73;0.34;133;15.70;;12.91;12.24;12.13;23.72;S0;;;;;;;;2MASX J13025659+2804133,MCG +05-31-113,PGC 045051,SDSS J130256.56+280413.4,SDSS J130256.57+280413.4;;; +IC4112;*;13:02:45.16;+37:12:43.8;CVn;;;;;;;;;;;;;;;;;;SDSS J130245.15+371243.8;;; +IC4113;GPair;13:03:03.37;+20:28:20.1;Com;0.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4113 NED01;G;13:03:03.31;+20:28:24.2;Com;0.37;0.23;111;16.69;;14.01;13.38;13.16;23.20;Sb;;;;;;;;2MASX J13030331+2028239,PGC 1628367;;;B-Mag taken from LEDA. +IC4113 NED02;G;13:03:03.52;+20:28:15.4;Com;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC4114;G;13:02:41.83;+40:06:16.3;CVn;0.46;0.21;41;16.56;;;;;23.78;E;;;;;;;;2MASX J13024184+4006160,PGC 2160643,SDSS J130241.82+400616.3,SDSS J130241.83+400616.3;;;B-Mag taken from LEDA. +IC4115;G;13:02:48.73;+37:13:23.6;CVn;0.56;0.44;15;15.87;;13.33;12.79;12.26;23.15;Sbc;;;;;;;;2MASX J13024873+3713231,MCG +06-29-020,PGC 045036,PGC 045041,SDSS J130248.72+371323.5,SDSS J130248.73+371323.6;;"Often incorrectly called IC 4112; that is a star.";B-Mag taken from LEDA. +IC4116;*;13:03:10.12;+19:05:00.1;Com;;;;;;;;;;;;;;;;;;;;; +IC4117;*;13:02:48.60;+40:31:29.6;CVn;;;;;;;;;;;;;;;;;;SDSS J130248.59+403129.6;;; +IC4118;G;13:02:51.70;+38:17:34.6;CVn;0.63;0.39;102;15.38;;12.20;11.73;11.22;22.86;SBb;;;;;;;;2MASX J13025168+3817341,MCG +07-27-021,PGC 045040,SDSS J130251.69+381734.5,SDSS J130251.70+381734.6;;;B-Mag taken from LEDA. +IC4119;G;13:03:15.17;+19:13:58.0;Com;0.43;0.15;24;18.18;;;;;25.11;;;;;;;;;2MASX J13031513+1913578,SDSS J130315.16+191357.9,SDSS J130315.17+191357.9;;"Star 17"" north.";B-Mag taken from LEDA. +IC4120;*;13:03:01.55;+37:04:54.0;CVn;;;;;;;;;;;;;;;;;;SDSS J130301.54+370454.0;;; +IC4121;*;13:03:21.52;+19:16:56.3;Com;;;;;;;;;;;;;;;;;;SDSS J130321.52+191656.2;;; +IC4122;G;13:03:24.43;+20:11:48.9;Com;0.84;0.69;26;15.50;;12.18;11.70;11.08;23.66;S0-a;;;;;;;;2MASX J13032442+2011490,PGC 045092,SDSS J130324.43+201148.8;;; +IC4123;G;13:03:05.82;+38:18:52.1;CVn;0.55;0.47;138;15.60;;13.05;12.71;11.94;22.99;SBb;;;;;;;;2MASX J13030578+3818521,MCG +07-27-023,PGC 045059,SDSS J130305.82+381852.0,SDSS J130305.82+381852.1;;;B-Mag taken from LEDA. +IC4124;G;13:03:31.57;+22:50:48.5;Com;0.38;0.26;37;16.82;;13.64;13.10;12.69;23.72;E;;;;;;;;2MASX J13033154+2250480,PGC 1677120,SDSS J130331.56+225048.5,SDSS J130331.57+225048.4;;The IC number includes a neighboring star.;B-Mag taken from LEDA. +IC4125;G;13:03:34.97;+18:48:12.2;Com;1.01;0.65;74;15.75;;12.05;11.47;11.02;24.62;E;;;;;;;;2MASX J13033493+1848120,LEDA 3090108,SDSS J130334.96+184812.2;;;B-Mag taken from LEDA. +IC4126;*;13:03:36.45;+19:19:24.4;Com;;;;;;;;;;;;;;;;;;SDSS J130336.45+191924.3;;; +IC4127;G;13:03:17.40;+38:02:48.9;CVn;0.58;0.37;40;15.93;;13.05;12.10;11.79;23.28;Sab;;;;;;;;2MASX J13031742+3802486,MCG +06-29-022,PGC 045089,SDSS J130317.39+380248.8,SDSS J130317.40+380248.9;;;B-Mag taken from LEDA. +IC4128;G;13:03:41.24;+20:12:59.9;Com;0.40;0.28;65;16.40;;13.63;12.75;12.41;23.01;Sb;;;;;;;;2MASX J13034126+2013000,LEDA 1620290,SDSS J130341.24+201259.8;;;B-Mag taken from LEDA. +IC4129;G;13:03:43.97;+18:52:37.7;Com;0.47;0.29;28;17.04;;;;;23.75;Sbc;;;;;;;;2MASX J13034395+1852380,SDSS J130343.95+185237.7,SDSS J130343.96+185237.7;;"Star 17"" east.";B-Mag taken from LEDA. +IC4130;G;13:03:46.59;+19:16:17.5;Com;1.20;1.05;70;15.42;14.30;12.03;11.32;11.11;24.67;E;;;;;;;;2MASX J13034658+1916170,MCG +03-33-024,PGC 045103,SDSS J130346.59+191617.4,SDSS J130346.59+191617.5;;; +IC4131;G;13:03:25.58;+38:57:04.6;CVn;0.38;0.28;158;16.39;;;;;23.00;Sc;;;;;;;;2MASX J13032556+3857037,PGC 2140322,SDSS J130325.57+385704.5,SDSS J130325.58+385704.5,SDSS J130325.59+385704.6;;;B-Mag taken from LEDA. +IC4132;*;13:03:33.84;+38:22:39.3;CVn;;;;;;;;;;;;;;;;;;SDSS J130333.84+382239.2;;; +IC4133;G;13:03:50.80;+27:59:18.2;Com;0.57;0.52;66;15.40;;12.24;11.58;11.38;23.06;E;;;;;;;;2MASX J13035077+2759179,MCG +05-31-117,PGC 045140,SDSS J130350.79+275918.1,SDSS J130350.80+275918.2;;; +IC4134;Dup;13:02:04.15;-11:22:42.3;Vir;;;;;;;;;;;;;;;4920;;;;;; +IC4135;G;13:03:37.39;+40:14:56.3;CVn;0.67;0.38;36;16.50;;12.83;12.18;11.78;23.38;Sb;;;;;;;;2MASX J13033738+4014567,PGC 045108,SDSS J130337.38+401456.3,SDSS J130337.39+401456.3,UGC 08163;;; +IC4136;Dup;13:04:19.11;-07:38:58.0;Vir;;;;;;;;;;;;;;;4942;;;;;; +IC4137;G;13:03:59.30;+22:44:23.9;Com;0.39;0.31;166;16.52;;13.97;13.63;12.92;23.21;Sab;;;;;;;;2MASX J13035927+2244233,LEDA 1675316,SDSS J130359.29+224423.9,SDSS J130359.30+224423.9;;;B-Mag taken from LEDA. +IC4138;G;13:04:02.11;+20:39:55.8;Com;0.38;0.24;162;16.61;;13.54;12.92;12.69;23.15;SBab;;;;;;;;2MASX J13040208+2039554,PGC 1633151,SDSS J130402.10+203955.7;;;B-Mag taken from LEDA. +IC4139;G;13:04:04.15;+19:17:41.9;Com;0.64;0.52;60;16.54;;13.20;12.24;11.94;24.43;E;;;;;;;;2MASX J13040416+1917414,LEDA 3090109,SDSS J130404.14+191741.8,SDSS J130404.14+191741.9;;;B-Mag taken from LEDA. +IC4140;G;13:04:06.04;+20:05:46.9;Com;0.32;0.26;71;17.54;;;;;23.94;E;;;;;;;;2MASX J13040600+2005464,SDSS J130406.04+200546.8,SDSS J130406.04+200546.9;;;B-Mag taken from LEDA. +IC4141;G;13:04:07.73;+19:12:38.3;Com;0.66;0.55;108;16.26;;13.25;12.19;12.07;23.97;Sb;;;;;;;;2MASX J13040769+1912384,MCG +03-33-027,PGC 045147,SDSS J130407.72+191238.3,SDSS J130407.73+191238.3;;;B-Mag taken from LEDA. +IC4142;*;13:03:47.19;+38:11:42.3;CVn;;;;;;;;;;;;;;;;;;;;; +IC4143;*;13:03:45.50;+40:12:25.5;CVn;;;;;;;;;;;;;;;;;;;;The IC number also includes a defect on the original Heidelberg plate.; +IC4144;G;13:03:50.07;+36:56:36.2;CVn;0.96;0.18;6;16.00;;;;;23.44;Sb;;;;;;;;MCG +06-29-023,PGC 045145,SDSS J130350.06+365636.2,SDSS J130350.07+365636.2,UGC 08169;;; +IC4145;G;13:03:49.77;+38:17:11.7;CVn;0.71;0.17;135;16.75;;13.37;12.67;12.33;23.57;Sc;;;;;;;;2MASX J13034979+3817107,LEDA 2122937,SDSS J130349.76+381711.6,SDSS J130349.77+381711.7;;;B-Mag taken from LEDA. +IC4146;G;13:04:10.38;+19:16:41.7;Com;0.52;0.38;9;16.94;;13.57;12.85;12.65;24.06;SBab;;;;;;;;2MASX J13041038+1916423,SDSS J130410.37+191641.6,SDSS J130410.37+191641.7;;;B-Mag taken from LEDA. +IC4147;G;13:04:09.43;+20:15:03.2;Com;0.32;0.17;156;17.35;;;;;;;;;;;;;;SDSS J130409.43+201503.1,SDSS J130409.42+201503.0;;;B-Mag taken from LEDA +IC4148;G;13:04:10.69;+19:15:33.0;Com;0.41;0.21;68;17.85;;14.37;13.71;13.21;24.16;Sbc;;;;;;;;2MASX J13041066+1915323,SDSS J130410.68+191532.8,SDSS J130410.68+191532.9;;;B-Mag taken from LEDA. +IC4149;G;13:04:10.82;+22:17:22.8;Com;0.65;0.39;82;15.50;;;;;23.09;Sb;;;;;;;;MCG +04-31-004,PGC 045159,SDSS J130410.82+221722.7,SDSS J130410.82+221722.8;;; +IC4150;*;13:04:13.04;+21:59:12.2;Com;;;;;;;;;;;;;;;;;;SDSS J130413.04+215912.2;;; +IC4151;GPair;13:03:58.94;+36:51:28.4;CVn;0.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4151 NED01;G;13:03:58.82;+36:51:25.4;CVn;0.25;0.18;65;17.76;;14.33;13.77;13.28;23.45;;;;;;;;;2MASX J13035913+3651297,PGC 2088237;;;B-Mag taken from LEDA. +IC4151 NED02;G;13:03:59.34;+36:51:30.4;CVn;0.47;0.23;8;17.58;;;;;24.12;Sbc;;;;;;;;SDSS J130359.07+365128.8,SDSS J130359.07+365128.7;;;B-Mag taken from LEDA +IC4152;G;13:03:58.46;+38:11:55.0;CVn;0.75;0.63;11;15.92;;12.76;11.92;11.75;24.16;E;;;;;;;;2MASX J13035841+3811547,LEDA 3088215,SDSS J130358.45+381154.9,SDSS J130358.46+381155.0;;;B-Mag taken from LEDA. +IC4153;*;13:04:26.57;+19:02:41.9;Com;;;;;;;;;;;;;;;;;;SDSS J130426.56+190241.9;;; +IC4154;G;13:04:28.27;+23:34:30.1;Com;0.62;0.53;111;15.50;;13.12;12.69;12.14;23.34;Sbc;;;;;;;;2MASX J13042827+2334306,PGC 1689776,SDSS J130428.26+233430.1;;;B-Mag taken from LEDA. +IC4155;*;13:04:08.90;+40:00:55.6;CVn;;;;;;;;;;;;;;;;;;SDSS J130408.89+400055.5;;; +IC4156;Dup;13:04:55.96;-07:56:51.7;Vir;;;;;;;;;;;;;;;4948;;;;;; +IC4157;*;13:04:18.58;+38:39:48.9;CVn;;;;;;;;;;;;;;;;;;SDSS J130418.57+383948.9;;The IC number also includes a defect on the original Heidelberg plate.; +IC4158;G;13:04:24.64;+36:28:47.6;CVn;0.76;0.25;125;15.74;;12.84;12.17;11.80;23.31;Sab;;;;;;;;2MASX J13042469+3628478,LEDA 2081347,SDSS J130424.64+362847.9,SDSS J130424.65+362847.9;;;B-Mag taken from LEDA. +IC4159;G;13:04:45.99;+22:14:31.7;Com;0.33;0.24;127;17.21;;14.73;14.07;13.39;23.52;Sbc;;;;;;;;2MASX J13044590+2214325,PGC 1666258,SDSS J130445.98+221431.6;;;B-Mag taken from LEDA. +IC4160;G;13:04:48.06;+22:53:32.9;Com;0.43;0.20;22;16.90;;13.53;12.78;12.43;23.38;SBb;;;;;;;;2MASX J13044806+2253325,IRAS 13023+2309,LEDA 1677859,SDSS J130448.05+225332.8,SDSS J130448.06+225332.8;;;B-Mag taken from LEDA. +IC4161;G;13:04:35.32;+39:58:38.9;CVn;0.71;0.18;107;16.04;;12.66;11.80;11.50;22.98;Sc;;;;;;;;2MASX J13043532+3958386,LEDA 2158676,SDSS J130435.31+395838.8,SDSS J130435.32+395838.9;;;B-Mag taken from LEDA. +IC4162;G;13:05:02.99;+20:33:17.3;Com;0.33;0.24;165;16.97;;14.06;13.69;13.27;23.27;Sb;;;;;;;;2MASX J13050299+2033176,PGC 1630533,SDSS J130502.98+203317.2,SDSS J130502.98+203317.3;;;B-Mag taken from LEDA. +IC4163;G;13:05:08.01;+20:46:14.6;Com;0.40;0.33;31;16.39;;13.52;12.82;12.52;23.10;Sbc;;;;;;;;2MASX J13050798+2046146,LEDA 1635544,SDSS J130508.00+204614.5,SDSS J130508.01+204614.5;;;B-Mag taken from LEDA. +IC4164;G;13:05:14.49;+20:32:49.6;Com;0.45;0.20;127;16.81;;13.88;13.31;13.06;23.42;Sb;;;;;;;;2MASX J13051445+2032496,PGC 1630316,SDSS J130514.48+203249.5,SDSS J130514.49+203249.5;;;B-Mag taken from LEDA. +IC4165;G;13:04:56.96;+39:55:29.7;CVn;0.64;0.60;16;19.02;17.95;14.98;14.30;13.96;23.06;Sc;;;;;;;;2MASX J13045697+3955296,MCG +07-27-025,PGC 045223,SDSS J130456.95+395529.7,SDSS J130456.96+395529.8;;; +IC4166;G;13:05:18.59;+31:26:32.3;CVn;1.01;0.49;177;15.20;;12.04;11.16;11.07;23.43;Sab;;;;;;;;2MASX J13051858+3126324,MCG +05-31-122,PGC 045264,SDSS J130518.30+312631.9,SDSS J130518.59+312632.3,UGC 08180;;Multiple SDSS entries describe this object.; +IC4167;G;13:05:30.75;+21:54:36.1;Com;0.40;0.25;160;16.83;;13.36;12.66;12.45;23.77;E;;;;;;;;2MASX J13053072+2154358,LEDA 1659732,SDSS J130530.75+215436.0,SDSS J130530.75+215436.1;;;B-Mag taken from LEDA. +IC4168;G;13:05:10.71;+40:02:58.9;CVn;0.65;0.50;74;15.36;;12.76;11.92;11.65;23.37;E;;;;;;;;2MASX J13051071+4002585,MCG +07-27-029,PGC 045244,SDSS J130510.70+400258.9,SDSS J130510.71+400258.8,SDSS J130510.71+400258.9;;;B-Mag taken from LEDA. +IC4169;GPair;13:05:12.09;+38:46:20.9;CVn;0.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4169 NED01;G;13:05:12.01;+38:46:14.5;CVn;0.15;0.12;120;19.09;;;;;23.73;;;;;;;;;2MASX J13051200+3846135,SDSS J130512.01+384614.4,SDSS J130512.01+384614.5;;;B-Mag taken from LEDA +IC4169 NED02;G;13:05:12.52;+38:46:24.8;CVn;0.51;0.47;130;16.41;;;;;23.81;E;;;;;;;;2MASX J13051251+3846245,SDSS J130512.51+384624.8,SDSS J130512.52+384624.8;;;B-Mag taken from LEDA +IC4170;GPair;13:05:34.85;+21:08:06.1;Com;0.80;;;;;;;;;;;;;;;;;;;; +IC4170 NED01;G;13:05:34.99;+21:08:05.8;Com;0.51;0.50;79;18.60;12.70;12.83;12.34;11.75;23.53;E;;;;;;;;2MASX J13053500+2108028,PGC 045290;;; +IC4170 NED02;G;13:05:35.27;+21:07:46.9;Com;0.26;0.17;95;18.93;;;;;24.78;;;;;;;;;SDSS J130535.26+210746.9;;;B-Mag taken from LEDA +IC4171;G;13:05:18.81;+36:06:10.4;CVn;0.71;0.39;82;16.00;;;;;23.50;Scd;;;;;;;;MCG +06-29-026,PGC 045265,SDSS J130518.80+360610.3,SDSS J130518.81+360610.4,UGC 08182;;; +IC4172;G;13:06:33.36;+22:51:01.4;Com;0.49;0.39;85;16.50;;13.91;13.06;12.88;23.41;Sb;;;;;;;;2MASX J13063328+2251010,PGC 045379,SDSS J130633.35+225101.3,SDSS J130633.35+225101.4;;; +IC4173;Dup;13:03:54.73;-11:30:18.2;Vir;;;;;;;;;;;;;;;4933A;;;;;; +IC4174;*;13:05:28.56;+36:23:47.1;CVn;;;;;;;;;;;;;;;;;;SDSS J130528.56+362347.0;;The IC number also includes a defect on the original Heidelberg plate.; +IC4175;G;13:05:47.47;+20:22:28.9;Com;0.40;0.27;138;16.84;;15.03;14.29;14.29;23.84;SBbc;;;;;;;;2MASX J13054747+2022288,PGC 1625424,SDSS J130547.47+202228.9;;;B-Mag taken from LEDA. +IC4176;Dup;13:03:56.74;-11:29:53.0;Vir;;;;;;;;;;;;;;;4933B;;;;;; +IC4177;G;13:06:28.95;-13:34:17.9;Vir;0.87;0.45;90;14.96;;12.88;12.25;12.13;23.09;Sa;;;;;;;;2MASX J13062894-1334180,MCG -02-33-107,PGC 045365;;;B-Mag taken from LEDA. +IC4178;G;13:05:41.50;+36:01:02.9;CVn;0.63;0.24;120;16.00;;;;;23.26;I;;;;;;;;MCG +06-29-030,PGC 045306,SDSS J130541.49+360102.8,SDSS J130541.50+360102.9,UGC 08187;;; +IC4179;*;13:05:45.90;+37:11:52.1;CVn;;;;;;;;;;;;;;;;;;SDSS J130545.89+371152.1;;; +IC4180;G;13:06:56.49;-23:55:01.6;Hya;1.38;1.02;163;13.60;;10.57;9.87;9.60;23.14;S0-a;;;;;;;;2MASX J13065651-2355014,ESO 508-005,ESO-LV 508-0050,IRAS 13042-2338,MCG -04-31-029,PGC 045408;;"Joguet et al. (2001A&A...380...19J) claim ""No activity""."; +IC4181;G;13:06:06.42;+21:29:38.0;Com;0.53;0.47;125;16.15;;13.46;12.91;12.53;23.43;SBb;;;;;;;;2MASX J13060644+2129375,LEDA 140073,SDSS J130606.41+212937.9,SDSS J130606.41+212938.0;;;B-Mag taken from LEDA. +IC4182;G;13:05:49.54;+37:36:17.6;CVn;6.01;5.52;0;11.86;;;;;25.09;Sm;;;;;;;;MCG +06-29-031,PGC 045314,SDSS J130548.70+373613.0,UGC 08188;;; +IC4183;G;13:06:11.56;+21:30:15.7;Com;0.46;0.40;113;16.72;;13.20;12.63;12.22;23.91;E;;;;;;;;2MASX J13061153+2130155,LEDA 3089889,SDSS J130611.55+213015.6,SDSS J130611.55+213015.7;;;B-Mag taken from LEDA. +IC4184;G;13:05:51.77;+38:50:14.6;CVn;0.33;0.22;111;15.54;;12.80;12.24;11.72;;E;;;;;;;;2MASX J13055179+3850141,LEDA 3088122,SDSS J130551.76+385014.5,SDSS J130551.77+385014.5,SDSS J130551.77+385014.6;;;B-Mag taken from LEDA. +IC4185;GPair;13:06:12.64;+21:46:22.9;Com;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4185 NED01;G;13:06:12.57;+21:46:09.3;Com;0.55;0.23;147;16.59;;13.36;12.51;12.27;24.18;E;;;;;;;;2MASX J13061255+2146095,PGC 1656882,SDSS J130612.57+214609.2;;;B-Mag taken from LEDA. +IC4185 NED02;G;13:06:12.77;+21:46:33.1;Com;0.32;0.19;21;18.03;;;;;23.80;Sm;;;;;;;;SDSS J130612.76+214633.1;;;B-Mag taken from LEDA +IC4186;**;13:05:57.36;+36:59:09.8;CVn;;;;;;;;;;;;;;;;;;;;; +IC4187;G;13:05:59.62;+36:17:54.5;CVn;0.55;0.43;157;15.53;;12.73;12.12;11.73;23.12;E-S0;;;;;;;;2MASX J13055960+3617551,MCG +06-29-032,PGC 045333,SDSS J130559.61+361754.4,SDSS J130559.62+361754.5;;;B-Mag taken from LEDA. +IC4188;G;13:06:02.33;+36:19:41.6;CVn;0.46;0.37;53;16.36;;14.61;14.33;13.64;23.42;Sbc;;;;;;;;2MASX J13060233+3619411,MCG +06-29-033,PGC 045332,SDSS J130602.32+361941.5,SDSS J130602.33+361941.6;;;B-Mag taken from LEDA. +IC4189;G;13:06:03.55;+35:58:49.2;CVn;1.25;0.84;180;14.50;;11.88;10.89;11.00;23.32;Sc;;;;;;;;2MASX J13060351+3558491,MCG +06-29-034,PGC 045336,SDSS J130603.54+355849.1,SDSS J130603.54+355849.2,UGC 08191;;; +IC4190;*;13:06:06.38;+37:36:36.1;CVn;;;;;;;;;;;;;;;;;;SDSS J130606.38+373636.0;;; +IC4191;PN;13:08:47.23;-67:38:37.5;Mus;0.08;;;12.00;10.60;11.63;11.73;10.75;;;;16.80;16.40;;;;HD 113981;ESO 096-002,IRAS 13054-6722,PK 304-04 1,PN G304.5-04.8;;Within 10 degrees of the galactic plane.; +IC4192;Other;13:06:08.60;+37:36:20.0;CVn;;;;;;;;;;;;;;;;;;;;This is a defect on the original Heidelberg plate.; +IC4193;G;13:06:06.33;+39:25:25.0;CVn;0.49;0.32;61;15.60;;12.88;12.07;11.82;22.40;Sbc;;;;;;;;2MASX J13060630+3925251,PGC 045342,SDSS J130606.32+392524.9,SDSS J130606.33+392525.0;;; +IC4194;*;13:06:07.79;+38:52:24.9;CVn;;;;;;;;;;;;;;;;;;SDSS J130607.79+385224.8;;; +IC4195;*;13:06:15.43;+37:02:23.2;CVn;;;;;;;;;;;;;;;;;;SDSS J130615.42+370223.2;;; +IC4196;Dup;13:07:33.74;-24:00:30.8;Hya;;;;;;;;;;;;;;;4970;;;;;; +IC4197;G;13:08:04.33;-23:47:48.7;Hya;1.84;1.12;162;13.50;;10.24;9.55;9.28;23.59;E-S0;;;;;;;;2MASX J13080432-2347486,ESO 508-013,ESO-LV 508-0130,MCG -04-31-036,PGC 045514;;; +IC4198;Dup;13:07:42.82;+24:48:38.1;Com;;;;;;;;;;;;;;;4979;;;;;; +IC4199;*;13:07:32.67;+35:51:35.4;CVn;;;;;;;;;;;;;;;;;;SDSS J130732.67+355135.4;;; +IC4200;G;13:09:34.76;-51:58:06.9;Cen;1.69;1.06;154;13.89;13.82;9.85;9.09;8.78;23.73;S0;;;;;;;;2MASX J13093473-5158066,ESO 219-033,ESO-LV 219-0330,PGC 045634;;; +IC4201;G;13:07:51.22;+35:50:05.5;CVn;0.66;0.63;85;15.50;;12.11;11.46;11.16;23.47;E;;;;;;;;2MASX J13075120+3550050,MCG +06-29-042,PGC 045490,SDSS J130751.21+355005.5;;;B-Mag taken from LEDA. +IC4202;G;13:08:31.58;+24:42:02.8;Com;1.74;0.36;142;15.20;;11.50;10.71;10.41;23.77;Sbc;;;;;;;;2MASX J13083158+2442030,IRAS 13060+2458,MCG +04-31-008,PGC 045549,SDSS J130831.57+244202.7,UGC 08220;;; +IC4203;*;13:08:19.07;+40:25:40.4;CVn;;;;;;;;;;;;;;;;;;SDSS J130819.06+402540.4;;; +IC4204;G;13:08:21.58;+39:27:40.2;CVn;0.95;0.21;42;16.00;;13.31;12.80;12.69;23.25;Sc;;;;;;;;2MASX J13082162+3927399,PGC 045534,SDSS J130821.57+392740.2,SDSS J130821.58+392740.2,UGC 08224;;; +IC4205;Dup;13:08:41.73;+52:46:27.4;UMa;;;;;;;;;;;;;;;;0853;;;;; +IC4206;*;13:09:21.94;+39:01:20.1;CVn;;;;;;;;;;;;;;;;;;SDSS J130921.94+390120.0;;; +IC4207;G;13:09:26.73;+37:49:22.6;CVn;0.49;0.30;2;16.61;;14.10;13.36;13.00;23.46;SBb;;;;;;;;2MASX J13092668+3749224,PGC 2110457,SDSS J130926.73+374922.5,SDSS J130926.73+374922.6;;;B-Mag taken from LEDA. +IC4208;*;13:09:37.99;+37:15:20.1;CVn;;;;;;;;;;;;;;;;;;SDSS J130937.99+371520.0;;; +IC4209;G;13:10:22.49;-07:10:14.5;Vir;1.28;0.53;99;14.50;;11.67;10.78;10.71;23.03;SBbc;;;;;;;;2MASX J13102248-0710144,IRAS 13077-0654,MCG -01-34-009,PGC 045702;;; +IC4210;Dup;13:10:47.65;+29:42:35.6;Com;;;;;;;;;;;;;;;5004B;;;;;; +IC4211;*;13:10:56.48;+37:10:34.5;CVn;;;;;;;;;;;;;;;;;;SDSS J131056.48+371034.4;;; +IC4212;G;13:12:02.99;-06:58:33.0;Vir;0.33;0.21;140;14.16;;;;;20.51;SBc;;;;;;;;MCG -01-34-011,PGC 045845,UGCA 333;;The IC identification is not certain.; +IC4213;G;13:12:11.22;+35:40:10.9;CVn;2.48;0.48;176;14.10;;12.41;11.62;11.44;23.33;Sc;;;;;;;;2MASX J13121121+3540107,MCG +06-29-057,PGC 045848,UGC 08280;;; +IC4214;G;13:17:42.69;-32:06:06.1;Cen;2.96;1.84;165;12.15;11.65;9.19;8.48;8.21;23.11;SBa;;;;;;;;2MASX J13174267-3206061,ESO 444-005,ESO-LV 444-0050,IRAS 13149-3150,MCG -05-31-043,PGC 046304;;; +IC4215;G;13:16:16.83;+25:24:18.8;Com;1.55;0.36;46;15.00;;11.54;10.82;10.52;23.58;Sab;;;;;;;;2MASX J13161713+2524241,IRAS 13138+2540,MCG +04-31-017,PGC 046186,SDSS J131616.82+252418.7,SDSS J131616.83+252418.7,UGC 08336;;; +IC4216;G;13:17:01.87;-10:46:12.0;Vir;2.05;0.77;53;13.50;;11.48;11.07;10.75;23.09;SABc;;;;;;;;2MASX J13170188-1046121,IRAS 13144-1030,MCG -02-34-013,PGC 046252;;Marginal HIPASS detection.; +IC4217;G;13:17:13.28;-13:09:14.7;Vir;0.68;0.62;30;15.10;;13.39;13.11;12.92;23.09;Sbc;;;;;;;;2MASX J13171328-1309142,MCG -02-34-014,PGC 046275;;; +IC4218;G;13:17:03.41;-02:15:40.6;Vir;1.20;0.37;159;14.60;14.73;11.74;10.95;10.58;22.82;Sbc;;;;;;;;2MASX J13170341-0215411,MCG +00-34-022,PGC 046254,SDSS J131703.41-021540.7,UGC 08348;;; +IC4219;G;13:18:29.74;-31:37:51.2;Cen;1.12;0.97;114;13.49;12.84;10.97;10.26;9.91;22.47;SBb;;;;;;;;2MASX J13182974-3137514,ESO 444-006,ESO-LV 444-0060,IRAS 13157-3122,MCG -05-31-044,PGC 046363;;; +IC4220;G;13:17:54.32;-13:36:19.7;Vir;0.85;0.61;105;14.94;;12.26;11.54;11.29;23.12;Sa;;;;;;;;2MASX J13175432-1336196,MCG -02-34-017,PGC 046316;;; +IC4221;G;13:18:30.35;-14:36:32.0;Vir;1.54;0.71;167;13.93;;11.20;10.47;10.27;22.63;SBc;;;;;;;;2MASX J13183034-1436319,IRAS 13158-1420,MCG -02-34-021,PGC 046366;;; +IC4222;Dup;13:19:40.57;-27:25:44.3;Hya;;;;;;;;;;;;;;;0879;;;;;; +IC4223;G;13:18:55.21;+07:47:43.8;Vir;0.72;0.53;140;15.40;;12.34;11.88;11.22;23.32;Sb;;;;;;;;2MASX J13185520+0747443,PGC 046397,SDSS J131855.21+074743.7;;; +IC4224;G;13:19:05.05;-02:30:55.1;Vir;0.88;0.37;99;14.60;;12.24;11.22;11.75;22.64;SBd;;;;;;;;2MASX J13190498-0230549,MCG +00-34-027,PGC 046420,SDSS J131905.04-023055.1,SDSS J131905.05-023055.1;;Position is for eccentric nucleus.; +IC4225;G;13:20:00.95;+31:58:53.0;CVn;1.64;0.33;131;15.10;;11.52;10.76;10.47;24.44;S0-a;;;;;;;;2MASX J13200088+3158527,MCG +05-31-177,PGC 046507,SDSS J132000.95+315853.0,UGC 08378;;; +IC4226;G;13:20:30.41;+32:00:14.1;CVn;0.49;0.35;140;15.20;;12.11;11.44;11.23;22.50;S0-a;;;;;;;;2MASX J13203041+3200138,MCG +05-32-002,PGC 046555,SDSS J132030.41+320014.1;;; +IC4227;G;13:20:53.48;+32:11:26.8;CVn;0.54;0.44;77;15.60;;13.03;12.35;12.14;22.87;SBb;;;;;;;;2MASX J13205351+3211263,PGC 046594,SDSS J132053.47+321126.7,SDSS J132053.48+321126.7,SDSS J132053.49+321126.7,SDSS J132053.49+321126.8;;; +IC4228;G;13:21:34.10;+25:30:58.5;Com;0.80;0.55;67;15.40;;11.93;11.15;10.90;23.16;SBa;;;;;;;;2MASX J13213407+2530585,MCG +04-32-001,PGC 046632,SDSS J132134.09+253058.4;;; +IC4229;G;13:22:26.13;-02:25:05.8;Vir;0.80;0.67;15;14.16;;11.82;11.22;10.83;22.59;Sb;;;;;;;;2MASX J13222614-0225062,IRAS 13198-0209,MCG +00-34-032,PGC 046717,SDSS J132226.12-022505.7,SDSS J132226.13-022505.7,SDSS J132226.13-022505.8,UGC 08404;;The APM position is east of the nucleus.; +IC4230;G;13:21:59.20;+26:44:01.9;Com;1.19;0.36;1;15.20;;11.54;10.86;10.57;23.64;Sa;;;;;;;;2MASX J13215917+2644015,MCG +05-32-008,PGC 046678,SDSS J132159.19+264401.8,UGC 08402;;; +IC4231;G;13:23:13.38;-26:18:01.4;Hya;2.06;0.57;34;14.17;;11.47;10.80;10.70;23.62;Sbc;;;;;;;;2MASX J13231382-2617531,MCG -04-32-009,PGC 046768;;; +IC4232;G;13:23:22.45;-26:06:34.2;Hya;1.19;0.37;4;14.57;;11.54;10.90;10.62;22.80;Sbc;;;;;;;;2MASX J13232245-2606342,ESO 508-061,ESO-LV 508-0610,IRAS 13206-2550,MCG -04-32-010,PGC 046779;;; +IC4233;Dup;13:24:50.43;-30:18:27.1;Cen;;;;;;;;;;;;;;;5124;;;;;; +IC4234;G;13:22:59.87;+27:06:59.1;Com;0.78;0.68;12;14.90;;12.03;11.38;11.10;22.91;SABa;;;;;;;;2MASX J13225983+2706585,MCG +05-32-011,PGC 046761,SDSS J132259.87+270659.1;;; +IC4235;G;13:23:52.97;-12:44:36.1;Vir;0.91;0.25;78;15.94;;12.85;12.31;11.96;24.48;;;;;;;;;2MASX J13235299-1244361,LEDA 158867;;; +IC4236;Dup;13:23:27.45;+06:23:33.2;Vir;;;;;;;;;;;;;;;5118;;;;;; +IC4237;G;13:24:32.76;-21:08:12.6;Vir;2.14;1.39;135;13.25;;10.23;9.55;9.32;23.24;SBb;;;;;;;;2MASX J13243276-2108124,ESO 576-048,ESO-LV 576-0480,IRAS 13218-2052,MCG -03-34-068,PGC 046878;;; +IC4238;G;13:23:59.95;+30:55:56.7;CVn;0.87;0.24;29;15.75;;12.60;11.82;11.43;23.61;Sab;;;;;;;;2MASX J13235992+3055568,LEDA 214106,SDSS J132359.95+305556.7,SDSS J132359.96+305556.7;;; +IC4239;G;13:24:25.43;+30:57:33.4;CVn;0.88;0.63;132;15.30;;12.30;11.69;11.42;23.59;S0-a;;;;;;;;2MASX J13242547+3057336,MCG +05-32-015,PGC 046872,SDSS J132425.42+305733.4,SDSS J132425.43+305733.4;;; +IC4240;G;13:24:27.56;+30:58:40.5;CVn;0.54;0.25;34;15.87;;;;;23.63;E;;;;;;;;2MASX J13242757+3058406,PGC 1926210,SDSS J132427.56+305840.4;;;B-Mag taken from LEDA. +IC4241;G;13:24:46.55;+26:44:18.3;Com;0.62;0.47;64;15.50;;12.45;11.80;11.54;23.25;E;;;;;;;;2MASX J13244652+2644186,MCG +05-32-016,PGC 046894,SDSS J132446.51+264418.2,SDSS J132446.54+264418.2,SDSS J132446.55+264418.3;;; +IC4242;G;13:24:40.92;+31:01:35.4;CVn;0.58;0.41;137;16.33;;13.14;12.76;12.32;23.47;SBb;;;;;;;;2MASX J13244099+3101351,PGC 1928313,SDSS J132440.91+310135.3,SDSS J132440.92+310135.4;;; +IC4243;G;13:25:51.24;-27:37:36.8;Hya;0.50;0.38;35;15.19;;12.12;11.54;11.35;22.64;E-S0;;;;;;;;2MASX J13255125-2737365,ESO 509-001,ESO-LV 509-0010,PGC 046984;;; +IC4244;G;13:24:56.27;+26:27:48.7;Com;0.81;0.34;82;15.60;;12.31;11.65;11.28;23.25;SBab;;;;;;;;2MASX J13245625+2627487,PGC 046914,SDSS J132456.26+262748.6,SDSS J132456.26+262748.7,SDSS J132456.27+262748.7;;; +IC4245;G;13:25:59.05;-26:40:39.8;Hya;0.73;0.52;112;15.25;;;;;23.23;Sa;;;;;;;;MCG -04-32-012,PGC 046998;;;B-Mag taken from LEDA. +IC4246;G;13:26:00.25;-26:40:41.0;Hya;0.62;0.26;147;15.34;;;;;22.65;Sa;;;;;;;;MCG -04-32-013,PGC 047012;;;B-Mag taken from LEDA. +IC4247;G;13:26:44.43;-30:21:44.7;Cen;1.38;0.52;154;14.67;14.28;;;;23.02;S?;;;;;;;;ESO 444-034,ESO-LV 444-0340,MCG -05-32-017,PGC 047073;;; +IC4248;G;13:26:47.22;-29:52:52.9;Hya;1.04;0.65;89;13.88;14.80;11.88;11.29;10.93;22.59;Sc;;;;;;;;2MASX J13264722-2952528,ESO 444-035,ESO-LV 444-0350,IRAS 13239-2937,MCG -05-32-018,PGC 047078;;; +IC4249;G;13:27:06.56;-27:57:23.0;Hya;1.43;0.41;111;14.48;14.57;12.14;11.64;11.73;23.17;Sab;;;;;;;;2MASX J13270656-2757229,ESO 444-039,ESO-LV 444-0390,IRAS 13243-2741,MCG -05-32-020,PGC 047119;;; +IC4250;G;13:26:08.94;+26:28:37.8;Com;0.55;0.32;53;15.20;;13.75;13.17;12.86;22.62;Sc;;;;;;;;2MASX J13260895+2628371,PGC 047008,SDSS J132608.93+262837.7,SDSS J132608.93+262837.8,SDSS J132608.94+262837.8;;; +IC4251;G;13:27:24.28;-29:26:39.7;Hya;0.98;0.65;145;14.96;;11.94;11.30;11.00;23.45;SBa;;;;;;;;2MASX J13272427-2926398,ESO 444-041,ESO-LV 444-0410,MCG -05-32-021,PGC 047145;;; +IC4252;G;13:27:28.00;-27:19:29.2;Hya;2.00;1.08;135;14.15;;10.88;10.14;9.87;24.33;E-S0;;;;;;;;2MASX J13272804-2719288,ESO 509-013,ESO-LV 509-0130,MCG -04-32-018,PGC 047150;;; +IC4253;G;13:27:32.37;-27:52:19.7;Hya;1.41;0.71;135;14.82;;11.58;10.92;10.43;23.70;Sbc;;;;;;;;2MASX J13273235-2752198,ESO 444-042,ESO-LV 444-0420,MCG -05-32-022,PGC 047161;;; +IC4254;G;13:27:45.37;-27:13:21.1;Hya;0.75;0.54;81;15.59;;12.79;11.98;11.84;23.40;Sb;;;;;;;;2MASX J13274544-2713208,ESO 509-017,ESO-LV 509-0170,PGC 047176;;; +IC4255;G;13:28:00.12;-27:21:15.5;Hya;1.34;0.99;45;14.18;;11.03;10.35;10.04;23.75;E-S0;;;;;;;;2MASX J13280012-2721154,ESO 509-020,ESO-LV 509-0200,MCG -04-32-020,PGC 047209;;; +IC4256;G;13:27:03.19;+30:58:36.6;CVn;0.66;0.32;44;15.50;;13.48;12.76;12.37;23.02;Sb;;;;;;;;2MASX J13270315+3058365,PGC 047120,SDSS J132703.18+305836.6,SDSS J132703.19+305836.6;;; +IC4257;Other;13:27:20.33;+46:52:01.2;CVn;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4258;G;13:27:53.26;+28:30:29.5;CVn;0.85;0.68;29;15.20;;11.70;11.07;10.77;23.61;E;;;;;;;;2MASX J13275328+2830291,MCG +05-32-022,PGC 047200,SDSS J132753.26+283029.4,SDSS J132753.26+283029.5,SDSS J132753.27+283029.5;;; +IC4259;G;13:29:28.15;-30:08:05.8;Cen;0.99;0.56;149;15.10;;12.27;11.52;11.31;23.66;SBab;;;;;;;;2MASX J13292815-3008058,2MASX J13292869-3008008,ESO 444-051,ESO-LV 444-0510,PGC 047356;;; +IC4260;G;13:29:40.42;-28:15:57.9;Hya;1.17;0.29;96;15.65;;12.45;11.75;11.38;23.92;Sab;;;;;;;;2MASX J13294041-2815578,ESO 444-052,ESO-LV 444-0520,PGC 047374;;; +IC4261;G;13:29:47.66;-28:00:22.9;Hya;1.17;0.86;131;14.52;;11.38;10.64;10.42;23.79;S0;;;;;;;;2MASX J13294767-2800228,ESO 444-054,ESO-LV 444-0540,MCG -05-32-032,PGC 047392;;; +IC4262;G;13:30:23.10;-28:16:14.1;Hya;1.18;0.37;65;15.61;;12.17;11.44;11.30;23.83;Sb;;;;;;;;2MASX J13302309-2816141,ESO 444-058,ESO-LV 444-0580,PGC 047457;;; +IC4263;G;13:28:33.19;+46:55:37.9;CVn;1.71;0.42;102;15.10;;13.22;12.61;12.16;23.95;SBcd;;;;;;;;MCG +08-25-007,PGC 047270,SDSS J132833.18+465537.8,SDSS J132833.19+465537.9,UGC 08470;;; +IC4264;G;13:30:17.72;-27:55:42.4;Hya;1.88;0.47;105;14.98;;12.92;12.23;12.16;23.81;Sc;;;;;;;;2MASX J13301771-2755421,ESO 444-057,ESO-LV 444-0570,MCG -05-32-033,PGC 047452;;; +IC4265;G;13:30:22.97;-25:45:56.0;Hya;0.84;0.53;5;15.54;;12.68;12.03;11.51;23.46;Sab;;;;;;;;2MASX J13302296-2545561,ESO 509-034,ESO-LV 509-0340,PGC 047456;;; +IC4266;G;13:29:05.63;+37:36:42.3;CVn;0.55;0.50;10;16.17;;13.36;12.71;12.57;23.57;SBab;;;;;;;;2MASX J13290566+3736420,PGC 2105009,SDSS J132905.63+373642.3;;;B-Mag taken from LEDA. +IC4267;G;13:30:36.10;-26:15:21.8;Hya;1.30;0.45;135;15.22;;13.01;12.47;12.26;23.62;Sbc;;;;;;;;2MASX J13303610-2615219,ESO 509-035,ESO-LV 509-0350,MCG -04-32-024,PGC 047474;;; +IC4268;G;13:29:12.33;+37:39:37.8;CVn;0.63;0.46;90;16.28;;13.01;12.41;12.00;24.10;E;;;;;;;;2MASX J13291231+3739381,LEDA 2106228,SDSS J132912.33+373937.8,SDSS J132912.33+373937.9;;;B-Mag taken from LEDA. +IC4269;G;13:29:21.04;+37:37:23.1;CVn;0.46;0.46;85;;;11.59;10.96;10.65;;E;;;;;;;;2MASX J13292098+3737231,MCG +06-30-014,PGC 047348,SDSS J132920.99+373722.8;;; +IC4270;G;13:30:49.09;-25:20:01.2;Hya;0.95;0.83;7;14.75;;12.07;11.52;11.21;23.14;Sbc;;;;;;;;2MASX J13304907-2520009,ESO 509-037,ESO-LV 509-0370,MCG -04-32-027,PGC 047500;;; +IC4271;GPair;13:29:21.40;+37:24:42.0;CVn;0.80;;;;;;;;;;;;;;;;;MCG +06-30-015;;;Diameter of the group inferred by the author. +IC4271 NED01;G;13:29:21.44;+37:24:50.5;CVn;0.87;0.66;167;15.60;;12.67;11.99;11.61;23.48;SBbc;;;;;;;;2MASX J13292141+3724501,MCG +06-30-015 NED01,PGC 047334,SDSS J132921.43+372450.4;;; +IC4271 NED02;G;13:29:21.31;+37:24:34.8;CVn;;;;;;;;;;;;;;;;;;MCG +06-30-015 NED02,PGC 3096774,SDSS J132921.31+372434.8;;Multiple SDSS entries describe this object.;No data available in LEDA +IC4272;G;13:31:16.56;-29:57:26.5;Hya;0.98;0.18;111;15.60;;12.84;12.14;11.79;23.08;Sbc;;;;;;;;2MASX J13311656-2957266,ESO 444-063,ESO-LV 444-0630,IRAS 13284-2941,PGC 047533;;; +IC4273;G;13:31:29.86;-28:53:36.4;Hya;0.95;0.64;24;15.21;;12.63;12.14;11.71;23.83;S0;;;;;;;;2MASX J13312986-2853366,ESO 444-065,ESO-LV 444-0650,MCG -05-32-035,PGC 047552;;; +IC4274;Dup;13:33:32.91;-65:58:26.6;Mus;;;;;;;;;;;;;;;5189;;;;;; +IC4275;G;13:31:51.30;-29:43:56.6;Hya;0.95;0.54;25;14.23;16.60;11.79;11.17;10.85;22.49;SBbc;;;;;;;;2MASX J13315129-2943567,ESO 444-067,ESO-LV 444-0670,IRAS 13290-2928,MCG -05-32-038,PGC 047573;;; +IC4276;G;13:32:06.26;-28:09:24.6;Hya;1.32;0.18;61;15.36;;11.91;11.03;10.75;23.19;Sc;;;;;;;;2MASX J13320625-2809246,ESO 444-068,ESO-LV 444-0680,IRAS 13292-2753,PGC 047594;;; +IC4277;G;13:30:16.72;+47:18:51.0;CVn;0.67;0.08;91;;;;;;;;;;;;;;;PGC 4662915;;;NED lists this object as type G, but listed as Unknown in LEDA. Axes dimensions inferred by the author. +IC4278;G;13:30:27.55;+47:14:48.8;CVn;0.43;0.40;65;17.79;;;;;24.23;SBc;;;;;;;;LEDA 2294907;;Possible double nucleus or interacting pair?;B-Mag taken from LEDA. +IC4279;G;13:32:30.97;-27:07:38.9;Hya;0.68;0.38;52;15.48;;12.11;11.43;11.10;22.96;Sb;;;;;;;;2MASX J13323097-2707388,ESO 509-047,ESO-LV 509-0470,MCG -04-32-032,PGC 047642;;; +IC4280;G;13:32:53.40;-24:12:25.7;Hya;1.13;0.76;64;13.48;;10.47;9.75;9.47;22.36;Sbc;;;;;;;;2MASX J13325338-2412258,ESO 509-054,ESO-LV 509-0540,IRAS 13301-2357,MCG -04-32-036,PGC 047688;;; +IC4281;G;13:32:38.25;-27:10:10.7;Hya;1.30;0.79;98;14.10;;11.29;10.57;10.18;23.36;Sc;;;;;;;;2MASX J13323824-2710108,MCG -04-32-033,PGC 047653;;; +IC4282;G;13:31:19.77;+47:11:01.9;CVn;0.40;0.38;156;17.83;;;;;24.59;;;;;;;;;SDSS J133119.76+471101.8,SDSS J133119.76+471101.9,SDSS J133119.77+471101.9;;;B-Mag taken from LEDA. +IC4283;G;13:32:10.68;+28:23:20.8;CVn;0.65;0.34;69;15.40;;12.82;12.01;11.69;22.82;SBb;;;;;;;;2MASX J13321068+2823203,PGC 047611,SDSS J133210.67+282320.8,SDSS J133210.68+282320.8;;; +IC4284;G;13:31:31.94;+46:47:42.4;CVn;0.32;0.30;21;17.27;;;;;23.44;Sc;;;;;;;;PGC 2287260,SDSS J133131.93+464742.4,SDSS J133131.94+464742.4;;;B-Mag taken from LEDA. +IC4285;G;13:31:45.54;+46:49:17.8;CVn;0.32;0.17;92;17.88;;;;;24.10;;;;;;;;;PGC 2287732,SDSS J133145.53+464917.7,SDSS J133145.54+464917.8;;;B-Mag taken from LEDA. +IC4286;G;13:33:35.65;-27:37:52.4;Hya;0.41;0.34;20;15.95;;14.05;13.55;13.25;22.63;Sbc;;;;;;;;2MASX J13333565-2737520,ESO 509-058,ESO-LV 509-0580,PGC 047754;;; +IC4287;GPair;13:32:39.00;+25:26:28.0;Com;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4287 NED01;G;13:32:38.97;+25:26:28.0;Com;0.96;0.46;152;15.30;;12.29;11.66;11.31;23.59;Sa;;;;;;;;2MASX J13323896+2526279,PGC 047659;;; +IC4287 NED02;G;13:32:39.66;+25:26:24.7;Com;;;;;;;;;;;;;;;;;;SDSS J133239.65+252624.6;;;No data available in LEDA +IC4288;G;13:34:30.42;-27:18:15.2;Hya;1.36;0.60;114;14.76;;11.20;10.39;10.03;23.51;Sbc;;;;;;;;2MASX J13343041-2718154,ESO 509-061,ESO-LV 509-0610,MCG -04-32-039,PGC 047831;;; +IC4289;G;13:34:47.81;-27:07:37.5;Hya;1.40;0.62;8;14.33;;11.12;10.39;10.14;23.75;E-S0;;;;;;;;2MASX J13344779-2707374,ESO 509-067,ESO-LV 509-0670,MCG -04-32-041,PGC 047861;;; +IC4290;G;13:35:19.58;-28:01:18.5;Hya;1.35;1.11;99;14.24;;11.20;10.57;10.33;23.46;Sb;;;;;;;;2MASX J13351958-2801185,ESO 444-074,ESO-LV 444-0740,MCG -05-32-044,PGC 047905;;; +IC4291;OCl;13:36:56.41;-62:05:35.2;Cen;5.10;;;10.30;9.70;;;;;;;;;;;;;MWSC 2142;;; +IC4292;G;13:35:46.60;-27:40:25.9;Hya;0.56;0.48;14;15.03;;12.98;12.32;11.90;22.57;Sbc;;;;;;;;2MASX J13354660-2740258,ESO 509-076,ESO-LV 509-0760,IRAS 13329-2725,PGC 047956;;; +IC4293;G;13:36:02.26;-25:52:56.3;Hya;2.19;1.39;177;13.52;13.50;10.38;9.73;9.49;23.98;E-S0;;;;;;;;2MASX J13360226-2552562,ESO 509-077,ESO-LV 509-0770,MCG -04-32-044,PGC 047987;;; +IC4294;G;13:36:31.23;-28:46:52.1;Hya;0.93;0.45;32;15.59;;12.69;12.13;11.76;23.62;SBb;;;;;;;;2MASX J13363121-2846518,ESO 444-079,ESO-LV 444-0790,PGC 048031;;; +IC4295;G;13:36:34.46;-29:05:22.0;Hya;1.04;0.40;114;15.13;;12.72;12.17;11.79;23.21;Sbc;;;;;;;;2MASX J13363446-2905218,ESO 444-080,ESO-LV 444-0800,MCG -05-32-049,PGC 048035;;; +IC4296;G;13:36:39.03;-33:57:57.0;Cen;4.62;2.43;42;11.52;12.99;8.48;7.77;7.50;23.73;E;;;;;;;;2MASX J13363905-3357572,ESO 383-039,ESO-LV 383-0390,MCG -06-30-016,PGC 048040;;; +IC4297;G;13:35:19.25;+26:25:29.2;Boo;0.88;0.40;70;15.50;;12.52;11.63;11.55;23.57;SBa;;;;;;;;2MASX J13351924+2625288,MCG +05-32-040,PGC 047906,SDSS J133519.24+262529.1,SDSS J133519.25+262529.1,UGC 08570;;; +IC4298;G;13:36:34.73;-26:33:13.9;Hya;1.60;0.82;177;14.16;;11.24;10.56;10.21;23.39;Sc;;;;;;;;2MASX J13363471-2633139,ESO 509-080,ESO-LV 509-0800,MCG -04-32-045,PGC 048036;;; +IC4299;G;13:36:47.48;-34:03:56.9;Cen;1.87;0.81;58;13.82;12.67;10.29;9.62;9.37;23.41;Sa;;;;;;;;2MASX J13364758-3403572,ESO 383-042,ESO-LV 383-0420,MCG -06-30-017,PGC 048057;;; +IC4300;G;13:35:25.20;+33:25:11.3;CVn;0.23;0.23;12;15.75;;12.77;11.87;11.84;21.43;E;;;;;;;;2MASX J13352519+3325116,MCG +06-30-048,PGC 047912,SDSS J133525.19+332511.3,SDSS J133525.20+332511.3;;;B-Mag taken from LEDA. +IC4301;G;13:35:35.80;+33:22:28.2;CVn;1.29;0.39;130;16.00;;12.30;11.47;11.17;24.03;SBb;;;;;;;;PGC 047936,2MASX J13353581+3322286,MCG+06-30-050,SDSS J133535.80+332228.1,UGC 08579;;; +IC4302;G;13:35:35.95;+33:28:46.5;CVn;1.36;0.27;126;16.50;;12.78;11.94;11.74;23.97;Sc;;;;;;;;2MASX J13353598+3328466,MCG +06-30-051,PGC 047935,SDSS J133535.94+332846.4,SDSS J133535.94+332846.5,SDSS J133535.95+332846.5,UGC 08580;;; +IC4303;G;13:37:18.22;-28:39:28.7;Hya;0.98;0.54;71;15.27;;13.91;13.47;13.19;23.44;SABb;;;;;;;;2MASX J13371823-2839285,ESO 444-083,ESO-LV 444-0830,MCG -05-32-051,PGC 048104;;; +IC4304;G;13:35:57.88;+33:25:48.1;CVn;1.31;0.55;41;15.00;;11.26;10.54;10.26;23.47;Sab;;;;;;;;2MASX J13355786+3325477,MCG +06-30-055,PGC 047980,SDSS J133557.87+332548.0,SDSS J133557.88+332548.0,SDSS J133557.88+332548.1,UGC 08586;;; +IC4305;G;13:35:58.37;+33:28:26.1;CVn;0.98;0.86;173;15.10;;11.52;10.76;10.59;23.49;S0;;;;;;;;2MASX J13355834+3328257,MCG +06-30-054,PGC 047981,SDSS J133558.37+332826.0,SDSS J133558.37+332826.1;;; +IC4306;G;13:36:19.64;+33:25:24.4;CVn;1.10;0.39;81;15.70;;12.25;11.44;11.18;23.92;Sa;;;;;;;;2MASX J13361966+3325247,MCG +06-30-058,PGC 048015,SDSS J133619.63+332524.3,SDSS J133619.64+332524.4;;; +IC4307;G;13:36:36.17;+27:14:31.9;Boo;0.66;0.59;84;15.20;;12.05;11.26;11.20;23.02;S0;;;;;;;;2MASX J13363615+2714322,MCG +05-32-043,PGC 048032,SDSS J133636.17+271431.8;;; +IC4308;Other;13:36:52.36;+32:44:00.1;CVn;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4309;G;13:38:50.04;-29:39:45.8;Hya;0.77;0.50;132;15.47;;12.59;11.85;11.80;23.24;Sbc;;;;;;;;2MASX J13385002-2939457,ESO 444-091,ESO-LV 444-0910,PGC 048250;;; +IC4310;G;13:38:57.14;-25:50:44.6;Hya;2.38;0.96;73;13.25;;9.81;9.08;8.87;23.89;S0;;;;;;;;2MASX J13385713-2550447,ESO 509-088,ESO-LV 509-0880,MCG -04-32-047,PGC 048258;;; +IC4311;G;13:40:07.96;-51:02:10.1;Cen;1.11;0.78;161;14.06;;11.93;11.37;10.95;22.77;Sbc;;;;;;;;2MASX J13400796-5102102,ESO 220-027,ESO-LV 220-0270,IRAS 13370-5047,PGC 048352;;; +IC4312;G;13:40:30.90;-51:04:15.2;Cen;1.21;0.89;75;13.41;;9.80;9.12;8.82;22.78;S0;;;;;;;;2MASX J13403087-5104152,ESO 220-029,ESO-LV 220-0290,IRAS 13373-5049,PGC 048384;;; +IC4313;G;13:38:20.71;+26:45:35.2;Boo;0.59;0.38;38;15.60;;12.73;12.04;11.66;23.71;E;;;;;;;;2MASX J13382069+2645346,MCG +05-32-046,PGC 048186,SDSS J133820.70+264535.1,SDSS J133820.71+264535.2;;; +IC4314;G;13:38:25.07;+26:44:33.0;Boo;0.91;0.65;10;15.00;;11.45;10.56;10.46;23.54;E;;;;;;;;2MASX J13382503+2644326,MCG +05-32-047,PGC 048197,SDSS J133825.06+264432.9;;; +IC4315;G;13:40:03.19;-25:28:28.4;Hya;1.60;0.32;132;14.99;;12.91;12.29;12.18;23.41;SBc;;;;;;;;2MASX J13400317-2528282,ESO 509-091,ESO-LV 509-0910,MCG -04-32-049,PGC 048346;;; +IC4316;G;13:40:18.41;-28:53:32.0;Hya;1.38;1.00;56;15.02;15.93;;;;23.70;IB;;;;;;;;ESO 445-006,ESO-LV 445-0060,MCG -05-32-062,PGC 048368,PGC 048369;;Noted in MCG as possibly interacting.; +IC4317;G;13:41:45.82;+27:06:22.9;Boo;0.51;0.34;23;15.72;;13.09;12.57;12.18;23.16;Sa;;;;;;;;2MASX J13414585+2706228,LEDA 087672,SDSS J134145.81+270622.8,SDSS J134145.82+270622.8,SDSS J134145.82+270622.9;;; +IC4318;G;13:43:22.69;-28:58:04.6;Hya;1.08;0.95;10;14.58;;11.95;11.19;10.98;23.28;Sc;;;;;;;;2MASX J13432267-2858046,ESO 445-017,ESO-LV 445-0170,IRAS 13405-2842,MCG -05-32-069,PGC 048613;;; +IC4319;G;13:43:26.57;-29:48:12.5;Hya;1.61;0.54;73;14.35;;11.09;10.46;10.11;23.30;Sbc;;;;;;;;2MASX J13432657-2948126,ESO 445-019,ESO-LV 445-0190,IRAS 13406-2933,MCG -05-32-071,PGC 048617;;; +IC4320;G;13:44:03.72;-27:13:54.1;Hya;1.31;1.18;30;14.25;;10.95;10.26;9.96;23.52;S0-a;;;;;;;;2MASX J13440372-2713542,ESO 509-101,ESO-LV 509-1010,MCG -04-32-053,PGC 048655;;; +IC4321;G;13:44:31.25;-30:08:22.5;Cen;1.02;0.62;33;15.15;;12.72;12.01;11.57;23.50;Sbc;;;;;;;;2MASX J13443124-3008225,ESO 445-022,ESO-LV 445-0220,MCG -05-32-073,PGC 048694;;; +IC4322;G;13:43:44.15;+25:23:31.7;Boo;0.69;0.55;71;15.50;;12.03;11.21;10.87;23.35;E-S0;;;;;;;;2MASX J13434413+2523318,PGC 048635,SDSS J134344.15+252331.7;;; +IC4323;G;13:45:06.88;-28:39:04.5;Hya;1.10;0.20;58;15.91;;14.14;13.51;13.12;23.57;Sbc;;;;;;;;2MASX J13450689-2839048,ESO 445-024,ESO-LV 445-0240,PGC 048748,TYC 6727-722-1;;; +IC4324;G;13:45:27.31;-30:13:38.0;Cen;0.90;0.57;126;14.82;;12.26;11.75;11.42;23.01;Sb;;;;;;;;2MASX J13452731-3013377,ESO 445-025,ESO-LV 445-0250,IRAS 13426-2958,MCG -05-32-075,PGC 048776;;; +IC4325;G;13:47:39.65;-29:26:03.7;Hya;1.20;0.48;101;14.76;;11.86;11.14;10.77;23.23;SABb;;;;;;;;2MASX J13473964-2926035,ESO 445-032,ESO-LV 445-0320,IRAS 13448-2911,MCG -05-33-007,PGC 048908;;; +IC4326;G;13:48:21.49;-29:37:35.0;Hya;1.00;0.81;166;14.46;;11.58;10.89;10.60;22.97;Sc;;;;;;;;2MASX J13482148-2937349,ESO 445-038,ESO-LV 445-0380,IRAS 13454-2922,MCG -05-33-012,PGC 048966;;; +IC4327;G;13:48:43.80;-30:13:03.0;Cen;1.15;0.58;56;14.61;11.81;12.38;12.10;11.64;23.00;Sc;;;;;;;;2MASX J13484378-3013031,ESO 445-041,ESO-LV 445-0410,IRAS 13458-2958,MCG -05-33-016,PGC 048997;;; +IC4328;G;13:49:02.90;-29:56:13.3;Hya;1.07;0.70;174;14.94;;11.90;11.32;11.10;23.49;SBab;;;;;;;;2MASX J13490291-2956132,ESO 445-045,ESO-LV 445-0450,PGC 049023;;; +IC4329;G;13:49:05.31;-30:17:45.1;Cen;4.74;2.65;67;11.96;11.54;8.95;8.35;8.06;24.33;E-S0;;;;;;;;2MASX J13490531-3017452,ESO 445-046,ESO-LV 445-0460,MCG -05-33-019,PGC 049025;;; +IC4330;G;13:47:14.85;-28:19:54.5;Hya;1.29;0.65;93;14.75;;11.77;11.06;10.71;23.38;SBc;;;;;;;;2MASX J13471484-2819544,ESO 445-027,ESO-LV 445-0270,MCG -05-33-003,PGC 048881;;Two minute error in IC RA.; +IC4331;G;13:49:24.61;+25:09:16.8;Boo;0.63;0.51;64;15.73;;;;;23.24;SBb;;;;;;;;2MASX J13492460+2509166,PGC 1727130,SDSS J134924.60+250916.7,SDSS J134924.61+250916.7,SDSS J134924.61+250916.8;;;B-Mag taken from LEDA. +IC4332;G;13:49:52.55;+25:11:27.2;Boo;0.85;0.78;3;15.30;;12.26;11.56;11.31;23.69;S0;;;;;;;;2MASX J13495252+2511272,MCG +04-33-008,PGC 049081,SDSS J134952.54+251127.1,SDSS J134952.55+251127.2;;; +IC4333;G;14:05:20.59;-84:16:21.7;Oct;1.80;0.46;60;14.56;;11.30;10.63;10.36;24.70;S0-a;;;;;;;;2MASX J14052054-8416219,ESO 008-005,IRAS 13574-8402,PGC 050242;;; +IC4334;G;13:49:48.27;+29:41:38.7;CVn;0.59;0.50;147;15.40;;12.60;11.78;11.57;23.17;E-S0;;;;;;;;2MASX J13494831+2941391,MCG +05-33-008,PGC 049072,SDSS J134948.27+294138.6,SDSS J134948.27+294138.7;;; +IC4335;*;13:49:45.07;+33:40:25.1;CVn;;;;;;;;;;;;;;;;;;;;Could be a double star with a blended image on the DSS.; +IC4336;G;13:50:43.37;+39:42:24.4;CVn;1.37;0.41;155;14.60;;11.33;10.69;10.63;23.34;Sb;;;;;;;;2MASX J13504341+3942246,IRAS 13485+3957,MCG +07-28-077,PGC 049146,SDSS J135043.36+394224.3,SDSS J135043.36+394224.4,UGC 08761;;; +IC4337;G;13:52:19.28;+14:16:18.9;Boo;0.77;0.38;106;15.20;;12.04;11.18;11.04;23.40;S0-a;;;;;;;;2MASX J13521931+1416185,PGC 049253,SDSS J135219.28+141618.8,SDSS J135219.28+141618.9;;; +IC4338;Dup;13:52:54.46;-01:06:52.7;Vir;;;;;;;;;;;;;;;5334;;;;;; +IC4339;*;13:53:28.83;+37:32:20.5;CVn;;;;12.04;11.50;10.76;10.45;10.40;;;;;;;;;;2MASS J13532882+3732206,SDSS J135328.82+373220.4,TYC 3027-379-1;;; +IC4340;G;13:53:33.53;+37:23:13.1;CVn;1.27;0.90;31;15.00;;11.15;10.46;10.16;23.79;E-S0;;;;;;;;2MASX J13533353+3723132,MCG +06-31-009,PGC 049364,SDSS J135333.53+372313.1,SDSS J135333.54+372313.1;;; +IC4341;G;13:53:34.25;+37:31:20.1;CVn;0.92;0.84;50;14.90;;12.44;12.03;11.70;23.28;Sc;;;;;;;;2MASX J13533422+3731202,MCG +06-31-010,PGC 049366,SDSS J135334.24+373120.0,SDSS J135334.25+373120.1;;; +IC4342;G;13:54:22.11;+25:09:11.1;Boo;1.09;0.43;53;15.40;;12.07;11.52;11.39;23.54;Sab;;;;;;;;2MASX J13542211+2509114,MCG +04-33-021,PGC 049425,SDSS J135422.10+250911.1,SDSS J135422.11+250911.1;;; +IC4343;G;13:54:55.80;+25:07:21.5;Boo;1.05;0.61;102;15.60;;11.82;11.12;10.84;24.06;E;;;;;;;;2MASX J13545583+2507214,MCG +04-33-024,PGC 049470,SDSS J135455.79+250721.5,SDSS J135455.80+250721.5;;; +IC4344;G;13:55:12.59;+25:01:17.2;Boo;1.10;0.70;67;15.50;;11.74;11.06;10.82;23.64;Sab;;;;;;;;2MASX J13551261+2501175,MCG +04-33-026,PGC 049492,SDSS J135512.58+250117.1,SDSS J135512.59+250117.2;;; +IC4345;G;13:55:13.39;+25:03:06.5;Boo;1.23;1.18;134;14.70;;11.11;10.41;10.09;23.55;E;;;;;;;;2MASX J13551342+2503065,MCG +04-33-025,PGC 095536,SDSS J135513.38+250306.4,SDSS J135513.38+250306.5,SDSS J135513.39+250306.5;;; +IC4346;G;13:55:40.57;+25:09:11.0;Boo;0.73;0.66;4;15.40;;12.36;11.64;11.43;23.07;S0-a;;;;;;;;2MASX J13554060+2509109,MCG +04-33-029,PGC 215031,SDSS J135540.56+250910.9,SDSS J135540.57+250910.9,SDSS J135540.57+250911.0;;; +IC4347;Dup;13:57:43.87;-39:58:42.3;Cen;;;;;;;;;;;;;;;5367;;;;;; +IC4348;G;13:55:45.09;+25:12:11.2;Boo;1.13;1.13;117;15.70;;12.07;11.36;11.26;24.74;E;;;;;;;;2MASX J13554510+2512110,MCG +04-33-030,PGC 049531,SDSS J135545.08+251211.2,SDSS J135545.09+251211.2;;; +IC4349;G;13:55:46.34;+25:09:06.9;Boo;1.04;0.50;119;15.30;;12.07;11.38;11.04;23.41;Sab;;;;;;;;2MASX J13554635+2509070,MCG +04-33-032,PGC 049530,SDSS J135546.34+250906.8,SDSS J135546.34+250906.9;;; +IC4350;G;13:57:13.92;-25:14:44.9;Hya;1.88;0.74;133;13.70;;10.27;9.57;9.29;23.74;S0-a;;;;;;;;2MASX J13571393-2514451,ESO 510-022,ESO-LV 510-0220,MCG -04-33-019,PGC 049628;;; +IC4351;G;13:57:54.26;-29:18:56.6;Hya;6.55;1.04;18;12.61;;9.09;8.34;8.02;24.19;Sb;;;;;;;;2MASX J13575425-2918566,ESO 445-084,ESO-LV 445-0840,IRAS 13550-2904,LEDA 3149676,MCG -05-33-034,PGC 049676,UGCA 376;;; +IC4352;G;13:58:25.12;-34:31:02.4;Cen;1.82;0.73;88;13.59;;9.92;9.20;8.89;23.10;Sab;;;;;;;;2MASX J13582512-3431024,ESO 384-022,ESO-LV 384-0220,MCG -06-31-007,PGC 049726;;; +IC4353;Other;13:57:03.70;+37:43:44.6;CVn;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4354;G;13:58:30.90;-12:36:19.3;Vir;1.36;0.33;106;15.33;;11.95;11.31;11.02;23.64;Sc;;;;;;;;2MASX J13583078-1236185,IRAS 13558-1221,MCG -02-36-001,PGC 049731;;;B-Mag taken from LEDA. +IC4355;G;13:58:06.12;+28:25:21.7;CVn;0.43;0.40;54;15.00;;13.08;12.30;12.08;22.19;Sa;;;;;;;;2MASX J13580609+2825221,MCG +05-33-030,PGC 049690,SDSS J135806.11+282521.6;;; +IC4356;G;13:58:45.10;+37:29:26.4;CVn;0.54;0.46;15;15.86;;12.86;12.18;11.88;23.32;S0;;;;;;;;2MASX J13584507+3729264,PGC 049759,SDSS J135845.09+372926.4;;;B-Mag taken from LEDA. +IC4357;G;14:00:43.69;+31:53:39.0;CVn;0.93;0.51;67;14.90;;12.86;12.19;12.08;22.98;Sbc;;;;;;;;2MASX J14004369+3153392,MCG +05-33-040,PGC 049879,SDSS J140043.65+315339.0,UGC 08926;;; +IC4358;G;14:03:34.18;-10:09:04.5;Vir;1.39;0.29;111;15.30;;13.61;12.80;12.69;23.22;Sbc;;;;;;;;2MASX J14033416-1009043,MCG -02-36-004,PGC 050092;;; +IC4359;G;14:05:23.33;-45:16:11.2;Cen;1.18;0.89;13;13.82;;11.23;10.50;10.32;22.68;Sc;;;;;;;;2MASX J14052333-4516113,ESO 271-015,ESO-LV 271-0150,IRAS 14022-4501,PGC 050248;;; +IC4360;G;14:04:21.34;-11:25:29.4;Vir;0.78;0.47;33;16.46;;13.29;12.62;12.54;23.75;SBab;;;;;;;;2MASX J14042133-1125287,LEDA 094256;;; +IC4361;G;14:04:07.47;-09:46:08.0;Vir;0.66;0.34;170;;;13.05;12.52;12.34;;Sb;;;;;;;;2MASX J14040746-0946079,MCG -02-36-007,PGC 050131;;; +IC4362;G;14:05:22.22;-41:49:08.3;Cen;1.81;0.69;147;17.49;;11.42;10.81;10.47;22.67;SBc;;;;;;;;2MASX J14052149-4148552,IRAS 14022-4134,MCG -07-29-007,PGC 050246;;This is a part of the galaxy IC 4362.; +IC4363;G;14:04:12.30;-09:38:29.9;Vir;0.45;0.21;25;15.29;;12.77;11.96;11.72;;Sc;;;;;;;;2MASX J14041231-0938297,PGC 170328;;; +IC4364;G;14:04:19.72;-09:59:35.8;Vir;0.91;0.66;106;14.76;;12.86;12.17;11.88;23.21;Sbc;;;;;;;;2MASX J14041970-0959357,MCG -02-36-009,PGC 050149;;;B-Mag taken from LEDA. +IC4365;Dup;14:03:47.34;+09:31:25.3;Boo;;;;;;;;;;;;;;;5437;;;;;; +IC4366;G;14:05:11.48;-33:45:36.4;Cen;1.63;1.21;149;13.60;;11.34;10.54;10.28;22.86;Sc;;;;;;;;2MASX J14051147-3345363,ESO 384-045,ESO-LV 384-0450,IRAS 14022-3331,MCG -05-33-042,PGC 050230;;; +IC4367;G;14:05:36.58;-39:12:12.1;Cen;1.64;1.43;71;13.00;;10.04;9.36;9.09;22.74;SABc;;;;;;;;2MASX J14053656-3912121,ESO 325-051,ESO-LV 325-0510,IRAS 14025-3857,MCG -06-31-021,PGC 050266;;; +IC4368;G;14:04:46.44;-09:57:44.1;Vir;0.55;0.38;40;15.15;;11.55;10.90;10.58;;S0;;;;;;;;2MASX J14044646-0957440,LEDA 170329;;; +IC4369;G;14:04:05.87;+33:19:14.6;CVn;0.44;0.38;29;16.32;;13.49;12.85;12.39;23.04;Sbc;;;;;;;;2MASX J14040585+3319140,MCG +06-31-058,PGC 050134,SDSS J140405.87+331914.5,UGC 08990 NOTES03;;; +IC4370;G;14:04:09.86;+33:20:45.6;CVn;0.44;0.33;96;15.88;;;;;22.60;Sc;;;;;;;;2MASX J14040984+3320460,MCG +06-31-060,PGC 050138,SDSS J140409.85+332045.5,UGC 08990 NOTES01;;;B-Mag taken from LEDA. +IC4371;G;14:04:10.87;+33:18:28.1;CVn;0.81;0.54;50;15.26;;11.91;11.27;10.94;23.23;SBa;;;;;;;;2MASX J14041088+3318280,MCG +06-31-061,PGC 050140,SDSS J140410.86+331828.0,SDSS J140410.87+331828.0,UGC 08990 NOTES06;;; +IC4372;G;14:05:46.09;-10:54:00.3;Vir;0.48;0.15;75;16.18;;13.31;12.46;12.02;;S0-a;;;;;;;;2MASX J14054608-1054003,PGC 184370;;; +IC4373;G;14:05:43.17;+25:13:52.9;Boo;0.82;0.78;23;15.30;;12.07;11.48;11.04;23.63;E;;;;;;;;2MASX J14054320+2513530,PGC 050274,SDSS J140543.16+251352.9;;; +IC4374;G;14:07:29.76;-27:01:04.3;Hya;1.80;1.39;106;13.61;;10.62;9.88;9.57;23.70;E-S0;;;;;;;;2MASX J14072978-2701043,ESO 510-069,ESO-LV 510-0690,MCG -04-33-046,PGC 050385;;; +IC4375;Dup;14:08:03.11;-33:18:53.7;Cen;;;;;;;;;;;;;;;5488;;;;;; +IC4376;Other;14:10:50.47;-30:47:33.9;Cen;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC4377;G;14:16:58.81;-75:38:49.9;Aps;1.98;0.69;95;13.60;;10.67;9.95;9.72;24.08;S0-a;;;;;;;;2MASX J14165880-7538496,ESO 041-004,PGC 051013;;; +IC4378;G;14:12:09.57;-34:15:55.2;Cen;1.54;0.61;158;14.53;;11.22;10.54;10.18;24.17;S0;;;;;;;;2MASX J14120952-3415550,ESO 384-064,ESO-LV 384-0640,MCG -06-31-027,PGC 050711;;; +IC4379;G;14:12:10.24;-34:16:21.8;Cen;0.92;0.42;93;15.51;;;;;23.40;Sbc;;;;;;;;ESO 384-065,ESO-LV 384-0650,MCG -06-31-028,PGC 050710;;; +IC4380;G;14:10:02.12;+37:32:59.5;Boo;0.73;0.68;10;15.10;;12.85;12.53;11.91;23.22;SBcd;;;;;;;;MCG +06-31-075,PGC 050565;;; +IC4381;Dup;14:10:57.24;+25:29:50.0;Boo;;;;;;;;;;;;;;;5008;;;;;; +IC4382;G;14:11:02.54;+25:31:09.7;Boo;0.64;0.16;9;15.40;;12.63;11.84;11.57;22.30;SBb;;;;;;;;2MASX J14110257+2531102,IRAS 14087+2545,PGC 050635,SDSS J141102.53+253109.6,SDSS J141102.54+253109.7;;; +IC4383;Dup;14:12:12.72;+15:52:08.0;Boo;;;;;;;;;;;;;;;5504B;;;;;; +IC4384;G;14:11:56.02;+27:06:50.1;Boo;1.13;0.80;165;15.00;;11.45;10.71;10.37;23.78;S0-a;;;;;;;;2MASX J14115599+2706503,MCG +05-33-054,PGC 050690,SDSS J141156.01+270650.0,SDSS J141156.02+270650.0,SDSS J141156.02+270650.1,UGC 09082;;; +IC4385;Other;14:14:31.72;-42:19:25.0;Cen;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +IC4386;G;14:15:02.37;-43:57:40.8;Cen;2.57;0.38;146;12.75;;;;;22.87;Sd;;;;;;;;2MASX J14150192-4357293,IRAS 14118-4343,MCG -07-29-011,PGC 050905;;The 2MASX position refers to a knot northwest of the nucleus.;B-Mag taken from LEDA. +IC4387;G;14:15:01.75;-43:59:24.4;Cen;1.26;0.72;67;14.90;;;;;23.63;SABm;;;;;;;;ESO 271-024,ESO-LV 271-0240,MCG -07-29-010,PGC 050904;;; +IC4388;G;14:16:03.48;-31:45:09.5;Cen;1.14;0.97;4;14.35;;12.14;11.57;11.23;23.14;Sbc;;;;;;;;2MASX J14160347-3145094,ESO 446-038,ESO-LV 446-0380,IRAS 14131-3131,MCG -05-34-003,PGC 050964;;Marginal HIPASS detection.; +IC4389;G;14:16:46.20;-40:33:09.0;Cen;0.83;0.60;100;15.30;;;;;23.36;Sc;;;;;;;;ESO 326-016,PGC 051000;;;B-Mag taken from LEDA. +IC4390;G;14:16:59.20;-44:58:38.4;Lup;1.95;0.63;10;13.81;;10.66;9.96;9.70;23.11;SABb;;;;;;;;2MASX J14165917-4458385,ESO 271-028,ESO-LV 271-0280,IRAS 14137-4444,MCG -07-29-012,PGC 051015;;; +IC4391;G;14:16:27.04;-31:41:05.9;Cen;0.98;0.78;55;14.45;;12.29;11.75;11.39;22.99;Sab;;;;;;;;2MASX J14162704-3141058,ESO 446-041,ESO-LV 446-0410,IRAS 14135-3127,MCG -05-34-005,PGC 050988;;Confused HIPASS source; +IC4392;Other;14:15:53.17;-13:03:04.5;Vir;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +IC4393;G;14:17:48.95;-31:20:56.7;Cen;2.30;0.38;75;14.59;;11.51;10.68;10.40;23.72;Sc;;;;;;;;2MASX J14174895-3120571,ESO 446-044,ESO-LV 446-0440,IRAS 14148-3107,MCG -05-34-006,PGC 051061;;Confused HIPASS source; +IC4394;Other;14:16:22.36;+39:41:51.7;Boo;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4395;G;14:17:21.08;+26:51:26.8;Boo;1.16;0.80;25;15.10;;11.55;10.84;10.45;23.76;Sab;;;;;;;;2MASX J14172108+2651264,IRAS 14151+2705,MCG +05-34-007,PGC 051033,SDSS J141721.07+265126.7,SDSS J141721.07+265126.8,SDSS J141721.08+265126.8,UGC 09141;;; +IC4396;G;14:17:30.24;+28:48:00.0;Boo;0.63;0.41;21;15.84;14.99;12.77;12.01;11.79;23.07;Sc;;;;;;;;2MASX J14173020+2847595,MCG +05-34-008,PGC 051050,SDSS J141730.23+284800.0;;; +IC4397;G;14:17:58.72;+26:24:45.2;Boo;1.08;0.74;160;14.20;;11.48;10.90;10.54;22.69;Sbc;;;;;;;;2MASX J14175868+2624454,IRAS 14156+2638,MCG +05-34-012,PGC 051073,SDSS J141758.70+262445.4,UGC 09150;;; +IC4398;G;14:18:03.44;+28:51:59.0;Boo;0.62;0.56;10;15.30;;12.37;11.66;11.37;22.85;SBb;;;;;;;;2MASX J14180344+2851584,MCG +05-34-013,PGC 051082,SDSS J141803.44+285159.0;;; +IC4399;G;14:18:23.96;+26:23:09.2;Boo;0.71;0.35;139;15.50;;12.54;11.89;11.44;23.00;SBb;;;;;;;;2MASX J14182398+2623095,MCG +05-34-014,PGC 051100,SDSS J141823.95+262309.1,SDSS J141823.96+262309.2,UGC 09157;;; +IC4400;Other;14:22:13.45;-60:34:11.3;Cen;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +IC4401;G;14:19:25.07;-04:29:20.9;Vir;1.50;0.60;10;14.44;;11.53;10.85;10.56;23.50;SABa;;;;;;;;2MASX J14192507-0429208,MCG -01-36-015,PGC 051173;;The IC identification is not certain.;B-Mag taken from LEDA. +IC4402;G;14:21:13.09;-46:17:52.4;Lup;5.78;0.96;126;12.79;;9.22;8.47;8.17;23.43;Sb;;;;;;;;2MASX J14211309-4617524,ESO 272-005,ESO-LV 272-0050,IRAS 14179-4604,PGC 051288;;; +IC4403;G;14:18:16.87;+31:39:13.8;Boo;1.23;0.48;137;14.90;;11.56;10.82;10.55;23.51;SBa;;;;;;;;2MASX J14181681+3139143,IRAS 14160+3153,MCG +05-34-016,PGC 051091,SDSS J141816.86+313913.7,SDSS J141816.86+313913.8,UGC 09158;;; +IC4404;*;14:09:51.02;+78:37:40.2;UMi;;;;;;;;;;;;;;;;;;;;; +IC4405;G;14:19:16.59;+26:17:54.9;Boo;1.35;0.87;105;15.70;;11.71;10.99;10.67;24.02;S0-a;;;;;;;;2MASX J14191656+2617550,MCG +05-34-019,PGC 051167,SDSS J141916.58+261754.9,SDSS J141916.59+261754.9,SDSS J141916.59+261755.0;;; +IC4406;PN;14:22:26.48;-44:09:00.7;Lup;0.58;;;10.60;10.20;;;;;;;17.44;;;;;HD 125720;ESO 272-006,IRAS 14192-4355,PK 319+15 1,PN G319.6+15.7;;; +IC4407;G;14:23:36.86;-05:58:59.6;Vir;1.48;0.71;173;14.70;;14.08;13.86;13.78;23.66;SBm;;;;;;;;2MASX J14233689-0558598,MCG -01-37-005,PGC 051404;;; +IC4408;G;14:21:13.09;+29:59:36.6;Boo;0.83;0.39;128;15.00;;11.64;10.91;10.59;22.82;Sab;;;;;;;;2MASX J14211313+2959367,IRAS 14190+3013,MCG +05-34-024,PGC 051283,SDSS J142113.09+295936.6,UGC 09191;;; +IC4409;G;14:21:33.30;+31:35:07.9;Boo;0.79;0.54;38;15.10;;12.70;12.19;11.92;23.08;Sbc;;;;;;;;2MASX J14213325+3135078,IRAS 14193+3148,MCG +05-34-026,PGC 051306,SDSS J142133.30+313507.9;;; +IC4410;G;14:22:13.95;+17:23:50.4;Boo;0.79;0.41;57;15.60;;12.85;11.88;11.65;23.33;SBbc;;;;;;;;2MASX J14221396+1723505,MCG +03-37-009,PGC 051338,SDSS J142213.95+172350.4;;HOLM 636B is a Galactic foreground star.; +IC4411;Other;14:25:01.10;-35:01:14.2;Cen;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4412;Dup;14:23:10.31;+26:15:56.9;Boo;;;;;;;;;;;;;;;5594;;;;;; +IC4413;G;14:22:57.32;+37:31:38.7;Boo;0.51;0.40;129;15.50;;12.38;11.66;11.52;22.85;E-S0;;;;;;;;2MASX J14225735+3731384,MCG +06-32-015,PGC 051375,SDSS J142257.32+373138.7;;;B-Mag taken from LEDA. +IC4414;Dup;14:23:42.59;+28:20:52.3;Boo;;;;;;;;;;;;;;;;1008;;;;; +IC4415;G;14:24:26.72;+16:38:22.6;Boo;0.62;0.30;139;16.10;;12.97;12.33;11.91;23.58;Sa;;;;;;;;2MASX J14242668+1638226,LEDA 084155,SDSS J142426.72+163822.5;;;B-Mag taken from LEDA. +IC4416;G;14:24:17.42;+29:38:08.9;Boo;0.92;0.67;130;15.70;;11.85;11.15;10.91;24.15;E;;;;;;;;2MASX J14241745+2938093,MCG +05-34-031,PGC 051452,SDSS J142417.41+293808.8;;; +IC4417;G;14:24:53.69;+17:02:16.5;Boo;1.11;0.78;144;15.50;;11.73;11.11;10.68;24.52;E;;;;;;;;2MASX J14245369+1702165,MCG +03-37-014,PGC 051480,SDSS J142453.68+170216.5;;; +IC4418;G;14:25:27.24;+25:31:34.6;Boo;0.94;0.80;96;15.10;;11.74;10.75;10.43;23.57;E;;;;;;;;2MASX J14252722+2531344,PGC 051510,SDSS J142527.24+253134.5;;; +IC4419;G;14:25:54.67;+16:37:57.1;Boo;0.79;0.52;148;16.06;;13.10;12.29;12.13;24.02;Sab;;;;;;;;2MASX J14255463+1637570,LEDA 084167,SDSS J142554.66+163757.0,SDSS J142554.66+163757.1,SDSS J142554.67+163757.1;;;B-Mag taken from LEDA. +IC4420;G;14:25:39.41;+25:22:42.1;Boo;0.67;0.37;18;15.50;;13.84;13.04;12.95;23.06;SBc;;;;;;;;2MASX J14253941+2522414,MCG +04-34-027,PGC 051520,SDSS J142539.40+252242.0,SDSS J142539.41+252242.1;;; +IC4421;G;14:28:31.31;-37:35:01.5;Cen;1.43;1.08;164;13.65;;10.30;9.59;9.34;23.02;E;;;;;;;;2MASX J14283128-3735017,ESO 385-027,ESO-LV 385-0270,MCG -06-32-006,PGC 051704;;; +IC4422;G;14:25:59.13;+30:28:25.4;Boo;0.74;0.65;142;15.30;;12.08;11.42;11.05;23.46;E;;;;;;;;2MASX J14255913+3028256,MCG +05-34-039,PGC 051530,SDSS J142559.12+302825.4;;HOLM 644B is a star.; +IC4423;G;14:26:17.74;+26:14:46.1;Boo;1.02;0.57;71;15.50;;12.30;11.57;11.30;23.54;Sbc;;;;;;;;2MASX J14261771+2614459,MCG +04-34-028,PGC 051549,SDSS J142617.73+261446.0,UGC 09247;;; +IC4424;Dup;14:27:32.37;+04:49:17.8;Vir;;;;;;;;;;;;;;;5619B;;;;;; +IC4425;G;14:26:44.18;+27:11:22.3;Boo;0.64;0.58;3;15.30;;12.39;11.74;11.40;22.93;SBb;;;;;;;;2MASX J14264421+2711217,PGC 051575,SDSS J142644.17+271122.3,SDSS J142644.18+271122.3;;; +IC4426;G;14:27:17.09;+16:49:51.5;Boo;0.69;0.65;5;15.60;;11.97;11.30;10.98;23.63;E;;;;;;;;2MASX J14271705+1649516,MCG +03-37-016,PGC 051607,SDSS J142717.09+164951.4;;; +IC4427;G;14:26:59.57;+26:51:50.3;Boo;0.86;0.35;116;15.40;;12.46;11.83;11.49;23.29;Sab;;;;;;;;2MASX J14265954+2651502,MCG +05-34-041,PGC 051591,SDSS J142659.56+265150.2;;; +IC4428;G;14:27:25.55;+16:11:27.0;Boo;0.76;0.35;49;15.71;;12.83;12.16;11.84;23.63;Sa;;;;;;;;2MASX J14272555+1611275,LEDA 084193,SDSS J142725.55+161126.9;;;B-Mag taken from LEDA. +IC4429;G;14:27:37.37;+16:53:59.5;Boo;1.02;0.61;96;15.40;;11.89;11.03;10.84;24.32;E;;;;;;;;2MASX J14273738+1653596,MCG +03-37-017,PGC 051637,SDSS J142737.36+165359.4,SDSS J142737.37+165359.5;;; +IC4430;G;14:29:19.40;-33:27:18.4;Cen;2.47;1.26;24;12.96;;9.57;8.85;8.59;23.65;S0;;;;;;;;2MASX J14291940-3327184,ESO 385-030,ESO-LV 385-0300,MCG -05-34-014,PGC 051763;;; +IC4431;Dup;14:27:09.50;+30:56:53.6;Boo;;;;;;;;;;;;;;;;1012;;;;; +IC4432;G;14:28:49.76;-39:33:07.9;Cen;0.85;0.22;47;16.37;;12.33;11.66;11.24;23.59;Sbc;;;;;;;;2MASX J14284975-3933077,ESO 326-025,PGC 051727;;; +IC4433;G;14:27:53.35;+16:11:44.0;Boo;0.48;0.34;44;15.30;;13.42;13.04;12.39;23.22;Sbc;;;;;;;;PGC 084202,SDSS J142753.34+161144.0;;; +IC4434;G;14:27:54.74;+16:12:25.8;Boo;0.64;0.46;6;16.25;;12.31;11.60;11.23;23.43;E;;;;;;;;PGC 051651,SDSS J142754.74+161225.9;;; +IC4435;G;14:27:24.28;+37:28:17.2;Boo;0.94;0.94;50;15.30;;11.61;10.92;10.60;23.81;E;;;;;;;;2MASX J14272425+3728170,MCG +06-32-037,PGC 051615,SDSS J142724.23+372817.0,SDSS J142724.23+372817.1,SDSS J142724.24+372817.1;;; +IC4436;G;14:27:58.18;+26:30:16.2;Boo;1.20;1.03;87;15.20;;11.58;10.92;10.56;24.00;E;;;;;;;;2MASX J14275816+2630166,MCG +05-34-045,PGC 051654,SDSS J142758.17+263016.1,SDSS J142758.18+263016.2;;; +IC4437;**;14:27:31.66;+41:30:11.6;Boo;;;;;;;;;;;;;;;;;;SDSS J142731.66+413011.5;;The IC identification is not certain.; +IC4438;G;14:28:34.47;+17:20:04.4;Boo;0.48;0.40;77;15.70;;13.46;12.62;12.65;23.07;Sbc;;;;;;;;2MASX J14283446+1720042,MCG +03-37-020,PGC 051709,SDSS J142834.46+172004.4,SDSS J142834.47+172004.4;;; +IC4439;G;14:28:40.04;+17:01:29.1;Boo;0.67;0.36;76;15.70;;13.75;12.67;12.46;23.30;Scd;;;;;;;;2MASX J14284004+1701294,PGC 051720,SDSS J142840.04+170129.1;;; +IC4440;G;14:28:59.24;+17:19:14.1;Boo;0.77;0.46;72;15.60;;12.30;11.54;11.13;23.74;S0-a;;;;;;;;2MASX J14285923+1719144,MCG +03-37-022,PGC 051734,SDSS J142859.23+171914.0;;; +IC4441;G;14:31:38.62;-43:25:06.4;Lup;1.95;1.53;83;12.25;11.55;9.54;8.86;8.60;22.10;SABb;;;;;;4444;;2MASX J14313860-4325060,ESO 272-014,ESO-LV 272-0140,IRAS 14284-4311,MCG -07-30-002,PGC 051905;;; +IC4442;G;14:28:45.27;+28:57:51.3;Boo;0.85;0.50;15;15.20;;11.96;11.31;11.01;23.26;SBa;;;;;;;;2MASX J14284530+2857507,MCG +05-34-050,PGC 051725,SDSS J142845.26+285751.2,SDSS J142845.27+285751.3,UGC 09287;;HOLM 652B is a star.; +IC4443;G;14:29:17.49;+16:10:53.6;Boo;0.62;0.28;12;16.25;;13.59;13.08;12.63;23.49;Sbc;;;;;;;;2MASX J14291747+1610536,LEDA 084220,SDSS J142917.43+161053.1;;;B-Mag taken from LEDA. +IC4444;Dup;14:31:38.62;-43:25:06.4;Lup;;;;;;;;;;;;;;;;4441;;;;; +IC4445;G;14:31:54.61;-46:02:07.1;Lup;1.19;0.45;154;14.99;;11.64;10.88;10.61;23.28;Scd;;;;;;;;2MASX J14315459-4602070,ESO 272-015,ESO-LV 272-0150,IRAS 14285-4548,PGC 051917,TYC 8278-476-1;;; +IC4446;G;14:29:01.32;+37:27:47.3;Boo;0.77;0.40;109;15.77;;13.78;13.13;13.05;23.46;Sc;;;;;;;;2MASX J14290128+3727473,MCG +06-32-044,PGC 051742,SDSS J142901.31+372747.2,SDSS J142901.31+372747.3,SDSS J142901.32+372747.3;;;B-Mag taken from LEDA. +IC4447;G;14:29:17.98;+30:49:56.0;Boo;0.82;0.67;174;14.70;;11.76;11.08;10.77;23.03;S0-a;;;;;;;;2MASX J14291797+3049559,MCG +05-34-056,PGC 051754,UGC 09306;;; +IC4448;G;14:40:27.96;-78:48:33.2;Aps;1.10;0.86;176;13.90;13.99;11.71;10.88;10.61;22.82;SBc;;;;;;;;2MASX J14402798-7848329,ESO 022-002,ESO-LV 22-0020,IRAS 14343-7835,PGC 052426;;; +IC4449;G;14:31:21.59;+15:14:27.1;Boo;0.72;0.41;115;15.72;;;;;23.82;IB;;;;;;;;2MASX J14312157+1514272,PGC 1479230,SDSS J143121.58+151427.0,SDSS J143121.58+151427.1;;;B-Mag taken from LEDA. +IC4450;G;14:32:12.34;+28:33:24.6;Boo;0.98;0.45;48;15.40;;12.23;11.50;11.13;23.32;Sbc;;;;;;;;2MASX J14321232+2833241,IRAS 14300+2846,MCG +05-34-065,PGC 051939,SDSS J143212.34+283324.5,SDSS J143212.34+283324.6,UGC 09349;;; +IC4451;G;14:34:37.14;-36:17:09.0;Cen;1.79;1.29;95;13.36;;9.90;9.25;8.99;23.49;E;;;;;;;;2MASX J14343713-3617092,ESO 385-046,ESO-LV 385-0460,MCG -06-32-010,PGC 052094;;; +IC4452;G;14:32:27.43;+27:25:38.7;Boo;0.50;0.47;78;14.90;;12.53;12.03;11.71;22.10;Sa;;;;;;;;2MASX J14322741+2725382,IRAS 14302+2738,PGC 051951,SDSS J143227.42+272538.7,SDSS J143227.43+272538.7;;; +IC4453;G;14:34:28.65;-27:31:06.8;Hya;2.09;0.97;160;13.05;;9.78;9.08;8.81;23.44;S0;;;;;;;;2MASX J14342863-2731067,ESO 512-004,ESO-LV 512-0040,MCG -04-34-020,PGC 052084;;; +IC4454;G;14:33:16.69;+17:42:42.5;Boo;0.45;0.32;0;16.70;;13.59;13.06;12.71;23.50;Sab;;;;;;;;2MASX J14331672+1742426,LEDA 1539655,SDSS J143316.68+174242.4;;;B-Mag taken from LEDA. +IC4455;Dup;14:33:43.62;-14:37:10.9;Lib;;;;;;;;;;;;;;;5664;;;;;; +IC4456;G;14:34:09.17;+16:11:02.5;Boo;0.58;0.21;129;16.08;;;;;23.47;Sbc;;;;;;;;2MASX J14340917+1611027,PGC 1502760,SDSS J143409.17+161102.5;;;B-Mag taken from LEDA. +IC4457;G;14:34:28.88;+18:13:28.9;Boo;0.46;0.39;85;16.00;;;;;23.03;Sbc;;;;;;;;2MASX J14342883+1813289,PGC 1553586,SDSS J143428.87+181328.8;;;B-Mag taken from LEDA. +IC4458;G;14:38:05.87;-39:30:21.5;Cen;0.59;0.26;70;17.03;;14.03;13.42;13.21;23.98;Sbc;;;;;;;;2MASX J14380587-3930217,ESO 327-003,PGC 052300;;;B-Mag taken from LEDA. +IC4459;G;14:34:32.20;+30:58:28.8;Boo;0.89;0.30;13;15.30;;12.60;11.86;11.59;23.23;Sb;;;;;;;;2MASX J14343217+3058290,MCG +05-34-074,PGC 052087,SDSS J143432.20+305828.7,SDSS J143432.20+305828.8;;HOLM 662B is a star.; +IC4460;G;14:34:36.53;+30:16:45.8;Boo;0.55;0.41;161;15.00;;13.40;12.95;12.49;22.96;Sa;;;;;;;;2MASX J14343656+3016460,MCG +05-34-075,PGC 052089,SDSS J143436.53+301645.7,SDSS J143436.53+301645.8;;; +IC4461;G;14:35:00.38;+26:31:54.9;Boo;0.41;0.28;117;15.30;;14.19;13.54;13.05;23.14;Sc;;;;;;;;2MASX J14350038+2631548,MCG +05-34-076,PGC 052120,SDSS J143500.38+263154.8,UGC 09384 NOTES01;;; +IC4462;G;14:35:01.90;+26:32:38.1;Boo;0.74;0.54;11;15.30;;12.80;12.21;12.10;23.25;Sb;;;;;;;;2MASX J14350187+2632378,MCG +05-34-077,PGC 052119,SDSS J143501.90+263238.0,UGC 09384 NED01;;Component 'a)' in UGC notes.; +IC4463;G;14:35:49.00;+16:01:09.4;Boo;0.81;0.61;30;15.40;;13.11;12.38;12.24;23.49;Sbc;;;;;;;;2MASX J14354899+1601096,PGC 052175,SDSS J143548.99+160109.3,SDSS J143549.00+160109.3;;; +IC4464;G;14:37:49.00;-36:52:40.8;Cen;1.68;0.67;62;13.64;;10.03;9.35;9.11;23.47;S0;;;;;;;;2MASX J14374900-3652409,ESO 385-050,ESO-LV 385-0500,MCG -06-32-011,PGC 052286;;; +IC4465;G;14:35:51.16;+15:34:22.5;Boo;0.56;0.23;80;16.53;;13.49;12.63;12.27;24.02;S0-a;;;;;;;;2MASX J14355115+1534226,IRAS 14335+1547,PGC 1488159,SDSS J143551.17+153422.6;;;B-Mag taken from LEDA. +IC4466;G;14:36:48.11;+18:20:37.6;Boo;1.00;1.00;14;15.50;;12.36;11.70;11.26;24.34;S0-a;;;;;;;;2MASX J14364808+1820372,PGC 052228,SDSS J143648.10+182037.5,SDSS J143648.10+182037.6;;Multiple SDSS entries describe this object.; +IC4467;G;14:36:53.67;+18:22:14.3;Boo;0.54;0.48;32;15.99;;12.57;11.95;11.53;23.31;Sa;;;;;;;;2MASX J14365363+1822142,LEDA 1557696,SDSS J143653.66+182214.2;;;B-Mag taken from LEDA. +IC4468;G;14:38:26.74;-22:22:03.4;Lib;2.30;0.54;158;13.78;;10.81;10.09;9.86;23.18;SBc;;;;;;;;2MASX J14382673-2222034,ESO 580-006,ESO-LV 580-0060,IRAS 14355-2209,MCG -04-35-001,PGC 052324;;; +IC4469;G;14:37:20.49;+18:14:57.6;Boo;1.67;0.22;109;15.60;;12.43;11.66;11.50;23.70;Sc;;;;;;;;2MASX J14372048+1814572,MCG +03-37-026,PGC 052258,SDSS J143720.46+181457.0,UGC 09414;;; +IC4470;G;14:28:22.89;+78:53:08.2;UMi;0.89;0.25;94;15.00;;11.83;11.12;10.87;22.77;Sb;;;;;;;;2MASX J14282277+7853078,MCG +13-10-019,PGC 051696;;; +IC4471;Dup;14:36:32.06;+41:41:09.2;Boo;;;;;;;;;;;;;;;5697;;;;;; +IC4472;G;14:40:10.84;-44:18:52.5;Lup;2.69;0.60;0;13.95;;10.36;9.53;9.16;23.65;Sc;;;;;;;;2MASX J14401087-4418526,ESO 272-023,ESO-LV 272-0230,IRAS 14369-4406,MCG -07-30-005,PGC 052410;;; +IC4473;GGroup;14:37:54.14;+15:51:42.0;Boo;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4473 NED01;G;14:37:54.39;+15:51:38.5;Boo;0.74;0.59;1;15.97;;;;;23.90;SBb;;;;;;;;2MASS J14375438+1551384,SDSS J143754.38+155138.4,SDSS J143754.38+155138.5;;;B-Mag taken from LEDA. NED coordinates appear to be wrong. +IC4473 NED02;G;14:37:54.05;+15:51:49.2;Boo;0.93;0.59;178;15.20;;12.26;11.63;11.24;23.61;SBb;;;;;;;;2MASX J14375402+1551490,MCG +03-37-027,PGC 052287,SDSS J143754.04+155149.1;;; +IC4473 NED03;G;14:37:54.22;+15:52:12.6;Boo;;;;;;;;;;;;;;;;;;;;;No data available in LEDA +IC4473 NED04;G;14:37:53.60;+15:51:29.4;Boo;;;;;;;;;;;;;;;;;;SDSS J143753.59+155129.4;;;No data available in LEDA +IC4474;G;14:38:22.30;+23:25:43.5;Boo;0.65;0.52;134;15.87;;;;;23.55;SBab;;;;;;;;2MASX J14382229+2325435,PGC 1687216,SDSS J143822.29+232543.5,SDSS J143822.30+232543.5;;;B-Mag taken from LEDA. +IC4475;G;14:38:23.26;+23:20:00.8;Boo;1.05;0.88;26;15.00;;11.41;10.74;10.37;23.77;E;;;;;;;;2MASX J14382325+2320005,MCG +04-35-001,PGC 052325,SDSS J143823.26+232000.8;;; +IC4476;G;14:39:51.85;-16:14:41.1;Lib;0.76;0.55;164;15.17;;11.75;11.07;10.81;23.46;S0;;;;;;;;2MASX J14395187-1614405,LEDA 170358;;; +IC4477;G;14:38:35.24;+28:27:33.8;Boo;0.60;0.34;16;15.50;;12.84;12.05;11.68;22.84;SBb;;;;;;;;2MASX J14383522+2827334,PGC 052327,SDSS J143835.24+282733.7;;; +IC4478;G;14:39:12.69;+15:52:38.6;Boo;0.58;0.49;61;15.30;;12.31;11.70;11.54;23.04;E;;;;;;;;2MASX J14391270+1552385,PGC 052363,SDSS J143912.68+155238.5,SDSS J143912.68+155238.6;;; +IC4479;G;14:38:45.90;+28:30:19.6;Boo;1.16;1.07;17;14.80;;11.78;11.06;10.91;23.88;Sc;;;;;;;;2MASX J14384590+2830195,IRAS 14365+2842,MCG +05-35-001,PGC 052338,SDSS J143845.90+283019.5,SDSS J143845.90+283019.6,UGC 09433;;; +IC4480;G;14:39:45.63;+18:29:32.5;Boo;0.64;0.58;65;15.40;;13.06;12.31;12.34;23.22;SBbc;;;;;;;;2MASX J14394564+1829329,MCG +03-37-034,PGC 052394,SDSS J143945.62+182932.4,SDSS J143945.63+182932.4;;; +IC4481;G;14:40:10.11;+16:08:29.2;Boo;0.50;0.35;68;16.59;;;;;23.62;SBbc;;;;;;;;2MASX J14401008+1608288,PGC 1501729,SDSS J144010.11+160829.1,SDSS J144010.11+160829.2;;;B-Mag taken from LEDA. +IC4482;G;14:40:12.46;+18:56:35.8;Boo;0.62;0.56;25;15.50;;13.59;12.98;12.69;23.32;Sbc;;;;;;;;2MASX J14401238+1856349,PGC 052408,SDSS J144012.45+185635.8,SDSS J144012.46+185635.8;;; +IC4483;G;14:40:19.51;+16:41:06.8;Boo;1.34;0.46;25;15.00;;12.10;11.42;11.09;23.61;Sb;;;;;;;;2MASX J14401950+1641068,MCG +03-37-035,PGC 052417,SDSS J144019.51+164106.4,UGC 09455;;; +IC4484;G;14:47:43.88;-73:18:21.4;Aps;2.96;0.30;132;14.23;;11.19;10.29;;23.47;Sc;;;;;;;;2MASX J14474389-7318214,ESO 041-009,ESO-LV 41-0900,IRAS 14427-7305,PGC 052837;;Stars superposed.; +IC4485;G;14:40:31.46;+28:40:07.9;Boo;0.64;0.37;43;15.70;;12.82;12.18;11.79;23.25;SBb;;;;;;;;2MASX J14403143+2840081,PGC 052419,SDSS J144031.45+284007.8;;; +IC4486;G;14:41:40.79;+18:33:26.0;Boo;0.52;0.32;142;15.20;;12.51;11.65;11.51;23.09;E;;;;;;;;2MASX J14414075+1833256,PGC 052481,SDSS J144140.78+183325.9;;; +IC4487;G;14:41:52.19;+18:34:37.2;Boo;0.68;0.52;22;15.65;;;;;23.38;Sbc;;;;;;;;2MASX J14415218+1834372,MCG +03-37-037,PGC 052496,SDSS J144152.19+183437.2;;;B-Mag taken from LEDA. +IC4488;G;14:42:52.58;+18:37:13.0;Boo;0.61;0.39;9;15.84;;;;;23.44;Sbc;;;;;;;;2MASX J14425258+1837129,PGC 1564980,SDSS J144252.57+183712.9,SDSS J144252.58+183712.9;;;B-Mag taken from LEDA. +IC4489;G;14:43:15.95;+18:31:43.0;Boo;0.42;0.36;122;16.78;;;;;23.39;Sc;;;;;;;;2MASX J14431593+1831429,PGC 1562198,SDSS J144315.94+183142.9;;;B-Mag taken from LEDA. +IC4490;**;14:45:21.27;-36:10:24.1;Cen;;;;;;;;;;;;;;;;;;;;; +IC4491;Dup;14:47:25.69;-13:42:58.1;Lib;;;;;;;;;;;;;;;;1055;;;;; +IC4492;G;14:42:33.87;+37:27:08.4;Boo;0.63;0.50;61;15.60;;12.20;11.48;11.42;23.18;E;;;;;;;;2MASX J14423382+3727081,MCG +06-32-088,PGC 052536,SDSS J144233.86+372708.3,SDSS J144233.86+372708.4,SDSS J144233.87+372708.4;;; +IC4493;Dup;14:44:20.80;+12:07:47.0;Boo;;;;;;;;;;;;;;;5747;;;;;; +IC4494;G;14:44:25.54;+15:33:05.0;Boo;0.93;0.39;136;15.20;;12.88;12.18;12.04;23.83;S0-a;;;;;;;;2MASX J14442552+1533055,MCG +03-38-003,PGC 052644,SDSS J144425.53+153304.9;;The IC identification is not certain.; +IC4495;G;14:44:14.57;+23:33:30.2;Boo;0.78;0.44;10;15.70;;12.90;12.17;11.83;23.49;SBb;;;;;;;;2MASX J14441459+2333301,PGC 052634,SDSS J144414.57+233330.1,SDSS J144414.57+233330.2;;; +IC4496;G;14:43:54.58;+33:24:23.6;Boo;0.85;0.69;45;15.00;;11.71;11.02;10.77;23.29;S0;;;;;;;;2MASX J14435459+3324236,MCG +06-32-090,PGC 052610,SDSS J144354.57+332423.5,SDSS J144354.58+332423.6;;; +IC4497;G;14:44:20.86;+28:33:03.7;Boo;0.84;0.81;134;15.10;;12.69;12.10;12.00;23.73;E;;;;;;;;2MASX J14442082+2833028,MCG +05-35-009,PGC 052636,SDSS J144420.86+283303.6,SDSS J144420.86+283303.7;;; +IC4498;G;14:45:00.79;+26:18:04.1;Boo;0.75;0.70;17;15.10;;11.98;11.23;;23.10;E-S0;;;;;;;;2MASX J14450081+2618042,MCG +05-35-010,PGC 052667,SDSS J144500.79+261804.0;;; +IC4499;GCl;15:00:19.25;-82:12:48.6;Aps;5.10;;;;8.56;;;;;;;;;;;;;MWSC 2263;;; +IC4500;G;14:44:35.66;+37:28:56.9;Boo;0.56;0.44;74;15.60;;;;;22.91;Sbc;;;;;;;;MCG +06-32-091,PGC 052656,SDSS J144435.65+372856.8,SDSS J144435.66+372856.9;;; +IC4501;G;14:47:25.47;-22:24:21.7;Lib;1.03;0.75;59;14.27;;12.30;11.62;11.10;22.91;Sab;;;;;;;;2MASX J14472546-2224217,ESO 580-025,ESO-LV 580-0250,IRAS 14445-2211,MCG -04-35-009,PGC 052810;;; +IC4502;G;14:45:15.83;+37:18:01.3;Boo;0.64;0.33;110;11.30;;12.44;11.74;11.49;23.38;Sb;;;;;;;;2MASX J14451579+3718016,PGC 2097463,SDSS J144515.83+371801.3;;; +IC4503;G;14:46:39.51;+16:08:47.2;Boo;1.20;1.05;6;14.90;;11.85;11.12;10.87;23.95;E;;;;;;;;2MASX J14463952+1608470,MCG +03-38-010,PGC 052763,SDSS J144639.50+160847.1,SDSS J144639.50+160847.2;;; +IC4504;G;14:46:36.98;+31:41:57.1;Boo;0.51;0.29;98;15.40;;12.27;11.65;11.43;;S0;;;;;;;;2MASX J14463697+3141571,PGC 052750,SDSS J144636.97+314157.1,SDSS J144636.98+314157.1;;; +IC4505;G;14:46:33.37;+33:24:31.0;Boo;1.13;0.78;176;15.10;;11.38;10.81;10.49;23.79;E-S0;;;;;;;;2MASX J14463337+3324311,MCG +06-32-099,PGC 052754,SDSS J144633.36+332430.9,SDSS J144633.36+332431.0,SDSS J144633.37+332430.9,SDSS J144633.37+332431.0,UGC 09520;;; +IC4506;G;14:46:39.94;+33:24:04.4;Boo;0.49;0.44;2;15.50;;12.88;12.10;11.88;22.74;S0;;;;;;;;2MASX J14463992+3324042,PGC 052764,SDSS J144639.93+332404.3,SDSS J144639.93+332404.4,SDSS J144639.94+332404.4;;; +IC4507;G;14:47:42.16;+18:27:20.6;Boo;0.68;0.41;149;15.70;;13.09;12.46;12.06;23.34;Sb;;;;;;;;2MASX J14474216+1827204,MCG +03-38-016,PGC 052834,SDSS J144742.16+182720.6;;; +IC4508;G;14:47:51.41;+31:46:05.8;Boo;0.76;0.60;31;15.56;;12.51;11.78;11.69;23.62;S0-a;;;;;;;;2MASX J14475075+3145531,2MASX J14475137+3146051,PGC 052843,SDSS J144751.40+314605.8;;;B-Mag taken from LEDA. +IC4509;G;14:48:27.06;+31:47:29.7;Boo;0.83;0.20;46;14.70;;12.82;12.25;12.18;22.26;Sb;;;;;;;;2MASX J14482711+3147302,MCG +05-35-016,PGC 052874,SDSS J144827.05+314729.6,SDSS J144827.06+314729.7,UGC 09536;;; +IC4510;Other;14:50:40.71;-20:43:51.2;Lib;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4511;Other;14:52:05.28;-40:29:41.7;Cen;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4512;G;14:49:54.30;+27:42:02.9;Boo;0.55;0.50;162;16.12;;14.40;13.77;13.66;23.70;Sc;;;;;;;;2MASX J14495426+2742036,PGC 1815627,SDSS J144954.29+274202.9;;;B-Mag taken from LEDA. +IC4513;Other;14:52:16.83;-20:43:40.5;Lib;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4514;G;14:50:55.44;+27:34:42.7;Boo;0.83;0.68;124;17.63;16.98;12.31;11.64;11.55;23.34;Sab;;;;;;;;2MASX J14505541+2734432,MCG +05-35-019,PGC 053010,SDSS J145055.43+273442.6,UGC 09557;;; +IC4515;G;14:51:06.67;+37:29:41.3;Boo;0.98;0.70;61;15.60;;12.41;11.64;11.35;23.99;Sa;;;;;;;;2MASX J14510670+3729414,MCG +06-33-003,PGC 053026,SDSS J145106.66+372941.2,SDSS J145106.67+372941.2,SDSS J145106.67+372941.3;;; +IC4516;G;14:54:23.45;+16:21:19.0;Boo;1.36;1.09;158;14.53;14.22;11.03;10.35;10.06;24.05;E;;;;;;;;2MASX J14542347+1621187,MCG +03-38-049,PGC 053274,SDSS J145423.44+162119.0,UGC 09587;;;B-Mag taken from LEDA. +IC4517;G;14:54:35.09;+23:38:35.8;Boo;1.12;0.30;156;15.50;;11.78;11.08;10.66;23.43;SBb;;;;;;;;2MASX J14543506+2338359,PGC 053291,SDSS J145435.08+233835.8,SDSS J145435.09+233835.8;;; +IC4518;GPair;14:57:42.90;-43:07:54.0;Lup;2.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4518A;G;14:57:41.18;-43:07:55.6;Lup;0.92;0.32;135;16.64;;10.75;9.92;9.58;;Sc;;;;;;4518W;;MCG -07-31-001,PGC 053466;;Western component of an interacting double system.; +IC4518B;G;14:57:44.46;-43:07:52.9;Lup;1.26;0.24;106;16.46;;10.33;9.57;9.48;24.40;Sc;;;;;;4518E;;2MASX J14574441-4307526,MCG -07-31-002,PGC 053467;;Eastern component of an interacting double system.; +IC4519;G;14:54:44.54;+37:24:45.8;Boo;0.89;0.48;124;15.30;;11.88;11.28;11.05;24.07;S0-a;;;;;;;;2MASX J14544451+3724455,MCG +06-33-007,PGC 053311,SDSS J145444.53+372445.7,SDSS J145444.54+372445.8;;; +IC4520;G;14:55:07.01;+33:43:28.0;Boo;0.51;0.41;120;15.00;;12.85;12.05;11.72;22.54;Sb;;;;;;;;2MASX J14550703+3343279,IRAS 14530+3355,MCG +06-33-008,PGC 053328,SDSS J145507.00+334328.0;;; +IC4521;G;14:59:27.45;+25:35:02.7;Boo;0.66;0.44;114;15.30;;12.42;11.71;11.45;22.92;Sc;;;;;;;;2MASX J14592740+2535026,IRAS 14572+2546,MCG +04-35-022,PGC 053558,SDSS J145927.44+253502.7;;; +IC4522;G;15:11:28.92;-75:51:35.9;Aps;3.02;0.86;112;13.10;;10.61;10.02;9.64;;Sb;;;;;;;;2MASX J15112889-7551360,ESO 042-002,IRAS 15056-7540,PGC 054216;;; +IC4523;G;15:05:10.54;-43:30:34.3;Lup;1.65;1.49;119;13.20;;10.72;10.02;9.67;23.41;SABc;;;;;;;;2MASX J15051054-4330340,ESO 273-015,IRAS 15018-4318,MCG -07-31-005,PGC 053845;;; +IC4524;G;15:02:06.36;+25:36:05.4;Boo;0.64;0.48;19;15.60;;;;;22.98;SBbc;;;;;;;;2MASX J15020635+2536048,PGC 1742463,SDSS J150206.35+253605.4,SDSS J150206.36+253605.4;;; +IC4525;G;15:02:24.86;+25:38:18.6;Boo;0.58;0.52;31;15.70;;13.49;12.74;12.09;23.10;SBd;;;;;;;;2MASX J15022483+2538188,MCG +04-35-025,PGC 053705,SDSS J150224.85+253818.5;;; +IC4526;G;15:02:38.20;+23:21:01.6;Boo;0.50;0.37;19;17.02;;12.95;12.33;11.81;23.69;Sm;;;;;;;;2MASX J15023819+2321019,MCG +04-35-026,PGC 053707,SDSS J150238.19+232101.5,SDSS J150238.20+232101.5,SDSS J150238.20+232101.6,UGC 09673 NOTES01;;; +IC4527;G;15:05:41.02;-42:26:58.3;Lup;1.43;0.51;49;15.00;;10.84;10.09;9.78;22.66;Sbc;;;;;;;;2MASX J15054101-4226581,ESO 328-015,IRAS 15023-4215,MCG -07-31-006,PGC 053879;;; +IC4528;G;15:01:33.37;+49:06:44.9;Boo;0.81;0.60;155;15.30;;12.65;12.10;11.73;23.15;Sb;;;;;;;;MCG +08-27-055,PGC 053658,SDSS J150133.35+490644.7,SDSS J150133.35+490644.8,SDSS J150133.36+490644.8,SDSS J150133.36+490644.9,SDSS J150133.37+490644.9;;; +IC4529;G;15:06:25.98;-43:13:57.5;Lup;0.77;0.46;6;14.80;;;;;22.83;Sbc;;;;;;;;2MASX J15062599-4313575,IRAS 15031-4302,MCG -07-31-007,PGC 053926;;;B-Mag taken from LEDA. +IC4530;G;15:03:45.31;+26:06:03.1;Boo;0.91;0.16;19;15.30;;11.82;11.13;10.87;22.71;SBb;;;;;;;;2MASX J15034529+2606026,MCG +04-36-001,PGC 053752,SDSS J150345.30+260603.0,UGC 09679;;; +IC4531;G;15:04:26.44;+23:24:53.8;Boo;0.92;0.53;178;15.60;;12.36;11.81;11.50;24.22;E;;;;;;;;2MASX J15042640+2324537,PGC 053792,SDSS J150426.43+232453.8,SDSS J150426.44+232453.8;;; +IC4532;G;15:04:53.81;+23:15:23.8;Boo;0.86;0.58;92;15.60;;12.13;11.37;11.20;23.99;E;;;;;;;;2MASX J15045379+2315237,PGC 053828,SDSS J150453.80+231523.8;;; +IC4533;G;15:04:30.34;+27:47:34.3;Boo;0.98;0.66;154;14.90;;11.97;11.24;10.93;23.66;SABa;;;;;;;;2MASX J15043037+2747340,MCG +05-36-004,PGC 053803,SDSS J150430.33+274734.2,UGC 09687;;; +IC4534;G;15:06:41.77;+23:38:30.9;Boo;1.45;0.79;164;14.70;;11.09;10.39;10.17;23.80;S0;;;;;;;;2MASX J15064176+2338312,MCG +04-36-013,PGC 053943,SDSS J150641.77+233830.9,UGC 09713;;; +IC4535;G;15:08:41.60;+37:34:13.2;Boo;0.54;0.23;162;15.99;;13.04;12.31;12.12;23.07;SBb;;;;;;;;2MASX J15084159+3734129,PGC 2103997,SDSS J150841.59+373413.1,SDSS J150841.60+373413.2;;;B-Mag taken from LEDA. +IC4536;G;15:13:17.23;-18:08:14.2;Lib;1.32;0.89;4;13.71;;;;;22.72;SBcd;;;;;;;;ESO 581-024,ESO-LV 581-0240,IRAS 15104-1756,MCG -03-39-002,PGC 054324,UGCA 401;;The 2MASX position applies to a knot north of the nucleus.; +IC4537;G;15:17:32.44;+02:02:50.6;Se1;0.75;0.43;45;15.60;;12.61;11.99;11.50;23.98;S0-a;;;;;;;;2MASX J15173246+0202503,PGC 054583,SDSS J151732.44+020250.6;;; +IC4538;G;15:21:11.61;-23:39:30.3;Lib;2.48;1.95;55;12.83;;10.44;9.77;9.50;23.39;SABc;;;;;;;;2MASX J15211162-2339302,ESO 514-010,ESO-LV 514-0100,IRAS 15182-2328,MCG -04-36-013,PGC 054776,UGCA 406;;; +IC4539;G;15:18:31.15;+32:23:34.3;CrB;0.55;0.45;153;15.77;;13.01;12.38;12.13;23.16;SABb;;;;;;;;2MASX J15183111+3223345,MCG +06-34-003,PGC 054642,SDSS J151831.15+322334.2,SDSS J151831.15+322334.3;;;B-Mag taken from LEDA. +IC4540;Other;15:20:03.11;+01:47:11.7;Se1;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4541;G;15:29:55.57;-70:35:05.8;Aps;1.74;0.53;151;13.95;;10.20;9.42;9.13;23.17;Sb;;;;;;;;2MASX J15295558-7035059,ESO 068-006,IRAS 15249-7025,PGC 055252;;; +IC4542;G;15:22:05.39;+33:08:54.9;Boo;1.05;0.65;102;15.10;;11.82;11.16;10.80;23.95;S0-a;;;;;;;;2MASX J15220538+3308547,MCG +06-34-006,PGC 054855,SDSS J152205.39+330854.9;;Brighter component of interacting pair.; +IC4543;Dup;15:24:59.53;+13:26:42.3;Se1;;;;;;;;;;;;;;;;1118;;;;; +IC4544;Nova;15:29:22.99;-50:35:00.4;Nor;;;;7.00;;16.11;15.63;15.43;;;;;;;;;;2MASS J15292318-5035007,HD 137677;;Position is from P. Woudt (w.r.t. six 2MASS stars) via B. Skiff.; +IC4545;G;15:41:27.78;-81:37:33.4;Aps;2.02;0.85;166;14.04;;12.71;11.73;11.40;23.55;SABc;;;;;;;;2MASX J15412906-8138012,ESO 022-011,ESO-LV 22-0110,IRAS 15328-8127,PGC 055799;;; +IC4546;G;15:26:58.41;+28:51:09.4;CrB;0.70;0.60;104;16.35;15.54;12.57;11.97;11.67;23.19;Sc;;;;;;;;2MASX J15265841+2851093,MCG +05-36-031,PGC 055115,SDSS J152658.40+285109.3,SDSS J152658.40+285109.4,SDSS J152658.41+285109.4;;; +IC4547;G;15:27:15.07;+28:47:20.3;CrB;0.80;0.57;138;15.40;;12.29;11.64;11.55;23.72;E-S0;;;;;;;;2MASX J15271508+2847203,PGC 055130,SDSS J152715.06+284720.3,SDSS J152715.07+284720.3,SDSS J152715.07+284720.4;;; +IC4548;G;15:27:24.02;+28:50:59.4;CrB;0.48;0.33;11;16.17;;13.14;12.40;12.14;23.80;E;;;;;;;;2MASX J15272399+2850593,PGC 055136,SDSS J152724.01+285059.4;;; +IC4549;G;15:29:14.57;+32:49:32.0;Boo;0.70;0.23;96;15.50;;12.44;11.67;11.31;22.69;Sb;;;;;;;;2MASX J15291493+3249306,IRAS 15272+3259,MCG +06-34-011,PGC 055217,SDSS J152914.57+324932.0;;; +IC4550;Dup;15:35:28.57;-50:39:35.0;Nor;;;;;;;;;;;;;;;5946;;;;;; +IC4551;Dup;15:37:36.22;+05:58:26.5;Se1;;;;;;;;;;;;;;;5964;;;;;; +IC4552;G;15:38:54.89;+04:34:59.0;Se1;1.00;0.94;70;14.40;;11.49;10.80;10.51;22.95;Sc;;;;;;;;2MASX J15385489+0434589,IRAS 15364+0444,MCG +01-40-009,PGC 055687,UGC 09945;;The IC identification is not certain.; +IC4553;G;15:34:57.25;+23:30:11.3;Se1;1.11;0.72;96;14.76;13.88;11.04;10.31;9.85;22.53;Sm;;;;;;1127;;2MASX J15345727+2330104,IRAS 15327+2340,MCG +04-37-005,PGC 055497,SDSS J153457.20+233013.2,UGC 09913;;IC 4554 is another galaxy 2 arcmin southeast of Arp 220 = IC 4553.; +IC4554;G;15:35:04.83;+23:28:45.4;Se1;0.47;0.33;151;16.09;;12.98;12.44;11.98;22.99;Sab;;;;;;;;2MASX J15350481+2328457,LEDA 214390,SDSS J153504.83+232845.4;;;B-Mag taken from LEDA. +IC4555;G;15:48:14.81;-78:10:43.9;Aps;2.14;0.46;62;13.55;;11.38;10.88;10.68;22.68;SBc;;;;;;;;2MASX J15481484-7810438,ESO 022-012,ESO-LV 22-0120,IRAS 15411-7801,PGC 056077;;; +IC4556;G;15:35:22.45;+25:17:49.7;Se1;1.17;1.06;141;14.80;;11.19;10.49;10.22;23.76;E;;;;;;;;2MASX J15352244+2517494,MCG +04-37-007,PGC 055523,SDSS J153522.45+251749.6,SDSS J153522.46+251749.7;;; +IC4557;G;15:34:36.93;+39:43:44.0;Boo;0.52;0.36;137;15.70;;13.01;12.36;12.15;22.82;Sbc;;;;;;;;2MASX J15343692+3943435,PGC 055483,SDSS J153436.92+394343.9;;; +IC4558;G;15:35:46.20;+25:20:45.2;Se1;0.45;0.28;158;15.60;;13.01;12.33;11.98;22.66;Sb;;;;;;;;2MASX J15354620+2520449,PGC 055537,SDSS J153546.20+252045.1,SDSS J153546.20+252045.2;;; +IC4559;G;15:35:53.52;+25:20:28.1;Se1;0.64;0.44;70;15.10;;11.86;11.06;10.83;23.13;E;;;;;;;;2MASX J15355350+2520278,MCG +04-37-008,PGC 055553,SDSS J153553.52+252028.0,SDSS J153553.52+252028.1;;; +IC4560;G;15:35:54.08;+39:48:50.8;Boo;0.61;0.35;104;16.39;;12.39;11.88;11.60;24.04;S0;;;;;;;;2MASX J15355410+3948512,LEDA 214393,SDSS J153554.06+394851.0,SDSS J153554.07+394851.2;;;B-Mag taken from LEDA. +IC4561;G;15:36:47.07;+25:25:00.5;Se1;0.83;0.45;129;15.20;;11.85;11.18;10.95;23.05;Sb;;;;;;;;2MASX J15364705+2525004,MCG +04-37-011,PGC 055610,SDSS J153647.06+252500.5,SDSS J153647.07+252500.5;;; +IC4562;G;15:35:57.00;+43:29:35.7;Boo;1.19;1.09;55;13.80;;10.50;9.78;9.54;23.10;E;;;;;;;;2MASX J15355700+4329351,MCG +07-32-034,PGC 055559,SDSS J153557.00+432935.6,UGC 09928;;; +IC4563;G;15:36:03.68;+39:49:53.5;Boo;1.06;0.54;163;15.10;;;;;23.65;S0-a;;;;;;;;MCG +07-32-033,PGC 055565,SDSS J153603.68+394953.3,SDSS J153603.68+394953.4,SDSS J153603.69+394953.5;;; +IC4564;G;15:36:27.06;+43:31:07.6;Boo;1.20;0.44;71;14.40;;11.37;10.68;10.44;22.79;Sc;;;;;;;;2MASX J15362709+4331075,IRAS 15347+4340,MCG +07-32-036,PGC 055584,SDSS J153627.05+433107.5,SDSS J153627.05+433107.6,SDSS J153627.06+433107.6,UGC 09930;;; +IC4565;G;15:36:35.13;+43:25:29.6;Boo;0.80;0.46;11;14.80;;12.83;12.01;12.01;22.78;Sc;;;;;;;;2MASX J15363521+4325326,MCG +07-32-037,PGC 055592,SDSS J153635.12+432529.5,SDSS J153635.12+432529.6,SDSS J153635.13+432529.6,UGC 09931;;; +IC4566;G;15:36:42.16;+43:32:21.6;Boo;1.35;0.89;163;14.30;;11.16;10.46;10.16;23.23;Sb;;;;;;;;2MASX J15364216+4332217,MCG +07-32-038,PGC 055601,SDSS J153642.16+433221.5,SDSS J153642.16+433221.6,UGC 09933;;; +IC4567;G;15:37:13.27;+43:17:53.9;Boo;1.34;0.96;131;13.50;;11.02;10.34;10.02;22.73;Sc;;;;;;;;2MASX J15371331+4317544,IRAS 15354+4327,MCG +07-32-040,PGC 055620,SDSS J153713.26+431753.9,SDSS J153713.27+431753.9,UGC 09940;;; +IC4568;G;15:40:07.70;+28:09:08.2;CrB;0.54;0.25;39;15.30;;12.44;11.86;11.55;;Sb;;;;;;;;2MASX J15400772+2809082,PGC 055746,SDSS J154007.70+280908.2;;; +IC4569;G;15:40:48.38;+28:17:31.5;CrB;0.91;0.82;115;15.00;;11.57;10.89;10.63;23.52;E;;;;;;;;2MASX J15404835+2817314,MCG +05-37-013,PGC 055783,SDSS J154048.37+281731.5;;; +IC4570;G;15:41:22.59;+28:13:47.1;CrB;0.76;0.67;178;15.10;;12.52;11.68;11.53;23.09;SABc;;;;;;;;2MASX J15412255+2813472,MCG +05-37-014,PGC 055797,SDSS J154122.58+281347.1,UGC 09975;;; +IC4571;G;15:48:51.50;-67:19:24.5;TrA;1.58;0.57;139;14.64;;10.61;9.82;9.55;22.94;SBb;;;;;;;;2MASX J15485148-6719243,ESO 099-011,IRAS 15440-6710,PGC 056106;;; +IC4572;G;15:41:54.19;+28:08:02.4;CrB;1.16;0.78;76;15.00;;11.59;10.88;10.67;23.59;SBa;;;;;;;;2MASX J15415419+2808027,MCG +05-37-016,PGC 055817,SDSS J154154.19+280802.4;;; +IC4573;G;15:42:12.34;+23:47:59.9;Se1;0.62;0.27;138;15.50;;13.22;12.56;12.29;22.90;Sc;;;;;;;;2MASX J15421227+2348005,PGC 055825,SDSS J154212.33+234759.8,SDSS J154212.34+234759.9;;; +IC4574;G;15:41:59.24;+28:14:25.2;CrB;0.63;0.36;23;15.70;;14.39;13.73;13.83;23.29;SBa;;;;;;;;2MASX J15415925+2814247,PGC 055820,SDSS J154159.23+281425.2,SDSS J154159.24+281425.2;;; +IC4575;G;15:42:19.65;+23:48:27.5;Se1;0.50;0.35;84;15.50;;12.54;11.75;11.48;22.66;Sa;;;;;;;;2MASX J15421963+2348275,PGC 055828,SDSS J154219.64+234827.5;;; +IC4576;G;15:42:35.50;+23:40:12.2;Se1;1.39;0.90;79;14.80;;11.34;10.70;10.48;24.15;E;;;;;;;;2MASX J15423550+2340124,PGC 055840,SDSS J154235.49+234012.1,SDSS J154235.50+234012.1,SDSS J154235.51+234012.2;;; +IC4577;G;15:42:45.56;+23:47:33.5;Se1;0.58;0.49;145;15.40;;12.11;11.62;11.08;23.00;E;;;;;;;;2MASX J15424555+2347334,PGC 055848,SDSS J154245.54+234733.4,SDSS J154245.56+234733.4,SDSS J154245.56+234733.5;;; +IC4578;G;15:53:10.66;-74:49:31.0;Aps;1.63;0.62;139;13.90;;10.87;10.34;9.98;23.06;SBb;;;;;;;;2MASX J15531068-7449310,ESO 042-013,IRAS 15471-7440,PGC 056305;;; +IC4579;G;15:42:51.51;+23:46:23.4;Se1;0.55;0.43;72;15.50;;12.37;11.60;11.37;23.08;E;;;;;;;;2MASX J15425152+2346234,PGC 055852,SDSS J154251.49+234623.4,SDSS J154251.51+234623.4;;; +IC4580;G;15:43:14.24;+28:21:24.6;CrB;0.98;0.48;164;15.40;;12.40;11.63;11.37;23.86;S0-a;;;;;;;;2MASX J15431427+2821218,PGC 055862,SDSS J154314.23+282124.5;;; +IC4581;G;15:44:01.52;+28:16:37.3;CrB;0.79;0.60;24;15.30;;12.63;12.10;11.77;23.25;Sc;;;;;;;;2MASX J15440148+2816369,IRAS 15419+2826,MCG +05-37-019,PGC 055893,SDSS J154401.51+281637.2,SDSS J154401.52+281637.2,SDSS J154401.52+281637.3;;; +IC4582;G;15:45:39.45;+28:05:19.2;CrB;1.20;0.31;172;14.90;;11.69;10.90;10.57;22.98;SBbc;;;;;;;;2MASX J15453941+2805193,IRAS 15435+2814,MCG +05-37-020,PGC 055967,SDSS J154539.44+280519.1,UGC 10021;;Multiple SDSS entries describe this object.; +IC4583;G;15:46:21.94;+23:48:32.5;Se1;1.21;0.28;39;15.10;;11.44;10.74;10.41;23.23;Sab;;;;;;;;2MASX J15462194+2348327,MCG +04-37-032,PGC 055999,SDSS J154621.93+234832.5,SDSS J154621.94+234832.5;;; +IC4584;G;16:00:12.26;-66:22:59.8;TrA;1.96;1.64;90;13.44;;10.55;9.96;9.61;25.83;Sc;;;;;;;;2MASX J16001226-6622598,ESO 100-004,IRAS 15554-6614,PGC 056627;;; +IC4585;G;16:00:17.64;-66:19:20.2;TrA;1.58;0.76;56;13.00;;10.43;9.69;9.74;22.22;SBb;;;;;;;;2MASX J16001729-6619189,ESO 100-005,IRAS 15555-6610,PGC 056630;;; +IC4586;Dup;15:55:57.40;+05:55:54.8;Se1;;;;;;;;;;;;;;;6014;;;;;; +IC4587;G;15:59:51.61;+25:56:26.3;CrB;0.83;0.56;98;15.50;;12.36;11.52;11.41;24.20;E;;;;;;;;2MASX J15595161+2556263,PGC 056614,SDSS J155951.61+255626.2,SDSS J155951.61+255626.3;;; +IC4588;G;16:05:04.25;+23:55:01.7;Se1;0.50;0.39;141;15.87;;12.54;11.67;11.36;23.41;E;;;;;;;;2MASX J16050427+2355015,PGC 057025,SDSS J160504.24+235501.6,SDSS J160504.25+235501.7;;; +IC4589;*;16:07:24.59;-06:23:07.1;Oph;;;;;;;;;;;;;;;;;;;;; +IC4590;G;16:08:21.15;+28:28:43.3;CrB;0.65;0.43;158;15.61;14.90;12.53;11.72;11.54;23.50;E;;;;;;;;2MASX J16082116+2828436,PGC 057260,SDSS J160821.15+282843.3;;; +IC4591;HII;16:12:18.16;-27:55:39.9;Sco;12.00;10.00;;;;;;;;;;;;;;;;LBN 1096;;Star embedded in nebulosity.; +IC4592;RfN;16:11:58.67;-19:27:16.8;Sco;60.00;40.00;;3.90;;;;;;;;;;;;;;LBN 1113;;Very large nebula + bright star. Position on nu2 Scorpii.; +IC4593;PN;16:11:44.50;+12:04:17.0;Her;0.22;;;10.93;10.70;;;;;;;11.05;11.20;;;;BD +12 2966,HD 145649;PK 25+40 1,PN G025.3+40.8,TYC 953-381-1;;; +IC4594;Dup;16:11:22.59;+23:57:54.0;Her;;;;;;;;;;;;;;;6075;;;;;; +IC4595;G;16:20:44.44;-70:08:33.4;TrA;3.26;0.55;60;13.10;;10.05;9.18;8.84;23.39;Sc;;;;;;;;2MASX J16204443-7008333,ESO 069-002,IRAS 16153-7001,PGC 057876;;; +IC4596;G;16:16:03.61;-22:37:31.4;Sco;1.66;0.38;56;14.96;;11.31;10.56;10.22;23.83;SBab;;;;;;;;2MASX J16160361-2237314,ESO 516-009,MCG -04-38-005,PGC 057665;;; +IC4597;G;16:17:39.73;-34:21:57.4;Sco;1.27;1.02;145;13.30;;9.88;9.10;8.81;23.49;Sc;;;;;;;;2MASX J16173974-3421572,ESO 390-002,IRAS 16144-3414,PGC 057746;;This may also be NGC 6082.; +IC4598;G;16:18:13.31;-31:26:34.4;Sco;1.46;0.40;175;14.40;;11.77;11.13;10.98;23.39;Sbc;;;;;;;;2MASX J16181331-3126343,ESO 451-018,IRAS 16150-3119,PGC 057772;;; +IC4599;PN;16:19:23.17;-42:15:36.5;Sco;0.24;;;12.40;;11.01;10.56;10.08;;;;16.70;16.30;;;;;2MASX J16192317-4215366,ESO 331-001,IRAS 16158-4208,PK 338+05 1,PN G338.8+05.6;;; +IC4600;Other;16:18:08.67;-22:47:07.9;Sco;;;;;;;;;;;;;;;;;;;;"Group of Galactic stars; the IC identification is not certain."; +IC4601;Neb;16:20:17.80;-20:05:14.3;Sco;20.00;10.00;;;;;;;;;;;;;;;;;;Group of Galactic stars embedded in nebulosity.;Dimensions taken from LEDA +IC4602;Dup;16:23:38.84;+11:47:10.5;Her;;;;;;;;;;;;;;;6132;;;;;; +IC4603;Neb;16:25:24.48;-24:28:06.1;Oph;20.00;5.00;;;;;;;;;;;;;;;;LBN 1109;;Two Galactic stars embedded in nebulosity.; +IC4604;Neb;16:25:31.17;-23:26:11.7;Oph;60.00;25.00;;5.10;;;;;;;;;;;;;;LBN 1111;rho Oph Nebula;Three Galactic stars embedded in nebulosity.; +IC4605;Neb;16:30:12.48;-25:06:54.6;Sco;30.00;15.00;;4.70;;;;;;;;;;;;;;HD 148605,HIP 080815,LBN 1110;;Three Galactic stars embedded in nebulosity.; +IC4606;Other;16:31:33.89;-26:03:23.5;Sco;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position. IC 4606 may be the globular NGC 6144."; +IC4607;G;16:30:15.87;+24:34:27.7;Her;0.72;0.38;149;15.97;;11.94;11.25;10.83;24.11;E;;;;;;;;2MASX J16301588+2434274,MCG +04-39-010 NED06,PGC 058366,SDSS J163015.86+243427.6,SDSS J163015.87+243427.6;;;B-Mag taken from LEDA. +IC4608;G;16:46:53.98;-77:29:19.3;Aps;0.86;0.64;74;14.30;;12.20;11.61;11.31;22.36;SBm;;;;;;;;2MASX J16465395-7729192,ESO 043-004,IRAS 16396-7723,PGC 058968;;; +IC4609;G;16:33:01.62;+22:47:50.6;Her;0.87;0.83;19;15.40;;11.60;11.00;10.54;23.67;E-S0;;;;;;;;2MASX J16330166+2247500,MCG +04-39-014,PGC 058489,SDSS J163301.61+224750.6,SDSS J163301.62+224750.6;;; +IC4610;G;16:33:39.16;+39:15:27.5;Her;1.03;0.31;50;16.31;;13.11;12.43;12.08;24.36;Sab;;;;;;;;2MASX J16333912+3915279,PGC 3098331,SDSS J163339.14+391527.5,SDSS J163339.15+391527.5,SDSS J163339.16+391527.5;;;B-Mag taken from LEDA. +IC4611;G;16:33:42.34;+39:11:06.5;Her;0.51;0.46;20;15.81;;12.96;12.15;11.87;23.04;Sa;;;;;;;;2MASX J16334229+3911069,MCG +07-34-112,PGC 058498,SDSS J163342.33+391106.4,SDSS J163342.33+391106.5,SDSS J163342.34+391106.5;;;B-Mag taken from LEDA. +IC4612;G;16:33:49.62;+39:15:47.5;Her;1.00;1.00;103;14.60;;11.98;11.22;10.95;23.86;S0-a;;;;;;;;2MASX J16334964+3915478,IRAS 16320+3922,MCG +07-34-113,PGC 058505,SDSS J163349.61+391547.4,SDSS J163349.61+391547.5,SDSS J163349.62+391547.4,SDSS J163349.62+391547.5;;This is often incorrectly called IC 4610.; +IC4613;Other;16:37:10.15;+36:07:50.1;Her;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4614;G;16:37:47.18;+36:06:54.0;Her;0.77;0.69;85;15.30;;12.54;11.92;11.44;23.33;Sa;;;;;;;;2MASX J16374718+3606543,MCG +06-36-057,PGC 058641,SDSS J163747.17+360653.9,SDSS J163747.18+360653.9,SDSS J163747.18+360654.0;;; +IC4615;Dup;16:37:53.92;+36:04:23.0;Her;;;;;;;;;;;;;;;6196;;;;;; +IC4616;Dup;16:37:59.88;+35:59:43.8;Her;;;;;;;;;;;;;;;6197;;;;;; +IC4617;G;16:42:08.06;+36:41:02.7;Her;0.69;0.40;32;16.02;;12.65;12.24;11.80;23.51;Sbc;;;;;;;;2MASX J16420807+3641025,PGC 2085077,SDSS J164208.06+364102.6,SDSS J164208.06+364102.7;;Seen through the outskirts of MESSIER 013.;B-Mag taken from LEDA. +IC4618;G;16:57:50.01;-76:59:34.7;Aps;1.69;0.81;119;13.02;;10.48;10.13;9.88;22.04;SBbc;;;;;;;;2MASX J16574998-7659348,ESO 043-009,IRAS 16506-7654,PGC 059325;;; +IC4619;G;16:44:11.12;+17:45:33.0;Her;0.69;0.58;85;15.20;;12.74;12.10;11.87;23.02;Sbc;;;;;;;;2MASX J16441111+1745328,PGC 058871;;; +IC4620;G;16:48:30.04;+19:18:19.4;Her;0.71;0.51;93;15.60;;13.14;12.62;12.30;23.51;Sb;;;;;;;;2MASX J16483000+1918193,MCG +03-43-004,PGC 059034,SDSS J164830.03+191819.4,SDSS J164830.04+191819.4;;; +IC4621;G;16:50:51.17;+08:47:01.2;Oph;0.81;0.62;151;15.00;;12.10;11.35;11.09;23.27;Sab;;;;;;;;2MASX J16505118+0847019,IRAS 16484+0852,MCG +01-43-004,PGC 059104,UGC 10576;;; +IC4622;Other;16:52:08.31;-16:14:10.5;Oph;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4623;G;16:51:05.34;+22:31:38.7;Her;0.70;0.36;107;15.40;;12.26;11.47;11.10;22.96;Sb;;;;;;;;2MASX J16510537+2231394,MCG +04-40-003,PGC 059115,SDSS J165105.34+223138.7;;; +IC4624;G;16:51:33.54;+17:26:56.8;Her;0.47;0.32;115;15.71;;;;;23.17;;;;;;;;;2MASX J16513354+1726564,PGC 059131;;;B-Mag taken from LEDA. +IC4625;Dup;16:52:58.87;+02:24:03.3;Oph;;;;;;;;;;;;;;;6240;;;;;; +IC4626;**;16:53:21.43;+02:20:19.4;Oph;;;;;;;;;;;;;;;;;;;;; +IC4627;G;16:54:08.75;-07:38:07.2;Oph;0.65;0.27;74;16.15;;12.16;11.13;10.78;23.23;Sc;;;;;;;;2MASX J16540875-0738073,IRAS 16514-0733,LEDA 165701;;;B-Mag taken from LEDA. +IC4628;Neb;16:56:58.43;-40:27:03.5;Sco;89.13;58.88;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC4629;Other;16:56:09.99;-16:42:35.6;Oph;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4630;G;16:55:09.58;+26:39:46.5;Her;0.84;0.49;20;14.80;;11.77;11.12;10.81;23.21;S0-a;;;;;;;;2MASX J16550959+2639463,IRAS 16531+2644,MCG +04-40-007,PGC 059257,SDSS J165509.57+263946.4,SDSS J165509.58+263946.5,UGC 10607;;; +IC4631;Other;17:11:00.03;-77:36:12.8;Aps;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4632;Other;16:58:32.13;+22:54:56.0;Her;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4633;G;17:13:47.04;-77:32:10.3;Aps;2.70;1.32;148;12.40;;9.35;8.70;8.47;23.98;Sc;;;;;;;;2MASX J17134699-7732102,ESO 044-003,IRAS 17062-7728,PGC 059884;;; +IC4634;PN;17:01:33.59;-21:49:33.5;Oph;0.14;;;10.70;10.90;12.09;12.17;11.44;;;;13.72;13.94;;;;BD -21 4483,HD 153655;ESO 587-001,IRAS 16585-2145,PK 0+12 1,PN G000.3+12.2;;; +IC4635;G;17:15:39.19;-77:29:22.3;Aps;1.62;0.45;160;13.94;;10.36;9.52;9.19;23.77;SABb;;;;;;;;2MASX J17153915-7729220,ESO 044-005,IRAS 17080-7725,PGC 059959;;; +IC4636;*;16:59:06.82;+47:11:43.5;Her;;;;;;;;;;;;;;;;;;SDSS J165906.82+471143.5;;; +IC4637;PN;17:05:10.82;-40:53:10.9;Sco;0.31;;;13.60;12.50;;;;;;;12.88;12.50;;;;HD 154072;ESO 332-021,PK 345+00 1,PN G345.4+00.1;;; +IC4638;G;17:01:13.70;+33:30:47.5;Her;0.68;0.51;53;15.70;15.54;12.72;11.95;11.78;23.29;SABb;;;;;;;;2MASX J17011365+3330478,MCG +06-37-021,PGC 059446,SDSS J170113.69+333047.4,SDSS J170113.69+333047.5,UCAC4 618-055995;;; +IC4639;G;17:02:54.75;+22:55:48.1;Her;0.58;0.51;152;15.99;;12.45;11.77;11.50;23.66;E;;;;;;;;2MASX J17025471+2255479,LEDA 1678509,SDSS J170254.75+225548.0,SDSS J170254.76+225548.1;;;B-Mag taken from LEDA. +IC4640;G;17:23:58.35;-80:03:50.7;Aps;1.34;1.20;130;14.78;;12.18;11.34;11.42;;SABc;;;;;;;;2MASX J17235841-8003506,ESO 024-001,PGC 060209;;; +IC4641;G;17:24:10.32;-80:08:50.7;Aps;1.22;1.12;45;13.90;;12.01;11.54;11.19;23.46;Sc;;;;;;;;2MASX J17241026-8008506,ESO 024-002,PGC 060221;;; +IC4642;PN;17:11:45.22;-55:23:56.4;Ara;0.28;;;13.40;;;;;;;;16.09;;;;;HD 154952;ESO 180-004,IRAS 17075-5520,PK 334-09 1,PN G334.3-09.3,UCAC3 70-402396,UCAC4 173-185414;;; +IC4643;Dup;17:08:32.74;+42:20:20.8;Her;;;;;;;;;;;;;;;6301;;;;;; +IC4644;G;17:24:36.90;-73:56:24.4;Aps;1.75;0.47;134;14.30;;11.97;11.11;10.62;24.55;Sb;;;;;;;;2MASX J17243684-7356244,ESO 044-011,IRAS 17182-7353,PGC 060234;;; +IC4645;G;17:14:43.13;+43:06:14.8;Her;0.57;0.50;121;15.70;;14.43;13.76;13.32;23.42;Scd;;;;;;;;2MASX J17144311+4306149,PGC 059915,SDSS J171443.13+430614.7;;; +IC4646;G;17:23:53.19;-59:59:57.8;Ara;2.77;1.85;179;12.65;;10.57;9.89;9.63;23.23;Sc;;;;;;;;2MASX J17235321-5959576,ESO 138-023,ESO-LV 138-0230,IRAS 17194-5957,PGC 060208;;; +IC4647;G;17:26:03.74;-80:11:42.4;Aps;1.64;0.84;176;14.47;;10.96;10.33;10.15;;S0;;;;;;;;2MASX J17260372-8011424,ESO 024-005,PGC 060280;;; +IC4648;**;17:16:10.03;+43:51:45.3;Her;;;;;;;;;;;;;;;;;;;;; +IC4649;Dup;17:15:50.38;+57:22:00.5;Dra;;;;;;;;;;;;;;;;1252;;;;; +IC4650;G;17:15:47.41;+57:18:06.8;Dra;0.61;0.25;67;15.84;;12.75;12.20;12.00;23.57;S0;;;;;;;;2MASX J17154740+5718066,LEDA 2562439,SDSS J171547.40+571806.7,SDSS J171547.40+571806.8,SDSS J171547.40+571807.0,SDSS J171547.41+571806.7,SDSS J171547.41+571806.8;;;B-Mag taken from LEDA. +IC4651;OCl;17:24:49.14;-49:56:17.7;Ara;9.60;;;7.76;6.90;;;;;;;;;;;;;MWSC 2590;;; +IC4652;G;17:26:26.67;-59:43:41.9;Ara;1.10;0.53;16;14.16;;11.63;10.94;10.61;22.64;Sb;;;;;;;;2MASX J17262672-5943402,ESO 138-025,ESO-LV 138-0250,IRAS 17220-5941,PGC 060290;;; +IC4653;G;17:27:07.18;-60:52:46.5;Ara;1.61;0.98;51;13.25;;10.94;10.28;10.09;22.96;S0-a;;;;;;;;2MASX J17270693-6052448,ESO 138-028,ESO-LV 138-0280,IRAS 17225-6050,PGC 060311;;; +IC4654;G;17:37:07.89;-74:22:53.2;Aps;1.97;1.11;102;13.36;;10.30;9.41;9.25;22.93;SABb;;;;;;;;2MASX J17370793-7422532,ESO 044-015,IRAS 17306-7420,PGC 060582;;; +IC4655;Other;17:34:35.62;-60:43:16.8;Ara;;;;;;;;;;;;;;;;;;;;Line of six Galactic stars.; +IC4656;G;17:37:43.87;-63:43:46.8;Ara;2.65;0.57;90;13.74;;10.97;10.20;9.92;23.33;Sc;;;;;;;;2MASX J17374387-6343466,ESO 102-010,ESO-LV 102-0100,IRAS 17329-6341,PGC 060595;;; +IC4657;Other;17:32:42.70;-17:31:29.4;Oph;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4658;Other;17:36:10.81;-59:35:05.7;Ara;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4659;Other;17:34:12.23;-17:55:40.9;Oph;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4660;G;17:21:45.18;+75:50:54.6;UMi;1.28;0.33;170;15.40;;12.16;11.67;11.33;22.75;Sb;;;;;;;;2MASX J17214521+7550552,IRAS 17235+7553,MCG +13-12-023,PGC 060124,UGC 10848;;; +IC4661;G;17:51:02.76;-74:01:56.6;Aps;1.62;1.30;63;13.48;;11.68;10.53;10.37;23.04;Sc;;;;;;;;2MASX J17510271-7401565,ESO 044-021,IRAS 17447-7401,PGC 060990;;; +IC4662;G;17:47:08.87;-64:38:30.3;Pav;2.09;0.83;106;11.75;11.10;10.10;9.76;9.51;21.34;IB;;;;;;;;2MASX J17470919-6438192,2MASX J17471068-6438207,ESO 102-014,ESO-LV 102-0140,IRAS 17422-6437,PGC 060849,PGC 060851;;The 2MASS positions apply to HII regions northeast of the center.; +IC4663;PN;17:45:28.20;-44:54:17.5;Sco;0.22;;;13.10;12.50;15.48;;14.29;;;;16.00;15.20;;;;HD 161028;ESO 279-006,IRAS 17417-4453,PK 346-08 1,PN G346.2-08.2;;; +IC4664;G;17:48:58.59;-63:15:16.3;Pav;1.67;0.89;106;13.57;;10.78;10.02;9.78;23.03;Sb;;;;;;;;2MASX J17485857-6315162,ESO 102-015,ESO-LV 102-0150,IRAS 17442-6314,PGC 060907;;; +IC4665;OCl;17:46:27.18;+05:38:55.4;Oph;24.60;;;4.49;4.20;;;;;;;;;;;;;MWSC 2689;;; +IC4666;*;17:46:02.36;+55:46:32.1;Dra;;;;;;;;;;;;;;;;;;SDSS J174602.35+554632.1;;; +IC4667;Other;17:46:18.96;+55:52:32.3;Dra;;;;;;;;;;;;;;;;;;;;"Nominal position; only faint stars nearby."; +IC4668;*;17:46:59.41;+57:24:02.5;Dra;;;;;;;;;;;;;;;;;;;;; +IC4669;G;17:47:12.97;+61:26:03.2;Dra;0.61;0.29;103;15.10;;12.46;11.81;11.66;22.50;SBb;;;;;;;;2MASX J17471291+6126030,IRAS 17466+6127,PGC 060856,SDSS J174712.97+612603.2,UGC 10992;;; +IC4671;Other;17:55:07.90;-10:17:09.3;Se2;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4672;G;18:02:14.71;-62:49:57.0;Pav;0.89;0.52;40;15.27;;13.22;12.62;12.74;23.30;Sc;;;;;;;;2MASX J18021472-6249570,ESO 102-021,ESO-LV 102-0210,PGC 061307;;Marginal HIPASS detection.; +IC4673;PN;18:03:18.40;-27:06:22.0;Sgr;0.25;;;12.90;13.00;;;;;;;18.00;17.60;;;;;ESO 521-015,IRAS 18001-2706,PK 3-02 3,PN G003.5-02.4;;; +IC4674;G;18:08:13.08;-62:23:43.8;Pav;1.57;0.71;87;14.92;;12.07;11.55;11.31;23.85;SABc;;;;;;;;2MASX J18081306-6223438,ESO 140-001,ESO-LV 140-0010,IRAS 18035-6224,PGC 061445;;; +IC4675;Other;18:03:10.68;-09:15:34.1;Oph;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4676;G;18:02:52.99;+11:49:23.3;Oph;0.58;0.33;76;15.60;;13.56;12.81;12.34;23.27;;;;;;;;;2MASX J18025296+1149234,PGC 061317;;; +IC4677;Other;17:58:15.77;+66:37:59.8;Dra;;;;;;;;;;;;;;;;;;MCG +11-22-017,PGC 061193;;IC 4677 is a knot in the envelope of NGC 6543, a galactic planetary nebula.; +IC4678;Neb;18:06:33.47;-23:57:16.0;Sgr;;;;10.40;;;;;;;;;;;;;;;;A Galactic star embedded in nebulosity.; +IC4679;G;18:11:24.49;-56:15:15.8;Tel;1.17;0.39;125;13.83;;12.39;11.17;10.96;21.04;SBc;;;;;;;;2MASX J18112447-5615158,ESO 182-005,ESO-LV 182-0050,IRAS 18071-5615,PGC 061522;;; +IC4680;G;18:13:29.64;-64:28:36.2;Pav;1.61;0.52;72;13.91;;10.73;10.09;9.76;23.19;Sab;;;;;;;;2MASX J18132963-6428362,ESO 103-009,ESO-LV 103-0090,PGC 061598;;; +IC4681;*;18:08:20.00;-23:25:55.3;Sgr;;;;9.26;9.10;8.99;8.93;8.92;;;;;;;;;;2MASS J18081997-2325551,HD 165705,IDS 18022-2327 AB,SAO 186340,TYC 6842-1272-1,WDS J18083-2326AB;;The IC identification is not certain.; +IC4682;G;18:16:25.71;-71:34:52.7;Pav;2.21;1.51;140;13.25;;10.01;9.33;9.05;23.35;SBbc;;;;;;;;2MASX J18162565-7134527,ESO 071-005,ESO-LV 71-0050,IRAS 18105-7135,PGC 061669;;; +IC4683;Other;18:09:00.93;-26:23:27.4;Sgr;;;;;;;;;;;;;;;;;;;;IC number probably refers to the rich Milky Way starfield in this area.; +IC4684;RfN;18:09:08.44;-23:26:07.6;Sgr;3.00;2.00;;;;;;;;;;;;;;;;LBN 34;;Two Galactic stars embedded in nebulosity.; +IC4685;Neb;18:09:17.50;-23:59:14.1;Sgr;15.00;10.00;;;;;;;;;;;;;;;;;;A Galactic star embedded in nebulosity.;Dimensions taken from LEDA +IC4686;G;18:13:38.64;-57:43:57.1;Pav;0.78;0.59;45;14.67;;12.34;11.71;11.45;23.00;;;;;;;4687W;;2MASX J18133883-5743572,ESO 140-009,ESO-LV 140-0090,PGC 061601;;; +IC4687;G;18:13:39.63;-57:43:31.3;Pav;1.15;0.73;51;14.35;14.30;11.04;10.30;10.00;23.09;SABb;;;;;;;;2MASX J18133982-5743312,ESO 140-010,ESO-LV 140-0100,IRAS 18093-5744,PGC 061602;;; +IC4688;G;18:08:11.88;+11:42:44.0;Oph;1.30;0.95;174;14.70;;11.24;10.56;10.24;23.54;Sc;;;;;;;;2MASX J18081188+1142439,MCG +02-46-006,PGC 061441,UGC 11125;;; +IC4689;G;18:13:40.28;-57:44:53.5;Pav;0.91;0.38;141;15.07;;11.55;10.86;10.59;23.22;SABa;;;;;;4687S;;2MASX J18134033-5744542,ESO 140-011,ESO-LV 140-0110,PGC 061604;;; +IC4690;Dup;18:16:55.37;-19:46:37.5;Sgr;;;;;;;;;;;;;;;6589;;;;;; +IC4691;G;18:08:45.70;+11:49:48.3;Oph;1.00;0.64;150;15.50;;11.16;10.45;10.15;24.25;E;;;;;;;;2MASX J18084560+1149455,PGC 061456;;UZC position includes two stars superposed northeast of the nucleus.; +IC4692;G;18:14:49.97;-58:41:37.6;Pav;1.74;0.86;4;14.31;;11.57;11.03;10.69;23.51;SBc;;;;;;;;2MASX J18144995-5841375,ESO 140-013,ESO-LV 140-0130,IRAS 18104-5842,PGC 061638;;; +IC4693;Other;18:09:10.83;+17:20:52.4;Her;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC4694;G;18:15:26.45;-58:12:32.1;Pav;2.79;0.73;19;13.75;;;;;23.60;SBc;;;;;;;;ESO 140-014,ESO-LV 140-0140,PGC 061647;;; +IC4695;**;18:17:23.47;-58:55:31.7;Pav;;;;;;;;;;;;;;;;;;;;; +IC4696;G;18:20:17.91;-64:44:02.7;Pav;2.36;0.75;74;13.49;;10.47;9.88;9.50;23.20;Sbc;;;;;;;;2MASX J18201792-6444025,ESO 103-013,ESO-LV 103-0130,IRAS 18153-6445,PGC 061750;;; +IC4697;G;18:12:26.91;+25:25:37.9;Her;0.87;0.23;0;15.10;;10.95;10.25;10.02;22.72;Sab;;;;;;;;2MASX J18122689+2525373,MCG +04-43-013,PGC 061560;;; +IC4698;G;18:20:59.93;-63:20:52.6;Pav;1.75;0.26;39;15.31;;12.49;11.78;11.57;24.07;Sb;;;;;;;;2MASX J18205988-6320525,ESO 103-015,ESO-LV 103-0150,IRAS 18161-6322,PGC 061762;;; +IC4699;PN;18:18:32.79;-45:58:59.1;Tel;0.08;;;11.90;13.00;15.11;15.13;14.34;;;;14.82;15.10;;;;HD 167672;ESO 280-008,IRAS 18148-4600,PK 348-13 1,PN G348.0-13.8,UCAC2 12325246,UCAC3 89-368398,UCAC4 221-166083;;; +IC4700;Dup;18:17:04.99;-19:51:57.8;Sgr;;;;;;;;;;;;;;;6590;;;;;; +IC4701;Neb;18:16:35.74;-16:38:53.8;Sgr;60.00;40.00;;;;;;;;;;;;;;;;LBN 55;;; +IC4702;G;18:23:03.82;-59:14:20.2;Pav;1.66;1.19;155;14.04;;10.35;9.66;9.36;23.69;S0-a;;;;;;;;2MASX J18230381-5914203,ESO 140-020,ESO-LV 140-0200,PGC 061810;;; +IC4703;Neb;18:18:56.22;-13:50:43.4;Se2;5.05;5.05;90;6.58;6.00;;;;;;;;;;;;;;Eagle Nebula,Star Queen;This is the nebula associated with the open cluster MESSIER 16 = NGC 6611.;Diameters taken from SIMBAD. +IC4704;G;18:27:53.64;-71:36:35.5;Pav;2.70;1.99;165;12.61;;9.44;8.70;8.45;23.98;E-S0;;;;;;;;2MASX J18275369-7136353,ESO 071-011,ESO-LV 71-0110,PGC 061906;;; +IC4705;G;18:28:10.32;-71:41:38.2;Pav;1.73;1.02;53;14.31;;10.81;9.98;9.78;23.10;SBa;;;;;;;;2MASX J18281028-7141379,ESO 071-012,ESO-LV 71-0120,IRAS 18222-7143,PGC 061914;;; +IC4706;Neb;18:19:36.94;-16:01:52.6;Sgr;3.47;;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC4707;Neb;18:19:53.91;-16:00:33.3;Sgr;3.47;;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +IC4708;G;18:13:46.21;+61:09:26.2;Dra;0.50;0.45;113;15.50;;12.90;12.28;11.98;23.00;;;;;;;;;2MASX J18134618+6109262,PGC 061605;;; +IC4709;G;18:24:19.39;-56:22:09.0;Tel;1.17;0.59;5;14.41;;11.44;10.75;10.43;23.13;Sab;;;;;;;;2MASX J18241939-5622091,ESO 182-014,ESO-LV 182-0140,IRAS 18200-5623,PGC 061835;;; +IC4710;G;18:28:37.97;-66:58:56.2;Pav;3.49;2.99;5;12.53;;11.32;10.94;10.63;23.82;Sm;;;;;;;;2MASX J18283796-6658561,ESO 103-022,ESO-LV 103-0220,IRAS 18235-6700,PGC 061922;;; +IC4711;Other;18:28:06.82;-64:56:40.1;Pav;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC4712;G;18:31:06.92;-71:41:37.2;Pav;1.99;1.17;61;13.41;;10.28;9.83;9.41;22.83;Sbc;;;;;;;;2MASX J18310695-7141371,ESO 071-014,ESO-LV 71-0140,IRAS 18251-7143,PGC 061981;;; +IC4713;G;18:29:59.34;-67:13:27.8;Pav;0.91;0.79;95;14.61;14.04;11.36;10.69;10.35;22.67;SBm;;;;;;;;2MASX J18295935-6713279,ESO 103-023,ESO-LV 103-0230,IRAS 18247-6715,PGC 061956;;; +IC4714;G;18:30:55.75;-66:39:06.3;Pav;1.49;0.29;177;15.13;;12.65;12.18;11.92;23.40;Sc;;;;;;;;2MASX J18305572-6639061,ESO 103-024,ESO-LV 103-0240,PGC 061976;;; +IC4715;*Ass;18:16:56.12;-18:30:52.4;Sgr;120.00;60.00;;;4.50;;;;;;;;;024;;;;;Small Sgr Star Cloud;Milky Way star cloud.;V-mag taken from HEASARC's messier table +IC4716;G;18:32:45.04;-56:57:43.2;Pav;0.69;0.32;98;15.98;;13.71;13.11;13.03;23.25;SBbc;;;;;;;;2MASX J18324502-5657429,ESO 183-001,ESO-LV 183-0010,PGC 062013;;; +IC4717;G;18:33:17.25;-57:58:32.6;Pav;1.78;0.43;93;14.03;13.43;10.49;9.72;9.47;23.29;Sb;;;;;;;;2MASX J18331726-5758328,ESO 140-024,ESO-LV 140-0240,IRAS 18289-5800,PGC 062024;;; +IC4718;G;18:33:50.16;-60:07:44.8;Pav;1.67;0.80;116;13.95;13.14;10.92;10.29;9.92;23.18;Sab;;;;;;;;2MASX J18335014-6007446,ESO 140-026,ESO-LV 140-0260,PGC 062048;;; +IC4719;G;18:33:11.54;-56:43:55.9;Tel;1.47;0.61;112;13.58;13.98;11.31;10.65;10.31;22.41;Sd;;;;;;;;2MASX J18331155-5643558,ESO 183-002,ESO-LV 183-0020,IRAS 18289-5646,PGC 062022;;; +IC4720;G;18:33:32.50;-58:24:19.3;Pav;2.75;0.88;159;13.63;;;;;23.32;SBc;;;;;;;;ESO 140-025,ESO-LV 140-0250,IRAS 18291-5826,PGC 062030;;Confused HIPASS source; +IC4721;G;18:34:24.76;-58:29:47.8;Pav;5.30;1.64;149;12.64;11.63;9.84;9.15;8.93;23.75;SBc;;;;;;;;2MASX J18342476-5829478,ESO 140-027,ESO-LV 140-0270,IRAS 18300-5832,PGC 062066;;Confused HIPASS source; +IC4722;G;18:34:31.53;-57:47:34.0;Pav;1.64;1.14;45;13.66;;10.72;9.99;9.84;23.06;Sc;;;;;;;;2MASX J18343155-5747340,ESO 140-028,ESO-LV 140-0280,IRAS 18302-5749,PGC 062071;;; +IC4723;G;18:35:56.26;-63:22:36.0;Pav;0.70;0.67;6;14.69;;11.99;11.28;11.01;22.79;E;;;;;;;;2MASX J18355625-6322358,ESO 103-027,ESO-LV 103-0270,IRAS 18311-6325,PGC 062099;;; +IC4724;G;18:38:40.28;-70:07:32.4;Pav;0.83;0.40;158;15.12;;12.21;11.53;11.42;23.48;;;;;;;;;2MASX J18384023-7007324,ESO 071-019,ESO-LV 71-0190,PGC 062183,TYC 9295-404-1;;; +IC4725;OCl;18:31:46.77;-19:06:53.8;Sgr;14.10;;;5.29;4.60;;;;;;;;;025;;;;;;; +IC4726;G;18:36:58.81;-62:51:15.6;Pav;1.13;0.82;19;14.73;;11.11;10.36;10.13;23.66;S0;;;;;;;;2MASX J18365878-6251157,ESO 103-032,ESO-LV 103-0320,PGC 062133;;; +IC4727;G;18:37:56.06;-62:42:02.4;Pav;1.24;1.09;114;14.06;;10.30;9.60;9.23;23.29;E-S0;;;;;;;;2MASX J18375609-6242021,ESO 103-033,ESO-LV 103-0330,PGC 062165;;; +IC4728;G;18:37:57.00;-62:31:51.3;Pav;2.22;0.76;172;14.25;;10.24;9.45;9.17;24.01;SBab;;;;;;;;2MASX J18375700-6231511,ESO 103-034,ESO-LV 103-0340,IRAS 18333-6234,PGC 062166;;; +IC4729;G;18:39:56.43;-67:25:32.5;Pav;1.31;0.69;61;13.59;;10.64;10.05;9.53;22.11;Sc;;;;;;;;2MASX J18395639-6725325,ESO 103-040,ESO-LV 103-0400,IRAS 18347-6728,PGC 062218;;; +IC4730;G;18:38:50.17;-63:20:59.7;Pav;1.44;0.68;154;14.46;;11.25;10.59;10.25;23.93;S0-a;;;;;;;;2MASX J18385016-6320597,ESO 103-038,ESO-LV 103-0380,IRAS 18339-6323,PGC 062192;;; +IC4731;G;18:38:42.98;-62:56:34.9;Pav;1.55;0.76;80;13.84;;10.05;9.34;9.06;23.41;S0-a;;;;;;;;2MASX J18384297-6256346,ESO 103-037,ESO-LV 103-0370,PGC 062187;;; +IC4732;PN;18:33:54.60;-22:38:41.0;Sgr;0.07;;;13.30;12.10;12.88;12.80;11.90;;;;16.50;16.20;;;;BD -22 18309,HD 171131;ESO 523-001,IRAS 18308-2241,PK 10-06 1,PN G010.7-06.4;;; +IC4733;*;18:26:38.18;+64:58:02.7;Dra;;;;;;;;;;;;;;;;;;;;; +IC4734;G;18:38:25.70;-57:29:25.6;Pav;1.31;0.76;103;14.21;;10.90;10.14;9.79;23.14;SBb;;;;;;;;2MASX J18382569-5729258,ESO 140-033,ESO-LV 140-0330,IRAS 18341-5732,PGC 062175;;; +IC4735;G;18:39:49.94;-62:57:21.7;Pav;0.79;0.54;38;15.50;;12.05;11.25;11.15;23.64;;;;;;;;;2MASX J18394995-6257216,ESO 103-041,ESO-LV 103-0410,PGC 062213;;; +IC4736;G;18:38:39.81;-57:53:35.8;Pav;1.29;0.98;99;14.60;;12.38;11.65;11.66;23.65;SBd;;;;;;;;2MASX J18383982-5753357,ESO 140-034,ESO-LV 140-0340,PGC 062181;;Confused HIPASS source; +IC4737;G;18:39:58.40;-62:35:52.7;Pav;0.93;0.77;23;15.00;;11.40;10.58;10.30;23.46;SBa;;;;;;;;2MASX J18395835-6235526,ESO 103-042,ESO-LV 103-0420,IRAS 18352-6238,PGC 062222;;; +IC4738;G;18:40:26.92;-61:54:08.5;Pav;1.25;0.62;146;15.25;;12.18;11.23;11.44;23.83;Sc;;;;;;;;2MASX J18402686-6154085,ESO 140-035,ESO-LV 140-0350,PGC 062234;;; +IC4739;G;18:40:50.98;-61:54:05.6;Pav;0.95;0.57;95;15.18;;12.84;12.26;12.27;23.37;Sbc;;;;;;;;2MASX J18405094-6154054,ESO 140-036,ESO-LV 140-0360,PGC 062246;;Star superimposed.; +IC4740;G;18:43:00.58;-68:21:35.8;Pav;1.01;0.92;13;15.29;;12.55;12.20;11.57;23.90;SABc;;;;;;;;2MASX J18430060-6821356,ESO 071-020,ESO-LV 71-0200,PGC 062306;;; +IC4741;G;18:41:43.43;-63:56:53.5;Pav;1.43;0.90;30;13.77;;10.38;9.66;9.39;23.04;Sab;;;;;;;;2MASX J18414342-6356537,ESO 103-047,ESO-LV 103-0470,PGC 062269;;; +IC4742;G;18:41:52.57;-63:51:43.5;Pav;2.11;1.67;14;13.09;;9.27;8.71;8.49;23.55;E;;;;;;;;2MASX J18415254-6351437,ESO 103-048,ESO-LV 103-0480,PGC 062270;;; +IC4743;G;18:41:29.15;-61:46:20.0;Pav;0.93;0.52;99;14.91;;11.34;10.58;10.30;23.54;S0;;;;;;;;2MASX J18412916-6146202,ESO 140-037,ESO-LV 140-0370,PGC 062262;;; +IC4744;G;18:41:54.89;-63:13:25.9;Pav;0.66;0.39;76;15.07;;12.85;11.96;11.76;22.73;I;;;;;;;;2MASX J18415486-6313257,ESO 103-050,ESO-LV 103-0500,ESO-LV 103-0501,IRAS 18371-6316,PGC 062271,PGC 062272;;ESO-LV catalog has two entries for this galaxy.; +IC4745;G;18:42:35.88;-64:56:34.5;Pav;2.08;0.91;1;13.89;;10.46;9.66;9.30;23.70;Sab;;;;;;;;2MASX J18423586-6456345,ESO 103-052,ESO-LV 103-0520,IRAS 18376-6459,PGC 062292;;; +IC4746;G;18:45:54.51;-72:40:05.6;Pav;0.57;0.48;0;;;;;;;;;;;;;;;PGC 062371;;; +IC4747;G;18:45:57.34;-72:37:48.1;Pav;1.10;0.37;72;15.09;;12.68;11.90;11.57;;Sc;;;;;;;;2MASX J18455734-7237484,ESO 045-015,IRAS 18398-7240,PGC 062372;;; +IC4748;G;18:42:45.96;-64:04:21.6;Pav;1.01;0.88;95;14.33;;11.12;10.44;10.20;23.09;S0;;;;;;;;2MASX J18424592-6404215,ESO 103-053,ESO-LV 103-0530,PGC 062299;;; +IC4749;G;18:42:49.49;-63:12:30.3;Pav;1.20;1.01;57;14.29;;10.72;9.98;9.74;23.41;S0;;;;;;;;2MASX J18424946-6312305,ESO 103-054,ESO-LV 103-0540,PGC 062300;;; +IC4750;G;18:43:02.68;-62:58:17.3;Pav;1.16;0.52;110;15.14;;11.51;10.81;10.67;24.09;S0-a;;;;;;;;2MASX J18430271-6258175,ESO 103-055,ESO-LV 103-0550,PGC 062308;;; +IC4751;G;18:43:19.34;-62:06:44.2;Pav;1.08;0.57;6;14.08;;10.96;10.21;9.90;22.97;S0;;;;;;;;2MASX J18431930-6206444,ESO 140-040,ESO-LV 140-0400,PGC 062317;;; +IC4752;G;18:43:46.73;-64:04:55.6;Pav;0.73;0.65;129;15.48;;12.78;12.06;11.82;23.42;Sab;;;;;;;;2MASX J18434670-6404557,ESO 103-057,ESO-LV 103-0570,PGC 062323;;; +IC4753;G;18:43:32.62;-62:06:28.6;Pav;0.87;0.74;7;14.63;;11.19;10.50;10.24;22.39;E;;;;;;;;2MASX J18433262-6206286,ESO 140-041,ESO-LV 140-0410,PGC 062319;;; +IC4754;G;18:44:00.23;-61:59:24.2;Pav;1.27;1.10;31;14.37;;11.14;10.46;9.98;23.46;SBb;;;;;;;;2MASX J18440025-6159247,ESO 140-042,ESO-LV 140-0420,PGC 062321,PGC 062331;;; +IC4755;G;18:45:01.15;-63:41:32.0;Pav;1.42;0.32;96;15.14;;11.43;10.63;10.33;23.99;Sa;;;;;;;;2MASX J18450112-6341322,ESO 103-058,ESO-LV 103-0580,IRAS 18402-6344,PGC 062349;;; +IC4756;OCl;18:38:51.51;+05:27:43.8;Se2;24.00;;;4.96;4.60;;;;;;;;;;;;;MWSC 2967;;; +IC4757;G;18:43:55.75;-57:10:03.2;Pav;1.49;0.65;57;14.57;;11.01;10.14;9.86;23.98;S0-a;;;;;;;;2MASX J18435575-5710029,ESO 183-009,ESO-LV 183-0090,IRAS 18396-5713,PGC 062327;;; +IC4758;G;18:46:18.27;-65:45:24.0;Pav;1.04;0.53;142;14.16;;11.44;10.82;10.42;22.45;Sc;;;;;;;;2MASX J18461825-6545240,ESO 103-062,ESO-LV 103-0620,IRAS 18413-6548,PGC 062381;;; +IC4759;GPair;18:45:41.00;-63:05:07.0;Pav;0.80;;;;;;;;;;;;;;;;;;;; +IC4759 NED01;G;18:45:40.72;-63:05:05.2;Pav;0.59;0.14;71;17.33;;;;;24.92;;;;;;;;;PGC 062366;;;B-Mag taken from LEDA. +IC4759 NED02;G;18:45:41.30;-63:05:13.2;Pav;0.92;0.54;175;14.95;;13.29;12.19;12.27;23.84;I;;;;;;;;2MASX J18454128-6305131,IRAS 18409-6308,PGC 062367;;; +IC4760;G;18:45:45.95;-62:57:30.1;Pav;0.83;0.76;7;15.14;;11.61;11.00;10.70;23.47;S0;;;;;;;;2MASX J18454603-6257291,ESO 103-061,ESO-LV 103-0610,PGC 062369;;; +IC4761;G;18:43:55.60;-52:51:10.9;Tel;1.54;1.07;25;13.93;;11.57;10.80;10.58;23.32;SBbc;;;;;;;;2MASX J18435562-5251110,ESO 183-010,ESO-LV 183-0100,PGC 062326;;; +IC4762;**;18:32:28.53;+67:51:28.9;Dra;;;;;;;;;;;;;;;;;;;;; +IC4763;Dup;18:33:30.50;+67:08:14.3;Dra;;;;;;;;;;;;;;;6679;;;;;; +IC4764;G;18:47:07.57;-63:29:04.4;Pav;1.42;0.41;126;14.70;;11.34;10.67;10.32;23.81;Sa;;;;;;;;2MASX J18470755-6329042,ESO 104-004,ESO-LV 104-0040,PGC 062396;;; +IC4765;G;18:47:17.93;-63:19:52.8;Pav;3.79;2.84;121;12.33;11.36;9.11;8.52;8.16;24.09;E;;;;;;;;2MASX J18471814-6319521,ESO 104-006,ESO-LV 104-0060,PGC 062407;;; +IC4766;G;18:47:35.77;-63:17:31.8;Pav;1.23;0.44;110;14.91;13.42;11.35;10.61;10.37;24.08;S0-a;;;;;;;;2MASX J18473570-6317324,ESO 104-009,ESO-LV 104-0090,PGC 062421;;; +IC4767;G;18:47:41.73;-63:24:20.4;Pav;2.00;0.44;29;14.67;12.96;10.94;10.26;10.04;24.47;S0-a;;;;;;;;2MASX J18474176-6324204,ESO 104-010,ESO-LV 104-0100,PGC 062427;;; +IC4768;OCl;18:41:28.19;-05:32:05.4;Sct;;;;;;;;;;;;;;;;;;;;Two star clusters.; +IC4769;G;18:47:44.05;-63:09:25.2;Pav;1.81;1.10;165;14.09;;11.22;10.54;10.15;23.75;SBbc;;;;;;;;2MASX J18474403-6309254,ESO 104-011,ESO-LV 104-0110,IRAS 18429-6312,PGC 062428;;; +IC4770;G;18:48:10.33;-63:23:00.4;Pav;0.78;0.60;73;15.49;13.15;12.97;12.18;11.66;23.48;SABa;;;;;;;;2MASX J18481033-6323003,ESO 104-013,ESO-LV 104-0130,PGC 062439;;; +IC4771;G;18:48:23.84;-63:14:51.6;Pav;1.10;0.46;179;15.24;;12.37;11.45;11.37;23.50;Sc;;;;;;;;2MASX J18482370-6314513,ESO 104-015,ESO-LV 104-0150,PGC 062445;;; +IC4772;G;18:39:56.50;+40:01:35.0;Lyr;0.60;0.45;10;15.00;;11.83;11.28;10.86;23.03;E;;;;;;;;2MASX J18395646+4001351,MCG +07-38-014,PGC 062217;;; +IC4773;G;18:51:20.82;-69:55:29.1;Pav;1.39;0.72;137;14.36;;;;;23.29;SABd;;;;;;;;ESO 072-002,ESO-LV 72-0020,PGC 062498;;; +IC4774;G;18:48:10.65;-57:56:08.5;Pav;1.06;0.87;75;14.50;;11.49;10.81;10.38;23.17;SBbc;;;;;;;;2MASX J18481058-5756085,ESO 141-005,ESO-LV 141-0050,PGC 062438;;; +IC4775;G;18:48:26.29;-57:11:01.4;Pav;1.51;0.34;17;14.73;;12.39;11.68;11.41;23.36;Sb;;;;;;;;2MASX J18482629-5711014,ESO 183-014,ESO-LV 183-0140,PGC 062447;;; +IC4776;PN;18:45:50.70;-33:20:35.0;Sgr;0.12;;;11.70;10.80;;;;;;;14.30;14.10;;;;HD 173283;ESO 396-002,IRAS 18425-3323,PK 2-13 1,PN G002.0-13.4;;; +IC4777;G;18:48:11.30;-53:08:51.4;Tel;0.94;0.77;122;14.63;14.63;11.69;10.94;10.77;23.21;S0-a;;;;;;;;2MASX J18481131-5308512,ESO 183-013,ESO-LV 183-0130,IRAS 18442-5312,PGC 062440;;; +IC4778;G;18:50:00.37;-61:43:10.2;Pav;1.20;1.03;46;14.15;;11.03;10.44;10.11;23.27;S0-a;;;;;;;;2MASX J18500034-6143103,ESO 141-006,ESO-LV 141-0060,IRAS 18454-6146,PGC 062472;;; +IC4779;G;18:50:30.43;-63:00:46.4;Pav;0.86;0.79;90;14.91;;12.21;11.78;11.48;23.19;Sab;;;;;;;;2MASX J18503042-6300463,ESO 104-017,ESO-LV 104-0170,PGC 062480;;; +IC4780;G;18:49:56.09;-59:15:10.3;Pav;0.77;0.58;102;14.94;;12.18;11.48;11.20;22.87;Sbc;;;;;;;;2MASX J18495608-5915102,ESO 141-007,ESO-LV 141-0070,IRAS 18455-5918,PGC 062470;;; +IC4781;G;18:51:37.64;-62:47:33.4;Pav;0.96;0.65;1;15.22;;11.84;11.15;10.81;23.93;S0-a;;;;;;;;2MASX J18513762-6247333,ESO 104-018,ESO-LV 104-0180,PGC 062505;;; +IC4782;G;18:50:54.87;-55:29:28.4;Tel;0.40;0.29;101;14.73;;13.78;13.40;12.76;21.34;Sc;;;;;;;;2MASX J18505490-5529280,ESO 183-018,ESO-LV 183-0180,PGC 062495;;; +IC4783;G;18:51:33.37;-58:48:47.4;Pav;1.15;0.92;59;14.58;;12.95;12.18;12.53;23.43;Sbc;;;;;;;;2MASX J18513338-5848472,ESO 141-008,ESO-LV 141-0080,IRAS 18473-5852,PGC 062502;;; +IC4784;G;18:52:48.02;-63:15:34.6;Pav;1.51;1.21;98;13.73;;10.27;9.56;9.28;23.38;S0;;;;;;;;2MASX J18524802-6315345,ESO 104-020,ESO-LV 104-0200,PGC 062527;;; +IC4785;G;18:52:55.23;-59:15:19.5;Pav;3.12;1.60;135;13.10;;9.98;9.10;9.02;23.84;SBb;;;;;;;;2MASX J18525522-5915196,ESO 141-009,ESO-LV 141-0090,PGC 062528;;; +IC4786;G;18:52:44.57;-56:41:40.6;Tel;0.79;0.23;176;15.86;;12.70;11.97;11.98;23.13;Sbc;;;;;;;;2MASX J18524453-5641405,ESO 183-024,ESO-LV 183-0240,PGC 062526;;; +IC4787;G;18:56:04.66;-68:40:56.5;Pav;1.07;0.96;170;14.58;;;;;23.40;SBm;;;;;;;;ESO 072-004,ESO-LV 72-0040,PGC 062579;;Confused HIPASS source; +IC4788;G;18:54:41.02;-63:27:08.6;Pav;1.27;0.21;15;16.04;;13.11;12.63;12.39;23.77;Sc;;;;;;;;2MASX J18544104-6327084,ESO 104-021,ESO-LV 104-0210,PGC 062555;;; +IC4789;G;18:56:18.49;-68:34:01.6;Pav;1.63;0.65;174;14.02;;12.06;11.47;11.28;23.10;Sc;;;;;;;;2MASX J18561849-6834012,ESO 072-005,ESO-LV 72-0050,PGC 062582;;; +IC4790;G;18:56:32.21;-64:55:44.1;Pav;1.21;0.70;56;13.97;;10.80;10.07;9.83;22.68;SBc;;;;;;;;2MASX J18563221-6455443,ESO 104-023,ESO-LV 104-0230,IRAS 18516-6459,PGC 062590;;; +IC4791;G;18:49:01.18;+19:19:52.0;Her;1.41;1.19;164;14.01;;10.06;9.33;9.01;23.50;;;;;;;;;2MASX J18490117+1919518,LEDA 1588608;;;B-Mag taken from LEDA. +IC4792;G;18:55:41.76;-56:24:13.7;Tel;1.36;0.31;155;15.05;;;;;23.64;Sab;;;;;;;;ESO 183-026,ESO-LV 183-0260,IRAS 18514-5628,PGC 062573;;; +IC4793;G;18:56:55.60;-61:23:59.2;Pav;1.21;0.53;120;14.55;;11.86;11.23;10.89;23.10;Sb;;;;;;;;2MASX J18565561-6123592,ESO 141-012,ESO-LV 141-0120,IRAS 18523-6127,PGC 062599;;; +IC4794;G;18:57:09.63;-62:05:27.4;Pav;1.48;0.79;19;14.15;;10.71;10.02;9.70;23.71;E-S0;;;;;;;;2MASX J18570962-6205272,ESO 141-013,ESO-LV 141-0130,PGC 062605;;; +IC4795;G;18:57:16.36;-61:36:32.7;Pav;1.13;0.27;69;15.76;;;;;23.58;Sc;;;;;;;;ESO 141-014,ESO-LV 141-0140,PGC 062608;;; +IC4796;G;18:56:27.84;-54:12:50.2;Tel;1.95;1.08;133;13.48;;10.01;9.34;9.06;23.41;S0;;;;;;;;2MASX J18562781-5412500,ESO 183-028,ESO-LV 183-0280,PGC 062588;;; +IC4797;G;18:56:29.68;-54:18:20.8;Tel;2.62;1.85;148;12.32;11.27;8.98;8.32;8.07;23.21;E;;;;;;;;2MASX J18562965-5418210,ESO 183-029,ESO-LV 183-0290,PGC 062589;;; +IC4798;G;18:58:20.89;-62:07:06.3;Pav;2.02;1.32;111;13.18;;9.71;8.90;8.73;23.44;S0;;;;;;;;2MASX J18582088-6207063,ESO 141-015,ESO-LV 141-0150,PGC 062630;;; +IC4799;G;18:58:56.59;-63:55:51.5;Pav;1.55;1.02;44;14.02;;11.03;10.04;9.96;23.54;SBab;;;;;;;;2MASX J18585661-6355513,ESO 104-027,ESO-LV 104-0270,IRAS 18541-6359,PGC 062643;;; +IC4800;G;18:58:43.52;-63:08:21.2;Pav;1.95;1.10;161;13.72;;10.49;9.74;9.57;23.64;SBa;;;;;;;;2MASX J18584350-6308213,ESO 104-025,ESO-LV 104-0250,PGC 062637;;; +IC4801;G;18:59:38.39;-64:40:30.5;Pav;1.95;1.09;89;13.62;;10.22;9.54;9.26;23.75;S0-a;;;;;;;;2MASX J18593840-6440306,ESO 104-028,ESO-LV 104-0280,PGC 062655;;; +IC4802;Other;18:55:07.09;-22:41:53.9;Sgr;;;;;;;;;;;;;;;;;;;;"Clump of stars in NGC 6717; ESO identification is wrong."; +IC4803;G;19:00:39.87;-62:03:54.5;Pav;0.76;0.32;35;15.58;;13.36;12.58;12.57;23.82;;;;;;;;;2MASX J19003992-6203545,PGC 062677;;; +IC4804;G;19:01:07.38;-61:50:00.0;Pav;1.28;1.04;173;14.78;;12.37;12.05;11.38;23.87;Sc;;;;;;;;2MASX J19010736-6150000,ESO 141-018,ESO-LV 141-0180,PGC 062685;;; +IC4805;G;19:02:01.42;-63:02:51.5;Pav;0.76;0.28;26;14.91;;11.44;10.64;10.46;22.73;Sa;;;;;;;;2MASX J19020143-6302514,ESO 104-030,ESO-LV 104-0300,IRAS 18573-6307,PGC 062693;;; +IC4806;G;19:01:30.69;-57:31:55.4;Pav;2.40;0.54;9;13.79;13.67;10.29;9.55;9.30;22.73;Sb;;;;;;;;2MASX J19013071-5731553,ESO 141-020,ESO-LV 141-0200,PGC 062689;;; +IC4807;G;19:02:17.66;-56:55:52.3;Pav;1.01;0.68;14;14.20;;11.62;10.79;10.56;22.64;SBc;;;;;;;;2MASX J19021765-5655523,ESO 183-037,ESO-LV 183-0370,IRAS 18580-5700,PGC 062696;;; +IC4808;G;19:01:07.62;-45:18:49.4;CrA;2.26;0.87;43;13.23;;10.50;9.85;9.48;22.68;Sc;;;;;;;;2MASX J19010759-4518492,ESO 282-003,ESO-LV 282-0030,IRAS 18574-4523,PGC 062686;;; +IC4809;G;19:04:05.38;-62:11:38.7;Pav;1.01;0.60;11;15.07;;12.39;12.06;11.53;23.77;;;;;;;;;2MASX J19040540-6211385,ESO 141-022,ESO-LV 141-0220,PGC 062733;;; +IC4810;G;19:02:59.71;-56:09:35.0;Tel;4.04;0.41;135;14.42;14.44;11.49;10.91;10.66;23.12;SABc;;;;;;;;2MASX J19025970-5609350,ESO 184-002,ESO-LV 184-0020,PGC 062706;;; +IC4811;G;19:05:44.67;-67:08:01.8;Pav;0.62;0.49;106;15.75;;13.01;12.36;12.16;23.25;Sbc;;;;;;;;2MASX J19054467-6708018,ESO 104-034,ESO-LV 104-0340,IRAS 19006-6712,PGC 062760;;; +IC4812;Neb;19:01:03.63;-37:03:37.2;CrA;10.00;6.92;;;;;;;;;;;;;;;;;;Two Galactic stars embedded in nebulosity.;Dimensions taken from LEDA +IC4813;G;19:05:41.71;-66:31:19.4;Pav;1.31;0.64;34;14.46;12.57;;;;23.80;;;;;;;;;ESO 104-035,ESO-LV 104-0350,PGC 062758,TYC 9082-1592-1;;; +IC4814;G;19:04:58.89;-58:34:45.8;Pav;1.50;0.60;95;14.34;;11.89;11.34;10.95;23.30;Sb;;;;;;;;2MASX J19045886-5834454,ESO 141-023,ESO-LV 141-0230,IRAS 19006-5839,PGC 062749;;; +IC4815;G;19:06:50.61;-61:42:04.9;Pav;1.12;0.77;167;14.37;;11.32;10.61;10.37;23.36;S0;;;;;;;;2MASX J19065059-6142046,ESO 141-026,ESO-LV 141-0260,PGC 062778;;; +IC4816;Nova;19:01:50.52;-13:09:42.6;Sgr;;;;4.50;;15.61;15.33;14.84;;;;;;;;;;2MASS J19015056-1309420,HD 176654;;This is Nova Sgr 1898 = V1059 Sgr.; +IC4817;G;19:06:12.35;-56:09:33.7;Tel;1.46;0.48;14;14.52;;12.27;11.48;11.35;23.22;Sbc;;;;;;;;2MASX J19061235-5609334,ESO 184-010,ESO-LV 184-0100,PGC 062771;;; +IC4818;G;19:06:03.04;-55:08:12.6;Tel;0.95;0.24;77;15.39;;11.95;11.25;10.98;23.88;S0-a;;;;;;;;2MASX J19060306-5508124,ESO 184-009,ESO-LV 184-0090,PGC 062766;;; +IC4819;G;19:07:07.30;-59:28:01.0;Pav;3.00;0.37;123;14.15;;;;;23.68;Sc;;;;;;;;ESO 141-027,ESO-LV 141-0270,PGC 062782;;; +IC4820;G;19:09:13.51;-63:27:55.8;Pav;1.36;0.88;97;14.69;9.20;14.96;14.01;13.98;24.20;Scd;;;;;;;;2MASX J19091355-6327557,ESO 104-039,ESO-LV 104-0390,PGC 062824;;; +IC4821;G;19:09:32.01;-55:01:02.3;Tel;1.82;0.85;6;13.65;;11.04;10.39;10.38;23.08;Sc;;;;;;;;2MASX J19093201-5501022,ESO 184-017,ESO-LV 184-0170,IRAS 19054-5505,PGC 062830;;; +IC4822;G;19:14:45.49;-72:26:28.1;Pav;0.71;0.42;72;15.49;;12.53;11.80;11.41;;Sbc;;;;;;;;2MASX J19144546-7226283,ESO 045-019,PGC 062952;;; +IC4823;G;19:12:15.75;-63:58:33.1;Pav;1.23;0.87;18;14.69;;10.71;10.03;10.04;23.79;S0-a;;;;;;;;2MASX J19121580-6358361,PGC 062894;;;B-Mag taken from LEDA. +IC4824;G;19:13:14.07;-62:05:17.8;Pav;0.73;0.20;59;13.90;;;;;23.44;I;;;;;;;;ESO-LV 141-0331,LEDA 349375,PGC 062918;;-1m 10s, -7.6m error in A-M position.; +IC4825;G;19:17:15.63;-72:44:55.5;Pav;0.51;0.42;58;15.64;;13.10;12.23;12.12;22.76;Sbc;;;;;;;;2MASX J19171564-7244556,ESO 045-020,PGC 063014;;;B-Mag taken from LEDA. +IC4826;G;19:12:21.20;-57:12:08.3;Pav;1.29;0.75;45;14.47;;11.88;11.31;10.95;23.43;Sab;;;;;;;;2MASX J19122120-5712081,ESO 184-027,ESO-LV 184-0270,PGC 062897;;; +IC4827;G;19:13:21.24;-60:51:36.6;Pav;3.05;0.69;166;13.26;;9.74;9.19;8.81;23.54;Sab;;;;;;;;2MASX J19132127-6051367,ESO 141-034,ESO-LV 141-0340,IRAS 19088-6056,PGC 062922;;; +IC4828;G;19:13:40.69;-62:04:57.4;Pav;1.13;0.51;68;14.77;;12.49;12.04;11.91;23.16;Sbc;;;;;;;;2MASX J19134071-6204573,ESO 141-036,ESO-LV 141-0360,PGC 062930;;; +IC4829;G;19:12:33.70;-56:32:24.9;Tel;1.05;0.46;25;14.70;;12.01;11.31;11.36;22.96;Sb;;;;;;;;2MASX J19123367-5632247,ESO 184-031,ESO-LV 184-0310,PGC 062902;;; +IC4830;G;19:13:48.56;-59:17:39.7;Pav;1.94;1.45;27;13.18;;10.01;9.30;8.98;23.15;SBbc;;;;;;;;2MASX J19134856-5917396,ESO 141-037,ESO-LV 141-0370,IRAS 19094-5922,PGC 062934;;; +IC4831;G;19:14:43.84;-62:16:21.4;Pav;3.67;0.84;111;12.81;;9.63;8.88;8.68;23.52;SBab;;;;;;;;2MASX J19144383-6216214,ESO 141-038,ESO-LV 141-0380,IRAS 19101-6221,PGC 062951;;; +IC4832;G;19:14:03.87;-56:36:38.6;Tel;2.54;0.80;145;13.87;13.13;10.35;9.58;9.35;23.94;Sa;;;;;;;;2MASX J19140388-5636385,ESO 184-039,ESO-LV 184-0390,IRAS 19098-5641,PGC 062938;;; +IC4833;G;19:15:41.15;-62:19:47.8;Pav;0.78;0.44;94;14.66;;12.69;11.94;11.48;22.42;S?;;;;;;;;2MASX J19154118-6219479,ESO 141-040,ESO-LV 141-0400,IRAS 19111-6225,PGC 062980;;; +IC4834;G;19:16:31.33;-64:00:22.2;Pav;1.11;0.50;126;14.75;;11.52;10.74;10.44;23.37;Sa;;;;;;;;2MASX J19163134-6400221,ESO 104-047,ESO-LV 104-0470,PGC 062996;;; +IC4835;G;19:15:27.48;-58:14:16.8;Pav;0.88;0.57;165;14.74;;12.08;11.43;11.14;22.85;Sc;;;;;;;;2MASX J19152747-5814169,ESO 141-041,ESO-LV 141-0410,PGC 062970;;; +IC4836;G;19:16:17.93;-60:12:01.2;Pav;1.59;1.36;71;13.40;12.65;11.02;10.28;10.03;22.81;SBc;;;;;;;;2MASX J19161790-6012009,ESO 141-043,ESO-LV 141-0430,IRAS 19118-6017,PGC 062990;;; +IC4837;G;19:15:14.64;-54:39:41.1;Tel;2.25;1.23;24;13.15;12.23;;;;23.07;SBc;;;;;;;;ESO 184-046,ESO-LV 184-0460,IRAS 19112-5444,PGC 062963;;; +IC4838;G;19:16:46.11;-61:36:52.2;Pav;1.36;0.62;63;14.16;13.94;11.67;11.04;10.67;23.08;Sbc;;;;;;;;2MASX J19164612-6136521,ESO 141-045,ESO-LV 141-0450,IRAS 19122-6142,PGC 063002;;; +IC4839;G;19:15:34.12;-54:37:36.1;Tel;2.16;1.56;132;13.20;13.66;10.14;9.56;9.25;23.47;Sbc;;;;;;;;2MASX J19153413-5437359,ESO 184-048,ESO-LV 184-0480,IRAS 19114-5443,PGC 062975;;; +IC4840;G;19:15:51.69;-56:12:32.7;Tel;1.13;0.66;130;14.37;14.00;11.47;10.76;10.48;23.27;S0-a;;;;;;;;2MASX J19155168-5612326,ESO 184-049,ESO-LV 184-0490,IRAS 19116-5617,PGC 062983;;; +IC4841;G;19:20:42.83;-72:13:36.4;Pav;0.93;0.79;153;14.89;;12.50;11.97;11.07;23.32;SABc;;;;;;;;2MASX J19204286-7213365,ESO 072-014,ESO-LV 72-0140,PGC 063092;;; +IC4842;G;19:19:24.47;-60:38:39.3;Pav;2.22;1.14;21;13.45;12.29;10.28;9.57;9.37;23.99;E;;;;;;;;2MASX J19192446-6038392,ESO 141-052,ESO-LV 141-0520,PGC 063065;;; +IC4843;G;19:19:21.69;-59:18:31.9;Pav;1.15;0.26;91;15.12;;12.81;12.22;11.70;23.12;SBbc;;;;;;;;2MASX J19192167-5918315,ESO 141-053,ESO-LV 141-0530,IRAS 19149-5924,PGC 063064;;; +IC4844;G;19:19:02.64;-56:01:37.8;Tel;1.61;0.92;168;14.04;;11.16;10.35;10.25;23.36;SBb;;;;;;;;2MASX J19190260-5601377,ESO 184-054,ESO-LV 184-0540,PGC 063056;;; +IC4845;G;19:20:22.49;-60:23:21.0;Pav;1.95;1.46;83;12.87;11.57;9.86;9.17;8.92;22.34;SBb;;;;;;;;2MASX J19202250-6023208,ESO 141-054,ESO-LV 141-0540,IRAS 19159-6028,PGC 063081;;; +IC4846;PN;19:16:28.30;-09:02:37.0;Aql;0.03;;;12.70;11.90;12.68;12.84;11.90;;;;15.19;15.19;;;;HD 180324,BD -09 5069;IRAS 19137-0908,PK 27-09 1,PN G027.6-09.6;;; +IC4847;G;19:23:32.01;-65:30:24.0;Pav;0.97;0.69;142;14.97;;12.41;11.71;11.51;23.59;S0;;;;;;;;2MASX J19233202-6530239,ESO 104-049,ESO-LV 104-0490,PGC 063160;;; +IC4848;G;19:22:54.57;-56:46:50.9;Tel;0.69;0.50;28;14.88;;13.18;12.75;12.27;22.57;Sbc;;;;;;;;2MASX J19225456-5646509,ESO 184-061,ESO-LV 184-0610,IRAS 19188-5652,PGC 063152;;; +IC4849;G;19:25:35.99;-62:55:57.8;Pav;0.99;0.28;117;14.53;;11.65;10.97;10.64;22.28;SBc;;;;;;;;2MASX J19253598-6255578,ESO 104-054,ESO-LV 104-0540,IRAS 19209-6301,PGC 063192;;; +IC4850;Nova;19:20:24.09;-00:08:00.8;Aql;;;;20.81;20.41;;;;;;;;;;;;;HD 181419;;This is Nova Aql 1899 = V606 Aql.; +IC4851;G;19:25:29.44;-57:40:13.6;Pav;1.69;0.58;14;14.16;;10.67;9.93;9.68;23.44;SBab;;;;;;;;2MASX J19252942-5740137,ESO 142-003,ESO-LV 142-0030,PGC 063189;;; +IC4852;G;19:26:25.34;-60:20:09.8;Pav;1.71;0.86;171;13.46;12.43;11.05;10.49;10.04;22.99;SBc;;;;;;;;2MASX J19262534-6020097,ESO 142-006,ESO-LV 142-0060,IRAS 19220-6026,PGC 063204;;; +IC4853;G;19:30:47.31;-71:04:12.1;Pav;1.24;0.31;167;14.88;;12.88;12.16;11.76;23.06;Sbc;;;;;;;;2MASX J19304728-7104121,ESO 072-016,ESO-LV 72-0160,IRAS 19253-7110,PGC 063304;;; +IC4854;G;19:27:21.15;-59:18:55.6;Pav;1.31;1.25;28;13.87;;11.18;10.44;10.16;23.10;SABc;;;;;;4855;;2MASX J19272118-5918553,ESO 142-007,ESO-LV 142-0070,IRAS 19230-5925,PGC 063223;;; +IC4855;Dup;19:27:21.15;-59:18:55.6;Pav;;;;;;;;;;;;;;;;4854;;;;; +IC4856;G;19:27:30.53;-54:54:30.7;Tel;1.17;0.57;29;14.46;;;;;22.96;IB;;;;;;;;ESO 184-069,ESO-LV 184-0690,PGC 063226;;; +IC4857;G;19:28:39.18;-58:46:04.5;Pav;1.82;1.08;32;13.84;;11.55;10.91;10.42;23.32;Sc;;;;;;4858;;2MASX J19283917-5846043,ESO 142-012,ESO-LV 142-0120,IRAS 19244-5852,PGC 063256;;; +IC4858;Dup;19:28:39.18;-58:46:04.5;Pav;;;;;;;;;;;;;;;;4857;;;;; +IC4859;G;19:30:46.66;-66:18:53.0;Pav;1.17;0.62;35;14.75;;11.68;10.94;10.64;23.27;SABb;;;;;;;;2MASX J19304664-6618531,ESO 104-058,ESO-LV 104-0580,IRAS 19258-6625,PGC 063302;;; +IC4860;G;19:31:27.51;-67:22:08.5;Pav;0.96;0.73;150;14.68;;12.40;11.66;11.50;23.09;SBc;;;;;;;;2MASX J19312748-6722082,ESO 105-001,ESO-LV 105-0010,IRAS 19263-6728,PGC 063326;;; +IC4861;G;19:29:16.72;-57:34:29.9;Pav;1.21;0.47;28;15.50;;12.72;11.96;11.70;24.02;Sc;;;;;;;;2MASX J19291673-5734297,ESO 142-015,ESO-LV 142-0150,PGC 063274;;; +IC4862;G;19:31:40.35;-67:19:22.4;Pav;1.55;0.51;180;14.58;;11.62;10.94;10.61;23.36;Sbc;;;;;;;;2MASX J19314033-6719223,ESO 105-003,ESO-LV 105-0030,IRAS 19266-6726,PGC 063334;;; +IC4863;**;19:27:51.69;-36:13:00.8;Sgr;;;;11.93;11.38;10.34;10.03;9.96;;;;;;;;;;;;;Main component is TYC 7436-294-1. +IC4864;G;19:40:06.17;-77:33:29.4;Oct;1.76;0.43;177;15.02;;10.86;10.06;9.79;24.31;SABa;;;;;;;;2MASX J19400620-7733295,ESO 025-013,ESO-LV 25-0130,PGC 063494;;; +IC4865;**;19:30:50.34;-46:41:54.4;Tel;;;;;;;;;;;;;;;;;;;;; +IC4866;G;19:34:34.75;-61:08:44.8;Pav;1.64;1.02;164;13.89;;10.75;10.04;9.77;23.37;SABb;;;;;;;;2MASX J19343478-6108446,ESO 142-021,ESO-LV 142-0210,PGC 063376;;; +IC4867;Dup;19:26:31.98;+50:07:31.0;Cyg;;;;;;;;;;;;;;;;1301;;;;; +IC4868;**;19:33:33.40;-45:53:33.7;Tel;;;;11.12;10.56;;;;;;;;;;;;;HD 183845,IDS 19263-4606 AB,TYC 8389-736-1,WDS J19336-4554AB;;This is the Galactic double star IDS 19263-4606 AB.; +IC4869;G;19:36:02.33;-61:01:40.3;Pav;1.79;1.17;167;13.63;;13.03;12.65;12.20;23.33;Sm;;;;;;;;2MASX J19360232-6101402,ESO 142-025,ESO-LV 142-0250,IRAS 19316-6108,PGC 063398;;; +IC4870;G;19:37:37.60;-65:48:42.6;Pav;1.67;0.87;132;13.92;14.63;12.73;12.46;12.12;23.87;IB;;;;;;;;2MASX J19373757-6548425,ESO 105-011,ESO-LV 105-0110,IRAS 19327-6555,PGC 063432;;; +IC4871;G;19:35:42.23;-57:31:09.2;Pav;3.78;0.77;8;14.03;;11.92;11.15;10.89;24.40;SABc;;;;;;4872;;2MASX J19354222-5731092,ESO 142-024,ESO-LV 142-0240,PGC 063395;;; +IC4872;Dup;19:35:42.23;-57:31:09.2;Pav;;;;;;;;;;;;;;;;4871;;;;; +IC4873;G;19:34:54.69;-46:08:09.0;Tel;0.93;0.74;34;15.13;;12.62;12.09;11.73;23.43;Sbc;;;;;;;;2MASX J19345467-4608091,ESO 283-008,ESO-LV 283-0080,PGC 063382;;; +IC4874;G;19:36:21.54;-47:15:57.4;Tel;1.39;0.79;54;14.75;;11.83;11.28;11.06;23.65;SABb;;;;;;;;2MASX J19362154-4715574,ESO 283-011,ESO-LV 283-0110,PGC 063403;;; +IC4875;G;19:37:38.49;-52:04:32.6;Tel;1.00;0.68;68;14.54;;13.61;12.73;12.75;22.99;I;;;;;;;;2MASX J19373843-5204327,ESO 232-012,ESO-LV 232-0120,PGC 063433;;; +IC4876;G;19:37:42.77;-52:50:33.9;Tel;1.33;0.99;123;14.35;;11.78;11.18;10.79;23.33;SABc;;;;;;;;2MASX J19374278-5250337,ESO 185-004,ESO-LV 185-0040,IRAS 19338-5257,PGC 063434;;; +IC4877;G;19:37:55.89;-51:59:29.0;Tel;1.64;0.31;83;14.61;;12.26;11.56;11.30;24.31;S0;;;;;;;;2MASX J19375589-5159287,ESO 232-014,ESO-LV 232-0140,IRAS 19341-5206,PGC 063443;;; +IC4878;G;19:38:50.07;-58:13:35.2;Pav;1.50;0.31;43;15.42;;12.48;11.66;11.31;24.78;;;;;;;;;2MASX J19385011-5813353,IRAS 19346-5820,PGC 063467;;Marginal HIPASS detection.; +IC4879;G;19:39:36.45;-52:22:07.6;Tel;0.90;0.41;81;14.46;;11.77;11.15;10.85;22.65;Sa;;;;;;;;2MASX J19393646-5222075,ESO 232-016,ESO-LV 232-0160,IRAS 19357-5229,PGC 063480;;; +IC4880;G;19:40:30.91;-56:24:36.6;Tel;1.99;0.49;115;14.31;;10.90;10.18;10.02;24.41;S0-a;;;;;;;;2MASX J19403091-5624367,ESO 185-010,ESO-LV 185-0100,PGC 063508;;; +IC4881;G;19:40:26.02;-55:51:27.8;Tel;1.10;0.87;152;14.59;;11.75;11.25;10.91;23.31;SBbc;;;;;;;;2MASX J19402602-5551277,ESO 185-008,ESO-LV 185-0080,IRAS 19363-5558,PGC 063506;;; +IC4882;G;19:40:23.31;-55:11:48.9;Tel;0.98;0.84;2;14.61;;11.55;10.83;10.64;23.13;SBb;;;;;;;;2MASX J19402333-5511487,ESO 185-009,ESO-LV 185-0090,IRAS 19363-5518,PGC 063505;;; +IC4883;G;19:42:00.53;-55:32:43.9;Tel;1.51;0.50;157;14.62;;11.26;10.56;10.32;23.46;SBb;;;;;;;;2MASX J19420051-5532440,ESO 185-011,ESO-LV 185-0110,PGC 063537;;; +IC4884;G;19:42:41.10;-58:07:42.5;Pav;1.59;0.42;166;14.72;;11.39;10.66;10.57;24.34;S0;;;;;;;;2MASX J19424107-5807426,ESO 142-033,ESO-LV 142-0330,PGC 063546;;; +IC4885;G;19:43:52.04;-60:39:06.3;Pav;2.00;0.47;114;14.56;;11.88;11.46;11.03;23.59;Sc;;;;;;;;2MASX J19435203-6039062,ESO 142-036,ESO-LV 142-0360,PGC 063577;;; +IC4886;G;19:43:14.55;-51:48:27.0;Tel;1.48;0.75;110;14.18;;11.13;10.39;10.11;23.32;Sb;;;;;;;;2MASX J19431454-5148268,ESO 232-018,ESO-LV 232-0180,PGC 063555;;; +IC4887;G;19:48:21.29;-69:35:13.9;Pav;0.99;0.76;91;14.22;;11.70;11.08;10.75;22.81;SABa;;;;;;;;2MASX J19482143-6935141,ESO 073-009,ESO-LV 73-0090,PGC 063681;;; +IC4888;G;19:44:52.24;-54:27:23.9;Tel;1.14;0.87;100;14.68;;12.03;11.38;11.11;23.63;E-S0;;;;;;;;2MASX J19445224-5427238,ESO 185-012,ESO-LV 185-0120,PGC 063609;;; +IC4889;G;19:45:15.15;-54:20:38.9;Tel;2.99;2.49;2;12.25;11.08;9.01;8.34;8.11;23.30;E;;;;;;4891;;2MASX J19451516-5420389,ESO 185-014,ESO-LV 185-0140,PGC 063620,PGC 063621;;; +IC4890;G;19:45:35.46;-56:32:43.6;Tel;1.01;0.82;55;14.71;;12.12;11.48;11.16;23.35;SBb;;;;;;;;2MASX J19453547-5632435,ESO 185-016,ESO-LV 185-0160,PGC 063631;;; +IC4891;Dup;19:45:15.15;-54:20:38.9;Tel;;;;;;;;;;;;;;;;4889;;;;; +IC4892;G;19:49:31.61;-70:13:38.8;Pav;1.82;0.40;4;14.81;14.98;11.88;11.22;10.96;24.67;Sbc;;;;;;;;2MASX J19493156-7013387,ESO 073-011,ESO-LV 73-0110,PGC 063709;;; +IC4893;G;19:50:33.36;-72:30:36.0;Pav;0.57;0.48;65;15.65;;13.41;12.65;12.65;;;;;;;;;;2MASX J19503336-7230358,ESO 046-004,PGC 063726;;; +IC4894;G;19:46:59.11;-51:50:47.4;Tel;0.87;0.51;131;14.65;;12.78;12.33;11.75;22.72;;;;;;;;;2MASX J19465918-5150476,ESO 232-025,ESO-LV 232-0250,PGC 063662;;; +IC4895;Dup;19:44:57.74;-14:48:12.4;Sgr;;;;;;;;;;;;;;;6822;;;;;; +IC4896;G;19:49:04.91;-58:58:53.2;Pav;0.90;0.48;18;15.39;;12.46;11.78;11.59;23.41;Sb;;;;;;;;2MASX J19490488-5858529,ESO 142-045,ESO-LV 142-0450,PGC 063698;;; +IC4897;G;19:49:19.70;-51:52:04.8;Tel;0.80;0.46;111;15.64;;12.65;11.98;11.82;23.41;SBb;;;;;;;;2MASX J19491968-5152048,ESO 233-001,ESO-LV 233-0010,PGC 063703;;; +IC4898;Other;19:47:46.18;-33:19:14.1;Sgr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4899;G;19:54:26.75;-70:35:23.1;Pav;1.02;0.62;5;14.52;;12.34;11.84;11.68;22.95;Sbc;;;;;;;;2MASX J19542659-7035293,ESO 073-015,ESO-LV 73-0150,PGC 063799;;The 2MASX position refers to a knot 8 arcsec south of the nucleus.; +IC4900;G;19:50:22.10;-51:20:45.0;Tel;0.91;0.23;174;16.16;;13.10;12.63;12.22;23.64;Sbc;;;;;;;;2MASX J19502212-5120450,ESO 233-002,ESO-LV 233-0020,PGC 063718;;; +IC4901;G;19:54:23.53;-58:42:48.8;Pav;3.68;2.54;130;12.29;;9.69;9.20;8.85;23.22;SABc;;;;;;;;2MASX J19542352-5842488,ESO 142-050,ESO-LV 142-0500,IRAS 19501-5850,PGC 063797;;; +IC4902;G;19:54:24.11;-56:22:44.7;Tel;0.68;0.34;18;16.07;;13.04;12.45;12.20;23.44;Sbc;;;;;;;;2MASX J19542410-5622447,ESO 185-024,ESO-LV 185-0240,PGC 063798;;; +IC4903;G;19:58:13.42;-70:27:12.3;Pav;1.17;0.37;180;15.24;;12.59;12.05;11.40;23.49;Sb;;;;;;;;2MASX J19581338-7027122,ESO 073-016,ESO-LV 73-0160,PGC 063897;;; +IC4904;G;19:58:38.81;-70:11:03.1;Pav;1.07;0.76;52;14.77;;13.53;12.88;12.93;23.46;Sab;;;;;;;;2MASX J19583878-7011030,ESO 073-017,ESO-LV 73-0170,PGC 063913;;; +IC4905;G;19:56:05.87;-61:13:15.9;Pav;1.04;0.34;118;15.93;;12.89;12.12;11.73;24.08;Sab;;;;;;;;2MASX J19560588-6113161,ESO 142-055,ESO-LV 142-0550,PGC 063828;;; +IC4906;G;19:56:47.60;-60:28:05.1;Pav;1.61;0.91;68;13.72;;10.38;9.67;9.40;23.55;E-S0;;;;;;;;2MASX J19564754-6028049,ESO 142-057,ESO-LV 142-0570,PGC 063849;;; +IC4907;G;19:56:13.06;-52:27:14.3;Tel;0.54;0.43;1;16.10;;14.52;13.44;13.44;23.36;Sbc;;;;;;;;2MASX J19561307-5227143,ESO 185-028,ESO-LV 185-0280,PGC 063831;;; +IC4908;G;19:56:56.67;-55:47:30.2;Tel;0.66;0.59;168;15.01;;12.09;11.39;11.07;22.80;Sa;;;;;;;;2MASX J19565666-5547301,ESO 185-030,ESO-LV 185-0300,PGC 063855;;; +IC4909;G;19:56:45.60;-50:03:20.7;Tel;1.16;0.79;77;14.62;;12.04;11.31;11.16;23.38;Sbc;;;;;;;;2MASX J19564558-5003206,ESO 233-008,ESO-LV 233-0080,PGC 063848;;; +IC4910;G;19:57:46.99;-56:51:47.7;Pav;0.52;0.42;117;15.60;;13.02;12.45;11.98;22.77;SBbc;;;;;;;;2MASX J19574697-5651474,ESO 185-033,ESO-LV 185-0330,PGC 063879;;; +IC4911;G;19:57:41.83;-51:59:11.3;Tel;0.61;0.45;139;16.14;;13.75;13.01;12.71;23.71;S0;;;;;;;;2MASX J19574185-5159113,ESO 233-009,ESO-LV 233-0090,PGC 063877;;; +IC4912;G;20:06:49.69;-77:21:27.0;Oct;1.00;0.39;41;15.29;;13.04;12.75;12.10;23.49;SBc;;;;;;;;2MASX J20064966-7721270,ESO 046-005,PGC 064115,PGC 064117;;; +IC4913;G;19:56:47.64;-37:19:42.1;Sgr;1.57;1.07;127;13.98;;10.74;10.02;9.81;23.69;E-S0;;;;;;;;2MASX J19564762-3719422,ESO 399-005,ESO-LV 399-0050,MCG -06-43-013,PGC 063850;;; +IC4914;G;19:57:56.51;-50:07:53.4;Tel;0.46;0.37;91;15.87;;14.25;13.47;12.89;22.75;Sbc;;;;;;;;2MASX J19575654-5007537,ESO 233-011,ESO-LV 233-0110,PGC 063885;;; +IC4915;G;19:58:31.94;-52:38:32.0;Tel;1.37;0.88;97;14.85;;11.48;10.69;10.38;24.20;E-S0;;;;;;;;2MASX J19583194-5238323,ESO 185-038,ESO-LV 185-0380,PGC 063909;;; +IC4916;G;19:58:19.17;-50:16:19.6;Tel;1.05;0.94;175;14.40;;12.31;11.71;11.64;23.16;Sb;;;;;;;;2MASX J19581915-5016197,ESO 233-013,ESO-LV 233-0130,PGC 063902;;; +IC4917;G;19:58:54.77;-52:16:23.5;Tel;0.79;0.73;35;15.25;;11.88;11.14;11.04;23.45;S0;;;;;;;;2MASX J19585474-5216234,ESO 233-015,ESO-LV 233-0150,PGC 063923;;; +IC4918;G;19:59:13.19;-52:16:30.5;Tel;0.41;0.32;123;16.17;;14.24;13.35;12.48;23.04;;;;;;;;;2MASX J19591322-5216306,ESO 233-016,ESO-LV 233-0160,PGC 063929;;; +IC4919;G;20:00:09.05;-55:22:24.2;Tel;1.36;0.92;36;15.03;;;;;23.99;Sd;;;;;;;;ESO 185-043,ESO-LV 185-0430,PGC 063956;;; +IC4920;G;20:00:08.81;-53:23:01.6;Tel;0.64;0.34;34;16.63;;14.25;13.81;13.45;23.79;Sbc;;;;;;;;2MASX J20000878-5323014,ESO 185-044,ESO-LV 185-0440,PGC 063957;;; +IC4921;G;20:03:19.60;-67:49:36.7;Pav;0.80;0.42;136;15.33;;12.48;11.78;11.44;23.56;S0;;;;;;;;2MASX J20031959-6749368,ESO 073-020,ESO-LV 73-0200,IRAS 19583-6758,PGC 064037;;; +IC4922;Other;19:59:29.37;-40:21:47.1;Sgr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4923;G;20:00:57.37;-52:37:54.0;Tel;1.03;0.90;97;14.54;;11.24;10.52;10.26;23.30;S0;;;;;;;;2MASX J20005737-5237539,ESO 185-045,ESO-LV 185-0450,PGC 063984;;; +IC4924;Other;19:59:51.43;-41:32:45.8;Sgr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4925;G;20:01:09.87;-52:51:57.0;Tel;0.90;0.18;164;16.37;;12.89;12.17;11.83;23.61;Sbc;;;;;;;;2MASX J20010983-5251569,ESO 185-046,ESO-LV 185-0460,PGC 063991;;; +IC4926;G;20:00:12.15;-38:34:42.9;Sgr;1.29;1.00;54;13.88;;10.42;9.72;9.46;23.37;E;;;;;;;;2MASX J20001212-3834431,ESO 339-018,ESO-LV 339-0180,MCG -06-44-005,PGC 063961;;; +IC4927;G;20:01:49.48;-53:55:03.9;Tel;1.18;0.37;167;15.12;;12.32;11.57;11.34;23.45;Sb;;;;;;;;2MASX J20014948-5355038,ESO 185-048,ESO-LV 185-0480,PGC 064000;;; +IC4928;G;20:10:12.00;-77:18:32.3;Oct;0.90;0.27;33;15.97;;12.85;12.00;11.53;24.50;;;;;;;;;2MASX J20101200-7718324,ESO 046-006,IRAS 20034-7727,PGC 064198;;; +IC4929;G;20:06:41.70;-71:41:00.8;Pav;1.34;0.43;21;14.33;;11.59;10.89;10.63;22.94;Sb;;;;;;;;2MASX J20064169-7141007,ESO 073-022,ESO-LV 73-0220,IRAS 20011-7149,PGC 064108;;; +IC4930;Other;20:02:26.46;-54:18:30.9;Tel;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4931;G;20:00:50.36;-38:34:30.2;Sgr;2.28;1.43;135;12.82;;9.62;8.96;8.66;23.57;E;;;;;;;;2MASX J20005034-3834301,ESO 339-023,ESO-LV 339-0230,MCG -06-44-008,PGC 063976;;; +IC4932;G;20:02:15.48;-52:50:46.2;Tel;0.83;0.59;6;15.50;;12.12;11.42;11.08;23.58;Sa;;;;;;;;2MASX J20021550-5250463,ESO 185-049,ESO-LV 185-0490,PGC 064012;;; +IC4933;G;20:03:29.04;-54:58:47.8;Tel;2.08;1.28;9;13.29;12.24;10.66;9.98;9.70;22.91;SBbc;;;;;;;;2MASX J20032906-5458478,ESO 185-055,ESO-LV 185-0550,IRAS 19595-5507,PGC 064042;;; +IC4934;G;20:07:14.85;-69:28:45.1;Pav;1.55;0.26;27;14.94;;12.67;11.97;11.58;23.29;Sc;;;;;;;;2MASX J20071483-6928450,ESO 073-023,ESO-LV 73-0230,PGC 064133;;; +IC4935;G;20:04:34.12;-57:35:53.4;Pav;1.80;0.50;176;14.04;;10.58;10.08;9.75;23.54;SBa;;;;;;;;2MASX J20043412-5735534,ESO 143-003,ESO-LV 143-0030,PGC 064064;;; +IC4936;G;20:05:52.20;-61:25:42.7;Pav;1.35;0.70;12;14.57;;13.04;12.41;12.10;23.36;SBd;;;;;;;;2MASX J20055217-6125428,ESO 143-006,ESO-LV 143-0060,PGC 064088;;; +IC4937;G;20:05:17.58;-56:15:22.3;Tel;1.72;0.41;1;14.91;;11.15;10.42;10.12;23.91;Sb;;;;;;;;2MASX J20051756-5615223,ESO 185-060,ESO-LV 185-0600,IRAS 20012-5623,PGC 064074;;Star superposed.; +IC4938;G;20:06:11.70;-60:12:41.8;Pav;0.46;0.30;170;13.33;;10.77;10.16;9.92;20.22;SBab;;;;;;;;2MASX J20061173-6012416,ESO 143-007,ESO-LV 143-0070,PGC 064096;;; +IC4939;G;20:07:11.04;-60:44:19.7;Pav;0.74;0.44;148;15.08;;;;;22.76;Sc;;;;;;;;ESO 143-008,ESO-LV 143-0080,PGC 064131;;; +IC4940;Other;20:05:43.62;-44:41:59.8;Sgr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4941;G;20:06:58.61;-53:39:08.3;Tel;0.88;0.64;2;15.55;;13.92;12.70;13.28;23.70;SBd;;;;;;;;2MASX J20065863-5339084,ESO 185-066,ESO-LV 185-0660,PGC 064124;;; +IC4942;G;20:06:49.38;-52:36:35.7;Tel;0.65;0.35;147;16.27;;12.98;12.52;11.86;23.61;SBab;;;;;;;;2MASX J20064937-5236354,ESO 185-065,ESO-LV 185-0650,PGC 064114;;; +IC4943;G;20:06:28.26;-48:22:32.2;Tel;1.33;1.25;8;13.87;13.19;10.68;9.95;9.82;23.12;E;;;;;;;;2MASX J20062824-4822323,ESO 233-028,ESO-LV 233-0280,PGC 064102;;; +IC4944;G;20:07:08.84;-54:26:48.8;Tel;1.33;0.65;7;14.62;;11.32;10.57;10.32;23.92;S0-a;;;;;;;;2MASX J20070886-5426487,ESO 185-067,ESO-LV 185-0670,IRAS 20032-5435,PGC 064129;;; +IC4945;Dup;20:11:16.85;-71:00:46.6;Pav;;;;;;;;;;;;;;;6876A;;;;;; +IC4946;G;20:23:58.07;-43:59:43.0;Sgr;2.50;0.90;68;12.83;11.79;9.72;8.99;8.73;23.04;S0-a;;;;;;;;2MASX J20235805-4359432,ESO 285-007,ESO-LV 285-0070,IRAS 20205-4409,MCG -07-42-001,PGC 064614;;"The IC ID is not certain; ESO 284- ? 015 is for its nominal position."; +IC4947;G;20:07:31.75;-53:08:32.8;Tel;0.76;0.61;72;15.26;;11.70;10.92;10.72;23.32;E;;;;;;;;2MASX J20073177-5308329,ESO 185-069,ESO-LV 185-0690,PGC 064138;;; +IC4948;Dup;20:24:28.14;-43:39:12.7;Sgr;;;;;;;;;;;;;;;6902;;;;;; +IC4949;Dup;20:07:19.48;-48:22:12.8;Tel;;;;;;;;;;;;;;;6861;;;;;; +IC4950;G;20:08:27.36;-56:09:42.6;Tel;1.38;0.38;39;15.18;;12.11;11.74;11.14;23.60;SBbc;;;;;;;;2MASX J20082736-5609423,ESO 185-070,ESO-LV 185-0700,PGC 064159;;; +IC4951;G;20:09:31.77;-61:51:01.7;Pav;3.07;0.71;175;14.23;13.84;;;;23.93;SBd;;;;;;;;ESO 143-010,ESO-LV 143-0100,PGC 064181;;; +IC4952;G;20:08:37.65;-55:27:13.2;Tel;0.93;0.21;8;14.04;;10.96;10.20;9.96;22.43;S0-a;;;;;;;;2MASX J20083763-5527132,ESO 186-001,ESO-LV 186-0010,PGC 064163;;; +IC4953;G;20:09:59.92;-62:47:32.0;Pav;0.57;0.38;70;15.71;;13.13;12.52;12.34;22.91;Sbc;;;;;;;;2MASX J20095989-6247320,ESO 105-027,ESO-LV 105-0270,PGC 064193;;; +IC4954;HII;20:04:45.02;+29:15:10.1;Vul;3.00;1.00;;;;;;;;;;;;;;;;LBN 153;;Two Galactic stars embedded in nebulosity.; +IC4955;Neb;20:04:52.55;+29:11:33.4;Vul;2.09;1.55;80;12.98;;;;;;;;;;;;;;;;Several Galactic stars embedded in nebulosity.;Dimensions and B-Mag taken from LEDA +IC4956;G;20:11:31.26;-45:35:35.6;Tel;1.73;1.67;115;12.98;;9.87;9.12;8.84;23.43;E;;;;;;;;2MASX J20113123-4535357,ESO 284-023,ESO-LV 284-0230,IRAS 20079-4544,PGC 064230;;; +IC4957;G;20:09:35.63;-55:42:33.5;Tel;0.93;0.52;14;15.26;;12.13;11.53;11.06;23.47;SBab;;;;;;;;2MASX J20093561-5542333,ESO 186-003,ESO-LV 186-0030,IRAS 20056-5551,PGC 064183;;; +IC4958;G;20:15:35.34;-72:42:40.3;Pav;0.46;0.30;25;;;13.97;13.20;13.29;;Sc;;;;;;;;2MASX J20153537-7242402,ESO 046-007,PGC 064370;;; +IC4959;Other;20:10:57.22;-53:05:22.9;Tel;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4960;G;20:15:23.88;-70:32:15.9;Pav;1.26;0.39;166;14.53;;11.28;10.59;10.44;23.71;S0;;;;;;;;2MASX J20152387-7032159,ESO 073-028,ESO-LV 73-0280,PGC 064363;;; +IC4961;G;20:11:28.59;-53:07:30.4;Tel;1.64;0.46;91;15.07;;12.92;12.25;12.16;23.72;SABd;;;;;;;;2MASX J20112857-5307306,ESO 186-008,ESO-LV 186-0080,PGC 064229;;This may also be IC 4959.; +IC4962;G;20:16:42.49;-71:07:46.4;Pav;0.98;0.20;156;16.20;;;;;23.69;Sbc;;;;;;;;ESO 073-030,ESO-LV 73-0300,PGC 064402;;; +IC4963;G;20:12:05.49;-55:14:45.2;Tel;1.43;0.61;159;14.33;;10.90;10.26;9.95;23.49;SABa;;;;;;;;2MASX J20120552-5514452,ESO 186-010,ESO-LV 186-0100,IRAS 20081-5523,PGC 064255;;; +IC4964;G;20:17:23.93;-73:53:08.3;Pav;1.59;0.58;155;14.60;;12.96;12.07;11.63;23.30;Scd;;;;;;;;2MASX J20172390-7353083,ESO 046-008,PGC 064432;;; +IC4965;G;20:12:27.32;-56:49:36.4;Pav;1.23;0.85;143;14.42;;11.36;10.62;10.29;24.01;S0;;;;;;;;2MASX J20122726-5649363,ESO 186-011,ESO-LV 186-0110,PGC 064272;;; +IC4966;Other;20:12:16.42;-53:37:09.1;Tel;;;;;;;;;;;;;;;;;;;;Galactic triple star; +IC4967;G;20:16:23.15;-70:33:52.9;Pav;0.73;0.57;92;14.82;;11.82;11.20;10.83;23.00;E;;;;;;;;2MASX J20162313-7033530,ESO 073-029,ESO-LV 73-0290,PGC 064396;;; +IC4968;G;20:14:50.23;-64:47:54.2;Pav;0.76;0.61;37;15.01;;12.76;12.14;11.62;22.96;SBc;;;;;;;;2MASX J20145022-6447542,ESO 106-001,ESO-LV 106-0010,PGC 064345;;; +IC4969;G;20:12:56.30;-53:55:12.2;Tel;0.71;0.64;22;15.16;;;;;23.14;Sa;;;;;;;;2MASX J20125630-5355121,PGC 064288;;;B-Mag taken from LEDA. +IC4970;G;20:16:57.35;-70:44:59.1;Pav;1.66;0.44;12;14.16;13.88;;;;24.36;E-S0;;;;;;;;ESO 073-033,ESO-LV 73-0330,PGC 064415;;; +IC4971;G;20:17:02.86;-70:37:15.5;Pav;0.91;0.28;5;16.06;;13.16;12.29;12.46;23.67;Sbc;;;;;;;;2MASX J20170278-7037157,ESO 073-031,ESO-LV 73-0310,PGC 064417;;; +IC4972;G;20:17:42.72;-70:54:54.4;Pav;1.01;0.26;16;15.36;13.44;11.95;11.09;10.82;23.34;Sb;;;;;;;;2MASX J20174272-7054544,ESO 073-034,ESO-LV 73-0340,PGC 064436;;; +IC4973;G;20:14:34.13;-58:22:16.0;Pav;0.66;0.35;1;15.80;;13.61;12.72;12.84;23.28;Sbc;;;;;;;;2MASX J20143413-5822159,ESO 143-015,ESO-LV 143-0150,PGC 064337;;; +IC4974;GPair;20:15:26.50;-61:51:37.0;Pav;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC4974 NED01;G;20:15:26.13;-61:51:27.6;Pav;0.84;0.61;68;15.57;14.36;11.99;11.32;10.78;24.85;E;;;;;;;;2MASX J20152609-6151272,ESO 143-016,ESO-LV 143-0160,PGC 064366;;; +IC4974 NED02;G;20:15:26.95;-61:51:47.0;Pav;0.66;0.48;110;;;;;;;;;;;;;;;PGC 064361;;; +IC4975;G;20:14:03.02;-52:43:18.4;Tel;1.11;1.01;39;14.34;;11.35;10.49;10.19;23.34;S0;;;;;;;;2MASX J20140302-5243183,ESO 186-017,ESO-LV 186-0170,PGC 064325;;; +IC4976;G;20:15:41.06;-61:52:30.5;Pav;0.44;0.34;61;15.58;;12.41;11.68;11.22;22.50;Sa;;;;;;;;2MASX J20154106-6152304,ESO 143-017,ESO-LV 143-0170,PGC 064374;;; +IC4977;Other;20:11:53.20;-21:38:11.9;Cap;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4978;G;20:14:37.65;-54:25:19.1;Tel;0.74;0.30;91;15.43;;12.66;11.91;11.58;23.54;;;;;;;;;2MASX J20143763-5425190,ESO 186-018,ESO-LV 186-0180,PGC 064338;;; +IC4979;G;20:14:41.84;-53:27:31.3;Tel;1.08;0.90;13;14.96;;13.05;12.33;12.66;23.68;SABc;;;;;;;;2MASX J20144185-5327311,ESO 186-019,ESO-LV 186-0190,PGC 064342;;; +IC4980;G;20:15:28.93;-57:54:45.7;Pav;1.61;0.63;123;14.23;;10.96;10.20;9.95;23.66;S0-a;;;;;;;;2MASX J20152893-5754455,ESO 143-018,ESO-LV 143-0180,IRAS 20114-5803,PGC 064367;;; +IC4981;G;20:19:39.20;-70:50:54.7;Pav;1.07;0.35;136;15.05;;12.64;11.85;11.72;21.36;I;;;;;;;;2MASX J20193921-7050546,ESO 073-038,ESO-LV 73-0380,PGC 064486;;; +IC4982;G;20:20:20.84;-71:00:28.2;Pav;0.52;0.44;51;15.17;;13.85;13.31;13.13;22.57;;;;;;;;;2MASX J20202087-7100280,ESO 073-039,ESO-LV 73-0390,PGC 064498;;; +IC4983;G;20:16:05.95;-52:05:11.5;Tel;1.02;0.94;50;14.33;;11.99;11.31;10.85;23.00;SBc;;;;;;;;2MASX J20160592-5205114,ESO 233-048,ESO-LV 233-0480,IRAS 20123-5214,PGC 064382;;; +IC4984;G;20:16:17.45;-52:42:13.4;Tel;0.88;0.39;115;15.39;;12.33;11.55;11.40;23.25;Sb;;;;;;;;2MASX J20161744-5242135,ESO 186-023,ESO-LV 186-0230,PGC 064388;;; +IC4985;G;20:20:44.02;-70:59:13.2;Pav;0.85;0.56;66;14.90;;11.79;10.60;10.69;22.99;S?;;;;;;;;2MASX J20204401-7059130,ESO 073-040,ESO-LV 73-0400,PGC 064505;;; +IC4986;G;20:17:11.65;-55:02:11.0;Tel;2.23;0.86;15;14.16;;12.78;12.12;11.96;23.81;SABd;;;;;;;;2MASX J20171166-5502111,ESO 186-026,ESO-LV 186-0260,PGC 064423;;; +IC4987;G;20:17:19.38;-52:16:46.4;Tel;1.01;0.65;66;15.20;;12.51;11.73;11.59;23.54;SABc;;;;;;;;2MASX J20171935-5216464,ESO 233-052,ESO-LV 233-0520,PGC 064428;;; +IC4988;Other;20:21:46.25;-69:23:15.5;Pav;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC4989;G;20:19:23.69;-58:33:05.3;Pav;1.16;0.29;155;15.31;;12.10;11.33;10.93;23.39;Sb;;;;;;;;2MASX J20192373-5833052,ESO 143-019,ESO-LV 143-0190,PGC 064476;;; +IC4990;G;20:21:25.59;-66:53:27.1;Pav;0.77;0.36;19;15.74;;13.53;12.83;12.41;23.61;SBc;;;;;;;;2MASX J20212561-6653271,ESO 106-003,ESO-LV 106-0030,PGC 064520;;; +IC4991;G;20:18:23.28;-41:03:00.6;Sgr;2.91;2.13;129;12.33;;9.45;8.80;8.49;23.73;S0;;;;;;;;2MASX J20182327-4103006,ESO 340-011,ESO-LV 340-0110,MCG -07-41-024,PGC 064450;;; +IC4992;G;20:23:27.85;-71:33:53.7;Pav;1.71;0.26;55;14.49;;12.23;11.66;11.50;22.99;SBc;;;;;;;;2MASX J20232785-7133535,ESO 073-042,ESO-LV 73-0420,IRAS 20180-7143,PGC 064597;;Confused HIPASS source; +IC4993;G;20:21:56.36;-66:59:07.4;Pav;0.52;0.40;28;15.74;;13.46;12.69;12.76;22.78;Sm;;;;;;;;2MASX J20215637-6659072,ESO 106-004,ESO-LV 106-0040,PGC 064541;;; +IC4994;G;20:19:44.52;-53:26:50.5;Tel;1.36;1.06;96;13.92;;10.74;10.09;9.72;23.39;S0;;;;;;;;2MASX J20194454-5326502,ESO 186-033,ESO-LV 186-0330,PGC 064489;;; +IC4995;G;20:19:58.97;-52:37:19.1;Tel;1.19;0.81;158;14.32;14.06;11.16;10.45;10.20;23.45;S0;;;;;;;;2MASX J20195896-5237192,ESO 186-034,ESO-LV 186-0340,IRAS 20162-5246,PGC 064491;;; +IC4996;OCl;20:16:33.27;+37:33:19.0;Cyg;6.00;;;7.87;7.30;;;;;;;;;;;;;MWSC 3297;;; +IC4997;PN;20:20:08.80;+16:43:54.0;Del;0.03;;;11.60;10.50;10.45;10.41;9.67;;;;14.60;14.40;;;;HD 193538;IRAS 20178+1634,PK 58-10 1,PN G058.3-10.9,TYC 1631-1785-1;;; +IC4998;G;20:22:10.58;-38:18:30.0;Sgr;1.57;1.08;103;14.02;;11.35;10.81;10.42;23.39;SBc;;;;;;5018;;2MASX J20221058-3818300,ESO 340-020,ESO-LV 340-0200,IRAS 20188-3828,MCG -06-44-030,PGC 064546;;Neither IC identification is certain.; +IC4999;G;20:23:56.34;-26:00:53.8;Cap;2.03;1.00;92;13.51;;11.38;10.62;10.47;22.94;Sc;;;;;;;;2MASX J20235633-2600538,ESO 527-021,IRAS 20209-2610,MCG -04-48-004,PGC 064613;;Confused HIPASS source; +IC5000;Dup;20:22:21.51;+06:25:47.5;Aql;;;;;;;;;;;;;;;6901;;;;;; +IC5001;G;20:26:20.05;-54:46:29.0;Tel;0.97;0.39;28;15.24;;12.99;12.41;12.20;23.72;S0-a;;;;;;;;2MASX J20262000-5446288,ESO 186-042,ESO-LV 186-0420,PGC 064681;;; +IC5002;G;20:26:39.89;-54:47:58.9;Tel;1.35;0.72;93;14.22;;10.74;10.02;9.80;23.60;S0;;;;;;;;2MASX J20263988-5447588,ESO 186-044,ESO-LV 186-0440,PGC 064695;;; +IC5003;G;20:43:14.34;-29:51:12.2;Mic;2.36;0.66;162;13.45;12.60;10.81;10.14;9.91;22.89;Sbc;;;;;;5029,5039,5046;;2MASX J20431434-2951122,ESO 463-020,ESO-LV 463-0200,IRAS 20401-3002,MCG -05-49-001,PGC 065249;;; +IC5004;Dup;20:31:39.07;-30:49:54.8;Mic;;;;;;;;;;;;;;;6923;;;;;; +IC5005;G;20:25:20.21;-25:49:45.4;Cap;1.36;0.99;62;13.58;;11.28;10.47;10.41;22.76;SBc;;;;;;;;2MASX J20252020-2549454,ESO 528-004,ESO-LV 528-0040,IRAS 20223-2559,MCG -04-48-007,PGC 064657;;Confused HIPASS source; +IC5006;**;20:23:46.92;+06:26:57.0;Del;;;;;;;;;;;;;;;;;;;;; +IC5007;G;20:43:34.45;-29:42:13.1;Mic;2.31;1.45;30;13.11;;10.99;10.38;10.12;23.23;Scd;;;;;;5030,5041,5047;;2MASX J20433447-2942131,ESO 463-021,ESO-LV 463-0210,IRAS 20405-2953,MCG -05-49-002,PGC 065258;;; +IC5008;G;20:32:45.03;-72:41:41.0;Pav;1.19;0.33;77;15.55;;;;;23.57;SBd;;;;;;;;ESO 047-001,ESO-LV 47-0010,PGC 064929;;; +IC5009;G;20:32:34.35;-72:10:03.2;Pav;1.05;0.66;96;14.39;;11.52;10.80;10.53;23.20;S0-a;;;;;;;;2MASX J20323434-7210030,ESO 074-001,ESO-LV 74-0010,PGC 064923;;; +IC5010;G;20:30:26.68;-66:05:50.5;Pav;0.78;0.34;178;15.88;;12.65;11.92;11.53;23.36;Sc;;;;;;;;2MASX J20302670-6605502,ESO 106-006,ESO-LV 106-0060,PGC 064836;;; +IC5011;G;20:28:33.82;-36:01:37.6;Mic;3.01;1.32;18;12.67;;9.51;8.86;8.61;23.76;S0;;;;;;5013;;2MASX J20283383-3601376,ESO 400-029,ESO-LV 400-0290,MCG -06-45-003,PGC 064772;;; +IC5012;G;20:29:31.98;-56:44:35.2;Ind;1.06;0.52;78;15.28;;13.19;12.50;12.41;23.51;SBc;;;;;;;;2MASX J20293194-5644354,ESO 186-053,ESO-LV 186-0530,PGC 064802;;; +IC5013;Dup;20:28:33.82;-36:01:37.6;Mic;;;;;;;;;;;;;;;;5011;;;;; +IC5014;G;20:35:15.72;-73:27:09.4;Pav;0.77;0.66;102;14.36;;12.07;11.51;11.24;22.55;;;;;;;;;2MASX J20351571-7327096,ESO 047-002,ESO-LV 47-0020,IRAS 20296-7337,PGC 065015;;; +IC5015;Dup;20:34:20.57;-31:58:51.2;Mic;;;;;;;;;;;;;;;6925;;;;;; +IC5016;G;20:35:36.92;-72:54:40.1;Pav;0.63;0.48;94;15.84;;13.40;12.79;12.69;23.40;SBab;;;;;;;;2MASX J20353694-7254400,ESO 047-003,ESO-LV 47-0030,PGC 065025;;; +IC5017;G;20:32:03.83;-57:35:15.7;Ind;0.97;0.47;175;15.15;;11.73;10.89;10.80;23.56;S0;;;;;;;;2MASX J20320390-5735152,ESO 143-029,ESO-LV 143-0290,PGC 064902;;; +IC5018;Dup;20:22:10.58;-38:18:30.0;Sgr;;;;;;;;;;;;;;;;4998;;;;; +IC5019;G;20:30:47.09;-36:04:37.0;Mic;1.54;0.32;85;15.47;;12.52;11.98;11.60;24.00;SABb;;;;;;;;2MASX J20304709-3604369,ESO 400-035,ESO-LV 400-0350,PGC 064850;;; +IC5020;G;20:30:38.49;-33:29:08.0;Mic;2.33;1.75;148;12.95;12.72;10.26;9.56;9.28;23.38;Sb;;;;;;;;2MASX J20303849-3329079,ESO 400-034,ESO-LV 400-0340,IRAS 20274-3339,MCG -06-45-006,PGC 064845;;; +IC5021;G;20:33:34.04;-54:31:14.8;Ind;0.76;0.67;21;15.02;;13.68;12.84;12.93;23.08;S?;;;;;;;;2MASX J20333397-5431148,ESO 186-061,ESO-LV 186-0610,PGC 064960;;; +IC5022;G;20:41:06.14;-76:27:00.5;Oct;0.78;0.53;142;15.49;;12.41;11.65;11.51;23.36;SABc;;;;;;;;2MASX J20410618-7627005,ESO 047-005,ESO-LV 47-0050,PGC 065186;;; +IC5023;G;20:38:10.72;-67:11:04.7;Pav;1.43;0.49;118;14.24;;11.26;10.64;10.30;23.19;Sa;;;;;;;;2MASX J20381072-6711047,IRAS 20335-6721,PGC 065109;;; +IC5024;G;20:40:09.54;-71:06:27.7;Pav;0.98;0.71;17;14.88;;13.55;12.45;12.45;23.61;;;;;;;;;2MASX J20400957-7106277,ESO 074-003,ESO-LV 74-0030,PGC 065160;;; +IC5025;G;20:44:59.08;-76:59:04.9;Oct;1.65;0.25;110;15.42;;12.29;11.32;11.02;23.87;Sbc;;;;;;;;2MASX J20445908-7659048,ESO 047-010,ESO-LV 47-0100,IRAS 20389-7709,PGC 065304;;; +IC5026;G;20:48:28.05;-78:04:09.3;Oct;2.40;0.28;75;15.48;;12.68;12.40;12.00;24.27;Scd;;;;;;;;2MASX J20482798-7804089,ESO 026-006,ESO-LV 26-0060,PGC 065426;;; +IC5027;G;20:41:08.93;-55:28:19.6;Ind;0.51;0.46;55;15.26;;12.74;12.04;11.72;22.45;Sbc;;;;;;;;2MASX J20410891-5528197,ESO 186-074,ESO-LV 186-0740,PGC 065188;;; +IC5028;G;20:43:22.03;-65:38:52.1;Pav;1.32;0.77;170;15.24;;;;;24.09;I;;;;;;;;ESO 106-010,ESO-LV 106-0100,PGC 065250;;; +IC5029;Dup;20:43:14.34;-29:51:12.2;Mic;;;;;;;;;;;;;;;;5003;;;;; +IC5030;Dup;20:43:34.45;-29:42:13.1;Mic;;;;;;;;;;;;;;;;5007;;;;; +IC5031;G;20:45:20.27;-67:32:21.6;Pav;0.59;0.35;40;13.62;;13.14;12.42;12.38;;;;;;;;;;2MASX J20452030-6732218,ESO-LV 74-0081,PGC 065314;;; +IC5032;G;20:45:22.03;-67:33:06.8;Pav;1.30;0.37;144;14.68;;11.88;11.30;10.97;22.57;S0-a;;;;;;;;2MASX J20452203-6733068,ESO-LV 74-0080,PGC 065317;;; +IC5033;G;20:43:55.09;-57:20:03.4;Ind;0.95;0.54;45;15.52;;13.35;12.60;12.60;23.55;Sc;;;;;;;;2MASX J20435509-5720034,ESO 144-001,PGC 065272;;; +IC5034;G;20:43:41.67;-57:01:49.1;Ind;1.43;0.59;25;14.67;;11.56;10.85;10.54;23.49;Sbc;;;;;;;;2MASX J20434168-5701493,ESO 187-010,ESO-LV 187-0100,PGC 065261;;; +IC5035;G;20:44:14.45;-57:07:39.1;Ind;0.63;0.41;122;15.89;;13.22;12.60;12.25;23.26;Sc;;;;;;;;2MASX J20441444-5707392,ESO 187-011,ESO-LV 187-0110,PGC 065285;;; +IC5036;G;20:44:37.78;-57:37:36.4;Ind;0.99;0.30;119;16.04;;;;;23.77;Sc;;;;;;;;ESO 144-002,PGC 065296;;; +IC5037;G;20:45:39.25;-58:26:59.2;Ind;1.32;0.21;158;15.88;;12.37;11.56;11.24;23.74;Sc;;;;;;;;2MASX J20453927-5826591,ESO 144-003,PGC 065327;;; +IC5038;G;20:46:51.65;-65:01:00.5;Pav;1.51;0.69;73;14.22;;11.01;10.31;10.26;23.15;SBc;;;;;;;;2MASX J20465167-6501004,ESO 106-012,ESO-LV 106-0120,IRAS 20424-6512,PGC 065365;;; +IC5039;Dup;20:43:14.34;-29:51:12.2;Mic;;;;;;;;;;;;;;;;5003;;;;; +IC5040;G;20:52:19.61;-76:41:11.6;Oct;0.80;0.60;9;15.17;;13.06;11.81;11.62;23.11;Sd;;;;;;;;2MASX J20521963-7641115,ESO 047-014,ESO-LV 47-0140,PGC 065615;;; +IC5041;Dup;20:43:34.45;-29:42:13.1;Mic;;;;;;;;;;;;;;;;5007;;;;; +IC5042;G;20:47:46.02;-65:05:03.5;Pav;1.10;0.75;43;14.06;;11.29;10.69;10.36;22.73;Sc;;;;;;;;2MASX J20474601-6505034,ESO 106-013,ESO-LV 106-0130,IRAS 20434-6515,PGC 065394;;; +IC5043;G;20:46:38.26;-56:59:01.2;Ind;0.78;0.24;20;16.43;;14.05;13.44;12.78;23.62;Sc;;;;;;;;2MASX J20463825-5659012,ESO 187-014,ESO-LV 187-0140,PGC 065355;;; +IC5044;G;20:50:41.54;-71:53:57.9;Pav;0.64;0.44;99;15.51;;;;;23.31;;;;;;;;;2MASX J20504159-7153582,PGC 065515;;;B-Mag taken from LEDA. +IC5045;G;20:50:50.11;-71:54:35.2;Pav;0.81;0.36;71;15.25;;12.60;12.02;11.65;22.98;Sb;;;;;;;;2MASX J20505018-7154352,ESO 074-011,ESO-LV 74-0110,PGC 065525;;; +IC5046;Dup;20:43:14.34;-29:51:12.2;Mic;;;;;;;;;;;;;;;;5003;;;;; +IC5047;Dup;20:43:34.45;-29:42:13.1;Mic;;;;;;;;;;;;;;;;5007;;;;; +IC5048;G;20:51:40.64;-71:48:02.8;Pav;0.58;0.52;70;15.76;;12.99;12.64;12.14;23.31;SBbc;;;;;;;;2MASX J20514064-7148026,ESO 074-012,ESO-LV 74-0120,PGC 065570;;; +IC5049;GPair;20:47:23.44;-38:24:56.5;Mic;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC5049A;G;20:47:23.22;-38:24:47.4;Mic;1.10;0.84;149;15.15;;;;;24.21;E;;;;;;;;MCG -06-45-014,PGC 065377;;;B-Mag taken from LEDA. +IC5049B;G;20:47:23.83;-38:25:05.8;Mic;1.78;1.18;138;14.56;13.60;10.46;9.79;9.33;24.52;E;;;;;;;;2MASX J20472382-3825056,ESO-LV 341-0141,MCG -06-45-015,PGC 065378;;; +IC5050;G;20:45:15.05;-05:37:22.0;Aqr;1.33;0.80;83;14.21;;12.07;11.49;11.09;23.66;Sb;;;;;;;;2MASX J20451508-0537215,IRAS 20426-0548,MCG -01-53-005,PGC 065310,SDSS J204515.04-053721.8,SDSS J204515.04-053721.9,SDSS J204515.05-053721.9;;; +IC5051;G;20:52:22.65;-71:47:23.6;Pav;0.68;0.44;59;15.56;;13.55;12.90;11.81;23.09;Sc;;;;;;;;2MASX J20522267-7147233,ESO 074-014,ESO-LV 74-0140,IRAS 20473-7158,PGC 065618;;; +IC5052;G;20:52:05.57;-69:12:05.9;Pav;7.16;1.33;140;12.20;11.66;9.76;9.10;8.88;23.25;SBcd;;;;;;;;2MASX J20520163-6911359,ESO 074-015,ESO-LV 74-0150,IRAS 20473-6923,PGC 065603;;The 2MASX position is for the eccentric bulge.; +IC5053;G;20:53:36.21;-71:08:28.4;Pav;2.09;0.68;57;14.06;;11.02;10.19;9.91;23.87;Sa;;;;;;;;2MASX J20533616-7108280,ESO 074-018,ESO-LV 74-0180,IRAS 20485-7119,PGC 065662;;; +IC5054;G;20:53:45.42;-71:01:29.1;Pav;2.23;0.43;6;14.00;;11.11;10.53;10.14;23.83;SBa;;;;;;;;2MASX J20534539-7101291,ESO 074-019,ESO-LV 74-0190,IRAS 20489-7112,PGC 065665;;; +IC5055;G;20:52:57.17;-68:26:44.4;Pav;0.83;0.44;28;15.14;;13.11;12.36;12.29;23.46;;;;;;;;;2MASX J20525716-6826445,ESO 074-017,ESO-LV 74-0170,PGC 065643;;; +IC5056;Other;20:48:59.50;-39:10:51.3;Mic;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5057;*;20:47:13.50;+00:19:19.6;Aqr;;;;;;;;;;;;;;;;;;;;; +IC5058;Dup;20:47:20.37;+00:29:02.6;Aqr;;;;;;;;;;;;;;;6965;;;;;; +IC5059;G;20:51:13.48;-57:41:19.2;Ind;0.90;0.62;13;15.27;;13.55;12.77;12.74;23.41;Sab;;;;;;;;2MASX J20511346-5741188,ESO 144-006,PGC 065539;;; +IC5060;G;20:54:46.66;-71:38:11.3;Pav;0.87;0.18;79;15.49;;;;;22.74;Sc;;;;;;;;ESO 074-021,ESO-LV 74-0210,PGC 065695;;; +IC5061;Other;20:47:37.15;+00:20:08.4;Aqr;;;;;;;;;;;;;;;;;;;;Galactic triple star; +IC5062;**;20:48:10.20;-08:21:35.1;Aqr;;;;;;;;;;;;;;;;;;;;; +IC5063;G;20:52:02.34;-57:04:07.6;Ind;2.69;1.91;120;12.92;13.60;9.71;9.02;8.75;23.82;S0-a;;;;;;;;2MASX J20520232-5704076,ESO 187-023,ESO-LV 187-0230,IRAS 20481-5715,PGC 065600;;; +IC5064;G;20:52:38.28;-57:13:56.8;Ind;1.27;0.73;54;14.31;;11.17;10.45;10.13;23.31;SBa;;;;;;;;2MASX J20523826-5713568,ESO 187-028,ESO-LV 187-0280,IRAS 20487-5725,PGC 065634;;; +IC5065;G;20:51:45.80;-29:50:50.2;Mic;1.50;0.92;149;14.44;;11.34;10.70;10.38;24.13;S0;;;;;;;;2MASX J20514579-2950502,ESO 463-030,ESO-LV 463-0300,MCG -05-49-004,PGC 065580;;; +IC5066;G;20:57:03.02;-73:08:50.1;Pav;0.68;0.32;30;15.14;;12.70;12.20;11.59;22.71;Sab;;;;;;;;2MASX J20570303-7308501,ESO 047-018,ESO-LV 47-0180,IRAS 20519-7320,PGC 065768;;; +IC5067;Other;20:47:50.18;+44:22:01.1;Cyg;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5068;HII;20:50:29.76;+42:28:39.7;Cyg;40.00;30.00;;;;;;;;;;;;;;;;LBN 328;;; +IC5069;G;21:00:12.85;-71:48:42.1;Pav;1.15;0.95;36;14.16;;;;;23.07;SBb;;;;;;;;ESO 074-022,ESO-LV 74-0220,PGC 065870;;; +IC5070;HII;20:51:00.72;+44:24:05.4;Cyg;60.00;50.00;;8.00;;;;;;;;;;;;;;LBN 350;Pelican Nebula;Part of the Pelican Nebula.;B-Mag taken from LEDA. +IC5071;G;21:01:19.74;-72:38:33.8;Pav;3.17;0.56;17;13.28;;10.44;9.75;9.51;23.19;Sc;;;;;;;;2MASX J21011970-7238338,ESO 047-019,ESO-LV 47-0190,IRAS 20562-7250,PGC 065915;;; +IC5072;G;21:01:56.82;-72:59:18.5;Pav;0.81;0.37;107;15.57;;13.41;12.93;12.52;23.84;;;;;;;;;2MASX J21015682-7259184,ESO 047-020,ESO-LV 47-0200,PGC 065938;;; +IC5073;G;21:03:19.86;-72:41:16.4;Pav;1.18;0.91;50;14.87;;12.71;11.75;11.24;23.76;SBc;;;;;;;;2MASX J21031988-7241163,ESO 047-021,ESO-LV 47-0210,PGC 065992;;; +IC5074;G;21:01:00.46;-63:09:09.6;Pav;0.65;0.46;168;14.62;;12.86;12.35;12.01;22.72;Sc;;;;;;;;2MASX J21010043-6309096,ESO 107-001,ESO-LV 107-0010,IRAS 20569-6320,PGC 065902;;; +IC5075;G;21:04:38.10;-71:52:04.3;Pav;1.09;0.45;148;14.56;;11.73;10.94;10.60;22.96;Sab;;;;;;;;2MASX J21043789-7152042,ESO 074-023,ESO-LV 74-0230,PGC 066040;;; +IC5076;RfN;20:55:33.42;+47:23:44.0;Cyg;7.00;7.00;;;;;;;;;;;;;;;;LBN 394;;; +IC5077;G;21:08:53.96;-73:38:26.9;Pav;0.67;0.52;94;15.73;;13.79;12.93;12.93;23.39;Sbc;;;;;;;;2MASX J21085395-7338266,ESO 047-023,ESO-LV 47-0230,PGC 066197;;; +IC5078;G;21:02:31.27;-16:49:05.9;Cap;3.24;0.56;86;12.80;;10.42;9.88;9.64;23.44;Sc;;;;;;;;2MASX J21023127-1649058,IRAS 20597-1701,MCG -03-53-021,PGC 065960,UGCA 419;;; +IC5079;*;21:05:44.01;-56:13:48.9;Ind;;;;;;;;;;;;;;;;;;;;The IC identification is not certain.; +IC5080;G;21:02:33.07;+19:12:49.0;Del;0.49;0.39;45;15.60;;11.68;11.03;10.72;;E;;;;;;;;2MASX J21023303+1912488,PGC 065956;;; +IC5081;Other;21:03:01.23;+19:11:21.3;Del;;;;;;;;;;;;;;;;;;2MASX J21030124+1911213;;;NED lists this object as type G, but there's nothing at these coords in LEDA. +IC5082;Dup;21:04:39.50;-12:20:18.2;Aqr;;;;;;;;;;;;;;;7010;;;;;; +IC5083;G;21:03:51.50;+11:45:49.1;Equ;0.80;0.60;30;15.50;;11.63;11.00;10.80;;S0;;;;;;;;2MASX J21035147+1145494,PGC 066011;;; +IC5084;G;21:09:14.87;-63:17:24.1;Pav;1.67;1.07;137;13.53;;10.34;9.56;9.25;23.11;SBb;;;;;;;;2MASX J21091486-6317239,ESO 107-007,ESO-LV 107-0070,IRAS 21051-6329,PGC 066208;;; +IC5085;G;21:13:27.57;-74:06:11.0;Pav;0.72;0.52;31;15.28;;12.83;12.32;12.14;23.08;Sab;;;;;;;;2MASX J21132755-7406110,ESO 047-025,ESO-LV 47-0250,PGC 066370;;; +IC5086;G;21:08:32.01;-29:46:08.6;Mic;1.75;1.57;41;13.66;;10.41;9.67;9.44;23.75;E-S0;;;;;;;;2MASX J21083199-2946083,ESO 464-025,ESO-LV 464-0250,MCG -05-50-002,PGC 066179;;Identification as IC 5086 = ESO 464- ? 024 is not certain.; +IC5087;G;21:14:21.45;-73:46:25.8;Pav;1.46;0.38;95;15.17;;12.11;11.27;10.84;23.73;SBb;;;;;;;;2MASX J21142137-7346262,IRAS 21092-7358,PGC 066391;;; +IC5088;G;21:09:26.76;-22:52:42.9;Cap;1.37;1.06;96;14.38;;10.90;10.17;9.87;23.84;S0-a;;;;;;;;2MASX J21092677-2252423,ESO 530-010,ESO-LV 530-0100,MCG -04-50-001,PGC 066219;;; +IC5089;G;21:10:54.53;-03:51:46.0;Aqr;0.60;0.27;28;16.22;;12.61;11.97;11.61;23.23;Sab;;;;;;;;2MASX J21105454-0351458,LEDA 1065928;;; +IC5090;G;21:11:30.48;-02:01:57.2;Aqr;0.83;0.27;17;14.50;;11.16;10.46;10.14;23.02;Sa;;;;;;;;2MASX J21113046-0201572,IRAS 21089-0214,MCG +00-54-003,PGC 066299,SDSS J211130.50-020156.9,UGC 11691;;; +IC5091;G;21:17:37.02;-70:39:10.6;Pav;0.56;0.49;158;15.93;;14.19;13.62;13.23;23.23;Sc;;;;;;;;2MASX J21173700-7039106,ESO 074-027,ESO-LV 74-0270,PGC 066505;;; +IC5092;G;21:16:14.50;-64:27:52.8;Pav;2.75;2.43;33;12.78;;10.33;9.65;9.41;23.82;SBc;;;;;;;;2MASX J21161448-6427529,ESO 107-017,ESO-LV 107-0170,IRAS 21121-6440,PGC 066452;;; +IC5093;G;21:18:46.38;-70:37:20.6;Pav;0.79;0.34;125;16.00;;13.41;12.60;12.47;23.46;Sc;;;;;;;;2MASX J21184639-7037207,ESO 075-001,ESO-LV 75-0010,PGC 066543;;; +IC5094;G;21:17:49.50;-66:25:39.6;Pav;1.17;0.50;154;14.54;;11.78;11.10;10.88;22.93;SBc;;;;;;;;2MASX J21174948-6625397,ESO 107-018,ESO-LV 107-0180,PGC 066515;;; +IC5095;G;21:17:22.24;-59:56:51.2;Pav;0.92;0.39;72;15.41;;13.01;12.04;11.92;23.18;Sc;;;;;;;;2MASX J21172225-5956511,ESO 145-002,ESO-LV 145-0020,PGC 066498;;; +IC5096;G;21:18:21.54;-63:45:38.4;Pav;3.52;0.66;149;13.32;;9.65;8.78;8.51;23.71;Sbc;;;;;;;;2MASX J21182151-6345384,ESO 107-019,ESO-LV 107-0190,IRAS 21143-6358,PGC 066530;;; +IC5097;Other;21:14:58.08;+04:29:02.8;Equ;;;;;;;;;;;;;;;;;;;;Four Galactic stars. The IC identification is not certain.; +IC5098;Other;21:15:01.38;+04:29:37.0;Equ;;;;;;;;;;;;;;;;;;;;Two Galactic stars. The IC identification is not certain.; +IC5099;G;21:21:49.05;-70:59:00.1;Pav;0.72;0.28;6;15.42;;12.27;11.52;11.24;22.70;Sc;;;;;;;;2MASX J21214902-7059000,ESO 075-003,ESO-LV 75-0030,IRAS 21172-7111,PGC 066633;;; +IC5100;G;21:21:43.46;-65:56:00.1;Pav;1.15;0.20;114;14.61;;12.48;11.78;11.48;22.50;SBc;;;;;;;;2MASX J21214343-6556001,ESO 107-024,ESO-LV 107-0240,IRAS 21175-6608,PGC 066628;;; +IC5101;G;21:21:55.77;-65:50:09.8;Pav;1.10;0.89;2;14.04;;11.38;10.74;10.58;22.72;SBc;;;;;;;;2MASX J21215574-6550096,ESO 107-025,ESO-LV 107-0250,IRAS 21177-6602,PGC 066636;;The APM position is north of the nucleus.; +IC5102;G;21:26:13.46;-73:18:36.3;Pav;1.07;0.54;113;14.79;;11.57;10.94;10.60;23.75;S0;;;;;;;;2MASX J21261348-7318359,ESO 047-030,ESO-LV 47-0300,PGC 066751;;; +IC5103;G;21:29:12.55;-74:04:12.6;Pav;1.07;0.80;57;15.04;;12.38;11.71;11.58;23.67;SBc;;;;;;;;2MASX J21291250-7404126,ESO 047-031,ESO-LV 47-0310,PGC 066841;;; +IC5104;G;21:21:29.25;+21:14:31.1;Peg;1.48;0.43;172;14.81;13.82;11.53;10.84;10.50;23.30;Sab;;;;;;;;2MASX J21212925+2114309,IRAS 21191+2101,MCG +03-54-007,PGC 066622,UGC 11731;;; +IC5105;G;21:24:22.01;-40:32:15.8;Mic;2.98;1.64;44;12.43;11.54;9.44;8.72;8.45;23.78;E;;;;;;;;2MASX J21242200-4032159,ESO 342-039,ESO-LV 342-0390,MCG -07-44-001,PGC 066694;;; +IC5106;G;21:28:38.13;-70:50:04.5;Pav;1.51;1.17;145;13.77;;10.83;10.19;9.94;23.44;E-S0;;;;;;;;2MASX J21283805-7050044,ESO 075-009,ESO-LV 75-0090,PGC 066824;;; +IC5107;G;21:28:14.89;-65:44:07.9;Pav;1.02;0.38;4;15.17;;12.88;12.40;11.96;23.16;Sc;;;;;;;;2MASX J21281487-6544077,ESO 107-029,ESO-LV 107-0290,PGC 066813;;; +IC5108;G;21:32:51.50;-72:39:34.9;Ind;1.08;0.39;104;15.12;;12.78;12.17;11.71;23.17;SBc;;;;;;;;2MASX J21325148-7239347,ESO 048-025,ESO-LV 48-0250,PGC 066944;;; +IC5109;G;21:33:42.71;-74:06:43.2;Ind;0.92;0.69;168;14.66;;11.55;10.94;10.59;23.39;E;;;;;;;;2MASX J21334269-7406433,ESO 048-001,ESO-LV 48-0010,PGC 066963;;; +IC5110;G;21:30:43.39;-60:00:06.6;Ind;1.37;1.00;52;14.26;12.83;11.56;10.82;10.63;23.22;Sc;;;;;;;;2MASX J21304338-6000064,ESO 145-007,ESO-LV 145-0070,PGC 066878;;; +IC5111;G;21:28:10.76;+02:28:25.5;Peg;0.78;0.66;2;15.10;;12.17;11.46;11.18;23.17;Sbc;;;;;;;;2MASX J21281086+0228274,MCG +00-54-021,PGC 066811;;; +IC5113;**;21:29:39.49;+06:49:04.8;Peg;;;;;;;;;;;;;;;;;;;;The IC identification is uncertain.; +IC5114;Dup;21:34:07.94;-36:39:13.4;Gru;;;;;;;;;;;;;;;7091;;;;;; +IC5115;G;21:30:57.29;+11:45:48.6;Peg;0.71;0.42;109;15.70;;13.92;12.78;12.30;23.48;Sbc;;;;;;;;2MASX J21305728+1145489,PGC 066882,SDSS J213057.28+114548.5,SDSS J213057.28+114548.6,SDSS J213057.29+114548.6;;; +IC5116;G;21:37:05.50;-70:58:57.2;Ind;1.48;1.26;34;13.89;;12.12;11.42;11.19;23.34;SBbc;;;;;;;;2MASX J21370550-7058572,ESO 075-018,ESO-LV 75-0180,PGC 067055;;; +IC5117;PN;21:32:30.97;+44:35:47.6;Cyg;0.02;;;13.30;11.50;11.30;10.72;9.49;;;;17.50;16.70;;;;HD 205211;IRAS 21306+4422,PK 89-05 1,PN G089.8-05.1;;; +IC5118;G;21:42:13.80;-71:22:57.7;Ind;1.22;0.31;45;15.48;;12.38;11.64;11.49;23.49;Sc;;;;;;;;2MASX J21421380-7122578,ESO 075-020,ESO-LV 75-0200,PGC 067202;;; +IC5119;G;21:33:55.85;+21:50:16.5;Peg;0.82;0.23;153;15.30;;11.46;10.74;10.41;23.02;Sa;;;;;;;;2MASX J21335584+2150164,IRAS 21316+2136,PGC 066969,UGC 11766;;; +IC5120;Dup;21:38:48.27;-64:21:00.7;Ind;;;;;;;;;;;;;;;7096A;;;;;; +IC5121;Dup;21:41:19.28;-63:54:31.3;Ind;;;;;;;;;;;;;;;7096;;;;;; +IC5122;G;21:39:45.87;-22:24:23.5;Cap;0.65;0.38;55;16.03;;12.41;11.75;11.59;24.08;S0-a;;;;;;;;2MASX J21394588-2224231,ESO 531-014,MCG -04-51-006,PGC 067123;;; +IC5123;G;21:44:49.35;-72:25:14.7;Ind;1.48;0.57;17;14.49;;11.62;10.98;10.60;23.34;SABb;;;;;;;;2MASX J21444934-7225148,ESO 048-006,ESO-LV 48-0060,PGC 067283;;; +IC5124;G;21:39:55.19;-22:25:37.0;Cap;0.51;0.23;134;16.54;;13.16;12.48;12.15;23.83;S0-a;;;;;;;;2MASX J21395519-2225371,ESO 531-016,PGC 067127;;; +IC5125;G;21:41:50.18;-52:46:25.0;Ind;0.78;0.71;105;14.07;;12.12;11.56;11.34;22.20;Sbc;;;;;;;;2MASX J21415020-5246248,ESO 188-016,ESO-LV 188-0160,IRAS 21384-5300,PGC 067187;;; +IC5126;G;21:40:28.57;-06:20:44.7;Aqr;0.37;0.32;10;15.69;;12.65;12.45;12.49;;;;;;;;;;2MASX J21402857-0620448;;; +IC5127;Dup;21:39:44.49;+06:17:10.7;Peg;;;;;;;;;;;;;;;7102;;;;;; +IC5128;G;21:43:11.77;-38:58:05.8;Gru;0.96;0.64;128;14.06;;11.18;10.42;10.21;22.93;S0-a;;;;;;;;2MASX J21431177-3858059,ESO 343-022,ESO-LV 343-0220,IRAS 21401-3911,MCG -07-44-035,PGC 067232;;; +IC5129;G;21:47:46.58;-65:23:16.1;Ind;0.55;0.45;16;15.27;;12.62;11.89;11.41;22.70;Sc;;;;;;;;2MASX J21474655-6523160,ESO 108-003,ESO-LV 108-0030,PGC 067363;;; +IC5130;G;21:50:24.27;-73:59:50.7;Ind;1.63;0.55;108;14.53;;11.56;10.86;10.49;23.45;Sbc;;;;;;;;2MASX J21502428-7359506,ESO 048-008,ESO-LV 48-0080,IRAS 21456-7413,PGC 067445;;; +IC5131;G;21:47:25.31;-34:53:01.2;PsA;1.62;1.53;36;13.32;12.36;10.27;9.59;9.34;23.07;E-S0;;;;;;;;2MASX J21472531-3453011,ESO 403-027,ESO-LV 403-0270,MCG -06-47-014,PGC 067352;;; +IC5132;Neb;21:42:40.21;+66:10:06.4;Cep;;;;;;;;;;;;;;;;;;;;Includes a Galactic star.; +IC5133;Neb;21:42:47.14;+66:10:52.1;Cep;;;;;;;;;;;;;;;;;;;;Includes a Galactic star.; +IC5134;Neb;21:42:58.68;+66:06:10.2;Cep;7.59;;;;;;;;;;;;;;;;;;;This is part of the Galactic diffuse nebula NGC 7129. Includes a star.;Dimensions taken from LEDA +IC5135;Dup;21:48:19.52;-34:57:04.5;PsA;;;;;;;;;;;;;;;7130;;;;;; +IC5136;Dup;21:49:46.01;-34:52:34.6;PsA;;;;;;;;;;;;;;;7135;;;;;; +IC5137;Other;21:51:37.46;-65:35:01.2;Ind;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5138;G;21:53:21.69;-68:57:13.1;Ind;1.23;0.75;125;14.04;;12.57;11.71;11.56;22.88;SBb;;;;;;;;2MASX J21532167-6857131,ESO 075-034,ESO-LV 75-0340,PGC 067585;;; +IC5139;G;21:50:25.66;-30:59:41.0;PsA;2.19;1.04;32;13.34;;10.22;9.50;9.22;23.82;E-S0;;;;;;;;2MASX J21502565-3059410,ESO 466-011,ESO-LV 466-0110,IRAS 21474-3113,MCG -05-51-017,PGC 067447;;; +IC5140;G;21:54:16.03;-67:19:53.0;Ind;2.19;0.33;137;15.20;;12.47;11.86;11.62;24.02;SBcd;;;;;;;;2MASX J21541598-6719532,ESO 075-037,ESO-LV 75-0370,PGC 067609,PGC 067613;;; +IC5141;G;21:53:17.04;-59:29:36.8;Ind;1.50;1.18;25;13.49;;10.85;10.21;9.98;22.91;Sbc;;;;;;;;2MASX J21531701-5929367,ESO 145-022,ESO-LV 145-0220,IRAS 21496-5943,PGC 067580;;; +IC5142;G;21:55:20.49;-65:30:36.1;Ind;1.67;0.97;73;14.51;;12.43;11.97;11.92;23.81;Sc;;;;;;;;2MASX J21552048-6530360,ESO 108-006,ESO-LV 108-0060,PGC 067640;;; +IC5143;Dup;21:56:09.73;-49:31:19.0;Ind;;;;;;;;;;;;;;;7155;;;;;; +IC5144;G;21:54:09.53;+15:02:12.6;Peg;0.79;0.62;92;15.50;;11.97;11.19;10.95;23.83;E;;;;;;;;2MASX J21540950+1502125,LEDA 1473533,UGC 11845 NOTES01;;; +IC5145;G;21:54:23.06;+15:09:24.6;Peg;1.62;0.80;171;14.70;;10.88;10.15;9.86;23.85;Sab;;;;;;;;2MASX J21542304+1509244,MCG +02-55-028,PGC 067619,SDSS J215423.07+150924.9,UGC 11844;;; +IC5146;Cl+N;21:53:28.76;+47:16:00.9;Cyg;10.00;10.00;;7.82;7.20;;;;;;;;;;;;;C 019,LBN 424,MWSC 3571;Cocoon Nebula;The position is for the included star.; +IC5147;G;21:59:26.32;-65:26:59.5;Ind;1.59;0.72;29;15.11;;13.03;12.54;12.07;24.12;Sc;;;;;;;;2MASX J21592630-6526595,ESO 108-009,ESO-LV 108-0090,PGC 067787;;; +IC5148;PN;21:59:35.20;-39:23:09.0;Gru;1.88;;;12.90;11.00;;;;;;;;16.50;;;5150;;ESO 344-005,IRAS 21565-3937,PK 2-52 1,PN G002.7-52.4;;; +IC5149;G;21:58:59.04;-27:24:50.1;PsA;1.38;0.52;31;14.50;;11.55;10.98;10.61;23.38;Sa;;;;;;;;2MASX J21585905-2724501,ESO 466-027,ESO-LV 466-0270,MCG -05-51-033,PGC 067770;;; +IC5150;Dup;21:59:35.20;-39:23:09.0;Gru;;;;;;;;;;;;;;;;5148;;;;; +IC5151;G;21:58:52.60;+03:45:41.3;Peg;0.35;0.20;0;15.50;;12.68;12.10;11.72;;;;;;;;;;2MASX J21585259+0345413,PGC 067768;;; +IC5152;G;22:02:41.51;-51:17:47.2;Ind;5.13;3.60;103;11.03;10.90;9.82;9.70;9.28;22.38;IAB;;;;;;;;2MASX J22024152-5117471,ESO 237-027,ESO-LV 237-0270,IRAS 21594-5132,PGC 067908;;; +IC5153;G;22:00:23.56;+17:51:50.1;Peg;0.18;0.10;65;;;;;;;;;;;;;;;2MASX J22002357+1751498;;The IC number includes the superposed star.; +IC5154;G;22:04:30.29;-66:06:44.6;Ind;0.86;0.55;4;15.84;;12.71;12.10;11.98;23.87;Sm;;;;;;;;2MASX J22043032-6606444,ESO 108-010,IRAS 22006-6621,PGC 067984;;Resolved components may be multiple nuclei.; +IC5155;**;22:02:06.26;+00:29:17.8;Aqr;;;;;;;;;;;;;;;;;;;;; +IC5156;G;22:03:14.87;-33:50:18.4;PsA;2.28;0.82;175;13.04;12.17;10.02;9.33;9.06;22.85;SBab;;;;;;;;2MASX J22031486-3350184,ESO 404-025,ESO-LV 404-0250,IRAS 22003-3404,MCG -06-48-019,PGC 067932;;; +IC5157;G;22:03:27.00;-34:56:30.6;PsA;2.01;1.80;56;13.21;;10.05;9.38;9.12;23.76;E;;;;;;;;2MASX J22032698-3456304,ESO 404-026,ESO-LV 404-0260,MCG -06-48-020,PGC 067941;;; +IC5158;G;22:06:24.77;-67:31:01.2;Ind;1.01;0.55;64;15.21;;13.62;12.99;12.88;23.39;SBm;;;;;;;;2MASX J22062477-6731012,ESO 075-055,ESO-LV 75-0550,PGC 068038;;; +IC5159;*;22:02:39.89;+00:19:08.4;Aqr;;;;;;;;;;;;;;;;;;SDSS J220239.89+001908.3;;; +IC5160;G;22:03:04.84;+10:55:29.5;Peg;0.94;0.54;21;15.60;;11.70;11.00;10.73;24.05;S0;;;;;;;;2MASX J22030481+1055296,PGC 067929,UGC 11884;;"Often incorrectly called NGC 7190; that is UGC 11885."; +IC5161;G;22:05:39.01;+09:38:24.6;Peg;0.71;0.30;16;15.50;;12.06;11.31;11.16;23.32;Sa;;;;;;;;2MASX J22053903+0938246,PGC 068016;;; +IC5162;G;22:08:03.08;-52:42:49.9;Gru;1.08;0.63;134;15.07;;;;;23.50;Sc;;;;;;;;ESO 189-025,ESO-LV 189-0250,PGC 068108;;; +IC5163;Other;22:05:47.38;+27:05:07.8;Peg;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +IC5164;*;22:05:58.20;+27:02:50.9;Peg;;;;;;;;;;;;;;;;;;;;; +IC5165;G;22:10:07.08;-64:34:40.9;Tuc;1.52;0.51;43;14.80;;13.18;12.39;12.20;23.75;Sab;;;;;;;;2MASX J22100705-6434405,ESO 108-015,ESO-LV 108-0150,PGC 068196;;; +IC5166;*;22:06:06.84;+27:04:04.8;Peg;;;;;;;;;;;;;;;;;;;;; +IC5167;*;22:07:31.79;-08:07:21.4;Aqr;;;;;;;;;;;;;;;;;;SDSS J220731.78-080721.4;;; +IC5168;G;22:08:45.54;-27:51:23.3;PsA;1.30;0.36;141;15.54;;;;;23.77;SBc;;;;;;;;ESO 467-011,ESO-LV 467-0110,MCG -05-52-033,PGC 068133;;; +IC5169;G;22:10:09.98;-36:05:19.0;PsA;2.05;0.91;24;13.77;14.27;10.82;10.09;9.78;23.98;S0-a;;;;;;;;2MASX J22101000-3605192,ESO 404-036,ESO-LV 404-0360,IRAS 22072-3620,MCG -06-48-025,PGC 068198;;; +IC5170;G;22:12:29.64;-47:13:19.0;Gru;1.91;0.83;26;13.30;;10.49;9.88;9.58;23.10;SBa;;;;;;;;2MASX J22122966-4713190,ESO 237-046,ESO 288-051,ESO-LV 237-0460,ESO-LV 288-0510,IRAS 22093-4728,PGC 068283,PGC 068284;;Two entries for IC 5170 in ESO and ESO-LV.; +IC5171;G;22:10:56.70;-46:04:53.3;Gru;0.74;0.49;153;13.45;;10.33;9.65;9.36;21.32;SABb;;;;;;;;2MASX J22105669-4604533,ESO 288-046,ESO-LV 288-0460,IRAS 22078-4619,PGC 068223;;; +IC5172;G;22:09:55.51;+12:49:05.0;Peg;0.71;0.24;87;15.60;;12.91;12.12;11.97;23.10;Sbc;;;;;;;;2MASX J22095551+1249052,PGC 068190,SDSS J220955.51+124904.9,SDSS J220955.52+124905.0;;; +IC5173;GPair;22:14:41.40;-69:21:59.0;Ind;2.80;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC5173A;G;22:14:44.57;-69:21:55.4;Ind;1.82;0.32;75;15.94;;;;;24.71;SBc;;;;;;;;ESO 076-008,ESO-LV 76-0081,PGC 068380;;; +IC5173B;G;22:14:38.67;-69:22:03.9;Ind;0.69;0.25;74;16.31;;;;;24.03;;;;;;;;;PGC 068379;;; +IC5174;G;22:12:44.67;-38:10:17.0;Gru;0.75;0.65;149;14.63;;12.51;11.85;11.63;22.96;SBbc;;;;;;;;2MASX J22124467-3810169,ESO 344-013,MCG -06-48-028,PGC 068292;;; +IC5175;G;22:12:48.23;-38:07:38.8;Gru;1.59;0.54;87;14.14;;11.07;10.36;10.05;23.78;Sab;;;;;;;;2MASX J22124824-3807389,ESO 344-014,MCG -06-48-029,PGC 068296;;The APM image includes a nearby bright star.; +IC5176;G;22:14:55.93;-66:50:57.9;Tuc;4.51;0.63;28;13.54;;9.91;9.08;8.74;23.97;Sbc;;;;;;;;2MASX J22145592-6650578,ESO 108-020,ESO-LV 108-0200,IRAS 22112-6705,PGC 068389;;The APM position is southwest of the nucleus.; +IC5177;G;22:11:34.27;+11:47:45.4;Peg;0.85;0.38;9;15.20;;11.93;11.17;10.85;23.04;SBb;;;;;;;;2MASX J22113429+1147452,MCG +02-56-015,PGC 068244,SDSS J221134.27+114745.4,UGC 11939;;; +IC5178;G;22:12:33.35;-22:57:14.6;Aqr;1.04;0.63;91;14.74;;12.31;12.09;11.74;23.11;SBc;;;;;;;;2MASX J22123333-2257145,ESO 532-031,ESO-LV 532-0310,MCG -04-52-022,PGC 068287;;; +IC5179;G;22:16:09.10;-36:50:37.4;Gru;1.01;0.52;61;12.29;11.89;9.66;8.95;8.62;20.86;Sbc;;;;;;5183,5184;;2MASX J22160908-3650375,ESO 405-005,ESO-LV 405-0050,IRAS 22132-3705,MCG -06-48-031,PGC 068455;;; +IC5180;G;22:11:12.01;+38:55:37.9;Lac;1.38;1.20;146;14.80;;10.59;9.87;9.59;24.18;E;;;;;;;;2MASX J22111201+3855384,MCG +06-48-012,PGC 068234,UGC 11938;;May contribute to the radio flux of B2 2209+38.; +IC5181;G;22:13:21.70;-46:01:03.4;Gru;2.65;0.86;73;12.44;11.69;9.12;8.42;8.17;23.24;S0;;;;;;;;2MASX J22132171-4601036,ESO 289-001,ESO-LV 289-0010,PGC 068317;;; +IC5182;G;22:16:05.09;-65:27:17.0;Tuc;0.78;0.55;136;15.31;;13.51;13.15;12.61;23.22;Sd;;;;;;;;2MASX J22160509-6527172,ESO 108-022,ESO-LV 108-0220,PGC 068452;;; +IC5183;Dup;22:16:09.10;-36:50:37.4;Gru;;;;;;;;;;;;;;;;5179;;;;; +IC5184;Dup;22:16:09.10;-36:50:37.4;Gru;;;;;;;;;;;;;;;;5179;;;;; +IC5185;G;22:17:43.65;-65:51:26.9;Tuc;0.58;0.46;70;14.86;;12.77;11.95;11.82;22.25;Sc;;;;;;;;2MASX J22174368-6551268,ESO 108-024,ESO-LV 108-0240,IRAS 22140-6606,PGC 068513;;; +IC5186;G;22:18:46.52;-36:48:05.7;Gru;2.11;1.44;92;13.25;11.80;10.52;9.84;9.54;22.61;Sb;;;;;;;;2MASX J22184653-3648058,ESO 405-007,ESO-LV 405-0070,IRAS 22158-3703,MCG -06-49-001,PGC 068548;;; +IC5187;G;22:18:17.77;-59:36:25.1;Tuc;0.60;0.56;16;14.69;;12.90;12.22;12.02;22.27;Sc;;;;;;;;2MASX J22181776-5936247,ESO 146-016,ESO-LV 146-0160,PGC 068536;;; +IC5188;G;22:18:26.40;-59:38:28.8;Tuc;1.29;1.05;9;13.83;;11.45;10.92;10.40;22.89;SABc;;;;;;;;2MASX J22182640-5938287,ESO 146-017,ESO-LV 146-0170,PGC 068539;;; +IC5189;*;22:16:14.15;-05:00:15.5;Aqr;;;;;;;;;;;;;;;;;;;;; +IC5190;G;22:19:00.69;-59:52:57.8;Tuc;0.90;0.67;127;14.85;;12.71;11.93;11.75;23.08;SBbc;;;;;;;;2MASX J22190066-5952577,ESO 146-018,ESO-LV 146-0180,IRAS 22153-6008,LEDA 2817324,PGC 068556;;; +IC5191;G;22:15:02.47;+37:18:01.4;Lac;1.08;0.17;65;15.00;;11.43;10.69;10.32;23.56;S0-a;;;;;;;;2MASX J22150245+3718013,MCG +06-48-021,PGC 068399,UGC 11963;;; +IC5192;G;22:15:14.04;+37:16:15.7;Lac;0.53;0.28;162;16.40;;13.23;12.37;12.20;23.77;;;;;;;;;2MASX J22151402+3716154,MCG +06-48-022,PGC 068407;;Probably a galaxy with three stars superposed, rather than a group as in MCG.;B-Mag taken from LEDA. +IC5193;G;22:15:43.55;+37:14:34.2;Lac;0.75;0.68;178;15.46;;11.51;10.75;10.43;23.63;E;;;;;;;;2MASX J22154353+3714345,MCG +06-48-026,PGC 068436;;;B-Mag taken from LEDA. +IC5194;Other;22:17:08.13;-15:56:44.5;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5195;Dup;22:15:41.57;+37:18:10.0;Lac;;;;;;;;;;;;;;;7242 NED02;;;;;; +IC5196;G;22:20:11.26;-65:24:16.6;Tuc;1.49;0.35;100;15.37;;12.51;11.88;11.81;23.83;Sc;;;;;;;;2MASX J22201125-6524167,ESO 108-025,ESO-LV 108-0250,IRAS 22165-6539,PGC 068591;;The APMUKS position is southeast of the nucleus.; +IC5197;G;22:19:49.42;-60:08:11.2;Tuc;1.05;0.56;34;15.01;;11.77;11.11;10.78;23.35;SBb;;;;;;;;2MASX J22194943-6008111,ESO 146-019,ESO-LV 146-0190,PGC 068584;;; +IC5198;Dup;22:17:42.68;-15:34:16.6;Aqr;;;;;;;;;;;;;;;7246;;;;;; +IC5199;G;22:19:33.22;-37:32:01.7;Gru;1.90;0.32;153;14.72;;11.44;10.64;10.37;23.72;Sb;;;;;;;;2MASX J22193322-3732018,ESO 344-020,IRAS 22166-3747,MCG -06-49-002,PGC 068574;;; +IC5200;G;22:22:15.34;-65:45:58.8;Tuc;0.74;0.36;124;15.96;;12.91;12.21;11.90;23.35;Sc;;;;;;;;2MASX J22221534-6545587,ESO 108-026,ESO-LV 108-0260,PGC 068660;;; +IC5201;G;22:20:57.44;-46:02:09.1;Gru;6.70;2.86;22;11.53;;11.05;10.48;10.17;23.53;Sc;;;;;;;;2MASX J22205743-4602090,ESO 289-018,ESO-LV 289-0180,IRAS 22179-4617,PGC 068618;;The APM position is 0.5 arcmin north of the center of the bar.; +IC5202;G;22:22:55.67;-65:48:10.4;Tuc;1.62;0.58;128;14.67;;12.02;11.44;11.11;23.57;SBc;;;;;;;;2MASX J22225570-6548103,ESO 108-027,ESO-LV 108-0270,PGC 068707;;; +IC5203;G;22:22:34.30;-59:46:23.6;Tuc;1.11;0.68;12;14.74;;13.54;12.90;12.44;23.30;Sc;;;;;;;;2MASX J22223432-5946232,ESO 146-020,ESO-LV 146-0200,IRAS 22192-6001,PGC 068684;;; +IC5204;Dup;22:30:59.91;-14:00:12.7;Aqr;;;;;;;;;;;;;;;7300;;;;;; +IC5205;G;22:22:47.56;-59:47:13.4;Tuc;0.63;0.39;20;15.98;;14.26;13.43;13.22;23.30;Sc;;;;;;;;2MASX J22224755-5947133,ESO 146-021,ESO-LV 146-0210,PGC 068700;;; +IC5206;G;22:24:04.62;-66:51:28.2;Tuc;0.99;0.56;29;15.26;;12.54;11.90;11.57;23.46;SBbc;;;;;;;;2MASX J22240466-6651281,ESO 108-028,ESO-LV 108-0280,PGC 068762;;; +IC5207;G;22:23:29.45;-60:33:53.9;Tuc;1.23;0.66;178;15.18;;;;;23.79;SABc;;;;;;;;ESO 146-022,ESO-LV 146-0220,PGC 068738;;; +IC5208;G;22:24:34.27;-65:13:38.7;Tuc;1.86;0.33;62;14.82;;11.37;10.67;10.44;24.74;S0-a;;;;;;;;2MASX J22243429-6513386,ESO 108-029,ESO-LV 108-0290,PGC 068788;;; +IC5209;G;22:23:09.10;-37:59:35.8;Gru;0.72;0.46;127;15.58;;14.00;13.82;13.22;23.24;Sc;;;;;;;;2MASX J22230906-3759356,ESO 345-004,ESO-LV 345-0040,PGC 068722;;; +IC5210;G;22:22:31.11;-18:52:10.9;Aqr;1.13;0.95;80;14.01;;11.01;10.38;10.08;23.09;E-S0;;;;;;;;2MASX J22223109-1852109,ESO 602-012,ESO-LV 602-0120,MCG -03-57-004,PGC 068674;;; +IC5211;G;22:22:43.06;-18:52:48.8;Aqr;0.80;0.58;158;14.66;;11.51;10.79;10.45;22.79;Sa;;;;;;;;2MASX J22224307-1852490,ESO 602-014,ESO-LV 602-0140,MCG -03-57-005,PGC 068695;;; +IC5212;G;22:23:30.26;-38:02:15.5;Gru;0.99;0.56;40;14.63;;12.02;11.40;11.13;23.00;Sb;;;;;;;;2MASX J22233027-3802154,ESO 345-006,ESO-LV 345-0060,PGC 068739;;; +IC5213;G;22:25:04.79;-60:28:36.1;Tuc;0.66;0.41;131;15.79;;13.62;13.00;12.29;23.34;Sc;;;;;;;;2MASX J22250481-6028361,ESO 146-023,ESO-LV 146-0230,PGC 068809;;; +IC5214;Other;22:23:42.21;-27:28:11.3;PsA;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5215;G;22:26:58.11;-65:58:55.9;Tuc;0.65;0.53;180;15.72;;14.01;13.42;12.77;23.27;Sc;;;;;;;;2MASX J22265789-6558517,ESO 109-003,ESO-LV 109-0030,PGC 068888;;; +IC5216;Other;22:24:44.77;-18:05:15.4;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5217;PN;22:23:55.70;+50:58:00.0;Lac;0.11;;;12.60;11.30;12.59;12.62;12.01;;;;15.40;15.50;;;;HD 212534;IRAS 22219+5042,PK 100-05 1,PN G100.6-05.4;;; +IC5218;G;22:28:05.78;-60:23:41.5;Tuc;1.34;0.48;22;15.11;;12.66;12.01;11.87;23.71;SBbc;;;;;;;;2MASX J22280580-6023413,ESO 146-026,ESO-LV 146-0260,IRAS 22248-6038,PGC 068927;;; +IC5219;G;22:28:43.74;-65:53:37.4;Tuc;0.89;0.55;16;15.95;;;;;23.94;Scd;;;;;;;;ESO 109-004,ESO-LV 109-0040,PGC 068955;;; +IC5220;G;22:28:02.73;-59:43:24.4;Tuc;1.19;0.37;112;15.08;;12.53;11.87;11.58;23.17;Sc;;;;;;;;2MASX J22280272-5943244,ESO 146-025,ESO-LV 146-0250,PGC 068925;;; +IC5221;G;22:28:57.71;-65:54:16.5;Tuc;0.47;0.43;59;15.91;;13.21;12.44;12.18;22.96;Sc;;;;;;;;2MASX J22285771-6554163,ESO 109-005,ESO-LV 109-0050,PGC 068967;;; +IC5222;G;22:29:54.78;-65:39:40.9;Tuc;1.96;0.89;92;13.48;;10.59;9.62;9.67;23.06;SBbc;;;;;;;;2MASX J22295476-6539411,ESO 109-006,ESO-LV 109-0060,IRAS 22263-6555,PGC 068993;;; +IC5223;G;22:29:44.77;+07:59:19.5;Peg;0.66;0.29;4;15.60;;12.10;11.41;11.06;23.30;Sa;;;;;;;;2MASX J22294477+0759196,PGC 068988,UGC 12055 NED02;;; +IC5224;G;22:30:30.15;-45:59:46.3;Gru;1.65;0.39;165;14.35;;12.25;11.55;11.32;23.34;Sab;;;;;;;;2MASX J22303013-4559465,ESO 289-031,ESO-LV 289-0310,PGC 069011;;; +IC5225;Dup;22:32:08.06;-25:23:52.0;PsA;;;;;;;;;;;;;;;7294;;;;;; +IC5226;G;22:32:30.21;-25:39:43.1;PsA;1.98;1.49;35;13.41;;10.62;9.88;9.73;23.44;Sb;;;;;;;;2MASX J22323021-2539429,ESO 533-045,ESO-LV 533-0450,MCG -04-53-010,PGC 069097;;; +IC5227;G;22:34:03.71;-64:41:51.6;Tuc;1.19;0.86;176;13.97;;11.45;10.75;10.38;22.89;SBab;;;;;;;;2MASX J22340372-6441515,ESO 109-008,ESO-LV 109-0080,IRAS 22306-6457,PGC 069170;;; +IC5228;Dup;22:32:23.80;-14:07:13.9;Aqr;;;;;;;;;;;;;;;7302;;;;;; +IC5229;G;22:34:50.38;-61:22:52.9;Tuc;0.63;0.53;70;15.13;;12.82;12.24;12.12;22.81;Sbc;;;;;;;;2MASX J22345035-6122529,ESO 147-001,ESO-LV 147-0010,PGC 069217;;; +IC5230;G;22:35:40.17;-61:32:51.7;Tuc;1.05;0.41;43;15.14;;12.79;11.86;11.71;23.34;Sc;;;;;;;;2MASX J22354014-6132519,ESO 147-002,ESO-LV 147-0020,IRAS 22323-6148,PGC 069249,TYC 9118-1231-1;;; +IC5231;G;22:34:00.72;+23:20:19.2;Peg;0.72;0.63;65;14.80;;11.52;10.83;10.59;23.09;S0-a;;;;;;;;2MASX J22340076+2320190,MCG +04-53-004,PGC 069166;;; +IC5232;G;22:37:38.11;-68:52:20.0;Ind;0.71;0.47;3;15.39;;12.88;12.12;11.81;23.05;Sc;;;;;;;;2MASX J22373810-6852202,ESO 076-020,ESO-LV 76-0200,PGC 069358;;; +IC5233;G;22:36:32.88;+25:45:47.5;Peg;0.91;0.84;16;14.80;;11.79;11.12;10.82;23.34;Sbc;;;;;;;;2MASX J22363287+2545476,MCG +04-53-007,PGC 069290,SDSS J223632.87+254547.2,UGC 12106;;; +IC5234;G;22:40:11.45;-65:49:30.9;Tuc;1.20;0.54;147;15.29;;13.01;12.33;11.90;24.26;S0-a;;;;;;;;2MASX J22401141-6549310,ESO 109-011,ESO-LV 109-0110,PGC 069446;;; +IC5235;G;22:41:25.47;-66:34:49.1;Tuc;0.63;0.34;84;16.24;;13.33;12.78;12.74;20.03;S0-a;;;;;;;;2MASX J22412544-6634489,ESO 109-013,ESO-LV 109-0130,PGC 069497;;The APM image includes a superposed star.; +IC5236;G;22:41:30.14;-66:37:04.8;Tuc;0.84;0.56;64;15.42;;12.32;11.55;11.28;23.77;S0;;;;;;;;2MASX J22413012-6637049,ESO 109-014,ESO-LV 109-0140,PGC 069503;;; +IC5237;Dup;22:42:17.91;-30:03:27.6;PsA;;;;;;;;;;;;;;;7361;;;;;; +IC5238;G;22:41:29.77;-60:45:28.5;Tuc;0.71;0.44;63;15.79;;14.70;14.15;13.76;23.39;Sc;;;;;;;;2MASX J22412975-6045283,ESO 147-004,ESO-LV 147-0040,PGC 069501;;; +IC5239;G;22:31:07.18;-38:01:35.5;Gru;1.32;0.62;53;15.21;;11.95;11.13;11.03;24.70;E;;;;;;;;2MASX J22310718-3801352,ESO 345-017,ESO-LV 345-0170,PGC 069044,PGC 069471;;The IC RA is +10 minutes in error.; +IC5240;G;22:41:52.38;-44:46:01.8;Gru;3.20;2.22;96;12.25;11.31;9.53;8.90;8.53;23.79;SBa;;;;;;;;2MASX J22415236-4446016,ESO 290-002,ESO-LV 290-0020,PGC 069521;;; +IC5241;G;22:41:38.53;+02:38:23.8;Peg;0.91;0.74;174;14.90;;11.96;11.40;11.21;23.23;SBc;;;;;;;;2MASX J22413873+0238217,MCG +00-57-008,PGC 069504,UGC 12152;;MCG notes this as a possible interacting system.; +IC5242;G;22:41:15.21;+23:24:24.9;Peg;0.82;0.70;174;14.70;;12.00;11.53;11.06;23.10;Sab;;;;;;;;2MASX J22411521+2324250,IRAS 22388+2308,MCG +04-53-010,PGC 069487,UGC 12148;;Field star at north.; +IC5243;G;22:41:24.59;+23:22:28.7;Peg;0.74;0.63;16;14.30;;13.19;12.39;12.08;22.75;Sbc;;;;;;;;2MASX J22412451+2322320,MCG +04-53-011,PGC 069495,UGC 12153;;; +IC5244;G;22:44:13.75;-64:02:36.2;Tuc;2.86;0.47;174;13.68;;10.21;9.49;9.15;23.59;Sb;;;;;;;;2MASX J22441378-6402362,ESO 109-015,ESO-LV 109-0150,PGC 069620;;; +IC5245;G;22:44:56.37;-65:21:28.5;Tuc;0.85;0.71;114;15.06;;12.54;11.82;11.63;23.44;S0-a;;;;;;;;2MASX J22445637-6521283,ESO 109-016,ESO-LV 109-0160,PGC 069645;;The APMUKS position is east of the nucleus.; +IC5246;G;22:46:39.50;-64:53:52.7;Tuc;1.02;0.67;154;14.73;;12.63;12.00;12.22;23.18;Sc;;;;;;;;2MASX J22463922-6453547,ESO 109-019,ESO-LV 109-0190,PGC 069696;;; +IC5247;G;22:46:50.15;-65:16:26.0;Tuc;1.37;0.40;124;15.00;;12.00;11.32;10.93;23.60;Sb;;;;;;;;2MASX J22465014-6516256,ESO 109-020,ESO-LV 109-0200,PGC 069700;;; +IC5248;Other;22:44:42.75;-00:20:22.2;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5249;G;22:47:06.28;-64:49:55.3;Tuc;4.38;0.36;12;14.35;;13.12;12.31;12.58;24.12;SBcd;;;;;;;;2MASX J22470626-6449554,ESO 109-021,ESO-LV 109-0210,PGC 069707;;; +IC5250;GPair;22:47:20.42;-65:03:31.4;Tuc;3.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC5250A;G;22:47:17.50;-65:03:35.0;Tuc;1.51;1.31;73;12.10;11.11;;;;22.35;E-S0;;;;;;;;ESO 109-022,PGC 069713;;; +IC5250B;G;22:47:22.16;-65:03:30.6;Tuc;1.74;0.95;120;12.20;;9.24;8.71;8.39;22.58;S0;;;;;;;;2MASX J22472215-6503305,ESO-LV 109-0221,PGC 069714;;Bright star superposed on southeast side of core.; +IC5251;Other;22:45:10.63;+11:09:30.5;Peg;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC5252;G;22:48:08.99;-68:54:10.3;Ind;1.34;0.77;173;13.75;;11.12;10.39;10.13;22.69;SBbc;;;;;;;;2MASX J22480897-6854101,ESO 076-025,ESO-LV 76-0250,IRAS 22446-6910,PGC 069744;;; +IC5253;G;22:45:28.92;+21:48:29.0;Peg;0.89;0.36;164;15.50;;12.46;11.79;11.64;24.11;S0-a;;;;;;;;2MASX J22452899+2148287,PGC 069659,UGC 12180;;; +IC5254;G;22:46:00.51;+21:07:32.1;Peg;0.68;0.32;80;15.60;;12.60;11.96;11.69;22.98;Sc;;;;;;;;2MASX J22460050+2107322,PGC 069680;;; +IC5255;Other;22:45:46.04;+36:13:36.4;Lac;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5256;G;22:49:45.81;-68:41:26.4;Ind;1.20;0.51;17;15.00;14.42;12.86;12.41;12.04;23.00;SBd;;;;;;;;2MASX J22494579-6841265,ESO 076-028,ESO-LV 76-0280,PGC 069820;;; +IC5257;G;22:52:16.25;-67:25:10.4;Ind;0.70;0.47;18;15.24;;12.76;11.85;11.60;22.90;Sbc;;;;;;;;2MASX J22521622-6725102,ESO 076-029,ESO-LV 76-0290,IRAS 22489-6741,PGC 069885;;; +IC5258;G;22:51:31.57;+23:04:50.1;Peg;1.00;0.64;102;14.10;;10.90;10.26;10.01;22.97;E-S0;;;;;;;;2MASX J22513158+2304499,MCG +04-53-017,PGC 069869,UGC 12217;;; +IC5259;G;22:55:14.69;+36:40:18.4;Lac;1.08;0.77;79;14.80;;11.07;10.28;10.01;23.30;Sc;;;;;;;;2MASX J22551469+3640182,IRAS 22529+3624,MCG +06-50-010,PGC 070003;;; +IC5260;Dup;22:54:18.61;-39:18:53.8;Gru;;;;;;;;;;;;;;;7404;;;;;; +IC5261;G;22:54:25.24;-20:21:46.4;Aqr;1.44;1.28;21;13.91;;11.55;10.80;10.57;23.25;SBc;;;;;;;;2MASX J22542525-2021466,ESO 603-026,ESO-LV 603-0260,IRAS 22517-2037,MCG -04-54-001,PGC 069969;;; +IC5262;G;22:55:20.45;-33:53:16.5;PsA;1.35;0.68;179;14.29;13.21;11.11;10.41;10.15;23.32;S0-a;;;;;;;;2MASX J22552046-3353166,ESO-LV 406-0200,MCG -06-50-009,PGC 3442011;;Brighter of interacting pair.; +IC5263;G;22:58:13.57;-69:03:07.6;Ind;1.59;0.73;147;14.23;;11.17;10.49;10.25;23.92;S0-a;;;;;;;;2MASX J22581358-6903076,ESO 076-032,ESO-LV 76-0320,IRAS 22548-6919,PGC 070137;;; +IC5264;G;22:56:53.04;-36:33:15.0;Gru;2.43;0.53;80;13.46;;10.33;9.60;9.36;23.05;Sab;;;;;;;;2MASX J22565303-3633149,ESO 406-029,ESO-LV 406-0290,IRAS 22540-3649,MCG -06-50-014,PGC 070081;;; +IC5265;Dup;22:57:10.61;-36:27:44.0;Gru;;;;;;;;;;;;;;;;1459;;;;; +IC5266;G;22:58:20.83;-65:07:46.9;Tuc;1.89;0.52;33;14.67;;12.13;11.67;11.12;23.85;Sb;;;;;;;;2MASX J22582082-6507469,ESO 109-029,ESO-LV 109-0290,PGC 070142;;; +IC5267;G;22:57:13.57;-43:23:46.1;Gru;5.58;4.06;138;11.18;10.47;8.29;7.68;7.45;23.84;S0-a;;;;;;;;2MASX J22571357-4323461,ESO 290-029,ESO-LV 290-0290,IRAS 22543-4339,MCG -07-47-007,PGC 070094;;; +IC5268;Other;22:56:12.97;+36:35:50.1;Lac;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5269;G;22:57:43.66;-36:01:34.4;PsA;1.84;0.75;51;13.48;;10.31;9.68;9.44;23.23;S0;;;;;;;;2MASX J22574365-3601344,ESO 406-032,ESO-LV 406-0320,MCG -06-50-017,PGC 070110;;MCG identification as IC 5270 in error.; +IC5270;G;22:57:54.94;-35:51:29.0;PsA;3.29;1.81;105;13.00;;10.50;9.84;9.61;23.73;SBc;;;;;;;;2MASX J22575493-3551289,ESO 406-033,ESO-LV 406-0330,IRAS 22551-3607,MCG -06-50-018,PGC 070117;;Position in 1997AJ....113.1548C is incorrect.; +IC5271;G;22:58:01.82;-33:44:32.0;PsA;3.00;1.16;140;12.47;;9.35;8.65;8.38;22.79;Sb;;;;;;;;2MASX J22580180-3344319,ESO 406-034,ESO-LV 406-0340,IRAS 22552-3400,MCG -06-50-019,PGC 070128;;; +IC5272;G;22:59:31.10;-65:11:36.7;Tuc;1.07;0.82;33;14.84;;;;;23.42;Sm;;;;;;;;ESO 109-030,ESO-LV 109-0300,PGC 070188,TYC 9131-1355-1;;+1m 30s, -1d 10m error in A-M position.; +IC5273;G;22:59:26.70;-37:42:10.4;Gru;3.07;1.98;46;11.90;11.45;9.82;8.96;8.75;23.36;SBc;;;;;;;;2MASX J22592671-3742103,ESO 346-022,ESO-LV 346-0220,IRAS 22566-3758,MCG -06-50-020,PGC 070184;;; +IC5274;G;22:58:27.65;+18:55:07.5;Peg;0.90;0.77;109;15.30;;11.50;10.74;10.52;23.71;S0;;;;;;;;2MASX J22582767+1855075,PGC 070149,UGC 12275;;; +IC5275;Other;22:58:39.46;+18:51:45.1;Peg;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +IC5276;G;22:58:39.75;+18:49:11.7;Peg;0.83;0.35;45;15.20;;11.76;11.04;10.68;23.52;S0-a;;;;;;;;2MASX J22583973+1849115,PGC 070157;;; +IC5277;G;23:01:59.25;-65:11:52.4;Tuc;0.59;0.54;41;15.30;;13.14;12.34;12.10;22.82;Sc;;;;;;;;2MASX J23015922-6511523,ESO 109-031,ESO-LV 109-0310,PGC 070294;;; +IC5278;G;23:00:15.84;-08:10:43.6;Aqr;1.17;0.40;88;15.50;;13.22;12.32;12.25;23.55;Sd;;;;;;;;2MASX J23001579-0810433,MCG -01-58-014,PGC 070232,SDSS J230015.84-081043.6;;MCG lists the identification with IC 5278 as doubtful.; +IC5279;G;23:03:02.62;-69:12:35.0;Ind;0.77;0.67;32;14.31;;11.66;10.98;10.76;22.53;Sa;;;;;;;;2MASX J23030257-6912348,ESO 077-001,ESO-LV 77-0010,IRAS 22597-6928,PGC 070335;;; +IC5280;G;23:03:50.15;-65:12:28.3;Tuc;1.32;0.50;4;15.06;;12.05;11.23;11.54;23.82;Sab;;;;;;;;2MASX J23035011-6512283,ESO 109-033,ESO-LV 109-0330,PGC 070372;;; +IC5281;*;23:02:23.49;+27:00:23.0;Peg;;;;;;;;;;;;;;;;;;;;; +IC5282;G;23:02:48.19;+21:52:27.7;Peg;1.07;0.51;174;15.20;;12.18;11.49;11.10;23.72;Sc;;;;;;;;2MASX J23024818+2152274,MCG +04-54-019,PGC 070323,UGC 12325;;; +IC5283;G;23:03:18.00;+08:53:37.0;Peg;1.15;0.60;105;15.20;;11.57;10.77;10.47;23.24;Sc;;;;;;;;2MASX J23031799+0853371,MCG +01-58-026,PGC 070350,UGC 12332 NOTES01;;; +IC5284;G;23:06:46.27;+19:07:19.5;Peg;1.07;0.38;140;14.90;;12.39;11.73;11.49;23.42;Sa;;;;;;;;2MASX J23064626+1907195,MCG +03-58-034,PGC 070492,UGC 12364;;; +IC5285;G;23:06:58.94;+22:56:11.3;Peg;1.32;0.74;88;14.40;;10.86;10.22;9.82;23.23;S0-a;;;;;;;;2MASX J23065893+2256113,MCG +04-54-026,PGC 070497,SDSS J230658.93+225611.3,UGC 12365;;; +IC5286;G;23:09:55.51;-68:15:11.2;Ind;0.97;0.21;114;16.19;;13.84;13.30;13.07;23.59;Sc;;;;;;;;2MASX J23095548-6815113,ESO 077-005,ESO-LV 77-0050,PGC 070595;;; +IC5287;G;23:09:20.27;+00:45:23.4;Psc;0.91;0.40;40;14.74;17.08;11.86;11.37;10.84;23.18;SBb;;;;;;;;2MASX J23092028+0045230,MCG +00-59-003,PGC 070575,SDSS J230920.26+004523.3,SDSS J230920.26+004523.4,SDSS J230920.27+004523.4,UGC 12393;;; +IC5288;G;23:11:44.22;-68:05:38.6;Ind;0.92;0.79;84;14.79;;11.63;10.92;10.47;23.31;S0;;;;;;;;2MASX J23114422-6805386,ESO 077-006,ESO-LV 77-0060,IRAS 23085-6821,PGC 070662;;; +IC5289;GPair;23:11:16.96;-32:27:15.4;Scl;0.70;;;;;;;;;;;;;;;;;;;Position is for the center of the loop.;Diameter of the group inferred by the author. +IC5289 NED01;G;23:11:17.20;-32:27:21.5;Scl;0.44;0.17;0;;;;;;;Sb;;;;;;;;MCG -05-54-021,PGC 070644;;; +IC5289 NED02;G;23:11:17.30;-32:27:06.7;Scl;1.15;0.74;36;14.32;15.40;11.67;10.93;10.57;23.43;S0;;;;;;;;2MASX J23111727-3227067,ESO 407-008,ESO-LV 407-0080,IRAS 23085-3243,MCG -05-54-020,PGC 070645;;; +IC5290;G;23:12:53.26;-23:28:09.1;Aqr;1.15;0.72;67;14.50;;11.01;10.33;10.06;22.42;Sa;;;;;;;;2MASX J23125326-2328089,ESO 535-008,MCG -04-54-014,PGC 070705;;This may also be NGC 7520.; +IC5291;G;23:13:39.58;+09:14:29.5;Peg;0.34;0.34;165;15.60;;13.27;12.45;11.99;22.05;;;;;;;;;2MASX J23133957+0914297,PGC 070729;;; +IC5292;G;23:13:47.07;+13:41:15.4;Peg;0.68;0.64;90;15.50;;12.73;12.09;11.97;23.05;Sc;;;;;;;;2MASX J23134710+1341151,PGC 070740,SDSS J231347.06+134115.4,SDSS J231347.31+134112.2,SDSS J231347.32+134112.1;;; +IC5293;G;23:14:44.64;+25:08:26.2;Peg;0.71;0.49;167;15.60;;12.03;11.39;11.26;23.73;;;;;;;;;2MASX J23144460+2508262,PGC 070792;;; +IC5294;Dup;23:16:10.76;-42:35:05.1;Gru;;;;;;;;;;;;;;;7552;;;;;; +IC5295;G;23:15:29.14;+25:07:13.7;Peg;0.64;0.55;46;15.70;;12.43;11.71;11.45;23.61;Sc;;;;;;;;2MASX J23152913+2507132,PGC 070839;;; +IC5296;G;23:15:43.78;+25:05:40.3;Peg;0.79;0.49;37;15.50;;12.51;11.91;11.39;23.45;Sb;;;;;;;;2MASX J23154379+2505403,MCG +04-54-037,PGC 070847,UGC 12460;;; +IC5297;G;23:15:58.44;+25:01:30.7;Peg;0.58;0.55;151;15.70;;;;;23.36;;;;;;;;;PGC 070875;;; +IC5298;G;23:16:00.70;+25:33:24.1;Peg;0.79;0.70;161;15.00;;11.70;10.89;10.39;23.22;SBc;;;;;;;;2MASX J23160070+2533242,IRAS 23135+2516,MCG +04-54-038,PGC 070877;;; +IC5299;G;23:16:19.15;+20:51:21.0;Peg;0.43;0.25;20;;;12.38;11.77;11.26;;;;;;;;;;2MASX J23161913+2051209;;; +IC5300;G;23:16:34.09;+20:49:42.4;Peg;0.81;0.50;130;15.70;;11.80;11.15;10.87;23.92;S0;;;;;;;;2MASX J23163408+2049424,PGC 070898;;; +IC5301;G;23:18:59.43;-69:33:43.6;Ind;1.10;0.58;87;15.36;;;;;23.73;Sc;;;;;;;;ESO 077-012,ESO-LV 77-0120,PGC 071040;;; +IC5302;G;23:19:36.69;-64:34:05.8;Tuc;1.19;0.42;24;15.01;;11.83;11.12;10.85;24.08;S0;;;;;;;;2MASX J23193673-6434057,ESO 110-009,ESO-LV 110-0090,PGC 071082;;; +IC5303;**;23:17:54.74;+00:15:52.3;Psc;;;;;;;;;;;;;;;;;;;;; +IC5304;G;23:18:52.55;-10:15:33.5;Aqr;1.52;0.94;18;13.47;;11.04;10.34;10.07;23.98;E-S0;;;;;;;;2MASX J23185254-1015335,MCG -02-59-011,PGC 071028,SDSS J231852.55-101533.5;;; +IC5305;G;23:18:06.22;+10:17:59.5;Peg;0.40;0.25;120;15.40;;12.03;11.32;10.98;;Sa;;;;;;;;2MASX J23180621+1017598,MCG +02-59-021,PGC 070987;;; +IC5306;G;23:18:11.33;+10:14:45.8;Peg;0.66;0.29;83;15.60;;12.44;11.77;11.61;21.41;Sab;;;;;;;;2MASX J23181133+1014457,MCG +02-59-022,PGC 070992,UGC 12485 NOTES02 NED02;;; +IC5307;G;23:18:22.03;+10:14:08.7;Peg;0.30;0.26;40;17.12;;12.45;11.67;11.36;23.24;;;;;;;;;2MASX J23182204+1014088,LEDA 214932;;;B-Mag taken from LEDA. +IC5308;Dup;23:19:21.14;-42:15:24.6;Gru;;;;;;;;;;;;;;;7599;;;;;; +IC5309;G;23:19:11.65;+08:06:33.5;Peg;1.29;0.61;25;15.00;;11.47;10.95;10.68;23.13;Sb;;;;;;;;2MASX J23191163+0806335,IRAS 23166+0750,MCG +01-59-042,PGC 071051,UGC 12498;;; +IC5310;G;23:20:47.64;-22:08:57.7;Aqr;0.50;0.41;7;15.28;;12.30;11.72;11.38;22.63;S0;;;;;;;;2MASX J23204765-2208579,ESO 605-001,ESO-LV 605-0010,PGC 071146;;; +IC5311;**;23:20:37.75;+17:16:26.9;Peg;;;;;;;;;;;;;;;;;;;;The IC identification is uncertain.; +IC5312;G;23:20:58.32;+19:19:04.9;Peg;0.35;0.35;105;15.00;;12.41;11.78;11.36;21.39;Sb;;;;;;;;2MASX J23205832+1919049,MCG +03-59-041,MCG +03-59-041 NED01,PGC 071152;;; +IC5313;Dup;23:22:00.90;-42:28:49.8;Gru;;;;;;;;;;;;;;;7632;;;;;; +IC5314;G;23:21:08.54;+19:18:40.4;Peg;0.68;0.68;5;15.60;;11.97;11.12;10.80;23.59;E;;;;;;;;2MASX J23210856+1918400,MCG +03-59-042,PGC 071160;;; +IC5315;G;23:21:18.25;+25:23:06.7;Peg;0.92;0.77;136;14.60;;11.56;10.87;10.54;23.37;E;;;;;;;;2MASX J23211822+2523075,MCG +04-55-006,PGC 071174,UGC 12541;;; +IC5316;G;23:21:54.11;+21:12:09.2;Peg;0.58;0.44;118;16.25;;12.84;12.14;11.67;23.81;;;;;;;;;2MASX J23215416+2112091,LEDA 1645026;;;B-Mag taken from LEDA. +IC5317;G;23:23:28.68;+21:09:48.7;Peg;0.81;0.62;5;15.10;;11.42;10.66;10.27;23.33;S0;;;;;;;;2MASX J23232868+2109487,PGC 071296;;; +IC5318;Dup;23:24:06.96;-11:51:38.5;Aqr;;;;;;;;;;;;;;;7646;;;;;; +IC5319;G;23:24:48.96;+13:59:47.5;Peg;0.73;0.64;1;15.77;;12.52;11.83;11.62;23.84;E-S0;;;;;;;;2MASX J23244893+1359471,LEDA 1446384,SDSS J232448.95+135947.5,SDSS J232448.96+135947.5;;;B-Mag taken from LEDA. +IC5320;G;23:28:21.97;-67:45:37.0;Tuc;0.60;0.55;113;15.17;;12.14;11.51;11.18;22.85;S0;;;;;;;;2MASX J23282200-6745369,ESO 077-021,ESO-LV 77-0210,PGC 071530;;; +IC5321;G;23:26:20.23;-17:57:23.0;Aqr;1.31;0.75;46;13.96;;12.49;12.03;11.69;23.00;SBab;;;;;;;;ESO 605-007,ESO-LV 605-0070,IRAS 23237-1813,MCG -03-59-009,PGC 071430;;; +IC5322;G;23:28:30.81;-67:45:40.8;Tuc;0.77;0.48;77;15.09;;12.35;11.75;11.39;23.24;S0;;;;;;;;2MASX J23283081-6745409,ESO 077-022,ESO-LV 77-0220,PGC 071536;;; +IC5323;G;23:27:36.97;-67:48:55.7;Tuc;1.64;1.04;32;14.04;;11.05;10.55;10.16;23.72;S0-a;;;;;;;;2MASX J23273700-6748557,ESO 077-019,ESO-LV 77-0190,PGC 071489;;; +IC5324;G;23:28:17.75;-67:49:16.9;Tuc;1.26;1.12;34;14.09;;10.72;9.95;9.71;23.22;E;;;;;;;;ESO 077-020,ESO-LV 77-0200,PGC 071526;;; +IC5325;G;23:28:43.43;-41:20:00.5;Phe;2.88;2.62;8;11.89;11.27;9.22;8.60;8.36;22.83;Sbc;;;;;;;;2MASX J23284342-4120005,ESO 347-018,ESO-LV 347-0180,IRAS 23260-4136,MCG -07-48-004,PGC 071548;;; +IC5326;G;23:29:35.16;-28:49:52.2;Scl;1.02;0.49;116;14.91;;12.13;11.40;11.07;23.24;Sb;;;;;;;;2MASX J23293518-2849523,ESO 470-011,ESO-LV 470-0110,MCG -05-55-015,PGC 071581;;; +IC5327;Dup;23:30:47.74;-13:29:07.6;Aqr;;;;;;;;;;;;;;;1495;;;;;; +IC5328;G;23:33:16.46;-45:00:57.5;Phe;2.99;1.75;41;12.21;11.03;9.14;8.55;8.28;23.48;E;;;;;;;;2MASX J23331645-4500574,ESO 291-029,ESO-LV 291-0290,PGC 071730;;; +IC5329;G;23:33:09.59;+21:14:14.3;Peg;1.37;0.34;109;15.70;;12.67;11.79;11.41;23.79;Sc;;;;;;;;2MASX J23330960+2114141,MCG +03-60-002,PGC 071731,UGC 12660;;Position given in 1993AN....314...97K is incorrect.; +IC5330;*;23:33:26.33;-02:52:59.3;Psc;;;;;;;;;;;;;;;;;;;;; +IC5331;G;23:33:24.82;+21:07:48.2;Peg;1.24;0.43;17;15.10;;11.84;11.11;10.74;23.55;Sab;;;;;;;;2MASX J23332482+2107481,MCG +03-60-003,PGC 071740,UGC 12662;;; +IC5332;G;23:34:27.49;-36:06:03.9;Scl;6.07;5.77;0;11.27;10.72;9.60;8.77;8.70;23.92;SABc;;;;;;;;2MASX J23342748-3606038,ESO 408-009,ESO-LV 408-0090,MCG -06-51-012,PGC 071775;;Extended HIPASS source; +IC5333;Dup;23:34:52.98;-65:23:45.7;Tuc;;;;;;;;;;;;;;;7697;;;;;; +IC5334;G;23:34:36.42;-04:32:03.3;Aqr;1.91;0.57;125;14.10;;10.91;10.20;9.99;23.40;Sbc;;;;;;;;2MASX J23343641-0432032,MCG -01-60-008,PGC 071784;;; +IC5335;G;23:35:47.37;-67:23:49.1;Tuc;1.11;0.48;137;15.11;;12.54;11.73;11.48;24.00;S0;;;;;;;;2MASX J23354732-6723492,ESO 077-025,ESO-LV 77-0250,IRAS 23329-6740,PGC 071846;;; +IC5336;GPair;23:36:19.69;+21:05:53.2;Peg;0.90;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC5336 NED01;G;23:36:18.72;+21:05:58.1;Peg;0.49;0.29;38;17.10;;13.43;12.73;12.49;24.27;;;;;;;;;2MASX J23361870+2105578,PGC 1642748;;;B-Mag taken from LEDA. +IC5336 NED02;G;23:36:20.44;+21:05:48.2;Peg;0.59;0.44;112;16.74;;13.06;12.17;12.15;24.32;;;;;;;;;2MASX J23362041+2105478,PGC 1642687;;;B-Mag taken from LEDA. +IC5337;G;23:36:25.03;+21:09:02.0;Peg;0.96;0.31;2;15.40;;12.49;11.82;11.41;23.27;Sbc;;;;;;;;2MASX J23362506+2109028,MCG +03-60-012,PGC 071875;;; +IC5338;G;23:36:30.43;+21:08:45.6;Peg;1.26;0.91;26;15.50;;11.56;10.77;10.45;24.35;E;;;;;;;;2MASX J23363057+2108498,MCG +03-60-013,PGC 071884,UGC 12703;;; +IC5339;G;23:38:05.27;-68:26:31.4;Tuc;1.07;0.95;106;14.64;;11.35;10.54;10.29;23.52;E-S0;;;;;;;;2MASX J23380525-6826316,ESO 077-026,ESO-LV 77-0260,PGC 069388,PGC 071965;;; +IC5340;Other;23:38:32.35;-04:51:16.6;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5341;G;23:38:26.82;+26:59:06.4;Peg;0.24;0.24;25;15.50;;12.09;11.37;11.23;21.52;E;;;;;;;;2MASX J23382684+2659066,MCG +04-55-035,PGC 071981;;; +IC5342;G;23:38:38.80;+27:00:40.9;Peg;0.79;0.63;26;15.40;;12.10;11.46;11.15;23.77;E;;;;;;;;2MASX J23383881+2700407,MCG +04-55-039,PGC 071984,SDSS J233838.79+270040.9;;; +IC5343;G;23:39:22.37;-22:29:49.8;Aqr;0.86;0.68;15;14.47;;12.51;11.84;11.72;22.40;Sm;;;;;;;;ESO 536-015,MCG -04-55-019,PGC 072032;;; +IC5344;Other;23:39:15.84;-04:58:00.3;Aqr;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5345;G;23:39:32.23;-22:24:48.0;Aqr;0.74;0.51;155;14.99;14.19;12.38;11.68;11.48;22.74;Sa;;;;;;;;2MASX J23393222-2224479,ESO 536-016,MCG -04-55-020,PGC 072040;;; +IC5346;G;23:41:06.33;+24:56:59.3;Peg;0.60;0.34;98;15.70;;12.71;12.02;11.66;23.76;;;;;;;;;2MASX J23410632+2456594,PGC 072105;;; +IC5347;G;23:41:36.71;+24:53:08.8;Peg;0.72;0.56;112;15.70;;12.41;11.75;11.56;23.89;;;;;;;;;2MASX J23413667+2453091,PGC 072130;;; +IC5348;Dup;23:44:59.24;-42:54:39.3;Phe;;;;;;;;;;;;;;;7744;;;;;; +IC5349;GPair;23:46:22.83;-28:00:18.4;Scl;1.10;;;;;;;;;;;;;;;;;MCG -05-56-005;;;Diameter of the group inferred by the author. +IC5349 NED01;G;23:46:22.70;-28:00:21.7;Scl;1.00;0.30;21;15.24;;11.75;11.09;10.56;23.96;S0;;;;;;;;2MASX J23462269-2800215,ESO 471-011,ESO-LV 471-0110,MCG -05-56-005 NED01,PGC 072358;;; +IC5349 NED02;G;23:46:23.09;-28:00:11.7;Scl;1.03;1.03;0;14.77;;;;;;E;;;;;;;;ESO-LV 471-0111,MCG -05-56-005 NED02,PGC 072359;;;Diameters taken from SIMBAD. +IC5350;G;23:47:14.63;-27:57:27.8;Scl;1.03;0.84;55;14.69;;11.62;10.94;10.69;23.44;E-S0;;;;;;;;2MASX J23471464-2757283,ESO 471-014,ESO-LV 471-0140,MCG -05-56-009,PGC 072396;;; +IC5351;G;23:47:18.93;-02:18:48.6;Psc;1.70;0.81;40;14.95;;11.39;10.68;10.42;24.61;E;;;;;;;;2MASX J23471891-0218485,MCG -01-60-032,PGC 072404;;Superposed star to the south.; +IC5352;G;23:47:19.90;-02:16:50.4;Psc;0.45;0.31;66;16.75;;13.25;12.45;12.64;23.64;S0;;;;;;;;2MASX J23471984-0216505,PGC 072405;;; +IC5353;G;23:47:28.59;-28:06:34.1;Scl;1.79;1.00;128;14.03;13.15;10.95;10.20;9.93;23.95;E-S0;;;;;;;;2MASX J23472856-2806335,ESO 471-017,ESO-LV 471-0170,MCG -05-56-010,PGC 072421;;; +IC5354;G;23:47:28.34;-28:08:09.6;Scl;0.92;0.58;65;14.94;;11.33;10.61;10.37;23.64;E;;;;;;;;2MASX J23472833-2808095,ESO 471-016,ESO-LV 471-0160,MCG -05-56-011,PGC 072416;;Southwestern, brighter of two.; +IC5355;G;23:47:15.29;+32:46:57.9;And;1.01;0.76;11;14.40;;11.86;11.30;11.22;23.00;SBc;;;;;;;;2MASX J23471530+3246579,IRAS 23447+3230,MCG +05-56-006,PGC 072397,UGC 12781;;; +IC5356;G;23:47:23.79;-02:21:04.5;Psc;0.97;0.52;42;15.11;;11.88;11.17;10.87;23.42;Sa;;;;;;;;2MASX J23472378-0221045,MCG -01-60-034,PGC 072409;;; +IC5357;G;23:47:22.99;-02:18:02.4;Psc;1.58;0.86;154;14.27;;10.80;10.07;9.85;23.74;E-S0;;;;;;;;2MASX J23472298-0218025,MCG -01-60-033,PGC 072408;;; +IC5358;G;23:47:45.04;-28:08:26.7;Scl;1.48;1.03;114;13.42;14.72;10.57;9.81;9.58;23.36;E;;;;;;;;2MASX J23474504-2808265,ESO 471-019,ESO-LV 471-0190,MCG -05-56-013,PGC 072441;;; +IC5359;G;23:47:37.86;-02:19:00.0;Psc;1.23;0.27;139;15.86;;12.39;11.65;11.41;23.69;Sc;;;;;;;;2MASX J23473787-0218598,MCG -01-60-036,PGC 072430;;; +IC5360;Other;23:47:53.73;-37:03:31.2;Scl;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5361;Dup;23:51:28.89;-13:22:53.7;Aqr;;;;;;;;;;;;;;;7761;;;;;; +IC5362;G;23:51:36.73;-28:21:54.2;Scl;1.56;1.43;40;13.81;;10.70;9.95;9.71;23.54;S0;;;;;;5363;;2MASX J23513672-2821542,ESO 471-026,ESO-LV 471-0260,MCG -05-56-023,PGC 072648;;The IC 5363 identification is uncertain.; +IC5363;Dup;23:51:36.73;-28:21:54.2;Scl;;;;;;;;;;;;;;;;5362;;;;; +IC5364;GPair;23:56:25.00;-29:01:24.0;Scl;1.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +IC5364 NED01;G;23:56:23.91;-29:01:25.3;Scl;1.07;1.07;95;14.28;;;;;23.16;S0-a;;;;;;;;MCG -05-01-007,PGC 072955;;;B-Mag taken from LEDA. +IC5364 NED02;G;23:56:25.24;-29:01:24.2;Scl;1.00;0.92;90;15.16;;11.12;10.39;9.60;23.27;E;;;;;;;;2MASX J23562523-2901242,ESO 471-047,ESO-LV 471-0470,MCG -05-01-008,PGC 072950;;; +IC5365;Other;23:57:34.59;-37:01:29.6;Scl;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5366;Other;23:57:40.39;+52:47:29.9;Cas;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal pos. Maybe the faint neby at ~ 2355.2+5031 (1950)?"; +IC5367;G;23:58:38.91;+22:26:56.7;Peg;0.56;0.42;52;16.80;;12.57;11.78;11.50;23.63;Sab;;;;;;;;2MASX J23583893+2226562,LEDA 1670097;;;B-Mag taken from LEDA. +IC5368;Dup;23:59:06.60;+06:52:23.0;Psc;;;;;;;;;;;;;;;;1523;;;;; +IC5369;G;23:59:50.54;+32:42:08.5;And;0.91;0.45;86;15.30;;12.10;11.32;11.00;23.64;S0-a;;;;;;;;2MASX J23595052+3242086,PGC 073190;;; +IC5370;G;00:00:09.18;+32:44:18.2;And;0.78;0.71;115;14.90;;11.55;10.84;10.51;23.09;S0-a;;;;;;;;2MASX J00000914+3244182,MCG +05-01-018,PGC 000005;;; +IC5371;G;00:00:14.78;+32:49:55.2;And;0.52;0.45;147;15.10;;13.11;12.51;12.04;23.20;;;;;;;;;2MASX J00001476+3249552,PGC 000024;;; +IC5372;G;00:00:16.26;+32:47:33.4;And;0.40;0.35;10;15.10;;12.08;11.48;11.25;;;;;;;;;;2MASX J00001627+3247332,PGC 2801010;;; +IC5373;G;00:00:28.81;+32:46:56.5;And;0.67;0.51;154;15.30;;11.95;11.11;10.94;22.91;Sb;;;;;;;;2MASX J00002880+3246563,MCG +05-01-019,PGC 000036;;; +IC5374;G;00:01:04.52;+04:30:00.7;Psc;0.67;0.57;16;14.50;;12.77;12.13;11.82;23.28;Sc;;;;;;;;2MASX J00010444+0430001,MCG +01-01-010,PGC 000079;;; +IC5375;G;00:01:04.77;+04:32:26.2;Psc;0.90;0.51;1;14.50;;11.95;11.29;11.04;23.46;Sab;;;;;;;;2MASX J00010478+0432261,MCG +01-01-009,PGC 000080;;; +IC5376;G;00:01:19.77;+34:31:32.6;And;1.64;0.44;4;15.00;;11.45;10.75;10.43;23.82;Sab;;;;;;;;2MASX J00011976+3431326,MCG +06-01-007,PGC 000102,UGC 12909;;; +IC5377;G;00:02:05.40;+16:35:25.0;Peg;0.91;0.54;0;15.60;;;;;23.62;IAB;;;;;;;;MCG +03-01-013,PGC 000156,UGC 12918;;; +IC5378;GPair;00:02:37.80;+16:38:53.0;Peg;1.50;;;;;;;;;;;;;;;;;UGC 00001;;;Diameter of the group inferred by the author. +IC5378 NED01;G;00:02:37.90;+16:38:37.6;Peg;0.55;0.55;50;14.90;;11.61;10.95;10.69;22.53;Sbc;;;;;;;;2MASX J00023794+1638377,MCG +03-01-015,PGC 000177,UGC 00001 NED01;;; +IC5378 NED02;G;00:02:37.70;+16:39:08.0;Peg;0.60;0.53;5;14.90;;;;;24.36;Sc;;;;;;;;MCG +03-01-016,PGC 000178,UGC 00001 NED02;;; +IC5379;G;00:02:40.70;+16:36:01.0;Peg;0.55;0.26;65;15.70;;;;;23.00;Sc;;;;;;;;MCG +03-01-017,PGC 000185;;; +IC5380;G;00:02:49.56;-66:11:11.5;Tuc;0.84;0.37;132;15.46;;12.48;11.94;11.93;23.33;Sab;;;;;;;;ESO 078-011,ESO-LV 78-0110,PGC 000188;;; +IC5381;G;00:03:11.27;+15:57:56.6;Peg;1.23;0.37;52;14.90;;11.68;10.88;10.59;23.42;SABa;;;;;;;;2MASX J00031127+1557563,MCG +03-01-019,PGC 000212,SDSS J000311.26+155756.6,SDSS J000311.27+155756.5,SDSS J000311.27+155756.6,UGC 00007;;; +IC5382;G;00:03:26.20;-65:11:48.0;Tuc;0.85;0.79;29;15.31;;12.87;12.19;12.07;23.56;Sbc;;;;;;;;2MASX J00032618-6511477,ESO 078-013,ESO-LV 78-0130,PGC 000236;;; +IC5383;Other;00:03:48.80;+16:00:51.0;Peg;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5384;Dup;00:04:09.12;-11:59:02.0;Cet;;;;;;;;;;;;;;;7813;;;;;; +IC5385;Other;00:06:23.70;-00:04:36.0;Psc;;;;;;;;;;;;;;;;;;;;"Nothing here; nominal position."; +IC5386;Dup;00:06:28.46;-03:42:58.1;Psc;;;;;;;;;;;;;;;7832;;;;;; +NGC0001;G;00:07:15.84;+27:42:29.1;Peg;1.57;1.07;112;13.40;;10.78;10.02;9.76;23.13;Sb;;;;;;;;2MASX J00071582+2742291,IRAS 00047+2725,MCG +04-01-025,PGC 000564,UGC 00057;;; +NGC0002;G;00:07:17.11;+27:40:42.1;Peg;0.95;0.47;110;14.80;;11.85;11.15;10.94;23.15;Sab;;;;;;;;2MASX J00071710+2740421,MCG +04-01-026,PGC 000567,UGC 00059;;; +NGC0003;G;00:07:16.80;+08:18:05.9;Psc;1.02;0.59;112;14.60;;11.01;10.36;9.98;23.01;S0;;;;;;;;2MASX J00071680+0818058,IRAS 00047+0801,MCG +01-01-037,PGC 000565,UGC 00058;;; +NGC0004;G;00:07:24.41;+08:22:25.6;Psc;0.53;0.24;32;;;;;;23.59;S?;;;;;;;;2MASX J00072439+0822253,PGC 212468;;; +NGC0005;G;00:07:48.87;+35:21:44.3;And;0.98;0.59;111;14.60;;11.52;10.86;10.63;23.51;E;;;;;;;;2MASX J00074889+3521444,MCG +06-01-013,PGC 000595,UGC 00062;;; +NGC0006;G;00:09:32.70;+33:18:31.2;And;1.73;1.34;141;14.50;;10.35;9.60;9.42;24.14;E-S0;;;;;0020;;;2MASX J00093270+3318310,MCG +05-01-036,PGC 000679,UGC 00084;;; +NGC0007;G;00:08:20.96;-29:54:54.0;Scl;2.47;0.53;23;13.88;;;;;23.83;Sc;;;;;;;;ESO 409-022,ESO-LV 409-0220,MCG -05-01-037,PGC 000627;;; +NGC0008;**;00:08:45.30;+23:50:20.0;Peg;;;;16.65;15.32;12.61;11.74;11.63;;;;;;;;;;;;NGC 0008 is a double star (1976RC2...C...0000d).;Main component is UCAC4 570-000332. +NGC0009;G;00:08:54.70;+23:49:01.1;Peg;0.70;0.31;149;14.50;;12.69;11.95;11.78;22.64;Sb;;;;;;;;2MASX J00085471+2349009,IRAS 00063+2332,MCG +04-01-030,PGC 000652,UGC 00078;;; +NGC0010;G;00:08:34.54;-33:51:30.0;Scl;2.35;1.27;30;13.13;;10.21;9.50;9.21;23.38;Sbc;;;;;;;;2MASX J00083453-3351299,ESO 349-032,ESO-LV 349-0320,IRAS 00060-3408,MCG -06-01-024,PGC 000634;;; +NGC0011;G;00:08:42.50;+37:26:52.5;And;1.44;0.22;111;14.50;;11.11;10.33;9.93;23.27;Sa;;;;;;;;2MASX J00084249+3726523,IRAS 00061+3710,MCG +06-01-015,PGC 000642,UGC 00073;;; +NGC0012;G;00:08:44.75;+04:36:45.1;Psc;1.52;1.21;127;14.50;;11.13;10.38;10.28;23.30;Sc;;;;;;;;2MASX J00084475+0436451,MCG +01-01-040,PGC 000645,UGC 00074;;; +NGC0013;G;00:08:47.72;+33:26:00.0;And;2.28;0.60;54;14.20;;10.68;10.00;9.75;23.79;Sb;;;;;;;;2MASX J00084772+3326000,MCG +05-01-034,PGC 000650,UGC 00077;;; +NGC0014;G;00:08:46.40;+15:48:56.0;Peg;1.53;1.01;23;13.30;;11.25;10.74;10.42;22.31;IB;;;;;;;;2MASX J00084642+1548559,MCG +02-01-021,MCG +03-01-026,PGC 000647,SDSS J000846.41+154856.5,UGC 00075;;Two MCG entries for one object, via MCG notes.; +NGC0015;G;00:09:02.47;+21:37:28.3;Peg;1.07;0.56;30;14.90;;11.36;10.60;10.30;23.60;Sa;;;;;;;;2MASX J00090246+2137279,MCG +03-01-027,PGC 000661,UGC 00082;;; +NGC0016;G;00:09:04.29;+27:43:45.9;Peg;1.74;0.85;17;13.01;12.06;9.75;9.06;8.78;22.91;E-S0;;;;;;;;2MASX J00090429+2743460,MCG +04-01-032,PGC 000660,UGC 00080;;; +NGC0017;G;00:11:06.55;-12:06:26.3;Cet;1.15;0.39;32;14.14;13.52;11.24;10.46;10.07;23.28;S0-a;;;;;0034;;;2MASX J00110661-1206283,IRAS 00085-1223,MCG -02-01-032,PGC 000781;;Mulchaey, et al (1996, ApJS, 102, 309) say this is not a Seyfert.; +NGC0018;**;00:09:23.10;+27:43:55.5;Peg;;;;14.00;;;;;;;;;;;;;;;;; +NGC0019;G;00:10:40.87;+32:58:59.1;And;1.21;0.60;41;13.90;;11.47;10.79;10.53;22.61;SBbc;;;;;;;;2MASX J00104087+3258592,IRAS 00080+3242,MCG +05-01-046,PGC 000759,UGC 00098;;; +NGC0020;Dup;00:09:32.70;+33:18:31.2;And;;;;;;;;;;;;;;;0006;;;;;; +NGC0021;G;00:10:46.90;+33:21:10.2;And;1.38;0.63;150;13.50;;11.25;10.61;10.33;22.25;Sbc;;;;;0029;;;2MASX J00104688+3321102,IRAS 00082+3304,MCG +05-01-048,PGC 000767,UGC 00100;;; +NGC0022;G;00:09:48.19;+27:49:56.3;And;1.21;0.74;155;14.90;;11.61;11.00;10.65;23.55;Sb;;;;;;;;2MASX J00094817+2749564,MCG +05-01-039,PGC 000690,UGC 00086;;; +NGC0023;G;00:09:53.41;+25:55:25.6;And;1.55;1.22;175;12.50;;9.91;9.21;8.88;22.41;Sa;;;;;;;;2MASX J00095341+2555254,IRAS 00073+2538,MCG +04-01-033,PGC 000698,SDSS J000953.42+255525.6,UGC 00089;;; +NGC0024;G;00:09:56.54;-24:57:47.3;Scl;6.18;2.40;44;12.20;11.58;9.71;9.11;8.96;24.01;Sc;;;;;;;;2MASX J00095654-2457472,ESO 472-016,ESO-LV 472-0160,IRAS 00073-2514,MCG -04-01-018,PGC 000701,UGCA 002;;; +NGC0025;G;00:09:59.28;-57:01:15.0;Phe;1.43;1.10;84;13.99;15.50;10.80;10.03;9.79;23.49;E-S0;;;;;;;;2MASX J00095929-5701148,ESO 149-019,ESO-LV 149-0190,PGC 000706;;; +NGC0026;G;00:10:25.87;+25:49:54.6;And;1.12;0.76;102;13.90;;11.42;10.69;10.42;22.80;Sab;;;;;;;;2MASX J00102587+2549544,IRAS 00078+2533,MCG +04-01-034,PGC 000732,UGC 00094;;; +NGC0027;G;00:10:32.77;+28:59:46.5;And;1.22;0.46;118;14.50;;11.47;10.67;10.43;22.98;Sbc;;;;;;;;2MASX J00103277+2859464,IRAS 00079+2843,MCG +05-01-044,PGC 000742,UGC 00096;;; +NGC0028;G;00:10:25.24;-56:59:20.9;Phe;0.92;0.81;45;15.37;;11.64;10.93;10.76;23.92;E;;;;;;;;2MASX J00102524-5659209,PGC 000730;;; +NGC0029;Dup;00:10:46.90;+33:21:10.2;And;;;;;;;;;;;;;;;0021;;;;;; +NGC0030;**;00:10:50.79;+21:58:37.1;Peg;;;;;;;;;;;;;;;;;;;;; +NGC0031;G;00:10:38.39;-56:59:11.4;Phe;1.17;0.53;2;14.63;;12.08;11.50;11.13;22.97;Sc;;;;;;;;2MASX J00103838-5659114,ESO 149-020,ESO-LV 149-0200,PGC 000751;;; +NGC0032;*;00:10:53.59;+18:47:45.6;Peg;;;;;;;;;;;;;;;;;;;;; +NGC0033;**;00:10:56.64;+03:40:33.3;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0034;Dup;00:11:06.55;-12:06:26.3;Cet;;;;;;;;;;;;;;;0017;;;;;; +NGC0035;G;00:11:10.48;-12:01:15.3;Cet;0.76;0.62;138;14.00;;12.57;11.91;11.68;22.87;Sb;;;;;;;;2MASX J00111050-1201146,IRAS 00086-1217,MCG -02-01-033,PGC 000784;;; +NGC0036;G;00:11:22.30;+06:23:21.7;Psc;2.14;1.32;15;14.50;;10.71;9.96;9.60;24.43;SABb;;;;;;;;2MASX J00112231+0623212,IRAS 00088+0606,MCG +01-01-043,PGC 000798,SDSS J001122.29+062321.6,UGC 00106;;; +NGC0037;G;00:11:22.93;-56:57:26.4;Phe;1.11;0.68;30;14.70;;11.41;10.67;10.43;23.86;S0;;;;;;;;2MASX J00112290-5657264,ESO 149-022,ESO-LV 149-0220,PGC 000801;;; +NGC0038;G;00:11:46.99;-05:35:10.6;Psc;1.14;1.05;170;13.50;;10.75;10.08;9.80;23.18;Sa;;;;;;;;2MASX J00114698-0535103,MCG -01-01-047,PGC 000818;;; +NGC0039;G;00:12:18.86;+31:03:39.9;And;1.10;0.99;87;14.40;;11.59;11.06;10.59;23.20;Sc;;;;;;;;2MASX J00121885+3103399,MCG +05-01-052,PGC 000852,UGC 00114;;; +NGC0040;PN;00:13:01.03;+72:31:19.0;Cep;0.80;;;11.27;11.89;10.89;10.80;10.38;;;11.14;11.82;11.58;;;;HD 000826,HIP 001041,TYC 4302-01297-1;C 002,IRAS 00102+7214,PN G120.0+09.8;Bow-Tie nebula;; +NGC0041;G;00:12:47.97;+22:01:24.2;Peg;0.94;0.53;125;14.60;;11.68;11.06;10.61;22.67;Sc;;;;;;;;2MASX J00124795+2201239,IRAS 00101+2144,MCG +04-01-039,PGC 000865;;; +NGC0042;G;00:12:56.35;+22:06:01.1;Peg;0.86;0.50;114;15.00;;11.11;10.41;10.11;23.40;E-S0;;;;;;;;2MASX J00125636+2206009,MCG +04-01-041,PGC 000867,UGC 00118;;; +NGC0043;G;00:13:00.75;+30:54:55.0;And;1.39;1.21;100;13.90;;10.43;9.74;9.45;23.33;S0;;;;;;;;2MASX J00130073+3054551,MCG +05-01-054,PGC 000875,UGC 00120;;; +NGC0044;**;00:13:13.40;+31:17:10.5;And;;;;;;;;;;;;;;;;;;;;; +NGC0045;G;00:14:03.99;-23:10:55.5;Cet;6.18;4.44;159;11.21;10.73;9.83;9.20;9.09;23.80;SABd;;;;;;;;2MASX J00140398-2310555,ESO 473-001,ESO-LV 473-0010,IRAS 00115-2327,MCG -04-01-021,PGC 000930,UGCA 004;;Extended HIPASS source; +NGC0046;*;00:14:09.86;+05:59:15.7;Psc;;;;12.95;11.68;10.98;10.68;10.61;;;;;;;;;;TYC 8-572-1,UCAC2 33683502,UCAC3 192-840;;; +NGC0047;G;00:14:30.64;-07:10:02.8;Cet;1.35;1.09;85;13.40;;10.96;10.25;9.96;23.20;SBbc;;;;;0058;;;2MASX J00143065-0710028,IRAS 00119-0726,MCG -01-01-055,PGC 000967;;; +NGC0048;G;00:14:02.19;+48:14:05.5;And;1.34;0.61;15;15.00;;11.39;10.75;10.40;23.59;SABb;;;;;;;;2MASX J00140221+4814055,IRAS 00113+4757,MCG +08-01-031,PGC 000929,UGC 00133;;; +NGC0049;G;00:14:22.43;+48:14:47.8;And;0.93;0.59;161;15.30;;11.42;10.74;10.52;23.72;S0;;;;;;;;2MASX J00142243+4814475,MCG +08-01-033,PGC 000952,UGC 00136;;; +NGC0050;G;00:14:44.57;-07:20:42.3;Cet;2.04;1.17;154;12.00;;9.65;8.97;8.67;23.16;E-S0;;;;;;;;2MASX J00144455-0720423,MCG -01-01-058,PGC 000983,SDSS J001444.57-072042.4;;; +NGC0051;G;00:14:34.92;+48:15:20.5;And;1.40;0.80;32;14.60;;10.49;9.76;9.48;23.86;S0;;;;;;;;2MASX J00143489+4815198,MCG +08-01-035,PGC 000974,UGC 00138;;; +NGC0052;G;00:14:40.11;+18:34:55.3;Psc;2.26;0.61;126;14.60;;10.69;9.87;9.50;23.83;Sbc;;;;;;;;2MASX J00144010+1834551,IRAS 00120+1818,MCG +03-01-030,PGC 000978,UGC 00140;;; +NGC0053;G;00:14:42.85;-60:19:43.5;Tuc;1.54;0.95;178;13.70;;10.79;10.02;10.02;22.69;SBb;;;;;;;;2MASX J00144279-6019425,ESO 111-020,ESO-LV 111-0200,PGC 000982;;; +NGC0054;G;00:15:07.67;-07:06:24.2;Cet;1.35;0.49;93;14.00;;11.15;10.46;10.08;23.21;SBa;;;;;;;;2MASX J00150767-0706243,MCG -01-01-060,PGC 001011;;; +NGC0055;G;00:14:53.60;-39:11:47.9;Scl;29.85;3.05;101;8.58;7.87;6.98;6.55;6.25;22.52;SBm;;;;;;;;2MASX J00145360-3911478,C 072,ESO 293-050,ESO-LV 293-0500,IRAS 00125-3928,MCG -07-01-013,PGC 001014;;; +NGC0056;Other;00:15:20.66;+12:26:40.3;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC0057;G;00:15:30.87;+17:19:42.7;Psc;2.11;1.60;47;13.70;;9.71;8.98;8.68;23.19;E;;;;;;;;2MASX J00153087+1719422,MCG +03-01-031,PGC 001037,SDSS J001530.91+171942.3,UGC 00145;;; +NGC0058;Dup;00:14:30.64;-07:10:02.8;Cet;;;;;;;;;;;;;;;0047;;;;;; +NGC0059;G;00:15:25.13;-21:26:39.8;Cet;2.38;1.24;121;13.21;12.59;10.89;10.26;10.10;23.72;E-S0;;;;;;;;2MASX J00152512-2126396,ESO 539-004,ESO-LV 539-0040,MCG -04-01-026,PGC 001034;;APMBGC position is 10 arcsec northwest of the nucleus.; +NGC0060;G;00:15:58.24;-00:18:12.7;Psc;1.03;0.66;29;15.54;14.86;12.11;11.31;11.24;23.66;Sc;;;;;;;;2MASX J00155824-0018130,MCG +00-01-048,PGC 001058,SDSS J001558.24-001812.6,SDSS J001558.24-001812.7,SDSS J001558.25-001812.6,UGC 00150;;; +NGC0061;GPair;00:16:24.20;-06:19:10.0;Psc;1.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC0061A;G;00:16:24.34;-06:19:18.9;Psc;1.48;1.14;179;15.00;;10.59;9.86;9.52;23.57;S0;;;;;;;;2MASX J00162433-0619186,MCG -01-01-062,PGC 001083;;MCG Dec +5 arcmin in error. The 2MASS source includes part of NGC 0061B.; +NGC0061B;G;00:16:24.07;-06:19:07.9;Psc;1.34;1.04;;15.50;;;;;23.41;S0;;;;;;;;MCG -01-01-063,PGC 001085;;MCG declination +5 arcmin in error.; +NGC0062;G;00:17:05.42;-13:29:13.6;Cet;0.99;0.73;125;14.00;;11.43;10.77;10.56;22.87;SBa;;;;;;;;2MASX J00170541-1329138,IRAS 00145-1345,MCG -02-01-043,PGC 001125;;HOLM 005B is a star.; +NGC0063;G;00:17:45.52;+11:27:01.2;Psc;1.72;1.04;108;12.60;;10.16;9.49;9.26;22.59;E-S0;;;;;;;;2MASX J00174552+1127012,IRAS 00151+1110,MCG +02-01-030,PGC 001160,UGC 00167;;; +NGC0064;G;00:17:30.37;-06:49:28.6;Cet;1.38;0.90;35;13.56;;11.30;10.60;10.29;23.10;SBbc;;;;;;;;2MASX J00173036-0649286,IRAS 00149-0706,MCG -01-01-068,PGC 001149;;; +NGC0065;G;00:18:58.71;-22:52:49.3;Cet;1.02;0.83;168;14.65;;11.73;11.08;10.76;23.46;E-S0;;;;;;;;2MASX J00185872-2252491,ESO 473-010A,ESO-LV 473-2100,MCG -04-02-001,PGC 001229;;; +NGC0066;G;00:19:04.94;-22:56:11.0;Cet;1.24;0.50;35;14.21;;11.36;10.65;10.39;22.68;SBb;;;;;;;;2MASX J00190494-2256111,ESO 473-010,ESO-LV 473-0100,IRAS 00165-2312,MCG -04-02-002,PGC 001236;;; +NGC0067;G;00:18:12.19;+30:03:19.9;And;0.49;0.33;111;;;13.24;12.49;12.24;23.66;;;;;;0067A;;;2MASX J00181219+3003195,PGC 138159;;; +NGC0068;G;00:18:18.49;+30:04:18.3;And;1.29;1.20;45;14.50;;10.69;9.86;9.60;23.72;E-S0;;;;;;;;2MASX J00181851+3004185,MCG +05-01-065,PGC 001187,UGC 00170;;; +NGC0069;G;00:18:20.51;+30:02:23.9;And;0.60;0.43;5;15.70;;12.56;11.97;11.65;23.39;E-S0;;;;;;;;2MASX J00182051+3002235,MCG +05-01-066,PGC 001191;;; +NGC0070;G;00:18:22.54;+30:04:46.5;And;1.69;1.39;3;14.50;;10.47;9.90;9.67;24.07;Sbc;;;;;;1539;;2MASX J00182252+3004465,MCG +05-01-067,PGC 001194,UGC 00174;;; +NGC0071;G;00:18:23.58;+30:03:47.7;And;1.95;1.46;109;14.80;;10.38;9.71;9.54;24.40;E-S0;;;;;;;;2MASX J00182359+3003475,MCG +05-01-068,PGC 001197,UGC 00173;;; +NGC0072;G;00:18:28.37;+30:02:26.5;And;1.16;1.06;85;15.00;;11.40;10.70;10.35;23.61;Sab;;;;;;;;2MASX J00182837+3002265,MCG +05-01-069,PGC 001204,UGC 00176;;; +NGC0072A;G;00:18:34.3;+30:02:11;And;0.38;0.29;155;15.10;;12.44;11.64;11.30;22.43;E;;;;;;;;2MASX J00183435+3002106,MCG +05-01-070,PGC 001208,UGC 00170 NOTES01;;; +NGC0073;G;00:18:39.01;-15:19:20.1;Cet;1.68;1.01;145;13.00;;10.96;10.24;9.90;23.83;SABb;;;;;;;;2MASX J00183897-1519200,MCG -03-01-026,PGC 001211;;; +NGC0074;G;00:18:49.34;+30:03:43.1;And;0.83;0.35;131;16.00;;12.59;11.84;11.69;23.32;Sbc;;;;;;;;2MASX J00184929+3003436,MCG +05-01-071,PGC 001219;;; +NGC0075;G;00:19:26.33;+06:26:57.7;Psc;1.82;1.82;70;14.80;;11.07;10.41;10.11;24.69;S0;;;;;;;;2MASX J00192635+0626573,MCG +01-01-051,PGC 001255,UGC 00182;;; +NGC0076;G;00:19:37.79;+29:56:01.9;And;1.28;1.00;78;14.00;;11.07;10.36;10.06;23.54;E;;;;;;;;2MASX J00193779+2956017,MCG +05-01-072,PGC 001267,UGC 00185;;; +NGC0077;G;00:20:01.65;-22:31:55.6;Cet;0.48;0.44;150;15.67;;12.63;12.21;11.53;23.07;E-S0;;;;;;;;2MASX J00200168-2231553,ESO 473-015,ESO-LV 473-0150,PGC 001290;;; +NGC0078;GPair;00:20:26.60;+00:49:47.0;Psc;1.90;;;;;;;;;;;;;;;;;IRAS 00178+0032;;;Diameter of the group inferred by the author. +NGC0078A;G;00:20:25.79;+00:49:34.8;Psc;1.17;0.65;75;14.50;;11.57;10.93;10.71;23.54;S0-a;;;;;;;;2MASX J00202580+0049350,MCG +00-02-004,PGC 001306,SDSS J002025.78+004934.8,SDSS J002025.78+004934.9,SDSS J002025.79+004934.8,UGC 00193;;; +NGC0078B;G;00:20:27.51;+00:50:00.8;Psc;1.00;0.82;137;14.50;;11.28;10.59;10.25;23.14;S0-a;;;;;;;;2MASX J00202748+0050009,MCG +00-02-005,PGC 001309,SDSS J002027.51+005000.7,SDSS J002027.51+005000.8,UGC 00194;;; +NGC0079;G;00:21:02.85;+22:33:59.7;And;0.79;0.72;140;14.90;;11.29;10.55;10.26;23.50;E;;;;;;;;2MASX J00210283+2233590,MCG +04-02-003,PGC 001340;;; +NGC0080;G;00:21:10.85;+22:21:25.9;And;1.82;1.61;5;13.70;;9.92;9.26;8.92;23.38;E-S0;;;;;;;;2MASX J00211086+2221261,MCG +04-02-004,PGC 001351,UGC 00203;;; +NGC0081;G;00:21:13.27;+22:22:58.4;And;0.41;0.30;88;17.74;;12.87;12.17;11.93;23.25;;;;;;;;;2MASX J00211331+2222581,PGC 001352;;; +NGC0082;*;00:21:17.55;+22:27:37.3;And;;;;;;;;;;;;;;;;;;;;; +NGC0083;G;00:21:22.40;+22:26:01.0;And;1.25;1.10;112;14.30;;10.28;9.57;9.30;23.00;E;;;;;;;;2MASX J00212239+2226011,MCG +04-02-005,PGC 001371,UGC 00206;;; +NGC0084;*;00:21:21.25;+22:37:10.9;And;;;;;;;;;;;;;;;;;;;;; +NGC0085;G;00:21:25.53;+22:30:42.4;And;0.69;0.62;156;14.90;;11.91;11.12;10.94;23.60;S0;;;;;0085A;;;2MASX J00212557+2230421,MCG +04-02-007,PGC 001375;;; +NGC0085B;G;00:21:29.0;+22:30:21;And;1.06;0.34;122;14.90;;12.08;11.35;11.03;23.50;Sbc;;;;;;1546;;2MASX J00212903+2230209,MCG +04-02-008,PGC 001382;;Called 'NGC 0085B' in MCG.; +NGC0086;G;00:21:28.57;+22:33:23.1;And;0.75;0.28;8;14.90;;11.92;11.25;11.00;22.99;S0-a;;;;;;;;2MASX J00212858+2233229,MCG +04-02-009,PGC 001383;;; +NGC0087;G;00:21:14.27;-48:37:41.6;Phe;0.86;0.71;6;14.70;;14.60;13.86;13.53;22.85;IB;;;;;;;;2MASX J00211406-4837482,ESO 194-008,ESO-LV 194-0080,PGC 001357;;; +NGC0088;G;00:21:22.12;-48:38:24.6;Phe;0.85;0.49;146;15.11;;13.25;12.69;12.61;23.22;S0-a;;;;;;;;2MASX J00212213-4838242,ESO 194-010,ESO-LV 194-0100,PGC 001370;;; +NGC0089;G;00:21:24.36;-48:39:55.1;Phe;1.24;0.56;140;14.28;;11.53;10.80;10.54;23.18;S0-a;;;;;;;;2MASX J00212435-4839552,ESO 194-011,ESO-LV 194-0110,PGC 001374;;; +NGC0090;G;00:21:51.40;+22:24:00.0;And;0.98;0.81;120;14.50;;11.75;11.20;10.96;23.14;SABc;;;;;;;;2MASX J00215140+2224001,MCG +04-02-011,PGC 001405,UGC 00208;;NGC 0091 is a star 2 arcmin south of NGC 0090.; +NGC0091;*;00:21:51.72;+22:22:06.1;And;;;;15.20;;13.48;13.12;13.05;;;;;;;;;;UCAC2 39602310,UCAC3 225-1775;;; +NGC0092;G;00:21:31.70;-48:37:29.1;Phe;1.65;0.76;150;13.71;;10.56;9.79;9.38;23.41;Sa;;;;;;;;2MASX J00213171-4837292,ESO 194-012,ESO-LV 194-0120,PGC 001388;;May be related to HIPASS J0021-48.; +NGC0093;G;00:22:03.23;+22:24:29.1;And;1.30;0.73;50;14.70;;10.68;9.93;9.63;23.26;Sab;;;;;;;;2MASX J00220321+2224291,MCG +04-02-012,PGC 001412,UGC 00209;;; +NGC0094;G;00:22:13.53;+22:28:59.0;And;0.51;0.31;20;15.60;;12.26;11.69;11.38;;;;;;;;;;2MASX J00221351+2228592,PGC 001423;;;Diameters and position angle taken from Simbad. +NGC0095;G;00:22:13.54;+10:29:29.7;Psc;1.46;1.08;85;13.40;;10.35;9.71;9.45;22.59;SABc;;;;;;;;2MASX J00221352+1029297,IRAS 00196+1012,MCG +02-02-003,PGC 001426,UGC 00214;;; +NGC0096;G;00:22:17.71;+22:32:46.5;And;0.68;0.64;130;17.00;;11.94;11.30;10.99;23.41;E-S0;;;;;;;;2MASX J00221769+2232462,MCG +04-02-014,PGC 001429;;; +NGC0097;G;00:22:30.00;+29:44:43.3;And;1.32;1.16;25;13.50;;10.46;9.76;9.53;23.02;E;;;;;;;;2MASX J00222998+2944433,MCG +05-02-007,PGC 001442,UGC 00216;;; +NGC0098;G;00:22:49.54;-45:16:08.4;Phe;1.62;1.37;65;13.59;;10.70;10.05;9.76;23.08;SBbc;;;;;;;;2MASX J00224951-4516084,ESO 242-005,ESO-LV 242-0050,PGC 001463;;; +NGC0099;G;00:23:59.39;+15:46:13.5;Psc;1.05;0.88;46;13.99;13.65;12.26;11.66;11.76;22.81;Sc;;;;;;;;2MASX J00235942+1546130,IRAS 00214+1529,MCG +02-02-006,PGC 001523,SDSS J002359.39+154613.5,UGC 00230;;; +NGC0100;G;00:24:02.84;+16:29:11.0;Psc;3.55;0.49;56;14.60;;11.28;10.64;10.56;23.74;Sc;;;;;;;;2MASX J00240283+1629110,MCG +03-02-009,PGC 001525,UGC 00231;;HOLM 009B is a star.; +NGC0101;G;00:23:54.61;-32:32:10.2;Scl;1.93;1.82;80;13.36;;11.33;10.74;10.20;23.48;SABc;;;;;;;;2MASX J00235461-3232103,ESO 350-014,ESO-LV 350-0140,IRAS 00214-3248,MCG -05-02-003,PGC 001518;;; +NGC0102;G;00:24:36.53;-13:57:22.9;Cet;0.94;0.57;126;14.00;;11.62;10.99;10.59;22.93;S0-a;;;;;;;;2MASX J00243651-1357229,MCG -02-02-011,PGC 001542;;; +NGC0103;OCl;00:25:16.40;+61:19:24.5;Cas;2.70;;;10.28;9.80;;;;;;;;;;;;;MWSC 0040;;; +NGC0104;GCl;00:24:05.36;-72:04:53.2;Tuc;31.80;;;5.78;4.09;2.29;1.76;1.54;;;;;;;;;;2MASX J00240535-7204531,C 106,MWSC 0038;47 Tuc Cluster;; +NGC0105;G;00:25:16.78;+12:53:01.9;Psc;0.81;0.65;170;14.10;;11.34;10.64;10.36;22.07;Sab;;;;;;;;IRAS 00226+1236,MCG +02-02-008,PGC 001583;;; +NGC0106;G;00:24:43.75;-05:08:55.5;Psc;0.93;0.71;84;14.46;;11.30;10.61;10.29;22.82;Sc;;;;;;;;2MASX J00244375-0508557,PGC 001551;;; +NGC0107;G;00:25:42.20;-08:16:58.1;Cet;0.78;0.49;179;15.67;;13.09;12.44;12.28;22.88;Sbc;;;;;;;;2MASX J00254218-0816580,MCG -02-02-014,PGC 001606;;; +NGC0108;G;00:25:59.73;+29:12:43.4;And;1.69;1.14;63;13.30;;10.29;9.56;9.28;23.18;S0-a;;;;;;;;2MASX J00255971+2912434,MCG +05-02-012,PGC 001619,UGC 00246;;; +NGC0109;G;00:26:14.64;+21:48:26.3;And;1.05;0.82;83;15.00;;11.32;10.80;10.35;23.45;Sa;;;;;;;;2MASX J00261463+2148266,MCG +04-02-020,PGC 001633,UGC 00251;;; +NGC0110;OCl;00:27:25.01;+71:23:29.5;Cas;3.90;;;;;;;;;;;;;;;;;MWSC 0045;;; +NGC0111;Other;00:26:38.41;-02:37:29.9;Cet;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC0112;G;00:26:48.73;+31:42:11.9;And;1.02;0.49;107;14.50;;11.82;11.14;10.80;22.88;Sb;;;;;;;;2MASX J00264871+3142119,IRAS 00241+3125,MCG +05-02-013,PGC 001654,UGC 00255;;; +NGC0113;G;00:26:54.64;-02:30:03.2;Cet;1.23;1.00;172;13.50;;10.81;10.12;9.86;23.21;E-S0;;;;;;;;2MASX J00265462-0230030,MCG -01-02-016,PGC 001656;;; +NGC0114;G;00:26:58.23;-01:47:10.5;Cet;0.98;0.75;171;15.00;;11.29;10.60;10.32;23.37;S0;;;;;;;;2MASX J00265821-0147100,MCG +00-02-027,PGC 001660,UGC 00259;;; +NGC0115;G;00:26:46.28;-33:40:37.5;Scl;2.09;0.73;122;13.73;;11.83;11.19;11.21;23.22;SBbc;;;;;;;;2MASX J00264627-3340375,ESO 350-017,ESO-LV 350-0170,MCG -06-02-006,PGC 001651;;; +NGC0116;G;00:27:05.23;-07:40:05.7;Cet;1.08;0.53;98;14.54;;11.34;10.64;10.38;23.51;S0-a;;;;;;;;2MASX J00270522-0740059,MCG -01-02-017,PGC 001671;;NGC identification is very uncertain.; +NGC0117;G;00:27:11.07;+01:20:01.4;Cet;1.00;0.46;101;15.50;;11.82;11.11;10.87;24.03;S0-a;;;;;;;;2MASX J00271106+0120014,MCG +00-02-029,PGC 001674;;; +NGC0118;G;00:27:16.22;-01:46:48.5;Cet;0.80;0.58;58;14.90;;11.46;10.76;10.35;23.00;E;;;;;;;;2MASX J00271620-0146487,IRAS 00247-0203,MCG +00-02-032,PGC 001678,UGC 00264;;; +NGC0119;G;00:26:57.61;-56:58:41.0;Phe;1.20;1.12;30;14.14;;10.91;10.19;9.88;23.27;E-S0;;;;;;;;2MASX J00265761-5658408,ESO 150-008,ESO-LV 150-0080,PGC 001659;;; +NGC0120;G;00:27:30.08;-01:30:48.5;Cet;1.51;0.50;73;14.80;;10.81;10.12;9.95;24.09;S0;;;;;;;;2MASX J00273007-0130487,MCG +00-02-033,PGC 001693,UGC 00267;;; +NGC0121;GCl;00:26:48.25;-71:32:08.4;Tuc;3.80;3.10;80;11.20;11.24;;;;;;;;;;;;;2MASX J00264970-7132077,ESO 050-012;;The 2MASS position is 7 arcsec east of the optical core.; +NGC0122;*;00:27:38.33;-01:38:25.7;Cet;;;;;;;;;;;;;;;;;;;;NGC identification is very uncertain.; +NGC0123;*;00:27:39.99;-01:37:39.5;Cet;;;;;;;;;;;;;;;;;;;;NGC identification is very uncertain.; +NGC0124;G;00:27:52.36;-01:48:36.7;Cet;1.26;0.72;168;13.90;;11.55;11.07;10.76;22.59;Sc;;;;;;;;2MASX J00275236-0148364,IRAS 00253-0205,MCG +00-02-038,PGC 001715,SDSS J002752.36-014837.0,UGC 00271;;; +NGC0125;G;00:28:50.19;+02:50:19.9;Psc;1.40;1.22;60;14.20;;10.71;10.01;9.76;22.77;S0-a;;;;;;;;2MASX J00285020+0250200,MCG +00-02-048,PGC 001772,UGC 00286;;; +NGC0126;G;00:29:08.10;+02:48:40.0;Psc;0.71;0.58;111;15.50;;12.16;11.54;11.25;23.45;S0;;;;;;;;2MASX J00290809+0248400,MCG +00-02-049,PGC 001784;;; +NGC0127;G;00:29:12.37;+02:52:21.7;Psc;0.93;0.42;75;13.20;;11.92;11.48;11.14;23.86;S0;;;;;;;;2MASX J00291239+0252215,IRAS 00266+0235,MCG +00-02-050,PGC 001787,UGC 00292 NOTES01;;; +NGC0128;G;00:29:15.06;+02:51:50.6;Psc;3.16;0.87;1;13.20;;9.47;8.83;8.52;23.79;S0;;;;;;;;2MASX J00291506+0251505,MCG +00-02-051,PGC 001791,UGC 00292;;; +NGC0129;OCl;00:29:58.19;+60:12:40.2;Cas;5.40;;;7.33;6.50;;;;;;;;;;;;;MWSC 0053;;; +NGC0130;G;00:29:18.55;+02:52:13.6;Psc;0.72;0.42;44;15.00;;12.22;11.61;11.39;22.81;E-S0;;;;;;;;2MASX J00291854+0252135,MCG +00-02-052,PGC 001794,UGC 00292 NOTES02;;; +NGC0131;G;00:29:38.52;-33:15:35.1;Scl;1.81;0.67;62;13.69;13.22;11.29;10.68;10.49;23.12;SBb;;;;;;;;2MASX J00293851-3315349,ESO 350-021,ESO-LV 350-0210,IRAS 00271-3332,MCG -06-02-010,PGC 001813;;; +NGC0132;G;00:30:10.71;+02:05:36.4;Cet;1.60;1.09;38;13.80;;10.63;10.04;9.64;23.21;SABb;;;;;;;;2MASX J00301071+0205365,IRAS 00276+0149,MCG +00-02-063,PGC 001844,SDSS J003010.67+020536.0,UGC 00301;;; +NGC0133;OCl;00:31:16.96;+63:21:09.4;Cas;2.10;;;;9.40;;;;;;;;;;;;;MWSC 0055;;; +NGC0134;G;00:30:21.97;-33:14:38.5;Scl;8.38;1.79;50;11.14;10.12;7.89;7.14;6.84;23.40;SABb;;;;;;;;2MASX J00302189-3314432,ESO 350-023,ESO-LV 350-0230,IRAS 00278-3331,MCG -06-02-012,PGC 001851;;Extended HIPASS source; +NGC0135;G;00:31:45.94;-13:20:14.9;Cet;0.66;0.35;14;15.01;;11.86;11.15;10.93;23.16;E-S0;;;;;;0026;;2MASX J00314593-1320152,IRAS 00292-1336,PGC 002010;;; +NGC0136;OCl;00:31:30.79;+61:30:33.3;Cas;3.30;;;;;;;;;;;;;;;;;MWSC 0056;;; +NGC0137;G;00:30:58.10;+10:12:30.3;Psc;1.38;1.38;30;14.20;;10.62;9.88;9.64;23.22;S0;;;;;;;;2MASX J00305810+1012304,MCG +02-02-017,PGC 001888,UGC 00309;;; +NGC0138;G;00:30:59.24;+05:09:35.1;Psc;1.25;0.64;175;14.80;;11.09;10.40;10.09;23.64;Sa;;;;;;;;2MASX J00305921+0509350,MCG +01-02-016,PGC 001889,UGC 00308;;; +NGC0139;G;00:31:06.40;+05:04:43.5;Psc;0.77;0.44;0;15.50;;12.30;11.50;11.27;23.27;SBab;;;;;;;;2MASX J00310641+0504434,IRAS 00285+0448,PGC 001900;;; +NGC0140;G;00:31:20.47;+30:47:33.0;And;0.87;0.75;43;14.20;;11.79;11.24;11.05;22.69;SBc;;;;;;;;2MASX J00312048+3047329,IRAS 00287+3031,MCG +05-02-021,PGC 001916,UGC 00311;;; +NGC0141;G;00:31:17.44;+05:10:47.1;Psc;0.86;0.55;165;15.40;;11.61;10.93;10.46;23.64;S0-a;;;;;;;;2MASX J00311739+0510474,IRAS 00287+0454,PGC 001918;;; +NGC0142;G;00:31:08.08;-22:37:07.2;Cet;0.97;0.39;104;14.59;;11.63;10.84;10.55;22.72;SBb;;;;;;;;2MASX J00310808-2237072,ESO 473-021,ESO-LV 473-0210,IRAS 00286-2253,MCG -04-02-014,PGC 001901;;; +NGC0143;G;00:31:15.62;-22:33:35.8;Cet;1.06;0.32;21;15.26;;12.07;11.26;10.97;23.36;SBb;;;;;;;;2MASX J00311562-2233357,ESO 473-022,ESO-LV 473-0220,MCG -04-02-015,PGC 001911;;; +NGC0144;G;00:31:20.67;-22:38:44.6;Cet;0.82;0.78;10;14.42;;11.86;11.15;10.90;22.62;Sc;;;;;;;;2MASX J00312067-2238447,ESO 473-023,ESO-LV 473-0230,MCG -04-02-016,PGC 001917;;; +NGC0145;G;00:31:45.74;-05:09:09.5;Cet;1.76;1.43;116;13.30;;11.20;10.57;10.32;22.97;Sd;;;;;;;;2MASX J00314572-0509095,IRAS 00292-0525,MCG -01-02-027,PGC 001941;;; +NGC0146;OCl;00:33:03.94;+63:18:32.4;Cas;3.60;;;9.59;9.10;;;;;;;;;;;;;MWSC 0059;;; +NGC0147;G;00:33:12.12;+48:30:31.5;Cas;9.40;5.41;26;12.00;9.50;7.90;7.34;7.20;24.29;E;;;;;;;;2MASX J00331212+4830314,C 017,MCG +08-02-005,PGC 002004,UGC 00326;;; +NGC0148;G;00:34:15.50;-31:47:09.6;Scl;1.98;0.71;90;13.11;12.12;9.99;9.30;9.06;23.27;S0;;;;;;;;2MASX J00341549-3147095,ESO 410-020,ESO-LV 410-0200,MCG -05-02-017,PGC 002053;;; +NGC0149;G;00:33:50.26;+30:43:24.3;And;0.91;0.49;153;15.00;;11.60;10.89;10.79;23.55;S0;;;;;;;;2MASX J00335024+3043245,MCG +05-02-024,PGC 002028,UGC 00332;;; +NGC0150;G;00:34:15.48;-27:48:12.9;Scl;3.54;1.60;117;12.04;11.13;9.44;8.75;8.51;22.87;SBb;;;;;;;;2MASX J00341548-2748131,ESO 410-019,ESO-LV 410-0190,IRAS 00317-2804,MCG -05-02-018,PGC 002052,UGCA 007;;; +NGC0151;G;00:34:02.79;-09:42:19.2;Cet;3.74;2.31;76;12.31;11.59;9.55;8.95;8.75;23.51;Sbc;;;;;0153;;;2MASX J00340275-0942194,IRAS 00315-0958,MCG -02-02-054,PGC 002035,SDSS J003402.78-094219.1,SDSS J003402.78-094219.2,SDSS J003402.79-094219.0,SDSS J003402.79-094219.2;;; +NGC0152;OCl;00:32:52.46;-73:07:13.4;Tuc;3.00;3.00;;13.05;12.26;;;;;;;;;;;;;2MASX J00325251-7307135,ESO 028-024;;; +NGC0153;Dup;00:34:02.79;-09:42:19.2;Cet;;;;;;;;;;;;;;;0151;;;;;; +NGC0154;G;00:34:19.47;-12:39:22.7;Cet;1.01;0.90;79;14.00;;11.16;10.50;10.18;23.92;E;;;;;;;;2MASX J00341946-1239224,MCG -02-02-053,PGC 002058;;; +NGC0155;G;00:34:40.08;-10:45:59.4;Cet;1.49;1.29;170;13.00;;10.70;10.01;9.77;23.67;S0;;;;;;;;2MASX J00344011-1045593,MCG -02-02-055,PGC 002076,SDSS J003440.07-104559.4,SDSS J003440.08-104559.4,SDSS J003440.08-104559.5;;; +NGC0156;**;00:34:35.82;-08:20:24.2;Cet;;;;;;;;;;;;;;;;;;;;; +NGC0157;G;00:34:46.76;-08:23:47.2;Cet;3.70;1.90;28;11.00;19.00;8.60;7.92;7.68;22.13;SABb;;;;;;;;2MASX J00344675-0823473,IRAS 00322-0840,MCG -02-02-056,PGC 002081;;Extended HIPASS source; +NGC0158;**;00:35:05.60;-08:20:44.6;Cet;;;;;;;;;;;;;;;;;;;;; +NGC0159;G;00:34:35.53;-55:47:23.9;Phe;1.40;0.57;96;14.86;;11.62;10.87;10.64;24.10;S0-a;;;;;;;;2MASX J00343551-5547236,ESO 150-011,ESO-LV 150-0110,PGC 002073;;; +NGC0160;G;00:36:04.06;+23:57:28.4;And;1.98;0.89;46;13.70;;10.39;9.74;9.35;23.72;S0-a;;;;;;;;2MASX J00360404+2357283,MCG +04-02-033,PGC 002154,UGC 00356;;; +NGC0161;G;00:35:33.94;-02:50:55.3;Cet;1.36;0.72;22;15.00;;10.93;10.24;9.95;23.75;S0;;;;;;;;2MASX J00353394-0250555,MCG -01-02-036,PGC 002131;;; +NGC0162;*;00:36:09.26;+23:57:44.7;And;;;;;;;;;;;;;;;;;;;;; +NGC0163;G;00:35:59.83;-10:07:18.1;Cet;1.43;1.32;75;13.64;12.70;10.70;10.00;9.80;23.33;E;;;;;;;;2MASX J00355984-1007183,MCG -02-02-066,PGC 002149,SDSS J003559.82-100718.1,SDSS J003559.83-100718.1;;; +NGC0164;G;00:36:32.91;+02:44:59.2;Psc;0.53;0.49;70;16.00;;13.16;12.42;12.24;23.32;;;;;;;;;2MASX J00363291+0244591,MCG +00-02-089,PGC 002181;;; +NGC0165;G;00:36:28.92;-10:06:22.2;Cet;1.63;1.06;72;13.88;13.08;11.29;10.35;10.37;23.45;Sbc;;;;;;;;2MASX J00362890-1006223,IRAS 00339-1022,MCG -02-02-069,PGC 002182,SDSS J003628.92-100622.1,SDSS J003628.92-100622.2;;; +NGC0166;G;00:35:48.78;-13:36:38.3;Cet;0.89;0.33;149;15.00;;12.12;11.38;11.17;23.16;Sa;;;;;;;;2MASX J00354879-1336383,MCG -02-02-063,PGC 002143;;; +NGC0167;G;00:35:23.09;-23:22:30.0;Cet;0.97;0.54;171;14.37;;11.83;11.25;11.04;22.57;SBc;;;;;;;;2MASX J00352309-2322300,ESO 473-029,ESO-LV 473-0290,IRAS 00328-2339,MCG -04-02-022,PGC 002122;;; +NGC0168;G;00:36:38.66;-22:35:36.6;Cet;1.31;0.29;27;14.87;;11.68;10.85;10.60;24.08;S0-a;;;;;;;;2MASX J00363863-2235367,ESO 474-004,ESO-LV 474-0040,IRAS 00341-2251,MCG -04-02-026,PGC 002192;;; +NGC0169;G;00:36:51.60;+23:59:27.3;And;1.53;0.66;93;13.70;13.10;10.38;9.61;9.24;22.74;Sab;;;;;;;;2MASX J00365161+2359273,MCG +04-02-035,PGC 002202,UGC 00365;;; +NGC0169A;G;00:36:52.33;+23:59:05.9;And;0.83;0.44;159;14.00;;;;;22.98;S0-a;;;;;;1559;;MCG +04-02-034,PGC 002201;;; +NGC0170;G;00:36:45.82;+01:53:11.3;Cet;0.70;0.51;82;15.40;;12.01;11.31;11.07;23.39;E-S0;;;;;;;;2MASX J00364581+0153111,MCG +00-02-091,PGC 002195;;; +NGC0171;G;00:37:21.53;-19:56:03.3;Cet;2.06;1.29;102;12.95;;10.38;9.57;9.21;22.98;Sab;;;;;0175;;;2MASX J00372152-1956032,ESO 540-006,ESO-LV 540-0060,IRAS 00348-2012,MCG -03-02-024,PGC 002232,SDSS J003721.55-195603.2;;; +NGC0172;G;00:37:13.61;-22:35:13.3;Cet;2.04;0.40;14;14.66;;12.10;11.41;11.15;23.16;SBbc;;;;;;;;2MASX J00371359-2235132,ESO 474-005,ESO-LV 474-0050,IRAS 00348-2251,MCG -04-02-027,PGC 002228;;; +NGC0173;G;00:37:12.47;+01:56:32.1;Cet;2.09;1.54;94;13.30;;10.69;10.26;10.01;23.54;Sc;;;;;;;;2MASX J00371247+0156321,MCG +00-02-092,PGC 002223,UGC 00369;;; +NGC0174;G;00:36:58.94;-29:28:40.2;Scl;1.57;0.69;150;13.82;;10.67;9.97;9.66;23.22;S0-a;;;;;;;;2MASX J00365892-2928403,ESO 411-001,ESO-LV 411-0010,IRAS 00345-2945,MCG -05-02-028,PGC 002206;;; +NGC0175;Dup;00:37:21.53;-19:56:03.3;Cet;;;;;;;;;;;;;;;0171;;;;;; +NGC0176;OCl;00:35:57.87;-73:09:59.0;Tuc;1.20;1.20;;13.06;13.01;;;;;;;;;;;;;ESO 029-002;;In the Small Magellanic Cloud.; +NGC0177;G;00:37:34.34;-22:32:57.3;Cet;2.11;0.50;10;14.14;;11.07;10.32;10.20;23.74;Sab;;;;;;;;2MASX J00373433-2232573,ESO 474-006,ESO-LV 474-0060,MCG -04-02-028,PGC 002241;;; +NGC0178;G;00:39:08.40;-14:10:22.2;Cet;2.11;0.58;4;13.60;;11.69;11.10;10.80;22.28;SBm;;;;;;0039;;2MASX J00390839-1410222,IRAS 00366-1426,MCG -02-02-078,PGC 002349;;; +NGC0179;G;00:37:46.28;-17:50:58.1;Cet;1.12;0.96;111;14.01;;11.15;10.39;10.17;23.26;E;;;;;;;;2MASX J00374629-1750578,ESO 540-007,ESO-LV 540-0070,MCG -03-02-026,PGC 002253;;; +NGC0180;G;00:37:57.70;+08:38:06.7;Psc;2.20;1.48;163;14.30;;10.59;9.84;9.49;24.11;Sc;;;;;;;;2MASX J00375769+0838068,IRAS 00353+0821,MCG +01-02-039,PGC 002268,SDSS J003757.70+083806.5,UGC 00380;;; +NGC0181;G;00:38:23.21;+29:28:21.3;And;0.86;0.25;152;15.40;;12.12;11.37;11.01;23.80;S0-a;;;;;;;;2MASX J00382319+2928214,MCG +05-02-032,PGC 002287;;; +NGC0182;G;00:38:12.38;+02:43:42.8;Psc;1.86;1.30;78;13.80;;10.48;9.77;9.56;23.33;SABa;;;;;;;;2MASX J00381239+0243428,MCG +00-02-095,PGC 002279,SDSS J003812.38+024342.5,UGC 00382;;; +NGC0183;G;00:38:29.39;+29:30:40.4;And;1.02;0.75;129;13.80;;10.62;9.94;9.73;22.66;E;;;;;;;;2MASX J00382939+2930404,MCG +05-02-035,PGC 002298,UGC 00387;;; +NGC0184;G;00:38:35.78;+29:26:51.4;And;0.73;0.27;8;15.50;;12.09;11.41;11.12;23.11;Sab;;;;;;;;2MASX J00383575+2926514,PGC 002309;;; +NGC0185;G;00:38:57.97;+48:20:14.6;Cas;12.94;10.76;38;15.71;9.20;7.32;6.70;6.56;24.58;E;;;;;;;;2MASX J00385796+4820145,C 018,IRAS 00362+4803,MCG +08-02-010,PGC 002329,UGC 00396;;; +NGC0186;G;00:38:25.30;+03:09:59.2;Psc;1.39;0.83;25;14.80;;10.79;10.02;9.76;24.03;S0-a;;;;;;;;2MASX J00382530+0309592,MCG +00-02-098,PGC 002291,UGC 00390;;; +NGC0187;G;00:39:30.41;-14:39:22.7;Cet;1.53;0.49;149;13.00;;11.30;10.69;10.38;22.82;SBc;;;;;;;;2MASX J00393041-1439225,IRAS 00369-1455,MCG -03-02-034,PGC 002380;;; +NGC0188;OCl;00:47:27.53;+85:16:10.7;Cep;17.70;;;8.91;8.10;;;;;;;;;;;;;C 001,MWSC 0074;;; +NGC0189;OCl;00:39:35.70;+61:05:40.1;Cas;2.70;;;9.07;8.80;;;;;;;;;;;;;MWSC 0062;;; +NGC0190;GPair;00:38:54.70;+07:03:35.0;Psc;1.10;;;;;;;;;;;;;;;;;UGC 00397;;;Diameter of the group inferred by the author. +NGC0190 NED01;G;00:38:54.68;+07:03:45.7;Psc;0.93;0.76;175;15.08;;10.97;10.23;9.24;23.39;Sab;;;;;0190N;;;2MASX J00385467+0703458,MCG +01-02-041,PGC 002324,UGC 00397 NOTES01;;; +NGC0190 NED02;G;00:38:54.73;+07:03:24.2;Psc;0.72;0.71;;15.99;;;;;23.87;E;;;;;0190S;;;MCG +01-02-042,PGC 002325,UGC 00397 NOTES02;;; +NGC0191;G;00:38:59.44;-09:00:09.4;Cet;1.00;0.71;100;12.00;;10.54;9.77;9.57;22.64;Sc;;;;;;;;2MASX J00385944-0900099,MCG -02-02-077,PGC 002331,SDSS J003859.43-090009.3;;; +NGC0191A;G;00:39:00.24;-09:00:52.5;Cet;0.87;0.30;147;15.00;;;;;23.10;S0;;;;;;1563;;MCG -02-02-076,PGC 002332,SDSS J003900.23-090052.4,SDSS J003900.24-090052.4,SDSS J003900.24-090052.5;;; +NGC0192;G;00:39:13.43;+00:51:51.6;Cet;2.06;0.82;165;13.90;;10.28;9.53;9.25;23.33;Sa;;;;;;;;2MASX J00391339+0051508,IRAS 00366+0035,MCG +00-02-104,PGC 002352,SDSS J003913.40+005150.7,SDSS J003913.41+005150.9,SDSS J003913.75+005142.5,UGC 00401;;; +NGC0193;G;00:39:18.59;+03:19:52.0;Psc;2.07;1.45;55;14.30;;10.06;9.38;9.21;23.66;E-S0;;;;;;;;2MASX J00391857+0319528,MCG +00-02-103,PGC 002359,UGC 00408;;; +NGC0194;G;00:39:18.42;+03:02:14.8;Psc;1.73;1.50;42;13.90;;10.18;9.45;9.21;23.18;E;;;;;;;;2MASX J00391842+0302148,MCG +00-02-105,PGC 002362,UGC 00407;;; +NGC0195;G;00:39:35.79;-09:11:40.3;Cet;1.22;0.74;68;14.00;13.45;11.41;10.70;10.36;23.16;Sa;;;;;;;;2MASX J00393578-0911400,IRAS 00370-0928,MCG -02-02-079,PGC 002391,SDSS J003935.78-091140.2,SDSS J003935.79-091140.3;;; +NGC0196;G;00:39:17.84;+00:54:45.9;Cet;1.27;0.92;10;14.20;;10.91;10.25;10.03;23.68;S0;;;;;;;;2MASX J00391786+0054458,MCG +00-02-107,PGC 002357,SDSS J003917.83+005445.9,UGC 00405;;; +NGC0197;G;00:39:18.79;+00:53:30.9;Cet;0.94;0.72;35;14.85;;12.76;12.28;11.71;22.77;S0-a;;;;;;;;2MASX J00391879+0053308,MCG +00-02-110,PGC 002365,SDSS J003918.79+005330.9,SDSS J003918.79+005331.0,SDSS J003918.79+005331.1,UGC 00406;;; +NGC0198;G;00:39:22.98;+02:47:52.5;Psc;1.28;1.17;35;14.10;;10.69;10.05;9.72;22.31;Sc;;;;;;;;2MASX J00392298+0247525,IRAS 00367+0231,MCG +00-02-109,PGC 002371,UGC 00414;;; +NGC0199;G;00:39:33.17;+03:08:18.7;Psc;1.14;0.69;160;15.00;;11.36;10.73;10.44;23.64;S0;;;;;;;;2MASX J00393318+0308185,MCG +00-02-111,PGC 002382,UGC 00415;;; +NGC0200;G;00:39:34.88;+02:53:14.8;Psc;1.80;1.02;163;14.00;;10.73;9.97;9.72;23.07;Sbc;;;;;;;;2MASX J00393486+0253145,IRAS 00370+0236,MCG +00-02-112,PGC 002387,UGC 00420;;; +NGC0201;G;00:39:34.82;+00:51:35.6;Cet;1.71;1.32;146;14.70;;11.42;10.16;9.98;23.34;Sc;;;;;;;;2MASX J00393485+0051355,IRAS 00370+0035,MCG +00-02-115,PGC 002388,SDSS J003934.82+005135.6,SDSS J003934.82+005135.8,SDSS J003934.83+005135.8,SDSS J003934.83+005135.9,UGC 00419;;; +NGC0202;G;00:39:39.85;+03:32:10.6;Psc;0.96;0.33;153;15.50;;11.94;11.18;11.01;23.99;S0-a;;;;;;;;2MASX J00393985+0332105,MCG +00-02-113,PGC 002394,UGC 00421;;; +NGC0203;G;00:39:39.53;+03:26:34.4;Psc;0.98;0.27;85;15.00;;11.72;11.08;10.82;23.52;S0;;;;;0211;;;2MASX J00393952+0326345,MCG +00-02-114,PGC 002393;;; +NGC0204;G;00:39:44.27;+03:17:58.5;Psc;1.40;1.09;22;14.60;;10.67;10.00;9.73;23.34;S0;;;;;;;;2MASX J00394426+0317585,MCG +00-02-116,PGC 002397,UGC 00423;;; +NGC0205;G;00:40:22.08;+41:41:07.1;And;16.22;9.59;170;8.92;8.07;6.45;5.87;5.59;23.78;E;;;;110;;;;2MASX J00402207+4141070,IRAS 00376+4124,MCG +07-02-014,PGC 002429,UGC 00426;;; +NGC0206;*Ass;00:40:31.30;+40:44:21.4;And;;;;;;;;;;;;;;;;;;;;; +NGC0207;G;00:39:40.71;-14:14:13.5;Cet;0.91;0.49;84;15.10;;12.19;11.56;11.27;22.97;Sa;;;;;;;;2MASX J00394071-1414134,IRAS 00371-1430,MCG -03-02-035,PGC 002395;;; +NGC0208;G;00:40:17.58;+02:45:23.4;Psc;0.77;0.65;137;15.50;;12.36;11.68;11.55;23.46;Sa;;;;;;;;2MASX J00401757+0245235,MCG +00-02-118,PGC 002420;;; +NGC0209;G;00:39:03.60;-18:36:29.8;Cet;1.14;0.99;6;13.91;;11.19;10.51;10.27;23.20;E-S0;;;;;;;;2MASX J00390357-1836299,ESO 540-008,ESO-LV 540-0080,MCG -03-02-031,PGC 002338;;; +NGC0210;G;00:40:35.02;-13:52:22.1;Cet;4.98;3.02;163;11.80;;9.14;8.56;8.39;23.58;SABb;;;;;;;;2MASX J00403502-1352220,IRAS 00380-1408,MCG -02-02-081,PGC 002437;;; +NGC0211;Dup;00:39:39.53;+03:26:34.4;Psc;;;;;;;;;;;;;;;0203;;;;;; +NGC0212;G;00:40:13.33;-56:09:10.9;Phe;1.91;1.42;122;14.43;;11.10;10.29;10.09;24.47;E-S0;;;;;;;;2MASX J00401332-5609108,ESO 150-018,ESO-LV 150-0180,PGC 002417;;; +NGC0213;G;00:41:10.00;+16:28:09.8;Psc;1.44;1.11;100;14.23;;10.85;10.17;9.91;23.99;Sa;;;;;;;;2MASX J00411000+1628101,MCG +03-02-023,PGC 002469,UGC 00436;;; +NGC0214;G;00:41:28.03;+25:29:58.0;And;1.87;1.30;42;13.00;;10.16;9.58;9.21;22.74;SABc;;;;;;;;2MASX J00412801+2529576,IRAS 00387+2513,MCG +04-02-044,PGC 002479,SDSS J004128.03+252957.7,UGC 00438;;; +NGC0215;G;00:40:48.87;-56:12:50.6;Phe;1.15;0.92;118;14.08;;10.84;10.17;9.84;23.11;E-S0;;;;;;;;2MASX J00404885-5612504,ESO 150-019,ESO-LV 150-0190,PGC 002451;;; +NGC0216;G;00:41:27.15;-21:02:43.6;Cet;1.35;0.63;27;13.52;13.12;11.41;10.83;10.56;23.05;S0;;;;;;;;2MASX J00412688-2102529,ESO 540-015,ESO-LV 540-0150,MCG -04-02-035,PGC 002478;;; +NGC0217;G;00:41:33.89;-10:01:17.1;Cet;3.20;0.69;113;13.00;12.10;9.85;8.74;8.70;24.04;SBa;;;;;;;;2MASX J00413390-1001169,MCG -02-02-085,PGC 002482,SDSS J004133.89-100117.1;;; +NGC0218;G;00:46:31.99;+36:19:32.2;And;1.32;0.71;46;13.60;;11.19;10.47;10.15;22.62;Sc;;;;;;;;2MASX J00463200+3619318,IRAS 00438+3603,MCG +06-02-016,PGC 002720,UGC 00480;;; +NGC0219;G;00:42:11.31;+00:54:16.4;Cet;0.59;0.46;177;15.60;;12.09;11.39;11.17;23.11;E;;;;;;;;2MASX J00421129+0054161,MCG +00-02-128,PGC 002522,SDSS J004211.31+005416.3,SDSS J004211.31+005416.4;;; +NGC0220;OCl;00:40:29.89;-73:24:14.3;Tuc;1.20;1.20;;14.61;14.39;;;;;;;;;;;;;ESO 029-003;;In the Small Magellanic Cloud.; +NGC0221;G;00:42:41.83;+40:51:55.0;And;7.74;4.86;170;9.03;8.08;6.28;5.37;5.10;22.17;E;;;;032;;;;2MASX J00424182+4051546,IRAS 00399+4035,MCG +07-02-015,PGC 002555,UGC 00452;;; +NGC0222;OCl;00:40:43.71;-73:23:08.5;Tuc;1.20;1.20;;12.84;12.64;;;;;;;;;;;;;ESO 029-004;;In the Small Magellanic Cloud.; +NGC0223;G;00:42:15.88;+00:50:43.8;Cet;1.18;0.78;63;14.22;;11.29;10.68;10.36;23.45;S0-a;;;;;;0044;;2MASX J00421585+0050432,MCG +00-02-129,PGC 002527,SDSS J004215.86+005043.6,SDSS J004215.87+005043.7,UGC 00450;;; +NGC0224;G;00:42:44.35;+41:16:08.6;And;177.83;69.66;35;4.36;3.44;2.09;1.28;0.98;23.63;Sb;;;;031;;;;2MASX J00424433+4116074,IRAS 00400+4059,MCG +07-02-016,PGC 002557,UGC 00454;Andromeda Galaxy;; +NGC0225;OCl;00:43:36.38;+61:46:01.0;Cas;4.20;;;7.43;7.00;;;;;;;;;;;;;MWSC 0068;;; +NGC0226;G;00:42:54.04;+32:34:51.5;And;0.79;0.78;130;14.40;;12.03;11.37;11.11;22.73;E-S0;;;;;;;;2MASX J00425403+3234516,IRAS 00402+3218,PGC 002572,UGC 00459;;; +NGC0227;G;00:42:36.83;-01:31:43.6;Cet;1.91;1.44;156;13.70;;10.07;9.38;9.09;23.38;E;;;;;;;;2MASX J00423684-0131436,MCG +00-02-135,PGC 002547,UGC 00456;;; +NGC0228;G;00:42:54.51;+23:30:11.0;And;0.89;0.81;145;14.90;;11.55;10.90;10.61;23.28;Sab;;;;;;;;2MASX J00425452+2330108,MCG +04-02-048,PGC 002563,UGC 00458;;; +NGC0229;G;00:43:04.64;+23:30:32.8;And;1.08;0.48;98;14.70;;11.59;10.93;10.73;23.67;S0;;;;;;;;2MASX J00430463+2330328,MCG +04-02-049,PGC 002577;;; +NGC0230;G;00:42:27.17;-23:37:43.7;Cet;1.30;0.28;44;15.62;;12.42;11.69;11.26;24.15;Sa;;;;;;;;2MASX J00422719-2337436,ESO 474-014,ESO-LV 474-0140,IRAS 00399-2354,MCG -04-02-037,PGC 002539;;; +NGC0231;OCl;00:41:06.43;-73:21:08.7;Tuc;1.80;1.80;;13.14;12.87;;;;;;;;;;;;;ESO 029-005;;In the Small Magellanic Cloud.; +NGC0232;G;00:42:45.82;-23:33:40.9;Cet;0.98;0.70;17;14.43;;11.04;10.26;9.87;22.96;SBa;;;;;0232W;;;2MASX J00424581-2333406,ESO 474-015,ESO-LV 474-0150,IRAS 00402-2350,MCG -04-02-040,PGC 002559;;; +NGC0233;G;00:43:36.56;+30:35:13.2;And;1.25;1.11;120;13.80;;10.57;9.82;9.62;23.25;E;;;;;;;;2MASX J00433654+3035132,MCG +05-02-041,PGC 002604,UGC 00464;;; +NGC0234;G;00:43:32.39;+14:20:33.2;Psc;1.57;1.22;75;13.50;;10.42;9.65;9.41;23.04;SABc;;;;;;;;2MASX J00433238+1420334,HD ,IRAS 00409+1404,MCG +02-02-028,PGC 002600,SDSS J004332.39+142033.2,SDSS J004332.39+142033.3,UGC 00463;;; +NGC0235;GPair;00:42:53.20;-23:32:36.0;Cet;2.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC0235A;G;00:42:52.81;-23:32:27.7;Cet;1.38;0.62;120;14.24;;10.58;9.98;10.09;23.48;S0;;;;;0232E;;;2MASX J00425279-2332276,ESO 474-016,ESO-LV 474-0160,MCG -04-02-041,PGC 002569;;; +NGC0235B;G;00:42:53.60;-23:32:44.0;Cet;1.29;1.29;;13.97;;;;;23.30;E;;;;;;;;ESO 474-017,ESO-LV 474-0170,MCG -04-02-042,PGC 002568,PGC 002570;;; +NGC0236;G;00:43:27.54;+02:57:29.5;Psc;1.15;1.03;55;14.50;;11.77;11.25;10.77;23.35;SABc;;;;;;;;2MASX J00432754+0257295,IRAS 00409+0241,MCG +00-03-001,PGC 002596,UGC 00462;;; +NGC0237;G;00:43:27.84;-00:07:29.7;Cet;1.30;0.80;174;13.65;13.06;11.19;10.57;10.26;22.66;SABc;;;;;;;;2MASX J00432788-0007295,IRAS 00408-0023,MCG +00-02-136,PGC 002597,SDSS J004327.77-000730.4,SDSS J004327.80-000741.1,SDSS J004327.84-000729.7,UGC 00461;;; +NGC0238;G;00:43:25.75;-50:10:58.2;Phe;2.02;1.60;100;13.28;;10.80;10.10;9.81;23.24;SBb;;;;;;;;2MASX J00432575-5010580,ESO 194-031,ESO-LV 194-0310,PGC 002595;;; +NGC0239;G;00:44:37.51;-03:45:33.3;Cet;0.94;0.37;10;14.00;;11.54;10.90;10.53;22.31;Sab;;;;;;;;2MASX J00443751-0345332,IRAS 00420-0401,MCG -01-03-007,PGC 002642;;; +NGC0240;G;00:45:01.93;+06:06:48.1;Psc;1.35;1.28;105;14.80;;10.94;10.21;9.99;24.10;S0-a;;;;;;;;2MASX J00450192+0606482,MCG +01-03-001,PGC 002653,UGC 00473;;; +NGC0241;OCl;00:43:31.53;-73:26:25.7;Tuc;0.95;0.95;;;;;;;;;;;;;;;;;;In the Small Magellanic Cloud.; +NGC0242;OCl;00:43:33.78;-73:26:46.7;Tuc;0.75;0.75;;12.10;;;;;;;;;;;;;;;;In the Small Magellanic Cloud.; +NGC0243;G;00:46:00.87;+29:57:34.2;And;0.92;0.51;151;14.60;;11.38;10.65;10.41;23.26;S0;;;;;;;;2MASX J00460086+2957340,MCG +05-02-043,PGC 002687;;; +NGC0244;G;00:45:46.43;-15:35:48.8;Cet;1.04;1.04;25;14.10;;11.79;11.25;11.04;22.63;S0;;;;;;;;2MASX J00454643-1535487,MCG -03-03-003,PGC 002675,UGCA 010;;MCG notes this galaxy as possibly interacting.; +NGC0245;G;00:46:05.39;-01:43:24.2;Cet;1.20;1.12;135;13.70;;10.70;9.98;9.66;22.00;Sb;;;;;;;;2MASX J00460539-0143242,IRAS 00435-0159,MCG +00-03-005,PGC 002691,UGC 00476;;; +NGC0246;PN;00:47:03.36;-11:52:19.0;Cet;4.08;;;8.00;10.90;;;;;;10.41;11.60;11.96;;;;BD -12 0134,HIP 003678,UCAC2 27592055;C 056,PN G118.8-74.7;;; +NGC0247;G;00:47:08.55;-20:45:37.4;Cet;19.68;5.55;167;9.61;9.10;8.08;7.67;7.43;23.79;SABc;;;;;;;;2MASX J00470855-2045374,C 062,ESO 540-022,ESO-LV 540-0220,MCG -04-03-005,PGC 002758,UGCA 011;;; +NGC0247A;G;00:47:28.14;-20:23:51.5;Cet;0.52;0.25;75;17.22;;;;;24.56;;;;;;;;;PGC 842319;;Position in 1989H&RHI.C...0000H and in 1975A&A....43..297B is incorrect.; +NGC0247B;G;00:47:35.15;-20:25:43.3;Cet;1.05;0.42;24;14.46;;11.93;11.43;11.21;22.61;SBb;;;;;;;;2MASX J00473516-2025432,ESO 540-023,ESO-LV 540-0230,IRAS 00451-2041,MCG -04-03-010,PGC 002791;;Position in 1989H&RHI.C...0000H and in 1975A&A....43..297B is incorrect.; +NGC0247C;GPair;00:47:37.71;-20:27:10.1;Cet;0.55;0.20;39;16.39;;;;;24.25;Sb;;;;;;;;MCG -04-03-012,PGC002798 ;;Position in 1989H&RHI.C...0000H and in 1975A&A....43..297B is incorrect.; +NGC0247D;G;00:47:36.99;-20:29:09.6;Cet;0.61;0.25;64;15.70;;;;;22.85;SBbc;;;;;;;;ESO 540-024,ESO-LV 540-0240,MCG -04-03-011,PGC 002794;;Position in 1989H&RHI.C...0000H and in 1975A&A....43..297B is incorrect.; +NGC0248;Cl+N;00:45:24.04;-73:22:47.3;Tuc;1.40;1.10;110;;;;;;;;;;;;;;;;;In the Small Magellanic Cloud.; +NGC0249;HII;00:45:32.86;-73:04:48.3;Tuc;1.10;0.70;0;13.80;;;;;;;;;;;;;;ESO 029-009;;Within boundaries of SMC.;B-Mag taken from LEDA +NGC0250;G;00:47:16.01;+07:54:36.1;Psc;1.28;0.68;156;14.90;;11.73;10.88;10.76;24.01;S0-a;;;;;;;;2MASX J00471599+0754357,IRAS 00446+0738,MCG +01-03-002,PGC 002765,UGC 00487;;; +NGC0251;G;00:47:54.03;+19:35:48.6;Psc;1.73;1.02;99;14.60;;10.70;10.05;9.82;23.88;Sc;;;;;;;;2MASX J00475403+1935485,IRAS 00452+1919,MCG +03-03-003,PGC 002806,UGC 00490;;; +NGC0252;G;00:48:01.50;+27:37:25.1;And;1.62;1.16;82;13.40;12.49;10.00;9.28;9.04;23.11;S0-a;;;;;;;;2MASX J00480148+2737257,MCG +04-03-004,PGC 002819,SDSS J004801.50+273726.2,UGC 00491;;HOLM 023A,E are stars.; +NGC0253;G;00:47:33.12;-25:17:17.6;Scl;26.79;4.58;53;8.03;13.97;4.81;4.09;3.77;22.42;SABc;;;;;;;;2MASX J00473313-2517196,C 065,ESO 474-029,ESO-LV 474-0290,IRAS 00450-2533,MCG -04-03-009,PGC 002789,UGCA 013;Sculptor Filament,Silver Coin;Extended HIPASS source; +NGC0254;G;00:47:27.61;-31:25:18.3;Scl;2.77;1.80;133;12.62;11.82;9.61;8.98;8.73;23.50;S0-a;;;;;;;;2MASX J00472759-3125181,ESO 411-015,ESO-LV 411-0150,MCG -05-03-005,PGC 002778;;The APMBGC position is 17 arcsec east-southeast of the nucleus.; +NGC0255;G;00:47:47.31;-11:28:07.3;Cet;2.04;1.85;7;12.50;;10.65;9.94;9.67;22.61;Sbc;;;;;;;;2MASX J00474730-1128073,IRAS 00452-1144,MCG -02-03-017,PGC 002802;;Confused HIPASS source; +NGC0256;OCl;00:45:53.33;-73:30:24.6;Tuc;0.90;0.90;;12.75;12.50;;;;;;;;;;;;;ESO 029-011;;In the Small Magellanic Cloud.; +NGC0257;G;00:48:01.51;+08:17:49.5;Psc;1.83;1.32;99;13.70;;10.51;9.80;9.51;23.08;Sc;;;;;;;;2MASX J00480150+0817494,IRAS 00454+0801,MCG +01-03-003,PGC 002818,UGC 00493;;; +NGC0258;G;00:48:12.79;+27:39:25.9;And;0.51;0.42;115;15.00;;12.74;12.12;11.93;22.36;Sbc;;;;;;;;2MASX J00481277+2739257,MCG +04-03-005,PGC 002829;;; +NGC0259;G;00:48:03.29;-02:46:31.2;Cet;2.86;1.09;140;13.40;;10.24;9.49;9.20;23.98;Sbc;;;;;;;;2MASX J00480328-0246310,IRAS 00455-0302,MCG -01-03-015,PGC 002820;;HOLM 022B is a star.; +NGC0260;G;00:48:34.65;+27:41:32.8;And;0.76;0.68;34;14.30;;12.51;12.13;11.47;22.58;Sc;;;;;;;;2MASX J00483464+2741329,IRAS 00458+2725,MCG +04-03-006,PGC 002844,UGC 00497;;; +NGC0261;Neb;00:46:27.91;-73:06:13.1;Tuc;1.30;1.10;110;13.00;;;;;;;;;;;;;;ESO 029-012,IRAS 00447-7322;;In the Small Magellanic Cloud.;B-Mag taken from LEDA +NGC0262;G;00:48:47.14;+31:57:25.1;And;1.17;0.62;40;13.90;13.06;11.24;10.55;10.10;23.26;S0-a;;;;;;;;2MASX J00484711+3157249,IRAS 00461+3141,MCG +05-03-008,PGC 002855,UGC 00499;;; +NGC0263;G;00:48:48.47;-13:06:26.6;Cet;0.80;0.40;48;14.00;;12.31;11.69;11.60;22.82;Sbc;;;;;;;;2MASX J00484847-1306266,MCG -02-03-021,PGC 002856;;; +NGC0264;G;00:48:20.94;-38:14:03.7;Scl;1.26;0.47;111;14.42;;11.29;10.63;10.44;23.68;S0;;;;;;;;2MASX J00482094-3814038,ESO 295-006,ESO-LV 295-0060,MCG -07-02-016,PGC 002831;;; +NGC0265;OCl;00:47:10.16;-73:28:37.8;Tuc;1.20;1.20;;12.52;12.17;;;;;;;;;;;;;ESO 029-014;;In the Small Magellanic Cloud.; +NGC0266;G;00:49:47.80;+32:16:39.8;Psc;2.92;2.83;95;12.54;11.63;9.64;8.96;8.67;23.68;Sab;;;;;;;;2MASX J00494779+3216398,IRAS 00471+3200,MCG +05-03-009,PGC 002901,SDSS J004947.80+321639.8,UGC 00508;;; +NGC0267;OCl;00:48:02.90;-73:16:26.5;Tuc;2.00;1.70;170;;;;;;;;;;;;;;;ESO 029-015;;; +NGC0268;G;00:50:09.56;-05:11:37.4;Cet;1.42;0.93;93;13.60;;11.38;10.80;10.37;22.70;Sbc;;;;;;;;2MASX J00500956-0511376,IRAS 00476-0527,MCG -01-03-017,PGC 002927;;; +NGC0269;OCl;00:48:22.03;-73:31:53.5;Tuc;1.20;1.20;;12.98;12.59;;;;;;;;;;;;;ESO 029-016;;; +NGC0270;G;00:50:32.52;-08:39:05.9;Cet;1.77;1.24;29;13.00;;10.56;9.88;9.59;23.75;S0-a;;;;;;;;2MASX J00503252-0839057,MCG -02-03-027,PGC 002938;;; +NGC0271;G;00:50:41.86;-01:54:36.9;Cet;2.38;1.28;131;13.20;;9.74;9.07;8.76;23.40;Sab;;;;;;;;2MASX J00504184-0154367,MCG +00-03-012,PGC 002949,UGC 00519;;; +NGC0272;OCl;00:51:25.16;+35:49:18.3;And;;;;;;;;;;;;;;;;;;;;; +NGC0273;G;00:50:48.45;-06:53:08.5;Cet;1.96;0.54;105;13.00;;10.68;9.97;9.73;23.98;S0;;;;;;;;2MASX J00504843-0653087,MCG -01-03-019,PGC 002959;;; +NGC0274;G;00:51:01.86;-07:03:25.0;Cet;1.27;1.08;158;13.00;;10.18;9.05;9.19;22.67;E-S0;;;;;;;;2MASX J00510187-0703247,MCG -01-03-021,PGC 002980;;; +NGC0275;G;00:51:04.20;-07:04:00.0;Cet;1.75;1.39;79;12.51;;;;;22.57;SBc;;;;;;;;MCG -01-03-022,PGC 002984;;; +NGC0276;G;00:52:06.57;-22:40:48.5;Cet;1.10;0.36;88;15.75;;12.41;11.59;11.21;23.94;SABb;;;;;;1591;;2MASX J00520656-2240486,ESO 474-034,ESO-LV 474-0340,IRAS 00496-2257,MCG -04-03-021,PGC 003054;;; +NGC0277;G;00:51:17.23;-08:35:48.6;Cet;1.34;1.11;91;13.00;;11.10;10.44;10.26;23.75;E-S0;;;;;;;;2MASX J00511725-0835485,MCG -02-03-028,PGC 002995;;; +NGC0278;G;00:52:04.31;+47:33:01.8;Cas;2.36;2.30;30;10.50;;8.74;8.10;7.82;22.08;SABb;;;;;;;;2MASX J00520430+4733019,IRAS 00492+4716,MCG +08-02-016,PGC 003051,UGC 00528;;; +NGC0279;G;00:52:08.95;-02:13:06.4;Cet;1.41;1.06;167;14.00;;10.53;9.82;9.58;23.43;S0-a;;;;;;;;2MASX J00520893-0213064,IRAS 00495-0229,MCG +00-03-019a,PGC 003055,UGC 00532;;; +NGC0280;G;00:52:30.26;+24:21:02.1;Psc;1.00;0.66;89;14.60;;11.26;10.58;10.41;23.05;SABb;;;;;;;;2MASX J00523026+2421022,IRAS 00498+2404,MCG +04-03-013,PGC 003076,UGC 00534;;The UZC position includes the superposed companion UGC 00534 NOTES01.; +NGC0281;HII;00:52:59.35;+56:37:18.8;Cas;35.00;30.00;;;;;;;;;;;;;;0011;;LBN 616;;; +NGC0282;G;00:52:42.15;+30:38:20.6;Psc;1.25;0.97;50;14.70;;11.11;10.47;10.18;23.86;E;;;;;;;;2MASX J00524213+3038208,MCG +05-03-015,PGC 003090;;; +NGC0283;G;00:53:13.21;-13:09:50.0;Cet;1.14;0.62;0;14.00;;11.94;11.14;11.00;23.69;Sc;;;;;;;;2MASX J00531321-1309502,IRAS 00507-1326,MCG -02-03-031,PGC 003124;;; +NGC0284;G;00:53:24.27;-13:09:31.9;Cet;0.62;0.55;142;15.52;;12.25;11.57;11.17;23.60;E;;;;;;;;2MASX J00532423-1309321,MCG -02-03-032,PGC 003131;;; +NGC0285;G;00:53:29.89;-13:09:38.6;Cet;0.76;0.65;36;14.90;;11.77;11.07;10.73;23.85;E-S0;;;;;;;;2MASX J00532985-1309381,MCG -02-03-033,PGC 003141;;; +NGC0286;G;00:53:30.38;-13:06:46.0;Cet;0.88;0.42;179;14.00;;11.96;11.32;11.02;23.73;S0;;;;;;;;2MASX J00533032-1306461,MCG -02-03-034,PGC 003142;;; +NGC0287;G;00:53:28.29;+32:28:56.3;Psc;0.83;0.64;16;14.80;;11.48;10.83;10.48;23.13;S0-a;;;;;;;;2MASX J00532830+3228561,PGC 003145;;; +NGC0288;GCl;00:52:47.45;-26:35:23.6;Scl;9.60;;;10.00;8.13;;;;;;;;;;;;;MWSC 0084;;; +NGC0289;G;00:52:42.36;-31:12:21.0;Scl;3.36;2.51;129;11.36;13.44;8.86;8.30;8.00;22.84;SBbc;;;;;;;;2MASX J00524236-3112209,ESO 411-025,ESO-LV 411-0250,IRAS 00502-3128,MCG -05-03-010,PGC 003089;;Extended HIPASS source; +NGC0290;OCl;00:51:14.18;-73:09:41.5;Tuc;1.10;1.10;;12.10;11.71;;;;;;;;;;;;;ESO 029-019;;; +NGC0291;G;00:53:29.92;-08:46:04.1;Cet;0.98;0.53;55;14.00;;11.86;11.06;10.59;23.20;SBa;;;;;;;;2MASX J00532993-0846034,IRAS 00510-0901,MCG -02-03-035,PGC 003140,SDSS J005329.91-084604.0,SDSS J005329.92-084604.0,SDSS J005329.92-084604.1;;; +NGC0292;G;00:52:44.78;-72:49:43.0;Tuc;299.92;179.89;45;2.79;2.20;;;;23.42;SBm;;;;;;;;ESO 029-021,PGC 003085;Small Magellanic Cloud;; +NGC0293;G;00:54:15.96;-07:14:07.7;Cet;1.12;0.63;15;14.00;;12.17;11.50;11.21;23.57;Sb;;;;;;;;2MASX J00541594-0714079,IRAS 00517-0730,MCG -01-03-030,PGC 003195;;; +NGC0294;OCl;00:53:04.71;-73:22:49.3;Tuc;1.70;1.70;;12.67;12.24;;;;;;;;;;;;;ESO 029-022;;In the Small Magellanic Cloud.; +NGC0296;G;00:55:07.51;+31:32:32.2;Psc;2.23;0.88;164;13.50;;10.23;9.52;9.14;22.92;Sb;;;;;;;;2MASX J00550752+3132322,IRAS 00523+3116,MCG +05-03-024,PGC 003260,UGC 00562;;Misidentified as NGC 0295 in MCG, CGCG, and UGC.; +NGC0297;G;00:54:58.94;-07:20:58.8;Cet;0.35;0.29;101;16.88;;13.23;12.50;12.09;23.50;E;;;;;;;;2MASX J00545892-0720591,PGC 1020464;;; +NGC0298;G;00:55:02.35;-07:19:59.1;Cet;1.47;0.49;92;14.70;;11.97;11.56;11.31;24.46;Sc;;;;;;;;2MASX J00550234-0719591,MCG -01-03-033,PGC 003250,SDSS J005502.34-071958.7;;; +NGC0299;OCl;00:53:24.07;-72:11:49.6;Tuc;0.90;0.90;;12.05;11.73;;;;;;;;;;;;;ESO 051-005;;; +NGC0300;G;00:54:53.48;-37:41:03.8;Scl;19.41;13.06;114;8.69;8.13;7.04;6.57;6.38;23.59;Scd;;;;;;;;2MASX J00545347-3741037,C 070,ESO 295-020,ESO-LV 295-0200,IRAS 00525-3757,MCG -06-03-005,PGC 003238;;; +NGC0301;G;00:56:18.35;-10:40:26.0;Cet;0.64;0.59;80;15.47;;12.55;11.88;11.63;23.33;Sa;;;;;;;;2MASX J00561836-1040258,PGC 003345,SDSS J005618.34-104025.9,SDSS J005618.35-104025.9,SDSS J005618.35-104026.0;;; +NGC0302;*;00:56:25.31;-10:39:47.6;Cet;;;;;;;;;;;;;;;;;;SDSS J005625.30-103947.6;;NGC identification is uncertain.; +NGC0303;G;00:54:54.71;-16:39:16.6;Cet;0.73;0.26;160;15.47;;12.84;12.09;11.74;23.32;S0-a;;;;;;;;2MASX J00545443-1639126,2MASX J00545471-1639166,PGC 003240;;; +NGC0304;G;00:56:06.02;+24:07:36.8;And;1.17;0.76;175;13.69;12.67;10.70;10.00;9.72;23.12;S0;;;;;;;;2MASX J00560603+2407367,MCG +04-03-018,PGC 003326,UGC 00573;;; +NGC0305;Other;00:56:20.92;+12:03:54.4;Psc;;;;;;;;;;;;;;;;;;;;Six Galactic stars.; +NGC0306;OCl;00:54:14.18;-72:14:32.4;Tuc;1.10;1.10;;12.23;12.07;;;;;;;;;;;;;ESO 029-023;;In the Small Magellanic Cloud.; +NGC0307;G;00:56:32.58;-01:46:19.0;Cet;1.61;0.67;79;14.10;;10.61;9.88;9.66;23.49;S0;;;;;;;;2MASX J00563259-0146189,MCG +00-03-035,PGC 003367,SDSS J005632.56-014619.0,UGC 00584;;; +NGC0308;*;00:56:34.22;-01:47:02.1;Cet;;;;;;;;;;;;;;;;;;;;; +NGC0309;G;00:56:42.66;-09:54:49.9;Cet;2.23;1.95;100;12.70;;10.16;9.61;9.22;23.09;SABc;;;;;;;;2MASX J00564266-0954500,IRAS 00542-1010,MCG -02-03-050,PGC 003377,SDSS J005642.65-095449.7,SDSS J005642.66-095449.9;;HOLM 027B is a star.; +NGC0310;*;00:56:47.98;-01:45:56.8;Cet;;;;;;;;;;;;;;;;;;;;; +NGC0311;G;00:57:32.73;+30:16:50.7;Psc;1.36;0.69;118;14.00;13.00;10.71;10.02;9.74;23.38;S0;;;;;;;;2MASX J00573274+3016508,MCG +05-03-028,PGC 003434,UGC 00592;;; +NGC0312;G;00:56:15.93;-52:46:57.7;Phe;1.84;1.38;65;13.40;;10.41;9.75;9.49;23.59;E;;;;;;;;2MASX J00561593-5246576,ESO 151-006,ESO-LV 151-0060,PGC 003343;;; +NGC0313;Other;00:57:45.64;+30:21:57.9;Psc;;;;;;;;;;;;;;;;;;;;Galactic triple star; +NGC0314;G;00:56:52.41;-31:57:46.7;Scl;1.00;0.77;170;14.23;;11.60;10.99;10.70;23.12;S0-a;;;;;;;;2MASX J00565241-3157466,ESO 411-032,ESO-LV 411-0320,IRAS 00544-3214,MCG -05-03-015,PGC 003395;;; +NGC0315;G;00:57:48.88;+30:21:08.8;Psc;2.86;2.14;45;12.20;11.16;8.95;8.21;7.96;23.35;E;;;;;;;;2MASX J00574891+3021083,MCG +05-03-031,PGC 003455,UGC 00597;;; +NGC0316;*;00:57:52.45;+30:21:15.5;Psc;;;;16.80;;13.33;12.88;12.78;;;;;;;;;;2MASS J00575244+3021150;;; +NGC0317A;G;00:57:39.05;+43:48:02.8;And;1.21;0.96;7;14.22;13.56;11.31;9.99;9.96;23.98;Sa;;;;;;;;2MASX J00573909+4348024,MCG +07-03-009,PGC 003442,UGC 00593;;87GB source with large sky, narrow minor axis, or very bad confusion.; +NGC0317B;G;00:57:40.45;+43:47:32.1;And;0.97;0.45;94;14.16;13.94;11.93;11.32;10.89;21.83;SBbc;;;;;;;;2MASX J00574168+4347334,IRAS 00548+4331,MCG +07-03-010,PGC 003445,SDSS J005740.42+434732.0,UGC 00594;;; +NGC0318;G;00:58:05.23;+30:25:31.9;Psc;0.60;0.29;5;15.20;;11.87;11.14;10.90;22.84;S0;;;;;;;;2MASX J00580522+3025323,PGC 003465;;; +NGC0319;G;00:56:57.60;-43:50:19.6;Phe;1.00;0.74;33;14.25;;11.85;11.14;11.09;22.96;Sa;;;;;;;;2MASX J00565761-4350196,ESO 243-013,ESO-LV 243-0130,MCG -07-03-001,PGC 003398;;; +NGC0320;G;00:58:46.53;-20:50:24.3;Cet;0.89;0.49;156;14.55;;11.85;11.15;10.92;22.95;S0-a;;;;;;;;2MASX J00584655-2050245,ESO 541-003,ESO-LV 541-0030,IRAS 00563-2106,MCG -04-03-037,PGC 003510;;; +NGC0321;G;00:57:39.23;-05:05:10.3;Cet;0.45;0.35;103;16.00;;12.55;11.77;11.52;22.98;E;;;;;;;;2MASX J00573925-0505098,MCG -01-03-043,PGC 003443;;; +NGC0322;G;00:57:10.01;-43:43:37.5;Phe;1.15;0.57;154;14.29;;11.31;10.64;10.36;23.33;S0;;;;;;;;2MASX J00570999-4343376,ESO 243-015,ESO-LV 243-0150,MCG -07-03-003,PGC 003412;;; +NGC0323;G;00:56:41.65;-52:58:33.3;Phe;1.82;1.52;166;13.55;;10.47;9.77;9.45;23.73;E;;;;;;;;2MASX J00564165-5258332,ESO 151-009,ESO-LV 151-0090,PGC 003374;;; +NGC0324;G;00:57:14.78;-40:57:32.8;Phe;1.48;0.62;95;14.06;;10.85;10.19;9.89;23.48;S0;;;;;;;;2MASX J00571478-4057329,ESO 295-025,ESO-LV 295-0250,MCG -07-03-002,PGC 003416;;; +NGC0325;G;00:57:47.87;-05:06:43.5;Cet;1.19;0.23;90;15.00;;12.02;11.28;11.09;23.05;Sc;;;;;;;;2MASX J00574786-0506435,MCG -01-03-045,PGC 003454;;; +NGC0326;GPair;00:58:22.70;+26:51:55.0;Psc;1.00;;;;;;;;;;;;;;;;;MCG +04-03-025,UGC 00601;;;Diameter of the group inferred by the author. +NGC0326 NED01;G;00:58:22.64;+26:51:58.5;Psc;1.00;0.89;17;14.90;13.00;11.29;10.48;10.10;23.22;E;;;;;;;;2MASX J00582263+2651586,MCG +04-03-025 NED01,PGC 003482,UGC 00601 NOTES01;;; +NGC0326 NED02;G;00:58:22.85;+26:51:52.4;Psc;;;;;;;;;;;;;;;;;;MCG +04-03-025 NED02,UGC 00601 NOTES02;;; +NGC0327;G;00:57:55.36;-05:07:49.5;Cet;1.39;0.63;2;13.00;;11.19;10.53;10.24;23.14;SBbc;;;;;;;;2MASX J00575536-0507495,MCG -01-03-047,PGC 003462;;; +NGC0328;G;00:56:57.57;-52:55:26.1;Phe;2.46;0.71;103;14.28;;10.99;10.30;9.97;24.19;SBa;;;;;;;;2MASX J00565758-5255262,ESO 151-013,ESO-LV 151-0130,PGC 003399;;; +NGC0329;G;00:58:01.60;-05:04:16.4;Cet;1.59;0.64;10;13.00;;11.14;10.37;10.08;23.41;Sb;;;;;;;;2MASX J00580158-0504165,MCG -01-03-048,PGC 003467;;; +NGC0330;OCl;00:56:17.65;-72:27:46.6;Tuc;2.80;2.50;120;9.76;9.55;;;;;;;;;;;;;ESO 029-024;;In the Small Magellanic Cloud.; +NGC0331;G;00:47:06.86;-02:43:52.1;Cet;0.96;0.60;127;14.90;;12.29;11.65;11.09;23.66;Sbc;;;;;;;;2MASX J00470684-0243526,MCG -01-03-012,PGC 002759;;NGC identification is very uncertain.; +NGC0332;G;00:58:49.13;+07:06:40.7;Psc;1.37;1.31;155;14.90;;11.32;10.56;10.32;24.26;E-S0;;;;;;;;2MASX J00584912+0706406,PGC 003511,UGC 00609;;; +NGC0333A;G;00:58:51.31;-16:28:09.1;Cet;0.41;0.34;131;16.00;;;;;;E-S0;;;;;;;;MCG -03-03-012;;; +NGC0333B;G;00:58:51.09;-16:28:17.2;Cet;1.50;0.80;116;13.92;;11.35;10.70;10.28;24.40;S0;;;;;;;;2MASX J00585131-1628092,MCG -03-03-013,PGC 003519;;; +NGC0334;G;00:58:49.81;-35:06:57.7;Scl;1.08;0.65;178;14.64;;11.91;11.22;10.88;23.12;SBb;;;;;;;;2MASX J00584979-3506577,ESO 351-026,ESO-LV 351-0260,IRAS 00564-3523,MCG -06-03-012,PGC 003514;;; +NGC0335;G;00:59:19.78;-18:14:04.8;Cet;1.28;0.41;135;15.12;;12.02;11.10;10.76;23.59;Sbc;;;;;;;;2MASX J00591978-1814045,ESO 541-006,ESO-LV 541-0060,IRAS 00568-1830,MCG -03-03-015,PGC 003544;;; +NGC0336;G;00:58:02.83;-18:23:03.6;Cet;0.75;0.30;38;15.44;;13.55;13.13;12.43;23.50;S0-a;;;;;;;;2MASX J00580282-1823032,ESO 541-002,ESO-LV 541-0020,IRAS 00555-1839,PGC 003470;;; +NGC0337;G;00:59:50.09;-07:34:40.7;Cet;2.92;1.89;158;12.06;11.61;9.98;9.39;9.10;22.70;SBcd;;;;;;;;2MASX J00595009-0734406,IRAS 00573-0750,MCG -01-03-053,PGC 003572;;; +NGC0337A;G;01:01:33.90;-07:35:17.7;Cet;2.63;1.73;8;12.70;12.17;;;;23.37;SABd;;;;;;;;MCG -01-03-065,PGC 003671,SDSS J010133.98-073518.7;;; +NGC0338;G;01:00:36.41;+30:40:08.3;Psc;1.75;0.66;107;14.00;;10.33;9.56;9.26;22.95;Sab;;;;;;;;2MASX J01003640+3040081,IRAS 00578+3024,MCG +05-03-034,PGC 003611,UGC 00624;;; +NGC0339;GCl;00:57:42.06;-74:28:24.2;Tuc;2.90;2.90;;12.94;12.21;;;;;;;;;;;;;ESO 029-025;;; +NGC0340;G;01:00:34.88;-06:51:59.7;Cet;0.94;0.39;78;14.80;;11.86;11.15;10.89;22.51;Sb;;;;;;;;2MASX J01003488-0651597,IRAS 00580-0708,MCG -01-03-055,PGC 003610;;; +NGC0341;G;01:00:45.83;-09:11:08.5;Cet;1.25;1.14;145;14.10;;11.20;10.50;10.17;23.14;Sbc;;;;;;;;2MASX J01004581-0911087,MCG -02-03-063,PGC 003620,SDSS J010045.82-091108.5,SDSS J010045.82-091108.6,SDSS J010045.83-091108.5;;MRK says 'Data refer to nucleus'.; +NGC0342;G;01:00:49.86;-06:46:21.2;Cet;0.91;0.43;100;14.50;;11.50;10.77;10.51;23.99;E;;;;;;;;2MASX J01004985-0646207,MCG -01-03-058,PGC 003631;;; +NGC0343;Dup;00:58:23.93;-23:13:30.8;Cet;;;;;;;;;;;;;;;0344;;;;;; +NGC0344;G;00:58:23.93;-23:13:30.8;Cet;0.46;0.28;10;16.29;;12.69;11.89;11.92;23.48;Sc;;;;;0343;;;2MASX J00582406-2313296;;NGC identification is not certain.; +NGC0345;G;01:01:22.10;-06:53:03.4;Cet;0.98;0.58;100;13.50;;11.00;10.29;10.01;23.23;Sa;;;;;;;;2MASX J01012211-0653034,MCG -01-03-064,PGC 003665;;; +NGC0346;OCl;00:59:05.04;-72:10:37.6;Tuc;8.50;8.50;;;;;;;;;;;;;;;;ESO 051-010;;; +NGC0347;G;01:01:35.16;-06:44:01.2;Cet;0.60;0.46;105;15.54;;12.76;12.14;11.71;23.35;;;;;;;;;2MASX J01013515-0644012,MCG -01-03-063,PGC 003673;;IC 0071 is a star.; +NGC0348;G;01:00:52.01;-53:14:40.2;Phe;0.84;0.72;93;14.58;;12.02;11.29;11.23;22.84;Sb;;;;;;;;2MASX J01005202-5314402,ESO 151-017,ESO-LV 151-0170,PGC 003632;;; +NGC0349;G;01:01:50.75;-06:47:59.3;Cet;1.34;1.16;60;13.50;;10.29;9.58;9.29;23.43;E-S0;;;;;;;;2MASX J01015074-0647594,MCG -01-03-068,PGC 003687;;; +NGC0350;G;01:01:56.71;-06:47:44.6;Cet;0.79;0.52;85;15.00;;11.52;10.83;10.58;23.63;E-S0;;;;;;;;2MASX J01015671-0647444,MCG -01-03-069,PGC 003690;;; +NGC0351;G;01:01:57.84;-01:56:12.3;Cet;1.53;0.75;140;14.30;;10.86;10.17;9.93;23.62;S0-a;;;;;;;;2MASX J01015784-0156124,MCG +00-03-057,PGC 003693,UGC 00639;;; +NGC0352;G;01:02:09.21;-04:14:43.7;Cet;2.29;0.78;170;12.50;;10.23;9.53;9.25;23.30;SBb;;;;;;;;2MASX J01020920-0414436,IRAS 00596-0430,MCG -01-03-071,PGC 003701;;; +NGC0353;G;01:02:24.53;-01:57:31.9;Cet;1.26;0.46;23;14.70;;11.62;10.86;10.61;23.31;SBab;;;;;;;;2MASX J01022454-0157326,IRAS 00598-0213,MCG +00-03-058,PGC 003714,UGC 00641;;; +NGC0354;G;01:03:16.39;+22:20:33.6;Psc;0.90;0.40;33;14.20;;11.38;10.66;10.31;22.32;SBb;;;;;;;;2MASX J01031641+2220338,IRAS 01005+2204,MCG +04-03-037,PGC 003763,UGC 00645;;; +NGC0355;G;01:03:06.98;-06:19:26.4;Cet;0.73;0.33;76;15.00;;12.68;11.90;11.78;24.34;S0;;;;;;;;2MASX J01030695-0619252,MCG -01-03-077,PGC 003753;;; +NGC0356;G;01:03:07.10;-06:59:18.1;Cet;1.75;0.94;65;13.50;;10.73;9.96;9.66;23.42;SABb;;;;;;;;2MASX J01030710-0659182,IRAS 01005-0715,MCG -01-03-078,PGC 003754;;; +NGC0357;G;01:03:21.88;-06:20:21.2;Cet;2.11;1.69;4;12.00;;9.51;8.82;8.48;23.47;S0-a;;;;;;;;2MASX J01032187-0620213,MCG -01-03-081,PGC 003768;;; +NGC0358;Other;01:05:10.93;+62:01:13.6;Cas;;;;;;;;;;;;;;;;;;;;Four Galactic stars; +NGC0359;G;01:04:16.96;-00:45:53.7;Cet;1.28;0.85;136;14.80;;11.29;10.57;10.31;23.85;E-S0;;;;;;;;2MASX J01041697-0045532,MCG +00-03-066,PGC 003817,SDSS J010416.96-004553.6,SDSS J010416.96-004553.7,SDSS J010416.97-004553.8,UGC 00662;;; +NGC0360;G;01:02:51.45;-65:36:35.9;Tuc;3.99;0.57;146;13.42;;10.19;9.41;9.11;23.75;Sbc;;;;;;;;2MASX J01025144-6536359,ESO 079-014,ESO-LV 79-0140,IRAS 01009-6552,PGC 003743;;; +NGC0361;OCl;01:02:10.16;-71:36:17.1;Tuc;2.60;2.60;;12.43;11.77;;;;;;;;;;;;;ESO 051-012;;In the Small Magellanic Cloud.; +NGC0362;GCl;01:03:14.23;-70:50:53.6;Tuc;8.70;;;7.97;6.58;;;;;;;;;;;;;C 104,MWSC 0099;;; +NGC0363;G;01:06:15.79;-16:32:33.9;Cet;0.82;0.60;43;15.00;;11.86;11.13;10.93;23.89;S0;;;;;;;;2MASX J01061580-1632343,MCG -03-03-023,PGC 003911;;; +NGC0364;G;01:04:40.83;-00:48:09.9;Cet;1.40;0.57;33;14.60;;10.83;10.16;9.84;23.79;S0;;;;;;;;2MASX J01044087-0048095,MCG +00-03-069,PGC 003833,SDSS J010440.82-004809.9,SDSS J010440.83-004809.8,SDSS J010440.83-004809.9,SDSS J010440.83-004810.0,UGC 00666;;UGC misprints dec as -01d30'. UGC galactic coordinates are correct.; +NGC0365;G;01:04:18.72;-35:07:17.1;Scl;1.01;0.60;5;14.25;;12.08;11.48;11.05;22.60;SBbc;;;;;;;;2MASX J01041872-3507171,ESO 352-001,ESO-LV 352-0010,IRAS 01019-3523,MCG -06-03-017,PGC 003822,TYC 7001-1619-1;;; +NGC0366;OCl;01:06:25.99;+62:13:44.1;Cas;5.10;;;;;;;;;;;;;;;;;MWSC 0102;;; +NGC0367;G;01:05:48.89;-12:07:42.5;Cet;0.96;0.35;17;15.32;;12.71;12.12;11.82;23.25;Sc;;;;;;;;2MASX J01054888-1207423,PGC 003894;;; +NGC0368;G;01:04:22.04;-43:16:36.3;Phe;0.72;0.62;160;14.66;;12.01;11.32;11.09;22.73;S0-a;;;;;;;;2MASX J01042204-4316363,ESO 243-023,ESO-LV 243-0230,PGC 003826;;; +NGC0369;G;01:05:08.91;-17:45:33.1;Cet;0.95;0.77;48;14.61;;11.90;11.26;11.06;23.05;Sb;;;;;;;;2MASX J01050889-1745331,ESO 541-017,ESO-LV 541-0170,MCG -03-03-022,PGC 003856;;; +NGC0370;Other;01:06:44.59;+32:25:43.3;Psc;;;;;;;;;;;;;;;0372;;;;;Galactic triple star; +NGC0371;OCl;01:03:29.53;-72:03:24.6;Tuc;4.20;3.80;60;;;;;;;;;;;;;;;ESO 051-014;;; +NGC0372;Dup;01:06:44.59;+32:25:43.3;Psc;;;;;;;;;;;;;;;0370;;;;;; +NGC0373;G;01:06:58.21;+32:18:30.5;Psc;0.52;0.45;146;;;12.50;11.81;11.58;23.41;E;;;;;;;;2MASX J01065819+3218304,PGC 003946;;; +NGC0374;G;01:07:05.78;+32:47:42.4;Psc;1.30;0.58;177;14.30;;10.84;10.17;9.98;23.37;S0-a;;;;;;;;2MASX J01070577+3247425,MCG +05-03-048,PGC 003952,UGC 00680;;; +NGC0375;G;01:07:05.92;+32:20:53.4;Psc;0.48;0.38;100;16.50;;12.49;11.74;11.47;22.57;E;;;;;;;;2MASX J01070592+3220534,PGC 003953;;MCG incorrectly identifies NGC 0375 with MCG +05-03-049.; +NGC0376;OCl;01:03:53.45;-72:49:25.2;Tuc;1.80;1.80;;11.16;10.90;;;;;;;;;;;;;ESO 029-029;;In the Small Magellanic Cloud.; +NGC0377;G;01:06:34.82;-20:19:57.2;Cet;0.98;0.27;24;16.30;;12.71;11.92;11.47;24.09;Sb;;;;;;;;ESO 541-019,ESO-LV 541-0190,MCG -04-03-053,PGC 003931;;; +NGC0378;G;01:06:12.21;-30:10:41.3;Scl;1.52;1.11;75;13.83;;11.41;10.73;10.38;23.17;Sc;;;;;;;;2MASX J01061222-3010411,ESO 412-005,ESO-LV 412-0050,IRAS 01038-3026,MCG -05-03-024,PGC 003907;;; +NGC0379;G;01:07:15.69;+32:31:13.3;Psc;1.41;0.68;2;14.00;;10.46;9.72;9.40;23.25;S0;;;;;;;;2MASX J01071567+3231131,MCG +05-03-050,PGC 003966,UGC 00683;;; +NGC0380;G;01:07:17.59;+32:28:58.5;Psc;1.45;1.35;80;13.90;;10.27;9.52;9.26;23.22;E;;;;;;;;2MASX J01071757+3228581,MCG +05-03-051,PGC 003969,UGC 00682;;; +NGC0381;OCl;01:08:18.01;+61:34:59.8;Cas;6.00;;;;9.30;;;;;;;;;;;;;MWSC 0105;;; +NGC0382;G;01:07:23.87;+32:24:13.9;Psc;0.24;0.23;90;14.20;;;;;20.27;E;;;;;;;;MCG +05-03-052,PGC 003981,UGC 00688;;; +NGC0383;G;01:07:24.96;+32:24:45.2;Psc;2.39;2.00;8;13.60;12.14;9.49;8.76;8.48;23.69;E-S0;;;;;;;;2MASX J01072493+3224452,MCG +05-03-053,PGC 003982,UGC 00689;;; +NGC0384;G;01:07:25.10;+32:17:32.8;Psc;1.10;0.78;135;14.30;;11.06;10.33;10.03;23.05;E;;;;;;;;2MASX J01072503+3217341,MCG +05-03-055,PGC 003983,UGC 00686;;; +NGC0385;G;01:07:27.25;+32:19:10.3;Psc;1.21;0.91;160;14.30;;10.92;10.22;9.92;23.17;E;;;;;;;;2MASX J01072723+3219112,MCG +05-03-056,PGC 003984,UGC 00687;;; +NGC0386;G;01:07:31.29;+32:21:43.2;Psc;0.46;0.37;0;15.40;;12.17;11.56;11.24;22.46;E;;;;;;;;2MASX J01073133+3221432,MCG +05-03-057,PGC 003989,UGC 00689 NOTES01;;; +NGC0387;G;01:07:33.06;+32:23:28.0;Psc;0.42;0.36;69;;;13.17;12.48;12.25;23.46;E;;;;;;;;2MASX J01073307+3223282,PGC 003987;;; +NGC0388;G;01:07:47.15;+32:18:35.9;Psc;0.58;0.38;168;15.50;;12.33;11.63;11.35;23.11;E;;;;;;;;2MASX J01074719+3218352,MCG +05-03-059,PGC 004005;;; +NGC0389;G;01:08:29.93;+39:41:43.6;And;1.26;0.46;54;15.00;;11.72;11.00;10.68;24.08;S0-a;;;;;;;;2MASX J01082993+3941436,MCG +06-03-014,PGC 004054,UGC 00703;;; +NGC0390;*;01:07:53.75;+32:25:59.2;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0391;G;01:07:22.58;+00:55:33.4;Cet;0.98;0.74;38;14.60;;11.28;10.58;10.30;23.32;E;;;;;;;;2MASX J01072255+0055331,MCG +00-03-075,PGC 003976,SDSS J010722.57+005533.3,SDSS J010722.57+005533.4,SDSS J010722.58+005533.4,SDSS J010722.58+005533.5,UGC 00693;;; +NGC0392;G;01:08:23.46;+33:08:01.0;Psc;1.36;0.93;52;13.68;12.71;10.48;9.80;9.56;23.08;E-S0;;;;;;;;2MASX J01082344+3308008,MCG +05-03-062,PGC 004042,UGC 00700;;; +NGC0393;G;01:08:36.95;+39:38:39.5;And;1.64;1.34;22;13.30;;10.24;9.51;9.23;23.55;E;;;;;;;;2MASX J01083695+3938396,MCG +06-03-015,PGC 004061,UGC 00707;;; +NGC0394;G;01:08:26.05;+33:08:52.7;Psc;0.64;0.34;130;14.80;13.83;11.55;10.87;10.57;22.50;S0;;;;;;;;2MASX J01082606+3308529,MCG +05-03-063,PGC 004049;;; +NGC0395;OCl;01:05:08.32;-71:59:26.6;Tuc;1.50;1.10;;;;;;;;;;;;;;;;ESO 051-016;;; +NGC0396;G;01:08:08.40;+04:31:51.1;Psc;0.62;0.30;70;;;12.98;12.60;12.10;;;;;;;;;;2MASX J01080838+0431509,PGC 099944;;;Diameters and position angle taken from Simbad. +NGC0397;G;01:08:31.10;+33:06:33.1;Psc;0.65;0.50;71;15.49;14.58;12.60;11.75;11.60;23.55;S0;;;;;;;;2MASX J01083108+3306329,MCG +05-03-064,PGC 004051;;; +NGC0398;G;01:08:53.67;+32:30:52.3;Psc;0.83;0.49;136;15.40;;12.12;11.43;11.28;23.72;S0;;;;;;;;2MASX J01085369+3230516,MCG +05-03-065,PGC 004090;;; +NGC0399;G;01:08:59.20;+32:38:03.5;Psc;1.12;0.76;41;14.50;;11.09;10.41;10.22;23.32;Sa;;;;;;;;2MASX J01085920+3238037,MCG +05-03-067,PGC 004096,UGC 00712;;; +NGC0400;*;01:09:02.49;+32:43:56.7;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0401;*;01:09:07.72;+32:45:33.6;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0402;*;01:09:13.36;+32:48:22.5;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0403;G;01:09:14.16;+32:45:07.7;Psc;2.40;0.79;86;13.38;;10.23;9.55;9.30;23.68;S0-a;;;;;;;;2MASX J01091415+3245078,MCG +05-03-068,PGC 004111,UGC 00715;;; +NGC0404;G;01:09:27.02;+35:43:05.3;And;3.40;3.37;90;12.56;11.73;;;;22.61;E-S0;;;;;;;;IRAS 01066+3527,MCG +06-03-018,PGC 004126,UGC 00718;;; +NGC0405;Other;01:08:34.11;-46:40:06.6;Phe;;;;7.17;6.89;6.34;6.25;6.18;;;;;;;;;;HD 006869;;Two Galactic stars.; +NGC0406;G;01:07:25.05;-69:52:45.0;Tuc;2.44;1.10;162;13.02;;11.06;10.50;10.18;23.09;SBc;;;;;;;;2MASX J01072505-6952452,ESO 051-018,ESO-LV 51-0180,IRAS 01057-7008,PGC 003980;;; +NGC0407;G;01:10:36.56;+33:07:35.4;Psc;2.00;0.29;0;14.28;;10.74;10.02;9.80;24.24;S0-a;;;;;;;;2MASX J01103658+3307351,MCG +05-03-077,PGC 004190,UGC 00730;;; +NGC0408;*;01:10:51.09;+33:09:04.6;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0409;G;01:09:33.22;-35:48:20.2;Scl;1.36;1.15;164;14.03;;10.93;10.23;10.00;23.60;E;;;;;;;;2MASX J01093323-3548203,ESO 352-012,ESO-LV 352-0120,MCG -06-03-023,PGC 004132;;; +NGC0410;G;01:10:58.90;+33:09:06.8;Psc;2.37;1.60;34;12.52;11.48;9.38;8.66;8.38;23.24;E;;;;;;;;2MASX J01105887+3309072,MCG +05-03-080,PGC 004224,SDSS J011058.91+330907.1,UGC 00735;;; +NGC0411;OCl;01:07:55.67;-71:46:06.1;Tuc;2.10;1.90;;12.63;12.10;;;;;;;;;;;;;ESO 051-019;;In the Small Magellanic Cloud.; +NGC0413;G;01:12:31.40;-02:47:36.3;Cet;1.05;0.67;148;14.00;;12.42;11.94;11.74;23.27;SBc;;;;;;;;2MASX J01123140-0247361,MCG -01-04-013,PGC 004347;;; +NGC0414;GPair;01:11:17.80;+33:06:46.0;Psc;0.75;;;;;;;;;;;;;;;;;UGC 00744;;;Diameter of the group inferred by the author. +NGC0414 NED01;G;01:11:17.48;+33:06:50.0;Psc;0.74;0.34;23;14.13;;11.35;10.58;10.37;22.48;S0;;;;;;;;2MASX J01111746+3306502,PGC 004254,UGC 00744 NED01;;;B-Mag taken from LEDA +NGC0414 NED02;G;01:11:17.95;+33:06:44.1;Psc;0.45;0.38;90;;;;;;;E-S0;;;;;;;;PGC 093079,UGC 00744 NED02;;; +NGC0415;G;01:10:05.69;-35:29:26.8;Scl;1.57;0.74;49;14.32;;11.71;10.95;10.84;23.45;SBb;;;;;;;;2MASX J01100570-3529265,ESO 352-014,ESO-LV 352-0140,MCG -06-03-024,PGC 004161;;; +NGC0416;GCl;01:07:58.50;-72:21:18.2;Tuc;1.70;1.70;;12.55;11.76;;;;;;;;;;;;;ESO 029-032;;In the Small Magellanic Cloud.; +NGC0417;G;01:11:05.56;-18:08:54.0;Cet;1.08;0.81;24;15.18;;11.90;11.08;10.92;24.15;E-S0;;;;;;;;2MASX J01110557-1808534,ESO 541-024,ESO-LV 541-0240,MCG -03-04-019,PGC 004237;;; +NGC0418;G;01:10:35.62;-30:13:16.6;Scl;1.98;1.30;23;13.19;;10.89;10.14;9.89;23.02;Sc;;;;;;;;2MASX J01103561-3013165,ESO 412-009,ESO-LV 412-0090,IRAS 01082-3029,MCG -05-04-002,PGC 004189;;; +NGC0419;GCl;01:08:17.17;-72:53:00.6;Tuc;2.80;2.80;;11.16;10.50;;;;;;;;;;;;;ESO 029-033;;In the Small Magellanic Cloud.; +NGC0420;G;01:12:09.65;+32:07:23.4;Psc;1.38;1.05;173;13.40;;10.47;9.75;9.54;22.91;S0;;;;;;;;2MASX J01120966+3207233,MCG +05-03-083,PGC 004320,UGC 00752;;; +NGC0421;Other;01:12:14.46;+32:07:24.6;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC0422;OCl;01:09:25.39;-71:46:02.0;Tuc;1.00;1.00;;13.45;13.26;;;;;;;;;;;;;ESO 051-022;;In the Small Magellanic Cloud.; +NGC0423;G;01:11:22.21;-29:14:04.3;Scl;0.90;0.60;114;14.58;;11.60;10.86;10.50;22.82;S0-a;;;;;;;;2MASX J01112221-2914042,ESO 412-011,ESO-LV 412-0110,IRAS 01090-2929,MCG -05-04-004,PGC 004266;;; +NGC0424;G;01:11:27.63;-38:05:00.5;Scl;1.66;0.68;61;13.76;14.12;10.50;9.74;9.13;23.37;S0-a;;;;;;;;2MASX J01112766-3805006,ESO 296-004,ESO-LV 296-0040,IRAS 01091-3820,MCG -06-03-026,PGC 004274;;; +NGC0425;G;01:13:02.56;+38:46:06.1;And;0.89;0.84;65;13.50;;11.25;10.54;10.27;21.89;Sc;;;;;;;;2MASX J01130255+3846060,IRAS 01102+3830,MCG +06-03-023,PGC 004379,UGC 00758;;; +NGC0426;G;01:12:48.61;-00:17:24.7;Cet;1.20;0.89;146;16.33;15.58;10.88;10.16;9.88;23.10;E;;;;;;;;2MASX J01124858-0017246,MCG +00-04-035,PGC 004363,SDSS J011248.60-001724.6,SDSS J011248.61-001724.7,UGC 00760;;; +NGC0427;G;01:12:19.24;-32:03:40.2;Scl;1.10;0.66;16;15.06;;12.14;11.43;11.20;23.75;SBa;;;;;;;;2MASX J01121922-3203399,ESO 412-014,ESO-LV 412-0140,MCG -05-04-007,PGC 004333;;; +NGC0428;G;01:12:55.71;+00:58:53.6;Cet;2.82;2.08;114;12.10;;10.67;9.65;9.39;22.67;SABm;;;;;;;;2MASX J01125570+0058536,IRAS 01103+0043,MCG +00-04-036,PGC 004367,UGC 00763;;UM 309 is a set of four HII regions within NGC 0428.; +NGC0429;G;01:12:57.42;-00:20:42.0;Cet;1.51;0.31;19;14.40;;11.37;10.67;10.49;24.04;S0;;;;;;;;2MASX J01125745-0020416,MCG +00-04-037,PGC 004368,SDSS J011257.42-002041.9,SDSS J011257.42-002042.0,UGC 00762;;; +NGC0430;G;01:12:59.93;-00:15:09.0;Cet;1.18;0.81;163;13.60;;10.59;9.87;9.61;22.73;E;;;;;;;;2MASX J01125992-0015087,MCG +00-04-039,PGC 004376,SDSS J011259.92-001508.9,UGC 00765;;; +NGC0431;G;01:14:04.54;+33:42:15.1;And;1.16;0.67;28;14.00;;10.87;10.17;9.91;23.10;S0;;;;;;;;2MASX J01140455+3342149,MCG +05-04-002,PGC 004437,UGC 00776;;; +NGC0432;G;01:11:46.26;-61:31:39.5;Tuc;1.32;1.07;126;13.96;;10.84;10.18;9.93;23.47;E-S0;;;;;;;;2MASX J01114624-6131394,ESO 113-022,ESO-LV 113-0220,PGC 004290;;One APM image refers to the southeastern part of the galaxy.; +NGC0433;OCl;01:15:09.26;+60:07:32.8;Cas;3.60;;;;;;;;;;;;;;;;;MWSC 0110;;; +NGC0434;G;01:12:14.13;-58:14:52.7;Tuc;2.24;1.24;9;12.93;;9.81;9.05;8.74;22.91;Sab;;;;;;;;2MASX J01121411-5814525,ESO 113-023,ESO-LV 113-0230,PGC 004325;;; +NGC0434A;G;01:12:29.62;-58:12:34.2;Tuc;1.19;0.24;57;15.79;;;;;24.34;S0-a;;;;;;;;ESO 113-024,ESO-LV 113-0240,PGC 004344;;; +NGC0435;G;01:13:59.85;+02:04:17.2;Cet;1.10;0.43;17;15.00;;12.14;11.36;11.07;23.04;SABc;;;;;;;;2MASX J01135985+0204171,MCG +00-04-046,PGC 004434,UGC 00779;;; +NGC0436;OCl;01:15:57.78;+58:49:01.6;Cas;5.70;;;8.01;8.80;;;;;;;;;;;;;MWSC 0111;;; +NGC0437;G;01:14:22.29;+05:55:36.8;Psc;1.73;1.37;138;14.00;;10.96;10.28;10.01;23.77;S0-a;;;;;;;;2MASX J01142229+0555366,MCG +01-04-005,PGC 004464,UGC 00788;;; +NGC0438;G;01:13:34.16;-37:54:05.9;Scl;1.35;0.77;140;13.63;;10.91;10.20;10.00;22.61;Sb;;;;;;;;2MASX J01133415-3754057,ESO 296-007,ESO-LV 296-0070,IRAS 01112-3810,MCG -06-03-029,PGC 004406;;; +NGC0439;G;01:13:47.26;-31:44:49.7;Scl;3.38;2.14;156;12.38;;9.62;9.00;8.70;24.24;E-S0;;;;;;;;2MASX J01134725-3144500,ESO 412-018,ESO-LV 412-0180,MCG -05-04-015,PGC 004423;;; +NGC0440;G;01:12:48.50;-58:16:56.2;Tuc;1.06;0.64;37;13.75;;11.18;10.47;10.13;22.20;Sbc;;;;;;;;2MASX J01124849-5816560,ESO 113-025,ESO-LV 113-0250,PGC 004361;;; +NGC0441;G;01:13:51.26;-31:47:18.0;Scl;1.51;1.36;100;13.76;;10.52;9.81;9.49;23.33;S0-a;;;;;;;;2MASX J01135125-3147180,ESO 412-019,ESO-LV 412-0190,MCG -05-04-016,PGC 004429;;; +NGC0442;G;01:14:38.65;-01:01:14.3;Cet;1.16;0.69;158;14.50;;10.77;9.98;9.76;23.43;S0-a;;;;;;;;2MASX J01143863-0101139,MCG +00-04-054,PGC 004484,SDSS J011438.64-010114.3,UGC 00789;;; +NGC0443;G;01:15:07.59;+33:22:38.4;Psc;0.82;0.72;17;13.90;;11.44;10.69;10.38;22.53;S0-a;;;;;;1653;;2MASX J01150761+3322385,MCG +05-04-005,PGC 004512,UGC 00796;;; +NGC0444;G;01:15:49.60;+31:04:48.9;Psc;1.57;0.34;160;14.70;;12.37;11.60;11.30;23.44;Sc;;;;;;1658;;2MASX J01154958+3104488,MCG +05-04-007,PGC 004561,UGC 00810;;; +NGC0445;G;01:14:52.48;+01:55:02.8;Cet;0.79;0.53;140;15.50;;11.54;10.90;10.53;23.58;S0;;;;;;;;2MASX J01145247+0155030,PGC 004493;;; +NGC0446;G;01:16:03.61;+04:17:38.8;Psc;2.06;1.60;110;13.80;;10.78;10.13;9.75;24.00;S0;;;;;;0089;;2MASX J01160360+0417385,IRAS 01134+0401,MCG +01-04-012,PGC 004578,UGC 00818;;Mulchaey, et al (1996, ApJS, 102, 309) say this is not a Seyfert.; +NGC0447;G;01:15:37.63;+33:04:03.8;Psc;2.21;2.15;15;14.00;;10.52;9.79;9.48;25.53;S0-a;;;;;;1656;;2MASX J01153760+3304035,MCG +05-04-006,PGC 004550,UGC 00804;;Misidentified in CGCG, RNGC & UGC as NGC 0449. NED follows RC2.; +NGC0448;G;01:15:16.52;-01:37:34.3;Cet;1.60;0.76;115;13.20;;10.27;9.58;9.35;23.04;S0;;;;;;;;2MASX J01151653-0137339,MCG +00-04-060,PGC 004524,UGC 00801;;; +NGC0449;G;01:16:07.25;+33:05:22.4;Psc;0.68;0.39;78;15.90;14.96;12.27;11.61;11.17;22.70;SBa;;;;;;;;2MASX J01160722+3305218,IRAS 01133+3249,MCG +05-04-009,PGC 004587,UGC 00804 NOTES01;;UGC notes misprints the identification as CGCG 0113.4+3250.; +NGC0450;G;01:15:30.44;-00:51:39.5;Cet;2.94;1.95;72;13.40;;11.40;10.91;10.58;23.52;SABc;;;;;;;;2MASX J01153046-0051389,MCG +00-04-062,PGC 004540,SDSS J011530.44-005139.3,SDSS J011530.44-005139.4,SDSS J011530.44-005139.5,UGC 00806;;Possible host galaxy of UM 311.; +NGC0451;G;01:16:12.40;+33:03:50.8;Psc;0.69;0.53;19;14.80;;12.30;11.70;11.39;22.61;Sc;;;;;;1661;;2MASX J01161239+3303507,MCG +05-04-011,PGC 004594;;; +NGC0452;G;01:16:14.83;+31:02:01.8;Psc;1.99;0.50;39;14.00;;10.62;9.86;9.58;23.14;SBab;;;;;;;;2MASS J01161480+3102017,2MASX J01161484+3102019,IRAS 01134+3046,MCG +05-04-010,PGC 004596,UGC 00820;;; +NGC0453;Other;01:16:17.42;+33:00:51.0;Psc;;;;;;;;;;;;;;;;;;;;Galactic triple star; +NGC0454;GPair;01:14:22.53;-55:23:55.3;Phe;2.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC0454 NED01;G;01:14:21.81;-55:24:05.1;Phe;1.64;1.64;0;13.11;;;;;22.94;E?;;;;;0454W;;;ESO-LV 151-0361,PGC 004461;;; +NGC0454 NED02;G;01:14:24.93;-55:23:49.5;Phe;1.93;0.81;81;13.13;13.58;10.79;10.09;9.75;23.25;S0;;;;;0454E;;;2MASX J01142491-5523497,ESO-LV 151-0360,PGC 004468;;; +NGC0455;G;01:15:57.64;+05:10:43.3;Psc;2.58;1.49;158;13.90;;10.56;9.86;9.60;24.62;S0;;;;;;;;2MASX J01155764+0510435,MCG +01-04-011,PGC 004572,UGC 00815;;; +NGC0456;OCl;01:13:44.38;-73:17:25.9;Tuc;3.80;2.90;110;;;;;;;;;;;;;;;ESO 029-038;;; +NGC0457;OCl;01:19:32.65;+58:17:26.5;Cas;7.80;;;6.97;6.40;;;;;;;;;;;;;C 013,MWSC 0114;Owl Cluster;; +NGC0458;OCl;01:14:53.47;-71:33:09.7;Tuc;2.60;2.30;140;11.85;11.66;;;;;;;;;;;;;2MASX J01145353-7133103,ESO 051-026;;In the Small Magellanic Cloud.; +NGC0459;G;01:18:08.19;+17:33:44.6;Psc;0.58;0.55;20;15.70;;13.11;12.35;12.21;23.31;Sbc;;;;;;;;2MASX J01180818+1733448,MCG +03-04-017,PGC 004665,UGC 00832;;; +NGC0460;Cl+N;01:14:38.60;-73:16:27.1;Tuc;2.60;1.50;20;;;;;;;;;;;;;;;;;; +NGC0461;G;01:17:20.64;-33:50:27.2;Scl;1.21;1.01;38;14.11;;;;;23.06;Sc;;;;;;;;ESO 352-033,ESO-LV 352-0330,IRAS 01150-3406,MCG -06-04-002,PGC 004636;;; +NGC0462;G;01:18:10.99;+04:13:33.6;Psc;0.48;0.45;115;;;12.37;11.82;11.45;;;;;;;;;;2MASX J01181097+0413344,PGC 004667;;;Diameters and position angle taken from Simbad. +NGC0463;G;01:18:58.25;+16:19:32.7;Psc;1.04;0.39;5;15.20;;11.76;11.07;10.69;23.81;S0-a;;;;;;;;2MASX J01185818+1619319,MCG +03-04-019,PGC 004719,UGC 00840;;; +NGC0464;**;01:19:26.68;+34:57:19.5;And;;;;;;;;;;;;;;;;;;;;; +NGC0465;OCl;01:15:41.35;-73:20:04.6;Tuc;5.00;4.00;;;;;;;;;;;;;;;;ESO 029-040;;In the Small Magellanic Cloud.; +NGC0466;G;01:17:13.26;-58:54:35.8;Tuc;1.61;1.34;108;13.58;;10.85;10.13;9.93;23.36;S0-a;;;;;;;;2MASX J01171327-5854359,ESO 113-034,ESO-LV 113-0340,PGC 004632;;; +NGC0467;G;01:19:10.13;+03:18:03.0;Psc;1.66;1.49;125;12.90;11.85;9.97;9.24;9.01;23.00;S0;;;;;;;;2MASX J01191011+0318032,MCG +00-04-079,PGC 004736,UGC 00848;;; +NGC0468;G;01:19:48.50;+32:46:04.0;Psc;0.85;0.48;175;15.10;;12.17;11.59;11.35;23.54;S0-a;;;;;;0092;;2MASX J01194842+3246046,MCG +05-04-020,PGC 004780,SDSS J011948.39+324604.4;;; +NGC0469;G;01:19:32.95;+14:52:19.0;Psc;0.81;0.60;173;15.00;;13.31;12.48;12.06;23.29;S?;;;;;;;;2MASX J01193304+1452147,MCG +02-04-023,PGC 004753,SDSS J011932.93+145218.8,SDSS J011932.94+145219.0,SDSS J011932.95+145219.0;;HOLM 039B is a star.; +NGC0470;G;01:19:44.85;+03:24:35.8;Psc;2.86;1.62;156;12.53;11.78;9.76;9.10;8.84;23.16;Sb;;;;;;;;2MASX J01194484+0324358,IRAS 01171+0308,MCG +00-04-084,PGC 004777,UGC 00858;;; +NGC0471;G;01:19:59.59;+14:47:10.4;Psc;1.06;0.79;79;14.00;;11.13;10.44;10.29;23.05;S0;;;;;;;;2MASX J01195962+1447107,MCG +02-04-024 NED01,PGC 004793,SDSS J011959.59+144710.3,UGC 00861;;; +NGC0472;G;01:20:28.69;+32:42:32.5;Psc;0.90;0.68;125;14.20;;11.22;10.49;10.19;22.69;Sb;;;;;;;;2MASX J01202867+3242322,MCG +05-04-022,PGC 004833,UGC 00870;;; +NGC0473;G;01:19:55.07;+16:32:40.9;Psc;1.77;1.02;153;13.41;12.63;10.45;9.77;9.56;23.19;S0-a;;;;;;;;2MASX J01195507+1632407,MCG +03-04-022,PGC 004785,UGC 00859;;; +NGC0474;G;01:20:06.69;+03:24:55.4;Psc;2.65;2.44;45;12.37;11.51;9.49;8.80;8.56;23.26;S0;;;;;;;;2MASX J01200669+0324549,MCG +00-04-085,PGC 004801,UGC 00864;;; +NGC0475;G;01:20:02.00;+14:51:39.8;Psc;0.81;0.55;121;17.35;;12.57;11.93;11.63;24.21;E-S0;;;;;;0097;;2MASX J01200203+1451397,PGC 004796,SDSS J012001.99+145139.7,SDSS J012002.00+145139.7,SDSS J012002.00+145139.8,SDSS J012002.01+145139.7;;; +NGC0476;G;01:20:19.90;+16:01:12.5;Psc;0.84;0.55;95;15.20;;11.94;11.26;11.00;23.58;S0;;;;;;;;2MASX J01201992+1601126,MCG +03-04-023,PGC 004814;;HOLM 040B is a star.; +NGC0477;G;01:21:20.37;+40:29:17.5;And;1.55;0.55;135;14.00;;11.25;10.80;10.22;23.04;Sc;;;;;;;;2MASX J01212039+4029176,MCG +07-03-032,PGC 004915,SDSS J012120.34+402917.3,UGC 00886;;; +NGC0478;G;01:20:09.29;-22:22:38.6;Cet;0.84;0.69;118;14.61;;12.89;12.47;12.34;22.84;Sb;;;;;;;;ESO 476-003,ESO-LV 476-0030,IRAS 01177-2238,MCG -04-04-005,PGC 004803;;; +NGC0479;G;01:21:15.73;+03:51:44.2;Psc;0.91;0.73;128;14.71;;12.84;11.87;11.83;23.52;SBbc;;;;;;;;2MASX J01211572+0351440,MCG +01-04-031,PGC 004905,UGC 00893;;; +NGC0480;G;01:20:34.39;-09:52:48.8;Cet;0.58;0.29;65;16.28;;13.09;12.26;12.10;23.30;Sa;;;;;;;;2MASX J01203441-0952487,PGC 004845,SDSS J012034.38-095248.8,SDSS J012034.39-095248.8;;; +NGC0481;G;01:21:12.51;-09:12:40.4;Cet;1.46;1.08;72;14.19;;10.69;10.09;9.78;24.11;E-S0;;;;;;;;2MASX J01211246-0912404,MCG -02-04-030,PGC 004899,SDSS J012112.51-091240.4;;Identification as NGC 0481 is not certain.; +NGC0482;G;01:20:20.42;-40:57:58.0;Phe;2.06;0.53;84;14.50;;10.88;10.06;9.78;23.98;Sab;;;;;;;;2MASX J01202040-4057579,ESO 296-013,ESO-LV 296-0130,MCG -07-03-017,PGC 004823;;; +NGC0483;G;01:21:56.30;+33:31:15.5;Psc;0.87;0.79;115;14.00;;10.98;10.26;9.95;22.48;Sb;;;;;;;;2MASX J01215628+3331153,MCG +05-04-029,PGC 004961,UGC 00906;;; +NGC0484;G;01:19:34.73;-58:31:27.5;Tuc;1.80;1.26;90;13.07;;10.04;9.36;9.10;23.26;E-S0;;;;;;;;2MASX J01193469-5831272,ESO 113-036,ESO-LV 113-0360,PGC 004764;;; +NGC0485;G;01:21:27.60;+07:01:05.1;Psc;1.64;0.61;2;14.20;;11.70;11.01;10.82;23.38;Sbc;;;;;;;;2MASX J01212759+0701050,IRAS 01188+0645,MCG +01-04-032,PGC 004921,UGC 00895;;; +NGC0486;G;01:21:43.04;+05:20:46.7;Psc;0.36;0.28;70;;;;;;24.02;;;;;;;;;PGC 1281966;;Galactic star superposed.; +NGC0487;G;01:21:55.09;-16:22:13.3;Cet;1.09;0.70;113;13.99;;11.79;11.17;10.90;23.05;SBa;;;;;;;;2MASX J01215507-1622134,MCG -03-04-056,PGC 004958;;; +NGC0488;G;01:21:46.85;+05:15:24.2;Psc;5.05;3.66;13;15.00;;7.91;7.03;6.96;23.15;Sb;;;;;;;;2MASX J01214684+0515241,IRAS 01191+0459,MCG +01-04-033,PGC 004946,SDSS J012146.79+051524.7,UGC 00907;;; +NGC0489;G;01:21:53.90;+09:12:23.6;Psc;1.55;0.35;120;13.40;;10.52;9.83;9.56;21.93;Sc;;;;;;;;2MASX J01215390+0912233,MCG +01-04-034,PGC 004957,UGC 00908;;; +NGC0490;G;01:22:02.87;+05:22:01.9;Psc;0.66;0.55;1;15.39;14.48;12.53;11.99;11.75;23.09;Sb;;;;;;;;2MASX J01220285+0522021,MCG +01-04-035,PGC 004973;;; +NGC0491;G;01:21:20.43;-34:03:47.8;Scl;1.35;0.99;95;13.28;12.54;10.35;9.70;9.39;22.38;SBb;;;;;;;;2MASX J01212042-3403477,ESO 352-053,ESO-LV 352-0530,IRAS 01190-3419,MCG -06-04-011,PGC 004914;;; +NGC0491A;G;01:20:04.67;-33:53:58.2;Scl;1.88;0.85;97;14.32;;13.05;12.92;12.28;23.72;Scd;;;;;;;;ESO 352-046,ESO-LV 352-0460,MCG -06-04-008,PGC 004799;;; +NGC0492;G;01:22:13.56;+05:25:01.4;Psc;0.67;0.56;97;15.50;;12.69;12.18;11.71;23.70;SABb;;;;;;;;2MASX J01221356+0525012,MCG +01-04-038,PGC 004976;;; +NGC0493;G;01:22:08.99;+00:56:43.3;Cet;3.01;0.95;60;13.00;;11.18;10.35;10.27;23.13;Sc;;;;;;;;2MASX J01220898+0056432,IRAS 01195+0041,MCG +00-04-099,PGC 004979,SDSS J012208.98+005643.6,SDSS J012209.10+005644.9,SDSS J012210.24+005658.1,UGC 00914;;Contains the possible HII region UM 318.; +NGC0494;G;01:22:55.40;+33:10:26.0;Psc;1.86;0.59;100;13.80;;10.42;9.65;9.39;23.22;Sab;;;;;;;;2MASX J01225533+3310261,IRAS 01201+3254,MCG +05-04-034,PGC 005035,UGC 00919;;; +NGC0495;G;01:22:56.00;+33:28:18.0;Psc;1.09;0.77;169;14.00;;10.91;10.26;9.97;22.52;S0-a;;;;;;;;2MASX J01225595+3328171,MCG +05-04-035,PGC 005037,SDSS J012255.95+332817.0,UGC 00920;;; +NGC0496;G;01:23:11.60;+33:31:45.0;Psc;0.89;0.33;36;14.30;;11.63;10.97;10.73;22.04;Sbc;;;;;;;;2MASX J01231161+3331452,IRAS 01203+3316,MCG +05-04-036,PGC 005061,UGC 00927;;; +NGC0497;G;01:22:23.78;-00:52:30.7;Cet;2.06;0.86;134;14.10;;10.56;9.94;9.68;23.49;SBbc;;;;;;;;2MASX J01222375-0052308,MCG +00-04-100,PGC 004992,SDSS J012223.77-005230.7,SDSS J012223.78-005230.7,UGC 00915;;; +NGC0498;G;01:23:11.28;+33:29:21.7;Psc;0.51;0.41;125;16.00;;12.84;12.38;11.93;;;;;;;;;;2MASX J01231129+3329212,MCG +05-04-037,PGC 005059;;;Diameters and position angle taken from Simbad. +NGC0499;G;01:23:11.50;+33:27:38.0;Psc;1.68;1.05;77;13.00;12.30;9.71;9.02;8.74;23.16;E-S0;;;;;;1686;;2MASX J01231145+3327362,MCG +05-04-038,PGC 005060,UGC 00926;;; +NGC0500;G;01:22:39.37;+05:23:14.2;Psc;0.91;0.65;95;15.20;;11.81;11.14;10.87;23.70;E;;;;;;;;2MASX J01223937+0523142,MCG +01-04-040,PGC 005013,SDSS J012239.36+052314.1;;; +NGC0501;G;01:23:22.41;+33:25:58.7;Psc;0.52;0.49;80;15.20;;12.11;11.44;11.11;22.97;E;;;;;;;;2MASX J01232240+3325582,PGC 005082;;; +NGC0502;G;01:22:55.54;+09:02:57.1;Psc;1.64;1.52;55;13.80;;10.72;10.01;9.74;23.57;S0;;;;;;;;2MASX J01225553+0902570,MCG +01-04-043,PGC 005034,UGC 00922;;; +NGC0503;G;01:23:28.43;+33:19:54.2;Psc;0.63;0.49;39;15.10;;11.97;11.28;11.07;22.95;S0;;;;;;;;2MASX J01232845+3319542,MCG +05-04-040,PGC 005086;;; +NGC0504;G;01:23:27.90;+33:12:16.0;Psc;1.55;0.39;45;14.00;;11.06;10.25;10.07;23.69;S0;;;;;;;;2MASX J01232787+3312152,MCG +05-04-041,PGC 005084,UGC 00935;;; +NGC0505;G;01:22:57.10;+09:28:08.0;Psc;1.07;0.68;55;15.10;;11.92;11.30;10.90;23.91;S0;;;;;;;;2MASX J01225708+0928080,MCG +01-04-041,PGC 005036,UGC 00924;;; +NGC0506;*;01:23:35.35;+33:14:40.8;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0507;G;01:23:39.91;+33:15:21.8;Psc;2.45;1.66;71;13.00;;9.22;8.69;8.30;23.25;E-S0;;;;;;;;2MASX J01233995+3315222,MCG +05-04-044,PGC 005098,SDSS J012339.90+331519.2,UGC 00938;;; +NGC0508;G;01:23:40.60;+33:16:49.0;Psc;1.08;0.96;25;14.50;;10.66;9.99;9.73;23.23;E;;;;;;;;2MASX J01234058+3316502,MCG +05-04-045,PGC 005099,UGC 00939;;; +NGC0509;G;01:23:24.09;+09:26:00.8;Psc;1.59;0.68;81;14.70;;11.34;10.80;10.68;24.29;S0-a;;;;;;;;2MASX J01232407+0926004,MCG +01-04-045,PGC 005080,UGC 00932;;; +NGC0510;**;01:23:55.56;+33:29:48.8;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0511;G;01:23:30.73;+11:17:27.6;Psc;1.18;0.98;70;15.40;;11.55;10.84;10.52;24.38;E;;;;;;;;2MASX J01233074+1117274,MCG +02-04-033,PGC 005103,UGC 00936;;; +NGC0512;G;01:23:59.80;+33:54:28.0;And;1.46;0.34;115;14.00;;10.82;10.08;9.77;22.62;Sab;;;;;;;;2MASX J01235976+3354281,MCG +06-04-013,PGC 005132,UGC 00944;;; +NGC0513;G;01:24:26.85;+33:47:58.0;And;0.62;0.31;81;13.40;13.40;10.96;10.23;9.91;20.51;Sc;;;;;;;;2MASX J01242680+3347585,IRAS 01216+3332,MCG +06-04-016,PGC 005174,UGC 00953;;; +NGC0514;G;01:24:03.90;+12:55:02.6;Psc;3.50;2.50;106;12.24;11.65;10.55;9.91;9.14;23.48;SABc;;;;;;;;2MASX J01240390+1255024,IRAS 01214+1239,MCG +02-04-035,PGC 005139,UGC 00947;;; +NGC0515;G;01:24:38.60;+33:28:22.0;Psc;0.92;0.64;89;14.30;;10.84;10.12;9.87;22.97;S0;;;;;;;;2MASX J01243853+3328214,MCG +05-04-052,PGC 005201,UGC 00956;;; +NGC0516;G;01:24:08.07;+09:33:06.1;Psc;1.62;0.46;45;14.30;;11.37;10.75;10.52;23.95;S0;;;;;;;;2MASX J01240806+0933060,MCG +01-04-048,PGC 005148,UGC 00946;;; +NGC0517;G;01:24:43.80;+33:25:46.0;Psc;1.46;0.60;20;13.60;;10.81;10.10;9.79;23.20;S0;;;;;;;;2MASX J01244381+3325465,MCG +05-04-054,PGC 005214,UGC 00960;;; +NGC0518;G;01:24:17.64;+09:19:51.4;Psc;1.56;0.55;97;14.40;;10.75;10.05;9.79;23.56;Sa;;;;;;;;2MASX J01241762+0919514,MCG +01-04-049,PGC 005161,UGC 00952;;; +NGC0519;G;01:24:28.64;-01:38:28.5;Cet;0.53;0.29;135;15.30;;12.25;11.50;11.39;22.76;E;;;;;;;;2MASX J01242863-0138284,PGC 005182;;; +NGC0520;GPair;01:24:35.07;+03:47:32.7;Psc;4.20;;;;;;;;;;;;;;;;;MCG +01-04-052,UGC 00966;;;Diameter of the group inferred by the author. +NGC0520 NED01;G;01:24:34.48;+03:47:41.8;Psc;4.09;1.61;130;12.24;11.42;9.43;8.69;8.37;23.54;Sa;;;;;;;;2MASX J01243507+0347326,IRAS 01219+0331,MCG +01-04-052 NED01,PGC 005193,UGC 00966 NED01;;Northern optical center of NGC 0520.; +NGC0520 NED02;G;01:24:34.79;+03:47:23.2;Psc;1.56;0.59;120;12.40;;;;;;Sc;;;;;;;;MCG +01-04-052 NED02,PGC 093080,UGC 00966 NED02;;Southern optical center of NGC 0520.; +NGC0521;G;01:24:33.78;+01:43:53.0;Cet;2.77;2.59;145;12.50;;9.62;8.95;8.58;23.52;Sbc;;;;;;;;2MASX J01243377+0143532,IRAS 01219+0128,MCG +00-04-118,PGC 005190,SDSS J012433.77+014352.8,UGC 00962;;; +NGC0522;G;01:24:45.85;+09:59:40.7;Psc;2.38;0.31;33;14.20;;10.52;9.73;9.44;23.12;Sbc;;;;;;;;2MASX J01244585+0959406,IRAS 01221+0944,MCG +02-04-038,PGC 005218,UGC 00970;;; +NGC0523;G;01:25:20.73;+34:01:29.8;And;2.52;0.71;104;13.50;;10.76;10.05;9.71;23.27;Sbc;;;;;0537;;;2MASX J01252074+3401305,IRAS 01225+3345,MCG +06-04-018,PGC 005268,SDSS J012520.75+340129.8,UGC 00979;;; +NGC0524;G;01:24:47.72;+09:32:19.8;Psc;3.37;3.35;55;11.50;;8.13;7.43;7.16;22.78;S0-a;;;;;;;;2MASX J01244770+0932196,IRAS 01221+0916,MCG +01-04-053,PGC 005222,SDSS J012447.74+093220.0,UGC 00968;;; +NGC0525;G;01:24:52.91;+09:42:12.0;Psc;1.50;0.63;7;14.50;;11.44;10.71;10.61;24.10;S0;;;;;;;;2MASX J01245290+0942116,MCG +01-04-054,PGC 005232,UGC 00972;;; +NGC0526;GPair;01:23:58.50;-35:07:21.0;Scl;2.00;;;;;;;;;;;;;;;;;IRAS 01216-3519;;;Diameter of the group inferred by the author. +NGC0526A;G;01:23:54.39;-35:03:55.9;Scl;1.70;0.79;110;14.76;14.60;11.60;10.66;10.44;24.53;S0;;;;;;;;2MASX J01235436-3503555,ESO 352-066,ESO-LV 352-0660,MCG -06-04-019,PGC 005131;;; +NGC0526B;G;01:23:57.08;-35:04:09.4;Scl;0.79;0.45;158;15.14;14.50;12.12;11.34;11.20;;S0;;;;;;;;2MASX J01235705-3504095,ESO-LV 352-0661,MCG -06-04-020,PGC 005135;;; +NGC0527;G;01:23:58.12;-35:06:54.2;Scl;1.79;0.43;15;14.07;;10.76;10.04;9.79;23.75;S0-a;;;;;0527A;;;2MASX J01235812-3506545,ESO 352-068,ESO-LV 352-0680,MCG -06-04-021,PGC 005128;;; +NGC0527B;G;01:23:59.34;-35:07:38.5;Scl;0.87;0.27;29;16.26;;13.36;12.60;12.71;23.10;Sbc;;;;;;;;2MASX J01235934-3507385,MCG -06-04-022,PGC 005142;;; +NGC0528;G;01:25:33.60;+33:40:18.0;And;1.77;1.04;57;13.70;;10.60;9.91;9.58;23.60;S0;;;;;;;;2MASX J01253359+3340165,IRAS 01226+3324,MCG +05-04-057,PGC 005290,UGC 00988;;; +NGC0529;G;01:25:40.40;+34:42:48.0;And;2.22;1.96;162;13.10;;10.05;9.30;9.11;23.61;E-S0;;;;;;;;2MASX J01254030+3442465,MCG +06-04-019,PGC 005299,UGC 00995;;; +NGC0530;G;01:24:41.65;-01:35:13.5;Cet;1.78;0.36;133;13.96;;10.68;9.98;9.72;23.73;S0-a;;;;;;0106;;2MASX J01244163-0135134,MCG +00-04-119,PGC 005210,UGC 00965;;; +NGC0531;G;01:26:18.90;+34:45:14.0;And;1.77;0.47;33;14.90;;11.49;10.70;10.51;24.53;S0-a;;;;;;;;2MASX J01261884+3445147,MCG +06-04-020,PGC 005340,UGC 01012;;; +NGC0532;G;01:25:17.34;+09:15:50.8;Psc;2.18;0.94;30;13.50;;9.87;9.12;8.83;23.88;Sab;;;;;;;;2MASX J01251734+0915507,IRAS 01226+0900,MCG +01-04-056,PGC 005264,UGC 00982;;; +NGC0533;G;01:25:31.36;+01:45:32.8;Cet;3.44;2.41;50;13.10;14.11;9.43;8.71;8.44;24.03;E;;;;;;;;2MASX J01253143+0145335,MCG +00-04-131,PGC 005283,UGC 00992;;; +NGC0534;G;01:24:44.63;-38:07:44.7;Scl;1.19;1.07;110;14.42;;11.08;10.42;10.16;23.48;S0;;;;;;;;2MASX J01244464-3807448,ESO 296-021,ESO-LV 296-0210,MCG -06-04-026,PGC 005215;;; +NGC0535;G;01:25:31.15;-01:24:29.3;Cet;0.97;0.34;57;14.83;;11.56;10.80;10.48;23.48;S0-a;;;;;;;;2MASX J01253116-0124291,MCG +00-04-133,PGC 005282,UGC 00997;;; +NGC0536;G;01:26:21.78;+34:42:10.9;And;2.92;1.49;67;13.20;;10.18;9.56;9.24;23.80;Sb;;;;;;;;2MASX J01262177+3442107,MCG +06-04-021,PGC 005344,SDSS J012621.77+344211.2,UGC 01013;;; +NGC0537;Dup;01:25:20.73;+34:01:29.8;And;;;;;;;;;;;;;;;0523;;;;;; +NGC0538;G;01:25:26.05;-01:33:02.3;Cet;1.38;0.54;36;14.58;;11.13;10.46;10.16;23.55;SBab;;;;;;;;2MASX J01252603-0133021,MCG +00-04-130,PGC 005275,UGC 00991;;; +NGC0539;G;01:25:21.73;-18:09:49.9;Cet;1.32;1.10;175;14.32;;12.25;11.52;11.27;23.49;Sc;;;;;0563;;;2MASX J01252171-1809499,ESO 542-010,ESO-LV 542-0100,IRAS 01229-1825,MCG -03-04-063,PGC 005269;;; +NGC0540;G;01:27:08.90;-20:02:11.9;Cet;0.82;0.39;5;15.71;;12.57;11.89;11.46;23.98;S0;;;;;;;;2MASX J01270888-2002119,ESO 542-012,ESO-LV 542-0120,PGC 005410;;; +NGC0541;G;01:25:44.31;-01:22:46.5;Cet;2.16;1.50;69;13.03;12.08;10.28;9.57;9.30;23.66;E;;;;;;;;2MASX J01254430-0122461,MCG +00-04-137,PGC 005305,UGC 01004;;NVSS position is about 12 arcsec northwest of the nucleus.; +NGC0542;G;01:26:30.90;+34:40:31.0;And;1.02;0.23;143;15.40;;12.54;11.83;11.53;23.40;Sbc;;;;;;;;2MASX J01263085+3440318,MCG +06-04-022,PGC 005360;;; +NGC0543;G;01:25:49.99;-01:17:34.1;Cet;0.81;0.37;90;15.00;;11.71;11.01;10.77;22.46;E-S0;;;;;;;;2MASX J01254997-0117341,MCG +00-04-138,PGC 005311;;; +NGC0544;G;01:25:12.03;-38:05:40.3;Scl;1.47;1.03;173;14.41;;11.04;10.35;10.12;23.98;E-S0;;;;;;;;2MASX J01251204-3805404,ESO 296-024,ESO-LV 296-0240,MCG -06-04-028,PGC 005253;;; +NGC0545;G;01:25:59.12;-01:20:24.8;Cet;3.01;1.95;55;13.21;13.34;;;;24.49;E-S0;;;;;;;;MCG +00-04-142,PGC 005323,UGC 01007;;MCG incorrectly identifies this galaxy as 'N0547a'.; +NGC0546;G;01:25:12.81;-38:04:08.7;Scl;1.35;0.60;38;14.48;;11.66;10.97;10.68;23.20;SBb;;;;;;;;2MASX J01251280-3804084,ESO 296-025,ESO-LV 296-0250,IRAS 01229-3819,MCG -06-04-029,PGC 005255;;; +NGC0547;G;01:26:00.63;-01:20:42.6;Cet;3.07;1.93;103;13.16;13.34;9.47;8.76;8.49;24.43;E;;;;;;;;2MASX J01260057-0120424,MCG +00-04-143,PGC 005324,UGC 01009;;MCG incorrectly identifies this galaxy as 'N0547b'.; +NGC0548;G;01:26:02.51;-01:13:32.2;Cet;0.90;0.74;153;15.10;;11.83;11.13;10.98;23.31;E;;;;;;;;2MASX J01260251-0113324,MCG +00-04-141,PGC 005326,SDSS J012602.50-011332.1,SDSS J012602.50-011332.2,SDSS J012602.51-011332.1,SDSS J012602.51-011332.2,UGC 01010;;; +NGC0549;G;01:25:07.08;-38:00:27.9;Scl;0.59;0.55;100;15.49;;12.55;11.81;11.58;23.00;SBa;;;;;;;;2MASX J01250707-3800277,ESO 296-022,ESO-LV 296-0220,PGC 005243;;; +NGC0550;G;01:26:42.55;+02:01:20.5;Cet;1.82;0.69;120;13.60;;10.25;9.49;9.20;23.20;SBa;;;;;;;;2MASX J01264255+0201205,MCG +00-04-146,PGC 005374,SDSS J012642.55+020120.2,UGC 01021;;; +NGC0551;G;01:27:40.66;+37:10:58.5;And;1.49;0.59;137;13.50;;11.17;10.53;10.20;22.57;SBbc;;;;;;;;2MASX J01274066+3710584,IRAS 01247+3655,MCG +06-04-027,PGC 005450,UGC 01034;;; +NGC0552;*;01:26:10.15;+33:24:21.1;Psc;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC0553;G;01:26:12.60;+33:24:18.0;Psc;0.91;0.30;13;15.00;;12.12;11.58;11.33;23.66;S0;;;;;;;;2MASX J01261252+3324183,PGC 005333;;NGC identification is not certain.; +NGC0554A;G;01:27:09.70;-22:43:28.8;Cet;1.42;1.04;170;15.00;;11.72;11.03;10.78;24.49;S0;;;;;0554;;;2MASX J01270968-2243289,PGC 005413;;; +NGC0554B;G;01:27:09.56;-22:43:32.6;Cet;;;;14.76;;;;;24.49;S0;;;;;;;;;;; +NGC0555;G;01:27:11.81;-22:45:43.8;Cet;0.74;0.69;15;15.19;;12.31;11.53;11.37;23.37;S0-a;;;;;;;;2MASX J01271185-2245439,ESO 476-012,ESO-LV 476-0120,MCG -04-04-014,PGC 005419;;; +NGC0556;G;01:27:12.61;-22:41:51.9;Cet;0.45;0.40;144;15.41;;12.95;12.26;11.93;22.59;E-S0;;;;;;;;2MASX J01271264-2241519,ESO 476-013,ESO-LV 476-0130,PGC 005420;;; +NGC0557;G;01:26:25.15;-01:38:19.4;Cet;1.45;0.47;136;14.48;;11.12;10.37;10.34;24.60;S0-a;;;;;;1703;;2MASX J01262516-0138195,MCG +00-04-144,PGC 005351,SDSS J012625.12-013819.2,UGC 01016;;; +NGC0558;G;01:27:16.17;-01:58:15.2;Cet;0.62;0.26;112;15.00;;12.03;11.37;11.17;23.00;E;;;;;;;;2MASX J01271617-0158150,PGC 005425;;; +NGC0559;OCl;01:29:33.17;+63:18:05.2;Cas;9.00;;;9.85;9.50;;;;;;;;;;;;;C 008,MWSC 0122;;; +NGC0560;G;01:27:25.42;-01:54:46.7;Cet;2.09;0.44;178;14.00;;10.76;10.03;9.74;24.11;S0;;;;;;;;2MASX J01272543-0154465,MCG +00-04-151,PGC 005430,UGC 01036;;; +NGC0561;G;01:28:18.76;+34:18:31.1;And;1.40;1.28;145;14.10;;11.18;10.40;10.08;23.44;Sa;;;;;;;;2MASX J01281877+3418313,IRAS 01254+3403,MCG +06-04-029,PGC 005489,UGC 01048;;; +NGC0562;G;01:28:29.26;+48:23:13.5;And;0.91;0.86;40;14.50;;11.47;10.82;10.51;22.99;Sc;;;;;;;;2MASX J01282924+4823133,IRAS 01254+4807,MCG +08-03-025,PGC 005502,UGC 01049;;; +NGC0563;Dup;01:25:21.73;-18:09:49.9;Cet;;;;;;;;;;;;;;;0539;;;;;; +NGC0564;G;01:27:48.21;-01:52:46.3;Cet;1.72;1.20;141;13.80;;10.54;9.89;9.60;23.55;E;;;;;;;;2MASX J01274822-0152465,MCG +00-04-154,PGC 005455,UGC 01044;;HOLM 044B is a star.; +NGC0565;G;01:28:10.18;-01:18:21.7;Cet;1.46;0.41;35;14.50;;11.17;10.45;10.16;23.50;Sa;;;;;;;;2MASX J01281017-0118215,MCG +00-04-158,PGC 005481,UGC 01052;;; +NGC0566;G;01:29:02.96;+32:19:56.1;Psc;1.21;0.32;179;14.60;;11.55;10.79;10.63;23.74;S0;;;;;;;;2MASX J01290294+3219559,MCG +05-04-062,PGC 005545,UGC 01058;;; +NGC0567;G;01:27:02.40;-10:15:54.9;Cet;1.21;0.45;127;14.00;;11.49;10.83;10.57;24.03;S0;;;;;;;;2MASX J01270240-1015550,MCG -02-04-053,PGC 005402,SDSS J012702.40-101554.8,SDSS J012702.40-101554.9;;; +NGC0568;G;01:27:57.01;-35:43:03.7;Scl;2.04;1.24;137;13.43;12.59;10.48;9.81;9.58;23.88;E-S0;;;;;;1709;;2MASX J01275699-3543039,ESO 353-003,ESO-LV 353-0030,MCG -06-04-037,PGC 005468;;; +NGC0569;G;01:29:07.16;+11:07:53.3;Psc;0.99;0.48;163;14.70;;12.06;11.46;11.22;22.92;Sbc;;;;;;;;2MASX J01290717+1107533,IRAS 01264+1052,MCG +02-04-053,PGC 005548,UGC 01063;;; +NGC0570;G;01:28:58.64;-00:56:56.4;Cet;1.62;1.09;166;14.20;;10.87;10.17;9.89;23.32;Sa;;;;;;;;2MASX J01285861-0056560,MCG +00-04-162,PGC 005539,SDSS J012858.63-005656.3,SDSS J012858.63-005656.4,SDSS J012858.64-005656.3,SDSS J012858.64-005656.4,UGC 01061;;; +NGC0571;G;01:29:55.98;+32:30:04.8;Psc;0.71;0.66;150;15.00;;12.84;12.31;11.84;23.09;Sbc;;;;;;;;2MASX J01295595+3230050,MCG +05-04-063,PGC 005587,UGC 01069;;; +NGC0572;G;01:28:36.42;-39:18:26.3;Scl;0.89;0.84;170;15.18;;11.77;10.97;10.74;23.51;S0-a;;;;;;;;2MASX J01283643-3918261,ESO 296-031,ESO-LV 296-0310,MCG -07-04-009,PGC 005508;;The APMUKS image includes two superposed stars.; +NGC0573;G;01:30:49.35;+41:15:26.3;And;0.39;0.33;120;13.50;;12.01;11.38;11.09;20.11;Sab;;;;;;;;2MASX J01304935+4115263,IRAS 01278+4100,PGC 005638,UGC 01078;;; +NGC0574;G;01:29:03.08;-35:35:56.1;Scl;1.15;0.83;24;14.17;;11.60;10.91;10.57;23.11;SBb;;;;;;;;2MASX J01290311-3535561,ESO 353-006,ESO-LV 353-0060,IRAS 01268-3551,MCG -06-04-039,PGC 005544;;; +NGC0575;G;01:30:46.64;+21:26:25.5;Psc;1.45;1.35;5;13.65;13.02;11.39;11.20;10.39;23.33;Sc;;;;;;1710;;2MASX J01304664+2126255,MCG +03-04-051,PGC 005634,UGC 01081;;; +NGC0576;G;01:28:57.67;-51:35:55.2;Phe;0.99;0.81;110;14.41;;11.75;11.05;10.71;23.08;S0-a;;;;;;;;2MASX J01285769-5135553,ESO 196-007,ESO-LV 196-0070,IRAS 01269-5151,PGC 005535;;; +NGC0577;G;01:30:40.71;-01:59:39.7;Cet;1.45;1.28;130;14.30;;10.86;10.16;9.88;23.54;Sa;;;;;0580;;;2MASX J01304069-0159396,MCG +00-04-165,PGC 005628,UGC 01080;;; +NGC0578;G;01:30:29.09;-22:40:02.5;Cet;4.82;2.92;114;11.72;10.93;9.46;8.94;8.59;23.28;Sc;;;;;;;;ESO 476-015,ESO-LV 476-0150,IRAS 01280-2255,MCG -04-04-020,PGC 005619,UGCA 018;;; +NGC0579;G;01:31:46.49;+33:36:56.0;Tri;1.08;0.85;160;13.60;;11.29;10.67;10.35;22.62;Sc;;;;;;;;2MASX J01314651+3336560,IRAS 01289+3321,MCG +05-04-064,PGC 005691,SDSS J013146.50+333655.9,UGC 01089;;; +NGC0580;Dup;01:30:40.71;-01:59:39.7;Cet;;;;;;;;;;;;;;;0577;;;;;; +NGC0581;OCl;01:33:21.81;+60:39:28.8;Cas;4.50;;;7.72;7.40;;;;;;;;;103;;;;MWSC 0124;;; +NGC0582;G;01:31:58.05;+33:28:35.5;Tri;2.07;0.49;58;13.70;;10.83;10.08;9.79;23.43;SBb;;;;;;;;2MASX J01315804+3328354,IRAS 01291+3313,MCG +05-04-065,PGC 005702,UGC 01094;;; +NGC0583;G;01:29:44.15;-18:20:21.9;Cet;0.72;0.66;30;15.15;;11.84;11.00;10.87;23.31;S0;;;;;;;;2MASX J01294418-1820218,ESO 542-020,ESO-LV 542-0200,MCG -03-04-077,PGC 005576;;; +NGC0584;G;01:31:20.75;-06:52:05.0;Cet;3.78;2.51;104;11.44;10.48;8.24;7.48;7.30;23.06;E;;;;;;1712;;2MASX J01312075-0652050,MCG -01-04-060,PGC 005663;;Position in 1996ApJS..106....1W is 12 arcsec south of the nucleus.; +NGC0585;G;01:31:42.14;-00:55:59.9;Cet;2.40;0.48;86;14.40;;10.48;9.68;9.37;24.10;SBa;;;;;;;;2MASX J01314210-0055584,IRAS 01291-0111,MCG +00-05-001,PGC 005688,SDSS J013142.11-005559.0,SDSS J013142.11-005559.1,SDSS J013142.13-005559.9,SDSS J013142.14-005559.9,UGC 01092;;; +NGC0586;G;01:31:36.85;-06:53:37.5;Cet;1.61;0.78;179;14.10;13.16;11.00;10.31;10.08;23.57;Sa;;;;;;;;2MASX J01313683-0653374,MCG -01-05-001,PGC 005679;;HOLM 045C is a star.; +NGC0587;G;01:32:33.33;+35:21:30.9;Tri;2.23;0.66;68;13.70;;10.78;10.12;9.82;23.42;SABb;;;;;;;;2MASX J01323331+3521307,MCG +06-04-037,PGC 005746,UGC 01100;;Sometimes identified as IC 1713, but that is a star.; +NGC0588;HII;01:32:45.94;+30:38:51.1;Tri;0.60;0.43;;14.40;14.44;;;;;;;;;;;;;IRAS 01299+3023;;H II region within boundaries of Messier 033.; +NGC0589;G;01:32:39.94;-12:02:33.7;Cet;0.76;0.65;87;15.00;;11.46;10.86;10.61;23.09;S0-a;;;;;;;;2MASX J01323992-1202340,MCG -02-05-004,PGC 005758;;; +NGC0590;G;01:33:40.92;+44:55:43.3;And;2.13;0.77;147;14.20;;10.26;9.54;9.24;24.00;SBa;;;;;;;;2MASX J01334092+4455432,MCG +07-04-003,PGC 005808,UGC 01109;;; +NGC0591;G;01:33:31.27;+35:40:05.7;And;1.43;1.14;0;14.71;13.90;11.02;10.34;10.06;23.58;S0-a;;;;;;;;2MASX J01333122+3540055,IRAS 01306+3524,MCG +06-04-038,PGC 005800,TYC 2305-1090-1,UGC 01111;;; +NGC0592;*Ass;01:33:11.69;+30:38:41.8;Tri;;;;;;;;;;;;;;;;;;;;Within boundaries of Messier 033; +NGC0593;G;01:32:20.76;-12:21:16.0;Cet;0.88;0.27;12;14.00;;12.14;11.50;11.23;23.98;S0-a;;;;;;;;2MASX J01322075-1221159,MCG -02-05-003,PGC 005733;;; +NGC0594;G;01:32:56.91;-16:32:09.6;Cet;1.24;0.65;28;14.20;;11.67;11.01;10.66;24.06;Sbc;;;;;;;;2MASX J01325691-1632097,IRAS 01305-1647,MCG -03-05-005,PGC 005769;;; +NGC0595;HII;01:33:33.83;+30:41:29.6;Tri;1.73;0.90;;;;;;;;;;;;;;;;;;; +NGC0596;G;01:32:52.08;-07:01:54.6;Cet;2.14;1.58;36;11.50;;8.87;8.19;7.98;22.36;E;;;;;;;;2MASX J01325190-0701535,MCG -01-05-005,PGC 005766;;; +NGC0597;G;01:32:14.85;-33:29:49.5;Scl;1.31;1.21;45;13.98;;11.98;11.33;10.94;23.19;SBbc;;;;;;;;2MASX J01321484-3329493,ESO 353-011,ESO-LV 353-0110,IRAS 01299-3345,MCG -06-04-044,PGC 005721;;Confused HIPASS source; +NGC0598;G;01:33:50.89;+30:39:36.8;Tri;62.09;36.73;23;6.27;5.72;5.04;4.35;4.10;23.61;Sc;;;;033;;;;2MASX J01335090+3039357,IRAS 01310+3024,MCG +05-04-069,PGC 005818,UGC 01117;Triangulum Galaxy,Triangulum Pinwheel;; +NGC0599;G;01:32:53.78;-12:11:28.5;Cet;1.53;1.16;128;13.00;;10.67;9.95;9.71;23.81;E-S0;;;;;;;;2MASX J01325375-1211287,MCG -02-05-005,PGC 005778,TYC 5279-454-1;;; +NGC0600;G;01:33:05.30;-07:18:41.1;Cet;2.63;2.56;25;13.10;;11.48;10.92;10.71;23.83;Scd;;;;;;;;2MASX J01330529-0718410,MCG -01-05-007,PGC 005777;;; +NGC0601;G;01:33:06.58;-12:12:31.5;Cet;0.40;0.38;25;16.00;;13.01;12.30;12.03;23.12;;;;;;;;;2MASX J01330657-1212317,PGC 073980;;; +NGC0602;OCl;01:29:26.36;-73:33:37.8;Hyi;3.20;2.90;90;;13.02;;;;;;;;;;;;;ESO 029-043;;; +NGC0603;Other;01:34:43.90;+30:13:55.1;Tri;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC0604;HII;01:34:33.19;+30:47:05.6;Tri;1.93;1.20;;;;;;;;;;;;;;;;IRAS 01317+3031;;SNR involved. See 1987A&A...174...28C.; +NGC0605;G;01:35:02.35;+41:14:53.3;And;1.32;0.56;148;14.30;;10.98;10.24;10.02;23.67;S0;;;;;;;;2MASX J01350235+4114533,MCG +07-04-004,PGC 005891,UGC 01128;;; +NGC0606;G;01:34:50.16;+21:25:06.4;Psc;1.01;0.77;137;14.50;;11.66;10.95;10.61;23.14;Sc;;;;;;;;2MASX J01345018+2125063,IRAS 01321+2109,MCG +03-05-010,PGC 005874,UGC 01126;;; +NGC0607;Other;01:34:16.37;-07:24:46.1;Cet;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC0608;G;01:35:28.24;+33:39:24.2;Tri;0.83;0.55;33;14.00;;10.88;10.20;9.94;22.42;S0-a;;;;;;;;2MASX J01352825+3339242,MCG +05-04-073,PGC 005913,UGC 01135;;; +NGC0609;OCl;01:36:23.74;+64:32:11.7;Cas;4.80;;;12.31;11.00;;;;;;;;;;;;;2MASX J01362623+6432172,MWSC 0128;;; +NGC0610;Other;01:34:18.00;-20:08:39.2;Cet;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC0611;Other;01:34:18.01;-20:07:39.2;Cet;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC0612;G;01:33:57.74;-36:29:35.7;Scl;1.49;1.34;160;13.90;13.15;10.69;9.91;9.58;23.63;S0-a;;;;;;;;2MASX J01335775-3629358,ESO 353-015,ESO-LV 353-0150,IRAS 01317-3644,MCG -06-04-046,PGC 005827;;; +NGC0613;G;01:34:18.17;-29:25:06.1;Scl;5.48;4.51;125;10.77;12.71;7.92;7.38;7.03;23.02;Sbc;;;;;;;;2MASX J01341823-2925065,ESO 413-011,ESO-LV 413-0110,IRAS 01319-2940,MCG -05-04-044,PGC 005849;;; +NGC0614;G;01:35:52.26;+33:40:54.8;Tri;1.52;1.44;120;13.90;;10.72;10.08;9.78;23.50;S0;;;;;0618,0627;;;2MASX J01355227+3340545,MCG +05-04-075,PGC 005933,UGC 01140;;"Identification as NGC 0618 is uncertain; NGC 0618 could be NGC 0608."; +NGC0615;G;01:35:05.68;-07:20:25.1;Cet;3.18;1.16;164;12.80;;9.51;8.86;8.56;22.98;Sb;;;;;;;;2MASX J01350567-0720250,IRAS 01325-0735,MCG -01-05-008,PGC 005897;;; +NGC0616;**;01:36:04.20;+33:46:12.8;Tri;;;;;;;;;;;;;;;;;;;;; +NGC0617;G;01:34:02.54;-09:46:26.9;Cet;0.59;0.52;4;15.16;14.70;12.80;12.16;11.94;22.94;Sab;;;;;;;;2MASX J01340253-0946274,MCG -02-05-007,PGC 005831,SDSS J013402.53-094626.9,SDSS J013402.54-094626.9;;; +NGC0618;Dup;01:35:52.26;+33:40:54.8;Tri;;;;;;;;;;;;;;;0614;;;;;; +NGC0619;G;01:34:51.79;-36:29:21.8;Scl;1.66;1.03;107;14.34;;11.25;10.68;10.31;23.65;SBb;;;;;;;;2MASX J01345179-3629217,ESO 353-021,ESO-LV 353-0210,MCG -06-04-051,PGC 005878;;; +NGC0620;G;01:36:59.68;+42:19:24.0;And;0.82;0.77;30;13.90;;11.90;11.33;11.02;22.36;Scd;;;;;;;;2MASX J01365967+4219240,IRAS 01340+4204,MCG +07-04-006,PGC 005990,UGC 01150;;; +NGC0621;G;01:36:49.06;+35:30:43.9;Tri;1.12;1.06;105;14.20;;10.69;9.95;9.71;23.23;S0;;;;;;;;2MASX J01364904+3530440,MCG +06-04-045,PGC 005984,UGC 01147;;; +NGC0622;G;01:36:00.16;+00:39:48.7;Cet;1.30;0.83;55;13.96;13.30;11.41;10.76;10.41;23.17;Sb;;;;;;;;2MASX J01360013+0039481,IRAS 01334+0024,MCG +00-05-014,PGC 005939,SDSS J013600.15+003948.6,SDSS J013600.15+003948.7,SDSS J013600.16+003948.7,UGC 01143;;; +NGC0623;G;01:35:06.39;-36:29:24.8;Scl;1.94;1.46;87;13.60;;10.56;9.83;9.59;23.84;E;;;;;;;;2MASX J01350638-3629248,ESO 353-023,ESO-LV 353-0230,MCG -06-04-052,PGC 005898;;; +NGC0624;G;01:35:51.09;-10:00:10.7;Cet;1.30;0.67;91;14.20;;11.45;10.74;10.47;23.05;SBb;;;;;;;;2MASX J01355106-1000105,MCG -02-05-010,PGC 005932,SDSS J013551.08-100010.6,SDSS J013551.09-100010.7;;; +NGC0625;G;01:35:04.63;-41:26:10.3;Phe;6.55;2.05;92;11.78;11.25;9.66;9.09;8.90;23.43;SBm;;;;;;;;2MASX J01350463-4126103,ESO 297-005,ESO-LV 297-0050,IRAS 01329-4141,MCG -07-04-017,PGC 005896;;; +NGC0626;G;01:35:12.08;-39:08:45.8;Scl;1.44;1.30;30;13.41;;11.02;10.28;10.07;22.90;Sc;;;;;;;;2MASX J01351206-3908457,ESO 297-006,ESO-LV 297-0060,MCG -07-04-018,PGC 005901;;; +NGC0627;Dup;01:35:52.26;+33:40:54.8;Tri;;;;;;;;;;;;;;;0614;;;;;; +NGC0628;G;01:36:41.75;+15:47:01.2;Psc;9.89;9.33;87;10.00;9.46;7.63;7.04;6.85;23.37;Sc;;;;074;;;;2MASX J01364177+1547004,IRAS 01340+1532,MCG +03-05-011,PGC 005974,UGC 01149;;; +NGC0629;Other;01:38:58.54;+72:52:01.5;Cas;;;;;;;;;;;;;;;;;;;;Five Galactic stars.; +NGC0630;G;01:35:36.48;-39:21:28.2;Scl;1.90;1.40;54;13.57;;10.41;9.70;9.49;23.74;E-S0;;;;;;;;2MASX J01353647-3921283,ESO 297-009,ESO-LV 297-0090,MCG -07-04-020,PGC 005924;;; +NGC0631;G;01:36:47.06;+05:50:07.3;Psc;0.93;0.83;135;15.00;;11.50;10.91;10.51;23.63;E;;;;;;;;2MASX J01364707+0550074,MCG +01-05-007,PGC 005983,UGC 01153;;; +NGC0632;G;01:37:17.53;+05:52:39.5;Psc;0.99;0.86;168;13.50;;11.11;10.39;10.10;22.27;S0-a;;;;;;;;2MASX J01371753+0552389,IRAS 01346+0537,MCG +01-05-010,PGC 006007,SDSS J013717.56+055238.4,UGC 01157;;; +NGC0633;G;01:36:23.40;-37:19:17.6;Scl;1.10;0.95;178;13.50;;11.15;10.36;10.04;22.37;SBb;;;;;;;;2MASX J01362341-3719176,ESO 297-011,ESO-LV 297-0110,MCG -06-04-056,PGC 005960;;; +NGC0634;G;01:38:18.66;+35:21:53.4;Tri;1.77;0.61;167;14.00;;10.76;10.03;9.73;23.35;Sa;;;;;;;;2MASX J01381867+3521534,MCG +06-04-048,PGC 006059,UGC 01164;;; +NGC0635;G;01:38:17.86;-22:55:44.1;Cet;0.60;0.53;129;15.55;;12.60;11.93;11.54;22.76;Sbc;;;;;;;;2MASX J01381784-2255440,IRAS 01359-2310,MCG -04-05-002,PGC 006062;;; +NGC0636;G;01:39:06.53;-07:30:45.4;Cet;2.70;2.30;6;12.50;;9.32;8.67;8.44;23.38;E;;;;;;;;2MASX J01390652-0730453,MCG -01-05-013,PGC 006110;;; +NGC0637;OCl;01:43:03.11;+64:02:11.6;Cas;4.50;;;8.56;8.20;;;;;;;;;;;;;MWSC 0133;;; +NGC0638;G;01:39:37.85;+07:14:14.4;Psc;0.94;0.62;18;14.40;;11.92;11.36;10.90;23.06;E?;;;;;;;;2MASX J01393785+0714144,IRAS 01370+0659,MCG +01-05-014,PGC 006145,UGC 01170;;; +NGC0639;G;01:38:59.05;-29:55:31.2;Scl;1.04;0.30;32;14.67;;12.32;11.61;11.32;22.94;Sa;;;;;;;;ESO 413-013,ESO-LV 413-0130,MCG -05-05-002,PGC 006105;;; +NGC0640;G;01:39:24.88;-09:24:04.2;Cet;0.76;0.43;147;15.00;;12.88;12.28;11.86;23.25;SBa;;;;;;;;2MASX J01392485-0924042,MCG -02-05-031,PGC 006130,SDSS J013924.88-092404.2;;; +NGC0641;G;01:38:39.23;-42:31:39.1;Phe;1.82;1.68;80;13.34;;10.18;9.53;9.26;23.28;E;;;;;;;;2MASX J01383922-4231391,ESO 244-042,ESO-LV 244-0420,MCG -07-04-026,PGC 006081;;; +NGC0642;G;01:39:06.33;-29:54:53.6;Scl;1.80;1.09;18;13.58;;11.20;10.76;10.29;23.06;SBc;;;;;;;;2MASX J01390634-2954534,ESO 413-014,ESO-LV 413-0140,IRAS 01367-3010,MCG -05-05-003,PGC 006112;;The APM position is 8 arcsec north of nucleus.; +NGC0643;OCl;01:35:01.43;-75:33:24.7;Hyi;2.20;2.20;;;;12.97;12.29;11.99;;;;;;;;;;2MASX J01350142-7533250,ESO 029-050;;In the Small Magellanic Cloud.; +NGC0643A;OCl;01:30:38.49;-76:03:16.2;Hyi;;;;;;;;;;;;;;;;;;;;In the Small Magellanic Cloud.; +NGC0643B;G;01:39:12.73;-75:00:40.0;Hyi;1.75;0.47;116;14.61;;11.30;10.49;10.10;24.39;S0-a;;;;;;;;2MASX J01391285-7500392,ESO 029-053,ESO-LV 29-0530,IRAS 01384-7515,PGC 006117,TYC 9348-1106-1;;; +NGC0643C;G;01:41:49.13;-75:16:05.2;Hyi;1.40;0.23;153;15.70;;12.60;11.82;11.55;23.64;Sc;;;;;;;;2MASX J01414909-7516052,ESO 030-001,ESO-LV 30-0010,PGC 006256;;; +NGC0644;G;01:38:52.96;-42:35:07.0;Phe;1.30;0.68;154;14.79;;12.00;11.36;10.97;23.45;SBc;;;;;;;;2MASX J01385297-4235071,ESO 244-043,ESO-LV 244-0430,IRAS 01367-4250,MCG -07-04-027,PGC 006097;;; +NGC0645;G;01:40:08.70;+05:43:36.1;Psc;2.29;0.68;120;13.80;;11.02;10.52;10.17;23.42;Sb;;;;;;;;2MASX J01400869+0543361,IRAS 01375+0528,MCG +01-05-016,PGC 006172,UGC 01177;;; +NGC0646;GPair;01:37:25.50;-64:53:47.0;Hyi;1.51;1.02;121;14.37;;;;;;;;;;;;;;ESO 080-002,IRAS 01357-6508,PGC 006010;;; +NGC0646 NED01;G;01:37:21.12;-64:53:41.5;Hyi;1.23;0.97;127;14.24;;12.20;11.42;11.09;23.15;SBc;;;;;;;;2MASX J01372109-6453416,ESO-LV 80-0020,PGC 3442014;;; +NGC0646 NED02;G;01:37:29.89;-64:53:46.6;Hyi;0.60;0.45;64;15.65;;12.97;12.27;11.71;22.53;E-S0;;;;;;;;2MASX J01372989-6453466,ESO-LV 80-0021,PGC 006014;;; +NGC0647;G;01:39:56.19;-09:14:32.6;Cet;1.27;0.98;19;15.00;;;;;23.57;S0;;;;;;;;MCG -02-05-033,PGC 006155,SDSS J013956.19-091432.6;;; +NGC0648;G;01:38:39.79;-17:49:52.3;Cet;1.09;0.63;118;16.33;;11.41;10.64;10.32;23.59;E-S0;;;;;;0146;;2MASX J01383980-1749525,ESO 543-006,MCG -03-05-011,PGC 006083;;; +NGC0649;G;01:40:07.45;-09:16:19.6;Cet;1.07;0.39;22;14.69;;12.44;11.92;11.65;23.71;Sa;;;;;;;;2MASX J01400745-0916196,MCG -02-05-034,PGC 006169,SDSS J014007.45-091619.5,SDSS J014007.45-091619.6;;; +NGC0650;PN;01:42:19.69;+51:34:31.7;Per;1.12;;;12.20;10.10;;;;;;;;17.48;076;0651;;;2MASX J01421808+5134243,IRAS 01391+5119,PN G130.9-10.5;Barbell Nebula,Cork Nebula,Little Dumbbell Nebula;The 2MASX position is centered on a superposed star.; +NGC0651;Dup;01:42:19.69;+51:34:31.7;Per;;;;;;;;;;;;;;;0650;;;;;; +NGC0652;G;01:40:43.28;+07:58:58.5;Psc;0.94;0.51;52;14.70;;11.99;11.31;11.07;23.14;Sab;;;;;;;;2MASX J01404337+0758589,IRAS 01380+0743,MCG +01-05-017,PGC 006208,UGC 01184;;; +NGC0653;G;01:42:25.74;+35:38:18.0;And;1.49;0.23;40;14.10;;11.06;10.33;10.00;22.69;Sab;;;;;;;;2MASX J01422571+3538180,MCG +06-04-058,PGC 006290,UGC 01193;;; +NGC0654;OCl;01:43:59.43;+61:52:57.8;Cas;6.30;;;7.34;6.50;;;;;;;;;;;;;MWSC 0137;;; +NGC0655;G;01:41:55.13;-13:04:54.3;Cet;1.12;0.65;88;14.00;;11.77;11.04;10.79;23.83;S0;;;;;;;;2MASX J01415514-1304541,MCG -02-05-037,PGC 006262;;; +NGC0656;G;01:42:27.24;+26:08:35.0;Psc;1.27;1.08;32;13.50;;10.75;10.05;9.73;22.88;S0;;;;;;;;2MASX J01422722+2608350,MCG +04-05-002,PGC 006293,UGC 01194;;; +NGC0657;OCl;01:43:20.80;+55:50:11.0;Cas;3.00;;;;;;;;;;;;;;;;;MWSC 0135;;; +NGC0658;G;01:42:09.66;+12:36:06.8;Psc;1.48;0.89;21;13.60;;10.79;10.10;9.75;22.55;Sb;;;;;;;;2MASX J01420965+1236069,IRAS 01394+1220,MCG +02-05-009,PGC 006275,UGC 01192;;; +NGC0659;OCl;01:44:22.99;+60:40:09.0;Cas;4.20;;;8.40;7.90;;;;;;;;;;;;;MWSC 0138;;; +NGC0660;G;01:43:02.40;+13:38:42.2;Psc;4.57;1.69;13;12.02;11.16;8.53;7.72;7.34;23.50;Sa;;;;;;;;2MASX J01430234+1338444,IRAS 01403+1323,MCG +02-05-013,PGC 006318,SDSS J014302.39+133842.2,SDSS J014302.40+133842.2,SDSS J014302.41+133842.1,UGC 01201;;; +NGC0661;G;01:44:14.62;+28:42:21.3;Tri;1.91;1.40;56;13.00;;10.22;9.53;9.26;23.43;E;;;;;;;;2MASX J01441463+2842215,MCG +05-05-005,PGC 006376,UGC 01215;;; +NGC0662;G;01:44:35.45;+37:41:44.8;And;0.81;0.55;13;14.45;13.84;11.85;11.17;10.80;22.62;Sb;;;;;;;;2MASX J01443544+3741447,IRAS 01416+3726,MCG +06-04-060,PGC 006393,UGC 01220;;; +NGC0663;OCl;01:46:16.05;+61:13:05.5;Cas;6.00;;;7.78;7.10;;;;;;;;;;;;;C 010,MWSC 0139;;; +NGC0664;G;01:43:45.81;+04:13:22.4;Psc;1.19;0.93;70;13.90;;11.29;10.59;10.30;22.82;Sb;;;;;;;;2MASX J01434582+0413222,IRAS 01411+0358,MCG +01-05-029,PGC 006359,SDSS J014345.79+041322.7,UGC 01210;;; +NGC0665;G;01:44:56.10;+10:25:22.9;Psc;1.62;0.95;119;13.50;;9.85;9.05;8.88;22.95;S0;;;;;;;;2MASX J01445609+1025230,MCG +02-05-019,PGC 006415,UGC 01223;;87GB source with large sky, narrow minor axis, or very bad confusion.; +NGC0666;G;01:46:06.20;+34:22:28.3;Tri;0.77;0.52;81;13.60;;11.26;10.62;10.37;22.55;E;;;;;;;;2MASX J01460620+3422283,MCG +06-05-002,PGC 006483,UGC 01236;;; +NGC0667;G;01:44:56.68;-22:55:08.2;Cet;0.71;0.57;83;15.23;;12.43;11.58;11.22;23.40;S0;;;;;;;;2MASX J01445670-2255082,ESO 477-002,ESO-LV 477-0020,PGC 006418;;; +NGC0668;G;01:46:22.67;+36:27:37.1;And;1.20;0.82;32;13.50;;11.05;10.39;10.10;22.60;Sb;;;;;;;;2MASX J01462268+3627369,IRAS 01434+3612,MCG +06-05-003,PGC 006502,UGC 01238;;; +NGC0669;G;01:47:16.15;+35:33:47.9;And;2.34;0.57;36;12.90;;9.89;9.13;8.83;23.14;Sab;;;;;;;;2MASX J01471616+3533478,IRAS 01443+3519,MCG +06-05-004,PGC 006560,UGC 01248;;; +NGC0670;G;01:47:24.85;+27:53:08.7;Tri;2.18;0.74;171;13.53;12.72;10.44;9.68;9.45;23.85;S0;;;;;;;;2MASX J01472484+2753085,IRAS 01446+2738,MCG +05-05-012,PGC 006570,UGC 01250;;; +NGC0671;G;01:46:59.17;+13:07:30.4;Ari;1.08;0.43;56;14.17;16.71;11.45;10.77;10.43;22.89;Sa;;;;;;;;2MASX J01465914+1307303,IRAS 01443+1252,MCG +02-05-029,PGC 006546,SDSS J014659.12+130730.5,SDSS J014659.14+130730.4,SDSS J014659.17+130730.4,SDSS J014659.18+130730.4,UGC 01247;;; +NGC0672;G;01:47:54.52;+27:25:58.0;Tri;7.01;2.71;69;11.60;11.09;9.37;8.76;8.51;23.58;SBc;;;;;;;;2MASX J01475452+2725580,IRAS 01450+2710,MCG +04-05-011,PGC 006595,UGC 01256;;; +NGC0673;G;01:48:22.44;+11:31:16.7;Ari;1.77;1.30;1;13.30;;10.54;9.82;9.58;22.94;SABc;;;;;;;;2MASX J01482246+1131176,IRAS 01457+1116,MCG +02-05-033,PGC 006624,SDSS J014822.45+113117.5,UGC 01259;;; +NGC0674;G;01:51:17.57;+22:21:28.7;Ari;3.81;1.26;105;12.70;;9.52;8.81;8.49;23.54;SABc;;;;;0697;;;2MASX J01511756+2221286,IRAS 01485+2206,MCG +04-05-022,PGC 006848,UGC 01317;;; +NGC0675;G;01:49:08.61;+13:03:35.6;Ari;1.04;0.44;101;15.50;;11.99;11.20;10.91;23.88;Sa;;;;;;;;2MASX J01490857+1303354,IRAS 01464+1249,MCG +02-05-041,PGC 006665,SDSS J014908.60+130335.6,UGC 01273;;Multiple SDSS entries describe this object.; +NGC0676;G;01:48:57.31;+05:54:27.1;Psc;2.75;0.69;173;;12.00;;;;21.29;S0-a;;;;;;;;MCG +01-05-034,PGC 006656,UGC 01270;;; +NGC0677;G;01:49:14.06;+13:03:19.3;Ari;1.81;1.81;35;14.30;;10.32;9.62;9.29;23.42;E;;;;;;;;2MASX J01491406+1303188,MCG +02-05-042,PGC 006673,SDSS J014914.03+130319.2,SDSS J014914.04+130319.2,SDSS J014914.05+130319.2,SDSS J014914.06+130319.2,SDSS J014914.06+130319.3,UGC 01275;;; +NGC0678;G;01:49:24.86;+21:59:50.3;Ari;3.08;0.77;78;13.30;;9.63;8.93;8.70;23.61;SBb;;;;;;;;2MASX J01492485+2159502,MCG +04-05-014,PGC 006690,UGC 01280;;; +NGC0679;G;01:49:43.78;+35:47:08.3;And;1.32;1.00;85;13.10;;10.11;9.37;9.14;22.88;E-S0;;;;;;;;2MASX J01494379+3547083,MCG +06-05-012,PGC 006711,UGC 01283;;; +NGC0680;G;01:49:47.29;+21:58:15.1;Ari;1.69;1.56;160;13.00;;9.71;9.00;8.73;22.92;E;;;;;;;;2MASX J01494728+2158149,MCG +04-05-015,PGC 006719,UGC 01286;;; +NGC0681;G;01:49:10.83;-10:25:35.1;Cet;2.47;1.77;66;12.50;;9.63;8.98;8.65;23.27;SABa;;;;;;;;2MASX J01491084-1025355,IRAS 01467-1040,MCG -02-05-052,PGC 006671,SDSS J014910.82-102535.1,SDSS J014910.83-102535.3,SDSS J014910.84-102535.3;;Confused HIPASS source; +NGC0682;G;01:49:04.60;-14:58:29.4;Cet;0.74;0.25;115;13.00;;10.47;9.84;9.44;22.16;E-S0;;;;;;;;2MASX J01490460-1458295,MCG -03-05-022,PGC 006663;;; +NGC0683;G;01:49:46.69;+11:42:04.7;Ari;0.66;0.60;50;14.80;;12.34;11.76;11.38;22.75;Sb;;;;;;;;2MASX J01494670+1142048,IRAS 01471+1127,MCG +02-05-047,PGC 006718,UGC 01288;;; +NGC0684;G;01:50:14.02;+27:38:44.4;Tri;2.95;0.82;90;13.20;;9.88;9.09;8.79;23.55;Sb;;;;;;0165;;2MASX J01501400+2738444,IRAS 01474+2724,MCG +04-05-017,PGC 006759,UGC 01292;;The UZC position is 14 arcsec off the nucleus.; +NGC0685;G;01:47:42.81;-52:45:42.5;Eri;3.01;2.30;62;12.02;;10.14;9.55;9.19;22.80;Sc;;;;;;;;2MASX J01474280-5245423,ESO 152-024,ESO-LV 152-0240,IRAS 01458-5300,PGC 006581;;; +NGC0686;G;01:48:56.14;-23:47:53.3;Cet;1.34;1.06;5;13.37;;10.17;9.50;9.24;22.77;E-S0;;;;;;;;2MASX J01485612-2347535,ESO 477-006,ESO-LV 477-0060,MCG -04-05-008,PGC 006655;;; +NGC0687;G;01:50:33.24;+36:22:14.9;And;1.27;1.16;90;13.30;13.33;10.21;9.48;9.24;22.85;S0;;;;;;;;2MASX J01503324+3622147,MCG +06-05-014,PGC 006782,UGC 01298;;; +NGC0688;G;01:50:44.18;+35:17:04.3;Tri;0.89;0.38;153;13.30;;11.15;10.49;10.25;21.25;Sb;;;;;;;;2MASX J01504419+3517041,IRAS 01478+3502,MCG +06-05-015,PGC 006799,UGC 01302;;; +NGC0689;G;01:49:51.77;-27:27:59.8;For;1.07;0.66;70;14.56;;11.35;10.59;10.27;23.08;SABa;;;;;;;;2MASX J01495176-2728000,ESO 414-005,ESO-LV 414-0050,IRAS 01475-2742,MCG -05-05-019,PGC 006724;;; +NGC0690;G;01:47:48.08;-16:43:19.2;Cet;1.10;0.70;158;14.41;;13.59;13.78;13.29;23.41;SABc;;;;;;;;2MASX J01474807-1643198,MCG -03-05-021,PGC 006587;;; +NGC0691;G;01:50:41.72;+21:45:35.7;Ari;2.68;1.85;92;13.50;;9.68;8.99;8.82;22.88;Sbc;;;;;;;;2MASX J01504172+2145356,IRAS 01479+2130,MCG +04-05-019,PGC 006793,SDSS J015041.70+214535.9,UGC 01305;;; +NGC0692;G;01:48:41.99;-48:38:54.6;Phe;1.95;1.41;84;13.06;;10.33;9.68;9.35;23.04;Sbc;;;;;;;;2MASX J01484201-4838542,ESO 197-003,ESO-LV 197-0030,IRAS 01467-4853,PGC 006642;;; +NGC0693;G;01:50:30.85;+06:08:42.8;Psc;2.11;1.09;106;13.24;12.44;10.23;9.70;9.23;23.41;S0-a;;;;;;;;2MASX J01503084+0608427,IRAS 01479+0553,MCG +01-05-035,PGC 006778,UGC 01304;;; +NGC0694;G;01:50:58.49;+21:59:51.0;Ari;0.57;0.34;163;13.90;;11.87;11.21;10.93;21.83;S0;;;;;;;;2MASX J01505849+2159511,IRAS 01481+2144,MCG +04-05-020,PGC 006816,UGC 01310;;; +NGC0695;G;01:51:14.24;+22:34:56.5;Ari;0.48;0.42;51;13.70;;11.41;10.64;10.26;20.92;S0;;;;;;;;2MASX J01511437+2234561,IRAS 01484+2220,PGC 006844,UGC 01315;;; +NGC0696;G;01:49:31.26;-34:54:18.6;For;1.80;0.72;25;14.37;;11.06;10.33;10.07;24.34;S0-a;;;;;;;;2MASX J01493128-3454187,ESO 353-050,ESO-LV 353-0500,MCG -06-05-004,PGC 006695;;; +NGC0697;Dup;01:51:17.57;+22:21:28.7;Ari;;;;;;;;;;;;;;;0674;;;;;; +NGC0698;G;01:49:43.70;-34:49:51.9;For;0.93;0.79;170;14.78;;12.32;11.77;11.37;23.25;Sab;;;;;;;;2MASX J01494371-3449517,ESO 353-051,ESO-LV 353-0510,MCG -06-05-005,PGC 006710;;; +NGC0699;G;01:50:43.68;-12:02:08.4;Cet;1.40;0.37;132;14.00;;12.07;11.32;10.97;23.38;SBbc;;;;;;;;2MASX J01504368-1202082,IRAS 01482-1217,MCG -02-05-059,PGC 006798;;; +NGC0700;G;01:52:16.84;+36:02:12.2;And;0.48;0.40;41;15.50;;12.25;11.43;11.21;22.84;S0;;;;;;;;2MASX J01521683+3602122,PGC 006928;;; +NGC0701;G;01:51:03.84;-09:42:09.4;Cet;2.24;1.11;49;12.80;;10.08;9.46;9.17;22.73;SBc;;;;;;;;2MASX J01510384-0942093,IRAS 01485-0957,MCG -02-05-060,PGC 006826;;HOLM 047B is a star.; +NGC0702;GPair;01:51:18.80;-04:03:07.0;Cet;1.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC0702 NED01;G;01:51:18.39;-04:02:57.0;Cet;0.38;0.17;95;;;15.15;14.46;14.44;;;;;;;;;;2MASX J01511833-0402567;;; +NGC0702 NED02;G;01:51:19.19;-04:03:21.4;Cet;1.03;0.72;136;17.63;;11.15;10.46;10.24;22.48;SBbc;;;;;;;;IRAS 01487-0418,MCG -01-05-043,PGC 006852;;; +NGC0703;G;01:52:39.60;+36:10:17.1;And;0.99;0.69;48;14.50;;10.95;10.13;9.88;23.05;E-S0;;;;;;;;2MASX J01523960+3610172,MCG +06-05-029,PGC 006957,UGC 01346;;; +NGC0704A;G;01:52:39.98;+36:07:15.4;And;0.55;0.39;105;;;15.04;15.00;13.88;;;;;;;;;;2MASX J01524001+3607152,MCG +06-05-028 NED01,UGC 01343 NED01;;; +NGC0704B;G;01:52:37.70;+36:07:36.5;And;1.10;0.69;139;14.10;;11.31;10.70;10.38;23.26;E-S0;;;;;0704;;;2MASX J01523770+3607362,MCG +06-05-028 NED02,PGC 006953,UGC 01343 NED02;;; +NGC0705;G;01:52:41.52;+36:08:38.4;And;1.44;0.69;112;14.50;;;;;23.89;S0-a;;;;;;;;MCG +06-05-030,PGC 006958,UGC 01345;;; +NGC0706;G;01:51:50.53;+06:17:48.8;Psc;1.29;1.06;153;13.20;12.50;10.50;9.82;9.52;22.35;Sc;;;;;;;;2MASX J01515052+0617487,IRAS 01492+0602,MCG +01-05-040,PGC 006897,SDSS J015150.51+061748.7,UGC 01334;;; +NGC0707;G;01:51:27.10;-08:30:19.3;Cet;1.31;0.73;82;14.00;;11.29;10.59;10.40;23.89;E-S0;;;;;;;;2MASX J01512708-0830193,MCG -02-05-063,PGC 006861,SDSS J015127.09-083019.2,SDSS J015127.09-083019.3,SDSS J015127.10-083019.3;;; +NGC0708;G;01:52:46.48;+36:09:06.6;And;2.56;1.23;38;14.27;13.29;9.60;8.69;8.57;24.62;E;;;;;;;;2MASX J01524648+3609065,MCG +06-05-031,PGC 006962,UGC 01348;;; +NGC0709;G;01:52:50.62;+36:13:24.4;And;0.72;0.36;128;15.20;;12.08;11.34;11.07;23.24;E-S0;;;;;;;;2MASX J01525060+3613245,PGC 006969;;; +NGC0710;G;01:52:53.94;+36:03:10.4;And;1.04;0.67;29;14.30;;11.70;11.13;10.86;22.73;Sc;;;;;;;;2MASX J01525392+3603095,IRAS 01499+3548,MCG +06-05-033,PGC 006972,UGC 01349;;; +NGC0711;G;01:52:27.76;+17:30:45.6;Ari;1.10;0.48;17;14.50;;11.18;10.53;10.23;23.55;S0;;;;;;;;2MASX J01522780+1730450,MCG +03-05-024,PGC 006940,UGC 01342;;; +NGC0712;G;01:53:08.44;+36:49:11.5;And;1.08;0.71;83;13.90;;10.42;9.74;9.43;22.98;S0;;;;;;;;2MASX J01530843+3649115,MCG +06-05-035,PGC 006988,UGC 01352;;; +NGC0713;G;01:55:21.53;-09:05:01.5;Cet;1.15;0.28;95;15.00;;12.24;11.55;11.26;23.29;Sb;;;;;;;;2MASX J01552155-0905012,MCG -02-05-075,PGC 007161,SDSS J015521.53-090501.5;;; +NGC0714;G;01:53:29.65;+36:13:16.7;And;1.46;0.35;111;13.90;;10.57;9.86;9.61;23.38;S0-a;;;;;;;;2MASX J01532965+3613167,MCG +06-05-037,PGC 007009,UGC 01358;;; +NGC0715;G;01:53:12.52;-12:52:22.2;Cet;0.88;0.36;177;15.00;;12.17;11.56;11.21;22.81;Sb;;;;;;;;2MASX J01531252-1252221,MCG -02-05-069,PGC 006991;;; +NGC0716;G;01:52:59.68;+12:42:30.5;Ari;1.31;0.52;59;14.00;;10.71;9.95;9.68;22.94;Sa;;;;;;1743;;2MASX J01525968+1242305,IRAS 01503+1227,MCG +02-05-054,PGC 006982,SDSS J015259.68+124230.4,UGC 01351;;; +NGC0717;G;01:53:55.11;+36:13:45.9;And;1.31;0.23;115;14.70;;11.44;10.62;10.43;23.82;S0-a;;;;;;;;2MASX J01535510+3613460,MCG +06-05-041,PGC 007033,UGC 01363;;; +NGC0718;G;01:53:13.30;+04:11:45.0;Psc;2.75;2.46;36;12.52;11.67;9.64;8.99;8.74;23.43;Sa;;;;;;;;2MASX J01531331+0411453,IRAS 01506+0357,MCG +01-05-041,PGC 006993,UGC 01356;;; +NGC0719;G;01:53:38.84;+19:50:25.5;Ari;1.01;0.71;157;14.70;;11.08;10.37;10.04;23.61;S0;;;;;;1744;;2MASX J01533886+1950258,MCG +03-05-026,PGC 007019,UGC 01360;;; +NGC0720;G;01:53:00.50;-13:44:19.2;Cet;4.49;2.37;142;12.40;;8.18;7.51;7.27;23.23;E;;;;;;;;2MASX J01530052-1344192,MCG -02-05-068,PGC 006983;;; +NGC0721;G;01:54:45.46;+39:23:00.7;And;1.40;0.83;124;13.80;;11.48;10.75;10.44;23.22;Sbc;;;;;;;;2MASX J01544546+3923006,MCG +06-05-043,PGC 007097,UGC 01376;;; +NGC0722;G;01:54:46.95;+20:41:53.6;Ari;1.13;0.47;137;14.60;;11.26;10.55;10.33;23.08;Sb;;;;;;;;2MASX J01544693+2041537,MCG +03-05-032,PGC 007098,UGC 01379;;; +NGC0723;G;01:53:45.68;-23:45:27.9;Cet;1.34;1.04;135;13.25;;11.11;10.54;10.30;22.65;Sbc;;;;;0724;;;2MASX J01534567-2345279,ESO 477-013,ESO-LV 477-0130,IRAS 01514-2400,MCG -04-05-016,PGC 007024;;; +NGC0724;Dup;01:53:45.68;-23:45:27.9;Cet;;;;;;;;;;;;;;;0723;;;;;; +NGC0725;G;01:52:35.49;-16:31:04.1;Cet;0.89;0.55;77;14.00;;12.35;11.70;11.26;23.07;Sc;;;;;;;;2MASX J01523548-1631041,IRAS 01500-1647,MCG -03-05-025,PGC 006950;;; +NGC0726;G;01:55:31.87;-10:47:59.3;Cet;1.08;0.44;104;14.27;;13.47;12.74;12.11;23.06;SBd;;;;;;;;2MASX J01553187-1047591,MCG -02-06-003,PGC 007182;;; +NGC0727;G;01:53:49.38;-35:51:22.2;For;1.18;0.62;74;14.95;;11.85;11.07;10.93;23.56;Sab;;;;;0729;;;2MASX J01534938-3551222,ESO 354-010,ESO-LV 354-0100,MCG -06-05-012,PGC 007027;;; +NGC0728;Other;01:55:01.44;+04:13:21.3;Psc;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC0729;Dup;01:53:49.38;-35:51:22.2;For;;;;;;;;;;;;;;;0727;;;;;; +NGC0730;*;01:55:18.00;+05:38:11.0;Psc;;;;;;;;;;;;;;;;;;;;; +NGC0731;G;01:54:56.21;-09:00:38.9;Cet;1.70;1.50;156;13.46;;10.07;9.42;9.19;23.09;E;;;;;0757;;;2MASX J01545624-0900391,MCG -02-05-073,PGC 007118,SDSS J015456.20-090038.8;;; +NGC0732;G;01:56:27.71;+36:48:08.0;And;0.98;0.57;12;14.90;;;;;23.65;S0;;;;;;;;IRAS 01535+3633,MCG +06-05-057,PGC 007270,UGC 01406;;; +NGC0733;*;01:56:33.89;+33:03:19.1;Tri;;;;15.80;;14.42;14.02;13.96;;;;;;;;;;2MASS J01563394+3303181;;; +NGC0734;G;01:53:28.74;-16:59:44.5;Cet;0.75;0.40;60;15.36;;12.69;12.12;11.62;23.07;SBab;;;;;;;;2MASX J01532872-1659442,PGC170023;;; +NGC0735;G;01:56:37.98;+34:10:36.4;Tri;1.60;0.41;136;13.90;;11.11;10.49;10.23;22.91;Sb;;;;;;;;2MASX J01563802+3410366,MCG +06-05-058,PGC 007275,PGC 007282,UGC 01411;;GSC 2315-0156 (V=14.1) superposed 20 arcsec northwest of nucleus.; +NGC0736;G;01:56:40.87;+33:02:36.6;Tri;1.83;1.64;130;13.60;;10.06;9.36;9.07;23.34;E;;;;;;;;2MASX J01564087+3302366,MCG +05-05-028,PGC 007289,UGC 01414;;; +NGC0737;Other;01:56:40.80;+33:02:56.1;Tri;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC0738;G;01:56:45.69;+33:03:30.0;Tri;0.35;0.31;;15.50;;;;;22.41;S0;;;;;;;;PGC 007303;;; +NGC0739;G;01:56:54.69;+33:16:00.1;Tri;0.81;0.52;133;14.80;;12.03;11.38;11.00;23.31;S0-a;;;;;;;;2MASX J01565464+3315596,MCG +05-05-030,PGC 007312;;The identification as NGC 739 is certain.; +NGC0740;G;01:56:54.87;+33:00:54.6;Tri;1.57;0.34;138;14.90;;11.88;11.06;10.88;23.55;SBb;;;;;;;;2MASX J01565486+3300546,MCG +05-05-031,PGC 007316,UGC 01421;;; +NGC0741;G;01:56:21.03;+05:37:44.2;Psc;2.83;2.33;93;13.20;;9.20;8.54;8.30;23.43;E;;;;;;1751;;2MASX J01562095+0537437,MCG +01-06-003,PGC 007252,UGC 01413;;; +NGC0742;G;01:56:24.17;+05:37:36.1;Psc;0.19;0.19;;14.80;;;;;20.20;E-S0;;;;;;;;MCG +01-06-004,PGC 007264,UGC 01413 NOTES03;;UGC says 'superimposed on preceding part of UGC 01413'.; +NGC0743;OCl;01:58:31.29;+60:09:58.7;Cas;5.40;;;;;;;;;;;;;;;;;MWSC 0154;;; +NGC0744;OCl;01:58:29.92;+55:28:28.6;Per;11.70;;;8.38;7.90;;;;;;;;;;;;;MWSC 0153;;; +NGC0745;GGroup;01:54:08.66;-56:41:26.7;Eri;1.80;;;;;;;;;;;;;;;;;ESO 152-032;;;Diameter of the group inferred by the author. +NGC0745 NED01;G;01:54:07.72;-56:41:37.2;Eri;1.75;1.11;36;14.06;;10.63;9.96;9.63;23.87;S0-a;;;;;0745S;;;ESO-LV 152-0320,PGC 007054;;; +NGC0745 NED02;G;01:54:07.61;-56:41:14.5;Eri;0.11;0.11;0;15.21;;;;;;;;;;;;;;ESO-LV 152-0321;;; +NGC0745 NED03;G;01:54:11.33;-56:41:07.7;Eri;1.13;0.41;104;15.51;;12.65;12.05;11.88;24.05;E-S0;;;;;;;;2MASX J01541134-5641079,PGC 095386;;; +NGC0746;G;01:57:51.01;+44:55:06.9;And;1.82;1.29;86;13.80;;11.49;10.94;10.75;23.43;I;;;;;;;;2MASX J01575100+4455069,IRAS 01548+4441,MCG +07-05-003,PGC 007399,UGC 01438;;; +NGC0747;G;01:57:30.45;-09:27:44.5;Cet;1.15;0.59;177;14.00;;11.53;10.83;10.53;23.05;Sb;;;;;;;;2MASX J01573044-0927444,MCG -02-06-007,PGC 007366,SDSS J015730.44-092744.5,SDSS J015730.45-092744.5;;; +NGC0748;G;01:56:21.80;-04:28:03.5;Cet;2.56;1.02;146;12.00;;10.59;9.88;9.66;23.54;Sb;;;;;;;;2MASX J01562179-0428034,MCG -01-06-004,PGC 007259;;; +NGC0749;G;01:55:41.12;-29:55:20.4;For;2.07;1.27;109;13.43;;10.25;9.55;9.26;23.65;S0-a;;;;;;;;2MASX J01554111-2955205,ESO 414-011,ESO-LV 414-0110,IRAS 01534-3009,MCG -05-05-023,PGC 007191;;IC 1740 is more likely to be a double star than this galaxy.; +NGC0750;G;01:57:32.73;+33:12:33.4;Tri;1.48;1.41;170;12.90;;9.57;8.83;8.56;22.83;E;;;;;;;;2MASX J01573274+3312332,MCG +05-05-034,PGC 007369,UGC 01430;;; +NGC0751;G;01:57:32.99;+33:12:11.1;Tri;1.64;1.30;139;12.90;;;;;23.39;E;;;;;;;;MCG +05-05-035,PGC 007370,UGC 01431;;; +NGC0752;OCl;01:57:34.82;+37:50:00.2;And;39.00;;;6.47;5.70;;;;;;;;;;;;;C 028,MWSC 0151;;; +NGC0753;G;01:57:42.20;+35:54:58.0;And;1.38;0.87;131;12.60;;10.37;9.66;9.37;22.13;SABc;;;;;;;;2MASX J01574218+3554581,IRAS 01547+3540,MCG +06-05-066,PGC 007387,UGC 01437;;; +NGC0754;G;01:54:20.84;-56:45:39.8;Eri;0.61;0.57;80;15.24;;12.15;11.52;11.34;23.04;E;;;;;;;;2MASX J01542082-5645399,ESO 152-033,ESO-LV 152-0330,PGC 007068;;; +NGC0755;G;01:56:22.68;-09:03:41.1;Cet;2.87;0.90;53;13.20;;11.00;10.49;10.18;23.28;SBbc;;;;;0764;;;2MASX J01562268-0903411,IRAS 01538-0918,MCG -02-06-005,PGC 007262;;; +NGC0756;GPair;01:54:29.05;-16:42:25.8;Cet;0.67;0.48;25;15.00;;12.20;11.62;11.13;22.93;S0;;;;;;;;2MASX J01542903-1642257,MCG -03-05-029,PGC 007078,SDSS J015429.04-164225.8;;Star superposed.; +NGC0757;Dup;01:54:56.21;-09:00:38.9;Cet;;;;;;;;;;;;;;;0731;;;;;; +NGC0758;G;01:55:42.14;-03:03:59.3;Cet;0.77;0.61;95;15.13;;11.77;11.09;10.72;23.52;S0;;;;;;;;2MASX J01554215-0303589,PGC 007198;;; +NGC0759;G;01:57:50.33;+36:20:35.2;And;1.12;1.06;10;13.70;;10.17;9.43;9.14;22.96;E;;;;;;;;2MASX J01575032+3620351,IRAS 01548+3605,MCG +06-05-067,PGC 007397,UGC 01440;;; +NGC0760;**;01:57:47.40;+33:21:19.4;Tri;;;;14.50;;;;;;;;;;;;;;;;;Components are 2MASS J01574760+3321195 and UCAC4 617-005450. +NGC0761;G;01:57:49.59;+33:22:37.7;Tri;1.48;0.51;145;14.50;;11.25;10.62;10.26;23.61;SBa;;;;;;;;2MASX J01574957+3322377,MCG +05-05-036,PGC 007395,UGC 01439;;; +NGC0762;G;01:56:57.79;-05:24:10.3;Cet;1.24;1.09;35;13.50;;10.87;10.22;9.96;23.06;Sa;;;;;;;;2MASX J01565777-0524103,IRAS 01544-0538,MCG -01-06-006,PGC 007322;;; +NGC0763;Dup;01:56:22.68;-09:03:41.1;Cet;;;;;;;;;;;;;;;0755;;;;;; +NGC0764;**;01:57:03.27;-16:03:45.0;Cet;;;;;;;;;;;;;;;;;;;;Identification as NGC 0764 is uncertain.; +NGC0765;G;01:58:48.00;+24:53:32.9;Ari;2.62;2.62;25;14.20;;10.52;9.90;9.50;24.91;SABb;;;;;;;;2MASX J01584798+2453331,MCG +04-05-025,PGC 007475,UGC 01455;;; +NGC0766;G;01:58:41.95;+08:20:47.9;Psc;1.81;1.11;27;14.40;;10.70;9.95;9.76;24.41;E;;;;;;;;2MASX J01584199+0820482,MCG +01-06-019,PGC 007468,UGC 01458;;; +NGC0767;G;01:58:50.80;-09:35:13.7;Cet;1.27;0.35;164;14.00;;12.66;11.92;11.64;23.70;SBb;;;;;;;;2MASX J01585068-0935084,2MASX J01585082-0935136,MCG -02-06-010,PGC 007483,SDSS J015850.79-093513.6,SDSS J015850.79-093513.7,SDSS J015850.80-093513.7;;; +NGC0768;G;01:58:40.93;+00:31:45.2;Cet;1.56;0.59;29;14.30;;11.71;11.07;10.61;23.29;SBbc;;;;;;;;2MASX J01584095+0031451,IRAS 01561+0017,MCG +00-06-016,PGC 007465,SDSS J015840.93+003145.1,SDSS J015840.93+003145.2,UGC 01457;;CGCG misprints name as 'NGC 7628'.; +NGC0769;G;01:59:35.90;+30:54:35.7;Tri;0.85;0.49;70;13.40;;11.34;10.66;10.40;21.28;Sc;;;;;;;;2MASX J01593591+3054356,IRAS 01567+3040,MCG +05-05-037,PGC 007537,UGC 01467;;; +NGC0770;G;01:59:13.64;+18:57:16.8;Ari;0.91;0.62;15;13.91;13.49;11.23;10.48;10.28;22.89;E;;;;;;;;2MASX J01591364+1857169,MCG +03-06-010,PGC 007517,UGC 01463;;; +NGC0771;*;02:03:26.59;+72:25:15.2;Cas;;;;3.97;3.95;3.89;3.90;3.92;;;;;;;;;;BD +71 0117,HD 012216,HIP 009598,TYC 4319-1847-1,50 Cas;;; +NGC0772;G;01:59:19.58;+19:00:27.1;Ari;4.57;2.52;131;11.09;10.31;8.17;7.44;7.20;22.32;Sb;;;;;;;;2MASX J01591958+1900271,IRAS 01565+1845,MCG +03-06-011,PGC 007525,SDSS J015919.55+190027.5,UGC 01466;;; +NGC0773;G;01:58:52.00;-11:30:52.7;Cet;1.38;0.72;178;14.00;;10.90;10.27;9.95;23.03;SABa;;;;;;;;2MASX J01585201-1130526,MCG -02-06-011,PGC 007486;;; +NGC0774;G;01:59:34.73;+14:00:29.5;Ari;1.28;1.06;164;13.97;;10.74;10.08;9.80;23.47;S0;;;;;;;;2MASX J01593471+1400299,MCG +02-06-008,PGC 007536,SDSS J015934.72+140029.4,SDSS J015934.72+140029.5,SDSS J015934.73+140029.5,UGC 01469;;; +NGC0775;G;01:58:32.67;-26:17:37.4;For;1.69;1.28;162;13.40;;11.03;10.41;10.08;23.03;SABc;;;;;;;;2MASX J01583266-2617373,ESO 477-018,ESO-LV 477-0180,IRAS 01562-2632,MCG -05-05-024,PGC 007451;;; +NGC0776;G;01:59:54.49;+23:38:39.8;Ari;1.35;1.29;135;13.40;;10.70;10.02;9.74;22.89;SABa;;;;;;;;2MASX J01595447+2338400,IRAS 01570+2323,MCG +04-05-028,PGC 007560,SDSS J015954.52+233839.3,UGC 01471;;; +NGC0777;G;02:00:14.90;+31:25:46.5;Tri;2.75;2.06;148;12.49;11.45;9.39;8.67;8.37;23.56;E;;;;;;;;2MASX J02001493+3125457,MCG +05-05-038,PGC 007584,UGC 01476;;; +NGC0778;G;02:00:19.44;+31:18:46.9;Tri;1.05;0.46;150;14.22;;11.25;10.56;10.20;22.95;S0;;;;;;;;2MASX J02001945+3118467,MCG +05-05-039,PGC 007597,UGC 01480;;; +NGC0779;G;01:59:42.28;-05:57:47.5;Cet;1.35;0.58;160;12.10;;8.95;8.27;8.07;20.75;SABb;;;;;;;;IRAS 01571-0612,MCG -01-06-016,PGC 007544;;; +NGC0780;G;02:00:35.18;+28:13:30.5;Tri;1.65;0.81;171;14.60;;11.13;10.37;10.16;23.86;Sb;;;;;;;;2MASX J02003521+2813310,MCG +05-05-041,PGC 007616,UGC 01488;;; +NGC0781;G;02:00:08.96;+12:39:22.0;Ari;1.47;0.41;12;14.00;;10.98;10.25;10.03;22.92;Sa;;;;;;;;2MASX J02000899+1239217,MCG +02-06-010,PGC 007577,SDSS J020008.94+123922.0,SDSS J020008.95+123921.9,UGC 01482;;; +NGC0782;G;01:57:40.38;-57:47:24.6;Eri;2.45;2.03;41;12.63;;10.11;9.44;9.15;23.16;SBb;;;;;;;;2MASX J01574037-5747246,ESO 114-015,ESO-LV 114-0150,IRAS 01559-5801,PGC 007379;;; +NGC0783;G;02:01:06.61;+31:52:56.9;Tri;1.38;0.75;63;12.84;;10.59;9.83;9.68;22.00;Sc;;;;;;1765;;2MASX J02010661+3152569,IRAS 01582+3138,MCG +05-05-042,PGC 007657,SDSS J020106.61+315256.7,UGC 01497;;; +NGC0784;G;02:01:16.93;+28:50:14.1;Tri;4.17;1.07;1;12.50;12.07;10.93;10.40;10.29;22.87;SBd;;;;;;;;2MASX J02011693+2850141,IRAS 01584+2836,MCG +05-05-045,PGC 007671,UGC 01501;;; +NGC0785;G;02:01:40.00;+31:49:35.4;Tri;1.60;0.90;77;13.90;;10.73;10.01;9.81;23.71;E;;;;;;1766;;2MASX J02013997+3149354,MCG +05-05-046,PGC 007694,UGC 01509;;; +NGC0786;G;02:01:24.72;+15:38:47.5;Ari;0.79;0.64;150;14.30;;11.86;11.17;10.83;22.51;Sc;;;;;;;;2MASX J02012472+1538475,IRAS 01587+1524,MCG +02-06-012,PGC 007680,UGC 01506;;; +NGC0787;G;02:00:48.62;-09:00:09.3;Cet;1.87;1.30;91;13.00;;10.38;9.72;9.47;23.38;Sb;;;;;;;;2MASX J02004858-0900090,MCG -02-06-015,PGC 007632,SDSS J020048.37-090012.8,SDSS J020048.38-090012.9,SDSS J020048.61-090009.2,SDSS J020048.61-090009.3,SDSS J020048.62-090009.3;;"One set of SDSS entries is centered 5"" SW of the nucleus."; +NGC0788;G;02:01:06.45;-06:48:55.9;Cet;1.74;1.42;108;13.71;12.76;10.02;9.38;9.07;22.94;S0-a;;;;;;;;2MASX J02010644-0648569,MCG -01-06-025,PGC 007656,SDSS J020106.46-064857.0;;; +NGC0789;G;02:02:26.01;+32:04:20.1;Tri;0.69;0.48;4;14.00;;11.54;10.88;10.56;21.65;Sb;;;;;;;;2MASX J02022599+3204199,IRAS 01595+3149,MCG +05-05-047,PGC 007760,SDSS J020226.04+320420.3,UGC 01520;;; +NGC0790;G;02:01:21.60;-05:22:15.5;Cet;1.38;1.21;142;13.50;;10.70;10.01;9.76;23.43;S0;;;;;;;;2MASX J02012157-0522157,MCG -01-06-026,PGC 007677;;; +NGC0791;G;02:01:44.22;+08:29:59.8;Psc;1.49;1.49;5;14.80;;10.89;10.12;9.92;24.46;E;;;;;;;;2MASX J02014419+0829597,MCG +01-06-031,PGC 007702,UGC 01511;;; +NGC0792;G;02:02:15.33;+15:42:43.9;Ari;1.27;0.67;130;14.60;;11.29;10.57;10.32;23.84;S0;;;;;;;;2MASX J02021532+1542439,IRAS 01595+1528,MCG +02-06-015,PGC 007744,UGC 01517;;The 2MASS position is 17.5 arcsec northwest of the optical nucleus.; +NGC0793;**;02:02:54.54;+31:58:50.6;Tri;;;;;;;;;;;;;;;;;;;;; +NGC0794;G;02:02:29.33;+18:22:22.8;Ari;1.22;0.96;53;14.00;;10.56;9.84;9.52;23.00;E-S0;;;;;;0191;;2MASX J02022931+1822226,MCG +03-06-024,PGC 007763,UGC 01528;;; +NGC0795;G;01:59:49.36;-55:49:27.0;Eri;1.28;0.77;138;14.22;;10.97;10.21;10.01;23.61;E;;;;;;;;2MASX J01594938-5549269,ESO 153-008,ESO-LV 153-0080,PGC 007552;;; +NGC0796;OCl;01:56:43.75;-74:13:12.0;Hyi;1.20;1.10;110;;;;;;;;;;;;;;;ESO 030-006;;In the Small Magellanic Cloud.; +NGC0797;GPair;02:03:26.30;+38:06:52.0;And;1.80;;;;;;;;;;;;;;;;;MCG +06-05-078;;;Diameter of the group inferred by the author. +NGC0797 NED01;G;02:03:24.55;+38:06:44.0;And;0.48;0.33;135;16.26;;12.73;12.18;12.07;23.64;;;;;;;;;2MASX J02032452+3806442,MCG +06-05-078 NED01,PGC 212899,UGC 01541 NOTES01;;;B-Mag taken from LEDA +NGC0797 NED02;G;02:03:27.94;+38:07:01.0;And;1.21;1.06;75;13.22;;10.61;9.86;9.61;22.67;SABa;;;;;;;;2MASX J02032791+3807012,MCG +06-05-078 NED02,PGC 007832,UGC 01541;;;B-Mag taken from LEDA +NGC0798;G;02:03:19.60;+32:04:39.1;Tri;1.19;0.44;136;14.70;;11.34;10.61;10.40;23.81;E;;;;;;;;2MASX J02031958+3204391,MCG +05-05-048,PGC 007823,UGC 01539;;; +NGC0799;G;02:02:12.34;-00:06:02.3;Cet;1.71;1.44;35;14.20;;11.08;10.43;10.15;24.01;SBa;;;;;;;;2MASX J02021229-0006025,MCG +00-06-023,PGC 007741,SDSS J020212.33-000602.2,SDSS J020212.34-000602.3,UGC 01527;;HOLM 054C is a star.; +NGC0800;G;02:02:11.85;-00:07:49.6;Cet;1.08;0.79;11;14.70;;12.07;11.42;11.04;23.14;Sc;;;;;;;;2MASX J02021183-0007495,MCG +00-06-024,PGC 007740,SDSS J020211.84-000749.5,SDSS J020211.85-000749.5,SDSS J020211.85-000749.6,UGC 01526;;; +NGC0801;G;02:03:44.83;+38:15:31.4;And;2.76;0.59;151;14.23;13.47;10.59;9.87;9.51;23.65;Sc;;;;;;;;2MASX J02034484+3815312,IRAS 02007+3801,MCG +06-05-079,PGC 007847,UGC 01550;;; +NGC0802;G;01:59:06.00;-67:52:12.5;Hyi;0.90;0.59;153;14.17;;12.04;11.46;11.35;22.62;S0-a;;;;;;;;2MASX J01590600-6752123,ESO 052-013,ESO-LV 52-0130,PGC 007505;;; +NGC0803;G;02:03:44.70;+16:01:51.5;Ari;2.67;0.92;10;13.50;;10.71;10.01;9.83;23.04;Sc;;;;;;;;2MASX J02034470+1601514,IRAS 02010+1547,MCG +03-06-028,PGC 007849,UGC 01554;;; +NGC0804;G;02:04:02.11;+30:49:58.3;Tri;1.27;0.33;8;14.70;;11.35;10.68;10.41;23.79;S0;;;;;;1773;;2MASX J02040210+3049581,MCG +05-05-049,PGC 007873,UGC 01557;;; +NGC0805;G;02:04:29.57;+28:48:44.4;Tri;1.05;0.68;110;14.70;;11.39;10.68;10.45;23.68;S0;;;;;;;;2MASX J02042958+2848444,MCG +05-05-050,PGC 007899,UGC 01566;;; +NGC0806;G;02:03:31.15;-09:56:00.1;Cet;1.35;0.38;59;14.00;;12.05;11.43;11.39;23.09;SBc;;;;;;;;2MASX J02033115-0956000,IRAS 02010-1010,MCG -02-06-021,PGC 007835,SDSS J020331.15-095600.1;;; +NGC0807;G;02:04:55.66;+28:59:14.8;Tri;1.71;1.08;142;13.80;;10.36;9.65;9.36;23.78;E;;;;;;;;2MASX J02045567+2859144,IRAS 02020+2844,MCG +05-06-001,PGC 007934,UGC 01571;;; +NGC0808;G;02:03:56.60;-23:18:41.8;Cet;1.31;0.62;12;14.12;;11.18;10.46;10.13;22.91;Sbc;;;;;;;;2MASX J02035658-2318416,ESO 478-001,ESO-LV 478-0010,IRAS 02015-2333,MCG -04-06-003,PGC 007865;;; +NGC0809;G;02:04:18.97;-08:44:07.1;Cet;1.11;0.86;173;14.00;;11.41;10.72;10.60;23.52;S0;;;;;;;;2MASX J02041900-0844072,MCG -02-06-023,PGC 007889,SDSS J020418.96-084407.0,SDSS J020418.97-084407.0,SDSS J020418.97-084407.1;;; +NGC0810;GPair;02:05:28.90;+13:15:05.0;Ari;1.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC0810 NED01;G;02:05:28.51;+13:15:04.4;Ari;1.40;0.88;31;15.40;;10.64;9.87;9.57;24.42;E;;;;;;;;2MASX J02052852+1315054,MCG +02-06-026,PGC 007965,SDSS J020528.48+131503.8,UGC 01583;;; +NGC0810 NED02;G;02:05:29.29;+13:15:03.5;Ari;;;;;;;;;;;;;;;;;;MCG +02-06-026 NOTES01,SDSS J020529.28+131503.5,UGC 01583 NOTES01;;; +NGC0811;G;02:04:34.84;-10:06:30.5;Cet;0.99;0.46;48;15.30;;13.80;13.45;13.20;23.58;Scd;;;;;;;;2MASX J02043483-1006302,MCG -02-06-024,PGC 007905,SDSS J020434.82-100630.6,SDSS J020434.84-100630.5;;Identification as NGC 0811 is uncertain.; +NGC0812;G;02:06:51.50;+44:34:22.5;And;2.74;0.97;161;12.80;;10.67;9.98;9.67;22.73;Sc;;;;;;;;2MASX J02065149+4434224,IRAS 02037+4419,MCG +07-05-014,PGC 008066,UGC 01598;;; +NGC0813;G;02:01:36.07;-68:26:21.1;Hyi;1.42;0.95;98;13.84;;10.81;10.20;9.95;23.26;S0-a;;;;;;;;2MASX J02013611-6826209,ESO 052-016,ESO-LV 52-0160,PGC 007692;;; +NGC0814;G;02:10:37.63;-15:46:24.9;Cet;1.32;0.59;7;14.00;;12.07;11.35;11.18;24.01;S0;;;;;;;;2MASX J02103760-1546250,IRAS 02082-1600,MCG -03-06-010,PGC 008319;;; +NGC0815;GPair;02:10:39.40;-15:48:46.0;Cet;0.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC0815 NED01;G;02:10:39.20;-15:48:44.7;Cet;;;;;;;;;;;;;;;;;;;;Diameter includes companions or long extensions.; +NGC0815 NED02;G;02:10:39.51;-15:48:48.2;Cet;0.45;0.35;70;16.23;;13.32;12.86;12.59;23.23;;;;;;;;;2MASX J02103954-1548480,PGC 906183;;Diameter includes companions or long extensions.; +NGC0816;G;02:08:08.85;+29:15:21.0;Tri;0.66;0.52;85;15.30;;12.76;12.10;11.75;23.09;;;;;;;;;2MASX J02080890+2915217,IRAS 02052+2901,PGC 008152;;; +NGC0817;G;02:07:33.71;+17:12:09.5;Ari;0.89;0.40;29;13.90;;12.08;11.42;11.19;22.63;S0-a;;;;;;;;2MASX J02073371+1712093,IRAS 02048+1657,MCG +03-06-033,PGC 008109,UGC 01611;;; +NGC0818;G;02:08:44.52;+38:46:37.9;And;2.20;0.76;112;12.70;;10.37;9.83;9.42;22.80;Sbc;;;;;;;;2MASX J02084451+3846381,IRAS 02057+3832,MCG +06-05-086,PGC 008185,UGC 01633;;; +NGC0819;G;02:08:34.37;+29:14:02.5;Tri;0.60;0.45;5;14.10;;11.69;11.04;10.71;21.49;Sbc;;;;;;;;2MASX J02083436+2914025,IRAS 02056+2859,PGC 008174,SDSS J020834.37+291402.3,UGC 01632;;; +NGC0820;G;02:08:24.98;+14:20:58.4;Ari;1.34;0.79;67;13.70;;10.78;10.07;9.75;22.78;Sb;;;;;;;;2MASX J02082498+1420589,IRAS 02057+1406,MCG +02-06-036,PGC 008165,SDSS J020824.97+142058.4,SDSS J020824.98+142058.4,UGC 01629;;; +NGC0821;G;02:08:21.14;+10:59:41.7;Ari;2.45;2.10;26;12.21;11.31;8.80;8.14;7.90;22.58;E;;;;;;;;2MASX J02082114+1059415,MCG +02-06-034,PGC 008160,UGC 01631;;; +NGC0822;G;02:06:39.14;-41:09:24.3;Phe;1.40;0.87;77;14.25;;11.13;10.46;10.22;23.70;E;;;;;;;;2MASX J02063913-4109243,ESO 298-009,ESO-LV 298-0090,MCG -07-05-008,PGC 008055;;; +NGC0823;G;02:07:20.05;-25:26:30.8;For;1.54;1.10;107;13.61;;10.80;10.09;9.94;23.38;E-S0;;;;;;1782;;2MASX J02072004-2526305,ESO 478-002,ESO-LV 478-0020,IRAS 02050-2540,MCG -04-06-005,PGC 008093;;There is a star superposed just east of the nucleus.; +NGC0824;G;02:06:53.26;-36:27:11.4;For;1.49;0.38;28;14.14;;11.49;10.76;10.40;22.71;Sbc;;;;;;;;2MASX J02065327-3627113,ESO 354-037,ESO-LV 354-0370,MCG -06-05-028,PGC 008068;;; +NGC0825;G;02:08:32.36;+06:19:25.4;Cet;2.06;0.66;52;14.50;;10.82;10.07;9.82;24.20;Sa;;;;;;;;2MASX J02083236+0619255,MCG +01-06-045,PGC 008173,UGC 01636;;; +NGC0826;G;02:09:25.05;+30:44:22.9;Tri;1.00;0.78;16;15.40;;11.48;10.86;10.50;23.95;E;;;;;;;;2MASX J02092504+3044229,PGC 008230;;; +NGC0827;G;02:08:56.26;+07:58:17.3;Cet;2.20;1.14;84;14.00;;10.83;10.03;9.73;23.89;Sb;;;;;;;;2MASX J02085625+0758169,IRAS 02062+0744,MCG +01-06-046,PGC 008196,UGC 01640;;; +NGC0828;G;02:10:09.57;+39:11:25.3;And;2.85;2.13;115;13.00;;10.09;9.34;8.98;24.01;Sa;;;;;;;;2MASX J02100957+3911253,IRAS 02071+3857,MCG +06-05-092,PGC 008283,UGC 01655;;; +NGC0829;G;02:08:42.38;-07:47:25.9;Cet;1.18;0.77;104;14.20;;11.66;11.29;10.96;22.96;SBc;;;;;;;;2MASX J02084219-0747271,IRAS 02062-0801,MCG -01-06-049,PGC 008182,SDSS J020842.37-074725.9,SDSS J020842.37-074726.3,SDSS J020842.37-074726.4;;Multiple SDSS entries describe this object.; +NGC0830;G;02:08:58.68;-07:46:00.5;Cet;1.40;0.82;76;15.00;;10.76;10.11;9.87;23.61;E-S0;;;;;;;;2MASX J02085867-0746010,MCG -01-06-050,PGC 008201,SDSS J020858.68-074600.5;;; +NGC0831;G;02:09:34.60;+06:05:46.8;Cet;0.44;0.34;110;15.20;;12.54;11.81;11.55;21.96;Sc;;;;;;;;2MASX J02093460+0605467,PGC 008241;;; +NGC0832;**;02:11:00.83;+35:32:28.5;Tri;;;;;;;;;;;;;;;;;;;;;Components are UCAC4 628-006926 and UCAC4 628-006927. +NGC0833;G;02:09:20.84;-10:07:59.1;Cet;1.63;0.67;85;14.02;13.00;10.43;9.77;9.47;23.14;SABa;;;;;;;;2MASX J02092086-1007591,MCG -02-06-030,PGC 008225,SDSS J020920.84-100759.1,TYC 5281-1672-1;;; +NGC0834;G;02:11:01.29;+37:39:58.6;And;1.05;0.50;22;13.20;;10.89;10.12;9.75;22.17;Sb;;;;;;;;2MASX J02110127+3739590,IRAS 02080+3725,MCG +06-05-099,PGC 008352,UGC 01672;;; +NGC0835;G;02:09:24.60;-10:08:09.3;Cet;0.87;0.73;5;13.29;12.45;9.95;9.28;8.95;21.50;Sab;;;;;0838W;;;2MASX J02092458-1008091,IRAS 02069-1022,MCG -02-06-031,PGC 008228,SDSS J020924.60-100809.3;;; +NGC0836;G;02:10:24.88;-22:03:17.5;Cet;1.11;0.84;106;14.34;;11.46;10.89;10.59;23.40;S0-a;;;;;;;;2MASX J02102490-2203175,ESO 544-017,ESO-LV 544-0170,MCG -04-06-012,PGC 008304;;; +NGC0837;G;02:10:16.25;-22:25:53.4;Cet;0.99;0.39;13;14.84;;12.07;11.35;11.16;22.94;Sb;;;;;;;;2MASX J02101624-2225535,ESO 478-010,ESO-LV 478-0100,MCG -04-06-011,PGC 008297;;; +NGC0838;G;02:09:38.53;-10:08:48.1;Cet;1.34;0.97;77;13.72;;10.82;10.11;9.74;22.88;S0-a;;;;;0838E;;;2MASX J02093853-1008466,MCG -02-06-033,PGC 008250,SDSS J020938.55-100847.5,SDSS J020938.57-100846.3,SDSS J020938.58-100846.2,SDSS J020938.59-100846.1;;; +NGC0839;G;02:09:42.93;-10:11:02.7;Cet;1.49;0.64;86;13.98;11.42;10.96;10.23;9.83;23.51;S0-a;;;;;0838S;;;2MASX J02094273-1011016,IRAS 02072-1025,MCG -02-06-034,PGC 008254,TYC 5281-1260-1;;; +NGC0840;G;02:10:16.21;+07:50:43.1;Cet;1.74;0.78;77;14.70;;11.35;10.52;10.32;23.68;Sb;;;;;;;;2MASX J02101623+0750432,MCG +01-06-049,PGC 008293,UGC 01664;;; +NGC0841;G;02:11:17.36;+37:29:49.8;And;1.74;0.87;134;12.80;;10.30;9.59;9.38;22.93;Sab;;;;;;;;2MASX J02111733+3729499,IRAS 02082+3715,MCG +06-05-101,PGC 008372,UGC 01676;;; +NGC0842;G;02:09:50.79;-07:45:44.9;Cet;1.74;0.85;157;13.61;12.66;10.47;9.80;9.54;23.54;S0;;;;;;;;2MASX J02095079-0745446,MCG -01-06-055,PGC 008258,SDSS J020950.78-074544.9;;; +NGC0843;Other;02:11:08.11;+32:05:50.7;Tri;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC0844;G;02:10:14.25;+06:02:59.3;Cet;0.49;0.38;45;15.00;;12.90;12.19;11.90;;;;;;;;;;2MASX J02101423+0602592,PGC 008291;;;Diameters and position angle taken from Simbad. +NGC0845;G;02:12:19.79;+37:28:38.4;And;1.63;0.33;148;14.50;;11.03;10.24;9.82;23.10;Sb;;;;;;;;2MASX J02121981+3728384,IRAS 02093+3714,MCG +06-05-104,PGC 008438,UGC 01695;;; +NGC0846;G;02:12:12.32;+44:34:06.2;And;1.92;1.68;129;13.20;;10.08;9.41;9.09;23.16;SBab;;;;;0847;;;2MASX J02121230+4434060,IRAS 02090+4420,MCG +07-05-024,PGC 008430,UGC 01688;;; +NGC0847;Dup;02:12:12.32;+44:34:06.2;And;;;;;;;;;;;;;;;0846;;;;;; +NGC0848;G;02:10:17.64;-10:19:17.2;Cet;1.36;1.05;147;13.35;;11.39;10.77;10.46;22.90;SBab;;;;;;;;2MASX J02101756-1019157,IRAS 02078-1033,MCG -02-06-036,PGC 008299;;; +NGC0849;G;02:10:11.19;-22:19:22.8;Cet;0.59;0.44;104;15.32;;12.20;11.54;11.35;23.03;S0;;;;;;;;2MASX J02101121-2219224,ESO 478-009,ESO-LV 478-0090,PGC 008286;;; +NGC0850;G;02:11:13.61;-01:29:08.1;Cet;1.22;1.00;92;14.10;;10.79;10.19;9.82;23.23;S0-a;;;;;;;;2MASX J02111366-0129080,MCG +00-06-049,PGC 008369,TYC 4690-268-1,UGC 01679;;; +NGC0851;G;02:11:12.09;+03:46:46.9;Cet;1.14;0.66;135;14.70;;11.87;11.21;11.04;23.62;S0-a;;;;;;;;2MASX J02111207+0346469,IRAS 02086+0332,MCG +01-06-054,PGC 008368,UGC 01680;;; +NGC0852;G;02:08:55.46;-56:44:13.4;Eri;1.36;1.00;90;14.18;;11.74;11.03;10.88;23.28;SBbc;;;;;;;;2MASX J02085544-5644132,ESO 153-026,ESO-LV 153-0260,PGC 008195;;; +NGC0853;G;02:11:41.19;-09:18:21.6;Cet;1.80;1.17;50;13.50;;11.29;10.64;10.45;25.50;Sm;;;;;;;;2MASX J02114148-0918163,IRAS 02092-0932,MCG -02-06-038,PGC 008397,SDSS J021141.18-091821.4,SDSS J021141.18-091821.5;;Multiple SDSS entries describe this object.; +NGC0854;G;02:11:30.75;-35:50:06.4;For;2.00;0.72;2;13.85;;11.09;10.39;10.19;23.18;SBc;;;;;;;;2MASX J02113075-3550064,ESO 354-047,ESO-LV 354-0470,IRAS 02093-3604,MCG -06-05-038,PGC 008388;;; +NGC0855;G;02:14:03.49;+27:52:38.4;Tri;2.94;1.08;67;13.56;12.75;10.72;10.07;9.83;24.41;E;;;;;;;;2MASX J02140361+2752378,IRAS 02111+2738,MCG +05-06-016,PGC 008557,UGC 01718;;; +NGC0856;G;02:13:38.36;-00:43:02.2;Cet;1.19;0.94;17;17.25;16.54;11.27;10.65;10.33;23.21;Sa;;;;;0859;;;2MASX J02133833-0043022,MCG +00-06-054,PGC 008526,SDSS J021338.35-004302.2,SDSS J021338.36-004302.2,SDSS J021338.36-004302.3,UGC 01713;;; +NGC0857;G;02:12:36.97;-31:56:40.6;For;1.58;1.34;89;13.45;;10.39;9.78;9.51;23.23;S0;;;;;;;;2MASX J02123698-3156404,ESO 415-006,ESO-LV 415-0060,MCG -05-06-008,PGC 008455;;; +NGC0858;G;02:12:30.17;-22:28:17.5;Cet;1.26;1.01;140;14.19;;11.92;11.13;10.88;23.36;Sc;;;;;;;;2MASX J02123015-2228172,ESO 478-013,ESO-LV 478-0130,IRAS 02102-2242,MCG -04-06-016,PGC 008451;;; +NGC0859;Dup;02:13:38.36;-00:43:02.2;Cet;;;;;;;;;;;;;;;0856;;;;;; +NGC0860;G;02:15:00.15;+30:46:43.7;Tri;0.63;0.52;109;15.10;;11.77;11.12;10.70;23.04;E;;;;;;;;2MASX J02150016+3046434,PGC 008606;;; +NGC0861;G;02:15:51.14;+35:54:48.9;Tri;1.48;0.42;36;14.80;;11.50;10.71;10.47;23.48;Sb;;;;;;;;2MASX J02155114+3554488,IRAS 02128+3540,MCG +06-06-003,PGC 008652,UGC 01737;;; +NGC0862;G;02:13:03.00;-42:02:00.7;Phe;1.04;0.97;70;13.86;;10.77;10.12;9.80;22.80;E;;;;;;;;2MASX J02130301-4202009,ESO 298-020,ESO-LV 298-0200,MCG -07-05-012,PGC 008487;;; +NGC0863;G;02:14:33.56;-00:46:00.1;Cet;1.27;1.15;35;14.48;13.81;10.76;10.04;9.54;23.14;Sa;;;;;0866,0885;;;2MASX J02143357-0046002,IRAS 02120-0059,MCG +00-06-056,PGC 008586,SDSS J021433.55-004600.2,SDSS J021433.56-004600.2,UGC 01727;;; +NGC0864;G;02:15:27.64;+06:00:09.4;Cet;3.72;2.57;21;12.00;;9.35;8.68;8.53;22.91;SABc;;;;;;;;2MASX J02152764+0600094,IRAS 02128+0546,MCG +01-06-061,PGC 008631,UGC 01736;;; +NGC0865;G;02:16:15.11;+28:35:59.0;Tri;1.62;0.27;159;14.00;;11.23;10.58;10.25;22.41;Sbc;;;;;;;;2MASX J02161510+2835590,IRAS 02133+2822,MCG +05-06-020,PGC 008678,UGC 01747;;; +NGC0866;Dup;02:14:33.56;-00:46:00.1;Cet;;;;;;;;;;;;;;;0863;;;;;; +NGC0867;G;02:17:04.78;+01:14:39.1;Cet;1.24;1.11;85;14.20;;10.80;10.08;9.79;23.30;S0-a;;;;;0875;;;2MASX J02170480+0114390,MCG +00-06-060,PGC 008718,SDSS J021704.77+011439.1,SDSS J021704.78+011439.1,UGC 01760;;; +NGC0868;G;02:15:58.48;-00:42:49.1;Cet;0.79;0.54;111;15.60;;12.08;11.41;11.11;23.69;E-S0;;;;;;;;2MASX J02155850-0042486,PGC 008659,SDSS J021558.47-004249.0,SDSS J021558.48-004248.9,SDSS J021558.48-004249.0,SDSS J021558.48-004249.1,UGC 01748;;; +NGC0869;OCl;02:18:58.56;+57:07:02.1;Per;14.40;;;4.30;3.70;;;;;;;;;;;;;MWSC 0175;h Persei Cluster;;Caldwell 14 refers to both NGC869 and NGC884 +NGC0870;G;02:17:09.22;+14:31:23.2;Ari;0.37;0.34;105;16.00;;13.12;12.48;11.94;22.98;;;;;;;;;2MASX J02170921+1431231,MCG +02-06-052,PGC 008721;;; +NGC0871;G;02:17:10.73;+14:32:52.2;Ari;1.01;0.33;4;14.20;13.61;11.23;10.63;10.27;22.02;SBc;;;;;;;;2MASX J02171073+1432521,IRAS 02144+1419,MCG +02-06-053,PGC 008722,UGC 01759;;; +NGC0872;G;02:15:25.23;-17:46:51.8;Cet;1.77;0.55;175;14.55;;11.69;10.88;10.79;23.51;SBc;;;;;;;;2MASX J02152523-1746517,ESO 544-032,ESO-LV 544-0320,MCG -03-06-019,PGC 008629;;; +NGC0873;G;02:16:32.36;-11:20:54.8;Cet;1.48;1.07;146;13.10;12.71;10.53;9.89;9.61;22.49;Sc;;;;;;;;2MASX J02163235-1120549,IRAS 02140-1134,MCG -02-06-048,PGC 008692;;; +NGC0874;G;02:16:01.15;-23:18:06.2;Cet;1.01;0.48;175;15.12;;12.68;11.91;11.61;23.42;Sab;;;;;;;;2MASX J02160113-2318061,ESO 478-018,ESO-LV 478-0180,MCG -04-06-019,PGC 008663;;; +NGC0875;Dup;02:17:04.78;+01:14:39.1;Cet;;;;;;;;;;;;;;;0867;;;;;; +NGC0876;G;02:17:53.31;+14:31:16.6;Ari;1.32;0.38;26;16.50;;11.90;11.01;10.54;24.32;Sc;;;;;0877S;;;2MASX J02175332+1431179,MCG +02-06-057,PGC 008770,UGC 01766;;; +NGC0877;G;02:17:59.64;+14:32:38.6;Ari;1.92;1.47;138;12.50;;9.66;8.90;8.66;22.47;SABc;;;;;0877N;;;2MASX J02175963+1432387,IRAS 02152+1418,MCG +02-06-058,PGC 008775,UGC 01768;;; +NGC0878;G;02:17:54.26;-23:23:02.6;Cet;0.87;0.53;110;14.65;;12.06;11.41;11.05;22.94;Sa;;;;;;;;2MASX J02175426-2323025,ESO 478-022,ESO-LV 478-0220,IRAS 02156-2336,MCG -04-06-021,PGC 008771;;; +NGC0879;G;02:16:51.20;-08:57:50.5;Cet;0.77;0.64;16;15.29;15.50;13.19;12.47;12.61;23.38;I;;;;;;;;2MASX J02165120-0857504,PGC 008705,SDSS J021651.20-085750.4,SDSS J021651.20-085750.5;;; +NGC0880;G;02:18:27.18;-04:12:20.7;Cet;0.58;0.38;26;15.61;15.11;13.03;12.28;12.22;22.92;S?;;;;;;;;2MASX J02182722-0412192,PGC 008805;;; +NGC0881;G;02:18:45.27;-06:38:20.7;Cet;2.28;1.26;133;13.23;12.44;10.30;9.66;9.37;23.27;SABc;;;;;;;;2MASX J02184528-0638208,MCG -01-06-089,PGC 008822;;; +NGC0882;G;02:19:39.91;+15:48:51.3;Ari;1.13;0.48;83;14.90;;11.48;10.69;10.48;23.92;S0;;;;;;;;2MASX J02193990+1548514,MCG +03-06-052,PGC 008874,UGC 01789;;; +NGC0883;G;02:19:05.18;-06:47:27.3;Cet;1.57;1.40;77;13.00;;9.85;9.16;8.90;23.33;E-S0;;;;;;;;2MASX J02190516-0647271,MCG -01-06-090,PGC 008841;;; +NGC0884;OCl;02:22:32.10;+57:08:38.8;Per;10.50;;;4.40;3.80;;;;;;;;;;;;;MWSC 0184;chi Persei Cluster;;Caldwell 14 refers to both NGC869 and NGC884 +NGC0885;Dup;02:14:33.56;-00:46:00.1;Cet;;;;;;;;;;;;;;;0863;;;;;; +NGC0886;OCl;02:23:11.77;+63:46:43.5;Cas;4.80;;;;;;;;;;;;;;;;;MWSC 0186;;; +NGC0887;G;02:19:32.61;-16:04:11.0;Cet;1.66;1.34;21;13.10;;11.28;10.59;10.34;23.04;SABc;;;;;;;;2MASX J02193261-1604110,IRAS 02171-1617,MCG -03-07-001,PGC 008868;;; +NGC0888;G;02:17:27.10;-59:51:39.8;Hor;1.16;0.90;85;14.47;;11.03;10.27;9.98;23.67;E;;;;;;;;2MASX J02172714-5951397,ESO 115-002,ESO-LV 115-0020,PGC 008743;;; +NGC0889;G;02:19:06.93;-41:44:57.6;Phe;1.24;0.89;98;14.36;;11.15;10.44;10.26;23.89;E;;;;;;;;2MASX J02190690-4144574,ESO 298-027,ESO-LV 298-0270,MCG -07-05-016,PGC 008843;;; +NGC0890;G;02:22:01.01;+33:15:57.8;Tri;1.10;0.67;45;12.50;11.62;9.20;8.48;8.25;21.77;E-S0;;;;;;;;2MASX J02220100+3315579,MCG +05-06-030,PGC 008997,UGC 01823;;; +NGC0891;G;02:22:33.41;+42:20:56.9;And;13.03;3.03;22;10.81;9.93;7.26;6.36;5.94;24.17;Sb;;;;;;;;2MASX J02223290+4220539,C 023,IRAS 02193+4207,MCG +07-05-046,PGC 009031,UGC 01831;;; +NGC0892;G;02:20:52.02;-23:06:49.1;Cet;0.72;0.40;5;15.71;;12.92;12.16;11.86;23.30;Sab;;;;;;;;2MASX J02205203-2306490,ESO 478-026,ESO-LV 478-0260,PGC 008926;;; +NGC0893;G;02:19:58.58;-41:24:11.3;Phe;1.34;0.83;123;13.57;;10.83;10.27;9.94;22.54;Sc;;;;;;;;2MASX J02195858-4124112,ESO 298-029,ESO-LV 298-0290,IRAS 02179-4137,MCG -07-05-017,PGC 008888;;; +NGC0894;Other;02:21:34.57;-05:30:36.8;Cet;;;;;;;;;;;;;;;;;;;;Part of galaxy NGC0895; +NGC0895;G;02:21:36.47;-05:31:17.0;Cet;3.32;2.22;109;12.26;11.73;10.15;9.74;9.41;23.30;Sc;;;;;;;;2MASX J02213646-0531170,IRAS 02191-0544,MCG -01-07-002,PGC 008974,SDSS J022136.47-053116.4;;NGC 0894 is the northwestern arm of NGC 0895.; +NGC0896;Neb;02:25:27.82;+62:01:09.7;Cas;10.00;10.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC0897;G;02:21:06.37;-33:43:14.4;For;2.01;1.43;25;13.07;;9.71;9.05;8.82;22.90;Sa;;;;;;;;2MASX J02210637-3343144,ESO 355-007,ESO-LV 355-0070,MCG -06-06-003,PGC 008944;;The APMUKS image includes a superposed star.; +NGC0898;G;02:23:20.37;+41:57:05.1;And;1.75;0.47;170;13.84;;10.36;9.57;9.29;22.99;Sab;;;;;;;;2MASX J02232039+4157052,MCG +07-06-004,PGC 009073,UGC 01842;;; +NGC0899;G;02:21:53.14;-20:49:23.7;Cet;1.63;1.21;121;13.08;;11.18;10.55;10.46;22.63;IB;;;;;;;;2MASX J02215313-2049236,ESO 545-007,ESO-LV 545-0070,IRAS 02195-2103,MCG -04-06-030,PGC 008990,UGCA 026;;; +NGC0900;G;02:23:32.18;+26:30:41.5;Ari;0.92;0.62;36;15.00;;11.62;10.92;10.62;23.56;S0;;;;;;;;2MASX J02233215+2630412,MCG +04-06-020,PGC 009079,UGC 01843;;; +NGC0901;G;02:23:34.09;+26:33:25.4;Ari;0.78;0.55;36;;;11.94;11.27;10.91;23.97;E;;;;;;;;2MASX J02233408+2633252,PGC 212967;;; +NGC0902;G;02:22:21.76;-16:40:44.6;Cet;0.74;0.55;26;14.00;;13.09;12.28;11.66;22.66;SBbc;;;;;;;;2MASX J02222174-1640447,MCG -03-07-005,PGC 009021;;; +NGC0903;G;02:24:00.88;+27:21:22.6;Ari;0.74;0.40;168;;;12.70;12.28;11.88;24.50;;;;;;;;;2MASX J02240089+2721229,PGC 009097,UGC 01852 NOTES01;;; +NGC0904;G;02:24:05.57;+27:20:32.6;Ari;1.45;0.85;129;15.00;;11.10;10.36;10.18;24.54;E;;;;;;;;2MASX J02240554+2720329,MCG +04-06-024,PGC 009112,UGC 01852;;; +NGC0905;G;02:22:43.57;-08:43:08.5;Cet;0.61;0.30;114;15.92;;12.60;12.04;11.54;23.36;S0-a;;;;;;;;2MASX J02224355-0843080,PGC 009038,SDSS J022243.57-084308.4,SDSS J022243.58-084308.3,SDSS J022243.58-084308.5;;; +NGC0906;G;02:25:16.26;+42:05:23.6;And;1.46;1.01;16;13.76;12.88;10.91;10.21;9.92;23.12;Sab;;;;;;;;2MASX J02251625+4205234,MCG +07-06-012,PGC 009188,UGC 01868;;; +NGC0907;G;02:23:01.91;-20:42:43.4;Cet;2.21;0.75;87;13.30;;10.84;10.35;9.97;22.69;SBd;;;;;;;;ESO 545-010,ESO-LV 545-0100,IRAS 02207-2056,MCG -04-06-034,PGC 009054,UGCA 028;;Confused HIPASS source; +NGC0908;G;02:23:04.57;-21:14:01.9;Cet;6.14;2.82;77;11.03;10.18;8.16;7.49;7.23;22.86;SABc;;;;;;;;2MASX J02230456-2114018,ESO 545-011,ESO-LV 545-0110,IRAS 02207-2127,MCG -04-06-035,PGC 009057,UGCA 029;;; +NGC0909;G;02:25:22.79;+42:02:08.4;And;1.02;1.02;40;14.50;;11.12;10.44;10.20;23.42;E;;;;;;;;2MASX J02252279+4202074,MCG +07-06-013,PGC 009197,UGC 01872;;; +NGC0910;G;02:25:26.78;+41:49:27.4;And;1.79;1.51;17;14.50;;10.17;9.44;9.20;23.40;E;;;;;;;;2MASX J02252677+4149275,MCG +07-06-014,PGC 009201,UGC 01875;;; +NGC0911;G;02:25:42.40;+41:57:22.6;And;1.69;0.84;115;14.00;;10.84;10.10;9.84;23.91;E;;;;;;;;2MASX J02254239+4157225,MCG +07-06-016,PGC 009221,UGC 01878;;; +NGC0912;G;02:25:42.73;+41:46:38.8;And;0.79;0.60;147;15.00;;11.66;10.94;10.74;23.20;S0-a;;;;;;;;2MASX J02254278+4146385,MCG +07-06-015,PGC 009222;;; +NGC0913;G;02:25:44.64;+41:47:57.9;And;0.61;0.33;20;15.00;;12.37;11.61;11.51;;;;;;;;;;2MASX J02254463+4147580,PGC 009230;;;Diameters and position angle taken from Simbad. +NGC0914;G;02:26:05.18;+42:08:38.7;And;1.56;1.04;116;13.90;;11.23;10.43;10.20;23.18;Sc;;;;;;;;2MASX J02260519+4208386,IRAS 02229+4155,MCG +07-06-017,PGC 009253,UGC 01887;;; +NGC0915;G;02:25:45.58;+27:13:15.6;Ari;0.76;0.76;160;15.00;;11.33;10.61;10.26;23.48;E;;;;;;;;2MASX J02254561+2713160,MCG +04-06-033,PGC 009232;;; +NGC0916;G;02:25:47.64;+27:14:33.1;Ari;1.18;0.53;9;14.90;;11.43;10.73;10.45;24.16;S0-a;;;;;;;;2MASX J02254763+2714330,MCG +04-06-034,PGC 009245;;; +NGC0917;G;02:26:07.69;+31:54:44.4;Tri;1.77;0.99;57;14.50;;10.56;9.92;9.57;23.86;Sab;;;;;;;;2MASX J02260770+3154444,MCG +05-06-039,PGC 009258,SDSS J022607.67+315444.2,UGC 01890;;; +NGC0918;G;02:25:50.84;+18:29:46.5;Ari;3.09;1.73;157;16.00;15.01;10.05;9.32;9.06;23.80;Sc;;;;;;;;2MASX J02255022+1829561,IRAS 02230+1816,MCG +03-07-011,PGC 009236,UGC 01888;;The 2MASS position refers to superposed star.; +NGC0919;G;02:26:16.67;+27:12:43.6;Ari;1.31;0.32;138;15.50;;11.56;10.85;10.50;23.89;Sab;;;;;;;;2MASX J02261667+2712433,MCG +04-06-039,PGC 009267,UGC 01894;;; +NGC0920;G;02:27:51.78;+45:56:49.4;And;1.17;0.85;3;15.60;;12.27;11.22;11.08;24.25;SBb;;;;;;;;2MASX J02275179+4556495,MCG +08-05-011,PGC 009377,UGC 01920;;; +NGC0921;G;02:26:33.42;-15:50:51.1;Cet;1.25;0.53;82;14.00;;12.27;11.80;11.25;23.53;SBc;;;;;;;;2MASX J02263343-1550511,MCG -03-07-015,PGC 009287;;; +NGC0922;G;02:25:04.42;-24:47:17.4;For;2.10;1.77;14;12.54;12.21;10.82;10.22;10.02;22.60;SBc;;;;;;;;2MASX J02250439-2447174,ESO 478-028,ESO-LV 478-0280,IRAS 02228-2500,MCG -04-06-037,PGC 009172,UGCA 030;;; +NGC0923;G;02:27:34.64;+41:58:39.4;And;0.78;0.55;120;14.40;;11.52;10.85;10.47;22.32;SABb;;;;;;;;2MASX J02273463+4158392,IRAS 02244+4145,MCG +07-06-022,PGC 009355,UGC 01915;;; +NGC0924;G;02:26:46.83;+20:29:51.0;Ari;2.03;1.18;52;13.80;;10.51;9.78;9.50;23.99;S0;;;;;;;;2MASX J02264683+2029507,MCG +03-07-012,PGC 009302,UGC 01912;;; +NGC0925;G;02:27:16.88;+33:34:45.0;Tri;10.72;5.75;107;10.69;10.12;8.74;8.07;7.87;23.94;Scd;;;;;;;;2MASX J02271691+3334439,IRAS 02243+3321,MCG +05-06-045,PGC 009332,UGC 01913;;; +NGC0926;G;02:26:06.71;-00:19:55.0;Cet;1.75;0.78;39;14.05;13.44;11.06;10.41;10.12;23.36;Sbc;;;;;;;;2MASX J02260670-0019552,MCG +00-07-011,PGC 009256,SDSS J022606.70-001954.9,SDSS J022606.71-001954.9,SDSS J022606.71-001955.0,UGC 01901;;; +NGC0927;G;02:26:37.31;+12:09:19.2;Ari;1.18;1.02;0;14.50;;11.22;10.53;10.15;23.38;SBc;;;;;;;;2MASX J02263732+1209193,IRAS 02239+1155,MCG +02-07-009,PGC 009292,UGC 01908;;; +NGC0928;G;02:27:41.02;+27:13:16.3;Ari;0.90;0.54;45;14.70;;11.78;11.14;10.80;23.11;Sa;;;;;;;;2MASX J02274101+2713162,MCG +04-06-050,PGC 009368;;; +NGC0929;G;02:27:18.22;-12:05:12.9;Cet;0.88;0.40;171;15.00;;12.98;12.42;12.30;23.13;Sa;;;;;;;;2MASX J02271820-1205129,MCG -02-07-009,PGC 009334;;; +NGC0930;Other;02:27:51.44;+20:20:30.4;Ari;;;;;;;;;;;;;;;;;;;;Nonexistent object. Sometimes incorrectly equated with NGC 0932.; +NGC0931;G;02:28:14.48;+31:18:42.0;Tri;2.45;0.69;75;15.71;14.74;10.40;9.67;9.27;24.17;Sbc;;;;;;;;2MASX J02281446+3118414,IRAS 02252+3105,MCG +05-06-049,PGC 009399,SDSS J022814.46+311841.5,UGC 01935;;; +NGC0932;G;02:27:54.69;+20:19:56.9;Ari;2.00;1.85;145;13.70;;10.01;9.26;9.02;23.96;Sa;;;;;;;;2MASX J02275468+2019575,MCG +03-07-014,PGC 009379,SDSS J022754.69+201956.9,UGC 01931;;Often misidentified as NGC 0930 (which does not exist).; +NGC0933;G;02:29:17.49;+45:54:40.7;And;1.84;0.96;37;15.50;;11.06;10.37;10.12;24.86;Sbc;;;;;;;;2MASX J02291746+4554409,MCG +08-05-013,PGC 009465,UGC 01956;;; +NGC0934;G;02:27:32.93;-00:14:40.4;Cet;1.14;0.80;127;14.00;13.14;11.37;10.63;10.45;23.30;E-S0;;;;;;;;2MASX J02273292-0014404,MCG +00-07-016,PGC 009352,SDSS J022732.92-001440.3,SDSS J022732.93-001440.3,SDSS J022732.93-001440.4,UGC 01926;;; +NGC0935;G;02:28:11.15;+19:35:56.8;Ari;1.58;0.98;155;13.56;12.82;10.29;9.59;9.32;23.14;Sc;;;;;;;;2MASX J02281114+1935568,IRAS 02253+1922,MCG +03-07-015,PGC 009388,UGC 01937;;; +NGC0936;G;02:27:37.46;-01:09:22.6;Cet;4.44;3.18;133;11.10;;7.84;7.14;6.91;23.14;S0-a;;;;;;;;2MASX J02273746-0109226,MCG +00-07-017,PGC 009359,SDSS J022737.44-010921.5,SDSS J022737.44-010921.6,UGC 01929;;; +NGC0937;G;02:29:28.08;+42:14:59.9;And;0.89;0.35;115;15.00;;;;;22.82;Sc;;;;;;;;MCG +07-06-024,PGC 009480,UGC 01961;;"Star (or eB knot?) superposed; position is for center of galaxy image."; +NGC0938;G;02:28:33.51;+20:17:01.3;Ari;1.55;1.14;97;13.80;;10.47;9.81;9.53;23.56;E;;;;;;;;2MASX J02283350+2017011,MCG +03-07-017,PGC 009423,UGC 01947;;; +NGC0939;G;02:26:21.32;-44:26:46.2;Eri;1.66;1.16;100;14.06;;10.97;10.30;10.09;23.97;E;;;;;;;;2MASX J02262131-4426460,ESO 246-011,ESO-LV 246-0110,MCG -07-06-004,PGC 009271;;; +NGC0940;G;02:29:27.50;+31:38:27.3;Tri;1.64;1.15;20;13.40;;10.40;9.71;9.36;23.15;S0;;;;;;;;2MASX J02292749+3138271,IRAS 02264+3125,MCG +05-06-050,PGC 009478,UGC 01964;;; +NGC0941;G;02:28:27.85;-01:09:05.5;Cet;1.87;1.33;171;12.80;;11.40;10.95;10.69;22.85;SABc;;;;;;;;2MASX J02282784-0109056,IRAS 02259-0122,MCG +00-07-022,PGC 009414,SDSS J022827.74-010908.6,SDSS J022827.88-010905.2,UGC 01954;;Confused HIPASS source; +NGC0942;G;02:29:10.25;-10:50:10.1;Cet;1.78;0.87;2;11.00;;10.37;9.65;9.68;24.37;S0;;;;;;;;MCG -02-07-019,PGC 009457;;MCG, VV, and RC2 switch NGC 0942 and NGC 0943. NGC 0942 is southern of two.; +NGC0943;G;02:29:09.68;-10:49:41.0;Cet;1.55;0.95;26;11.00;;12.77;12.08;11.83;24.03;S0-a;;;;;;;;2MASX J02290967-1049407,MCG -02-07-018,PGC 009458;;MCG, VV, and RC2 switch NGC 0942 and NGC 0943. NGC 0943 is northern of two.; +NGC0944;G;02:26:41.53;-14:30:56.3;Cet;1.01;0.37;18;14.00;;12.03;11.23;10.99;23.67;S0-a;;;;;;0228;;2MASX J02264151-1430561,IRAS 02242-1444,MCG -03-07-016,PGC 009300;;; +NGC0945;G;02:28:37.28;-10:32:20.3;Cet;2.06;1.82;170;12.00;;10.31;9.67;9.36;23.01;SBc;;;;;;;;2MASX J02283732-1032211,IRAS 02261-1045,MCG -02-07-013,PGC 009426;;; +NGC0946;G;02:30:38.43;+42:13:57.4;And;1.42;0.84;66;14.50;;10.70;9.98;9.71;23.97;S0;;;;;;;;2MASX J02303850+4213556,MCG +07-06-026,PGC 009556,UGC 01979;;; +NGC0947;G;02:28:33.12;-19:02:31.6;Cet;2.14;1.15;59;13.43;;11.04;10.35;10.08;23.08;SABc;;;;;;;;2MASX J02283311-1902318,ESO 545-021,ESO-LV 545-0210,IRAS 02262-1915,MCG -03-07-022,PGC 009420;;The APMBGC position is 11 arcsec northwest of the nucleus.; +NGC0948;G;02:28:45.47;-10:30:50.0;Cet;1.17;0.96;30;14.00;;12.54;11.95;11.65;23.07;Sc;;;;;;;;2MASX J02284546-1030501,MCG -02-07-015,PGC 009431;;; +NGC0949;G;02:30:48.65;+37:08:12.4;Tri;3.10;1.35;144;12.67;11.98;10.06;9.41;9.16;23.07;Sb;;;;;;;;2MASX J02304865+3708124,IRAS 02277+3654,MCG +06-06-048,PGC 009566,UGC 01983;;; +NGC0950;G;02:29:11.77;-11:01:28.9;Cet;1.18;0.63;47;14.48;;11.74;11.10;10.78;23.23;SBb;;;;;;;;2MASX J02291177-1101287,MCG -02-07-021,PGC 009461;;; +NGC0951;G;02:28:56.88;-22:20:58.0;Cet;1.08;0.54;22;15.54;;13.24;12.44;12.35;23.90;SBab;;;;;;;;2MASX J02285688-2220579,ESO 479-008,ESO-LV 479-0080,MCG -04-07-001,PGC 009442;;; +NGC0952;Other;02:31:18.82;+34:44:51.5;Tri;;;;;;;;;;;;;;;;;;;;Nothing bright enough at this position.; +NGC0953;G;02:31:09.78;+29:35:19.5;Tri;1.47;1.19;14;14.50;;10.36;9.73;9.42;24.09;E;;;;;;;;2MASX J02310976+2935193,MCG +05-07-001,PGC 009586,UGC 01991;;; +NGC0954;G;02:28:51.63;-41:24:09.6;Eri;1.79;0.94;16;13.85;;11.15;10.55;10.08;23.05;SBc;;;;;;;;2MASX J02285162-4124095,ESO 299-004,ESO-LV 299-0040,IRAS 02268-4137,MCG -07-06-006,PGC 009438;;; +NGC0955;G;02:30:33.15;-01:06:30.3;Cet;2.72;0.88;20;12.93;11.97;9.74;9.04;8.75;23.18;Sab;;;;;;;;2MASX J02303311-0106305,MCG +00-07-027a,PGC 009549,SDSS J023033.04-010640.2,SDSS J023033.05-010640.3,SDSS J023033.12-010632.4,SDSS J023033.14-010630.2,UGC 01986;;; +NGC0956;OCl;02:32:30.90;+44:35:36.5;And;4.50;;;;8.90;;;;;;;;;;;;;MWSC 0208;;; +NGC0957;OCl;02:33:19.03;+57:34:10.9;Per;10.20;;;8.34;7.60;;;;;;;;;;;;;MWSC 0211;;; +NGC0958;G;02:30:42.83;-02:56:20.4;Cet;2.51;0.72;2;13.00;;9.87;9.11;8.80;22.65;SBc;;;;;;;;2MASX J02304283-0256204,IRAS 02281-0309,MCG -01-07-019,PGC 009560,SDSS J023042.81-025620.4;;; +NGC0959;G;02:32:23.94;+35:29:40.7;Tri;1.87;1.11;67;12.95;12.38;10.95;10.24;9.61;22.61;Sd;;;;;;;;2MASX J02322394+3529408,IRAS 02293+3516,MCG +06-06-051,PGC 009665,UGC 02002;;; +NGC0960;G;02:31:41.36;-09:18:01.6;Cet;1.23;0.32;125;14.00;;11.39;10.59;10.29;23.15;SABb;;;;;;;;2MASX J02314130-0918010,MCG -02-07-028,PGC 009621,SDSS J023141.34-091801.6,SDSS J023141.35-091801.5,SDSS J023141.35-091801.6;;; +NGC0961;G;02:41:02.49;-06:56:09.3;Cet;1.81;1.04;96;13.00;;;;13.50;22.97;Sm;;;;;1051;0249;;MCG -01-07-033,PGC 010172,SDSS J024102.48-065609.3,UGCA 040;;The APM image includes a superposed star.; +NGC0962;G;02:32:39.83;+28:04:11.8;Ari;1.46;1.03;178;14.20;;10.30;9.63;9.31;23.71;E-S0;;;;;;;;2MASX J02323984+2804116,MCG +05-07-004,PGC 009682,UGC 02013;;; +NGC0963;G;02:30:31.28;-04:12:55.5;Cet;0.80;0.79;110;14.50;;12.14;11.45;11.31;22.54;I;;;;;;1808;;2MASX J02303129-0412555,MCG -01-07-017,PGC 009545;;; +NGC0964;G;02:31:05.79;-36:02:04.8;For;2.18;0.50;33;13.48;;10.10;9.36;9.09;23.14;Sab;;;;;;1814;;2MASX J02310577-3602046,ESO 355-024,ESO-LV 355-0240,IRAS 02290-3615,MCG -06-06-010,PGC 009582;;SGC claims = IC 1814.; +NGC0965;G;02:32:25.10;-18:38:23.0;Cet;0.94;0.77;173;14.92;;12.82;12.58;12.11;23.25;SBc;;;;;;;;ESO 545-032,ESO-LV 545-0320,MCG -03-07-031,PGC 009666;;; +NGC0966;G;02:31:47.16;-19:52:54.1;Cet;1.13;0.95;107;14.37;;11.21;10.55;10.32;22.89;E-S0;;;;;;;;2MASX J02314714-1952541,ESO 545-030,ESO-LV 545-0300,MCG -03-07-029,PGC 009626;;Position in 1998AJ....116....1D includes a bright superposed star.; +NGC0967;G;02:32:12.71;-17:13:00.7;Cet;1.48;1.06;41;13.46;;10.76;10.00;9.76;23.41;E-S0;;;;;;;;2MASX J02321271-1713005,ESO 545-031,ESO-LV 545-0310,MCG -03-07-030,PGC 009654;;; +NGC0968;G;02:34:06.21;+34:28:47.6;Tri;1.20;0.45;49;13.80;;10.37;9.61;9.44;23.07;E;;;;;;;;2MASX J02340623+3428480,MCG +06-06-056,PGC 009779,UGC 02040;;; +NGC0969;G;02:34:08.20;+32:56:49.0;Tri;1.69;1.16;8;13.50;12.41;10.19;9.52;9.19;23.43;S0;;;;;;;;2MASX J02340789+3256500,MCG +05-07-008,PGC 009781,UGC 02039;;; +NGC0970;GPair;02:34:11.30;+32:58:34.0;Tri;1.00;;;;;;;;;;;;;;;;;MCG +05-07-009;;;Diameter of the group inferred by the author. +NGC0970 NED01;G;02:34:10.74;+32:58:29.5;Tri;;;;;;;;;;;;;;;;;;MCG +05-07-009 NED01;;; +NGC0970 NED02;G;02:34:11.70;+32:58:38.2;Tri;0.72;0.26;53;15.70;;12.45;11.72;11.33;23.88;;;;;;;;;2MASX J02341170+3258380,MCG +05-07-009 NED02,PGC 009786;;; +NGC0971;*;02:34:16.05;+32:59:13.6;Tri;;;;;;;;;;;;;;;;;;;;; +NGC0972;G;02:34:13.38;+29:18:40.6;Ari;3.31;1.61;151;12.10;;8.94;8.21;7.86;23.06;Sab;;;;;;;;2MASX J02341338+2918404,IRAS 02312+2905,MCG +05-07-010,PGC 009788,UGC 02045;;The 2MASS Extended Source position is 11 arcsec northwest of the nucleus.; +NGC0973;G;02:34:20.11;+32:30:20.2;Tri;3.28;0.43;49;13.70;;10.02;9.18;8.77;23.81;Sb;;;;;;;;2MASX J02342010+3230200,IRAS 02313+3217,MCG +05-07-013,PGC 009795,UGC 02048;;Right Ascension in 1993AN....314...97K is incorrect.; +NGC0974;G;02:34:25.80;+32:57:16.2;Tri;3.20;2.60;15;13.90;;10.40;9.66;9.45;25.16;SABb;;;;;;;;2MASX J02342577+3257160,IRAS 02314+3243,MCG +05-07-012,PGC 009802,UGC 02049;;; +NGC0975;G;02:33:22.75;+09:36:06.1;Cet;0.84;0.63;1;14.20;;10.98;10.24;9.95;22.62;S0-a;;;;;;;;2MASX J02332274+0936063,MCG +01-07-009,PGC 009735,UGC 02030;;; +NGC0976;G;02:34:00.02;+20:58:36.4;Ari;1.54;1.44;160;12.90;;10.14;9.47;9.11;22.86;Sbc;;;;;;;;2MASX J02340001+2058364,IRAS 02311+2045,MCG +03-07-027,PGC 009776,SDSS J023400.02+205836.2,UGC 02042;;; +NGC0977;G;02:33:03.43;-10:45:35.9;Cet;1.82;1.17;38;13.00;;11.27;10.58;10.40;24.02;Sa;;;;;;;;2MASX J02330342-1045361,MCG -02-07-031,PGC 009713;;; +NGC0978A;G;02:34:46.97;+32:50:46.3;Tri;1.83;1.53;85;13.30;;10.09;9.42;9.11;23.32;E-S0;;;;;;;;2MASX J02344697+3250462,MCG +05-07-016,PGC 009821,UGC 02057;;Called 'NGC 0978a' in MCG, and 'NGC 0978' in UGC.; +NGC0978B;G;02:34:48.10;+32:50:29.0;Tri;0.64;0.28;7;15.00;;;;;;S0;;;;;;;;MCG +05-07-017,PGC 009823,UGC 02057 NOTES01;;Called 'NGC 0978b' in MCG.; +NGC0979;G;02:31:38.79;-44:31:27.5;Eri;1.38;1.12;108;13.81;;10.60;9.95;9.63;23.27;S0;;;;;;;;2MASX J02313876-4431273,ESO 246-023,ESO-LV 246-0230,MCG -07-06-014,PGC 009614;;; +NGC0980;G;02:35:18.56;+40:55:35.4;And;1.64;0.81;110;14.30;;11.07;10.38;10.11;23.99;S0;;;;;;;;2MASX J02351856+4055356,MCG +07-06-038,PGC 009831,UGC 02063;;Often incorrectly called NGC 0982.; +NGC0981;G;02:32:59.89;-10:58:26.2;Cet;1.08;0.51;6;14.00;;12.08;11.32;11.10;22.90;Sc;;;;;;;;2MASX J02325989-1058261,MCG -02-07-030,PGC 009710;;; +NGC0982;G;02:35:24.87;+40:52:11.0;And;1.60;0.63;132;13.20;;10.06;9.31;8.96;22.45;Sa;;;;;;;;2MASX J02352485+4052109,IRAS 02322+4039,MCG +07-06-039,PGC 009838,UGC 02066;;Often incorrectly called NGC 0980.; +NGC0983;G;02:38:55.64;+34:37:20.2;Tri;1.16;0.69;136;14.00;;11.00;10.33;10.01;22.80;SBb;;;;;1002;;;2MASX J02385564+3437201,IRAS 02358+3424,MCG +06-06-070,PGC 010034,UGC 02133;;; +NGC0984;G;02:34:43.10;+23:24:46.8;Ari;1.66;1.10;114;14.50;;10.29;9.53;9.29;24.52;S0-a;;;;;;;;2MASX J02344313+2324472,MCG +04-07-012,PGC 009819,UGC 02059;;; +NGC0985;G;02:34:37.77;-08:47:15.4;Cet;0.86;0.66;80;14.64;14.28;11.63;11.10;10.54;22.24;I;;;;;;;;2MASX J02343788-0847170,IRAS 02321-0900,MCG -02-07-035,PGC 009817;;; +NGC0986;G;02:33:34.35;-39:02:42.2;For;3.77;3.03;52;11.74;10.91;8.75;8.02;7.78;23.15;Sab;;;;;;;;2MASX J02333434-3902422,ESO 299-007,ESO-LV 299-0070,IRAS 02315-3915,MCG -07-06-015,PGC 009747;;; +NGC0986A;G;02:32:41.45;-39:17:46.4;For;1.85;0.29;78;14.86;13.97;;;;24.68;;;;;;;;;ESO 299-006,ESO-LV 299-0060,MCG -07-06-014A,PGC 009685;;; +NGC0987;G;02:36:49.61;+33:19:38.1;Tri;1.52;1.07;36;13.40;;10.01;9.28;8.98;23.03;S0-a;;;;;;;;2MASX J02364960+3319381,IRAS 02338+3306,MCG +05-07-021,PGC 009911,UGC 02093;;; +NGC0988;G;02:35:27.75;-09:21:22.3;Cet;4.33;1.73;119;11.73;;7.34;7.35;7.00;22.09;Sc;;;;;;;;2MASX J02352772-0921216,IRAS 02330-0934,MCG -02-07-037,PGC 009843,UGCA 035;;"HD 1615 (V=7.1) superposed 52"" northwest of center."; +NGC0989;G;02:33:46.05;-16:30:40.2;Cet;0.92;0.84;85;15.00;;11.69;11.03;10.90;23.51;S0;;;;;;;;2MASX J02334606-1630398,MCG -03-07-034,PGC 009762;;; +NGC0990;G;02:36:18.21;+11:38:31.5;Ari;1.48;1.12;41;13.90;;10.31;9.65;9.32;23.21;E;;;;;;;;2MASX J02361820+1138315,MCG +02-07-018,PGC 009890,UGC 02089;;; +NGC0991;G;02:35:32.68;-07:09:16.0;Cet;1.48;1.31;75;12.36;;11.98;11.45;11.18;22.55;SABc;;;;;;;;2MASX J02353199-0709366,IRAS 02330-0722,MCG -01-07-023,PGC 009846,SDSS J023532.68-070915.9,SDSS J023532.68-070916.0;;; +NGC0992;G;02:37:25.49;+21:06:03.0;Ari;0.79;0.59;8;13.50;;10.90;10.15;9.80;23.51;SBc;;;;;;;;2MASX J02372549+2106030,IRAS 02345+2053,MCG +03-07-035,PGC 009938,UGC 02103;;; +NGC0993;G;02:36:46.06;+02:03:01.5;Cet;0.86;0.68;105;14.90;;11.20;10.54;10.14;23.34;E-S0;;;;;0994;;;2MASX J02364604+0203015,MCG +00-07-052,PGC 009910,UGC 02095;;; +NGC0994;Dup;02:36:46.06;+02:03:01.5;Cet;;;;;;;;;;;;;;;0993;;;;;; +NGC0995;G;02:38:32.04;+41:31:45.3;Per;1.30;0.76;36;14.90;;10.93;10.23;9.93;24.06;S0;;;;;;;;2MASX J02383202+4131452,MCG +07-06-044,PGC 010008,UGC 02118;;; +NGC0996;G;02:38:39.87;+41:38:51.1;Per;1.30;1.12;75;14.50;;10.53;9.81;9.56;23.87;E;;;;;;;;2MASX J02383986+4138512,MCG +07-06-045,PGC 010015,UGC 02123;;; +NGC0997;GPair;02:37:14.50;+07:18:28.0;Cet;1.00;;;;;;;;;;;;;;;;;MCG +01-07-016,UGC 02102;;;Diameter of the group inferred by the author. +NGC0997 NED01;G;02:37:14.42;+07:18:35.2;Cet;;;;;;;;;;;;;;;;;;MCG +01-07-016 NED01,PGC 200205,UGC 02102 NED01;;;Diameters and position angle taken from Simbad. +NGC0997 NED02;G;02:37:14.50;+07:18:20.3;Cet;1.12;1.02;5;14.60;;10.48;9.65;9.42;23.82;E;;;;;;;;2MASX J02371447+0718201,MCG +01-07-016 NED02,PGC 009932,UGC 02102 NED02;;; +NGC0998;G;02:37:16.50;+07:20:08.9;Cet;0.63;0.52;175;14.60;;12.15;11.42;11.07;;;;;;;;;;2MASX J02371649+0720091,PGC 009934;;; +NGC0999;G;02:38:47.46;+41:40:13.8;Per;0.78;0.69;61;14.50;;11.32;10.71;10.37;22.90;SABa;;;;;;;;2MASX J02384745+4140132,MCG +07-06-047,PGC 010026,UGC 02127;;IC 0240 is an asterism of 3-4 Galactic stars.; +NGC1000;G;02:38:49.74;+41:27:34.9;Per;0.64;0.39;90;15.60;;11.88;11.19;10.93;23.39;E;;;;;;;;2MASX J02384973+4127352,MCG +07-06-048,PGC 010028;;; +NGC1001;G;02:39:12.65;+41:40:18.2;Per;0.72;0.27;114;14.70;;11.27;10.61;10.34;22.42;Sab;;;;;;;;2MASX J02391263+4140182,MCG +07-06-050,PGC 010050;;; +NGC1002;Dup;02:38:55.64;+34:37:20.2;Tri;;;;;;;;;;;;;;;0983;;;;;; +NGC1003;G;02:39:16.89;+40:52:20.3;Per;3.47;0.83;96;12.10;;10.12;9.52;9.35;22.34;Sc;;;;;;;;2MASX J02391689+4052202,IRAS 02360+4039,MCG +07-06-051,PGC 010052,UGC 02137;;; +NGC1004;G;02:37:41.78;+01:58:31.1;Cet;1.17;1.05;96;14.30;;10.73;10.02;9.78;22.95;E;;;;;;;;2MASX J02374181+0158309,MCG +00-07-057,PGC 009961,UGC 02112;;; +NGC1005;G;02:39:29.20;+41:29:20.3;Per;0.66;0.65;45;14.70;;11.21;10.70;10.33;;E;;;;;;;;2MASX J02392768+4129362,2MASX J02392918+4129203,MCG +07-06-052,PGC 010062;;;Diameters and position angle taken from Simbad. +NGC1006;G;02:37:34.86;-11:01:30.0;Cet;0.86;0.24;1;14.00;;;;;21.85;Sc;;;;;1010;;;2MASX J02373487-1101300,MCG -02-07-044,PGC 009949;;; +NGC1007;G;02:37:52.26;+02:09:21.7;Cet;0.61;0.21;50;15.00;;12.71;11.85;11.76;24.10;;;;;;;;;2MASX J02375226+0209220,MCG +00-07-059,PGC 009967;;; +NGC1008;G;02:37:55.29;+02:04:46.7;Cet;0.86;0.54;83;14.90;;11.64;11.01;10.75;23.47;E;;;;;;;;2MASX J02375526+0204470,MCG +00-07-060,PGC 009970,UGC 02114;;; +NGC1009;G;02:38:19.07;+02:18:36.1;Cet;1.39;0.23;124;15.40;;12.16;11.43;11.17;23.68;Sb;;;;;;;;2MASX J02381907+0218361,MCG +00-07-065,PGC 009995,UGC 02129;;; +NGC1010;Dup;02:37:34.86;-11:01:30.0;Cet;;;;;;;;;;;;;;;1006;;;;;; +NGC1011;G;02:37:38.89;-11:00:20.0;Cet;0.68;0.62;160;15.00;;11.95;11.24;11.16;22.79;Sa;;;;;;;;2MASX J02373887-1100200,MCG -02-07-045,PGC 009955;;; +NGC1012;G;02:39:14.91;+30:09:05.0;Ari;2.10;1.05;24;13.10;;10.31;9.51;9.34;23.34;S0-a;;;;;;;;2MASX J02391496+3009060,IRAS 02362+2956,MCG +05-07-027,PGC 010051,UGC 02141;;; +NGC1013;G;02:37:50.47;-11:30:26.1;Cet;1.08;0.68;66;14.00;;11.58;10.94;10.65;23.81;S0-a;;;;;;;;2MASX J02375042-1130261,MCG -02-07-046,PGC 009966;;; +NGC1014;**;02:38:00.85;-09:34:24.2;Cet;;;;;;;;;;;;;;;;;;;;; +NGC1015;G;02:38:11.56;-01:19:07.3;Cet;1.98;1.68;100;12.80;;10.35;9.67;9.35;23.55;Sa;;;;;;;;2MASX J02381156-0119070,MCG +00-07-066,PGC 009988,SDSS J023811.55-011907.5,UGC 02124;;; +NGC1016;G;02:38:19.56;+02:07:09.3;Cet;2.26;1.36;42;13.30;;9.54;8.85;8.58;23.26;E;;;;;;;;2MASX J02381955+0207091,MCG +00-07-067,PGC 009997,UGC 02128;;; +NGC1017;G;02:37:49.84;-11:00:37.0;Cet;0.68;0.55;64;14.50;;13.05;12.44;12.02;22.59;I;;;;;;;;2MASX J02374984-1100371,MCG -02-07-047,PGC 009964;;; +NGC1018;G;02:38:10.36;-09:32:38.1;Cet;1.07;0.59;178;15.00;;12.35;11.67;11.26;23.88;S0-a;;;;;;;;2MASX J02381034-0932381,MCG -02-07-048,PGC 009986;;; +NGC1019;G;02:38:27.41;+01:54:27.8;Cet;1.08;0.75;35;15.71;14.95;11.80;11.06;10.82;23.22;Sbc;;;;;;;;2MASX J02382742+0154276,MCG +00-07-068,PGC 010006,UGC 02132;;; +NGC1020;G;02:38:44.34;+02:13:52.6;Cet;0.92;0.28;20;15.00;;11.94;11.21;10.99;23.67;S0;;;;;;;;2MASX J02384435+0213526,PGC 010018;;; +NGC1021;G;02:38:48.02;+02:13:02.7;Cet;0.79;0.55;161;15.10;;12.17;11.56;11.19;23.05;SABb;;;;;;;;2MASX J02384802+0213026,PGC 010027;;; +NGC1022;G;02:38:32.71;-06:40:38.7;Cet;2.60;1.50;74;12.09;11.34;9.45;8.79;8.50;22.66;SBa;;;;;;;;2MASX J02383270-0640386,IRAS 02360-0653,MCG -01-07-025,PGC 010010;;; +NGC1023;G;02:40:24.01;+39:03:47.8;Per;7.40;3.06;87;10.35;9.35;7.16;6.49;6.24;22.59;E-S0;;;;;;;;2MASX J02402401+3903477,MCG +06-06-073,PGC 010123,UGC 02154;;; +NGC1023A;G;02:40:37.7;+39:03:27;Per;1.30;0.65;50;;;;;;23.17;IB;;;;;;;;PGC 010139;;; +NGC1024;G;02:39:11.96;+10:50:48.6;Ari;2.86;1.06;151;13.80;;9.75;9.01;8.74;23.61;Sab;;;;;;;;2MASX J02391196+1050485,IRAS 02365+1037,MCG +02-07-020,PGC 010048,UGC 02142;;; +NGC1025;G;02:36:19.93;-54:51:51.0;Hor;0.94;0.55;15;14.62;;11.77;10.96;10.67;22.29;Sb;;;;;;;;2MASX J02361991-5451510,ESO 154-004,ESO-LV 154-0040,IRAS 02347-5504,PGC 009891;;; +NGC1026;G;02:39:19.22;+06:32:38.4;Cet;1.84;1.68;85;14.10;;10.60;9.93;9.69;24.13;S0;;;;;;;;2MASX J02391920+0632381,2MASX J02391987+0632151,MCG +01-07-018,PGC 010055,UGC 02145;;; +NGC1027;OCl;02:42:35.06;+61:35:39.7;Cas;7.80;;;7.28;6.70;;;;;;;;;;;1824;;MWSC 0225;;The IC identification is not certain.; +NGC1028;G;02:39:37.15;+10:50:37.2;Ari;0.87;0.46;15;15.61;14.79;12.37;11.65;11.45;23.30;SABb;;;;;;;;2MASX J02393715+1050371,MCG +02-07-023,PGC 010068;;; +NGC1029;G;02:39:36.54;+10:47:36.0;Ari;1.56;0.46;70;14.20;13.11;10.62;9.93;9.63;23.82;S0-a;;;;;;;;2MASX J02393654+1047361,MCG +02-07-024,PGC 010078,UGC 02149;;; +NGC1030;G;02:39:50.60;+18:01:27.4;Ari;1.50;0.64;8;14.50;;10.81;10.05;9.61;23.34;Sc;;;;;;;;2MASX J02395060+1801274,IRAS 02370+1748,MCG +03-07-039,PGC 010088,UGC 02153;;; +NGC1031;G;02:36:38.76;-54:51:35.2;Hor;2.27;1.08;24;13.64;;10.37;9.66;9.41;23.57;SBa;;;;;;;;2MASX J02363879-5451350,ESO 154-005,ESO-LV 154-0050,PGC 009907;;; +NGC1032;G;02:39:23.64;+01:05:37.6;Cet;3.58;0.86;67;13.20;;9.33;8.61;8.38;23.75;S0-a;;;;;;;;2MASX J02392368+0105376,MCG +00-07-073,PGC 010060,SDSS J023923.65+010536.9,UGC 02147;;87GB source with large sky, narrow minor axis, or very bad confusion.; +NGC1033;G;02:40:16.12;-08:46:37.0;Cet;1.14;0.91;178;14.00;;11.65;11.00;10.76;23.41;Sc;;;;;;;;2MASX J02401607-0846371,MCG -02-07-053,PGC 010108,SDSS J024016.11-084637.0,SDSS J024016.12-084637.0,SDSS J024016.12-084637.1;;; +NGC1034;G;02:38:14.02;-15:48:32.7;Cet;0.80;0.73;140;14.55;;12.25;11.65;11.62;22.74;I;;;;;;;;2MASX J02381401-1548325,IRAS 02358-1601,MCG -03-07-043,PGC 009991;;; +NGC1035;G;02:39:29.09;-08:07:58.6;Cet;2.08;0.68;153;12.89;;10.12;9.42;9.13;22.36;Sc;;;;;;;;2MASX J02392990-0808212,IRAS 02370-0820,MCG -01-07-027,PGC 010065,SDSS J023929.13-080801.1,SDSS J023929.25-080804.1,SDSS J023929.26-080804.2;;The 2MASX and SDSS positions are southeast of the J-band nucleus.; +NGC1036;G;02:40:28.99;+19:17:49.6;Ari;1.40;1.03;3;13.50;;11.48;10.88;10.66;23.07;Sab;;;;;;1828;;2MASX J02402898+1917494,IRAS 02376+1904,MCG +03-07-041,PGC 010127,UGC 02160;;; +NGC1037;Other;02:39:58.38;-01:44:02.6;Cet;;;;;;;;;;;;;;;;;;;;Nonexistent object. Sometimes incorrectly equated with UGC 02119.; +NGC1038;G;02:40:06.32;+01:30:31.6;Cet;1.39;0.50;61;14.40;;10.86;10.13;9.86;23.55;S0-a;;;;;;;;2MASX J02400633+0130314,MCG +00-07-076,PGC 010096,TYC 47-1231-1,UGC 02158;;; +NGC1039;OCl;02:42:07.40;+42:44:46.1;Per;22.50;;;5.37;5.20;;;;;;;;;034;;;;MWSC 0223;;; +NGC1040;G;02:43:12.44;+41:30:02.2;Per;1.67;0.72;40;14.00;;10.70;9.93;9.62;23.75;S0;;;;;1053;;;2MASX J02431242+4130022,MCG +07-06-060,PGC 010298,UGC 02187;;; +NGC1041;G;02:40:25.22;-05:26:25.6;Cet;1.36;1.08;47;14.00;;10.88;10.18;9.89;23.59;E-S0;;;;;;;;2MASX J02402521-0526252,MCG -01-07-030,PGC 010125;;; +NGC1042;G;02:40:23.97;-08:26:00.8;Cet;3.87;2.13;1;11.56;11.02;10.29;9.73;8.85;22.81;SABc;;;;;;;;2MASX J02402397-0826011,IRAS 02379-0838,MCG -02-07-054,PGC 010122,SDSS J024023.96-082600.7,SDSS J024023.97-082600.7,SDSS J024023.97-082600.8;;Confused HIPASS source; +NGC1043;G;02:40:46.57;+01:20:35.3;Cet;0.85;0.18;111;15.70;;12.46;11.78;11.48;23.29;Sb;;;;;;;;2MASX J02404654+0120352,PGC 010155;;; +NGC1044;GPair;02:41:06.60;+08:44:14.0;Cet;1.20;;;;;;;;;;;;;;;;;MCG +01-07-023;;;Diameter of the group inferred by the author. +NGC1044 NED01;G;02:41:06.16;+08:44:16.9;Cet;0.76;0.76;110;14.80;;10.64;9.98;9.71;22.58;E-S0;;;;;;;;2MASX J02410618+0844167,MCG +01-07-023 NED01,PGC 010174;;; +NGC1044 NED02;G;02:41:07.25;+08:44:10.2;Cet;0.58;0.51;;15.16;;;;;;;;;;;;;;MCG +01-07-023 NED02,PGC 3080165;;;B-Mag taken from LEDA +NGC1045;G;02:40:29.12;-11:16:39.2;Cet;1.69;1.27;59;13.00;;9.82;9.15;8.87;23.29;E-S0;;;;;;;;2MASX J02402912-1116391,MCG -02-07-059,PGC 010129;;; +NGC1046;G;02:41:12.85;+08:43:09.8;Cet;0.75;0.70;130;14.90;;11.05;10.34;10.08;;E-S0;;;;;;;;2MASX J02411285+0843099,MCG +01-07-024,PGC 010185;;;Diameters and position angle taken from Simbad. +NGC1047;G;02:40:32.84;-08:08:51.6;Cet;1.36;0.75;91;14.50;;11.76;11.14;11.00;23.79;S0-a;;;;;;;;2MASX J02403280-0808511,MCG -01-07-032,PGC 010132,SDSS J024032.83-080851.6,SDSS J024032.84-080851.6;;; +NGC1048;G;02:40:37.95;-08:32:00.1;Cet;1.18;0.47;105;14.00;;11.79;11.03;10.76;24.30;S0-a;;;;;1048B;;;2MASX J02403792-0832001,MCG -02-07-062,PGC 010140,SDSS J024037.95-083200.0,SDSS J024037.95-083200.1,SDSS J024037.96-083200.1;;; +NGC1048A;G;02:40:35.7;-08:32:50;Cet;0.81;0.42;178;18.60;17.87;11.98;11.21;10.82;23.26;SBbc;;;;;;;;2MASX J02403563-0832491,MCG -02-07-058,PGC 010137,SDSS J024035.65-083249.6,SDSS J024035.66-083249.4,SDSS J024035.66-083249.5,SDSS J024035.67-083249.5,SDSS J024035.67-083249.7,SDSS J024035.72-083250.6;;Multiple SDSS entries describe this object.; +NGC1049;GCl;02:39:48.14;-34:15:29.7;For;1.12;0.92;25;13.59;;11.39;10.98;10.87;;;;;;;;;;2MASX J02394816-3415285,ESO 356-003,MCG -06-06-017;Fornax Dwarf Cluster 3;Globular cluster associated with Fornax Dwarf Irregular.; +NGC1050;G;02:42:35.59;+34:45:48.6;Per;1.10;0.81;98;13.71;12.81;10.74;10.05;9.69;22.42;SBa;;;;;;;;2MASX J02423557+3445484,IRAS 02395+3433,MCG +06-06-078,PGC 010257,UGC 02178;;; +NGC1051;Dup;02:41:02.49;-06:56:09.3;Cet;;;;;;;;;;;;;;;0961;;;;;; +NGC1052;G;02:41:04.80;-08:15:20.8;Cet;2.94;2.07;109;11.41;10.47;8.37;7.71;7.45;22.65;E;;;;;;;;2MASX J02410480-0815209,IRAS 02386-0828,MCG -01-07-034,PGC 010175;;; +NGC1053;Dup;02:43:12.44;+41:30:02.2;Per;;;;;;;;;;;;;;;1040;;;;;; +NGC1054;G;02:42:15.74;+18:13:01.9;Ari;0.80;0.44;30;14.60;;11.75;11.01;10.74;22.36;Sb;;;;;;;;2MASX J02421572+1813017,IRAS 02394+1800,MCG +03-07-046,PGC 010242;;; +NGC1055;G;02:41:45.23;+00:26:35.4;Cet;6.92;3.53;104;11.40;10.59;8.25;7.49;7.15;23.87;SBb;;;;;;;;2MASX J02414523+0026354,IRAS 02391+0013,MCG +00-07-081,PGC 010208,SDSS J024144.78+002642.4,UGC 02173;;Confused and extended HIPASS source; +NGC1056;G;02:42:48.30;+28:34:27.1;Ari;1.88;1.36;162;13.50;;10.14;9.38;9.12;23.36;Sa;;;;;;;;2MASX J02424828+2834273,IRAS 02398+2821,MCG +05-07-032,PGC 010272,UGC 02183;;; +NGC1057;G;02:43:02.90;+32:29:28.3;Tri;1.16;0.72;118;15.70;;11.40;10.57;10.25;24.62;S0;;;;;;;;2MASX J02430289+3229283,MCG +05-07-033,PGC 010287,UGC 02184;;; +NGC1058;G;02:43:30.00;+37:20:28.8;Per;2.47;1.36;90;12.29;11.75;9.90;9.25;9.03;22.16;Sc;;;;;;;;2MASX J02433005+3720283,IRAS 02403+3707,MCG +06-07-001,PGC 010314,UGC 02193;;; +NGC1059;**;02:42:35.60;+17:59:48.3;Ari;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC1060;G;02:43:15.05;+32:25:29.9;Tri;2.36;1.75;77;13.00;11.81;9.24;8.49;8.20;23.61;E-S0;;;;;;;;2MASX J02431504+3225300,MCG +05-07-035,PGC 010302,SDSS J024315.07+322529.6,UGC 02191;;; +NGC1061;G;02:43:15.76;+32:28:00.2;Tri;0.87;0.59;27;15.20;;11.64;10.87;10.58;23.38;Sb;;;;;;;;2MASX J02431575+3228000,IRAS 02402+3215,MCG +05-07-036,PGC 010303;;; +NGC1062;*;02:43:24.02;+32:27:43.7;Tri;;;;;;;;;;;;;;;;;;;;; +NGC1063;G;02:42:10.06;-05:34:06.8;Cet;1.45;0.51;97;14.00;;11.33;10.63;10.31;23.30;SABb;;;;;;;;2MASX J02421006-0534070,IRAS 02396-0546,MCG -01-07-036,PGC 010232;;; +NGC1064;G;02:42:23.53;-09:21:44.2;Cet;1.01;0.75;37;14.00;;12.35;12.07;11.35;23.52;SBc;;;;;;;;2MASX J02422356-0921440,MCG -02-07-071,PGC 010249,SDSS J024223.53-092144.1;;; +NGC1065;G;02:42:06.27;-15:05:29.6;Cet;0.82;0.75;0;14.00;;11.35;10.68;10.40;23.24;E-S0;;;;;;;;2MASX J02420629-1505289,MCG -03-07-059,PGC 010228;;; +NGC1066;G;02:43:49.94;+32:28:30.0;Tri;1.82;1.28;60;14.25;;9.88;9.13;8.89;24.73;E;;;;;;;;2MASX J02434989+3228295,MCG +05-07-042,PGC 010338,UGC 02203;;; +NGC1067;G;02:43:50.52;+32:30:42.8;Tri;0.97;0.92;145;14.55;13.69;11.88;11.39;11.04;23.18;SABc;;;;;;;;2MASX J02435052+3230425,MCG +05-07-043,PGC 010339,UGC 02204;;; +NGC1068;G;02:42:40.71;-00:00:47.8;Cet;6.11;5.61;12;9.61;8.87;6.97;6.26;5.79;22.35;Sb;;;;077;;;;2MASX J02424077-0000478,IRAS 02401-0013,MCG +00-07-083,PGC 010266,UGC 02188;;; +NGC1069;G;02:42:59.82;-08:17:22.2;Cet;1.35;0.84;146;14.50;;11.45;10.78;10.56;23.26;SABc;;;;;;;;2MASX J02425985-0817223,IRAS 02405-0829,MCG -01-07-038,PGC 010285,SDSS J024259.82-081722.1,SDSS J024259.82-081722.2,SDSS J024259.82-081722.3;;; +NGC1070;G;02:43:22.27;+04:58:06.3;Cet;2.34;2.00;178;13.00;;9.64;8.97;8.74;23.36;Sb;;;;;;;;2MASX J02432226+0458064,IRAS 02407+0445,MCG +01-07-026,PGC 010309,SDSS J024322.26+045806.0,UGC 02200;;; +NGC1071;G;02:43:07.85;-08:46:26.0;Cet;1.22;0.41;172;15.00;;12.34;11.59;11.09;23.94;SBa;;;;;;;;2MASX J02430783-0846261,MCG -02-07-077,PGC 010290;;; +NGC1072;G;02:43:31.31;+00:18:24.5;Cet;1.21;0.49;13;14.16;;11.14;10.39;10.14;22.98;Sab;;;;;;1837;;2MASX J02433129+0018244,IRAS 02409+0005,MCG +00-07-088,PGC 010315,SDSS J024331.30+001824.4,SDSS J024331.30+001824.5,SDSS J024331.31+001824.5,SDSS J024331.31+001824.6,UGC 02208;;; +NGC1073;G;02:43:40.52;+01:22:34.0;Cet;3.54;2.23;32;11.30;;9.79;9.26;8.98;22.78;SBc;;;;;;;;2MASX J02434059+0122331,IRAS 02411+0109,MCG +00-08-001,PGC 010329,UGC 02210;;; +NGC1074;G;02:43:36.12;-16:17:49.5;Cet;0.91;0.50;165;14.90;;12.52;12.12;11.61;23.36;SABa;;;;;;;;2MASX J02433613-1617496,MCG -03-08-001,PGC 010324;;; +NGC1075;G;02:43:33.55;-16:12:04.0;Cet;0.81;0.53;146;15.00;;12.73;11.70;11.52;23.56;S0-a;;;;;;;;2MASX J02433355-1612036,IRAS 02412-1624,MCG -03-08-002,PGC 010320;;; +NGC1076;G;02:43:29.25;-14:45:15.5;Cet;1.81;1.25;99;13.55;;10.84;10.21;9.98;23.47;S0-a;;;;;;;;2MASX J02432925-1445156,IRAS 02411-1457,MCG -03-08-003,PGC 010313;;; +NGC1077A;G;02:46:02.9;+40:05:36;Per;0.53;0.33;27;16.00;;14.40;13.41;13.54;24.09;SBb;;;;;;;;2MASX J02460292+4005358,MCG +07-06-068,PGC 010465;;; +NGC1077B;G;02:46:00.6;+40:05:25;Per;1.06;0.77;165;14.60;;11.40;10.70;10.42;23.17;Sb;;;;;;;;2MASX J02460057+4005248,MCG +07-06-069,PGC 010468,UGC 02230;;; +NGC1078;G;02:44:08.04;-09:27:08.6;Cet;0.85;0.62;45;15.00;;11.65;10.91;10.61;23.60;E-S0;;;;;;;;2MASX J02440800-0927082,MCG -02-08-001,PGC 010362;;; +NGC1079;G;02:43:44.34;-29:00:12.1;For;2.65;1.49;99;12.17;11.37;9.27;8.55;8.34;22.99;SABa;;;;;;;;2MASX J02434435-2900123,ESO 416-013,ESO-LV 416-0130,IRAS 02415-2913,MCG -05-07-017,PGC 010330;;; +NGC1080;G;02:45:09.94;-04:42:38.8;Eri;1.09;0.82;166;14.50;;11.78;11.16;10.85;22.84;SABc;;;;;;;;2MASX J02450993-0442388,IRAS 02426-0455,MCG -01-08-003,PGC 010416,SDSS J024509.95-044238.7;;; +NGC1081;G;02:45:05.52;-15:35:16.1;Eri;1.78;0.59;23;14.40;;11.60;10.93;10.70;23.35;SBb;;;;;;;;2MASX J02450551-1535160,IRAS 02427-1547,MCG -03-08-010,PGC 010411;;; +NGC1082;G;02:45:41.25;-08:10:49.9;Eri;0.96;0.71;102;15.50;;11.31;10.60;10.33;23.31;S0;;;;;;;;2MASX J02454120-0810497,MCG -01-08-004,PGC 010447,SDSS J024541.25-081049.8,SDSS J024541.25-081049.9;;; +NGC1083;G;02:45:40.60;-15:21:28.0;Eri;1.55;0.33;17;14.00;;;;;23.85;Sb;;;;;;;;2MASX J02454032-1521401,IRAS 02433-1534,MCG -03-08-015,PGC 010445;;; +NGC1084;G;02:45:59.91;-07:34:42.5;Eri;3.40;2.25;36;11.59;10.73;8.84;8.21;7.93;22.24;Sc;;;;;;;;2MASX J02455992-0734431,IRAS 02435-0747,MCG -01-08-007,PGC 010464,SDSS J024559.90-073442.4;;Extended HIPASS source; +NGC1085;G;02:46:25.30;+03:36:26.2;Cet;2.04;1.50;13;13.60;;10.79;10.00;9.80;23.82;Sbc;;;;;;;;2MASX J02462530+0336258,IRAS 02438+0323,MCG +00-08-010,PGC 010498,SDSS J024625.30+033626.1,UGC 02241;;; +NGC1086;G;02:47:56.37;+41:14:47.3;Per;1.32;0.79;43;13.60;;11.57;10.91;10.59;22.44;Sc;;;;;;;;2MASX J02475638+4114474,IRAS 02447+4102,MCG +07-06-071,PGC 010587,UGC 02258;;; +NGC1087;G;02:46:25.16;-00:29:55.1;Cet;2.97;1.80;10;11.50;;9.57;9.00;8.69;22.20;Sc;;;;;;;;2MASX J02462517-0029553,IRAS 02438-0042,MCG +00-08-009,PGC 010496,SDSS J024625.15-002955.2,SDSS J024625.16-002955.1,SDSS J024625.17-002955.3,SDSS J024625.32-002956.4,UGC 02245;;; +NGC1088;GPair;02:47:04.40;+16:12:04.0;Ari;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC1088 NED01;G;02:47:04.01;+16:11:59.7;Ari;0.88;0.52;95;14.80;;11.36;10.65;10.33;23.28;S0-a;;;;;;;;2MASX J02470402+1611597,MCG +03-08-009,PGC 010536,UGC 02253;;; +NGC1088 NED02;G;02:47:04.89;+16:12:08.7;Ari;0.48;0.22;116;16.69;;;;;24.31;;;;;;;;;MCG +03-08-009 NOTES01,PGC 1503207,UGC 02253 NOTES01;;;B-Mag taken from LEDA +NGC1089;G;02:46:10.10;-15:04:23.5;Eri;1.38;0.99;16;14.00;;11.01;10.31;10.08;24.07;E;;;;;;;;2MASX J02461014-1504231,MCG -03-08-020,PGC 010481;;; +NGC1090;G;02:46:33.94;-00:14:49.8;Cet;3.31;1.46;101;12.30;;10.08;9.40;9.20;23.32;Sbc;;;;;;;;2MASX J02463391-0014493,IRAS 02440-0027,MCG +00-08-011,PGC 010507,SDSS J024633.55-001450.6,SDSS J024633.93-001449.7,SDSS J024633.93-001449.8,SDSS J024634.90-001500.7,UGC 02247;;; +NGC1091;G;02:45:22.43;-17:31:59.4;Eri;0.81;0.67;86;14.88;;11.74;11.07;10.66;24.26;Sa;;;;;;;;2MASX J02452243-1731591,ESO 546-016,ESO-LV 546-0160,MCG -03-08-013,PGC 010424;;; +NGC1092;G;02:45:29.57;-17:32:32.2;Eri;1.00;0.89;130;14.40;;11.22;10.51;10.23;24.37;E;;;;;;;;2MASX J02452956-1732321,ESO 546-017,ESO-LV 546-0170,MCG -03-08-014,PGC 010432;;; +NGC1093;G;02:48:16.15;+34:25:11.2;Tri;1.16;0.75;99;14.30;;11.37;10.61;10.32;23.13;SABa;;;;;;;;2MASX J02481616+3425111,MCG +06-07-011,PGC 010606,SDSS J024816.13+342511.3,UGC 02274;;; +NGC1094;G;02:47:27.83;-00:17:06.4;Cet;1.32;0.84;89;13.50;;11.09;10.45;10.15;22.84;SABa;;;;;;;;2MASX J02472781-0017063,IRAS 02449-0029,MCG +00-08-015,PGC 010559,SDSS J024727.82-001706.5,SDSS J024727.83-001706.3,SDSS J024727.83-001706.4,UGC 02262;;UGC misprints R.A. as 03h44.9m.; +NGC1095;G;02:47:37.86;+04:38:15.5;Cet;1.26;0.81;46;14.20;;11.57;10.94;10.89;23.00;SBc;;;;;;;;2MASX J02473787+0438154,IRAS 02450+0425,MCG +01-08-001,PGC 010566,UGC 02264;;; +NGC1096;G;02:43:49.29;-59:54:48.3;Hor;1.76;1.61;45;13.75;;11.43;10.66;10.39;23.41;SBbc;;;;;;;;2MASX J02434931-5954484,ESO 115-028,ESO-LV 115-0280,IRAS 02425-6007,PGC 010336;;One APM image refers to the northeast end of the bar.; +NGC1097;G;02:46:19.05;-30:16:29.6;For;10.57;6.44;138;9.97;9.48;7.18;6.51;6.25;23.63;SBb;;;;;;;;2MASX J02461905-3016296,C 067,ESO 416-020,ESO-LV 416-0200,IRAS 02441-3029,MCG -05-07-024,PGC 010488,UGCA 041;;Extended HIPASS source; +NGC1097A;G;02:46:09.9;-30:13:41;For;1.00;0.57;100;14.61;;11.03;10.82;10.51;22.81;E;;;;;;;;2MASX J02460989-3013406,ESO 416-019,ESO-LV 416-0190,MCG -05-07-022,PGC 010479;;; +NGC1098;G;02:44:53.67;-17:39:32.9;Eri;1.58;1.27;103;13.62;;10.61;9.89;9.61;23.43;E-S0;;;;;;;;2MASX J02445363-1739330,ESO 546-014,ESO-LV 546-0140,MCG -03-08-008,PGC 010403;;; +NGC1099;G;02:45:18.02;-17:42:30.1;Eri;2.10;0.63;16;13.98;;10.78;10.05;9.85;23.59;SBb;;;;;;;;2MASX J02451802-1742301,ESO 546-015,ESO-LV 546-0150,IRAS 02429-1754,MCG -03-08-011,PGC 010422;;; +NGC1100;G;02:45:36.07;-17:41:20.2;Eri;1.64;0.76;60;14.03;;10.74;10.04;9.72;23.48;Sa;;;;;;;;2MASX J02453607-1741201,ESO 546-018,ESO-LV 546-0180,MCG -03-08-016,PGC 010438;;; +NGC1101;G;02:48:14.83;+04:34:40.9;Cet;1.33;1.05;100;14.80;;10.76;10.09;9.79;23.36;S0;;;;;;;;2MASX J02481480+0434411,MCG +01-08-003,PGC 010613,UGC 02278;;; +NGC1102;G;02:47:12.90;-22:12:31.8;Eri;0.89;0.58;90;15.30;;12.17;11.34;11.20;23.48;SABa;;;;;;;;2MASX J02471288-2212317,ESO 546-019,ESO-LV 546-0190,MCG -04-07-041,PGC 010545;;SGC claims = NGC 1102.; +NGC1103;G;02:48:06.00;-13:57:33.2;Eri;2.22;0.63;47;13.50;;11.45;10.83;10.51;23.21;SBb;;;;;;;;2MASX J02480598-1357332,IRAS 02457-1410,MCG -02-08-005,PGC 010597;;; +NGC1104;G;02:48:38.69;-00:16:17.5;Cet;1.04;0.62;150;14.80;;11.47;10.76;10.45;23.34;Sa;;;;;;;;2MASX J02483872-0016169,IRAS 02461-0028,MCG +00-08-019,PGC 010634,SDSS J024838.69-001617.4,SDSS J024838.69-001617.5,UGC 02287;;; +NGC1105;G;02:43:41.98;-15:42:20.1;Cet;0.97;0.83;66;15.00;;11.54;10.87;10.50;23.59;Sb;;;;;;1840;;2MASX J02434199-1542196,MCG -03-08-004,PGC 010333;;; +NGC1106;G;02:50:40.51;+41:40:17.4;Per;1.82;1.82;35;13.70;;10.24;9.51;9.21;23.71;S0;;;;;;;;2MASX J02504052+4140171,IRAS 02474+4127,MCG +07-06-076,PGC 010792,UGC 02322;;; +NGC1107;G;02:49:19.61;+08:05:33.5;Cet;1.88;1.56;140;14.10;;9.51;8.72;8.45;23.59;S0;;;;;;;;2MASX J02491961+0805334,MCG +01-08-006,PGC 010683,UGC 02307;;HOLM 063B is a star.; +NGC1108;G;02:48:38.54;-07:57:04.0;Eri;1.04;0.77;85;14.51;;11.38;10.60;10.33;23.52;E-S0;;;;;;;;2MASX J02483851-0757036,PGC 010633,SDSS J024838.52-075704.0,SDSS J024838.53-075703.9,SDSS J024838.53-075704.0,SDSS J024838.54-075704.0;;; +NGC1109;G;02:47:43.58;+13:15:19.2;Ari;0.81;0.67;116;15.40;;11.27;10.58;10.25;23.68;E;;;;;;1846;;2MASX J02474359+1315189,MCG +02-08-006,PGC 010573,UGC 02265;;Identification as NGC 1109 is uncertain.; +NGC1110;G;02:49:09.57;-07:50:15.2;Eri;2.37;0.46;11;16.11;;;;13.50;23.71;SBm;;;;;;;;MCG -01-08-010,PGC 010673,SDSS J024909.55-075015.3,SDSS J024909.57-075015.1,UGCA 043;;Confused HIPASS source; +NGC1111;G;02:48:39.35;+13:15:34.3;Ari;0.66;0.32;10;;;12.57;11.78;11.72;23.70;S0-a;;;;;;1850;;2MASX J02483933+1315339,PGC 1426583;;Identification as NGC 1111 is uncertain.; +NGC1112;G;02:49:00.37;+13:13:25.5;Ari;0.99;0.71;11;14.90;;11.89;11.03;10.67;23.27;Sc;;;;;;1852;;2MASX J02490037+1313257,IRAS 02462+1301,MCG +02-08-011,PGC 010660,UGC 02293;;Identification as NGC 1112 is uncertain.; +NGC1113;*;02:50:05.05;+13:19:38.7;Ari;;;;;;;;;;;;;;;;;;;;Identification as NGC 1113 is uncertain.; +NGC1114;G;02:49:07.20;-16:59:36.1;Eri;2.15;0.81;7;13.30;;10.68;10.12;9.74;22.77;Sc;;;;;;;;2MASX J02490719-1659360,IRAS 02467-1712,MCG -03-08-029,PGC 010669;;; +NGC1115;G;02:50:25.38;+13:15:58.4;Ari;0.91;0.26;7;15.60;;12.14;11.39;11.19;23.98;S0;;;;;;;;2MASX J02502539+1315584,MCG +02-08-016,PGC 010774;;; +NGC1116;G;02:50:35.69;+13:20:06.2;Ari;1.20;0.40;26;15.40;;11.66;10.87;10.54;23.81;Sab;;;;;;;;2MASX J02503567+1320063,MCG +02-08-017,PGC 010781,UGC 02326;;; +NGC1117;G;02:51:13.11;+13:11:07.1;Ari;0.70;0.52;4;14.90;;11.65;10.92;10.62;23.20;E;;;;;;;;2MASX J02511308+1311068,MCG +02-08-019,PGC 010822,UGC 02337 NED01;;NGC identification is not certain.; +NGC1118;G;02:49:58.67;-12:09:49.4;Eri;1.97;0.63;92;14.00;;11.33;10.60;10.41;24.38;S0;;;;;;;;2MASX J02495866-1209496,IRAS 02475-1222,MCG -02-08-011,PGC 010748;;; +NGC1119;G;02:48:17.08;-17:59:15.4;Eri;0.48;0.37;172;14.83;;12.96;12.40;12.24;22.20;S0;;;;;;;;2MASX J02481708-1759154,ESO 546-024,ESO-LV 546-0240,IRAS 02459-1811,PGC 010607;;; +NGC1120;G;02:49:04.09;-14:28:14.5;Eri;1.79;0.97;43;15.00;;14.60;13.75;13.72;24.61;E-S0;;;;;;0261;;2MASX J02490407-1428140,MCG -03-08-028,PGC 010664;;; +NGC1121;G;02:50:39.19;-01:44:02.6;Eri;0.95;0.34;10;13.70;;11.00;10.31;10.06;22.21;S0;;;;;;;;2MASX J02503921-0144025,MCG +00-08-030,PGC 010789,UGC 02332;;; +NGC1122;G;02:52:51.20;+42:12:18.1;Per;1.35;0.64;32;13.00;;10.34;9.60;9.33;22.11;SABb;;;;;1123;;;2MASX J02525105+4212194,IRAS 02496+4200,MCG +07-06-083,PGC 010890,UGC 02353;;; +NGC1123;Dup;02:52:51.20;+42:12:18.1;Per;;;;;;;;;;;;;;;1122;;;;;; +NGC1124;G;02:51:35.92;-25:42:06.6;For;1.10;0.74;2;14.88;;12.16;11.32;11.35;23.74;S0-a;;;;;;;;2MASX J02513592-2542067,ESO 480-007,ESO-LV 480-0070,MCG -04-07-047,PGC 010838;;; +NGC1125;G;02:51:40.27;-16:39:03.7;Eri;1.51;0.66;54;13.98;13.13;;;;22.88;S0-a;;;;;;;;IRAS 02493-1651,MCG -03-08-035,PGC 010851;;; +NGC1126;G;02:52:18.63;-01:17:45.6;Cet;0.95;0.23;139;15.40;;11.77;11.03;10.75;23.16;Sb;;;;;;;;2MASX J02521857-0117462,MCG +00-08-038,PGC 010868;;; +NGC1127;G;02:52:51.84;+13:15:23.1;Ari;0.69;0.49;36;15.70;;12.35;11.66;11.27;23.73;SBab;;;;;;;;2MASX J02525187+1315231,MCG +02-08-024,PGC 010889,UGC 02356;;; +NGC1128;GPair;02:57:41.57;+06:01:28.8;Cet;0.80;;;;;;;;;;;;;;;;;MCG +01-08-027;;;Diameter of the group inferred by the author. +NGC1128 NED01;G;02:57:41.65;+06:01:21.9;Cet;0.55;0.55;;14.70;;;;;;E-S0;;;;;;;;MCG +01-08-027 NED01,PGC 011189;;; +NGC1128 NED02;G;02:57:41.56;+06:01:36.9;Cet;0.76;0.76;;15.50;13.93;;;;22.12;E;;;;;;;;2MASX J02574155+0601371,MCG +01-08-027 NED02,PGC 011188;;; +NGC1129;G;02:54:27.38;+41:34:46.5;Per;2.82;1.07;77;14.60;13.60;9.24;8.56;8.24;24.66;E;;;;;;;;2MASX J02542739+4134467,MCG +07-07-004,PGC 010959,UGC 02373;;Incorrectly called 'NGC 1130' in MCG.; +NGC1130;G;02:54:24.38;+41:36:20.2;Per;0.69;0.41;36;15.60;;11.73;10.99;10.66;23.75;E;;;;;;;;2MASX J02542439+4136200,MCG +07-07-002,PGC 010951,UGC 02373 NOTES01;;NGC identification is not certain.; +NGC1131;G;02:54:33.98;+41:33:32.5;Per;0.54;0.46;105;;;11.56;10.80;10.53;;E;;;;;;;;2MASX J02543399+4133327,MCG +07-07-005,PGC 010964;;;Diameters and position angle taken from Simbad. +NGC1132;G;02:52:51.91;-01:16:28.9;Cet;1.91;0.71;142;13.90;;10.20;9.43;11.80;23.50;E;;;;;;;;2MASX J02525180-0116285,MCG +00-08-040,PGC 010891,UGC 02359;;; +NGC1133;G;02:52:42.19;-08:48:15.8;Eri;0.97;0.71;71;15.00;;11.82;11.10;10.79;23.33;SBa;;;;;;;;2MASX J02524218-0848157,IRAS 02502-0900,MCG -02-08-015,PGC 010885,SDSS J025242.18-084815.7,SDSS J025242.18-084815.8,SDSS J025242.19-084815.8;;; +NGC1134;G;02:53:41.34;+13:00:50.9;Ari;2.21;0.76;147;13.20;;9.91;9.06;8.81;23.01;Sb;;;;;;;;2MASX J02534134+1300508,IRAS 02509+1248,MCG +02-08-027,PGC 010928,UGC 02365;;; +NGC1135;G;02:50:47.22;-54:55:46.5;Hor;0.71;0.42;59;16.16;;13.56;12.99;12.56;23.62;Scd;;;;;;;;2MASX J02504722-5455466,ESO 154-018,ESO-LV 154-0180,PGC 010800;;; +NGC1136;G;02:50:53.70;-54:58:33.3;Hor;1.44;1.19;77;13.80;;10.81;10.11;9.81;23.18;Sa;;;;;;;;2MASX J02505366-5458331,ESO 154-019,ESO-LV 154-0190,PGC 010807;;; +NGC1137;G;02:54:02.73;+02:57:43.5;Cet;1.10;0.61;16;13.50;;10.86;10.15;9.95;22.30;Sb;;;;;;;;2MASX J02540274+0257436,IRAS 02514+0245,MCG +00-08-043,PGC 010942,SDSS J025402.71+025743.4,UGC 02374;;; +NGC1138;G;02:56:36.44;+43:02:50.5;Per;1.73;1.49;95;14.10;;9.97;9.27;9.03;23.95;S0;;;;;;;;2MASX J02563643+4302506,MCG +07-07-012,PGC 011118,UGC 02408;;; +NGC1139;G;02:52:46.81;-14:31:45.6;Eri;1.02;0.35;43;15.00;;12.29;11.61;11.28;24.27;S0-a;;;;;;;;2MASX J02524680-1431455,MCG -03-08-038,PGC 010888;;; +NGC1140;G;02:54:33.58;-10:01:39.9;Eri;2.04;1.00;8;12.84;12.49;11.28;10.63;10.51;22.43;SBm;;;;;;;;2MASX J02543354-1001426,IRAS 02521-1013,MCG -02-08-019,PGC 010966;;; +NGC1141;Dup;02:55:09.71;-00:10:40.3;Cet;;;;;;;;;;;;;;;1143;;;;;; +NGC1142;Dup;02:55:12.20;-00:11:00.8;Cet;;;;;;;;;;;;;;;1144;;;;;; +NGC1143;G;02:55:09.71;-00:10:40.3;Cet;1.22;0.68;111;13.20;;;;;23.56;E;;;;;1141;;;MCG +00-08-047,PGC 011007,SDSS J025509.70-001040.3,UGC 02388;;; +NGC1144;G;02:55:12.20;-00:11:00.8;Cet;1.08;0.74;118;15.42;14.41;10.07;9.27;9.02;22.79;E;;;;;1142;;;2MASX J02551226-0011018,IRAS 02526-0023,MCG +00-08-048,PGC 011012,SDSS J025512.22-001100.8,UGC 02389;;; +NGC1145;G;02:54:33.51;-18:38:06.3;Eri;3.36;0.76;61;13.55;;10.36;9.49;9.28;23.83;Sc;;;;;;;;2MASX J02543351-1838064,ESO 546-029,ESO-LV 546-0290,IRAS 02522-1850,MCG -03-08-042,PGC 010965,UGCA 045;;; +NGC1146;Other;02:57:37.34;+46:25:37.0;Per;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC1147;Other;02:55:09.29;-09:07:10.7;Eri;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1148;G;02:57:04.37;-07:41:08.3;Eri;1.31;0.68;75;15.00;;11.88;11.30;10.85;23.65;SBcd;;;;;;;;2MASX J02570434-0741081,MCG -01-08-018,PGC 011148,SDSS J025704.36-074108.3,SDSS J025704.37-074108.3;;Superposed star.; +NGC1149;G;02:57:23.87;-00:18:33.9;Cet;0.71;0.51;122;15.50;;11.77;11.10;10.83;23.11;E-S0;;;;;;;;2MASX J02572383-0018340,MCG +00-08-058,PGC 011170,SDSS J025723.86-001833.8,SDSS J025723.86-001833.9,SDSS J025723.87-001833.8,SDSS J025723.87-001833.9;;; +NGC1150;G;02:57:01.39;-15:02:54.3;Eri;1.06;0.70;64;15.00;;11.24;10.51;10.22;23.87;S0;;;;;;;;2MASX J02570136-1502536,MCG -03-08-048,PGC 011144;;; +NGC1151;G;02:57:04.63;-15:00:46.9;Eri;0.55;0.45;54;15.94;;12.45;11.65;11.32;23.62;E;;;;;;;;2MASX J02570461-1500466,PGC 011147;;; +NGC1152;G;02:57:33.63;-07:45:31.8;Eri;1.30;0.76;5;15.00;;11.31;10.59;10.34;23.59;S0;;;;;;;;2MASX J02573365-0745313,MCG -01-08-019,PGC 011182,SDSS J025733.62-074531.7,SDSS J025733.62-074531.8,SDSS J025733.63-074531.7,SDSS J025733.63-074531.8;;; +NGC1153;G;02:58:10.28;+03:21:42.9;Cet;1.23;0.85;53;13.50;;10.04;9.34;9.07;22.80;S0-a;;;;;;;;2MASX J02581028+0321429,MCG +00-08-059,PGC 011230,UGC 02439;;; +NGC1154;G;02:58:07.67;-10:21:47.9;Eri;1.02;0.59;90;14.40;;11.95;11.26;11.03;22.25;Sc;;;;;;;;2MASX J02580766-1021479,MCG -02-08-034,PGC 011221;;; +NGC1155;G;02:58:13.09;-10:21:02.1;Eri;1.10;0.87;75;15.00;;11.74;11.14;10.83;23.15;S0;;;;;;;;2MASX J02581308-1021019,IRAS 02557-1033,MCG -02-08-035,PGC 011233;;; +NGC1156;G;02:59:42.30;+25:14:16.2;Ari;2.96;2.34;28;12.32;11.74;10.36;9.73;9.55;22.96;IB;;;;;;;;2MASX J02594283+2514282,IRAS 02567+2502,MCG +04-08-006,PGC 011329,UGC 02455;;; +NGC1157;G;02:58:06.68;-15:07:06.7;Eri;0.72;0.32;171;15.58;;12.41;11.64;11.33;23.09;Sb;;;;;;;;2MASX J02580668-1507066,PGC 011218;;; +NGC1158;G;02:57:11.46;-14:23:43.9;Eri;0.95;0.61;147;15.22;;11.99;11.52;11.04;24.32;S0;;;;;;;;2MASX J02571146-1423439,MCG -03-08-049,PGC 011157;;; +NGC1159;G;03:00:46.52;+43:09:45.2;Per;0.48;0.40;115;14.20;;12.15;11.50;11.26;21.19;Sc;;;;;;;;2MASX J03004652+4309451,IRAS 02575+4257,PGC 011383,UGC 02467;;; +NGC1160;G;03:01:13.25;+44:57:19.5;Per;2.38;1.10;51;13.00;;10.75;10.11;9.88;23.47;SBc;;;;;;;;2MASX J03011325+4457195,IRAS 02579+4445,MCG +07-07-014,PGC 011403,UGC 02475;;; +NGC1161;G;03:01:14.13;+44:53:50.4;Per;2.69;1.84;23;13.20;12.08;;;;23.00;S0;;;;;;;;IRAS 02579+4442,MCG +07-07-015,PGC 011404,TYC 2859-727-1,UGC 02474;;; +NGC1162;G;02:58:56.00;-12:23:54.9;Eri;1.59;1.47;50;13.00;;9.94;9.29;9.01;23.69;E;;;;;;;;2MASX J02585601-1223547,MCG -02-08-036,PGC 011274;;; +NGC1163;G;03:00:22.09;-17:09:09.1;Eri;2.26;0.36;144;14.70;;11.30;10.48;10.25;23.88;SBbc;;;;;;;;2MASX J03002208-1709091,IRAS 02580-1720,MCG -03-08-056,PGC 011359;;; +NGC1164;G;03:01:59.85;+42:35:05.8;Per;1.18;0.93;132;14.40;;11.01;10.28;9.87;23.52;Sab;;;;;;;;2MASX J03015983+4235058,IRAS 02587+4223,MCG +07-07-016,PGC 011441,SDSS J030159.84+423505.7,UGC 02490;;; +NGC1165;G;02:58:47.69;-32:05:57.1;For;2.31;0.50;114;13.66;;10.48;10.04;9.74;23.71;SBa;;;;;;;;2MASX J02584767-3205572,ESO 417-008,ESO-LV 417-0080,IRAS 02567-3217,MCG -05-08-009,PGC 011270;;; +NGC1166;G;03:00:35.00;+11:50:34.0;Ari;0.98;0.80;75;15.40;;11.58;10.83;10.59;23.77;Sab;;;;;;;;2MASX J03003500+1150340,IRAS 02579+1138,MCG +02-08-046,PGC 011372,UGC 02471;;; +NGC1167;G;03:01:42.37;+35:12:20.7;Per;1.82;1.38;70;13.84;12.77;9.57;8.84;8.64;23.50;S0;;;;;;;;2MASX J03014235+3512203,MCG +06-07-033,PGC 011425,UGC 02487;;; +NGC1168;G;03:00:47.02;+11:46:20.3;Ari;0.98;0.38;24;15.40;;12.13;11.44;11.20;23.42;SABb;;;;;;;;2MASX J03004701+1146203,MCG +02-08-047,PGC 011378,UGC 02476;;; +NGC1169;G;03:03:34.75;+46:23:10.9;Per;3.31;1.95;39;13.20;;9.09;8.34;8.06;23.32;Sb;;;;;;;;2MASX J03033475+4623107,MCG +08-06-025,PGC 011521,UGC 02503;;; +NGC1170;Other;03:02:26.89;+27:04:21.6;Ari;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1171;G;03:03:58.99;+43:23:53.9;Per;1.77;0.81;147;13.60;;10.68;10.00;9.68;22.83;Sc;;;;;;;;2MASX J03035900+4323537,IRAS 03006+4312,MCG +07-07-018,PGC 011552,TYC 2859-2259-1,UGC 02510;;; +NGC1172;G;03:01:36.05;-14:50:11.7;Eri;2.28;1.64;30;12.87;;10.08;9.40;9.21;23.40;E;;;;;;;;2MASX J03013603-1450118,MCG -03-08-059,PGC 011420;;; +NGC1173;Other;03:03:57.71;+42:23:01.4;Per;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1174;G;03:05:30.86;+42:50:07.8;Per;3.58;1.43;121;12.50;;9.55;8.79;8.49;23.13;SBc;;;;;1186;;;2MASX J03053084+4250076,IRAS 03022+4238,MCG +07-07-021,PGC 011617,UGC 02521;;; +NGC1175;G;03:04:32.35;+42:20:21.5;Per;1.76;0.55;154;13.80;;10.27;9.56;9.24;23.71;S0-a;;;;;;;;2MASX J03043236+4220213,MCG +07-07-019,PGC 011578,UGC 02515;;; +NGC1176;*;03:04:34.88;+42:23:36.4;Per;;;;14.60;;13.13;12.78;12.73;;;;;;;;;;2MASS J03043490+4223363;;; +NGC1177;G;03:04:37.13;+42:21:46.2;Per;0.60;0.60;105;15.70;;11.74;11.02;10.74;23.46;E;;;;;;0281;;2MASX J03043715+4221463,MCG +07-07-020,PGC 011581,UGC 02515 NOTES01;;; +NGC1178;*;03:04:38.82;+42:18:48.5;Per;;;;15.30;;12.08;11.49;11.37;;;;;;;;;;2MASS J03043879+4218485;;; +NGC1179;G;03:02:38.48;-18:53:52.0;Eri;3.67;2.51;38;12.61;;12.10;12.33;12.40;23.90;Sc;;;;;;;;2MASX J03023847-1853518,ESO 547-001,ESO-LV 547-0010,IRAS 03003-1905,MCG -03-08-060,PGC 011480,UGCA 048;;; +NGC1180;G;03:01:51.04;-15:01:47.4;Eri;0.66;0.40;8;15.48;;12.34;11.58;11.40;23.70;E-S0;;;;;;;;2MASX J03015102-1501475,PGC 011435;;; +NGC1181;G;03:01:42.76;-15:03:08.4;Eri;0.86;0.20;101;16.06;;12.46;11.48;11.53;23.73;Sb;;;;;;;;2MASX J03014274-1503085,PGC 011427;;; +NGC1182;G;03:03:28.44;-09:40:13.2;Eri;0.82;0.39;116;14.96;;12.52;11.76;11.47;22.80;Sa;;;;;1205;;;2MASX J03032887-0940166,PGC 011511;;; +NGC1183;*;03:04:46.16;+42:22:08.2;Per;;;;15.00;;12.72;12.35;12.24;;;;;;;;;;2MASS J03044612+4222083;;; +NGC1184;G;03:16:45.03;+80:47:36.0;Cep;3.54;0.87;169;13.58;12.19;9.15;8.45;8.12;24.25;S0-a;;;;;;;;2MASX J03164489+8047358,MCG +13-03-002,PGC 012174,TYC 4520-773-1,UGC 02583;;; +NGC1185;G;03:02:59.48;-09:07:55.7;Eri;1.36;0.40;30;15.00;;11.51;10.75;10.39;23.09;SBb;;;;;;;;2MASX J03025947-0907555,IRAS 03005-0919,MCG -02-08-041,PGC 011488;;; +NGC1186;Dup;03:05:30.86;+42:50:07.8;Per;;;;;;;;;;;;;;;1174;;;;;; +NGC1187;G;03:02:37.59;-22:52:01.8;Eri;4.14;3.02;129;11.41;;8.99;8.40;8.10;22.93;Sc;;;;;;;;2MASX J03023758-2252017,ESO 480-023,ESO-LV 480-0230,IRAS 03003-2303,MCG -04-08-016,PGC 011479,UGCA 049;;; +NGC1188;G;03:03:43.37;-15:29:04.5;Eri;1.21;0.56;171;14.46;;11.65;11.02;10.76;23.80;S0;;;;;;;;2MASX J03034337-1529046,MCG -03-08-068,PGC 011533;;; +NGC1189;G;03:03:24.47;-15:37:24.5;Eri;1.42;0.47;179;13.80;;;;;22.96;Sd;;;;;;;;MCG -03-08-061,PGC 011503;;; +NGC1190;G;03:03:26.13;-15:39:42.8;Eri;0.76;0.29;98;15.32;;11.86;11.22;11.15;23.24;S0-a;;;;;;;;2MASX J03032612-1539429,MCG -03-08-062,PGC 011508;;Position in 1997ApJS..110....1D is 5 arcsec southeast of the nucleus.; +NGC1191;G;03:03:30.89;-15:41:07.1;Eri;0.76;0.56;61;15.60;;11.94;11.31;10.98;23.42;E-S0;;;;;;;;2MASX J03033083-1541069,MCG -03-08-064,PGC 011514;;; +NGC1192;G;03:03:34.63;-15:40:43.8;Eri;0.80;0.40;105;15.68;;12.07;11.54;11.14;23.71;E;;;;;;;;2MASX J03033464-1540439,MCG -03-08-065,PGC 011519;;; +NGC1193;OCl;03:05:55.67;+44:22:59.2;Per;2.40;;;;12.60;;;;;;;;;;;;;MWSC 0256;;; +NGC1194;G;03:03:49.11;-01:06:13.5;Cet;1.55;0.77;139;15.29;14.18;10.75;10.19;9.76;23.50;S0-a;;;;;;;;2MASX J03034909-0106129,IRAS 03012-0117,MCG +00-08-078,PGC 011537,SDSS J030349.10-010613.4,SDSS J030349.11-010613.4,SDSS J030349.11-010613.5,UGC 02514;;; +NGC1195;G;03:03:32.81;-12:02:23.2;Eri;0.64;0.53;84;14.00;;11.93;11.25;11.05;22.97;E-S0;;;;;;;;2MASX J03033280-1202229,MCG -02-08-042a,PGC 011517;;; +NGC1196;G;03:03:35.20;-12:04:34.7;Eri;1.54;1.41;100;14.00;;10.63;9.95;9.62;23.81;S0;;;;;;;;2MASX J03033518-1204349,MCG -02-08-042b,PGC 011522;;; +NGC1197;Other;03:06:14.21;+44:03:40.3;Per;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1198;G;03:06:13.24;+41:50:56.2;Per;2.05;1.00;117;14.00;;10.60;9.94;9.71;24.37;E;;;;;;0282;;2MASX J03061323+4150563,MCG +07-07-024,PGC 011648,UGC 02533;;; +NGC1199;G;03:03:38.41;-15:36:47.5;Eri;2.83;2.32;48;13.99;12.97;9.59;8.86;8.56;23.51;E;;;;;;;;2MASX J03033838-1536486,MCG -03-08-067,PGC 011527;;; +NGC1200;G;03:03:54.48;-11:59:30.5;Eri;2.91;1.88;84;13.00;;9.57;8.85;8.58;24.65;E-S0;;;;;;;;2MASX J03035448-1159306,MCG -02-08-043,PGC 011545;;; +NGC1201;G;03:04:07.98;-26:04:10.7;For;3.41;1.96;8;11.78;10.64;8.55;7.88;7.68;23.08;E-S0;;;;;;;;2MASX J03040796-2604105,ESO 480-028,ESO-LV 480-0280,MCG -04-08-023,PGC 011559;;; +NGC1202;G;03:05:02.53;-06:29:29.8;Eri;0.65;0.53;113;15.37;;12.53;11.92;11.65;22.87;Sb;;;;;;;;2MASX J03050254-0629298,IRAS 03025-0641,PGC 011593,SDSS J030502.12-062931.7,SDSS J030502.12-062931.8,SDSS J030502.52-062929.8;;The SDSS position used in the spec. cat. is not in the SDSS DR6 phot. cat.; +NGC1203A;G;03:05:14.1;-14:22:52;Eri;0.83;0.42;15;15.00;;11.36;10.42;10.53;23.71;E;;;;;;;;2MASX J03051411-1422515,MCG -03-08-070,PGC3442212 ;;; +NGC1203B;G;03:05:14.3;-14:22:40;Eri;0.58;0.58;6;16.00;;;;;;E;;;;;;;;MCG -03-08-071,PGC 011599;;; +NGC1204;G;03:04:39.92;-12:20:29.0;Eri;1.52;0.54;62;15.00;;10.99;10.24;9.95;23.67;S0-a;;;;;;;;2MASX J03043994-1220287,IRAS 03022-1232,MCG -02-08-045,PGC 011583;;; +NGC1205;Dup;03:03:28.44;-09:40:13.2;Eri;;;;;;;;;;;;;;;1182;;;;;; +NGC1206;G;03:06:09.74;-08:49:59.4;Eri;0.75;0.65;42;15.59;;11.83;11.21;10.84;23.91;E;;;;;;;;2MASX J03060977-0849598,PGC 011644;;; +NGC1207;G;03:08:15.49;+38:22:55.8;Per;1.68;1.18;131;13.70;;10.57;9.80;9.48;23.28;Sb;;;;;;;;2MASX J03081551+3822557,IRAS 03050+3811,MCG +06-07-043,PGC 011737,UGC 02548;;; +NGC1208;G;03:06:11.91;-09:32:29.1;Eri;2.19;1.24;73;14.00;;9.70;8.99;8.70;23.63;S0-a;;;;;;;;2MASX J03061191-0932288,MCG -02-08-047,PGC 011647;;; +NGC1209;G;03:06:03.02;-15:36:40.5;Eri;2.25;0.94;83;12.00;;9.25;8.55;8.32;22.91;E;;;;;;;;2MASX J03060302-1536405,MCG -03-08-073,PGC 011638;;; +NGC1210;G;03:06:45.36;-25:42:59.2;For;1.16;0.68;118;13.70;;11.03;10.33;10.08;22.58;S0;;;;;;;;2MASX J03064535-2542594,ESO 480-031,ESO-LV 480-0310,MCG -04-08-024,PGC 011666;;; +NGC1211;G;03:06:52.42;-00:47:40.1;Cet;1.49;0.95;163;13.30;;10.22;9.57;9.24;22.78;S0-a;;;;;;;;2MASX J03065240-0047399,IRAS 03043-0059,MCG +00-08-093,PGC 011670,SDSS J030652.41-004740.1,SDSS J030652.42-004740.1,SDSS J030652.42-004741.3,UGC 02545;;; +NGC1212;G;03:09:42.23;+40:53:35.1;Per;0.89;0.47;21;16.00;;12.11;11.32;11.23;24.17;S0-a;;;;;;1883;;2MASX J03094220+4053349,PGC 011815,UGC 02560;;; +NGC1213;G;03:09:17.31;+38:38:58.0;Per;0.94;0.76;14;15.70;;12.94;12.26;12.31;24.08;Sd;;;;;;1881;;2MASX J03091730+3838577,MCG +06-07-045,PGC 011789,UGC 02557;;; +NGC1214;G;03:06:56.02;-09:32:39.0;Eri;1.58;0.42;42;15.13;;10.89;10.15;9.82;24.58;S0-a;;;;;;;;2MASX J03065595-0932389,MCG -02-08-051,PGC 011675;;; +NGC1215;G;03:07:09.46;-09:35:33.6;Eri;1.67;1.21;50;14.00;;11.11;10.41;10.02;24.63;Sab;;;;;;;;2MASX J03070944-0935334,IRAS 03047-0946,MCG -02-08-055,PGC 011687;;; +NGC1216;G;03:07:18.54;-09:36:46.1;Eri;0.90;0.22;67;16.00;;11.53;10.80;10.55;24.23;S0-a;;;;;;;;2MASX J03071837-0936454,MCG -02-08-056,PGC 011693;;; +NGC1217;G;03:06:06.02;-39:02:11.0;For;1.88;1.30;32;13.34;;10.08;9.37;9.05;23.36;Sa;;;;;;;;2MASX J03060599-3902111,ESO 300-010,ESO-LV 300-0100,IRAS 03041-3913,MCG -07-07-003,PGC 011641;;; +NGC1218;G;03:08:26.22;+04:06:39.3;Cet;1.35;1.06;155;12.84;;10.15;9.40;9.07;23.29;S0-a;;;;;;;;2MASX J03082624+0406388,MCG +01-09-001,PGC 011749,UGC 02555;;; +NGC1219;G;03:08:27.97;+02:06:30.9;Cet;1.18;1.04;42;13.50;;10.82;10.12;9.85;22.80;Sc;;;;;;;;2MASX J03082795+0206308,IRAS 03058+0154,MCG +00-09-006,PGC 011752,UGC 02556;;; +NGC1220;OCl;03:11:40.67;+53:20:53.4;Per;2.40;;;;11.80;;;;;;;;;;;;;MWSC 0261;;; +NGC1221;G;03:08:15.53;-04:15:34.1;Eri;1.46;0.53;168;15.00;;11.05;10.36;10.13;24.01;S0-a;;;;;;;;2MASX J03081551-0415339,MCG -01-09-002,PGC 011739;;; +NGC1222;G;03:08:56.74;-02:57:18.5;Eri;1.57;0.95;153;13.30;;10.85;10.17;9.92;22.84;E-S0;;;;;;;;2MASX J03085674-0257187,IRAS 03064-0308,MCG -01-09-005,PGC 011774;;; +NGC1223;G;03:08:19.93;-04:08:18.2;Eri;1.34;1.29;175;14.06;;10.69;10.01;9.72;23.44;E;;;;;;;;2MASX J03081993-0408180,MCG -01-09-003,PGC 011742;;; +NGC1224;G;03:11:13.55;+41:21:49.3;Per;1.36;1.03;180;15.50;;10.74;9.98;9.68;24.58;E-S0;;;;;;;;2MASX J03111355+4121494,MCG +07-07-034,PGC 011886,UGC 02578;;; +NGC1225;G;03:08:47.22;-04:06:05.6;Eri;1.24;0.60;153;15.00;;11.38;10.70;10.37;23.44;Sbc;;;;;;;;2MASX J03084723-0406057,MCG -01-09-004,PGC 011766;;; +NGC1226;G;03:11:05.35;+35:23:12.6;Per;1.23;0.94;103;14.50;;10.28;9.47;9.21;23.73;E;;;;;;;;2MASX J03110535+3523125,MCG +06-08-001,PGC 011879,UGC 02575;;; +NGC1227;G;03:11:07.73;+35:19:29.5;Per;0.66;0.44;77;15.70;;12.01;11.14;10.97;23.48;S0-a;;;;;;;;2MASX J03110774+3519296,PGC 011880,UGC 02577;;; +NGC1228;G;03:08:11.74;-22:55:22.3;Eri;1.52;0.71;77;14.21;;11.44;10.84;10.59;23.92;S0;;;;;;;;2MASX J03081175-2255223,ESO 480-032,ESO-LV 480-0320,MCG -04-08-026,PGC 011735,UGCA 054;;; +NGC1229;G;03:08:10.79;-22:57:38.9;Eri;1.02;0.60;75;14.87;14.45;12.49;11.85;11.50;23.26;SBbc;;;;;;;;ESO 480-033,ESO-LV 480-0330,IRAS 03059-2309,MCG -04-08-025,PGC 011734,UGCA 053;;; +NGC1230;G;03:08:16.40;-22:59:02.4;Eri;0.69;0.22;110;15.43;;12.49;11.78;11.36;23.36;S0;;;;;;;;2MASX J03081639-2259023,ESO 480-034,ESO-LV 480-0340,MCG -04-08-027,PGC 011743;;; +NGC1231;G;03:06:29.30;-15:34:08.7;Eri;0.98;0.84;90;14.89;;13.61;13.02;12.64;23.49;Sc;;;;;;;;2MASX J03062929-1534088,MCG -03-08-074,PGC 011658;;; +NGC1232;G;03:09:45.51;-20:34:45.5;Eri;6.79;5.77;101;10.67;9.87;8.18;7.78;7.38;23.33;SABc;;;;;;;;2MASX J03094551-2034454,ESO 547-014,ESO-LV 547-0140,IRAS 03074-2045,PGC 011819;;Extended HIPASS source; +NGC1232A;G;03:10:01.9;-20:36:02;Eri;0.85;0.79;2;15.28;;;;;23.60;SBm;;;;;;;;ESO 547-016,ESO-LV 547-0160,MCG -04-08-032,PGC 011834;;; +NGC1233;G;03:12:33.11;+39:19:08.1;Per;1.51;0.46;29;13.90;;10.82;10.11;9.77;22.84;Sb;;;;;1235;;;2MASX J03123310+3919081,IRAS 03093+3907,MCG +06-08-003,PGC 011955,SDSS J031233.07+391908.1,UGC 02586;;Ident as NGC 1235 is uncertain.; +NGC1234;G;03:09:39.09;-07:50:46.3;Eri;1.58;0.82;119;14.40;;15.40;14.49;15.04;24.27;Sc;;;;;;;;2MASX J03093900-0750433,MCG -01-09-011,PGC 011813,SDSS J030939.07-075046.3,SDSS J030939.07-075046.5,SDSS J030939.08-075046.2,SDSS J030939.08-075046.3,SDSS J030939.09-075046.3;;; +NGC1235;Dup;03:12:33.11;+39:19:08.1;Per;;;;;;;;;;;;;;;1233;;;;;; +NGC1236;G;03:11:27.99;+10:48:29.8;Ari;0.66;0.48;30;15.70;;11.36;10.52;10.22;23.64;E;;;;;;;;2MASX J03112797+1048292,PGC 011898;;; +NGC1237;**;03:10:08.97;-08:41:32.4;Eri;;;;;;;;;;;;;;;;;;;;; +NGC1238;G;03:10:52.71;-10:44:53.0;Eri;1.53;1.20;109;14.00;;10.52;9.79;9.56;24.06;E;;;;;;;;2MASX J03105265-1044526,MCG -02-09-010,PGC 011868;;HOLM 067B is a star.; +NGC1239;G;03:10:53.72;-02:33:11.3;Eri;1.23;0.81;59;15.00;;10.75;10.10;9.76;23.78;S0;;;;;;;;2MASX J03105371-0233116,MCG -01-09-012,PGC 011869;;; +NGC1240;**;03:13:26.68;+30:30:25.8;Ari;;;;;;;;;;;;;;;;;;;;; +NGC1241;G;03:11:14.64;-08:55:19.7;Eri;2.70;1.50;149;12.84;11.99;9.76;8.96;8.65;23.44;SBb;;;;;;;;2MASX J03111463-0855197,MCG -02-09-011,PGC 011887;;; +NGC1242;G;03:11:19.32;-08:54:08.7;Eri;1.06;0.54;134;14.32;13.71;12.08;11.37;11.29;22.63;SBc;;;;;;;;2MASX J03111933-0854086,MCG -02-09-012,PGC 011892;;; +NGC1243;**;03:11:25.46;-08:56:43.0;Eri;;;;;;;;;;;;;;;;;;;;; +NGC1244;G;03:06:31.09;-66:46:32.2;Hor;1.44;0.36;2;13.91;;10.55;9.80;9.50;22.69;Sab;;;;;;;;2MASX J03063104-6646320,ESO 082-008,ESO-LV 82-0080,IRAS 03058-6657,PGC 011659;;; +NGC1245;OCl;03:14:41.46;+47:14:19.3;Per;11.40;;;9.16;8.40;;;;;;;;;;;;;MWSC 0264;;; +NGC1246;G;03:07:02.09;-66:56:19.1;Hor;1.42;0.76;36;13.88;;10.88;10.17;9.90;23.50;E;;;;;;;;2MASX J03070209-6656192,ESO 082-009,ESO-LV 82-0090,PGC 011680;;; +NGC1247;G;03:12:14.32;-10:28:52.0;Eri;3.55;0.52;70;13.00;;9.91;9.13;8.82;23.57;Sbc;;;;;;;;2MASX J03121431-1028520,IRAS 03098-1040,MCG -02-09-014,PGC 011931,UGCA 058;;; +NGC1248;G;03:12:48.56;-05:13:28.9;Eri;1.21;1.06;96;13.50;;10.46;9.78;9.53;22.70;S0;;;;;;;;2MASX J03124855-0513288,MCG -01-09-016,PGC 011970;;; +NGC1249;G;03:10:01.23;-53:20:08.7;Hor;3.64;1.44;83;12.16;;10.20;9.70;9.35;22.94;SBc;;;;;;;;2MASX J03100123-5320086,ESO 155-006,ESO-LV 155-0060,IRAS 03085-5331,PGC 011836;;; +NGC1250;G;03:15:21.10;+41:21:19.5;Per;2.33;0.80;158;14.20;;10.59;9.83;9.62;24.48;S0;;;;;;;;2MASX J03152110+4121195,MCG +07-07-040,PGC 012098,UGC 02613;;; +NGC1251;**;03:14:09.11;+01:27:23.5;Cet;;;;;;;;;;;;;;;;;;;;; +NGC1252;OCl;03:10:44.30;-57:45:31.0;Hor;7.20;;;;;;;;;;;;;;;;;ESO 116-011,MWSC 0260;;"Scattered group of about 20 stars; NGC identification is not certain."; +NGC1253;G;03:14:09.05;-02:49:22.6;Eri;4.57;1.86;85;11.80;;10.04;9.44;9.26;23.53;SABc;;;;;;;;2MASX J03140904-0249226,IRAS 03116-0300,MCG -01-09-018,PGC 012041,UGCA 062;;Extended HIPASS source; +NGC1253A;G;03:14:23.3;-02:48:03;Eri;1.01;0.66;90;13.70;;;;;22.62;SBm;;;;;;;;IRAS 03118-0259,MCG -01-09-019,PGC 012053;;; +NGC1254;G;03:14:24.05;+02:40:38.5;Cet;0.98;0.77;12;15.50;;11.06;10.39;10.10;23.93;E-S0;;;;;;;;2MASX J03142387+0240403,MCG +00-09-033,PGC 012052;;; +NGC1255;G;03:13:32.04;-25:43:30.6;For;4.05;2.24;118;11.80;;9.46;9.22;8.38;22.91;SABb;;;;;;;;2MASX J03133204-2543306,ESO 481-013,ESO-LV 481-0130,IRAS 03113-2554,MCG -04-08-050,PGC 012007,UGCA 060;;; +NGC1256;G;03:13:58.27;-21:59:11.1;Eri;1.13;0.41;107;14.40;;11.18;10.44;10.21;23.44;E-S0;;;;;;;;2MASX J03135827-2159111,ESO 547-023,ESO-LV 547-0230,MCG -04-08-052,PGC 012032;;; +NGC1257;**;03:16:59.55;+41:31:44.6;Per;;;;;;13.76;13.50;13.38;;;;;;;;;;2MASS J03165958+4131454;;PGC and RC3 misidentify this with UGC 02621.; +NGC1258;G;03:14:05.47;-21:46:27.4;Eri;1.41;1.04;20;13.98;;12.15;11.77;11.19;23.11;SABc;;;;;;;;2MASX J03140547-2146271,ESO 547-024,ESO-LV 547-0240,MCG -04-08-053,PGC 012034;;; +NGC1259;G;03:17:17.28;+41:23:07.8;Per;0.95;0.68;81;14.20;;11.63;10.79;10.49;23.84;E-S0;;;;;;;;2MASX J03171730+4123072,MCG +07-07-046,PGC 012208,SDSS J031717.27+412307.5;;; +NGC1260;G;03:17:27.24;+41:24:18.8;Per;1.29;0.50;86;14.20;;10.78;10.05;9.73;23.42;S0-a;;;;;;;;2MASX J03172720+4124184,IRAS 03141+4113,MCG +07-07-047,PGC 012219,SDSS J031727.22+412418.7,UGC 02634;;; +NGC1261;GCl;03:12:15.34;-55:13:00.5;Hor;5.10;;;9.79;8.63;;;;;;;;;;;;;2MASX J03121627-5513070,C 087,MWSC 0263;;The 2MASS position is 10.5 arcsec southeast of the core.; +NGC1262;G;03:15:33.58;-15:52:45.5;Eri;0.95;0.80;153;14.00;;12.29;11.70;11.62;23.47;SABc;;;;;;;;2MASX J03153355-1552455,IRAS 03132-1604,MCG -03-09-014,PGC 012107;;; +NGC1263;G;03:15:39.56;-15:05:53.9;Eri;0.86;0.76;70;15.00;;12.41;11.58;11.28;23.39;S0-a;;;;;;;;2MASX J03153955-1505535,MCG -03-09-015,PGC 012114;;; +NGC1264;G;03:17:59.57;+41:31:13.0;Per;1.00;0.89;59;16.00;;11.49;10.74;10.42;23.76;SBab;;;;;;;;2MASX J03175957+4131127,MCG +07-07-050,PGC 012270,UGC 02643;;; +NGC1265;G;03:18:15.66;+41:51:27.9;Per;1.90;1.63;165;14.70;;;;;23.30;E;;;;;;;;MCG +07-07-052,PGC 012287,SDSS J031815.67+415127.9,UGC 02651;;Star superposed just southeast of the nucleus.; +NGC1266;G;03:16:00.75;-02:25:38.5;Eri;1.48;0.99;103;14.00;;10.47;9.88;9.48;23.90;S0;;;;;;;;2MASX J03160074-0225385,IRAS 03134-0236,MCG -01-09-023,PGC 012131;;; +NGC1267;G;03:18:44.92;+41:28:03.8;Per;1.12;0.86;57;15.40;;10.58;9.83;9.60;23.20;E;;;;;;;;2MASX J03184497+4128041,MCG +07-07-055,PGC 012331,UGC 02657;;; +NGC1268;G;03:18:45.16;+41:29:19.3;Per;0.96;0.49;118;14.50;;11.72;11.06;10.81;23.12;SABb;;;;;;;;2MASX J03184515+4129191,MCG +07-07-056,PGC 012332,SDSS J031845.16+412919.5,UGC 02658;;; +NGC1269;G;03:17:18.59;-41:06:29.0;Eri;11.17;9.93;156;9.83;8.81;6.52;5.97;5.66;23.36;S0-a;;;;;1291;;;2MASX J03171859-4106290,ESO 301-002,ESO-LV 301-0020,IRAS 03154-4117,MCG -07-07-008,PGC 012209;;Extended HIPASS source; +NGC1270;G;03:18:58.15;+41:28:12.0;Per;1.05;0.97;0;14.40;;10.47;9.73;9.44;23.21;E;;;;;;;;2MASX J03185814+4128121,MCG +07-07-057,PGC 012350,UGC 02660;;; +NGC1271;G;03:19:11.28;+41:21:11.7;Per;0.81;0.51;123;15.40;;11.45;10.64;10.34;23.38;S0;;;;;;;;2MASX J03191127+4121120,PGC 012367;;; +NGC1272;G;03:19:21.29;+41:29:26.3;Per;2.55;1.25;76;14.50;13.66;9.67;9.00;8.69;23.81;E;;;;;;;;2MASX J03192129+4129261,MCG +07-07-058,PGC 012384,UGC 02662;;; +NGC1273;G;03:19:26.74;+41:32:25.9;Per;0.89;0.70;135;14.70;14.20;10.84;10.14;9.83;;S0;;;;;;;;2MASX J03192672+4132261,MCG +07-07-059,PGC 012396;;;Diameters and position angle taken from Simbad. +NGC1274;G;03:19:40.55;+41:32:55.1;Per;0.78;0.49;44;15.10;;11.52;10.81;10.50;23.41;E;;;;;;;;2MASX J03194053+4132550,MCG +07-07-062,PGC 012413;;CGCG claims NGC 1274 = IC 1907. See CGCG 0316.3+4124. NED follows MCG.; +NGC1275;G;03:19:48.16;+41:30:42.1;Per;2.16;1.45;110;13.10;12.48;9.15;8.49;8.13;23.00;S0;;;;;;;;2MASX J03194823+4130420,C 024,IRAS 03164+4119,MCG +07-07-063,PGC 012429,SDSS J031948.15+413042.1,UGC 02669;Perseus A;; +NGC1276;**;03:19:51.21;+41:38:31.1;Per;;;;;;;;;;;;;;;;;;;;; +NGC1277;G;03:19:51.49;+41:34:24.7;Per;0.97;0.67;96;14.90;;10.93;10.17;9.81;23.29;S0-a;;;;;;;;2MASX J03195148+4134242,MCG +07-07-064,PGC 012434;;; +NGC1278;G;03:19:54.15;+41:33:48.2;Per;1.43;1.30;90;14.40;14.14;10.19;9.46;9.17;23.25;E;;;;;;1907;;2MASX J03195416+4133482,MCG +07-07-065,PGC 012438,UGC 02670;;; +NGC1279;G;03:19:59.07;+41:28:46.3;Per;0.58;0.39;15;16.00;;11.77;11.05;10.72;24.76;S0;;;;;;;;2MASX J03195907+4128462,PGC 012448;;; +NGC1280;G;03:17:57.07;-00:10:08.7;Cet;0.92;0.69;62;13.90;;11.31;10.65;10.31;22.42;Sc;;;;;;;;2MASX J03175702-0010087,IRAS 03154-0021,MCG +00-09-050,PGC 012262,SDSS J031757.06-001008.6,SDSS J031757.06-001008.7,SDSS J031757.07-001008.6,SDSS J031757.07-001008.7,UGC 02652;;; +NGC1281;G;03:20:06.11;+41:37:48.1;Per;0.78;0.42;68;15.00;;11.12;10.36;10.06;22.81;E;;;;;;;;2MASX J03200610+4137483,MCG +07-07-067,PGC 012458;;; +NGC1282;G;03:20:12.12;+41:22:01.2;Per;1.39;1.07;27;14.30;;10.65;9.90;9.67;23.45;E;;;;;;;;2MASX J03201214+4122012,MCG +07-07-068,PGC 012471,SDSS J032012.10+412201.1,UGC 02675;;; +NGC1283;G;03:20:15.52;+41:23:55.2;Per;0.93;0.79;68;15.60;;11.20;10.42;10.19;23.47;E;;;;;;;;2MASX J03201552+4123552,MCG +07-07-069,PGC 012478,SDSS J032015.52+412355.1,UGC 02676;;; +NGC1284;G;03:17:45.51;-10:17:20.7;Eri;1.87;1.22;15;14.00;;10.82;10.13;9.80;24.43;S0;;;;;;;;2MASX J03174554-1017207,MCG -02-09-022,PGC 012247;;; +NGC1285;G;03:17:53.43;-07:17:52.1;Eri;1.59;0.88;8;13.30;;11.02;10.38;10.15;22.89;Sb;;;;;;;;2MASX J03175341-0717517,IRAS 03154-0728,MCG -01-09-026,PGC 012259,SDSS J031753.42-071752.1,SDSS J031753.43-071752.1;;; +NGC1286;G;03:17:48.53;-07:37:00.7;Eri;0.98;0.79;154;15.00;;11.26;10.51;10.22;23.33;S0;;;;;;;;2MASX J03174849-0737007,MCG -01-09-025,PGC 012250,SDSS J031748.53-073700.6,SDSS J031748.53-073700.7;;; +NGC1287;G;03:18:33.47;-02:43:51.0;Eri;0.76;0.68;40;15.00;;11.74;10.97;10.67;22.89;Sa;;;;;;;;2MASX J03183347-0243510,IRAS 03160-0254,PGC 012310;;; +NGC1288;G;03:17:13.19;-32:34:33.2;For;2.32;1.71;178;12.75;12.11;10.06;9.41;9.24;23.17;SABc;;;;;;;;2MASX J03171317-3234330,ESO 357-013,ESO-LV 357-0130,IRAS 03152-3245,MCG -05-08-025,PGC 012204;;; +NGC1289;G;03:18:49.81;-01:58:24.0;Eri;1.75;1.00;97;13.80;;10.40;9.73;9.50;23.42;S0;;;;;;0314;;2MASX J03184982-0158240,MCG +00-09-054,PGC 012342,UGC 02666;;; +NGC1290;G;03:19:25.17;-13:59:22.6;Eri;0.71;0.52;83;15.81;;12.90;12.29;11.82;23.41;;;;;;;;;2MASX J03192514-1359229,IRAS 03170-1410,PGC 012395;;; +NGC1291;Dup;03:17:18.59;-41:06:29.0;Eri;;;;;;;;;;;;;;;1269;;;;;; +NGC1292;G;03:18:14.89;-27:36:37.2;For;2.93;1.20;9;12.75;;10.13;9.36;9.40;23.17;Sc;;;;;;;;2MASX J03181489-2736371,ESO 418-001,ESO-LV 418-0010,IRAS 03161-2747,MCG -05-08-026,PGC 012285;;; +NGC1293;G;03:21:36.46;+41:23:34.2;Per;0.86;0.86;0;15.00;;10.98;10.23;9.93;23.06;E;;;;;;;;2MASX J03213647+4123340,MCG +07-07-075,PGC 012597;;; +NGC1294;G;03:21:39.96;+41:21:38.0;Per;1.38;1.09;167;15.10;;10.52;9.76;9.49;23.77;E-S0;;;;;;;;2MASX J03213994+4121380,MCG +07-07-076,PGC 012600,UGC 02694;;; +NGC1295;G;03:20:03.30;-13:59:53.7;Eri;0.99;0.53;175;15.00;;11.93;11.24;10.98;23.66;S0-a;;;;;;;;2MASX J03200331-1359537,IRAS 03177-1410,MCG -02-09-030,PGC 012465;;Identification as NGC 1290 in MCG is incorrect.; +NGC1296;G;03:18:49.71;-13:03:44.8;Eri;0.90;0.45;2;14.52;;11.85;11.10;10.69;23.23;SBab;;;;;;;;2MASX J03184969-1303449,IRAS 03164-1314,MCG -02-09-025,PGC 012341;;; +NGC1297;G;03:19:14.22;-19:06:00.0;Eri;2.40;2.01;6;14.97;13.98;9.81;9.18;8.93;23.74;E-S0;;;;;;;;2MASX J03191420-1905597,ESO 547-030,ESO-LV 547-0300,MCG -03-09-017,PGC 012373,TYC 5875-353-1;;; +NGC1298;G;03:20:13.08;-02:06:50.8;Eri;1.04;0.92;68;14.20;;10.84;10.07;9.85;23.84;E;;;;;;;;2MASX J03201308-0206510,MCG +00-09-062,PGC 012473,UGC 02683;;UGC misprints name as 'MCG +00-08-062'.; +NGC1299;G;03:20:09.68;-06:15:43.2;Eri;1.21;0.67;49;13.85;;11.04;10.43;10.11;22.51;SBb;;;;;;;;2MASX J03200968-0615428,IRAS 03176-0626,MCG -01-09-028,PGC 012466,SDSS J032009.53-061542.5,SDSS J032009.68-061543.2;;; +NGC1300;G;03:19:41.08;-19:24:40.9;Eri;5.96;3.06;101;11.16;10.42;8.50;7.77;7.56;23.30;Sbc;;;;;;;;2MASX J03194107-1924408,ESO 547-031,ESO-LV 547-0310,IRAS 03174-1935,MCG -03-09-018,PGC 012412,UGCA 066;;; +NGC1301;G;03:20:35.33;-18:42:55.2;Eri;2.38;0.51;141;14.13;;11.10;10.44;10.11;23.59;SBbc;;;;;;;;2MASX J03203532-1842552,ESO 547-032,ESO-LV 547-0320,IRAS 03183-1853,MCG -03-09-022,PGC 012521;;; +NGC1302;G;03:19:51.18;-26:03:37.6;For;4.27;3.90;170;11.43;;8.72;8.03;7.83;23.46;S0-a;;;;;;;;2MASX J03195121-2603382,ESO 481-020,ESO-LV 481-0200,MCG -04-08-058,PGC 012431;;Confused HIPASS source; +NGC1303;G;03:20:40.79;-07:23:39.9;Eri;1.12;0.80;20;15.00;;11.55;10.76;10.66;23.65;S0;;;;;;;;2MASX J03204079-0723399,MCG -01-09-029,PGC 012527,SDSS J032040.79-072339.9;;; +NGC1304;G;03:21:12.78;-04:35:02.7;Eri;1.33;0.70;59;14.50;;11.16;10.51;10.31;23.87;E-S0;;;;;1307;;;2MASX J03211279-0435023,MCG -01-09-030,PGC 012575;;; +NGC1305;G;03:21:22.97;-02:19:00.6;Eri;1.33;0.94;117;14.80;;10.57;9.91;9.62;22.28;E-S0;;;;;;;;2MASX J03212296-0219007,MCG +00-09-069,PGC 012582,UGC 02697;;; +NGC1306;G;03:21:02.99;-25:30:45.2;For;1.10;0.64;159;13.62;;11.64;11.03;10.69;22.51;Sb;;;;;;;;2MASX J03210298-2530453,ESO 481-023,ESO-LV 481-0230,IRAS 03188-2541,PGC 012559;;; +NGC1307;Dup;03:21:12.78;-04:35:02.7;Eri;;;;;;;;;;;;;;;1304;;;;;; +NGC1308;G;03:22:28.54;-02:45:25.7;Eri;1.15;0.86;88;15.00;;10.97;10.32;9.95;23.70;S0-a;;;;;;;;2MASX J03222854-0245255,MCG -01-09-032,PGC 012643;;; +NGC1309;G;03:22:06.56;-15:24:00.2;Eri;2.39;2.24;175;12.08;;10.06;9.38;9.10;22.54;Sbc;;;;;;;;2MASX J03220655-1524002,IRAS 03197-1534,MCG -03-09-028,PGC 012626,SDSS J032206.55-152359.7;;Confused HIPASS source; +NGC1310;G;03:21:03.43;-37:06:06.1;For;2.11;1.58;98;12.98;12.08;10.77;10.19;9.94;22.69;Sc;;;;;;;;2MASX J03210343-3706060,ESO 357-019,ESO-LV 357-0190,IRAS 03191-3716,MCG -06-08-004,PGC 012569;;FCC position is incorrect.; +NGC1311;G;03:20:06.96;-52:11:07.9;Hor;3.20;0.78;37;13.35;12.93;12.20;11.00;10.92;23.41;SBm;;;;;;;;2MASX J03200694-5211077,ESO 200-007,ESO-LV 200-0070,IRAS 03186-5222,PGC 012460;;; +NGC1312;**;03:23:41.73;+01:11:04.8;Tau;;;;;;;;;;;;;;;;;;;;; +NGC1313;G;03:18:16.05;-66:29:53.7;Ret;11.07;9.14;27;10.06;10.00;8.33;7.71;7.57;23.44;SBcd;;;;;;;;2MASX J03181604-6629537,ESO 082-011,ESO-LV 82-0110,IRAS 03176-6640,PGC 012286;;Extended HIPASS source; +NGC1313A;G;03:20:05.7;-66:42:04;Ret;1.25;0.33;30;14.72;;11.59;10.84;10.62;23.04;SBb;;;;;;;;2MASX J03200570-6642042,ESO 083-001,ESO-LV 83-0010,IRAS 03195-6652,PGC 012457;;; +NGC1314;G;03:22:41.16;-04:11:11.6;Eri;1.47;1.30;51;13.40;;11.94;11.44;10.62;24.26;Scd;;;;;;;;2MASX J03224117-0411115,MCG -01-09-033,PGC 012650;;; +NGC1315;G;03:23:06.59;-21:22:30.6;Eri;1.62;1.35;161;13.46;;10.61;9.85;9.73;23.40;S0-a;;;;;;;;2MASX J03230660-2122307,ESO 548-003,ESO-LV 548-0030,MCG -04-09-002,PGC 012671;;; +NGC1316;G;03:22:41.72;-37:12:29.6;For;13.46;7.71;50;9.15;8.53;6.45;5.87;5.59;23.77;S0;;;;;;;;2MASX J03224178-3712295,ESO 357-022,ESO-LV 357-0220,IRAS 03208-3723,MCG -06-08-005,PGC 012651,Fornax A;Fornax A;; +NGC1316A;G;03:23:37.9;-36:54:14;For;1.04;0.58;63;14.97;;12.04;11.26;10.91;23.07;Sb;;;;;;;;2MASX J03233793-3654143,IRAS 03217-3704,MCG -06-08-008,PGC 012686;;; +NGC1316B;G;03:23:39.6;-36:54:30;For;0.66;0.33;8;15.50;;13.46;12.58;12.42;22.47;Sb;;;;;;;;2MASX J03233959-3654303,MCG -06-08-009,PGC 012687;;; +NGC1316C;G;03:24:58.4;-37:00:34;For;1.47;0.64;84;14.36;;11.84;11.16;10.92;23.79;S0-a;;;;;;;;2MASX J03245846-3700338,ESO 357-027,ESO-LV 357-0270,MCG -06-08-012,PGC 012769;;; +NGC1317;G;03:22:44.29;-37:06:13.3;For;3.10;2.58;69;11.78;11.02;8.65;8.01;7.74;22.96;SABa;;;;;1318;;;2MASX J03224428-3706136,ESO 357-023,ESO-LV 357-0230,IRAS 03208-3716,MCG -06-08-006,PGC 012653;Fornax B;; +NGC1318;Dup;03:22:44.29;-37:06:13.3;For;;;;;;;;;;;;;;;1317;;;;;; +NGC1319;G;03:23:56.46;-21:31:39.8;Eri;1.46;0.71;29;13.88;;11.01;10.33;10.09;23.45;S0;;;;;;;;2MASX J03235645-2131398,ESO 548-006,ESO-LV 548-0060,MCG -04-09-003,PGC 012708;;; +NGC1320;G;03:24:48.70;-03:02:32.2;Eri;1.86;0.68;137;14.00;14.00;10.40;9.72;9.36;23.01;Sa;;;;;;;;2MASX J03244870-0302322,IRAS 03222-0313,MCG -01-09-036,PGC 012756;;; +NGC1321;G;03:24:48.57;-03:00:56.1;Eri;0.97;0.71;88;14.50;;10.85;10.23;10.03;22.73;Sa;;;;;;;;2MASX J03244857-0300562,MCG -01-09-035,PGC 012755;;; +NGC1322;G;03:24:54.71;-02:55:09.2;Eri;1.12;0.80;98;15.00;;10.62;9.97;9.64;23.42;E-S0;;;;;;;;2MASX J03245471-0255092,MCG -01-09-037,PGC 012761;;; +NGC1323;G;03:24:56.08;-02:49:19.5;Eri;0.71;0.29;91;15.48;;12.02;11.33;11.05;23.92;S0;;;;;;;;2MASX J03245604-0249202,PGC 012764;;; +NGC1324;G;03:25:01.68;-05:44:44.9;Eri;2.37;0.69;141;14.00;;10.18;9.47;9.15;23.28;Sb;;;;;;;;2MASX J03250169-0544452,IRAS 03225-0555,MCG -01-09-038,PGC 012772,SDSS J032501.68-054444.8,SDSS J032501.68-054444.9;;; +NGC1325;G;03:24:25.57;-21:32:38.5;Eri;4.32;1.50;53;12.28;11.55;9.49;8.91;8.63;23.36;SBbc;;;;;;;;2MASX J03242556-2132385,ESO 548-007,ESO-LV 548-0070,IRAS 03221-2143,MCG -04-09-004,PGC 012737,UGCA 070;;; +NGC1325A;G;03:24:48.5;-21:20:10;Eri;1.90;1.78;90;13.33;12.83;;;14.03;23.48;Scd;;;;;;;;2MASX J03244827-2120312,ESO 548-010,ESO-LV 548-0100,MCG -04-09-006,PGC 012754;;; +NGC1326;G;03:23:56.40;-36:27:52.8;For;4.28;2.93;67;11.43;10.54;8.36;7.72;7.45;23.26;S0-a;;;;;;;;2MASX J03235639-3627527,ESO 357-026,ESO-LV 357-0260,IRAS 03220-3638,MCG -06-08-011,PGC 012709;;; +NGC1326A;G;03:25:08.5;-36:21:50;For;2.10;1.34;62;13.80;;14.38;13.85;13.56;23.99;Sm;;;;;;;;2MASX J03250876-3621450,ESO 357-028,ESO-LV 357-0280,MCG -06-08-013,PGC 012783;;; +NGC1326B;G;03:25:20.3;-36:23:06;For;3.87;1.88;130;13.08;;;;;24.72;SBm;;;;;;;;ESO 357-029,ESO-LV 357-0290,MCG -06-08-014,PGC 012788;;SGC claims ESO 357-IG 29 (i.e. interacting).; +NGC1327;G;03:25:23.11;-25:40:49.0;For;1.14;0.40;175;15.57;;12.77;12.07;11.65;23.72;SBb;;;;;;;;ESO 481-026,ESO-LV 481-0260,IRAS 03232-2551,MCG -04-09-008,PGC 012795;;"NGC ident is not certain; NGC 1327 may be three Galactic stars."; +NGC1328;G;03:25:39.10;-04:07:29.8;Eri;0.98;0.69;108;14.53;;11.29;10.61;10.33;23.57;S0;;;;;;;;2MASX J03253913-0407297,PGC 012805;;; +NGC1329;G;03:26:02.59;-17:35:29.4;Eri;1.58;1.27;33;13.38;;10.49;9.83;9.58;23.11;Sa;;;;;;;;2MASX J03260258-1735295,ESO 548-015,ESO-LV 548-0150,MCG -03-09-042,PGC 012826;;; +NGC1330;Other;03:29:04.47;+41:40:30.9;Per;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC1331;G;03:26:28.29;-21:21:19.1;Eri;0.92;0.79;11;14.25;;11.54;10.90;10.76;22.97;E;;;;;;0324;;2MASX J03262835-2121203,ESO 548-019,ESO-LV 548-0190,MCG -04-09-012,PGC 012846;;; +NGC1332;G;03:26:17.25;-21:20:06.8;Eri;5.31;3.84;121;11.45;;8.00;7.30;7.05;23.55;E-S0;;;;;;;;2MASX J03261732-2120073,ESO 548-018,ESO-LV 548-0180,IRAS 03240-2130,MCG -04-09-011,PGC 012838,UGCA 072;;; +NGC1333;Cl+N;03:28:55.2;+31:22:12;Per;19.50;;;10.90;;;;;;;;;;;;;;LBN 741,MWSC 0279;;; +NGC1334;G;03:30:01.84;+41:49:55.3;Per;1.24;0.51;118;14.80;;11.06;10.31;9.99;23.48;Sbc;;;;;;;;2MASX J03300186+4149558,IRAS 03266+4139,MCG +07-08-018,PGC 013001,UGC 02759;;; +NGC1335;G;03:30:19.49;+41:34:21.9;Per;0.90;0.50;168;15.70;;10.98;10.22;9.85;23.96;E-S0;;;;;;;;2MASX J03301948+4134218,MCG +07-08-019,PGC 013015,UGC 02762;;; +NGC1336;G;03:26:32.19;-35:42:48.8;For;1.97;1.41;15;13.12;;10.75;10.11;9.81;23.36;E-S0;;;;;;;;2MASX J03263219-3542488,ESO 358-002,ESO-LV 358-0020,MCG -06-08-016,PGC 012848;;; +NGC1337;G;03:28:05.96;-08:23:19.0;Eri;4.94;1.31;153;12.53;;10.12;9.47;9.22;23.54;SBc;;;;;;;;2MASX J03280595-0823190,IRAS 03256-0833,MCG -02-09-042,PGC 012916;;; +NGC1338;G;03:28:54.55;-12:09:12.1;Eri;1.31;1.24;165;13.72;;11.00;10.33;10.01;23.06;SABb;;;;;;;;2MASX J03285455-1209120,IRAS 03265-1219,MCG -02-09-044,PGC 012956;;; +NGC1339;G;03:28:06.58;-32:17:10.0;For;2.01;1.47;172;12.63;;9.59;8.95;8.69;22.89;E;;;;;;;;2MASX J03280658-3217101,ESO 418-004,ESO-LV 418-0040,MCG -05-09-004,PGC 012917;;; +NGC1340;G;03:28:19.67;-31:04:05.4;For;5.12;3.12;167;11.20;10.32;8.24;7.62;7.40;23.60;E;;;;;1344;;;2MASX J03281966-3104054,ESO 418-005,ESO-LV 418-0050,MCG -05-09-005,PGC 012923;;; +NGC1341;G;03:27:58.42;-37:09:00.0;For;1.42;1.07;121;12.86;;10.76;10.09;9.84;22.28;Sa;;;;;;;;2MASX J03275843-3708598,ESO 358-008,ESO-LV 358-0080,IRAS 03260-3719,MCG -06-08-020,PGC 012911;;; +NGC1342;OCl;03:31:40.12;+37:22:45.8;Per;6.30;;;7.35;6.70;;;;;;;;;;;;;MWSC 0283;;; +NGC1343;G;03:37:49.70;+72:34:16.8;Cam;2.38;1.06;79;14.10;;9.77;8.98;8.69;23.71;SABb;;;;;;;;2MASX J03374965+7234168,IRAS 03324+7224,MCG +12-04-001,PGC 013384,UGC 02792;;One of two 6cm sources associated with [WB92] 0331+7221; +NGC1344;Dup;03:28:19.67;-31:04:05.4;For;;;;;;;;;;;;;;;1340;;;;;; +NGC1345;G;03:29:31.69;-17:46:42.2;Eri;1.34;1.10;30;13.67;;11.83;11.18;11.14;23.54;Sc;;;;;;;;2MASX J03293169-1746420,ESO 548-026,ESO-LV 548-0260,IRAS 03272-1756,MCG -03-09-046,PGC 012979,UGCA 074;;; +NGC1346;G;03:30:13.27;-05:32:35.9;Eri;1.44;0.54;84;17.06;16.39;10.81;10.06;9.79;22.75;Sb;;;;;;;;2MASX J03301327-0532363,IRAS 03277-0542,MCG -01-09-042,PGC 013009,SDSS J033013.26-053235.9,SDSS J033013.26-053236.0,SDSS J033013.27-053235.9;;; +NGC1347;GPair;03:29:41.50;-22:17:06.0;Eri;1.80;;;;;;;;;;;;;;;;;MCG -04-09-017;;;Diameter of the group inferred by the author. +NGC1347 NED01;G;03:29:41.80;-22:16:44.9;Eri;0.98;0.93;81;13.74;;;;;23.14;Sc;;;;;;;;ESO 548-027,ESO-LV 548-0270,MCG -04-09-017 NED01,PGC 012989;;; +NGC1347 NED02;G;03:29:41.19;-22:17:27.6;Eri;0.56;0.38;42;16.05;;13.84;13.03;13.07;23.69;;;;;;;;;2MASXJ03294116-2217277,MCG -04-09-017 NED02,PGC 816443;;;B-Mag taken from LEDA +NGC1348;OCl;03:34:08.49;+51:25:13.9;Per;3.60;;;;;;;;;;;;;;;;;MWSC 0289;;; +NGC1349;G;03:31:27.50;+04:22:51.0;Tau;0.91;0.91;40;15.00;;10.76;10.11;9.73;22.77;S0;;;;;;;;2MASX J03312754+0422511,MCG +01-09-006,PGC 013088,UGC 02774;;; +NGC1350;G;03:31:08.12;-33:37:43.1;For;5.18;2.60;11;11.20;10.52;8.27;7.63;7.40;23.06;Sab;;;;;;;;2MASX J03310811-3337431,ESO 358-013,ESO-LV 358-0130,IRAS 03291-3347,MCG -06-08-023,PGC 013059;;; +NGC1351;G;03:30:34.98;-34:51:14.2;For;3.40;2.20;139;12.30;;9.61;8.97;8.79;23.82;E-S0;;;;;;;;2MASX J03303498-3451142,ESO 358-012,ESO-LV 358-0120,MCG -06-08-022,PGC 013028;;; +NGC1351A;G;03:28:48.7;-35:10:41;For;2.49;0.65;129;14.21;;11.66;10.93;10.66;23.50;SBbc;;;;;;;;2MASX J03284871-3510413,ESO 358-009,ESO-LV 358-0090,MCG -06-08-021,PGC 012952;;The APM position is southeast of the center of the galaxy.; +NGC1352;G;03:31:32.98;-19:16:42.4;Eri;1.15;0.75;128;14.16;;11.51;10.90;10.61;23.32;S0;;;;;;;;2MASX J03313296-1916424,ESO 548-030,ESO-LV 548-0300,MCG -03-10-002,PGC 013091;;; +NGC1353;G;03:32:03.02;-20:49:09.0;Eri;3.64;1.47;138;12.19;11.35;9.08;8.37;8.11;23.25;Sb;;;;;;;;2MASX J03320302-2049089,ESO 548-031,ESO-LV 548-0310,IRAS 03298-2059,MCG -04-09-022,PGC 013108,UGCA 076;;; +NGC1354;G;03:32:29.37;-15:13:16.1;Eri;2.62;0.97;148;13.28;;9.85;9.18;8.93;23.88;S0-a;;;;;;;;2MASX J03322936-1513159,MCG -03-10-004,PGC 013130;;; +NGC1355;G;03:33:23.50;-04:59:55.3;Eri;1.73;0.31;77;15.00;;10.95;10.28;10.01;23.95;S0;;;;;;;;2MASX J03332351-0459554,MCG -01-10-002,PGC 013169;;; +NGC1356;G;03:30:40.79;-50:18:34.6;Hor;1.17;1.02;167;14.05;;11.19;10.56;10.19;22.81;Sbc;;;;;;;;2MASX J03304076-5018346,ESO 200-031,ESO-LV 200-0310,IRAS 03291-5028,PGC 013035;;; +NGC1357;G;03:33:17.08;-13:39:50.9;Eri;3.37;2.55;76;12.44;;9.29;8.66;8.42;23.60;Sab;;;;;;;;2MASX J03331709-1339509,IRAS 03309-1349,MCG -02-10-001,PGC 013166;;; +NGC1358;G;03:33:39.67;-05:05:21.8;Eri;2.13;1.17;125;14.10;13.05;9.89;9.23;8.95;23.42;S0-a;;;;;;;;2MASX J03333970-0505224,MCG -01-10-003,PGC 013182;;; +NGC1359;G;03:33:47.71;-19:29:31.4;Eri;1.46;1.21;109;12.61;;11.85;11.24;11.17;22.11;Sm;;;;;;;;2MASX J03334769-1929310,ESO 548-039,ESO-LV 548-0390,IRAS 03315-1939,MCG -03-10-007,PGC 013190;;; +NGC1360;PN;03:33:14.65;-25:52:18.2;For;6.42;;;9.60;9.40;12.08;12.29;12.37;;;9.64;10.96;11.35;;;;HIP 016566,TYC 6450-01071-1;ESO 482-007,IRAS 03311-2601,PN G220.3-53.9;;; +NGC1361;G;03:34:17.74;-06:15:54.0;Eri;1.24;0.84;44;13.78;;11.18;10.44;10.36;23.77;E-S0;;;;;;;;2MASX J03341772-0615541,MCG -01-10-005,PGC 013218,SDSS J033417.74-061553.9,SDSS J033417.74-061554.0;;MCG misidentifies this as NGC 1369.; +NGC1362;G;03:33:53.08;-20:16:57.5;Eri;1.30;1.17;20;13.53;;11.03;10.41;10.22;23.10;S0;;;;;;;;2MASX J03335307-2016567,ESO 548-041,ESO-LV 548-0410,MCG -03-10-008,PGC 013196;;Star (or compact companion?) superposed 10 arcsec south of the nucleus.; +NGC1363;G;03:34:49.57;-09:50:32.9;Eri;0.90;0.76;90;13.96;;11.74;11.09;10.67;;Sbc;;;;;;;;2MASX J03344957-0950332,IRAS 03324-1000,PGC 013245;;; +NGC1364;G;03:34:58.98;-09:50:19.1;Eri;0.57;0.51;127;15.43;;13.24;12.61;12.46;22.78;Scd;;;;;;;;2MASX J03345898-0950192,PGC 013253;;; +NGC1365;G;03:33:36.37;-36:08:25.4;For;12.02;6.14;20;10.08;9.63;7.36;6.74;6.37;24.01;Sb;;;;;;;;2MASX J03333645-3608263,ESO 358-017,ESO-LV 358-0170,IRAS 03317-3618,MCG -06-08-026,PGC 013179;;Extended HIPASS source; +NGC1366;G;03:33:53.68;-31:11:38.8;For;2.05;0.94;4;12.94;;9.91;9.21;9.01;23.04;S0;;;;;;;;2MASX J03335365-3111387,ESO 418-010,ESO-LV 418-0100,MCG -05-09-013,PGC 013197;;; +NGC1367;G;03:35:01.34;-24:55:59.6;For;4.88;3.26;134;11.48;;8.56;7.91;7.63;23.57;Sa;;;;;1371;;;2MASX J03350132-2455598,2MASX J03350135-2455591,ESO 482-010,ESO-LV 482-0100,MCG -04-09-029,PGC 013255,UGCA 079;;; +NGC1368;G;03:34:58.90;-15:39:21.3;Eri;1.15;0.49;119;15.00;;11.69;10.91;10.70;24.11;S0-a;;;;;;;;2MASX J03345890-1539218,MCG -03-10-012,PGC 013247;;; +NGC1369;G;03:36:45.25;-36:15:22.4;Eri;2.22;1.73;9;13.77;;11.26;10.59;10.73;24.02;S0-a;;;;;;;;2MASX J03364524-3615223,ESO 358-034,ESO-LV 358-0340,MCG -06-09-004,PGC 013330;;This is ESO 358- G034 with a 3 minute RA error.; +NGC1370;G;03:35:14.57;-20:22:25.2;Eri;1.49;0.85;50;13.44;;10.72;10.11;9.87;23.24;E;;;;;;;;2MASX J03351457-2022250,ESO 548-048,ESO-LV 548-0480,IRAS 03330-2032,MCG -03-10-013,PGC 013265;;; +NGC1371;Dup;03:35:01.34;-24:55:59.6;For;;;;;;;;;;;;;;;1367;;;;;; +NGC1372;G;03:36:59.74;-15:52:53.3;Eri;0.70;0.65;50;15.14;;11.71;11.00;10.73;23.39;E;;;;;;;;2MASX J03365971-1552530,PGC 013346;;; +NGC1373;G;03:34:59.21;-35:10:16.0;For;1.20;1.14;110;14.03;13.26;11.43;10.77;10.59;23.38;E;;;;;;;;2MASX J03345920-3510162,ESO 358-021,ESO-LV 358-0210,MCG -06-08-028,PGC 013252;;; +NGC1374;G;03:35:16.59;-35:13:34.5;For;2.86;2.65;120;11.97;11.08;9.05;8.36;8.16;23.16;E;;;;;;;;2MASX J03351659-3513345,ESO 358-023,ESO-LV 358-0230,MCG -06-08-029,PGC 013267;;; +NGC1375;G;03:35:16.82;-35:15:56.4;For;2.28;1.00;90;13.02;12.40;10.52;9.89;9.61;23.65;S0;;;;;;;;2MASX J03351683-3515564,ESO 358-024,ESO-LV 358-0240,MCG -06-08-030,PGC 013266;;; +NGC1376;G;03:37:05.92;-05:02:33.9;Eri;1.86;1.79;30;12.90;;10.70;10.12;9.80;22.95;Sc;;;;;;;;2MASX J03370592-0502339,IRAS 03346-0512,MCG -01-10-011,PGC 013352;;; +NGC1377;G;03:36:39.08;-20:54:08.1;Eri;2.07;0.95;92;13.38;;10.62;9.95;9.72;23.77;S0;;;;;;;;2MASX J03363907-2054081,ESO 548-051,ESO-LV 548-0510,IRAS 03344-2103,MCG -04-09-033,PGC 013324;;; +NGC1378;**;03:35:58.20;-35:12:40.2;For;;;;;;;;;;;;;;;;;;;;; +NGC1379;G;03:36:03.95;-35:26:28.3;For;2.66;2.55;65;12.04;10.91;9.08;8.45;8.24;22.84;E;;;;;;;;2MASX J03360393-3526282,ESO 358-027,ESO-LV 358-0270,MCG -06-09-001,PGC 013299;;; +NGC1380;G;03:36:27.59;-34:58:34.4;For;4.58;2.22;6;10.94;9.93;7.77;7.13;6.87;22.90;S0;;;;;;;;2MASX J03362757-3458335,2MASX J03362759-3458346,ESO 358-028,ESO-LV 358-0280,IRAS 03345-3508,MCG -06-09-002,PGC 013318;;; +NGC1380A;G;03:36:47.5;-34:44:23;For;2.76;0.78;176;13.36;12.41;10.52;9.84;9.57;24.15;S0;;;;;;;;2MASX J03364747-3444225,ESO 358-033,ESO-LV 358-0330,MCG -06-09-006,PGC 013335;;; +NGC1380B;Dup;03:37:08.96;-35:11:42.1;For;;;;;;;;;;;;;;;1382;;;;;; +NGC1381;G;03:36:31.68;-35:17:42.7;For;2.54;0.96;139;12.47;11.50;9.33;8.65;8.42;23.12;S0;;;;;;;;2MASX J03363170-3517425,ESO 358-029,ESO-LV 358-0290,MCG -06-09-003,PGC 013321;;; +NGC1382;G;03:37:08.96;-35:11:42.1;For;1.99;1.36;23;13.79;12.92;10.89;10.29;10.04;24.02;E-S0;;;;;1380B;;;2MASX J03370895-3511420,ESO 358-037,ESO-LV 358-0370,MCG -06-09-009,PGC 013354;;; +NGC1383;G;03:37:39.24;-18:20:22.1;Eri;2.00;0.82;85;13.45;12.47;10.33;9.62;9.44;23.67;S0;;;;;;;;2MASX J03373925-1820220,ESO 548-053,ESO-LV 548-0530,MCG -03-10-015,PGC 013377;;; +NGC1384;G;03:39:13.59;+15:49:10.4;Tau;0.76;0.46;151;15.60;;12.21;11.45;11.20;23.40;SBc;;;;;;;;2MASX J03391359+1549107,IRAS 03364+1539,MCG +03-10-003,PGC 013448;;The 2MASS position is 4 arcsec south of the nucleus.; +NGC1385;G;03:37:28.85;-24:30:01.1;For;3.40;2.13;3;11.50;10.94;9.46;8.80;8.57;22.46;Sc;;;;;;;;2MASX J03372832-2430046,ESO 482-016,ESO-LV 482-0160,IRAS 03353-2439,MCG -04-09-036,PGC 013368;;; +NGC1386;G;03:36:46.18;-35:59:57.9;Eri;3.59;1.35;25;12.16;11.23;8.98;8.32;8.07;23.50;S0-a;;;;;;;;2MASX J03364623-3559573,ESO 358-035,ESO-LV 358-0350,IRAS 03348-3609,MCG -06-09-005,PGC 013333;;; +NGC1387;G;03:36:57.06;-35:30:23.9;For;3.01;2.89;110;11.75;10.69;8.44;7.76;7.43;22.92;E-S0;;;;;;;;2MASX J03365707-3530240,ESO 358-036,ESO-LV 358-0360,IRAS 03350-3540,MCG -06-09-007,PGC 013344;;; +NGC1388;G;03:38:12.01;-15:53:57.9;Eri;0.85;0.80;150;14.79;;11.84;11.15;10.84;23.36;E;;;;;;;;2MASX J03381201-1553583,IRAS 03358-1603,PGC 013402;;; +NGC1389;G;03:37:11.78;-35:44:44.1;Eri;2.58;1.43;28;12.39;11.50;9.48;8.86;8.63;23.19;E-S0;;;;;;;;2MASX J03371173-3544461,ESO 358-038,ESO-LV 358-0380,MCG -06-09-010,PGC 013360;;; +NGC1390;G;03:37:52.17;-19:00:30.1;Eri;1.45;0.51;21;14.63;;12.43;11.80;11.54;24.09;S0-a;;;;;;;;2MASX J03375216-1900300,ESO 548-054,ESO-LV 548-0540,MCG -03-10-017,PGC 013386;;; +NGC1391;G;03:38:52.96;-18:21:14.8;Eri;1.21;0.61;65;14.25;13.34;11.16;10.46;10.22;23.49;S0;;;;;;;;2MASX J03385297-1821146,ESO 548-059,ESO-LV 548-0590,MCG -03-10-020,PGC 013436;;; +NGC1392;G;03:37:47.01;-36:08:50.7;Eri;0.30;0.21;35;16.88;;14.78;14.26;13.78;22.78;Sc;;;;;;;;2MASX J03374699-3608507,ESO 358-040,ESO-LV 358-0400,PGC 013383;;Identification as NGC 1392 is very uncertain.; +NGC1393;G;03:38:38.58;-18:25:40.7;Eri;1.88;1.22;161;13.00;12.02;10.08;9.38;9.18;23.11;S0;;;;;;;;2MASX J03383857-1825407,ESO 548-058,ESO-LV 548-0580,MCG -03-10-019,PGC 013425;;; +NGC1394;G;03:39:06.92;-18:17:32.2;Eri;1.51;0.59;5;13.66;12.81;10.64;9.94;9.71;23.40;S0;;;;;;;;2MASX J03390692-1817319,ESO 548-060,ESO-LV 548-0600,MCG -03-10-021,PGC 013444;;; +NGC1395;G;03:38:29.75;-23:01:39.1;Eri;4.71;3.97;105;10.71;;7.83;7.16;6.89;22.83;E;;;;;;;;2MASX J03382978-2301396,ESO 482-019,ESO-LV 482-0190,MCG -04-09-039,PGC 013419;;; +NGC1396;G;03:38:06.54;-35:26:24.4;For;0.92;0.54;90;14.80;;12.74;12.25;11.71;23.34;E-S0;;;;;;;;2MASX J03380658-3526237,PGC 013398;;This is FCC 202 with a 15 arcmin error in Dec.; +NGC1397;G;03:39:47.15;-04:40:12.4;Eri;0.96;0.68;172;14.50;;11.39;10.74;10.39;23.19;S0-a;;;;;;;;2MASX J03394713-0440121,MCG -01-10-017,PGC 013485;;; +NGC1398;G;03:38:52.13;-26:20:16.2;For;6.95;4.91;100;10.37;;7.40;6.78;6.50;23.28;SBab;;;;;;;;2MASX J03385213-2620162,ESO 482-022,ESO-LV 482-0220,IRAS 03367-2629,MCG -04-09-040,PGC 013434;;; +NGC1399;G;03:38:29.03;-35:27:02.4;For;8.51;7.69;150;9.74;9.59;7.21;6.56;6.31;23.95;E;;;;;;;;2MASX J03382908-3527026,ESO 358-045,ESO-LV 358-0450,MCG -06-09-012,PGC 013418;;; +NGC1400;G;03:39:30.84;-18:41:17.1;Eri;2.81;2.52;43;12.01;10.96;8.75;8.04;7.81;23.05;E;;;;;;;;2MASX J03393085-1841172,ESO 548-062,ESO-LV 548-0620,IRAS 03372-1850,MCG -03-10-022,PGC 013470;;; +NGC1401;G;03:39:21.85;-22:43:28.9;Eri;2.45;0.90;132;13.32;;10.26;9.60;9.35;23.72;S0;;;;;;;;2MASX J03392185-2243289,ESO 482-026,ESO-LV 482-0260,MCG -04-09-042,PGC 013457;;; +NGC1402;G;03:39:30.57;-18:31:37.0;Eri;0.87;0.83;90;13.96;;11.36;10.58;10.32;22.77;S0;;;;;;;;2MASX J03393058-1831372,ESO 548-061,ESO-LV 548-0610,IRAS 03372-1841,MCG -03-10-023,PGC 013467;;; +NGC1403;G;03:39:10.84;-22:23:19.5;Eri;1.52;1.34;165;13.86;;10.77;10.10;9.82;23.30;E-S0;;;;;;;;2MASX J03391087-2223189,ESO 482-025,ESO-LV 482-0250,MCG -04-09-041,PGC 013445;;; +NGC1404;G;03:38:51.92;-35:35:39.8;For;5.01;4.38;163;10.69;10.00;7.77;7.09;6.82;23.26;E;;;;;;;;2MASX J03385191-3535398,ESO 358-046,ESO-LV 358-0460,MCG -06-09-013,PGC 013433;;; +NGC1405;G;03:40:18.93;-15:31:48.7;Eri;1.60;0.45;152;16.00;;12.12;11.52;11.22;24.70;S0;;;;;;;;2MASX J03401891-1531487,MCG -03-10-028,PGC 013512;;; +NGC1406;G;03:39:23.30;-31:19:17.1;For;4.50;0.90;17;12.42;;9.66;8.92;8.61;23.20;SBbc;;;;;;;;2MASX J03392331-3119170,ESO 418-015,ESO-LV 418-0150,IRAS 03373-3129,MCG -05-09-020,PGC 013458,UGCA 083;;; +NGC1407;G;03:40:11.86;-18:34:48.4;Eri;5.73;5.27;60;10.64;9.67;7.64;6.99;6.70;23.36;E;;;;;;;;2MASX J03401190-1834493,ESO 548-067,ESO-LV 548-0670,MCG -03-10-030,PGC 013505;;; +NGC1408;**;03:39:17.28;-35:30:03.0;For;;;;;;;;;;;;;;;;;;;;Identification as NGC 1408 is very uncertain.; +NGC1409;G;03:41:10.43;-01:18:09.2;Eri;0.82;0.64;130;14.70;;10.79;9.93;9.64;23.19;S0;;;;;;;;2MASX J03411054-0118101,MCG +00-10-011,PGC 013553,UGC 02821 NED01;;; +NGC1410;G;03:41:10.75;-01:17:55.6;Eri;1.17;0.62;99;16.06;15.22;;;;24.28;E;;;;;;;;MCG +00-10-012,PGC 013556,UGC 02821 NED02;;; +NGC1411;G;03:38:44.87;-44:06:02.2;Hor;2.45;1.76;12;12.06;;9.02;8.35;8.15;22.86;E-S0;;;;;;1943;;2MASX J03384485-4406022,ESO 249-011,ESO-LV 249-0110,MCG -07-08-004,PGC 013429;;This is most likely NGC 1411 with 9 minute RA error in IC position.; +NGC1412;G;03:40:29.37;-26:51:44.1;For;1.06;0.45;133;13.54;13.13;10.50;9.85;9.63;22.57;S0;;;;;;1981;;2MASX J03402936-2651441,ESO 482-029,ESO-LV 482-0290,MCG -05-09-021,PGC 013520,TYC 6450-335-1;;NGC 1412 is IC 1981 with a 40 arcmin error in Dec.; +NGC1413;G;03:40:11.55;-15:36:38.8;Eri;0.90;0.77;52;14.95;;11.62;10.86;10.59;23.89;E;;;;;;;;2MASX J03401157-1536380,PGC 013504;;; +NGC1414;G;03:40:57.04;-21:42:47.3;Eri;1.71;0.36;170;14.65;;12.87;12.38;11.99;23.43;SBbc;;;;;;;;ESO 548-071,ESO-LV 548-0710,MCG -04-09-045,PGC 013543;;; +NGC1415;G;03:40:56.86;-22:33:52.1;Eri;3.74;1.51;141;12.47;;9.29;8.58;8.29;23.94;S0-a;;;;;;1983;;2MASX J03405685-2233520,ESO 482-033,ESO-LV 482-0330,IRAS 03387-2243,MCG -04-09-047,PGC 013544;;; +NGC1416;G;03:41:02.89;-22:43:08.8;Eri;1.50;1.01;172;13.95;;11.45;10.79;10.54;23.89;E;;;;;;;;2MASX J03410288-2243090,ESO 482-034,ESO-LV 482-0340,MCG -04-09-048,PGC 013548;;; +NGC1417;G;03:41:57.42;-04:42:17.5;Eri;2.52;1.35;2;12.90;;10.07;9.36;9.14;23.10;SABb;;;;;;;;2MASX J03415742-0442174,IRAS 03394-0451,MCG -01-10-021,PGC 013584;;; +NGC1418;G;03:42:16.16;-04:43:50.7;Eri;1.14;0.65;7;14.50;;11.60;10.85;10.58;23.05;SBb;;;;;;;;2MASX J03421615-0443505,MCG -01-10-022,PGC 013606;;; +NGC1419;G;03:40:42.11;-37:30:39.0;Eri;1.48;1.32;45;13.56;;10.73;10.08;9.89;23.21;E;;;;;;;;2MASX J03404211-3730390,ESO 301-023,ESO-LV 301-0230,MCG -06-09-017,PGC 013534;;; +NGC1420;Other;03:42:39.84;-05:51:09.2;Eri;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC1421;G;03:42:29.28;-13:29:16.9;Eri;3.55;0.75;180;12.38;;9.37;8.72;8.40;22.32;Sbc;;;;;;;;2MASX J03422928-1329168,IRAS 03401-1338,MCG -02-10-008,PGC 013620;;; +NGC1422;G;03:41:31.07;-21:40:53.5;Eri;2.51;0.61;63;13.99;;11.70;10.99;10.73;23.92;SBab;;;;;;;;2MASX J03413106-2140533,ESO 548-077,ESO-LV 548-0770,IRAS 03393-2150,MCG -04-09-051,PGC 013569;;; +NGC1423;G;03:42:40.10;-06:22:54.6;Eri;1.00;0.66;16;15.00;;11.71;10.96;10.55;23.26;SABa;;;;;;;;2MASX J03424012-0622548,MCG -01-10-025,PGC 013628,SDSS J034240.10-062254.5,SDSS J034240.10-062254.6;;MCG RA is +0.6 minutes in error.; +NGC1424;G;03:43:14.04;-04:43:48.3;Eri;1.39;0.49;7;14.50;;11.91;11.15;10.95;23.04;SABb;;;;;;;;2MASX J03431405-0443481,IRAS 03407-0453,MCG -01-10-026,PGC 013664;;; +NGC1425;G;03:42:11.47;-29:53:36.0;For;4.91;2.15;130;11.61;;9.13;8.55;8.31;22.92;Sb;;;;;;;;2MASX J03421146-2953359,2MASX J03421153-2953366,ESO 419-004,ESO-LV 419-0040,IRAS 03401-3002,MCG -05-09-023,PGC 013602,UGCA 084;;This may also be IC 1988.; +NGC1426;G;03:42:49.11;-22:06:30.1;Eri;2.86;1.92;112;12.21;11.44;9.57;8.90;8.67;23.40;E;;;;;;;;2MASX J03424911-2206301,ESO 549-001,ESO-LV 549-0010,MCG -04-09-054,PGC 013638;;; +NGC1427;G;03:42:19.42;-35:23:33.2;For;4.33;2.87;78;11.89;;9.03;8.32;8.14;23.80;E;;;;;;;;ESO 358-052,ESO-LV 358-0520,MCG -06-09-021,PGC 013609;;; +NGC1427A;G;03:40:09.3;-35:37:28;For;2.26;1.42;84;13.44;;;;;23.50;IB;;;;;;;;ESO 358-049,ESO-LV 358-0490,MCG -06-09-016,PGC 013500;;; +NGC1428;G;03:42:22.73;-35:09:14.4;For;1.48;0.73;123;13.77;;11.00;10.30;10.20;23.39;E-S0;;;;;;;;ESO 358-053,ESO-LV 358-0530,MCG -06-09-022,PGC 013611;;; +NGC1429;Other;03:44:04.12;-04:43:05.2;Eri;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1430;*;03:43:25.22;-18:13:30.3;Eri;;;;;;;;;;;;;;;;;;;;; +NGC1431;G;03:44:40.80;+02:50:05.8;Tau;0.91;0.67;160;15.50;;12.04;11.17;11.01;24.10;S0-a;;;;;;;;2MASX J03444080+0250058,MCG +00-10-017,PGC 013732,UGC 02845;;; +NGC1432;HII;03:45:49.59;+24:22:04.3;Tau;60.00;40.00;;;;;;;;;;;;;;;;BD +23 0516,HD 023408,HIP 017573,LBN 771;Maia Nebula;; +NGC1433;G;03:42:01.55;-47:13:19.5;Hor;6.19;2.96;95;10.84;9.99;7.93;7.28;7.06;23.12;SBa;;;;;;;;2MASX J03420155-4713194,ESO 249-014,ESO-LV 249-0140,IRAS 03404-4722,PGC 013586;;; +NGC1434;G;03:46:12.87;-09:40:57.4;Eri;0.79;0.48;163;15.53;;12.00;11.34;10.93;23.53;S0-a;;;;;;;;2MASX J03461286-0940572,PGC 013804;;Identification as NGC 1434 is very uncertain.; +NGC1435;Neb;03:46:10.09;+23:45:53.9;Tau;30.00;30.00;;;;;;;;;;;;;;;;;Merope Nebula;;Dimensions taken from LEDA +NGC1436;G;03:43:37.08;-35:51:10.9;Eri;2.97;2.08;152;12.49;;9.89;9.22;9.03;23.33;Sab;;;;;1437;;;2MASX J03433708-3551107,ESO 358-058,ESO-LV 358-0580,IRAS 03417-3600,MCG -06-09-025,PGC 013687;;; +NGC1437;Dup;03:43:37.08;-35:51:10.9;Eri;;;;;;;;;;;;;;;1436;;;;;; +NGC1437B;G;03:45:54.8;-36:21:25;Eri;2.87;0.86;2;13.98;;11.55;10.77;10.78;23.80;Sd;;;;;;;;2MASX J03455486-3621249,ESO 358-061,ESO-LV 358-0610,IRAS 03440-3630,MCG -06-09-029,PGC 013794;;Position in 1997AJ....113...22G is incorrect.; +NGC1438;G;03:45:17.23;-23:00:08.9;Eri;2.04;0.93;67;13.28;;10.47;9.82;9.62;23.17;Sa;;;;;;;;2MASX J03451721-2300090,ESO 482-041,ESO-LV 482-0410,MCG -04-09-058,PGC 013760;;; +NGC1439;G;03:44:49.95;-21:55:14.0;Eri;2.96;2.83;10;12.23;;9.44;8.81;8.57;23.52;E;;;;;;;;2MASX J03444995-2155137,ESO 549-009,ESO-LV 549-0090,MCG -04-09-056,PGC 013738;;; +NGC1440;G;03:45:02.91;-18:15:57.7;Eri;2.62;1.99;23;12.48;;9.16;8.47;8.20;23.48;S0;;;;;1442;;;2MASX J03450290-1815577,ESO 549-010,ESO-LV 549-0100,MCG -03-10-043,PGC 013752;;; +NGC1441;G;03:45:43.12;-04:05:29.7;Eri;1.85;0.65;89;14.00;;10.24;9.52;9.21;23.26;SBb;;;;;;;;2MASX J03454312-0405295,MCG -01-10-029,PGC 013782;;; +NGC1442;Dup;03:45:02.91;-18:15:57.7;Eri;;;;;;;;;;;;;;;1440;;;;;; +NGC1443;*;03:45:53.04;-04:03:09.8;Eri;;;;;;;;;;;;;;;;;;;;; +NGC1444;OCl;03:49:28.88;+52:39:19.2;Per;3.60;;;7.04;6.60;;;;;;;;;;;;;MWSC 0308;;; +NGC1445;G;03:44:56.22;-09:51:21.1;Eri;0.77;0.62;106;14.82;;12.23;11.67;11.31;23.19;S0;;;;;;;;2MASX J03445621-0951209,IRAS 03425-1000,PGC 013742;;; +NGC1446;*;03:45:57.46;-04:06:43.8;Eri;;;;13.80;13.50;11.56;11.05;10.93;;;;;;;;;;2MASS J03455749-0406439;;Identification as NGC 1446 is very uncertain.; +NGC1447;G;03:45:47.15;-09:01:07.3;Eri;0.86;0.58;115;15.24;;11.74;11.07;10.68;24.23;S0;;;;;;;;2MASX J03454716-0901076,PGC 013786;;; +NGC1448;G;03:44:31.92;-44:38:41.4;Hor;8.02;1.53;41;11.46;;8.68;7.94;7.66;23.27;Sc;;;;;1457;;;2MASX J03443191-4438413,ESO 249-016,ESO-LV 249-0160,IRAS 03428-4448,MCG -07-08-005,PGC 013727;;; +NGC1449;G;03:46:03.07;-04:08:17.2;Eri;0.90;0.52;5;14.60;;11.05;10.33;10.05;23.00;S0;;;;;;;;2MASX J03460309-0408173,MCG -01-10-032,PGC 013798;;; +NGC1450;G;03:45:36.64;-09:14:05.5;Eri;0.91;0.73;28;14.56;;11.31;10.64;10.30;23.65;E-S0;;;;;;;;2MASX J03453663-0914056,PGC 013775;;; +NGC1451;G;03:46:07.16;-04:04:09.1;Eri;0.81;0.65;45;14.50;;10.94;10.25;9.93;22.66;E-S0;;;;;;;;2MASX J03460717-0404093,MCG -01-10-033,PGC 013801;;; +NGC1452;G;03:45:22.31;-18:38:01.1;Eri;2.39;1.76;30;12.98;;9.66;8.97;8.67;23.35;S0-a;;;;;1455;;;2MASX J03452230-1838010,ESO 549-012,ESO-LV 549-0120,MCG -03-10-044,PGC 013765;;; +NGC1453;G;03:46:27.25;-03:58:07.6;Eri;2.46;1.87;19;13.00;;9.13;8.43;8.12;23.39;E;;;;;;;;2MASX J03462726-0358075,MCG -01-10-034,PGC 013814;;; +NGC1454;*;03:45:59.34;-20:39:08.3;Eri;;;;;;;;;;;;;;;;;;;;; +NGC1455;Dup;03:45:22.31;-18:38:01.1;Eri;;;;;;;;;;;;;;;1452;;;;;; +NGC1456;**;03:48:08.25;+22:33:31.0;Tau;;;;11.72;10.96;9.97;9.71;9.63;;;;;;;;;;;;;Main component is TYC 1800-2103-1. +NGC1457;Dup;03:44:31.92;-44:38:41.4;Hor;;;;;;;;;;;;;;;1448;;;;;; +NGC1458;Other;03:46:58.31;-18:14:28.1;Eri;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1459;G;03:46:57.94;-25:31:18.3;For;1.82;1.19;161;13.62;;11.07;10.49;10.10;23.31;SBbc;;;;;;;;2MASX J03465794-2531182,ESO 482-043,ESO-LV 482-0430,IRAS 03448-2540,MCG -04-10-001,PGC 013832;;; +NGC1460;G;03:46:13.74;-36:41:46.8;Eri;1.92;1.62;85;13.52;;10.77;10.05;9.96;23.64;S0;;;;;;;;2MASX J03461375-3641467,ESO 358-062,ESO-LV 358-0620,MCG -06-09-031,PGC 013805;;; +NGC1461;G;03:48:27.14;-16:23:34.4;Eri;2.90;0.85;157;12.85;;9.30;8.60;8.34;23.80;S0;;;;;;;;2MASX J03482713-1623345,MCG -03-10-047,PGC 013881;;; +NGC1462;G;03:50:23.43;+06:58:23.0;Tau;0.86;0.49;40;15.30;;11.66;10.89;10.63;23.19;Sc;;;;;;;;2MASX J03502341+0658231,IRAS 03477+0649,MCG +01-10-010,PGC 013945;;; +NGC1463;G;03:46:15.42;-59:48:36.5;Ret;1.26;1.09;25;14.15;;11.31;10.56;10.30;23.41;Sa;;;;;;;;2MASX J03461541-5948366,ESO 117-009,ESO-LV 117-0090,IRAS 03453-5957,PGC 013807;;; +NGC1464;G;03:51:24.52;-15:24:08.1;Eri;0.81;0.59;44;14.71;;11.86;11.16;10.80;22.74;Scd;;;;;1471;;;2MASX J03512450-1524081,IRAS 03491-1533,PGC 013976;;; +NGC1465;G;03:53:31.91;+32:29:34.1;Per;2.01;0.44;165;14.90;;10.26;9.50;9.17;24.73;S0-a;;;;;;;;2MASX J03533191+3229343,MCG +05-10-003,PGC 014039,UGC 02891;;; +NGC1466;GCl;03:44:33.35;-71:40:17.7;Hyi;3.50;3.50;;11.60;11.59;;;;;;;;;;;;;2MASX J03443186-7140160,ESO 054-016;;The 2MASS position is 7 arcsec east of the core.; +NGC1467;G;03:51:52.80;-08:50:17.5;Eri;1.23;0.67;63;15.00;;11.54;10.85;10.60;24.23;S0-a;;;;;;;;2MASX J03515275-0850176,MCG -02-10-015,PGC 013991;;; +NGC1468;G;03:52:12.58;-06:20:56.2;Eri;1.22;0.85;140;15.00;;11.08;10.40;10.08;23.99;E-S0;;;;;;;;2MASX J03521258-0620566,MCG -01-10-045,PGC 014004,SDSS J035212.58-062056.2;;; +NGC1469;G;04:00:27.77;+68:34:39.8;Cam;2.17;1.22;150;14.50;;8.89;8.07;7.75;24.72;E-S0;;;;;;;;2MASX J04002774+6834398,MCG +11-05-004,PGC 014261,UGC 02909;;; +NGC1470;G;03:52:09.84;-08:59:57.7;Eri;1.61;0.39;166;15.00;;11.31;10.57;10.22;23.53;Sab;;;;;;;;2MASX J03520982-0859576,IRAS 03497-0908,MCG -02-10-016,PGC 014002;;; +NGC1471;Dup;03:51:24.52;-15:24:08.1;Eri;;;;;;;;;;;;;;;1464;;;;;; +NGC1472;G;03:53:47.35;-08:34:06.5;Eri;0.68;0.62;110;;;11.76;11.14;10.68;23.61;S0;;;;;;;;2MASX J03534734-0834060,PGC 014050;;; +NGC1473;G;03:47:26.30;-68:13:14.1;Hyi;1.53;0.82;45;13.76;;12.01;11.87;11.41;22.54;IB;;;;;;;;2MASX J03472514-6813135,ESO 054-019,ESO-LV 54-0190,IRAS 03472-6822,PGC 013853;;; +NGC1474;G;03:54:30.35;+10:42:25.2;Tau;1.04;0.70;5;14.66;13.76;11.51;10.76;10.50;23.63;Sa;;;;;;2002;;2MASX J03543035+1042255,MCG +02-10-003,PGC 014080,UGC 02898;;; +NGC1475;G;03:53:49.83;-08:08:15.0;Eri;0.65;0.59;105;15.70;;12.20;11.39;11.32;23.83;;;;;;;;;2MASX J03534978-0808151,PGC 1007783;;; +NGC1476;G;03:52:08.79;-44:31:56.9;Hor;1.50;0.54;85;13.98;13.82;12.59;11.97;11.76;23.12;Sa;;;;;;;;2MASX J03520773-4431585,ESO 249-024,ESO-LV 249-0240,IRAS 03504-4440,MCG -07-09-001,PGC 014001;;; +NGC1477;G;03:54:02.88;-08:34:29.9;Eri;0.77;0.68;52;;;11.82;11.02;10.84;24.00;E;;;;;;;;2MASX J03540284-0834301,PGC 014060;;; +NGC1478;G;03:54:07.34;-08:33:19.5;Eri;0.64;0.44;43;15.88;;12.23;11.45;11.23;23.82;S0;;;;;;;;2MASX J03540729-0833191,PGC 014062;;; +NGC1479;Other;03:54:20.44;-10:12:31.0;Eri;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1480;Other;03:54:32.38;-10:15:31.8;Eri;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1481;G;03:54:28.96;-20:25:37.8;Eri;1.04;0.78;132;14.44;;12.17;11.41;11.18;23.37;E-S0;;;;;;;;2MASX J03542901-2025380,ESO 549-032,ESO-LV 549-0320,MCG -03-10-053,PGC 014079;;; +NGC1482;G;03:54:38.96;-20:30:09.6;Eri;2.46;1.43;107;13.14;12.15;9.72;8.91;8.48;23.73;S0-a;;;;;;;;2MASX J03543892-2030088,ESO 549-033,ESO-LV 549-0330,IRAS 03524-2038,MCG -03-10-054,PGC 014084;;; +NGC1483;G;03:52:47.64;-47:28:39.1;Hor;1.87;1.51;153;13.23;;11.26;10.60;10.59;23.12;SBbc;;;;;;;;2MASX J03524760-4728390,ESO 201-007,ESO-LV 201-0070,IRAS 03512-4737,PGC 014022;;; +NGC1484;G;03:54:20.13;-36:58:08.0;Eri;2.73;0.68;79;13.67;;;;;23.66;SBb;;;;;;;;2MASX J03542014-3658077,ESO 359-006,ESO-LV 359-0060,IRAS 03524-3706,MCG -06-09-036,PGC 014071;;; +NGC1485;G;04:05:03.94;+70:59:47.5;Cam;2.23;0.69;21;13.60;;9.67;8.92;8.62;23.11;Sb;;;;;;;;2MASX J04050398+7059476,MCG +12-04-010,PGC 014432,UGC 02933;;; +NGC1486;G;03:56:18.70;-21:49:16.1;Eri;0.91;0.62;6;15.21;;12.70;12.03;11.66;23.34;SABb;;;;;;;;2MASX J03561872-2149158,ESO 549-037,ESO-LV 549-0370,MCG -04-10-008,PGC 014132;;; +NGC1487;GPair;03:55:46.10;-42:22:05.0;Hor;4.40;;;;;;;;;;;;;;;;;ESO 249-031,MCG -07-09-002;;Position in 1997AJ....113.1548C is incorrect.;Diameter of the group inferred by the author. +NGC1487 NED01;G;03:55:45.37;-42:22:03.7;Hor;2.34;2.04;96;11.89;;10.69;10.17;9.91;22.34;I;;;;;1487NW;;;2MASX J03554474-4222024,ESO-LV 249-0310,MCG -07-09-002 NED01,PGC 014117;;; +NGC1487 NED02;G;03:55:47.17;-42:22:06.9;Hor;3.72;1.70;91;12.28;11.68;;9.71;9.56;23.22;S?;;;;;;;;IRAS 03540-4230,MCG -07-09-002 NED02,PGC 014121;;; +NGC1488;**;04:00:04.33;+18:34:02.3;Tau;;;;;;;;;;;;;;;;;;;;; +NGC1489;G;03:57:38.10;-19:12:59.9;Eri;1.69;0.60;19;14.65;;11.69;10.97;10.75;23.75;SBb;;;;;;;;2MASX J03573808-1912597,ESO 549-042,ESO-LV 549-0420,MCG -03-11-003,PGC 014165;;; +NGC1490;G;03:53:34.22;-66:01:05.0;Ret;1.39;1.19;131;13.42;;10.06;9.37;9.09;23.22;E;;;;;;;;2MASX J03533420-6601052,ESO 083-011,ESO-LV 83-0110,PGC 014040;;; +NGC1491;HII;04:03:13.56;+51:18:57.9;Per;9.00;6.00;;;;;;;;;;;;;;;;LBN 704;;Within 10 degrees of the galactic plane.; +NGC1492;G;03:58:13.13;-35:26:46.9;Eri;0.77;0.61;14;14.29;;11.75;11.07;10.75;22.34;Sa;;;;;;;;2MASX J03581314-3526469,ESO 359-012,ESO-LV 359-0120,IRAS 03563-3535,PGC 014186;;; +NGC1493;G;03:57:27.43;-46:12:38.5;Hor;3.44;3.18;80;11.88;;10.36;9.01;8.81;23.19;SBc;;;;;;;;2MASX J03572738-4612386,ESO 249-033,ESO-LV 249-0330,IRAS 03558-4621,PGC 014163;;; +NGC1494;G;03:57:42.90;-48:54:29.1;Hor;3.51;1.86;180;12.34;;;;;23.17;Scd;;;;;;;;2MASX J03574256-4854409,ESO 201-012,ESO-LV 201-0120,IRAS 03562-4902,PGC 014169;;; +NGC1495;G;03:58:21.82;-44:27:58.5;Hor;2.22;0.48;104;13.28;;11.15;10.52;10.09;22.58;Sc;;;;;;;;2MASX J03582180-4427585,2MASX J03582336-4428024,ESO 249-034,ESO-LV 249-0340,IRAS 03567-4436,MCG -07-09-004,PGC 014190;;; +NGC1496;OCl;04:04:31.89;+52:39:41.0;Per;2.10;;;;9.60;;;;;;;;;;;;;MWSC 0333;;; +NGC1497;G;04:02:06.82;+23:07:58.5;Tau;1.23;0.65;63;14.50;;10.47;9.82;9.48;23.69;S0;;;;;;;;2MASX J04020678+2307585,MCG +04-10-008,PGC 014331,UGC 02929;;; +NGC1498;OCl;04:00:19.30;-12:01:11.0;Eri;;;;;;;;;;;;;;;;;;;;; +NGC1499;Neb;04:03:14.42;+36:22:02.9;Per;160.00;40.00;;5.00;;;;;;;;;;;;;;LBN 756;California Nebula;;B-Mag taken from LEDA +NGC1500;G;03:58:13.97;-52:19:41.4;Dor;1.49;1.13;88;14.44;;11.13;10.42;10.07;24.52;E;;;;;;;;2MASX J03581395-5219412,ESO 201-013,ESO-LV 201-0130,PGC 014187;;; +NGC1501;PN;04:06:59.37;+60:55:14.5;Cam;0.87;;;13.30;11.50;13.20;12.92;12.79;;;14.34;15.17;14.39;;;;;IRAS 04026+6047,PN G144.5+06.5;;; +NGC1502;OCl;04:07:49.30;+62:19:53.5;Cam;10.20;;;7.47;6.90;;;;;;;;;;;;;MWSC 0343;;; +NGC1503;G;03:56:33.24;-66:02:26.4;Ret;0.96;0.74;141;14.40;;11.60;10.80;10.52;23.05;S0-a;;;;;;;;2MASX J03563321-6602263,ESO 083-013,ESO-LV 83-0130,IRAS 03561-6611,PGC 014137;;; +NGC1504;G;04:02:29.70;-09:20:07.4;Eri;0.79;0.70;40;15.00;;11.83;11.07;10.86;23.64;E-S0;;;;;;;;2MASX J04022966-0920078,MCG -02-11-008,PGC 014336;;; +NGC1505;G;04:02:36.40;-09:19:20.7;Eri;1.20;0.86;69;15.00;;11.07;10.34;10.00;23.75;S0;;;;;;;;2MASX J04023642-0919208,MCG -02-11-009,PGC 014339;;; +NGC1506;G;04:00:21.57;-52:34:25.4;Dor;1.59;0.98;82;14.55;;11.38;10.70;10.40;23.92;E-S0;;;;;;;;2MASX J04002159-5234254,ESO 156-027,ESO-LV 156-0270,PGC 014256;;; +NGC1507;G;04:04:27.21;-02:11:18.9;Eri;3.78;0.79;12;12.80;;;;;23.08;SBd;;;;;;;;IRAS 04019-0219,MCG +00-11-009,PGC 014409,UGC 02947;;Confused HIPASS source; +NGC1508;G;04:05:47.64;+25:24:30.5;Tau;0.60;0.44;25;15.20;;10.82;10.07;9.80;22.83;E?;;;;;;;;2MASX J04054765+2524302,MCG +04-10-021,PGC 014454;;; +NGC1509;G;04:03:55.20;-11:10:44.5;Eri;0.79;0.63;55;14.50;;11.40;10.62;10.31;22.73;Sa;;;;;;2026;;2MASX J04035523-1110446,IRAS 04015-1118,MCG -02-11-013,PGC 014393;;; +NGC1510;G;04:03:32.64;-43:24:00.4;Hor;1.32;1.13;103;13.63;13.24;11.28;10.17;10.36;22.82;S0;;;;;;;;2MASX J04033264-4324005,ESO 250-003,ESO-LV 250-0030,IRAS 04019-4332,MCG -07-09-006,PGC 014375;;; +NGC1511;G;03:59:36.98;-67:38:03.3;Hyi;3.66;1.47;123;11.97;;9.60;8.94;8.63;22.91;Sab;;;;;;;;2MASX J03593698-6738033,2MASX J03593974-6738201,ESO 055-004,ESO-LV 55-0040,IRAS 03594-6746,PGC 014236;;; +NGC1511A;G;04:00:18.6;-67:48:25;Hyi;1.85;0.41;108;14.27;;11.66;11.05;10.80;23.61;SBab;;;;;;;;2MASX J04001850-6748243,ESO 055-005,ESO-LV 55-0050,IRAS 04001-6756,PGC 014255;;; +NGC1511B;G;04:00:54.7;-67:36:43;Hyi;1.39;0.25;97;15.17;;;;;23.25;SBcd;;;;;;;;ESO 055-006,ESO-LV 55-0060,PGC 014279;;; +NGC1512;G;04:03:54.28;-43:20:55.9;Hor;8.43;4.02;63;11.43;10.54;8.34;7.76;7.49;24.11;Sa;;;;;;;;2MASS J04035419-4320552,2MASX J04035428-4320558,ESO 250-004,ESO-LV 250-0040,IRAS 04022-4329,MCG -07-09-007,PGC 014391;;Extended HIPASS source; +NGC1513;OCl;04:09:54.70;+49:31:02.2;Per;5.10;;;8.71;8.40;;;;;;;;;;;;;MWSC 0346;;; +NGC1514;PN;04:09:16.95;+30:46:33.3;Tau;2.20;;;10.05;10.19;8.19;8.10;8.00;;;9.87;9.93;9.42;;;;BD +30 0623,HIP 019395,SAO 57020,TYC 2358-00056-1;IRAS 04061+3038,PN G165.5-15.2;;; +NGC1515;G;04:04:02.72;-54:06:00.2;Dor;5.50;1.26;20;11.96;11.03;8.75;8.08;7.84;23.25;SABb;;;;;;;;2MASX J04040271-5406002,ESO 156-036,ESO-LV 156-0360,IRAS 04028-5414,PGC 014397;;; +NGC1515A;G;04:03:49.8;-54:06:47;Dor;0.93;0.49;55;15.40;;12.33;11.36;11.33;23.50;SBb;;;;;;;;2MASX J04034980-5406471,ESO 156-034,ESO-LV 156-0340,PGC 014388;;; +NGC1516A;G;04:08:07.4;-08:49:45;Eri;0.90;0.55;130;15.00;;11.60;10.85;10.58;22.47;SABb;;;;;1524;;;2MASX J04080742-0849453,MCG -02-11-017,PGC 014515;;; +NGC1516B;G;04:08:08.31;-08:50:08.6;Eri;1.26;1.26;90;15.00;;;;;;Sc;;;;;1525;;;MCG -02-11-018,PGC 014516;;; +NGC1517;G;04:09:11.93;+08:38:55.7;Tau;0.97;0.81;160;14.30;;11.26;10.51;10.25;22.78;Sc;;;;;;;;2MASX J04091193+0838555,IRAS 04064+0831,PGC 014564,UGC 02970;;; +NGC1518;G;04:06:49.72;-21:10:21.5;Eri;3.47;1.30;30;12.20;11.84;12.06;11.40;11.16;22.80;SBd;;;;;;;;2MASX J04064970-2110214,ESO 550-007,ESO-LV 550-0070,IRAS 04046-2118,MCG -04-10-013,PGC 014475;;; +NGC1519;G;04:08:07.60;-17:11:34.4;Eri;2.47;0.90;107;13.73;;11.18;10.36;10.12;23.60;SBb;;;;;;;;2MASX J04080759-1711344,ESO 550-009,ESO-LV 550-0090,IRAS 04058-1719,MCG -03-11-013,PGC 014514;;; +NGC1520;OCl;03:57:30.97;-76:50:02.2;Men;5.40;;;;;;;;;;;;;;;;;MWSC 0319;;About a dozen stars scattered around HD 25864.; +NGC1521;G;04:08:18.93;-21:03:07.1;Eri;3.25;2.02;9;12.31;;9.64;8.98;8.68;23.82;E;;;;;;;;2MASX J04081893-2103069,ESO 550-011,ESO-LV 550-0110,MCG -04-10-015,PGC 014520,TYC 5889-1109-1;;; +NGC1522;G;04:06:07.92;-52:40:06.3;Dor;1.22;0.87;39;14.16;13.78;12.55;11.60;11.38;23.14;S0;;;;;;;;2MASX J04060790-5240059,ESO 156-038,ESO-LV 156-0380,IRAS 04048-5248,PGC 014462;;; +NGC1523;Other;04:06:11.02;-54:05:17.9;Dor;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC1524;Dup;04:08:07.4;-08:49:45;Eri;;;;;;;;;;;;;;;1516A;;;;;; +NGC1525;Dup;04:08:08.31;-08:50:08.6;Eri;;;;;;;;;;;;;;;1516B;;;;;; +NGC1526;G;04:05:12.30;-65:50:23.3;Ret;0.86;0.56;36;14.59;;11.89;11.17;10.89;22.67;SABb;;;;;;;;2MASX J04051227-6550232,ESO 084-003,ESO-LV 84-0030,IRAS 04048-6558,PGC 014437;;; +NGC1527;G;04:08:24.14;-47:53:49.3;Hor;4.58;1.79;78;11.73;;8.55;7.84;7.63;23.68;E-S0;;;;;;;;2MASX J04082413-4753493,ESO 201-020,ESO-LV 201-0200,PGC 014526;;; +NGC1528;OCl;04:15:18.87;+51:12:41.3;Per;9.60;;;6.83;6.40;;;;;;;;;;;;;MWSC 0353;;; +NGC1529;G;04:07:19.88;-62:53:57.5;Ret;0.71;0.33;164;14.39;;11.14;10.41;10.15;22.51;S0;;;;;;;;2MASX J04071984-6253575,ESO 084-004,ESO-LV 84-0040,PGC 014495;;; +NGC1530;G;04:23:27.10;+75:17:44.1;Cam;1.82;1.04;130;13.40;;9.24;8.55;8.29;22.14;SBb;;;;;;;;2MASX J04232710+7517440,IRAS 04170+7510,MCG +13-04-004,PGC 015018,UGC 03013;;; +NGC1530A;G;04:44:28.50;+75:38:23.1;Cam;1.48;1.35;100;14.50;;10.40;9.68;9.36;22.77;SABb;;;;;;0381;;2MASX J04442845+7538230,IRAS 04378+7532,MCG +13-04-007,PGC 015917,UGC 03130;;; +NGC1531;G;04:11:59.32;-32:51:02.9;Eri;1.50;0.90;123;13.11;;9.92;9.52;8.42;22.46;E-S0;;;;;;;;2MASX J04115932-3251028,ESO 359-026,ESO-LV 359-0260,MCG -05-11-001,PGC 014635;;; +NGC1532;G;04:12:04.33;-32:52:27.2;Eri;11.27;3.09;33;10.65;;7.70;7.01;6.73;23.78;SBb;;;;;;;;2MASX J04120433-3252271,ESO 359-027,ESO-LV 359-0270,MCG -05-11-002,PGC 014638;;Extended HIPASS source; +NGC1533;G;04:09:51.84;-56:07:06.4;Dor;3.27;2.04;149;11.77;10.92;8.55;7.86;7.63;23.08;E-S0;;;;;;;;2MASX J04095185-5607063,ESO 157-003,ESO-LV 157-0030,IRAS 04088-5614,PGC 014582;;Extended HIPASS source; +NGC1534;G;04:08:46.07;-62:47:51.3;Ret;1.66;1.04;76;13.76;;10.39;9.65;9.39;23.42;S0-a;;;;;;;;2MASX J04084606-6247512,ESO 084-006,ESO-LV 84-0060,IRAS 04081-6255,PGC 014547;;; +NGC1535;PN;04:14:15.77;-12:44:21.8;Eri;0.35;;;9.60;9.60;10.90;10.86;10.25;;;;12.19;12.18;;;;BD -13 842,HD 26847;2MASX J04141578-1244216,IRAS 04119-1251,PN G206.4-40.5;;; +NGC1536;G;04:10:59.86;-56:28:49.6;Ret;1.67;1.21;157;13.29;13.15;10.79;10.18;9.86;23.11;SBc;;;;;;;;2MASX J04105983-5628496,ESO 157-005,ESO-LV 157-0050,IRAS 04099-5636,PGC 014620;;The ESO position is southeast of the eccentric nucleus.; +NGC1537;G;04:13:40.71;-31:38:43.5;Eri;4.35;2.76;102;11.54;;8.61;7.95;7.73;23.50;E;;;;;;;;2MASX J04134070-3138434,ESO 420-012,ESO-LV 420-0120,MCG -05-11-005,PGC 014695;;; +NGC1538;G;04:14:56.08;-13:11:30.2;Eri;0.66;0.45;108;16.06;;12.36;11.61;11.45;23.68;S0-a;;;;;;2047;;2MASX J04145606-1311299,PGC 941480;;Identification as NGC 1538 is uncertain.; +NGC1539;G;04:19:01.96;+26:49:39.0;Tau;0.97;0.74;45;15.70;;10.79;9.98;9.62;;E;;;;;;;;2MASX J04190197+2649389,PGC 014852;;Identification as NGC 1539 is uncertain.;Diameters and position angle taken from Simbad. +NGC1540;G;04:15:10.66;-28:29:18.5;Eri;0.77;0.49;150;14.94;;12.46;12.01;12.09;23.79;Sa;;;;;;;;2MASX J04151066-2829187,ESO-LV 420-0142,IRAS 04131-2836,PGC 014733;;; +NGC1540A;G;04:15:10.01;-28:28:55.5;Eri;0.56;0.38;50;14.75;;13.79;13.10;13.07;21.92;Sa;;;;;;;;ESO-LV 420-0141,PGC 014734;;; +NGC1541;G;04:17:00.23;+00:50:06.7;Tau;1.38;0.49;77;14.90;;11.12;10.44;10.23;23.92;S0-a;;;;;;;;2MASX J04170023+0050067,MCG +00-11-040,PGC 014792,UGC 03001;;; +NGC1542;G;04:17:14.18;+04:46:53.9;Tau;1.22;0.40;128;15.02;13.89;11.40;10.54;10.28;23.53;Sab;;;;;;;;2MASX J04171419+0446537,IRAS 04145+0439,MCG +01-11-016,PGC 014800,UGC 03003;;; +NGC1543;G;04:12:43.25;-57:44:16.7;Ret;3.66;0.86;94;10.67;10.60;8.32;7.68;7.45;22.94;S0;;;;;;;;2MASX J04124324-5744166,ESO 118-010,ESO-LV 118-0100,PGC 014659;;; +NGC1544;G;05:02:36.15;+86:13:20.4;Cep;1.13;0.87;121;14.20;;10.70;9.96;9.79;23.04;S0-a;;;;;;;;2MASX J05023656+8613203,MCG +14-03-006,PGC 016608,UGC 03160;;; +NGC1545;OCl;04:20:56.26;+50:15:19.2;Per;4.20;;;7.20;6.20;;;;;;;;;;;;;MWSC 0369;;; +NGC1546;G;04:14:36.54;-56:03:38.9;Dor;3.72;2.50;143;12.31;10.92;9.08;8.33;8.05;23.59;S0-a;;;;;;;;2MASX J04143654-5603389,ESO 157-012,ESO-LV 157-0120,IRAS 04134-5611,PGC 014723;;; +NGC1547;G;04:17:12.41;-17:51:26.9;Eri;1.40;0.58;131;14.41;;11.53;10.78;10.45;23.17;Sbc;;;;;;;;2MASX J04171241-1751267,ESO 550-018,ESO-LV 550-0180,IRAS 04149-1758,MCG -03-11-020,PGC 014794,PGC 014799;;; +NGC1548;OCl;04:21:19.10;+36:54:58.8;Per;3.60;;;;;;;;;;;;;;;;;MWSC 0371;;; +NGC1549;G;04:15:45.13;-55:35:32.1;Dor;5.09;4.35;138;10.48;9.79;7.68;7.07;6.78;23.08;E;;;;;;;;2MASX J04154522-5535324,ESO 157-016,ESO-LV 157-0160,PGC 014757;;; +NGC1550;G;04:19:37.93;+02:24:34.1;Tau;1.73;1.54;28;14.00;;9.78;9.06;8.77;23.23;E;;;;;1551;;;2MASX J04193792+0224355,MCG +00-11-055,PGC 014880,UGC 03012;;; +NGC1551;Dup;04:19:37.93;+02:24:34.1;Tau;;;;;;;;;;;;;;;1550;;;;;; +NGC1552;G;04:20:17.68;-00:41:33.8;Eri;1.79;1.29;104;14.40;;10.29;9.61;9.32;24.25;S0-a;;;;;;;;2MASX J04201768-0041336,MCG +00-12-007,PGC 014907,UGC 03015;;; +NGC1553;G;04:16:10.47;-55:46:48.5;Dor;6.25;4.29;150;10.10;9.40;7.18;6.50;6.28;22.99;S0;;;;;;;;2MASX J04161046-5546485,ESO 157-017,ESO-LV 157-0170,IRAS 04150-5554,PGC 014765;;; +NGC1554;*;04:21:43.55;+19:31:14.1;Tau;;;;;;10.51;9.58;9.27;;;;;;;;;;2MASS J04214353+1931144;;; +NGC1555;RfN;04:21:59.43;+19:32:06.6;Tau;1.82;1.35;74;9.98;;;;;;;;;;;;;;BD +19 0706,HIP 020390,IRAS 04190+1924,IRAS 04190+1924;Hind's Nebula,Hind's Variable Nebula;Identified as a star by Strauss, et al (1992, ApJS, 83, 29).;Dimensions taken from LEDA +NGC1556;G;04:17:44.83;-50:09:52.0;Dor;1.53;0.58;167;13.53;;11.52;10.95;10.77;22.50;Sb;;;;;;;;2MASX J04174483-5009520,ESO 202-004,ESO-LV 202-0040,IRAS 04163-5017,PGC 014818;;; +NGC1557;OCl;04:13:11.17;-70:25:29.8;Hyi;7.20;;;;;;;;;;;;;;;;;ESO 055-015,MWSC 0351;;"Ten or fifteen stars, 15 arcmin by 10 arcmin; cluster?"; +NGC1558;G;04:20:16.18;-45:01:53.3;Cae;3.05;0.95;72;13.28;;10.40;9.70;9.45;23.50;Sbc;;;;;;;;2MASX J04201617-4501533,ESO 250-017,ESO-LV 250-0170,IRAS 04187-4508,PGC 014906;;; +NGC1559;G;04:17:35.77;-62:47:01.2;Ret;4.19;2.18;63;11.19;10.45;8.91;8.28;8.02;22.32;SBc;;;;;;;;2MASX J04173578-6247012,ESO 084-010,ESO-LV 84-0100,IRAS 04170-6253,PGC 014814;;; +NGC1560;G;04:32:49.09;+71:52:59.2;Cam;8.30;1.68;21;12.10;;9.71;8.93;8.89;24.08;Scd;;;;;;;;2MASX J04324908+7152591,IRAS 04271+7146,MCG +12-05-005,PGC 015488,UGC 03060;;RC2 is incorrect in equating IC 2062 (a Galactic star) with NGC 1560.; +NGC1561;G;04:23:01.08;-15:50:44.4;Eri;1.37;0.78;167;15.00;;11.41;10.72;10.46;24.15;E-S0;;;;;;;;2MASX J04230107-1550445,MCG -03-12-006,PGC 015005;;HOLM 075B does not exist (it is probably a plate defect).; +NGC1562;G;04:21:47.62;-15:45:19.6;Eri;0.92;0.69;80;15.26;;11.94;11.21;10.89;23.73;S0;;;;;;;;2MASX J04214762-1545198,PGC 014956;;; +NGC1563;G;04:22:53.95;-15:43:57.5;Eri;0.49;0.44;74;15.00;;12.76;12.07;11.88;23.00;;;;;;;;;2MASX J04225393-1543574,PGC 015000;;; +NGC1564;G;04:23:00.95;-15:44:19.9;Eri;0.73;0.56;33;15.50;;12.27;11.48;11.26;23.64;S0;;;;;;;;2MASX J04230094-1544195,PGC 015004;;; +NGC1565;G;04:23:23.45;-15:44:39.6;Eri;1.02;0.89;86;15.00;;12.27;11.63;11.14;23.36;Sc;;;;;;;;2MASX J04232345-1544396,MCG -03-12-007,PGC 015015;;; +NGC1566;G;04:20:00.42;-54:56:16.1;Dor;7.23;5.00;45;10.19;9.73;7.76;7.21;6.89;23.03;SABb;;;;;;;;2MASX J04200041-5456161,ESO 157-020,ESO-LV 157-0200,IRAS 04189-5503,PGC 014897;;Extended HIPASS source; +NGC1567;G;04:21:08.75;-48:15:17.2;Cae;1.53;1.31;159;13.36;;10.33;9.69;9.44;23.24;E;;;;;;;;2MASX J04210873-4815174,ESO 202-010,ESO-LV 202-0100,PGC 014934;;; +NGC1568;G;04:24:25.34;-00:44:46.4;Eri;1.46;0.99;139;14.90;;10.64;9.92;9.64;24.28;S0-a;;;;;;;;2MASX J04242535-0044465,MCG +00-12-027,PGC 015042,UGC 03032;;Sometimes called 'NGC 1568B'.; +NGC1569;G;04:30:49.06;+64:50:52.6;Cam;3.91;2.16;119;11.86;11.03;8.82;8.18;7.86;22.96;IB;;;;;;;;2MASX J04304918+6450525,IRAS 04260+6444,MCG +11-06-001,PGC 015345,TYC 4073-90-1,UGC 03056;;; +NGC1570;G;04:22:08.94;-43:37:46.4;Cae;2.15;1.36;180;13.22;;10.10;9.39;9.19;23.68;E;;;;;1571;;;2MASX J04220894-4337463,ESO 250-019,ESO-LV 250-0190,MCG -07-10-001,PGC 014971;;; +NGC1571;Dup;04:22:08.94;-43:37:46.4;Cae;;;;;;;;;;;;;;;1570;;;;;; +NGC1572;G;04:22:42.81;-40:36:03.3;Cae;1.37;0.93;160;13.63;;10.39;9.67;9.30;22.53;SBa;;;;;;;;2MASX J04224281-4036034,ESO 303-014,ESO-LV 303-0140,IRAS 04210-4042,MCG -07-10-003,PGC 014993;;; +NGC1573;G;04:35:03.99;+73:15:44.7;Cam;1.95;1.32;35;13.30;;9.57;8.86;8.56;23.17;E;;;;;;;;2MASX J04350397+7315446,MCG +12-05-008,PGC 015570,UGC 03077;;The 2MASS position is 6 arcsec west of the nucleus.; +NGC1574;G;04:21:58.82;-56:58:29.1;Ret;4.13;2.32;2;11.17;10.48;7.98;7.39;7.11;23.10;E-S0;;;;;;;;2MASX J04215882-5658291,ESO 157-022,ESO-LV 157-0220,PGC 014965;;; +NGC1575;G;04:26:20.55;-10:05:54.4;Eri;1.52;1.16;115;13.00;;;;;22.86;SABb;;;;;1577;;;2MASX J04262054-1005543,IRAS 04239-1012,MCG -02-12-014,PGC 015090;;; +NGC1576;G;04:26:18.82;-03:37:15.9;Eri;1.49;0.88;102;15.00;;10.73;10.07;9.72;23.93;E-S0;;;;;;;;2MASX J04261882-0337158,MCG -01-12-007,PGC 015089;;; +NGC1577;Dup;04:26:20.55;-10:05:54.4;Eri;;;;;;;;;;;;;;;1575;;;;;; +NGC1578;G;04:23:46.65;-51:35:58.0;Dor;1.21;0.89;165;13.83;;10.84;10.17;9.86;22.89;Sa;;;;;;;;2MASX J04234665-5135579,ESO 202-014,ESO-LV 202-0140,IRAS 04224-5142,PGC 015025,TYC 8075-1340-1;;; +NGC1579;Cl+N;04:30:13.80;+35:16:10.0;Per;10.20;;;;;;;;;;;;;;;;;IRAS 04269+3510,LBN 767,MWSC 0385;;Identified as IR cirrus by Strauss, et al (1992, ApJS, 83, 29).; +NGC1580;G;04:28:18.48;-05:10:43.6;Eri;1.03;0.66;121;14.50;;11.30;10.61;10.38;22.80;Sbc;;;;;;;;2MASX J04281848-0510436,MCG -01-12-011,PGC 015189;;; +NGC1581;G;04:24:44.96;-54:56:31.2;Dor;2.08;0.81;82;13.36;;10.72;10.02;9.85;23.84;E-S0;;;;;;;;2MASX J04244496-5456312,ESO 157-026,ESO-LV 157-0260,IRAS 04236-5503,PGC 015055;;; +NGC1582;OCl;04:31:46.79;+43:47:05.4;Per;7.80;;;;7.00;;;;;;;;;;;;;MWSC 0388;;; +NGC1583;G;04:28:20.73;-17:35:43.6;Eri;1.04;0.90;95;14.61;;11.40;10.67;10.39;23.63;E;;;;;;;;2MASX J04282071-1735434,ESO 551-008,ESO-LV 551-0080,MCG -03-12-010,PGC 015191,PGC 015193;;; +NGC1584;G;04:28:10.26;-17:31:24.1;Eri;0.95;0.76;122;14.88;;11.87;11.14;10.88;23.62;E-S0;;;;;;;;2MASX J04281029-1731244,ESO 551-006,ESO-LV 551-0060,PGC 015180;;; +NGC1585;G;04:27:33.01;-42:09:54.8;Cae;0.85;0.63;168;14.23;;12.04;11.44;11.29;22.51;Sc;;;;;;;;2MASX J04273300-4209549,ESO 303-018,ESO-LV 303-0180,IRAS 04259-4216,MCG -07-10-006,PGC 015150;;The APMUKS data include two superposed stars.; +NGC1586;G;04:30:38.23;-00:18:15.0;Eri;1.68;0.85;154;13.50;;11.14;10.54;10.21;23.44;SBbc;;;;;;;;2MASX J04303822-0018149,IRAS 04280-0024,MCG +00-12-036,PGC 015331,UGC 03062;;; +NGC1587;G;04:30:39.94;+00:39:41.7;Tau;2.08;1.48;73;13.30;;9.45;8.81;8.51;23.17;E;;;;;;;;2MASX J04303992+0039421,MCG +00-12-035,PGC 015332,UGC 03063;;; +NGC1588;G;04:30:43.77;+00:39:53.0;Tau;1.26;0.70;167;14.10;;;;;23.22;E;;;;;;;;MCG +00-12-037,PGC 015340,UGC 03064;;; +NGC1589;G;04:30:45.44;+00:51:49.2;Tau;3.06;0.98;160;13.80;;9.27;8.52;8.24;23.28;Sab;;;;;;;;2MASX J04304545+0051491,MCG +00-12-038,PGC 015342,SDSS J043045.45+005149.2,UGC 03065;;; +NGC1590;G;04:31:10.22;+07:37:51.2;Tau;0.90;0.80;110;14.60;;11.29;10.59;10.25;22.89;Sc;;;;;;;;2MASX J04311020+0737513,IRAS 04284+0731,MCG +01-12-008,PGC 015368,SDSS J043110.24+073751.1,UGC 03071;;; +NGC1591;G;04:29:30.55;-26:42:47.2;Eri;1.39;0.83;29;13.77;;11.16;10.53;10.21;22.82;SBab;;;;;;;;2MASX J04293054-2642472,ESO 484-025,ESO-LV 484-0250,IRAS 04274-2649,MCG -04-11-015,PGC 015276;;; +NGC1592;G;04:29:40.13;-27:24:30.7;Eri;1.02;0.61;97;13.94;14.09;13.23;13.01;12.66;22.75;I;;;;;;;;ESO 421-002,ESO-LV 421-0020,MCG -05-11-011,PGC 015292;;VV notes this as a '3+2?' interacting system.; +NGC1593;G;04:32:06.12;+00:34:02.5;Tau;1.36;0.57;129;14.80;;11.15;10.51;10.41;24.11;S0;;;;;1608;2077;;2MASX J04320614+0034028,MCG +00-12-044,PGC 015447,UGC 03082;;; +NGC1594;G;04:30:51.59;-05:47:53.8;Eri;1.67;1.18;89;13.30;;11.04;10.33;9.90;23.31;Sbc;;;;;;2075;;2MASX J04305162-0547539,IRAS 04284-0554,MCG -01-12-014,PGC 015348;;; +NGC1595;G;04:28:21.76;-47:48:57.2;Cae;1.50;1.09;12;13.75;;10.70;10.03;9.75;23.40;E;;;;;;;;2MASX J04282173-4748573,ESO 202-025,ESO-LV 202-0250,PGC 015195;;; +NGC1596;G;04:27:38.11;-55:01:40.1;Dor;3.87;1.02;19;12.01;10.97;8.94;8.27;8.05;23.59;S0;;;;;;;;2MASX J04273810-5501401,ESO 157-031,ESO-LV 157-0310,PGC 015153;;; +NGC1597;G;04:31:13.46;-11:17:25.5;Eri;1.02;0.79;93;15.00;;11.36;10.62;10.33;23.70;E-S0;;;;;;;;2MASX J04311349-1117247,MCG -02-12-032,PGC 015374;;; +NGC1598;G;04:28:33.67;-47:46:57.2;Cae;1.40;0.73;133;13.91;;11.47;10.81;10.42;22.75;SBc;;;;;;;;2MASX J04283365-4746574,ESO 202-026,ESO-LV 202-0260,IRAS 04271-4753,PGC 015204;;; +NGC1599;G;04:31:38.74;-04:35:18.0;Eri;0.82;0.77;40;14.20;;12.69;12.16;12.18;22.35;SBc;;;;;;;;2MASX J04313873-0435179,IRAS 04292-0441,MCG -01-12-016,PGC 015403;;This may also be NGC 1610.; +NGC1600;G;04:31:39.94;-05:05:10.5;Eri;3.33;2.02;5;8.90;;9.02;8.34;8.04;23.39;E;;;;;;;;2MASX J04313985-0505099,MCG -01-12-017,PGC 015406;;; +NGC1601;G;04:31:41.73;-05:03:37.3;Eri;0.94;0.73;89;16.00;;11.78;11.13;10.87;23.43;S0;;;;;;;;2MASX J04314173-0503369,MCG -01-12-018,PGC 015413;;; +NGC1602;G;04:27:54.97;-55:03:27.8;Dor;1.87;0.99;88;13.79;13.33;12.87;12.14;12.02;22.94;SBm;;;;;;;;2MASX J04275497-5503282,ESO 157-032,ESO-LV 157-0320,IRAS 04267-5510,PGC 015168;;; +NGC1603;G;04:31:49.95;-05:05:39.9;Eri;0.88;0.57;57;15.50;;11.63;11.06;10.71;23.17;S0;;;;;;;;2MASX J04314996-0505399,MCG -01-12-019,PGC 015424;;; +NGC1604;G;04:31:58.57;-05:22:11.8;Eri;1.35;0.78;69;14.50;;10.84;10.11;9.90;24.01;S0;;;;;;;;2MASX J04315859-0522107,MCG -01-12-020,PGC 015433;;; +NGC1605;OCl;04:34:52.28;+45:16:17.0;Per;3.30;;;11.63;10.70;;;;;;;;;;;;;MWSC 0394;;; +NGC1606;G;04:32:03.34;-05:01:56.8;Eri;0.57;0.49;94;17.00;;12.85;12.17;11.85;23.73;S0-a;;;;;;;;2MASX J04320334-0501567,MCG -01-12-022,PGC 015443;;; +NGC1607;G;04:32:03.09;-04:27:35.8;Eri;1.33;0.51;66;15.00;;11.62;10.87;10.71;;S0-a;;;;;;;;2MASX J04320309-0427357,IRAS 04295-0433,MCG -01-12-023,PGC 015442;;; +NGC1608;Dup;04:32:06.12;+00:34:02.5;Tau;;;;;;;;;;;;;;;1593;;;;;; +NGC1609;G;04:32:45.08;-04:22:20.7;Eri;1.24;0.78;103;15.00;;10.63;9.92;9.64;23.73;S0-a;;;;;;;;2MASX J04324510-0422207,MCG -01-12-025,PGC 015480;;; +NGC1610;G;04:34:13.87;-04:41:59.1;Eri;1.10;0.70;156;15.01;;12.94;12.11;11.98;24.37;Sab;;;;;1619;;;2MASX J04341387-0441590,PGC 015543;;Identifications as NGC 1610 and NGC 1619 are very uncertain.; +NGC1611;G;04:33:05.96;-04:17:50.8;Eri;1.80;0.48;99;15.00;;10.47;9.68;9.41;24.29;S0-a;;;;;;;;2MASX J04330596-0417508,IRAS 04306-0424,MCG -01-12-029,PGC 015501;;; +NGC1612;G;04:33:13.13;-04:10:20.7;Eri;1.36;0.94;138;15.00;;11.03;10.34;10.12;24.12;S0-a;;;;;;;;2MASX J04331312-0410208,IRAS 04307-0416,MCG -01-12-030,PGC 015507;;; +NGC1613;G;04:33:25.33;-04:15:55.5;Eri;1.14;0.69;28;15.00;;11.51;10.83;10.54;23.66;S0-a;;;;;;;;2MASX J04332534-0415556,MCG -01-12-031,PGC 015518;;; +NGC1614;G;04:33:59.85;-08:34:44.0;Eri;1.26;0.95;20;14.66;13.99;10.63;9.89;9.47;22.62;SBc;;;;;;;;2MASX J04340002-0834445,IRAS 04315-0840,MCG -01-12-032,PGC 015538,SDSS J043400.04-083445.0;;Diameter includes companions or long extensions.; +NGC1615;G;04:36:01.04;+19:57:01.2;Tau;1.36;0.71;107;15.00;;10.35;9.62;9.29;21.37;E-S0;;;;;;;;2MASX J04360101+1957008,MCG +03-12-005,PGC 015608,UGC 03096;;; +NGC1616;G;04:32:41.73;-43:42:57.2;Cae;1.91;1.03;33;13.65;;10.71;10.02;9.68;22.99;SABb;;;;;;;;2MASX J04324173-4342572,ESO 251-010,ESO-LV 251-0100,IRAS 04311-4349,MCG -07-10-013,PGC 015479;;; +NGC1617;G;04:31:39.53;-54:36:08.2;Dor;5.24;2.50;112;11.35;10.26;7.99;7.33;7.08;23.17;SBa;;;;;;;;2MASX J04313953-5436081,ESO 157-041,ESO-LV 157-0410,IRAS 04305-5442,PGC 015405;;; +NGC1618;G;04:36:06.60;-03:08:55.5;Eri;2.14;0.71;22;13.50;;10.60;9.89;9.63;23.13;Sb;;;;;;;;2MASX J04360657-0308553,IRAS 04336-0314,MCG -01-12-034,PGC 015611;;; +NGC1619;Dup;04:34:13.87;-04:41:59.1;Eri;;;;;;;;;;;;;;;1610;;;;;; +NGC1620;G;04:36:37.35;-00:08:37.0;Eri;3.48;0.91;23;12.50;;9.88;9.21;8.92;23.27;SABc;;;;;;;;2MASX J04363734-0008370,IRAS 04340-0014,MCG +00-12-052,PGC 015638,SDSS J043637.34-000836.7,UGC 03103;;; +NGC1621;G;04:36:25.06;-04:59:14.3;Eri;1.34;0.91;98;14.50;;10.97;10.31;10.13;24.13;E;;;;;1626;;;2MASX J04362507-0459139,MCG -01-12-035,PGC 015626;;; +NGC1622;G;04:36:36.64;-03:11:19.8;Eri;2.86;0.52;29;13.00;;10.12;9.46;9.18;23.52;SABa;;;;;;;;2MASX J04363665-0311200,MCG -01-12-036,PGC 015635;;HOLM 077B is a star.; +NGC1623;G;04:35:32.41;-13:33:23.2;Eri;0.78;0.42;16;16.02;;12.42;11.69;11.46;24.70;S0-a;;;;;;;;2MASX J04353239-1333234,PGC 015591;;; +NGC1624;Cl+N;04:40:36.50;+50:27:42.0;Per;3.00;;;;11.80;;;;;;;;;;;;;2MASX J04403475+5027419,LBN 722,MWSC 0408;;; +NGC1625;G;04:37:06.26;-03:18:12.6;Eri;2.56;0.57;130;13.00;;;;;22.86;SBb;;;;;;;;IRAS 04346-0324,MCG -01-12-038,PGC 015654;;; +NGC1626;Dup;04:36:25.06;-04:59:14.3;Eri;;;;;;;;;;;;;;;1621;;;;;; +NGC1627;G;04:37:38.00;-04:53:14.9;Eri;1.65;1.37;150;13.40;;11.44;10.80;10.55;23.20;Sc;;;;;;;;2MASX J04373798-0453148,IRAS 04351-0459,MCG -01-12-040,PGC 015675;;; +NGC1628;G;04:37:36.26;-04:42:53.4;Eri;1.91;0.43;6;14.00;;10.73;9.99;9.69;23.39;Sb;;;;;;;;2MASX J04373626-0442534,IRAS 04351-0448,MCG -01-12-039,PGC 015674;;; +NGC1629;GCl;04:29:36.91;-71:50:17.8;Hyi;1.70;1.70;;13.31;12.68;;;;;;;;;;;;;ESO 055-024;;In the Large Magellanic Cloud.; +NGC1630;G;04:37:15.48;-18:54:05.5;Eri;0.78;0.59;138;15.14;;11.91;11.34;11.03;23.36;S0-a;;;;;;;;2MASX J04371551-1854050,ESO 551-019,ESO-LV 551-0190,PGC 015659;;; +NGC1631;G;04:38:24.17;-20:38:59.5;Eri;1.33;0.89;54;14.30;;11.23;10.51;10.19;23.49;S0-a;;;;;;;;2MASX J04382417-2038594,ESO 551-021,ESO-LV 551-0210,IRAS 04362-2045,MCG -03-12-017,PGC 015705;;; +NGC1632;G;04:39:58.58;-09:27:22.4;Eri;0.73;0.36;43;15.51;;11.77;11.14;10.81;23.38;S0-a;;;;;;0386;;2MASX J04395855-0927223,PGC 015769;;; +NGC1633;G;04:40:09.11;+07:20:58.0;Tau;1.09;0.90;5;14.60;;11.28;10.58;10.33;23.34;SABa;;;;;;;;2MASX J04400910+0720577,IRAS 04374+0715,MCG +01-12-014,PGC 015774,UGC 03125;;; +NGC1634;G;04:40:09.78;+07:20:19.6;Tau;0.67;0.46;167;15.00;;11.41;10.67;10.47;22.95;E;;;;;;;;2MASX J04400977+0720197,MCG +01-12-015,PGC 015775;;; +NGC1635;G;04:40:07.88;-00:32:51.1;Eri;1.53;1.37;175;13.50;;10.31;9.58;9.35;23.04;S0-a;;;;;;;;2MASX J04400788-0032512,IRAS 04375-0038,MCG +00-12-063,PGC 015773,UGC 03126;;; +NGC1636;G;04:40:40.20;-08:36:27.9;Eri;1.24;0.97;175;13.84;;10.86;10.14;9.84;22.98;Sab;;;;;;;;2MASX J04404018-0836281,IRAS 04382-0842,MCG -01-12-042,PGC 015800;;; +NGC1637;G;04:41:28.18;-02:51:28.7;Eri;3.18;2.74;16;11.40;;8.85;8.22;7.97;22.68;Sc;;;;;;;;2MASX J04412822-0251289,IRAS 04389-0257,MCG +00-12-068,PGC 015821,UGCA 093;;Extended HIPASS source; +NGC1638;G;04:41:36.51;-01:48:32.5;Eri;2.08;1.26;67;12.60;;10.07;9.42;9.21;23.43;S0;;;;;;;;2MASX J04413651-0148324,MCG +00-12-069,PGC 015824,UGC 03133;;Confused HIPASS source; +NGC1639;Other;04:40:52.21;-16:59:27.1;Eri;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC1640;G;04:42:14.52;-20:26:05.2;Eri;2.72;2.60;50;12.51;11.72;9.81;9.14;8.90;23.30;Sb;;;;;;;;2MASX J04421453-2026052,ESO 551-027,ESO-LV 551-0270,IRAS 04400-2031,MCG -03-12-018,PGC 015850;;; +NGC1641;OCl;04:35:34.92;-65:45:46.4;Dor;9.60;;;;;;;;;;;;;;;;;ESO 084-024,MWSC 0396;;; +NGC1642;G;04:42:54.91;+00:37:06.9;Ori;1.66;1.43;151;12.90;;10.56;9.89;9.57;23.04;Sc;;;;;;;;2MASX J04425489+0037070,IRAS 04403+0031,MCG +00-12-072,PGC 015867,UGC 03140;;; +NGC1643;G;04:43:43.95;-05:19:10.0;Eri;1.24;0.81;7;14.17;;11.41;10.71;10.47;22.94;SBbc;;;;;;;;2MASX J04434396-0519100,IRAS 04412-0524,MCG -01-13-001,PGC 015891,SDSS J044343.95-051909.9;;; +NGC1644;GCl;04:37:40.09;-66:11:56.7;Dor;1.80;1.50;150;13.52;12.89;;;;;;;;;;;;;2MASX J04373897-6611589,2MASX J04373897-6611589 ID,2MASX J04374008-6611564,ESO 084-030;;One 2MASS source is centered 7 arcsec southwest of the cluster core.; +NGC1645;G;04:44:06.38;-05:27:56.2;Eri;2.18;0.83;89;14.00;;10.60;9.88;9.70;24.41;S0-a;;;;;;;;2MASX J04440640-0527567,MCG -01-13-002,PGC 015903;;; +NGC1646;G;04:44:23.60;-08:31:58.0;Eri;1.49;0.81;155;14.00;;10.30;9.73;9.44;24.21;E-S0;;;;;;;;2MASX J04442354-0831521,PGC 015914;;; +NGC1647;OCl;04:45:55.57;+19:05:42.4;Tau;27.00;;;6.82;6.40;;;;;;;;;;;;;MWSC 0416;;; +NGC1648;G;04:44:34.80;-08:28:43.9;Eri;0.84;0.53;179;16.00;;11.90;11.19;11.02;23.83;S0;;;;;;;;2MASX J04443480-0828432,MCG -01-13-004,PGC 015886,PGC 015920;;CGPG RA (04 41.2) is 1 minute in error.; +NGC1649;GCl;04:38:22.85;-68:40:22.5;Dor;1.50;1.50;0;13.95;13.13;;;;;;;;;;1652;;;ESO 055-032;;In the Large Magellanic Cloud.;Diameters and magnitudes are from SIMBAD’s NGC1652. +NGC1650;G;04:45:11.51;-15:52:12.1;Eri;2.40;1.13;168;14.00;;10.39;9.63;9.38;23.93;E;;;;;;;;2MASX J04451155-1552121,MCG -03-13-001,PGC 015931;;; +NGC1651;GCl;04:37:32.27;-70:35:09.1;Men;2.70;2.70;;12.99;12.28;;;;;;;;;;;;;2MASX J04373231-7035019,ESO 055-030;;The 2MASS position is centered on a superposed field star.; +NGC1652;Dup;04:38:22.85;-68:40:22.5;Dor;;;;;;;;;;;;;;;1649;;;;;; +NGC1653;G;04:45:47.35;-02:23:34.2;Ori;1.79;1.68;175;12.90;;9.92;9.22;8.98;23.06;E;;;;;;;;2MASX J04454736-0223340,MCG +00-13-003,PGC 015942,UGC 03153;;; +NGC1654;G;04:45:48.45;-02:05:02.0;Ori;0.85;0.79;5;14.20;;11.61;10.93;10.73;22.80;SBa;;;;;;;;2MASX J04454844-0205020,IRAS 04433-0210,PGC 015943,UGC 03154;;; +NGC1655;Other;04:47:11.90;+20:55:25.2;Tau;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1656;G;04:45:53.39;-05:08:12.2;Eri;1.74;0.96;109;14.00;;10.63;9.95;9.73;24.23;S0-a;;;;;;;;2MASX J04455340-0508121,MCG -01-13-005,PGC 015949;;; +NGC1657;G;04:46:07.26;-02:04:38.2;Ori;1.15;0.85;154;14.30;;12.59;11.99;11.59;23.70;SABb;;;;;;;;2MASX J04460725-0204381,MCG +00-13-004,PGC 015958,UGC 03156;;; +NGC1658;G;04:44:01.36;-41:27:48.3;Cae;1.02;0.60;125;14.38;;11.31;10.62;10.29;22.69;Sbc;;;;;;;;2MASX J04440136-4127483,ESO 304-016,ESO-LV 304-0160,MCG -07-10-020,PGC 015899;;; +NGC1659;G;04:46:29.95;-04:47:19.6;Eri;1.50;0.94;51;13.00;;10.82;10.14;9.81;22.46;Sbc;;;;;;;;2MASX J04462995-0447193,IRAS 04440-0452,MCG -01-13-006,PGC 015977;;; +NGC1660;G;04:44:11.41;-41:29:51.3;Cae;1.14;0.62;31;14.86;;11.99;11.27;11.02;23.53;Sa;;;;;;;;2MASX J04441142-4129513,ESO 304-018,ESO-LV 304-0180,MCG -07-10-021,PGC 015908;;; +NGC1661;G;04:47:07.64;-02:03:16.5;Ori;1.15;0.82;36;14.30;;11.45;10.89;10.56;23.13;Sbc;;;;;;;;2MASX J04470763-0203166,MCG +00-13-008,PGC 016000,UGC 03166;;; +NGC1662;OCl;04:48:28.95;+10:55:49.4;Ori;13.80;;;7.00;6.40;;;;;;;;;;;;;MWSC 0425;;; +NGC1663;OCl;04:49:23.54;+13:09:03.8;Ori;7.20;;;15.78;14.54;;;;;;;;;;;;;MWSC 0426;;; +NGC1664;OCl;04:51:05.43;+43:40:34.2;Aur;11.40;;;8.02;7.60;;;;;;;;;;;;;MWSC 0430;;; +NGC1665;G;04:48:17.07;-05:25:39.4;Eri;1.79;1.07;56;14.00;;10.24;9.55;9.26;23.85;S0;;;;;;;;2MASX J04481706-0525395,MCG -01-13-009,PGC 016044;;; +NGC1666;G;04:48:32.84;-06:34:11.9;Eri;1.35;1.26;160;13.50;;10.36;9.69;9.44;23.05;S0-a;;;;;;;;2MASX J04483284-0634124,MCG -01-13-010,PGC 016057;;; +NGC1667;G;04:48:37.14;-06:19:11.9;Eri;1.89;1.47;3;13.66;12.86;9.92;9.18;8.90;22.68;SABc;;;;;1689;;;2MASX J04483720-0619114,IRAS 04461-0624,MCG -01-13-013,PGC 016062,SDSS J044837.18-061911.9;;; +NGC1668;G;04:46:05.93;-44:44:00.1;Cae;1.58;1.04;97;13.76;;10.92;10.27;9.97;23.52;E-S0;;;;;;;;2MASX J04460591-4444001,ESO 251-030,ESO-LV 251-0300,MCG -07-10-023,PGC 015957;;; +NGC1669;G;04:42:59.90;-65:48:51.6;Dor;0.73;0.40;101;14.88;;11.70;10.93;10.68;22.74;Sa;;;;;;;;2MASX J04425988-6548517,ESO 084-038,ESO-LV 84-0380,PGC 015871;;; +NGC1670;G;04:49:42.62;-02:45:37.8;Ori;1.61;0.78;68;14.10;;10.97;10.34;10.08;23.85;S0;;;;;;;;2MASX J04494261-0245375,MCG +00-13-016,PGC 016107;;HOLM 081B is a star.; +NGC1671;G;04:49:34.03;+00:15:10.3;Ori;1.34;0.98;127;13.90;;10.47;9.73;9.47;23.27;S0;;;;;;0395;;2MASX J04493401+0015103,MCG +00-13-015,PGC 016095,UGC 03178;;HOLM 080B is a star.; +NGC1672;G;04:45:42.50;-59:14:49.9;Dor;6.14;5.46;95;10.53;9.68;7.90;7.34;7.02;22.93;Sb;;;;;;;;2MASX J04454255-5914506,ESO 118-043,ESO-LV 118-0430,IRAS 04449-5920,PGC 015941;;Incorrectly identified as NGC 1622 in PKSCAT90 (version 1.01).; +NGC1673;OCl;04:42:39.64;-69:49:16.5;Men;1.00;0.95;40;14.52;14.07;;;;;;;;;;;;;ESO 055-034;;In the Large Magellanic Cloud.; +NGC1674;Other;04:52:24.97;+23:54:27.6;Tau;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1675;Other;04:52:24.97;+23:54:27.6;Tau;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1676;OCl;04:43:54.17;-68:49:39.3;Dor;1.10;1.00;40;;;;;;;;;;;;;;;ESO 055-036;;In the Large Magellanic Cloud.; +NGC1677;G;04:50:52.07;-04:53:33.8;Eri;1.21;0.37;140;15.00;;12.24;11.71;11.38;24.06;S0;;;;;;2099;;2MASX J04505207-0453337,IRAS 04484-0458,MCG -01-13-019,PGC 016146;;; +NGC1678;G;04:51:35.44;-02:37:23.3;Ori;1.28;0.78;76;13.50;;10.53;9.82;9.61;23.52;S0;;;;;;;;2MASX J04513544-0237235,MCG +00-13-019,PGC 016179;;; +NGC1679;G;04:49:54.64;-31:57:52.8;Cae;3.07;2.23;151;12.00;;10.66;10.11;9.88;23.54;SBm;;;;;;;;2MASX J04495558-3157558,ESO 422-001,ESO-LV 422-0010,IRAS 04480-3203,MCG -05-12-004,PGC 016120,UGCA 096;;Position is for center of eccentric bar.; +NGC1680;G;04:48:34.01;-47:48:59.2;Pic;1.33;0.54;102;14.45;;11.90;11.27;10.93;23.10;SBbc;;;;;;;;2MASX J04483401-4748592,ESO 203-004,ESO-LV 203-0040,IRAS 04471-4754,PGC 016058;;; +NGC1681;G;04:51:50.06;-05:48:11.6;Eri;1.19;0.95;80;13.50;13.40;11.17;10.51;10.40;22.65;Sb;;;;;;;;2MASX J04515005-0548115,IRAS 04493-0553,MCG -01-13-026,PGC 016195;;; +NGC1682;G;04:52:19.79;-03:06:21.1;Ori;0.98;0.80;120;14.00;;10.89;10.16;9.90;23.23;E-S0;;;;;;;;2MASX J04521977-0306209,MCG -01-13-028,PGC 016211;;; +NGC1683;G;04:52:17.60;-03:01:28.7;Ori;0.86;0.34;163;15.58;;11.86;11.08;10.83;23.78;Sa;;;;;;;;2MASX J04521763-0301279,PGC 016209;;; +NGC1684;G;04:52:31.15;-03:06:21.8;Ori;2.55;1.66;95;13.00;;9.60;8.93;8.69;23.88;E;;;;;;;;2MASX J04523116-0306220,IRAS 04500-0311,MCG -01-13-031,PGC 016219;;; +NGC1685;G;04:52:34.23;-02:56:57.6;Ori;1.23;0.63;131;16.21;15.18;11.08;10.84;10.33;24.07;S0-a;;;;;;;;2MASX J04523430-0256570,IRAS 04500-0301,MCG -01-13-032,PGC 016222;;; +NGC1686;G;04:52:54.66;-15:20:47.3;Eri;1.85;0.35;27;14.00;;11.31;10.58;10.20;23.34;Sbc;;;;;;;;2MASX J04525466-1520472,MCG -03-13-019,PGC 016239;;; +NGC1687;G;04:51:21.37;-33:56:20.5;Cae;1.35;0.53;43;14.73;;12.61;11.93;11.35;23.55;Sab;;;;;;;;2MASX J04512135-3356204,ESO 361-013,ESO-LV 361-0130,MCG -06-11-005,PGC 016166;;; +NGC1688;G;04:48:23.79;-59:48:01.2;Dor;2.47;1.67;166;12.57;;10.56;10.00;9.68;22.47;SBc;;;;;;;;2MASX J04482378-5948011,ESO 119-006,ESO-LV 119-0060,IRAS 04476-5953,PGC 016050;;; +NGC1689;Dup;04:48:37.14;-06:19:11.9;Eri;;;;;;;;;;;;;;;1667;;;;;; +NGC1690;G;04:54:19.26;+01:38:25.3;Ori;1.07;0.90;85;15.00;;11.00;10.39;10.03;23.84;E;;;;;;;;2MASX J04541926+0138253,MCG +00-13-027,PGC 016290,UGC 03198;;; +NGC1691;G;04:54:38.34;+03:16:04.7;Ori;1.54;1.47;30;13.20;;10.26;9.54;9.20;22.78;S0-a;;;;;;;;2MASX J04543832+0316045,IRAS 04520+0311,MCG +01-13-009,PGC 016300,UGC 03201;;; +NGC1692;G;04:55:23.73;-20:34:16.2;Lep;1.38;1.21;173;14.21;14.00;11.00;10.28;9.99;23.48;S0;;;;;;;;2MASX J04552373-2034159,ESO 552-021,ESO-LV 552-0210,MCG -03-13-029,PGC 016336;;; +NGC1693;GCl;04:47:38.77;-69:20:37.1;Dor;1.10;1.00;10;13.15;12.89;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1694;G;04:55:16.82;-04:39:09.6;Eri;1.18;0.73;31;15.00;;11.93;11.27;11.03;23.75;S0-a;;;;;;;;2MASX J04551680-0439098,MCG -01-13-035a,PGC 016335;;MCG RA is +0.5 minutes off.; +NGC1695;GCl;04:47:44.48;-69:22:25.5;Dor;1.40;1.30;100;12.50;12.16;;;;;;;;;;;;;ESO 056-003;;In the Large Magellanic Cloud.; +NGC1696;OCl;04:48:29.97;-68:14:34.3;Dor;1.10;1.10;;14.44;13.95;;;;;;;;;;;;;ESO 056-004;;In the Large Magellanic Cloud.; +NGC1697;GCl;04:48:35.81;-68:33:30.4;Dor;2.30;2.30;;13.15;12.62;;;;;;;;;;;;;2MASX J04483574-6833304,ESO 056-005;;In the Large Magellanic Cloud.; +NGC1698;GCl;04:49:05.05;-69:06:54.3;Dor;1.50;1.40;70;12.24;12.07;;;;;;;;;;;;;2MASX J04490504-6906546,ESO 056-006;;In the Large Magellanic Cloud.; +NGC1699;G;04:56:59.63;-04:45:24.7;Eri;1.03;0.74;166;15.00;;11.49;10.95;10.63;;Sb;;;;;;;;2MASX J04565963-0445246,MCG -01-13-039,PGC 016390,SDSS J045659.63-044524.7;;; +NGC1700;G;04:56:56.31;-04:51:56.8;Eri;3.11;1.98;87;12.00;;9.02;8.33;8.09;23.34;E;;;;;;;;2MASX J04565634-0451566,MCG -01-13-038,PGC 016386;;; +NGC1701;G;04:55:51.13;-29:53:00.4;Cae;1.24;0.94;136;13.63;;10.83;10.14;9.89;22.65;Sb;;;;;;;;2MASX J04555112-2953002,ESO 422-011,ESO-LV 422-0110,IRAS 04539-2957,MCG -05-12-010,PGC 016352;;; +NGC1702;OCl;04:49:27.68;-69:51:02.8;Men;1.20;1.20;;12.68;12.50;;;;;;;;;;;;;ESO 056-008;;In the Large Magellanic Cloud.; +NGC1703;G;04:52:52.15;-59:44:32.1;Dor;2.68;2.51;25;12.31;;9.72;9.14;8.83;22.85;SBb;;;;;;;;2MASX J04525214-5944319,ESO 119-019,ESO-LV 119-0190,IRAS 04521-5949,PGC 016234;;; +NGC1704;OCl;04:49:55.46;-69:45:22.7;Dor;1.70;1.60;70;11.78;11.50;;;;;;;;;;;;;ESO 056-009;;In the Large Magellanic Cloud.; +NGC1705;G;04:54:13.50;-53:21:39.8;Pic;1.87;1.44;53;12.96;12.56;11.21;10.76;10.53;22.89;E-S0;;;;;;;;2MASX J04541350-5321398,ESO 158-013,ESO-LV 158-0130,IRAS 04531-5326,PGC 016282;;; +NGC1706;G;04:52:31.02;-62:59:08.8;Dor;1.43;0.97;129;13.97;;10.90;10.29;10.03;22.84;Sab;;;;;;;;2MASX J04523101-6259089,ESO 085-007,ESO-LV 85-0070,PGC 016220;;; +NGC1707;Other;04:58:20.61;+08:14:18.1;Ori;;;;;;;;;;;;;;;;2107;;;;Four Galactic stars.; +NGC1708;OCl;05:03:21.88;+52:49:55.5;Cam;6.00;;;;;;;;;;;;;;;;;MWSC 0458;;; +NGC1709;G;04:58:44.03;-00:28:41.7;Ori;0.93;0.69;46;15.60;;11.39;10.63;10.38;23.59;S0;;;;;;;;2MASX J04584400-0028418,MCG +00-13-054,PGC 016462;;; +NGC1710;G;04:57:17.07;-15:17:20.4;Lep;1.61;1.26;19;14.00;;10.25;9.54;9.21;24.00;E-S0;;;;;;2108;;2MASX J04571707-1517204,MCG -03-13-037,PGC 016396;;; +NGC1711;GCl;04:50:36.13;-69:59:07.6;Men;3.50;3.30;40;11.22;11.10;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1712;*Ass;04:50:58.43;-69:24:27.0;Dor;4.00;3.00;20;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1713;G;04:58:54.61;-00:29:20.1;Ori;1.33;1.10;40;13.88;;10.11;9.41;9.13;23.36;E;;;;;;;;2MASX J04585460-0029199,MCG +00-13-056,PGC 016471,UGC 03222;;; +NGC1714;Cl+N;04:52:08.85;-66:55:24.2;Dor;1.10;1.10;;11.51;11.61;;;;;;;;;;;;;2MASX J04520886-6655238,ESO 085-008,IRAS 04520-6700;;Open cluster involved. In LMC.; +NGC1715;EmN;04:52:10.48;-66:54:31.3;Dor;1.10;1.00;130;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1716;G;04:58:13.32;-20:21:48.9;Lep;1.32;1.12;20;13.93;;11.18;10.54;10.12;23.15;Sbc;;;;;;;;2MASX J04581333-2021487,ESO 552-034,ESO-LV 552-0340,IRAS 04560-2026,MCG -03-13-038,PGC 016434;;; +NGC1717;*;04:59:19.35;-00:13:43.5;Ori;;;;;;;;;;;;;;;;;;;;Identification as NGC 1717 is very uncertain.;In SIMBAD NGC 1717 is UCAC2 31626222. +NGC1718;OCl;04:52:25.39;-67:03:02.4;Dor;1.80;1.80;;13.01;12.25;;;;;;;;;;;;;ESO 085-010;;In the Large Magellanic Cloud.; +NGC1719;G;04:59:34.63;-00:15:37.5;Ori;1.09;0.38;101;14.50;;10.64;9.96;9.72;22.91;Sa;;;;;;;;2MASX J04593465-0015374,MCG +00-13-060,PGC 016501,UGC 03226;;HOLM 083B is a star.; +NGC1720;G;04:59:20.63;-07:51:32.3;Eri;1.96;1.22;85;13.00;;10.20;9.49;9.09;;SBab;;;;;;;;2MASX J04592064-0751321,IRAS 04569-0756,MCG -01-13-041,PGC 016485;;; +NGC1721;G;04:59:17.40;-11:07:07.4;Eri;1.58;0.83;130;13.00;;10.21;9.54;9.29;23.52;S0;;;;;;;;2MASX J04591738-1107071,IRAS 04569-1111,MCG -02-13-027,PGC 016484;;; +NGC1722;Cl+N;04:52:00.60;-69:22:30.0;Dor;2.50;2.10;170;;;;;;;;;;;;;;;;;Within boundaries of LMC; +NGC1723;G;04:59:25.89;-10:58:50.5;Eri;3.03;1.88;68;12.50;;9.98;9.24;8.97;;Sa;;;;;;;;2MASX J04592589-1058504,IRAS 04571-1103,MCG -02-13-029,PGC 016493,TYC 5326-1591-1;;; +NGC1724;OCl;05:03:32.32;+49:29:30.4;Aur;3.00;;;;;;;;;;;;;;;;;MWSC 0459;;; +NGC1725;G;04:59:22.89;-11:07:56.3;Eri;1.39;1.30;15;13.00;;10.35;9.66;9.39;23.29;E-S0;;;;;;;;2MASX J04592288-1107561,MCG -02-13-028,PGC 016488;;; +NGC1726;G;04:59:41.90;-07:45:18.9;Eri;2.90;1.82;1;13.00;;9.52;8.85;8.61;23.71;S0;;;;;;;;2MASX J04594189-0745185,MCG -01-13-042,PGC 016508;;; +NGC1727;Cl+N;04:52:12.77;-69:20:20.1;Dor;2.80;2.00;90;;;;;;;;;;;;;;;;;Nebulosity involved.; +NGC1728;G;04:59:27.73;-11:07:22.6;Eri;1.24;0.80;179;13.00;;10.23;9.52;9.21;;Sa;;;;;;;;2MASX J04592771-1107224,MCG -02-13-030,PGC 016495;;; +NGC1729;G;05:00:15.69;-03:21:09.0;Ori;1.81;1.46;9;13.20;;11.05;10.45;10.02;;Sc;;;;;;;;2MASX J05001569-0321088,IRAS 04577-0325,MCG -01-13-043,PGC 016529;;; +NGC1730;G;04:59:31.83;-15:49:25.1;Lep;2.28;0.96;100;13.00;;9.86;9.21;9.01;23.34;Sa;;;;;;2113;;2MASX J04593187-1549252,MCG -03-13-043,PGC 016499;;; +NGC1731;*Ass;04:53:32.09;-66:55:31.0;Dor;4.80;4.50;90;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1732;OCl;04:53:10.59;-68:39:00.0;Dor;1.10;1.00;50;12.44;12.30;;;;;;;;;;;;;ESO 056-017;;In the Large Magellanic Cloud.; +NGC1733;OCl;04:54:04.75;-66:40:57.3;Dor;1.50;1.40;20;13.66;13.31;;;;;;;;;;;;;ESO 085-013;;In the Large Magellanic Cloud.; +NGC1734;OCl;04:53:33.49;-68:46:07.6;Dor;1.20;1.10;50;13.32;13.10;;;;;;;;;;;;;ESO 056-018;;In the Large Magellanic Cloud.; +NGC1735;OCl;04:54:19.66;-67:05:58.4;Dor;1.80;1.50;140;10.88;10.76;;;;;;;;;;;;;ESO 085-015;;In the Large Magellanic Cloud.; +NGC1736;EmN;04:53:01.55;-68:03:11.2;Dor;1.90;1.40;170;15.50;;13.01;13.11;12.24;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1737;HII;04:53:59.71;-69:10:28.4;Dor;1.10;0.95;110;;;;;;;;;;;;;;;2MASX J04535969-6910281,ESO 056-020;;In large complex in the Large Magellanic Cloud.; +NGC1738;G;05:01:46.70;-18:09:25.4;Lep;1.35;0.81;36;13.70;;11.39;10.81;10.48;22.70;SBbc;;;;;;;;2MASX J05014670-1809252,ESO 552-049,ESO-LV 552-0490,IRAS 04595-1813,MCG -03-13-054,PGC 016585;;; +NGC1739;G;05:01:47.34;-18:10:00.5;Lep;1.50;0.72;104;14.24;;12.73;12.18;11.84;23.23;SBbc;;;;;;;;2MASX J05014733-1810002,ESO 552-050,ESO-LV 552-0500,MCG -03-13-055,PGC 016586;;; +NGC1740;G;05:01:54.80;-03:17:46.8;Ori;1.79;1.10;68;15.00;;10.58;9.90;9.68;23.87;E-S0;;;;;;;;2MASX J05015482-0317464,MCG -01-13-046,PGC 016589;;; +NGC1741;G;05:01:38.30;-04:15:25.2;Eri;1.21;0.62;65;13.70;;;;;24.08;Sm;;;;;;;;IRAS 04591-0419,MCG -01-13-045,PGC 016574;;Hickson (1982:Ap.J. 255,382) lists declination as -01d19m42s.; +NGC1741B;G;05:01:36.2;-04:15:43;Eri;0.93;0.46;42;15.35;;13.91;13.57;13.46;23.19;Scd;;;;;;;;2MASX J05013555-0415474,MCG -01-13-045 NED01,PGC 016570;;; +NGC1742;*;05:01:59.33;-03:17:41.9;Ori;;;;;;;;;;;;;;;;;;;;; +NGC1743;Neb;04:54:02.67;-69:11:55.0;Dor;0.95;0.85;130;;11.26;;;;;;;;;;;;;ESO 056-021;;In the Large Magellanic Cloud.; +NGC1744;G;04:59:57.80;-26:01:20.0;Lep;5.28;1.99;169;11.90;11.41;10.52;9.98;9.78;23.23;SBcd;;;;;;;;2MASX J04595780-2601199,ESO 486-005,ESO-LV 486-0050,IRAS 04579-2605,MCG -04-12-029,PGC 016517;;Extended HIPASS source; +NGC1745;Neb;04:54:20.62;-69:09:32.0;Dor;1.20;1.10;90;;13.40;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1746;OCl;05:03:50.19;+23:46:03.5;Tau;18.00;;;;6.10;;;;;;;;;;;;;;;; +NGC1747;OCl;04:55:10.98;-67:10:08.0;Dor;4.40;4.40;;9.41;9.37;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1748;Neb;04:54:25.97;-69:11:02.8;Dor;0.90;0.80;100;12.75;12.30;;;;;;;;;;;2114;;ESO 056-024,IRAS 04546-6915;;In large complex in the Large Magellanic Cloud.; +NGC1749;OCl;04:54:56.06;-68:11:19.2;Dor;1.50;1.30;50;13.59;13.56;;;;;;;;;;;;;ESO 056-026;;In the Large Magellanic Cloud.; +NGC1750;OCl;05:04:00.03;+23:38:44.8;Tau;;;;;;;;;;;;;;;;;;;;; +NGC1751;GCl;04:54:12.58;-69:48:21.0;Dor;1.60;1.50;60;15.06;11.73;;;;;;;;;;;;;2MASX J04541252-6948211,ESO 056-023;;In the Large Magellanic Cloud.; +NGC1752;G;05:02:09.49;-08:14:27.1;Eri;2.95;0.83;79;13.00;;10.02;9.29;9.00;23.36;Sc;;;;;;;;2MASX J05020948-0814261,IRAS 04597-0818,MCG -01-13-047,PGC 016600;;; +NGC1753;G;05:02:32.34;-03:20:39.6;Ori;1.32;0.42;180;15.50;;11.87;11.15;10.96;23.57;SBa;;;;;;;;2MASX J05023235-0320394,MCG -01-13-048,PGC 016610;;; +NGC1754;GCl;04:54:18.95;-70:26:32.9;Men;1.60;1.60;;12.32;11.57;;;;;;;;;;;;;2MASX J04541898-7026330,ESO 056-025;;The 2MASS data include a nearby field star.; +NGC1755;GCl;04:55:14.87;-68:12:14.6;Dor;2.20;1.90;130;10.00;9.85;;;;;;;;;;;;;ESO 056-028;;In the Large Magellanic Cloud.; +NGC1756;GCl;04:54:49.83;-69:14:15.5;Dor;1.40;1.30;130;12.64;12.24;;;;;;;;;;;;;ESO 056-027;;In the Large Magellanic Cloud.; +NGC1757;Other;05:02:39.36;-04:43:22.6;Eri;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1758;OCl;05:04:42.24;+23:46:53.9;Tau;;;;;;;;;;;;;;;;;;;;; +NGC1759;G;05:00:49.04;-38:40:26.0;Cae;1.95;1.48;148;14.11;;11.37;10.60;10.50;24.38;E;;;;;;;;2MASX J05004903-3840259,ESO 305-001,ESO-LV 305-0010,MCG -06-12-001,PGC 016545;;; +NGC1760;HII;04:56:44.37;-66:31:38.4;Dor;5.10;2.10;80;;;;;;;;;;;;;;;ESO 085-019;;In the Large Magellanic Cloud.; +NGC1761;*Ass;04:56:37.73;-66:28:43.9;Dor;4.20;3.00;110;;9.94;;;;;;;;;;;;;ESO 085-018;;In the Large Magellanic Cloud.; +NGC1762;G;05:03:37.03;+01:34:24.0;Ori;1.75;1.12;177;13.50;;10.49;9.80;9.52;22.93;Sc;;;;;;;;2MASX J05033701+0134239,IRAS 05010+0130,MCG +00-13-067,PGC 016654,UGC 03238;;; +NGC1763;Cl+N;04:56:49.19;-66:24:32.7;Dor;5.20;3.60;70;;9.40;;;;;;;;;;;;;;;"Stars involved; in the Large Magellanic Cloud."; +NGC1764;OCl;04:56:27.72;-67:41:37.5;Dor;1.10;1.10;;12.92;12.58;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1765;G;04:58:24.16;-62:01:42.2;Dor;1.18;0.96;129;13.94;;10.53;9.84;9.55;23.18;E;;;;;;;;2MASX J04582416-6201423,ESO 119-024,ESO-LV 119-0240,PGC 016444;;; +NGC1766;OCl;04:55:57.60;-70:13:30.2;Men;1.00;0.90;30;12.33;12.22;;;;;;;;;;;;;ESO 056-029;;In the Large Magellanic Cloud.; +NGC1767;OCl;04:56:27.30;-69:24:02.0;Dor;1.30;1.20;30;10.85;10.61;;;;;;;;;;;;;;;Nebulosity involved.; +NGC1768;OCl;04:57:00.16;-68:14:58.0;Dor;0.65;0.55;50;13.51;12.79;;;;;;;;;;;;;ESO 056-032;;In the Large Magellanic Cloud.; +NGC1769;EmN;04:57:47.37;-66:28:08.7;Dor;4.10;2.60;60;;;;;;;;;;;;;;;ESO 085-023;;In the Large Magellanic Cloud.; +NGC1770;Cl+N;04:57:15.71;-68:25:05.1;Dor;4.10;4.10;;;;;;;;;;;;;;;;;;Nebulosity involved.; +NGC1771;G;04:58:55.72;-63:17:53.6;Dor;1.95;0.59;134;14.32;;11.52;10.77;10.57;23.40;SABc;;;;;;;;2MASX J04585573-6317537,ESO 085-027,ESO-LV 85-0270,IRAS 04585-6322,PGC 016472;;; +NGC1772;OCl;04:56:52.79;-69:33:21.8;Dor;1.50;1.40;30;11.22;10.97;;;;;;;;;;;;;ESO 056-033;;In the Large Magellanic Cloud.; +NGC1773;Neb;04:58:12.03;-66:21:36.4;Dor;2.70;2.10;30;;;;;;;;;;;;;;;2MASX J04581196-6622139,IRAS 04580-6626;;The 2MASS position refers to a knot southwest of the center.; +NGC1774;OCl;04:58:06.88;-67:14:32.4;Dor;1.70;1.50;60;10.96;10.76;;;;;;;;;;;;;ESO 085-026;;In the Large Magellanic Cloud.; +NGC1775;OCl;04:56:54.78;-70:25:55.2;Men;1.00;0.90;80;12.90;12.55;;;;;;;;;;;;;2MASX J04565472-7025551,2MASX J04565472-7025551 ID,ESO 056-034;;In the Large Magellanic Cloud.; +NGC1776;OCl;04:58:39.72;-66:25:46.5;Dor;1.30;1.20;40;13.28;13.01;;;;;;;;;;;;;ESO 085-028;;In the Large Magellanic Cloud.; +NGC1777;GCl;04:55:47.66;-74:17:07.3;Men;2.40;2.40;;13.40;12.80;;;;;;;;;;;;;ESO 033-001;;In the Large Magellanic Cloud.; +NGC1778;OCl;05:08:05.70;+37:01:22.2;Aur;4.50;;;8.20;7.70;;;;;;;;;;;;;MWSC 0472;;; +NGC1779;G;05:05:18.07;-09:08:49.7;Eri;2.67;1.19;112;13.18;;9.75;9.05;8.77;23.75;S0-a;;;;;;;;2MASX J05051802-0908500,IRAS 05029-0912,MCG -02-13-041,PGC 016713;;; +NGC1780;G;05:06:20.71;-19:28:00.0;Lep;0.92;0.53;86;14.73;;11.65;10.98;10.69;23.28;S0;;;;;;;;2MASX J05062069-1928001,ESO 552-071,ESO 553-001,ESO-LV 553-0010,MCG -03-13-070,PGC 016743;;Missing ESO entry '552- G 71' would have pointed to this galaxy.; +NGC1781;G;05:07:55.03;-18:11:23.7;Lep;1.27;1.10;76;13.71;;10.53;9.81;9.49;23.01;S0;;;;;1794;;;2MASX J05075502-1811237,ESO 553-007,ESO-LV 553-0070,IRAS 05057-1815,MCG -03-14-002,PGC 016788;;; +NGC1782;OCl;04:57:51.09;-69:23:31.9;Dor;1.20;1.10;110;10.75;10.50;;;;;;;;;;;;;ESO 056-036;;In the Large Magellanic Cloud.; +NGC1783;GCl;04:59:08.81;-65:59:14.2;Dor;5.30;4.70;60;10.90;10.93;;;;;;;;;;;;;2MASX J04590938-6559168,ESO 085-029;;In the Large Magellanic Cloud.; +NGC1784;G;05:05:27.10;-11:52:17.5;Lep;4.00;1.79;96;11.40;;9.51;8.85;8.52;23.54;Sc;;;;;;;;2MASX J05052711-1152171,IRAS 05030-1156,MCG -02-13-042,PGC 016716;;; +NGC1785;*Ass;04:58:44.96;-68:49:29.5;Dor;2.00;1.20;130;;;;;;;;;;;;;;;;;Chain of 5 to 10 stars superposed on the Large Magellanic Cloud.; +NGC1786;GCl;04:59:07.82;-67:44:42.8;Dor;2.00;2.00;;10.10;;;;;;;;;;;;;;ESO 056-039;;In the Large Magellanic Cloud.; +NGC1787;OCl;05:01:44.41;-65:49:23.9;Dor;24.00;14.00;140;11.09;10.92;;;;;;;;;;;;;2MASX J05014436-6549242,2MASX J05014436-6549242 ID,ESO 085-031;;In the Large Magellanic Cloud.; +NGC1788;RfN;05:06:53.22;-03:20:27.5;Ori;2.00;2.00;;5.80;;;;;;;;;;;;;;IRAS 05044-0325,LBN 916;;Identified as IR cirrus by Strauss, et al (1992, ApJS, 83, 29).; +NGC1789;GCl;04:57:51.68;-71:54:07.1;Men;1.80;1.80;;13.56;13.06;;;;;;;;;;;;;2MASX J04575165-7154070,ESO 056-037;;In the Large Magellanic Cloud.; +NGC1790;OCl;05:10:56.22;+52:03:35.3;Aur;;;;;;;;;;;;;;;;;;;;; +NGC1791;OCl;04:59:06.48;-70:10:07.5;Men;1.20;1.00;30;13.45;13.12;;;;;;;;;;;;;ESO 056-041;;In the Large Magellanic Cloud.; +NGC1792;G;05:05:14.45;-37:58:50.7;Col;5.52;2.76;136;10.68;10.18;7.93;7.28;7.01;22.68;Sbc;;;;;;;;2MASX J05051445-3758507,ESO 305-000,ESO 305-006,ESO-LV 305-0060,IRAS 05035-3802,PGC 016709;;; +NGC1793;OCl;04:59:38.21;-69:33:27.5;Dor;1.30;1.10;130;12.69;12.41;;;;;;;;;;;;;ESO 056-043;;In the Large Magellanic Cloud.; +NGC1794;Dup;05:07:55.03;-18:11:23.7;Lep;;;;;;;;;;;;;;;1781;;;;;; +NGC1795;OCl;04:59:46.90;-69:48:04.2;Dor;1.40;1.30;170;13.15;12.42;;;;;;;;;;;;;ESO 056-044;;In the Large Magellanic Cloud.; +NGC1796;G;05:02:42.55;-61:08:24.2;Dor;1.93;0.96;101;13.01;12.48;10.60;9.98;9.70;22.44;SBc;;;;;;;;2MASX J05024255-6108242,ESO 119-030,ESO-LV 119-0300,IRAS 05021-6112,PGC 016617;;; +NGC1796A;G;05:05:03.0;-61:29:04;Dor;1.28;0.50;151;14.87;;11.82;11.18;10.85;23.61;Sab;;;;;;;;2MASX J05050301-6129039,ESO 119-035,ESO-LV 119-0350,PGC 016698;;Declinations for NGC 1796A and NGC 1796B interchanged in RC1 and RC2.; +NGC1796B;G;05:07:54.9;-61:11:28;Dor;1.12;0.25;25;15.76;;11.96;11.20;10.93;23.65;Sbc;;;;;;;;ESO 119-037,ESO-LV 119-0370,IRAS 05073-6115,PGC 016787;;Declinations for NGC 1796A and NGC 1796B interchanged in RC1 and RC2.; +NGC1797;G;05:07:44.88;-08:01:08.7;Eri;1.19;0.77;60;15.50;;;;;23.32;SBa;;;;;;;;2MASX J05074488-0801085,IRAS 05053-0805,MCG -01-14-002,PGC 016781;;; +NGC1798;OCl;05:11:39.32;+47:41:43.8;Aur;5.40;;;;;;;;;;;;;;;;;MWSC 0483;;; +NGC1799;G;05:07:44.62;-07:58:09.4;Eri;1.25;0.57;105;15.00;;11.47;10.81;10.51;;S0;;;;;;;;2MASX J05074461-0758095,MCG -01-14-001,PGC 016783;;; +NGC1800;G;05:06:25.72;-31:57:15.2;Col;1.55;1.16;112;13.19;12.70;11.13;10.53;10.21;22.55;S?;;;;;;;;2MASX J05062573-3157152,ESO 422-030,ESO-LV 422-0300,IRAS 05045-3201,MCG -05-13-005,PGC 016745;;; +NGC1801;GCl;05:00:34.51;-69:36:49.5;Dor;2.20;1.90;160;12.43;12.16;;;;;;;;;;;;;ESO 056-045;;In the Large Magellanic Cloud.; +NGC1802;OCl;05:10:12.87;+24:07:30.5;Tau;4.80;;;;;;;;;;;;;;;;;MWSC 0478;;; +NGC1803;G;05:05:26.58;-49:34:04.6;Pic;0.93;0.58;61;13.51;;;;;21.62;SBbc;;;;;;;;ESO 203-018,ESO-LV 203-0180,IRAS 05041-4938,PGC 016715;;; +NGC1804;OCl;05:01:03.26;-69:04:57.3;Dor;0.95;0.85;170;12.02;11.87;;;;;;;;;;;;;ESO 056-046;;In the Large Magellanic Cloud.; +NGC1805;GCl;05:02:21.32;-66:06:44.1;Dor;1.80;1.60;80;;;;;;;;;;;;;;;ESO 085-032;;In the Large Magellanic Cloud.; +NGC1806;GCl;05:02:12.37;-67:59:08.7;Dor;2.50;2.50;;11.10;;;;;;;;;;;;;;2MASX J05021187-6759090,ESO 056-047;;In the Large Magellanic Cloud.; +NGC1807;OCl;05:10:45.03;+16:30:45.9;Tau;5.40;;;7.86;7.00;;;;;;;;;;;;;MWSC 0479;;; +NGC1808;G;05:07:42.34;-37:30:47.0;Col;5.42;1.83;135;10.80;9.94;7.64;6.98;6.66;22.74;Sa;;;;;;;;2MASX J05074234-3730469,ESO 305-008,ESO-LV 305-0080,IRAS 05059-3734,MCG -06-12-005,PGC 016779;;Extended HIPASS source; +NGC1809;G;05:02:05.01;-69:34:05.8;Dor;3.74;1.44;143;12.10;;10.28;9.63;9.35;24.02;Sc;;;;;;;;2MASX J05020500-6934058,ESO 056-048,ESO-LV 56-0480,PGC 016599;;; +NGC1810;OCl;05:03:23.27;-66:22:54.5;Dor;1.20;1.10;30;12.12;11.90;;;;;;;;;;;;;ESO 085-035;;In the Large Magellanic Cloud.; +NGC1811;G;05:08:42.74;-29:16:33.5;Col;1.73;0.42;60;14.46;;11.19;10.48;10.17;23.75;Sa;;;;;;;;2MASX J05084275-2916336,ESO 422-037,ESO-LV 422-0370,MCG -05-13-008,PGC 016811;;; +NGC1812;G;05:08:52.91;-29:15:04.5;Col;1.27;0.86;7;13.64;;10.68;10.06;9.74;22.77;Sa;;;;;;;;2MASX J05085291-2915046,ESO 422-039,ESO-LV 422-0390,IRAS 05068-2918,MCG -05-13-009,PGC 016819;;; +NGC1813;OCl;05:02:40.28;-70:19:04.6;Men;0.95;0.90;140;13.14;12.76;;;;;;;;;;;;;ESO 056-050;;In the Large Magellanic Cloud.; +NGC1814;Cl+N;05:03:46.46;-67:18:02.4;Dor;1.20;1.10;10;;12.76;;;;;;;;;;;;;ESO 085-036;;Nebulostiy involved.; +NGC1815;OCl;05:02:27.25;-70:37:15.8;Men;1.20;1.00;60;12.43;12.41;;;;;;;;;;;;;ESO 056-049;;In the Large Magellanic Cloud.; +NGC1816;OCl;05:03:50.75;-67:15:38.7;Dor;0.90;0.75;0;;13.02;;;;;;;;;;;;;ESO 085-037;;In the Large Magellanic Cloud.; +NGC1817;OCl;05:12:26.27;+16:41:02.7;Tau;9.30;;;8.44;7.70;;;;;;;;;;;;;MWSC 0484;;; +NGC1818;GCl;05:04:14.76;-66:26:04.2;Dor;3.10;2.70;130;9.70;;;;;;;;;;;;;;ESO 085-040;;In the Large Magellanic Cloud.; +NGC1819;G;05:11:46.14;+05:12:02.2;Ori;1.53;1.05;117;13.70;;10.31;9.54;9.23;23.34;S0;;;;;;;;2MASX J05114614+0512022,IRAS 05091+0508,MCG +01-14-002,PGC 016899,UGC 03265;;; +NGC1820;OCl;05:04:01.68;-67:15:57.4;Dor;7.00;5.40;20;;11.50;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1821;G;05:11:46.10;-15:08:04.7;Lep;1.26;0.86;95;13.90;;11.63;11.03;10.76;22.82;I;;;;;;;;2MASX J05114610-1508049,IRAS 05095-1511,MCG -03-14-007,PGC 016898;;; +NGC1822;OCl;05:05:09.20;-66:12:38.0;Dor;1.20;1.00;100;13.24;13.15;;;;;;;;;;;;;ESO 085-042;;In the Large Magellanic Cloud.; +NGC1823;OCl;05:03:24.96;-70:20:07.8;Men;1.00;0.90;10;;12.09;;;;;;;;;;;;;ESO 056-051;;In the Large Magellanic Cloud.; +NGC1824;G;05:06:56.20;-59:43:26.3;Dor;2.14;0.83;164;13.17;;;;;22.57;SBm;;;;;;;;2MASX J05065689-5943368,ESO 119-036,ESO-LV 119-0360,IRAS 05061-5947,PGC 016761;;; +NGC1825;OCl;05:04:19.04;-68:55:35.1;Dor;1.00;0.90;40;12.45;12.04;;;;;;;;;;;;;ESO 056-053;;In the Large Magellanic Cloud.; +NGC1826;OCl;05:05:33.29;-66:13:47.1;Dor;1.20;1.10;60;13.78;13.25;;;;;;;;;;;;;2MASX J05053390-6613428,ESO 085-043;;In the Large Magellanic Cloud.; +NGC1827;G;05:10:04.60;-36:57:36.9;Col;3.24;0.65;120;13.26;;11.13;10.51;10.34;23.21;Sc;;;;;;;;2MASX J05100458-3657368,ESO 362-006,ESO-LV 362-0060,IRAS 05083-3701,MCG -06-12-008,PGC 016849;;; +NGC1828;OCl;05:04:20.88;-69:23:17.4;Dor;1.20;1.10;170;12.65;12.52;;;;;;;;;;;;;ESO 056-054;;In the Large Magellanic Cloud.; +NGC1829;Cl+N;05:05:00.00;-68:03:33.3;Dor;1.80;1.60;20;;;;;;;;;;;;;;;;;Nebulosity involved.; +NGC1830;OCl;05:04:38.27;-69:20:24.6;Dor;1.30;1.20;60;12.75;12.56;;;;;;;;;;;;;ESO 056-056;;In the Large Magellanic Cloud.; +NGC1831;GCl;05:06:16.72;-64:55:03.0;Dor;3.80;3.20;170;11.52;11.18;;;;;;;;;;;;;2MASX J05061671-6455031,ESO 085-044;;In the Large Magellanic Cloud.; +NGC1832;G;05:12:03.33;-15:41:16.1;Lep;2.46;0.94;13;12.20;;9.29;8.63;8.39;21.60;Sbc;;;;;;;;2MASX J05120333-1541160,IRAS 05098-1544,MCG -03-14-010,PGC 016906;;Confused HIPASS source; +NGC1833;Cl+N;05:04:24.51;-70:43:41.0;Men;1.60;1.10;60;;;;;;;;;;;;;;;2MASX J05042444-7043409,2MASX J05042444-7043409 ID,ESO 056-055,IRAS 05049-7047;;Nebulosity involved.; +NGC1834;OCl;05:05:11.38;-69:12:26.9;Dor;0.95;0.85;100;11.82;;;;;;;;;;;;;;ESO 056-060;;In the Large Magellanic Cloud.; +NGC1835;GCl;05:05:06.58;-69:24:13.9;Dor;2.30;2.00;80;11.31;10.60;;;;;;;;;;;;;ESO 056-058;;In the Large Magellanic Cloud.; +NGC1836;OCl;05:05:34.42;-68:37:40.4;Dor;1.50;1.40;50;12.50;12.22;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1837;OCl;05:04:55.80;-70:42:50.4;Men;1.90;1.50;10;12.27;12.27;12.26;12.30;12.29;;;;;;;;;;TYC 9165-548-1,UCAC2 1446411;;In the Large Magellanic Cloud.; +NGC1838;OCl;05:06:07.88;-68:26:42.7;Dor;1.30;1.20;20;13.20;12.93;;;;;;;;;;;;;ESO 056-064;;In the Large Magellanic Cloud.; +NGC1839;OCl;05:06:02.35;-68:37:36.4;Dor;1.60;1.60;;11.90;11.80;;;;;;;;;;;;;ESO 056-063,IRAS 05061-6841;;In the Large Magellanic Cloud.; +NGC1840;OCl;05:05:19.16;-71:45:46.4;Men;0.80;0.70;80;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1841;GCl;04:45:23.35;-83:59:56.6;Men;4.00;4.00;;12.23;11.43;;;;;;;;;;;;;2MASX J04452654-8359569,ESO 004-015;;The 2MASS position is for a star 10 arcsec east of the core.; +NGC1842;OCl;05:07:18.10;-67:16:23.4;Dor;1.50;1.50;;14.33;14.02;;;;;;;;;;;;;ESO 085-046;;In the Large Magellanic Cloud.; +NGC1843;G;05:14:06.02;-10:37:37.3;Ori;1.80;1.42;123;12.80;;10.57;10.00;9.71;23.09;SABc;;;;;;;;2MASX J05140614-1037366,IRAS 05117-1041,MCG -02-14-008,PGC 016949,UGCA 107;;; +NGC1844;OCl;05:07:30.68;-67:19:24.3;Dor;1.60;1.60;;12.29;12.08;;;;;;;;;;;;;ESO 085-048;;In the Large Magellanic Cloud.; +NGC1845;*Ass;05:05:45.01;-70:34:53.8;Men;8.90;5.60;30;10.31;10.20;;;;;;;;;;;;;;;Superposed on the LMC.; +NGC1846;GCl;05:07:33.94;-67:27:41.3;Dor;3.80;3.80;;12.08;11.31;;;;;;;;;;;;;2MASX J05073439-6727069,ESO 056-067;;In the Large Magellanic Cloud.; +NGC1847;OCl;05:07:08.16;-68:58:17.2;Dor;1.80;1.60;0;12.51;12.47;;;;;;;;;;;;;ESO 056-066;;In the Large Magellanic Cloud.; +NGC1848;OCl;05:07:27.16;-71:11:43.3;Men;2.20;2.00;140;9.78;9.73;;;;;;;;;;;;;ESO 056-068;;In the Large Magellanic Cloud.; +NGC1849;OCl;05:09:34.81;-66:18:56.9;Dor;1.50;1.50;;13.08;12.77;;;;;;;;;;;;;ESO 085-049;;In the Large Magellanic Cloud.; +NGC1850;GCl;05:08:44.73;-68:45:42.0;Dor;3.00;3.00;;8.84;8.96;;;;;;;;;;;;;ESO 056-070;;Globular cluster in the Large Magellanic Cloud.; +NGC1851;GCl;05:14:06.73;-40:02:47.8;Col;9.00;;;8.80;7.23;;;;;;;;;;;;;C 073,MWSC 0489;;; +NGC1852;GCl;05:09:23.79;-67:46:34.5;Dor;1.90;1.90;;12.74;12.01;;;;;;;;;;;;;2MASX J05092377-6746342,ESO 056-071;;In the Large Magellanic Cloud.; +NGC1853;G;05:12:16.52;-57:23:56.5;Dor;1.53;0.52;39;13.58;;11.18;10.82;10.39;22.47;SBcd;;;;;;;;2MASX J05121653-5723565,ESO 158-022,ESO-LV 158-0220,IRAS 05114-5727,PGC 016911;;; +NGC1854;GCl;05:09:19.89;-68:50:50.5;Dor;2.30;2.30;;10.18;10.39;;;;;;;;;;;;;ESO 056-072;;In the Large Magellanic Cloud.; +NGC1855;*Ass;05:09:16.91;-68:50:44.3;Dor;;;;;;;;;;;;;;;;;;;;Stellar association in the LMC surrounds the star cluster NGC 1854.; +NGC1856;GCl;05:09:29.37;-69:07:39.3;Dor;2.70;2.40;90;10.40;10.06;;;;;;;;;;;;;ESO 056-073;;In the Large Magellanic Cloud.; +NGC1857;OCl;05:20:05.56;+39:20:37.0;Aur;4.50;;;8.08;7.00;;;;;;;;;;;;;MWSC 0505;;; +NGC1858;Cl+N;05:09:51.94;-68:53:28.5;Dor;4.40;2.60;170;9.76;9.88;;;;;;;;;;;;;IRAS 05101-6855;;Open cluster involved. In the Large Magellanic Cloud.; +NGC1859;OCl;05:11:31.79;-65:14:59.0;Dor;1.50;1.50;;12.70;12.26;;;;;;;;;;;;;ESO 085-050;;In the Large Magellanic Cloud.; +NGC1860;OCl;05:10:39.51;-68:45:08.1;Dor;1.10;1.10;;11.18;11.04;;;;;;;;;;;;;ESO 056-075;;In the Large Magellanic Cloud.; +NGC1861;OCl;05:10:22.14;-70:46:37.6;Men;1.50;1.50;;13.63;13.16;;;;;;;;;;;;;ESO 056-076;;In the Large Magellanic Cloud.; +NGC1862;OCl;05:12:34.54;-66:09:15.7;Dor;0.90;0.75;10;13.51;13.33;;;;;;;;;;;;;ESO 085-051;;In the Large Magellanic Cloud.; +NGC1863;OCl;05:11:39.58;-68:43:36.4;Dor;1.40;1.20;50;;;;;;;;;;;;;;;ESO 056-077;;; +NGC1864;OCl;05:12:40.60;-67:37:16.5;Dor;1.10;0.95;110;13.05;12.86;;;;;;;;;;;;;ESO 056-079;;In the Large Magellanic Cloud.; +NGC1865;OCl;05:12:25.08;-68:46:15.7;Dor;1.40;1.40;;13.60;12.91;;;;;;;;;;;;;ESO 056-078;;; +NGC1866;GCl;05:13:39.10;-65:27:56.1;Dor;5.50;5.50;;9.98;9.73;;;;;;;;;;;;;ESO 085-052;;In the Large Magellanic Cloud.; +NGC1867;OCl;05:13:42.26;-66:17:31.0;Dor;1.50;1.40;120;13.80;13.35;;;;;;;;;;;;;2MASX J05134227-6617307,ESO 085-053;;In the Large Magellanic Cloud.; +NGC1868;GCl;05:14:36.30;-63:57:16.2;Dor;2.70;2.70;90;12.02;11.57;;;;;;;;;;;;;2MASX J05143630-6357162,ESO 085-056;;In the Large Magellanic Cloud.; +NGC1869;Cl+N;05:13:56.32;-67:22:45.8;Dor;2.00;1.40;100;;;;;;;;;;;;;;;IRAS 05140-6726;;Nebulosity involved.; +NGC1870;GCl;05:13:09.90;-69:07:01.0;Dor;1.10;1.00;10;11.45;11.26;;;;;;;;;;;;;ESO 056-081;;In the Large Magellanic Cloud.; +NGC1871;Cl+N;05:13:51.76;-67:27:09.5;Dor;2.30;1.60;60;10.21;10.09;;;;;;;;;;;;;IRAS 05139-6730;;Nebulosity involved.; +NGC1872;GCl;05:13:10.77;-69:18:41.7;Dor;1.70;1.70;;11.39;11.04;;;;;;;;;;;;;ESO 056-083;;In the Large Magellanic Cloud.; +NGC1873;Cl+N;05:13:55.67;-67:20:03.7;Dor;2.80;2.20;120;;10.44;;;;;;;;;;;;;;;HII region involved.; +NGC1874;Cl+N;05:13:11.66;-69:22:34.4;Dor;1.40;1.10;100;12.47;12.81;;;;;;;;;;;;;ESO 056-082;;In the Large Magellanic Cloud.; +NGC1875;G;05:21:45.76;+06:41:19.9;Ori;0.79;0.69;47;14.89;;10.98;10.19;9.88;23.00;E;;;;;;;;2MASX J05214573+0641202,MCG +01-14-032,PGC 017171;;; +NGC1876;Cl+N;05:13:18.63;-69:21:43.7;Dor;1.50;1.50;;11.54;11.71;;;;;;;;;;;;;ESO 056-084;;"Star cluster involved; in the Large Magellanic Cloud."; +NGC1877;Neb;05:13:38.84;-69:23:01.6;Dor;1.10;0.60;130;12.00;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.;B-Mag taken from LEDA +NGC1878;OCl;05:12:50.91;-70:28:18.1;Men;1.10;1.00;50;13.23;12.94;;;;;;;;;;;;;ESO 056-080;;In the Large Magellanic Cloud.; +NGC1879;G;05:19:48.23;-32:08:33.9;Col;2.42;1.67;60;13.14;;;;;23.51;SBm;;;;;;;;ESO 423-006,ESO-LV 423-0060,IRAS 05178-3211,MCG -05-13-016,PGC 017113,UGCA 110;;; +NGC1880;HII;05:13:25.18;-69:22:46.0;Dor;1.20;1.00;140;12.47;12.81;;;;;;;;;;;;;IRAS 05136-6925;;In the Large Magellanic Cloud.; +NGC1881;OCl;05:13:37.17;-69:17:57.0;Dor;1.20;0.85;160;;;;;;;;;;;;;;;ESO 056-086;;In the Large Magellanic Cloud.; +NGC1882;OCl;05:15:33.33;-66:07:46.4;Dor;1.60;1.40;20;12.43;12.33;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1883;OCl;05:25:54.20;+46:29:24.5;Aur;5.70;;;;12.00;;;;;;;;;;;;;MWSC 0539;;; +NGC1884;Other;05:15:58.04;-66:09:48.2;Dor;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1885;OCl;05:15:05.86;-68:58:39.2;Dor;1.40;1.20;130;12.35;11.97;;;;;;;;;;;;;ESO 056-088;;In the Large Magellanic Cloud.; +NGC1886;G;05:21:48.15;-23:48:36.5;Lep;3.22;0.35;61;13.62;;10.40;9.50;9.23;23.52;Sbc;;;;;;;;2MASX J05214814-2348367,ESO 487-002,ESO-LV 487-0020,IRAS 05197-2351,MCG -04-13-013,PGC 017174;;; +NGC1887;OCl;05:16:05.93;-66:19:06.8;Dor;1.50;1.50;;12.91;12.72;;;;;;;;;;;;;ESO 085-059;;In the Large Magellanic Cloud.; +NGC1888;G;05:22:34.45;-11:29:58.3;Lep;3.32;1.31;148;13.00;;9.38;8.64;8.31;23.36;SBc;;;;;;;;2MASX J05223444-1129583,MCG -02-14-013,PGC 017195;;; +NGC1889;G;05:22:35.30;-11:29:49.0;Lep;0.63;0.37;165;12.60;;;;;21.90;E;;;;;;;;MCG -02-14-014,PGC 017196;;; +NGC1890;OCl;05:13:45.83;-72:04:40.7;Men;1.10;1.00;70;13.08;12.81;;;;;;;;;;;;;ESO 056-087;;In the Large Magellanic Cloud.; +NGC1891;OCl;05:21:44.22;-35:47:21.5;Col;;;;;;;;;;;;;;;;;;ESO 362-020;;"Twenty stars, 19 arcmin by 14 arcmin; cluster?"; +NGC1892;G;05:17:09.05;-64:57:35.1;Dor;3.37;1.02;75;12.72;;10.27;9.74;9.65;23.21;Sc;;;;;;;;2MASX J05170905-6457354,ESO 085-061,ESO-LV 85-0610,IRAS 05169-6500,PGC 017042;;Extended HIPASS source; +NGC1893;OCl;05:22:44.14;+33:24:43.3;Aur;6.00;;;7.90;7.50;;;;;;;;;;;0410;;MWSC 0516;;; +NGC1894;OCl;05:15:51.27;-69:28:06.7;Dor;1.40;1.20;60;12.40;12.16;;;;;;;;;;;;;ESO 056-089;;In the Large Magellanic Cloud.; +NGC1895;Neb;05:16:51.59;-67:19:46.5;Dor;1.40;1.30;40;;12.93;;;;;;;;;;;;;IRAS 05169-6722;;In the Large Magellanic Cloud.; +NGC1896;OCl;05:25:34.68;+29:15:36.8;Aur;3.90;;;;;;;;;;;;;;;;;MWSC 0537;;; +NGC1897;OCl;05:17:31.28;-67:27:03.6;Dor;1.10;1.00;170;13.85;13.49;;;;;;;;;;;;;2MASX J05173130-6727041,2MASX J05173130-6727041 ID,ESO 056-092;;In the Large Magellanic Cloud.; +NGC1898;OCl;05:16:42.38;-69:39:22.4;Dor;1.60;1.60;;12.62;11.86;;;;;;;;;;;;;ESO 056-090;;In the Large Magellanic Cloud.; +NGC1899;HII;05:17:48.67;-67:54:02.6;Dor;1.10;1.00;20;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1900;OCl;05:19:09.38;-63:01:25.3;Dor;1.80;1.60;100;13.95;13.59;;;;;;;;;;;;;ESO 085-068;;In the Large Magellanic Cloud.; +NGC1901;OCl;05:18:15.16;-68:26:10.7;Dor;11.10;;;;;;;;;;;;;;;;;MWSC 0500;;Superposed on the Large Magellanic Cloud.; +NGC1902;OCl;05:18:19.14;-66:37:38.7;Dor;1.70;1.70;;12.04;11.77;;;;;;;;;;;;;ESO 085-066;;In the Large Magellanic Cloud.; +NGC1903;GCl;05:17:22.30;-69:20:07.1;Dor;1.90;1.90;;12.00;11.86;;;;;;;;;;;;;ESO 056-093;;In the Large Magellanic Cloud.; +NGC1904;GCl;05:24:10.59;-24:31:27.2;Lep;7.20;;;9.21;8.16;;;;;;;;;079;;;;MWSC 0528;;; +NGC1905;OCl;05:18:23.71;-67:16:41.4;Dor;0.95;0.95;;13.46;13.21;;;;;;;;;;;;;2MASX J05182377-6716409,ESO 085-067;;In the Large Magellanic Cloud.; +NGC1906;G;05:24:47.10;-15:56:35.9;Lep;1.03;0.74;154;14.11;;11.70;11.07;10.77;;Sc;;;;;;;;2MASX J05244709-1556358,MCG -03-14-015,PGC 017243;;; +NGC1907;OCl;05:28:04.55;+35:19:32.4;Aur;5.40;;;8.87;8.20;;;;;;;;;;;;;MWSC 0552;;; +NGC1908;Other;05:25:53.80;-02:31:44.0;Ori;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC1909;RfN;05:04:55.44;-07:15:56.3;Eri;180.00;60.00;;;;;;;;;;;;;;2118;;LBN 959;the Witch Head Nebula;Identification as NGC 1909 is uncertain.; +NGC1910;HII;05:18:43.07;-69:13:54.9;Dor;3.60;2.80;120;;9.65;;;;;;;;;;;;;ESO 056-099;;In the Large Magellanic Cloud.; +NGC1911;OCl;05:19:26.88;-66:41:03.3;Dor;0.60;0.60;;;;;;;;;;;;;;;;ESO 085-070;;; +NGC1912;OCl;05:28:42.49;+35:51:17.7;Aur;9.60;;;6.69;6.40;;;;;;;;;038;;;;MWSC 0557;;; +NGC1913;OCl;05:18:19.29;-69:32:11.3;Dor;1.30;1.10;150;11.37;11.14;;;;;;;;;;;;;ESO 056-097;;In the Large Magellanic Cloud.; +NGC1914;Cl+N;05:17:39.76;-71:15:21.1;Men;1.50;1.20;150;;12.01;;;;;;;;;;;;;2MASX J05173461-7114571,IRAS 05182-7117;;Nebulosity involved. In the Large Magellanic Cloud.; +NGC1915;*Ass;05:19:42.24;-66:49:17.5;Dor;0.60;0.55;140;;;;;;;;;;;;;;;ESO 085-071;;"Identification as NGC 1915 is uncertain; NGC 1915 may be NGC 1919."; +NGC1916;GCl;05:18:36.47;-69:24:24.5;Dor;2.10;2.10;;11.16;10.38;;;;;;;;;;;;;ESO 056-098;;In the Large Magellanic Cloud.; +NGC1917;GCl;05:19:01.97;-68:59:56.3;Dor;1.70;1.70;;12.90;12.33;;;;;;;;;;;;;2MASX J05190201-6859562,ESO 056-100;;In the Large Magellanic Cloud.; +NGC1918;SNR;05:19:06.99;-69:39:44.8;Dor;3.90;1.70;120;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1919;Neb;05:20:19.05;-66:53:28.1;Dor;1.40;1.20;50;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud. This may also be NGC 1915.; +NGC1920;HII;05:20:33.50;-66:46:43.4;Dor;1.20;1.10;100;;12.54;;;;;;;;;;;;;2MASX J05203358-6646437,IRAS 05205-6649;;In the Large Magellanic Cloud. This may also be NGC 1911.; +NGC1921;OCl;05:19:22.75;-69:47:15.9;Dor;1.00;0.90;20;13.14;12.95;;;;;;;;;;;;;;;; +NGC1922;OCl;05:19:48.92;-69:26:53.7;Dor;1.00;0.90;30;11.67;11.51;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1923;Cl+N;05:21:34.06;-65:29:12.2;Dor;0.95;0.85;80;11.49;11.24;;;;;;;;;;;;;ESO 085-075,IRAS 05214-6532;;HII region involved.; +NGC1924;G;05:28:01.93;-05:18:38.7;Ori;1.60;1.15;133;13.00;;10.28;9.58;9.34;22.76;SBbc;;;;;;;;2MASX J05280197-0518383,IRAS 05255-0521,MCG -01-14-011,PGC 017319;;; +NGC1925;*Ass;05:21:43.96;-65:47:37.0;Dor;6.00;6.00;;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1926;GCl;05:20:35.43;-69:31:31.0;Dor;1.40;1.20;120;12.05;11.79;11.05;10.88;10.62;;;;;;;;;;2MASX J05203539-6931308,ESO 056-105;;In the Large Magellanic Cloud.; +NGC1927;Other;05:28:42.98;-08:22:38.4;Ori;;;;;;;;;;;;;;;;;;;;No optical candidate at this position.; +NGC1928;OCl;05:20:56.50;-69:28:40.6;Dor;1.30;1.30;;13.34;12.47;;;;;;;;;;;;;ESO 056-106;;In the Large Magellanic Cloud.; +NGC1929;OCl;05:21:36.03;-67:54:43.4;Dor;1.20;1.10;90;14.00;;;;;;;;;;;;;;2MASX J05213602-6754432,2MASX J05213602-6754432 ID,ESO 056-107;;In large complex in the Large Magellanic Cloud.; +NGC1930;G;05:25:56.80;-46:43:42.5;Pic;1.97;1.18;36;13.39;;10.22;9.55;9.30;23.56;E-S0;;;;;;;;2MASX J05255681-4643423,ESO 253-004,ESO-LV 253-0040,PGC 017276;;; +NGC1931;Cl+N;05:31:25.35;+34:14:47.6;Aur;4.80;;;;10.10;;;;;;;;;;;;;2MASX J05312534+3414475,LBN 810,MWSC 0564;;; +NGC1932;*;05:22:17.24;-66:09:15.6;Dor;;;;;13.80;14.48;14.51;14.60;;;;;;;;;;2MASS J05221715-6609150,UCAC2 2672844;;Superposed on the Large Magellanic Cloud.; +NGC1933;OCl;05:22:27.32;-66:09:07.8;Dor;1.30;1.30;;8.10;13.80;14.48;14.51;14.60;;;;;;;;;;UCAC2 2672844;;In the Large Magellanic Cloud.; +NGC1934;Cl+N;05:21:47.89;-67:56:13.8;Dor;1.90;1.30;150;;10.50;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1935;HII;05:21:58.71;-67:57:26.6;Dor;1.20;1.20;;;;;;;;;;;;;;2126;;;;Part of a large star-formation complex in the LMC.; +NGC1936;EmN;05:22:13.96;-67:58:41.9;Dor;1.00;1.00;;;11.60;16.03;14.51;12.87;;;;;;;;2127;;IRAS 05223-6801;;Part of a large star-formation complex in the LMC.; +NGC1937;*Ass;05:22:29.16;-67:53:40.8;Dor;3.20;2.00;70;;;;;;;;;;;;;;;;;In large complex in the Large Magellanic Cloud.; +NGC1938;GCl;05:21:24.71;-69:56:21.8;Men;0.90;0.80;90;13.54;13.09;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1939;GCl;05:21:26.61;-69:56:59.1;Men;1.40;1.30;80;12.52;11.83;;;;;;;;;;;;;ESO 056-108E;;In the Large Magellanic Cloud.; +NGC1940;GCl;05:22:43.74;-67:11:11.6;Dor;1.20;1.20;;12.21;11.91;;;;;;;;;;;;;ESO 085-078;;In the Large Magellanic Cloud.; +NGC1941;Cl+N;05:23:07.70;-66:22:43.1;Dor;0.90;0.80;100;12.07;12.00;;;;;;;;;;;;;IRAS 05232-6626;;Stars involved. In the Large Magellanic Cloud.; +NGC1942;OCl;05:24:44.54;-63:56:31.6;Dor;1.90;1.90;;14.24;13.46;;;;;;;;;;;;;ESO 085-081;;In the Large Magellanic Cloud.; +NGC1943;GCl;05:22:28.74;-70:09:17.5;Men;1.10;1.00;140;12.15;11.88;;;;;;;;;;;;;ESO 056-114;;In the Large Magellanic Cloud.; +NGC1944;GCl;05:21:57.43;-72:29:38.7;Men;2.70;2.70;;12.11;11.84;11.16;10.95;10.71;;;;;;;;;;2MASX J05215746-7229386,ESO 033-017;;In the Large Magellanic Cloud.; +NGC1945;EmN;05:24:54.96;-66:27:26.9;Dor;10.00;6.00;60;;;;;;;;;;;;;;;ESO 085-083;;In the Large Magellanic Cloud.; +NGC1946;OCl;05:25:16.38;-66:23:40.4;Dor;1.00;0.90;130;12.66;12.62;;;;;;;;;;;;;ESO 085-084;;In the Large Magellanic Cloud.; +NGC1947;G;05:26:47.61;-63:45:36.1;Dor;3.48;3.18;89;11.76;10.80;8.43;7.75;7.50;23.11;E-S0;;;;;;;;2MASX J05264761-6345360,ESO 085-087,ESO-LV 85-0870,IRAS 05264-6347,PGC 017296;;; +NGC1948;Cl+N;05:25:46.24;-66:16:00.5;Dor;7.00;5.70;30;10.81;10.61;;;;;;;;;;;;;;;Emission nebula involved.; +NGC1949;Neb;05:25:04.83;-68:28:21.1;Dor;0.95;0.90;100;;12.39;;;;;;;;;;;;;ESO 056-117,IRAS 05253-6830;;Within boundaries of LMC; +NGC1950;OCl;05:24:32.99;-69:54:08.3;Men;1.70;1.70;;13.71;13.17;;;;;;;;;;;;;ESO 056-116;;In the Large Magellanic Cloud.; +NGC1951;OCl;05:26:06.82;-66:35:50.1;Dor;1.70;1.50;20;10.67;10.58;;;;;;;;;;;;;ESO 085-086;;In the Large Magellanic Cloud.; +NGC1952;SNR;05:34:31.97;+22:00:52.1;Tau;8.00;4.00;;;8.40;;;;;;;;;001;;;;IRAS 05315+2158,LBN 833;;Position is for the Crab pulsar.;V-mag taken from LEDA +NGC1953;GCl;05:25:27.81;-68:50:17.9;Dor;1.20;1.20;;11.97;11.74;;;;;;;;;;;;;ESO 056-118;;In the Large Magellanic Cloud.; +NGC1954;G;05:32:48.33;-14:03:46.0;Lep;3.62;1.86;149;12.50;;10.01;9.31;9.10;23.56;Sbc;;;;;;;;2MASX J05324835-1403460,IRAS 05305-1405,MCG -02-15-003,PGC 017422;;; +NGC1955;HII;05:26:09.96;-67:29:50.6;Dor;4.00;3.60;20;8.95;8.87;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1956;G;05:19:35.32;-77:43:43.2;Men;1.75;0.95;64;14.05;;9.77;8.98;8.70;23.68;Sa;;;;;;;;2MASX J05193528-7743434,ESO 016-002,ESO-LV 16-0020,PGC 017102;;; +NGC1957;G;05:32:55.20;-14:07:59.3;Lep;0.87;0.82;65;;;11.24;10.54;10.26;23.28;E-S0;;;;;;;;2MASX J05325523-1407587,PGC 017427;;; +NGC1958;GCl;05:25:30.52;-69:50:12.4;Dor;1.50;1.50;;13.53;12.99;;14.00;13.73;;;;;;;;;;ESO 056-119;;In the Large Magellanic Cloud.; +NGC1959;OCl;05:25:36.63;-69:55:36.9;Men;1.60;1.60;;12.55;12.17;;;;;;;;;;;;;ESO 056-120;;In the Large Magellanic Cloud.; +NGC1960;OCl;05:36:17.74;+34:08:26.7;Aur;7.20;;;6.09;6.00;;;;;;;;;036;;;;MWSC 0594;;; +NGC1961;G;05:42:04.65;+69:22:42.4;Cam;4.42;3.10;85;11.73;10.99;8.79;8.01;7.73;23.47;SABb;;;;;;2133;;2MASX J05420477+6922421,IRAS 05365+6921,MCG +12-06-007,PGC 017625,UGC 03334;;; +NGC1962;OCl;05:26:17.73;-68:50:15.5;Dor;1.40;1.40;;;11.47;;;;;;;;;;;;;ESO 056-122,IRAS 05265-6852;;Within boundaries of LMC; +NGC1963;OCl;05:32:16.83;-36:23:55.1;Col;6.30;;;;;;;;;;;;;;;;;ESO 363-005,MWSC 0569;;This NGC number is sometimes incorrectly equated with the Galaxy IC 2135.; +NGC1964;G;05:33:21.76;-21:56:44.8;Lep;5.16;2.33;31;11.45;10.81;8.65;7.93;7.68;23.25;SABb;;;;;;;;2MASX J05332175-2156447,ESO 554-010,ESO-LV 554-0100,IRAS 05312-2158,MCG -04-14-003,PGC 017436;;; +NGC1965;OCl;05:26:31.26;-68:48:19.7;Dor;1.20;1.10;;;11.70;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1966;OCl;05:26:45.84;-68:49:11.5;Dor;1.10;1.00;30;;11.83;;;;;;;;;;;;;ESO 056-125,IRAS 05270-6851;;In the Large Magellanic Cloud.; +NGC1967;OCl;05:26:43.31;-69:06:05.5;Dor;0.95;0.90;100;10.80;10.81;;;;;;;;;;;;;ESO 056-126;;In the Large Magellanic Cloud.; +NGC1968;*Ass;05:27:22.11;-67:27:49.8;Dor;5.00;2.70;70;8.29;8.22;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1969;OCl;05:26:32.36;-69:50:28.9;Dor;1.20;1.20;;12.66;12.46;;;;;;;;;;;;;ESO 056-124;;In the Large Magellanic Cloud.; +NGC1970;OCl;05:26:52.67;-68:50:12.0;Dor;1.50;1.50;;10.45;10.28;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC1971;OCl;05:26:45.24;-69:51:05.8;Dor;1.10;0.95;0;12.01;11.90;;;;;;;;;;;;;ESO 056-128;;In the Large Magellanic Cloud.; +NGC1972;OCl;05:26:47.36;-69:50:18.0;Dor;0.90;0.80;100;12.95;12.62;;;;;;;;;;;;;ESO 056-129;;In the Large Magellanic Cloud.; +NGC1973;Neb;05:35:04.78;-04:43:54.4;Ori;5.00;5.00;;7.00;;;;;;;;;;;;;;;;;Dimensions and B-Mag taken from LEDA +NGC1974;OCl;05:27:59.02;-67:25:26.9;Dor;1.60;1.60;;;10.30;13.74;13.86;13.88;;;;;;;1991;;;2MASX J05275898-6725271,IRAS 05280-6727;;Within boundaries of LMC; +NGC1975;Neb;05:35:17.88;-04:41:06.8;Ori;10.00;5.00;;7.00;;;;;;;;;;;;;;;;;Dimensions and B-Mag taken from LEDA +NGC1976;Cl+N;05:35:16.48;-05:23:22.8;Ori;90.00;60.00;;4.00;4.00;;;;;;;;;042;;;;LBN 974,MWSC 0582;Great Orion Nebula,Orion Nebula;;B-Mag taken from LEDA, V-mag taken from HEASARC's messier table +NGC1977;Cl+N;05:35:15.80;-04:50:39.6;Ori;10.20;;;;;;;;;;;;;;;;;MWSC 0587;the Running Man Nebula;; +NGC1978;GCl;05:28:45.13;-66:14:09.3;Dor;4.00;2.70;160;10.70;10.70;;;;;;;;;;;;;ESO 085-090,IRAS 05287-6616;;Within boundaries of LMC; +NGC1979;G;05:34:01.11;-23:18:36.3;Lep;1.88;1.81;145;12.85;;9.86;9.22;9.01;23.04;E-S0;;;;;;;;2MASX J05340112-2318361,ESO 487-024,ESO-LV 487-0240,MCG -04-14-004,PGC 017452;;; +NGC1980;Cl+N;05:35:25.99;-05:54:35.6;Ori;9.30;;;;2.50;;;;;;;;;;;;;LBN 977,MWSC 0586;Lower Sword;; +NGC1981;Cl+N;05:35:09.59;-04:25:30.2;Ori;9.00;;;;4.20;;;;;;;;;;;;;MWSC 0579;Upper Sword;; +NGC1982;HII;05:35:31.38;-05:16:02.9;Ori;20.00;15.00;;9.00;9.00;;;;;;;;;043;;;;2MASS J05353135-0516026;Mairan's Nebula;;B-Mag taken from LEDA, V-mag taken from HEASARC's messier table +NGC1983;OCl;05:27:44.25;-68:59:09.8;Dor;4.00;3.00;150;;;;;;;;;;;;;;;ESO 056-133;;In the Large Magellanic Cloud.; +NGC1984;OCl;05:27:40.91;-69:08:03.6;Dor;1.50;1.20;60;10.00;9.99;;;;;;;;;;;;;ESO 056-132,IRAS 05280-6910;;Within boundaries of LMC; +NGC1985;RfN;05:37:47.81;+31:59:19.8;Aur;0.68;0.68;;12.70;;;;;;;;;;;;;;;;;Dimensions and B-Mag taken from LEDA +NGC1986;GCl;05:27:38.08;-69:58:25.1;Men;2.80;2.40;140;11.31;11.07;;;;;;;;;;;;;ESO 056-134;;In the Large Magellanic Cloud.; +NGC1987;GCl;05:27:17.15;-70:44:14.5;Men;1.70;1.70;90;12.10;;;;;;;;;;;;;;ESO 056-131;;In the Large Magellanic Cloud.; +NGC1988;*;05:37:26.49;+21:13:05.7;Tau;;;;;;;;;;;;;;;;;;;;; +NGC1989;G;05:34:23.42;-30:48:03.8;Col;1.72;1.18;93;14.13;;10.94;10.18;9.93;24.00;E-S0;;;;;;;;2MASX J05342343-3048035,ESO 423-021,ESO-LV 423-0210,MCG -05-14-004,PGC 017464;;; +NGC1990;*;05:36:12.82;-01:12:06.9;Ori;;;;1.51;1.69;2.07;2.07;2.16;;;;;;;;;;BD -01 0969,HD 037128,HIP 026311,IDS 05311-0116 A,TYC 4766-2450-1,WDS J05362-0112A,Eps Ori,46 Ori;Alnilam;; +NGC1991;Dup;05:27:59.02;-67:25:26.9;Dor;;;;;;;;;;;;;;;1974;;;;;; +NGC1992;G;05:34:31.77;-30:53:49.2;Col;1.22;0.69;51;14.69;;11.49;10.75;10.60;23.65;S0-a;;;;;;;;2MASX J05343177-3053492,ESO 423-023,ESO-LV 423-0230,MCG -05-14-007,PGC 017466;;; +NGC1993;G;05:35:25.57;-17:48:55.1;Lep;1.58;0.87;77;13.41;;10.25;9.59;9.32;23.33;E-S0;;;;;;;;2MASX J05352557-1748548,ESO 554-014,ESO-LV 554-0140,MCG -03-15-003,PGC 017487;;; +NGC1994;OCl;05:28:21.77;-69:08:30.6;Dor;1.60;1.50;170;;;;;;;;;;;;;;;ESO 056-136,IRAS 05287-6910;;Within boundaries of LMC; +NGC1995;**;05:33:03.34;-48:40:30.5;Pic;;;;;;;;;;;;;;;;;;;;; +NGC1996;OCl;05:38:18.88;+25:49:23.4;Tau;6.00;;;;;;;;;;;;;;;;;MWSC 0608;;; +NGC1997;OCl;05:30:34.70;-63:11:58.3;Dor;1.80;1.80;;14.27;13.43;;;;;;;;;;;;;2MASX J05303476-6311581,2MASX J05303476-6311581 ID,ESO 086-001;;In the Large Magellanic Cloud.; +NGC1998;G;05:33:15.76;-48:41:44.2;Pic;0.95;0.47;16;15.18;;11.91;11.24;11.00;23.75;S0-a;;;;;;;;2MASX J05331577-4841442,ESO 204-015,ESO-LV 204-0150,PGC 017434;;This is not NGC 1995 (which is a double star).; +NGC1999;RfN;05:36:25.35;-06:42:57.1;Ori;2.00;2.00;;9.50;;;;;;;;;;;;;;LBN 979;;; +NGC2000;OCl;05:27:29.24;-71:52:45.8;Men;1.60;1.50;150;12.32;12.14;;;;;;;;;;;;;ESO 056-135;;In the Large Magellanic Cloud.; +NGC2001;*Ass;05:29:02.06;-68:46:09.4;Dor;7.30;3.60;40;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2002;GCl;05:30:20.70;-66:53:06.0;Dor;1.90;1.70;20;11.28;10.84;;;;;;;;;;;;;2MASX J05301728-6653083,IRAS 05303-6655;;This is a globular cluster in the Large Magellanic Cloud.; +NGC2003;GCl;05:30:55.20;-66:27:59.6;Dor;1.70;1.40;70;11.35;11.30;;;;;;;;;;;;;2MASX J05305522-6627595,ESO 086-006;;In the Large Magellanic Cloud.; +NGC2004;GCl;05:30:42.75;-67:17:11.2;Dor;3.00;2.80;90;9.60;;;;;;;;;;;;;;2MASX J05304266-6717108,2MASX J05304266-6717108 ID,ESO 086-004;;In the Large Magellanic Cloud.; +NGC2005;GCl;05:30:10.85;-69:45:08.7;Dor;1.60;1.60;;12.30;11.57;;;;;;;;;;;;;ESO 056-138;;In the Large Magellanic Cloud.; +NGC2006;*Ass;05:31:21.00;-66:57:55.0;Dor;1.60;1.40;140;11.00;10.88;;;;;;;;;;;;;ESO 086-008;;This is a stellar association in the LMC.; +NGC2007;G;05:34:59.17;-50:55:18.1;Pic;1.53;0.51;81;14.84;;12.21;11.71;11.52;23.63;SBc;;;;;;;;2MASX J05345917-5055181,ESO 204-019,ESO-LV 204-0190,PGC 017478;;; +NGC2008;G;05:35:03.81;-50:58:00.4;Pic;1.23;0.62;95;14.64;;11.88;11.17;10.86;23.27;Sc;;;;;;;;2MASX J05350381-5058002,ESO 204-020,ESO-LV 204-0200,IRAS 05338-5059,PGC 017480;;; +NGC2009;OCl;05:30:59.16;-69:10:54.0;Dor;1.40;1.20;10;11.29;11.02;;;;;;;;;;;;;ESO 056-140,IRAS 05313-6913;;Within boundaries of LMC; +NGC2010;OCl;05:30:34.93;-70:49:10.8;Men;1.90;1.70;170;11.96;11.72;;;;;;;;;;;;;ESO 056-139;;In the Large Magellanic Cloud.; +NGC2011;OCl;05:32:20.21;-67:31:23.3;Dor;1.00;1.00;;10.62;10.58;;;;;;;;;;;;;ESO 056-144;;In the Large Magellanic Cloud.; +NGC2012;G;05:22:35.35;-79:51:06.5;Men;1.29;0.76;113;14.49;;10.65;9.95;9.63;23.29;E-S0;;;;;;;;2MASX J05223529-7951063,ESO 016-005,ESO-LV 16-0050,PGC 017194;;; +NGC2013;OCl;05:44:01.67;+55:47:36.9;Aur;;;;;;;;;;;;;;;;;;;;; +NGC2014;Neb;05:32:19.87;-67:41:23.4;Dor;5.10;3.50;60;9.17;8.97;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2015;*Ass;05:32:06.49;-69:14:34.9;Dor;4.70;4.00;110;10.56;10.43;;;;;;;;;;;;;ESO 056-147;;In the Large Magellanic Cloud.; +NGC2016;OCl;05:31:38.82;-69:56:45.1;Men;1.80;1.80;;;;;;;;;;;;;;;;ESO 056-142;;In the Large Magellanic Cloud.; +NGC2017;OCl;05:39:16.31;-17:50:54.6;Lep;5.00;;;;;;;;;;;;;;;;;ESO 554-022;;Group of Galactic stars.; +NGC2018;HII;05:31:24.89;-71:04:08.6;Men;2.80;1.70;170;10.91;10.89;;;;;;;;;;;;;ESO 056-141,IRAS 05320-7106;;In the Large Magellanic Cloud. ESO identification of NGC 2018 is wrong.; +NGC2019;GCl;05:31:56.66;-70:09:34.5;Men;1.50;1.50;;10.90;10.86;;;;;;;;;;;;;ESO 056-145;;In the Large Magellanic Cloud.; +NGC2020;EmN;05:33:12.59;-67:42:57.2;Dor;3.20;3.90;50;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2021;OCl;05:33:30.67;-67:27:10.4;Dor;0.90;0.90;;;12.06;;;;;;;;;;;;;ESO 056-150;;In the Large Magellanic Cloud.; +NGC2022;PN;05:42:06.21;+09:05:11.5;Ori;0.32;;;12.40;11.60;15.42;11.79;11.03;;;;15.89;;;;;HD 37882;IRAS 05393+0903,PN G196.6-10.9;;; +NGC2023;RfN;05:41:38.39;-02:15:32.5;Ori;10.00;8.00;;;;;;;;;;;;;;;;BD -02 1345,HD 037903,HIP 026816,LBN 954;;; +NGC2024;Neb;05:41:42.57;-01:51:22.6;Ori;30.00;30.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC2025;OCl;05:32:33.64;-71:42:55.8;Men;1.90;1.90;;11.18;10.94;;;;;;;;;;;;;ESO 056-149;;In the Large Magellanic Cloud.; +NGC2026;OCl;05:43:10.15;+20:08:20.0;Tau;4.20;;;;;;;;;;;;;;;;;MWSC 0655;;; +NGC2027;OCl;05:34:59.71;-66:54:58.7;Dor;4.60;2.80;100;10.97;10.97;;;;;;;;;;;;;ESO 086-013;;In the Large Magellanic Cloud.; +NGC2028;OCl;05:33:48.57;-69:57:06.5;Men;1.10;1.00;60;13.16;12.88;;;;;;;;;;;;;ESO 056-152;;In the Large Magellanic Cloud.; +NGC2029;OCl;05:35:40.66;-66:02:06.0;Dor;1.10;0.85;60;;12.29;;;;;;;;;;;;;2MASX J05354060-6602059,ESO 056-156;;; +NGC2030;HII;05:34:59.74;-67:33:22.9;Dor;1.70;1.70;;;12.29;;;;;;;;;;;;;;;In the Large Magellanic Cloud. NGC coordinates switched with NGC 2029.; +NGC2031;GCl;05:33:41.82;-70:59:12.4;Men;3.30;2.80;150;11.09;10.83;;;;;;;;;;;;;ESO 056-153;;In the Large Magellanic Cloud.; +NGC2032;HII;05:35:20.62;-67:34:06.4;Dor;2.80;1.40;30;;;;;;;;;;;;;;;ESO 056-160;;In the Large Magellanic Cloud.; +NGC2033;*Ass;05:34:30.70;-69:46:48.5;Dor;5.90;4.60;10;11.53;11.63;;;;;;;;;;;;;;;In the Large Magellanic Cloud. ESO identification of NGC 2033 is wrong.; +NGC2034;*Ass;05:35:32.77;-66:54:13.1;Dor;4.50;3.20;;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2035;Neb;05:35:31.20;-67:35:03.0;Dor;1.80;1.30;20;;10.99;;;;;;;;;;;;;2MASX J05353417-6735319;;The 2MASS position refers to a knot about 30 arcsec southeast of the center.; +NGC2036;OCl;05:34:31.39;-70:03:51.7;Men;1.60;1.60;;12.96;12.77;;;;;;;;;;;;;ESO 056-155;;In the Large Magellanic Cloud.; +NGC2037;OCl;05:35:00.63;-69:43:53.7;Dor;2.90;1.30;170;10.21;10.31;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2038;OCl;05:34:42.27;-70:33:46.6;Men;1.60;1.50;120;12.10;11.92;;;;;;;;;;;;;ESO 056-158;;In the Large Magellanic Cloud.; +NGC2039;Other;05:44:00.91;+08:41:27.8;Ori;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC2040;Neb;05:36:05.93;-67:34:06.8;Dor;2.10;1.70;160;;11.47;;;;;;;;;;;;;ESO 056-164,IRAS 05362-6735;;In the Large Magellanic Cloud.; +NGC2041;GCl;05:36:28.05;-66:59:23.2;Dor;2.60;2.60;;10.58;10.36;;;;;;;;;;;;;ESO 086-015;;In the Large Magellanic Cloud.; +NGC2042;OCl;05:36:09.58;-68:55:24.4;Dor;4.50;4.50;;9.82;9.58;;;;;;;;;;;;;ESO 056-163;;ESO-B RA is -18 seconds in error. In the Large Magellanic Cloud.; +NGC2043;OCl;05:35:57.18;-70:04:27.9;Men;0.65;0.55;120;;;;;;;;;;;;;;;ESO 056-168;;In the Large Magellanic Cloud.; +NGC2044;*Ass;05:36:06.18;-69:11:55.2;Dor;5.50;4.50;100;10.69;10.59;;;;;;;;;;;;;ESO 056-165;;In the Large Magellanic Cloud.; +NGC2045;*;05:45:01.30;+12:53:18.1;Tau;;;;6.68;6.46;6.01;5.98;;;;;;;;;;;BD +12 0884,HD 038263,HIP 027116,TYC 723-519-1;;; +NGC2046;OCl;05:35:37.53;-70:14:26.5;Men;1.10;1.00;110;12.95;12.64;;;;;;;;;;;;;ESO 056-162;;In the Large Magellanic Cloud.; +NGC2047;OCl;05:35:52.99;-70:11:33.6;Men;0.95;0.90;90;13.38;13.15;;;;;;;;;;;;;ESO 056-167;;In the Large Magellanic Cloud.; +NGC2048;EmN;05:35:55.59;-69:38:54.7;Dor;1.40;1.00;100;12.05;12.17;;;;;;;;;;;;;2MASX J05355497-6938529,IRAS 05363-6940;;Within boundaries of LMC; +NGC2049;G;05:43:15.31;-30:04:42.2;Col;2.14;0.97;167;13.67;;10.61;9.92;9.65;23.70;Sa;;;;;;;;2MASX J05431530-3004420,ESO 424-011,ESO-LV 424-0110,MCG -05-14-011,PGC 017657;;; +NGC2050;*Ass;05:36:38.82;-69:23:00.7;Dor;3.00;2.40;70;9.47;9.25;;;;;;;;;;;;;ESO 056-170;;In the Large Magellanic Cloud.; +NGC2051;OCl;05:36:07.34;-71:00:41.0;Men;1.50;1.50;;12.03;11.69;;;;;;;;;;;;;ESO 056-169;;In the Large Magellanic Cloud.; +NGC2052;Neb;05:37:11.05;-69:46:27.1;Dor;18.00;12.00;;;;;;;;;;;;;;;;ESO 056-176;;In the Large Magellanic Cloud.;Dimensions taken from LEDA +NGC2053;OCl;05:37:39.70;-67:24:46.5;Dor;1.50;1.30;10;12.38;12.18;;;;;;;;;;;;;ESO 086-017;;In the Large Magellanic Cloud.; +NGC2054;Other;05:45:15.38;-10:04:59.3;Ori;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC2055;*Ass;05:36:44.73;-69:29:55.1;Dor;1.90;1.30;120;8.51;8.39;;;;;;;;;;;;;IRAS 05371-6931;;Within boundaries of LMC; +NGC2056;OCl;05:36:33.97;-70:40:18.8;Men;1.50;1.50;;11.80;11.77;;;;;;;;;;;;;ESO 056-172;;In the Large Magellanic Cloud.; +NGC2057;OCl;05:36:55.14;-70:16:08.2;Men;1.30;1.20;20;12.39;12.17;;;;;;;;;;;;;ESO 056-174;;In the Large Magellanic Cloud.; +NGC2058;OCl;05:36:54.22;-70:09:44.1;Men;2.10;2.10;;12.09;11.85;;;;;;;;;;;;;ESO 056-173;;In the Large Magellanic Cloud.; +NGC2059;OCl;05:37:00.55;-70:07:44.5;Men;1.10;1.00;170;13.16;12.85;;;;;;;;;;;;;ESO 056-175;;In the Large Magellanic Cloud.; +NGC2060;SNR;05:37:46.90;-69:10:18.0;Dor;2.20;2.00;160;9.69;9.59;15.54;14.94;14.78;;;;;;;;;;;;"Open cluster involved; in the Large Magellanic Cloud."; +NGC2061;OCl;05:42:41.77;-34:00:34.3;Col;;;;;;;;;;;;;;;;;;ESO 363-016;;Group of stars.; +NGC2062;OCl;05:40:02.70;-66:52:32.7;Dor;1.20;1.10;20;12.97;12.67;;;;;;;;;;;;;ESO 086-020;;In the Large Magellanic Cloud.; +NGC2063;Other;05:46:43.03;+08:46:52.0;Ori;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC2064;RfN;05:46:18.39;+00:00:21.4;Ori;10.00;10.00;;;;;;;;;;;;;;;;2MASX J05461915+0000202,LBN 939;;The 2MASS XSC position is 12 arcsec northeast of the optical center.; +NGC2065;OCl;05:37:38.42;-70:14:11.3;Men;2.30;2.30;;11.50;11.24;;;;;;;;;;;;;ESO 057-002;;In the Large Magellanic Cloud.; +NGC2066;OCl;05:37:43.12;-70:09:59.6;Men;1.00;0.90;140;13.45;13.10;;;;;;;;;;;;;ESO 057-003;;In the Large Magellanic Cloud.; +NGC2067;RfN;05:46:31.88;+00:07:52.5;Ori;8.00;3.00;;;;;;;;;;;;;;;;;;The NGC identification is not certain.;Dimensions taken from LEDA +NGC2068;RfN;05:46:45.82;+00:04:45.5;Ori;4.50;;;8.00;8.00;;;;;;;;;078;;;;MWSC 0664;;;V-mag taken from HEASARC's messier table +NGC2069;Neb;05:38:46.44;-68:58:27.8;Dor;5.00;2.20;30;;10.10;;;;;;;;;;;;;ESO 057-007;;Part of the 30 Doradus complex in the Large Magellanic Cloud.; +NGC2070;HII;05:38:42.36;-69:06:03.2;Dor;16.00;16.00;;5.00;7.25;;;;;;;;;;;;;C 103;30 Dor Cluster,Tarantula Nebula;In the Large Magellanic Cloud.;B-Mag taken from LEDA +NGC2071;Cl+N;05:47:07.26;+00:17:39.3;Ori;7.00;5.00;;8.00;;;;;;;;;;;;;;LBN 938,MWSC 0665;;;B-Mag taken from LEDA +NGC2072;OCl;05:38:24.39;-70:14:02.6;Men;1.00;0.90;110;13.73;13.21;;;;;;;;;;;;;ESO 057-004;;In the Large Magellanic Cloud.; +NGC2073;G;05:45:53.91;-21:59:56.9;Lep;1.44;1.38;110;13.44;;10.30;9.66;9.43;23.00;E-S0;;;;;;;;2MASX J05455392-2159568,ESO 554-031,ESO-LV 554-0310,MCG -04-14-024,PGC 017772;;; +NGC2074;Cl+N;05:39:03.58;-69:29:53.2;Dor;4.00;3.40;50;8.50;;;;;;;;;;;;;;;;"Open cluster involved; in the Large Magellanic Cloud.";B-Mag taken from LEDA +NGC2075;Cl+N;05:38:21.35;-70:41:06.1;Men;2.20;1.80;30;11.48;11.47;;;;;;;;;;;;;2MASX J05382065-7040585;;"Open cluster involved; in the Large Magellanic Cloud."; +NGC2076;G;05:46:47.46;-16:46:57.4;Lep;2.52;1.50;44;12.70;;9.76;8.90;8.50;24.63;S0-a;;;;;;;;2MASX J05464670-1647083,2MASX J05464746-1646574,IRAS 05445-1648,MCG -03-15-012,PGC 017804;;Extended HIPASS source; +NGC2077;Neb;05:39:36.02;-69:39:25.6;Dor;1.30;1.30;;11.71;11.71;;;;;;;;;;;;;ESO 057-009;;In the Large Magellanic Cloud.; +NGC2078;EmN;05:39:39.45;-69:44:35.4;Dor;1.20;1.10;0;11.01;10.89;;;;;;;;;;;;;ESO 057-010;;Part of the NGC 2079 complex in the Large Magellanic Cloud.; +NGC2079;HII;05:39:37.60;-69:45:25.9;Dor;1.10;0.95;160;11.69;11.81;;;;;;;;;;;;;ESO 057-011;;Brightest in complex of seven nebulae in the Large Magellanic Cloud.; +NGC2080;HII;05:39:45.82;-69:38:38.8;Dor;1.70;1.50;130;;10.42;;;;;;;;;;;;;ESO 057-012;;In LMC. Identified as an HII region in PKSCAT90 (version 1.01).; +NGC2081;Cl+N;05:39:59.39;-69:24:21.2;Dor;8.50;6.00;70;;;;;;;;;;;;;;;;;Emission nebula involved.; +NGC2082;G;05:41:51.12;-64:18:04.1;Dor;2.06;1.86;50;12.79;;10.21;9.54;9.36;22.97;SBb;;;;;;;;2MASX J05415112-6418039,ESO 086-021,ESO-LV 86-0210,IRAS 05415-6419,PGC 017609;;; +NGC2083;Neb;05:39:59.22;-69:44:15.3;Dor;2.00;1.80;70;;10.83;;;;;;;;;;;;;;;Part of the NGC 2079 complex in the Large Magellanic Cloud.; +NGC2084;Neb;05:40:07.00;-69:45:33.9;Dor;1.70;1.20;40;;;;;;;;;;;;;;;;;Part of the NGC 2079 complex in the Large Magellanic Cloud.; +NGC2085;Neb;05:40:09.83;-69:40:22.1;Dor;0.95;0.95;;;12.06;;;;;;;;;;;;;ESO 057-016;;In the Large Magellanic Cloud.; +NGC2086;Neb;05:40:12.88;-69:40:04.3;Dor;0.85;0.80;70;;12.00;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2087;G;05:44:16.03;-55:31:56.8;Pic;0.81;0.59;133;14.69;;11.91;11.28;10.90;22.81;SBa;;;;;;;;2MASX J05441600-5531565,ESO 159-026,ESO-LV 159-0260,IRAS 05433-5533,PGC 017684,TYC 8523-83-1;;; +NGC2088;OCl;05:40:59.81;-68:27:55.3;Dor;1.50;1.40;10;12.76;12.47;;;;;;;;;;;;;ESO 057-020;;In the Large Magellanic Cloud.; +NGC2089;G;05:47:51.43;-17:36:08.6;Lep;2.20;1.08;42;12.93;;9.65;9.00;8.81;23.45;E-S0;;;;;;;;2MASX J05475142-1736084,ESO 554-036,ESO-LV 554-0360,MCG -03-15-016,PGC 017860;;; +NGC2090;G;05:47:01.89;-34:15:02.2;Col;4.47;1.67;17;11.70;11.20;8.92;8.30;8.05;22.69;Sc;;;;;;;;2MASX J05470188-3415021,ESO 363-023,ESO-LV 363-0230,IRAS 05452-3416,MCG -06-13-009,PGC 017819;;Extended HIPASS source; +NGC2091;OCl;05:40:58.04;-69:26:13.5;Dor;1.30;1.20;80;12.39;12.07;;;;;;;;;;;;;ESO 057-021;;In the Large Magellanic Cloud.; +NGC2092;OCl;05:41:22.00;-69:13:27.2;Dor;1.00;0.90;90;;;;;;;;;;;;;;;ESO 057-022;;In the Large Magellanic Cloud.; +NGC2093;*Ass;05:41:49.74;-68:55:17.1;Dor;1.50;1.30;170;11.89;11.57;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2094;OCl;05:42:12.75;-68:55:06.8;Dor;0.90;0.55;100;;;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2095;OCl;05:42:36.16;-67:19:08.0;Dor;1.50;1.40;140;13.14;13.09;;;;;;;;;;;;;ESO 086-024;;In the Large Magellanic Cloud.; +NGC2096;OCl;05:42:17.80;-68:27:31.0;Dor;1.10;0.90;160;11.82;11.31;;;;;;;;;;;;;ESO 057-027;;In the Large Magellanic Cloud.; +NGC2097;GCl;05:44:16.02;-62:47:08.2;Dor;1.90;1.90;;14.05;13.67;;;;;;;;;;;;;ESO 086-028;;In the Large Magellanic Cloud.; +NGC2098;OCl;05:42:31.03;-68:16:23.4;Dor;2.20;2.00;140;10.89;10.73;;;;;;;;;;;;;2MASX J05423105-6816237,2MASX J05423105-6816237 ID,ESO 057-028;;In the Large Magellanic Cloud.; +NGC2099;OCl;05:52:18.35;+32:33:10.8;Aur;11.40;;;6.19;5.60;;;;;;;;;037;;;;MWSC 0689;;; +NGC2100;GCl;05:42:09.07;-69:12:42.6;Dor;2.50;2.50;;9.60;;;;;;;;;;;;;;ESO 057-025;;In the Large Magellanic Cloud.; +NGC2101;G;05:46:24.17;-52:05:18.7;Pic;1.24;0.65;94;13.68;;;;;22.48;IB;;;;;;;;2MASX J05462417-5205188,ESO 205-001,ESO-LV 205-0010,IRAS 05451-5206,PGC 017793;;; +NGC2102;OCl;05:42:20.49;-69:29:13.5;Dor;0.85;0.85;;;11.44;;;;;;;;;;;;;ESO 057-029;;In the Large Magellanic Cloud.; +NGC2103;HII;05:41:40.35;-71:19:59.3;Men;4.00;3.50;40;;10.82;;;;;;;;;;;;;IRAS 05423-7120;;In the Large Magellanic Cloud.; +NGC2104;G;05:47:04.73;-51:33:10.5;Pic;2.12;0.91;162;13.52;;11.42;10.75;10.58;22.83;SBm;;;;;;;;2MASX J05470477-5133106,ESO 205-002,ESO-LV 205-0020,IRAS 05459-5133,PGC 017822;;; +NGC2105;GCl;05:44:19.18;-66:55:03.4;Dor;1.70;1.50;160;12.31;12.19;;;;;;;;;;;;;ESO 086-029;;In the Large Magellanic Cloud.; +NGC2106;G;05:50:46.63;-21:34:02.1;Lep;2.43;1.22;106;13.12;;10.05;9.39;9.12;23.77;S0;;;;;;;;2MASX J05504661-2134023,ESO 555-003,ESO-LV 555-0030,MCG -04-14-040,PGC 017975;;; +NGC2107;OCl;05:43:12.88;-70:38:23.8;Men;1.70;1.70;;11.89;11.51;;;;;;;;;;;;;ESO 057-032;;In the Large Magellanic Cloud.; +NGC2108;GCl;05:43:56.87;-69:10:55.6;Dor;1.80;1.80;;12.90;12.32;;;;;;;;;;;;;2MASX J05435685-6910558,ESO 057-033;;In the Large Magellanic Cloud.; +NGC2109;OCl;05:44:22.92;-68:32:52.1;Dor;1.60;1.60;;12.55;12.21;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2110;G;05:52:11.38;-07:27:22.4;Ori;1.83;1.45;175;14.77;13.51;9.26;8.47;8.14;23.56;E-S0;;;;;;;;2MASX J05521140-0727222,IRAS 05497-0728,MCG -01-15-004,PGC 018030;;; +NGC2111;OCl;05:44:32.99;-70:59:35.7;Men;1.50;1.40;60;12.75;12.45;;;;;;;;;;;;;ESO 057-035;;In the Large Magellanic Cloud.; +NGC2112;OCl;05:53:45.21;+00:24:38.9;Ori;21.00;;;;9.10;;;;;;;;;;;;;MWSC 0692;;; +NGC2113;Cl+N;05:45:24.57;-69:46:27.0;Dor;1.10;1.10;;;;;;;;;;;;;;;;IRAS 05458-6947;;"Open cluster involved; in the Large Magellanic Cloud."; +NGC2114;OCl;05:46:12.11;-68:02:53.9;Dor;1.40;1.20;30;12.56;12.48;;;;;;;;;;;;;ESO 057-037;;In the Large Magellanic Cloud.; +NGC2115A;G;05:51:19.82;-50:34:58.3;Pic;1.21;1.06;59;14.15;;11.59;10.93;10.63;23.45;E;;;;;;;;2MASX J05511983-5034582,ESO 205-006,ESO-LV 205-0060,PGC 018001;;; +NGC2115B;G;05:51:21.21;-50:35:33.0;Pic;0.57;0.47;43;16.05;;12.93;12.36;12.12;23.56;S0-a;;;;;;;;2MASX J05512119-5035332,ESO-LV 205-0061,PGC 018002;;; +NGC2116;OCl;05:47:15.16;-68:30:28.6;Dor;1.20;1.10;160;13.16;12.92;;;;;;;;;;;;;ESO 057-038;;In the Large Magellanic Cloud.; +NGC2117;OCl;05:47:45.92;-67:27:00.6;Dor;2.00;1.80;90;12.01;11.65;;;;;;;;;;;;;ESO 086-033;;In the Large Magellanic Cloud.; +NGC2118;OCl;05:47:39.57;-69:07:54.6;Dor;1.60;1.60;;13.45;13.38;;;;;;;;;;;;;ESO 057-039;;In the Large Magellanic Cloud.; +NGC2119;G;05:57:26.95;+11:56:57.1;Ori;1.26;0.99;145;15.00;;10.01;9.25;8.94;24.36;E;;;;;;;;2MASX J05572695+1156572,PGC 018136,UGC 03380;;; +NGC2120;GCl;05:50:34.61;-63:40:39.4;Dor;2.20;2.20;;13.31;12.67;;;;;;;;;;;;;2MASX J05503456-6340396,2MASX J05503456-6340396 ID,ESO 086-034;;In the Large Magellanic Cloud.; +NGC2121;GCl;05:48:12.84;-71:28:47.2;Men;2.70;2.20;30;13.21;12.37;;;;;;;;;;;;;ESO 057-040;;In the Large Magellanic Cloud.; +NGC2122;Cl+N;05:48:52.51;-70:04:12.3;Men;6.00;5.00;50;;10.43;;;;;;;;;;;;;;;"Open cluster involved; in the Large Magellanic Cloud."; +NGC2123;GCl;05:51:43.32;-65:19:17.3;Dor;1.50;1.50;;12.78;12.56;;;;;;;;;;;;;ESO 086-036;;In the Large Magellanic Cloud.; +NGC2124;G;05:57:52.23;-20:05:04.7;Lep;2.84;0.81;4;13.44;;10.23;9.63;9.34;23.58;Sb;;;;;;;;2MASX J05575221-2005047,ESO 555-016,ESO-LV 555-0160,IRAS 05557-2005,MCG -03-16-003,PGC 018147;;; +NGC2125;OCl;05:50:54.23;-69:28:44.9;Dor;1.10;1.10;;;;;;;;;;;;;;;;ESO 057-044;;In the Large Magellanic Cloud.; +NGC2126;OCl;06:02:32.98;+49:51:57.3;Aur;5.40;;;;;;;;;;;;;;;;;MWSC 0708;;; +NGC2127;OCl;05:51:21.28;-69:21:32.6;Dor;1.50;1.50;;11.97;11.64;;;;;;;;;;;;;2MASX J05512118-6921328,2MASX J05512118-6921328 ID,ESO 057-045;;In the Large Magellanic Cloud.; +NGC2128;G;06:04:34.23;+57:37:39.9;Cam;1.44;1.01;63;13.70;;9.91;9.15;8.83;23.17;E-S0;;;;;;;;2MASX J06043422+5737401,IRAS 06002+5737,MCG +10-09-010,PGC 018374,UGC 03392;;; +NGC2129;OCl;06:01:06.54;+23:19:19.8;Gem;3.90;;;7.31;6.70;;;;;;;;;;;;;MWSC 0704;;; +NGC2130;GCl;05:52:23.72;-67:20:02.8;Dor;1.40;1.30;160;12.42;12.10;;;;;;;;;;;;;ESO 086-037;;In the Large Magellanic Cloud.; +NGC2131;G;05:58:47.52;-26:39:10.8;Lep;1.16;0.49;119;14.59;;12.59;11.93;11.83;22.89;IB;;;;;;;;2MASX J05584752-2639110,ESO 488-050,ESO-LV 488-0500,PGC 018172;;; +NGC2132;OCl;05:55:44.32;-59:55:39.8;Pic;7.80;;;;;;;;;;;;;;;;;MWSC 0694;;"20-30 stars, 17 arcmin by 11 arcmin; open cluster?"; +NGC2133;OCl;05:51:28.72;-71:10:30.1;Men;1.60;1.60;;12.04;;;;;;;;;;;;;;ESO 057-046;;In the Large Magellanic Cloud.; +NGC2134;GCl;05:51:57.70;-71:05:51.3;Men;2.80;2.80;;11.05;;;;;;;;;;;;;;2MASX J05515774-7105514,ESO 057-047;;In the Large Magellanic Cloud.; +NGC2135;GCl;05:53:35.43;-67:25:46.3;Dor;1.50;1.50;;12.22;12.05;;;;;;;;;;;;;2MASX J05533545-6725464,2MASX J05533545-6725464 ID,ESO 086-039;;In the Large Magellanic Cloud.; +NGC2136;GCl;05:52:57.75;-69:29:33.9;Dor;2.80;2.50;140;10.99;10.70;;;;;;;;;;;;;2MASX J05525769-6929342,ESO 057-048;;In the Large Magellanic Cloud.; +NGC2137;OCl;05:53:13.15;-69:28:55.1;Dor;1.10;1.00;30;12.88;12.66;;;;;;;;;;;;;ESO 057-049;;In the Large Magellanic Cloud.; +NGC2138;GCl;05:54:50.18;-65:50:13.6;Dor;1.20;1.20;;14.04;13.76;;;;;;;;;;;;;2MASX J05545015-6550139,2MASX J05545015-6550139 ID,ESO 086-040;;In the Large Magellanic Cloud.; +NGC2139;G;06:01:07.81;-23:40:21.5;Lep;2.94;2.16;124;12.10;11.71;10.23;9.66;9.34;22.80;Sc;;;;;;2154;;2MASX J06010796-2340203,ESO 488-054,ESO-LV 488-0540,IRAS 05590-2340,MCG -04-15-005,PGC 018258;;; +NGC2140;OCl;05:54:16.18;-68:35:59.4;Dor;1.50;1.50;;12.65;12.44;;;;;;;;;;;;;ESO 057-051;;In the Large Magellanic Cloud.; +NGC2141;OCl;06:02:55.06;+10:26:47.3;Ori;5.40;;;10.43;9.40;;;;;;;;;;;;;MWSC 0710;;; +NGC2142;*;06:01:50.43;-10:35:52.6;Mon;;;;4.82;4.94;5.15;5.20;5.17;;;;;;;;;;BD -10 1349,HD 040967,HIP 028574,IDS 05571-1036 AB,WDS J06018-1036AB,3 Mon;;; +NGC2143;OCl;06:03:01.56;+05:49:52.6;Ori;6.90;;;;;;;;;;;;;;;;;MWSC 0711;;; +NGC2144;G;05:40:57.19;-82:07:09.8;Men;1.46;1.15;86;13.93;;10.23;9.45;9.13;23.32;Sa;;;;;;;;2MASX J05405723-8207096,ESO 016-010,ESO-LV 16-0100,IRAS 05464-8208,PGC 017592;;; +NGC2145;OCl;05:54:23.06;-70:54:03.7;Men;1.50;1.50;;12.44;12.07;;;;;;;;;;;;;2MASX J05542432-7054133,ESO 057-052;;In the Large Magellanic Cloud.; +NGC2146;G;06:18:37.71;+78:21:25.3;Cam;5.31;4.32;123;11.38;10.59;8.23;7.42;7.06;22.76;SBab;;;;;;;;2MASX J06183771+7821252,IRAS 06106+7822,MCG +13-05-022,PGC 018797,UGC 03429;;; +NGC2146A;G;06:23:55.20;+78:31:48.4;Cam;2.72;1.10;32;13.50;12.87;11.20;10.49;10.43;23.68;SABc;;;;;;;;2MASX J06235518+7831484,IRAS 06155+7833,MCG +13-05-025,PGC 018960,UGC 03439;;; +NGC2147;OCl;05:55:45.60;-68:12:05.7;Dor;0.95;0.95;;13.20;12.94;;;;;;;;;;;;;ESO 057-054;;In the Large Magellanic Cloud.; +NGC2148;G;05:58:45.85;-59:07:33.4;Pic;1.17;0.82;157;14.59;;11.11;10.36;10.12;23.35;Sb;;;;;;;;2MASX J05584584-5907337,ESO 120-024,ESO-LV 120-0240,IRAS 05581-5907,PGC 018171;;; +NGC2149;RfN;06:03:30.79;-09:43:50.1;Mon;3.00;2.00;;;;;;;;;;;;;;;;IRAS 06010-0943,IRAS 06010-0943;;Identified as a star by Strauss, et al (1992, ApJS, 83, 29).;Dimensions taken from LEDA +NGC2150;G;05:55:46.34;-69:33:38.9;Dor;1.15;0.61;130;14.01;14.32;10.75;10.05;9.74;22.30;Sab;;;;;;;;2MASX J05554635-6933392,ESO 057-055,ESO-LV 57-0550,IRAS 05562-6933,PGC 018097;;; +NGC2151;OCl;05:56:20.44;-69:01:02.5;Dor;1.30;1.30;;;;;;;;;;;;;;;;ESO 057-057;;In the Large Magellanic Cloud.; +NGC2152;G;06:00:55.29;-50:44:27.3;Pic;1.12;0.77;71;14.75;;11.89;11.17;10.84;23.48;SBa;;;;;;;;2MASX J06005531-5044271,ESO 205-015,ESO-LV 205-0150,PGC 018249;;; +NGC2153;GCl;05:57:51.72;-66:24:02.4;Dor;1.50;1.50;;13.74;13.05;;;;;;;;;;;;;ESO 086-043;;In the Large Magellanic Cloud.; +NGC2154;GCl;05:57:37.49;-67:15:49.6;Dor;2.40;2.40;;12.47;11.79;;;;;;;;;;;;;2MASX J05573751-6715496,2MASX J05573751-6715496 ID,ESO 086-042;;In the Large Magellanic Cloud.; +NGC2155;GCl;05:58:33.21;-65:28:35.3;Dor;2.40;2.40;;13.41;12.60;;;;;;;;;;;;;ESO 086-045;;In the Large Magellanic Cloud.; +NGC2156;GCl;05:57:49.68;-68:27:38.9;Dor;2.10;2.10;;11.50;11.38;;;;;;;;;;;;;2MASX J05574962-6827388,ESO 057-059;;In the Large Magellanic Cloud.; +NGC2157;GCl;05:57:34.78;-69:11:50.0;Dor;2.80;2.80;;10.35;10.16;;;;;;;;;;;;;ESO 057-058;;In the Large Magellanic Cloud.; +NGC2158;OCl;06:07:25.61;+24:05:46.2;Gem;8.40;;;9.49;8.60;;;;;;;;;;;;;MWSC 0733;;; +NGC2159;GCl;05:58:03.88;-68:37:22.5;Dor;1.90;1.90;;11.66;11.38;;;;;;;;;;;;;2MASX J05580385-6837229,2MASX J05580385-6837229 ID,ESO 057-060;;In the Large Magellanic Cloud.; +NGC2160;OCl;05:58:12.84;-68:17:22.5;Dor;1.40;1.40;;12.36;12.16;;;;;;;;;;;;;ESO 057-061;;In the Large Magellanic Cloud.; +NGC2161;GCl;05:55:43.06;-74:21:14.2;Men;2.30;2.30;;13.75;12.95;;;;;;;;;;;;;ESO 033-031;;In the Large Magellanic Cloud.; +NGC2162;GCl;06:00:30.17;-63:43:17.2;Dor;3.00;3.00;;13.38;12.70;;;;;;;;;;;;;2MASX J06003017-6343172,ESO 086-047;;In the Large Magellanic Cloud.; +NGC2163;RfN;06:07:49.54;+18:39:26.8;Ori;3.00;2.00;;;;;;;;;;;;;;;;IRAS 06048+1839,LBN 855;;; +NGC2164;GCl;05:58:56.26;-68:30:57.2;Dor;2.80;2.80;;10.44;10.34;;;;;;;;;;;;;2MASX J05585634-6830572,ESO 057-062;;In the Large Magellanic Cloud.; +NGC2165;OCl;06:11:04.21;+51:40:38.3;Aur;;;;;;;;;;;;;;;;;;;;; +NGC2166;OCl;05:59:34.14;-67:56:32.4;Dor;1.40;1.40;;13.12;12.86;;;;;;;;;;;;;2MASX J05593416-6756324,ESO 057-064;;In the Large Magellanic Cloud.; +NGC2167;*;06:06:58.56;-06:12:09.5;Mon;;;;6.78;6.58;6.21;6.19;6.13;;;;;;;;;;BD -06 1412,HD 041794,HIP 028985,TYC 4794-1529-1;;; +NGC2168;OCl;06:09:05.06;+24:20:19.1;Gem;24.00;;;5.31;5.10;;;;;;;;;035;;;;MWSC 0754;;; +NGC2169;OCl;06:08:24.35;+13:57:53.5;Ori;7.20;;;5.99;5.90;;;;;;;;;;;;;MWSC 0740;;; +NGC2170;RfN;06:07:31.82;-06:23:57.5;Mon;2.00;2.00;;;;;;;;;;;;;;;;LBN 994;;; +NGC2171;Other;05:58:59.64;-70:43:08.8;Men;;;;;;;;;;;;;;;;;;;;Nonexistent object. Perhaps an LMC star cloud with RA error?; +NGC2172;OCl;06:00:05.84;-68:38:12.9;Dor;1.70;1.70;;11.93;11.75;;;;;;;;;;;;;ESO 057-065;;In the Large Magellanic Cloud.; +NGC2173;GCl;05:57:58.88;-72:58:28.3;Men;2.60;2.60;;12.74;11.88;;;;;;;;;;;;;2MASX J05575887-7258282,ESO 033-034;;In the Large Magellanic Cloud.; +NGC2174;Neb;06:09:23.62;+20:39:34.5;Ori;40.00;30.00;;;;;;;;;;;;;;;;;Monkey Head Nebula;;Dimensions taken from LEDA +NGC2175;Cl+N;06:09:39.55;+20:29:15.3;Ori;5.40;;;7.00;6.80;;;;;;;;;;;;;LBN 854,MWSC 0764;;Position is for SAO 078049.; +NGC2176;OCl;06:01:19.38;-66:51:11.7;Dor;1.10;1.00;20;;;;;;;;;;;;;;;ESO 086-050;;In the Large Magellanic Cloud.; +NGC2177;OCl;06:01:16.49;-67:43:59.7;Dor;1.50;1.40;160;12.97;12.83;;;;;;;;;;;;;ESO 057-066;;In the Large Magellanic Cloud.; +NGC2178;G;06:02:47.58;-63:45:49.3;Pic;1.27;1.00;73;13.64;;10.93;10.23;9.95;23.07;E;;;;;;;;2MASX J06024755-6345490,ESO 086-053,ESO-LV 86-0530,PGC 018322;;; +NGC2179;G;06:08:02.22;-21:44:48.1;Lep;1.99;1.44;165;13.33;12.45;10.16;9.48;9.22;23.39;S0-a;;;;;;;;2MASX J06080220-2144480,ESO 555-038,ESO-LV 555-0380,MCG -04-15-011,PGC 018453;;; +NGC2180;OCl;06:09:36.25;+04:42:41.8;Ori;4.20;;;9.00;;;;;;;;;;;;;;MWSC 0765;;; +NGC2181;GCl;06:02:43.66;-65:15:53.5;Dor;1.50;1.50;;13.93;13.64;;;;;;;;;;;;;ESO 086-054;;In the Large Magellanic Cloud.; +NGC2182;RfN;06:09:30.95;-06:19:35.2;Mon;3.00;2.00;;9.00;;;;;;;;;;;;;;IRAS 06070-0619,LBN 998;;; +NGC2183;HII;06:10:46.93;-06:12:42.6;Mon;12.00;;;15.15;;;;;;;;;;;;;;LBN 996,MWSC 0779;;;B-Mag taken from LEDA +NGC2184;OCl;06:10:59.67;-03:29:42.6;Ori;6.60;;;;;;;;;;;;;;;;;MWSC 0784;;; +NGC2185;Neb;06:11:00.47;-06:13:36.7;Mon;2.00;2.00;;12.90;;;;;;;;;;;;;;LBN 997;;; +NGC2186;OCl;06:12:07.13;+05:27:30.9;Ori;4.20;;;9.20;8.70;;;;;;;;;;;;;MWSC 0787;;; +NGC2187A;G;06:03:44.25;-69:35:17.9;Dor;3.52;1.66;75;13.06;;10.90;10.15;9.96;24.34;S0-a;;;;;;;;2MASX J06034421-6935176,ESO-LV 57-0681,PGC 018355;;; +NGC2187B;G;06:03:52.42;-69:34:38.8;Dor;2.67;2.18;87;13.16;;9.99;9.20;9.01;24.28;E;;;;;;;;2MASX J06035244-6934387,PGC 018354;;; +NGC2188;G;06:10:09.53;-34:06:22.3;Col;5.42;1.33;177;12.10;11.82;12.43;11.84;11.61;23.26;SBm;;;;;;;;2MASX J06100970-3406499,ESO 364-037,ESO-LV 364-0370,IRAS 06083-3406,MCG -06-14-008,PGC 018536;;The 2MASX source may be a superposed star in southern part of NGC 2188.; +NGC2189;Other;06:12:09.99;+01:03:57.5;Ori;;;;;;;;;;;;;;;;;;;;Two groups of Galactic stars, not clusters. ID as NGC 2189 is uncertain.; +NGC2190;GCl;06:01:01.79;-74:43:31.5;Men;2.20;2.20;;13.57;12.94;;;;;;;;;;;;;2MASX J06005985-7443372,ESO 033-036;;In the Large Magellanic Cloud.; +NGC2191;G;06:08:23.87;-52:30:44.3;Pic;1.77;0.86;122;13.26;;9.94;9.28;9.06;23.16;S0;;;;;;;;2MASX J06082387-5230441,ESO 160-014,ESO-LV 160-0140,PGC 018464;;; +NGC2192;OCl;06:15:17.43;+39:51:18.8;Aur;5.40;;;;10.90;;;;;;;;;;;;;MWSC 0820;;; +NGC2193;GCl;06:06:17.52;-65:05:55.6;Dor;1.70;1.70;;14.13;13.42;;;;;;;;;;;;;2MASX J06061755-6505555,ESO 086-057;;In the Large Magellanic Cloud.; +NGC2194;OCl;06:13:45.91;+12:48:24.0;Ori;8.70;;;9.03;8.50;;;;;;;;;;;;;MWSC 0803;;; +NGC2195;**;06:14:33.81;+17:38:21.8;Ori;;;;;;;;;;;;;;;;;;;;; +NGC2196;G;06:12:09.65;-21:48:21.4;CMa;2.77;2.16;45;11.98;;9.07;8.40;8.13;22.78;Sa;;;;;;;;2MASX J06120963-2148212,ESO 556-004,ESO-LV 556-0040,IRAS 06100-2147,MCG -04-15-014,PGC 018602,UGCA 121;;; +NGC2197;GCl;06:06:07.31;-67:05:50.0;Dor;1.80;1.60;80;13.82;13.45;;;;;;;;;;;;;2MASX J06060728-6705499,2MASX J06060728-6705499 ID,ESO 086-058;;In the Large Magellanic Cloud.; +NGC2198;Other;06:13:54.91;+00:59:40.8;Ori;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC2199;G;06:04:44.95;-73:23:59.4;Men;2.21;0.88;38;13.76;;10.41;9.67;9.43;23.77;Sa;;;;;;;;2MASX J06044492-7323594,ESO 034-003,ESO-LV 34-0030,PGC 018379;;; +NGC2200;G;06:13:17.58;-43:39:47.4;Pup;1.21;0.94;168;14.89;;12.59;11.92;11.89;23.74;SBc;;;;;;;;2MASX J06131758-4339475,ESO 254-039,ESO-LV 254-0390,MCG -07-13-006,PGC 018652;;; +NGC2201;G;06:13:31.61;-43:42:17.0;Pup;1.03;0.72;111;14.25;;11.47;10.75;10.50;22.86;SABb;;;;;;;;2MASX J06133161-4342170,ESO 254-040,ESO-LV 254-0400,MCG -07-13-007,PGC 018658;;; +NGC2202;OCl;06:16:50.75;+05:59:46.2;Ori;4.80;;;;;;;;;;;;;;;;;MWSC 0828;;; +NGC2203;GCl;06:04:42.55;-75:26:18.3;Men;3.20;3.20;;12.80;11.29;;;;;;;;;;;;;ESO 034-004;;In the Large Magellanic Cloud.; +NGC2204;OCl;06:15:32.22;-18:39:57.1;CMa;6.30;;;9.35;8.60;;;;;;;;;;;;;MWSC 0822;;; +NGC2205;G;06:10:32.73;-62:32:18.3;Pic;1.30;0.99;77;13.71;;10.67;10.01;9.65;23.05;E-S0;;;;;;;;2MASX J06103272-6232184,ESO 086-063,ESO-LV 86-0630,PGC 018551;;; +NGC2206;G;06:15:59.84;-26:45:55.7;CMa;2.45;1.07;136;12.91;;10.24;9.57;9.30;22.96;Sbc;;;;;;;;2MASX J06155983-2645555,ESO 489-026,ESO-LV 489-0260,IRAS 06140-2644,MCG -04-15-019,PGC 018736,UGCA 123;;; +NGC2207;G;06:16:22.03;-21:22:21.6;CMa;4.86;2.71;116;11.48;10.65;9.11;8.49;8.19;23.84;SABc;;;;;;;;2MASX J06162209-2122217,ESO 556-008,ESO-LV 556-0080,IRAS 06142-2121,MCG -04-15-020,PGC 018749,UGCA 124;;HOLM 085B is part of the inner ring of NGC 2207.; +NGC2208;G;06:22:34.68;+51:54:34.1;Aur;1.73;1.00;107;13.70;12.61;10.08;9.35;9.04;23.91;S0;;;;;;;;2MASX J06223463+5154345,MCG +09-11-010,PGC 018911,UGC 03452;;; +NGC2209;GCl;06:08:35.91;-73:50:18.3;Men;2.90;2.90;;13.58;13.15;;;;;;;;;;;;;2MASX J06083595-7350181,2MASX J06083595-7350181 ID,ESO 034-006;;In the Large Magellanic Cloud.; +NGC2210;GCl;06:11:31.36;-69:07:17.0;Dor;3.30;3.30;;10.90;10.94;9.48;8.91;8.88;;;;;;;;;;2MASX J06113129-6907170,ESO 057-071;;In the Large Magellanic Cloud.; +NGC2211;G;06:18:30.36;-18:32:14.2;CMa;1.39;0.73;24;13.70;;10.37;9.65;9.40;23.12;S0;;;;;;;;2MASX J06183035-1832139,ESO 556-013,ESO-LV 556-0130,MCG -03-16-021,PGC 018794;;; +NGC2212;G;06:18:35.76;-18:31:10.1;CMa;1.28;0.69;147;14.49;;12.58;11.95;12.11;23.80;S0-a;;;;;;;;2MASX J06183576-1831099,ESO 556-014,ESO-LV 556-0140,MCG -03-16-022,PGC 018796;;; +NGC2213;OCl;06:10:41.94;-71:31:42.4;Men;2.10;2.10;;13.09;12.38;;;;;;;;;;;;;2MASX J06104194-7131423,ESO 057-070;;In the Large Magellanic Cloud.; +NGC2214;OCl;06:12:56.93;-68:15:38.6;Dor;3.10;3.10;;11.04;10.93;;;;;;;;;;;;;;;In the Large Magellanic Cloud.; +NGC2215;OCl;06:20:49.25;-07:17:01.6;Mon;8.40;;;8.85;8.45;;;;;;;;;;;;;MWSC 0843;;; +NGC2216;G;06:21:30.74;-22:05:14.8;CMa;1.43;1.11;20;13.70;;10.78;10.05;9.74;23.00;SABa;;;;;;;;2MASX J06213076-2205146,ESO 556-017,ESO-LV 556-0170,IRAS 06194-2203,MCG -04-15-027,PGC 018877;;; +NGC2217;G;06:21:39.78;-27:14:01.5;CMa;4.63;4.12;113;11.04;11.93;8.00;7.30;7.09;23.69;S0-a;;;;;;;;2MASX J06213977-2714014,ESO 489-042,ESO-LV 489-0420,IRAS 06196-2712,MCG -05-15-010,PGC 018883;;Confused HIPASS source; +NGC2218;Other;06:24:41.49;+19:20:28.7;Gem;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC2219;OCl;06:23:44.32;-04:40:38.2;Mon;4.20;;;;;;;;;;;;;;;;;MWSC 0855;;; +NGC2220;Other;06:21:10.76;-44:45:35.2;Pup;4.20;;;;;;;;;;;;;;;;;;;Aggregate of 9-10 bright stars involving SAO 217873.; +NGC2221;G;06:20:15.72;-57:34:42.3;Pic;2.41;0.51;179;13.86;;11.19;10.43;10.08;23.83;Sa;;;;;;;;2MASX J06201571-5734423,ESO 121-024,ESO-LV 121-0240,IRAS 06194-5733,PGC 018833;;; +NGC2222;G;06:20:17.06;-57:32:04.1;Pic;1.35;0.38;148;14.21;;;;;23.07;SBa;;;;;;;;2MASX J06201707-5732043,ESO 121-025,ESO-LV 121-0250,PGC 018835;;; +NGC2223;G;06:24:35.91;-22:50:17.7;CMa;2.82;2.25;9;12.46;;9.81;9.14;8.85;23.36;Sbc;;;;;;;;2MASX J06243588-2250176,ESO 489-049,ESO-LV 489-0490,IRAS 06224-2248,MCG -04-16-002,PGC 018978,UGCA 129;;; +NGC2224;Other;06:27:28.59;+12:35:36.2;Gem;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC2225;OCl;06:26:34.49;-09:37:50.7;Mon;3.60;;;;;;;;;;;;;;;;;MWSC 0868;;; +NGC2226;OCl;06:26:37.58;-09:38:34.0;Mon;;;;;;;;;;;;;;;;;;;;; +NGC2227;G;06:25:57.98;-22:00:17.4;CMa;2.27;1.21;21;13.40;;10.59;10.26;9.68;22.86;Sc;;;;;;;;2MASX J06255797-2200174,ESO 556-023,ESO-LV 556-0230,IRAS 06238-2158,MCG -04-16-004,PGC 019030;;; +NGC2228;G;06:21:15.54;-64:27:31.8;Dor;0.99;0.84;42;14.60;;10.81;10.13;9.79;23.32;S0;;;;;;;;2MASX J06211557-6427319,ESO 087-007,ESO-LV 87-0070,PGC 018862;;; +NGC2229;G;06:21:23.68;-64:57:24.0;Dor;1.24;0.52;132;14.40;;11.00;10.25;9.99;23.59;S0-a;;;;;;;;2MASX J06212367-6457240,ESO 087-008,ESO-LV 87-0080,PGC 018867;;; +NGC2230;G;06:21:27.56;-64:59:34.0;Dor;1.32;0.65;93;14.08;;10.62;9.89;9.66;23.53;E;;;;;;;;2MASX J06212758-6459340,ESO 087-009,ESO-LV 87-0090,PGC 018873;;; +NGC2231;GCl;06:20:42.97;-67:31:06.6;Dor;2.10;2.10;;13.87;13.20;12.00;11.60;11.27;;;;;;;;;;ESO 087-006;;In the Large Magellanic Cloud.; +NGC2232;OCl;06:28:01.13;-04:50:50.8;Mon;9.90;;;;3.90;;;;;;;;;;;;;MWSC 0861;;; +NGC2233;G;06:21:40.06;-65:02:00.1;Dor;0.98;0.37;43;14.86;;11.47;10.82;10.47;23.68;E;;;;;;;;2MASX J06214003-6502001,ESO 087-011,ESO-LV 87-0110,PGC 018882;;; +NGC2234;OCl;06:29:21.68;+16:43:22.3;Gem;4.20;;;;;;;;;;;;;;;;;MWSC 0878;;; +NGC2235;G;06:22:21.91;-64:56:03.9;Dor;1.41;1.15;57;14.00;;10.42;9.76;9.35;23.61;E;;;;;;;;2MASX J06222206-6456025,ESO 087-013,ESO-LV 87-0130,PGC 018906;;; +NGC2236;OCl;06:29:39.70;+06:49:50.5;Mon;5.40;;;9.08;8.50;;;;;;;;;;;;;MWSC 0881;;; +NGC2237;Neb;06:30:54.61;+05:02:57.0;Mon;80.00;50.00;;;;;;;;;;;;;;;;;Rosette A;;Dimensions taken from LEDA +NGC2238;HII;06:30:40.37;+05:00:47.0;Mon;80.00;60.00;;6.00;;;;;;;;;;;;;;C 049,LBN 948;Rosette Nebula;;B-Mag taken from LEDA +NGC2239;Cl+N;06:31:55.56;+04:56:34.6;Mon;9.30;;;5.26;4.80;;;;;;;;;;2244;;;C 050,MWSC 0896;;; +NGC2240;OCl;06:33:10.55;+35:15:00.7;Aur;3.60;;;;;;;;;;;;;;;;;MWSC 0900;;; +NGC2241;OCl;06:22:51.36;-68:55:31.4;Dor;1.60;1.60;;14.02;13.25;;;;;;;;;;;;;2MASX J06225134-6855313,2MASX J06225134-6855313 ID,ESO 057-079;;In the Large Magellanic Cloud.; +NGC2242;PN;06:34:07.24;+44:46:37.3;Aur;0.37;;;15.10;15.00;;;;;;;17.40;17.60;;;;;IRAS 06304+4448,PN G170.3+15.8;;This is a Galactic planetary nebula (1988PASP..100.1423M).; +NGC2243;OCl;06:29:34.48;-31:16:52.8;CMa;5.10;;;10.12;9.40;;;;;;;;;;;;;MWSC 0880;;; +NGC2244;Dup;06:31:55.56;+04:56:34.6;Mon;;;;;;;;;;;;;;;2239;;;;;; +NGC2245;RfN;06:32:41.25;+10:09:23.9;Mon;2.00;2.00;;11.00;;;;;;;;;;;;;;2MASX J06323890+1009067,LBN 904;;; +NGC2246;Neb;06:32:33.80;+05:07:41.8;Mon;10.00;10.00;90;;;;;;;;;;;;;;;;Rosette B;; +NGC2247;RfN;06:33:05.20;+10:19:20.1;Mon;2.00;2.00;;8.50;;;;;;;;;;;;;;BD +10 1172,HIP 031235,LBN 901;;; +NGC2248;Other;06:34:35.75;+26:18:16.0;Gem;;;;;;;;;;;;;;;;;;;;Nine Galactic stars.; +NGC2249;GCl;06:25:49.57;-68:55:11.2;Dor;2.30;2.30;;12.66;12.23;;;;;;;;;;;;;ESO 057-082;;In the Large Magellanic Cloud.; +NGC2250;OCl;06:33:49.88;-05:05:04.0;Mon;5.10;;;;8.90;;;;;;;;;;;;;MWSC 0905;;; +NGC2251;OCl;06:34:38.48;+08:21:59.0;Mon;5.70;;;7.69;7.30;;;;;;;;;;;;;MWSC 0916;;; +NGC2252;OCl;06:34:42.97;+05:21:58.5;Mon;6.60;;;;7.70;;;;;;;;;;;;;MWSC 0911;;; +NGC2253;G;06:43:41.84;+65:12:22.6;Cam;1.43;1.05;130;13.00;;10.45;9.83;9.49;22.38;Sc;;;;;;;;2MASX J06434181+6512225,IRAS 06387+6515,MCG +11-09-008,PGC 019501,UGC 03511;;Identification as NGC 2253 is very uncertain.; +NGC2254;OCl;06:35:49.66;+07:40:23.8;Mon;4.20;;;9.75;9.10;;;;;;;;;;;;;MWSC 0924;;; +NGC2255;G;06:33:58.63;-34:48:45.3;Col;1.47;0.78;159;14.16;;11.72;11.15;10.76;23.20;Sc;;;;;;;;2MASX J06335861-3448454,ESO 365-031,ESO-LV 365-0310,IRAS 06321-3446,MCG -06-15-010,PGC 019260;;; +NGC2256;G;06:47:13.97;+74:14:11.5;Cam;2.17;1.97;65;14.00;;9.67;8.90;8.67;24.38;E-S0;;;;;;;;2MASX J06471396+7414114,MCG +12-07-015,PGC 019602,TYC 4370-55-1,UGC 03519;;; +NGC2257;GCl;06:30:13.86;-64:19:32.2;Dor;4.00;4.00;;13.24;12.62;;;;;;;;;;;;;2MASX J06301388-6419324,2MASX J06301388-6419324 ID,ESO 087-024;;In the Large Magellanic Cloud.; +NGC2258;G;06:47:45.80;+74:28:54.0;Cam;3.02;1.91;150;13.20;;9.22;8.21;8.23;24.13;S0;;;;;;;;2MASX J06474618+7428546,MCG +12-07-016,PGC 019622,UGC 03523;;; +NGC2259;OCl;06:38:21.44;+10:53:01.0;Mon;6.00;;;;10.80;;;;;;;;;;;;;MWSC 0940;;; +NGC2260;OCl;06:38:03.07;-01:28:22.2;Mon;;;;;;;;;;;;;;;;;;;;; +NGC2261;RfN;06:39:09.51;+08:44:39.6;Mon;2.00;1.00;;12.46;11.85;9.69;8.03;6.38;;;;;;;;;;C 046,LBN 920;Hubble's Nebula;; +NGC2262;OCl;06:39:38.08;+01:08:37.1;Mon;3.90;;;11.30;;;;;;;;;;;;;;MWSC 0946;;; +NGC2263;G;06:38:28.84;-24:50:55.3;CMa;2.86;1.77;144;12.86;;10.18;9.41;9.14;23.58;SBab;;;;;;;;2MASX J06382884-2450551,ESO 490-019,ESO-LV 490-0190,IRAS 06364-2448,MCG -04-16-014,PGC 019355;;; +NGC2264;Cl+N;06:40:58.25;+09:53:43.7;Mon;11.40;;;;3.90;;;;;;;;;;;;;LBN 911,MWSC 0954;Christmas Tree Cluster;; +NGC2265;OCl;06:41:41.64;+11:54:16.7;Gem;4.50;;;;;;;;;;;;;;;;;MWSC 0959;;Group of Galactic stars.; +NGC2266;OCl;06:43:19.21;+26:58:10.4;Gem;4.20;;;;9.50;;;;;;;;;;;;;MWSC 0967;;; +NGC2267;G;06:40:51.70;-32:28:56.2;CMa;1.71;1.44;110;13.24;;9.97;9.24;9.04;23.16;S0;;;;;;;;2MASX J06405169-3228561,ESO 426-029,ESO-LV 426-0290,MCG -05-16-015,PGC 019417;;; +NGC2268;G;07:14:17.44;+84:22:56.2;Cam;2.14;0.93;73;12.10;;9.56;8.87;8.59;22.02;Sbc;;;;;;;;2MASX J07141744+8422561,IRAS 07006+8427,MCG +14-04-022,PGC 020458,SDSS J071417.40+842256.2,UGC 03653;;; +NGC2269;OCl;06:43:17.08;+04:37:27.5;Mon;4.80;;;10.42;10.00;;;;;;;;;;;;;MWSC 0966;;; +NGC2270;OCl;06:43:57.76;+03:28:42.6;Mon;5.40;;;;;;;;;;;;;;;;;MWSC 0971;;; +NGC2271;G;06:42:52.99;-23:28:33.6;CMa;1.77;1.29;78;13.17;;9.69;8.95;8.68;23.18;E-S0;;;;;;;;2MASX J06425299-2328333,ESO 490-034,ESO-LV 490-0340,MCG -04-16-017,PGC 019476;;; +NGC2272;G;06:42:41.30;-27:27:34.2;CMa;2.19;1.54;118;12.74;11.88;9.63;8.92;8.72;23.31;E-S0;;;;;;;;2MASX J06424130-2727341,ESO 490-033,ESO-LV 490-0330,MCG -05-16-017,PGC 019466;;; +NGC2273;G;06:50:08.66;+60:50:44.9;Lyn;2.29;1.39;63;14.50;13.54;9.45;8.77;8.48;22.93;Sa;;;;;;;;2MASX J06500866+6050445,IRAS 06456+6054,MCG +10-10-015,PGC 019688,UGC 03546;;; +NGC2273A;G;06:40:07.09;+60:04:50.4;Lyn;2.00;1.19;119;13.30;;11.69;10.36;10.40;23.25;SABc;;;;;;;;2MASX J06400704+6004503,IRAS 06356+6007,MCG +10-10-009,PGC 019397,UGC 03504;;; +NGC2273B;G;06:46:31.58;+60:20:25.4;Lyn;1.48;0.61;47;14.10;;12.36;12.11;11.78;22.24;Sc;;;;;;;;2MASX J06463158+6020252,IRAS 06421+6023,MCG +10-10-013,PGC 019579,UGC 03530;;; +NGC2274;G;06:47:17.37;+33:34:01.9;Gem;1.78;1.77;170;13.60;;9.66;8.94;8.68;23.65;E;;;;;;;;2MASX J06471737+3334021,MCG +06-15-008,PGC 019603,UGC 03541;;; +NGC2275;G;06:47:17.93;+33:35:57.2;Gem;2.51;0.78;3;14.50;;10.64;9.97;9.75;24.07;Sa;;;;;;;;2MASX J06471794+3335571,MCG +06-15-007,PGC 019605,UGC 03542;;; +NGC2276;G;07:27:14.36;+85:45:16.4;Cep;2.23;1.73;19;12.30;;10.08;9.46;9.08;22.26;SABc;;;;;;;;2MASX J07271181+8544540,2MASX J07271448+8545162,IRAS 07101+8550,MCG +14-04-028,PGC 021039,UGC 03740;;; +NGC2277;Other;06:47:47.03;+33:27:04.6;Gem;;;;;;;;;;;;;;;;;;;;Five Galactic stars.; +NGC2278;**;06:48:16.42;+33:23:39.5;Gem;;;;;;;;;;;;;;;;;;;;; +NGC2279;Other;06:48:24.85;+33:24:54.9;Gem;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC2280;G;06:44:49.11;-27:38:19.0;CMa;6.53;2.84;164;11.13;;9.15;8.50;8.26;23.17;Sc;;;;;;;;2MASX J06444911-2738189,ESO 427-002,ESO-LV 427-0020,IRAS 06428-2735,MCG -05-16-020,PGC 019531,UGCA 131;;Extended HIPASS source; +NGC2281;OCl;06:48:17.84;+41:04:43.9;Aur;10.80;;;6.05;5.40;;;;;;;;;;;;;MWSC 0989;;; +NGC2282;HII;06:46:51.57;+01:18:57.6;Mon;3.00;3.00;;10.00;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC2283;G;06:45:52.69;-18:12:37.2;CMa;2.76;2.01;178;12.94;;;;;23.62;Sc;;;;;;;;ESO 557-013,ESO-LV 557-0130,IRAS 06436-1809,MCG -03-18-002,PGC 019562;;The identification as IC 2171 is questionable.; +NGC2284;Other;06:49:09.56;+33:11:37.7;Gem;;;;;;;;;;;;;;;;;;;;Four Galactic stars. NGC identification is not certain.; +NGC2285;**;06:49:36.02;+33:21:52.8;Gem;;;;;;;;;;;;;;;;;;;;; +NGC2286;OCl;06:47:40.17;-03:08:51.6;Mon;5.40;;;8.16;7.50;;;;;;;;;;;;;MWSC 0987;;; +NGC2287;OCl;06:45:59.94;-20:45:15.2;CMa;12.00;;;4.89;4.50;;;;;;;;;041;;;;MWSC 0978;;; +NGC2288;G;06:50:51.96;+33:27:44.8;Gem;0.17;0.17;105;14.60;;12.61;12.00;11.65;20.22;;;;;;;;;2MASX J06505195+3327444,MCG +06-15-011,PGC 019714;;; +NGC2289;G;06:50:53.61;+33:28:43.2;Gem;1.21;0.81;110;14.60;;10.93;10.23;9.98;23.39;S0;;;;;;;;2MASX J06505355+3328434,MCG +06-15-010,PGC 019716,UGC 03560;;; +NGC2290;G;06:50:56.92;+33:26:15.3;Gem;0.81;0.52;57;14.60;;10.97;10.19;10.01;22.07;Sa;;;;;;;;2MASX J06505690+3326154,MCG +06-15-012,PGC 019718,UGC 03562;;; +NGC2291;G;06:50:58.64;+33:31:30.3;Gem;0.93;0.89;165;15.30;;11.31;10.63;10.22;22.84;S0;;;;;;;;2MASX J06505858+3331305,MCG +06-15-013,PGC 019719;;; +NGC2292;G;06:47:39.65;-26:44:46.5;CMa;4.34;3.78;154;11.82;;;;;23.76;S0;;;;;;;;ESO 490-048,ESO-LV 490-0480,MCG -04-16-022,PGC 019617;;; +NGC2293;G;06:47:42.91;-26:45:15.7;CMa;4.41;3.44;130;11.70;;8.50;7.83;7.51;24.17;S0-a;;;;;;;;2MASX J06474291-2645156,ESO 490-049,ESO-LV 490-0490,MCG -04-16-023,PGC 019619;;; +NGC2294;G;06:51:11.30;+33:31:37.6;Gem;0.91;0.33;5;15.00;;11.38;10.56;10.27;23.49;E;;;;;;;;2MASX J06511130+3331374,IRAS 06478+3335,MCG +06-15-014,PGC 019729;;; +NGC2295;G;06:47:23.42;-26:44:10.5;CMa;2.31;0.64;49;13.58;;9.74;8.99;8.67;23.44;Sab;;;;;;;;2MASX J06472341-2644103,ESO 490-047,ESO-LV 490-0470,MCG -04-16-021,PGC 019607;;; +NGC2296;G;06:48:39.11;-16:54:05.8;CMa;1.20;0.96;20;13.60;;;;;22.77;E;;;;;;0452;;IRAS 06464-1650,IRAS 06464-1650,MCG -03-18-003,PGC 019643;;Claimed to be a galactic object by Takata et al. (1994, A&AS, 104, 529).; +NGC2297;G;06:44:24.59;-63:43:02.4;Pic;1.48;0.90;4;13.75;;11.00;10.32;9.97;22.62;Sbc;;;;;;;;2MASX J06442460-6343021,ESO 087-040,ESO-LV 87-0400,IRAS 06440-6339,PGC 019524;;; +NGC2298;GCl;06:48:59.20;-36:00:19.1;Pup;4.80;;;10.77;8.89;;;;;;;;;;;;;ESO 366-022,MWSC 0992;;; +NGC2299;OCl;06:51:53.68;-07:04:57.8;Mon;4.80;;;9.06;8.90;;;;;;;;;;2302;;;MWSC 1001;;; +NGC2300;G;07:32:19.97;+85:42:34.2;Cep;3.05;2.34;74;12.20;;8.60;7.92;7.63;23.33;E-S0;;;;;;;;2MASX J07322048+8542319,MCG +14-04-031,PGC 021231,UGC 03798;;; +NGC2301;OCl;06:51:45.30;+00:27:33.1;Mon;10.80;;;6.30;6.00;;;;;;;;;;;;;MWSC 1000;Great Bird Cluster;; +NGC2302;Dup;06:51:53.68;-07:04:57.8;Mon;;;;;;;;;;;;;;;2299;;;;;; +NGC2303;G;06:56:17.50;+45:29:33.9;Lyn;1.53;1.36;71;13.90;;10.54;9.81;9.53;23.73;E;;;;;;;;2MASX J06561754+4529342,MCG +08-13-031,PGC 019891,UGC 03603;;; +NGC2304;OCl;06:55:11.61;+17:59:34.0;Gem;4.80;;;;10.00;;;;;;;;;;;;;MWSC 1019;;; +NGC2305;G;06:48:37.37;-64:16:23.5;Vol;1.94;1.04;137;12.82;;9.35;8.67;8.45;23.02;E;;;;;;;;2MASX J06483729-6416240,ESO 087-044,ESO-LV 87-0440,ESO-LV 870-0440,PGC 019641;;; +NGC2306;OCl;06:54:29.56;-07:12:14.9;Mon;6.60;;;;;;;;;;;;;;;;;MWSC 1014;;; +NGC2307;G;06:48:50.79;-64:20:07.9;Vol;1.85;1.72;145;13.38;;10.22;9.54;9.24;22.98;SBb;;;;;;;;2MASX J06485080-6420080,ESO 087-045,ESO-LV 87-0450,ESO-LV 870-0450,PGC 019648;;; +NGC2308;G;06:58:37.59;+45:12:38.0;Lyn;1.47;0.98;171;14.40;;10.70;9.97;9.66;23.68;Sab;;;;;;;;2MASX J06583763+4512381,MCG +08-13-037,PGC 019949,UGC 03618;;; +NGC2309;OCl;06:56:03.61;-07:10:27.5;Mon;5.40;;;;10.50;;;;;;;;;;;;;MWSC 1026;;; +NGC2310;G;06:53:53.96;-40:51:45.4;Pup;4.52;0.95;46;12.68;11.76;9.39;8.72;8.48;23.85;S0;;;;;;;;2MASX J06535395-4051453,ESO 309-007,ESO-LV 309-0070,MCG -07-15-001,PGC 019811;;; +NGC2311;OCl;06:57:47.55;-04:36:40.8;Mon;6.00;;;;9.60;;;;;;;;;;;;;MWSC 1035;;; +NGC2312;OCl;06:58:46.74;+10:17:40.1;Mon;3.00;;;;;;;;;;;;;;;;;MWSC 1043;;; +NGC2313;*;06:58:02.80;-07:56:42.1;Mon;;;;14.20;;;;;;;;;;;;;;IRAS 06556-0752;;;Variable Star of Orion Type. +NGC2314;G;07:10:32.55;+75:19:36.0;Cam;1.32;1.03;17;13.10;;9.87;9.15;8.88;22.58;E;;;;;;;;2MASX J07103256+7519358,MCG +13-06-003,PGC 020305,UGC 03677;;; +NGC2315;G;07:02:33.06;+50:35:26.1;Lyn;1.57;0.30;116;14.50;;10.77;9.99;9.67;23.78;S0-a;;;;;;;;2MASX J07023303+5035261,MCG +08-13-045,PGC 020045,UGC 03633;;; +NGC2316;Neb;06:59:40.85;-07:46:39.9;Mon;4.00;3.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC2317;Neb;06:59:41.59;-07:46:28.2;Mon;;;;;;;;;;;;;;;;;;2MASX J06594157-0746285;;; +NGC2318;OCl;06:59:27.02;-13:41:54.2;CMa;4.50;;;;;;;;;;;;;;;;;MWSC 1050;;; +NGC2319;OCl;07:00:32.21;+03:02:31.9;Mon;6.00;;;11.76;11.85;11.47;11.47;11.38;;;;;;;;;;MWSC 1064;;; +NGC2320;G;07:05:42.03;+50:34:51.8;Lyn;1.48;0.83;138;13.90;;9.91;9.18;8.85;22.61;E;;;;;;;;2MASX J07054202+5034519,MCG +08-13-051,PGC 020136,UGC 03659;;; +NGC2321;G;07:05:59.00;+50:45:21.7;Lyn;1.28;1.04;128;14.80;;11.26;10.50;10.22;23.99;Sa;;;;;;;;2MASX J07055903+5045210,MCG +08-13-053,PGC 020141,UGC 03663;;; +NGC2322;G;07:06:00.30;+50:30:37.1;Lyn;1.11;0.41;134;14.60;;10.99;10.19;9.93;23.07;SBa;;;;;;;;2MASX J07060028+5030370,MCG +08-13-054,PGC 020142,UGC 03662;;; +NGC2323;OCl;07:02:40.47;-08:21:50.5;Mon;14.10;;;6.27;5.90;;;;;;;;;050;;;;MWSC 1072;;; +NGC2324;OCl;07:04:07.96;+01:02:40.6;Mon;8.70;;;8.83;8.40;;;;;;;;;;;;;MWSC 1084;;; +NGC2325;G;07:02:40.40;-28:41:50.0;CMa;3.97;2.31;4;12.17;;8.79;8.13;7.89;24.13;E;;;;;;;;2MASX J07024038-2841501,ESO 427-028,ESO-LV 427-0280,MCG -05-17-005,PGC 020047;;; +NGC2326;G;07:08:11.02;+50:40:55.0;Lyn;2.05;1.69;105;14.30;;10.37;9.55;9.24;24.08;Sb;;;;;;;;2MASX J07081104+5040550,MCG +08-13-062,PGC 020218,UGC 03681;;; +NGC2326A;G;07:08:34.21;+50:37:53.0;Lyn;0.81;0.64;6;14.63;;13.58;12.97;12.85;23.53;Sm;;;;;;;;2MASX J07083419+5037531,MCG +08-13-067,PGC 020237,UGC 03687;;; +NGC2327;RfN;07:04:07.22;-11:18:50.8;CMa;1.00;1.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC2328;G;07:02:36.20;-42:04:06.8;Pup;1.59;1.44;120;13.04;;10.79;10.15;9.93;22.94;E-S0;;;;;;;;2MASX J07023619-4204068,ESO 309-016,ESO-LV 309-0160,IRAS 07010-4159,MCG -07-15-002,PGC 020046;;; +NGC2329;G;07:09:08.01;+48:36:55.5;Lyn;1.41;1.17;175;13.70;13.99;10.41;9.64;9.40;23.04;E-S0;;;;;;;;2MASX J07090797+4836561,MCG +08-13-073,PGC 020254,UGC 03695;;; +NGC2330;G;07:09:28.40;+50:09:09.1;Lyn;0.65;0.52;55;14.13;13.05;12.43;11.71;11.44;23.67;E;;;;;;0457;;2MASX J07092835+5009089,MCG +08-13-078,PGC 020272,UGC 03699 NOTES01;;"Identification as NGC 2330 is uncertain; N2330 may be a star."; +NGC2331;OCl;07:06:59.83;+27:15:41.7;Gem;4.80;;;;8.50;;;;;;;;;;;;;MWSC 1103;;; +NGC2332;G;07:09:34.16;+50:10:56.2;Lyn;1.72;1.17;65;14.00;;10.38;9.75;9.39;23.80;S0;;;;;;;;2MASX J07093417+5010559,MCG +08-13-079,PGC 020276,UGC 03699;;; +NGC2333;G;07:08:21.34;+35:10:12.1;Gem;1.00;0.70;38;14.10;;10.94;10.23;9.98;22.61;Sa;;;;;;;;2MASX J07082133+3510123,IRAS 07050+3515,MCG +06-16-020,PGC 020223,UGC 03689;;; +NGC2334;G;07:11:33.65;+50:14:53.7;Lyn;1.20;0.87;70;14.60;;11.01;10.21;10.03;23.69;S0;;;;;;0465;;2MASX J07113366+5014543,MCG +08-13-098,PGC 020357;;"Identification as NGC 2334 is uncertain; N2334 may be a star."; +NGC2335;OCl;07:06:49.45;-10:01:43.1;Mon;8.70;;;7.76;7.20;;;;;;;;;;;;;MWSC 1100;;; +NGC2336;G;07:27:04.05;+80:10:41.1;Cam;5.01;2.81;175;13.46;12.51;8.59;7.92;7.70;22.98;Sbc;;;;;;;;2MASX J07270405+8010410,IRAS 07184+8016,MCG +13-06-006,PGC 021033,UGC 03809;;; +NGC2337;G;07:10:13.58;+44:27:26.3;Lyn;2.18;1.61;114;13.10;;11.12;10.46;10.34;23.33;IB;;;;;;;;2MASX J07101357+4427264,IRAS 07066+4432,MCG +07-15-010,PGC 020298,UGC 03711;;; +NGC2338;OCl;07:07:47.37;-05:43:11.0;Mon;3.30;;;;;;;;;;;;;;;;;MWSC 1114;;; +NGC2339;G;07:08:20.54;+18:46:48.9;Gem;2.42;1.53;180;12.30;;9.52;8.80;8.51;22.77;Sbc;;;;;;;;2MASX J07082054+1846490,IRAS 07054+1851,MCG +03-19-002,PGC 020222,UGC 03693;;; +NGC2340;G;07:11:10.83;+50:10:29.1;Lyn;3.16;1.64;71;13.90;;9.95;9.26;8.88;24.06;E;;;;;;;;2MASX J07111080+5010288,MCG +08-13-096,PGC 020338,UGC 03720;;; +NGC2341;G;07:09:12.04;+20:36:10.5;Gem;0.82;0.79;60;13.65;12.88;11.24;10.52;10.17;22.17;Sc;;;;;;;;2MASX J07091189+2036102,IRAS 07062+2041,MCG +03-19-003,PGC 020259,UGC 03708;;; +NGC2342;G;07:09:18.08;+20:38:09.5;Gem;1.17;0.84;66;12.92;12.15;10.62;9.90;9.54;22.16;Sc;;;;;;;;2MASX J07091808+2038092,IRAS 07063+2043,MCG +03-19-004,PGC 020265,UGC 03709;;; +NGC2343;OCl;07:08:06.80;-10:37:00.5;Mon;7.50;;;7.05;6.70;;;;;;;;;;;;;MWSC 1119;;; +NGC2344;G;07:12:28.66;+47:10:00.1;Lyn;2.07;1.87;145;12.99;12.14;10.20;9.51;9.27;23.12;SABb;;;;;;;;2MASX J07122870+4710004,MCG +08-13-103,PGC 020395,UGC 03734;;; +NGC2345;OCl;07:08:18.79;-13:11:37.5;CMa;6.90;;;8.58;7.70;;;;;;;;;;;;;MWSC 1120;;; +NGC2346;PN;07:09:23.01;-00:48:32.9;Mon;0.87;;;11.80;11.60;10.26;9.44;8.41;;;;11.78;11.47;;;;HIP 34541,HD 293373,TYC 4815-03818-1,UCAC2 31477215;2MASX J07092302-0048334,IRAS 07068-0043,PN G215.6+03.6;;; +NGC2347;G;07:16:03.69;+64:42:32.1;Cam;1.64;1.19;5;13.20;;10.44;9.72;9.41;22.90;Sb;;;;;;;;2MASX J07160361+6442315,2MASX J07160408+6442415,IRAS 07112+6447,MCG +11-09-039,PGC 020539,SDSS J071604.08+644240.7,UGC 03759;;; +NGC2348;OCl;07:03:02.52;-67:23:38.2;Vol;5.70;;;;;;;;;;;;;;;;;ESO 088-001,MWSC 1075;;; +NGC2349;OCl;07:10:48.15;-08:35:35.7;Mon;5.10;;;;;;;;;;;;;;;;;MWSC 1138;;; +NGC2350;G;07:13:12.19;+12:15:57.9;CMi;1.38;0.70;110;14.10;;10.33;9.59;9.26;23.29;S0-a;;;;;;;;2MASX J07131218+1215577,IRAS 07104+1221,MCG +02-19-001,PGC 020416,UGC 03747;;; +NGC2351;OCl;07:13:32.03;-10:29:29.1;Mon;3.00;;;;;;;;;;;;;;;;;MWSC 1146;;NGC declination is 1 degree too far south if this is NGC 2351.; +NGC2352;OCl;07:13:05.44;-24:02:45.9;CMa;4.80;;;;;;;;;;;;;;;;;MWSC 1143;;; +NGC2353;OCl;07:14:30.31;-10:15:57.1;Mon;6.60;;;7.30;7.10;;;;;;;;;;;;;MWSC 1152;;; +NGC2354;OCl;07:14:05.27;-25:41:20.1;CMa;4.80;;;7.28;6.50;;;;;;;;;;;;;MWSC 1148;;; +NGC2355;OCl;07:16:59.26;+13:44:59.5;Gem;6.00;;;;9.70;;;;;;;;;;2356;;;MWSC 1160;;; +NGC2356;Dup;07:16:59.26;+13:44:59.5;Gem;;;;;;;;;;;;;;;2355;;;;;; +NGC2357;G;07:17:40.99;+23:21:24.3;Gem;3.22;0.48;120;14.60;;10.76;9.98;9.63;24.15;Sc;;;;;;;;2MASX J07174098+2321242,IRAS 07146+2326,MCG +04-17-014,PGC 020592,UGC 03782;;; +NGC2358;OCl;07:16:56.33;-17:07:01.5;CMa;9.60;;;;;;;;;;;;;;;;;MWSC 1159;;; +NGC2359;HII;07:18:30.98;-13:13:37.9;CMa;10.00;5.00;;;;;;;;;;;;;;;;LBN 1041;;Identified as an HII region in PKSCAT90 (version 1.01).; +NGC2360;OCl;07:17:43.12;-15:38:28.7;CMa;9.00;;;7.62;7.20;;;;;;;;;;;;;C 058,MWSC 1165;Caroline's Cluster;; +NGC2361;Neb;07:18:23.80;-13:12:34.4;CMa;;;;;;;;;;;;;;;;;;;;; +NGC2362;OCl;07:18:41.47;-24:57:15.1;CMa;7.20;;;;4.10;;;;;;;;;;;;;C 064,MWSC 1173,Tau CMa;;; +NGC2363;G;07:28:29.59;+69:11:34.3;Cam;1.13;0.64;17;15.50;;;;;24.18;I;;;;;;;;MCG +12-07-039,PGC 021078,UGC 03847;;This may be a part of NGC 2366.; +NGC2364;OCl;07:20:46.47;-07:32:59.0;Mon;;;;;;;;;;;;;;;;;;;;; +NGC2365;G;07:22:22.55;+22:04:59.8;Gem;2.75;1.47;170;13.80;;9.95;9.26;9.01;24.15;Sa;;;;;;;;2MASX J07222254+2204597,MCG +04-18-008,PGC 020838,UGC 03821;;; +NGC2366;G;07:28:54.66;+69:12:56.8;Cam;4.37;1.44;31;11.86;11.39;11.29;12.15;10.62;22.52;IB;;;;;;;;IRAS 07233+6917,MCG +12-07-040,PGC 021102,UGC 03851;;Contains the HII region MRK 0071. May also contain UGC 03847.; +NGC2367;OCl;07:20:04.54;-21:53:02.7;CMa;5.40;;;7.98;7.90;;;;;;;;;;;;;MWSC 1178;;; +NGC2368;OCl;07:21:06.30;-10:22:18.4;Mon;4.50;;;;11.80;;;;;;;;;;;;;MWSC 1186;;; +NGC2369;G;07:16:37.73;-62:20:37.4;Car;3.03;0.68;175;13.23;;9.64;8.88;8.48;23.68;Sa;;;;;;;;2MASX J07163775-6220375,ESO 122-018,ESO-LV 122-0180,IRAS 07160-6215,PGC 020556;;; +NGC2369A;G;07:18:43.54;-62:56:10.6;Car;2.01;1.21;37;13.68;;10.69;9.98;9.51;23.48;SABb;;;;;;;;2MASX J07184355-6256104,ESO 088-008,ESO-LV 88-0080,IRAS 07182-6250,PGC 020640;;; +NGC2369B;G;07:20:29.63;-62:03:14.3;Car;1.48;1.24;3;14.18;;11.12;10.53;10.22;24.56;SBbc;;;;;;;;2MASX J07202960-6203141,ESO 123-005,ESO-LV 123-0050,IRAS 07199-6157,PGC 020717;;; +NGC2370;G;07:25:01.66;+23:46:59.6;Gem;1.20;0.70;44;14.30;;11.02;10.30;9.95;22.99;SABb;;;;;;;;2MASX J07250166+2346597,IRAS 07220+2352,MCG +04-18-015,PGC 020955,UGC 03835;;; +NGC2371;PN;07:25:34.66;+29:29:26.3;Gem;0.73;;;13.00;11.20;15.21;15.50;15.49;;;13.28;14.48;14.85;;2372;;UCAC2 42051185;IRAS 07224+2935,PN G189.1+19.8;;Identified as a planetary neb. by Strauss, et al (1992, ApJS, 83, 29).; +NGC2372;Dup;07:25:34.66;+29:29:26.3;Gem;;;;;;;;;;;;;;;2371;;;;;; +NGC2373;G;07:26:36.95;+33:49:25.3;Gem;0.59;0.42;176;14.50;;12.33;11.65;11.39;21.89;Sb;;;;;;;;2MASX J07263697+3349257,IRAS 07233+3355,MCG +06-17-004,PGC 021016,UGC 03848;;; +NGC2374;OCl;07:23:56.07;-13:15:48.1;CMa;9.00;;;8.46;8.00;;;;;;;;;;;;;MWSC 1206;;; +NGC2375;G;07:27:09.48;+33:49:54.5;Gem;1.00;0.80;65;14.70;;11.86;11.22;10.81;23.45;Sb;;;;;;;;2MASX J07270951+3349544,IRAS 07238+3356,MCG +06-17-005,PGC 021035,UGC 03854;;; +NGC2376;G;07:26:35.91;+23:04:22.6;Gem;0.65;0.57;31;14.70;;12.41;11.96;11.54;22.54;Scd;;;;;;;;2MASX J07263591+2304225,IRAS 07235+2310,MCG +04-18-017,PGC 021015;;; +NGC2377;G;07:24:56.82;-09:39:33.5;Mon;1.60;1.11;3;15.80;14.77;10.13;9.37;9.01;22.96;Sc;;;;;;;;2MASX J07245681-0939336,IRAS 07225-0933,PGC 020948,UGCA 132;;Not the radio source 3C 178.; +NGC2378;**;07:27:24.20;+33:49:53.7;Gem;;;;;;;;;;;;;;;;;;;;; +NGC2379;G;07:27:26.26;+33:48:40.5;Gem;0.98;0.70;121;14.90;;11.54;10.82;10.59;23.30;S0;;;;;;;;2MASX J07272628+3348405,MCG +06-17-006,PGC 021036,SDSS J072726.25+334840.8,UGC 03857;;Not the same as NGC 2378 which is a double star.; +NGC2380;G;07:23:54.75;-27:31:44.6;CMa;2.52;2.40;150;12.52;;8.47;7.78;7.45;23.06;S0;;;;;2382;;;2MASX J07235474-2731446,ESO 492-012,ESO-LV 492-0120,MCG -05-18-005,PGC 020916;;; +NGC2381;G;07:19:57.31;-63:04:01.3;Car;1.53;1.24;107;13.44;;10.94;10.35;9.74;23.08;SBa;;;;;;;;2MASX J07195733-6303312,2MASX J07195733-6304012,ESO 088-010,ESO-LV 88-0100,PGC 020694;;; +NGC2382;Dup;07:23:54.75;-27:31:44.6;CMa;;;;;;;;;;;;;;;2380;;;;;; +NGC2383;OCl;07:24:39.90;-20:56:51.5;CMa;4.20;;;8.88;8.40;;;;;;;;;;;;;MWSC 1213;;; +NGC2384;OCl;07:25:09.83;-21:01:11.5;CMa;4.80;;;7.47;7.40;;;;;;;;;;;;;MWSC 1216;;; +NGC2385;G;07:28:28.07;+33:50:16.1;Gem;0.94;0.68;53;15.20;;11.54;10.72;10.41;23.41;Sab;;;;;;;;2MASX J07282802+3350159,MCG +06-17-008,PGC 021080;;; +NGC2386;Other;07:28:37.92;+33:46:25.7;Gem;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +NGC2387;G;07:28:57.93;+36:52:47.3;Aur;0.48;0.44;145;15.30;16.50;13.35;12.67;12.40;22.79;Sbc;;;;;;;;PGC 021105;;; +NGC2388;G;07:28:53.44;+33:49:08.7;Gem;0.87;0.56;66;14.70;;10.75;9.96;9.59;22.77;Sb;;;;;2388W;;;2MASX J07285341+3349084,IRAS 07256+3355,MCG +06-17-010,PGC 021099,UGC 03870;;; +NGC2389;G;07:29:04.65;+33:51:39.5;Gem;1.56;0.89;79;13.50;;11.11;10.35;10.35;22.63;SABc;;;;;2388E;;;2MASX J07290464+3351395,MCG +06-17-011,PGC 021109,UGC 03872;;; +NGC2390;*;07:29:04.27;+33:50:12.5;Gem;;;;;;;;;;;;;;;;;;;;; +NGC2391;*;07:29:07.49;+33:49:33.4;Gem;;;;;;;;;;;;;;;;;;;;; +NGC2392;PN;07:29:10.76;+20:54:42.6;Gem;0.33;;;10.12;9.61;10.87;10.92;10.94;;;9.30;10.38;10.53;;;;BD +21 1609,HD 59088,HIP 36369,TYC 1372-01287-1;C 039,IRAS 07262+2100,PN G197.8+17.3;Eskimo Nebula;; +NGC2393;G;07:30:04.63;+34:01:40.0;Gem;1.07;0.67;103;14.90;;11.94;11.32;10.97;23.30;Sc;;;;;;;;2MASX J07300461+3401399,IRAS 07267+3407,MCG +06-17-014,PGC 021154,UGC 03884;;; +NGC2394;OCl;07:28:36.51;+07:05:11.6;CMi;;;;;;;;;;;;;;;;;;;;; +NGC2395;OCl;07:27:12.85;+13:36:29.5;Gem;4.62;;;8.81;8.00;;;;;;;;;;;;;MWSC 1228;;; +NGC2396;OCl;07:28:02.92;-11:43:10.8;Pup;6.60;;;;7.40;;;;;;;;;;;;;MWSC 1232;;; +NGC2397;G;07:21:19.98;-69:00:05.3;Vol;2.51;0.76;116;12.85;;9.42;8.79;8.43;22.62;SBb;;;;;;;;2MASX J07211999-6900054,ESO 058-030,ESO-LV 58-0300,IRAS 07214-6854,PGC 020766;;; +NGC2397A;G;07:21:07.91;-69:06:55.2;Vol;1.10;0.84;169;14.84;;12.66;11.87;11.25;23.51;SBc;;;;;;;;2MASX J07210790-6906553,ESO 058-029,ESO-LV 58-0290,IRAS 07212-6901,PGC 020754;;; +NGC2397B;G;07:21:55.57;-68:50:44.9;Vol;1.20;0.57;99;14.98;;;;;23.45;IB;;;;;;;;ESO 058-031,ESO-LV 58-0310,PGC 020813;;; +NGC2398;G;07:30:16.16;+24:29:16.4;Gem;1.20;0.74;126;15.30;;11.00;10.36;10.06;24.21;E;;;;;;;;2MASX J07301614+2429160,PGC 021165;;; +NGC2399;Other;07:29:50.17;-00:12:51.7;CMi;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC2400;Other;07:29:54.86;-00:12:53.0;CMi;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC2401;OCl;07:29:24.40;-13:57:58.4;Pup;2.70;;;;12.60;;;;;;;;;;;;;MWSC 1241;;; +NGC2402;GPair;07:30:47.20;+09:39:02.0;CMi;1.50;;;;;;;;;;;;;;;;;MCG +02-19-004,UGC 03891;;;Diameter of the group inferred by the author. +NGC2402 NED01;G;07:30:46.58;+09:38:48.8;CMi;1.23;0.72;55;15.40;;10.88;10.21;10.03;24.09;Sa;;;;;;;;2MASX J07304659+0938489,MCG +02-19-004 NED01,PGC 021176,UGC 03891 NED01;;; +NGC2402 NED02;G;07:30:47.80;+09:39:13.0;CMi;0.91;0.68;16;15.11;;;;;23.94;;;;;;2402NE;;;MCG +02-19-004 NED02,PGC 200236,UGC 03891 NED02;;;B-Mag taken from LEDA +NGC2403;G;07:36:51.40;+65:36:09.2;Cam;19.95;10.07;126;8.84;8.38;6.98;6.42;6.19;23.48;SABc;;;;;;;;2MASX J07365139+6536091,C 007,IRAS 07321+6543,MCG +11-10-007,PGC 021396,UGC 03918;;; +NGC2404;HII;07:37:06.73;+65:36:38.9;Cam;;;;;;;;;;;;;;;;;;;;HII region in NGC 2403. Associated with the RadioS NGC 2403:[TH94] 07?; +NGC2405;G;07:32:13.98;+25:54:23.0;Gem;0.94;0.55;100;14.70;;12.23;11.47;11.37;23.46;;;;;;;;;MCG +04-18-026,PGC 021224;;; +NGC2406;G;07:31:47.74;+18:17:16.5;Gem;0.69;0.61;53;15.00;;11.50;10.85;10.50;23.39;E;;;;;;;;2MASX J07314774+1817161,MCG +03-19-021,PGC 021218;;; +NGC2407;G;07:31:56.67;+18:19:59.1;Gem;1.37;0.95;66;14.90;;11.10;10.38;10.13;24.38;E-S0;;;;;;;;2MASX J07315666+1819591,MCG +03-20-001,PGC 021220,UGC 03896;;; +NGC2408;OCl;07:40:31.92;+71:40:05.5;Cam;;;;;;;;;;;;;;;;;;;;; +NGC2409;OCl;07:31:36.72;-17:11:25.5;Pup;0.11;;;7.48;7.30;;;;;;;;;;;;;MWSC 1254;;; +NGC2410;G;07:35:02.26;+32:49:19.6;Gem;2.17;0.65;33;17.01;16.26;10.65;9.97;9.61;23.37;Sb;;;;;;;;2MASX J07350225+3249197,IRAS 07318+3255,MCG +05-18-023,PGC 021336,SDSS J073502.26+324919.5,SDSS J073502.26+324919.6,SDSS J073502.27+324919.6,UGC 03917;;; +NGC2411;G;07:34:36.33;+18:16:53.6;Gem;1.00;0.65;48;14.60;;10.80;10.06;9.79;23.20;S0-a;;;;;;;;2MASX J07343635+1816534,MCG +03-20-005,PGC 021315,SDSS J073436.32+181653.5,UGC 03914;;; +NGC2412;*;07:34:21.48;+08:32:52.0;CMi;;;;;;;;;;;;;;;;;;;;; +NGC2413;OCl;07:33:16.50;-13:05:44.0;Pup;4.80;;;;;;;;;;;;;;;;;MWSC 1262;;; +NGC2414;OCl;07:33:12.80;-15:27:13.9;Pup;5.40;;;8.33;7.90;;;;;;;;;;;;;MWSC 1263;;; +NGC2415;G;07:36:56.69;+35:14:31.1;Gem;0.83;0.83;5;12.50;;10.70;10.08;9.78;20.89;Sm;;;;;;;;2MASX J07365672+3514310,IRAS 07336+3521,MCG +06-17-021,PGC 021399,SDSS J073656.63+351431.9,UGC 03930;;; +NGC2416;G;07:35:41.52;+11:36:43.3;CMi;0.87;0.18;95;14.30;;12.12;11.51;11.23;21.93;Sc;;;;;;;;2MASX J07354152+1136433,IRAS 07329+1143,MCG +02-20-002,PGC 021358,UGC 03925;;; +NGC2417;G;07:30:12.09;-62:15:09.5;Car;2.48;1.78;83;13.09;;9.93;9.37;8.97;23.47;SBbc;;;;;;;;2MASX J07301209-6215095,ESO 123-015,ESO-LV 123-0150,IRAS 07295-6208,PGC 021155;;; +NGC2418;G;07:36:37.51;+17:53:02.1;Gem;1.59;1.53;65;13.70;;9.90;9.19;8.95;23.54;E;;;;;;;;2MASX J07363752+1753023,MCG +03-20-008,PGC 021382,UGC 03931;;; +NGC2419;GCl;07:38:07.95;+38:52:47.9;Lyn;4.50;;;;10.05;;;;;;;;;;;;;2MASX J07380795+3852479,C 025,MWSC 1290;;; +NGC2420;OCl;07:38:23.90;+21:34:26.7;Gem;7.50;;;9.00;8.30;;;;;;;;;;;;;MWSC 1292;;; +NGC2421;OCl;07:36:11.81;-20:36:44.1;Pup;5.10;;;8.69;8.30;;;;;;;;;;;;;MWSC 1277;;; +NGC2422;OCl;07:36:35.02;-14:28:57.4;Pup;19.80;;;4.42;4.40;;;;;;;;;047;2478;;;MWSC 1278;;; +NGC2423;OCl;07:37:06.73;-13:52:17.4;Pup;11.70;;;7.15;6.70;;;;;;;;;;;;;MWSC 1283;;; +NGC2424;G;07:40:39.29;+39:13:59.9;Lyn;3.37;0.52;82;13.90;;10.38;9.62;9.32;23.77;Sb;;;;;;;;2MASX J07403931+3914003,IRAS 07372+3920,MCG +07-16-009,PGC 021558,SDSS J074039.28+391359.8,SDSS J074039.28+391359.9,SDSS J074039.29+391359.9,UGC 03959;;; +NGC2425;OCl;07:38:17.63;-14:52:40.2;Pup;5.40;;;;;;;;;;;;;;;;;MWSC 1291;;; +NGC2426;G;07:43:18.46;+52:19:06.6;Lyn;1.10;1.10;30;14.40;;10.53;9.86;9.56;23.46;E;;;;;;;;2MASX J07431844+5219064,MCG +09-13-038,PGC 021648,UGC 03977;;; +NGC2427;G;07:36:28.18;-47:38:08.0;Pup;5.74;2.46;122;11.99;11.58;9.21;8.57;8.29;24.09;SABd;;;;;;;;2MASX J07362817-4738079,ESO 208-027,ESO-LV 208-0270,IRAS 07350-4731,PGC 021375;;; +NGC2428;OCl;07:39:21.77;-16:31:44.5;Pup;4.50;;;;;;;;;;;;;;;;;MWSC 1297;;; +NGC2429A;G;07:43:47.58;+52:21:26.7;Lyn;1.68;0.31;147;14.70;;11.20;10.46;10.21;24.23;S0-a;;;;;;;;2MASX J07434757+5221265,MCG +09-13-039,PGC 021664,UGC 03983;;; +NGC2429B;G;07:43:51.83;+52:20:54.5;Lyn;0.41;0.22;55;15.00;;13.19;12.83;12.40;;Sbc;;;;;;;;2MASX J07435182+5220545,MCG +09-13-040,PGC 021663,UGC 03983 NOTES01;;; +NGC2430;OCl;07:39:41.05;-16:17:45.8;Pup;4.20;;;;;;;;;;;;;;;;;MWSC 1298;;NGC identification is not certain.; +NGC2431;G;07:45:13.39;+53:04:30.4;Lyn;0.86;0.78;115;14.30;;11.24;10.56;10.24;22.86;SBa;;;;;2436;;;2MASX J07451348+5304310,MCG +09-13-042,PGC 021711,UGC 03999;;; +NGC2432;OCl;07:40:53.87;-19:04:08.7;Pup;5.40;;;;10.20;;;;;;;;;;;;;MWSC 1310;;; +NGC2433;Other;07:42:43.63;+09:15:33.3;CMi;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC2434;G;07:34:51.16;-69:17:02.9;Vol;2.69;2.20;140;12.50;11.26;8.87;8.14;7.89;23.35;E;;;;;;;;2MASX J07345116-6917029,ESO 059-005,ESO-LV 59-0050,PGC 021325;;; +NGC2435;G;07:44:13.58;+31:39:04.0;Gem;2.17;0.42;36;13.50;;10.20;9.52;9.26;23.39;SABa;;;;;;;;2MASX J07441362+3139045,MCG +05-19-002,PGC 021676,SDSS J074413.58+313904.0,UGC 03996;;; +NGC2436;Dup;07:45:13.39;+53:04:30.4;Lyn;;;;;;;;;;;;;;;2431;;;;;; +NGC2437;OCl;07:41:46.82;-14:48:36.0;Pup;21.00;;;6.33;6.10;;;;;;;;;046;;;;MWSC 1313;;; +NGC2438;PN;07:41:50.39;-14:44:08.8;Pup;1.07;;;10.10;10.80;17.02;;;;;;17.70;;;;;HD 62099,BD -14 2129;IRAS 07395-1437,PN G231.8+04.1;;; +NGC2439;OCl;07:40:45.41;-31:41:32.7;Pup;8.70;;;7.31;6.90;;;;;;;;;;;;;MWSC 1306;;; +NGC2440;PN;07:41:55.36;-18:12:30.5;Pup;0.27;;;10.80;9.40;;;;;;;;17.65;;;;BD -17 2105,HD 62166;ESO 560-009,IRAS 07396-1805,PN G234.8+02.4;;; +NGC2441;G;07:51:54.74;+73:00:56.5;Cam;1.98;1.81;155;12.70;;10.86;10.20;9.95;23.16;SABb;;;;;;;;2MASX J07515477+7300564,IRAS 07460+7308,MCG +12-08-015,PGC 022031,UGC 04036;;; +NGC2442;G;07:36:23.84;-69:31:51.0;Vol;4.68;3.09;23;11.15;10.42;7.88;7.21;6.87;23.21;Sbc;;;;;2443;;;2MASX J07362384-6931509,ESO 059-008,ESO-LV 59-0080,IRAS 07365-6924,PGC 021373;;Confused HIPASS source; +NGC2443;Dup;07:36:23.84;-69:31:51.0;Vol;;;;;;;;;;;;;;;2442;;;;;; +NGC2444;G;07:46:53.04;+39:01:54.7;Lyn;1.07;0.66;35;13.10;;11.07;10.39;10.14;23.09;S0;;;;;;;;2MASX J07465304+3901549,MCG +07-16-016,PGC 021774,UGC 04016;;; +NGC2445;G;07:46:55.10;+39:00:54.6;Lyn;1.86;1.12;167;13.10;;11.20;10.44;10.26;23.49;Sm;;;;;;;;2MASX J07465510+3900549,IRAS 07435+3908,MCG +07-16-017,PGC 021776,UGC 04017;;; +NGC2446;G;07:48:39.24;+54:36:42.9;Lyn;1.75;0.91;128;13.90;;10.64;9.95;9.60;23.29;Sb;;;;;;;;2MASX J07483926+5436430,IRAS 07446+5444,MCG +09-13-058,PGC 021860,UGC 04027;;; +NGC2447;OCl;07:44:29.23;-23:51:11.1;Pup;15.00;;;6.57;6.20;;;;;;;;;093;;;;MWSC 1324;;; +NGC2448;OCl;07:44:33.19;-24:40:23.4;Pup;6.00;;;;;;;;;;;;;;;;;MWSC 1323;;; +NGC2449;G;07:47:20.28;+26:55:48.6;Gem;1.44;0.57;135;14.30;;10.70;10.04;9.78;23.05;SBab;;;;;;;;2MASX J07472032+2655487,MCG +05-19-007,PGC 021802,SDSS J074720.28+265548.6,SDSS J074720.29+265548.7,UGC 04026;;; +NGC2450;G;07:47:32.28;+27:01:08.9;Gem;0.97;0.30;156;15.30;;11.84;11.05;10.72;23.07;Sb;;;;;;;;2MASX J07473227+2701085,MCG +05-19-008,PGC 021807,SDSS J074732.27+270108.7,SDSS J074732.28+270108.8,SDSS J074732.29+270108.8;;; +NGC2451;OCl;07:45:15.01;-37:58:02.8;Pup;37.50;;;10.04;9.50;;;;;;;;;;;;;MWSC 1322;;; +NGC2452;PN;07:47:26.37;-27:20:02.4;Pup;0.32;;;12.60;12.00;15.34;15.00;14.29;;;;17.71;;;;;;2MASX J07472637-2720023,ESO 493-011,IRAS 07453-2712,PN G243.3-01.0;;; +NGC2453;OCl;07:47:34.13;-27:11:41.3;Pup;3.00;;;8.39;8.30;;;;;;;;;;;;;MWSC 1340;;; +NGC2454;G;07:50:35.02;+16:22:06.9;Gem;1.18;0.51;101;14.70;;11.05;10.30;10.03;23.49;S0-a;;;;;;;;2MASX J07503502+1622069,MCG +03-20-015,PGC 021963,SDSS J075035.02+162206.8,SDSS J075035.02+162206.9,UGC 04053;;; +NGC2455;OCl;07:48:58.60;-21:17:52.6;Pup;4.50;;;;10.20;;;;;;;;;;;;;MWSC 1350;;; +NGC2456;G;07:54:10.66;+55:29:43.1;Lyn;1.15;0.79;30;14.30;;10.81;10.08;9.83;23.41;E;;;;;;;;2MASX J07541065+5529431,MCG +09-13-082,PGC 022129,UGC 04073;;; +NGC2457;G;07:54:45.73;+55:32:47.6;Lyn;0.50;0.26;131;16.00;;12.32;11.61;11.13;23.05;;;;;;;;;2MASX J07544572+5532481,MCG +09-13-086,PGC 022161;;; +NGC2458;G;07:55:35.10;+56:44:08.0;Lyn;0.38;0.22;80;;;;;;;;;;;;;;;;;;Diameters and position angle taken from Simbad. +NGC2459;OCl;07:52:01.77;+09:33:26.7;CMi;2.70;;;;;;;;;;;;;;;;;MWSC 1361;;; +NGC2460;G;07:56:52.29;+60:20:57.8;Cam;1.83;1.37;43;12.50;;9.48;8.83;8.54;22.50;Sab;;;;;;;;2MASX J07565226+6020577,IRAS 07525+6028,MCG +10-12-021,PGC 022270,UGC 04097;;; +NGC2461;*;07:56:26.26;+56:40:23.9;Lyn;;;;;;;;;;;;;;;;;;;;; +NGC2462;G;07:56:32.06;+56:41:13.6;Lyn;0.60;0.35;155;15.50;;11.87;11.19;10.90;22.52;S0-a;;;;;;;;2MASX J07563202+5641133,MCG +10-12-024,PGC 022259;;CGCG incorrectly calls this NGC 2461 which is a star 1.2' to the SW.; +NGC2463;G;07:57:12.48;+56:40:35.5;Lyn;0.60;0.60;145;14.80;;11.54;10.77;10.58;22.56;E;;;;;;;;2MASX J07571247+5640352,IRAS 07530+5648,MCG +10-12-031,PGC 022291;;; +NGC2464;Other;07:57:32.69;+56:41:26.0;Lyn;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +NGC2465;*;07:57:26.10;+56:49:20.9;Lyn;;;;;;;;;;;;;;;;;;;;; +NGC2466;G;07:45:16.05;-71:24:37.5;Vol;1.51;1.46;45;13.42;;10.97;10.20;10.10;23.32;Sc;;;;;;;;2MASX J07451596-7124376,ESO 059-018,ESO-LV 59-0180,IRAS 07456-7117,PGC 021714;;; +NGC2467;Cl+N;07:52:23.43;-26:26:36.0;Pup;4.20;;;;;;;;;;;;;;;;;LBN 1065,MWSC 1367;;; +NGC2468;G;07:58:02.46;+56:21:34.5;Lyn;1.51;0.52;50;14.90;;10.94;10.20;9.84;24.33;S0;;;;;;;;2MASX J07580247+5621346,MCG +09-13-095,PGC 022325,UGC 04110 NED02;;; +NGC2469;G;07:58:03.42;+56:40:49.7;Lyn;0.90;0.64;163;13.20;;11.49;10.83;10.57;21.39;Sbc;;;;;;;;2MASX J07580344+5640496,IRAS 07540+5648,MCG +10-12-035,PGC 022327,UGC 04111;;; +NGC2470;G;07:54:20.77;+04:27:34.9;CMi;1.95;0.60;127;14.20;;10.25;9.50;9.25;23.14;Sab;;;;;;;;2MASX J07542077+0427347,IRAS 07517+0435,MCG +01-20-009,PGC 022137,UGC 04091;;; +NGC2471;**;07:58:32.96;+56:46:34.2;Lyn;;;;;;;;;;;;;;;;;;;;; +NGC2472;G;07:58:41.90;+56:42:04.7;Lyn;0.65;0.56;14;15.40;;13.59;13.24;12.90;23.35;Sab;;;;;;;;2MASX J07584193+5642045,MCG +10-12-039,PGC 022364;;; +NGC2473;G;07:55:34.83;+56:44:08.9;Lyn;0.52;0.38;80;;;;;;;;;;;;;;;2MASX J07553481+5644091,PGC 022191;;;Diameters and position angle taken from Simbad. +NGC2474;G;07:57:58.95;+52:51:26.2;Lyn;1.14;1.02;130;13.90;;;;;23.25;E;;;;;;;;MCG +09-13-096,PGC 022321,SDSS J075758.95+525126.1,UGC 04114 NED01;;; +NGC2475;G;07:58:00.44;+52:51:42.1;Lyn;1.07;0.96;68;15.00;;10.41;9.76;9.36;23.08;E;;;;;;;;2MASX J07580041+5251425,MCG +09-13-097,PGC 022322,SDSS J075800.44+525142.1,UGC 04114 NED02;;; +NGC2476;G;07:56:45.18;+39:55:40.4;Lyn;1.26;0.68;143;13.40;;10.47;9.76;9.52;22.89;E;;;;;;;;2MASX J07564517+3955398,MCG +07-17-003,PGC 022260,SDSS J075645.18+395540.4,UGC 04106;;; +NGC2477;OCl;07:52:09.78;-38:31:59.7;Pup;18.60;;;6.64;5.80;;;;;;;;;;;;;C 071,MWSC 1363;;; +NGC2478;Dup;07:36:35.02;-14:28:57.4;Pup;;;;;;;;;;;;;;;2422;;;;;; +NGC2479;OCl;07:55:06.07;-17:42:28.1;Pup;6.30;;;;9.60;;;;;;;;;;;;;MWSC 1380;;; +NGC2480;G;07:57:10.44;+23:46:47.3;Gem;1.32;0.51;163;15.20;;12.54;11.88;11.70;23.47;SBm;;;;;;;;2MASX J07571044+2346466,MCG +04-19-009,PGC 022289,SDSS J075710.44+234647.3,SDSS J075710.45+234647.3,UGC 04116;;; +NGC2481;G;07:57:13.75;+23:46:04.0;Gem;1.40;0.58;19;13.40;;10.14;9.43;9.17;22.89;S0-a;;;;;;;;2MASX J07571372+2346036,MCG +04-19-010,PGC 022292,SDSS J075713.75+234603.9,UGC 04118;;Incorrectly identified as NGC 2482 in PASP100,1423,1988 and AJ91,732,1986.; +NGC2482;OCl;07:55:10.37;-24:15:16.7;Pup;6.60;;;7.71;7.30;;;;;;;;;;;;;MWSC 1382;;; +NGC2483;OCl;07:55:38.79;-27:53:12.6;Pup;3.30;;;7.89;7.60;;;;;;;;;;;;;MWSC 1383;;; +NGC2484;G;07:58:28.11;+37:47:11.8;Lyn;1.69;1.04;141;14.15;14.90;10.89;10.22;9.87;24.05;S0;;;;;;;;2MASX J07582810+3747121,MCG +06-18-004,PGC 022350,SDSS J075828.10+374711.6,SDSS J075828.10+374711.7,SDSS J075828.11+374711.8,SDSS J075828.11+374711.9,UGC 04125;;; +NGC2485;G;07:56:48.66;+07:28:40.6;CMi;1.57;1.46;5;13.30;;10.44;9.82;9.48;22.93;Sa;;;;;;;;2MASX J07564865+0728406,IRAS 07541+0736,MCG +01-21-001,PGC 022266,SDSS J075648.66+072840.6,UGC 04112;;; +NGC2486;G;07:57:56.49;+25:09:39.1;Gem;1.49;0.85;89;14.24;13.26;11.09;10.35;10.19;23.64;SBa;;;;;;;;2MASX J07575646+2509393,MCG +04-19-011,PGC 022317,SDSS J075756.48+250939.0,SDSS J075756.48+250939.1,SDSS J075756.49+250939.1,UGC 04123;;; +NGC2487;G;07:58:20.46;+25:08:57.2;Gem;1.73;1.39;55;13.28;12.23;10.61;9.95;9.70;23.15;Sb;;;;;;;;2MASX J07582044+2508573,IRAS 07553+2517,MCG +04-19-012,PGC 022343,SDSS J075820.46+250857.1,SDSS J075820.46+250857.2,UGC 04126;;; +NGC2488;G;08:01:45.98;+56:33:13.9;Lyn;1.45;0.83;100;14.20;;10.57;9.86;9.56;22.96;E-S0;;;;;;;;2MASX J08014590+5633120,MCG +09-13-109,PGC 022520,UGC 04161;;; +NGC2489;OCl;07:56:14.94;-30:03:39.0;Pup;4.20;;;8.58;7.90;;;;;;;;;;;;;MWSC 1386;;; +NGC2490;G;07:59:17.87;+27:04:40.3;Gem;0.63;0.47;23;15.30;;;;;22.87;E-S0;;;;;;;;MCG +05-19-027,PGC 022382,SDSS J075917.87+270440.3;;; +NGC2491;G;07:58:27.38;+07:59:01.7;CMi;0.69;0.53;78;15.60;;12.86;12.18;12.05;23.79;;;;;;;;;2MASX J07582739+0759018,PGC 022353,SDSS J075827.37+075901.7;;NGC identification is not certain.; +NGC2492;G;07:59:29.71;+27:01:35.2;Gem;1.11;0.88;100;14.40;;10.60;9.90;9.60;22.71;E-S0;;;;;;;;2MASX J07592970+2701349,MCG +05-19-028,PGC 022397,SDSS J075929.71+270135.1,SDSS J075929.71+270135.2,UGC 04138;;; +NGC2493;G;08:00:23.63;+39:49:49.5;Lyn;1.87;1.85;30;13.10;;9.80;9.07;8.83;23.21;S0;;;;;;;;2MASX J08002366+3949494,MCG +07-17-007,PGC 022447,SDSS J080023.62+394949.5,UGC 04150;;; +NGC2494;G;07:59:07.14;-00:38:16.5;Mon;0.97;0.80;89;14.20;;11.28;10.60;10.21;22.94;S0-a;;;;;;0487;;2MASX J07590714-0038164,IRAS 07565-0030,MCG +00-21-001,PGC 022377,UGC 04141;;; +NGC2495;G;08:00:33.15;+39:50:24.1;Lyn;0.55;0.32;23;15.50;;;;;22.68;Sd;;;;;;;;MCG +07-17-008,PGC 022457,SDSS J080033.14+395024.0,SDSS J080033.15+395024.0,SDSS J080033.15+395024.1;;"Position in Kiso list (1984AnTok..192.595T) is for a star 25"" east."; +NGC2496;G;07:58:37.35;+08:01:47.3;CMi;1.86;1.48;173;14.80;;10.53;9.90;9.60;24.54;E;;;;;;;;2MASX J07583734+0801468,MCG +01-21-002,PGC 022359,SDSS J075837.35+080147.2,UGC 04127;;; +NGC2497;G;08:02:11.13;+56:56:32.4;Lyn;1.58;1.36;25;14.50;;10.76;10.05;9.77;24.22;E;;;;;;;;2MASX J08021114+5656325,MCG +10-12-061,PGC 022547,UGC 04168;;; +NGC2498;G;07:59:38.85;+24:58:56.4;Cnc;1.04;0.67;127;14.40;;11.17;10.41;10.05;22.92;Sa;;;;;;;;2MASX J07593884+2458559,IRAS 07566+2507,MCG +04-19-015,PGC 022403,SDSS J075938.85+245856.3,UGC 04142;;; +NGC2499;G;07:58:51.71;+07:29:35.9;CMi;0.86;0.60;175;15.10;;12.60;11.71;11.37;23.03;SABc;;;;;;;;2MASX J07585168+0729358,MCG +01-21-003,PGC 022366,SDSS J075851.70+072935.9;;; +NGC2500;G;08:01:53.21;+50:44:13.6;Lyn;2.47;2.34;15;12.20;11.62;10.79;10.16;9.28;22.88;Scd;;;;;;;;2MASX J08015322+5044135,IRAS 07581+5052,MCG +09-13-110,PGC 022525,UGC 04165;;; +NGC2501;G;07:58:30.04;-14:21:15.4;Pup;1.73;1.16;120;12.90;;10.16;9.41;9.20;24.41;S0;;;;;;;;2MASX J07583004-1421154,IRAS 07561-1413,MCG -02-21-002,PGC 022354;;; +NGC2502;G;07:55:51.52;-52:18:24.4;Car;2.21;1.12;118;13.09;;8.94;8.16;7.87;23.61;S0;;;;;;;;2MASX J07555149-5218242,ESO 209-008,ESO-LV 209-0080,PGC 022210;;; +NGC2503;G;08:00:36.68;+22:24:00.2;Cnc;0.95;0.79;4;15.00;;11.82;11.08;10.68;23.29;Sbc;;;;;;;;2MASX J08003663+2224002,MCG +04-19-019,PGC 022453,SDSS J080036.67+222400.1,SDSS J080036.67+222400.2,SDSS J080036.68+222400.2,UGC 04158;;; +NGC2504;G;07:59:52.30;+05:36:29.2;CMi;0.62;0.37;126;14.10;;12.38;11.71;11.43;21.88;SABc;;;;;;;;2MASX J07595230+0536303,IRAS 07572+0544,MCG +01-21-004,PGC 022414,SDSS J075952.29+053629.1,UGC 04152;;; +NGC2505;G;08:04:06.84;+53:32:57.2;Lyn;1.19;0.57;1;14.00;;10.87;10.10;9.95;23.04;SBa;;;;;;;;2MASX J08040682+5332572,MCG +09-13-115,PGC 022644,SDSS J080406.84+533257.2,UGC 04193;;; +NGC2506;OCl;08:00:01.78;-10:46:10.7;Mon;10.80;;;8.28;7.60;;;;;;;;;;;;;C 054,MWSC 1406;;; +NGC2507;G;08:01:37.21;+15:42:35.1;Cnc;1.52;1.43;60;14.00;;9.86;9.19;8.93;23.54;S0-a;;;;;;;;2MASX J08013724+1542355,MCG +03-21-010,PGC 022510,SDSS J080137.21+154235.0,UGC 04172;;HOLM 092B is a star.; +NGC2508;G;08:01:57.22;+08:33:06.8;Cnc;1.95;1.55;126;14.20;;10.29;9.54;9.34;24.16;E;;;;;;;;2MASX J08015724+0833064,MCG +02-21-004,PGC 022528,SDSS J080157.21+083306.7,UGC 04174;;; +NGC2509;OCl;08:00:47.82;-19:03:01.9;Pup;4.80;;;;9.30;;;;;;;;;;;;;MWSC 1410;;; +NGC2510;G;08:02:10.68;+09:29:09.5;Cnc;0.97;0.67;114;14.70;;11.39;10.81;10.53;23.18;S0;;;;;;;;2MASX J08021066+0929099,MCG +02-21-007,PGC 022541,SDSS J080210.67+092909.5,UGC 04178;;; +NGC2511;G;08:02:15.01;+09:23:39.9;Cnc;1.04;0.57;118;15.00;;11.60;10.97;10.71;23.37;Sab;;;;;;;;2MASX J08021499+0923399,MCG +02-21-008,PGC 022549,SDSS J080215.00+092339.8;;; +NGC2512;G;08:03:07.85;+23:23:30.6;Cnc;1.35;0.78;116;14.20;;10.86;10.12;9.82;22.89;SBb;;;;;;;;2MASX J08030785+2323308,IRAS 08001+2331,MCG +04-19-021,PGC 022596,SDSS J080307.84+232330.5,UGC 04191;;; +NGC2513;G;08:02:24.67;+09:24:48.8;Cnc;1.91;1.43;153;13.70;;9.69;9.02;8.74;22.89;E;;;;;;;;2MASX J08022465+0924489,MCG +02-21-009,PGC 022555,SDSS J080224.67+092448.7,SDSS J080224.67+092448.8,UGC 04184;;; +NGC2514;G;08:02:49.64;+15:48:29.8;Cnc;1.20;1.13;30;14.40;;12.30;11.58;11.55;23.10;Sc;;;;;;;;2MASX J08024965+1548300,IRAS 08000+1556,MCG +03-21-011,PGC 022581,SDSS J080249.63+154829.7,SDSS J080249.63+154829.8,SDSS J080249.64+154829.8,UGC 04189;;; +NGC2515;**;08:03:21.29;+20:11:16.8;Cnc;;;;;;;;;;;;;;;;;;;;; +NGC2516;OCl;07:58:07.06;-60:45:12.5;Car;24.30;;;3.84;3.80;;;;;;;;;;;;;C 096,MWSC 1393;;; +NGC2517;G;08:02:47.07;-12:19:04.2;Pup;1.74;1.49;44;14.00;;9.80;9.14;8.84;22.80;S0;;;;;;;;2MASX J08024707-1219041,MCG -02-21-003,PGC 022578;;; +NGC2518;G;08:07:20.25;+51:07:53.8;Lyn;1.28;1.04;35;14.20;;10.87;10.11;9.89;23.40;E-S0;;;;;;;;2MASX J08072025+5107539,MCG +09-14-006,PGC 022800,SDSS J080720.24+510753.7,SDSS J080720.25+510753.7,SDSS J080720.25+510753.8,SDSS J080720.25+510753.9,UGC 04221;;NGC 2519 is a Galactic star.; +NGC2519;*;08:07:58.83;+51:07:41.6;Lyn;;;;;;;;;;;;;;;;;;SDSS J080758.82+510741.5;;; +NGC2520;OCl;08:04:58.18;-28:08:48.0;Pup;9.30;;;6.81;6.50;;;;;;;;;;2527;;;MWSC 1428;;; +NGC2521;G;08:08:49.37;+57:46:10.6;Lyn;0.96;0.54;35;14.20;;10.73;10.02;9.73;22.68;E-S0;;;;;;;;2MASX J08084939+5746105,PGC 022866,UGC 04235;;; +NGC2522;G;08:06:13.44;+17:42:23.7;Cnc;1.15;0.33;33;14.40;;10.42;9.65;9.36;22.82;S0-a;;;;;;;;2MASX J08061345+1742231,MCG +03-21-014,PGC 022749,SDSS J080613.44+174223.6,SDSS J080613.45+174223.7,UGC 04218;;; +NGC2523;G;08:15:00.09;+73:34:44.3;Cam;2.79;1.78;66;12.40;;10.25;9.59;9.24;23.25;Sbc;;;;;;;;2MASX J08150007+7334442,IRAS 08092+7343,MCG +12-08-031,PGC 023128,UGC 04271;;; +NGC2523A;G;08:04:08.46;+74:02:52.0;Cam;1.11;0.95;80;;;;;;23.35;Sc;;;;;;;;2MASX J08040850+7402519,MCG +12-08-024,PGC 022649,UGC 04166;;; +NGC2523B;G;08:12:57.09;+73:33:47.7;Cam;1.87;0.25;91;14.80;;11.10;10.37;9.60;23.53;Sb;;;;;;;;2MASX J08125712+7333476,IRAS 08072+7342,MCG +12-08-030,PGC 023025,UGC 04259;;; +NGC2523C;G;08:17:44.29;+73:19:03.4;Cam;1.49;0.87;92;13.93;;11.40;10.65;10.53;23.96;E;;;;;;;;2MASX J08174432+7319038,MCG +12-08-032,PGC 023247,UGC 04290;;; +NGC2524;G;08:08:09.59;+39:09:26.8;Lyn;1.47;1.03;124;13.70;;10.58;9.91;9.68;23.17;S0-a;;;;;;;;2MASX J08080956+3909266,MCG +07-17-016,PGC 022838,SDSS J080809.58+390926.7,SDSS J080809.59+390926.7,SDSS J080809.59+390926.8,UGC 04234;;; +NGC2525;G;08:05:38.04;-11:25:37.3;Pup;3.08;2.17;71;11.80;;9.75;9.13;8.83;23.18;Sc;;;;;;;;2MASX J08053803-1125372,IRAS 08032-1117,MCG -02-21-004,PGC 022721,UGCA 135;;; +NGC2526;G;08:06:58.63;+08:00:14.2;Cnc;0.91;0.46;137;14.60;;11.76;11.08;10.80;22.68;Sab;;;;;;;;2MASX J08065862+0800138,IRAS 08042+0808,MCG +01-21-012,PGC 022778,SDSS J080658.62+080014.1,UGC 04231;;; +NGC2527;Dup;08:04:58.18;-28:08:48.0;Pup;;;;;;;;;;;;;;;2520;;;;;; +NGC2528;G;08:07:24.83;+39:11:40.1;Lyn;1.39;1.24;86;13.50;;11.27;10.71;10.30;23.00;SABb;;;;;;;;2MASX J08072487+3911402,IRAS 08040+3920,MCG +07-17-015,PGC 022805,SDSS J080724.82+391140.0,SDSS J080724.82+391140.1,SDSS J080724.83+391140.0,SDSS J080724.83+391140.1,UGC 04227;;; +NGC2529;Other;08:07:49.11;+17:49:15.0;Cnc;;;;;;;;;;;;;;;;;;;;"This number is sometimes incorrectly put on NGC 2530; N2529 is nonexistent."; +NGC2530;G;08:07:55.61;+17:49:06.6;Cnc;1.40;0.95;171;14.70;;12.14;11.51;11.54;23.64;Scd;;;;;;;;2MASX J08075560+1749062,IRAS 08050+1757,MCG +03-21-020,PGC 022827,SDSS J080755.60+174906.5,UGC 04237;;Sometimes incorrectly called NGC 2529 or NGC 2531.; +NGC2531;Other;08:08:01.10;+17:49:14.2;Cnc;;;;;;;;;;;;;;;;;;;;"This number is sometimes incorrectly put on NGC 2530; N2531 is nonexistent."; +NGC2532;G;08:10:15.18;+33:57:23.9;Lyn;1.66;1.36;26;12.90;;10.64;10.00;9.62;22.73;SABc;;;;;;;;2MASX J08101519+3357233,IRAS 08070+3406,MCG +06-18-013,PGC 022922,SDSS J081015.17+335723.8,SDSS J081015.18+335723.8,UGC 04256;;; +NGC2533;OCl;08:07:04.10;-29:53:01.9;Pup;4.98;;;8.19;7.60;;;;;;;;;;;;;MWSC 1432;;; +NGC2534;G;08:12:54.15;+55:40:19.4;Lyn;1.40;1.30;50;15.13;13.59;11.01;10.32;10.13;23.35;E;;;;;;;;2MASX J08125410+5540191,MCG +09-14-014,PGC 023024,SDSS J081254.15+554019.4,SDSS J081254.16+554019.4,UGC 04268;;; +NGC2535;G;08:11:13.49;+25:12:24.5;Cnc;1.93;0.94;62;13.50;12.60;10.99;10.34;10.12;22.88;SBc;;;;;;;;2MASX J08111348+2512249,IRAS 08082+2521,MCG +04-20-004,PGC 022957,SDSS J081113.48+251224.4,SDSS J081113.48+251224.7,SDSS J081113.49+251224.5,UGC 04264;;; +NGC2536;G;08:11:15.92;+25:10:45.7;Cnc;0.73;0.45;53;14.80;13.93;12.45;11.90;11.71;22.40;Sc;;;;;;;;2MASX J08111591+2510459,MCG +04-20-005,PGC 022958,SDSS J081115.91+251045.3,SDSS J081115.92+251045.7,UGC 04264 NOTES01;;; +NGC2537;G;08:13:14.64;+45:59:23.3;Lyn;2.07;1.96;165;12.50;11.69;9.95;9.37;9.13;22.54;SBm;;;;;;;;2MASX J08131464+4559232,IRAS 08096+4608,MCG +08-15-050,PGC 023040,SDSS J081314.72+455921.9,UGC 04274;Bear Claw Nebula,Bear-Paw Galaxy;; +NGC2537A;G;08:13:41.03;+45:59:37.5;Lyn;0.55;0.50;115;16.00;;14.07;13.32;12.78;23.73;Sc;;;;;;;;2MASX J08134102+4559374,MCG +08-15-051,PGC 023057,SDSS J081341.02+455937.4,SDSS J081341.03+455937.4,SDSS J081341.03+455937.5;;RC2 incorrectly associates this with VV 138.; +NGC2538;G;08:11:23.07;+03:37:59.5;Hya;1.58;1.12;30;13.49;;10.61;9.92;9.63;23.26;SBa;;;;;;;;2MASX J08112308+0337587,IRAS 08087+0347,MCG +01-21-019,PGC 022962,SDSS J081123.06+033759.4,UGC 04266;;; +NGC2539;OCl;08:10:36.98;-12:49:14.4;Pup;12.30;;;7.05;6.50;;;;;;;;;;;;;MWSC 1439;;; +NGC2540;G;08:12:46.44;+26:21:42.4;Cnc;1.24;0.65;123;14.50;;11.44;10.74;10.63;23.09;Sc;;;;;;;;2MASX J08124642+2621391,IRAS 08097+2630,MCG +05-20-004,PGC 023017,SDSS J081246.44+262142.3,SDSS J081246.44+262142.4,SDSS J081246.45+262142.4,UGC 04275;;; +NGC2541;G;08:14:40.12;+49:03:42.2;Lyn;3.02;1.60;170;12.26;11.80;10.87;10.20;10.09;22.85;SABc;;;;;;;;2MASX J08144007+4903411,IRAS 08110+4912,MCG +08-15-054,PGC 023110,SDSS J081440.11+490342.1,UGC 04284;;; +NGC2542;**;08:11:16.39;-12:55:37.5;Pup;;;;5.68;4.72;3.12;2.70;2.59;;;;;;;;;;2MASS J08111631-1255371,BD-12 2385,HD 68290,HIP 40084,IDS 08066-1238 AB,SAO 153942,TYC 5434-3731-1,WDS J08113-1256AB,19 Pup;;; +NGC2543;G;08:12:57.92;+36:15:16.7;Lyn;2.43;1.13;52;12.70;;10.53;9.75;9.43;23.20;Sb;;;;;;2232;;2MASX J08125795+3615162,IRAS 08096+3624,MCG +06-18-014,PGC 023028,SDSS J081257.92+361516.6,SDSS J081257.92+361516.7,UGC 04273;;; +NGC2544;G;08:21:40.34;+73:59:18.1;Cam;1.53;1.06;67;13.98;13.09;10.78;10.06;9.78;23.35;Sa;;;;;;;;2MASX J08214030+7359181,IRAS 08159+7409,MCG +12-08-034,PGC 023453,UGC 04327;;; +NGC2545;G;08:14:14.16;+21:21:19.7;Cnc;1.95;1.06;169;13.20;;10.35;9.67;9.39;23.00;Sab;;;;;;;;2MASX J08141413+2121198,IRAS 08113+2130,MCG +04-20-007,PGC 023086,SDSS J081414.15+212119.6,UGC 04287;;; +NGC2546;OCl;08:12:15.63;-37:35:39.5;Pup;16.50;;;6.46;6.30;;;;;;;;;;;;;MWSC 1447;;; +NGC2547;OCl;08:10:09.49;-49:12:20.4;Vel;7.80;;;4.75;4.70;;;;;;;;;;;;;MWSC 1437;;; +NGC2548;OCl;08:13:43.18;-05:45:01.6;Hya;28.20;;;6.11;5.80;;;;;;;;;048;;;;MWSC 1454;;; +NGC2549;G;08:18:58.35;+57:48:11.0;Lyn;3.63;0.92;179;12.10;;8.97;8.29;8.05;23.55;S0;;;;;;;;2MASX J08185834+5748111,MCG +10-12-124,PGC 023313,SDSS J081858.35+574810.9,UGC 04313;;; +NGC2550;G;08:24:33.86;+74:00:44.2;Cam;0.95;0.36;105;13.10;;11.33;10.50;10.40;21.01;Sb;;;;;;;;2MASX J08243364+7400443,IRAS 08188+7410,MCG +12-08-037,PGC 023604,UGC 04359;;; +NGC2550A;G;08:28:39.94;+73:44:52.8;Cam;1.60;1.33;174;13.44;;10.95;10.32;10.05;23.09;Sc;;;;;;;;2MASX J08283996+7344526,IRAS 08230+7354,MCG +12-08-043,PGC 023781,UGC 04397;;; +NGC2551;G;08:24:50.28;+73:24:43.3;Cam;1.57;1.09;53;13.10;12.11;10.27;9.64;9.37;22.69;S0-a;;;;;;;;2MASX J08245029+7324432,MCG +12-08-038,PGC 023608,UGC 04362;;; +NGC2552;G;08:19:20.53;+50:00:34.7;Lyn;2.99;1.61;60;13.00;12.56;14.52;13.86;13.61;23.26;SABm;;;;;;;;2MASX J08192055+5000351,IRAS 08156+5009,MCG +08-15-062,PGC 023340,SDSS J081920.52+500034.5,SDSS J081920.53+500034.6,SDSS J081920.53+500034.7,UGC 04325;;; +NGC2553;G;08:17:35.00;+20:54:11.1;Cnc;1.11;0.67;57;15.00;;11.19;10.50;10.28;23.32;Sa;;;;;;;;2MASX J08173503+2054116,MCG +04-20-014,PGC 023240,SDSS J081734.99+205411.0,SDSS J081735.00+205411.0,SDSS J081735.00+205411.1;;; +NGC2554;G;08:17:53.49;+23:28:19.7;Cnc;2.04;1.31;154;13.50;;9.71;9.00;8.77;23.13;S0-a;;;;;;;;2MASX J08175347+2328195,IRAS 08149+2337,MCG +04-20-015,PGC 023256,UGC 04312;;; +NGC2555;G;08:17:56.41;+00:44:44.5;Hya;1.85;1.39;111;13.50;;10.11;9.40;9.13;23.28;Sab;;;;;;;;2MASX J08175639+0044445,MCG +00-21-012,PGC 023259,UGC 04319;;HOLM 095B,C are stars.; +NGC2556;G;08:19:00.85;+20:56:13.1;Cnc;0.62;0.40;126;15.50;;12.16;11.61;11.21;23.28;E;;;;;;;;2MASX J08190087+2056133,PGC 023325,SDSS J081900.85+205613.0,SDSS J081900.85+205613.1;;; +NGC2557;G;08:19:10.75;+21:26:08.8;Cnc;1.08;0.87;50;14.60;;10.68;9.98;9.70;23.15;S0;;;;;;;;2MASX J08191074+2126085,MCG +04-20-021,PGC 023329,SDSS J081910.74+212608.7,SDSS J081910.74+212608.8,SDSS J081910.75+212608.8,UGC 04330;;The 2MASS position is 5 arcsec east of the nucleus.; +NGC2558;G;08:19:12.76;+20:30:38.7;Cnc;1.43;0.92;159;14.60;;10.84;10.15;9.99;23.12;Sab;;;;;;;;2MASX J08191278+2030385,MCG +04-20-022,PGC 023337,SDSS J081912.76+203038.6,SDSS J081912.76+203038.7,UGC 04331;;; +NGC2559;G;08:17:06.07;-27:27:21.0;Pup;2.81;1.34;7;11.71;;8.38;7.70;7.42;22.25;SBc;;;;;;;;2MASX J08170607-2727209,ESO 494-041,ESO-LV 494-0410,IRAS 08150-2718,MCG -04-20-003,PGC 023222,UGCA 136;;; +NGC2560;G;08:19:51.89;+20:59:05.9;Cnc;1.60;0.38;92;14.90;;10.84;10.06;9.80;23.79;S0-a;;;;;;;;2MASX J08195187+2059061,MCG +04-20-027,PGC 023367,SDSS J081951.89+205905.8,SDSS J081951.89+205905.9,UGC 04337;;; +NGC2561;G;08:19:36.97;+04:39:26.0;Hya;1.06;0.58;142;14.00;;11.11;10.40;10.05;22.34;SBbc;;;;;;;;2MASX J08193698+0439258,IRAS 08169+0448,MCG +01-22-001,PGC 023351,UGC 04336;;; +NGC2562;G;08:20:23.66;+21:07:53.3;Cnc;1.03;0.79;1;14.00;;10.54;9.85;9.54;22.73;S0-a;;;;;;;;2MASX J08202368+2107533,MCG +04-20-031,PGC 023395,SDSS J082023.65+210753.2,SDSS J082023.65+210753.3,SDSS J082023.66+210753.3,UGC 04345;;; +NGC2563;G;08:20:35.69;+21:04:04.1;Cnc;2.02;1.68;79;13.70;12.39;9.97;9.29;9.01;23.61;S0;;;;;;;;2MASX J08203567+2104042,MCG +04-20-033,PGC 023404,SDSS J082035.68+210404.0,SDSS J082035.68+210404.1,UGC 04347;;; +NGC2564;G;08:18:30.01;-21:48:58.0;Pup;1.36;0.86;60;;;10.74;10.00;9.73;24.08;E-S0;;;;;;;;2MASX J08183000-2148580,ESO 562-001,PGC 023290;;; +NGC2565;G;08:19:48.32;+22:01:53.2;Cnc;1.67;0.73;166;13.80;;10.39;9.71;9.39;22.53;Sbc;;;;;;;;2MASX J08194833+2201531,IRAS 08168+2211,MCG +04-20-026,PGC 023362,SDSS J081948.30+220153.2,UGC 04334;;; +NGC2566;G;08:18:45.66;-25:29:58.3;Pup;3.98;2.75;56;11.81;;8.74;8.07;7.77;23.30;Sb;;;;;;;;2MASX J08184560-2529582,ESO 495-003,ESO-LV 495-0030,IRAS 08166-2520,MCG -04-20-008,PGC 023303,UGCA 138;;; +NGC2567;OCl;08:18:35.18;-30:38:08.2;Pup;6.00;;;7.77;7.40;;;;;;;;;;;;;MWSC 1467;;; +NGC2568;OCl;08:18:18.12;-37:06:19.4;Pup;;;;;;;;;;;;;;;;;;;;; +NGC2569;G;08:21:21.14;+20:52:03.0;Cnc;0.72;0.55;118;15.30;;11.69;11.01;10.79;23.30;E;;;;;;;;2MASX J08212116+2052025,MCG +04-20-035,PGC 023442,SDSS J082121.13+205202.9,SDSS J082121.14+205203.0;;; +NGC2570;G;08:21:22.54;+20:54:38.0;Cnc;0.70;0.37;71;15.40;;12.69;12.21;11.76;22.80;Sab;;;;;;;;2MASX J08212252+2054375,MCG +04-20-036,PGC 023443,SDSS J082122.54+205437.9,UGC 04354;;; +NGC2571;OCl;08:18:56.35;-29:44:57.4;Pup;7.20;;;7.16;7.00;;;;;;;;;;;;;MWSC 1469;;; +NGC2572;G;08:21:24.63;+19:08:52.0;Cnc;1.22;0.52;135;14.80;;11.61;10.86;10.57;23.55;SBa;;;;;;;;2MASX J08212460+1908515,MCG +03-22-004,PGC 023441,SDSS J082124.62+190852.0,SDSS J082124.63+190852.0,UGC 04355;;; +NGC2573;G;01:41:37.33;-89:20:04.3;Oct;1.92;0.74;78;14.15;;11.58;10.91;10.85;23.47;Sc;;;;;;;;2MASX J01413509-8920041,ESO 001-001,ESO-LV 1-0010,IRAS 02425-8934,PGC 006249;;; +NGC2573B;G;23:07:32.82;-89:06:59.4;Oct;1.13;0.35;122;15.32;;13.25;12.61;12.12;23.25;IB;;;;;;;;2MASX J23073361-8906590,ESO 001-008,ESO-LV 1-0080,PGC 070533;;ESO incorrectly interchanged the designations for NGC 2573A and NGC 2573B.; +NGC2574;G;08:20:48.16;-08:55:06.5;Hya;2.17;1.08;172;13.20;;10.79;10.15;9.81;23.21;SBab;;;;;;;;2MASX J08204816-0855063,MCG -01-22-003,PGC 023418;;; +NGC2575;G;08:22:44.96;+24:17:48.9;Cnc;1.37;1.08;129;14.30;;11.27;10.49;10.23;23.05;Sc;;;;;;;;2MASX J08224494+2417494,IRAS 08198+2427,MCG +04-20-040,PGC 023501,SDSS J082244.94+241748.9,SDSS J082244.95+241748.9,SDSS J082244.96+241748.9,UGC 04368;;; +NGC2576;G;08:22:57.70;+25:44:19.4;Cnc;1.61;0.30;40;15.40;;12.26;11.44;10.60;23.81;SABb;;;;;;;;2MASX J08225781+2544243,MCG +04-20-041,PGC 023512,SDSS J082257.70+254419.3,SDSS J082257.70+254419.4,UGC 04371;;; +NGC2577;G;08:22:43.45;+22:33:11.1;Cnc;1.55;0.88;105;13.80;;10.01;9.33;9.05;23.10;E-S0;;;;;;;;2MASX J08224347+2233109,MCG +04-20-042,PGC 023498,SDSS J082243.44+223311.0,UGC 04367;;; +NGC2578;G;08:21:24.27;-13:19:04.3;Pup;2.19;1.10;83;14.05;13.04;10.38;9.65;9.35;23.75;S0-a;;;;;;;;2MASX J08212426-1319045,MCG -02-22-002,PGC 023440;;; +NGC2579;Cl+N;08:20:53.06;-36:13:01.7;Pup;3.30;;;;;;;;;;;;;;;;;ESO 370-008,PN G254.6+00.2;;ESO 370-PN?009 is a candidate planetary nebula included in NGC 2579.; +NGC2580;OCl;08:21:27.90;-30:17:36.5;Pup;3.00;;;;9.70;;;;;;;;;;;;;MWSC 1476;;; +NGC2581;G;08:24:30.94;+18:35:49.5;Cnc;0.96;0.70;4;13.96;;;;;22.97;SABb;;;;;;;;2MASX J08243097+1835494,IRAS 08216+1845,MCG +03-22-010,PGC 023599,SDSS J082430.94+183549.5,UGC 04388;;; +NGC2582;G;08:25:12.07;+20:20:05.1;Cnc;1.19;1.13;135;14.30;;11.12;9.93;10.09;23.07;Sb;;;;;;2359;;2MASX J08251207+2020052,MCG +04-20-050,PGC 023630,SDSS J082512.06+202005.0,SDSS J082512.06+202005.1,SDSS J082512.07+202005.1,UGC 04391;;; +NGC2583;G;08:23:07.93;-05:00:08.6;Hya;0.86;0.75;18;14.50;;11.19;10.51;10.22;22.93;E;;;;;;;;2MASX J08230792-0500083,MCG -01-22-008,PGC 023516;;; +NGC2584;G;08:23:15.45;-04:58:13.8;Hya;0.99;0.54;179;14.70;;12.44;11.79;11.88;23.04;SBbc;;;;;;;;2MASX J08231544-0458138,MCG -01-22-009,PGC 023523;;; +NGC2585;G;08:23:26.28;-04:54:54.8;Hya;1.55;0.57;119;14.50;;11.83;11.17;10.90;23.47;Sb;;;;;;;;2MASX J08232629-0454549,IRAS 08209-0445,MCG -01-22-010,PGC 023537;;; +NGC2586;Other;08:23:31.41;-04:57:07.0;Hya;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC2587;OCl;08:23:24.08;-29:30:31.4;Pup;6.00;;;;9.20;;;;;;;;;;;;;ESO 431-007,MWSC 1482;;; +NGC2588;OCl;08:23:09.57;-32:58:30.6;Pup;3.90;;;;11.80;;;;;;;;;;;;;MWSC 1480;;; +NGC2589;Other;08:24:29.47;-08:46:04.5;Hya;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC2590;G;08:25:02.00;-00:35:29.0;Hya;2.08;0.51;77;14.00;;10.47;9.75;9.38;23.23;SABb;;;;;;0507;;2MASX J08250202-0035292,IRAS 08224-0025,MCG +00-22-010,PGC 023616,SDSS J082501.90-003530.1,SDSS J082501.99-003529.0,UGC 04392;;; +NGC2591;G;08:37:25.53;+78:01:35.1;Cam;2.95;0.64;33;12.80;;10.57;9.85;9.54;22.73;Sc;;;;;;;;2MASX J08372552+7801351,IRAS 08307+7811,MCG +13-07-001,PGC 024231,UGC 04472;;; +NGC2592;G;08:27:08.05;+25:58:13.1;Cnc;1.47;1.19;47;13.60;;10.10;9.41;9.13;23.30;E;;;;;;;;2MASX J08270808+2558132,MCG +04-20-055,PGC 023701,SDSS J082708.05+255813.1,UGC 04411;;; +NGC2593;G;08:26:47.83;+17:22:29.7;Cnc;0.97;0.53;171;14.90;;11.71;11.02;10.63;23.37;S0-a;;;;;;;;2MASX J08264782+1722296,MCG +03-22-012,PGC 023692,SDSS J082647.83+172229.6,UGC 04408;;; +NGC2594;G;08:27:17.16;+25:52:43.7;Cnc;0.91;0.56;20;15.00;;11.33;10.59;10.38;23.44;S0;;;;;;;;2MASX J08271718+2552441,MCG +04-20-056,PGC 023704,SDSS J082717.16+255243.7;;; +NGC2595;G;08:27:42.02;+21:28:44.8;Cnc;1.66;1.12;175;13.90;;10.35;9.92;9.66;22.68;Sc;;;;;;;;2MASX J08274198+2128447,IRAS 08247+2138,MCG +04-20-062,PGC 023725,SDSS J082742.02+212844.7,SDSS J082742.03+212844.8,UGC 04422;;; +NGC2596;G;08:27:26.52;+17:17:02.7;Cnc;1.38;0.51;64;14.20;;11.32;10.58;10.25;22.96;Sb;;;;;;;;2MASX J08272651+1717030,IRAS 08245+1726,MCG +03-22-013,PGC 023714,SDSS J082726.51+171702.6,SDSS J082726.52+171702.7,UGC 04419;;; +NGC2597;**;08:29:57.41;+21:30:06.8;Cnc;;;;;;;;;;;;;;;;;;;;; +NGC2598;G;08:30:02.52;+21:29:19.2;Cnc;1.19;0.38;3;15.10;;11.41;10.69;10.43;23.22;SBa;;;;;;;;2MASX J08300254+2129184,MCG +04-20-065,PGC 023855,SDSS J083002.52+212919.1,UGC 04443;;; +NGC2599;G;08:32:11.30;+22:33:38.0;Cnc;1.56;1.32;108;13.40;;10.30;9.53;9.31;22.81;Sa;;;;;;;;2MASX J08321129+2233380,IRAS 08292+2243,MCG +04-20-067,PGC 023941,SDSS J083211.32+223338.0,UGC 04458;;; +NGC2600;G;08:34:45.05;+52:42:56.5;UMa;1.21;0.41;72;15.00;;12.14;11.41;11.03;23.45;Sb;;;;;;;;2MASX J08344506+5242566,MCG +09-14-068,PGC 024082,SDSS J083445.03+524256.6,SDSS J083445.04+524256.4,SDSS J083445.04+524256.5,SDSS J083445.05+524256.4,SDSS J083445.05+524256.5,UGC 04475;;; +NGC2601;G;08:25:30.66;-68:07:03.6;Vol;1.69;1.15;114;13.42;;10.18;9.48;9.17;23.17;S0-a;;;;;;;;2MASX J08253070-6807037,ESO 060-005,ESO-LV 60-0050,IRAS 08251-6757,PGC 023637;;; +NGC2602;G;08:35:04.25;+52:49:53.5;UMa;0.65;0.41;26;15.40;;12.54;11.95;11.63;23.15;S0-a;;;;;;;;2MASX J08350431+5249538,MCG +09-14-069,PGC 024099,SDSS J083504.23+524953.6,SDSS J083504.24+524953.4,SDSS J083504.24+524953.5,SDSS J083504.25+524953.5;;; +NGC2603;G;08:34:31.19;+52:50:24.8;UMa;0.40;0.34;164;16.42;;;;;23.44;Sbc;;;;;;;;2MASX J08343121+5250247,PGC 3133653,SDSS J083431.19+525024.7,SDSS J083431.19+525024.8;;;B-Mag taken from LEDA +NGC2604;G;08:33:23.14;+29:32:19.7;Cnc;1.48;1.37;50;15.38;14.92;12.04;11.42;11.04;23.39;SBc;;;;;2604A;;;2MASX J08332305+2932190,IRAS 08303+2942,MCG +05-20-022,PGC 023998,SDSS J083323.13+293219.7,SDSS J083323.14+293219.7,UGC 04469;;; +NGC2604B;G;08:33:35.66;+29:29:58.9;Cnc;0.56;0.23;58;15.60;;;;;22.81;Sd;;;;;;;;MCG +05-20-023,PGC 024004;;; +NGC2605;G;08:34:53.31;+52:48:15.5;UMa;0.45;0.35;27;16.05;;15.23;14.36;14.11;23.33;SBb;;;;;;;;2MASX J08345328+5248157,PGC 2424112,SDSS J083453.31+524815.4,SDSS J083453.31+524815.5;;;B-Mag taken from LEDA +NGC2606;G;08:35:34.44;+52:47:20.1;UMa;0.87;0.45;56;15.00;;;;;22.86;Sb;;;;;;;;2MASX J08353444+5247196,MCG +09-14-072,PGC 024117,SDSS J083534.42+524720.2,SDSS J083534.43+524720.0,SDSS J083534.44+524720.1;;MCG incorrectly calls this NGC 2603.; +NGC2607;G;08:33:56.66;+26:58:21.6;Cnc;0.84;0.80;160;14.90;;12.73;11.98;12.04;23.34;Sc;;;;;;;;2MASX J08335666+2658219,MCG +05-20-025,PGC 024038,SDSS J083356.65+265821.5,SDSS J083356.65+265821.6,SDSS J083356.66+265821.5,SDSS J083356.66+265821.6,UGC 04473;;; +NGC2608;G;08:35:17.33;+28:28:24.3;Cnc;1.95;0.95;64;13.20;;10.30;9.61;9.33;22.63;Sb;;;;;;;;2MASX J08351736+2828246,IRAS 08322+2838,MCG +05-20-027,PGC 024111,SDSS J083517.33+282824.2,SDSS J083517.33+282824.3,UGC 04484;;; +NGC2609;OCl;08:29:29.65;-61:06:36.8;Car;3.60;;;;;;;;;;;;;;;;;MWSC 1495;;; +NGC2610;PN;08:33:23.40;-16:08:58.0;Hya;0.63;;;13.60;12.70;16.71;16.29;;;;;15.60;15.90;;;;;IRAS 08310-1558,PN G239.6+13.9;;; +NGC2611;G;08:35:29.17;+25:01:39.0;Cnc;0.80;0.26;51;15.30;;12.06;11.31;10.96;23.27;S0-a;;;;;;;;2MASX J08352922+2501386,IRAS 08325+2512,PGC 024121,SDSS J083529.17+250139.0;;; +NGC2612;G;08:33:50.10;-13:10:28.3;Hya;2.60;0.80;117;13.00;;9.70;9.03;8.78;24.21;E-S0;;;;;;;;2MASX J08335002-1310290,MCG -02-22-020,PGC 024028;;; +NGC2613;G;08:33:22.84;-22:58:25.2;Pyx;7.62;1.79;113;11.29;10.42;7.83;7.12;6.83;23.28;Sb;;;;;;;;2MASX J08332284-2258252,ESO 495-018,ESO-LV 495-0180,IRAS 08311-2248,MCG -04-21-003,PGC 023997,UGCA 141;;; +NGC2614;G;08:42:47.95;+72:58:35.3;UMa;2.04;1.67;132;14.00;;11.14;10.45;10.19;23.95;Sc;;;;;;;;2MASX J08424792+7258352,IRAS 08373+7309,MCG +12-09-005,PGC 024473,UGC 04523;;; +NGC2615;G;08:34:33.35;-02:32:48.5;Hya;1.20;0.82;44;13.50;;10.43;9.73;9.44;22.55;Sb;;;;;;;;2MASX J08343335-0232485,IRAS 08320-0222,MCG +00-22-019,PGC 024071,UGC 04481;;; +NGC2616;G;08:35:34.07;-01:51:00.5;Hya;1.43;0.98;147;15.20;;10.68;9.94;9.65;23.06;S0;;;;;;;;2MASX J08353408-0151002,MCG +00-22-021,PGC 024129,UGC 04489;;; +NGC2617;G;08:35:38.79;-04:05:17.6;Hya;1.40;1.10;127;13.60;;11.03;10.32;10.05;23.07;SBc;;;;;;;;2MASX J08353877-0405172,IRAS 08331-0354,MCG -01-22-026,PGC 024141;;This pair is made up of MCG -01-22-026 and MCG -01-22-027.; +NGC2618;G;08:35:53.54;+00:42:25.6;Hya;2.07;0.88;141;13.90;;10.00;9.36;9.08;23.81;Sab;;;;;;;;2MASX J08355356+0042259,MCG +00-22-023,PGC 024156,SDSS J083553.54+004225.6,UGC 04492;;; +NGC2619;G;08:37:32.71;+28:42:18.7;Cnc;1.93;1.17;38;13.27;12.72;10.58;9.99;9.60;23.19;Sbc;;;;;;;;2MASX J08373272+2842187,IRAS 08345+2852,MCG +05-21-002,PGC 024235,SDSS J083732.70+284218.6,SDSS J083732.70+284218.7,SDSS J083732.71+284218.7,UGC 04503;;; +NGC2620;G;08:37:28.24;+24:56:49.0;Cnc;2.00;0.50;93;14.80;;11.03;10.23;10.18;24.07;Sab;;;;;;;;2MASX J08372820+2456477,MCG +04-21-001,PGC 024233,SDSS J083728.21+245648.1,SDSS J083728.22+245648.1,SDSS J083728.22+245648.2,UGC 04501;;; +NGC2621;G;08:37:36.98;+24:59:59.3;Cnc;0.73;0.47;176;15.40;;12.09;11.33;11.18;23.26;Sab;;;;;;;;2MASX J08373695+2459587,MCG +04-21-003,PGC 024241,SDSS J083736.97+245959.2,SDSS J083736.98+245959.1,SDSS J083736.98+245959.3;;; +NGC2622;G;08:38:10.94;+24:53:43.0;Cnc;0.94;0.60;10;15.01;14.12;11.37;10.52;10.29;23.07;SBb;;;;;;;;2MASX J08381094+2453427,MCG +04-21-008,PGC 024269,SDSS J083810.94+245342.9,SDSS J083810.94+245343.0;;; +NGC2623;G;08:38:24.08;+25:45:16.7;Cnc;2.39;0.70;36;13.99;13.36;11.57;10.81;10.43;23.81;Sb;;;;;;;;2MASX J08382409+2545167,IRAS 08354+2555,MCG +04-21-009,PGC 024288,SDSS J083824.00+254516.3,UGC 04509;;Position for J-band nucleus.; +NGC2624;G;08:38:09.63;+19:43:32.4;Cnc;0.77;0.47;35;14.50;;11.97;11.30;11.06;22.96;E;;;;;;;;2MASX J08380962+1943319,MCG +03-22-019,PGC 024264,SDSS J083809.62+194332.3,SDSS J083809.63+194332.4,UGC 04506;;; +NGC2625;G;08:38:23.22;+19:43:00.0;Cnc;0.53;0.44;32;15.10;;13.11;12.44;12.21;22.50;SBcd;;;;;;;;2MASX J08382322+1942589,PGC 024285,SDSS J083823.21+194300.0,SDSS J083823.22+194300.0;;; +NGC2626;RfN;08:35:28.88;-40:40:06.0;Vel;5.00;5.00;;;;;;;;;;;;;;;;2MASX J08352888-4040057;;;Dimensions taken from LEDA +NGC2627;OCl;08:37:14.94;-29:57:01.5;Pyx;5.40;;;;8.40;;;;;;;;;;;;;ESO 431-020,MWSC 1514;;; +NGC2628;G;08:40:22.71;+23:32:22.8;Cnc;1.04;0.93;30;14.10;;11.12;10.51;10.17;22.83;SABc;;;;;;;;2MASX J08402271+2332229,IRAS 08374+2342,MCG +04-21-012,PGC 024381,SDSS J084022.70+233222.8,SDSS J084022.71+233222.8,UGC 04519;;; +NGC2629;G;08:47:15.82;+72:59:08.3;UMa;1.97;1.42;100;12.80;;9.81;9.13;8.85;23.52;E-S0;;;;;;;;2MASX J08471585+7259082,MCG +12-09-010,PGC 024682,UGC 04569;;; +NGC2630;Other;08:47:07.30;+73:00:01.1;UMa;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC2631;Other;08:47:07.30;+73:00:01.1;UMa;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC2632;OCl;08:40:22.20;+19:40:19.4;Cnc;108.60;;;3.46;3.10;;;;;;;;;044;;;;MWSC 1527;Beehive,Praesepe Cluster;; +NGC2633;G;08:48:04.58;+74:05:55.9;Cam;2.31;1.45;175;12.40;;10.03;9.26;8.96;23.08;Sb;;;;;;;;2MASX J08480464+7405556,IRAS 08425+7416,MCG +12-09-013,PGC 024723,UGC 04574;;Described by VV as 'three or more galaxies with one and two bridges'.; +NGC2634;G;08:48:25.39;+73:58:01.8;Cam;1.72;1.66;30;12.60;;10.19;9.48;9.26;22.96;E;;;;;;;;2MASX J08482543+7358016,MCG +12-09-015,PGC 024749,UGC 04581;;; +NGC2634A;G;08:48:38.14;+73:56:21.4;Cam;1.19;0.37;67;14.30;;12.52;11.70;11.52;22.77;SBbc;;;;;;;;2MASX J08483817+7356215,IRAS 08433+7406,MCG +12-09-016,PGC 024760,UGC 04585;;; +NGC2635;OCl;08:38:25.99;-34:46:17.7;Pyx;5.10;;;12.06;11.20;;;;;;;;;;;;;ESO 371-001,MWSC 1519;;; +NGC2636;G;08:48:24.43;+73:40:16.1;Cam;0.34;0.34;30;14.40;;11.70;11.09;10.76;21.18;E;;;;;;;;2MASX J08482440+7340166,PGC 024747,UGC 04583;;; +NGC2637;G;08:41:13.49;+19:41:29.2;Cnc;0.51;0.43;48;15.05;;13.66;13.53;13.16;22.91;SBc;;;;;;;;2MASX J08411343+1941281,PGC 024409,SDSS J084113.48+194129.1,SDSS J084113.49+194129.1,SDSS J084113.49+194129.2;;; +NGC2638;G;08:42:25.77;+37:13:15.7;Lyn;1.66;0.59;70;13.70;;10.77;10.08;9.80;23.40;S0-a;;;;;;;;2MASX J08422575+3713161,MCG +06-19-016,PGC 024453,SDSS J084225.76+371315.6,SDSS J084225.76+371315.7,SDSS J084225.77+371315.7,UGC 04534;;; +NGC2639;G;08:43:38.08;+50:12:20.0;UMa;1.61;1.21;140;12.56;11.65;9.39;8.68;8.40;22.24;Sa;;;;;;;;2MASX J08433809+5012199,IRAS 08400+5023,MCG +08-16-024,PGC 024506,SDSS J084338.06+501219.9,UGC 04544;;; +NGC2640;G;08:37:24.62;-55:07:25.5;Car;4.67;4.00;104;;;7.72;7.01;6.72;24.18;E-S0;;;;;;;;2MASX J08372462-5507254,ESO 165-002,IRAS 08360-5456,PGC 024229;;; +NGC2641;G;08:47:57.49;+72:53:44.8;UMa;1.26;1.04;178;15.00;;10.88;10.20;9.90;24.07;S0;;;;;;;;2MASX J08475760+7253446,MCG +12-09-012,PGC 024722,UGC 04577;;; +NGC2642;G;08:40:44.37;-04:07:18.2;Hya;1.92;1.43;145;12.60;;10.56;9.95;9.53;23.35;Sbc;;;;;;;;2MASX J08404435-0407182,IRAS 08382-0356,MCG -01-22-033,PGC 024395,SDSS J084044.37-040718.0;;; +NGC2643;G;08:41:51.74;+19:42:09.1;Cnc;0.68;0.37;19;15.60;;12.64;12.00;11.81;23.27;S0-a;;;;;;2390;;2MASX J08415170+1942085,PGC 024434,SDSS J084151.73+194209.0,SDSS J084151.74+194209.1;;; +NGC2644;G;08:41:31.86;+04:58:49.2;Hya;1.64;0.65;12;13.40;;11.23;10.65;10.36;22.73;Sc;;;;;;;;2MASX J08413189+0458488,IRAS 08389+0509,MCG +01-22-016,PGC 024425,UGC 04533;;; +NGC2645;OCl;08:39:03.12;-46:13:38.3;Vel;6.60;;;7.51;7.32;;;;;;;;;;;;;ESO 259-014,MWSC 1520;;; +NGC2646;G;08:50:22.05;+73:27:47.1;Cam;1.47;1.05;47;13.00;;10.38;9.67;9.37;22.73;S0;;;;;;;;2MASX J08502210+7327474,MCG +12-09-019,PGC 024838,UGC 04604;;; +NGC2647;G;08:42:43.10;+19:39:02.2;Cnc;0.72;0.57;50;15.20;;11.86;11.24;10.80;23.08;S0-a;;;;;;;;2MASX J08424314+1939023,PGC 024463,SDSS J084243.09+193902.1,SDSS J084243.10+193902.2;;; +NGC2648;G;08:42:39.80;+14:17:08.2;Cnc;3.15;1.08;151;12.80;11.82;9.61;8.94;8.66;23.61;Sa;;;;;;;;2MASX J08423982+1417078,MCG +02-22-005,PGC 024464,SDSS J084239.80+141708.2,UGC 04541;;; +NGC2649;G;08:44:08.27;+34:43:02.1;Lyn;1.47;1.38;60;13.10;;10.93;10.37;10.05;22.93;SABb;;;;;;;;2MASX J08440830+3443017,IRAS 08409+3453,MCG +06-19-018,PGC 024531,SDSS J084408.26+344302.0,SDSS J084408.27+344302.0,SDSS J084408.27+344302.1,UGC 04555;;; +NGC2650;G;08:49:58.35;+70:17:58.0;UMa;1.38;0.99;82;14.30;;10.75;9.96;9.69;23.37;Sb;;;;;;;;2MASX J08495831+7017580,MCG +12-09-020,PGC 024817,UGC 04603;;; +NGC2651;G;08:43:55.15;+11:46:15.6;Cnc;0.53;0.44;124;15.50;;12.90;12.15;11.92;22.95;Sbc;;;;;;;;2MASX J08435516+1146159,PGC 024521,SDSS J084355.15+114615.5,SDSS J084355.15+114615.6;;; +NGC2652;Other;08:43:13.62;-03:36:44.8;Hya;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC2653;**;08:54:55.56;+78:23:36.8;Cam;;;;;;;;;;;;;;;;;;;;; +NGC2654;G;08:49:11.87;+60:13:16.0;UMa;4.45;0.89;64;12.80;;9.50;8.73;8.46;23.79;SBab;;;;;;;;2MASX J08491187+6013160,IRAS 08451+6024,MCG +10-13-017,PGC 024784,SDSS J084911.82+601316.2,UGC 04605;;; +NGC2655;G;08:55:37.73;+78:13:23.1;Cam;3.93;2.06;16;12.03;11.08;7.88;7.18;6.95;22.51;S0-a;;;;;;;;2MASX J08553773+7813230,IRAS 08491+7824,MCG +13-07-010,PGC 025069,UGC 04637;;; +NGC2656;G;08:47:53.07;+53:52:34.2;UMa;1.31;1.18;65;15.00;15.00;11.46;10.67;10.42;24.24;E-S0;;;;;;;;2MASX J08475313+5352344,MCG +09-15-025,PGC 024707,SDSS J084753.07+535234.2;;; +NGC2657;G;08:45:15.81;+09:38:43.8;Cnc;1.28;1.09;116;14.00;;12.32;11.65;11.62;23.18;SBcd;;;;;;;;2MASX J08451582+0938438,MCG +02-23-002,PGC 024595,UGC 04573;;; +NGC2658;OCl;08:43:27.34;-32:39:22.4;Pyx;7.20;;;;9.20;;;;;;;;;;;;;MWSC 1542;;; +NGC2659;OCl;08:42:33.02;-45:00:01.9;Vel;5.10;;;8.75;8.60;;;;;;;;;;;;;MWSC 1538;;; +NGC2660;OCl;08:42:37.99;-47:12:02.4;Vel;3.60;;;9.05;8.80;;;;;;;;;;;;;MWSC 1539;;; +NGC2661;G;08:45:59.54;+12:37:11.7;Cnc;1.48;1.35;5;13.90;;11.81;11.15;10.86;23.36;Sc;;;;;;;;2MASX J08455957+1237118,IRAS 08432+1248,MCG +02-23-004,PGC 024632,SDSS J084559.54+123711.6,SDSS J084559.54+123711.7,UGC 04584;;; +NGC2662;G;08:45:32.03;-15:07:16.5;Hya;1.23;1.15;10;15.00;;10.70;10.03;9.72;23.77;E;;;;;;;;2MASX J08453200-1507161,MCG -02-23-002,PGC 024612;;; +NGC2663;G;08:45:08.25;-33:47:41.1;Pyx;3.90;2.75;111;11.85;12.33;7.86;7.12;6.82;23.70;E;;;;;;;;2MASX J08450824-3347411,ESO 371-014,ESO-LV 371-0140,MCG -06-20-001,PGC 024590;;; +NGC2664;OCl;08:47:07.03;+12:36:20.8;Cnc;6.60;;;;;;;;;;;;;;;;;MWSC 1565;;; +NGC2665;G;08:46:00.99;-19:18:10.4;Hya;2.00;1.72;55;12.90;;10.22;9.55;9.25;22.64;Sa;;;;;;;;2MASX J08460098-1918105,ESO 563-019,IRAS 08437-1907,MCG -03-23-004,PGC 024634,UGCA 144;;; +NGC2666;OCl;08:49:47.02;+44:42:13.2;Lyn;;;;;;;;;;;;;;;;;;;;Identification as NGC 2666 is very uncertain.; +NGC2667;G;08:48:27.25;+19:01:10.2;Cnc;1.03;0.37;78;14.80;;11.91;11.21;11.03;23.13;Sa;;;;;2667A;2410;;2MASX J08482721+1901098,MCG +03-23-007,PGC 024741,SDSS J084827.24+190110.1,SDSS J084827.25+190110.1,SDSS J084827.25+190110.2;;HOLM 098C is a star.; +NGC2667B;G;08:48:30.17;+19:02:38.0;Cnc;0.85;0.28;43;15.40;;12.79;12.05;11.96;23.21;Sbc;;;;;;2411;;2MASX J08483017+1902378,MCG +03-23-009,PGC 024755,SDSS J084830.16+190237.9,SDSS J084830.17+190238.0;;; +NGC2668;G;08:49:22.56;+36:42:37.2;Lyn;1.23;0.66;151;14.90;;11.67;11.06;10.69;23.63;Sab;;;;;;;;2MASX J08492256+3642375,MCG +06-20-007,PGC 024791,SDSS J084922.55+364237.2,SDSS J084922.56+364237.1,SDSS J084922.57+364237.2,UGC 04616;;; +NGC2669;OCl;08:46:22.57;-52:56:51.1;Vel;8.40;;;6.35;6.10;;;;;;;;;;;;;MWSC 1561;;; +NGC2670;OCl;08:45:29.48;-48:47:29.9;Vel;4.20;;;8.31;7.80;;;;;;;;;;;;;MWSC 1554;;; +NGC2671;OCl;08:46:11.89;-41:52:37.8;Vel;5.10;;;;11.60;;;;;;;;;;;;;MWSC 1558;;; +NGC2672;G;08:49:21.89;+19:04:29.9;Cnc;3.20;2.87;100;13.10;;9.30;8.55;8.35;24.04;E;;;;;;;;2MASX J08492189+1904298,MCG +03-23-010,PGC 024790,SDSS J084921.87+190429.9,UGC 04619;;; +NGC2673;G;08:49:24.14;+19:04:27.1;Cnc;1.23;0.81;167;14.40;;;;;23.43;E;;;;;;;;MCG +03-23-011,PGC 024792,SDSS J084924.19+190427.5,UGC 04620;;; +NGC2674;G;08:49:13.21;-14:17:39.2;Hya;1.04;0.49;65;;;12.11;11.39;11.33;24.38;Sa;;;;;;;;2MASX J08491322-1417384,PGC 024785;;; +NGC2675;G;08:52:04.95;+53:37:02.3;UMa;1.51;1.05;83;14.30;13.26;11.07;10.40;10.11;24.05;E;;;;;;;;2MASX J08520492+5337026,MCG +09-15-037,PGC 024909,SDSS J085204.93+533702.6,SDSS J085204.95+533702.3,SDSS J085204.95+533702.4,UGC 04629;;; +NGC2676;G;08:51:35.65;+47:33:27.6;UMa;1.20;1.12;175;14.30;;11.08;10.40;10.16;23.60;S0;;;;;;;;2MASX J08513562+4733279,MCG +08-16-032,PGC 024881,SDSS J085135.64+473327.6,SDSS J085135.65+473327.6,SDSS J085135.65+473327.8,UGC 04627;;; +NGC2677;G;08:50:01.33;+19:00:35.2;Cnc;0.70;0.41;169;15.20;;12.33;11.58;11.40;23.09;E?;;;;;;;;2MASX J08500133+1900354,MCG +03-23-012,PGC 024821,SDSS J085001.32+190035.1,SDSS J085001.33+190035.2;;; +NGC2678;OCl;08:50:02.75;+11:20:17.2;Cnc;10.00;10.00;0;;;;;;;;;;;;;;;;;; +NGC2679;G;08:51:32.94;+30:51:55.3;Cnc;1.85;1.85;165;14.30;;10.62;9.92;9.67;24.10;S0;;;;;;;;2MASX J08513292+3051555,MCG +05-21-014 NED01,PGC 024884,SDSS J085132.94+305155.2,UGC 04632;;; +NGC2680;G;08:51:33.49;+30:51:56.9;Cnc;0.16;0.11;;;;;;;;;;;;;;;;MCG +05-21-014 NED02,UGC 04632 NOTES01;;; +NGC2681;G;08:53:32.74;+51:18:49.2;UMa;3.97;3.97;70;11.09;10.29;8.41;7.71;7.45;22.88;S0-a;;;;;;;;2MASX J08533273+5118493,IRAS 08500+5130,MCG +09-15-041,PGC 024961,UGC 04645;;; +NGC2682;OCl;08:51:20.13;+11:48:43.0;Cnc;33.00;;;7.60;6.90;;;;;;;;;067;;;;MWSC 1585;;; +NGC2683;G;08:52:41.33;+33:25:18.3;Lyn;9.48;2.70;44;10.68;9.79;7.31;6.60;6.33;22.76;Sb;;;;;;;;2MASX J08524134+3325184,IRAS 08495+3336,MCG +06-20-011,PGC 024930,UGC 04641;;; +NGC2684;G;08:54:54.04;+49:09:37.4;UMa;1.10;0.84;49;13.40;;11.22;10.60;10.38;22.43;SABb;;;;;;;;2MASX J08545405+4909375,IRAS 08514+4921,MCG +08-16-035,PGC 025024,SDSS J085454.04+490937.4,SDSS J085454.05+490937.8,SDSS J085454.06+490937.4,UGC 04662;;; +NGC2685;G;08:55:34.71;+58:44:03.8;UMa;4.33;2.31;38;13.68;12.70;9.25;8.58;8.35;24.03;S0-a;;;;;;;;2MASX J08553474+5844038,MCG +10-13-039,PGC 025065,SDSS J085534.71+584403.8,UGC 04666;Helix Galaxy;; +NGC2686A;G;08:54:58.91;+49:08:32.4;UMa;0.88;0.51;71;17.98;17.12;11.95;10.98;11.03;24.20;E;;;;;;;;2MASX J08545893+4908324,MCG +08-16-036,PGC 025026,SDSS J085458.90+490832.3,SDSS J085458.90+490832.4,SDSS J085458.91+490832.4,SDSS J085458.92+490832.3,SDSS J085458.92+490832.7;;; +NGC2686B;G;08:55:00.59;+49:08:32.8;UMa;0.48;0.35;63;16.00;;;;;24.05;E;;;;;;;;MCG +08-16-037,PGC 025025,SDSS J085500.58+490832.8;;; +NGC2687A;G;08:55:05.02;+49:09:23.4;UMa;0.23;0.11;;17.00;;;;;;;;;;;;;;MCG +08-16-038,PGC 025031,SDSS J085505.01+490923.4;;; +NGC2687B;G;08:55:06.04;+49:09:22.0;UMa;0.69;0.39;28;16.00;;12.20;11.40;11.08;23.50;E-S0;;;;;;;;2MASX J08550600+4909217,MCG +08-16-039,PGC 025030,SDSS J085506.03+490922.0,SDSS J085506.04+490922.0,SDSS J085506.05+490922.0,SDSS J085506.05+490922.3;;; +NGC2688;G;08:55:11.59;+49:07:21.4;UMa;0.47;0.36;87;16.00;;13.65;13.03;12.31;23.37;Sb;;;;;;;;2MASX J08551161+4907218,MCG +08-16-040,PGC 025048,SDSS J085511.59+490721.3,SDSS J085511.59+490721.4,SDSS J085511.60+490721.4,SDSS J085511.61+490721.4,SDSS J085511.61+490721.7;;; +NGC2689;G;08:55:25.41;+49:06:55.7;UMa;0.41;0.30;99;17.45;;13.70;13.01;12.59;23.85;E;;;;;;;;2MASX J08552536+4906557,PGC 025042,SDSS J085525.41+490655.6;;; +NGC2690;G;08:52:38.03;-02:36:11.6;Hya;1.70;0.39;20;14.10;;10.56;9.92;9.64;23.02;Sab;;;;;;;;2MASX J08523804-0236117,MCG +00-23-008,PGC 024926,UGC 04647;;; +NGC2691;G;08:54:46.34;+39:32:19.2;Lyn;1.26;0.90;166;14.87;14.10;11.29;10.55;10.27;23.01;Sa;;;;;;;;2MASX J08544631+3932197,IRAS 08515+3943,MCG +07-18-064,PGC 025020,SDSS J085446.30+393219.7,SDSS J085446.30+393219.8,SDSS J085446.31+393219.6,SDSS J085446.31+393219.7,SDSS J085446.31+393219.8,UGC 04664;;; +NGC2692;G;08:56:58.01;+52:03:57.4;UMa;1.25;0.55;163;14.18;;10.77;10.13;9.90;22.71;Sab;;;;;;;;2MASX J08565802+5203575,MCG +09-15-057,PGC 025142,SDSS J085658.00+520357.4,SDSS J085658.00+520357.6,SDSS J085658.01+520357.4,UGC 04675;;; +NGC2693;G;08:56:59.27;+51:20:50.8;UMa;2.00;1.37;158;12.84;11.88;9.59;8.92;8.60;23.17;E;;;;;;;;2MASX J08565924+5120504,MCG +09-15-055,PGC 025144,SDSS J085659.26+512050.7,UGC 04674;;CGCG misprints declination as +51d 03'.; +NGC2694;G;08:56:59.26;+51:19:55.1;UMa;0.81;0.50;177;15.50;;12.08;11.39;11.46;23.56;E;;;;;;;;2MASX J08565924+5119544,MCG +09-15-056,PGC 025143,SDSS J085659.25+511955.0,SDSS J085659.25+511955.3,SDSS J085659.26+511955.0,SDSS J085659.26+511955.1,UGC 04674 NOTES01;;CGCG misprints Dec as +5102.; +NGC2695;G;08:54:27.07;-03:04:01.3;Hya;1.63;1.45;161;13.30;;9.77;9.06;8.86;22.65;S0;;;;;;;;2MASX J08542706-0304015,MCG +00-23-010,PGC 025003;;; +NGC2696;G;08:50:42.05;-05:00:35.2;Hya;1.03;0.95;25;16.00;;11.34;10.62;10.22;24.19;E;;;;;;;;2MASX J08504207-0500343,MCG -01-23-004,PGC 024851;;Identification as NGC 2696 is uncertain.; +NGC2697;G;08:54:59.40;-02:59:15.4;Hya;1.63;0.96;123;13.60;;10.75;10.08;9.89;23.26;S0-a;;;;;;;;2MASX J08545939-0259154,IRAS 08524-0247,MCG +00-23-011,PGC 025029;;; +NGC2698;G;08:55:36.51;-03:11:02.2;Hya;1.47;0.53;96;13.20;;9.82;9.13;8.84;22.75;S0-a;;;;;;;;2MASX J08553653-0311019,MCG +00-23-012,PGC 025067;;; +NGC2699;G;08:55:48.80;-03:07:39.3;Hya;1.41;0.76;40;13.60;;10.28;9.63;9.37;23.25;E;;;;;;;;2MASX J08554881-0307390,MCG +00-23-014,PGC 025075;;; +NGC2700;*;08:55:50.58;-03:06:59.0;Hya;;;;;;;;;;;;;;;;;;;;; +NGC2701;G;08:59:05.74;+53:46:18.0;UMa;1.94;1.30;25;12.30;;10.56;10.10;9.68;22.62;Sc;;;;;;;;2MASX J08590572+5346183,IRAS 08554+5357,MCG +09-15-063,PGC 025237,SDSS J085905.74+534618.0,UGC 04695;;; +NGC2702;*;08:55:54.64;-03:03:55.2;Hya;;;;;;;;;;;;;;;;;;;;; +NGC2703;**;08:55:47.13;-03:18:24.9;Hya;;;;;;;;;;;;;;;;;;;;; +NGC2704;G;08:56:47.69;+39:22:55.9;Lyn;1.04;1.01;120;14.40;;11.72;11.00;10.76;23.15;Sab;;;;;;2424;;2MASX J08564772+3922554,MCG +07-19-005,PGC 025134,SDSS J085647.69+392255.8,SDSS J085647.69+392255.9,UGC 04678;;HOLM 103B is a star.; +NGC2705;*;08:56:00.05;-03:00:53.6;Hya;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC2706;G;08:56:12.31;-02:33:48.4;Hya;1.67;0.57;168;13.80;;10.68;9.86;9.53;22.75;Sbc;;;;;;;;2MASX J08561231-0233483,IRAS 08536-0222,MCG +00-23-017,PGC 025102,UGC 04680;;; +NGC2707;*;08:56:05.68;-03:03:59.1;Hya;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC2708;G;08:56:08.05;-03:21:36.4;Hya;2.93;1.06;18;12.60;;9.81;9.15;8.88;23.18;SABb;;;;;2727;;;2MASX J08560804-0321363,IRAS 08535-0309,MCG +00-23-015,PGC 025097;;; +NGC2709;G;08:56:12.86;-03:14:35.6;Hya;0.79;0.65;95;14.80;;12.15;11.45;11.37;23.21;S0;;;;;;;;2MASX J08561285-0314353,MCG +00-23-016,PGC 025103;;; +NGC2710;G;08:59:48.35;+55:42:23.0;UMa;2.02;0.97;119;13.66;;11.68;11.18;10.45;23.48;SBb;;;;;;;;2MASX J08594833+5542231,IRAS 08560+5554,MCG +09-15-066,PGC 025258,SDSS J085948.41+554222.5,UGC 04705;;; +NGC2711;G;08:57:23.60;+17:17:16.9;Cnc;0.56;0.38;158;14.60;;12.66;11.96;11.81;22.18;SBa;;;;;;;;2MASX J08572362+1717163,IRAS 08545+1728,MCG +03-23-020,PGC 025164,SDSS J085723.59+171716.8,UGC 04688;;; +NGC2712;G;08:59:30.47;+44:54:50.0;Lyn;2.93;1.59;1;12.30;;10.01;9.37;9.10;23.41;SBb;;;;;;;;2MASX J08593045+4454504,IRAS 08561+4506,MCG +08-17-003,PGC 025248,SDSS J085930.47+445450.0,UGC 04708;;The 2MASXi position is 5 arcsec southwest of the nucleus.; +NGC2713;G;08:57:20.51;+02:55:16.7;Hya;3.37;1.15;106;12.90;;9.26;8.56;8.31;23.48;SBb;;;;;;;;2MASX J08572051+0255171,IRAS 08547+0306,MCG +01-23-006,PGC 025161,SDSS J085720.50+025516.7,UGC 04691;;; +NGC2714;G;08:53:29.82;-59:13:01.6;Car;1.37;1.18;50;;;9.87;9.10;8.82;23.50;E;;;;;;;;2MASX J08532984-5913016,ESO 125-007,PGC 024959;;; +NGC2715;G;09:08:06.20;+78:05:06.6;Cam;4.20;1.41;20;11.90;;9.52;8.68;8.60;23.00;SABc;;;;;;;;2MASX J09080619+7805065,IRAS 09018+7817,MCG +13-07-015,PGC 025676,UGC 04759;;; +NGC2716;G;08:57:35.88;+03:05:24.8;Hya;1.63;1.14;45;13.70;;10.15;9.45;9.19;22.84;S0-a;;;;;;;;2MASX J08573586+0305250,MCG +01-23-007,PGC 025172,SDSS J085735.87+030524.8,SDSS J085735.88+030524.8,UGC 04692;;HOLM 104B is a double star.; +NGC2717;G;08:57:01.12;-24:40:25.5;Pyx;2.03;1.69;12;13.21;;9.62;8.84;8.61;23.68;E-S0;;;;;;;;2MASX J08570113-2440255,ESO 496-021,ESO-LV 496-0210,MCG -04-21-015,PGC 025146,TYC 6589-1806-1;;; +NGC2718;G;08:58:50.47;+06:17:34.8;Hya;1.72;1.09;152;14.97;14.24;10.56;9.86;9.51;23.12;Sab;;;;;;;;2MASX J08585046+0617354,IRAS 08561+0629,MCG +01-23-015,PGC 025225,SDSS J085850.46+061734.7,SDSS J085850.47+061734.8,UGC 04707;;; +NGC2719;G;09:00:15.46;+35:43:39.5;Lyn;1.17;0.30;132;13.70;;12.49;12.20;11.83;21.89;IB;;;;;;;;2MASX J09001576+3543387,MCG +06-20-017,PGC 025281,UGC 04718;;; +NGC2719A;G;09:00:15.94;+35:43:12.5;Lyn;0.49;0.40;150;14.00;;13.68;13.31;12.98;21.50;I;;;;;;;;2MASX J09001609+3543077,MCG +06-20-018,PGC 025284,UGC 04718 NOTES01;;; +NGC2720;G;08:59:08.06;+11:08:57.2;Cnc;1.26;1.11;40;14.20;;10.67;9.96;9.68;23.47;E-S0;;;;;;;;2MASX J08590808+1108566,MCG +02-23-016,PGC 025238,SDSS J085908.06+110857.2,UGC 04710;;; +NGC2721;G;08:58:56.52;-04:54:07.0;Hya;1.85;1.33;164;13.10;;10.63;10.00;9.72;22.94;SBbc;;;;;;;;2MASX J08585649-0454072,IRAS 08564-0442,MCG -01-23-015,PGC 025231;;Declination in MCG is +8 arcmin in error.; +NGC2722;G;08:58:46.17;-03:42:36.4;Hya;1.83;0.95;80;13.50;;11.22;10.62;10.41;23.00;Sbc;;;;;2733;;;2MASX J08584617-0342363,IRAS 08562-0330,MCG -01-23-014,PGC 025221;;MCG errata note that its declinations are +8 arcmin in error for this field.; +NGC2723;G;09:00:14.36;+03:10:39.9;Hya;1.14;1.04;65;14.50;;10.75;10.02;9.79;23.30;S0;;;;;;;;2MASX J09001435+0310396,MCG +01-23-017,PGC 025280,SDSS J090014.36+031039.8,UGC 04723;;; +NGC2724;G;09:01:01.82;+35:45:43.4;Lyn;1.20;0.68;175;13.50;;14.03;13.39;12.67;23.63;Sc;;;;;;;;2MASX J09010184+3545431,MCG +06-20-019,PGC 025331,UGC 04726;;; +NGC2725;G;09:01:03.22;+11:05:54.2;Cnc;0.67;0.58;14;14.10;;12.36;11.79;11.42;22.17;SABb;;;;;;;;2MASX J09010322+1105541,MCG +02-23-018,PGC 025332,SDSS J090103.23+110553.9,UGC 04732;;; +NGC2726;G;09:04:56.77;+59:55:58.5;UMa;1.53;0.46;87;13.10;;10.75;10.03;9.79;22.45;Sa;;;;;;;;2MASX J09045569+5955589,2MASX J09045685+5955586,IRAS 09010+6007,MCG +10-13-054,PGC 025498,SDSS J090456.77+595558.5,UGC 04750;;MCG misprints R.A. as 08h01.0m. MRK list I & UGC misidentify this as MRK0018; +NGC2727;Dup;08:56:08.05;-03:21:36.4;Hya;;;;;;;;;;;;;;;2708;;;;;; +NGC2728;G;09:01:40.93;+11:04:58.7;Cnc;0.98;0.63;55;14.90;;12.71;12.07;11.97;23.62;SABb;;;;;;;;2MASX J09014096+1104584,MCG +02-23-020,PGC 025360,SDSS J090140.93+110458.7,UGC 04738;;; +NGC2729;G;09:01:28.62;+03:43:14.2;Hya;1.06;0.64;1;14.00;;11.20;10.49;10.20;23.09;S0;;;;;;;;2MASX J09012864+0343140,MCG +01-23-018,PGC 025352,SDSS J090128.61+034314.0,SDSS J090128.61+034314.1,SDSS J090128.62+034314.2,UGC 04737;;HOLM 106B is a star.; +NGC2730;G;09:02:15.83;+16:50:17.9;Cnc;1.45;0.95;72;13.70;;12.47;11.89;11.82;23.11;Sd;;;;;;;;2MASX J09021583+1650175,IRAS 08594+1702,MCG +03-23-028,PGC 025384,SDSS J090215.82+165017.8,UGC 04743;;; +NGC2731;G;09:02:08.41;+08:18:06.0;Cnc;0.72;0.49;72;14.20;;11.45;10.82;10.49;21.85;SABb;;;;;;;;2MASX J09020839+0818063,IRAS 08594+0829,MCG +02-23-021,PGC 025376,SDSS J090208.41+081805.9,UGC 04741;;; +NGC2732;G;09:13:24.73;+79:11:14.4;Cam;1.81;0.71;66;12.60;;9.87;9.15;8.94;22.82;S0;;;;;;;;2MASX J09132476+7911145,MCG +13-07-016,PGC 025999,UGC 04818;;; +NGC2733;Dup;08:58:46.17;-03:42:36.4;Hya;;;;;;;;;;;;;;;2722;;;;;; +NGC2734;G;09:03:01.61;+16:51:49.0;Cnc;0.92;0.78;88;17.71;;12.36;11.55;11.10;24.30;S0-a;;;;;;;;2MASX J09030161+1651486,PGC 025413,SDSS J090301.60+165148.9,SDSS J090301.61+165148.9;;; +NGC2735;G;09:02:38.64;+25:56:04.3;Cnc;1.42;0.53;96;14.20;;10.88;10.15;9.82;22.95;SABb;;;;;;;;2MASX J09023863+2556045,MCG +04-22-002,PGC 025399,UGC 04744;;; +NGC2735A;G;09:02:41.87;+25:56:18.2;Cnc;0.30;0.27;52;14.20;;13.42;12.55;12.61;21.23;I;;;;;;;;2MASX J09024189+2556185,MCG +04-22-003,PGC 025402,SDSS J090241.86+255618.2,SDSS J090241.87+255618.2,UGC 04744 NOTES01;;; +NGC2736;HII;09:00:16.94;-45:56:53.0;Vel;30.00;7.00;;;;;;;;;;;;;;;;;Pencil Nebula;; +NGC2737;G;09:03:59.72;+21:54:23.6;Cnc;0.95;0.38;61;14.80;;11.32;10.62;10.35;22.55;Sab;;;;;;;;2MASX J09035969+2154237,MCG +04-22-005,PGC 025453,SDSS J090359.71+215423.6,SDSS J090359.72+215423.6,UGC 04751;;; +NGC2738;G;09:04:00.45;+21:58:03.4;Cnc;1.36;0.62;53;13.80;;11.21;10.47;10.34;22.75;Sbc;;;;;;;;2MASX J09040047+2158036,IRAS 09011+2210,MCG +04-22-006,PGC 025454,SDSS J090400.35+215803.1,SDSS J090400.45+215803.3,SDSS J090400.45+215803.4,UGC 04752;;Multiple SDSS entries describe this object.; +NGC2739;G;09:06:02.83;+51:44:40.9;UMa;0.86;0.35;93;15.50;;12.44;11.77;11.62;23.49;Sa;;;;;;;;2MASX J09060283+5144411,MCG +09-15-085,PGC 025530,SDSS J090602.81+514441.0,SDSS J090602.83+514440.9;;; +NGC2740;G;09:06:04.99;+51:44:07.1;UMa;0.73;0.61;52;15.10;;12.70;12.00;11.75;23.12;SBab;;;;;;;;2MASX J09060498+5144071,MCG +09-15-086,PGC 025531,SDSS J090604.97+514407.2,SDSS J090604.98+514407.0,SDSS J090604.98+514407.1,SDSS J090604.99+514407.1;;; +NGC2741;G;09:03:16.50;+18:15:39.9;Cnc;0.67;0.44;77;16.00;;13.12;12.41;12.14;23.14;Sab;;;;;;;;2MASX J09031650+1815401,IRAS 09004+1827,PGC 025425,SDSS J090316.37+181539.9,SDSS J090316.50+181539.8,SDSS J090316.50+181539.9;;Multiple SDSS entries describe this object.; +NGC2742;G;09:07:33.53;+60:28:45.6;UMa;2.86;1.49;87;12.00;;9.71;9.12;8.81;22.56;Sc;;;;;2816;;;2MASX J09073352+6028454,IRAS 09036+6040,MCG +10-13-057,PGC 025640,SDSS J090733.58+602846.0,UGC 04779;;; +NGC2742A;G;09:09:58.07;+62:14:50.5;UMa;1.57;0.67;89;14.00;;10.89;10.13;9.72;23.17;Sb;;;;;;;;2MASX J09095803+6214504,IRAS 09059+6227,MCG +10-13-060,PGC 025836,SDSS J090958.06+621450.4,SDSS J090958.07+621450.4,SDSS J090958.07+621450.5,UGC 04803;;; +NGC2743;G;09:04:54.06;+25:00:14.1;Cnc;1.10;0.75;99;14.30;;11.41;10.88;10.71;22.76;Sd;;;;;;;;2MASX J09045400+2500145,IRAS 09019+2512,MCG +04-22-009,PGC 025496,SDSS J090454.06+250014.1,UGC 04760;;; +NGC2744;GPair;09:04:38.90;+18:27:37.0;Cnc;1.20;;;;;;;;;;;;;;;;;MCG +03-23-031,UGC 04757;;;Diameter of the group inferred by the author. +NGC2744 NED01;G;09:04:38.70;+18:27:22.0;Cnc;;;;;;;;;;S?;;;;;;;;MCG +03-23-031 NED01,PGC 200248,UGC 04757 NED01;;; +NGC2744 NED02;G;09:04:39.00;+18:27:52.0;Cnc;1.66;0.81;114;13.70;;11.72;11.09;10.70;23.12;SBab;;;;;;;;2MASX J09043901+1827521,IRAS 09018+1839,MCG +03-23-031 NED02,PGC 025480,SDSS J090439.00+182751.9,UGC 04757 NED02;;; +NGC2745;G;09:04:39.33;+18:15:26.5;Cnc;0.60;0.50;170;15.50;;12.68;12.04;11.80;23.42;E;;;;;;;;2MASX J09043929+1815261,PGC 025478,SDSS J090439.32+181526.5,SDSS J090439.33+181526.5;;; +NGC2746;G;09:05:59.44;+35:22:38.6;Lyn;1.57;1.31;51;14.40;;10.78;10.08;9.75;23.73;Sa;;;;;;;;2MASX J09055947+3522388,MCG +06-20-023,PGC 025533,SDSS J090559.44+352238.5,SDSS J090559.44+352238.6,UGC 04770;;; +NGC2747;G;09:05:18.34;+18:26:31.9;Cnc;0.56;0.35;172;15.50;;12.91;12.09;11.84;23.12;S0-a;;;;;;;;2MASX J09051836+1826322,PGC 025507,SDSS J090518.33+182631.9,SDSS J090518.34+182631.9;;; +NGC2748;G;09:13:43.02;+76:28:31.2;Cam;2.60;1.11;39;11.70;;9.80;9.11;8.78;22.55;Sbc;;;;;;;;2MASX J09134303+7628312,IRAS 09080+7640,MCG +13-07-019,PGC 026018,UGC 04825;;; +NGC2749;G;09:05:21.32;+18:18:47.2;Cnc;1.92;1.77;65;13.30;;9.91;9.21;8.93;23.07;E;;;;;;;;2MASX J09052131+1818472,MCG +03-23-036,PGC 025508,UGC 04763;;; +NGC2750;G;09:05:47.91;+25:26:14.7;Cnc;2.03;1.46;82;12.70;;10.48;10.05;9.67;22.75;SABc;;;;;;;;2MASX J09054789+2526145,PGC 025525,UGC 04769;;; +NGC2751;G;09:05:32.40;+18:15:44.3;Cnc;0.87;0.48;134;15.10;;12.19;11.39;11.32;22.96;SBb;;;;;;;;2MASX J09053239+1815445,MCG +03-23-037,PGC 025517,SDSS J090532.39+181544.2,SDSS J090532.40+181544.3;;; +NGC2752;G;09:05:43.03;+18:20:23.0;Cnc;1.74;0.33;61;14.80;;11.10;10.29;9.92;23.55;SBb;;;;;;;;2MASX J09054305+1820226,2MASX J09054355+1820276,IRAS 09028+1832,MCG +03-23-038,PGC 025523,SDSS J090543.02+182022.9,SDSS J090543.03+182023.0,UGC 04772;;; +NGC2753;G;09:07:08.26;+25:20:32.9;Cnc;0.55;0.34;17;14.80;;12.16;11.46;11.17;21.89;SBab;;;;;;;;2MASX J09070822+2520324,MCG +04-22-015 NED01,PGC 025603,SDSS J090708.25+252032.8,SDSS J090708.26+252032.9;;; +NGC2754;G;09:05:11.21;-19:05:05.5;Hya;0.78;0.68;140;15.23;;11.79;11.16;10.76;23.50;S0;;;;;;;;2MASX J09051123-1905048,ESO 564-016,ESO-LV 564-0160,PGC 025504;;; +NGC2755;G;09:07:58.31;+41:42:32.2;Lyn;1.15;0.76;127;14.20;;11.80;11.18;10.75;23.06;Sbc;;;;;;;;2MASX J09075831+4142324,IRAS 09047+4154,MCG +07-19-034,PGC 025670,SDSS J090758.30+414232.1,SDSS J090758.31+414232.1,SDSS J090758.31+414232.2,UGC 04789;;; +NGC2756;G;09:09:00.93;+53:50:58.3;UMa;1.50;1.00;0;13.20;;10.45;9.79;9.51;22.45;Sb;;;;;;;;2MASX J09090098+5350581,IRAS 09054+5402,MCG +09-15-098,PGC 025757,SDSS J090900.92+535058.3,UGC 04796;;; +NGC2757;Other;09:05:25.76;-19:02:52.1;Hya;;;;;;;;;;;;;;;;;;;;Galactic triple star. Identification as NGC 2757 is uncertain.; +NGC2758;G;09:05:31.20;-19:02:34.0;Hya;1.87;0.41;18;13.99;;12.50;11.98;11.44;23.03;SBbc;;;;;;;;2MASX J09053119-1902339,ESO 564-020,ESO-LV 564-0200,IRAS 09032-1850,MCG -03-23-019,PGC 025515;;; +NGC2759;G;09:08:37.29;+37:37:17.8;Lyn;1.27;0.90;49;14.20;;10.76;10.03;9.80;23.26;E-S0;;;;;;;;2MASX J09083728+3737174,MCG +06-20-033,PGC 025718,SDSS J090837.28+373717.6,SDSS J090837.28+373717.7,SDSS J090837.29+373717.6,SDSS J090837.29+373717.8,UGC 04795;;; +NGC2760;G;09:24:13.04;+76:31:52.6;Dra;1.21;0.27;100;15.10;;13.71;13.84;13.02;;E-S0;;;;;;;;2MASX J09241520+7631531,MCG +13-07-027,PGC 026654;;Identification as NGC 2760 is very uncertain.;Diameters and position angle taken from Simbad. +NGC2761;G;09:07:30.83;+18:26:05.1;Cnc;0.76;0.43;164;14.80;;11.91;11.18;10.74;22.70;Sm;;;;;;;;2MASX J09073082+1826057,IRAS 09047+1838,MCG +03-23-041,PGC 025638,SDSS J090730.82+182605.1,SDSS J090730.83+182605.1;;; +NGC2762;G;09:09:54.53;+50:25:05.7;UMa;0.51;0.36;180;15.70;;13.06;12.56;12.41;23.17;S0;;;;;;;;2MASX J09095451+5025059,MCG +08-17-045,PGC 025828,SDSS J090954.52+502505.9,SDSS J090954.53+502505.7,SDSS J090954.54+502505.7;;; +NGC2763;G;09:06:49.05;-15:29:59.2;Hya;2.43;1.88;136;12.30;;10.40;9.72;9.56;23.10;SBc;;;;;;;;2MASX J09064903-1529591,IRAS 09044-1517,MCG -02-23-010,PGC 025570;;; +NGC2764;G;09:08:17.47;+21:26:36.0;Cnc;1.15;0.67;18;13.90;;10.89;10.12;9.82;22.67;S0;;;;;;;;2MASX J09081751+2126364,IRAS 09054+2138,MCG +04-22-017,PGC 025690,SDSS J090817.46+212636.0,UGC 04794;;; +NGC2765;G;09:07:36.64;+03:23:34.5;Hya;2.74;0.93;105;13.30;;10.17;9.48;9.22;24.02;S0;;;;;;;;2MASX J09073666+0323347,MCG +01-24-001,PGC 025646,SDSS J090736.64+032334.4,SDSS J090736.64+032334.5,UGC 04791;;; +NGC2766;G;09:08:47.54;+29:51:53.2;Cnc;1.20;0.53;129;14.60;;11.50;10.79;10.45;23.19;SBab;;;;;;;;2MASX J09084752+2951531,MCG +05-22-009,PGC 025735,SDSS J090847.53+295153.1,SDSS J090847.53+295153.2,UGC 04801;;; +NGC2767;G;09:10:11.88;+50:24:04.7;UMa;0.72;0.63;167;14.40;;11.31;10.55;10.32;22.54;E-S0;;;;;;;;2MASX J09101187+5024048,MCG +08-17-048,PGC 025852,SDSS J091011.87+502404.9,SDSS J091011.88+502404.6,SDSS J091011.88+502404.7,SDSS J091011.89+502404.7,UGC 04813;;; +NGC2768;G;09:11:37.50;+60:02:14.0;UMa;5.64;2.24;93;10.84;9.87;7.93;7.23;7.00;23.38;E;;;;;;;;2MASX J09113750+6002139,MCG +10-13-065,PGC 025915,SDSS J091137.39+600214.8,UGC 04821;;; +NGC2769;G;09:10:32.16;+50:25:59.8;UMa;1.61;0.37;145;13.80;;10.50;9.77;9.44;23.05;Sa;;;;;;;;2MASX J09103209+5026000,MCG +08-17-050,PGC 025870,SDSS J091032.15+502559.7,SDSS J091032.15+502600.0,SDSS J091032.16+502559.7,SDSS J091032.16+502559.8,UGC 04816;;; +NGC2770;G;09:09:33.71;+33:07:24.7;Lyn;3.45;0.81;146;12.10;;10.52;9.81;9.57;23.02;Sc;;;;;;;;2MASX J09093362+3307242,IRAS 09065+3319,MCG +06-20-038,PGC 025806,SDSS J090933.70+330724.6,SDSS J090933.70+330724.7,SDSS J090933.71+330724.7,UGC 04806;;HOLM 111B is a star.; +NGC2771;G;09:10:39.66;+50:22:47.5;UMa;1.73;1.49;42;14.00;;10.80;10.12;9.83;23.76;Sab;;;;;;;;2MASX J09103962+5022470,MCG +08-17-051,PGC 025875,SDSS J091039.65+502247.5,SDSS J091039.66+502247.3,SDSS J091039.66+502247.4,SDSS J091039.66+502247.5,UGC 04817;;; +NGC2772;G;09:07:41.87;-23:37:17.1;Pyx;1.71;1.07;170;14.19;;10.59;9.74;9.40;23.77;SBb;;;;;;;;2MASX J09074186-2337172,ESO 497-014,ESO-LV 497-0140,IRAS 09054-2325,MCG -04-22-002,PGC 025654;;; +NGC2773;G;09:09:44.19;+07:10:25.3;Cnc;0.65;0.29;84;14.50;;11.57;10.83;10.50;22.07;Sab;;;;;;;;2MASX J09094416+0710255,IRAS 09070+0722,MCG +01-24-004,PGC 025825,SDSS J090944.16+071025.6,UGC 04815;;; +NGC2774;G;09:10:39.92;+18:41:47.7;Cnc;1.19;1.17;60;14.80;;;;;23.85;E;;;;;;;;2MASX J09103992+1841475,MCG +03-24-004,PGC 025879,SDSS J091039.92+184147.6,SDSS J091039.92+184147.7;;; +NGC2775;G;09:10:20.12;+07:02:16.6;Cnc;4.25;3.36;159;11.42;10.48;7.92;7.41;7.04;22.88;Sab;;;;;;;;2MASX J09102011+0702165,C 048,IRAS 09076+0714,MCG +01-24-005,PGC 025861,SDSS J091020.13+070216.8,UGC 04820;;; +NGC2776;G;09:12:14.51;+44:57:17.4;Lyn;2.14;0.91;111;12.25;11.69;10.05;9.44;9.13;21.89;SABc;;;;;;;;2MASX J09121453+4457176,IRAS 09089+4509,MCG +08-17-056,PGC 025946,SDSS J091214.51+445717.4,SDSS J091214.52+445717.4,UGC 04838;;; +NGC2777;G;09:10:41.83;+07:12:24.1;Cnc;0.76;0.59;169;13.90;;12.50;11.70;11.62;22.22;Sb;;;;;;;;2MASX J09104188+0712241,IRAS 09080+0724,MCG +01-24-006,PGC 025876,SDSS J091041.83+071224.1,UGC 04823;;; +NGC2778;G;09:12:24.37;+35:01:39.1;Lyn;1.30;0.98;46;13.10;;10.40;9.72;9.51;22.77;E;;;;;;;;2MASX J09122439+3501387,MCG +06-20-043,PGC 025955,SDSS J091224.37+350139.1,UGC 04840;;; +NGC2779;G;09:12:28.29;+35:03:13.5;Lyn;0.72;0.61;25;15.50;;12.84;12.58;12.07;23.50;S0-a;;;;;;;;2MASX J09122830+3503136,MCG +06-20-044,PGC 025958,SDSS J091228.29+350313.5;;; +NGC2780;G;09:12:44.37;+34:55:32.1;Lyn;1.06;0.77;147;14.20;;11.86;11.07;10.86;22.96;Sb;;;;;;;;2MASX J09124436+3455318,MCG +06-20-047,PGC 025967,SDSS J091244.37+345532.0,SDSS J091244.37+345532.1,UGC 04843;;; +NGC2781;G;09:11:27.52;-14:49:00.6;Hya;2.52;1.26;78;12.50;;9.44;8.76;8.50;23.20;S0-a;;;;;;;;2MASX J09112750-1448597,IRAS 09091-1436,MCG -02-24-002,PGC 025907;;Confused HIPASS source; +NGC2782;G;09:14:05.11;+40:06:49.3;Lyn;3.25;2.41;20;12.30;11.63;9.79;9.12;8.87;23.47;SABa;;;;;;;;2MASX J09140511+4006496,IRAS 09108+4019,MCG +07-19-036,PGC 026034,SDSS J091405.13+400649.1,UGC 04862;;; +NGC2783;G;09:13:39.46;+29:59:34.7;Cnc;1.98;1.10;165;13.90;;10.25;9.60;9.32;23.86;E;;;;;2783A;;;2MASX J09133949+2959340,MCG +05-22-019,PGC 026013,SDSS J091339.47+295934.6,SDSS J091339.47+295934.7,UGC 04859;;; +NGC2783B;G;09:13:33.15;+30:00:00.5;Cnc;1.45;0.28;76;15.20;;11.60;10.88;10.56;23.56;SBb;;;;;;2449;;2MASX J09133310+3000004,IRAS 09105+3012,MCG +05-22-017,PGC 026012,SDSS J091333.14+300000.5,SDSS J091333.15+300000.5,UGC 04856;;; +NGC2784;G;09:12:19.50;-24:10:21.4;Hya;4.82;1.85;73;10.99;10.16;7.32;6.59;6.32;23.34;S0;;;;;;;;2MASX J09121949-2410213,ESO 497-023,ESO-LV 497-0230,MCG -04-22-005,PGC 025950,UGCA 152;;; +NGC2785;G;09:15:15.39;+40:55:03.1;Lyn;1.44;0.58;120;14.90;;10.60;9.79;9.42;23.35;SBm;;;;;;;;2MASX J09151532+4055035,IRAS 09120+4107,MCG +07-19-042,PGC 026100,UGC 04876;;; +NGC2786;G;09:13:35.59;+12:26:26.9;Cnc;0.83;0.59;77;13.80;;11.21;10.50;10.26;22.09;Sa;;;;;;;;2MASX J09133557+1226271,IRAS 09108+1238,MCG +02-24-002,PGC 026008,SDSS J091335.59+122626.9,UGC 04861;;; +NGC2787;G;09:19:18.60;+69:12:11.7;UMa;3.24;1.81;114;12.92;11.79;8.22;7.52;7.26;22.84;S0-a;;;;;;;;2MASX J09191853+6912122,IRAS 09148+6924,MCG +12-09-039,PGC 026341,UGC 04914;;; +NGC2788;G;09:09:03.04;-67:55:56.9;Car;1.67;0.39;116;13.26;;10.77;10.01;9.68;22.30;Sab;;;;;;;;2MASX J09090297-6755571,ESO 061-002,ESO-LV 61-0020,IRAS 09083-6743,PGC 025761;;; +NGC2788A;G;09:02:39.44;-68:13:36.6;Vol;2.51;0.49;55;13.98;;10.20;9.48;9.13;23.53;Sb;;;;;;;;2MASX J09023940-6813365,ESO 060-024,ESO-LV 60-0240,IRAS 09020-6801,PGC 025400;;; +NGC2788B;G;09:03:35.70;-67:58:11.3;Car;1.55;0.56;164;14.51;;;;;23.47;Sb;;;;;;;;2MASX J09033575-6758112,ESO 060-025,ESO-LV 60-0250,PGC 025443;;; +NGC2789;G;09:14:59.66;+29:43:49.0;Cnc;1.15;0.96;36;13.80;13.06;10.86;10.11;9.85;22.87;S0-a;;;;;;;;2MASX J09145961+2943492,IRAS 09120+2956,MCG +05-22-026,PGC 026089,SDSS J091459.66+294348.8,SDSS J091459.66+294348.9,UGC 04875;;; +NGC2790;G;09:15:02.78;+19:41:49.6;Cnc;0.60;0.55;65;14.70;;12.53;11.82;11.54;22.50;S0-a;;;;;;;;2MASX J09150276+1941491,IRAS 09122+1954,MCG +03-24-016,PGC 026092,SDSS J091502.77+194149.5,SDSS J091502.78+194149.5,SDSS J091502.78+194149.6;;; +NGC2791;G;09:15:01.99;+17:35:32.0;Cnc;0.89;0.32;160;15.60;;12.38;11.72;11.29;24.07;S0-a;;;;;;;;2MASX J09150197+1735322,PGC 026088,SDSS J091502.01+173532.2,SDSS J091502.02+173532.2;;; +NGC2792;PN;09:12:26.57;-42:25:39.0;Vel;0.22;;;13.50;11.60;11.89;11.70;10.94;;;;17.22;;;;;HD 79384;2MASX J09122656-4225389,ESO 314-006,IRAS 09105-4213,PN G265.7+04.1;;; +NGC2793;G;09:16:47.31;+34:25:47.3;Lyn;1.12;0.93;;13.90;;;;;22.21;Sm;;;;;;;;2MASX J09164731+3425471,IRAS 09137+3438,MCG +06-21-002,PGC 026189,UGC 04894;;Noted as possible pair in MCG.; +NGC2794;G;09:16:01.79;+17:35:23.4;Cnc;1.22;0.93;57;14.00;;11.06;10.32;10.09;22.95;SABb;;;;;;;;2MASX J09160178+1735234,MCG +03-24-018,PGC 026140,SDSS J091601.78+173523.3,SDSS J091601.79+173523.3,SDSS J091601.79+173523.4,UGC 04885;;; +NGC2795;G;09:16:03.92;+17:37:42.1;Cnc;1.19;1.02;166;14.10;;10.68;9.92;9.68;23.21;E;;;;;;;;2MASX J09160388+1737424,MCG +03-24-020,PGC 026143,SDSS J091603.91+173742.1,SDSS J091603.92+173742.1,UGC 04887;;; +NGC2796;G;09:16:41.85;+30:54:55.5;Cnc;1.21;0.85;77;14.60;;10.71;10.00;9.70;23.50;Sa;;;;;;;;2MASX J09164185+3054551,MCG +05-22-029,PGC 026178,SDSS J091641.85+305455.4,SDSS J091641.85+305455.5,UGC 04893;;; +NGC2797;G;09:16:21.69;+17:43:38.0;Cnc;0.66;0.58;28;14.30;;12.25;11.50;11.23;22.36;Sab;;;;;;;;2MASX J09162170+1743380,IRAS 09135+1756,MCG +03-24-023,PGC 026160,SDSS J091621.68+174337.9,SDSS J091621.69+174338.0,UGC 04891;;; +NGC2798;G;09:17:22.79;+41:59:59.0;UMa;2.43;0.83;154;13.04;12.32;10.10;9.39;9.03;23.21;Sa;;;;;;;;2MASX J09172295+4159589,IRAS 09141+4212,MCG +07-19-055,PGC 026232,SDSS J091722.80+420000.6,UGC 04905;;; +NGC2799;G;09:17:31.03;+41:59:38.7;UMa;1.76;0.47;122;14.32;13.71;11.92;11.31;11.15;23.58;SBd;;;;;;;;2MASX J09173103+4159388,MCG +07-19-056,PGC 026238,SDSS J091730.99+415938.4,UGC 04909;;; +NGC2800;G;09:18:35.22;+52:30:52.1;UMa;1.42;0.87;17;14.00;;10.72;10.05;9.72;23.52;E;;;;;;;;2MASX J09183516+5230524,MCG +09-15-117,PGC 026302,SDSS J091835.21+523052.0,UGC 04920;;; +NGC2801;G;09:16:44.19;+19:56:08.6;Cnc;0.96;0.78;51;15.40;;12.87;12.26;11.98;23.78;Sc;;;;;;;;2MASX J09164417+1956087,MCG +03-24-025,PGC 026183,SDSS J091644.19+195608.5,SDSS J091644.19+195608.6,UGC 04899;;; +NGC2802;G;09:16:41.43;+18:57:48.5;Cnc;1.10;0.56;132;14.30;;11.74;11.17;10.88;23.86;S0-a;;;;;;;;2MASX J09164141+1857487,MCG +03-24-026,PGC 026177,SDSS J091641.42+185748.4,SDSS J091641.42+185748.5,UGC 04897;;; +NGC2803;G;09:16:43.87;+18:57:16.5;Cnc;0.98;0.72;138;14.30;;11.44;10.73;10.45;23.85;E-S0;;;;;;;;2MASX J09164387+1857167,MCG +03-24-027,PGC 026181,SDSS J091643.86+185716.5,UGC 04898;;; +NGC2804;G;09:16:50.01;+20:11:54.6;Cnc;1.39;1.24;56;14.00;;10.67;9.93;9.68;23.42;S0;;;;;;2455;;2MASX J09165000+2011548,MCG +03-24-028,PGC 026196,SDSS J091650.00+201154.5,SDSS J091650.01+201154.6,UGC 04901;;; +NGC2805;G;09:20:20.41;+64:06:10.0;UMa;3.39;2.76;154;11.90;;10.87;10.37;10.14;23.00;SABc;;;;;;;;2MASX J09202040+6406099,IRAS 09162+6418,MCG +11-12-003,PGC 026410,SDSS J092020.38+640610.7,UGC 04936;;; +NGC2806;*;09:16:56.79;+20:04:14.2;Cnc;;;;;;;;;;;;;;;;;;SDSS J091656.78+200414.2;;; +NGC2807A;G;09:16:57.68;+20:01:44.6;Cnc;0.56;0.36;81;15.10;;12.70;11.93;11.71;22.75;Sbc;;;;;;;;2MASX J09165767+2001448,MCG +03-24-030,PGC 026212,SDSS J091657.68+200144.5,SDSS J091657.68+200144.6;;; +NGC2807B;G;09:17:00.66;+20:02:11.4;Cnc;0.82;0.60;165;15.10;;11.89;11.16;10.84;23.45;S0;;;;;;;;2MASX J09170065+2002108,MCG +03-24-031,PGC 026213,SDSS J091700.66+200211.4;;; +NGC2808;GCl;09:12:02.54;-64:51:46.2;Car;9.00;;;7.77;5.69;;;;;;;;;;;;;MWSC 1636;;; +NGC2809;G;09:17:06.92;+20:04:10.9;Cnc;1.24;1.08;162;13.90;;10.93;10.26;9.93;23.20;S0;;;;;;;;2MASX J09170689+2004108,MCG +03-24-033,PGC 026220,SDSS J091706.91+200410.8,SDSS J091706.92+200410.9,SDSS J091706.93+200410.9,UGC 04910;;Incorrectly called NGC 2806 in 1980ApJ...235...347S.; +NGC2810;G;09:22:04.50;+71:50:38.5;UMa;1.69;1.69;130;13.40;;10.06;9.40;9.12;23.27;E;;;;;2810A;;;2MASX J09220451+7150383,MCG +12-09-042,PGC 026514,UGC 04954;;; +NGC2811;G;09:16:11.11;-16:18:45.8;Hya;3.05;1.03;20;12.66;;8.94;8.23;7.98;22.93;SBa;;;;;;;;2MASX J09161109-1618457,IRAS 09138-1606,MCG -03-24-003,PGC 026151,UGCA 155;;; +NGC2812;G;09:17:40.79;+19:55:08.0;Cnc;0.75;0.23;154;15.40;;12.98;12.21;12.00;23.18;Sbc;;;;;;;;2MASX J09174075+1955081,PGC 026242,SDSS J091740.78+195507.9,SDSS J091740.79+195508.0;;; +NGC2813;G;09:17:45.45;+19:54:23.8;Cnc;1.02;0.82;146;15.40;;11.59;10.84;10.59;23.73;S0;;;;;;;;2MASX J09174543+1954240,MCG +03-24-037,PGC 026252,SDSS J091745.44+195423.7,SDSS J091745.45+195423.8,UGC 04916;;; +NGC2814;G;09:21:11.48;+64:15:11.5;UMa;1.05;0.23;179;14.00;;12.06;11.35;11.08;22.16;SBb;;;;;;;;2MASX J09211152+6415117,IRAS 09170+6428,MCG +11-12-004,PGC 026469,UGC 04952;;; +NGC2815;G;09:16:19.75;-23:37:59.7;Hya;3.51;1.41;13;12.70;11.84;9.20;8.48;8.25;23.60;SBb;;;;;;;;2MASX J09161974-2337596,ESO 497-032,ESO-LV 497-0320,IRAS 09140-2325,MCG -04-22-006,PGC 026157,UGCA 156;;; +NGC2816;Dup;09:07:33.53;+60:28:45.6;UMa;;;;;;;;;;;;;;;2742;;;;;; +NGC2817;G;09:17:10.53;-04:45:07.6;Hya;1.37;1.27;0;13.30;;11.30;10.72;10.39;23.04;Sc;;;;;;;;2MASX J09171052-0445076,IRAS 09146-0432,MCG -01-24-006,PGC 026223;;; +NGC2818;PN;09:16:01.50;-36:37:37.0;Pyx;0.83;;;13.00;11.60;;;;;;;19.45;;;;;;ESO 372-013,IRAS 09140-3625,PN G261.9+08.5;;Open cluster and planetary nebula.; +NGC2818A;Cl+N;09:16:06.13;-36:37:36.9;Pyx;6.90;;;12.50;;;;;;;;;;;;;;MWSC 1644;;; +NGC2819;G;09:18:09.29;+16:11:53.2;Cnc;1.44;1.08;57;14.30;;10.85;10.14;9.88;23.89;E;;;;;;;;2MASX J09180931+1611526,MCG +03-24-040,PGC 026274,SDSS J091809.29+161153.1,UGC 04924;;; +NGC2820;G;09:21:45.58;+64:15:28.6;UMa;3.75;0.35;61;13.10;;11.05;10.26;9.92;23.02;SBc;;;;;;;;2MASX J09214556+6415288,IRAS 09177+6428,MCG +11-12-006,PGC 026498,UGC 04961;;; +NGC2820A;G;09:21:30.07;+64:14:19.4;UMa;0.47;0.16;9;14.90;;14.48;13.77;13.76;22.08;Sa;;;;;;2458;;2MASX J09213008+6414195,MCG +11-12-005,PGC 026485,SDSS J092130.07+641419.3,UGCA 159;;; +NGC2821;G;09:16:47.98;-26:48:58.6;Pyx;2.10;0.44;103;13.87;;10.59;9.83;9.50;23.10;Sbc;;;;;;;;2MASX J09164799-2648584,ESO 497-034,ESO-LV 497-0340,IRAS 09145-2636,MCG -04-22-007,PGC 026192;;; +NGC2822;G;09:13:49.72;-69:38:41.4;Car;3.96;2.72;94;11.64;12.01;;;;23.39;E;;;;;;;;ESO 061-004,ESO-LV 61-0040,IRAS 09132-6926,PGC 026026;;Within halo of bright star beta Car.; +NGC2823;G;09:19:17.46;+34:00:29.4;Lyn;1.03;0.62;32;15.70;;12.13;11.61;11.23;23.93;Sa;;;;;;;;2MASX J09191741+3400290,MCG +06-21-008,PGC 026339,PGC 026340,SDSS J091917.45+340029.4,SDSS J091917.46+340029.4,UGC 04935;;; +NGC2824;G;09:19:02.23;+26:16:11.9;Cnc;0.97;0.57;159;14.30;;11.08;10.40;10.13;22.87;S0;;;;;;;;2MASX J09190222+2616119,IRAS 09160+2628,MCG +04-22-031,PGC 026330,SDSS J091902.22+261611.9,UGC 04933;;; +NGC2825;G;09:19:22.44;+33:44:34.0;Lyn;1.10;0.55;86;15.30;;11.92;11.25;11.05;23.61;Sa;;;;;;;;2MASX J09192241+3344340,MCG +06-21-010,PGC 026345,SDSS J091922.43+334433.9,SDSS J091922.44+334433.9,SDSS J091922.44+334434.0;;; +NGC2826;G;09:19:24.17;+33:37:26.4;Lyn;1.47;0.22;141;14.60;;11.22;10.54;10.29;23.85;S0-a;;;;;;;;2MASX J09192419+3337260,MCG +06-21-011,PGC 026346,SDSS J091924.16+333726.4,SDSS J091924.17+333726.4,UGC 04939;;; +NGC2827;G;09:19:19.01;+33:52:50.9;Lyn;1.02;0.38;5;15.60;;12.40;11.57;11.26;23.70;Sab;;;;;;2460;;2MASX J09191903+3352510,MCG +06-21-009,PGC 026342,SDSS J091919.00+335250.8,SDSS J091919.01+335250.8,SDSS J091919.01+335250.9;;; +NGC2828;G;09:19:34.83;+33:53:17.1;Lyn;0.72;0.44;44;15.70;;12.60;11.96;11.63;23.64;S0;;;;;;;;2MASX J09193485+3353170,PGC 026365,SDSS J091934.83+335317.1;;; +NGC2829;GPair;09:19:30.70;+33:38:54.0;Lyn;0.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC2829 NED01;G;09:19:30.31;+33:38:54.5;Lyn;0.48;0.38;30;17.11;;13.64;13.08;12.74;23.98;E;;;;;;;;2MASX J09193027+3338540,PGC 026356,SDSS J091930.30+333854.4;;NGC identification is not certain.; +NGC2829 NED02;G;09:19:31.14;+33:38:52.0;Lyn;0.40;0.30;176;16.67;;;;;23.72;E;;;;;;;;SDSS J091931.13+333852.0;;NGC identification is not certain.;B-Mag taken from LEDA +NGC2830;G;09:19:41.41;+33:44:17.3;Lyn;1.24;0.24;112;15.40;;11.76;11.04;10.73;24.00;S0-a;;;;;;;;2MASX J09194142+3344170,MCG +06-21-014,PGC 026371,SDSS J091941.40+334417.3,SDSS J091941.41+334417.3,UGC 04941;;; +NGC2831;G;09:19:45.49;+33:44:42.0;Lyn;0.89;0.66;2;14.27;14.70;;;;23.02;E;;;;;;;;MCG +06-21-013,PGC 026376,SDSS J091945.48+334441.9,SDSS J091945.49+334441.9,SDSS J091945.49+334442.0,UGC 04942 NOTES01;;; +NGC2832;G;09:19:46.86;+33:44:59.1;Lyn;3.20;2.07;172;13.30;13.17;9.67;8.99;8.70;24.16;E;;;;;;;;2MASX J09194687+3344594,MCG +06-21-015,PGC 026377,SDSS J091946.86+334459.0,UGC 04942;;; +NGC2833;G;09:19:57.86;+33:55:38.8;Lyn;1.14;0.54;165;15.60;;11.88;11.10;10.77;23.94;Sa;;;;;;;;2MASX J09195785+3355384,PGC 026389,SDSS J091957.85+335538.7,SDSS J091957.86+335538.7;;; +NGC2834;G;09:20:02.52;+33:42:37.7;Lyn;0.83;0.66;57;15.60;;12.28;11.60;11.38;23.82;E;;;;;;;;2MASX J09200250+3342374,MCG +06-21-021,PGC 026400,SDSS J092002.51+334237.7,SDSS J092002.52+334237.7;;; +NGC2835;G;09:17:52.91;-22:21:16.8;Hya;6.43;3.72;179;11.03;;8.81;8.14;7.92;23.39;Sc;;;;;;;;2MASX J09175290-2221168,ESO 564-035,ESO-LV 564-0350,IRAS 09156-2208,MCG -04-22-008,PGC 026259,UGCA 157;;Extended HIPASS source; +NGC2836;G;09:13:44.60;-69:20:05.1;Car;1.66;0.59;111;12.64;;;;;21.91;Sbc;;;;;;;;ESO 061-003,ESO-LV 61-0030,IRAS 09131-6907,PGC 026017;;; +NGC2837;**;09:18:23.37;-16:28:54.2;Hya;;;;;;;;;;;;;;;;;;;;; +NGC2838;G;09:20:43.04;+39:18:56.7;Lyn;1.28;1.08;123;14.70;;11.04;10.30;10.04;23.78;E;;;;;;;;2MASX J09204305+3918568,MCG +07-19-061,PGC 026434,SDSS J092043.02+391856.6,SDSS J092043.03+391856.6,SDSS J092043.03+391856.7,SDSS J092043.04+391856.7;;; +NGC2839;G;09:20:36.33;+33:39:02.4;Lyn;1.23;1.17;165;15.30;;11.40;10.69;10.43;24.06;E;;;;;;;;2MASX J09203631+3339030,MCG +06-21-023,PGC 026425,SDSS J092036.32+333902.4,SDSS J092036.33+333902.4;;; +NGC2840;G;09:20:52.72;+35:22:05.8;Lyn;1.05;0.89;107;14.80;;11.60;10.96;10.84;23.27;Sbc;;;;;;;;2MASX J09205267+3522062,IRAS 09178+3534,MCG +06-21-025,PGC 026445,SDSS J092052.71+352205.8,SDSS J092052.72+352205.8,UGC 04960;;; +NGC2841;G;09:22:02.63;+50:58:35.5;UMa;6.90;3.31;147;10.09;9.22;7.01;6.30;6.06;22.48;SBb;;;;;;;;2MASX J09220265+5058353,IRAS 09185+5111,MCG +09-16-005,PGC 026512,SDSS J092202.66+505835.7,UGC 04966;;; +NGC2842;G;09:15:36.43;-63:04:10.7;Car;2.25;1.63;107;13.28;;9.80;9.02;8.77;23.80;S0-a;;;;;;;;2MASX J09153646-6304106,ESO 091-004,ESO-LV 91-0040,IRAS 09144-6251,PGC 026114;;; +NGC2843;G;09:20:28.78;+18:55:34.4;Cnc;0.47;0.26;65;;;13.11;12.54;12.20;23.56;S0-a;;;;;;;;2MASX J09202879+1855346,PGC 026414,SDSS J092028.77+185534.3,SDSS J092028.77+185534.4,SDSS J092028.78+185534.4;;; +NGC2844;G;09:21:48.01;+40:09:04.5;Lyn;1.77;0.82;11;13.60;;10.81;10.20;9.89;23.36;Sa;;;;;;;;2MASX J09214802+4009043,IRAS 09186+4021,MCG +07-19-064,PGC 026501,SDSS J092147.78+400900.6,SDSS J092147.79+400900.6,SDSS J092148.00+400904.5,UGC 04971;;SDSS position is 4.6 arcsec southwest of the nucleus.; +NGC2845;G;09:18:36.71;-38:00:36.3;Vel;1.87;1.30;69;13.67;;9.31;8.55;8.26;23.21;S0-a;;;;;;;;2MASX J09183669-3800363,ESO 314-010,ESO-LV 314-0100,IRAS 09166-3747,MCG -06-21-002,PGC 026306;;; +NGC2846;**;09:19:40.47;-14:40:34.6;Hya;;;;;;;;;;;;;;;;;;;;; +NGC2847;HII;09:20:08.53;-16:31:05.9;Hya;;;;;;;;;;;;;;;;;;;;; +NGC2848;G;09:20:09.83;-16:31:33.8;Hya;2.69;2.02;29;12.20;;10.20;9.72;9.44;23.10;SABc;;;;;;;;2MASX J09200989-1631334,IRAS 09178-1618,MCG -03-24-007,PGC 026404,UGCA 160;;HOLM 128B is a star.; +NGC2849;OCl;09:19:22.87;-40:31:13.4;Vel;2.40;;;;12.50;;;;;;;;;;;;;ESO 314-013,MWSC 1648;;; +NGC2850;G;09:20:57.01;-04:56:24.3;Hya;0.90;0.64;17;14.75;;11.38;10.63;10.38;23.54;S0;;;;;;;;2MASX J09205699-0456242,PGC 026452;;; +NGC2851;G;09:20:30.23;-16:29:43.0;Hya;1.43;0.53;8;15.00;;10.99;10.30;10.04;23.78;S0;;;;;;;;2MASX J09203020-1629425,MCG -03-24-008,PGC 026422;;; +NGC2852;G;09:23:14.59;+40:09:49.7;Lyn;0.94;0.89;140;14.00;;11.01;10.36;10.10;22.71;SABa;;;;;;;;2MASX J09231456+4009499,MCG +07-19-065,PGC 026571,SDSS J092314.59+400949.7,UGC 04986;;; +NGC2853;G;09:23:17.33;+40:12:00.2;Lyn;1.67;0.96;25;14.60;;12.19;11.59;11.42;24.29;S0-a;;;;;;;;2MASX J09231734+4012009,MCG +07-19-066,PGC 026580,SDSS J092317.33+401200.1,SDSS J092317.34+401200.2,SDSS J092317.34+401200.3,UGC 04987;;; +NGC2854;G;09:24:03.11;+49:12:14.9;UMa;1.28;0.56;52;13.82;;11.05;10.33;10.10;22.58;SBb;;;;;;;;2MASX J09240315+4912156,IRAS 09206+4925,MCG +08-17-092,PGC 026631,SDSS J092402.83+491213.7,SDSS J092403.10+491214.9,UGC 04995;;Called 'Arp 285a' in UGC notes. Multiple SDSS entries describe this object.; +NGC2855;G;09:21:27.49;-11:54:34.2;Hya;3.45;1.85;120;13.24;12.23;8.91;8.21;7.97;23.84;S0-a;;;;;;;;2MASX J09212749-1154341,IRAS 09190-1141,MCG -02-24-015,PGC 026483,UGCA 161;;; +NGC2856;G;09:24:16.01;+49:14:57.1;UMa;1.22;0.58;132;14.10;;10.74;10.01;9.71;22.56;SBbc;;;;;;;;2MASX J09241600+4914567,IRAS 09208+4927,MCG +08-17-093,PGC 026648,SDSS J092416.00+491457.0,UGC 04997;;Called 'Arp 285b' in UGC notes.; +NGC2857;G;09:24:37.72;+49:21:25.4;UMa;1.89;1.51;90;12.90;12.27;11.27;10.57;10.75;22.92;Sc;;;;;;;;2MASX J09243769+4921256,IRAS 09212+4934,MCG +08-17-095,PGC 026666,SDSS J092437.71+492125.7,SDSS J092437.72+492125.4,UGC 05000;;UGC misprints R.A. as 09h21.1m. UGC galactic coordinates are correct.; +NGC2858;G;09:22:55.01;+03:09:25.0;Hya;1.76;0.84;116;13.80;;10.80;10.12;9.82;23.72;S0-a;;;;;;;;2MASX J09225500+0309249,MCG +01-24-017,PGC 026556,SDSS J092255.00+030924.9,SDSS J092255.01+030924.9,SDSS J092255.01+030925.0,UGC 04989;;; +NGC2859;G;09:24:18.53;+34:30:48.6;LMi;3.19;2.78;85;11.80;;8.91;8.23;8.04;23.11;S0-a;;;;;;;;2MASX J09241854+3430481,MCG +06-21-030,PGC 026649,SDSS J092418.53+343048.5,UGC 05001;;; +NGC2860;G;09:24:53.21;+41:03:36.7;Lyn;1.31;0.57;95;14.80;;11.58;10.80;10.44;23.46;SBa;;;;;;;;2MASX J09245319+4103366,IRAS 09216+4116,MCG +07-20-003,PGC 026685,SDSS J092453.21+410336.6,SDSS J092453.21+410336.7,UGC 05007;;; +NGC2861;G;09:23:36.50;+02:08:11.3;Hya;1.28;1.17;50;13.74;13.06;11.09;10.40;10.12;23.11;SBbc;;;;;;;;2MASX J09233646+0208113,IRAS 09210+0220,MCG +00-24-010,PGC 026607,SDSS J092336.49+020811.2,SDSS J092336.50+020811.2,SDSS J092336.50+020811.3,UGC 04999;;; +NGC2862;G;09:24:55.11;+26:46:28.8;Leo;2.64;0.50;115;13.80;;10.27;9.57;9.27;23.32;SBbc;;;;;;;;2MASX J09245507+2646286,MCG +05-22-045,PGC 026690,SDSS J092455.11+264628.8,UGC 05010;;; +NGC2863;G;09:23:36.56;-10:25:59.6;Hya;1.37;1.18;170;13.40;;11.64;10.97;10.80;;Sm;;;;;2869;;;2MASX J09233654-1026014,IRAS 09211-1012,MCG -02-24-018,PGC 026609;;GSC 5463-0962 (mag. 15) near edge 22 arcsec northwest of nucleus.; +NGC2864;G;09:24:15.39;+05:56:28.2;Hya;0.71;0.47;4;14.80;;12.47;11.91;11.40;22.78;SBb;;;;;;;;2MASX J09241541+0556279,MCG +01-24-020 NED01,PGC 026644,SDSS J092415.39+055628.1,SDSS J092415.39+055628.2;;; +NGC2865;G;09:23:30.21;-23:09:41.2;Hya;2.44;2.03;155;12.39;11.43;9.36;8.71;8.46;23.24;E;;;;;;;;2MASX J09233020-2309413,ESO 498-001,ESO-LV 498-0010,MCG -04-22-011,PGC 026601;;; +NGC2866;OCl;09:22:05.04;-51:06:09.4;Vel;2.70;;;;;;;;;;;;;;;;;MWSC 1658;;; +NGC2867;PN;09:21:24.97;-58:18:42.0;Car;0.23;;;9.70;9.70;;;;;;;16.62;;;;;HD 81119;2MASX J09212497-5818422,C 090,ESO 126-008,IRAS 09200-5805,PN G278.1-05.9;;; +NGC2868;G;09:23:27.22;-10:25:46.2;Hya;1.14;0.57;70;15.21;;11.88;11.20;11.01;24.23;E-S0;;;;;;;;2MASX J09232719-1025464,PGC 026598;;; +NGC2869;Dup;09:23:36.56;-10:25:59.6;Hya;;;;;;;;;;;;;;;2863;;;;;; +NGC2870;G;09:27:53.74;+57:22:31.8;UMa;2.44;0.66;121;13.83;;11.29;10.59;10.29;23.64;SBbc;;;;;;;;2MASX J09275371+5722316,IRAS 09241+5735,MCG +10-14-013,PGC 026856,SDSS J092753.72+572232.0,SDSS J092753.72+572234.6,SDSS J092753.74+572231.7,SDSS J092753.74+572231.8,UGC 05034;;; +NGC2871;*;09:25:39.54;+11:26:39.6;Leo;;;;;;;;;;;;;;;;;;SDSS J092539.53+112639.6;;; +NGC2872;G;09:25:42.54;+11:25:55.7;Leo;1.75;1.55;161;13.00;;9.66;9.02;8.73;22.93;E;;;;;;;;2MASX J09254253+1125557,MCG +02-24-008,PGC 026733,SDSS J092542.53+112555.7,UGC 05018;;; +NGC2873;G;09:25:48.50;+11:27:15.2;Leo;0.73;0.41;118;15.30;;13.05;12.29;12.04;23.85;Sab;;;;;;;;2MASX J09254849+1127151,MCG +02-24-009,PGC 026742,SDSS J092548.49+112715.2;;; +NGC2874;G;09:25:47.33;+11:25:28.5;Leo;2.04;0.68;38;13.50;;9.53;9.17;8.84;22.76;Sbc;;;;;;;;2MASX J09254734+1125281,IRAS 09230+1138,MCG +02-24-010,PGC 026740,SDSS J092547.32+112528.4,SDSS J092547.33+112528.4,SDSS J092547.33+112528.5,UGC 05021;;; +NGC2875;Other;09:25:48.81;+11:25:53.9;Leo;;;;;;;;;;;;;;;;;;;;This is the northeastern arm of NGC 2874.; +NGC2876;G;09:25:13.77;-06:42:59.7;Hya;1.73;0.98;91;14.50;;10.87;10.10;10.01;24.04;S0;;;;;;;;2MASX J09251378-0642596,MCG -01-24-016,PGC 026710;;; +NGC2877;G;09:25:46.98;+02:13:44.8;Hya;0.67;0.64;165;14.70;;11.84;11.26;10.96;22.53;S0-a;;;;;;;;2MASX J09254699+0213444,IRAS 09231+0226,MCG +00-24-015,PGC 026738,SDSS J092546.97+021344.8,SDSS J092547.15+021349.2,SDSS J092547.16+021349.4;;Multiple SDSS entries describe this object.; +NGC2878;G;09:25:47.46;+02:05:22.6;Hya;1.04;0.37;173;14.90;;11.52;10.83;10.49;23.31;SABa;;;;;;;;2MASX J09254746+0205224,MCG +00-24-014,PGC 026739,SDSS J092547.46+020522.5,SDSS J092547.46+020522.6,UGC 05022;;; +NGC2879;Other;09:25:22.52;-11:39:05.4;Hya;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC2880;G;09:29:34.56;+62:29:26.0;UMa;2.33;1.40;142;12.60;;9.62;8.98;8.68;23.08;E-S0;;;;;;;;2MASX J09293461+6229262,MCG +10-14-015,PGC 026939,SDSS J092934.55+622925.9,UGC 05051;;; +NGC2881;GPair;09:25:54.20;-11:59:38.0;Hya;1.20;;;;;;;;;;;;;;;;;MCG -02-24-021;;;Diameter of the group inferred by the author. +NGC2881 NED01;G;09:25:53.75;-11:59:31.7;Hya;;;;;;;;;;;;;;;;;;MCG -02-24-021 NED01;;; +NGC2881 NED02;G;09:25:54.69;-11:59:43.9;Hya;1.17;0.63;167;14.00;;11.95;11.48;11.32;24.13;;;;;;;;;2MASX J09255473-1159468,IRAS 09234-1146,MCG -02-24-021 NED02,PGC 026747;;; +NGC2882;G;09:26:36.14;+07:57:16.1;Leo;1.49;0.75;84;13.50;;10.89;10.16;9.89;22.58;SABc;;;;;;;;2MASX J09263612+0757163,IRAS 09239+0810,MCG +01-24-021,PGC 026781,SDSS J092636.14+075716.1,UGC 05030;;Multiple SDSS entries describe this object.; +NGC2883;G;09:25:18.42;-34:06:11.7;Pyx;2.02;0.80;178;13.10;;;;;23.09;IB;;;;;;;;ESO 372-024,IRAS 09232-3353,PGC 026713;;; +NGC2884;G;09:26:24.45;-11:33:20.1;Hya;2.16;0.76;173;13.40;;10.50;9.80;9.49;23.71;S0-a;;;;;;;;2MASX J09262451-1133207,MCG -02-24-022,PGC 026773;;; +NGC2885;G;09:27:18.51;+23:01:12.4;Leo;1.26;0.82;79;16.99;16.25;11.40;10.66;10.39;23.85;S0-a;;;;;;0538;;2MASX J09271849+2301121,MCG +04-22-058,PGC 026811,SDSS J092718.50+230112.3,SDSS J092718.51+230112.4,UGC 05037;;; +NGC2886;Other;09:26:38.70;-21:44:16.1;Hya;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC2887;G;09:23:24.05;-63:48:45.2;Car;2.55;1.63;80;12.51;;9.04;8.32;8.03;23.52;E-S0;;;;;;;;2MASX J09232401-6348453,ESO 091-009,ESO-LV 91-0090,PGC 026592;;; +NGC2888;G;09:26:19.67;-28:02:06.3;Pyx;1.96;1.49;155;13.28;;10.35;9.65;9.43;23.85;E;;;;;;;;2MASX J09261966-2802061,ESO 434-002,ESO-LV 434-0020,MCG -05-23-001,PGC 026768;;; +NGC2889;G;09:27:12.59;-11:38:36.3;Hya;1.95;1.75;26;12.00;;9.65;9.01;8.77;22.60;SABc;;;;;;;;2MASX J09271259-1138363,IRAS 09247-1125,MCG -02-24-026,PGC 026806;;; +NGC2890;G;09:26:29.84;-14:31:43.3;Hya;0.87;0.25;69;15.00;;11.74;11.00;10.85;23.75;E-S0;;;;;;;;2MASX J09262978-1431436,MCG -02-24-024,PGC 026778;;; +NGC2891;G;09:26:56.63;-24:46:58.9;Ant;1.60;1.52;0;13.30;;10.44;9.76;9.55;23.24;E-S0;;;;;;;;2MASX J09265663-2446588,ESO 498-008,ESO-LV 498-0080,MCG -04-23-003,PGC 026794;;; +NGC2892;G;09:32:52.93;+67:37:02.6;UMa;1.40;1.40;0;14.40;;10.40;9.65;9.35;23.96;E;;;;;;;;2MASX J09325289+6737026,MCG +11-12-015,PGC 027111,SDSS J093252.93+673702.7,UGC 05073;;; +NGC2893;G;09:30:16.96;+29:32:23.9;Leo;1.02;0.82;83;13.60;13.11;11.24;10.51;10.31;22.57;S0-a;;;;;;;;2MASX J09301694+2932239,IRAS 09273+2945,MCG +05-23-005,PGC 026979,SDSS J093016.96+293223.8,UGC 05060;;; +NGC2894;G;09:29:30.24;+07:43:07.8;Leo;1.90;0.96;29;13.40;;10.11;9.40;9.11;23.12;Sa;;;;;;;;2MASX J09293024+0743077,MCG +01-24-024,PGC 026932,UGC 05056;;; +NGC2895;G;09:32:25.05;+57:28:58.4;UMa;0.91;0.80;65;14.70;;11.83;11.09;10.84;22.98;Sbc;;;;;;;;2MASX J09322512+5728588,IRAS 09288+5742,MCG +10-14-018,PGC 027092,SDSS J093225.04+572858.4,SDSS J093225.04+572858.7,SDSS J093225.05+572858.4;;; +NGC2896;G;09:30:16.97;+23:39:47.0;Leo;1.20;1.20;90;14.80;;11.60;10.94;10.82;23.89;S0-a;;;;;;;;2MASX J09301691+2339470,MCG +04-23-007,PGC 026985,SDSS J093016.96+233947.0;;; +NGC2897;G;09:29:45.72;+02:12:24.5;Hya;0.84;0.62;177;15.52;;11.78;11.12;10.81;24.33;S0;;;;;;;;2MASX J09294572+0212252,PGC 026949;;; +NGC2898;G;09:29:46.34;+02:03:51.7;Hya;1.04;0.67;124;14.80;;11.08;10.39;10.16;23.55;S0-a;;;;;;;;2MASX J09294632+0203522,MCG +00-24-018,PGC 026950,SDSS J092946.33+020351.6,SDSS J092946.34+020351.6,SDSS J092946.34+020351.7;;; +NGC2899;PN;09:27:02.96;-56:06:21.7;Vel;1.50;;;12.20;11.80;13.94;13.59;13.60;;;;16.40;15.90;;;;;ESO 166-013,PN G277.1-03.8;;; +NGC2900;G;09:30:15.19;+04:08:39.2;Hya;0.99;0.78;86;14.60;;13.04;12.36;12.23;23.22;SBc;;;;;;;;2MASX J09301525+0408402,IRAS 09276+0421,MCG +01-24-026,PGC 026974,SDSS J093015.17+040838.4,SDSS J093015.18+040839.1,SDSS J093015.19+040839.2,UGC 05065;;; +NGC2901;Other;09:32:34.25;+31:06:42.1;Leo;;;;;;;;;;;;;;;;;;;;Nothing at this positionon the POSS.; +NGC2902;G;09:30:52.89;-14:44:08.8;Hya;1.72;1.41;22;13.10;;10.07;9.35;9.11;23.15;S0;;;;;;;;2MASX J09305289-1444089,MCG -02-24-030,PGC 027004;;; +NGC2903;G;09:32:10.11;+21:30:03.0;Leo;11.94;5.28;22;9.75;9.07;6.95;6.33;6.04;23.02;Sbc;;;;;2905;;;2MASX J09321011+2130029,IRAS 09293+2143,MCG +04-23-009,PGC 027077,UGC 05079;;; +NGC2904;G;09:30:17.00;-30:23:06.1;Ant;1.47;1.09;89;13.69;;10.20;9.50;9.21;23.09;E-S0;;;;;;;;2MASX J09301698-3023061,ESO 434-006,ESO-LV 434-0060,MCG -05-23-003,PGC 026981;;; +NGC2905;Dup;09:32:10.11;+21:30:03.0;Leo;;;;;;;;;;;;;;;2903;;;;;; +NGC2906;G;09:32:06.22;+08:26:30.4;Leo;1.36;0.81;71;13.10;;10.10;9.42;9.11;22.13;Sc;;;;;;;;2MASX J09320624+0826308,IRAS 09294+0839,MCG +02-25-001,PGC 027074,SDSS J093206.21+082630.3,SDSS J093206.22+082630.3,UGC 05081;;; +NGC2907;G;09:31:36.72;-16:44:04.8;Hya;2.82;2.06;112;13.15;12.06;9.17;8.49;8.22;23.54;Sa;;;;;;;;2MASX J09313661-1644051,IRAS 09292-1630,MCG -03-25-002,PGC 027048;;; +NGC2908;G;09:43:31.45;+79:42:04.5;Dra;0.74;0.52;145;14.20;;12.37;11.93;11.38;22.20;Sbc;;;;;;;;2MASX J09433142+7942044,IRAS 09375+7955,MCG +13-07-034,PGC 027831,UGC 05152;;; +NGC2909;**;09:36:59.90;+65:56:26.0;UMa;;;;;;;;;;;;;;;;;;;;; +NGC2910;OCl;09:30:29.02;-52:54:50.4;Vel;4.80;;;7.49;7.20;;;;;;;;;;;;;MWSC 1679;;; +NGC2911;G;09:33:46.11;+10:09:08.8;Leo;3.46;2.13;135;14.96;13.83;9.62;8.97;8.71;24.13;S0;;;;;;;;2MASX J09334609+1009093,MCG +02-25-003,PGC 027159,SDSS J093346.08+100908.9,SDSS J093346.08+100909.0,SDSS J093346.09+100909.0,UGC 05092;;; +NGC2912;*;09:33:56.88;+10:11:32.0;Leo;;;;;;;;;;;;;;;;;;SDSS J093356.88+101131.9;;; +NGC2913;G;09:34:02.72;+09:28:45.1;Leo;1.12;0.69;132;14.10;;11.86;11.25;10.92;22.84;Sc;;;;;;;;2MASX J09340270+0928455,MCG +02-25-005,PGC 027184,SDSS J093402.71+092845.1,SDSS J093402.72+092845.1,UGC 05095;;; +NGC2914;G;09:34:02.78;+10:06:30.9;Leo;0.95;0.58;12;13.70;;10.80;10.15;9.93;22.39;SBab;;;;;;;;2MASX J09340276+1006315,MCG +02-25-006,PGC 027185,SDSS J093402.77+100631.3,SDSS J093402.78+100631.2,SDSS J093402.78+100631.4,UGC 05096;;; +NGC2915;G;09:26:11.53;-76:37:34.8;Cha;1.82;0.98;132;12.93;12.68;10.57;9.82;9.83;22.88;SBab;;;;;;;;2MASX J09261153-7637347,ESO 037-003,ESO-LV 37-0030,IRAS 09265-7624,PGC 026761;;Extended HIPASS source; +NGC2916;G;09:34:57.60;+21:42:19.0;Leo;2.40;1.59;16;12.74;12.05;10.11;9.43;9.12;23.09;Sb;;;;;;;;2MASX J09345756+2142189,IRAS 09321+2155,MCG +04-23-011,PGC 027244,SDSS J093457.60+214218.9,SDSS J093457.60+214219.0,UGC 05103;;; +NGC2917;G;09:34:26.90;-02:30:15.0;Hya;1.34;0.37;170;14.50;;11.01;10.28;10.05;23.65;S0-a;;;;;;;;2MASX J09342686-0230149,MCG +00-25-002,PGC 027207,SDSS J093426.90-023015.0,UGC 05098;;; +NGC2918;G;09:35:44.04;+31:42:19.7;Leo;1.56;1.06;66;13.60;;10.56;9.85;9.57;23.42;E;;;;;;;;2MASX J09354403+3142194,MCG +05-23-019,PGC 027282,SDSS J093544.04+314219.6,SDSS J093544.04+314219.7,UGC 05112;;; +NGC2919;G;09:34:47.52;+10:17:01.4;Leo;1.52;0.53;159;13.60;;11.12;10.36;10.05;22.56;SABb;;;;;;;;2MASX J09344754+1017014,IRAS 09321+1030,MCG +02-25-007,PGC 027232,SDSS J093447.51+101701.3,UGC 05102;;; +NGC2920;G;09:34:12.25;-20:51:32.6;Hya;0.86;0.61;121;13.93;;12.09;11.59;11.18;22.20;Sa;;;;;;;;2MASX J09341226-2051323,ESO 565-015,ESO-LV 565-0150,IRAS 09318-2038,PGC 027197;;; +NGC2921;G;09:34:31.60;-20:55:13.3;Hya;2.86;0.92;85;12.95;;10.16;9.54;9.23;23.55;SABa;;;;;;;;2MASX J09343160-2055134,ESO 565-017,ESO-LV 565-0170,IRAS 09321-2041,MCG -03-25-006,PGC 027214;;; +NGC2922;G;09:36:52.47;+37:41:41.6;LMi;1.07;0.45;99;14.60;;11.87;11.17;10.87;22.61;Sm;;;;;;;;2MASX J09365245+3741411,IRAS 09337+3755,MCG +06-21-057,PGC 027361,SDSS J093652.46+374141.6,SDSS J093652.47+374141.6,UGC 05118;;; +NGC2923;G;09:36:03.83;+16:45:37.4;Leo;0.53;0.31;28;15.20;;13.78;13.35;12.98;22.90;Sb;;;;;;;;2MASX J09360382+1645371,PGC 027306,SDSS J093603.82+164537.3,SDSS J093603.83+164537.4;;; +NGC2924;G;09:35:10.81;-16:23:54.2;Hya;2.04;1.62;142;13.00;;10.08;9.42;9.12;23.74;E;;;;;;;;2MASX J09351082-1623539,MCG -03-25-008,PGC 027253;;; +NGC2925;OCl;09:33:10.92;-53:23:45.5;Vel;7.50;;;;8.30;;;;;;;;;;;;;MWSC 1686;;; +NGC2926;G;09:37:31.01;+32:50:29.1;Leo;0.83;0.74;120;14.40;;12.04;11.44;11.05;22.74;SBbc;;;;;;;;2MASX J09373100+3250286,IRAS 09345+3304,MCG +06-21-060,PGC 027400,SDSS J093731.00+325029.0,SDSS J093731.01+325029.1,UGC 05125;;; +NGC2927;G;09:37:15.20;+23:35:26.2;Leo;1.31;0.78;155;14.10;;11.12;10.40;10.27;22.96;Sb;;;;;;;;2MASX J09371521+2335261,MCG +04-23-016,PGC 027385,SDSS J093715.19+233526.1,SDSS J093715.19+233526.2,UGC 05122;;; +NGC2928;G;09:37:10.08;+16:58:37.9;Leo;1.21;0.70;41;15.20;;11.85;11.04;10.83;23.88;SBa;;;;;;;;2MASX J09371010+1658380,IRAS 09343+1712,MCG +03-25-005,PGC 027380,SDSS J093710.07+165837.9,SDSS J093710.08+165837.9;;; +NGC2929;G;09:37:29.81;+23:09:42.0;Leo;1.10;0.38;144;14.40;;11.51;10.75;10.45;22.63;Sbc;;;;;;;;2MASX J09372979+2309421,IRAS 09346+2323,MCG +04-23-017,PGC 027398,SDSS J093729.91+230940.9,UGC 05126;;; +NGC2930;G;09:37:32.60;+23:12:09.0;Leo;0.50;0.22;142;14.70;;;;;21.81;Sbc;;;;;;;;MCG +04-23-018,PGC 027404;;; +NGC2931;G;09:37:37.65;+23:14:26.7;Leo;0.75;0.54;68;14.90;;12.07;11.33;11.06;22.76;Sb;;;;;;;;2MASX J09373771+2314270,MCG +04-23-019,PGC 027415,SDSS J093737.65+231426.6,SDSS J093737.65+231426.7,SDSS J093737.65+231426.8;;; +NGC2932;*Ass;09:35:51.62;-46:55:28.2;Vel;4.80;;;;;;;;;;;;;;;;;MWSC 1694;;Milky Way star cloud.; +NGC2933;G;09:37:55.00;+17:00:53.0;Leo;0.97;0.31;31;14.90;;12.89;12.20;12.09;23.07;Sbc;;;;;;;;MCG +03-25-008,PGC 027436,UGC 05132;;; +NGC2934;G;09:37:55.16;+17:03:16.2;Leo;0.44;0.31;7;;;13.58;12.84;12.54;23.73;SBa;;;;;;;;2MASX J09375514+1703168,PGC 1523531,SDSS J093755.15+170316.1,SDSS J093755.16+170316.2;;; +NGC2935;G;09:36:44.85;-21:07:41.3;Hya;4.21;3.16;164;11.84;10.04;9.30;8.64;8.31;23.90;Sb;;;;;;;;2MASX J09364485-2107411,ESO 565-023,ESO-LV 565-0230,IRAS 09344-2054,MCG -03-25-011,PGC 027351,TYC 6055-116-1,UGCA 169;;; +NGC2936;G;09:37:44.15;+02:45:38.9;Hya;0.94;0.52;78;13.90;13.06;10.87;10.14;9.85;22.64;E;;;;;;;;2MASX J09374413+0245394,MCG +01-25-006,PGC 027422,SDSS J093744.14+024538.9,UGC 05130;;CGCG & UGC call this a multiple system. MCG switches ids for N2936/7.; +NGC2937;G;09:37:45.03;+02:44:50.5;Hya;0.75;0.54;22;14.60;13.66;11.25;10.64;10.21;22.84;E;;;;;;;;2MASX J09374506+0244504,MCG +01-25-005,PGC 027423,SDSS J093745.02+024450.5,SDSS J093745.03+024450.5,UGC 05131;;MCG switches ids for N2936/7.; +NGC2938;G;09:38:23.79;+76:19:10.4;Dra;1.24;0.85;97;14.40;;13.04;12.63;12.02;23.26;Sc;;;;;;;;2MASX J09382377+7619106,MCG +13-07-032,PGC 027473,UGC 05115;;; +NGC2939;G;09:38:08.07;+09:31:17.5;Leo;2.12;0.74;154;13.50;;10.41;9.59;9.58;23.29;Sbc;;;;;;;;2MASX J09380786+0931258,IRAS 09354+0945,MCG +02-25-011,PGC 027451,SDSS J093807.89+093126.0,SDSS J093807.89+093126.1,SDSS J093808.07+093117.5,UGC 05134;;; +NGC2940;G;09:38:05.19;+09:37:00.2;Leo;0.97;0.77;91;14.80;;11.46;10.80;10.53;23.42;E-S0;;;;;;;;2MASX J09380516+0936598,MCG +02-25-012,PGC 027448,SDSS J093805.18+093700.1,SDSS J093805.19+093700.1,SDSS J093805.19+093700.2;;; +NGC2941;G;09:38:24.21;+17:02:40.0;Leo;0.70;0.57;167;15.10;;12.07;11.23;11.17;23.22;S0-a;;;;;;;;2MASX J09382422+1702398,MCG +03-25-009,PGC 027470,SDSS J093824.20+170240.0,SDSS J093824.21+170240.0;;; +NGC2942;G;09:39:07.96;+34:00:22.8;LMi;1.67;1.32;152;14.10;;11.37;10.74;10.89;23.12;Sc;;;;;;;;2MASX J09390795+3400223,IRAS 09361+3413,MCG +06-21-065,PGC 027527,SDSS J093907.95+340022.7,SDSS J093907.96+340022.7,SDSS J093907.96+340022.8,UGC 05140;;; +NGC2943;G;09:38:32.87;+17:01:52.7;Leo;2.16;1.08;128;14.00;;10.34;9.61;9.39;24.20;E;;;;;;;;2MASX J09383289+1701527,MCG +03-25-011,PGC 027482,SDSS J093832.86+170152.6,SDSS J093832.87+170152.6,SDSS J093832.87+170152.7,SDSS J093832.89+170152.6,UGC 05136;;; +NGC2944;GPair;09:39:18.20;+32:18:30.0;Leo;1.00;;;;;;;;;;;;;;;;;MCG +06-21-067,UGC 05144;;;Diameter of the group inferred by the author. +NGC2944 NED01;G;09:39:18.12;+32:18:37.6;Leo;0.91;0.29;100;14.70;;12.78;12.17;11.80;22.71;SBc;;;;;;;;2MASX J09391803+3218392,MCG +06-21-067 NED01,IRAS 09363+3232,PGC 027533,SDSS J093918.11+321837.6,UGC 05144 NED01;;; +NGC2944 NED02;G;09:39:19.61;+32:18:21.6;Leo;0.32;0.19;161;17.44;;;;;23.77;Sc;;;;;;;;MCG +06-21-067 NED02,PGC 1990710,UGC 05144 NED02;;;B-Mag taken from LEDA +NGC2945;G;09:37:41.13;-22:02:06.2;Hya;1.66;1.31;160;13.23;;10.43;9.76;9.49;23.18;E-S0;;;;;;;;2MASX J09374111-2202064,ESO 565-028,ESO-LV 565-0280,MCG -04-23-010,PGC 027418;;; +NGC2946;G;09:39:01.58;+17:01:31.2;Leo;1.10;0.34;15;14.80;;11.97;11.22;10.97;23.14;SBb;;;;;;;;2MASX J09390153+1701305,IRAS 09362+1715,MCG +03-25-013,PGC 027521,SDSS J093901.57+170131.1,UGC 05143;;; +NGC2947;G;09:36:05.79;-12:26:12.2;Hya;1.63;1.20;28;13.40;;10.89;10.19;9.96;;SABb;;;;;;0547,2494;;2MASX J09360583-1226120,IRAS 09336-1212,MCG -02-25-004,PGC 027309;;; +NGC2948;G;09:38:59.19;+06:57:19.6;Leo;1.43;0.78;1;13.80;;10.86;10.27;9.93;22.86;Sbc;;;;;;;;2MASX J09385921+0657199,IRAS 09363+0710,MCG +01-25-007,PGC 027518,SDSS J093859.18+065719.5,SDSS J093859.19+065719.6,UGC 05141;;; +NGC2949;GPair;09:39:56.25;+16:47:14.8;Leo;0.42;0.31;15;15.50;;13.01;12.34;11.96;;;;;;;;;;PGC 027579;;; +NGC2950;G;09:42:35.15;+58:51:04.6;UMa;2.62;1.65;142;11.80;;8.83;8.16;7.89;22.74;S0;;;;;;;;2MASX J09423511+5851043,MCG +10-14-032,PGC 027765,SDSS J094235.14+585104.5,UGC 05176;;; +NGC2951;GPair;09:39:40.40;-00:14:07.0;Hya;1.34;0.51;85;15.10;;11.48;10.89;10.50;23.69;E;;;;;;;;MCG +00-25-006,PGC 027562;;; +NGC2952;G;09:37:36.99;-10:11:00.2;Hya;0.80;0.55;90;15.33;;13.88;13.20;13.32;23.02;Sd;;;;;;;;2MASX J09373694-1011001,PGC 027411;;; +NGC2953;Other;09:40:19.04;+14:49:57.7;Leo;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC2954;G;09:40:24.07;+14:55:21.5;Leo;1.43;0.99;155;13.50;;10.36;9.68;9.43;22.95;E;;;;;;;;2MASX J09402405+1455215,MCG +03-25-019,PGC 027600,SDSS J094024.08+145521.4,UGC 05155;;; +NGC2955;G;09:41:16.62;+35:52:56.2;LMi;1.59;0.87;160;13.90;;10.99;10.30;10.04;22.89;SABb;;;;;;;;2MASX J09411660+3552556,IRAS 09382+3606,MCG +06-21-073,PGC 027666,SDSS J094116.61+355256.1,UGC 05166;;; +NGC2956;G;09:39:17.05;-19:06:03.9;Hya;0.86;0.38;58;15.29;;12.18;11.48;11.10;23.17;SBb;;;;;;;;2MASX J09391706-1906040,ESO 565-034,ESO-LV 565-0340,IRAS 09369-1852,PGC 027531;;; +NGC2957;GPair;09:47:16.90;+72:59:06.0;UMa;1.00;;;;;;;;;;;;;;;;;;;Misidentified as 'NGC2963?' in MCG, and as part of 'NGC2957?' in MCG errata.;Diameter of the group inferred by the author. +NGC2957 NED01;G;09:47:15.77;+72:59:09.8;UMa;0.91;0.33;;16.00;;;;;;E;;;;;;;;MCG +12-10-001,PGC 028113;;; +NGC2957A;G;09:47:18.00;+72:59:02.7;UMa;0.77;0.34;49;15.30;;11.82;11.11;10.85;23.19;Sa;;;;;2957 NED02;;;2MASX J09471828+7259026,MCG +12-10-002,PGC 028119;;; +NGC2958;G;09:40:41.62;+11:53:18.3;Leo;0.98;0.72;10;13.90;;11.17;10.48;10.20;22.48;Sbc;;;;;;;;2MASX J09404160+1153183,IRAS 09379+1206,MCG +02-25-015,PGC 027620,SDSS J094041.64+115318.1,UGC 05160;;; +NGC2959;G;09:45:08.97;+68:35:40.5;UMa;1.38;1.17;113;13.68;12.69;10.24;9.52;9.22;23.00;Sab;;;;;;;;2MASX J09450901+6835400,IRAS 09409+6849,MCG +12-09-062,PGC 027939,SDSS J094508.92+683540.6,SDSS J094508.96+683540.4,UGC 05202;;"MCG implies the R.A. is 08h41.1m; corrected in MCG errata."; +NGC2960;G;09:40:36.38;+03:34:37.2;Hya;1.11;0.86;40;13.60;;10.77;10.12;9.78;22.64;Sa;;;;;;;;2MASX J09403637+0334369,IRAS 09380+0348,MCG +01-25-009,PGC 027619,SDSS J094036.38+033437.2,UGC 05159;;; +NGC2961;G;09:45:22.47;+68:36:29.8;UMa;0.86;0.32;145;15.75;14.70;12.23;11.43;11.19;23.24;SABb;;;;;2959A;;;2MASX J09452254+6836299,MCG +12-09-063,PGC 027958,SDSS J094522.47+683629.7;;"MCG implies the R.A. is 08h41.3m; corrected in MCG errata."; +NGC2962;G;09:40:53.93;+05:09:56.9;Sex;2.31;1.16;2;13.10;;9.68;8.96;8.67;23.41;S0-a;;;;;;;;2MASX J09405390+0509569,MCG +01-25-011,PGC 027635,SDSS J094053.93+050956.8,SDSS J094053.93+050956.9,UGC 05167;;; +NGC2963;G;09:47:50.42;+72:57:51.8;UMa;1.18;0.64;158;14.30;;11.40;10.66;10.39;23.06;SBab;;;;;;;;2MASX J09475038+7257515,IRAS 09431+7311,MCG +12-10-003,PGC 028155,UGC 05222;;; +NGC2964;G;09:42:54.23;+31:50:50.6;Leo;2.92;2.18;97;12.00;;9.29;8.61;8.36;22.88;Sbc;;;;;;;;2MASX J09425425+3150499,IRAS 09399+3204,MCG +05-23-027,PGC 027777,UGC 05183;;One of two 6cm sources associated with [WB92] 0940+3206; +NGC2965;G;09:43:19.15;+36:14:52.1;LMi;1.30;0.92;77;17.17;16.38;11.08;10.37;10.15;23.60;S0;;;;;;;;2MASX J09431915+3614521,MCG +06-22-003,PGC 027813,SDSS J094319.14+361452.1,SDSS J094319.15+361452.1,SDSS J094319.15+361452.2,UGC 05191;;; +NGC2966;G;09:42:11.48;+04:40:23.3;Sex;2.12;0.68;76;14.00;;10.53;9.78;9.68;23.55;Sc;;;;;;;;2MASX J09421148+0440233,IRAS 09395+0454,MCG +01-25-013,PGC 027734,UGC 05181;;; +NGC2967;G;09:42:03.29;+00:20:11.2;Sex;2.14;2.01;135;12.10;;9.77;9.10;8.88;22.62;Sc;;;;;;;;2MASX J09420333+0020113,IRAS 09394+0033,MCG +00-25-007,PGC 027723,SDSS J094202.98+002021.0,SDSS J094203.29+002011.1,SDSS J094203.46+002012.5,UGC 05180;;; +NGC2968;G;09:43:12.01;+31:55:43.3;Leo;2.48;1.63;54;15.72;14.25;9.43;8.67;8.43;23.27;Sa;;;;;;;;2MASX J09431201+3155438,MCG +05-23-029,PGC 027800,SDSS J094312.00+315543.3,SDSS J094312.01+315543.3,UGC 05190;;; +NGC2969;G;09:41:54.50;-08:36:10.8;Sex;1.32;0.60;25;15.50;;11.42;10.80;10.37;22.49;Sc;;;;;;;;2MASX J09415451-0836110,IRAS 09394-0822,MCG -01-25-021,PGC 027714,TYC 5461-930-1;;; +NGC2970;G;09:43:31.07;+31:58:37.1;Leo;0.85;0.75;67;14.70;;11.89;11.22;11.04;22.93;E;;;;;;;;2MASX J09433110+3158364,MCG +05-23-030,PGC 027827,SDSS J094331.06+315837.1,SDSS J094331.07+315837.1;;; +NGC2971;G;09:43:46.12;+36:10:45.7;LMi;1.13;0.78;131;15.00;;12.15;11.54;11.16;23.52;Sb;;;;;;;;2MASX J09434612+3610461,MCG +06-22-005,PGC 027843,SDSS J094346.11+361045.7,SDSS J094346.12+361045.7,UGC 05197;;; +NGC2972;OCl;09:40:11.52;-50:19:15.4;Vel;3.60;;;10.72;9.90;;;;;;;;;;2999;;;MWSC 1699;;; +NGC2973;Other;09:41:34.75;-30:02:54.2;Ant;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC2974;G;09:42:33.28;-03:41:56.9;Sex;3.48;2.13;44;12.19;;7.25;6.86;6.26;23.42;E;;;;;;;;2MASX J09423326-0341568,IRAS 09400-0328,MCG +00-25-008,PGC 027762,UGCA 172;;; +NGC2975;G;09:41:16.07;-16:40:27.8;Hya;0.84;0.63;80;16.12;;12.37;11.65;11.46;24.10;E-S0;;;;;;;;2MASX J09411606-1640274,PGC 027664;;; +NGC2976;G;09:47:15.46;+67:54:59.0;UMa;5.77;3.01;143;11.03;10.16;8.35;7.72;7.52;22.81;Sc;;;;;;;;2MASX J09471545+6754589,IRAS 09431+6809,MCG +11-12-025,PGC 028120,SDSS J094715.31+675500.0,UGC 05221;;; +NGC2977;G;09:43:46.29;+74:51:36.8;Dra;2.08;1.05;145;12.70;;10.71;9.99;9.78;23.12;Sb;;;;;;;;2MASX J09434323+7452011,2MASX J09434671+7451344,IRAS 09388+7505,MCG +13-07-035,PGC 027845,UGC 05175;;; +NGC2978;G;09:43:16.80;-09:44:45.2;Sex;1.07;0.87;112;13.50;;11.41;10.75;10.41;22.69;SABb;;;;;;;;2MASX J09431675-0944443,IRAS 09408-0931,MCG -01-25-029,PGC 027808;;; +NGC2979;G;09:43:08.65;-10:22:59.7;Sex;2.06;1.25;21;14.00;;10.50;9.78;9.52;;SABa;;;;;3050;;;2MASX J09430865-1022596,IRAS 09407-1009,MCG -02-25-012,PGC 027795;;; +NGC2980;G;09:43:11.97;-09:36:44.6;Sex;1.79;0.86;164;13.60;;10.74;9.98;9.67;23.01;Sc;;;;;;;;2MASX J09431196-0936446,IRAS 09407-0923,MCG -01-25-028,PGC 027799;;; +NGC2981;G;09:44:56.57;+31:05:52.2;Leo;1.06;0.70;86;15.00;;11.90;11.27;10.92;23.38;SABb;;;;;;;;2MASX J09445655+3105519,MCG +05-23-032,PGC 027925,SDSS J094456.56+310552.2,SDSS J094456.57+310552.2,UGC 05208;;; +NGC2982;OCl;09:42:00.08;-44:01:37.7;Vel;;;;;;;;;;;;;;;;;;MWSC 1703;;; +NGC2983;G;09:43:41.10;-20:28:37.9;Hya;2.37;1.16;86;12.81;11.68;9.52;8.82;8.55;23.29;S0-a;;;;;;;;2MASX J09434109-2028377,ESO 566-003,ESO-LV 566-0030,MCG -03-25-017,PGC 027840,UGCA 176;;; +NGC2984;G;09:43:40.38;+11:03:39.1;Leo;0.85;0.83;155;14.30;;11.36;10.63;10.36;22.74;E-S0;;;;;;0556;;2MASX J09434038+1103387,MCG +02-25-025,PGC 027838,SDSS J094340.37+110339.0,SDSS J094340.38+110339.1,UGC 05200;;; +NGC2985;G;09:50:22.23;+72:16:43.1;UMa;3.61;2.92;177;11.37;10.61;8.31;7.49;7.36;22.60;Sab;;;;;;;;2MASX J09502223+7216431,IRAS 09459+7230,MCG +12-10-006,PGC 028316,UGC 05253;;; +NGC2986;G;09:44:16.04;-21:16:40.8;Hya;4.81;3.85;42;11.60;10.93;8.54;7.85;7.64;23.96;E;;;;;;;;2MASX J09441604-2116418,ESO 566-005,ESO-LV 566-0050,MCG -03-25-019,PGC 027885,UGCA 178;;; +NGC2987;G;09:45:41.47;+04:56:30.6;Sex;1.31;0.60;163;13.90;;11.17;10.43;10.15;22.92;Sab;;;;;;;;2MASX J09454148+0456309,IRAS 09430+0510,MCG +01-25-017,PGC 027981,SDSS J094541.47+045630.6,UGC 05220;;; +NGC2988;G;09:46:47.97;+22:00:43.7;Leo;0.91;0.33;37;14.30;;;;;23.18;Sbc;;;;;;;;MCG +04-23-032,PGC 028078,SDSS J094647.91+220042.2,SDSS J094647.97+220043.6,SDSS J094647.97+220043.7,UGC 05233 NOTES01;;Multiple SDSS entries describe this object.; +NGC2989;G;09:45:25.22;-18:22:26.1;Hya;1.69;1.16;38;13.51;14.50;11.14;10.50;10.23;23.13;SABb;;;;;;;;2MASX J09452522-1822259,ESO 566-009,ESO-LV 566-0090,IRAS 09430-1808,MCG -03-25-020,PGC 027962;;; +NGC2990;G;09:46:17.16;+05:42:31.7;Sex;0.93;0.44;86;12.50;;11.03;10.33;10.10;21.12;SABc;;;;;;;;2MASX J09461721+0542318,IRAS 09436+0556,MCG +01-25-021,PGC 028026,SDSS J094617.16+054231.6,UGC 05229;;; +NGC2991;G;09:46:50.12;+22:00:50.2;Leo;0.99;0.80;124;14.30;;10.86;10.05;9.74;22.27;S0;;;;;;;;2MASX J09465011+2200504,MCG +04-23-033,PGC 028079,SDSS J094650.11+220050.2,UGC 05233;;; +NGC2992;G;09:45:42.05;-14:19:35.0;Hya;2.92;0.69;17;13.14;12.18;9.67;8.93;8.60;23.55;Sa;;;;;;;;2MASX J09454204-1419348,IRAS 09432-1405,MCG -02-25-014,PGC 027982;;; +NGC2993;G;09:45:48.33;-14:22:05.9;Hya;1.36;1.13;94;13.11;12.64;11.04;10.37;10.13;22.41;Sa;;;;;;;;2MASX J09454832-1422060,IRAS 09434-1408,MCG -02-25-015,PGC 027991;;; +NGC2994;G;09:47:16.11;+22:05:22.2;Leo;0.95;0.52;127;14.40;;10.85;10.16;9.86;22.61;S0;;;;;;;;2MASX J09471608+2205221,IRAS 09444+2219,MCG +04-23-035,PGC 028122,SDSS J094716.11+220522.1,SDSS J094716.11+220522.2,UGC 05239;;; +NGC2995;*Ass;09:43:59.09;-54:35:49.0;Vel;;;;;;;;;;;;;;;;;;;;Probably a random grouping of Milky Way stars.; +NGC2996;G;09:46:30.18;-21:34:17.8;Hya;1.36;1.36;150;13.56;;10.97;10.28;10.02;23.06;S0-a;;;;;;;;2MASX J09463018-2134178,ESO 566-012,ESO-LV 566-0120,MCG -03-25-022,PGC 028049;;; +NGC2997;G;09:45:38.79;-31:11:27.9;Ant;10.26;6.21;97;9.97;9.41;7.33;6.67;6.41;23.42;SABc;;;;;;;;2MASX J09453879-3111279,ESO 434-035,ESO-LV 434-0350,MCG -05-23-012,PGC 027978,UGCA 181;;Extended HIPASS source; +NGC2998;G;09:48:43.63;+44:04:53.2;UMa;2.44;1.23;54;13.30;;10.93;10.20;9.93;23.23;SABc;;;;;;;;2MASX J09484363+4404526,IRAS 09455+4418,MCG +07-20-051,PGC 028196,SDSS J094843.62+440453.1,SDSS J094843.63+440453.1,SDSS J094843.63+440453.2,UGC 05250;;; +NGC2999;Dup;09:40:11.52;-50:19:15.4;Vel;;;;;;;;;;;;;;;2972;;;;;; +NGC3000;**;09:48:51.28;+44:07:49.0;UMa;;;;;;;;;;;;;;;;;;;;; +NGC3001;G;09:46:18.66;-30:26:14.9;Ant;3.02;2.26;5;12.15;11.83;9.28;8.62;8.36;23.50;Sbc;;;;;;;;2MASX J09461866-3026148,ESO 434-038,ESO-LV 434-0380,MCG -05-23-014,PGC 028027,UGCA 183;;; +NGC3002;*;09:48:57.42;+44:03:26.0;UMa;;;;;;;;;;;;;;;;;;SDSS J094857.42+440326.0;;; +NGC3003;G;09:48:36.05;+33:25:17.4;LMi;4.74;1.06;79;12.30;;10.26;9.59;9.48;23.22;Sbc;;;;;;;;2MASX J09483604+3325173,IRAS 09456+3339,MCG +06-22-013,PGC 028186,SDSS J094835.75+332517.5,UGC 05251;;; +NGC3004;*;09:49:02.45;+44:06:39.7;UMa;;;;;;;;;;;;;;;;;;SDSS J094902.44+440639.7;;; +NGC3005;G;09:49:14.87;+44:07:52.7;UMa;1.14;0.30;150;16.00;;12.64;12.00;11.58;23.29;SABc;;;;;;;;2MASX J09491500+4407528,IRAS 09461+4421,MCG +07-20-054,PGC 028232,SDSS J094914.86+440752.7,SDSS J094914.87+440752.7;;; +NGC3006;G;09:49:17.34;+44:01:32.9;UMa;0.82;0.29;83;15.60;;12.68;11.87;11.59;23.18;Sbc;;;;;;;;2MASX J09491734+4401328,MCG +07-20-055,PGC 028235,SDSS J094917.34+440132.8;;; +NGC3007;G;09:47:45.62;-06:26:17.4;Sex;1.61;0.78;81;15.00;;11.31;10.51;10.12;23.98;S0-a;;;;;;;;2MASX J09474561-0626173,IRAS 09452-0612,MCG -01-25-038,PGC 028150;;; +NGC3008;G;09:49:34.26;+44:06:09.7;UMa;0.75;0.47;136;15.40;;12.09;11.47;11.17;23.18;S0-a;;;;;;;;2MASX J09493422+4406098,MCG +07-20-059,PGC 028252,SDSS J094934.26+440609.6,SDSS J094934.26+440609.7;;; +NGC3009;G;09:50:11.13;+44:17:42.2;UMa;0.77;0.74;60;14.50;;12.33;11.80;11.71;22.53;SBbc;;;;;;;;2MASX J09501107+4417419,MCG +07-20-062,PGC 028303,SDSS J095011.12+441742.1,SDSS J095011.12+441742.2,SDSS J095011.13+441742.2,UGC 05264;;; +NGC3010;G;09:50:33.15;+44:18:51.8;UMa;0.39;0.20;67;;;;;;21.51;S0;;;;;;;;2MASX J09503310+4418516,MCG +07-20-065,PGC 028335,SDSS J095033.15+441851.7,SDSS J095033.15+441851.8,UGC 05273 NED01;;Component 'a)' in UGC notes.; +NGC3011;G;09:49:41.20;+32:13:16.0;Leo;0.82;0.69;61;14.20;;11.88;11.34;11.17;22.79;S0;;;;;;;;2MASX J09494124+3213156,MCG +05-23-038,PGC 028259,SDSS J094941.20+321315.9,SDSS J094941.20+321316.0,UGC 05259;;; +NGC3012;G;09:49:52.11;+34:42:50.8;LMi;1.24;1.18;145;14.90;;11.32;10.58;10.30;23.98;E;;;;;;;;2MASX J09495208+3442505,MCG +06-22-017,PGC 028270,SDSS J094952.11+344250.8,UGC 05262;;; +NGC3013;G;09:50:09.36;+33:34:09.6;LMi;0.81;0.56;64;15.60;;12.42;11.70;11.46;23.61;Sab;;;;;;;;2MASX J09500934+3334094,MCG +06-22-018,PGC 028300,SDSS J095009.35+333409.5,SDSS J095009.36+333409.5,SDSS J095009.36+333409.6;;; +NGC3014;G;09:49:07.65;-04:44:34.6;Sex;0.93;0.49;154;14.00;;12.07;11.29;11.24;23.77;Sbc;;;;;;;;2MASX J09490765-0444345,MCG -01-25-043,PGC 028222;;Noted in MCG as a possible GPair.; +NGC3015;G;09:49:22.92;+01:08:43.5;Sex;0.53;0.40;92;14.20;;11.62;10.84;10.57;21.66;S0-a;;;;;;;;2MASX J09492289+0108437,IRAS 09468+0122,MCG +00-25-020,PGC 028240,SDSS J094922.91+010843.3,SDSS J094922.91+010843.5,SDSS J094922.92+010843.4,SDSS J094922.92+010843.5,UGC 05261;;; +NGC3016;G;09:49:50.66;+12:41:42.8;Leo;1.12;0.95;71;13.70;;11.31;10.63;10.28;22.68;Sb;;;;;;;;2MASX J09495067+1241429,IRAS 09471+1255,MCG +02-25-040,PGC 028269,SDSS J094950.65+124142.7,SDSS J094950.66+124142.8,UGC 05266;;; +NGC3017;G;09:49:03.04;-02:49:18.5;Sex;1.02;0.88;87;14.40;;11.05;10.38;10.06;23.32;E;;;;;;;;2MASX J09490301-0249180,MCG +00-25-019,PGC 028220,SDSS J094903.03-024918.5;;; +NGC3018;G;09:49:41.45;+00:37:16.5;Sex;1.17;0.54;28;14.13;;12.08;11.74;11.37;22.40;SBbc;;;;;;;;2MASX J09494143+0037163,MCG +00-25-021,PGC 028258,UGC 05265;;; +NGC3019;G;09:50:07.21;+12:44:46.1;Leo;0.76;0.49;33;15.00;;13.33;12.60;12.58;23.18;Sc;;;;;;;;2MASX J09500721+1244459,MCG +02-25-044,PGC 028295,SDSS J095007.20+124446.0,SDSS J095007.21+124446.1;;; +NGC3020;G;09:50:06.60;+12:48:49.1;Leo;2.34;1.28;100;13.20;;11.48;10.97;10.68;23.54;Sc;;;;;;;;2MASX J09500659+1248489,IRAS 09474+1302,MCG +02-25-045,PGC 028296,SDSS J095006.63+124848.9,SDSS J095006.64+124848.9,UGC 05271;;; +NGC3021;G;09:50:57.15;+33:33:13.1;LMi;1.36;0.81;110;12.60;;10.14;9.46;9.18;21.55;Sbc;;;;;;;;2MASX J09505711+3333124,IRAS 09479+3347,MCG +06-22-019,PGC 028357,SDSS J095057.14+333313.0,UGC 05280;;; +NGC3022;G;09:49:39.25;-05:09:59.7;Sex;1.70;1.56;0;14.00;;10.54;9.73;9.61;24.37;S0;;;;;;;;2MASX J09493926-0509599,MCG -01-25-046,PGC 028257;;; +NGC3023;G;09:49:52.59;+00:37:05.4;Sex;1.82;0.94;80;13.30;12.70;11.45;10.69;10.47;23.00;SABc;;;;;;;;2MASX J09495263+0037043,IRAS 09472+0051,MCG +00-25-022,PGC 028272,SDSS J094952.57+003705.3,SDSS J094952.58+003705.3,SDSS J094952.58+003705.4,UGC 05269;;; +NGC3024;G;09:50:27.39;+12:45:55.8;Leo;1.71;0.50;124;13.70;;12.06;11.27;11.18;22.95;Sc;;;;;;;;2MASX J09502739+1245562,IRAS 09477+1259,MCG +02-25-046,PGC 028324,SDSS J095027.38+124555.7,SDSS J095027.39+124555.7,SDSS J095027.40+124555.8,UGC 05275;;; +NGC3025;G;09:49:29.06;-21:44:32.1;Hya;1.59;1.05;118;13.88;;10.84;10.09;9.86;23.68;S0;;;;;;;;2MASX J09492906-2144321,ESO 566-015,ESO-LV 566-0150,MCG -04-23-018,PGC 028249;;; +NGC3026;G;09:50:55.37;+28:33:04.0;Leo;2.22;0.60;82;13.80;;11.36;11.45;10.71;23.17;SBm;;;;;;;;2MASX J09505530+2833042,IRAS 09480+2847,MCG +05-23-043,PGC 028351,SDSS J095055.37+283303.9,SDSS J095055.37+283304.0,UGC 05279;;; +NGC3027;G;09:55:40.60;+72:12:12.8;UMa;3.35;1.27;128;12.30;;11.52;11.06;10.84;22.73;Sc;;;;;;;;2MASX J09554063+7212128,IRAS 09513+7226,MCG +12-10-009,PGC 028636,UGC 05316;;; +NGC3028;G;09:49:54.24;-19:11:03.0;Hya;1.08;0.84;70;13.55;;11.61;11.12;10.75;22.28;Sb;;;;;;;;2MASX J09495422-1911030,ESO 566-016,ESO-LV 566-0160,IRAS 09475-1856,PGC 028276;;; +NGC3029;G;09:48:54.02;-08:03:03.4;Sex;1.35;0.87;140;13.67;;12.04;11.40;11.17;23.55;SABc;;;;;;;;2MASX J09485401-0803032,MCG -01-25-047,PGC 028206;;MCG RA is +1 minute in error.; +NGC3030;G;09:50:10.52;-12:13:35.1;Hya;1.24;0.92;137;15.00;;11.24;10.56;10.32;23.58;E-S0;;;;;;;;2MASX J09501056-1213348,MCG -02-25-021,PGC 028302;;; +NGC3031;G;09:55:33.17;+69:03:55.1;UMa;21.63;11.25;157;7.89;6.94;4.76;4.09;3.83;22.78;Sab;;;;081;;;;2MASX J09553318+6903549,IRAS 09514+6918,MCG +12-10-010,PGC 028630,SDSS J095533.16+690355.1,UGC 05318;Bode's Galaxy;; +NGC3032;G;09:52:08.15;+29:14:10.4;Leo;1.43;1.31;90;13.87;13.28;10.48;9.85;9.65;22.59;S0;;;;;;;;2MASX J09520818+2914106,IRAS 09492+2928,MCG +05-23-046,PGC 028424,SDSS J095208.15+291410.3,UGC 05292;;; +NGC3033;OCl;09:48:35.04;-56:25:48.2;Vel;4.80;;;9.24;8.80;;;;;;;;;;;;;MWSC 1715;;; +NGC3034;G;09:55:52.73;+69:40:45.8;UMa;10.99;5.11;66;9.30;8.41;5.84;5.07;4.67;22.22;S?;;;;082;;;;2MASX J09555243+6940469,IRAS 09517+6954,MCG +12-10-011,PGC 028655,SDSS J095551.73+694048.6,UGC 05322;Cigar Galaxy;; +NGC3035;G;09:51:55.03;-06:49:22.5;Sex;1.47;1.19;0;13.73;13.50;10.70;10.05;9.75;;Sbc;;;;;;;;2MASX J09515502-0649225,IRAS 09494-0635,MCG -01-25-052,PGC 028415;;; +NGC3036;OCl;09:49:15.89;-62:40:32.1;Car;4.80;;;;;;;;;;;;;;;;;MWSC 1719;;; +NGC3037;G;09:51:24.02;-27:00:40.0;Ant;1.29;1.13;57;13.66;;12.18;11.47;11.12;22.89;Sm;;;;;;;;2MASX J09512400-2700400,ESO 499-010,ESO-LV 499-0100,MCG -04-24-002,PGC 028381;;; +NGC3038;G;09:51:15.45;-32:45:09.2;Ant;2.80;1.69;126;12.50;11.60;9.35;8.65;8.38;23.06;Sb;;;;;;;;2MASX J09511543-3245092,ESO 374-002,ESO-LV 374-0020,MCG -05-24-001,PGC 028376;;Confused HIPASS source; +NGC3039;G;09:52:29.67;+02:09:16.0;Sex;1.32;0.69;16;14.40;;10.99;10.26;10.02;23.24;Sab;;;;;;;;2MASX J09522963+0209159,MCG +00-25-027,PGC 028452,SDSS J095229.67+020916.0,UGC 05297;;; +NGC3040;GPair;09:53:04.30;+19:26:14.0;Leo;1.80;;;;;;;;;;;;;;;;;MCG +03-25-037,UGC 05300;;;Diameter of the group inferred by the author. +NGC3040 NED01;G;09:53:03.46;+19:26:33.3;Leo;0.87;0.39;148;15.30;;12.59;11.85;11.50;23.90;Sab;;;;;;;;2MASX J09530347+1926331,MCG +03-25-037 NED01,PGC 200252,UGC 05300 NED01;;;B-Mag taken from LEDA +NGC3040 NED02;G;09:53:05.10;+19:25:55.8;Leo;1.51;0.91;165;14.20;;11.04;10.35;10.09;23.89;S0-a;;;;;;;;2MASX J09530509+1925561,MCG +03-25-037 NED02,PGC 028479,SDSS J095305.09+192555.8,UGC 05300 NED02;;; +NGC3041;G;09:53:07.14;+16:40:39.6;Leo;3.22;2.07;93;13.10;;9.57;8.86;8.74;23.21;SABc;;;;;;;;2MASX J09530714+1640396,IRAS 09503+1654,MCG +03-25-039,PGC 028485,SDSS J095307.14+164039.6,UGC 05303;;; +NGC3042;G;09:53:20.22;+00:41:51.7;Sex;1.02;0.74;110;13.80;;10.45;9.69;9.40;22.77;S0-a;;;;;;;;2MASX J09532024+0041515,MCG +00-25-030,PGC 028498,SDSS J095320.21+004151.7,SDSS J095320.22+004151.7,SDSS J095320.22+004151.8,UGC 05307;;; +NGC3043;G;09:56:14.85;+59:18:25.6;UMa;1.66;0.61;82;13.30;;11.39;10.78;10.45;22.50;SBb;;;;;;;;2MASX J09561485+5918255,IRAS 09527+5932,MCG +10-14-052,PGC 028672,SDSS J095614.58+591825.1,UGC 05327;;; +NGC3044;G;09:53:40.88;+01:34:46.7;Sex;4.20;0.70;114;12.70;;10.04;9.28;8.98;22.88;SBc;;;;;;;;2MASX J09534088+0134467,IRAS 09511+0148,MCG +00-25-031,PGC 028517,SDSS J095340.73+013447.7,SDSS J095340.78+013443.7,UGC 05311;;; +NGC3045;G;09:53:17.66;-18:38:42.4;Hya;1.43;0.64;20;13.73;;11.35;10.69;10.49;22.74;SBb;;;;;;;;2MASX J09531766-1838423,ESO 566-022,ESO-LV 566-0220,IRAS 09509-1824,MCG -03-25-028,PGC 028492,PGC 028493,TYC 6049-1247-1;;; +NGC3046;Dup;09:53:58.64;-27:17:10.8;Ant;;;;;;;;;;;;;;;3051;;;;;; +NGC3047A;G;09:54:32.06;-01:17:27.3;Sex;0.60;0.60;30;14.20;;11.37;10.72;10.42;22.32;E;;;;;;;;2MASX J09543208-0117269,MCG +00-25-033,PGC 028577,SDSS J095432.05-011727.2,UGC 05323 NED02;;; +NGC3047B;G;09:54:29.49;-01:17:17.0;Sex;0.59;0.45;44;15.50;;12.68;12.10;11.86;22.91;E;;;;;;;;2MASX J09542948-0117169,MCG +00-25-032,PGC 028572,SDSS J095429.48-011716.9,UGC 05323 NED01;;; +NGC3048;GPair;09:54:57.20;+16:27:28.0;Leo;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC3048 NED01;G;09:54:56.45;+16:27:22.6;Leo;0.71;0.40;110;15.20;;13.27;12.55;12.35;23.18;I;;;;;;;;2MASX J09545641+1627226,PGC 028595,SDSS J095456.45+162722.6;;; +NGC3048 NED02;G;09:54:58.04;+16:27:34.5;Leo;0.41;0.28;16;16.38;;14.42;13.91;13.88;23.36;Sb;;;;;;;;2MASX J09545801+1627346,PGC 1509261,SDSS J095458.04+162734.5;;;B-Mag taken from LEDA +NGC3049;G;09:54:49.56;+09:16:15.9;Leo;2.11;1.22;28;13.04;;10.93;10.30;9.96;23.61;SBb;;;;;;;;2MASX J09544965+0916179,IRAS 09521+0930,MCG +02-25-055,PGC 028590,SDSS J095449.55+091615.8,SDSS J095449.56+091615.9,UGC 05325;;; +NGC3050;Dup;09:43:08.65;-10:22:59.7;Sex;;;;;;;;;;;;;;;2979;;;;;; +NGC3051;G;09:53:58.64;-27:17:10.8;Ant;2.20;1.39;169;12.79;15.00;9.96;9.32;9.04;23.35;E-S0;;;;;3046;;;2MASX J09535864-2717104,ESO 499-016,ESO-LV 499-0160,MCG -04-24-004,PGC 028536;;Identification as NGC 3046 is doubtful.; +NGC3052;G;09:54:27.93;-18:38:20.0;Hya;2.15;1.42;109;12.93;;10.40;9.76;9.43;22.86;SABc;;;;;;;;2MASX J09542791-1838202,ESO 566-026,ESO-LV 566-0260,IRAS 09521-1824,MCG -03-25-030,PGC 028570;;; +NGC3053;G;09:55:33.61;+16:25:58.3;Leo;1.59;0.70;139;13.70;;10.68;9.97;9.65;23.21;Sa;;;;;;;;2MASX J09553359+1625580,IRAS 09528+1640,MCG +03-25-040,PGC 028631,SDSS J095533.61+162558.2,SDSS J095533.61+162558.3,UGC 05329;;; +NGC3054;G;09:54:28.60;-25:42:12.4;Hya;3.56;2.18;112;12.27;;9.31;8.76;8.34;23.47;Sb;;;;;;;;2MASX J09542860-2542123,ESO 499-018,ESO-LV 499-0180,MCG -04-24-005,PGC 028571,UGCA 187;;; +NGC3055;G;09:55:18.06;+04:16:12.1;Sex;1.96;1.11;63;12.30;;10.41;9.72;9.49;22.39;Sc;;;;;;;;2MASX J09551804+0416122,IRAS 09526+0430,MCG +01-25-034,PGC 028617,SDSS J095517.76+041613.1,SDSS J095518.06+041612.0,SDSS J095518.06+041612.1,UGC 05328;;; +NGC3056;G;09:54:32.88;-28:17:53.5;Ant;2.26;1.39;20;12.61;;9.48;8.82;8.64;23.05;S0-a;;;;;;;;2MASX J09543290-2817533,ESO 435-007,ESO-LV 435-0070,MCG -05-24-003,PGC 028576;;; +NGC3057;G;10:05:39.36;+80:17:08.5;Dra;1.45;0.92;8;14.20;;12.52;12.15;11.73;22.73;Sd;;;;;;;;2MASX J10053930+8017084,IRAS 09596+8032,MCG +14-05-010,PGC 029296,SDSS J100539.51+801712.0,UGC 05404;;; +NGC3058;GPair;09:53:35.75;-12:28:53.6;Hya;1.40;;;;;;;;;;;;;;;;;MCG -02-25-026;;;Diameter of the group inferred by the author. +NGC3058 NED01;G;09:53:35.15;-12:28:44.7;Hya;0.62;0.35;145;;;;;;;;;;;;;;;MCG -02-25-026 NED01,PGC 3442467;;; +NGC3058 NED02;G;09:53:36.17;-12:28:55.6;Hya;1.26;0.48;55;13.83;;11.31;10.45;10.00;22.94;Sd;;;;;;0573;;2MASX J09533619-1228557,IRAS 09511-1214,PGC 028513;;; +NGC3059;G;09:50:08.16;-73:55:19.9;Car;3.80;3.56;50;11.56;11.24;9.09;8.27;7.96;23.32;SBbc;;;;;;;;2MASX J09500818-7355199,ESO 037-007,ESO-LV 37-0070,IRAS 09496-7341,PGC 028298;;Extended HIPASS source; +NGC3060;G;09:56:19.20;+16:49:52.4;Leo;2.02;0.42;77;13.80;;10.59;9.89;9.61;22.99;Sb;;;;;;;;2MASX J09561920+1649525,IRAS 09535+1704,MCG +03-26-002,PGC 028680,SDSS J095619.16+164952.2,UGC 05338;;; +NGC3061;G;09:56:12.01;+75:51:59.4;Dra;1.58;1.23;140;13.90;;11.68;11.01;10.67;23.01;Sc;;;;;;;;2MASX J09561205+7551595,IRAS 09513+7606,MCG +13-07-040,PGC 028670,UGC 05319;;; +NGC3062;G;09:56:35.79;+01:25:42.8;Sex;0.83;0.40;63;15.10;;12.19;11.45;11.23;23.01;Sb;;;;;;;;2MASX J09563578+0125425,PGC 028699,SDSS J095635.78+012542.7,SDSS J095635.78+012542.8,SDSS J095635.79+012542.7;;; +NGC3063;**;10:01:41.77;+72:07:04.2;UMa;;;;;;;;;;;;;;;;;;;;; +NGC3064;G;09:55:41.45;-06:21:50.1;Sex;1.15;0.33;25;14.50;;12.77;12.12;11.73;23.04;Sbc;;;;;;;;2MASX J09554143-0621499,MCG -01-26-001,PGC 028638;;; +NGC3065;G;10:01:55.22;+72:10:13.2;UMa;1.87;1.78;160;14.17;13.19;9.97;9.22;8.99;21.87;S0;;;;;;;;2MASX J10015530+7210130,MCG +12-10-014,PGC 029046,UGC 05375;;The 2MASS position is 10 arcsec northwest of the nucleus.; +NGC3066;G;10:02:11.07;+72:07:31.4;UMa;1.12;1.06;75;12.80;;10.89;10.22;9.94;22.45;SABb;;;;;;;;2MASX J10021090+7207309,IRAS 09578+7222,MCG +12-10-015,PGC 029059,UGC 05379;;; +NGC3067;G;09:58:21.08;+32:22:11.6;Leo;2.06;0.66;104;12.70;;9.89;9.16;8.90;22.36;SABa;;;;;;;;2MASX J09582105+3222119,IRAS 09554+3236,MCG +06-22-046,PGC 028805,SDSS J095821.07+322211.6,SDSS J095821.08+322211.6,UGC 05351;;; +NGC3068;G;09:58:40.10;+28:52:39.2;Leo;0.87;0.70;92;15.10;14.05;11.53;10.82;10.48;23.55;E-S0;;;;;;;;MCG +05-24-006,PGC 028815;;; +NGC3069;G;09:57:56.70;+10:25:56.8;Leo;0.86;0.37;166;15.00;;12.20;11.60;11.13;23.15;SABa;;;;;;0580;;2MASX J09575667+1025562,MCG +02-26-005,PGC 028788,SDSS J095756.70+102556.7,SDSS J095756.70+102556.8;;; +NGC3070;G;09:58:06.95;+10:21:35.2;Leo;1.55;1.28;51;13.20;;10.22;9.51;9.26;23.07;E;;;;;;;;2MASX J09580691+1021353,MCG +02-26-006,PGC 028796,SDSS J095806.94+102135.2,UGC 05350;;; +NGC3071;G;09:58:52.99;+31:37:13.1;Leo;0.66;0.46;176;15.40;;12.08;11.34;11.06;23.26;S0;;;;;;;;2MASX J09585297+3137131,PGC 028825,SDSS J095852.99+313713.0,SDSS J095852.99+313713.1;;; +NGC3072;G;09:57:23.89;-19:21:17.9;Hya;1.82;0.62;70;13.73;;10.58;9.87;9.63;23.74;S0-a;;;;;;;;2MASX J09572388-1921180,ESO 566-033,ESO-LV 566-0330,MCG -03-26-001,PGC 028749;;; +NGC3073;G;10:00:52.08;+55:37:07.8;UMa;1.20;1.07;130;14.07;13.40;11.80;11.01;10.80;23.25;E-S0;;;;;;;;2MASX J10005204+5537081,MCG +09-17-007,PGC 028974,SDSS J100052.08+553707.7,SDSS J100052.08+553707.8,UGC 05374;;; +NGC3074;G;09:59:41.21;+35:23:34.1;LMi;1.96;1.69;150;14.80;;11.37;10.73;10.44;23.54;SABc;;;;;;;;2MASX J09594125+3523336,IRAS 09567+3537,MCG +06-22-047,PGC 028888,SDSS J095941.21+352334.0,SDSS J095941.21+352334.1,UGC 05366;;; +NGC3075;G;09:58:56.20;+14:25:13.7;Leo;1.50;0.64;132;14.50;;11.67;10.89;10.79;23.34;Sc;;;;;;;;2MASX J09585625+1425081,IRAS 09562+1439,MCG +03-26-009,PGC 028833,SDSS J095856.27+142507.6,UGC 05360;;; +NGC3076;G;09:57:37.62;-18:10:43.3;Hya;0.87;0.84;25;14.03;;11.68;11.07;10.74;22.52;Sab;;;;;;;;2MASX J09573763-1810434,ESO 566-034,ESO-LV 566-0340,MCG -03-26-002,PGC 028766;;; +NGC3077;G;10:03:19.07;+68:44:02.1;UMa;5.21;4.32;49;10.85;10.14;8.12;7.55;7.30;22.80;S?;;;;;;;;2MASX J10031907+6844022,IRAS 09592+6858,MCG +12-10-017,PGC 029146,SDSS J100318.96+684403.9,UGC 05398;;; +NGC3078;G;09:58:24.61;-26:55:36.0;Hya;3.04;2.48;177;12.00;11.07;8.81;8.14;7.88;23.34;E;;;;;;;;2MASX J09582458-2655356,ESO 499-027,ESO-LV 499-0270,MCG -04-24-009,PGC 028806;;; +NGC3079;G;10:01:57.80;+55:40:47.2;UMa;8.18;1.29;166;11.54;10.86;8.44;7.64;7.26;23.17;SBc;;;;;;;;2MASX J10015792+5540480,IRAS 09585+5555,MCG +09-17-010,PGC 029050,SDSS J100157.94+554047.8,UGC 05387;;; +NGC3080;G;09:59:55.84;+13:02:37.8;Leo;0.80;0.77;50;16.66;16.36;12.21;11.43;11.12;23.14;SABa;;;;;;;;2MASX J09595588+1302381,MCG +02-26-015,PGC 028910,SDSS J095955.84+130237.7,SDSS J095955.85+130237.7,SDSS J095955.85+130237.8,UGC 05372;;; +NGC3081;G;09:59:29.54;-22:49:34.6;Hya;2.67;1.59;71;13.06;13.55;9.91;9.21;8.91;23.62;S0-a;;;;;;2529;;2MASX J09592953-2249343,ESO 499-031,ESO-LV 499-0310,MCG -04-24-012,PGC 028876;;The IC identification is not certain.; +NGC3082;G;09:58:53.07;-30:21:27.7;Ant;2.14;0.77;29;13.49;;9.90;9.21;8.96;23.90;E-S0;;;;;;;;2MASX J09585306-3021278,ESO 435-018,ESO-LV 435-0180,MCG -05-24-011,PGC 028829;;; +NGC3083;G;09:59:49.67;-02:52:38.9;Sex;0.99;0.34;50;14.20;;11.24;10.57;10.29;22.61;SBa;;;;;;;;2MASX J09594966-0252383,MCG +00-26-002,PGC 028900,SDSS J095949.67-025238.9;;; +NGC3084;G;09:59:06.42;-27:07:43.7;Ant;1.66;1.23;100;13.17;;10.44;9.76;9.43;22.88;Sab;;;;;;2528;;2MASX J09590643-2707438,ESO 499-029,ESO-LV 499-0290,MCG -04-24-010,PGC 028841;;; +NGC3085;G;09:59:29.18;-19:29:32.2;Hya;1.24;0.41;118;13.99;12.92;11.02;10.35;10.07;23.18;S0;;;;;;;;2MASX J09592917-1929323,ESO 566-038,ESO-LV 566-0380,MCG -03-26-003,PGC 028875;;; +NGC3086;G;10:00:10.99;-02:58:34.2;Sex;1.16;0.40;147;14.50;;11.57;10.95;10.61;23.02;Sb;;;;;;;;2MASX J10001097-0258343,MCG +00-26-003,PGC 028924,SDSS J100010.99-025834.2;;; +NGC3087;G;09:59:08.66;-34:13:30.8;Ant;2.28;2.02;46;12.69;11.55;9.09;8.44;8.13;23.29;E;;;;;;;;2MASX J09590864-3413307,ESO 374-015,ESO-LV 374-0150,MCG -06-22-005,PGC 028845;;; +NGC3088A;G;10:01:07.19;+22:24:11.4;Leo;1.35;0.83;114;14.70;;;;;23.50;SBab;;;;;;;;2MASX J10010717+2224109,MCG +04-24-010,PGC 028997,UGC 05384 NED01;;Called 'NGC 3088a' in MCG. Component 'a)' in UGC notes.; +NGC3088B;G;10:01:09.70;+22:24:08.3;Leo;0.93;0.26;139;14.70;;12.11;11.36;10.93;23.66;Sbc;;;;;;;;2MASX J10010966+2224090,MCG +04-24-011,PGC 028998,UGC 05384 NED02;;Called 'NGC 3088b' in MCG. Component 'b)' in UGC notes.; +NGC3089;G;09:59:36.68;-28:19:52.9;Ant;1.95;1.13;144;13.33;;10.31;9.61;9.33;23.02;SABb;;;;;;;;2MASX J09593665-2819530,ESO 435-024,ESO-LV 435-0240,MCG -05-24-014,PGC 028882;;; +NGC3090;G;10:00:30.23;-02:58:08.4;Sex;1.63;1.30;15;14.20;;;;;23.53;E;;;;;;;;MCG +00-26-005,PGC 028945,SDSS J100030.23-025808.4;;; +NGC3091;G;10:00:14.29;-19:38:13.1;Hya;3.69;2.18;144;12.04;10.61;9.04;8.34;8.09;23.80;E;;;;;;;;2MASX J10001412-1938113,ESO 566-041,ESO-LV 566-0410,MCG -03-26-007,PGC 028927;;; +NGC3092;G;10:00:47.43;-03:00:44.6;Sex;1.30;0.50;27;14.50;;11.62;11.16;10.79;23.95;S0-a;;;;;;;;2MASX J10004745-0300448,MCG +00-26-008,PGC 028967,SDSS J100047.43-030044.5;;; +NGC3093;G;10:00:53.59;-02:58:19.2;Sex;0.77;0.36;51;15.10;;11.73;11.04;10.75;23.60;E;;;;;;;;2MASX J10005359-0258188,MCG +00-26-007,PGC 028977,SDSS J100053.58-025819.1;;; +NGC3094;G;10:01:25.94;+15:46:12.3;Leo;1.34;0.98;63;13.50;;10.68;9.95;9.62;22.65;SBa;;;;;;;;2MASX J10012591+1546117,IRAS 09586+1600,MCG +03-26-015,PGC 029009,SDSS J100125.94+154612.2,UGC 05390;;The position in 1989H&RHI.C...0000H is incorrect.; +NGC3095;G;10:00:05.83;-31:33:10.3;Ant;3.61;1.81;129;12.45;11.58;9.68;8.89;8.68;23.33;Sc;;;;;;;;2MASX J10000582-3133101,2MASX J10000634-3133337,ESO 435-026,ESO-LV 435-0260,IRAS 09578-3118,MCG -05-24-016,PGC 028919,UGCA 192;;; +NGC3096;G;10:00:33.11;-19:39:43.1;Hya;1.17;1.03;70;14.08;13.09;11.36;10.68;10.56;23.45;S0;;;;;;;;2MASX J10003309-1939433,ESO 566-042,ESO-LV 566-0420,MCG -03-26-008,PGC 028950;;; +NGC3097;Other;10:04:16.07;+60:07:32.8;UMa;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC3098;G;10:02:16.69;+24:42:39.9;Leo;2.33;0.50;90;13.00;;10.05;9.34;9.11;23.32;S0;;;;;;;;2MASX J10021666+2442399,MCG +04-24-012,PGC 029067,SDSS J100216.69+244239.9,UGC 05397;;; +NGC3099;G;10:02:36.55;+32:42:24.2;LMi;1.15;0.62;147;15.40;;11.51;10.84;10.50;24.28;E;;;;;;;;2MASX J10023655+3242245,MCG +06-22-059,PGC 029087,SDSS J100236.54+324224.2,SDSS J100236.54+324224.3;;; +NGC3100;G;10:00:40.84;-31:39:52.3;Ant;3.56;2.48;148;12.15;12.47;8.92;8.27;8.08;23.52;S0;;;;;3103;;;2MASX J10004083-3139519,ESO 435-030,ESO-LV 435-0300,MCG -05-24-018,PGC 028960;;; +NGC3101;G;10:01:35.43;-02:59:39.9;Sex;1.22;0.21;150;15.60;;12.08;11.28;11.04;23.80;Sa;;;;;;;;2MASX J10013544-0259400,MCG +00-26-011,PGC 029025,SDSS J100135.43-025939.9;;; +NGC3102;G;10:04:31.76;+60:06:28.7;UMa;0.98;0.98;110;14.30;;11.55;10.78;10.58;22.97;E-S0;;;;;;;;2MASX J10043179+6006282,MCG +10-15-007,PGC 029220,SDSS J100431.74+600628.9,SDSS J100431.76+600628.5,SDSS J100431.76+600628.6,SDSS J100431.76+600628.7,UGC 05418;;; +NGC3103;Dup;10:00:40.84;-31:39:52.3;Ant;;;;;;;;;;;;;;;3100;;;;;; +NGC3104;G;10:03:57.35;+40:45:24.9;LMi;2.99;2.03;36;14.20;;;;;24.57;IAB;;;;;;;;MCG +07-21-007,PGC 029186,UGC 05414;;; +NGC3105;OCl;10:00:39.52;-54:47:15.7;Vel;4.08;;;10.73;9.70;;;;;;;;;;;;;MWSC 1742;;; +NGC3106;G;10:04:05.25;+31:11:07.7;LMi;0.89;0.25;124;14.00;;10.52;9.89;9.63;21.74;S0;;;;;;;;2MASX J10040526+3111071,MCG +05-24-009,PGC 029196,SDSS J100405.25+311107.6,SDSS J100405.25+311107.7,UGC 05419;;; +NGC3107;G;10:04:22.47;+13:37:16.8;Leo;0.77;0.63;140;13.60;;11.18;10.49;10.34;21.59;SABb;;;;;;;;2MASX J10042247+1337167,IRAS 10016+1351,MCG +02-26-022,PGC 029209,UGC 05425;;; +NGC3108;G;10:02:29.03;-31:40:38.7;Ant;2.54;2.22;59;12.48;;9.18;8.48;8.23;23.50;S0-a;;;;;;;;2MASX J10022902-3140385,ESO 435-032,ESO-LV 435-0320,MCG -05-24-019,PGC 029076;;; +NGC3109;G;10:03:06.88;-26:09:34.5;Hya;16.00;2.74;93;10.42;10.04;9.91;9.66;9.28;23.59;SBm;;;;;;;;2MASX J10030687-2609344,ESO 499-036,ESO-LV 499-0360,MCG -04-24-013,PGC 029128,UGCA 194;;; +NGC3110;G;10:04:02.11;-06:28:29.2;Sex;1.87;0.90;171;13.40;;10.61;9.88;9.53;22.55;SBb;;;;;3122,3518;;;2MASX J10040212-0628291,IRAS 10015-0614,MCG -01-26-014,PGC 029192;;; +NGC3111;G;10:06:07.44;+47:15:45.5;UMa;1.42;1.34;150;14.00;;10.87;10.19;9.87;23.61;E-S0;;;;;;;;2MASX J10060741+4715456,MCG +08-19-002,PGC 029338,SDSS J100607.43+471545.5,SDSS J100607.44+471545.5,UGC 05441;;; +NGC3112;G;10:03:59.18;-20:46:54.5;Hya;1.10;0.30;47;16.01;;13.53;12.93;12.68;23.90;Sbc;;;;;;;;2MASX J10035918-2046544,ESO 567-011,ESO-LV 567-0110,PGC 029189;;; +NGC3113;G;10:04:26.11;-28:26:38.5;Ant;3.43;1.05;86;13.35;;11.86;10.74;10.56;23.71;SABc;;;;;;;;2MASX J10042611-2826384,2MASX J10042677-2826489,ESO 435-035,ESO-LV 435-0350,MCG -05-24-021,PGC 029216,UGCA 198;;; +NGC3114;OCl;10:02:29.57;-60:07:49.9;Car;12.30;;;4.47;4.20;;;;;;;;;;;;;MWSC 1749;;; +NGC3115;G;10:05:13.98;-07:43:06.9;Sex;7.10;3.01;43;11.00;;6.79;6.12;5.88;23.02;E-S0;;;;;;;;2MASX J10051397-0743068,C 053,MCG -01-26-018,PGC 029265,UGCA 199;Spindle Galaxy;; +NGC3116;G;10:06:45.05;+31:05:51.8;LMi;0.70;0.64;45;15.30;;11.95;11.30;10.96;23.40;E;;;;;;;;2MASX J10064505+3105519,MCG +05-24-012,PGC 029383,SDSS J100645.04+310551.8;;; +NGC3117;G;10:06:10.50;+02:54:46.3;Sex;0.96;0.91;110;14.60;;11.45;10.74;10.54;23.39;E;;;;;;;;2MASX J10061053+0254467,MCG +01-26-014,PGC 029340,SDSS J100610.50+025446.3,UGC 05445;;; +NGC3118;G;10:07:11.54;+33:01:38.6;LMi;2.08;0.44;39;14.40;;12.32;11.83;11.67;23.54;Sbc;;;;;;;;2MASX J10071161+3301403,IRAS 10042+3316,MCG +06-22-074,PGC 029415,SDSS J100711.53+330138.5,SDSS J100711.54+330138.6,UGC 05452;;; +NGC3119;G;10:06:51.87;+14:22:24.7;Leo;1.05;0.81;20;14.20;;10.63;9.94;9.62;23.11;E;;;;;3121;;;2MASX J10065190+1422247,MCG +03-26-027 NED01,PGC 029387,SDSS J100651.86+142224.8,SDSS J100651.87+142224.8,UGC 05450;;; +NGC3120;G;10:05:23.04;-34:13:11.8;Ant;1.68;1.17;7;13.53;;10.61;9.92;9.70;23.09;SABb;;;;;;;;2MASX J10052305-3413118,ESO 374-029,ESO-LV 374-0290,IRAS 10031-3358,MCG -06-22-017,PGC 029278;;; +NGC3121;Dup;10:06:51.87;+14:22:24.7;Leo;;;;;;;;;;;;;;;3119;;;;;; +NGC3122;Dup;10:04:02.11;-06:28:29.2;Sex;;;;;;;;;;;;;;;3110;;;;;; +NGC3123;Other;10:07:01.85;+00:04:01.7;Sex;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC3124;G;10:06:39.90;-19:13:17.7;Hya;2.70;2.10;174;12.84;;10.26;9.47;9.09;23.66;Sbc;;;;;;;;2MASX J10063988-1913177,ESO 567-017,ESO-LV 567-0170,MCG -03-26-024,PGC 029377,UGCA 202;;; +NGC3125;G;10:06:33.37;-29:56:05.5;Ant;1.21;0.97;110;13.45;13.00;11.37;10.84;10.52;22.63;E;;;;;;;;2MASX J10063331-2956073,ESO 435-041,ESO-LV 435-0410,IRAS 10042-2941,MCG -05-24-022,PGC 029366;;; +NGC3126;G;10:08:20.66;+31:51:45.7;LMi;3.10;0.66;123;13.50;;10.19;9.45;9.21;23.76;SABb;;;;;;;;2MASX J10082065+3151457,MCG +05-24-019,PGC 029484,SDSS J100820.65+315145.6,SDSS J100820.66+315145.7,UGC 05466;;; +NGC3127;G;10:06:24.85;-16:07:33.9;Hya;1.62;0.28;55;14.00;;11.68;10.90;10.50;23.46;Sb;;;;;;;;2MASX J10062485-1607337,MCG -03-26-022,PGC 029357;;; +NGC3128;G;10:06:01.37;-16:07:19.3;Hya;1.54;0.63;173;13.90;;11.51;10.85;10.39;23.14;SBb;;;;;;;;2MASX J10060139-1607192,MCG -03-26-020,PGC 029330;;; +NGC3129;**;10:08:19.26;+18:25:50.3;Leo;;;;;;;;;;;;;;;;;;;;; +NGC3130;G;10:08:12.34;+09:58:37.2;Leo;1.07;0.61;28;14.30;;11.38;10.68;10.43;23.27;S0-a;;;;;;;;2MASX J10081231+0958374,MCG +02-26-026,PGC 029475,SDSS J100812.34+095837.1,UGC 05468;;; +NGC3131;G;10:08:36.41;+18:13:52.4;Leo;2.16;0.67;58;14.00;;10.67;9.97;9.67;23.51;Sb;;;;;;;;2MASX J10083636+1813525,IRAS 10058+1828,MCG +03-26-033,PGC 029499,SDSS J100836.40+181352.4,SDSS J100836.41+181352.4,UGC 05471;;; +NGC3132;PN;10:07:01.73;-40:26:11.7;Vel;0.50;;;8.20;9.20;9.75;9.73;9.72;;;10.29;10.15;10.07;;;;HD 87892,HD 87877,TYC 7711-00963-1;C 074,ESO 316-027,IRAS 10049-4011,PN G272.1+12.3;Eight-Burst Nebula;; +NGC3133;G;10:07:12.81;-11:57:55.1;Hya;0.68;0.29;27;15.73;;13.01;12.42;12.31;;Sb;;;;;;;;2MASX J10071281-1157553,PGC 029417;;; +NGC3134;G;10:12:29.29;+12:22:38.1;Leo;1.49;0.40;55;14.80;;11.47;10.72;10.54;23.60;SBab;;;;;;;;2MASX J10122928+1222374,MCG +02-26-031,PGC 029722,SDSS J101229.28+122238.0,SDSS J101229.29+122238.0,SDSS J101229.29+122238.1;;; +NGC3135;G;10:10:54.38;+45:57:01.3;UMa;1.00;0.60;88;14.30;;11.73;11.12;10.83;22.80;Sbc;;;;;;;;2MASX J10105440+4557013,MCG +08-19-007,PGC 029646,SDSS J101054.38+455701.2,SDSS J101054.38+455701.3,UGC 05486;;; +NGC3136;G;10:05:48.16;-67:22:40.7;Car;4.20;2.94;27;11.60;11.00;8.07;7.43;7.12;23.66;E;;;;;;;;2MASX J10054815-6722407,ESO 092-008,ESO-LV 92-0080,PGC 029311;;; +NGC3136A;G;10:03:32.58;-67:26:54.5;Car;1.60;0.33;88;15.60;;;;;23.88;IB;;;;;;;;ESO 092-007,ESO-LV 92-0070,PGC 029160;;; +NGC3136B;G;10:10:12.93;-67:00:18.3;Car;1.75;1.35;23;13.32;;9.83;9.03;8.79;22.85;E;;;;;;;;2MASX J10101290-6700183,ESO 092-013,ESO-LV 92-0130,PGC 029597;;; +NGC3137;G;10:09:07.48;-29:03:51.5;Ant;5.57;3.85;4;12.21;;9.95;9.36;9.16;24.27;SABc;;;;;;;;2MASX J10090747-2903514,ESO 435-047,ESO-LV 435-0470,IRAS 10068-2849,MCG -05-24-024,PGC 029530,UGCA 203;;Extended HIPASS source; +NGC3138;G;10:09:16.67;-11:57:24.3;Hya;1.10;0.21;80;15.00;;12.98;12.25;11.94;23.32;Sbc;;;;;;;;2MASX J10091668-1157245,MCG -02-26-032,PGC 029532;;; +NGC3139;G;10:10:05.18;-11:46:41.7;Hya;1.21;0.97;68;14.24;;11.26;10.58;10.27;23.73;S0;;;;;;;;2MASX J10100521-1146414,MCG -02-26-034,PGC 029583;;; +NGC3140;G;10:09:27.82;-16:37:41.4;Hya;0.96;0.68;130;14.00;;11.75;11.15;10.83;23.25;Sc;;;;;;;;2MASX J10092782-1637415,MCG -03-26-028,PGC 029548;;; +NGC3141;G;10:09:19.89;-16:39:12.3;Hya;0.76;0.47;25;15.28;;12.51;11.77;11.56;23.89;Sc;;;;;;;;2MASX J10091989-1639125,PGC 029544;;; +NGC3142;G;10:10:06.37;-08:28:47.1;Sex;0.86;0.30;171;14.00;;;;;23.15;S0;;;;;;;;2MASX J10100562-0828389,MCG -01-26-028,PGC 029586;;; +NGC3143;G;10:10:03.98;-12:34:52.9;Hya;0.82;0.67;103;14.00;;12.21;11.91;11.46;23.07;SBb;;;;;;;;2MASX J10100398-1234527,MCG -02-26-033,PGC 029579;;; +NGC3144;G;10:15:32.18;+74:13:13.0;Dra;1.12;0.74;4;14.30;;11.57;10.86;10.53;23.04;SBab;;;;;3174;;;2MASX J10153223+7413129,MCG +12-10-023,PGC 029949,UGC 05519;;; +NGC3145;G;10:10:09.87;-12:26:01.6;Hya;2.87;1.37;20;12.40;;9.59;8.97;8.62;22.86;SBbc;;;;;;;;2MASX J10100986-1226014,MCG -02-26-036,PGC 029591;;; +NGC3146;G;10:11:09.87;-20:52:14.5;Hya;1.01;0.79;131;13.97;;11.15;10.47;10.15;22.62;SBb;;;;;;;;2MASX J10110987-2052146,ESO 567-023,ESO-LV 567-0230,MCG -03-26-029,PGC 029663;;; +NGC3147;G;10:16:53.65;+73:24:02.7;Dra;4.11;3.55;152;11.43;10.61;8.37;7.76;7.41;22.95;Sbc;;;;;;;;2MASX J10165363+7324023,IRAS 10126+7339,MCG +12-10-025,PGC 030019,UGC 05532;;; +NGC3148;*;10:13:43.83;+50:29:47.5;UMa;;;;6.87;6.63;6.04;5.96;5.92;;;;;;;;;;BD +51 1585,HD 088512,HIP 050097,SAO 27566,TYC 3440-1180-1;;;Eclipsing binary of beta Lyr type (semi-detached). +NGC3149;G;10:03:44.09;-80:25:18.0;Cha;1.15;0.94;23;12.91;;10.37;9.68;9.43;22.38;Sb;;;;;;;;2MASX J10034406-8025178,ESO 019-001,IRAS 10043-8010,PGC 029171;;; +NGC3150;G;10:13:26.32;+38:39:27.6;LMi;1.04;0.77;154;15.40;;12.39;11.71;11.37;23.88;Sb;;;;;;;;2MASX J10132629+3839273,MCG +07-21-017,PGC 029789,SDSS J101326.31+383927.5;;; +NGC3151;G;10:13:29.09;+38:37:11.4;LMi;0.93;0.42;164;15.10;;11.95;11.25;11.00;23.46;S0;;;;;;;;2MASX J10132910+3837113,MCG +07-21-018,PGC 029796,SDSS J101329.08+383711.4;;; +NGC3152;G;10:13:34.12;+38:50:35.5;LMi;0.74;0.65;54;15.50;;12.14;11.47;11.19;23.44;S0;;;;;;;;2MASX J10133414+3850355,MCG +07-21-018a,PGC 029805,SDSS J101334.11+385035.5,SDSS J101334.12+385035.5;;; +NGC3153;G;10:12:50.50;+12:40:00.0;Leo;1.73;0.89;165;13.60;;11.47;11.10;10.62;23.21;Sc;;;;;;;;2MASX J10125050+1240000,IRAS 10101+1254,MCG +02-26-032,PGC 029747,SDSS J101250.51+123959.7,UGC 05505;;; +NGC3154;G;10:13:01.28;+17:02:03.0;Leo;0.83;0.39;121;14.30;;11.47;10.78;10.39;22.21;SBa;;;;;;;;2MASX J10130129+1702030,MCG +03-26-040,PGC 029759,SDSS J101301.09+170203.3,SDSS J101301.27+170202.9,UGC 05507;;Multiple SDSS entries describe this object.; +NGC3155;G;10:17:39.85;+74:20:50.6;Dra;1.21;0.64;37;13.90;;11.72;11.11;10.83;22.71;Sbc;;;;;3194;;;2MASX J10173987+7420504,IRAS 10133+7436,MCG +12-10-026,PGC 030064,UGC 05538;;; +NGC3156;G;10:12:41.25;+03:07:45.7;Sex;1.91;1.02;50;12.80;;10.40;9.82;9.55;23.18;S0;;;;;;;;2MASX J10124120+0307455,MCG +01-26-019,PGC 029730,SDSS J101241.24+030745.6,SDSS J101241.24+030745.7,SDSS J101241.25+030745.6,SDSS J101241.25+030745.7,UGC 05503;;; +NGC3157;G;10:11:42.43;-31:38:34.3;Ant;1.70;0.44;39;13.94;;10.74;10.04;9.75;22.78;SBc;;;;;;2555;;2MASX J10114242-3138341,ESO 435-051,ESO-LV 435-0510,IRAS 10094-3123,MCG -05-24-026,PGC 029691;;; +NGC3158;G;10:13:50.52;+38:45:53.6;LMi;2.32;1.94;152;13.40;;9.81;9.10;8.80;23.59;E;;;;;;;;2MASX J10135049+3845536,MCG +07-21-020,PGC 029822,SDSS J101350.51+384553.6,SDSS J101350.52+384553.6,UGC 05511;;; +NGC3159;G;10:13:52.83;+38:39:16.1;LMi;0.96;0.76;156;14.90;;11.38;10.77;10.51;23.35;E;;;;;;;;2MASX J10135280+3839166,MCG +07-21-021,PGC 029825,SDSS J101352.83+383916.0,SDSS J101352.83+383916.1,SDSS J101352.84+383916.1;;; +NGC3160;G;10:13:55.07;+38:50:34.2;LMi;1.25;0.25;140;15.20;;11.57;10.84;10.56;23.36;Sab;;;;;;;;2MASX J10135502+3850346,MCG +07-21-023,PGC 029830,SDSS J101355.11+385034.5,SDSS J101355.12+385034.5,UGC 05513;;; +NGC3161;G;10:13:59.20;+38:39:25.7;LMi;0.46;0.28;6;15.30;;11.91;11.16;10.93;22.31;E;;;;;;;;2MASX J10135920+3839256,MCG +07-21-022,PGC 029837,SDSS J101359.18+383925.9,SDSS J101359.19+383925.9;;; +NGC3162;G;10:13:31.59;+22:44:15.2;Leo;2.09;1.69;26;12.20;;10.21;9.62;9.47;22.45;SABc;;;;;3575;;;2MASX J10133157+2244152,IRAS 10107+2259,MCG +04-24-019,PGC 029800,SDSS J101331.58+224415.2,UGC 05510;;; +NGC3163;G;10:14:07.10;+38:39:09.2;LMi;1.14;0.97;40;14.40;;10.99;10.28;10.01;23.38;E-S0;;;;;;;;2MASX J10140714+3839096,MCG +07-21-026,PGC 029846,SDSS J101407.10+383909.1,UGC 05517;;; +NGC3164;G;10:15:11.42;+56:40:19.5;UMa;0.80;0.57;178;14.50;;12.33;11.57;11.24;22.76;Sb;;;;;;;;2MASX J10151143+5640191,MCG +10-15-036,PGC 029928,SDSS J101511.42+564019.5,SDSS J101511.42+564019.8,SDSS J101511.43+564019.5,UGC 05527;;; +NGC3165;G;10:13:31.30;+03:22:30.1;Sex;1.17;0.54;175;14.50;;;;;22.90;Sm;;;;;;;;MCG +01-26-023,PGC 029798,SDSS J101331.29+032230.0,SDSS J101331.30+032230.0,SDSS J101331.30+032230.1,UGC 05512;;; +NGC3166;G;10:13:45.60;+03:25:29.0;Sex;4.50;2.84;87;11.20;;8.17;7.49;7.21;23.27;S0-a;;;;;;;;2MASX J10134567+0325288,IRAS 10111+0340,MCG +01-26-024,PGC 029814,SDSS J101345.77+032529.8,SDSS J101345.78+032529.9,UGC 05516;;Multiple SDSS entries describe this object.; +NGC3167;Other;10:14:35.89;+29:35:46.8;LMi;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3168;G;10:16:23.01;+60:14:05.8;UMa;0.91;0.79;35;14.60;;11.23;10.51;10.17;23.18;E;;;;;;;;2MASX J10162300+6014058,MCG +10-15-052,PGC 030001,SDSS J101622.99+601405.9,SDSS J101623.01+601405.6,SDSS J101623.01+601405.7,SDSS J101623.01+601405.8,UGC 05536;;; +NGC3169;G;10:14:15.05;+03:27:57.9;Sex;4.34;2.65;49;13.46;12.41;8.25;7.56;7.28;22.93;Sa;;;;;;;;2MASX J10141509+0327580,IRAS 10116+0342,MCG +01-26-026,PGC 029855,SDSS J101414.21+032802.6,SDSS J101415.04+032758.0,UGC 05525;;; +NGC3170;**;10:16:14.53;+46:36:44.5;UMa;;;;;;;;;;;;;;;;;;;;; +NGC3171;G;10:15:36.82;-20:38:50.6;Hya;1.87;1.25;173;13.85;;10.92;10.22;10.02;24.14;E-S0;;;;;;;;2MASX J10153684-2038502,ESO 567-031,ESO-LV 567-0310,MCG -03-26-032,PGC 029950;;; +NGC3172;G;11:47:14.00;+89:05:35.0;UMi;1.14;1.00;85;14.90;;10.39;9.64;9.32;23.90;S0;;;;;;;;2MASX J11471192+8905357,MCG +15-01-011,PGC 036847;;; +NGC3173;G;10:14:34.87;-27:41:34.2;Ant;1.90;1.71;19;13.56;;11.01;10.32;10.09;23.69;Sc;;;;;;;;2MASX J10143487-2741339,ESO 500-016,ESO-LV 500-0160,IRAS 10122-2726,MCG -04-24-022,PGC 029883;;Confused HIPASS source; +NGC3174;Dup;10:15:32.18;+74:13:13.0;Dra;;;;;;;;;;;;;;;3144;;;;;; +NGC3175;G;10:14:42.11;-28:52:19.4;Ant;5.25;1.95;55;12.14;;8.76;8.05;7.79;23.84;Sab;;;;;;;;2MASX J10144211-2852194,ESO 436-003,ESO-LV 436-0030,IRAS 10124-2837,MCG -05-24-028,PGC 029892,UGCA 207;;; +NGC3176;Other;10:15:17.54;-19:01:57.2;Hya;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3177;G;10:16:34.14;+21:07:23.0;Leo;1.44;1.10;140;12.80;;10.22;9.53;9.23;22.34;Sb;;;;;;;;2MASX J10163416+2107223,IRAS 10138+2122,MCG +04-24-023,PGC 030010,SDSS J101634.13+210722.9,SDSS J101634.14+210723.0,UGC 05544;;; +NGC3178;G;10:16:09.17;-15:47:28.6;Hya;1.47;0.93;71;13.00;;11.44;10.69;10.51;22.87;Sc;;;;;;;;2MASX J10160916-1547287,MCG -03-26-034,PGC 029980;;; +NGC3179;G;10:17:57.21;+41:06:51.5;UMa;1.86;0.41;48;14.20;;11.00;10.28;10.04;24.04;S0;;;;;;;;2MASX J10175720+4106510,MCG +07-21-036,PGC 030078,SDSS J101757.20+410651.4,SDSS J101757.21+410651.4,SDSS J101757.21+410651.5,UGC 05555;;; +NGC3180;HII;10:18:09.67;+41:26:42.1;UMa;;;;;;;;;;;;;;;;;;;;;SIMBAD considers this a duplicate of NGC3184 +NGC3181;HII;10:18:11.51;+41:24:45.7;UMa;2.84;0.83;123;15.79;;;;;;;;;;;;;;;;Includes at least three HII regions: NGC 3184:[HK83] 122, 123, and 125.;Dimensions and B-Mag taken from LEDA +NGC3182;G;10:19:33.02;+58:12:20.6;UMa;1.92;1.59;145;13.00;;10.38;9.63;9.47;23.15;S0-a;;;;;;;;2MASX J10193301+5812209,MCG +10-15-062,PGC 030176,SDSS J101933.02+581220.6,SDSS J101933.03+581220.6,UGC 05568;;; +NGC3183;G;10:21:49.00;+74:10:36.7;Dra;2.22;1.38;160;12.68;;10.25;9.51;9.24;22.78;SBbc;;;;;3218;;;2MASX J10214899+7410368,IRAS 10176+7425,MCG +12-10-028,PGC 030323,TYC 4390-322-1,UGC 05582;;HOLM 177B is a star.; +NGC3184;G;10:18:16.86;+41:25:26.6;UMa;7.40;7.18;117;10.40;;8.08;7.43;7.23;23.47;SABc;;;;;;;;2MASX J10181698+4125277,IRAS 10152+4140,MCG +07-21-037,PGC 030087,SDSS J101816.90+412527.5,UGC 05557;;IRAS source is extended over optical size of galaxy.; +NGC3185;G;10:17:38.57;+21:41:17.7;Leo;2.15;1.23;131;12.99;12.17;10.07;9.42;9.15;23.07;Sa;;;;;;;;2MASX J10173858+2141178,IRAS 10148+2156,MCG +04-24-024,PGC 030059,SDSS J101738.56+214117.6,SDSS J101738.57+214117.7,UGC 05554;;; +NGC3186;G;10:15:53.39;+06:57:49.5;Leo;1.08;1.08;110;15.00;;11.65;11.40;10.82;24.08;E;;;;;;;;2MASX J10155337+0657495,MCG +01-26-028,PGC 029963,SDSS J101553.38+065749.5;;NGC identification is not certain.; +NGC3187;G;10:17:47.86;+21:52:24.0;Leo;2.24;0.74;108;13.91;13.44;12.15;11.45;10.85;23.35;SBc;;;;;;;;2MASX J10174784+2152238,IRAS 10150+2207,MCG +04-24-025,PGC 030068,SDSS J101747.86+215224.0,UGC 05556;;; +NGC3188;G;10:19:42.81;+57:25:24.5;UMa;0.84;0.63;180;14.70;;12.00;11.51;11.25;23.24;Sab;;;;;;;;2MASX J10194277+5725249,MCG +10-15-065,PGC 030183,SDSS J101942.79+572524.7,SDSS J101942.80+572524.5,SDSS J101942.81+572524.4,SDSS J101942.81+572524.5,UGC 05569;;; +NGC3188A;G;10:19:38.28;+57:25:06.9;UMa;0.44;0.21;77;17.00;;14.84;13.65;13.64;23.34;SBc;;;;;;;;2MASX J10193831+5725069,MCG +10-15-064,PGC 030179,SDSS J101938.27+572506.9,SDSS J101938.28+572506.8,SDSS J101938.28+572506.9,UGC 05569 NOTES01;;; +NGC3189;G;10:18:05.63;+21:49:56.3;Leo;3.64;1.22;124;12.12;11.15;8.50;7.77;7.46;22.97;Sa;;;;;3190;;;2MASX J10180564+2149549,IRAS 10153+2204,MCG +04-24-026,PGC 030083,SDSS J101805.65+214956.0,UGC 05559;;NGC 3189 is the southwestern side of NGC 3190.; +NGC3190;Dup;10:18:05.63;+21:49:56.3;Leo;;;;;;;;;;;;;;;3189;;;;;; +NGC3191;G;10:19:05.13;+46:27:14.8;UMa;0.71;0.52;4;13.90;;12.08;11.39;11.15;21.94;SBbc;;;;;3192;;;2MASX J10190493+4627121,IRAS 10160+4642,MCG +08-19-018,PGC 030136,SDSS J101905.12+462714.7,SDSS J101905.13+462714.7,UGC 05565;;; +NGC3192;Dup;10:19:05.13;+46:27:14.8;UMa;;;;;;;;;;;;;;;3191;;;;;; +NGC3193;G;10:18:24.90;+21:53:38.3;Leo;2.36;2.16;20;11.83;10.88;8.86;8.19;7.98;22.73;E;;;;;;;;2MASX J10182488+2153383,MCG +04-24-027,PGC 030099,UGC 05562;;; +NGC3194;Dup;10:17:39.85;+74:20:50.6;Dra;;;;;;;;;;;;;;;3155;;;;;; +NGC3195;PN;10:09:20.98;-80:51:30.9;Cha;0.70;;;11.50;11.60;;;;;;;16.10;15.30;;;;;C 109,ESO 019-002,IRAS 10099-8036,PN G296.6-20.0;;; +NGC3196;G;10:18:49.03;+27:40:08.2;Leo;0.46;0.26;121;15.70;;12.93;12.24;11.80;23.30;E;;;;;;;;2MASX J10184905+2740077,PGC 030121,SDSS J101849.02+274008.2,SDSS J101849.03+274008.2;;; +NGC3197;G;10:14:27.67;+77:49:12.9;Dra;1.11;0.80;161;14.50;;11.45;10.79;10.38;23.14;Sbc;;;;;;;;2MASX J10142763+7749129,MCG +13-08-009,PGC 029870,UGC 05500;;; +NGC3198;G;10:19:54.95;+45:32:58.6;UMa;6.46;1.84;30;10.87;10.33;8.73;8.06;7.78;22.68;Sc;;;;;;;;2MASX J10195499+4532588,IRAS 10168+4548,MCG +08-19-020,PGC 030197,SDSS J101954.92+453259.0,SDSS J101954.92+453259.1,UGC 05572;;; +NGC3199;Neb;10:17:24.43;-57:55:20.0;Car;20.00;15.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC3200;G;10:18:36.55;-17:58:57.1;Hya;4.07;1.14;168;12.92;;9.92;9.06;8.82;23.48;Sc;;;;;;;;2MASX J10183654-1758571,ESO 567-045,ESO-LV 567-0450,MCG -03-26-037,PGC 030108,UGCA 210;;; +NGC3201;GCl;10:17:36.76;-46:24:40.4;Vel;9.60;;;9.18;8.24;;;;;;;;;;;;;C 079,MWSC 1788;;; +NGC3202;G;10:20:31.74;+43:01:17.8;UMa;1.27;0.81;25;14.20;;11.21;10.58;10.28;23.17;Sa;;;;;;;;2MASX J10203177+4301179,MCG +07-21-041,PGC 030236,SDSS J102031.73+430117.7,SDSS J102031.74+430117.7,SDSS J102031.74+430117.8,UGC 05581;;; +NGC3203;G;10:19:33.83;-26:41:56.0;Hya;3.16;0.64;60;13.22;;9.80;9.12;8.86;24.20;S0-a;;;;;;;;2MASX J10193384-2641562,ESO 500-024,ESO-LV 500-0240,MCG -04-25-002,PGC 030177;;; +NGC3204;G;10:20:11.08;+27:49:01.4;Leo;1.25;0.88;106;14.80;;11.78;11.16;10.87;23.54;Sb;;;;;;;;2MASX J10201103+2749011,MCG +05-25-001,PGC 030214,SDSS J102011.08+274901.3,UGC 05580;;; +NGC3205;G;10:20:49.97;+42:58:19.4;UMa;1.31;1.11;158;14.40;;11.20;10.47;10.23;23.51;Sa;;;;;;;;2MASX J10204991+4258199,MCG +07-21-042,PGC 030254,SDSS J102049.96+425819.3,SDSS J102049.96+425819.4,SDSS J102049.97+425819.3,SDSS J102049.97+425819.4,UGC 05585;;; +NGC3206;G;10:21:47.59;+56:55:49.5;UMa;2.30;1.17;7;12.70;;11.88;11.38;11.15;23.39;SBc;;;;;;;;2MASX J10214758+5655494,IRAS 10184+5710,MCG +10-15-069,PGC 030322,SDSS J102147.59+565549.5,UGC 05589;;; +NGC3207;G;10:21:00.55;+42:59:07.1;UMa;1.24;0.83;87;14.30;;11.56;10.85;10.54;23.58;S0;;;;;;;;2MASX J10210058+4259068,MCG +07-21-043,PGC 030267,SDSS J102100.54+425907.0,SDSS J102100.54+425907.1,SDSS J102100.55+425907.1,UGC 05587;;; +NGC3208;G;10:19:41.29;-25:48:53.1;Hya;1.78;1.55;55;13.73;;10.81;10.16;9.41;23.44;Sc;;;;;;;;2MASX J10194128-2548532,ESO 500-025,ESO-LV 500-0250,IRAS 10173-2533,MCG -04-25-003,PGC 030180;;; +NGC3209;G;10:20:38.42;+25:30:17.9;Leo;1.57;1.21;80;13.90;;10.32;9.62;9.34;23.75;E;;;;;;;;2MASX J10203840+2530177,MCG +04-25-002,PGC 030242,SDSS J102038.42+253018.2,UGC 05584;;; +NGC3210;**;10:27:59.20;+79:49:57.1;Dra;;;;;;;;;;;;;;;;;;;;; +NGC3211;PN;10:17:50.51;-62:40:12.2;Car;0.27;;;11.80;10.70;12.54;12.30;11.60;;;;18.00;;;;;HD 89516;2MASX J10175054-6240121,ESO 127-015,IRAS 10162-6225,PN G286.3-04.8;;; +NGC3212;G;10:28:16.46;+79:49:24.2;Dra;0.83;0.75;88;14.30;;11.92;11.40;11.16;22.72;SBb;;;;;;;;2MASX J10281670+7949240,MCG +13-08-021,PGC 030813,UGC 05643;;Called 'NGC 3210' in VV and Arp.; +NGC3213;G;10:21:17.35;+19:39:06.4;Leo;1.05;0.83;128;14.30;;11.17;10.54;10.42;22.85;Sbc;;;;;;;;2MASX J10211731+1939060,MCG +03-27-004,PGC 030283,SDSS J102117.34+193906.3,SDSS J102117.35+193906.3,SDSS J102117.35+193906.4,UGC 05590;;; +NGC3214;G;10:23:08.79;+57:02:20.7;UMa;1.08;0.45;35;14.00;;11.88;11.15;10.83;23.75;S0-a;;;;;;;;2MASX J10230877+5702204,MCG +10-15-071,PGC 030419,SDSS J102308.78+570220.9,SDSS J102308.79+570220.7,SDSS J102308.79+570220.8;;; +NGC3215;G;10:28:40.58;+79:48:47.1;Dra;0.95;0.52;40;14.00;;11.37;10.70;10.33;22.32;SBbc;;;;;;;;2MASX J10284047+7948470,MCG +13-08-022,PGC 030840,UGC 05659;;Called 'NGC 3212' in VV and Arp.; +NGC3216;G;10:21:41.23;+23:55:23.0;Leo;1.71;1.07;176;15.10;;10.88;10.27;9.95;24.47;E;;;;;;;;2MASX J10214125+2355224,MCG +04-25-007,PGC 030312,SDSS J102141.22+235523.0,SDSS J102141.23+235523.0,UGC 05593;;; +NGC3217;G;10:23:32.62;+10:57:35.0;Leo;0.53;0.40;22;15.20;;12.93;12.20;11.97;22.42;Sc;;;;;;0606;;2MASX J10233259+1057353,IRAS 10208+1112,MCG +02-27-006,PGC 030448,SDSS J102332.60+105734.9,SDSS J102332.61+105734.9,SDSS J102332.62+105735.0;;; +NGC3218;Dup;10:21:49.00;+74:10:36.7;Dra;;;;;;;;;;;;;;;3183;;;;;; +NGC3219;G;10:22:37.44;+38:34:45.0;LMi;1.08;0.63;70;15.40;;11.88;11.34;11.01;24.13;E-S0;;;;;;;;2MASX J10223745+3834447,MCG +07-21-051,PGC 030383,SDSS J102237.40+383444.9,SDSS J102237.41+383444.9,SDSS J102237.41+383445.0;;; +NGC3220;G;10:23:44.66;+57:01:36.7;UMa;1.18;0.48;96;13.70;;12.17;11.79;11.60;22.57;Sb;;;;;;0604;;2MASX J10234426+5701375,MCG +10-15-073,PGC 030462,SDSS J102344.65+570136.8,SDSS J102344.66+570136.7,UGC 05614;;; +NGC3221;G;10:22:19.98;+21:34:10.5;Leo;1.70;0.76;166;14.30;;10.17;9.26;8.87;23.26;Sc;;;;;;;;2MASX J10221998+2134105,IRAS 10195+2149,MCG +04-25-013,PGC 030358,SDSS J102219.83+213406.9,UGC 05601;;The SDSS position is 4.1 arcsec southwest of the nucleus.; +NGC3222;G;10:22:34.51;+19:53:13.3;Leo;1.12;1.01;25;14.50;;;;10.98;22.72;S0;;;;;;;;MCG +03-27-011,PGC 030377,SDSS J102234.48+195314.2,UGC 05610;;; +NGC3223;G;10:21:35.08;-34:16:00.5;Ant;4.28;2.79;132;11.82;10.82;8.55;7.86;7.58;23.36;Sb;;;;;;2571;;2MASX J10213507-3416004,ESO 375-012,ESO-LV 375-0120,IRAS 10193-3400,MCG -06-23-023,PGC 030308;;; +NGC3224;G;10:21:41.19;-34:41:48.4;Ant;1.72;1.41;120;13.15;;9.78;9.08;8.84;23.23;E;;;;;;;;2MASX J10214118-3441484,ESO 375-013,ESO-LV 375-0130,MCG -06-23-024,PGC 030314;;; +NGC3225;G;10:25:09.90;+58:09:00.0;UMa;1.65;0.75;154;13.30;;11.80;11.42;11.15;22.98;Sc;;;;;;;;2MASX J10250992+5809000,IRAS 10218+5824,MCG +10-15-077,PGC 030569,SDSS J102509.90+580900.0,UGC 05631;;; +NGC3226;G;10:23:27.01;+19:53:54.7;Leo;3.13;2.26;13;14.32;13.33;9.41;8.89;8.57;23.69;E;;;;;;;;2MASX J10232701+1953543,MCG +03-27-015,PGC 030440,SDSS J102326.99+195354.6,SDSS J102326.99+195354.7,UGC 05617;;; +NGC3227;G;10:23:30.58;+19:51:54.2;Leo;3.98;1.86;156;12.61;11.79;11.27;10.53;9.92;22.88;SABa;;;;;;;;2MASX J10233060+1951538,IRAS 10207+2007,MCG +03-27-016,PGC 030445,SDSS J102330.57+195154.3,UGC 05620;;; +NGC3228;OCl;10:21:22.24;-51:43:21.3;Vel;6.60;;;6.15;6.00;;;;;;;;;;;;;2MASX J10212483-5143085,MWSC 1794;;; +NGC3229;Other;10:23:24.36;+00:03:53.3;Sex;;;;;;;;;;;;;;;;;;SDSS J102324.36+000353.3;;Galactic triple star.; +NGC3230;G;10:23:43.96;+12:34:04.0;Leo;2.02;0.64;114;14.90;;9.83;9.11;8.88;24.72;S0;;;;;;;;2MASX J10234394+1234043,MCG +02-27-007,PGC 030463,SDSS J102343.96+123403.9,UGC 05624;;; +NGC3231;OCl;10:26:57.85;+66:48:54.6;UMa;;;;;;;;;;;;;;;;;;;;; +NGC3232;G;10:24:24.23;+28:01:34.1;LMi;0.85;0.69;57;15.40;;;;;23.70;SABa;;;;;;;;MCG +05-25-004,PGC 030508,SDSS J102424.22+280134.0,SDSS J102424.22+280134.1,SDSS J102424.23+280134.1;;This is a superposed (merging?) pair of galaxies.; +NGC3233;G;10:21:57.46;-22:16:03.9;Hya;1.52;0.64;141;13.53;;10.45;9.71;9.42;23.07;S0-a;;;;;;;;2MASX J10215747-2216038,ESO 568-001,ESO-LV 568-0010,IRAS 10195-2200,MCG -04-25-004,PGC 030336;;; +NGC3234;G;10:24:59.31;+28:01:26.1;LMi;1.34;0.96;85;14.70;;10.88;10.17;10.01;23.82;E-S0;;;;;3235;;;2MASX J10245932+2801259,MCG +05-25-007,PGC 030553,SDSS J102459.31+280126.0,UGC 05635;;; +NGC3235;Dup;10:24:59.31;+28:01:26.1;LMi;;;;;;;;;;;;;;;3234;;;;;; +NGC3236;G;10:26:48.51;+61:16:22.5;UMa;0.95;0.67;52;15.30;;12.23;11.53;11.41;23.87;E;;;;;;;;2MASX J10264855+6116226,MCG +10-15-081,PGC 030711,SDSS J102648.50+611622.9,SDSS J102648.51+611622.4,SDSS J102648.51+611622.5,SDSS J102648.51+611622.6;;; +NGC3237;G;10:25:43.30;+39:38:47.0;UMa;1.07;1.04;37;14.20;;;;;22.98;S0;;;;;;;;MCG +07-22-003,PGC 030610,SDSS J102543.29+393846.9,SDSS J102543.30+393846.9,UGC 05640;;; +NGC3238;G;10:26:42.99;+57:13:34.8;UMa;1.11;0.91;151;13.90;;10.95;10.23;9.95;23.03;S0;;;;;;;;2MASX J10264304+5713353,MCG +10-15-080,PGC 030686,SDSS J102642.97+571335.0,SDSS J102642.98+571334.8,SDSS J102642.99+571334.8,UGC 05649;;; +NGC3239;G;10:25:04.89;+17:09:48.9;Leo;3.61;2.71;80;13.50;;;;;22.95;IB;;;;;;;;2MASX J10250486+1709492,IRAS 10224+1724,MCG +03-27-025,PGC 030560,SDSS J102504.88+170949.4,UGC 05637;;; +NGC3240;G;10:24:30.63;-21:47:27.7;Hya;1.19;1.03;78;13.90;;11.41;10.72;10.59;22.90;Sc;;;;;;;;2MASX J10243063-2147275,ESO 568-003,ESO-LV 568-0030,IRAS 10221-2132,MCG -04-25-007,PGC 030515;;; +NGC3241;G;10:24:16.96;-32:28:57.4;Ant;2.29;1.55;122;12.93;;9.85;9.17;8.85;23.27;SABa;;;;;;;;2MASX J10241695-3228574,ESO 436-016,ESO-LV 436-0160,IRAS 10220-3213,MCG -05-25-002,PGC 030498;;; +NGC3242;PN;10:24:46.08;-18:38:32.0;Hya;0.42;;;8.60;7.70;12.10;12.46;11.75;;;;12.02;12.31;;;;BD -17 3140,HD 90255,SAO 155965;C 059,ESO 568-005,IRAS 10223-1823,PN G261.0+32.0;Jupiter's Ghost Nebula;; +NGC3243;G;10:26:21.47;-02:37:19.9;Sex;1.73;1.19;120;14.00;;10.78;10.15;9.92;24.30;S0;;;;;;;;2MASX J10262146-0237197,MCG +00-27-012,PGC 030655,SDSS J102621.46-023719.8,UGC 05652;;; +NGC3244;G;10:25:28.84;-39:49:39.2;Ant;2.18;1.46;170;13.09;12.28;10.58;9.86;9.61;23.02;Sc;;;;;;;;2MASX J10252885-3949392,ESO 317-024,ESO-LV 317-0240,IRAS 10232-3934,MCG -07-22-005,PGC 030594;;; +NGC3245;G;10:27:18.39;+28:30:26.8;LMi;3.61;2.30;176;11.60;;8.79;8.10;7.86;23.17;S0;;;;;;;;2MASX J10271836+2830267,IRAS 10245+2845,MCG +05-25-013,PGC 030744,SDSS J102718.40+283026.6,UGC 05663;;; +NGC3245A;G;10:27:01.13;+28:38:21.6;LMi;2.32;0.30;148;15.40;;12.59;11.72;11.83;24.43;SBb;;;;;;;;2MASX J10270114+2838218,MCG +05-25-012,PGC 030714,SDSS J102701.12+283821.5,SDSS J102701.13+283821.6,UGC 05662;;; +NGC3246;G;10:26:41.81;+03:51:42.9;Sex;1.94;0.95;98;13.80;;11.64;10.93;10.73;23.43;Sd;;;;;;;;2MASX J10264176+0351435,IRAS 10240+0407,MCG +01-27-009,PGC 030684,SDSS J102641.71+035141.8,SDSS J102641.80+035142.9,SDSS J102641.81+035142.9,UGC 05661;;; +NGC3247;HII;10:24:14.00;-57:45:48.0;Car;5.00;5.00;;7.99;7.60;;;;;;;;;;;;;;;Probably associated with the Galactic open cluster ESO 127-SC 018.;Dimensions taken from LEDA +NGC3248;G;10:27:45.44;+22:50:49.9;Leo;1.70;0.94;135;13.90;;10.41;9.79;9.53;23.77;S0;;;;;;;;2MASX J10274542+2250498,MCG +04-25-020,PGC 030776,SDSS J102745.44+225049.8,UGC 05669;;; +NGC3249;G;10:26:22.21;-34:57:49.3;Ant;1.57;1.40;126;13.86;;10.91;10.25;10.03;23.44;Sc;;;;;;;;2MASX J10262222-3457493,ESO 375-024,ESO-LV 375-0240,IRAS 10240-3442,MCG -06-23-028,PGC 030657;;; +NGC3250;G;10:26:32.28;-39:56:38.2;Ant;2.96;2.20;140;12.26;11.03;8.68;7.96;7.71;23.38;E;;;;;;;;2MASX J10263227-3956380,ESO 317-026,ESO-LV 317-0260,MCG -07-22-007,PGC 030671;;; +NGC3250A;G;10:27:53.73;-40:04:52.8;Ant;1.62;0.32;88;15.67;;11.65;10.85;10.39;24.28;Sb;;;;;;;;2MASX J10275371-4004530,ESO 317-030,ESO-LV 317-0300,IRAS 10257-3949,PGC 030790;;; +NGC3250B;G;10:27:44.77;-40:26:06.1;Vel;2.77;0.80;6;13.83;13.33;10.26;9.48;9.20;24.12;SBa;;;;;;;;2MASX J10274478-4026060,ESO 317-029,ESO-LV 317-0290,IRAS 10255-4010,MCG -07-22-009,PGC 030775;;; +NGC3250C;G;10:27:42.47;-40:00:09.3;Ant;1.91;0.70;58;14.28;14.23;10.64;9.88;9.58;23.77;SABa;;;;;;;;2MASX J10274247-4000090,ESO 317-028,ESO-LV 317-0280,IRAS 10255-3944,MCG -07-22-008,PGC 030774;;; +NGC3250D;G;10:27:57.94;-39:48:53.2;Ant;1.89;0.33;26;14.32;;11.04;10.36;10.07;24.36;S0;;;;;;;;2MASX J10275793-3948531,ESO 317-031,ESO-LV 317-0310,MCG -07-22-011,PGC 030792;;; +NGC3250E;G;10:29:00.70;-40:04:58.1;Ant;1.82;1.45;133;13.19;;11.09;10.44;10.23;23.15;Sc;;;;;;;;2MASX J10290070-4004583,ESO 317-034,ESO-LV 317-0340,IRAS 10268-3949,MCG -07-22-013,PGC 030865;;; +NGC3251;G;10:29:16.84;+26:05:57.3;Leo;2.06;0.50;55;14.20;;10.88;10.09;9.76;23.34;SBbc;;;;;;2579;;2MASX J10291680+2605567,IRAS 10264+2621,MCG +04-25-023,PGC 030892,SDSS J102916.83+260557.2,SDSS J102916.84+260557.3,UGC 05684;;; +NGC3252;G;10:34:23.14;+73:45:53.9;Dra;1.87;0.66;36;14.20;;11.18;10.49;10.26;23.30;SBcd;;;;;;;;2MASX J10342310+7345539,IRAS 10303+7401,MCG +12-10-049,PGC 031278,UGC 05732;;NED follows RC2 for NGC identification. See also UGC 05689.; +NGC3253;G;10:28:27.32;+12:42:14.6;Leo;1.15;1.07;150;14.40;;11.75;11.05;10.80;23.30;Sbc;;;;;;;;2MASX J10282730+1242144,IRAS 10257+1257,MCG +02-27-021,PGC 030829,SDSS J102827.32+124214.5,UGC 05674;;; +NGC3254;G;10:29:19.94;+29:29:30.6;LMi;2.34;1.12;50;12.29;11.60;9.75;9.10;8.80;22.31;Sbc;;;;;;;;2MASX J10291992+2929291,MCG +05-25-018,PGC 030895,SDSS J102919.94+292930.5,UGC 05685;;; +NGC3255;OCl;10:26:31.36;-60:40:30.7;Car;4.80;;;11.54;11.00;;;;;;;;;;;;;MWSC 1804;;; +NGC3256;G;10:27:51.27;-43:54:13.5;Vel;3.29;2.26;83;11.83;11.33;;;;23.12;Sbc;;;;;;;;2MASX J10275128-4354135,ESO 263-038,ESO-LV 263-0380,IRAS 10257-4338,MCG -07-22-010,PGC 030785;;Confused HIPASS source; +NGC3256A;G;10:25:51.04;-43:44:53.1;Vel;1.33;0.65;85;15.05;;13.44;12.71;12.90;23.78;SBm;;;;;;;;2MASX J10255227-4344525,ESO 263-034,ESO-LV 263-0340,PGC 030626;;; +NGC3256B;G;10:29:01.07;-44:24:10.4;Vel;2.10;0.61;135;13.78;;10.58;9.86;9.54;23.21;SBbc;;;;;;;;2MASX J10290107-4424104,ESO 263-039,ESO-LV 263-0390,IRAS 10268-4408,MCG -07-22-014,PGC 030867;;; +NGC3256C;G;10:29:05.74;-43:50:57.4;Vel;1.91;1.30;90;13.31;;11.02;10.30;9.87;23.13;SBcd;;;;;;;;2MASX J10290573-4350574,ESO 263-041,ESO-LV 263-0410,IRAS 10269-4335,MCG -07-22-016,PGC 030873;;; +NGC3257;G;10:28:47.12;-35:39:29.1;Ant;1.08;0.87;170;14.05;12.54;11.14;10.44;10.14;23.01;E-S0;;;;;;;;2MASX J10284710-3539289,ESO 375-036,ESO-LV 375-0360,MCG -06-23-031,PGC 030849;;; +NGC3258;G;10:28:53.57;-35:36:19.9;Ant;2.94;2.34;67;12.50;11.72;9.25;8.56;8.31;23.70;E;;;;;;;;2MASX J10285358-3536199,ESO 375-037,ESO-LV 375-0370,MCG -06-23-032,PGC 030859;;; +NGC3258A;G;10:28:19.16;-35:27:16.1;Ant;1.22;0.44;170;14.56;13.64;11.32;10.61;10.42;23.24;S0-a;;;;;;;;2MASX J10281915-3527159,ESO 375-032,ESO-LV 375-0320,MCG -06-23-030,PGC 030815;;; +NGC3258B;G;10:30:25.30;-35:33:48.8;Ant;1.06;0.35;47;15.50;;12.39;11.81;11.40;24.00;S0-a;;;;;;;;2MASX J10302530-3533483,PGC 083128;;; +NGC3258C;G;10:31:24.15;-35:13:13.7;Ant;1.11;0.74;47;14.61;;11.46;10.87;10.79;23.27;Sa;;;;;;;;2MASX J10312413-3513136,ESO 375-053,ESO-LV 375-0530,MCG -06-23-048,PGC 031053;;; +NGC3258D;G;10:31:55.73;-35:24:35.3;Ant;1.98;0.84;9;13.99;;10.63;10.03;9.80;23.53;Sb;;;;;;;;2MASX J10315572-3524353,ESO 375-058,ESO-LV 375-0580,MCG -06-23-051,PGC 031094;;; +NGC3258E;G;10:32:24.91;-34:59:54.1;Ant;1.57;0.37;29;15.42;;12.20;11.45;11.05;24.08;Sb;;;;;;;;2MASX J10322490-3459538,ESO 375-060,ESO-LV 375-0600,MCG -06-23-051B,PGC 031131;;; +NGC3259;G;10:32:34.85;+65:02:27.9;UMa;1.72;0.90;16;17.55;16.89;11.11;10.43;10.22;22.60;SABb;;;;;;;;2MASX J10323481+6502277,IRAS 10291+6517,MCG +11-13-027,PGC 031145,SDSS J103234.85+650227.9,UGC 05717;;; +NGC3260;G;10:29:06.39;-35:35:42.7;Ant;1.41;1.22;9;13.72;14.39;10.31;9.62;9.42;23.35;E;;;;;;;;2MASX J10290637-3535429,ESO 375-040,ESO-LV 375-0400,MCG -06-23-033,PGC 030875;;; +NGC3261;G;10:29:01.46;-44:39:24.6;Vel;3.65;2.84;76;11.91;11.02;9.11;8.46;8.25;23.46;Sbc;;;;;;;;2MASX J10290147-4439244,ESO 263-040,ESO-LV 263-0400,IRAS 10268-4423,MCG -07-22-015,PGC 030868;;; +NGC3262;G;10:29:06.23;-44:09:34.8;Vel;1.17;0.91;109;14.24;13.76;10.96;10.34;10.00;23.22;S0;;;;;;;;2MASX J10290624-4409344,ESO 263-042,ESO-LV 263-0420,MCG -07-22-017,PGC 030876;;; +NGC3263;G;10:29:13.36;-44:07:22.5;Vel;7.83;1.84;99;11.46;;9.60;8.77;8.51;24.40;SBc;;;;;;;;2MASX J10291339-4407225,ESO 263-043,ESO-LV 263-0430,IRAS 10270-4351,MCG -07-22-018,PGC 030887;;ESO declination is incorrect, but ESO-LV declination is correct.; +NGC3264;G;10:32:19.70;+56:05:07.0;UMa;2.09;0.62;2;14.30;;;;;21.88;Sd;;;;;;;;IRAS 10291+5620,MCG +09-17-069,PGC 031125,UGC 05719;;; +NGC3265;G;10:31:06.77;+28:47:48.0;LMi;0.97;0.71;73;13.87;13.54;11.37;10.68;10.44;22.83;E;;;;;;;;2MASX J10310676+2847470,IRAS 10282+2903,MCG +05-25-019,PGC 031029,SDSS J103106.76+284747.9,SDSS J103106.77+284748.0,UGC 05705;;; +NGC3266;G;10:33:17.61;+64:44:57.8;UMa;1.39;1.21;107;13.50;;10.65;9.96;9.70;22.93;S0;;;;;;;;2MASX J10331762+6444578,MCG +11-13-030,PGC 031198,SDSS J103317.60+644457.6,UGC 05725;;; +NGC3267;G;10:29:48.59;-35:19:20.6;Ant;1.55;0.73;155;13.50;13.35;10.20;9.52;9.33;23.20;S0;;;;;;;;2MASX J10294856-3519207,ESO 375-042,ESO-LV 375-0420,MCG -06-23-036,PGC 030934;;; +NGC3268;G;10:30:00.66;-35:19:31.7;Ant;3.50;2.62;71;12.57;11.77;9.12;8.39;8.15;23.90;E;;;;;;;;2MASX J10300065-3519318,ESO 375-045,ESO-LV 375-0450,MCG -06-23-041,PGC 030949;;; +NGC3269;G;10:29:57.06;-35:13:27.8;Ant;2.51;1.02;9;13.24;13.51;9.96;9.39;9.06;23.87;S0-a;;;;;;;;2MASX J10295707-3513277,ESO 375-044,ESO-LV 375-0440,MCG -06-23-040,PGC 030945;;; +NGC3270;G;10:31:29.98;+24:52:10.0;Leo;2.34;0.62;12;14.10;;10.76;10.06;9.73;23.59;SABb;;;;;;;;2MASX J10312999+2452095,IRAS 10287+2507,MCG +04-25-029,PGC 031059,SDSS J103129.97+245209.9,SDSS J103129.98+245210.0,UGC 05711;;; +NGC3271;G;10:30:26.49;-35:21:34.2;Ant;3.01;1.67;109;12.72;11.73;9.12;8.44;8.15;23.92;S0;;;;;;2585;;2MASX J10302648-3521343,ESO 375-048,ESO-LV 375-0480,MCG -06-23-044,PGC 030988;;; +NGC3272;**;10:31:48.15;+28:28:07.6;LMi;;;;;;;;;;;;;;;;;;;;; +NGC3273;G;10:30:29.17;-35:36:38.3;Ant;1.91;0.88;96;13.50;12.93;9.91;9.18;8.93;23.64;S0;;;;;;;;2MASX J10302915-3536383,ESO 375-049,ESO-LV 375-0490,MCG -06-23-045,PGC 030992;;; +NGC3274;G;10:32:17.27;+27:40:07.6;Leo;1.63;0.81;93;13.30;;11.57;11.03;10.74;22.40;Scd;;;;;;;;2MASX J10321728+2740075,IRAS 10294+2755,MCG +05-25-020,PGC 031122,UGC 05721;;; +NGC3275;G;10:30:51.80;-36:44:13.1;Ant;2.81;2.05;121;12.54;;9.38;8.68;8.42;23.33;Sab;;;;;;;;2MASX J10305182-3644130,ESO 375-050,ESO-LV 375-0500,IRAS 10286-3628,MCG -06-23-046,PGC 031014;;; +NGC3276;G;10:31:09.20;-39:56:40.8;Ant;1.26;0.74;69;14.44;;11.20;10.51;10.21;23.62;S0;;;;;;;;2MASX J10310918-3956407,ESO 317-040,ESO-LV 317-0400,PGC 031031;;; +NGC3277;G;10:32:55.45;+28:30:42.2;LMi;2.11;1.59;29;12.50;11.68;9.83;9.16;8.93;22.66;Sab;;;;;;;;2MASX J10325545+2830422,IRAS 10301+2846,MCG +05-25-022,PGC 031166,UGC 05731;;; +NGC3278;G;10:31:35.39;-39:57:16.7;Ant;1.35;1.04;60;13.02;;10.30;9.59;9.33;22.26;Sc;;;;;;;;2MASX J10313538-3957166,ESO 317-043,ESO-LV 317-0430,IRAS 10293-3941,MCG -07-22-021,PGC 031068;;; +NGC3279;G;10:34:42.80;+11:11:50.4;Leo;2.48;0.41;151;14.10;;10.55;9.75;9.42;23.18;Sc;;;;;;0622;;2MASX J10344279+1111500,IRAS 10320+1127,MCG +02-27-027,PGC 031302,SDSS J103442.79+111150.4,SDSS J103442.80+111150.4,UGC 05741;;HOLM 201B,C are stars.; +NGC3280;GTrpl;10:32:45.27;-12:38:10.5;Hya;1.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC3280A;G;10:32:46.38;-12:38:04.5;Hya;0.65;0.57;29;16.00;;;;;23.51;E-S0;;;;;;;;MCG -02-27-006,PGC 031158;;; +NGC3280B;G;10:32:43.81;-12:38:14.3;Hya;1.02;0.58;122;16.00;;11.29;10.76;10.29;23.86;S0;;;;;;0617;;2MASX J10324383-1238138,MCG -02-27-007,PGC 031153;;; +NGC3280C;G;10:32:45.55;-12:38:14.0;Hya;1.23;0.54;22;16.00;;;;;24.62;E-S0;;;;;;;;MCG -02-27-008,PGC 031156;;; +NGC3281;G;10:31:52.09;-34:51:13.3;Ant;3.10;1.27;140;12.62;14.02;9.31;8.62;8.31;23.34;Sab;;;;;;;;2MASX J10315208-3451133,ESO 375-055,ESO-LV 375-0550,IRAS 10295-3435,MCG -06-23-050,PGC 031090;;; +NGC3281A;G;10:31:58.28;-35:11:54.6;Ant;1.25;0.89;121;14.43;;;;;23.64;S0;;;;;;;;ESO 375-059,ESO-LV 375-0590,MCG -06-23-051A,PGC 031103;;; +NGC3281B;G;10:31:52.16;-35:12:17.5;Ant;1.31;0.64;65;15.00;;11.76;11.07;10.86;24.42;E-S0;;;;;;;;2MASX J10315219-3512173,MCG -06-23-049,PGC 083203;;; +NGC3281C;G;10:32:59.55;-34:53:10.4;Ant;1.13;0.41;159;14.30;;11.15;10.48;10.24;23.35;S0;;;;;;;;2MASX J10325955-3453104,ESO 375-063,ESO-LV 375-0630,MCG -06-23-053,PGC 031173;;; +NGC3281D;G;10:34:19.02;-34:24:12.3;Ant;2.06;0.39;159;14.67;;11.53;10.79;10.50;23.57;SBcd;;;;;;;;2MASX J10341900-3424123,ESO 375-068,ESO-LV 375-0680,MCG -06-23-055,PGC 031273;;; +NGC3282;G;10:32:21.92;-22:18:08.2;Hya;1.77;0.65;81;13.99;;10.58;9.90;9.65;23.98;S0;;;;;;;;2MASX J10322191-2218082,ESO 568-016,ESO-LV 568-0160,MCG -04-25-013,PGC 031129;;; +NGC3283;G;10:31:11.60;-46:15:04.6;Vel;2.86;2.07;166;12.70;;9.01;8.24;7.95;23.58;S0;;;;;;;;2MASX J10311160-4615043,ESO 263-048,ESO-LV 263-0480,IRAS 10290-4559,PGC 031035;;NGC position is +1m35s, +10' in error. ESO 264- ? 001 is for nominal pos.; +NGC3284;G;10:36:21.24;+58:37:12.6;UMa;1.36;0.83;80;14.50;13.67;11.45;10.74;10.43;23.81;E;;;;;3286;;;2MASX J10362128+5837124,MCG +10-15-112,PGC 031433,SDSS J103621.23+583712.6,SDSS J103621.24+583712.6,SDSS J103621.24+583712.7,SDSS J103621.24+583712.9;;; +NGC3285;G;10:33:35.84;-27:27:16.0;Hya;2.97;1.52;109;12.96;12.08;9.56;8.85;8.59;23.80;Sa;;;;;;;;2MASX J10333582-2727160,ESO 501-015,ESO-LV 501-0150,IRAS 10312-2711,MCG -04-25-019,PGC 031217;;; +NGC3285A;G;10:32:48.78;-27:31:20.8;Hya;1.21;0.87;174;14.52;;11.99;11.12;11.22;23.33;Sc;;;;;;;;2MASX J10324878-2731209,ESO 501-008,ESO-LV 501-0080,MCG -04-25-015,PGC 031161;;; +NGC3285B;G;10:34:36.88;-27:39:10.6;Hya;1.64;1.04;52;13.89;;11.64;10.71;10.28;23.27;Sb;;;;;;;;2MASX J10343687-2739108,ESO 501-018,ESO-LV 501-0180,IRAS 10322-2723,MCG -04-25-022,PGC 031293;;; +NGC3286;Dup;10:36:21.24;+58:37:12.6;UMa;;;;;;;;;;;;;;;3284;;;;;; +NGC3287;G;10:34:47.30;+21:38:53.8;Leo;1.78;0.85;18;12.90;;10.72;10.09;9.78;22.26;SBd;;;;;;;;2MASX J10344730+2138539,IRAS 10320+2154,MCG +04-25-032,PGC 031311,SDSS J103447.29+213853.7,SDSS J103447.30+213853.8,UGC 05742;;The 2MASS position is 9 arcsec northwest of the center of the bar.; +NGC3288;G;10:36:25.67;+58:33:22.3;UMa;0.89;0.70;8;14.79;13.99;11.87;11.08;10.90;23.33;SABb;;;;;;;;2MASX J10362571+5833224,MCG +10-15-114,PGC 031446,SDSS J103625.67+583322.2,SDSS J103625.67+583322.3,SDSS J103625.67+583322.6,UGC 05752;;; +NGC3289;G;10:34:07.43;-35:19:24.2;Ant;1.99;0.47;152;13.68;14.13;10.48;9.79;9.55;23.59;S0-a;;;;;;;;2MASX J10340744-3519243,ESO 375-065,ESO-LV 375-0650,MCG -06-23-054,PGC 031253;;; +NGC3290;G;10:35:17.43;-17:16:36.4;Hya;1.05;0.60;58;14.00;;12.38;11.77;11.47;22.79;Sbc;;;;;;;;2MASX J10351742-1716364,IRAS 10328-1701,MCG -03-27-020,PGC 031346;;; +NGC3291;*;10:36:06.48;+37:16:27.9;LMi;;;;;;;;;;;;;;;;;;SDSS J103606.48+371627.8;;; +NGC3292;G;10:35:34.43;-06:10:46.6;Sex;1.11;0.85;178;14.94;;11.59;10.95;10.77;23.76;S0;;;;;;;;2MASX J10353442-0610467,MCG -01-27-023,PGC 031370;;; +NGC3293;OCl;10:35:48.77;-58:13:28.1;Car;5.10;;;4.84;4.70;;;;;;;;;;;;;MWSC 1826;;; +NGC3294;G;10:36:16.25;+37:19:28.9;LMi;3.08;1.60;119;11.50;;9.37;8.62;8.38;22.78;SABc;;;;;;;;2MASX J10361626+3719285,IRAS 10333+3734,MCG +06-23-021,PGC 031428,SDSS J103616.24+371928.8,SDSS J103616.25+371928.9,UGC 05753;;The position in 1987A&AS...70..191S is 13 arcsec southeast of the nucleus.; +NGC3295;Dup;10:32:45.27;-12:38:10.5;Hya;;;;;;;;;;;;;;;3280;;;;;; +NGC3296;G;10:32:45.40;-12:43:02.7;Hya;1.11;0.99;56;14.61;;11.13;10.43;10.09;23.93;E;;;;;;0618;;2MASX J10324540-1243018,PGC 031155;;; +NGC3297;G;10:33:11.80;-12:40:18.6;Hya;0.87;0.51;161;15.38;;11.90;11.21;10.86;23.84;S0;;;;;;;;2MASX J10331172-1240186,PGC 031189;;; +NGC3298;G;10:37:12.28;+50:07:14.1;UMa;1.10;0.70;157;15.20;;11.51;10.72;10.39;23.86;E;;;;;;;;2MASX J10371222+5007143,MCG +08-19-043,PGC 031529,SDSS J103712.27+500714.0;;; +NGC3299;G;10:36:23.80;+12:42:26.6;Leo;1.79;1.32;3;13.60;;;;;23.62;SABd;;;;;;;;MCG +02-27-029,PGC 031442,UGC 05761;;; +NGC3300;G;10:36:38.44;+14:10:16.0;Leo;1.53;0.78;174;13.40;;10.29;9.61;9.39;22.99;S0;;;;;;;;2MASX J10363843+1410175,MCG +02-27-030,PGC 031472,SDSS J103638.44+141015.9,SDSS J103638.44+141016.0,UGC 05766;;; +NGC3301;G;10:36:56.04;+21:52:55.7;Leo;3.63;1.06;53;12.20;;9.39;8.75;8.52;23.66;S0-a;;;;;3760;;;2MASX J10365603+2152557,IRAS 10341+2208,MCG +04-25-035,PGC 031497,UGC 05767;;; +NGC3302;G;10:35:47.43;-32:21:30.6;Ant;1.93;1.28;115;13.51;;10.31;9.59;9.35;23.71;S0;;;;;;;;2MASX J10354741-3221307,ESO 437-007,ESO-LV 437-0070,MCG -05-25-020,PGC 031391;;; +NGC3303;GPair;10:36:59.80;+18:08:12.0;Leo;1.20;;;;;;;;;;;;;;;;;MCG +03-27-066,UGC 05773;;"Arp Atlas ""spike"" is minor planet (84447) 2002 TU240 (J.Kanipe, B.Marsden).";Diameter of the group inferred by the author. +NGC3303 NED01;G;10:36:59.44;+18:08:15.7;Leo;0.59;0.35;97;15.11;;;;;22.83;Sbc;;;;;;;;MCG +03-27-066 NED01,PGC 093104,SDSS J103659.43+180815.6,UGC 05773 NED01;;;B-Mag taken from LEDA +NGC3303 NED02;G;10:37:00.01;+18:08:09.2;Leo;1.10;0.74;157;14.50;;11.08;10.36;10.09;23.24;Sa;;;;;;;;2MASX J10370009+1808088,MCG +03-27-066 NED02,PGC 031508,SDSS J103700.09+180809.2,UGC 05773 NED02;;; +NGC3304;G;10:37:37.91;+37:27:20.3;LMi;1.55;0.53;160;14.40;;10.82;10.17;9.96;23.65;Sa;;;;;;;;2MASX J10373786+3727204,MCG +06-23-026,PGC 031572,SDSS J103737.91+372720.2,SDSS J103737.91+372720.3,UGC 05777;;; +NGC3305;G;10:36:11.75;-27:09:43.9;Hya;1.17;1.11;130;13.88;12.78;10.45;9.72;9.47;22.97;E;;;;;;;;2MASX J10361183-2709439,ESO 501-030,ESO-LV 501-0300,MCG -04-25-031,PGC 031421;;; +NGC3306;G;10:37:10.22;+12:39:08.9;Leo;1.04;0.45;136;13.70;;11.41;10.71;10.41;22.23;SBcd;;;;;;;;2MASX J10371021+1239087,IRAS 10345+1254,MCG +02-27-032,PGC 031528,UGC 05774;;; +NGC3307;G;10:36:17.17;-27:31:47.1;Hya;0.95;0.32;28;15.28;14.48;11.83;11.21;11.17;23.70;S0-a;;;;;;;;2MASX J10361718-2731469,ESO 501-031,ESO-LV 501-0310,MCG -04-25-029,PGC 031430;;; +NGC3308;G;10:36:22.40;-27:26:17.3;Hya;1.21;0.72;34;13.29;12.36;9.95;9.22;8.98;22.51;E-S0;;;;;;;;2MASX J10362237-2726172,ESO 501-034,ESO-LV 501-0340,MCG -04-25-032,PGC 031438;;; +NGC3309;G;10:36:35.70;-27:31:06.4;Hya;1.82;1.57;94;11.98;11.78;9.39;8.71;8.46;22.73;E;;;;;;;;2MASX J10363565-2731063,ESO 501-036,ESO-LV 501-0360,MCG -04-25-034,PGC 031466;;; +NGC3310;G;10:38:45.86;+53:30:12.2;UMa;1.80;1.73;10;12.45;12.15;9.46;8.88;8.62;21.27;SABb;;;;;;;;2MASX J10384585+5330118,IRAS 10356+5345,MCG +09-18-008,PGC 031650,SDSS J103845.85+533012.1,UGC 05786;;; +NGC3311;G;10:36:42.82;-27:31:42.0;Hya;2.63;2.33;57;11.93;10.93;8.97;8.38;8.10;23.65;E-S0;;;;;;;;2MASX J10364282-2731420,ESO 501-038,ESO-LV 501-0380,MCG -04-25-036,PGC 031478;;; +NGC3312;G;10:37:02.52;-27:33:54.2;Hya;3.31;1.07;172;12.63;13.96;9.55;8.91;8.67;23.35;Sb;;;;;;0629;;2MASX J10370254-2733541,ESO 501-043,ESO-LV 501-0430,IRAS 10346-2718,MCG -04-25-039,PGC 031513;;; +NGC3313;G;10:37:25.45;-25:19:10.0;Hya;2.96;2.02;110;12.38;;10.81;10.17;9.91;23.40;Sab;;;;;;;;2MASX J10372544-2519101,ESO 501-050,ESO-LV 501-0500,IRAS 10350-2503,MCG -04-25-044,PGC 031551,UGCA 213;;; +NGC3314;GPair;10:37:13.20;-27:41:04.0;Hya;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC3314A;G;10:37:12.85;-27:41:02.2;Hya;1.17;0.64;145;13.47;13.11;;;;22.84;SBab;;;;;;;;2MASX J10371285-2741021,PGC 031531;;;B-Mag taken from LEDA +NGC3314B;G;10:37:13.25;-27:41:05.9;Hya;0.64;0.46;46;13.30;;;;;21.01;Sc;;;;;;;;PGC 031532;;; +NGC3315;G;10:37:19.23;-27:11:32.3;Hya;1.20;1.04;119;13.86;;;;;23.50;E-S0;;;;;;;;ESO 501-048,ESO-LV 501-0480,MCG -04-25-042,PGC 031540;;; +NGC3316;G;10:37:37.32;-27:35:39.5;Hya;0.96;0.78;8;13.66;13.03;10.59;9.86;9.63;22.51;S0;;;;;;;;2MASX J10373729-2735384,ESO 501-054,ESO-LV 501-0540,MCG -04-25-046,PGC 031571;;; +NGC3317;Other;10:37:43.11;-27:31:10.6;Hya;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC3318;G;10:37:15.51;-41:37:39.2;Vel;2.52;1.36;82;12.71;11.97;9.96;9.28;8.97;22.61;Sbc;;;;;;;;2MASX J10371552-4137395,ESO 317-052,ESO-LV 317-0520,IRAS 10350-4122,MCG -07-22-026,PGC 031533;;Confused HIPASS source; +NGC3318A;G;10:35:32.10;-41:44:27.4;Vel;1.29;0.58;4;12.71;11.97;9.96;9.28;8.97;24.35;SABc;;;;;;;;PGC 031373;;; +NGC3318B;G;10:37:33.84;-41:27:55.4;Vel;1.54;1.12;113;13.92;;12.89;12.39;12.53;23.32;Sc;;;;;;;;2MASX J10373385-4127553,ESO 317-053,ESO-LV 317-0530,IRAS 10353-4112,MCG -07-22-027,PGC 031565;;; +NGC3319;G;10:39:09.46;+41:41:12.0;UMa;3.63;1.77;38;11.48;11.07;10.85;10.24;10.07;22.70;SBc;;;;;;;;2MASX J10390953+4141127,MCG +07-22-036,PGC 031671,SDSS J103909.45+414112.0,SDSS J103909.46+414112.0,UGC 05789;;; +NGC3320;G;10:39:36.53;+47:23:52.5;UMa;1.95;0.87;24;13.10;;11.00;10.37;10.10;22.46;Sc;;;;;;;;2MASX J10393652+4723526,IRAS 10366+4739,MCG +08-20-010,PGC 031708,SDSS J103936.52+472352.5,UGC 05794;;; +NGC3321;G;10:38:50.56;-11:38:55.9;Hya;2.30;1.11;29;13.30;;11.46;10.70;10.48;23.56;SABc;;;;;3322;;;2MASX J10385055-1138560,IRAS 10363-1123,MCG -02-27-010,PGC 031653,UGCA 214;;; +NGC3322;Dup;10:38:50.56;-11:38:55.9;Hya;;;;;;;;;;;;;;;3321;;;;;; +NGC3323;G;10:39:39.04;+25:19:21.9;LMi;0.95;0.52;171;14.30;;12.25;11.73;11.30;22.64;SBbc;;;;;;;;2MASX J10393902+2519214,IRAS 10368+2535,MCG +04-25-036,PGC 031712,SDSS J103939.03+251921.8,SDSS J103939.04+251921.9,UGC 05800;;; +NGC3324;Cl+N;10:37:16.21;-58:37:10.4;Car;4.80;;;6.91;6.70;;;;;;;;;;;;;MWSC 1830;;IC 2599 is a part of this emission nebula.; +NGC3325;G;10:39:20.45;-00:12:00.9;Sex;1.26;1.07;64;14.00;13.00;10.85;10.10;9.89;23.35;E;;;;;;;;2MASX J10392046-0012010,MCG +00-27-036,PGC 031689,SDSS J103920.45-001200.8,SDSS J103920.45-001200.9,UGC 05795;;; +NGC3326;G;10:39:31.86;+05:06:27.4;Sex;0.97;0.87;154;14.20;;11.74;11.04;10.69;22.88;Sa;;;;;;;;2MASX J10393183+0506266,MCG +01-27-025,PGC 031701,SDSS J103931.85+050627.3,SDSS J103931.86+050627.3,SDSS J103931.86+050627.4,UGC 05799;;; +NGC3327;G;10:39:57.94;+24:05:28.5;LMi;1.26;0.86;81;14.20;;10.98;10.29;10.00;23.08;Sb;;;;;;;;2MASX J10395794+2405284,MCG +04-25-038,PGC 031729,SDSS J103957.93+240528.5,UGC 05803;;HOLM 207B is a star.; +NGC3328;*;10:39:54.25;+09:18:00.4;Leo;;;;;;;;;;;;;;;;;;SDSS J103954.25+091800.3;;NGC identification is not certain.; +NGC3329;G;10:44:39.37;+76:48:34.0;Dra;1.91;1.14;139;12.90;;10.30;9.66;9.41;22.73;Sb;;;;;3397;;;2MASX J10443936+7648337,IRAS 10405+7704,MCG +13-08-033,PGC 032059,UGC 05837;;; +NGC3330;OCl;10:38:45.43;-54:07:50.6;Vel;5.10;;;7.55;7.40;;;;;;;;;;;;;MWSC 1835;;; +NGC3331;G;10:40:08.94;-23:49:13.3;Hya;1.19;0.95;9;13.94;;11.38;10.80;10.53;22.91;SBc;;;;;;;;2MASX J10400892-2349132,ESO 501-072,ESO-LV 501-0720,IRAS 10377-2333,MCG -04-25-056,PGC 031743;;; +NGC3332;G;10:40:28.37;+09:10:57.2;Leo;1.37;1.14;145;13.70;;10.36;9.72;9.37;23.05;E-S0;;;;;3342;;;2MASX J10402834+0910568,MCG +02-27-038,PGC 031768,SDSS J104028.37+091057.1,SDSS J104028.37+091057.2,UGC 05807;;; +NGC3333;G;10:39:49.83;-36:02:10.2;Ant;1.44;0.41;159;13.91;;10.81;10.03;9.76;22.41;Sbc;;;;;;;;2MASX J10394981-3602102,ESO 376-002,ESO-LV 376-0020,IRAS 10375-3546,MCG -06-24-001,PGC 031723;;; +NGC3334;G;10:41:31.20;+37:18:46.3;LMi;1.21;1.13;150;14.10;;10.77;10.00;9.73;23.00;S0;;;;;;;;2MASX J10413121+3718464,MCG +06-24-004,PGC 031845,SDSS J104131.19+371846.2,SDSS J104131.19+371846.3,UGC 05817;;; +NGC3335;G;10:39:34.06;-23:55:21.7;Hya;1.10;0.91;117;14.02;;10.83;10.13;9.88;23.02;S0-a;;;;;;;;2MASX J10393405-2355217,ESO 501-071,ESO-LV 501-0710,MCG -04-25-055,PGC 031706;;; +NGC3336;G;10:40:17.02;-27:46:37.5;Hya;1.97;1.74;117;13.01;12.19;10.54;9.66;9.41;23.04;SABc;;;;;;;;2MASX J10401702-2746377,ESO 437-036,ESO-LV 437-0360,IRAS 10379-2730,MCG -05-25-036,PGC 031754;;; +NGC3337;G;10:41:47.59;+04:59:18.2;Sex;1.16;0.57;51;15.30;;12.41;11.65;11.49;24.13;E-S0;;;;;;;;2MASX J10414755+0459181,PGC 031860,SDSS J104147.59+045918.1,SDSS J104147.59+045918.2;;; +NGC3338;G;10:42:07.54;+13:44:49.2;Leo;1.23;0.71;98;12.10;;9.11;8.40;8.13;20.18;Sc;;;;;;;;2MASX J10420754+1344489,IRAS 10394+1400,MCG +02-27-041,PGC 031883,SDSS J104207.53+134449.2,SDSS J104207.54+134449.2,UGC 05826;;; +NGC3339;*;10:42:10.06;-00:22:09.3;Sex;;;;15.40;;14.09;13.77;13.79;;;;;;;;;;2MASS J10421006-0022093,SDSS J104210.05-002209.3;;; +NGC3340;G;10:42:17.99;-00:22:36.7;Sex;1.29;0.94;166;13.90;13.24;11.16;10.55;10.33;22.81;SBbc;;;;;;;;2MASX J10421741-0022318,2MASX J10421797-0022365,MCG +00-27-042,PGC 031892,SDSS J104217.98-002236.6,SDSS J104217.99-002236.7,SDSS J104218.42-002249.0,UGC 05827;;NGC 3339 = Holmberg 210b is a star.; +NGC3341;G;10:42:31.47;+05:02:37.7;Sex;1.07;0.31;23;14.90;;11.74;11.11;10.78;23.73;;;;;;;;;2MASX J10423147+0502382,MCG +01-27-031,PGC 031915,UGC 05831;;; +NGC3342;Dup;10:40:28.37;+09:10:57.2;Leo;;;;;;;;;;;;;;;3332;;;;;; +NGC3343;G;10:46:10.45;+73:21:11.3;Dra;1.34;0.93;55;14.70;;10.57;9.83;9.57;24.11;E;;;;;;;;2MASX J10461032+7321108,MCG +12-10-073,PGC 032143,UGC 05863;;; +NGC3344;G;10:43:31.15;+24:55:20.0;LMi;6.70;6.37;150;10.54;9.86;8.20;7.65;7.44;23.33;Sbc;;;;;;;;2MASX J10433114+2455199,IRAS 10407+2511,MCG +04-25-046,PGC 031968,UGC 05840;;; +NGC3345;**;10:43:32.02;+11:59:07.0;Leo;;;;;;;;;;;;;;;;;;;;Two Galactic stars.; +NGC3346;G;10:43:38.91;+14:52:18.7;Leo;2.64;2.20;119;12.80;;10.44;9.83;9.59;23.31;Sc;;;;;;;;2MASX J10433888+1452191,IRAS 10410+1507,MCG +03-28-001,PGC 031982,SDSS J104338.90+145218.6,SDSS J104338.91+145218.7,UGC 05842;;; +NGC3347;G;10:42:46.55;-36:21:09.6;Ant;4.05;1.14;177;12.18;11.35;9.27;8.65;8.46;22.99;SBb;;;;;;;;2MASX J10424650-3621090,ESO 376-013,ESO-LV 376-0130,IRAS 10404-3604,MCG -06-24-007,PGC 031926;;A 12th mag star is superposed just northwest of the nucleus (B. Skiff).; +NGC3347A;G;10:40:20.61;-36:24:40.0;Ant;2.21;0.84;179;13.47;;10.69;9.99;9.68;23.11;SBc;;;;;;;;2MASX J10402061-3624399,ESO 376-004,ESO-LV 376-0040,IRAS 10380-3609,MCG -06-24-002,PGC 031761;;; +NGC3347B;G;10:41:59.82;-36:56:07.2;Ant;2.99;0.57;91;13.71;;;;;23.48;SBcd;;;;;;;;2MASX J10415815-3656077,ESO 376-010,ESO-LV 376-0100,MCG -06-24-005,PGC 031875;;; +NGC3347C;G;10:40:53.69;-36:17:16.5;Ant;1.35;0.94;25;14.84;;;;;23.93;Scd;;;;;;;;ESO 376-005,ESO-LV 376-0050,MCG -06-24-003,PGC 031797;;; +NGC3348;G;10:47:10.00;+72:50:22.8;UMa;2.13;2.13;65;12.00;;8.93;8.24;7.97;22.46;E;;;;;;;;2MASX J10470999+7250228,MCG +12-10-077,PGC 032216,UGC 05875;;; +NGC3349;G;10:43:50.56;+06:45:46.7;Leo;0.70;0.64;70;15.20;;12.67;12.10;11.84;22.94;Sbc;;;;;;;;2MASX J10435053+0645466,MCG +01-28-002,PGC 031989,SDSS J104350.55+064546.6,SDSS J104350.56+064546.6,SDSS J104350.56+064546.7;;; +NGC3350;G;10:44:22.97;+30:43:29.5;LMi;0.65;0.60;80;15.40;;12.39;11.66;11.54;23.12;S0-a;;;;;;;;2MASX J10442298+3043289,PGC 032035,SDSS J104422.97+304329.4,SDSS J104422.97+304329.5,SDSS J104422.98+304329.5;;; +NGC3351;G;10:43:57.70;+11:42:13.7;Leo;7.23;4.45;11;10.51;9.73;7.57;6.95;6.67;23.26;Sb;;;;095;;;;2MASX J10435773+1142129,IRAS 10413+1158,MCG +02-28-001,PGC 032007,SDSS J104357.69+114213.6,SDSS J104357.70+114213.7,UGC 05850;;; +NGC3352;G;10:44:14.93;+22:22:16.3;Leo;1.43;0.95;179;14.10;;10.53;9.85;9.58;23.05;S0;;;;;;;;2MASX J10441491+2222154,MCG +04-25-048,PGC 032025,SDSS J104414.93+222216.2,UGC 05851;;The 2MASS position is 7 arcsec east of the nucleus.; +NGC3353;G;10:45:22.41;+55:57:37.4;UMa;1.36;0.98;76;13.25;12.79;11.38;10.71;10.61;22.37;SABb;;;;;;;;2MASX J10452239+5557373,IRAS 10422+5613,MCG +09-18-022,PGC 032103,SDSS J104522.39+555737.4,SDSS J104522.41+555737.3,SDSS J104522.41+555737.4,SDSS J104522.41+555737.6,UGC 05860;;; +NGC3354;G;10:43:02.94;-36:21:44.6;Ant;1.02;0.82;169;13.82;13.18;11.63;11.01;10.70;22.35;Sc;;;;;;;;2MASX J10430294-3621445,ESO 376-014,ESO-LV 376-0140,IRAS 10407-3606,MCG -06-24-008,PGC 031941;;; +NGC3355;G;10:41:25.99;-23:23:03.3;Hya;1.25;0.93;51;14.23;13.54;;;;23.18;SABm;;;;;;;;ESO 501-079,ESO-LV 501-0790,MCG -04-25-058,PGC 031840,UGCA 215;;"Identification as NGC 3355 is very uncertain; N3355 may be ESO 501- G 080."; +NGC3356;G;10:44:12.23;+06:45:31.6;Leo;1.69;0.82;98;13.30;;11.39;10.72;10.37;23.11;Sbc;;;;;;;;2MASX J10441223+0645314,MCG +01-28-004,PGC 032021,SDSS J104412.21+064531.7,UGC 05852;;; +NGC3357;G;10:44:20.74;+14:05:04.1;Leo;1.03;0.83;88;14.30;;10.76;10.14;9.88;22.95;E;;;;;;;;2MASX J10442076+1405043,MCG +02-28-002,PGC 032032,SDSS J104420.72+140504.0,SDSS J104420.73+140504.0,SDSS J104420.74+140504.1,UGC 05206;;Correction of UGC R.A. error for UGC 05206 makes UGC 05206 = UGC 05854A.; +NGC3358;G;10:43:33.02;-36:24:38.5;Ant;3.62;1.82;140;12.44;11.53;9.23;8.56;8.37;23.59;S0-a;;;;;;;;2MASX J10433303-3624385,ESO 376-017,ESO-LV 376-0170,MCG -06-24-009,PGC 031974;;; +NGC3359;G;10:46:36.86;+63:13:27.2;UMa;4.07;2.83;167;11.03;10.57;9.44;8.73;8.62;22.55;Sc;;;;;;;;2MASX J10463684+6313251,IRAS 10433+6329,MCG +11-13-037,PGC 032183,SDSS J104636.85+631327.2,SDSS J104636.86+631327.2,UGC 05873;;; +NGC3360;G;10:44:16.18;-11:14:33.2;Sex;1.03;0.81;54;14.00;;11.81;11.08;10.86;23.02;Sc;;;;;;;;2MASX J10441619-1114334,MCG -02-28-003,PGC 032026;;; +NGC3361;G;10:44:29.17;-11:12:28.5;Sex;2.23;0.77;155;13.50;;11.17;10.18;10.06;23.06;SABc;;;;;;;;2MASX J10442917-1112284,IRAS 10419-1056,MCG -02-28-004,PGC 032044;;; +NGC3362;G;10:44:51.72;+06:35:48.2;Leo;1.32;1.08;82;17.58;16.96;11.29;10.60;10.28;22.95;SABc;;;;;;;;2MASX J10445172+0635488,MCG +01-28-005,PGC 032078,SDSS J104451.72+063548.6,SDSS J104451.73+063548.6,SDSS J104451.73+063548.7,UGC 05857;;; +NGC3363;G;10:45:09.46;+22:04:42.6;Leo;0.86;0.63;179;14.70;;11.28;10.54;10.24;22.62;Sbc;;;;;;;;2MASX J10450942+2204425,IRAS 10424+2220,MCG +04-26-002,PGC 032089,SDSS J104509.45+220442.5,SDSS J104509.46+220442.5,UGC 05866;;; +NGC3364;G;10:48:29.82;+72:25:30.1;UMa;1.39;1.22;68;13.80;;11.15;10.40;10.13;22.82;SABc;;;;;;;;2MASX J10482979+7225302,IRAS 10448+7241,MCG +12-10-082,PGC 032314,UGC 05890;;The 2MASS position is 5 arcsec east of the nucleus.; +NGC3365;G;10:46:12.59;+01:48:47.8;Sex;4.04;0.69;160;13.00;;10.92;10.31;9.95;23.50;Sc;;;;;;;;2MASX J10461264+0148479,MCG +00-28-006,PGC 032153,SDSS J104612.53+014850.8,SDSS J104612.58+014847.7,SDSS J104612.58+014847.8,SDSS J104612.59+014847.8,UGC 05878;;; +NGC3366;G;10:35:08.28;-43:41:30.5;Vel;2.72;1.31;36;12.77;;;;;22.47;SBb;;;;;;2592;;ESO 264-007,ESO-LV 264-0070,IRAS 10329-4325,MCG -07-22-024,PGC 031335;;Confused HIPASS source; +NGC3367;G;10:46:34.95;+13:45:03.1;Leo;2.88;2.83;70;12.05;11.50;9.76;9.12;8.76;23.04;Sc;;;;;;;;2MASX J10463496+1345026,IRAS 10439+1400,MCG +02-28-005,PGC 032178,SDSS J104634.95+134503.0,SDSS J104634.95+134503.1,SDSS J104634.96+134503.1,UGC 05880;;The 2MASXi position is 6 arcsec northwest of the nucleus.; +NGC3368;G;10:46:45.74;+11:49:11.8;Leo;8.26;5.51;5;10.15;9.25;7.24;6.57;6.32;23.14;Sab;;;;096;;;;2MASX J10464574+1149117,IRAS 10441+1205,MCG +02-28-006,PGC 032192,SDSS J104645.67+114911.8,UGC 05882;;; +NGC3369;G;10:46:44.65;-25:14:40.0;Hya;0.72;0.54;118;14.64;;11.66;10.85;10.66;22.76;E-S0;;;;;;;;2MASX J10464464-2514398,ESO 501-095,ESO-LV 501-0950,MCG -04-26-009,PGC 032191;;; +NGC3370;G;10:47:04.05;+17:16:25.0;Leo;2.44;1.42;147;12.40;;10.35;9.67;9.43;22.54;SABc;;;;;;;;2MASX J10470403+1716253,IRAS 10444+1732,MCG +03-28-008,PGC 032207,SDSS J104704.04+171625.0,SDSS J104704.05+171625.0,UGC 05887;;; +NGC3371;Dup;10:48:16.89;+12:37:45.4;Leo;;;;;;;;;;;;;;;3384;;;;;; +NGC3372;HII;10:45:08.53;-59:52:00.1;Car;120.00;120.00;;3.00;;;;;;;;;;;;;;C 092;Carina Nebula,eta Car Nebula;;Dimensions and B-Mag taken from LEDA +NGC3373;Dup;10:48:27.91;+12:31:59.5;Leo;;;;;;;;;;;;;;;3389;;;;;; +NGC3374;G;10:48:01.05;+43:11:11.6;UMa;1.22;0.88;161;14.60;;11.81;11.15;10.66;23.45;Sc;;;;;;;;2MASX J10480107+4311115,IRAS 10451+4327,MCG +07-22-066,PGC 032266,SDSS J104801.04+431111.5,SDSS J104801.04+431111.6,SDSS J104801.05+431111.6,UGC 05901;;; +NGC3375;G;10:47:00.79;-09:56:28.7;Sex;1.49;1.26;130;13.00;;10.61;9.96;9.77;23.05;S0;;;;;;;;2MASX J10470078-0956285,MCG -01-28-002,MCG -02-28-008,PGC 032205;;MCG decs for MCG -01-28 field are 10 arcmin too far north (MCG4 errata).; +NGC3376;G;10:47:26.57;+06:02:53.3;Sex;1.13;0.53;166;14.40;;11.38;10.65;10.45;23.14;S0-a;;;;;;;;2MASX J10472659+0602529,MCG +01-28-007,PGC 032231,SDSS J104726.57+060253.2,SDSS J104726.57+060253.3,UGC 05891;;; +NGC3377;G;10:47:42.33;+13:59:09.3;Leo;3.87;1.87;36;11.24;10.38;8.29;7.63;7.44;22.89;E;;;;;;;;2MASX J10474239+1359083,MCG +02-28-009,PGC 032249,UGC 05899;;; +NGC3377A;G;10:47:22.30;+14:04:10.0;Leo;1.43;1.37;0;14.31;13.61;;;;23.88;SABm;;;;;;;;MCG +02-28-007,PGC 032226,UGC 05889;;; +NGC3378;G;10:46:43.27;-40:00:57.7;Ant;1.50;1.35;93;13.48;;10.57;9.86;9.60;22.99;SABb;;;;;;;;2MASX J10464327-4000576,ESO 318-012,ESO-LV 318-0120,IRAS 10444-3945,MCG -07-22-029,PGC 032189;;; +NGC3379;G;10:47:49.59;+12:34:53.8;Leo;4.89;4.25;71;10.56;9.76;7.17;6.49;6.27;22.54;E;;;;105;;;;2MASX J10474959+1234538,MCG +02-28-011,PGC 032256,UGC 05902;;; +NGC3380;G;10:48:12.18;+28:36:06.4;LMi;1.56;1.40;21;13.60;;10.79;10.18;9.92;23.08;SBa;;;;;;;;2MASX J10481215+2836063,IRAS 10454+2851,MCG +05-26-012,PGC 032287,SDSS J104812.18+283606.4,SDSS J104812.19+283606.4,UGC 05906;;; +NGC3381;G;10:48:24.82;+34:42:41.1;LMi;2.02;1.82;76;12.80;;11.38;10.63;10.32;23.18;SBbc;;;;;;;;2MASX J10482482+3442405,IRAS 10456+3458,MCG +06-24-015,PGC 032302,SDSS J104824.81+344241.0,SDSS J104824.82+344241.1,UGC 05909;;; +NGC3382;**;10:48:25.03;+36:43:31.6;LMi;;;;;;;;;;;;;;;;;;SDSS J104825.03+364331.5;;Identification as NGC 3382 is very uncertain.; +NGC3383;G;10:47:19.20;-24:26:17.4;Hya;1.45;1.11;5;13.53;;11.09;10.38;10.16;22.89;SBbc;;;;;;;;2MASX J10471919-2426172,ESO 501-097,ESO-LV 501-0970,IRAS 10449-2410,MCG -04-26-010,PGC 032224;;; +NGC3384;G;10:48:16.89;+12:37:45.4;Leo;5.24;2.37;53;10.00;;7.67;7.00;6.75;23.17;E-S0;;;;;3371;;;2MASX J10481689+1237454,MCG +02-28-012,PGC 032292,SDSS J104816.88+123745.3,UGC 05911;;Identification as NGC 3371 is not certain.; +NGC3385;G;10:48:11.63;+04:55:39.9;Sex;1.61;0.88;98;13.70;;10.89;10.22;9.90;23.39;S0;;;;;;;;2MASX J10481163+0455397,MCG +01-28-009,PGC 032285,SDSS J104811.62+045539.8,SDSS J104811.62+045539.9,UGC 05908;;; +NGC3386;G;10:48:11.91;+04:59:54.9;Sex;1.06;1.00;95;14.80;;11.68;11.02;10.60;23.62;E;;;;;;;;2MASX J10481189+0459547,MCG +01-28-010,PGC 032284,SDSS J104811.90+045954.8,SDSS J104811.91+045954.8,SDSS J104811.91+045954.9,UGC 05908 NOTES01;;NGC 3387 is small group of stars at 10h48m17s +04d58.0m (2000).; +NGC3387;G;10:48:16.74;+04:57:59.8;Sex;;;;;;;;;;;;;;;;;;;;"Galactic star superposed; possibly not a galaxy?"; +NGC3388;Dup;10:51:25.53;+08:34:01.7;Leo;;;;;;;;;;;;;;;3425;;;;;; +NGC3389;G;10:48:27.91;+12:31:59.5;Leo;2.68;1.18;104;12.00;;;;;22.70;Sc;;;;;3373;;;MCG +02-28-013,PGC 032306,SDSS J104827.90+123159.4,SDSS J104827.91+123159.5,UGC 05914;;Identification as NGC 3373 is not certain.; +NGC3390;G;10:48:04.36;-31:32:00.1;Hya;3.11;0.69;179;13.24;13.41;9.59;8.79;8.48;23.17;Sb;;;;;;;;2MASX J10480434-3132000,ESO 437-062,ESO-LV 437-0620,IRAS 10457-3116,MCG -05-26-007,PGC 032271;;; +NGC3391;G;10:48:56.36;+14:13:11.4;Leo;0.87;0.56;31;13.50;;12.21;11.76;11.72;21.41;Sb;;;;;;;;2MASX J10485639+1413117,IRAS 10462+1429,MCG +02-28-014,PGC 032347,SDSS J104856.35+141311.3,UGC 05920;;; +NGC3392;G;10:51:03.00;+65:46:53.6;UMa;0.90;0.67;117;16.83;16.11;11.57;10.94;10.74;23.17;E;;;;;;;;2MASX J10510307+6546534,MCG +11-13-042,PGC 032512,SDSS J105103.00+654653.6,SDSS J105103.00+654653.9;;; +NGC3393;G;10:48:23.46;-25:09:43.4;Hya;1.95;1.70;13;13.10;13.95;10.09;9.35;9.06;23.18;SBa;;;;;;;;2MASX J10482346-2509433,ESO 501-100,ESO-LV 501-1000,IRAS 10459-2453,MCG -04-26-011,PGC 032300;;; +NGC3394;G;10:50:39.84;+65:43:38.0;UMa;1.77;1.36;43;13.09;;11.04;10.46;10.14;23.18;Sc;;;;;;;;2MASX J10503976+6543377,IRAS 10473+6559,MCG +11-13-041,PGC 032495,SDSS J105039.84+654337.9,SDSS J105039.84+654338.0,SDSS J105039.85+654337.9,SDSS J105039.85+654338.2,UGC 05937;;; +NGC3395;G;10:49:50.11;+32:58:58.3;LMi;1.60;0.89;40;12.10;12.10;10.76;10.11;9.95;21.65;Sc;;;;;;2613;;2MASX J10495011+3258582,MCG +06-24-017,PGC 032424,UGC 05931;;; +NGC3396;G;10:49:55.07;+32:59:27.0;LMi;3.10;1.27;97;12.60;12.50;11.46;10.99;10.90;22.96;Sm;;;;;;;;2MASX J10495512+3259261,MCG +06-24-018,PGC 032434,SDSS J104955.07+325926.9,SDSS J104955.08+325927.0,UGC 05935;;; +NGC3397;Dup;10:44:39.37;+76:48:34.0;Dra;;;;;;;;;;;;;;;3329;;;;;; +NGC3398;G;10:51:31.43;+55:23:27.5;UMa;0.86;0.32;76;14.40;;11.87;11.17;10.76;22.20;SABb;;;;;;0644;;2MASX J10513147+5523277,MCG +09-18-038,PGC 032564,SDSS J105131.42+552327.4,UGC 05954;;; +NGC3399;G;10:49:27.60;+16:13:06.8;Leo;1.52;1.38;30;14.70;;11.25;10.58;10.29;24.12;E-S0;;;;;;;;2MASX J10492761+1613061,MCG +03-28-012,PGC 032395,SDSS J104927.59+161306.7,SDSS J104927.59+161306.8,SDSS J104927.60+161306.7,SDSS J104927.60+161306.8;;; +NGC3400;G;10:50:45.47;+28:28:08.7;LMi;1.53;0.91;97;14.30;;10.98;10.35;10.15;23.46;SBa;;;;;;;;2MASX J10504550+2828081,MCG +05-26-020,PGC 032499,SDSS J105045.46+282808.6,SDSS J105045.47+282808.7,UGC 05949;;; +NGC3401;Other;10:50:19.87;+05:48:41.4;Sex;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3402;G;10:50:26.47;-12:50:40.6;Crt;1.85;1.78;170;9.00;;9.86;9.16;8.92;23.13;E;;;;;3411;;;2MASX J10502610-1250422,MCG -02-28-012,PGC 032479;;; +NGC3403;G;10:53:54.86;+73:41:25.3;Dra;2.78;1.04;73;13.30;;10.70;9.94;9.65;23.23;Sbc;;;;;;;;2MASX J10535485+7341253,IRAS 10502+7357,MCG +12-10-089,PGC 032719,UGC 05997;;; +NGC3404;G;10:50:17.98;-12:06:31.4;Hya;2.06;0.60;81;14.49;;10.40;9.63;9.35;23.60;SBab;;;;;;2609;;2MASX J10501799-1206316,IRAS 10477-1150,MCG -02-28-011,PGC 032466;;; +NGC3405;GPair;10:49:43.80;+16:14:25.0;Leo;1.20;;;;;;;;;;;;;;;;;UGC 05933;;;Diameter of the group inferred by the author. +NGC3405 NED01;G;10:49:43.31;+16:14:19.8;Leo;1.29;0.98;74;14.40;;11.37;10.42;10.21;24.10;E;;;;;;;;2MASX J10494330+1614201,MCG +03-28-014,PGC 032414,SDSS J104943.30+161419.7,UGC 05933 NED01;;Component 'a)' in UGC notes.; +NGC3405 NED02;G;10:49:44.36;+16:14:31.9;Leo;0.66;0.50;95;15.37;;;;;23.41;E-S0;;;;;;;;MCG +03-28-015,PGC 032418,SDSS J104944.35+161431.8,SDSS J104944.36+161431.9,UGC 05933 NED02;;Component 'b)' in UGC notes.;B-Mag taken from LEDA +NGC3406;GPair;10:51:44.20;+51:01:26.0;UMa;1.20;;;;;;;;;;;;;;;;;MCG +09-18-040,UGC 05970;;;Diameter of the group inferred by the author. +NGC3406 NED01;G;10:51:43.63;+51:01:19.8;UMa;1.45;1.00;84;13.70;;;;;23.74;E;;;;;;;;2MASX J10514368+5101195,MCG +09-18-040 NED01,PGC 032580,SDSS J105143.63+510119.7,SDSS J105143.63+510120.0,UGC 05970 NED01;;; +NGC3406 NED02;G;10:51:44.48;+51:01:30.3;UMa;1.12;0.55;11;14.68;;11.24;10.49;10.16;23.81;S0;;;;;;;;2MASX J10514450+5101303,MCG +09-18-040 NED02,PGC 093106,SDSS J105144.47+510130.2,UGC 05970 NED02;;;B-Mag taken from LEDA +NGC3407;G;10:52:17.79;+61:22:46.7;UMa;1.35;0.67;17;14.80;;11.58;10.86;10.62;23.96;E-S0;;;;;;;;2MASX J10521784+6122471,MCG +10-16-017,PGC 032626,SDSS J105217.78+612246.6,SDSS J105217.78+612246.9,SDSS J105217.79+612246.7,UGC 05978;;; +NGC3408;G;10:52:11.68;+58:26:17.3;UMa;0.85;0.72;150;14.10;;11.83;11.20;10.77;22.57;Sc;;;;;;;;2MASX J10521167+5826168,IRAS 10490+5842,MCG +10-16-016,PGC 032616,SDSS J105211.66+582617.5,SDSS J105211.67+582617.1,SDSS J105211.67+582617.2,SDSS J105211.67+582617.3,SDSS J105211.68+582617.3,UGC 05977;;; +NGC3409;G;10:50:20.35;-17:02:37.1;Crt;1.39;0.32;9;15.00;;12.10;11.43;11.16;24.09;SBc;;;;;;;;2MASX J10502033-1702372,MCG -03-28-012,PGC 032470;;; +NGC3410;G;10:51:53.71;+51:00:23.4;UMa;0.87;0.59;40;14.20;;12.70;11.93;11.74;23.20;SABb;;;;;;;;2MASX J10515373+5100234,IRAS 10488+5116,MCG +09-18-042,PGC 032594,SDSS J105153.71+510023.4,SDSS J105153.71+510023.7;;; +NGC3411;Dup;10:50:26.47;-12:50:40.6;Crt;;;;;;;;;;;;;;;3402;;;;;; +NGC3412;G;10:50:53.28;+13:24:43.7;Leo;3.96;2.17;155;11.45;10.54;8.53;7.86;7.67;23.14;S0;;;;;;;;2MASX J10505331+1324437,MCG +02-28-016,PGC 032508,SDSS J105053.27+132443.6,UGC 05952;;; +NGC3413;G;10:51:20.74;+32:45:59.0;LMi;2.02;0.85;177;13.10;;11.39;10.84;10.73;23.43;S0-a;;;;;;;;2MASX J10512070+3245589,IRAS 10485+3301,MCG +06-24-024,PGC 032543,SDSS J105120.73+324558.9,SDSS J105120.74+324559.0,UGC 05960;;; +NGC3414;G;10:51:16.21;+27:58:30.4;LMi;2.67;1.37;9;12.10;;8.89;8.22;7.98;22.89;S0;;;;;;;;2MASX J10511624+2758298,MCG +05-26-021,PGC 032533,SDSS J105116.20+275830.3,UGC 05959;;; +NGC3415;G;10:51:42.60;+43:42:45.4;UMa;1.35;0.78;10;13.20;;10.32;9.62;9.39;22.76;S0-a;;;;;;;;2MASX J10514261+4342454,IRAS 10488+4358,MCG +07-22-072,PGC 032579,SDSS J105142.59+434245.4,UGC 05969;;; +NGC3416;G;10:51:48.31;+43:45:50.9;UMa;0.59;0.25;31;15.20;;13.96;13.42;12.90;22.57;Sc;;;;;;;;2MASX J10514829+4345512,MCG +07-22-073,PGC 032588,SDSS J105148.30+434550.8,SDSS J105148.30+434550.9;;; +NGC3417;G;10:51:01.72;+08:28:24.6;Leo;0.81;0.52;87;15.30;;12.47;11.80;11.83;23.28;SBb;;;;;;;;2MASX J10510169+0828242,PGC 032520,SDSS J105101.72+082824.5;;; +NGC3418;G;10:51:23.95;+28:06:43.3;LMi;1.10;0.94;77;14.50;;11.18;10.49;10.32;22.96;S0-a;;;;;;;;2MASX J10512393+2806429,MCG +05-26-023,PGC 032549,SDSS J105123.95+280643.2,SDSS J105123.96+280643.3,UGC 05963;;; +NGC3419;G;10:51:17.74;+13:56:45.6;Leo;0.75;0.63;117;13.46;;11.26;10.56;10.28;21.94;S0-a;;;;;;;;2MASX J10511773+1356457,MCG +02-28-018,PGC 032535,SDSS J105117.74+135645.5,UGC 05964;;; +NGC3419A;G;10:51:19.94;+14:01:24.4;Leo;1.67;0.34;136;14.90;;12.55;11.72;11.61;23.79;SBbc;;;;;;;;2MASX J10511994+1401241,MCG +02-28-019,PGC 032540,SDSS J105119.93+140124.3,SDSS J105119.93+140124.4,UGC 05965;;; +NGC3420;G;10:50:09.66;-17:14:33.1;Hya;1.16;1.13;120;14.00;;11.12;10.38;10.05;23.79;SBa;;;;;;;;2MASX J10500967-1714326,MCG -03-28-011,PGC 032453;;; +NGC3421;G;10:50:57.63;-12:26:54.7;Crt;1.58;1.24;65;14.00;;11.41;10.47;10.37;24.10;SBa;;;;;;0652;;2MASX J10505766-1226546,MCG -02-28-013,PGC 032514;;; +NGC3422;G;10:51:17.34;-12:24:08.6;Crt;1.33;0.44;54;14.90;;11.06;10.37;10.06;23.97;S0-a;;;;;;;;2MASX J10511732-1224086,MCG -02-28-015,PGC 032534;;; +NGC3423;G;10:51:14.33;+05:50:24.1;Leo;3.56;3.03;4;12.10;;9.30;8.65;8.55;22.96;Sc;;;;;;;;2MASX J10511434+0550243,MCG +01-28-012,PGC 032529,SDSS J105114.32+055024.0,SDSS J105114.33+055024.1,UGC 05962;;; +NGC3424;G;10:51:46.33;+32:54:02.7;LMi;2.49;0.78;111;13.20;;10.13;9.36;9.04;23.05;SBb;;;;;;;;2MASX J10514632+3254024,IRAS 10489+3309,MCG +06-24-025,PGC 032584,UGC 05972;;; +NGC3425;G;10:51:25.53;+08:34:01.7;Leo;1.16;1.01;65;14.50;;11.39;10.66;10.53;23.56;S0;;;;;3388;;;2MASX J10512551+0834014,MCG +02-28-021,PGC 032555,SDSS J105125.52+083401.7,UGC 05967;;; +NGC3426;G;10:51:41.75;+18:28:51.0;Leo;1.71;1.39;104;13.90;;10.84;10.16;9.87;23.83;E;;;;;;;;2MASX J10514174+1828517,MCG +03-28-020,PGC 032577,SDSS J105141.74+182850.9,UGC 05975;;; +NGC3427;G;10:51:26.33;+08:17:55.3;Leo;1.30;0.83;77;14.00;;11.15;10.43;10.14;23.15;S0-a;;;;;;;;2MASX J10512633+0817554,MCG +02-28-020,PGC 032559,SDSS J105126.31+081755.2,SDSS J105126.32+081755.2,UGC 05966;;; +NGC3428;G;10:51:29.51;+09:16:46.2;Leo;1.40;0.60;167;14.10;;11.62;10.90;10.60;22.91;Sb;;;;;3429;;;2MASX J10512951+0916464,MCG +02-28-022,PGC 032552,SDSS J105129.50+091646.2,UGC 05968;;; +NGC3429;Dup;10:51:29.51;+09:16:46.2;Leo;;;;;;;;;;;;;;;3428;;;;;; +NGC3430;G;10:52:11.40;+32:57:01.6;LMi;3.99;2.22;32;12.20;;9.81;9.14;8.90;23.44;Sc;;;;;;;;2MASX J10521141+3257015,IRAS 10494+3312,MCG +06-24-026,PGC 032614,SDSS J105211.40+325701.5,UGC 05982;;; +NGC3431;G;10:51:15.04;-17:00:28.9;Crt;1.50;0.40;133;14.30;;11.43;10.66;10.31;23.18;SABb;;;;;;;;2MASX J10511503-1700286,IRAS 10487-1644,MCG -03-28-014,PGC 032531;;; +NGC3432;G;10:52:31.13;+36:37:07.6;LMi;7.41;2.08;33;11.81;11.67;9.91;9.29;9.06;23.63;SBm;;;;;;;;2MASX J10523113+3637076,IRAS 10497+3653,MCG +06-24-028,PGC 032643,UGC 05986;;; +NGC3433;G;10:52:03.87;+10:08:53.9;Leo;2.51;2.40;170;13.60;;10.38;9.69;9.68;23.98;Sc;;;;;;;;2MASX J10520382+1008536,MCG +02-28-023,PGC 032605,SDSS J105203.87+100853.9,UGC 05981;;; +NGC3434;G;10:51:58.03;+03:47:31.4;Leo;1.45;1.09;178;13.40;;10.72;9.94;9.76;23.11;Sb;;;;;;;;2MASX J10515804+0347312,MCG +01-28-015,PGC 032595,SDSS J105158.02+034731.4,SDSS J105158.03+034731.4,UGC 05980;;; +NGC3435;G;10:54:48.33;+61:17:23.5;UMa;1.75;1.17;33;14.20;;11.74;11.08;10.73;23.72;SBb;;;;;;;;2MASX J10544836+6117236,MCG +10-16-022,PGC 032786,SDSS J105448.33+611723.5,UGC 06025;;; +NGC3436;G;10:52:27.49;+08:05:38.5;Leo;0.86;0.60;79;15.00;;12.12;11.50;11.07;23.11;Sab;;;;;;;;2MASX J10522747+0805385,MCG +01-28-016,PGC 032633,SDSS J105227.49+080538.5,SDSS J105227.49+080538.6;;; +NGC3437;G;10:52:35.75;+22:56:02.9;Leo;2.35;0.82;119;12.58;11.96;9.92;9.19;8.88;22.43;SABc;;;;;;;;2MASX J10523574+2256028,IRAS 10498+2312,MCG +04-26-016,PGC 032648,SDSS J105235.76+225602.9,UGC 05995;;; +NGC3438;G;10:52:25.98;+10:32:50.1;Leo;0.89;0.83;65;14.30;;11.59;10.89;10.76;22.76;E?;;;;;;;;2MASX J10522599+1032505,MCG +02-28-025,PGC 032638,SDSS J105225.96+103250.1,SDSS J105225.97+103250.0,SDSS J105225.97+103250.1,SDSS J105225.98+103250.1,UGC 05988;;; +NGC3439;G;10:52:25.72;+08:33:27.3;Leo;0.44;0.35;135;15.20;;13.22;12.71;12.32;;Sbc;;;;;;;;2MASX J10522572+0833275,PGC 032634,SDSS J105225.71+083327.3;;;Diameters and position angle taken from Simbad. +NGC3440;G;10:53:49.50;+57:07:07.5;UMa;2.03;0.47;51;14.02;;12.32;11.76;11.68;23.60;Sbc;;;;;;;;2MASX J10534950+5707075,IRAS 10508+5722,MCG +10-16-019,PGC 032714,UGC 06009;;; +NGC3441;G;10:52:31.12;+07:13:29.6;Leo;0.79;0.43;6;13.90;;11.79;11.11;10.76;21.89;Sbc;;;;;;;;2MASX J10523110+0713295,MCG +01-28-017,PGC 032642,SDSS J105231.11+071329.6,SDSS J105231.12+071329.6,UGC 05993;;; +NGC3442;G;10:53:08.11;+33:54:37.3;UMa;0.54;0.36;18;13.20;;11.86;11.20;10.90;21.01;Sab;;;;;;;;2MASX J10530813+3354369,IRAS 10503+3410,PGC 032679,SDSS J105308.10+335437.3,SDSS J105308.11+335437.3,UGC 06001;;; +NGC3443;G;10:53:00.12;+17:34:25.1;Leo;1.77;0.89;146;14.70;;13.59;13.33;12.76;24.14;SABc;;;;;;;;2MASX J10530011+1734250,MCG +03-28-025,PGC 032671,UGC 06000;;; +NGC3444;G;10:52:59.38;+10:12:38.1;Leo;1.36;0.16;19;15.40;;12.79;12.06;11.59;23.48;Sbc;;;;;;;;2MASX J10525942+1012387,PGC 032670,SDSS J105259.37+101238.1,SDSS J105259.38+101238.1,UGC 06004;;; +NGC3445;G;10:54:35.49;+56:59:26.5;UMa;1.41;1.28;130;12.90;12.55;11.22;10.67;10.61;22.32;SABm;;;;;;;;2MASX J10543546+5659264,IRAS 10515+5715,MCG +10-16-023,PGC 032772,SDSS J105435.48+565926.4,UGC 06021;;Multiple SDSS entries describe this object.; +NGC3446;OCl;10:52:06.93;-45:08:21.3;Vel;7.50;;;;;;;;;;;;;;;;;MWSC 1862;;; +NGC3447A;G;10:53:23.98;+16:46:20.8;Leo;3.38;1.95;14;14.30;;;;;25.37;Sm;;;;;;;;MCG +03-28-027,PGC 032694,SDSS J105323.97+164620.7,SDSS J105323.98+164620.8,UGC 06006;;Multiple SDSS entries describe this galaxy.; +NGC3447B;G;10:53:29.65;+16:47:09.6;Leo;1.49;0.79;107;14.30;;;;;24.38;IB;;;;;;;;MCG +03-28-028,PGC 032700,SDSS J105329.82+164707.0,UGC 06007;;Multiple SDSS entries describe this source.; +NGC3448;G;10:54:39.20;+54:18:17.5;UMa;2.97;0.88;65;12.20;;10.39;9.81;9.47;22.61;S?;;;;;;;;2MASX J10543923+5418188,IRAS 10516+5434,MCG +09-18-055,PGC 032774,SDSS J105439.20+541817.5,UGC 06024;;; +NGC3449;G;10:52:53.66;-32:55:39.4;Ant;3.66;0.96;145;12.96;;9.62;8.89;8.61;23.77;SABa;;;;;;;;2MASX J10525364-3255394,ESO 376-025,ESO-LV 376-0250,IRAS 10505-3240,MCG -05-26-010,PGC 032666;;; +NGC3450;G;10:48:03.62;-20:50:57.1;Hya;2.61;2.29;110;12.72;;9.55;8.78;8.50;23.40;Sb;;;;;;;;2MASX J10480361-2050572,ESO 569-006,ESO-LV 569-0060,IRAS 10456-2034,MCG -03-28-004,PGC 032270,UGCA 218;;; +NGC3451;G;10:54:20.89;+27:14:23.1;LMi;1.66;0.78;50;13.50;;11.18;10.53;10.23;22.60;Sc;;;;;;;;2MASX J10542085+2714227,IRAS 10516+2730,MCG +05-26-028,PGC 032754,SDSS J105420.88+271423.1,UGC 06023;;Multiple SDSS entries describe this object.; +NGC3452;G;10:54:14.08;-11:24:18.2;Crt;1.25;0.31;65;15.00;;11.30;10.54;10.32;23.57;Sa;;;;;;;;2MASX J10541409-1124179,MCG -02-28-019,PGC 032742;;; +NGC3453;G;10:53:40.50;-21:47:33.9;Hya;1.09;0.56;13;13.87;;11.14;10.52;10.34;22.33;SBbc;;;;;;;;2MASX J10534049-2147337,ESO 569-017,ESO-LV 569-0170,IRAS 10512-2131,MCG -04-26-013,PGC 032707;;; +NGC3454;G;10:54:29.53;+17:20:38.5;Leo;2.41;0.53;116;14.10;;11.62;10.96;10.67;23.15;SBc;;;;;;;;2MASX J10542945+1720385,MCG +03-28-030,PGC 032763,SDSS J105429.52+172038.5,SDSS J105429.53+172038.5,UGC 06026;;; +NGC3455;G;10:54:31.09;+17:17:05.1;Leo;2.27;1.42;70;13.10;;11.32;10.62;10.39;24.47;SABb;;;;;;;;2MASX J10543106+1717045,IRAS 10518+1733,MCG +03-28-031,PGC 032767,SDSS J105431.08+171705.1,SDSS J105431.09+171705.0,UGC 06028;;; +NGC3456;G;10:54:03.31;-16:01:39.8;Crt;1.75;1.26;105;13.10;;10.93;10.25;9.92;22.98;Sc;;;;;;;;2MASX J10540329-1601398,IRAS 10515-1545,MCG -03-28-018,PGC 032730;;; +NGC3457;G;10:54:48.63;+17:37:16.5;Leo;0.97;0.93;175;13.00;;10.49;9.83;9.64;21.79;E;;;;;3460;;;2MASX J10544862+1737161,MCG +03-28-032,PGC 032787,SDSS J105448.63+173716.4,UGC 06030;;Identification as NGC 3457 is not certain.; +NGC3458;G;10:56:01.48;+57:07:01.1;UMa;1.38;0.73;7;13.20;;10.23;9.55;9.33;22.46;S0;;;;;;;;2MASX J10560145+5707010,MCG +10-16-026,PGC 032854,SDSS J105601.47+570701.1,UGC 06037;;; +NGC3459;G;10:54:44.28;-17:02:31.2;Crt;1.45;0.55;149;14.00;;11.09;10.36;10.06;23.31;SBab;;;;;;;;2MASX J10544427-1702313,IRAS 10522-1646,MCG -03-28-022,PGC 032782;;; +NGC3460;Dup;10:54:48.63;+17:37:16.5;Leo;;;;;;;;;;;;;;;3457;;;;;; +NGC3461;G;10:54:55.29;+17:42:29.3;Leo;0.51;0.43;66;15.99;;;;;23.13;Sbc;;;;;;;;2MASX J10545526+1742292,IRAS 10522+1758,PGC 032793,SDSS J105455.29+174229.2;;; +NGC3462;G;10:55:21.06;+07:41:48.3;Leo;1.76;1.16;62;13.40;;10.33;9.65;9.37;23.38;S0;;;;;;;;2MASX J10552108+0741482,MCG +01-28-019,PGC 032822,SDSS J105521.05+074148.3,UGC 06034;;; +NGC3463;G;10:55:13.36;-26:08:26.7;Hya;1.51;0.70;77;13.78;;10.96;10.22;10.04;22.90;Sb;;;;;;;;2MASX J10551336-2608266,ESO 502-002,ESO-LV 502-0020,IRAS 10528-2552,MCG -04-26-014,PGC 032813;;ESO dec. of -25d53.5m is incorrect. Corrected in ESO-LV.; +NGC3464;G;10:54:40.01;-21:03:59.9;Hya;2.37;1.55;111;13.23;;10.38;9.66;9.46;23.33;Sc;;;;;;;;2MASX J10544007-2103596,2MASX J10544101-2104113,ESO 569-022,ESO-LV 569-0220,IRAS 10521-2047,MCG -03-28-021,PGC 032778,SDSS J105440.10-210359.4,UGCA 222;;DSS1 has a plate flaw superposed at 105440.8, -210507 (2000).; +NGC3465;G;10:59:31.27;+75:11:28.6;Dra;0.95;0.80;65;14.60;;11.86;11.21;10.93;23.18;Sb;;;;;;;;2MASX J10593125+7511284,IRAS 10557+7527,MCG +13-08-048,PGC 033099,UGC 06056;;; +NGC3466;G;10:56:15.48;+09:45:16.0;Leo;1.00;0.56;53;14.60;;11.29;10.60;10.46;22.93;SBab;;;;;;;;2MASX J10561548+0945156,MCG +02-28-028,PGC 032872,SDSS J105615.47+094515.9,SDSS J105615.48+094516.0,UGC 06042;;; +NGC3467;G;10:56:44.08;+09:45:32.1;Leo;0.92;0.81;20;14.20;;11.32;10.63;10.40;22.98;S0;;;;;;;;2MASX J10564407+0945324,MCG +02-28-030,PGC 032903,SDSS J105644.07+094532.0,SDSS J105644.07+094532.1,UGC 06045;;; +NGC3468;G;10:57:31.17;+40:56:46.1;UMa;1.50;0.73;9;14.20;;10.85;10.18;9.89;23.71;S0;;;;;;;;2MASX J10573116+4056463,MCG +07-23-006,PGC 032940,SDSS J105731.16+405646.1,SDSS J105731.17+405646.1,UGC 06048;;; +NGC3469;G;10:56:57.69;-14:18:02.9;Crt;1.56;1.05;142;14.00;;10.77;10.08;9.76;23.70;Sab;;;;;;;;2MASX J10565769-1418018,MCG -02-28-024,PGC 032912;;; +NGC3470;G;10:58:44.90;+59:30:38.5;UMa;1.36;1.16;161;14.10;;11.68;10.84;10.69;23.53;Sab;;;;;;;;2MASX J10584486+5930383,MCG +10-16-038,PGC 033040,SDSS J105844.89+593038.5,SDSS J105844.89+593038.8,SDSS J105844.90+593038.5,SDSS J105844.91+593038.5,UGC 06060;;; +NGC3471;G;10:59:09.01;+61:31:50.5;UMa;1.79;0.92;12;13.00;;10.58;9.94;9.59;22.95;SBa;;;;;;;;2MASX J10590901+6131496,IRAS 10560+6147,MCG +10-16-039,PGC 033074,SDSS J105908.99+613150.4,SDSS J105909.01+613150.4,SDSS J105909.01+613150.5,UGC 06064;;; +NGC3472;Other;10:57:22.24;-19:38:15.7;Crt;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3473;G;10:58:05.17;+17:07:27.9;Leo;1.05;0.84;36;14.80;;11.66;11.02;10.77;23.33;SBb;;;;;;;;2MASX J10580519+1707281,MCG +03-28-041,PGC 032978,SDSS J105805.16+170727.8,UGC 06052;;; +NGC3474;G;10:58:08.76;+17:05:44.5;Leo;1.06;0.82;160;14.90;;11.74;11.11;10.84;23.97;E;;;;;;;;2MASX J10580875+1705441,MCG +03-28-042,PGC 032989,SDSS J105808.75+170544.5,SDSS J105808.76+170544.5;;; +NGC3475;G;10:58:25.22;+24:13:34.8;Leo;1.13;0.70;60;14.00;;10.92;10.21;9.89;23.34;Sa;;;;;;;;2MASX J10582517+2413351,MCG +04-26-022,PGC 033012,SDSS J105825.22+241334.8,UGC 06058;;; +NGC3476;G;10:58:07.60;+09:16:34.1;Leo;1.01;0.90;146;15.00;;11.66;10.93;10.96;23.75;E;;;;;3480;;;2MASX J10580758+0916335,MCG +02-28-032,PGC 032987,SDSS J105807.59+091633.9,SDSS J105807.59+091634.0,SDSS J105807.60+091633.9,SDSS J105807.60+091634.0,SDSS J105807.60+091634.1;;Identification as NGC 3480 is not certain.; +NGC3477;G;10:58:12.58;+09:13:04.1;Leo;1.41;0.31;72;15.70;;12.31;11.58;11.36;24.67;S0-a;;;;;;;;2MASX J10581255+0913046,PGC 032997,SDSS J105812.57+091304.0,SDSS J105812.58+091304.0,SDSS J105812.58+091304.1;;; +NGC3478;G;10:59:27.36;+46:07:20.6;UMa;2.05;0.85;127;13.70;;;;;23.20;SBbc;;;;;;;;2MASX J10592591+4607252,IRAS 10565+4623,MCG +08-20-059,PGC 033101,SDSS J105927.35+460720.5,SDSS J105927.35+460720.6,SDSS J105927.36+460720.6,UGC 06069;;The 2MASX position refers to a knot in the western arm.; +NGC3479;G;10:58:55.48;-14:57:41.0;Crt;1.53;1.07;3;13.00;;11.33;10.76;10.29;23.24;Sbc;;;;;3502;;;2MASX J10585548-1457408,MCG -02-28-027,PGC 033053;;; +NGC3480;Dup;10:58:07.60;+09:16:34.1;Leo;;;;;;;;;;;;;;;3476;;;;;; +NGC3481;G;10:59:26.17;-07:32:37.1;Crt;0.81;0.56;125;14.14;;11.56;11.05;10.61;22.77;Sab;;;;;;;;2MASX J10592616-0732370,IRAS 10569-0716,MCG -01-28-016,PGC 033097;;; +NGC3482;G;10:58:34.27;-46:35:02.0;Vel;1.85;1.36;16;13.51;;10.43;9.70;9.46;23.39;SBa;;;;;;;;2MASX J10583429-4635018,ESO 264-056,ESO-LV 264-0560,PGC 033025;;; +NGC3483;G;10:59:00.18;-28:28:37.1;Hya;1.79;1.35;98;13.07;;9.95;9.29;9.00;23.22;S0-a;;;;;;;;2MASX J10590019-2828370,ESO 438-001,ESO-LV 438-0010,MCG -05-26-016,PGC 033060;;; +NGC3484;Other;10:57:24.05;-19:37:59.7;Crt;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3485;G;11:00:02.38;+14:50:29.7;Leo;2.17;2.05;50;12.80;;10.60;9.76;9.46;23.08;Sb;;;;;;;;2MASX J11000239+1450295,MCG +03-28-044,PGC 033140,SDSS J110002.36+145029.7,UGC 06077;;; +NGC3486;G;11:00:23.87;+28:58:30.5;LMi;5.82;4.12;80;11.11;10.53;8.93;8.16;8.00;23.35;Sc;;;;;;;;2MASX J11002394+2858293,IRAS 10576+2914,MCG +05-26-032,PGC 033166,SDSS J110023.86+285830.4,UGC 06079;;; +NGC3487;G;11:00:46.55;+17:35:15.4;Leo;0.89;0.38;152;14.60;;11.69;10.93;10.52;22.58;Sab;;;;;;;;2MASX J11004654+1735155,MCG +03-28-047,PGC 033195,SDSS J110046.54+173515.1,UGC 06092;;; +NGC3488;G;11:01:23.61;+57:40:39.6;UMa;1.51;0.72;172;13.70;;11.16;10.58;10.45;23.00;Sc;;;;;;;;2MASX J11012353+5740389,IRAS 10583+5756,MCG +10-16-045,PGC 033242,SDSS J110123.57+574039.8,SDSS J110123.60+574039.5,SDSS J110123.61+574039.6,UGC 06096;;; +NGC3489;G;11:00:18.57;+13:54:04.4;Leo;3.44;2.03;70;11.12;10.29;8.27;7.55;7.37;22.44;S0-a;;;;;;;;2MASX J11001858+1354045,MCG +02-28-039,PGC 033160,UGC 06082;;; +NGC3490;G;10:59:54.41;+09:21:42.8;Leo;0.89;0.72;26;15.00;;12.49;11.84;11.51;23.86;E;;;;;;;;2MASX J10595440+0921422,MCG +02-28-036,PGC 033128,SDSS J105954.40+092142.8;;; +NGC3491;G;11:00:35.40;+12:09:41.6;Leo;0.92;0.90;140;14.10;;10.94;10.24;9.96;22.84;E-S0;;;;;;;;2MASX J11003537+1209415,MCG +02-28-041,PGC 033180,SDSS J110035.39+120941.6,SDSS J110035.40+120941.6,SDSS J110035.40+120941.7,UGC 06088;;; +NGC3492;GPair;11:00:57.00;+10:30:18.0;Leo;1.00;;;;;;;;;;;;;;;;;MCG +02-28-045,UGC 06094;;;Diameter of the group inferred by the author. +NGC3492 NED01;G;11:00:56.75;+10:30:15.2;Leo;0.98;0.76;27;15.00;;;;;24.17;E;;;;;;;;MCG +02-28-045 NED01,PGC 083429,SDSS J110056.74+103015.1,SDSS J110056.74+103015.2,UGC 06094 NED01;;; +NGC3492 NED02;G;11:00:57.42;+10:30:19.7;Leo;1.17;0.76;100;14.00;;11.00;10.32;10.06;23.34;E;;;;;;;;2MASX J11005745+1030197,MCG +02-28-045 NED02,PGC 033207,UGC 06094 NED02;;; +NGC3493;G;11:01:27.83;+27:43:10.5;LMi;0.98;0.34;85;15.30;;11.80;11.09;10.80;22.86;SBc;;;;;;;;2MASX J11012782+2743099,IRAS 10587+2759,MCG +05-26-036,PGC 033249,SDSS J110127.82+274310.4,UGC 06099;;; +NGC3494;**;11:01:10.91;+03:46:27.5;Leo;;;;;;;;;;;;;;;;;;;;; +NGC3495;G;11:01:16.23;+03:37:40.6;Leo;4.66;1.00;20;13.10;;9.89;9.24;8.93;23.22;SABc;;;;;;;;2MASX J11011616+0337409,IRAS 10586+0353,MCG +01-28-027,PGC 033234,SDSS J110116.15+033741.5,SDSS J110116.22+033740.5,UGC 06098;;; +NGC3496;OCl;10:59:33.81;-60:20:12.7;Car;6.00;;;9.02;8.20;;;;;;;;;;;;;MWSC 1878;;; +NGC3497;G;11:07:18.07;-19:28:17.6;Crt;2.58;1.56;57;12.79;;9.65;8.96;8.67;23.77;S0;;;;;3528,3525;2624;;2MASX J11071805-1928175,ESO 570-006,MCG -03-28-037,PGC 033667;;; +NGC3498;Other;11:01:42.19;+14:21:02.6;Leo;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +NGC3499;G;11:03:11.03;+56:13:18.2;UMa;0.83;0.71;20;14.30;;11.17;10.47;10.23;22.47;S0-a;;;;;;;;2MASX J11031110+5613179,MCG +09-18-080,PGC 033375,SDSS J110311.01+561318.6,SDSS J110311.03+561318.2,UGC 06115;;"CGCG misprints R.A. as 11h00.0m; corrected in CGCG errata."; +NGC3500;G;11:01:51.47;+75:12:04.9;Dra;0.87;0.42;48;14.80;;11.97;11.26;10.83;22.94;Sab;;;;;;;;2MASX J11015144+7512050,IRAS 10582+7528,MCG +13-08-052,PGC 033277,UGC 06090;;; +NGC3501;G;11:02:47.27;+17:59:21.6;Leo;4.31;0.65;27;13.80;;10.52;9.81;9.41;23.98;Sc;;;;;;;;2MASX J11024730+1759223,MCG +03-28-051,PGC 033343,SDSS J110247.26+175921.6,UGC 06116;;; +NGC3502;Dup;10:58:55.48;-14:57:41.0;Crt;;;;;;;;;;;;;;;3479;;;;;; +NGC3503;RfN;11:01:17.24;-59:50:44.7;Car;3.00;3.00;;;;;;;;;;;;;;;;ESO 128-028;;;Dimensions taken from LEDA +NGC3504;G;11:03:11.21;+27:58:21.0;LMi;2.48;2.24;150;13.48;12.93;9.24;8.61;8.27;22.27;Sab;;;;;;;;2MASX J11031119+2758207,IRAS 11004+2814,MCG +05-26-039,PGC 033371,SDSS J110311.24+275820.2,UGC 06118;;; +NGC3505;Dup;11:02:59.67;-16:17:22.0;Crt;;;;;;;;;;;;;;;3508;;;;;; +NGC3506;G;11:03:12.97;+11:04:36.0;Leo;1.16;1.04;175;12.90;;11.07;10.44;10.20;22.14;Sc;;;;;;;;2MASX J11031294+1104363,MCG +02-28-047,PGC 033379,SDSS J110312.95+110436.3,UGC 06120;;; +NGC3507;G;11:03:25.36;+18:08:07.6;Leo;2.92;2.51;95;11.40;;9.34;8.71;8.38;23.02;SBb;;;;;;;;2MASX J11032539+1808072,MCG +03-28-053,PGC 033390,SDSS J110325.36+180807.5,UGC 06123;;; +NGC3508;G;11:02:59.67;-16:17:22.0;Crt;1.00;0.80;23;13.60;;10.81;10.18;9.83;22.18;Sb;;;;;3505;2622;;2MASX J11025967-1617220,IRAS 11005-1601,MCG -03-28-031,PGC 033362;;Identification as NGC 3505 is not certain.; +NGC3509;G;11:04:23.55;+04:49:43.0;Leo;1.93;0.51;37;14.00;;11.41;10.71;10.19;23.41;Sbc;;;;;;;;2MASX J11042356+0449428,IRAS 11018+0505,MCG +01-28-033,PGC 033446,SDSS J110423.55+044943.0,UGC 06134;;; +NGC3510;G;11:03:43.37;+28:53:13.8;LMi;1.55;0.71;163;13.60;;11.76;11.48;11.15;22.55;SBm;;;;;;;;2MASX J11034335+2853135,IRAS 11010+2909,MCG +05-26-040,PGC 033408,SDSS J110343.36+285313.7,SDSS J110343.36+285313.8,SDSS J110343.37+285313.8,UGC 06126;;; +NGC3511;G;11:03:23.77;-23:05:12.4;Crt;6.04;2.00;76;11.66;;8.95;8.27;8.07;23.29;SABc;;;;;;;;2MASX J11032376-2305124,ESO 502-013,ESO-LV 502-0130,IRAS 11009-2248,MCG -04-26-020,PGC 033385,UGCA 223;;Extended HIPASS source; +NGC3512;G;11:04:02.94;+28:02:12.5;LMi;1.59;1.36;141;13.70;12.87;10.58;9.93;9.65;22.62;Sc;;;;;;;;2MASX J11040298+2802125,IRAS 11013+2818,MCG +05-26-041,PGC 033432,SDSS J110402.94+280212.4,SDSS J110402.94+280212.5,UGC 06128;;; +NGC3513;G;11:03:46.08;-23:14:43.8;Crt;2.81;1.28;113;12.16;;10.42;9.85;9.15;22.28;SBc;;;;;;;;2MASX J11034608-2314437,ESO 502-014,ESO-LV 502-0140,IRAS 11013-2258,MCG -04-26-021,PGC 033410,UGCA 224;;; +NGC3514;G;11:03:59.90;-18:46:50.1;Crt;1.22;0.99;100;14.00;;11.30;10.62;10.41;22.70;SABc;;;;;;;;2MASX J11035989-1846501,ESO 570-001,IRAS 11015-1830,MCG -03-28-035,PGC 033430;;; +NGC3515;G;11:04:37.24;+28:13:40.7;LMi;0.98;0.69;51;14.80;;12.01;11.41;11.04;23.02;Sbc;;;;;;;;2MASX J11043725+2813403,IRAS 11018+2829,MCG +05-26-044,PGC 033467,SDSS J110437.24+281340.6,SDSS J110437.24+281340.7,UGC 06139;;; +NGC3516;G;11:06:47.49;+72:34:06.9;UMa;1.91;1.62;55;13.12;12.40;9.53;8.93;8.51;22.69;S0;;;;;;;;2MASX J11064749+7234066,IRAS 11033+7250,MCG +12-11-009,PGC 033623,UGC 06153;;; +NGC3517;G;11:05:36.81;+56:31:29.7;UMa;0.95;0.81;91;13.80;;11.31;10.62;10.37;22.41;Sab;;;;;;;;2MASX J11053683+5631296,IRAS 11026+5647,MCG +10-16-057,PGC 033532,SDSS J110536.80+563129.9,SDSS J110536.81+563129.7,UGC 06144;;; +NGC3518;Dup;10:04:02.11;-06:28:29.2;Sex;;;;;;;;;;;;;;;3110;;;;;; +NGC3519;OCl;11:04:02.77;-61:22:05.7;Car;;;;8.05;7.70;;;;;;;;;;;;;ESO 128-030,MWSC 1885;;; +NGC3520;G;11:07:09.21;-18:01:25.3;Crt;0.95;0.75;51;14.91;;11.68;10.96;10.82;23.62;E;;;;;;;;2MASX J11070920-1801255,ESO 570-004,PGC 033648;;; +NGC3521;G;11:05:48.58;-00:02:09.1;Leo;8.32;4.47;162;9.83;9.02;6.74;6.03;5.78;22.75;SABb;;;;;;;;2MASX J11054859-0002092,IRAS 11032+0014,MCG +00-28-030,PGC 033550,UGC 06150;;Extended HIPASS source; +NGC3522;G;11:06:40.46;+20:05:08.0;Leo;1.17;0.62;115;14.13;;11.20;10.56;10.38;23.16;E;;;;;;;;2MASX J11064045+2005082,MCG +03-28-060,PGC 033615,SDSS J110640.45+200507.9,SDSS J110640.46+200508.0,UGC 06159;;; +NGC3523;G;11:03:06.32;+75:06:56.7;Dra;1.14;0.97;160;13.80;;11.35;10.71;10.32;22.79;Sbc;;;;;;;;2MASX J11030632+7506567,IRAS 10594+7523,MCG +13-08-053,PGC 033367,UGC 06105;;The 2MASS position is 6 arcsec north of the nucleus.; +NGC3524;G;11:06:32.10;+11:23:07.5;Leo;1.47;0.43;14;13.40;;10.43;9.81;9.61;22.64;S0-a;;;;;;;;2MASX J11063210+1123070,MCG +02-28-050,PGC 033604,SDSS J110632.10+112307.5,SDSS J110632.11+112307.5,UGC 06158;;; +NGC3525;Dup;11:07:18.07;-19:28:17.6;Crt;;;;;;;;;;;;;;;3497;;;;;; +NGC3526;G;11:06:56.63;+07:10:26.1;Leo;2.38;0.56;55;13.70;;11.48;11.04;10.69;23.03;Sc;;;;;3531;;;2MASX J11065662+0710261,IRAS 11043+0726,MCG +01-28-039,PGC 033635,SDSS J110656.67+071026.7,UGC 06167;;; +NGC3527;G;11:07:18.19;+28:31:40.0;UMa;1.18;1.00;171;15.10;;11.59;11.00;10.72;23.87;Sa;;;;;;;;2MASX J11071820+2831399,MCG +05-26-059,PGC 033669,SDSS J110718.18+283139.9,SDSS J110718.19+283140.0,UGC 06170;;; +NGC3528;Dup;11:07:18.07;-19:28:17.6;Crt;;;;;;;;;;;;;;;3497;;;;;; +NGC3529;G;11:07:19.12;-19:33:20.3;Crt;1.11;0.92;104;14.66;;11.54;10.88;10.62;22.89;SBb;;;;;;2625;;2MASX J11071911-1933205,ESO 570-007,IRAS 11048-1917,MCG -03-28-038,PGC 033671;;; +NGC3530;G;11:08:40.38;+57:13:48.7;UMa;0.81;0.27;99;14.40;;11.37;10.71;10.47;22.45;S0-a;;;;;;;;2MASX J11084041+5713485,MCG +10-16-064,PGC 033766,SDSS J110840.38+571348.6,SDSS J110840.38+571348.7,UGC 06188;;; +NGC3531;Dup;11:06:56.63;+07:10:26.1;Leo;;;;;;;;;;;;;;;3526;;;;;; +NGC3532;OCl;11:05:47.82;-58:46:13.8;Car;12.00;;;3.28;3.00;;;;;;;;;;;;;C 091,MWSC 1890;Wishing Well Cluster;; +NGC3533;G;11:07:07.55;-37:10:21.5;Cen;2.88;0.73;70;13.79;;10.25;9.45;9.24;24.16;SABb;;;;;;;;2MASX J11070753-3710214,ESO 377-011,ESO-LV 377-0110,IRAS 11047-3654,MCG -06-25-002,PGC 033647;;; +NGC3534;G;11:08:55.66;+26:36:37.8;Leo;1.44;0.45;88;14.98;14.04;11.62;10.77;10.36;23.79;Sab;;;;;;;;2MASX J11085568+2636372,IRAS 11062+2652,MCG +05-26-062,PGC 033786,SDSS J110855.66+263637.8,UGC 06190;;; +NGC3534B;G;11:08:57.17;+26:35:46.1;Leo;0.92;0.38;169;15.72;14.86;13.03;12.40;12.03;23.61;Sb;;;;;;;;2MASX J11085718+2635462,MCG +05-26-063,PGC 033782,SDSS J110857.16+263546.0,SDSS J110857.16+263546.1,SDSS J110857.17+263546.1,UGC 06193;;; +NGC3535;G;11:08:33.92;+04:49:54.8;Leo;1.16;0.51;178;14.30;;11.04;10.36;10.09;23.02;Sa;;;;;;;;2MASX J11083390+0449545,IRAS 11059+0505,MCG +01-29-004,PGC 033760,SDSS J110833.91+044954.8,SDSS J110833.92+044954.8,UGC 06189;;; +NGC3536;G;11:08:51.20;+28:28:32.5;UMa;0.84;0.68;161;15.20;;11.85;11.15;10.79;23.36;Sa;;;;;;;;2MASX J11085117+2828321,MCG +05-26-061,PGC 033779,SDSS J110851.19+282832.5,SDSS J110851.20+282832.5,UGC 06191;;; +NGC3537;GPair;11:08:26.70;-10:15:28.0;Crt;1.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC3537 NED01;G;11:08:26.51;-10:15:21.7;Crt;1.35;1.20;30;14.18;;10.57;9.90;9.57;;Sab;;;;;;;;2MASX J11082650-1015216,PGC 033752;;; +NGC3537 NED02;G;11:08:26.93;-10:15:31.8;Crt;1.38;1.23;170;;;;;;;;;;;;;;;PGC 033753;;; +NGC3538;**;11:11:34.34;+75:34:11.0;Dra;;;;;;;;;;;;;;;;;;;;; +NGC3539;G;11:09:08.84;+28:40:21.1;UMa;1.26;0.41;5;15.47;;11.83;11.11;10.76;24.10;S0-a;;;;;;;;2MASX J11090884+2840212,2MASX J11091059+2840132,MCG +05-26-065,PGC 033799,SDSS J110908.83+284021.0,SDSS J110908.84+284021.1;;; +NGC3540;G;11:09:16.08;+36:01:15.9;UMa;1.32;1.19;63;14.60;;11.16;10.53;10.17;23.86;S0;;;;;3548;;;2MASX J11091612+3601162,MCG +06-25-011,PGC 033806,SDSS J110916.08+360115.9,UGC 06196;;; +NGC3541;G;11:08:32.21;-10:29:30.6;Crt;1.30;1.18;90;14.00;;11.54;10.95;10.47;24.34;SABc;;;;;;;;2MASX J11083219-1029306,MCG -02-29-003,PGC 033759;;; +NGC3542;G;11:09:55.47;+36:56:47.4;UMa;0.81;0.35;45;15.00;;11.98;11.22;10.92;22.57;SBbc;;;;;;;;2MASX J11095543+3656475,IRAS 11071+3712,MCG +06-25-013,PGC 033868,SDSS J110955.46+365647.4,SDSS J110955.47+365647.3,SDSS J110955.47+365647.4;;; +NGC3543;G;11:10:56.45;+61:20:49.3;UMa;1.21;0.25;9;14.80;;12.24;11.55;11.40;22.80;Sbc;;;;;;;;2MASX J11105648+6120502,MCG +10-16-075,PGC 033953,SDSS J111056.44+612049.2,SDSS J111056.45+612049.2,SDSS J111056.45+612049.3,UGC 06213;;; +NGC3544;G;11:11:30.47;-18:17:22.2;Crt;3.06;0.97;94;12.81;;9.85;9.39;8.99;23.71;Sa;;;;;3571;;;2MASX J11113045-1817219,ESO 570-011,MCG -03-29-001,PGC 034028;;; +NGC3545A;G;11:10:12.25;+36:57:53.2;UMa;1.16;1.16;69;14.80;;;;;24.20;E-S0;;;;;;;;MCG +06-25-016,PGC 033894,SDSS J111012.25+365753.1;;; +NGC3545B;G;11:10:13.25;+36:57:59.6;UMa;0.44;0.44;60;14.80;;11.38;10.76;10.00;22.29;E;;;;;;;;2MASX J11101328+3657596,MCG +06-25-017,PGC 033893,SDSS J111013.24+365759.5,SDSS J111013.25+365759.6;;; +NGC3546;G;11:09:46.79;-13:22:51.1;Crt;1.91;0.90;101;14.00;;10.65;9.96;9.69;24.56;E-S0;;;;;;;;2MASX J11094676-1322500,MCG -02-29-007,PGC 033846;;; +NGC3547;G;11:09:55.94;+10:43:15.0;Leo;1.74;0.77;6;12.80;;11.29;10.76;10.44;22.53;Sb;;;;;;;;2MASX J11095594+1043146,MCG +02-29-007,PGC 033866,SDSS J110955.94+104315.0,SDSS J110955.95+104315.0,UGC 06209;;; +NGC3548;Dup;11:09:16.08;+36:01:15.9;UMa;;;;;;;;;;;;;;;3540;;;;;; +NGC3549;G;11:10:56.87;+53:23:16.0;UMa;2.64;0.86;39;12.80;;10.15;9.45;9.18;22.73;SBc;;;;;;;;2MASX J11105690+5323155,IRAS 11080+5339,MCG +09-18-097,PGC 033964,SDSS J111056.86+532316.1,SDSS J111056.87+532315.9,SDSS J111056.87+532316.0,UGC 06215;;; +NGC3550;GPair;11:10:38.70;+28:46:06.0;UMa;1.20;;;;;;;;;;;;;;;;;MCG +05-27-002,UGC 06214;;;Diameter of the group inferred by the author. +NGC3550 NED01;G;11:10:38.60;+28:46:04.0;UMa;0.87;0.83;20;14.62;;11.00;10.24;9.96;23.34;E-S0;;;;;;;;MCG +05-27-002 NED01,PGC 093111,UGC 06214 NED01;;;B-Mag taken from LEDA +NGC3550 NED02;G;11:10:38.40;+28:46:03.4;UMa;1.07;1.02;50;14.12;13.22;;;;23.19;S0;;;;;;;;2MASX J11103843+2846038,MCG +05-27-002 NED02,PGC 033927,SDSS J111038.39+284603.3,SDSS J111038.39+284603.4,SDSS J111038.40+284603.4,UGC 06214 NED02;;; +NGC3551;G;11:09:44.44;+21:45:32.1;Leo;1.38;0.95;38;14.80;;10.70;10.02;9.69;24.16;E;;;;;;;;2MASX J11094441+2145316,MCG +04-26-035,PGC 033836,SDSS J110944.44+214532.1,UGC 06203;;; +NGC3552;G;11:10:42.85;+28:41:35.4;UMa;0.82;0.77;55;15.10;;11.95;11.22;11.03;23.37;E-S0;;;;;;;;2MASX J11104284+2841348,MCG +05-27-003,PGC 033932,SDSS J111042.85+284135.4;;; +NGC3553;G;11:10:40.48;+28:41:05.1;UMa;0.54;0.27;2;15.10;;12.90;12.20;11.80;23.36;SBab;;;;;;;;PGC 1842970;;; +NGC3554;G;11:10:47.82;+28:39:37.0;UMa;0.74;0.61;57;15.30;;12.07;11.31;11.00;23.45;E;;;;;;;;2MASX J11104785+2839368,MCG +05-27-007,PGC 033948,SDSS J111047.82+283937.0,SDSS J111047.83+283936.9;;; +NGC3555;G;11:09:50.33;+21:48:36.7;Leo;0.60;0.29;32;13.60;;12.27;11.59;11.28;23.38;E;;;;;;;;PGC 033843,SDSS J110950.32+214837.1;;; +NGC3556;G;11:11:30.97;+55:40:26.8;UMa;3.98;1.66;79;10.70;10.06;8.02;7.37;7.04;21.70;Sc;;;;108;;;;2MASX J11113096+5540268,IRAS 11085+5556,MCG +09-18-098,PGC 034030,SDSS J111131.06+554027.4,UGC 06225;;;V-mag taken from LEDA +NGC3557;G;11:09:57.64;-37:32:21.0;Cen;4.36;3.43;32;11.50;10.40;8.16;7.50;7.20;23.46;E;;;;;;;;2MASX J11095583-3732345,2MASX J11095765-3732210,2MASX J11095773-3732216,ESO 377-016,ESO-LV 337-0160,ESO-LV 377-0160,MCG -06-25-005,PGC 033871;;; +NGC3557B;G;11:09:32.13;-37:20:58.7;Cen;1.83;0.52;110;13.30;12.21;10.05;9.35;9.09;23.65;E;;;;;;;;2MASX J11093213-3720586,ESO 377-015,ESO-LV 377-0150,MCG -06-25-004,PGC 033824;;; +NGC3558;G;11:10:55.87;+28:32:37.7;UMa;0.99;0.91;115;14.80;;11.31;10.63;10.28;23.46;E;;;;;;;;2MASX J11105584+2832374,MCG +05-27-008,PGC 033960,SDSS J111055.86+283237.7,SDSS J111055.87+283237.6,SDSS J111055.87+283237.7;;; +NGC3559;G;11:10:45.21;+12:00:58.1;Leo;1.50;0.91;51;13.70;;11.55;10.72;10.67;23.14;SBc;;;;;3560;;;2MASX J11104522+1200580,MCG +02-29-008,PGC 033940,SDSS J111045.20+120058.1,SDSS J111045.21+120058.1,UGC 06217;;; +NGC3560;Dup;11:10:45.21;+12:00:58.1;Leo;;;;;;;;;;;;;;;3559;;;;;; +NGC3561;G;11:11:13.20;+28:41:47.3;UMa;1.71;1.71;175;14.70;;11.49;10.73;10.47;24.44;S0-a;;;;;;;;2MASX J11111316+2841473,IRAS 11085+2859,MCG +05-27-010,PGC 033991,SDSS J111113.18+284147.0,SDSS J111113.19+284147.0,SDSS J111113.19+284147.1,UGC 06224 NED02;the Guitar;Component 'a)' in UGC notes. Called 'NGC 3561B' in RC2.; +NGC3562;G;11:12:58.68;+72:52:45.5;UMa;1.69;1.26;165;13.20;;10.37;9.63;9.38;23.16;E;;;;;;;;2MASX J11125867+7252454,MCG +12-11-011,PGC 034134,UGC 06242;;; +NGC3563;GPair;11:11:24.50;+26:57:45.0;Leo;1.40;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC3563A;G;11:11:23.73;+26:57:42.7;Leo;0.58;0.50;41;14.60;;;;;23.22;S0-a;;;;;;;;MCG +05-27-013,PGC 034012,SDSS J111123.73+265742.6,SDSS J111123.73+265742.7,UGC 06234 NOTES01;;; +NGC3563B;G;11:11:25.20;+26:57:48.9;Leo;1.13;0.82;15;;;11.19;10.38;10.13;23.73;S0;;;;;;;;2MASX J11112519+2657491,MCG +05-27-014,PGC 034025,SDSS J111125.21+265748.9,SDSS J111125.21+265749.0,UGC 06234;;; +NGC3564;G;11:10:36.38;-37:32:51.3;Cen;1.95;1.09;16;13.31;12.21;9.88;9.20;8.95;23.34;S0;;;;;;;;2MASX J11103639-3732513,ESO 377-018,ESO-LV 377-0180,MCG -06-25-006,PGC 033923;;; +NGC3565;G;11:07:47.65;-20:01:17.6;Crt;0.68;0.52;126;15.65;;13.08;12.44;12.24;23.30;E-S0;;;;;3566;;;ESO 570-008,PGC 033701;;;LEDA says NGC 3565 and NGC 3566 are the same object. +NGC3566;Dup;11:07:47.65;-20:01:17.6;Crt;;;;;;;;;;;;;;;3565;;;;;; +NGC3567;G;11:11:18.68;+05:50:10.7;Leo;1.22;0.46;115;14.40;;11.48;10.94;10.53;23.67;S0;;;;;;;;2MASX J11111869+0550107,MCG +01-29-011,PGC 034004,UGC 06230;;; +NGC3568;G;11:10:48.57;-37:26:52.3;Cen;2.70;1.18;6;13.01;12.58;10.09;9.46;9.12;23.14;Sc;;;;;;;;2MASX J11104858-3726523,ESO 377-020,ESO-LV 377-0200,IRAS 11084-3710,MCG -06-25-009,PGC 033952;;; +NGC3569;G;11:12:08.09;+35:27:07.7;UMa;1.15;1.07;50;14.50;;11.17;10.46;10.21;23.48;S0;;;;;;;;2MASX J11120804+3527072,MCG +06-25-020,PGC 034075,SDSS J111208.09+352707.5,UGC 06238;;; +NGC3570;G;11:12:03.35;+27:35:23.2;Leo;1.06;0.99;100;15.00;;11.38;10.66;10.35;23.73;S0;;;;;;;;2MASX J11120331+2735227,MCG +05-27-019,PGC 034071,SDSS J111203.34+273523.1,SDSS J111203.34+273523.2,SDSS J111203.35+273523.2,UGC 06240;;; +NGC3571;Dup;11:11:30.47;-18:17:22.2;Crt;;;;;;;;;;;;;;;3544;;;;;; +NGC3572;OCl;11:10:19.20;-60:14:54.1;Car;4.08;;;6.82;6.60;;;;;;;;;;;;;MWSC 1906;;; +NGC3573;G;11:11:18.57;-36:52:31.9;Cen;2.55;1.08;4;13.18;12.87;9.82;9.07;8.83;23.98;S0-a;;;;;;;;2MASX J11111855-3652318,ESO 377-022,ESO-LV 377-0220,IRAS 11089-3636,MCG -06-25-011,PGC 034005;;; +NGC3574;G;11:12:12.13;+27:37:29.4;Leo;0.73;0.59;31;15.70;;12.22;11.48;11.34;23.80;E;;;;;;;;2MASX J11121211+2737287,MCG +05-27-022,PGC 034080,SDSS J111212.12+273729.3,SDSS J111212.13+273729.4;;; +NGC3575;Dup;10:13:31.59;+22:44:15.2;Leo;;;;;;;;;;;;;;;3162;;;;;; +NGC3576;HII;11:11:31.67;-61:21:46.8;Car;3.00;3.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC3577;G;11:13:44.90;+48:16:21.8;UMa;1.16;1.01;61;14.70;;11.67;11.05;10.90;23.71;Sa;;;;;;;;2MASX J11134488+4816212,MCG +08-21-006,PGC 034195,SDSS J111344.89+481621.7,SDSS J111344.89+481621.8,SDSS J111344.90+481621.7,UGC 06257;;; +NGC3578;Other;11:12:52.79;-15:57:26.1;Crt;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3579;Neb;11:11:59.60;-61:14:35.6;Car;20.00;15.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC3580;G;11:13:15.93;+03:39:26.4;Leo;0.85;0.29;175;14.70;;11.69;10.97;10.71;23.19;S0;;;;;;;;2MASX J11131591+0339265,MCG +01-29-018,PGC 034159,SDSS J111315.92+033926.3,SDSS J111315.92+033926.4;;; +NGC3581;HII;11:12:01.96;-61:18:06.7;Car;;;;;;;;;;;;;;;;;;;;Within 10 degrees of the galactic plane.; +NGC3582;Neb;11:12:11.97;-61:16:24.8;Car;;;;;;;;;;;;;;;;;;;;; +NGC3583;G;11:14:10.89;+48:19:06.7;UMa;2.24;1.26;127;11.60;;9.36;8.73;8.38;22.43;Sb;;;;;;;;2MASX J11141097+4819061,IRAS 11113+4835,MCG +08-21-008,PGC 034232,SDSS J111410.89+481906.6,SDSS J111410.89+481906.7,UGC 06263;;; +NGC3584;Neb;11:12:19.79;-61:13:43.0;Car;;;;;;;;;;;;;;;;;;;;; +NGC3585;G;11:13:17.09;-26:45:17.4;Hya;6.61;3.27;104;10.64;;7.61;6.94;6.70;23.74;E;;;;;;;;2MASX J11131710-2645179,ESO 502-025,ESO-LV 502-0250,MCG -04-27-004,PGC 034160;;; +NGC3586;Neb;11:12:29.94;-61:21:08.1;Car;;;;;;;;;;;;;;;;;;;;; +NGC3587;PN;11:14:47.71;+55:01:08.5;UMa;2.83;;;11.60;9.90;16.71;;;;;14.36;15.66;16.01;097;;;;IRAS 11119+5517,PN G148.4+57.0,SDSS J111447.71+550108.5;Owl Nebula;; +NGC3588;GPair;11:14:02.70;+20:23:19.0;Leo;0.55;0.55;10;15.30;;11.40;10.62;10.43;22.73;Sa;;;;;;;;2MASXJ11140245+2023140,MCG +04-27-009,PGC 034219,UGC 06264;;; +NGC3589;G;11:15:13.33;+60:41:59.7;UMa;1.49;0.76;50;14.50;;;;;23.52;SABc;;;;;;;;MCG +10-16-096,PGC 034308,UGC 06275;;; +NGC3590;OCl;11:12:58.97;-60:47:20.5;Car;5.10;;;8.50;8.20;;;;;;;;;;;;;MWSC 1920;;; +NGC3591;G;11:14:03.31;-14:05:14.4;Crt;1.22;0.77;151;14.00;;10.75;10.06;9.70;23.51;S0-a;;;;;;;;2MASX J11140326-1405140,MCG -02-29-012,PGC 034220;;; +NGC3592;G;11:14:27.37;+17:15:36.0;Leo;2.13;0.57;118;14.80;;11.71;10.95;10.78;23.80;Sc;;;;;;;;2MASX J11142724+1715367,MCG +03-29-011,PGC 034248,SDSS J111427.36+171535.9,SDSS J111427.37+171536.0,UGC 06267;;The 2MASS position is 9 arcsec southeast of the optical peak.; +NGC3593;G;11:14:37.00;+12:49:03.6;Leo;4.69;1.85;91;11.80;;8.41;7.63;7.42;23.82;S0-a;;;;;;;;2MASX J11143700+1249048,IRAS 11119+1305,MCG +02-29-014,PGC 034257,SDSS J111436.99+124903.6,SDSS J111437.00+124903.6,UGC 06272;;; +NGC3594;G;11:16:13.99;+55:42:15.6;UMa;1.25;1.06;8;15.20;;11.43;10.64;10.30;23.89;S0;;;;;;;;2MASX J11161400+5542150,MCG +09-19-022,PGC 034374,SDSS J111613.98+554215.4,SDSS J111613.98+554215.6,SDSS J111613.99+554215.6,UGC 06286;;NGC identification is not certain.; +NGC3595;G;11:15:25.55;+47:26:49.3;UMa;1.51;0.63;176;13.00;;10.34;9.65;9.43;22.50;S0;;;;;;;;2MASX J11152555+4726497,MCG +08-21-009,PGC 034325,SDSS J111525.54+472649.3,UGC 06280;;; +NGC3596;G;11:15:06.21;+14:47:13.3;Leo;3.55;3.37;65;12.01;11.49;9.63;8.99;8.70;23.24;SABc;;;;;;;;2MASX J11150622+1447136,MCG +03-29-013,PGC 034298,SDSS J111506.20+144713.2,UGC 06277;;; +NGC3597;G;11:14:41.97;-23:43:39.7;Crt;1.49;1.06;84;13.62;;10.87;10.13;9.79;23.28;S0-a;;;;;;;;2MASX J11144196-2343396,ESO 503-003,ESO-LV 503-0030,IRAS 11122-2327,MCG -04-27-005,PGC 034266,TYC 6649-955-1;;; +NGC3598;G;11:15:11.67;+17:15:45.7;Leo;1.61;1.26;38;13.50;;10.52;9.84;9.56;23.28;E-S0;;;;;;;;2MASX J11151168+1715459,MCG +03-29-014,PGC 034306,UGC 06278;;; +NGC3599;G;11:15:26.96;+18:06:37.4;Leo;2.40;2.18;105;13.00;;10.18;9.50;9.27;23.54;S0;;;;;;;;2MASX J11152695+1806373,MCG +03-29-015,PGC 034326,UGC 06281;;; +NGC3600;G;11:15:52.01;+41:35:27.7;UMa;1.87;0.59;4;12.60;;11.01;10.31;10.20;22.72;SBa;;;;;;;;2MASX J11155197+4135289,IRAS 11130+4152,MCG +07-23-038,PGC 034353,SDSS J111552.00+413527.7,SDSS J111552.01+413527.7,UGC 06283;;The Bologna position is 6 arcsec northwest of the nucleus.; +NGC3601;G;11:15:33.30;+05:06:55.5;Leo;0.51;0.43;17;14.10;;11.93;11.23;10.89;21.41;SBab;;;;;;;;2MASX J11153331+0506554,IRAS 11129+0523,MCG +01-29-024,PGC 034335,SDSS J111533.30+050655.5,UGC 06282;;; +NGC3602;G;11:15:48.32;+17:24:58.0;Leo;1.04;0.43;48;15.70;;12.97;12.12;11.82;24.09;SBa;;;;;;;;2MASX J11154832+1724579,MCG +03-29-017,PGC 034351,SDSS J111548.31+172458.0,SDSS J111548.32+172458.0;;; +NGC3603;Cl+N;11:15:06.59;-61:15:40.4;Car;3.30;;;;;;;;;;;;;;;;;MWSC 1926;;; +NGC3604;G;11:17:30.17;+04:33:20.1;Leo;1.40;0.75;11;12.40;;10.36;9.73;9.50;22.02;Sa;;;;;3611;;;2MASX J11173015+0433195,IRAS 11149+0449,MCG +01-29-026,PGC 034478,SDSS J111730.14+043318.7,SDSS J111730.17+043320.0,UGC 06305;;; +NGC3605;G;11:16:46.59;+18:01:01.8;Leo;1.25;0.71;19;12.70;;10.54;9.91;9.70;22.48;E;;;;;;;;2MASX J11164662+1801017,MCG +03-29-019,PGC 034415,SDSS J111646.58+180101.7,SDSS J111646.59+180101.7,UGC 06295;;; +NGC3606;G;11:16:15.63;-33:49:38.8;Hya;1.59;1.49;10;13.42;;10.35;9.61;9.39;23.28;E;;;;;;;;2MASX J11161564-3349386,ESO 377-032,ESO-LV 377-0320,MCG -05-27-004,PGC 034378;;; +NGC3607;G;11:16:54.64;+18:03:06.3;Leo;4.59;4.03;120;13.84;12.76;7.91;7.28;6.99;22.99;E-S0;;;;;;;;2MASX J11165465+1803065,MCG +03-29-020,PGC 034426,SDSS J111654.63+180306.3,UGC 06297;;; +NGC3608;G;11:16:58.95;+18:08:55.3;Leo;3.18;2.67;78;11.70;;8.95;8.38;8.10;22.95;E;;;;;;;;2MASX J11165896+1808547,MCG +03-29-022,PGC 034433,SDSS J111658.95+180855.2,UGC 06299;;; +NGC3609;G;11:17:50.62;+26:37:32.9;Leo;1.17;0.97;49;14.10;;10.92;10.24;9.90;22.96;SABa;;;;;;;;2MASX J11175059+2637332,MCG +05-27-043,PGC 034511,SDSS J111750.61+263732.8,SDSS J111750.62+263732.9,UGC 06310;;; +NGC3610;G;11:18:25.27;+58:47:10.6;UMa;2.39;2.37;135;11.40;;8.84;8.17;7.91;22.39;E;;;;;;;;2MASX J11182527+5847104,MCG +10-16-107,PGC 034566,SDSS J111825.27+584710.6,UGC 06319;;; +NGC3611;Dup;11:17:30.17;+04:33:20.1;Leo;;;;;;;;;;;;;;;3604;;;;;; +NGC3612;G;11:18:14.72;+26:37:14.0;Leo;0.93;0.64;169;15.00;;12.05;11.50;11.32;23.27;Scd;;;;;;;;2MASX J11181468+2637143,MCG +05-27-051,PGC 034546,SDSS J111814.70+263713.9,SDSS J111814.72+263714.0,UGC 06321;;; +NGC3613;G;11:18:36.11;+58:00:00.0;UMa;3.55;1.78;100;11.60;;8.93;8.24;8.00;23.31;E;;;;;;;;2MASX J11183613+5759597,MCG +10-16-109,PGC 034583,SDSS J111836.10+580000.0,UGC 06323;;; +NGC3614;G;11:18:21.32;+45:44:53.6;UMa;2.50;1.74;88;12.70;;10.52;9.98;9.63;23.44;SABc;;;;;;;;2MASX J11182139+4544538,IRAS 11155+4601,MCG +08-21-015,PGC 034561,SDSS J111821.32+454453.5,SDSS J111821.32+454453.6,SDSS J111821.33+454453.4,UGC 06318;;; +NGC3614A;G;11:18:11.87;+45:43:00.8;UMa;0.69;0.62;34;16.00;;;;;;Sm;;;;;;;;MCG +08-21-014,PGC 034562,SDSS J111811.87+454300.7,SDSS J111811.87+454300.8;;MCG misprints dec as +48d01m.; +NGC3615;G;11:18:06.65;+23:23:50.4;Leo;1.51;0.91;40;14.00;;10.45;9.74;9.45;23.66;E;;;;;;;;2MASX J11180666+2323502,MCG +04-27-012,PGC 034535,SDSS J111806.65+232350.3,UGC 06313;;; +NGC3616;*;11:18:08.87;+14:45:54.8;Leo;;;;;;;;;;;;;;;;;;SDSS J111808.86+144554.8;;; +NGC3617;G;11:17:50.86;-26:08:03.9;Hya;1.79;1.22;137;13.45;;10.62;9.98;9.78;23.76;E;;;;;;;;2MASX J11175085-2608040,ESO 503-012,ESO-LV 503-0120,MCG -04-27-008,PGC 034513,UGCA 231;;; +NGC3618;G;11:18:32.54;+23:28:08.7;Leo;0.89;0.77;3;14.40;;11.73;11.05;10.75;22.78;SABb;;;;;;;;2MASX J11183255+2328080,MCG +04-27-014,PGC 034575,SDSS J111832.54+232808.7,UGC 06327;;; +NGC3619;G;11:19:21.56;+57:45:28.2;UMa;3.89;3.08;25;12.60;;9.57;8.87;8.58;24.20;S0-a;;;;;;;;2MASX J11192162+5745276,IRAS 11164+5802,MCG +10-16-115,PGC 034641,SDSS J111921.56+574528.1,UGC 06330;;; +NGC3620;G;11:16:04.68;-76:12:58.7;Cha;3.16;0.84;80;15.90;;8.83;7.93;7.57;25.86;SBab;;;;;;;;2MASX J11160468-7612587,ESO 038-010,IRAS 11143-7556,PGC 034366;;; +NGC3621;G;11:18:16.51;-32:48:50.6;Hya;9.79;4.03;161;9.44;9.56;7.46;6.80;6.60;23.03;SBcd;;;;;;;;2MASX J11181630-3248453,ESO 377-037,ESO-LV 377-0370,IRAS 11158-3232,MCG -05-27-008,PGC 034554,UGCA 232;;; +NGC3622;G;11:20:12.37;+67:14:29.6;UMa;1.25;0.51;9;13.70;;11.62;11.00;10.84;22.06;Scd;;;;;;;;2MASX J11201242+6714304,IRAS 11171+6730,PGC 034692,SDSS J112012.35+671429.7,SDSS J112012.36+671429.7,SDSS J112012.37+671429.6,SDSS J112012.53+671429.1,UGC 06339;;; +NGC3623;G;11:18:55.92;+13:05:32.5;Leo;7.64;1.97;173;9.60;9.32;6.99;6.31;6.07;22.73;Sa;;;;065;;;;2MASX J11185595+1305319,IRAS 11163+1322,MCG +02-29-018,PGC 034612,UGC 06328;;;V-mag taken from LEDA +NGC3624;G;11:18:50.98;+07:31:17.0;Leo;0.91;0.51;166;14.70;;11.97;11.35;10.99;23.02;SBb;;;;;;;;2MASX J11185095+0731172,MCG +01-29-029,PGC 034599,SDSS J111850.98+073116.9,SDSS J111850.98+073117.0;;; +NGC3625;G;11:20:31.34;+57:46:53.1;UMa;1.91;0.50;151;13.90;;11.87;11.12;10.95;23.28;Sb;;;;;;;;2MASX J11203125+5746527,MCG +10-16-120,PGC 034718,SDSS J112031.33+574653.0,SDSS J112031.34+574653.1,UGC 06348;;; +NGC3626;G;11:20:03.81;+18:21:24.6;Leo;2.94;1.94;157;11.20;;9.10;8.45;8.16;22.86;S0-a;;;;;3632;;;2MASX J11200379+1821244,C 040,MCG +03-29-032,PGC 034684,SDSS J112003.81+182124.6,UGC 06343;;; +NGC3627;G;11:20:14.96;+12:59:29.5;Leo;10.28;4.61;168;9.65;8.92;6.84;6.15;5.88;22.96;Sb;;;;066;;;;2MASX J11201502+1259286,IRAS 11176+1315,MCG +02-29-019,PGC 034695,SDSS J112014.98+125929.4,UGC 06346;;The position in 1989H&RHI.C...0000H is incorrect.; +NGC3628;G;11:20:16.97;+13:35:22.9;Leo;11.04;3.44;104;10.42;9.48;7.17;6.38;6.07;23.13;SBb;;;;;;;;2MASX J11201701+1335221,IRAS 11176+1351,MCG +02-29-020,PGC 034697,SDSS J112017.01+133522.8,SDSS J112017.01+133522.9,UGC 06350;;; +NGC3629;G;11:20:31.81;+26:57:48.1;Leo;1.77;1.14;35;12.90;;11.38;10.70;10.50;22.77;SABc;;;;;;;;2MASX J11203181+2657482,MCG +05-27-058,PGC 034719,SDSS J112031.80+265748.0,SDSS J112031.80+265748.1,UGC 06352;;HOLM 247B is a star.; +NGC3630;G;11:20:16.98;+02:57:51.8;Leo;1.92;0.88;38;12.91;;9.74;9.06;8.84;22.98;S0;;;;;3645;;;2MASX J11201698+0257510,MCG +01-29-031,PGC 034698,SDSS J112016.98+025751.7,UGC 06349;;; +NGC3631;G;11:21:02.87;+53:10:10.4;UMa;3.72;3.08;118;11.00;;8.91;8.22;7.99;22.15;Sc;;;;;;;;2MASX J11210294+5310099,IRAS 11181+5326,MCG +09-19-047,PGC 034767,SDSS J112102.87+531010.4,UGC 06360;;One of two 6cm sources associated with [WB92] 1117+5321; +NGC3632;Dup;11:20:03.81;+18:21:24.6;Leo;;;;;;;;;;;;;;;3626;;;;;; +NGC3633;G;11:20:26.22;+03:35:08.2;Leo;1.19;0.44;71;14.45;;10.97;10.21;9.87;23.07;Sa;;;;;;;;2MASX J11202621+0335077,IRAS 11178+0351,MCG +01-29-032,PGC 034711,SDSS J112026.21+033508.1,SDSS J112026.21+033508.2,SDSS J112026.22+033508.2,UGC 06351;;; +NGC3634;G;11:20:30.31;-09:00:49.5;Crt;0.35;0.21;;15.50;;;;;;E;;;;;;;;MCG -01-29-008,PGC 034714;;; +NGC3635;G;11:20:31.39;-09:00:49.0;Crt;1.35;1.35;55;16.00;;11.52;10.72;10.51;24.03;SABb;;;;;;;;2MASX J11203133-0900495,MCG -01-29-009,PGC 034717,SDSS J112031.37-090049.0;;; +NGC3636;G;11:20:25.04;-10:16:54.4;Crt;2.51;1.29;91;13.00;;;;;24.16;E;;;;;;;;MCG -02-29-019,PGC 034709;;; +NGC3637;G;11:20:39.57;-10:15:26.5;Crt;2.45;2.14;20;13.00;;9.78;9.12;8.86;24.21;S0;;;;;;;;2MASX J11203957-1015264,MCG -02-29-020,PGC 034731;;; +NGC3638;G;11:20:10.03;-08:06:20.5;Crt;1.60;0.38;140;15.00;;;;;23.65;Sb;;;;;;;;2MASX J11201003-0806205,IRAS 11176-0749,MCG -01-29-007,PGC 034688;;; +NGC3639;G;11:21:35.68;+18:27:30.9;Leo;1.10;0.85;27;14.00;;11.53;10.75;10.58;22.95;Sab;;;;;;;;2MASX J11213572+1827293,MCG +03-29-036,PGC 034819,SDSS J112135.68+182730.9,UGC 06374;;; +NGC3640;G;11:21:06.85;+03:14:05.4;Leo;4.33;3.81;98;11.36;10.44;8.44;7.79;7.52;23.38;E;;;;;;;;2MASX J11210685+0314051,MCG +01-29-033,PGC 034778,UGC 06368;;; +NGC3641;G;11:21:08.81;+03:11:40.5;Leo;0.99;0.82;178;14.10;13.20;11.14;10.46;10.23;22.96;E;;;;;;;;2MASX J11210878+0311401,MCG +01-29-034,PGC 034780,SDSS J112108.81+031140.5,UGC 06370;;This entry was added to CGCG in vol III, 'Errors and Omissions'.; +NGC3642;G;11:22:17.89;+59:04:28.3;UMa;4.27;3.65;120;14.86;14.04;9.87;9.12;8.97;23.48;Sbc;;;;;;;;2MASX J11221801+5904272,IRAS 11194+5920,MCG +10-16-128,PGC 034889,SDSS J112217.89+590428.2,SDSS J112217.89+590428.3,UGC 06385;;; +NGC3643;G;11:21:24.99;+03:00:50.1;Leo;0.95;0.74;107;14.80;;11.89;11.24;11.03;23.25;S0-a;;;;;;;;2MASX J11212495+0300501,MCG +01-29-036,PGC 034802,SDSS J112124.99+030050.1;;The position in 1992PASP..104...57V is 19 arcsec northeast of the nucleus.; +NGC3644;G;11:21:32.87;+02:48:37.6;Leo;1.43;0.61;65;14.60;;11.99;11.25;10.87;24.16;Sa;;;;;;0684;;2MASX J11213286+0248379,MCG +01-29-037,PGC 034814,SDSS J112132.87+024837.5,SDSS J112132.87+024837.6,UGC 06373;;; +NGC3645;Dup;11:20:16.98;+02:57:51.8;Leo;;;;;;;;;;;;;;;3630;;;;;; +NGC3646;G;11:21:43.08;+20:10:10.4;Leo;3.09;1.48;45;11.78;11.13;9.43;8.84;8.48;22.37;Sc;;;;;;;;2MASX J11214310+2010103,MCG +03-29-037,PGC 034836,SDSS J112143.07+201010.3,SDSS J112143.08+201010.3,UGC 06376;;; +NGC3647;G;11:21:38.58;+02:53:30.2;Leo;0.39;0.38;75;15.40;;12.62;11.84;11.75;22.52;E;;;;;;;;2MASX J11213859+0253309,PGC 034815,SDSS J112138.57+025330.2;;; +NGC3648;G;11:22:31.51;+39:52:36.8;UMa;1.19;0.73;73;13.57;12.64;10.39;9.71;9.46;22.72;S0;;;;;;;;2MASX J11223148+3952370,MCG +07-23-043,PGC 034908,SDSS J112231.51+395236.8,UGC 06389;;The FIRST source is 24 arcsec southeast of the optical nucleus.; +NGC3649;G;11:22:14.74;+20:12:30.7;Leo;0.76;0.54;141;14.57;;11.44;10.80;10.40;22.82;SBa;;;;;;0682;;2MASX J11221474+2012310,MCG +03-29-038,PGC 034883,UGC 06386;;; +NGC3650;G;11:22:35.39;+20:42:14.1;Leo;1.91;0.32;54;14.60;;10.89;10.09;9.79;23.51;Sb;;;;;;;;2MASX J11223537+2042145,MCG +04-27-031,PGC 034913,SDSS J112235.39+204214.1,UGC 06391;;; +NGC3651;GPair;11:22:26.30;+24:17:50.0;Leo;1.00;;;;;;;;;;;;;;;;;MCG +04-27-028,UGC 06388;;;Diameter of the group inferred by the author. +NGC3651 NED01;G;11:22:26.32;+24:17:56.7;Leo;1.35;1.10;137;14.60;;10.78;10.12;9.89;23.67;E;;;;;;;;2MASX J11222635+2417567,MCG +04-27-028 NED01,PGC 034898,SDSS J112226.34+241756.6,SDSS J112226.35+241756.6,UGC 06388 NED01;;; +NGC3651 NED02;G;11:22:26.38;+24:17:43.6;Leo;0.78;0.36;99;15.40;;;;;23.38;S0;;;;;;;;MCG +04-27-028 NED02,PGC 034899,UGC 06388 NED02;;; +NGC3652;G;11:22:39.03;+37:45:54.4;UMa;2.48;0.77;153;12.60;;11.73;10.95;10.46;22.61;Sc;;;;;;;;2MASX J11223905+3745541,IRAS 11199+3802,MCG +06-25-055,PGC 034917,SDSS J112239.02+374554.3,SDSS J112239.03+374554.3,SDSS J112239.03+374554.4,UGC 06392;;; +NGC3653;G;11:22:30.07;+24:16:45.4;Leo;1.21;0.65;79;15.00;;11.41;10.64;10.33;23.71;S0;;;;;;;;2MASX J11223008+2416457,MCG +04-27-029,PGC 034905,SDSS J112230.06+241645.3;;; +NGC3654;G;11:24:10.74;+69:24:47.1;UMa;1.46;0.84;45;13.40;;11.47;10.86;10.52;22.44;Sbc;;;;;;;;2MASX J11241072+6924471,IRAS 11211+6941,MCG +12-11-022,PGC 035025,UGC 06407;;; +NGC3655;G;11:22:54.62;+16:35:24.1;Leo;1.45;1.00;32;12.58;11.90;9.80;9.11;8.83;21.56;Sc;;;;;;;;2MASX J11225460+1635246,IRAS 11202+1651,MCG +03-29-039,PGC 034935,SDSS J112254.61+163524.0,SDSS J112254.61+163524.1,UGC 06396;;Multiple SDSS entries describe this object.; +NGC3656;G;11:23:38.65;+53:50:31.6;UMa;1.46;0.97;168;14.25;12.75;10.30;9.59;9.28;22.71;S?;;;;;;;;2MASX J11233859+5350313,IRAS 11208+5406,MCG +09-19-063,PGC 034989,SDSS J112338.81+535031.7,SDSS J112338.82+535031.8,UGC 06403;;; +NGC3657;G;11:23:55.58;+52:55:15.6;UMa;0.99;0.88;169;13.10;;11.13;10.47;10.29;22.14;SABc;;;;;;;;2MASX J11235555+5255155,MCG +09-19-065,PGC 035002,SDSS J112355.58+525515.5,UGC 06406;;; +NGC3658;G;11:23:58.26;+38:33:44.4;UMa;1.72;1.59;30;13.30;;10.06;9.39;9.13;23.03;S0;;;;;;;;2MASX J11235824+3833447,MCG +07-24-002,PGC 035003,SDSS J112358.26+383344.4,UGC 06409;;; +NGC3659;G;11:23:45.54;+17:49:07.2;Leo;1.96;1.04;59;12.70;;11.06;10.52;10.28;22.59;Sd;;;;;;;;2MASX J11234549+1749068,IRAS 11211+1805,MCG +03-29-040,PGC 034995,SDSS J112345.53+174907.2,UGC 06405;;; +NGC3660;G;11:23:32.28;-08:39:30.8;Crt;2.56;2.17;105;15.34;14.45;10.54;9.91;9.52;23.40;Sbc;;;;;;;;2MASX J11233229-0839308,IRAS 11210-0823,MCG -01-29-016,PGC 034980,UGCA 234;;; +NGC3661;G;11:23:38.43;-13:49:52.0;Crt;1.77;0.75;139;14.00;;10.82;10.10;9.84;24.08;S0-a;;;;;;0689;;2MASX J11233844-1349520,MCG -02-29-022,PGC 034986;;; +NGC3662;G;11:23:46.46;-01:06:17.5;Leo;1.32;0.76;19;13.71;;10.71;10.01;9.73;22.68;Sbc;;;;;;;;IRAS 11211-0049,MCG +00-29-025,PGC 034996,SDSS J112346.46-010617.5,UGC 06408;;Mistakenly called a triple galaxy in MCG and UGC.; +NGC3663;G;11:23:59.91;-12:17:47.2;Crt;1.98;1.43;85;13.73;;;;;23.10;Sbc;;;;;;;;2MASX J11235989-1217470,IRAS 11214-1200,MCG -02-29-023,PGC 035006;;; +NGC3664;G;11:24:24.25;+03:19:30.0;Leo;1.45;0.94;34;13.60;;13.08;12.53;12.32;22.48;SBm;;;;;;;;2MASX J11242425+0319299,IRAS 11218+0336,MCG +01-29-041,PGC 035041,SDSS J112424.70+031934.0,UGC 06419;;The UZC position is for a knot northeast of the nucleus.; +NGC3664A;G;11:24:25.10;+03:13:21.0;Leo;0.63;0.51;1;15.40;;;;;23.55;Sm;;;;;;;;PGC 035042,UGC 06418;;; +NGC3665;G;11:24:43.67;+38:45:46.3;UMa;4.06;3.00;29;13.26;11.62;8.62;7.93;7.68;23.55;S0;;;;;;;;2MASX J11244363+3845460,IRAS 11220+3902,MCG +07-24-003,PGC 035064,SDSS J112443.66+384546.0,UGC 06426;;; +NGC3666;G;11:24:26.07;+11:20:32.0;Leo;3.44;0.99;97;12.50;;10.17;9.47;9.23;23.12;SBc;;;;;;;;2MASX J11242608+1120312,IRAS 11218+1137,MCG +02-29-025,PGC 035043,SDSS J112426.06+112031.9,SDSS J112426.07+112032.0,UGC 06420;;; +NGC3667;G;11:24:17.02;-13:51:26.3;Crt;2.10;1.20;82;13.00;;10.19;9.52;9.28;23.87;Sab;;;;;;;;2MASX J11241702-1351259,MCG -02-29-025,PGC 035028;;; +NGC3667A;G;11:24:21.49;-13:51:20.9;Crt;0.92;0.68;41;14.25;;11.47;10.84;10.46;23.19;Sb;;;;;;;;2MASX J11242148-1351209,MCG -02-29-026,PGC 035034;;; +NGC3668;G;11:25:30.44;+63:26:46.8;UMa;1.82;1.11;133;13.10;;10.34;9.72;9.48;22.86;SBbc;;;;;;;;2MASX J11253042+6326464,IRAS 11225+6343,MCG +11-14-023,PGC 035123,SDSS J112530.42+632647.0,SDSS J112530.44+632646.7,SDSS J112530.44+632646.8,SDSS J112530.45+632646.6,UGC 06430;;; +NGC3669;G;11:25:26.76;+57:43:16.5;UMa;1.79;0.45;154;12.90;;11.38;10.76;10.58;22.16;Scd;;;;;;;;2MASX J11252681+5743161,IRAS 11226+5759,MCG +10-16-135,PGC 035113,SDSS J112526.76+574316.4,SDSS J112526.76+574316.5,UGC 06431;;; +NGC3670;G;11:24:49.66;+23:56:42.8;Leo;1.06;0.66;36;14.60;;11.02;10.37;10.09;23.11;S0-a;;;;;;;;2MASX J11244968+2356428,MCG +04-27-033,PGC 035067,SDSS J112449.65+235642.8,UGC 06427;;; +NGC3671;G;11:25:52.55;+60:28:46.5;UMa;0.82;0.67;1;15.70;;12.58;11.78;11.56;23.92;E-S0;;;;;;;;2MASX J11255254+6028470,PGC 035149,SDSS J112552.54+602846.3,SDSS J112552.54+602846.4,SDSS J112552.54+602846.7;;; +NGC3672;G;11:25:02.47;-09:47:43.4;Crt;2.90;1.69;7;11.90;;9.20;8.56;8.27;22.68;Sc;;;;;;;;2MASX J11250247-0947434,IRAS 11225-0931,MCG -02-29-028,PGC 035088,SDSS J112502.43-094743.2,UGCA 235;;; +NGC3673;G;11:25:12.85;-26:44:12.2;Hya;3.48;2.32;74;12.31;;9.49;8.78;8.55;23.63;Sb;;;;;;;;2MASX J11251284-2644121,ESO 503-016,ESO-LV 503-0160,IRAS 11227-2627,MCG -04-27-010,PGC 035097,UGCA 236;;; +NGC3674;G;11:26:26.61;+57:02:54.2;UMa;1.59;0.47;32;13.10;;10.32;9.63;9.39;22.68;S0;;;;;;;;2MASX J11262660+5702538,MCG +10-16-138,PGC 035191,SDSS J112626.60+570254.1,UGC 06444;;; +NGC3675;G;11:26:08.58;+43:35:09.3;UMa;5.90;3.27;178;11.04;;7.84;7.10;6.86;23.13;Sb;;;;;;;;2MASX J11260858+4335093,IRAS 11234+4351,MCG +07-24-004,PGC 035164,SDSS J112608.55+433509.6,UGC 06439;;; +NGC3676;G;11:25:37.50;-11:08:22.8;Crt;1.01;0.76;151;15.00;;11.20;10.57;10.32;23.43;E-S0;;;;;;;;2MASX J11253748-1108225,MCG -02-29-029,PGC 035131;;; +NGC3677;G;11:26:17.76;+46:58:26.8;UMa;1.49;1.29;130;13.50;;11.12;10.44;10.11;23.43;S0-a;;;;;;;;2MASX J11261773+4658269,IRAS 11235+4714,MCG +08-21-035,PGC 035181,SDSS J112617.75+465826.8,SDSS J112617.76+465826.7,SDSS J112617.76+465826.8,UGC 06441;;; +NGC3678;G;11:26:15.76;+27:52:01.7;Leo;0.71;0.68;50;14.20;;12.53;12.15;11.56;22.34;Sbc;;;;;;;;2MASX J11261572+2752015,MCG +05-27-071,PGC 035177,SDSS J112615.75+275201.6,SDSS J112615.76+275201.7,UGC 06443;;; +NGC3679;G;11:21:48.06;-05:45:27.7;Leo;1.21;0.95;90;14.65;;11.15;10.54;10.22;24.06;E;;;;;;;;2MASX J11214807-0545274,MCG -01-29-012,PGC 034844;;NGC identification is not certain.; +NGC3680;OCl;11:25:37.08;-43:15:00.4;Cen;5.70;;;8.40;7.60;;;;;;;;;;;;;MWSC 1942;;; +NGC3681;G;11:26:29.80;+16:51:47.5;Leo;1.74;1.68;10;12.20;;9.91;9.22;9.00;22.34;Sbc;;;;;;;;2MASX J11262980+1651475,2MASX J11263106+1652010,IRAS 11238+1708,MCG +03-29-048,PGC 035193,SDSS J112629.79+165148.3,UGC 06445;;; +NGC3682;G;11:27:41.20;+66:35:23.4;Dra;2.23;1.41;93;13.40;;10.26;9.60;9.31;23.62;S0-a;;;;;;;;2MASX J11274119+6635232,IRAS 11247+6651,MCG +11-14-027,PGC 035266,SDSS J112741.19+663523.4,UGC 06459;;The 2MASS position is 5 arcsec east of the nucleus.; +NGC3683;G;11:27:31.85;+56:52:37.4;UMa;1.74;0.71;124;12.70;;9.78;9.03;8.67;22.18;SBc;;;;;;;;2MASX J11273188+5652361,IRAS 11247+5709,MCG +10-16-143,PGC 035249,SDSS J112731.84+565237.3,SDSS J112731.84+565237.4,SDSS J112731.85+565237.4,UGC 06458;;; +NGC3683A;G;11:29:11.76;+57:07:56.4;UMa;2.03;1.48;68;12.60;;10.55;9.82;9.62;22.97;Sc;;;;;;;;2MASX J11291172+5707558,IRAS 11263+5724,MCG +10-17-006,PGC 035376,SDSS J112911.75+570756.3,UGC 06484;;; +NGC3684;G;11:27:11.20;+17:01:48.6;Leo;2.29;1.50;126;12.10;;10.16;9.54;9.28;22.52;Sbc;;;;;;;;2MASX J11271117+1701491,IRAS 11245+1718,MCG +03-29-050,PGC 035224,SDSS J112711.19+170148.6,UGC 06453;;; +NGC3685;G;11:28:16.22;+04:19:38.2;Leo;0.75;0.38;147;15.30;;12.13;11.44;11.32;23.65;E;;;;;;;;2MASX J11281621+0419381,MCG +01-29-045,PGC 035305,SDSS J112816.21+041938.2,SDSS J112816.22+041938.2;;; +NGC3686;G;11:27:43.97;+17:13:27.1;Leo;2.88;2.18;21;11.60;;9.44;8.69;8.49;22.82;SBbc;;;;;;;;2MASX J11274394+1713266,IRAS 11251+1729,MCG +03-29-051,PGC 035268,SDSS J112743.97+171327.0,UGC 06460;;; +NGC3687;G;11:28:00.61;+29:30:39.8;UMa;1.40;0.49;173;13.00;12.58;10.66;10.03;9.68;22.20;Sbc;;;;;;;;2MASX J11280056+2930397,2MASX J11280164+2930527,MCG +05-27-073,PGC 035285,SDSS J112800.60+293039.7,SDSS J112800.60+293039.8,UGC 06463;;; +NGC3688;G;11:27:44.45;-09:09:56.2;Crt;1.11;0.93;168;15.00;;12.28;11.56;11.29;23.91;SBb;;;;;;;;2MASX J11274443-0909560,MCG -01-29-024,PGC 035269;;; +NGC3689;G;11:28:11.03;+25:39:40.2;Leo;1.48;0.97;94;12.90;;10.16;9.46;9.19;22.24;SABc;;;;;;;;2MASX J11281100+2539397,MCG +04-27-037,PGC 035294,SDSS J112811.02+253940.2,UGC 06467;;; +NGC3690;GPair;11:28:32.30;+58:33:43.0;UMa;2.10;;;;;;;;;;;;;;;;;;;Part of the GTrpl ARP 299.;Diameter of the group inferred by the author. +NGC3690A;G;11:28:31.02;+58:33:40.7;UMa;0.21;0.15;164;11.80;;;;;18.36;Sm;;;;;3690W;;;2MASX J11283132+5833417,PGC 035326,SDSS J112830.76+583342.8,UGC 06471;;Claim of an SN outburst probably an AGN outburst.; +NGC3690B;G;11:28:33.63;+58:33:46.6;UMa;2.40;1.86;41;11.80;;;;;22.11;SBm;;;;;3690E;;;IRAS11257+5850,PGC 035321,SDSS J112833.38+583346.4,UGC 06472;;Often confused with IC 0694 in the literature.; +NGC3691;G;11:28:09.41;+16:55:13.7;Leo;1.49;1.04;20;13.10;;11.49;10.78;10.51;21.99;SBb;;;;;;;;2MASX J11280941+1655136,IRAS 11255+1711,MCG +03-29-053,PGC 035292,UGC 06464;;The 2MASS position is 22 arcsec northeast of the optical nucleus.; +NGC3692;G;11:28:24.01;+09:24:27.5;Leo;3.22;0.75;93;12.90;;10.27;9.57;9.32;23.45;Sb;;;;;;;;2MASX J11282405+0924279,IRAS 11258+0940,MCG +02-29-032,PGC 035314,SDSS J112824.00+092427.4,SDSS J112824.01+092427.4,SDSS J112824.01+092427.5,UGC 06474;;; +NGC3693;G;11:28:11.57;-13:11:41.5;Crt;2.33;0.75;86;13.40;;10.53;9.77;9.56;23.71;Sb;;;;;;;;2MASX J11281163-1311395,IRAS 11256-1255,MCG -02-29-032,PGC 035299;;; +NGC3694;G;11:28:54.13;+35:24:50.4;UMa;1.00;0.78;116;13.50;;11.26;10.62;10.39;22.47;E;;;;;;;;2MASX J11285413+3524498,IRAS 11262+3541,MCG +06-25-076,PGC 035352,SDSS J112854.12+352450.3,SDSS J112854.13+352450.3,SDSS J112854.13+352450.4,UGC 06480;;; +NGC3695;G;11:29:17.09;+35:34:32.6;UMa;0.97;0.67;165;14.90;;11.81;11.11;10.82;23.24;SBbc;;;;;3698;;;2MASX J11291712+3534319,MCG +06-25-078,PGC 035389,SDSS J112917.08+353432.6,UGC 06490;;; +NGC3696;G;11:28:43.89;-11:16:58.2;Crt;0.90;0.73;102;14.76;;;;;23.18;SABc;;;;;;;;PGC 035340;;Identification as NGC 3696 is very uncertain.; +NGC3697;G;11:28:50.38;+20:47:42.1;Leo;2.07;0.61;93;14.10;;10.95;10.27;10.00;23.22;Sb;;;;;;;;2MASX J11285037+2047426,MCG +04-27-042,PGC 035347,SDSS J112850.37+204742.0,UGC 06479;;; +NGC3698;Dup;11:29:17.09;+35:34:32.6;UMa;;;;;;;;;;;;;;;3695;;;;;; +NGC3699;PN;11:27:57.15;-59:57:29.0;Cen;0.75;;;11.00;11.30;;;;;;;;;;;;;ESO 129-021,IRAS 11256-5940,PN G292.6+01.2;;; +NGC3700;G;11:29:38.61;+35:30:52.7;UMa;0.98;0.71;146;15.10;;11.94;11.27;10.96;23.36;Sab;;;;;;;;2MASX J11293859+3530529,MCG +06-25-079,PGC 035413,SDSS J112938.61+353052.7,UGC 06494;;; +NGC3701;G;11:29:28.92;+24:05:36.4;Leo;1.60;0.77;143;14.10;;11.39;10.73;10.49;22.70;Sbc;;;;;;;;2MASX J11292890+2405365,MCG +04-27-048,PGC 035405,SDSS J112928.92+240536.3,UGC 06493;;; +NGC3702;G;11:30:13.48;-08:51:46.5;Crt;1.29;0.95;158;15.00;;10.91;10.30;9.96;23.57;SABa;;;;;;;;2MASX J11301349-0851462,MCG -01-29-026,PGC 035448;;; +NGC3703;G;11:29:09.36;-08:26:47.2;Crt;0.60;0.42;110;15.58;;12.13;11.40;11.13;;S0;;;;;;;;2MASX J11290939-0826468,PGC 170146;;Identification as NGC 3703 is uncertain.;Diameters and position angle taken from Simbad. +NGC3704;G;11:30:04.65;-11:32:46.8;Crt;1.55;1.44;30;14.00;;10.47;9.81;9.55;23.64;E;;;;;;0703;;2MASX J11300472-1132462,MCG -02-29-037,PGC 035435;;The identification with IC 0703 is not certain.; +NGC3705;G;11:30:07.46;+09:16:35.9;Leo;4.31;1.74;121;11.86;11.07;8.82;8.16;7.92;23.09;SABa;;;;;;;;2MASX J11300745+0916358,IRAS 11275+0933,MCG +02-29-039,PGC 035440,UGC 06498;;; +NGC3705A;G;11:30:29.72;+09:23:16.6;Leo;0.89;0.28;128;15.50;;;;;23.58;Sc;;;;;;2887;;2MASX J11302968+0923168,PGC 035470,SDSS J113029.72+092316.5,SDSS J113029.72+092316.6;;; +NGC3705B;G;11:29:43.70;+09:12:20.9;Leo;0.59;0.27;69;15.86;;;;;23.67;SBbc;;;;;;;;2MASX J11294373+0912210,PGC 1361422,SDSS J112943.69+091220.9,SDSS J112943.70+091220.9;;;B-Mag taken from LEDA +NGC3706;G;11:29:44.43;-36:23:28.7;Cen;3.10;2.10;78;12.20;11.08;8.84;8.18;7.90;23.53;E-S0;;;;;;;;2MASX J11294442-3623285,ESO 378-006,ESO-LV 378-0060,MCG -06-25-022,PGC 035417;;; +NGC3707;G;11:30:11.56;-11:32:36.6;Crt;0.67;0.53;77;15.66;;12.48;11.83;11.55;23.69;E;;;;;;0704;;2MASX J11301159-1132362,PGC 035446;;The identification with IC 0704 is not certain.; +NGC3708;Other;11:30:39.28;-03:13:21.3;Leo;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC3709;Other;11:30:39.27;-03:15:21.3;Leo;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3710;G;11:31:06.94;+22:46:05.0;Leo;1.22;0.45;99;14.50;;11.02;10.33;10.03;23.31;E;;;;;;;;2MASX J11310694+2246046,MCG +04-27-052,PGC 035502,SDSS J113106.93+224604.9,SDSS J113106.94+224604.9,UGC 06504;;; +NGC3711;G;11:29:25.52;-11:04:44.7;Crt;0.95;0.46;155;15.00;;13.93;13.18;12.70;22.71;SABb;;;;;;;;2MASX J11292551-1104444,MCG -02-29-035,PGC 035392;;; +NGC3712;G;11:31:09.15;+28:34:04.6;UMa;1.97;0.70;159;14.25;;;;;24.94;SBd;;;;;;;;MCG +05-27-082,PGC 035507,UGC 06506;;; +NGC3713;G;11:31:42.02;+28:09:12.9;Leo;1.21;0.80;123;14.40;;10.92;10.22;9.96;23.32;E-S0;;;;;;;;2MASX J11314203+2809127,MCG +05-27-084,PGC 035546,SDSS J113142.01+280912.9,SDSS J113142.02+280912.9,UGC 06511;;; +NGC3714;G;11:31:53.61;+28:21:30.5;Leo;1.23;0.85;65;14.30;;11.58;10.79;10.45;23.51;S0;;;;;;;;2MASX J11315360+2821307,MCG +05-27-085,PGC 035556,SDSS J113153.60+282130.5,SDSS J113153.61+282130.5,UGC 06516;;Noted in MCG as possibly interacting.; +NGC3715;G;11:31:32.34;-14:13:52.9;Crt;1.23;0.81;133;13.00;;10.45;9.81;9.50;22.31;SBbc;;;;;;;;2MASX J11313233-1413527,IRAS 11290-1357,MCG -02-29-041,PGC 035540;;; +NGC3716;G;11:31:41.13;+03:29:16.8;Leo;0.92;0.78;152;14.50;;11.28;10.55;10.30;22.82;S0;;;;;;;;2MASX J11314113+0329168,MCG +01-30-001,PGC 035545,SDSS J113141.13+032916.8,SDSS J113141.13+032916.9,UGC 06513;;; +NGC3717;G;11:31:31.99;-30:18:27.9;Hya;6.52;2.04;32;12.21;;8.59;7.85;7.52;24.21;Sb;;;;;;;;2MASX J11313199-3018278,ESO 439-015,ESO-LV 439-0150,IRAS 11290-3001,MCG -05-27-015,PGC 035539,UGCA 238;;; +NGC3718;G;11:32:34.85;+53:04:04.5;UMa;4.70;2.34;9;11.35;10.61;8.65;7.98;7.76;23.29;Sa;;;;;;;;2MASX J11323494+5304041,MCG +09-19-114,PGC 035616,UGC 06524;;; +NGC3719;G;11:32:13.46;+00:49:09.4;Leo;1.67;1.11;24;13.50;;11.13;10.42;10.19;23.25;Sbc;;;;;;;;2MASX J11321346+0049095,MCG +00-30-005,PGC 035581,SDSS J113213.45+004909.4,SDSS J113213.46+004909.3,SDSS J113213.46+004909.4,UGC 06521;;"The APMUKS position is 6"" southwest of the nucleus."; +NGC3720;G;11:32:21.60;+00:48:14.4;Leo;1.07;0.99;125;13.70;;10.90;10.26;9.92;22.63;Sab;;;;;;;;2MASX J11322159+0048145,IRAS 11297+0104,MCG +00-30-006,PGC 035594,SDSS J113221.59+004814.4,UGC 06523;;; +NGC3721;G;11:34:07.82;-09:28:01.7;Crt;0.91;0.53;130;15.51;;12.07;11.32;10.93;23.79;S0-a;;;;;;;;2MASX J11340784-0928014,PGC 035727;;Identification as NGC 3721 is uncertain.; +NGC3722;G;11:34:23.31;-09:40:48.2;Crt;1.11;0.81;58;15.00;;11.93;11.25;11.04;24.33;E;;;;;;;;2MASX J11342332-0940475,MCG -01-30-005,PGC 035746;;Note +40 arcsec error in [VCV2006] position.; +NGC3723;G;11:32:30.55;-09:58:10.3;Crt;1.30;1.10;75;14.00;;10.89;10.19;9.93;23.58;E-S0;;;;;;;;2MASX J11323053-0958098,MCG -02-30-002,PGC 035604;;; +NGC3724;G;11:34:28.68;-09:39:36.7;Crt;1.46;0.35;63;15.00;;11.58;10.82;10.54;24.54;S0-a;;;;;;;;2MASX J11342867-0939365,IRAS 11319-0922,MCG -01-30-007,PGC 035757;;Identification as NGC 3724 is uncertain.; +NGC3725;G;11:33:40.53;+61:53:16.8;UMa;1.54;1.27;144;13.60;;11.05;10.27;10.09;23.31;SBc;;;;;;;;2MASX J11334053+6153165,IRAS 11308+6209,MCG +10-17-015,PGC 035698,SDSS J113340.51+615316.9,SDSS J113340.52+615316.8,SDSS J113340.53+615316.8,UGC 06542;;; +NGC3726;G;11:33:21.12;+47:01:45.1;UMa;5.27;3.54;14;11.11;;8.62;7.93;7.78;22.70;Sc;;;;;;;;2MASX J11332117+4701447,IRAS 11306+4718,MCG +08-21-051,PGC 035676,SDSS J113321.12+470145.1,UGC 06537;;The Bologna position is 7 arcsec southwest of the center.; +NGC3727;G;11:33:40.93;-13:52:44.0;Crt;0.92;0.63;87;15.07;;11.85;11.23;11.28;23.57;S0;;;;;;;;2MASX J11334092-1352435,PGC 035697;;; +NGC3728;G;11:33:15.78;+24:26:48.8;Leo;1.56;0.85;22;14.70;;11.27;10.55;10.36;23.79;Sb;;;;;;;;2MASX J11331580+2426493,MCG +04-27-061,PGC 035669,SDSS J113315.78+242648.7,SDSS J113315.78+242648.8,UGC 06536;;; +NGC3729;G;11:33:49.32;+53:07:32.0;UMa;2.89;2.09;14;12.20;;9.36;8.73;8.73;22.59;Sa;;;;;;;;2MASX J11334932+5307317,IRAS 11310+5324,MCG +09-19-117,PGC 035711,SDSS J113349.32+530731.9,UGC 06547;;; +NGC3730;G;11:34:16.88;-09:34:34.0;Crt;1.42;1.06;13;15.00;;11.09;10.38;10.18;23.89;S0;;;;;;;;2MASX J11341683-0934335,MCG -01-30-003,PGC 035743;;Identification as NGC 3730 is uncertain.; +NGC3731;G;11:34:11.68;+12:30:44.3;Leo;0.97;0.85;45;14.30;;11.19;10.46;10.28;23.11;E;;;;;;;;2MASX J11341166+1230436,MCG +02-30-001,PGC 035731,SDSS J113411.67+123044.2,SDSS J113411.67+123044.3,SDSS J113411.68+123044.3,UGC 06553;;; +NGC3732;G;11:34:13.94;-09:50:44.4;Crt;1.28;1.10;89;13.70;;10.46;9.81;9.55;22.18;S0-a;;;;;;;;2MASX J11341393-0950444,IRAS 11316-0934,MCG -02-30-005,PGC 035734;;; +NGC3733;G;11:35:01.60;+54:51:01.8;UMa;3.40;1.07;167;13.20;;12.62;11.86;12.14;23.41;SABc;;;;;;;;2MASX J11350158+5451018,MCG +09-19-123,PGC 035797,SDSS J113501.63+545102.0,UGC 06554;;; +NGC3734;G;11:34:40.68;-14:04:54.6;Crt;1.11;0.97;59;14.00;;11.80;11.15;10.92;23.52;SABb;;;;;;;;2MASX J11344067-1404545,MCG -02-30-006,PGC 035773;;; +NGC3735;G;11:35:57.30;+70:32:08.1;Dra;3.54;0.80;130;12.40;;9.54;8.75;8.45;22.62;Sc;;;;;;;;2MASX J11355732+7032081,IRAS 11330+7048,MCG +12-11-036,PGC 035869,SDSS J113557.30+703209.0,UGC 06567;;The 2MASS position is 10 arcsec southeast of the center of the optical bulge.; +NGC3736;G;11:35:41.73;+73:27:06.6;Dra;1.15;0.55;151;15.60;;11.90;11.16;10.84;24.14;Sbc;;;;;;;;2MASX J11354184+7327061,MCG +12-11-035,PGC 035835,UGC 06560;;; +NGC3737;G;11:35:36.38;+54:56:54.8;UMa;1.10;0.95;89;13.90;;10.90;10.18;9.90;22.91;S0;;;;;;;;2MASX J11353641+5456547,MCG +09-19-128,PGC 035840,SDSS J113536.36+545655.1,SDSS J113536.37+545654.7,SDSS J113536.37+545654.8,SDSS J113536.38+545654.9,UGC 06563;;; +NGC3738;G;11:35:48.79;+54:31:26.0;UMa;2.26;1.63;156;12.12;12.04;;;;21.77;I;;;;;;;;IRAS 11330+5448,MCG +09-19-130,PGC 035856,UGC 06565;;; +NGC3739;G;11:35:37.60;+25:05:19.1;Leo;1.22;0.35;18;15.30;;12.00;11.33;11.00;23.42;SBbc;;;;;;;;2MASX J11353761+2505189,MCG +04-27-071,PGC 035841,SDSS J113537.59+250519.0,UGC 06564;;; +NGC3740;G;11:36:12.28;+59:58:35.4;UMa;1.26;0.69;109;14.90;;12.02;11.34;11.06;23.64;Sb;;;;;;;;2MASX J11361233+5958351,MCG +10-17-023,PGC 035883,SDSS J113612.28+595835.4,SDSS J113612.28+595835.6,SDSS J113612.29+595835.4,UGC 06573;;; +NGC3741;G;11:36:06.18;+45:17:01.1;UMa;0.94;0.81;2;14.55;14.23;;;;22.88;I;;;;;;;;MCG +08-21-068,PGC 035878,UGC 06572;;; +NGC3742;G;11:35:32.51;-37:57:23.0;Cen;2.60;1.83;113;12.91;;9.62;8.92;8.65;23.61;Sab;;;;;;;;2MASX J11353252-3757229,ESO 320-006,ESO-LV 320-0060,MCG -06-26-001,PGC 035833;;; +NGC3743;G;11:35:57.36;+21:43:21.4;Leo;0.56;0.48;3;15.60;;12.15;11.45;11.00;23.30;E;;;;;;;;2MASX J11355731+2143217,PGC 035855,SDSS J113557.35+214321.3,SDSS J113557.36+214321.3,SDSS J113557.36+214321.4;;; +NGC3744;G;11:35:57.87;+23:00:41.6;Leo;0.73;0.32;13;15.40;;12.49;11.92;11.57;23.20;Sa;;;;;;;;2MASX J11355789+2300417,PGC 035857,SDSS J113557.86+230041.5,SDSS J113557.87+230041.5;;; +NGC3745;G;11:37:44.43;+22:01:16.6;Leo;0.58;0.33;102;16.35;;12.79;12.19;11.68;23.68;E-S0;;;;;;;;2MASX J11374443+2201170,MCG +04-28-004,PGC 036001,SDSS J113744.43+220116.5,SDSS J113744.43+220116.6;;; +NGC3746;G;11:37:43.62;+22:00:35.4;Leo;1.13;0.53;115;15.30;;11.98;11.28;10.98;23.49;Sab;;;;;;;;2MASX J11374364+2200349,MCG +04-28-005,PGC 035997,SDSS J113743.62+220035.3,UGC 06597;;Called 'Arp 320a' in UGC notes.; +NGC3747;G;11:32:31.06;+74:22:42.2;Dra;0.48;0.23;110;;;12.98;12.36;11.91;23.32;;;;;;;;;2MASX J11323098+7422421,IRAS 11294+7439,PGC 090149;;; +NGC3748;G;11:37:49.06;+22:01:34.1;Leo;0.85;0.31;138;15.50;;12.28;11.63;11.44;24.07;S0;;;;;;;;2MASX J11374903+2201340,MCG +04-28-007,PGC 036007,SDSS J113749.06+220134.1,UGC 06602 NOTES03;;; +NGC3749;G;11:35:53.21;-37:59:50.5;Cen;2.82;0.48;109;13.22;;9.85;9.04;8.71;24.15;Sa;;;;;;;;2MASX J11355320-3759503,ESO 320-008,ESO-LV 320-0080,IRAS 11333-3743,MCG -06-26-002,PGC 035861;;; +NGC3750;G;11:37:51.64;+21:58:27.3;Leo;1.05;0.73;154;15.20;;;;;23.74;E-S0;;;;;;;;MCG +04-28-008,PGC 036011,SDSS J113751.63+215827.1,SDSS J113751.63+215827.2,UGC 06602 NOTES02;;; +NGC3751;G;11:37:53.86;+21:56:11.3;Leo;0.91;0.53;9;15.23;;12.46;11.97;11.55;23.51;E-S0;;;;;;;;2MASX J11375386+2156110,MCG +04-28-009,PGC 036017,SDSS J113753.85+215611.3,UGC 06601;;; +NGC3752;G;11:32:32.21;+74:37:39.1;Dra;1.62;0.68;152;13.70;;11.45;10.76;10.42;22.99;SABa;;;;;;;;2MASX J11323219+7437392,IRAS 11293+7454,MCG +13-08-064,PGC 035608,UGC 06515;;; +NGC3753;G;11:37:53.90;+21:58:53.0;Leo;1.60;0.46;109;14.60;;11.11;10.26;9.94;23.57;SBab;;;;;;;;2MASX J11375378+2158520,MCG +04-28-010,PGC 036016,UGC 06602;;; +NGC3754;G;11:37:54.92;+21:59:07.8;Leo;0.55;0.45;1;15.20;;;;;22.30;SBb;;;;;;;;MCG +04-28-011,PGC 036018,SDSS J113754.91+215907.8,SDSS J113754.92+215907.7,SDSS J113754.92+215907.8,UGC 06602 NOTES01;;Component 'b)' in UGC notes.; +NGC3755;G;11:36:33.37;+36:24:37.2;UMa;2.90;1.16;124;13.90;;11.45;10.81;10.60;24.14;Sc;;;;;;;;2MASX J11363336+3624370,MCG +06-26-008,PGC 035913,SDSS J113633.36+362437.2,SDSS J113633.37+362437.2,UGC 06577;;; +NGC3756;G;11:36:48.02;+54:17:36.8;UMa;1.91;0.97;179;12.10;;9.69;9.06;8.78;21.69;SABb;;;;;;;;2MASX J11364797+5417372,IRAS 11340+5434,MCG +09-19-134,PGC 035931,SDSS J113648.01+541736.7,SDSS J113648.01+541736.8,SDSS J113648.02+541736.8,SDSS J113648.72+541731.4,SDSS J113648.73+541731.5,UGC 06579;;SDSS and 2MASXi positions are off-center.; +NGC3757;G;11:37:02.86;+58:24:55.9;UMa;1.14;0.89;125;13.50;;10.54;9.87;9.63;22.45;S0;;;;;;;;2MASX J11370282+5824563,MCG +10-17-026,PGC 035955,SDSS J113702.86+582455.9,UGC 06584;;; +NGC3758;G;11:36:29.10;+21:35:46.0;Leo;0.70;0.57;54;14.80;;;;;22.43;Sb;;;;;;;;IRAS 11338+2152,MCG +04-27-073,PGC 035905;;; +NGC3759;G;11:36:54.09;+54:49:23.9;UMa;1.03;0.95;10;14.30;;11.15;10.45;10.20;23.09;S0;;;;;;;;2MASX J11365408+5449233,MCG +09-19-136,PGC 035945,SDSS J113654.09+544923.8,UGC 06581;;LEDA 094203 superposed 17 arcsec southwest.; +NGC3759A;G;11:36:58.03;+55:09:43.4;UMa;1.08;0.97;35;14.50;;11.69;11.03;10.77;23.07;Sbc;;;;;;;;2MASX J11365805+5509433,MCG +09-19-135,PGC 035948,SDSS J113658.02+550943.4,SDSS J113658.03+550943.4,UGC 06582;;; +NGC3760;Dup;10:36:56.04;+21:52:55.7;Leo;;;;;;;;;;;;;;;3301;;;;;; +NGC3761;G;11:36:44.12;+22:59:31.3;Leo;1.09;0.83;63;15.00;;11.98;11.31;11.02;24.04;E;;;;;;;;2MASX J11364412+2259309,PGC 035933,SDSS J113644.11+225931.2,SDSS J113644.12+225931.3,SDSS J113644.13+225931.2;;; +NGC3762;G;11:37:23.83;+61:45:33.7;UMa;1.83;0.42;166;13.30;;10.38;9.59;9.36;22.72;SBa;;;;;;;;2MASX J11372373+6145337,MCG +10-17-027,PGC 035979,SDSS J113723.83+614533.7,UGC 06591;;; +NGC3763;G;11:36:30.19;-09:50:48.1;Crt;1.07;0.95;159;13.40;;11.27;10.59;10.33;21.17;SABc;;;;;;0714;;2MASX J11362964-0950330,2MASX J11363017-0950480,IRAS 11339-0934,MCG -02-30-009,PGC 035907;;; +NGC3764;GPair;11:36:54.10;+17:53:22.0;Leo;0.80;;;;;;;;;;;;;;;;;MCG +03-30-020;;;Diameter of the group inferred by the author. +NGC3764 NED01;G;11:36:54.62;+17:53:19.0;Leo;0.69;0.56;132;14.90;;11.66;11.16;10.86;22.80;Sc;;;;;;;;2MASX J11365463+1753189,MCG +03-30-020 NED01,PGC 035930,SDSS J113654.62+175318.9;;; +NGC3764 NED02;G;11:36:53.66;+17:53:25.6;Leo;0.24;0.19;25;18.02;;;;;;Sd;;;;;;;;MCG +03-30-020 NED02,PGC 4581793;;;B-Mag taken from LEDA +NGC3765;G;11:37:04.18;+24:05:46.5;Leo;0.85;0.57;61;15.10;;11.90;11.17;10.90;22.92;SBbc;;;;;;;;2MASX J11370417+2405467,MCG +04-28-001,PGC 035956,SDSS J113704.17+240546.4,SDSS J113704.18+240546.5;;; +NGC3766;OCl;11:36:14.39;-61:36:18.6;Cen;6.90;;;5.66;5.30;;;;;;;;;;;;;C 097,MWSC 1958;Pearl Cluster;; +NGC3767;G;11:37:15.56;+16:52:37.8;Leo;0.98;0.70;88;14.50;;11.19;10.47;10.22;23.06;S0;;;;;;;;2MASX J11371552+1652381,MCG +03-30-023,PGC 035969,SDSS J113715.55+165237.8,UGC 06590;;; +NGC3768;G;11:37:14.48;+17:50:23.6;Leo;1.36;0.84;154;13.70;;10.56;9.85;9.61;23.16;S0;;;;;;;;2MASX J11371444+1750241,MCG +03-30-024,PGC 035968,SDSS J113714.47+175023.5,UGC 06589;;; +NGC3769;G;11:37:44.11;+47:53:35.1;UMa;2.82;0.89;150;11.70;;10.11;9.33;9.20;22.69;Sb;;;;;;;;2MASX J11374410+4753351,IRAS 11350+4809,MCG +08-21-076,PGC 035999,SDSS J113744.10+475335.3,SDSS J113744.11+475335.1,UGC 06595;;Called 'Arp 280a' in UGC notes.; +NGC3769A;G;11:37:51.36;+47:52:52.8;UMa;0.92;0.37;107;14.70;;13.12;12.85;12.22;22.50;SBm;;;;;;;;2MASX J11375136+4752531,MCG +08-21-077,PGC 036008,UGC 06595 NOTES01;;Called 'Arp 280b' in UGC notes.; +NGC3770;G;11:37:58.74;+59:37:00.9;UMa;0.95;0.63;119;13.50;;10.86;10.20;9.91;22.14;SBa;;;;;;;;2MASX J11375873+5937011,IRAS 11352+5953,MCG +10-17-028,PGC 036025,SDSS J113758.73+593701.1,SDSS J113758.74+593700.9,UGC 06600;;; +NGC3771;G;11:39:06.00;-09:20:53.5;Crt;1.47;0.86;10;14.04;;10.74;10.04;9.73;23.25;E;;;;;;;;2MASX J11390599-0920535,MCG -01-30-018,PGC 036107;;NGC identification is not certain.; +NGC3772;G;11:37:48.48;+22:41:28.6;Leo;1.31;0.69;14;14.40;;11.13;10.41;10.21;23.23;Sa;;;;;;;;2MASX J11374841+2241320,MCG +04-28-006,PGC 036005,SDSS J113748.47+224128.6,UGC 06598;;; +NGC3773;G;11:38:12.88;+12:06:43.4;Leo;1.23;0.97;161;13.10;;11.50;11.12;10.70;22.67;S0;;;;;;;;2MASX J11381296+1206429,IRAS 11356+1223,MCG +02-30-005,PGC 036043,SDSS J113812.87+120643.3,UGC 06605;;Multiple SDSS entries describe this object.; +NGC3774;G;11:38:30.26;-08:58:34.1;Crt;1.11;0.67;79;15.00;;12.14;11.38;11.19;23.32;Sb;;;;;;;;2MASX J11383026-0858338,MCG -01-30-016,PGC 036058;;NGC identification is not certain.; +NGC3775;G;11:38:26.70;-10:38:19.6;Crt;1.28;0.50;30;15.00;;11.56;10.91;10.54;23.96;S0-a;;;;;;;;2MASX J11382669-1038198,MCG -02-30-012,PGC 036055;;; +NGC3776;G;11:38:17.98;-03:21:15.8;Vir;0.48;0.38;155;15.60;;;;;23.06;Sb;;;;;;;;2MASX J11381802-0321162,PGC 036048,SDSS J113817.97-032115.7,SDSS J113817.98-032115.8;;; +NGC3777;G;11:36:06.85;-12:34:08.7;Crt;1.18;0.63;35;14.00;;11.58;10.87;10.60;23.12;SABa;;;;;;;;2MASX J11360684-1234087,MCG -02-30-008,PGC 035879;;; +NGC3778;G;11:38:21.41;-50:42:55.3;Cen;1.21;0.99;40;14.15;;10.19;9.45;9.19;23.32;E-S0;;;;;;;;2MASX J11382141-5042551,ESO 216-026,ESO-LV 216-0260,PGC 036051;;; +NGC3779;G;11:38:51.05;-10:35:01.5;Crt;1.62;0.82;92;14.42;;;;;23.55;SBcd;;;;;;0717;;MCG -02-30-013,PGC 036084;;; +NGC3780;G;11:39:22.36;+56:16:14.4;UMa;2.64;2.17;74;12.20;;9.92;9.28;9.04;22.81;Sc;;;;;;;;2MASX J11392237+5616146,IRAS 11366+5632,MCG +09-19-150,PGC 036138,SDSS J113922.35+561614.3,SDSS J113922.36+561614.3,SDSS J113922.36+561614.4,UGC 06615;;; +NGC3781;G;11:39:03.76;+26:21:42.3;Leo;0.68;0.55;25;14.80;;11.60;10.89;10.49;22.77;S0;;;;;;;;2MASX J11390377+2621419,MCG +05-28-004,PGC 036104,SDSS J113903.77+262142.2,SDSS J113903.78+262142.2;;; +NGC3782;G;11:39:20.76;+46:30:49.8;UMa;1.23;0.64;178;13.10;;11.56;10.97;10.67;21.71;Scd;;;;;;;;2MASX J11392067+4630482,IRAS 11366+4647,MCG +08-21-087,PGC 036136,SDSS J113920.75+463049.7,UGC 06618;;; +NGC3783;G;11:39:01.76;-37:44:19.2;Cen;2.15;1.94;163;12.46;13.43;9.83;9.09;8.65;22.77;SBa;;;;;;;;2MASX J11390172-3744185,ESO 378-014,ESO-LV 378-0140,IRAS 11365-3727,MCG -06-26-004,PGC 036101;;; +NGC3784;G;11:39:29.80;+26:18:32.9;Leo;0.93;0.50;137;15.20;;11.90;11.22;10.96;23.30;SABa;;;;;;;;2MASX J11392981+2618330,MCG +05-28-006,PGC 036147,SDSS J113929.79+261832.9,SDSS J113929.80+261832.9;;; +NGC3785;G;11:39:32.89;+26:18:08.2;Leo;1.11;0.44;27;15.30;;11.31;10.59;10.36;23.93;S0;;;;;;;;2MASX J11393294+2618079,MCG +05-28-007,PGC 036148,SDSS J113932.88+261808.1,SDSS J113932.89+261808.1,SDSS J113932.89+261808.2,UGC 06620;;; +NGC3786;G;11:39:42.55;+31:54:33.4;UMa;1.96;1.00;72;14.62;13.74;10.40;9.65;9.34;23.32;SABa;;;;;;;;2MASX J11394247+3154337,MCG +05-28-008,PGC 036158,SDSS J113942.52+315433.7,UGC 06621;;; +NGC3787;G;11:39:37.95;+20:27:16.9;Leo;0.75;0.70;25;14.70;;11.38;10.68;10.39;22.68;S0;;;;;;;;2MASX J11393798+2027169,MCG +04-28-015,PGC 036154,SDSS J113937.94+202716.8;;; +NGC3788;G;11:39:44.65;+31:55:52.3;UMa;2.00;0.58;179;13.30;12.50;10.30;9.60;9.34;22.77;Sab;;;;;;;;2MASX J11394459+3155526,MCG +05-28-009,PGC 036160,SDSS J113944.59+315552.4,UGC 06623;;HOLM 272C is a star.; +NGC3789;G;11:38:09.06;-09:36:25.7;Crt;1.80;0.52;178;15.00;;11.03;10.36;10.10;24.30;S0-a;;;;;;;;2MASX J11380904-0936257,MCG -01-30-015,PGC 036036;;; +NGC3790;G;11:39:47.26;+17:42:44.1;Leo;1.03;0.36;154;14.50;;11.53;10.82;10.59;23.13;S0-a;;;;;;;;2MASX J11394722+1742438,MCG +03-30-032,PGC 036167,SDSS J113947.26+174244.1,UGC 06624;;; +NGC3791;G;11:39:41.70;-09:22:02.1;Crt;1.34;0.92;165;14.50;;10.96;10.22;10.05;23.73;S0;;;;;;;;2MASX J11394183-0922028,MCG -01-30-020,PGC 036156;;; +NGC3792;**;11:39:38.53;+05:05:58.2;Vir;;;;;;;;;;;;;;;;;;;;; +NGC3793;*;11:40:01.99;+31:52:39.8;UMa;;;;14.40;;12.67;12.37;12.34;;;;;;;;;;2MASS J11400198+3152397,SDSS J114001.98+315239.7;;; +NGC3794;G;11:40:53.42;+56:12:07.3;UMa;2.03;1.12;118;13.80;;11.88;11.32;11.01;23.66;SABc;;;;;3804;;;2MASX J11405341+5612073,2MASX J11405425+5612080,IRAS 11381+5628,MCG +09-19-153,PGC 036238,UGC 06640;;; +NGC3795;G;11:40:06.67;+58:36:47.1;UMa;2.10;0.55;54;14.10;;11.54;10.92;10.64;23.36;Sbc;;;;;;;;2MASX J11400684+5836473,MCG +10-17-038,PGC 036192,SDSS J114006.66+583647.1,UGC 06629;;; +NGC3795A;G;11:39:21.31;+58:16:07.3;UMa;2.03;1.48;71;14.20;;;;;24.33;SABc;;;;;;;;MCG +10-17-035,PGC 036137,SDSS J113921.31+581607.3,SDSS J113921.32+581607.2,UGC 06616;;; +NGC3796;G;11:40:31.12;+60:17:56.1;UMa;1.46;0.88;126;13.40;;10.89;10.22;9.95;22.85;E-S0;;;;;;;;2MASX J11403114+6017562,MCG +10-17-039,PGC 036215,SDSS J114031.12+601756.0,UGC 06638;;; +NGC3797;*;11:40:13.31;+31:54:23.6;UMa;;;;14.80;14.90;13.67;13.37;13.32;;;;;;;;;;2MASS J11401327+3154246;;; +NGC3798;G;11:40:13.94;+24:41:49.4;Leo;2.15;1.01;60;13.90;;10.53;9.84;9.55;24.03;S0;;;;;;;;2MASX J11401393+2441493,IRAS 11376+2458,MCG +04-28-018,PGC 036199,SDSS J114013.93+244149.4,SDSS J114013.94+244149.4,UGC 06632;;; +NGC3799;G;11:40:09.38;+15:19:38.3;Leo;0.67;0.38;105;14.40;;11.99;11.41;11.10;21.92;SBb;;;;;;;;2MASX J11400936+1519385,MCG +03-30-037,PGC 036193,SDSS J114009.38+151938.2,SDSS J114009.38+151938.3,UGC 06630;;Multiple SDSS entries describe this object.; +NGC3800;G;11:40:13.51;+15:20:32.5;Leo;1.67;0.58;53;13.10;;10.37;9.64;9.32;22.36;SABb;;;;;;;;2MASX J11401351+1520324,IRAS 11376+1537,MCG +03-30-039,PGC 036197,UGC 06634;;; +NGC3801;G;11:40:16.94;+17:43:41.0;Leo;2.31;1.29;120;13.30;;9.87;9.12;8.88;23.72;S0;;;;;;;;2MASX J11401689+1743404,MCG +03-30-040,PGC 036200,SDSS J114016.98+174340.3,SDSS J114016.98+174340.4,UGC 06635;;The radio pos. in 1996AJ....111.1945D is 4.5 arcsec se of the optical/IR peak.; +NGC3802;G;11:40:18.78;+17:45:55.2;Leo;1.04;0.24;85;14.70;;11.23;10.49;10.17;22.32;Sb;;;;;;;;2MASX J11401906+1745564,IRAS 11377+1802,MCG +03-30-041,PGC 036203,SDSS J114018.78+174555.2,UGC 06636;;; +NGC3803;G;11:40:17.25;+17:48:04.5;Leo;0.62;0.50;19;;;15.02;14.38;14.31;23.92;SBcd;;;;;;;;2MASX J11401725+1748044,PGC 036204,SDSS J114017.29+174805.0;;; +NGC3804;Dup;11:40:53.42;+56:12:07.3;UMa;;;;;;;;;;;;;;;3794;;;;;; +NGC3805;G;11:40:41.68;+20:20:34.6;Leo;1.53;1.25;62;13.80;;10.27;9.60;9.30;23.35;E-S0;;;;;;;;2MASX J11404166+2020348,MCG +04-28-019,PGC 036224,SDSS J114041.67+202034.6,UGC 06642;;; +NGC3806;G;11:40:46.63;+17:47:46.6;Leo;1.14;0.94;170;14.60;;12.37;12.19;11.45;23.07;Sb;;;;;;;;2MASX J11404661+1747468,MCG +03-30-042,PGC 036231,SDSS J114046.66+174745.2,UGC 06641;;NGC 3807 is a Galactic star.; +NGC3807;*;11:41:54.68;+17:49:08.1;Leo;;;;;;;;;;;;;;;;;;;;; +NGC3808;GPair;11:40:44.40;+22:26:16.0;Leo;2.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC3808A;G;11:40:44.24;+22:25:45.7;Leo;0.94;0.73;135;14.10;;11.97;11.19;11.00;22.62;SABc;;;;;;;;2MASX J11404420+2225459,MCG +04-28-021,PGC 036227,SDSS J114044.23+222545.6,UGC 06643 NED01;;Component 'a)' in UGC notes. Called 'NGC 3808' in MCG.; +NGC3808B;G;11:40:44.64;+22:26:49.0;Leo;0.75;0.33;46;15.00;;12.41;11.65;11.37;19.93;SBc;;;;;;;;2MASX J11404456+2226479,IRAS 11381+2243,MCG +04-28-020,PGC 036228,SDSS J114044.64+222648.9,SDSS J114044.64+222649.0,UGC 06643 NED02;;Component 'b)' in UGC notes.; +NGC3809;G;11:41:16.06;+59:53:08.8;UMa;1.22;1.12;125;13.60;;10.43;9.73;9.48;22.72;S0;;;;;;;;2MASX J11411612+5953092,MCG +10-17-040,PGC 036263,SDSS J114116.05+595308.7,UGC 06649;;; +NGC3810;G;11:40:58.76;+11:28:16.1;Leo;3.35;2.29;28;11.40;;8.84;8.29;7.95;22.32;Sc;;;;;;;;2MASX J11405873+1128160,IRAS 11383+1144,MCG +02-30-010,PGC 036243,SDSS J114058.75+112816.0,SDSS J114058.75+112816.1,SDSS J114058.76+112816.1,UGC 06644;;; +NGC3811;G;11:41:16.63;+47:41:26.9;UMa;2.03;1.51;172;13.00;;10.63;10.00;9.70;22.96;SBc;;;;;;;;2MASX J11411665+4741266,IRAS 11386+4758,MCG +08-21-091,PGC 036265,SDSS J114116.62+474126.9,UGC 06650;;; +NGC3812;G;11:41:07.71;+24:49:18.1;Leo;1.71;0.52;25;13.90;;10.33;9.69;9.41;23.87;E;;;;;;;;2MASX J11410768+2449180,MCG +04-28-023,PGC 036256,UGC 06648;;; +NGC3813;G;11:41:18.66;+36:32:48.5;UMa;2.12;1.22;85;12.60;;9.81;9.14;8.86;22.24;Sb;;;;;;;;2MASX J11411865+3632481,MCG +06-26-019,PGC 036266,SDSS J114118.65+363248.4,UGC 06651;;; +NGC3814;G;11:41:27.68;+24:48:19.5;Leo;0.79;0.42;172;15.60;;;;;23.82;;;;;;;;;MCG +04-28-024,PGC 036267,SDSS J114127.67+244819.4;;; +NGC3815;G;11:41:39.29;+24:48:01.8;Leo;1.44;0.77;70;14.20;;11.23;10.49;10.24;23.20;Sab;;;;;;;;2MASX J11413930+2448019,MCG +04-28-025,PGC 036288,SDSS J114139.29+244801.7,SDSS J114139.29+244801.8,UGC 06654;;; +NGC3816;G;11:41:48.04;+20:06:13.1;Leo;1.70;0.90;68;13.46;12.50;10.52;9.91;9.60;23.35;S0;;;;;;;;2MASX J11414804+2006127,MCG +03-30-046,PGC 036292,SDSS J114148.03+200613.3,UGC 06656;;; +NGC3817;G;11:41:52.95;+10:18:15.8;Vir;1.10;0.85;122;14.40;;11.16;10.49;10.18;23.16;S0-a;;;;;;;;PGC 036299;;; +NGC3818;G;11:41:57.36;-06:09:20.4;Vir;2.44;1.55;96;13.00;;9.80;9.09;8.87;23.49;E;;;;;;;;2MASX J11415735-0609203,MCG -01-30-023,PGC 036304,UGCA 243;;; +NGC3819;G;11:42:05.86;+10:21:04.1;Vir;0.90;0.63;145;14.80;;11.46;10.82;10.54;23.41;E;;;;;;;;2MASX J11420585+1021047,MCG +02-30-013,PGC 036311,SDSS J114205.86+102104.0,SDSS J114205.86+102104.1,SDSS J114205.87+102104.1;;; +NGC3820;G;11:42:04.91;+10:23:03.3;Vir;0.69;0.52;25;15.59;;12.63;12.02;11.59;23.13;Sbc;;;;;;;;2MASX J11420490+1023027,MCG +02-30-014,PGC 036308,SDSS J114204.90+102303.2,SDSS J114204.90+102303.3,SDSS J114204.91+102303.3;;; +NGC3821;G;11:42:09.11;+20:18:56.4;Leo;1.36;1.01;175;13.70;12.88;11.13;10.41;10.15;22.98;S0-a;;;;;;;;2MASX J11420907+2018567,MCG +04-28-030,PGC 036314,SDSS J114209.10+201856.4,UGC 06663;;; +NGC3822;G;11:42:11.11;+10:16:40.0;Vir;1.36;0.76;176;13.70;;10.73;9.98;9.58;23.46;S0-a;;;;;3848;;;2MASX J11421107+1016398,IRAS 11395+1033,MCG +02-30-015,PGC 036319,SDSS J114211.10+101640.0,UGC 06661;;ALFALFA source is blended with NGC 3825.; +NGC3823;G;11:42:15.10;-13:52:01.0;Crt;1.93;1.18;86;14.00;;10.70;10.01;9.70;24.00;E;;;;;;;;2MASX J11421509-1352013,MCG -02-30-017,PGC 036331;;; +NGC3824;G;11:42:44.86;+52:46:46.5;UMa;1.23;0.69;115;14.60;;11.04;10.29;9.94;23.36;SBa;;;;;;;;2MASX J11424481+5246459,IRAS 11400+5303,MCG +09-19-161,PGC 036370,SDSS J114244.85+524646.6,SDSS J114244.86+524646.4,SDSS J114244.86+524646.5,UGC 06676;;; +NGC3825;G;11:42:23.73;+10:15:50.9;Vir;1.35;0.89;147;13.80;;10.73;10.03;9.89;23.10;Sa;;;;;3852;;;2MASX J11422374+1015508,MCG +02-30-018,PGC 036348,SDSS J114223.73+101550.8,SDSS J114223.73+101550.9,UGC 06668;;ALFALFA source is blended with NGC 3822.; +NGC3826;G;11:42:32.85;+26:29:20.0;Leo;1.06;0.79;68;14.40;;10.95;10.25;9.95;23.30;E;;;;;3830;;;2MASX J11423285+2629198,MCG +05-28-018,PGC 036359,SDSS J114232.84+262919.9,SDSS J114232.84+262920.0,SDSS J114232.85+262920.0,UGC 06671;;; +NGC3827;G;11:42:36.27;+18:50:43.6;Leo;1.01;0.73;74;13.60;;11.52;10.94;10.79;22.27;Sd;;;;;;;;2MASX J11423626+1850440,IRAS 11400+1907,MCG +03-30-054,PGC 036361,SDSS J114236.27+185043.6,UGC 06673;;; +NGC3828;G;11:42:58.42;+16:29:15.4;Leo;0.77;0.55;51;15.60;;12.16;11.38;11.15;23.73;E;;;;;;;;2MASX J11425845+1629151,MCG +03-30-057,PGC 036376,SDSS J114258.42+162915.3;;; +NGC3829;G;11:43:27.28;+52:42:40.1;UMa;1.04;0.55;97;15.00;;12.66;11.96;11.96;23.30;Sb;;;;;;;;2MASX J11432724+5242400,IRAS 11407+5259,MCG +09-19-164,PGC 036439,SDSS J114327.27+524240.0,SDSS J114327.27+524240.3,SDSS J114327.28+524240.0,UGC 06690;;; +NGC3830;Dup;11:42:32.85;+26:29:20.0;Leo;;;;;;;;;;;;;;;3826;;;;;; +NGC3831;G;11:43:18.60;-12:52:42.1;Crt;2.28;0.63;23;10.90;;10.80;10.02;9.77;24.27;S0-a;;;;;;;;2MASX J11431859-1252419,MCG -02-30-023,PGC 036417;;; +NGC3832;G;11:43:31.44;+22:43:31.6;Leo;1.87;1.51;7;14.00;;11.40;10.86;10.11;23.62;Sc;;;;;;;;2MASX J11433138+2243316,IRAS 11409+2300,MCG +04-28-040,PGC 036446,SDSS J114331.43+224331.5,SDSS J114331.43+224331.6,SDSS J114331.44+224331.6,UGC 06693;;; +NGC3833;G;11:43:28.98;+10:09:42.7;Vir;1.34;0.67;29;14.70;;11.19;10.68;10.48;23.34;Sc;;;;;;;;2MASX J11432894+1009423,MCG +02-30-020,PGC 036441,SDSS J114328.97+100942.7,SDSS J114328.98+100942.7,UGC 06692;;; +NGC3834;G;11:43:37.73;+19:05:25.7;Leo;0.86;0.60;133;15.10;;11.67;11.08;10.72;23.35;E-S0;;;;;;;;2MASX J11433771+1905256,MCG +03-30-065,PGC 036443,SDSS J114337.72+190525.6;;; +NGC3835;G;11:44:04.90;+60:07:11.2;UMa;1.91;0.64;62;13.00;;10.51;9.83;9.55;22.71;Sab;;;;;;;;2MASX J11440487+6007108,IRAS 11413+6023,MCG +10-17-055,PGC 036493,SDSS J114404.89+600711.2,SDSS J114404.90+600711.2,UGC 06703;;; +NGC3835A;G;11:47:22.90;+60:18:01.6;UMa;1.10;1.08;170;13.90;;11.46;10.80;10.60;22.98;E?;;;;;;;;2MASX J11472284+6018015,IRAS 11447+6034,MCG +10-17-068,PGC 036776,SDSS J114722.89+601801.5,UGC 06762;;; +NGC3836;GPair;11:43:29.80;-16:47:44.0;Crt;1.50;;;;;;;;;;;;;;;;;MCG -03-30-010;;;Diameter of the group inferred by the author. +NGC3836 NED01;G;11:43:29.51;-16:47:39.3;Crt;;;;;;;;;;;;;;;;;;MCG -03-30-010 NED01;;; +NGC3836 NED02;G;11:43:29.84;-16:47:47.3;Crt;1.20;0.93;138;13.39;;11.65;10.94;10.54;22.55;Sc;;;;;;;;2MASX J11432985-1647473,IRAS 11409-1631,MCG -03-30-010 NED02,PGC 036445;;; +NGC3837;G;11:43:56.43;+19:53:40.5;Leo;0.93;0.84;6;14.68;;11.01;10.29;9.96;22.96;E;;;;;;;;2MASX J11435642+1953403,MCG +03-30-068,PGC 036476,SDSS J114356.42+195340.4,UGC 06701;;; +NGC3838;G;11:44:13.76;+57:56:53.6;UMa;1.43;0.59;141;12.70;;10.23;9.55;9.35;22.58;S0-a;;;;;;;;2MASX J11441372+5756531,MCG +10-17-056,PGC 036505,SDSS J114413.75+575653.6,TYC 3838-691-1,UGC 06707;;; +NGC3839;G;11:43:54.33;+10:47:04.9;Leo;1.04;0.51;85;13.60;;11.76;11.11;10.68;22.28;Scd;;;;;;;;2MASX J11435429+1047051,IRAS 11413+1103,MCG +02-30-024,PGC 036475,SDSS J114354.33+104704.8,SDSS J114354.33+104704.9,SDSS J114354.33+104705.1,UGC 06700;;; +NGC3840;G;11:43:58.96;+20:04:37.3;Leo;0.79;0.68;67;14.89;13.84;12.05;11.18;10.89;22.79;Sa;;;;;;;;2MASX J11435898+2004373,IRAS 11413+2021,MCG +03-30-070,PGC 036477,SDSS J114358.95+200437.2,SDSS J114358.96+200437.3,UGC 06702;;; +NGC3841;G;11:44:02.15;+19:58:18.8;Leo;0.99;0.65;119;15.78;;11.65;10.90;10.57;23.26;E-S0;;;;;;;;2MASX J11440217+1958183,MCG +03-30-073,PGC 036469,SDSS J114402.15+195818.8,SDSS J114402.16+195818.8;;; +NGC3842;G;11:44:02.15;+19:56:59.3;Leo;2.14;1.49;177;13.70;11.82;10.04;9.39;9.08;23.31;E;;;;;;;;2MASX J11440217+1956593,MCG +03-30-072,PGC 036487,SDSS J114402.15+195659.3,UGC 06704;;; +NGC3843;G;11:43:54.63;+07:55:32.5;Vir;0.99;0.37;43;14.10;;11.17;10.42;10.11;22.97;S0-a;;;;;;;;2MASX J11435462+0755321,MCG +01-30-011,PGC 036471,SDSS J114354.63+075532.4,SDSS J114354.63+075532.5,UGC 06699;;; +NGC3844;G;11:44:00.79;+20:01:45.6;Leo;1.16;0.30;28;14.85;13.87;11.56;10.94;10.80;23.65;S0-a;;;;;;;;2MASX J11440075+2001453,MCG +03-30-069,PGC 036481,SDSS J114400.79+200145.5,SDSS J114400.79+200145.6,UGC 06705;;; +NGC3845;G;11:44:05.47;+19:59:46.0;Leo;0.95;0.47;125;15.48;;11.93;11.19;10.97;23.57;S0-a;;;;;;;;2MASX J11440543+1959463,MCG +03-30-074,PGC 036470,SDSS J114405.46+195945.9;;; +NGC3846;G;11:44:29.08;+55:39:08.1;UMa;0.97;0.63;134;14.70;;11.86;11.30;10.92;21.95;SBbc;;;;;;;;2MASX J11442911+5539073,IRAS 11417+5556,MCG +09-19-171,PGC 036539,SDSS J114429.05+553908.3,SDSS J114429.06+553908.0,SDSS J114429.07+553908.1,SDSS J114429.07+553908.2,SDSS J114429.08+553908.2,UGC 06710;;; +NGC3846A;G;11:44:14.82;+55:02:05.9;UMa;1.94;1.55;47;14.20;;12.02;11.37;11.28;24.32;IB;;;;;;;;2MASX J11441477+5502061,MCG +09-19-169,PGC 036506,SDSS J114414.82+550205.8,SDSS J114414.82+550205.9,SDSS J114414.83+550205.9,UGC 06706;;; +NGC3847;G;11:44:13.97;+33:30:52.3;UMa;1.52;1.36;130;14.60;;10.96;10.28;9.98;24.12;E;;;;;3856;;;2MASX J11441398+3330521,MCG +06-26-023,PGC 036504,SDSS J114413.97+333052.2,SDSS J114413.97+333052.3,SDSS J114413.98+333052.2,UGC 06708;;Identification as NGC 3856 is not certain.; +NGC3848;Dup;11:42:11.11;+10:16:40.0;Vir;;;;;;;;;;;;;;;3822;;;;;; +NGC3849;G;11:45:35.25;+03:13:54.6;Vir;0.67;0.40;29;14.70;;11.61;10.84;10.41;22.70;S0-a;;;;;;0730;;2MASX J11453527+0313550,IRAS 11430+0330,MCG +01-30-013,PGC 036658,SDSS J114535.24+031354.6,SDSS J114535.25+031354.4,SDSS J114535.25+031354.6;;; +NGC3850;G;11:45:35.56;+55:53:12.8;UMa;1.71;0.69;124;14.40;;;;;23.66;Sc;;;;;;;;MCG +09-19-174,PGC 036660,SDSS J114535.56+555312.8,SDSS J114535.57+555312.7,UGC 06733;;; +NGC3851;G;11:44:20.42;+19:58:51.1;Leo;0.63;0.48;83;15.91;;12.04;11.27;11.02;23.01;E-S0;;;;;;;;2MASX J11442041+1958508,MCG +03-30-077,PGC 036516,SDSS J114420.41+195851.0,SDSS J114420.42+195851.0,SDSS J114420.42+195851.1;;; +NGC3852;Dup;11:42:23.73;+10:15:50.9;Vir;;;;;;;;;;;;;;;3825;;;;;; +NGC3853;G;11:44:28.33;+16:33:29.2;Leo;1.43;0.82;140;13.50;;10.43;9.68;9.50;23.03;E;;;;;;;;2MASX J11442833+1633287,MCG +03-30-081,PGC 036535,SDSS J114428.32+163329.1,SDSS J114428.33+163329.2,UGC 06712;;; +NGC3854;G;11:44:52.05;-09:13:59.8;Crt;1.87;1.64;57;13.08;;10.07;9.39;9.12;23.01;SABb;;;;;3865;;;2MASX J11445205-0913595,MCG -01-30-028,PGC 036581;;; +NGC3855;G;11:44:25.78;+33:21:18.3;UMa;1.22;0.95;73;15.10;;11.78;11.04;10.68;23.75;Sb;;;;;;2953;;2MASX J11442576+3321182,MCG +06-26-025,PGC 036530,SDSS J114425.77+332118.2,SDSS J114425.78+332118.3,UGC 06709;;Identification as NGC 3855 is not certain.; +NGC3856;Dup;11:44:13.97;+33:30:52.3;UMa;;;;;;;;;;;;;;;3847;;;;;; +NGC3857;G;11:44:50.15;+19:31:58.3;Leo;0.90;0.55;48;15.10;;11.67;11.03;10.75;23.55;S0-a;;;;;;;;2MASX J11445012+1931579,MCG +03-30-084,PGC 036548,SDSS J114450.14+193158.2;;; +NGC3858;G;11:45:11.68;-09:18:50.3;Crt;1.41;0.77;71;13.00;;10.83;10.31;10.09;23.39;SBa;;;;;3866;;;2MASX J11451168-0918504,IRAS 11426-0902,MCG -01-30-029,PGC 036621;;; +NGC3859;G;11:44:52.24;+19:27:15.1;Leo;1.05;0.33;58;14.90;;12.17;11.37;11.13;22.58;Sm;;;;;;;;2MASX J11445225+1927149,IRAS 11423+1943,MCG +03-30-091,PGC 036582,SDSS J114452.23+192715.1,UGC 06721;;; +NGC3860;G;11:44:49.16;+19:47:42.1;Leo;1.32;0.72;40;14.61;;11.35;10.63;10.40;23.21;Sab;;;;;;;;2MASX J11444919+1947419,IRAS 11422+2003,MCG +03-30-088,PGC 036577,SDSS J114449.16+194742.2,UGC 06718;;; +NGC3861;G;11:45:03.88;+19:58:25.3;Leo;2.04;1.01;61;13.47;12.67;10.92;10.24;9.97;23.34;Sb;;;;;;;;2MASX J11450387+1958249,IRAS 11424+2015,MCG +03-30-093,PGC 036604,SDSS J114503.87+195825.2,SDSS J114503.88+195825.2,UGC 06724;;; +NGC3862;G;11:45:05.01;+19:36:22.7;Leo;1.09;1.09;155;14.98;13.97;10.48;9.77;9.49;22.79;E;;;;;;;;2MASX J11450498+1936229,MCG +03-30-095,PGC 036606,SDSS J114505.02+193622.8,UGC 06723;;; +NGC3863;G;11:45:05.52;+08:28:10.2;Vir;2.51;0.52;74;14.00;;10.65;9.90;9.62;23.47;SBbc;;;;;;;;2MASX J11450555+0828100,IRAS 11425+0844,MCG +02-30-028,PGC 036607,SDSS J114505.52+082810.2,SDSS J114505.53+082810.2,UGC 06722;;HOLM 286B is a star.; +NGC3864;G;11:45:15.68;+19:23:31.6;Leo;0.77;0.58;82;15.50;;12.45;11.70;11.41;23.56;Sab;;;;;;;;2MASX J11451571+1923316,MCG +03-30-097,PGC 036620,SDSS J114515.67+192331.5;;; +NGC3865;Dup;11:44:52.05;-09:13:59.8;Crt;;;;;;;;;;;;;;;3854;;;;;; +NGC3866;Dup;11:45:11.68;-09:18:50.3;Crt;;;;;;;;;;;;;;;3858;;;;;; +NGC3867;G;11:45:29.62;+19:24:00.6;Leo;1.44;0.82;176;14.60;;11.08;10.39;9.99;23.43;Sab;;;;;;;;2MASX J11452963+1924007,MCG +03-30-103,PGC 036649,SDSS J114529.61+192400.5,SDSS J114529.62+192400.5,UGC 06731;;; +NGC3868;G;11:45:29.94;+19:26:40.9;Leo;0.84;0.44;80;14.80;;11.71;11.04;10.74;23.22;S0-a;;;;;;;;2MASX J11452991+1926407,MCG +03-30-104,PGC 036638,SDSS J114529.93+192640.8,SDSS J114529.94+192640.8;;; +NGC3869;G;11:45:45.56;+10:49:28.6;Leo;1.67;0.46;136;13.50;;10.19;9.42;9.21;22.86;Sa;;;;;;;;2MASX J11454556+1049286,MCG +02-30-032,PGC 036669,SDSS J114545.56+104928.5,SDSS J114545.56+104928.6,SDSS J114545.57+104928.5,UGC 06737;;; +NGC3870;G;11:45:56.60;+50:11:59.1;UMa;1.03;0.75;24;13.20;;11.64;11.03;10.82;22.26;S0-a;;;;;;;;2MASX J11455663+5011596,IRAS 11432+5028,MCG +08-22-001,PGC 036686,SDSS J114556.59+501159.0,SDSS J114556.60+501159.0,SDSS J114556.60+501159.1,UGC 06742;;; +NGC3871;G;11:46:10.14;+33:06:31.5;UMa;0.94;0.20;104;15.40;;11.95;11.18;10.81;22.85;Sb;;;;;;2959;;2MASX J11461015+3306311,MCG +06-26-031,PGC 036702,SDSS J114610.14+330631.4,SDSS J114610.14+330631.5,UGC 06744;;; +NGC3872;G;11:45:49.06;+13:46:00.1;Leo;2.39;1.77;4;12.90;;9.51;8.74;8.51;23.47;E;;;;;;;;2MASX J11454906+1346000,MCG +02-30-033,PGC 036678,UGC 06738;;; +NGC3873;G;11:45:46.10;+19:46:26.2;Leo;1.14;1.06;0;14.20;;10.71;10.00;9.75;23.01;E;;;;;;;;2MASX J11454612+1946258,MCG +03-30-106,PGC 036670,SDSS J114546.10+194625.5,UGC 06735;;; +NGC3874;**;11:45:37.75;+08:34:26.1;Vir;;;;;;;;;;;;;;;;;;;;; +NGC3875;G;11:45:49.45;+19:46:02.7;Leo;1.59;0.36;86;14.80;;11.21;10.54;10.24;23.98;S0-a;;;;;;;;2MASX J11454945+1946028,MCG +03-30-105,PGC 036675,UGC 06739;;; +NGC3876;G;11:45:26.67;+09:09:38.6;Vir;1.12;0.64;105;13.40;;12.14;11.34;11.17;22.40;Sab;;;;;;;;2MASX J11452663+0909386,IRAS 11428+0926,MCG +02-30-029,PGC 036644,SDSS J114526.66+090938.5,UGC 06730;;; +NGC3877;G;11:46:07.70;+47:29:39.6;UMa;5.36;1.23;36;11.80;;8.76;8.02;7.75;23.01;Sc;;;;;;;;2MASX J11460778+4729401,IRAS 11434+4746,MCG +08-22-002,PGC 036699,SDSS J114607.79+472941.1,SDSS J114607.80+472941.1,SDSS J114607.80+472941.2,UGC 06745;;; +NGC3878;G;11:46:17.78;+33:12:16.1;UMa;0.60;0.60;145;15.50;;11.96;11.23;10.94;21.82;E;;;;;;;;2MASX J11461779+3312161,MCG +06-26-032,PGC 036708,SDSS J114617.77+331216.1,SDSS J114617.78+331216.1;;; +NGC3879;G;11:46:49.42;+69:23:01.3;Dra;2.04;0.50;131;13.50;;11.98;11.75;11.33;22.71;Sd;;;;;;;;2MASX J11464940+6923011,IRAS 11441+6939,MCG +12-11-040,PGC 036743,UGC 06752;;; +NGC3880;G;11:46:22.23;+33:09:42.4;UMa;0.94;0.90;115;14.80;;11.50;10.74;10.45;23.43;E;;;;;;;;2MASX J11462225+3309421,2MASX J11462225+3310051,MCG +06-26-033,PGC 036712,SDSS J114622.23+330942.3;;; +NGC3881;G;11:46:34.41;+33:06:23.1;UMa;1.20;1.04;15;15.20;;11.68;11.07;10.79;24.09;E-S0;;;;;;;;2MASX J11463441+3306229,MCG +06-26-034,PGC 036722,SDSS J114634.40+330623.0,SDSS J114634.40+330623.1,SDSS J114634.41+330623.0,SDSS J114634.42+330623.1;;; +NGC3882;G;11:46:06.55;-56:23:17.3;Cen;3.32;1.82;107;12.50;;9.05;8.30;8.11;23.68;SBbc;;;;;;;;2MASX J11460639-5623274,ESO 170-011,IRAS 11436-5606,PGC 036697;;; +NGC3883;G;11:46:47.18;+20:40:31.5;Leo;1.77;1.56;159;14.20;;10.93;10.32;9.94;23.70;Sb;;;;;;;;2MASX J11464719+2040312,MCG +04-28-053,PGC 036740,SDSS J114647.17+204031.4,SDSS J114647.17+204031.5,UGC 06754;;; +NGC3884;G;11:46:12.18;+20:23:29.9;Leo;1.91;1.41;10;13.79;12.88;10.40;9.70;9.41;23.57;Sa;;;;;;;;2MASX J11461218+2023297,MCG +04-28-051,PGC 036706,SDSS J114612.17+202329.9,SDSS J114612.18+202329.9,UGC 06746;;; +NGC3885;G;11:46:46.49;-27:55:19.8;Hya;2.74;1.11;120;12.68;11.89;9.44;8.70;8.38;23.48;S0-a;;;;;;;;2MASX J11464650-2755198,ESO 440-007,ESO-LV 440-0070,IRAS 11442-2738,MCG -05-28-006,PGC 036737;;; +NGC3886;G;11:47:05.60;+19:50:13.9;Leo;1.35;0.71;125;14.30;;10.70;10.01;9.73;23.48;E-S0;;;;;;;;2MASX J11470561+1950143,MCG +03-30-111,PGC 036756,SDSS J114705.59+195013.8,UGC 06760;;; +NGC3887;G;11:47:04.57;-16:51:16.6;Crt;3.27;2.57;10;11.40;;8.97;8.34;8.02;22.54;Sbc;;;;;;;;2MASX J11470456-1651167,IRAS 11445-1634,MCG -03-30-012,PGC 036754,UGCA 246;;; +NGC3888;G;11:47:34.37;+55:58:02.0;UMa;1.61;1.31;119;12.60;;10.22;9.54;9.25;22.28;SABc;;;;;;;;2MASX J11473433+5558021,IRAS 11449+5614,MCG +09-19-189,PGC 036789,SDSS J114734.37+555802.0,UGC 06765;;; +NGC3889;G;11:47:48.13;+56:01:06.0;UMa;0.73;0.41;123;;;12.34;11.68;11.52;23.63;E-S0;;;;;;;;2MASX J11474814+5601062,MCG +09-19-191,PGC 036819,SDSS J114748.11+560106.3,SDSS J114748.12+560106.0,SDSS J114748.13+560105.9,SDSS J114748.13+560106.0;;; +NGC3890;G;11:49:19.85;+74:18:07.9;Dra;0.87;0.78;50;14.10;;11.58;10.79;10.55;22.55;Sab;;;;;3939;;;2MASX J11491989+7418078,IRAS 11465+7434,MCG +13-09-003,PGC 036925,UGC 06788;;; +NGC3891;G;11:48:03.36;+30:21:33.6;UMa;1.72;1.29;71;13.70;;10.69;9.93;9.75;23.14;Sbc;;;;;;;;2MASX J11480336+3021335,MCG +05-28-031,PGC 036832,SDSS J114803.35+302133.5,SDSS J114803.35+302133.6,UGC 06772;;; +NGC3892;G;11:48:00.99;-10:57:43.4;Crt;3.08;2.70;98;12.21;;9.28;8.60;8.35;24.00;S0-a;;;;;;;;2MASX J11480099-1057432,MCG -02-30-030,PGC 036827;;; +NGC3893;G;11:48:38.19;+48:42:39.0;UMa;2.69;1.43;158;11.23;10.67;8.77;8.08;7.89;21.19;SABc;;;;;;;;2MASX J11483820+4842388,IRAS 11460+4859,MCG +08-22-007,PGC 036875,UGC 06778;;; +NGC3894;G;11:48:50.36;+59:24:56.4;UMa;2.66;1.83;18;12.90;;9.55;8.82;8.56;23.59;E;;;;;;;;2MASX J11485036+5924561,MCG +10-17-078,PGC 036889,SDSS J114850.34+592456.3,UGC 06779;;; +NGC3895;G;11:49:04.03;+59:25:57.6;UMa;1.19;0.81;124;14.00;;10.75;10.04;9.80;22.90;SBa;;;;;;;;2MASX J11490400+5925580,MCG +10-17-080,PGC 036907,SDSS J114904.01+592557.9,SDSS J114904.02+592557.6,SDSS J114904.03+592557.6,UGC 06785;;; +NGC3896;G;11:48:56.39;+48:40:28.8;UMa;1.39;0.86;129;14.05;13.57;12.47;11.94;11.65;22.45;SBa;;;;;;;;2MASX J11485638+4840287,MCG +08-22-008,PGC 036897,UGC 06781;;; +NGC3897;G;11:48:59.46;+35:00:57.8;UMa;1.53;1.16;107;14.20;;11.21;10.46;10.19;23.12;SBbc;;;;;;;;2MASX J11485947+3500579,MCG +06-26-041,PGC 036902,SDSS J114859.46+350057.7,SDSS J114859.46+350057.8,UGC 06784;;; +NGC3898;G;11:49:15.37;+56:05:03.7;UMa;3.47;2.11;107;11.70;;8.58;7.89;7.66;22.41;Sab;;;;;;;;2MASX J11491536+5605036,MCG +09-19-204,PGC 036921,SDSS J114915.24+560504.2,UGC 06787;;; +NGC3899;G;11:50:04.45;+26:28:45.3;Leo;1.51;0.67;4;13.20;;10.92;10.18;9.95;22.42;Sb;;;;;3912;;;2MASX J11500444+2628443,IRAS 11474+2645,MCG +05-28-037,PGC 036979,SDSS J115004.45+262845.2,SDSS J115004.45+262845.3,UGC 06801;;; +NGC3900;G;11:49:09.46;+27:01:19.3;Leo;2.55;1.25;2;12.50;;9.62;8.98;8.70;22.91;S0-a;;;;;;;;2MASX J11490943+2701194,MCG +05-28-034,PGC 036914,SDSS J114909.46+270119.3,UGC 06786;;; +NGC3901;G;11:42:49.72;+77:22:21.7;Cam;1.37;0.67;166;14.60;;12.53;12.08;11.60;23.38;Sc;;;;;;;;2MASX J11424981+7722212,MCG +13-09-001,PGC 036386,UGC 06675;;; +NGC3902;G;11:49:18.76;+26:07:17.8;Leo;1.27;0.82;89;14.00;;11.55;10.94;10.87;22.94;SABb;;;;;;;;2MASX J11491874+2607175,IRAS 11467+2623,MCG +04-28-055,PGC 036923,SDSS J114918.75+260717.7,SDSS J114918.76+260717.8,UGC 06790;;; +NGC3903;G;11:49:03.54;-37:31:01.6;Cen;1.28;1.11;133;13.47;;11.13;10.44;10.27;22.69;SABc;;;;;;;;2MASX J11490354-3731014,ESO 378-024,ESO-LV 378-0240,IRAS 11465-3714,MCG -06-26-008,PGC 036906;;; +NGC3904;G;11:49:13.22;-29:16:36.3;Hya;3.47;2.51;11;11.82;10.96;8.63;7.95;7.68;23.35;E;;;;;;;;2MASX J11491320-2916360,ESO 440-013,ESO-LV 440-0130,MCG -05-28-009,PGC 036918;;; +NGC3905;G;11:49:04.91;-09:43:47.4;Crt;1.89;1.29;63;13.00;;10.95;10.25;9.88;23.21;Sc;;;;;;;;2MASX J11490490-0943479,IRAS 11465-0927,MCG -01-30-035,PGC 036909;;; +NGC3906;G;11:49:40.50;+48:25:33.5;UMa;1.35;0.84;80;14.10;;11.81;11.17;11.02;22.52;SBcd;;;;;;;;2MASX J11494049+4825334,IRAS 11469+4842,MCG +08-22-012,PGC 036953,UGC 06797;;; +NGC3907;G;11:49:30.14;-01:05:11.5;Vir;1.06;0.67;40;14.63;;11.16;10.36;10.17;23.48;E-S0;;;;;;;;2MASX J11493017-0105112,MCG +00-30-028,PGC 036941,SDSS J114930.14-010511.4,UGC 06796;;; +NGC3907B;G;11:49:23.54;-01:05:01.6;Vir;1.49;0.41;71;14.80;;11.43;10.59;10.26;23.54;SBb;;;;;;;;2MASX J11492351-0105022,IRAS 11468-0048,MCG +00-30-026,PGC 036928,SDSS J114923.53-010501.5,UGC 06793;;; +NGC3908;G;11:49:52.68;+12:11:09.3;Leo;0.65;0.52;79;;;12.57;11.48;11.24;24.12;E;;;;;;;;2MASX J11495270+1211086,PGC 036967,SDSS J114952.68+121109.2,SDSS J114952.68+121109.3;;NGC identification is not certain.; +NGC3909;OCl;11:50:08.14;-48:14:17.3;Cen;6.60;;;;;;;;;;;;;;;;;MWSC 1979;;; +NGC3910;G;11:49:59.31;+21:20:01.1;Leo;1.43;0.94;144;14.40;;10.68;9.94;9.67;23.73;E-S0;;;;;;;;2MASX J11495932+2120012,MCG +04-28-058,PGC 036971,SDSS J114959.30+212001.1,UGC 06800;;; +NGC3911;G;11:49:22.09;+24:56:18.5;Leo;0.87;0.71;112;15.40;;13.72;13.22;12.84;23.60;SABb;;;;;;;;2MASX J11492209+2456185,MCG +04-28-056,PGC 036926,SDSS J114922.08+245618.4,SDSS J114922.08+245618.5,SDSS J114922.09+245618.5,UGC 06795;;; +NGC3912;Dup;11:50:04.45;+26:28:45.3;Leo;;;;;;;;;;;;;;;3899;;;;;; +NGC3913;G;11:50:38.94;+55:21:13.9;UMa;1.64;1.38;146;14.20;;11.60;11.04;10.80;23.03;Scd;;;;;;0740;;2MASX J11503892+5521139,IRAS 11480+5537,MCG +09-20-001,PGC 037024,SDSS J115038.93+552113.9,SDSS J115038.94+552113.9,UGC 06813;;HOLM 296B does not exist (it is probably a plate defect).; +NGC3914;G;11:50:32.65;+06:34:03.3;Vir;0.84;0.39;37;13.80;;11.23;10.47;10.26;22.07;SBb;;;;;;;;2MASX J11503264+0634030,IRAS 11479+0650,MCG +01-30-017,PGC 037014,SDSS J115032.64+063403.2,SDSS J115032.65+063403.3,UGC 06809;;; +NGC3915;G;11:49:24.53;-05:07:06.4;Vir;1.90;0.43;96;14.25;;11.83;11.29;11.06;24.62;S0-a;;;;;;2963;;2MASX J11492457-0507062,IRAS 11468-0450,MCG -01-30-036,PGC 036933;;The identification as NGC 3915 is very uncertain.; +NGC3916;G;11:50:51.05;+55:08:37.1;UMa;1.21;0.31;47;14.80;;11.52;10.77;10.51;22.84;Sb;;;;;;;;2MASX J11505098+5508372,IRAS 11481+5525,MCG +09-20-005,PGC 037047,SDSS J115051.04+550837.0,SDSS J115051.04+550837.1,SDSS J115051.05+550837.1,UGC 06819;;; +NGC3917;G;11:50:45.43;+51:49:28.8;UMa;4.61;1.03;76;12.50;;9.77;9.06;8.86;23.35;Sc;;;;;;;;2MASX J11504548+5149271,IRAS 11481+5206,MCG +09-20-008,PGC 037036,SDSS J115045.43+514928.7,UGC 06815;;; +NGC3918;PN;11:50:17.95;-57:10:56.4;Cen;0.32;;;8.40;8.10;;;;;;;15.69;;;;;HD 102854;ESO 170-013,IRAS 11478-5654;;; +NGC3919;G;11:50:41.53;+20:00:54.7;Leo;0.95;0.87;150;14.50;;10.81;10.11;9.80;23.16;E;;;;;;;;2MASX J11504150+2000544,MCG +03-30-119,PGC 037032,SDSS J115041.52+200054.6,SDSS J115041.52+200054.7,UGC 06810;;; +NGC3920;G;11:50:05.93;+24:55:12.0;Leo;1.05;0.89;131;14.10;;11.82;11.17;10.91;22.86;Sbc;;;;;;;;2MASX J11500592+2455123,IRAS 11475+2511,MCG +04-28-059,PGC 036981,SDSS J115005.93+245512.0,UGC 06803;;; +NGC3921;G;11:51:06.87;+55:04:43.5;UMa;2.02;1.20;30;13.40;12.64;10.79;10.06;9.81;23.29;S0-a;;;;;;;;2MASX J11510686+5504433,IRAS 11484+5521,MCG +09-20-009,PGC 037063,SDSS J115106.87+550443.4,UGC 06823;;"VV misprints dec as +56d21.5; corrected in MCG errata."; +NGC3922;G;11:51:13.43;+50:09:24.8;UMa;1.91;0.65;39;13.80;;10.81;10.23;10.00;23.56;S0-a;;;;;3924;;;2MASX J11511346+5009242,MCG +08-22-017,PGC 037072,SDSS J115113.42+500924.8,SDSS J115113.43+500924.8,UGC 06824;;; +NGC3923;G;11:51:01.69;-28:48:21.7;Hya;6.89;4.55;48;10.59;9.80;7.42;6.76;6.50;23.80;E;;;;;;;;2MASX J11510178-2848223,ESO 440-017,ESO-LV 440-0170,MCG -05-28-012,PGC 037061;;; +NGC3924;Dup;11:51:13.43;+50:09:24.8;UMa;;;;;;;;;;;;;;;3922;;;;;; +NGC3925;G;11:51:20.97;+21:53:20.9;Leo;1.23;0.82;15;15.30;;11.77;11.14;10.86;24.01;SABa;;;;;;;;2MASX J11512100+2153210,MCG +04-28-071,PGC 037078,SDSS J115120.96+215320.8;;; +NGC3926A;G;11:51:26.56;+22:01:40.7;Leo;0.62;0.51;86;;;;;;23.18;E-S0;;;;;;;;MCG +04-28-073,PGC 037079,SDSS J115126.56+220140.7,UGC 06829 NED01;;; +NGC3926B;G;11:51:28.23;+22:01:33.5;Leo;0.83;0.38;135;14.70;;;;10.64;23.57;E;;;;;;;;MCG +04-28-074,PGC 037080,UGC 06829 NED02;;; +NGC3927;Other;11:51:32.28;+28:08:24.8;Leo;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3928;G;11:51:47.62;+48:40:59.3;UMa;1.36;1.25;0;13.10;;10.59;9.94;9.67;22.70;E;;;;;;;;2MASX J11514768+4840593,IRAS 11491+4857,MCG +08-22-019,PGC 037136,SDSS J115147.62+484059.2,SDSS J115147.62+484059.3,UGC 06834;Miniature Spiral;; +NGC3929;G;11:51:42.53;+21:00:09.8;Leo;0.58;0.44;85;14.50;;11.89;11.18;10.91;22.37;S0;;;;;;;;2MASX J11514255+2100094,MCG +04-28-076,PGC 037126,SDSS J115142.52+210009.8,SDSS J115142.53+210009.7,SDSS J115142.53+210009.8,UGC 06832;;; +NGC3930;G;11:51:46.01;+38:00:54.4;UMa;2.66;1.98;38;13.50;;11.93;11.38;11.19;24.14;Sc;;;;;;;;2MASX J11514602+3800544,MCG +06-26-045,PGC 037132,UGC 06833;;; +NGC3931;G;11:51:13.45;+52:00:03.1;UMa;1.13;0.88;157;14.60;;11.44;10.80;10.60;23.28;E-S0;;;;;3917A;;;2MASX J11511340+5200032,MCG +09-20-011,PGC 037073,SDSS J115113.45+520003.0,SDSS J115113.45+520003.1,UGC 06825;;; +NGC3932;G;11:52:29.26;+48:27:32.3;UMa;0.97;0.44;50;15.10;;11.94;11.30;10.88;23.14;SBb;;;;;;;;2MASX J11522922+4827323,IRAS 11498+4844,MCG +08-22-023,PGC 037194,SDSS J115229.22+482732.2,SDSS J115229.24+482731.9;;; +NGC3933;G;11:52:02.05;+16:48:34.9;Leo;1.01;0.50;83;14.20;;11.49;10.82;10.52;22.65;SBab;;;;;;;;2MASX J11520204+1648350,MCG +03-30-122,PGC 037156,SDSS J115202.04+164834.8,SDSS J115202.05+164834.9,UGC 06839;;; +NGC3934;G;11:52:12.56;+16:51:05.2;Leo;0.92;0.67;73;15.00;;11.61;10.83;10.46;23.25;Sab;;;;;;;;2MASX J11521256+1651049,IRAS 11496+1707,MCG +03-30-123,PGC 037170,UGC 06841;;; +NGC3935;G;11:52:24.07;+32:24:13.7;UMa;1.03;0.60;112;14.00;;11.08;10.42;10.10;22.39;Sab;;;;;;;;2MASX J11522410+3224133,MCG +06-26-049,PGC 037183,SDSS J115224.06+322413.9,SDSS J115224.07+322413.9,SDSS J115224.07+322414.0,UGC 06843;;; +NGC3936;G;11:52:20.59;-26:54:21.2;Hya;4.55;0.78;64;12.58;;10.08;9.35;9.07;23.46;SBbc;;;;;;;;2MASX J11522059-2654211,ESO 504-020,ESO-LV 504-0200,IRAS 11497-2637,MCG -04-28-004,PGC 037178,UGCA 248;;; +NGC3937;G;11:52:42.62;+20:37:52.7;Leo;1.75;1.54;20;14.00;;10.41;9.71;9.42;23.41;E-S0;;;;;;;;2MASX J11524264+2037527,MCG +04-28-081,PGC 037219,SDSS J115242.61+203752.6,SDSS J115242.61+203752.7,UGC 06851;;; +NGC3938;G;11:52:49.45;+44:07:14.6;UMa;3.55;3.44;28;10.90;10.38;8.62;8.17;7.81;22.39;Sc;;;;;;;;2MASX J11524945+4407146,IRAS 11502+4423,MCG +07-25-001,PGC 037229,SDSS J115249.43+440714.6,UGC 06856;;; +NGC3939;Dup;11:49:19.85;+74:18:07.9;Dra;;;;;;;;;;;;;;;3890;;;;;; +NGC3940;G;11:52:46.45;+20:59:21.4;Leo;1.22;1.04;99;14.30;;10.76;10.08;9.76;23.12;E;;;;;;;;2MASX J11524641+2059217,MCG +04-28-082,PGC 037224,SDSS J115246.44+205921.3,UGC 06852;;; +NGC3941;G;11:52:55.36;+36:59:10.8;UMa;3.51;2.33;10;11.45;11.62;8.24;7.56;7.32;22.73;S0;;;;;;;;2MASX J11525536+3659109,MCG +06-26-051,PGC 037235,SDSS J115255.35+365910.7,UGC 06857;;; +NGC3942;G;11:51:30.14;-11:25:29.0;Crt;1.34;0.69;124;14.00;;11.83;11.17;11.06;22.69;SABc;;;;;;;;2MASX J11513013-1125290,IRAS 11489-1108,MCG -02-30-035,PGC 037099;;; +NGC3943;G;11:52:56.57;+20:28:44.8;Leo;0.97;0.91;130;14.70;;11.33;10.65;10.34;23.04;SBab;;;;;;;;2MASX J11525659+2028445,MCG +04-28-084,PGC 037237,SDSS J115256.57+202844.7;;; +NGC3944;G;11:53:05.08;+26:12:25.0;Leo;1.07;0.76;30;14.30;;11.02;10.47;10.19;22.99;E-S0;;;;;;;;2MASX J11530509+2612255,MCG +04-28-085,PGC 037244,SDSS J115305.08+261224.9,SDSS J115305.08+261225.0,UGC 06859;;; +NGC3945;G;11:53:13.73;+60:40:32.0;UMa;5.55;3.29;15;11.60;;8.52;7.61;7.53;24.12;S0-a;;;;;;;;2MASX J11531372+6040320,IRAS 11506+6056,MCG +10-17-096,PGC 037258,UGC 06860;;; +NGC3946;G;11:53:20.63;+21:01:17.5;Leo;0.66;0.54;83;15.50;;12.27;11.58;11.25;23.03;S0-a;;;;;;;;2MASX J11532062+2101175,MCG +04-28-089,PGC 037268,SDSS J115320.62+210117.4;;; +NGC3947;G;11:53:20.32;+20:45:06.2;Leo;1.37;0.80;106;14.20;;11.21;10.52;10.21;22.98;Sb;;;;;;;;2MASX J11532031+2045055,IRAS 11507+2101,MCG +04-28-088,PGC 037264,SDSS J115320.32+204506.1,UGC 06863;;; +NGC3948;*;11:53:36.65;+20:57:02.8;Leo;;;;;;;;;;;;;;;;;;SDSS J115336.65+205702.8;;; +NGC3949;G;11:53:41.72;+47:51:31.3;UMa;2.26;1.32;116;10.90;;9.44;8.80;8.60;21.46;Sbc;;;;;;;;2MASX J11534174+4751316,IRAS 11510+4808,MCG +08-22-029,PGC 037290,SDSS J115341.72+475131.3,UGC 06869;;; +NGC3950;G;11:53:41.41;+47:53:04.5;UMa;0.40;0.34;52;15.70;;13.26;12.64;12.35;23.21;E;;;;;;;;2MASX J11534137+4753052,MCG +08-22-030,PGC 037294,SDSS J115341.41+475304.4,SDSS J115341.41+475304.5;;NGC identification is not certain.; +NGC3951;G;11:53:41.25;+23:22:56.0;Leo;1.02;0.51;175;14.50;;11.48;10.80;10.47;22.66;Sab;;;;;;;;2MASX J11534125+2322557,IRAS 11511+2339,MCG +04-28-090,PGC 037288,SDSS J115341.24+232255.9,SDSS J115341.25+232255.9,UGC 06867;;; +NGC3952;G;11:53:40.63;-03:59:47.5;Vir;1.63;0.41;84;13.84;;11.84;11.35;11.01;22.06;SBm;;;;;;2972;;2MASX J11534064-0359474,IRAS 11510-0342,MCG -01-30-044,PGC 037285;;Confused HIPASS source; +NGC3953;G;11:53:48.92;+52:19:36.4;UMa;6.14;3.13;14;11.08;;7.92;7.33;7.05;22.64;Sbc;;;;;;;;2MASX J11534902+5219355,IRAS 11511+5236,MCG +09-20-026,PGC 037306,SDSS J115349.00+521936.6,UGC 06870;;; +NGC3954;G;11:53:41.68;+20:52:57.0;Leo;0.91;0.75;19;14.40;;11.05;10.37;10.09;23.02;E;;;;;;;;2MASX J11534168+2052567,MCG +04-28-091,PGC 037291,SDSS J115341.67+205256.9,SDSS J115341.68+205257.0,UGC 06866;;; +NGC3955;G;11:53:57.15;-23:09:51.0;Crt;4.15;1.21;166;12.30;11.90;9.75;9.05;8.75;24.07;S0-a;;;;;;;;2MASX J11535713-2309513,ESO 504-026,ESO-LV 504-0260,IRAS 11514-2253,MCG -04-28-005,PGC 037320;;; +NGC3956;G;11:54:00.69;-20:34:02.4;Crt;3.46;1.00;64;12.99;;10.78;10.42;10.04;23.22;SBc;;;;;;;;2MASX J11540068-2034023,ESO 572-013,ESO-LV 572-0130,IRAS 11514-2017,MCG -03-30-016,PGC 037325,UGCA 251;;Confused HIPASS source; +NGC3957;G;11:54:01.51;-19:34:08.0;Crt;3.24;0.61;176;13.00;;9.67;8.94;8.69;24.09;S0-a;;;;;;2965;;2MASX J11540154-1934073,ESO 572-014,ESO-LV 572-0140,IRAS 11515-1917,MCG -03-30-017,PGC 037326;;ESO 572- ? 004 applies to the nominal position for IC 2965.; +NGC3958;G;11:54:33.68;+58:22:01.3;UMa;1.26;0.51;30;14.07;13.17;10.75;10.08;9.80;22.65;Sa;;;;;;;;2MASX J11543369+5822012,MCG +10-17-098,PGC 037358,SDSS J115433.66+582201.4,SDSS J115433.66+582201.7,SDSS J115433.67+582201.3,SDSS J115433.68+582201.3,UGC 06880;;; +NGC3959;G;11:54:37.65;-07:45:23.4;Crt;0.88;0.59;153;14.00;;11.09;10.39;10.12;22.66;Sa;;;;;;;;2MASX J11543763-0745233,MCG -01-30-046,PGC 037363;;; +NGC3960;OCl;11:50:33.21;-55:40:11.4;Cen;6.00;;;9.07;8.30;;;;;;;;;;;;;MWSC 1982;;; +NGC3961;G;11:54:57.64;+69:19:48.4;Dra;1.30;1.28;165;14.70;;11.70;11.06;10.81;23.93;SBa;;;;;;;;2MASX J11545766+6919484,PGC 037390,UGC 06885;;; +NGC3962;G;11:54:40.10;-13:58:30.1;Crt;4.17;3.00;10;13.16;12.16;8.56;7.89;7.67;23.56;E;;;;;;;;2MASX J11544010-1358299,MCG -02-30-040,PGC 037366,UGCA 253;;; +NGC3963;G;11:54:58.71;+58:29:37.1;UMa;2.52;2.22;96;12.20;;10.28;9.72;9.30;23.24;Sbc;;;;;;;;2MASX J11545871+5829364,IRAS 11523+5846,MCG +10-17-100,PGC 037386,SDSS J115458.71+582936.9,SDSS J115458.71+582937.0,SDSS J115458.71+582937.1,SDSS J115458.71+582937.2,UGC 06884;;; +NGC3964;G;11:54:53.48;+28:15:44.7;Leo;0.89;0.67;78;15.20;;11.43;10.74;10.46;23.30;S0-a;;;;;;;;2MASX J11545343+2815444,MCG +05-28-043,PGC 037375,SDSS J115453.47+281544.6,SDSS J115453.48+281544.6,SDSS J115453.48+281544.7;;; +NGC3965;Other;11:55:07.42;-10:52:41.9;Crt;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC3966;G;11:56:44.19;+32:01:18.4;UMa;2.48;0.52;109;14.00;;10.07;9.38;8.98;24.43;S0-a;;;;;3986;;;2MASX J11564416+3201181,IRAS 11541+3217,MCG +05-28-053,PGC 037544,SDSS J115644.18+320118.3,SDSS J115644.19+320118.4,SDSS J115644.25+320116.5,UGC 06920;;; +NGC3967;G;11:55:10.40;-07:50:37.6;Crt;1.28;1.01;108;14.37;;10.92;10.15;9.96;23.68;E-S0;;;;;;;;2MASX J11551037-0750373,MCG -01-30-047,PGC 037398;;; +NGC3968;G;11:55:28.70;+11:58:06.1;Leo;1.91;1.31;17;13.30;;10.16;9.41;9.15;23.18;Sbc;;;;;;;;2MASX J11552868+1158059,IRAS 11529+1214,MCG +02-30-045,PGC 037429,SDSS J115528.69+115806.1,SDSS J115528.70+115806.1,UGC 06895;;; +NGC3969;G;11:55:09.24;-18:55:38.7;Crt;1.32;1.16;64;13.99;;10.70;9.97;9.71;23.30;S0-a;;;;;;;;2MASX J11550923-1855386,ESO 572-017,ESO-LV 572-0170,MCG -03-30-020,PGC 037396;;; +NGC3970;G;11:55:28.07;-12:03:40.6;Crt;1.19;0.52;101;14.00;;10.89;10.16;9.93;23.55;S0;;;;;;;;2MASX J11552806-1203405,MCG -02-30-041,PGC 037425;;; +NGC3971;G;11:55:36.39;+29:59:45.3;UMa;1.05;0.91;76;14.01;13.13;10.98;10.31;10.04;22.86;S0;;;;;3984;;;2MASX J11553641+2959452,MCG +05-28-047,PGC 037443,SDSS J115536.39+295945.2,SDSS J115536.39+295945.3,UGC 06899;;; +NGC3972;G;11:55:45.09;+55:19:14.7;UMa;3.67;0.99;117;13.14;;10.54;9.83;9.64;23.55;SABb;;;;;;;;2MASX J11554511+5519144,IRAS 11531+5535,MCG +09-20-032,PGC 037466,SDSS J115545.08+551914.6,SDSS J115545.09+551914.7,UGC 06904;;One of two 6cm sources associated with [WB92] 1154+5537; +NGC3973;G;11:55:37.00;+11:59:50.6;Leo;0.69;0.42;166;15.40;;12.74;12.12;11.98;23.84;S0-a;;;;;;;;2MASX J11553699+1159504,MCG +02-31-001,PGC 037439,SDSS J115536.99+115950.5,SDSS J115536.99+115950.6;;; +NGC3974;G;11:55:40.14;-12:01:38.8;Crv;1.18;0.96;170;14.00;;11.09;10.34;10.06;23.39;S0-a;;;;;;;;2MASX J11554013-1201386,MCG -02-31-001,PGC 037452;;; +NGC3975;G;11:55:53.69;+60:31:45.9;UMa;0.76;0.42;94;15.20;;13.12;12.42;12.14;23.53;SABb;;;;;;;;2MASX J11555367+6031461,MCG +10-17-103,PGC 037480,SDSS J115553.68+603146.2,SDSS J115553.69+603145.8,SDSS J115553.69+603145.9;;; +NGC3976;G;11:55:57.29;+06:44:58.0;Vir;3.13;0.90;57;12.80;;9.70;8.99;8.76;22.80;Sb;;;;;;;;2MASX J11555729+0644580,2MASX J11555763+0645030,IRAS 11533+0701,MCG +01-31-001,PGC 037483,UGC 06906;;; +NGC3977;G;11:56:07.20;+55:23:26.8;UMa;1.53;1.19;177;14.70;;11.56;11.00;10.57;23.93;Sab;;;;;3980;;;2MASX J11560714+5523263,MCG +09-20-034,PGC 037497,SDSS J115607.19+552326.9,SDSS J115607.20+552326.8,UGC 06909;;; +NGC3978;G;11:56:10.32;+60:31:21.1;UMa;1.58;1.46;25;13.20;;11.00;10.36;10.01;23.01;SABb;;;;;;;;2MASX J11561045+6031300,IRAS 11535+6047,MCG +10-17-105,PGC 037502,SDSS J115610.31+603121.0,SDSS J115610.31+603121.1,SDSS J115610.32+603121.1,SDSS J115610.33+603121.1,UGC 06910;;; +NGC3979;G;11:56:01.05;-02:43:15.1;Vir;1.23;0.65;99;14.20;;10.87;10.18;9.95;23.18;S0;;;;;;2976;;2MASX J11560108-0243151,MCG +00-31-003,PGC 037488,SDSS J115601.05-024315.1,UGC 06907;;; +NGC3980;Dup;11:56:07.20;+55:23:26.8;UMa;;;;;;;;;;;;;;;3977;;;;;; +NGC3981;G;11:56:07.45;-19:53:46.2;Crv;3.32;2.11;15;11.75;;9.53;8.78;8.46;23.14;Sbc;;;;;;;;2MASX J11560744-1953462,ESO 572-020,ESO-LV 572-0200,IRAS 11535-1937,MCG -03-31-001,PGC 037496,UGCA 255;;Confused and extended HIPASS source; +NGC3982;G;11:56:28.13;+55:07:30.9;UMa;2.13;1.87;25;12.20;11.70;9.77;9.08;8.85;22.05;SABb;;;;;;;;2MASX J11562816+5507313,IRAS 11538+5524,MCG +09-20-036,PGC 037520,SDSS J115628.12+550730.8,SDSS J115628.13+550730.8,SDSS J115628.13+550730.9,UGC 06918;;; +NGC3983;G;11:56:23.68;+23:52:04.6;Leo;1.17;0.27;113;14.80;;11.15;10.46;10.17;23.29;S0-a;;;;;;;;2MASX J11562369+2352049,MCG +04-28-098,PGC 037514,SDSS J115623.67+235204.6,SDSS J115623.68+235204.6,UGC 06914;;; +NGC3984;Dup;11:55:36.39;+29:59:45.3;UMa;;;;;;;;;;;;;;;3971;;;;;; +NGC3985;G;11:56:42.11;+48:20:02.2;UMa;1.06;0.70;67;13.00;;11.18;10.55;10.36;21.62;Sm;;;;;;;;2MASX J11564210+4820022,IRAS 11541+4836,MCG +08-22-045,PGC 037542,UGC 06921;;; +NGC3986;Dup;11:56:44.19;+32:01:18.4;UMa;;;;;;;;;;;;;;;3966;;;;;; +NGC3987;G;11:57:20.92;+25:11:43.4;Leo;2.72;0.68;59;14.40;;10.35;9.48;9.05;23.88;SBb;;;;;;;;2MASX J11572090+2511436,IRAS 11547+2528,MCG +04-28-099,PGC 037591,SDSS J115720.75+251140.6,SDSS J115720.83+251145.4,UGC 06928;;; +NGC3988;G;11:57:24.22;+27:52:39.1;Leo;0.76;0.59;50;14.70;;11.45;10.73;10.46;22.99;E;;;;;;;;2MASX J11572422+2752386,MCG +05-28-057,PGC 037609,SDSS J115724.22+275239.0,SDSS J115724.22+275239.1;;; +NGC3989;G;11:57:26.69;+25:13:59.1;Leo;0.76;0.38;123;15.70;;13.68;12.98;12.91;23.38;Sbc;;;;;;;;2MASX J11572664+2513586,MCG +04-28-100,PGC 037599,SDSS J115726.68+251359.0,SDSS J115726.69+251359.1;;; +NGC3990;G;11:57:35.56;+55:27:31.2;UMa;1.38;0.81;42;13.57;;10.48;9.75;9.55;22.88;E-S0;;;;;;;;2MASX J11573559+5527318,MCG +09-20-043,PGC 037618,SDSS J115735.57+552731.6,UGC 06938;;; +NGC3991;GPair;11:57:31.08;+32:20:16.0;UMa;1.80;;;;;;;;;;;;;;;;;MCG +06-26-060,UGC 06933;;;Diameter of the group inferred by the author. +NGC3991 NED01;G;11:57:30.38;+32:20:01.8;UMa;1.17;0.29;31;13.80;;11.67;11.05;10.88;21.36;IB;;;;;3991S;;;2MASX J11573046+3220030,IRAS 11549+3237,MCG +06-26-060 NED01,PGC 037613,SDSS J115730.38+322001.7,UGC 06933 NED01;;; +NGC3991 NED02;G;11:57:31.73;+32:20:30.2;UMa;0.83;0.50;15;14.54;;;;;22.98;Sab;;;;;3991N;;;MCG +06-26-060 NED02,PGC 200277,SDSS J115731.73+322030.1,SDSS J115731.73+322030.2,UGC 06933 NED02;;;B-Mag taken from LEDA +NGC3992;G;11:57:35.98;+53:22:28.3;UMa;8.07;5.64;78;10.94;9.88;7.85;7.19;6.94;23.45;Sbc;;;;109;;;;2MASX J11573598+5322282,IRAS 11549+5339,MCG +09-20-044,PGC 037617,SDSS J115735.96+532228.9,UGC 06937;;;V-mag taken from LEDA +NGC3993;G;11:57:37.82;+25:14:26.2;Com;1.68;0.51;140;14.80;;11.72;11.03;10.80;23.63;Sb;;;;;;;;2MASX J11573783+2514261,MCG +04-28-101,PGC 037619,SDSS J115737.81+251426.1,SDSS J115737.82+251426.1,SDSS J115737.82+251426.2,UGC 06935;;; +NGC3994;G;11:57:36.87;+32:16:39.4;UMa;0.85;0.46;10;13.51;12.87;10.76;10.04;9.72;21.23;Sc;;;;;;;;2MASX J11573685+3216400,MCG +06-26-059,PGC 037616,SDSS J115736.86+321639.4,SDSS J115736.87+321639.4,UGC 06936;;; +NGC3995;G;11:57:44.10;+32:17:38.6;UMa;2.59;0.95;38;12.81;;11.35;10.57;10.52;22.61;SABm;;;;;;;;2MASX J11574411+3217389,MCG +06-26-061,PGC 037624,SDSS J115744.09+321738.6,SDSS J115744.10+321738.6,UGC 06944;;; +NGC3996;G;11:57:46.06;+14:17:50.7;Com;0.83;0.64;51;14.40;;11.31;10.65;10.38;22.46;Sb;;;;;;;;2MASX J11574605+1417507,IRAS 11551+1434,MCG +03-31-004,PGC 037628,SDSS J115746.05+141750.6,SDSS J115746.06+141750.7,UGC 06941;;; +NGC3997;G;11:57:48.23;+25:16:14.3;Com;1.10;0.56;126;14.30;;11.87;11.20;10.97;22.50;SBb;;;;;;;;2MASX J11574822+2516142,IRAS 11552+2532,MCG +04-28-102,PGC 037629,UGC 06942;;; +NGC3998;G;11:57:56.13;+55:27:12.9;UMa;2.78;2.26;139;11.64;12.10;8.33;7.58;7.37;22.37;S0;;;;;;;;2MASX J11575616+5527128,MCG +09-20-046,PGC 037642,UGC 06946;;; +NGC3999;G;11:57:56.49;+25:04:05.8;Com;0.63;0.40;86;15.70;;13.27;12.57;12.26;23.78;E;;;;;;;;2MASX J11575647+2504062,PGC 037647,SDSS J115756.49+250405.8;;; +NGC4000;G;11:57:57.02;+25:08:40.1;Com;1.04;0.37;1;15.20;;12.33;11.74;11.41;23.28;SBbc;;;;;;;;2MASX J11575699+2508402,IRAS 11554+2524,MCG +04-28-103,PGC 037643,SDSS J115756.98+250838.9,UGC 06949;;; +NGC4001;G;11:58:06.78;+47:20:05.5;UMa;0.59;0.40;149;15.00;;12.81;11.99;11.85;23.22;Sbc;;;;;;;;2MASX J11580681+4720050,MCG +08-22-047,PGC 037656,SDSS J115806.78+472005.4;;; +NGC4002;G;11:57:59.30;+23:12:07.4;Com;1.34;0.61;111;14.70;;11.11;10.41;10.13;23.52;Sa;;;;;;;;2MASX J11575931+2312070,MCG +04-28-104,PGC 037635,SDSS J115759.29+231207.3;;; +NGC4003;G;11:57:59.04;+23:07:29.6;Com;1.04;0.61;160;14.80;;11.16;10.46;10.13;23.32;S0;;;;;;;;2MASX J11575902+2307300,MCG +04-28-105,PGC 037646,SDSS J115759.03+230729.6,UGC 06948;;; +NGC4004;G;11:58:05.23;+27:52:43.9;Com;1.17;0.51;8;14.00;;11.67;11.01;10.74;22.41;IB;;;;;;;;2MASX J11580522+2752441,IRAS 11555+2809,MCG +05-28-060,PGC 037654,SDSS J115805.22+275243.8,SDSS J115805.22+275243.9,SDSS J115805.23+275243.9,UGC 06950;;; +NGC4004B;G;11:57:51.38;+27:52:07.2;Com;0.76;0.47;75;15.20;;11.95;11.22;11.06;23.22;E-S0;;;;;;2982;;2MASX J11575134+2752072,MCG +05-28-059,PGC 037636,SDSS J115751.37+275207.2,SDSS J115751.38+275207.2;;Identification as IC 2982 is very uncertain.; +NGC4005;G;11:58:10.17;+25:07:20.1;Com;1.12;0.74;92;14.10;;11.00;10.29;10.13;22.78;S0-a;;;;;4007;;;2MASX J11581014+2507199,MCG +04-28-107,PGC 037661,SDSS J115810.16+250720.0,SDSS J115810.16+250720.1,UGC 06952;;; +NGC4006;G;11:58:05.78;-02:07:12.3;Vir;1.52;0.96;13;14.20;;10.48;9.75;9.45;23.89;E;;;;;;;;2MASX J11580578-0207124,MCG +00-31-006,PGC 037655,SDSS J115805.78-020712.2,UGC 06951;;; +NGC4007;Dup;11:58:10.17;+25:07:20.1;Com;;;;;;;;;;;;;;;4005;;;;;; +NGC4008;G;11:58:17.04;+28:11:33.0;Com;2.07;1.11;166;13.10;;9.76;9.08;8.83;23.38;E;;;;;;;;2MASX J11581704+2811330,MCG +05-28-061,PGC 037666,UGC 06953;;; +NGC4009;*;11:58:15.05;+25:11:23.1;Com;;;;;;;;;;;;;;;;;;SDSS J115815.04+251123.0;;; +NGC4010;G;11:58:37.89;+47:15:41.4;UMa;3.07;0.65;66;13.10;;10.67;9.88;9.59;23.04;SBcd;;;;;;;;2MASX J11583799+4715407,IRAS 11560+4732,MCG +08-22-049,PGC 037697,SDSS J115837.89+471541.3,SDSS J115837.89+471541.4,UGC 06964;;; +NGC4011;G;11:58:25.43;+25:05:51.5;Com;0.77;0.37;35;15.70;;13.21;12.64;12.27;23.49;Sc;;;;;;;;2MASX J11582545+2505521,PGC 037674,SDSS J115825.42+250551.5,SDSS J115825.43+250551.5;;; +NGC4012;G;11:58:27.53;+10:01:17.4;Vir;1.73;0.52;151;14.60;;11.34;10.72;10.43;23.52;SABb;;;;;;;;2MASX J11582752+1001169,MCG +02-31-006,PGC 037686,SDSS J115827.52+100117.4,SDSS J115827.53+100117.3,SDSS J115827.53+100117.4,UGC 06960;;; +NGC4013;G;11:58:31.38;+43:56:47.7;UMa;4.89;1.23;58;12.40;;8.82;8.01;7.63;23.64;SABb;;;;;;;;2MASX J11583141+4356492,IRAS 11559+4413,MCG +07-25-009,PGC 037691,SDSS J115831.38+435647.6,SDSS J115831.38+435647.7,UGC 06963;;; +NGC4014;G;11:58:35.81;+16:10:38.3;Com;1.63;0.99;119;13.50;;10.52;9.82;9.51;23.19;S0-a;;;;;4028;;;2MASX J11583580+1610384,IRAS 11560+1627,MCG +03-31-005,PGC 037695,SDSS J115835.83+161038.1,UGC 06961;;; +NGC4015;GPair;11:58:42.90;+25:02:25.0;Com;1.40;;;;;;;;;;;;;;;;;UGC 06965;;;Diameter of the group inferred by the author. +NGC4015 NED01;G;11:58:42.60;+25:02:11.8;Com;1.62;1.26;156;14.20;;10.84;10.16;9.94;23.70;E-S0;;;;;;;;2MASX J11584264+2502123,MCG +04-28-109,PGC 037702,SDSS J115842.60+250211.8,UGC 06965 NED01;;Component 'a)' in UGC notes.; +NGC4015 NED02;G;11:58:43.22;+25:02:37.8;Com;0.78;0.16;35;13.76;;;;;21.95;Sc;;;;;;;;MCG +04-28-110,PGC 037703,UGC 06965 NED02;;Component 'b)' in UGC notes.;B-Mag taken from LEDA +NGC4016;G;11:58:29.02;+27:31:43.6;Com;0.76;0.47;155;14.60;;;;;21.57;Sd;;;;;;;;2MASX J11582910+2731431,MCG +05-28-063,PGC 037687,SDSS J115829.01+273143.6,SDSS J115829.02+273143.6,UGC 06954;;; +NGC4017;G;11:58:45.67;+27:27:08.8;Com;1.57;1.08;69;13.50;;11.14;10.58;10.45;22.48;Sbc;;;;;;;;2MASX J11584562+2727084,IRAS 11561+2743,MCG +05-28-065,PGC 037705,SDSS J115845.66+272708.7,SDSS J115845.67+272708.7,SDSS J115845.67+272708.8,UGC 06967;;Misidentified in CGCG as 'NGC 4016'.; +NGC4018;G;11:58:40.70;+25:18:59.1;Com;1.39;0.41;162;14.70;;11.80;10.96;10.55;23.23;Sab;;;;;;;;2MASX J11584070+2518591,IRAS 11561+2535,MCG +04-28-108,PGC 037699,SDSS J115840.76+251858.8,UGC 06966;;; +NGC4019;G;12:01:10.42;+14:06:15.5;Com;1.48;0.30;145;13.90;;12.28;11.64;11.33;22.51;Sbc;;;;;;0755;;2MASX J12011038+1406162,IRAS 11585+1423,MCG +02-31-014,PGC 037912,SDSS J120110.53+140613.5,SDSS J120110.54+140613.5,UGC 07001;;; +NGC4020;G;11:58:56.67;+30:24:42.8;UMa;1.87;0.82;19;13.20;;11.59;10.98;10.76;22.66;Scd;;;;;;;;2MASX J11585693+3024490,IRAS 11563+3041,MCG +05-28-066,PGC 037723,SDSS J115856.67+302442.6,SDSS J115856.67+302442.8,UGC 06971;;; +NGC4021;G;11:59:02.59;+25:04:59.6;Com;0.93;0.84;81;15.30;;12.24;11.50;11.25;24.06;E;;;;;;;;2MASX J11590257+2504596,MCG +04-28-112,PGC 037730,SDSS J115902.58+250459.5,SDSS J115902.59+250459.5;;; +NGC4022;G;11:59:01.01;+25:13:22.1;Com;1.00;0.96;105;14.40;;11.40;10.74;10.53;23.10;S0;;;;;;;;2MASX J11590100+2513216,MCG +04-28-111,PGC 037729,SDSS J115901.01+251322.0,SDSS J115901.01+251322.1,UGC 06975;;; +NGC4023;G;11:59:05.47;+24:59:20.3;Com;0.92;0.75;30;14.60;;12.07;11.34;11.33;23.02;Sb;;;;;;;;2MASX J11590546+2459206,MCG +04-28-113,PGC 037732,SDSS J115905.46+245920.2,SDSS J115905.47+245920.2,UGC 06977;;; +NGC4024;G;11:58:31.25;-18:20:48.6;Crv;1.75;1.51;64;12.91;;9.66;8.91;8.73;22.67;E-S0;;;;;;;;2MASX J11583124-1820486,ESO 572-031,ESO-LV 572-0310,MCG -03-31-004,PGC 037690;;; +NGC4025;G;11:59:10.19;+37:47:36.3;UMa;1.42;0.92;34;14.90;;13.17;12.46;12.34;23.24;SBc;;;;;;;;2MASX J11591024+3747372,MCG +06-26-064,PGC 037738,SDSS J115910.18+374736.2,SDSS J115910.19+374736.3,UGC 06982;;; +NGC4026;G;11:59:25.19;+50:57:42.1;UMa;4.41;0.87;178;12.17;;8.52;7.79;7.58;23.54;S0;;;;;;;;2MASX J11592518+5057420,MCG +09-20-052,PGC 037760,UGC 06985;;; +NGC4027;G;11:59:30.17;-19:15:54.8;Crv;3.54;2.80;163;11.71;11.10;9.37;8.70;8.50;22.86;SBd;;;;;;;;2MASX J11593016-1915546,ESO 572-037,ESO-LV 572-0370,IRAS 11569-1859,MCG -03-31-008,PGC 037773,UGCA 260;;; +NGC4027A;G;11:59:29.39;-19:19:55.2;Crv;1.11;0.57;165;15.03;;;;;23.32;IB;;;;;;;;ESO 572-036,ESO-LV 572-0360,MCG -03-31-007,PGC 037772;;; +NGC4028;Dup;11:58:35.81;+16:10:38.3;Com;;;;;;;;;;;;;;;4014;;;;;; +NGC4029;G;12:00:03.17;+08:10:54.2;Vir;1.25;0.60;156;14.50;;11.43;10.92;10.55;23.27;SABb;;;;;;;;2MASX J12000318+0810536,MCG +01-31-008,PGC 037816,SDSS J120003.16+081054.1,SDSS J120003.16+081054.2,SDSS J120003.17+081054.2,UGC 06990;;; +NGC4030;G;12:00:23.63;-01:06:00.3;Vir;3.78;2.65;19;11.42;;8.27;7.60;7.33;22.50;Sbc;;;;;;;;2MASX J12002364-0105598,IRAS 11578-0049,MCG +00-31-016,PGC 037845,SDSS J120023.33-010559.3,SDSS J120023.62-010600.2,SDSS J120023.62-010600.3,UGC 06993;;Extended HIPASS source; +NGC4031;G;12:00:31.35;+31:56:51.3;UMa;0.67;0.47;48;14.70;;12.33;11.71;11.42;22.69;Sb;;;;;;;;2MASX J12003130+3156514,MCG +05-28-075,PGC 037855,SDSS J120031.34+315651.2;;; +NGC4032;G;12:00:32.82;+20:04:26.2;Com;1.35;1.06;179;12.70;;11.15;10.85;10.45;22.20;I;;;;;;;;2MASX J12003281+2004260,IRAS 11579+2021,MCG +03-31-010,PGC 037860,SDSS J120032.86+200426.2,UGC 06995;;; +NGC4033;G;12:00:34.74;-17:50:33.4;Crv;2.59;1.30;44;12.79;;9.58;8.94;8.70;23.54;E;;;;;;;;2MASX J12003474-1750333,ESO 572-042,ESO-LV 572-0420,MCG -03-31-011,PGC 037863;;; +NGC4034;G;12:01:29.66;+69:19:26.1;Dra;1.45;0.87;11;14.50;;12.19;11.51;11.38;23.68;Sc;;;;;;;;2MASX J12012963+6919261,MCG +12-11-044,PGC 037935,UGC 07006;;; +NGC4035;G;12:00:29.34;-15:56:53.1;Crv;1.23;1.11;22;13.70;;12.18;11.60;11.47;23.19;SABb;;;;;;;;2MASX J12002921-1556543,IRAS 11579-1540,MCG -03-31-010,PGC 037853;;; +NGC4036;G;12:01:26.75;+61:53:44.8;UMa;4.85;2.08;83;12.18;11.20;8.47;7.79;7.56;23.66;S0;;;;;;;;2MASX J12012689+6153445,IRAS 11588+6210,MCG +10-17-125,PGC 037930,SDSS J120126.74+615344.7,SDSS J120126.75+615344.8,UGC 07005;;; +NGC4037;G;12:01:23.67;+13:24:03.7;Com;2.38;2.22;30;13.80;;10.88;10.28;10.11;23.44;Sb;;;;;;;;2MASX J12012368+1324041,IRAS 11588+1340,MCG +02-31-015,PGC 037928,SDSS J120123.66+132403.6,SDSS J120123.67+132403.7,UGC 07002;;; +NGC4038;G;12:01:53.01;-18:52:03.4;Crv;5.42;3.78;80;10.91;;;;;22.94;SBm;;;;;;;;2MASS J12015301-1852034,C 060,ESO 572-047,ESO-LV 572-0470,ESO-LV 572-0481,MCG -03-31-014,PGC 037967,UGCA 264;Antennae Galaxies;ESO-LV has two entries for this object.; +NGC4039;G;12:01:53.51;-18:53:10.3;Crv;5.36;2.73;50;11.08;;;;;22.82;SBm;;;;;;;;2MASS J12015350-1853103,C 061,ESO 572-048,ESO-LV 572-0471,ESO-LV 572-0480,MCG -03-31-015,PGC 037969,UGCA 265;Antennae Galaxies;ESO-LV has two entries for this object.; +NGC4040;G;12:02:05.44;+17:49:23.6;Com;1.20;0.61;140;15.00;;11.70;11.02;10.77;24.12;E;;;;;;;;2MASX J12020544+1749232,MCG +03-31-018,PGC 037993,SDSS J120205.44+174923.5,SDSS J120205.44+174923.6,UGC 07013;;; +NGC4041;G;12:02:12.20;+62:08:14.0;UMa;2.57;2.39;70;11.60;;9.36;8.67;8.41;22.38;Sbc;;;;;;;;2MASX J12021217+6208142,IRAS 11596+6224,MCG +10-17-129,PGC 037999,SDSS J120212.20+620813.9,SDSS J120212.20+620814.0,UGC 07014;;; +NGC4042;G;12:02:46.78;+20:09:47.7;Com;0.41;0.32;124;15.50;;13.45;12.80;12.41;23.29;E;;;;;;;;2MASX J12024674+2009478,PGC 3781394,SDSS J120246.76+200947.6,SDSS J120246.77+200947.7;;NGC identification is not certain.; +NGC4043;G;12:02:22.96;+04:19:47.3;Vir;0.95;0.63;136;14.10;;11.17;10.42;10.31;22.84;S0-a;;;;;;;;2MASX J12022296+0419473,IRAS 11597+0437,MCG +01-31-012,PGC 038010,SDSS J120222.96+041947.3,SDSS J120222.97+041947.3,UGC 07015;;; +NGC4044;G;12:02:29.51;-00:12:44.7;Vir;1.12;1.03;5;14.60;;10.92;10.14;9.91;23.66;E;;;;;;;;2MASX J12022950-0012445,MCG +00-31-020,PGC 038018,UGC 07018;;"Star superposed 9"" northeast of the nucleus."; +NGC4045;G;12:02:42.24;+01:58:36.5;Vir;2.55;1.58;86;13.14;;9.74;9.07;8.75;23.13;Sa;;;;;4046;;;2MASX J12024226+0158363,IRAS 12001+0215,MCG +00-31-022,PGC 038031,SDSS J120242.23+015836.5,SDSS J120242.24+015836.4,SDSS J120242.24+015836.5,SDSS J120242.34+015837.2,UGC 07021;;; +NGC4045A;G;12:02:42.69;+01:57:08.0;Vir;0.92;0.42;146;15.20;;12.22;11.54;11.26;23.83;S0;;;;;;;;2MASX J12024266+0157083,MCG +00-31-021,PGC 038033,SDSS J120242.68+015707.9,SDSS J120242.69+015707.9;;; +NGC4046;Dup;12:02:42.24;+01:58:36.5;Vir;;;;;;;;;;;;;;;4045;;;;;; +NGC4047;G;12:02:50.68;+48:38:10.3;UMa;1.53;1.17;100;12.80;;10.16;9.46;9.17;22.35;Sb;;;;;;;;2MASX J12025065+4838106,IRAS 12002+4854,MCG +08-22-058,PGC 038042,SDSS J120250.67+483810.3,SDSS J120250.68+483810.3,UGC 07025;;; +NGC4048;G;12:02:50.19;+18:00:56.1;Com;0.67;0.52;92;14.40;;11.92;11.28;10.94;22.44;S0;;;;;;;;2MASX J12025025+1800559,MCG +03-31-020,PGC 038040,SDSS J120250.18+180056.0,UGC 07023;;; +NGC4049;G;12:02:54.70;+18:45:09.0;Com;1.16;0.72;51;14.20;;12.83;12.27;11.98;22.75;Sm;;;;;;;;2MASX J12025425+1845049,MCG +03-31-021,PGC 038050,UGC 07027;;; +NGC4050;G;12:02:53.95;-16:22:25.0;Crv;3.43;2.14;89;12.00;;9.75;9.11;8.86;24.15;Sab;;;;;;;;2MASX J12025395-1622249,IRAS 12003-1605,MCG -03-31-016,PGC 038049;;; +NGC4051;G;12:03:09.61;+44:31:52.8;UMa;4.89;4.26;146;11.08;12.92;8.58;8.06;7.67;22.87;SABb;;;;;;;;2MASX J12030968+4431525,IRAS 12005+4448,MCG +08-22-059,PGC 038068,SDSS J120309.61+443152.6,UGC 07030;;; +NGC4052;OCl;12:02:05.19;-63:13:24.5;Cru;5.10;;;;8.80;;;;;;;;;;;;;MWSC 1991;;; +NGC4053;G;12:03:11.57;+19:43:43.8;Com;1.06;0.62;107;14.60;;11.04;10.29;9.97;22.99;Sab;;;;;;;;2MASX J12031157+1943434,MCG +03-31-024,PGC 038069,SDSS J120311.56+194343.7,SDSS J120311.57+194343.7,UGC 07029;;; +NGC4054;GTrpl;12:03:13.10;+57:53:40.0;UMa;1.00;;;;;;;;;;;;;;;;;MCG +10-17-131;;VV misprints R.A. as 11h44.3m.;Diameter of the group inferred by the author. +NGC4054 NED01;G;12:03:12.46;+57:53:36.4;UMa;0.65;0.43;91;14.60;;13.13;12.76;12.67;23.12;Sbc;;;;;;;;2MASX J12031243+5753363,MCG +10-17-131 NED01,PGC 038078,SDSS J120312.46+575336.4;;; +NGC4054 NED02;G;12:03:13.42;+57:53:53.0;UMa;0.43;0.19;167;16.73;;14.85;14.47;13.88;23.70;Sc;;;;;;;;2MASX J12031339+5753529,MCG +10-17-131 NED02,SDSS J120313.42+575353.0,SDSS J120313.42+575353.1;;;B-Mag taken from LEDA +NGC4054 NED03;G;12:03:13.83;+57:53:26.0;UMa;0.62;0.44;121;15.53;;12.90;12.19;11.99;23.44;S0;;;;;;;;2MASX J12031377+5753259,MCG +10-17-131 NED03,SDSS J120313.82+575325.9,SDSS J120313.82+575326.0,SDSS J120313.82+575326.3,SDSS J120313.83+575326.0;;;B-Mag taken from LEDA +NGC4055;G;12:04:01.48;+20:13:56.4;Com;0.92;0.79;1;14.40;;10.83;10.08;9.76;22.53;E;;;;;4061;;;2MASX J12040140+2013559,2MASX J12040147+2013489,MCG +04-29-006,PGC 038146,SDSS J120401.47+201356.3,SDSS J120401.48+201356.3,SDSS J120401.48+201356.4,UGC 07044;;; +NGC4056;G;12:03:57.77;+20:18:45.0;Com;0.63;0.53;133;16.38;;13.65;13.06;12.93;24.36;E;;;;;;;;2MASX J12035771+2018449,PGC 038140,SDSS J120357.76+201844.9,SDSS J120357.77+201845.0;;NGC identification is not certain.; +NGC4057;G;12:04:06.17;+20:14:06.3;Com;1.29;0.99;120;14.00;;10.64;9.96;9.69;23.01;E;;;;;4065;;;2MASX J12040616+2014059,MCG +04-29-007,PGC 038156,SDSS J120406.16+201406.2,SDSS J120406.17+201406.3,UGC 07050;;; +NGC4058;G;12:03:49.06;+03:32:53.6;Vir;1.39;0.69;167;14.00;;10.65;10.01;9.75;23.42;S0-a;;;;;;;;2MASX J12034906+0332535,MCG +01-31-017,PGC 038124,UGC 07036;;; +NGC4059;Dup;12:04:11.30;+20:24:35.4;Com;;;;;;;;;;;;;;;4070;;;;;; +NGC4060;G;12:04:01.00;+20:20:14.7;Com;0.55;0.35;88;15.60;;12.59;11.86;11.64;23.05;E;;;;;;;;2MASX J12040098+2020149,PGC 038151,SDSS J120400.98+202014.6,SDSS J120400.99+202014.7;;NGC identification is not certain.; +NGC4061;Dup;12:04:01.48;+20:13:56.4;Com;;;;;;;;;;;;;;;4055;;;;;; +NGC4062;G;12:04:03.83;+31:53:44.9;UMa;4.14;1.61;101;11.90;11.21;9.13;8.47;8.21;22.94;SABc;;;;;;;;2MASX J12040383+3153449,IRAS 12015+3210,MCG +05-29-004,PGC 038150,SDSS J120403.82+315344.8,SDSS J120403.83+315344.9,UGC 07045;;; +NGC4063;G;12:04:05.99;+01:50:49.1;Vir;0.92;0.40;8;15.00;;11.51;10.88;10.61;23.39;S0-a;;;;;;;;2MASX J12040596+0150495,PGC 038154,SDSS J120405.98+015049.1,SDSS J120405.99+015049.1;;; +NGC4064;G;12:04:11.16;+18:26:36.3;Com;3.22;1.31;151;12.50;;9.45;8.78;8.56;22.94;SBa;;;;;;;;2MASX J12041119+1826364,IRAS 12016+1843,MCG +03-31-033,PGC 038167,SDSS J120411.15+182636.3,UGC 07054;;; +NGC4065;Dup;12:04:06.17;+20:14:06.3;Com;;;;;;;;;;;;;;;4057;;;;;; +NGC4066;G;12:04:09.42;+20:20:52.6;Com;1.16;1.09;170;14.40;;10.78;10.07;9.81;23.21;E;;;;;;;;2MASX J12040938+2020520,MCG +04-29-008,PGC 038161,SDSS J120409.40+202052.5,SDSS J120409.41+202052.6,UGC 07051;;; +NGC4067;G;12:04:11.54;+10:51:15.8;Vir;1.13;0.82;38;13.20;;10.80;10.15;9.90;22.18;SBb;;;;;;;;2MASX J12041155+1051156,IRAS 12016+1107,MCG +02-31-019,PGC 038168,SDSS J120411.54+105115.8,UGC 07048;;; +NGC4068;G;12:04:00.78;+52:35:17.8;UMa;1.92;1.16;29;13.29;;;;;22.78;I;;;;;;0757;;MCG +09-20-079,PGC 038148,SDSS J120400.77+523517.7,UGC 07047;;; +NGC4069;G;12:04:06.04;+20:19:25.6;Com;0.49;0.35;25;;;13.41;12.73;12.60;23.57;E;;;;;;;;2MASX J12040603+2019259,PGC 038166,SDSS J120406.03+201925.5,SDSS J120406.04+201925.6;;NGC identification is not certain.; +NGC4070;G;12:04:11.30;+20:24:35.4;Com;1.24;0.99;46;14.30;;10.73;10.01;9.75;23.33;E;;;;;4059;;;2MASX J12041129+2024351,MCG +04-29-009,PGC 038169,SDSS J120411.29+202435.4,UGC 07052;;; +NGC4071;PN;12:04:15.77;-67:18:36.4;Mus;1.05;;;12.90;13.00;;;;;;;18.20;19.20;;;;;ESO 094-012,IRAS 12016-6701,PN G298.3-04.8;;; +NGC4072;G;12:04:13.84;+20:12:35.0;Com;0.44;0.22;29;15.60;;12.33;11.48;11.34;22.62;S0;;;;;;;;2MASX J12041380+2012351,PGC 038176,SDSS J120413.83+201234.9,SDSS J120413.84+201234.9;;; +NGC4073;G;12:04:27.07;+01:53:45.5;Vir;2.09;1.70;99;13.80;13.21;9.46;8.71;8.49;23.00;E;;;;;;;;2MASX J12042705+0153456,MCG +00-31-029,PGC 038201,SDSS J120427.06+015345.4,SDSS J120427.07+015345.5,UGC 07060;;; +NGC4074;G;12:04:29.68;+20:18:58.4;Com;0.55;0.31;110;15.43;14.44;11.76;10.98;10.57;22.57;S0-a;;;;;;;;2MASX J12042964+2018581,MCG +04-29-011,PGC 038207,SDSS J120429.66+201858.6,SDSS J120429.67+201858.6;;; +NGC4075;G;12:04:37.83;+02:04:21.1;Vir;1.21;0.66;110;14.44;;11.05;10.33;10.04;23.78;S0-a;;;;;;;;2MASX J12043780+0204216,MCG +00-31-032,PGC 038216,SDSS J120437.82+020421.0;;; +NGC4076;G;12:04:32.52;+20:12:17.8;Com;0.87;0.79;78;14.30;;11.31;10.53;10.34;22.60;Sb;;;;;;;;2MASX J12043249+2012181,IRAS 12019+2029,MCG +03-31-034,PGC 038209,SDSS J120432.51+201217.7,SDSS J120432.51+201217.8,SDSS J120432.52+201217.8,UGC 07061;;; +NGC4077;G;12:04:38.05;+01:47:15.8;Vir;1.26;0.86;19;14.50;;10.81;10.10;9.79;23.50;S0;;;;;4140;;;2MASX J12043806+0147156,MCG +00-31-031,PGC 038218,SDSS J120438.05+014715.7,SDSS J120438.06+014715.8,UGC 07063;;The APM image includes two superposed stars.; +NGC4078;G;12:04:47.64;+10:35:44.1;Vir;1.17;0.58;17;13.90;;10.88;10.18;9.93;22.82;S0;;;;;4107;;;2MASX J12044762+1035439,MCG +02-31-023,PGC 038238,UGC 07066;;; +NGC4079;G;12:04:49.85;-02:22:56.6;Vir;1.73;1.18;135;14.00;;10.48;9.82;9.54;23.38;SABb;;;;;;;;2MASX J12044984-0222571,IRAS 12022-0206,MCG +00-31-034,PGC 038240,SDSS J120449.84-022256.5,UGC 07067;;; +NGC4080;G;12:04:51.83;+26:59:33.1;Com;1.23;0.58;121;14.00;;11.34;10.80;10.79;22.52;SBm;;;;;;;;2MASX J12045180+2659334,MCG +05-29-006,PGC 038244,SDSS J120451.82+265933.0,SDSS J120451.83+265933.1,UGC 07068;;; +NGC4081;G;12:04:33.91;+64:26:12.3;UMa;1.43;0.63;130;13.60;;11.05;10.32;10.05;22.65;Sa;;;;;4125A;;;2MASX J12043393+6426124,IRAS 12020+6442,MCG +11-15-015,PGC 038212,UGC 07062;;; +NGC4082;G;12:05:11.45;+10:40:14.2;Vir;0.78;0.35;70;15.50;;12.04;11.35;10.92;22.76;Sb;;;;;;;;2MASX J12051141+1040142,MCG +02-31-026,PGC 038274,SDSS J120511.44+104014.2,SDSS J120511.45+104014.2;;; +NGC4083;G;12:05:14.05;+10:36:47.6;Vir;0.88;0.46;35;15.10;;11.90;11.25;11.08;23.57;S0;;;;;;;;2MASX J12051406+1036482,MCG +02-31-024,PGC 038275,SDSS J120514.04+103647.6,SDSS J120514.05+103647.6;;; +NGC4084;G;12:05:15.26;+21:12:52.0;Com;1.08;1.07;120;14.90;;11.32;10.59;10.36;23.63;E;;;;;;;;2MASX J12051526+2112518,MCG +04-29-014,PGC 038272,SDSS J120515.25+211251.9;;; +NGC4085;G;12:05:22.71;+50:21:10.6;UMa;2.22;0.57;78;13.93;12.83;10.14;9.45;9.12;21.67;SABc;;;;;;;;2MASX J12052270+5021098,IRAS 12028+5037,MCG +09-20-086,PGC 038283,SDSS J120522.71+502110.6,UGC 07075;;; +NGC4086;G;12:05:29.37;+20:14:48.3;Com;1.17;0.87;85;15.10;;11.60;10.90;10.57;24.03;S0;;;;;;;;2MASX J12052935+2014488,MCG +04-29-016,PGC 038290,SDSS J120529.36+201448.2,SDSS J120529.37+201448.2,UGC 07076;;; +NGC4087;G;12:05:35.33;-26:31:21.5;Hya;2.00;1.69;40;13.11;;9.85;9.10;8.92;23.41;E-S0;;;;;;;;2MASX J12053534-2631217,ESO 505-010,ESO-LV 505-0100,MCG -04-29-005,PGC 038303;;; +NGC4088;G;12:05:34.19;+50:32:20.5;UMa;7.01;2.65;44;11.20;;8.48;7.77;7.48;23.45;SABc;;;;;;;;2MASX J12053418+5032205,IRAS 12030+5049,MCG +09-20-089,PGC 038302,SDSS J120534.21+503221.5,UGC 07081;;; +NGC4089;G;12:05:37.43;+20:33:20.6;Com;0.86;0.84;75;14.90;;11.38;10.67;10.40;23.16;E;;;;;;;;2MASX J12053741+2033207,MCG +04-29-017,PGC 038298,SDSS J120537.43+203320.5,SDSS J120537.43+203320.6;;; +NGC4090;G;12:05:27.92;+20:18:31.5;Com;1.12;0.50;38;15.00;;11.62;10.89;10.60;23.24;Sab;;;;;;;;2MASX J12052793+2018318,IRAS 12028+2035,MCG +04-29-015,PGC 038288,SDSS J120527.91+201831.4,SDSS J120527.91+201831.5,SDSS J120527.92+201831.5,UGC 07077;;"This is not IC 2997; that is probably nonexistent."; +NGC4091;G;12:05:40.09;+20:33:20.6;Com;0.94;0.24;42;15.20;;11.62;10.84;10.59;22.60;Sb;;;;;;;;2MASX J12054008+2033201,MCG +04-29-019,PGC 038308,SDSS J120540.08+203320.6,SDSS J120540.09+203320.6,UGC 07083;;; +NGC4092;G;12:05:50.11;+20:28:37.2;Com;1.01;0.99;40;14.40;;11.44;10.79;10.51;22.98;Sab;;;;;;;;2MASX J12055011+2028371,IRAS 12032+2045,MCG +04-29-020,PGC 038338,SDSS J120550.07+202837.1,SDSS J120550.07+202837.2,UGC 07087;;; +NGC4093;G;12:05:51.47;+20:31:19.1;Com;0.75;0.61;50;15.30;;11.86;11.21;10.94;23.33;E;;;;;;;;2MASX J12055147+2031191,MCG +04-29-021,PGC 038323,SDSS J120551.46+203119.0,SDSS J120551.47+203119.1;;; +NGC4094;G;12:05:53.96;-14:31:35.1;Crv;4.40;1.51;62;12.10;;10.36;9.69;9.46;23.88;Sc;;;;;;;;2MASX J12055396-1431352,IRAS 12033-1414,MCG -02-31-016,PGC 038346,UGCA 269;;; +NGC4095;G;12:05:54.22;+20:34:21.1;Com;1.36;1.07;149;14.60;;11.07;10.34;10.14;23.84;E;;;;;;;;2MASX J12055425+2034211,MCG +04-29-022,PGC 038324,SDSS J120554.21+203421.1,SDSS J120554.22+203421.0,SDSS J120554.22+203421.1;;; +NGC4096;G;12:06:01.13;+47:28:42.4;UMa;5.65;1.43;20;11.61;;8.77;8.08;7.81;22.48;SABc;;;;;;;;2MASX J12060116+4728420,IRAS 12034+4745,MCG +08-22-067,PGC 038361,SDSS J120601.13+472842.3,SDSS J120601.13+472842.4,UGC 07090;;; +NGC4097;G;12:06:02.51;+36:51:49.2;CVn;1.22;0.92;94;14.60;;11.19;10.59;10.30;23.66;S0;;;;;;;;2MASX J12060247+3651488,MCG +06-27-004,PGC 038363,SDSS J120602.51+365149.2,UGC 07092;;; +NGC4098;GPair;12:06:03.90;+20:36:22.0;Com;1.20;;;;;;;;;;;;;;4099;;;MCG +04-29-023,UGC 07091;;;Diameter of the group inferred by the author. +NGC4098 NED01;G;12:06:03.58;+20:36:29.1;Com;1.32;0.85;156;14.50;;10.89;10.17;9.94;23.37;Sab;;;;;;;;2MASX J12060358+2036290,MCG +04-29-023 NED01,PGC 038365,SDSS J120603.58+203629.0,SDSS J120603.58+203629.1,SDSS J120603.59+203629.1,UGC 07091 NED01;;; +NGC4098 NED02;G;12:06:04.22;+20:36:14.1;Com;1.23;0.79;161;14.64;;;;;23.99;Sb;;;;;;;;MCG +04-29-023 NED02,SDSSJ120603.75+203620.0,SDSSJ120603.75+203620.1;;;B-Mag taken from LEDA +NGC4099;Dup;12:06:03.90;+20:36:22.0;Com;;;;;;;;;;;;;;;4098;;;;;; +NGC4100;G;12:06:08.45;+49:34:57.7;UMa;4.56;1.30;167;11.70;;8.97;8.28;8.03;22.79;Sbc;;;;;;;;2MASX J12060860+4934563,IRAS 12036+4951,MCG +08-22-068,PGC 038370,SDSS J120608.45+493457.6,UGC 07095;;; +NGC4101;G;12:06:10.57;+25:33:25.2;Com;1.18;0.74;59;14.70;;11.29;10.57;10.30;23.48;S0-a;;;;;;;;2MASX J12061058+2533252,MCG +04-29-025,PGC 038373,SDSS J120610.56+253325.2,UGC 07093;;; +NGC4102;G;12:06:22.99;+52:42:39.9;UMa;2.94;1.67;37;11.80;;8.76;8.11;7.72;22.76;SABb;;;;;;;;2MASX J12062311+5242394,IRAS 12038+5259,MCG +09-20-094,PGC 038392,SDSS J120623.00+524239.7,SDSS J120623.74+524237.9,UGC 07096;;; +NGC4103;OCl;12:06:39.57;-61:15:00.3;Cru;7.80;;;;7.40;;;;;;;;;;;;;MWSC 1997;;; +NGC4104;G;12:06:38.97;+28:10:27.1;Com;2.50;1.09;34;13.70;13.58;;;;23.82;S0;;;;;;;;IRAS 12040+2827,MCG +05-29-016,PGC 038407,SDSS J120638.92+281026.8,SDSS J120638.97+281028.0,SDSS J120638.97+281028.1,UGC 07099;;; +NGC4105;G;12:06:40.77;-29:45:36.8;Hya;4.33;3.41;136;11.35;12.52;8.37;7.84;7.52;23.61;E;;;;;;;;2MASX J12064076-2945366,ESO 440-054,ESO-LV 440-0540,MCG -05-29-013,PGC 038411;;; +NGC4106;G;12:06:44.80;-29:46:05.9;Hya;4.14;3.33;94;11.61;11.35;;;;24.09;S0-a;;;;;;;;ESO 440-056,ESO-LV 440-0560,MCG -05-29-014,PGC 038417;;; +NGC4107;Dup;12:04:47.64;+10:35:44.1;Vir;;;;;;;;;;;;;;;4078;;;;;; +NGC4108;G;12:06:44.57;+67:09:47.1;Dra;1.63;1.33;105;13.04;;10.72;10.08;9.81;22.67;Sc;;;;;;;;2MASX J12064460+6709475,IRAS 12042+6726,MCG +11-15-023,PGC 038423,SDSS J120644.57+670947.1,TYC 4160-568-1,UGC 07101;;; +NGC4108A;G;12:05:49.66;+67:15:07.5;Dra;1.28;0.56;12;14.63;;12.64;12.18;12.23;23.29;Sbc;;;;;;;;2MASX J12054972+6715069,MCG +11-15-021,PGC 038343,SDSS J120549.65+671507.4,SDSS J120549.65+671507.5,UGC 07088;;; +NGC4108B;G;12:07:11.62;+67:14:06.6;Dra;1.33;1.02;122;14.29;;13.48;12.93;12.87;23.79;Scd;;;;;;;;2MASX J12071143+6714066,IRAS 12046+6730,MCG +11-15-025,PGC 038461,SDSS J120711.61+671406.5,SDSS J120711.61+671406.6,SDSS J120711.62+671406.5,SDSS J120711.62+671406.6,UGC 07106;;; +NGC4109;G;12:06:51.12;+42:59:44.3;CVn;0.70;0.53;146;14.84;;12.10;11.42;11.13;22.83;Sa;;;;;;;;2MASX J12065107+4259441,MCG +07-25-024,PGC 038427,SDSS J120651.11+425944.3,SDSS J120651.12+425944.3;;; +NGC4110;G;12:07:03.45;+18:31:54.2;Com;1.31;0.65;128;14.70;;11.49;10.82;10.50;23.26;SBb;;;;;;;;2MASX J12070346+1831541,MCG +03-31-040,PGC 038441,SDSS J120703.44+183154.3,UGC 07102;;; +NGC4111;G;12:07:03.13;+43:03:56.6;CVn;1.78;0.64;152;11.63;10.74;8.48;7.77;7.55;21.57;S0-a;;;;;;;;2MASX J12070312+4303554,MCG +07-25-026,PGC 038440,UGC 07103;;; +NGC4112;G;12:07:09.47;-40:12:29.4;Cen;1.70;0.99;5;12.83;;10.18;9.49;9.20;22.46;Sb;;;;;;;;2MASX J12070945-4012293,ESO 321-006,ESO-LV 321-0060,IRAS 12045-3955,MCG -07-25-003,PGC 038452;;; +NGC4113;G;12:07:08.48;+32:59:45.2;Com;0.81;0.47;62;14.80;;12.02;11.27;11.17;23.06;SBa;;;;;4122;;;2MASX J12070849+3259453,IRAS 12045+3316,MCG +06-27-011,PGC 038451,SDSS J120708.47+325945.1,SDSS J120708.48+325945.2;;; +NGC4114;G;12:07:12.29;-14:11:07.7;Crv;2.16;1.07;135;13.00;;10.38;9.69;9.42;24.01;SABa;;;;;;;;2MASX J12071225-1411074,MCG -02-31-018,PGC 038460;;; +NGC4115;*;12:07:09.55;+14:24:23.6;Com;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.;NGC identification is not certain. +NGC4116;G;12:07:37.15;+02:41:25.8;Vir;2.57;1.49;152;12.41;11.97;11.04;10.41;10.27;22.79;SBcd;;;;;;;;2MASX J12073681+0241319,2MASX J12073715+0241255,IRAS 12050+0258,MCG +01-31-022,PGC 038492,SDSS J120736.81+024132.2,UGC 07111;;Host galaxy of UM 476.; +NGC4117;G;12:07:46.11;+43:07:34.9;CVn;1.58;0.63;20;14.04;;10.93;10.34;10.05;23.72;S0;;;;;;;;2MASX J12074608+4307352,MCG +07-25-027,PGC 038503,SDSS J120746.11+430734.8,SDSS J120746.11+430734.9,UGC 07112;;; +NGC4118;G;12:07:52.87;+43:06:39.8;CVn;0.69;0.38;148;15.70;;14.18;14.25;13.56;23.77;S0-a;;;;;;;;2MASX J12075284+4306402,MCG +07-25-028,PGC 038507,SDSS J120752.86+430639.7,SDSS J120752.87+430639.8,UGC 07112 NOTES01;;; +NGC4119;G;12:08:09.62;+10:22:44.0;Vir;1.58;1.10;120;12.70;;9.37;8.72;8.49;22.04;S0-a;;;;;4124;3011;;2MASX J12080964+1022433,IRAS 12055+1039,MCG +02-31-036,PGC 038527,SDSS J120809.61+102243.9,SDSS J120809.61+102244.0,SDSS J120809.62+102244.0,UGC 07117;;Identification as NGC 4119 is not certain.; +NGC4120;G;12:08:31.02;+69:32:41.4;Dra;1.57;0.38;167;14.10;;12.13;11.43;11.06;22.81;Sc;;;;;;;;2MASX J12083100+6932414,IRAS 12060+6949,MCG +12-12-001,PGC 038553,UGC 07121;;; +NGC4121;G;12:07:56.63;+65:06:50.2;Dra;0.52;0.46;65;14.10;;11.54;10.87;10.67;21.33;E;;;;;;;;2MASX J12075667+6506503,MCG +11-15-026,PGC 038508,SDSS J120756.63+650650.2,SDSS J120756.63+650650.3,SDSS J120756.63+650650.4;;; +NGC4122;Dup;12:07:08.48;+32:59:45.2;Com;;;;;;;;;;;;;;;4113;;;;;; +NGC4123;G;12:08:11.11;+02:52:41.8;Vir;3.18;2.32;125;13.10;;9.45;8.81;8.79;22.95;Sc;;;;;;;;2MASX J12081108+0252419,IRAS 12056+0309,MCG +01-31-023,PGC 038531,SDSS J120811.10+025241.8,SDSS J120811.11+025241.8,UGC 07116;;; +NGC4124;Dup;12:08:09.62;+10:22:44.0;Vir;;;;;;;;;;;;;;;4119;;;;;; +NGC4125;G;12:08:06.02;+65:10:26.9;Dra;5.87;4.58;95;10.65;9.72;7.77;7.10;6.86;23.34;E;;;;;;;;2MASX J12080601+6510268,IRAS 12055+6527,MCG +11-15-027,PGC 038524,UGC 07118;;; +NGC4126;G;12:08:37.44;+16:08:34.0;Com;0.81;0.61;4;14.60;;11.47;10.76;10.53;22.84;S0;;;;;;;;2MASX J12083747+1608341,MCG +03-31-047,PGC 038565,SDSS J120837.43+160833.9,SDSS J120837.44+160833.9,SDSS J120837.44+160834.0,UGC 07123;;; +NGC4127;G;12:08:26.36;+76:48:14.5;Cam;1.51;0.82;134;13.50;;10.89;10.27;10.04;22.68;Sc;;;;;;;;2MASX J12082637+7648144,IRAS 12060+7705,MCG +13-09-012,PGC 038550,UGC 07122;;; +NGC4128;G;12:08:32.33;+68:46:03.4;Dra;2.21;0.67;62;12.70;;9.68;9.00;8.75;23.30;S0;;;;;;;;2MASX J12083235+6846034,MCG +12-12-002a,PGC 038555,UGC 07120;;; +NGC4129;G;12:08:53.22;-09:02:11.4;Vir;2.58;0.71;94;13.30;;10.60;9.82;9.62;23.11;SBab;;;;;4130;;;2MASX J12085319-0902112,IRAS 12063-0845,MCG -01-31-006,PGC 038580;;; +NGC4130;Dup;12:08:53.22;-09:02:11.4;Vir;;;;;;;;;;;;;;;4129;;;;;; +NGC4131;G;12:08:47.29;+29:18:17.2;Com;1.36;0.59;69;14.10;13.27;11.06;10.40;10.21;23.22;S0-a;;;;;;;;2MASX J12084728+2918172,MCG +05-29-019,PGC 038573,SDSS J120847.28+291817.1,SDSS J120847.28+291817.2,SDSS J120847.29+291817.2,UGC 07126;;; +NGC4132;G;12:09:01.40;+29:15:00.4;Com;1.14;0.41;21;14.60;13.99;11.82;11.14;10.81;23.18;Sab;;;;;;;;2MASX J12090142+2915003,IRAS 12064+2931,MCG +05-29-020,PGC 038593,SDSS J120901.40+291500.3,SDSS J120901.41+291500.4;;; +NGC4133;G;12:08:49.96;+74:54:15.5;Dra;1.66;1.09;132;13.10;;10.32;9.61;9.35;22.65;SABb;;;;;;;;2MASX J12084992+7454154,IRAS 12063+7510,MCG +13-09-013,PGC 038578,UGC 07127;;; +NGC4134;G;12:09:10.01;+29:10:36.9;Com;1.85;0.79;149;13.80;13.10;11.04;10.42;10.15;23.26;Sb;;;;;;;;2MASX J12090997+2910363,IRAS 12066+2927,MCG +05-29-023,PGC 038605,SDSS J120910.00+291036.8,SDSS J120910.01+291036.8,SDSS J120910.01+291036.9,TYC 1988-1531-1,UGC 07130;;; +NGC4135;G;12:09:08.81;+44:00:11.5;CVn;0.76;0.54;96;14.79;14.02;12.13;11.44;11.03;22.68;SABb;;;;;;;;2MASX J12090882+4400112,MCG +07-25-032,PGC 038601,SDSS J120908.80+440011.4,SDSS J120908.80+440011.5,SDSS J120908.81+440011.5;;; +NGC4136;G;12:09:17.69;+29:55:39.4;Com;2.34;2.18;30;11.69;;10.32;9.61;9.31;22.59;Sc;;;;;;;;2MASX J12091770+2955393,IRAS 12067+3012,MCG +05-29-025,PGC 038618,SDSS J120917.70+295539.4,UGC 07134;;; +NGC4137;G;12:09:17.51;+44:05:24.6;CVn;0.79;0.52;175;14.92;14.34;12.70;12.25;11.72;22.99;Sc;;;;;;;;2MASX J12091745+4405242,MCG +07-25-033,PGC 038619,SDSS J120917.50+440524.6,SDSS J120917.51+440524.6,UGC 07135 NED02;;; +NGC4138;G;12:09:29.78;+43:41:07.1;CVn;2.92;1.64;150;12.29;11.32;9.12;8.42;8.20;23.30;S0-a;;;;;;;;2MASX J12092978+4341071,MCG +07-25-035,PGC 038643,UGC 07139;;"Bright foreground star 4"" from nucleus."; +NGC4139;G;12:04:34.03;+01:48:05.8;Vir;1.20;0.48;159;14.80;;11.51;10.90;10.62;23.87;S0;;;;;;2989;;2MASX J12043399+0148056,MCG +00-31-030,PGC 038213,SDSS J120434.02+014805.7,SDSS J120434.03+014805.7,SDSS J120434.03+014805.8;;; +NGC4140;Dup;12:04:38.05;+01:47:15.8;Vir;;;;;;;;;;;;;;;4077;;;;;; +NGC4141;G;12:09:47.32;+58:50:57.1;UMa;1.18;0.75;70;14.50;;;;;23.49;Sc;;;;;;;;MCG +10-17-152,PGC 038669,SDSS J120947.31+585057.0,SDSS J120947.32+585057.1,UGC 07147;;; +NGC4142;G;12:09:30.19;+53:06:17.8;UMa;1.76;0.91;174;14.30;;;;;23.31;SBcd;;;;;;;;MCG +09-20-102,PGC 038645,UGC 07140;;; +NGC4143;G;12:09:36.06;+42:32:03.0;CVn;2.73;1.68;144;13.04;12.08;8.80;8.10;7.85;22.72;S0;;;;;;;;2MASX J12093608+4232031,MCG +07-25-036,PGC 038654,SDSS J120936.06+423203.0,UGC 07142;;; +NGC4144;G;12:09:58.60;+46:27:25.8;UMa;5.24;1.00;103;12.17;;10.12;9.59;9.39;23.01;SABc;;;;;;;;2MASX J12095860+4627258,IRAS 12074+4644,MCG +08-22-077,PGC 038688,SDSS J120958.41+462726.6,UGC 07151;;; +NGC4145;G;12:10:01.52;+39:53:01.9;CVn;4.62;2.11;100;12.20;;9.47;8.87;8.48;23.19;Scd;;;;;;;;2MASX J12100152+3953019,MCG +07-25-040,PGC 038693,UGC 07154;;; +NGC4146;G;12:10:18.26;+26:25:50.7;Com;1.29;1.17;75;13.80;;10.94;10.29;9.94;23.23;Sab;;;;;;;;2MASX J12101822+2625508,MCG +05-29-028,PGC 038721,SDSS J121018.25+262550.6,SDSS J121018.26+262550.7,UGC 07163;;; +NGC4147;GCl;12:10:06.17;+18:32:31.7;Com;2.40;;;11.45;10.74;9.82;9.29;9.23;;;;;;;4153;;;2MASX J12100614+1832317,MWSC 2004;;; +NGC4148;G;12:10:07.97;+35:52:39.4;CVn;1.63;1.07;163;14.60;;11.03;10.35;10.08;24.14;S0-a;;;;;;;;2MASX J12100796+3552394,MCG +06-27-018,PGC 038704,SDSS J121007.96+355239.3,SDSS J121007.96+355239.4,SDSS J121007.97+355239.4,SDSS J121007.98+355239.3,UGC 07158;;; +NGC4149;G;12:10:32.84;+58:18:14.9;UMa;1.37;0.27;86;13.90;;10.99;10.13;9.80;22.24;SABb;;;;;4154;;;2MASX J12103285+5818137,IRAS 12080+5834,MCG +10-17-155,PGC 038741,SDSS J121032.82+581815.1,SDSS J121032.83+581814.9,SDSS J121032.84+581814.8,UGC 07167;;; +NGC4150;G;12:10:33.65;+30:24:05.5;Com;1.99;1.33;148;12.44;11.64;9.92;9.25;8.99;22.70;S0;;;;;;;;2MASX J12103365+3024053,IRAS 12080+3040,MCG +05-29-029,PGC 038742,UGC 07165;;; +NGC4151;G;12:10:32.58;+39:24:20.6;CVn;2.88;2.21;50;12.18;11.48;8.50;7.79;7.38;22.23;Sab;;;;;;;;2MASX J12103265+3924207,MCG +07-25-044,PGC 038739,SDSS J121032.57+392421.1,TYC 3017-939-1,UGC 07166;;; +NGC4152;G;12:10:37.50;+16:01:58.5;Com;1.36;0.89;138;14.00;13.35;10.54;9.88;9.63;21.91;SABc;;;;;;;;2MASX J12103751+1601585,IRAS 12080+1618,MCG +03-31-052,PGC 038749,SDSS J121037.50+160158.5,UGC 07169;;; +NGC4153;Dup;12:10:06.17;+18:32:31.7;Com;;;;;;;;;;;;;;;4147;;;;;; +NGC4154;Dup;12:10:32.84;+58:18:14.9;UMa;;;;;;;;;;;;;;;4149;;;;;; +NGC4155;G;12:10:45.69;+19:02:27.0;Com;1.24;1.05;76;14.70;;10.99;10.28;10.00;23.68;E;;;;;;;;2MASX J12104567+1902267,MCG +03-31-058,PGC 038761,SDSS J121045.68+190227.0,UGC 07172;;; +NGC4156;G;12:10:49.61;+39:28:21.8;CVn;1.11;0.95;71;15.01;14.32;11.00;10.35;10.06;22.83;Sb;;;;;;;;2MASX J12104958+3928223,MCG +07-25-045,PGC 038773,SDSS J121049.60+392822.1,SDSS J121049.61+392822.1,UGC 07173;;; +NGC4157;G;12:11:04.37;+50:29:04.8;CVn;6.22;1.14;65;12.15;11.35;8.56;7.59;7.36;23.65;SABb;;;;;;;;2MASX J12110436+5029048,IRAS 12085+5045,MCG +09-20-106,PGC 038795,SDSS J121104.35+502904.1,UGC 07183;;; +NGC4158;G;12:11:10.17;+20:10:32.4;Com;1.45;1.14;77;13.10;;10.69;10.03;9.75;22.65;SABb;;;;;;;;2MASX J12111016+2010327,IRAS 12086+2027,MCG +03-31-060,PGC 038802,SDSS J121110.16+201032.4,UGC 07182;;; +NGC4159;G;12:10:53.62;+76:07:33.1;Dra;1.36;0.55;34;14.30;;12.16;11.42;11.09;22.92;Scd;;;;;;;;2MASX J12105363+7607329,IRAS 12085+7624,MCG +13-09-015,PGC 038777,UGC 07174;;; +NGC4160;**;12:12:01.74;+43:44:08.1;CVn;;;;;;;;;;;;;;;;;;;;Identification as NGC 4160 is uncertain.; +NGC4161;G;12:11:33.46;+57:44:15.0;UMa;1.06;0.68;51;13.70;;11.00;10.30;10.16;22.42;Sbc;;;;;;;;2MASX J12113350+5744147,IRAS 12090+5800,MCG +10-18-002,PGC 038834,SDSS J121133.45+574414.9,SDSS J121133.45+574415.1,SDSS J121133.46+574415.0,UGC 07191;;; +NGC4162;G;12:11:52.47;+24:07:25.2;Com;2.28;1.37;173;12.60;;10.29;9.62;9.37;22.80;Sbc;;;;;;;;2MASX J12115246+2407252,IRAS 12093+2423,MCG +04-29-046,PGC 038851,SDSS J121152.49+240724.9,UGC 07193;;; +NGC4163;G;12:12:09.16;+36:10:09.1;CVn;1.67;1.12;8;13.70;13.20;;;;23.20;I;;;;;4167;;;MCG +06-27-026,PGC 038881,UGC 07199;;; +NGC4164;G;12:12:05.46;+13:12:20.3;Vir;0.71;0.46;114;15.70;;12.47;11.94;11.52;23.50;E;;;;;;;;PGC 038877,SDSS J121205.45+131220.2,SDSS J121205.45+131220.3;;; +NGC4165;G;12:12:11.80;+13:14:47.5;Vir;1.24;0.67;161;14.38;13.54;11.03;11.05;10.50;23.15;SABa;;;;;;3035;;2MASX J12121181+1314472,MCG +02-31-045 NED01,PGC 038885,SDSS J121211.79+131447.4,SDSS J121211.80+131447.5,UGC 07201;;; +NGC4166;G;12:12:09.56;+17:45:25.3;Com;1.05;0.52;34;14.30;;10.85;10.16;9.90;23.01;S0;;;;;;;;2MASX J12120956+1745248,MCG +03-31-068,PGC 038882,SDSS J121209.56+174525.2,UGC 07198;;; +NGC4167;Dup;12:12:09.16;+36:10:09.1;CVn;;;;;;;;;;;;;;;4163;;;;;; +NGC4168;G;12:12:17.27;+13:12:18.7;Vir;2.92;2.28;121;12.11;11.18;9.36;8.69;8.44;23.21;E;;;;;;;;2MASX J12121723+1312192,MCG +02-31-046,PGC 038890,SDSS J121217.26+131218.6,SDSS J121217.26+131218.7,SDSS J121217.27+131218.7,UGC 07203;;The 2MASS peak is 6 arcsec northwest of the optical nucleus.; +NGC4169;G;12:12:18.78;+29:10:45.9;Com;1.64;0.81;151;12.90;12.34;10.06;9.39;9.08;22.93;S0;;;;;;;;2MASX J12121881+2910454,MCG +05-29-032,PGC 038892,SDSS J121218.78+291045.8,UGC 07202;;; +NGC4170;*;12:12:13.24;+29:10:00.5;Com;;;;;;;;;;;;;;;;;;SDSS J121213.24+291000.4;;Identification as NGC 4170 is uncertain.;Identification as NGC 4170 is uncertain. +NGC4171;*;12:12:38.39;+29:13:28.2;Com;;;;;;;;;;;;;;;;;;;;Identification as NGC 4171 is uncertain.;Identification as NGC 4171 is uncertain. +NGC4172;G;12:12:14.89;+56:10:39.2;UMa;1.23;1.16;0;14.40;;10.83;10.11;9.87;23.38;Sab;;;;;;;;2MASX J12121490+5610386,MCG +09-20-109,PGC 038887,SDSS J121214.88+561039.1,SDSS J121214.89+561039.1,SDSS J121214.89+561039.2,SDSS J121214.89+561039.3,UGC 07205;;; +NGC4173;G;12:12:21.46;+29:12:25.4;Com;2.34;0.52;134;13.73;13.34;;;;22.90;SBcd;;;;;;;;MCG +05-29-033,PGC 038897,SDSS J121221.45+291225.3,UGC 07204;;; +NGC4174;G;12:12:26.89;+29:08:57.2;Com;0.91;0.41;50;14.30;13.64;11.53;10.86;10.59;22.70;S0-a;;;;;;;;2MASX J12122691+2908574,MCG +05-29-034,PGC 038906,SDSS J121226.88+290857.1,SDSS J121226.89+290857.2,UGC 07206;;; +NGC4175;G;12:12:31.05;+29:10:06.4;Com;1.61;0.33;130;14.20;13.45;10.78;9.98;9.60;22.91;SBb;;;;;;;;2MASX J12123108+2910069,IRAS 12099+2926,MCG +05-29-036,PGC 038912,UGC 07211;;; +NGC4176;G;12:12:36.83;-09:09:37.7;Vir;0.70;0.46;76;15.06;;12.66;12.17;11.75;23.01;Sb;;;;;;;;2MASX J12123676-0909309,PGC 038928;;; +NGC4177;G;12:12:41.26;-14:00:52.4;Crv;1.82;1.27;61;13.00;;10.42;9.78;9.59;23.01;Sc;;;;;;;;2MASX J12124127-1400523,IRAS 12101-1344,MCG -02-31-021,PGC 038937;;; +NGC4178;G;12:12:46.45;+10:51:57.5;Vir;4.66;1.24;32;12.90;;9.89;9.37;9.58;22.87;Scd;;;;;;3042;;2MASX J12124644+1051575,IRAS 12102+1108,MCG +02-31-050,PGC 038943,SDSS J121246.24+105152.1,UGC 07215;;; +NGC4179;G;12:12:52.11;+01:17:58.9;Vir;4.48;1.22;146;12.80;;8.83;8.19;7.92;23.76;S0;;;;;;;;2MASX J12125210+0117588,MCG +00-31-038,PGC 038950,SDSS J121252.11+011758.8,UGC 07214;;; +NGC4180;G;12:13:03.05;+07:02:20.2;Vir;1.45;0.49;21;13.20;;10.15;9.44;9.11;22.13;SABa;;;;;4182;;;2MASX J12130305+0702196,IRAS 12104+0719,MCG +01-31-025,PGC 038964,SDSS J121303.04+070220.1,UGC 07219;;Identification as NGC 4182 is not certain.; +NGC4181;G;12:12:48.99;+52:54:11.9;UMa;1.12;0.77;8;15.20;;11.80;11.05;10.91;23.92;E;;;;;;;;2MASX J12124899+5254122,MCG +09-20-111,PGC 038938,SDSS J121248.98+525411.8,SDSS J121248.98+525412.0,SDSS J121248.99+525411.8;;; +NGC4182;Dup;12:13:03.05;+07:02:20.2;Vir;;;;;;;;;;;;;;;4180;;;;;; +NGC4183;G;12:13:16.88;+43:41:54.9;CVn;4.29;0.63;166;13.50;;10.67;10.13;9.85;23.18;Sc;;;;;;;;2MASX J12131686+4341537,MCG +07-25-051,PGC 038988,SDSS J121316.88+434153.3,SDSS J121316.88+434154.9,UGC 07222;;; +NGC4184;OCl;12:13:32.59;-62:43:17.1;Cru;;;;;;;;;;;;;;;;;;MWSC 2007;;; +NGC4185;G;12:13:22.20;+28:30:39.5;Com;1.85;1.26;165;13.50;;10.36;9.78;9.47;23.24;SBbc;;;;;;;;2MASX J12132220+2830393,MCG +05-29-038,PGC 038995,SDSS J121322.19+283039.4,SDSS J121322.19+283039.5,SDSS J121322.20+283039.5,UGC 07225;;; +NGC4186;G;12:14:06.53;+14:43:32.9;Com;1.02;0.79;57;14.65;;11.64;10.96;10.56;23.14;Sab;;;;;;;;2MASX J12140651+1443324,MCG +03-31-081,PGC 039057,SDSS J121406.52+144332.8,SDSS J121406.52+144332.9,SDSS J121406.53+144332.9,UGC 07240;;; +NGC4187;G;12:13:29.28;+50:44:29.4;CVn;1.64;1.05;147;14.18;;10.79;10.09;9.77;24.06;E;;;;;;;;2MASX J12132932+5044292,MCG +09-20-117,PGC 039004,SDSS J121329.27+504429.3,SDSS J121329.27+504429.4,SDSS J121329.27+504429.7,SDSS J121329.28+504429.3,SDSS J121329.28+504429.4,UGC 07229;;; +NGC4188;G;12:14:07.36;-12:35:09.6;Crv;0.67;0.55;110;14.00;;11.77;11.04;10.92;22.29;Sb;;;;;;;;2MASX J12140734-1235096,IRAS 12115-1218,MCG -02-31-023,PGC 039059;;; +NGC4189;G;12:13:47.27;+13:25:29.3;Com;2.20;1.79;87;12.51;11.74;9.95;9.33;8.91;22.79;Sc;;;;;;3050;;2MASX J12134727+1325294,IRAS 12112+1342,MCG +02-31-054,PGC 039025,SDSS J121347.26+132529.2,SDSS J121347.27+132529.3,UGC 07235;;; +NGC4190;G;12:13:44.77;+36:38:02.5;CVn;1.53;1.41;30;13.40;13.25;13.11;12.64;12.47;23.44;IB;;;;;;;;MCG +06-27-030,PGC 039023,SDSS J121344.76+363802.4,SDSS J121344.77+363802.5,UGC 07232;;; +NGC4191;G;12:13:50.40;+07:12:03.2;Vir;1.52;1.23;3;13.90;;10.74;10.11;9.87;23.21;S0;;;;;;;;2MASX J12135037+0712030,MCG +01-31-026,PGC 039034,SDSS J121350.40+071203.2,SDSS J121350.41+071203.2,UGC 07233;;; +NGC4192;G;12:13:48.29;+14:54:01.2;Com;11.04;2.66;152;10.95;10.14;7.82;7.10;6.89;23.89;SABb;;;;098;;;;2MASX J12134829+1454016,IRAS 12112+1510,MCG +03-31-079,PGC 039028,SDSS J121348.28+145401.6,UGC 07231;;; +NGC4193;G;12:13:53.59;+13:10:22.3;Vir;2.23;0.99;90;13.18;12.31;10.31;9.51;9.33;22.97;SABb;;;;;;3051;;2MASX J12135358+1310224,IRAS 12113+1326,MCG +02-31-053,PGC 039040,SDSS J121353.59+131022.2,UGC 07234;;; +NGC4194;G;12:14:09.47;+54:31:36.6;UMa;1.64;1.14;170;13.79;13.30;10.63;9.93;9.63;22.44;SBm;;;;;;;;2MASX J12140957+5431360,IRAS 12116+5448,MCG +09-20-119,PGC 039068,SDSS J121409.45+543136.5,SDSS J121409.46+543136.6,SDSS J121409.47+543136.6,SDSS J121409.63+543135.8,UGC 07241;Medusa Galaxy Merger;Multiple SDSS entries describe this object.; +NGC4195;G;12:14:18.08;+59:36:55.6;UMa;1.51;1.32;173;15.50;;13.39;12.80;12.81;24.70;Sc;;;;;;;;2MASX J12141805+5936550,MCG +10-18-010,PGC 039082,SDSS J121418.07+593655.9,SDSS J121418.08+593655.5,SDSS J121418.08+593655.6,UGC 07244;;; +NGC4196;G;12:14:29.75;+28:25:24.4;Com;1.14;0.81;59;13.70;;10.79;10.11;9.86;22.80;S0;;;;;;;;2MASX J12142972+2825243,MCG +05-29-040,PGC 039098,SDSS J121429.74+282524.3,SDSS J121429.74+282524.4,SDSS J121429.75+282524.3,SDSS J121429.75+282524.4,UGC 07245;;; +NGC4197;G;12:14:38.55;+05:48:20.6;Vir;2.84;0.73;36;13.80;;11.20;10.58;10.23;23.21;SABc;;;;;;;;2MASX J12143850+0548205,IRAS 12121+0605,MCG +01-31-029,PGC 039114,SDSS J121438.55+054820.6,UGC 07247;;; +NGC4198;G;12:14:22.05;+56:00:41.2;UMa;0.80;0.43;137;14.60;;11.15;10.43;10.21;22.74;S0-a;;;;;;0778;;2MASX J12142200+5600410,MCG +09-20-123,PGC 039090,SDSS J121422.04+560041.1,SDSS J121422.04+560041.2,SDSS J121422.05+560041.2,SDSS J121422.05+560041.4,UGC 07246;;; +NGC4199;GPair;12:14:50.20;+59:54:27.0;UMa;1.10;;;;;;;;;;;;;;;;;MCG +10-18-011,UGC 07253;;;Diameter of the group inferred by the author. +NGC4199A;G;12:14:48.63;+59:54:22.3;UMa;1.02;0.69;49;15.50;;12.28;11.28;10.91;24.02;E?;;;;;;;;2MASX J12144858+5954219,MCG +10-18-011 NED01,PGC 039135,SDSS J121448.62+595422.2,SDSS J121448.62+595422.5,SDSS J121448.63+595422.3,SDSS J121448.64+595422.3,UGC 07253 NED01;;; +NGC4199B;G;12:14:51.70;+59:54:30.2;UMa;0.85;0.41;83;17.00;;;;;24.58;S0-a;;;;;;;;MCG +10-18-011 NED02,PGC 200285,UGC 07253 NED02;;; +NGC4200;G;12:14:44.23;+12:10:50.7;Vir;1.43;0.86;97;14.10;;11.15;10.51;10.23;23.35;S0;;;;;;;;2MASX J12144419+1210503,MCG +02-31-057,PGC 039124,SDSS J121444.22+121050.7,SDSS J121444.23+121050.7,UGC 07251;;; +NGC4201;G;12:14:41.86;-11:34:58.3;Vir;1.00;0.73;81;14.00;;11.54;10.83;10.44;23.25;S0;;;;;;;;2MASX J12144185-1134581,IRAS 12120-1118,MCG -02-31-024,PGC 039120;;; +NGC4202;G;12:18:08.55;-01:03:50.8;Vir;1.03;0.56;129;14.60;;12.04;11.34;11.07;22.90;SABb;;;;;;;;2MASX J12180856-0103506,MCG +00-31-046,PGC 039495,SDSS J121808.55-010350.8,SDSS J121808.56-010350.8,SDSS J121808.69-010352.2,UGC 07337;;; +NGC4203;G;12:15:05.06;+33:11:50.4;Com;3.42;1.43;10;12.98;11.99;8.31;7.64;7.41;23.08;E-S0;;;;;;;;2MASX J12150502+3311500,IRAS 12125+3328,MCG +06-27-040,PGC 039158,TYC 2527-2134-1,UGC 07256;;; +NGC4204;G;12:15:14.44;+20:39:30.9;Com;4.06;4.06;120;14.30;;12.26;12.36;11.84;24.67;SBd;;;;;;;;2MASX J12151435+2039326,IRAS 12126+2056,MCG +04-29-051,PGC 039179,SDSS J121514.43+203930.8,SDSS J121514.43+203930.9,UGC 07261;;; +NGC4205;G;12:14:55.54;+63:46:58.0;Dra;1.67;0.66;31;13.80;;11.39;10.69;10.43;22.77;SBc;;;;;;;;2MASX J12145558+6346579,IRAS 12125+6403,MCG +11-15-038,PGC 039143,UGC 07258;;; +NGC4206;G;12:15:16.81;+13:01:26.3;Vir;4.69;0.88;0;12.82;12.15;10.32;9.55;9.39;23.73;Sbc;;;;;;3064;;2MASX J12151687+1301258,IRAS 12127+1318,MCG +02-31-066,PGC 039183,SDSS J121516.80+130126.3,SDSS J121516.81+130126.3,UGC 07260;;; +NGC4207;G;12:15:30.50;+09:35:05.6;Vir;1.50;0.77;122;13.70;;10.49;9.76;9.44;22.45;Sd;;;;;;;;2MASX J12153043+0935057,IRAS 12129+0951,MCG +02-31-069,PGC 039206,SDSS J121530.50+093505.6,TYC 873-1069-1,UGC 07268;;; +NGC4208;G;12:15:39.36;+13:54:05.4;Com;2.80;1.69;74;11.90;;9.32;8.62;8.38;22.34;Sc;;;;;4212;;;2MASX J12153937+1354053,IRAS 12130+1411,MCG +02-31-070,PGC 039224,UGC 07275;;; +NGC4209;*;12:15:25.82;+28:28:06.3;Com;;;;13.60;;12.09;11.78;11.70;;;;;;;;;;2MASS J12152582+2828063,SDSS J121525.82+282806.3;;"Identification as NGC 4209 is uncertain; N4209 may be NGC 4185."; +NGC4210;G;12:15:15.83;+65:59:07.2;Dra;1.94;1.39;96;13.40;;10.62;9.96;9.71;23.43;Sb;;;;;;;;2MASX J12151588+6559075,IRAS 12128+6615,MCG +11-15-039,PGC 039184,SDSS J121515.83+655907.2,SDSS J121515.84+655907.1,UGC 07264;;; +NGC4211;G;12:15:35.85;+28:10:39.5;Com;1.03;0.60;123;14.40;;11.18;10.41;10.26;23.16;S0-a;;;;;;;;IRAS 12130+2826,PGC 039221,UGC 07277;;; +NGC4211A;G;12:15:37.32;+28:10:10.7;Com;0.44;0.29;157;15.00;;12.48;11.79;11.59;22.93;S0-a;;;;;;;;2MASX J12153729+2810106,MCG +05-29-043,PGC 039195,SDSS J121537.32+281010.6,SDSS J121537.32+281010.7,UGC 07277 NED02;;; +NGC4212;Dup;12:15:39.36;+13:54:05.4;Com;;;;;;;;;;;;;;;4208;;;;;; +NGC4213;G;12:15:37.56;+23:58:54.8;Com;1.57;1.10;67;14.30;;10.60;9.94;9.61;23.35;E;;;;;;;;2MASX J12153750+2358544,MCG +04-29-054,PGC 039223,SDSS J121537.56+235854.7,UGC 07276;;; +NGC4214;G;12:15:39.17;+36:19:36.8;CVn;6.79;5.28;128;10.30;9.93;8.71;8.06;7.91;22.88;I;;;;;4228;;;2MASX J12153917+3619368,IRAS 12131+3636,MCG +06-27-042,PGC 039225,UGC 07278;;IRAS F12131+3636 (in FSC version 1) was removed from version 2.; +NGC4215;G;12:15:54.54;+06:24:04.1;Vir;1.69;0.57;174;13.00;;9.99;9.30;9.07;22.68;S0-a;;;;;;;;2MASX J12155451+0624040,MCG +01-31-031,PGC 039251,SDSS J121554.53+062404.1,UGC 07281;;; +NGC4216;G;12:15:54.44;+13:08:57.8;Vir;7.82;1.84;20;10.99;10.01;7.53;6.78;6.52;23.12;SABb;;;;;;;;2MASX J12155444+1308578,IRAS 12133+1325,MCG +02-31-072,PGC 039246,UGC 07284;;; +NGC4217;G;12:15:50.90;+47:05:30.4;CVn;5.43;1.61;50;12.40;;8.76;7.92;7.58;23.64;Sb;;;;;;;;2MASX J12155089+4705304,MCG +08-22-087,PGC 039241,UGC 07282;;; +NGC4218;G;12:15:46.41;+48:07:51.0;CVn;0.96;0.62;135;13.20;;11.83;11.07;10.86;22.04;SABa;;;;;;;;2MASX J12154624+4807531,IRAS 12132+4824,MCG +08-22-088,PGC 039237,SDSS J121546.40+480751.0,SDSS J121546.41+480751.0,UGC 07283;;; +NGC4219;G;12:16:27.32;-43:19:27.3;Cen;3.75;1.23;31;12.71;11.31;9.14;8.42;8.09;23.45;Sbc;;;;;;;;2MASX J12162731-4319274,ESO 267-037,ESO-LV 267-0370,IRAS 12138-4302,MCG -07-25-005,PGC 039315;;; +NGC4219A;G;12:17:59.89;-43:32:24.1;Cen;1.29;0.56;31;14.42;;11.21;10.47;10.10;23.35;SBc;;;;;;;;2MASX J12175987-4332239,ESO 267-038,ESO-LV 267-0380,IRAS 12153-4315,MCG -07-25-006,PGC 039484;;; +NGC4220;G;12:16:11.71;+47:52:59.7;CVn;3.30;0.99;140;12.40;;9.09;8.39;8.13;23.36;S0-a;;;;;;;;2MASX J12161173+4753000,IRAS 12137+4809,MCG +08-22-089,PGC 039285,SDSS J121611.70+475259.6,SDSS J121611.71+475259.6,SDSS J121611.71+475259.7,UGC 07290;;; +NGC4221;G;12:15:59.86;+66:13:50.9;Dra;1.85;1.21;24;13.60;;9.98;9.33;9.09;23.26;S0-a;;;;;;;;2MASX J12155994+6613504,MCG +11-15-040,PGC 039266,SDSS J121559.84+661351.0,SDSS J121559.86+661350.9,UGC 07288;;; +NGC4222;G;12:16:22.52;+13:18:25.4;Vir;2.83;0.42;56;13.86;;11.37;10.64;10.33;23.20;Scd;;;;;;;;2MASX J12162252+1318254,IRAS 12138+1334,MCG +02-31-075,PGC 039308,UGC 07291;;"Often mistakenly called IC 3087; that is a Galactic double star."; +NGC4223;G;12:17:25.81;+06:41:24.3;Vir;2.02;1.25;131;13.60;;10.01;9.31;9.02;23.11;S0-a;;;;;;3102;;2MASX J12172582+0641239,MCG +01-31-038,PGC 039412,SDSS J121725.80+064124.2,SDSS J121725.81+064124.2,SDSS J121725.81+064124.3,UGC 07319;;CGCG incorrectly calls this NGC 4241.; +NGC4224;G;12:16:33.79;+07:27:43.5;Vir;2.90;1.17;55;13.30;;9.49;8.79;8.61;23.32;SABa;;;;;;;;2MASX J12163376+0727436,MCG +01-31-034,PGC 039328,SDSS J121633.78+072743.5,SDSS J121633.79+072743.5,UGC 07292;;; +NGC4225;G;12:16:38.37;-12:19:39.6;Crv;0.84;0.61;66;14.00;;11.64;10.91;10.63;23.32;S0-a;;;;;;;;2MASX J12163839-1219391,IRAS 12140-1203,MCG -02-31-027,PGC 039337;;; +NGC4226;G;12:16:26.28;+47:01:30.7;CVn;1.12;0.53;123;14.36;;11.18;10.46;10.11;23.01;SBa;;;;;;;;2MASX J12162629+4701310,MCG +08-22-090,PGC 039312,SDSS J121626.29+470131.5,SDSS J121626.29+470131.6,UGC 07297;;; +NGC4227;G;12:16:33.70;+33:31:19.4;CVn;1.49;0.82;71;13.80;;10.51;9.78;9.51;23.47;S0-a;;;;;;;;2MASX J12163368+3331191,MCG +06-27-043,PGC 039329,SDSS J121633.69+333119.4,TYC 2527-1723-1,UGC 07296;;; +NGC4228;Dup;12:15:39.17;+36:19:36.8;CVn;;;;;;;;;;;;;;;4214;;;;;; +NGC4229;G;12:16:38.79;+33:33:39.2;CVn;1.24;0.79;9;14.30;;11.12;10.55;10.12;23.55;S0;;;;;;;;2MASX J12163880+3333391,MCG +06-27-044,PGC 039341,SDSS J121638.78+333339.2,SDSS J121638.79+333339.2,UGC 07299;;; +NGC4230;OCl;12:17:09.37;-55:17:10.1;Cen;5.40;;;;9.40;;;;;;;;;;;;;MWSC 2013;;ESO 171-SC 014 is not NGC 4230.; +NGC4231;G;12:16:48.87;+47:27:26.6;CVn;0.78;0.63;3;14.27;;12.13;11.33;11.09;22.88;S0-a;;;;;;;;2MASX J12164888+4727268,MCG +08-22-094,PGC 039354,SDSS J121648.86+472726.5,SDSS J121648.86+472726.6,SDSS J121648.87+472726.6,UGC 07304;;; +NGC4232;G;12:16:49.03;+47:26:19.7;CVn;1.23;0.54;152;14.43;;11.57;10.80;10.78;23.20;Sb;;;;;;;;2MASX J12164899+4726198,MCG +08-22-093,PGC 039353,SDSS J121649.02+472619.6,SDSS J121649.02+472619.7,SDSS J121649.03+472619.7,UGC 07303;;; +NGC4233;G;12:17:07.68;+07:37:27.8;Vir;2.34;0.98;177;13.20;;9.71;9.05;8.78;23.40;S0;;;;;;;;2MASX J12170769+0737279,MCG +01-31-037,PGC 039384,SDSS J121707.67+073727.8,SDSS J121707.68+073727.8,UGC 07311;;; +NGC4234;G;12:17:09.16;+03:40:59.0;Vir;1.15;1.11;25;13.40;;12.05;11.51;11.18;22.41;Sm;;;;;;;;2MASX J12170789+0340563,IRAS 12146+0357,MCG +01-31-035,PGC 039388,SDSS J121709.15+034059.0,SDSS J121709.16+034059.0,UGC 07309;;The 2MASS position refers to a knot 19 arcsec west of the nucleus.; +NGC4235;G;12:17:09.88;+07:11:29.7;Vir;4.41;0.89;49;14.70;13.60;9.33;8.68;8.40;23.77;Sa;;;;;;3098;;2MASS J12170988+0711296,2MASX J12170991+0711299,MCG +01-31-036,PGC 039389,SDSS J121709.88+071129.6,SDSS J121709.89+071129.6,SDSS J121709.89+071129.7,UGC 07310;;; +NGC4236;G;12:16:42.12;+69:27:45.3;Dra;23.50;6.85;161;10.58;10.08;9.91;9.17;9.01;24.58;SBd;;;;;;;;2MASX J12164211+6927452,C 003,IRAS 12143+6945,MCG +12-12-004,PGC 039346,UGC 07306;;; +NGC4237;G;12:17:11.42;+15:19:26.3;Com;1.82;1.18;106;12.30;;9.57;8.85;8.61;22.08;SABb;;;;;;;;2MASX J12170941+1519330,2MASX J12171141+1519262,IRAS 12146+1536,MCG +03-31-091,PGC 039393,SDSS J121711.41+151926.3,SDSS J121711.42+151926.3,UGC 07315;;; +NGC4238;G;12:16:55.80;+63:24:35.7;Dra;1.73;0.53;35;14.20;;11.71;11.24;11.04;23.15;SABc;;;;;;;;2MASX J12165577+6324358,IRAS 12145+6341,MCG +11-15-041,PGC 039366,SDSS J121655.78+632435.8,SDSS J121655.80+632435.7,SDSS J121655.81+632435.7,UGC 07308;;; +NGC4239;G;12:17:14.93;+16:31:53.0;Com;1.36;0.79;117;13.50;;11.05;10.39;10.19;23.16;E;;;;;;;;2MASX J12171493+1631532,MCG +03-31-092,PGC 039398,SDSS J121714.93+163152.7,UGC 07316;;; +NGC4240;G;12:17:24.36;-09:57:05.9;Vir;1.47;1.28;90;14.00;;10.26;9.59;9.36;23.97;E;;;;;4243;;;2MASX J12172434-0957056,MCG -02-31-029,PGC 039411;;; +NGC4241;G;12:17:59.90;+06:39:15.1;Vir;1.46;1.03;164;14.40;;;;;22.93;Sc;;;;;;3115;;MCG +01-31-040,PGC 039483,SDSS J121759.90+063915.0,SDSS J121759.90+063915.1,UGC 07333;;; +NGC4242;G;12:17:30.18;+45:37:09.5;CVn;3.80;2.67;23;11.37;10.83;14.12;13.20;13.09;22.92;Sd;;;;;;;;MCG +08-22-098,PGC 039423,SDSS J121730.17+453709.4,SDSS J121730.18+453709.5,UGC 07323;;; +NGC4243;Dup;12:17:24.36;-09:57:05.9;Vir;;;;;;;;;;;;;;;4240;;;;;; +NGC4244;G;12:17:29.66;+37:48:25.6;CVn;16.22;7.24;45;10.71;;8.56;7.98;7.72;24.57;Sc;;;;;;;;2MASX J12172965+3748255,C 026,MCG +06-27-045,PGC 039422,UGC 07322;;; +NGC4245;G;12:17:36.77;+29:36:28.8;Com;2.55;1.62;145;12.40;;9.25;8.58;8.31;22.98;S0-a;;;;;;;;2MASX J12173678+2936288,IRAS 12151+2952,MCG +05-29-049,PGC 039437,SDSS J121736.78+293628.8,SDSS J121736.78+293628.9,UGC 07328;;; +NGC4246;G;12:17:58.12;+07:11:09.3;Vir;2.14;1.09;84;14.00;;10.57;10.07;9.95;23.24;Sc;;;;;;3113;;2MASX J12175811+0711091,MCG +01-31-041,PGC 039479,SDSS J121758.11+071109.2,SDSS J121758.12+071109.3,UGC 07334;;; +NGC4247;G;12:17:58.08;+07:16:26.2;Vir;0.99;0.84;43;14.70;;11.67;10.91;10.50;23.38;SABa;;;;;;;;2MASX J12175805+0716261,IRAS 12153+0733,MCG +01-31-042,PGC 039480,SDSS J121758.08+071626.2;;; +NGC4248;G;12:17:49.85;+47:24:33.1;CVn;2.01;0.90;108;13.12;12.53;11.45;10.88;10.59;22.71;SBm;;;;;;;;2MASX J12174990+4724329,MCG +08-22-099,PGC 039461,SDSS J121749.84+472433.1,UGC 07335;;; +NGC4249;G;12:17:59.39;+05:35:54.9;Vir;0.86;0.84;100;14.80;;11.87;11.10;10.97;22.89;E-S0;;;;;;;;MCG +01-31-039,PGC 039481,SDSS J121759.39+053554.9,SDSS J121759.40+053554.9;;; +NGC4250;G;12:17:26.27;+70:48:09.3;Dra;1.87;0.94;166;13.00;;10.04;9.38;9.14;23.18;S0-a;;;;;;;;2MASX J12172630+7048094,IRAS 12150+7105,MCG +12-12-005,PGC 039414,UGC 07329;;; +NGC4251;G;12:18:08.25;+28:10:31.4;Com;2.34;1.23;100;11.50;;8.67;8.00;7.73;22.19;S0;;;;;;;;2MASX J12180830+2810310,MCG +05-29-050,PGC 039492,UGC 07338;;; +NGC4252;G;12:18:30.89;+05:33:34.1;Vir;1.19;0.41;49;15.00;;13.30;12.61;12.49;22.99;Sbc;;;;;;;;MCG +01-31-045,PGC 039537,SDSS J121830.89+053334.0,SDSS J121830.89+053334.1,UGC 07343;;; +NGC4253;G;12:18:26.51;+29:48:46.3;Com;0.89;0.64;73;14.34;13.57;11.10;10.38;9.84;22.05;SBa;;;;;;;;2MASX J12182648+2948461,IRAS 12159+3005,MCG +05-29-051,PGC 039525,SDSS J121826.51+294846.5,UGC 07344;;; +NGC4254;G;12:18:49.60;+14:24:59.4;Com;5.04;4.74;23;10.44;9.87;7.89;7.25;6.93;22.60;Sc;;;;099;;;;2MASX J12184962+1424593,IRAS 12162+1441,MCG +03-31-099,PGC 039578,SDSS J121849.60+142459.4,UGC 07345;Coma Pinwheel,Virgo Cluster Pinwheel;; +NGC4255;G;12:18:56.15;+04:47:10.1;Vir;1.35;0.62;113;13.50;;10.42;9.73;9.49;22.75;S0;;;;;;;;2MASX J12185618+0447093,MCG +01-31-047,PGC 039592,SDSS J121856.14+044710.1,UGC 07348;;; +NGC4256;G;12:18:43.09;+65:53:53.7;Dra;3.87;0.76;41;12.70;;9.23;8.52;8.25;23.31;Sb;;;;;;;;2MASX J12184303+6553530,2MASX J12184305+6553540,IRAS 12163+6610,MCG +11-15-045,PGC 039568,SDSS J121843.08+655353.6,SDSS J121843.08+655353.7,UGC 07351;;; +NGC4257;G;12:19:06.47;+05:43:33.5;Vir;0.47;0.18;66;15.00;;11.63;10.93;10.70;21.16;Sab;;;;;;;;2MASX J12190647+0543333,MCG +01-31-049,PGC 039624,SDSS J121906.47+054333.4,SDSS J121906.47+054333.5;;; +NGC4258;G;12:18:57.50;+47:18:14.3;CVn;16.98;7.24;150;9.14;8.41;6.38;5.72;5.46;23.36;Sbc;;;;106;;;;2MASX J12185761+4718133,MCG +08-22-104,PGC 039600,SDSS J121857.50+471814.2,UGC 07353;;; +NGC4259;G;12:19:22.21;+05:22:35.0;Vir;1.04;0.45;143;14.50;;11.54;10.93;10.67;23.23;S0;;;;;;;;2MASX J12192219+0522344,MCG +01-31-051,PGC 039657,SDSS J121922.21+052235.0,UGC 07359;;; +NGC4260;G;12:19:22.24;+06:05:55.2;Vir;2.51;1.15;58;13.10;;9.44;8.76;8.54;22.86;SBa;;;;;;;;2MASX J12192224+0605556,MCG +01-31-054,PGC 039656,SDSS J121922.23+060555.2,SDSS J121922.24+060555.2,UGC 07361;;; +NGC4261;G;12:19:23.22;+05:49:30.8;Vir;4.25;3.35;160;13.92;12.87;8.20;7.51;7.26;23.18;E;;;;;;;;2MASX J12192326+0549289,MCG +01-31-052,PGC 039659,SDSS J121922.98+054930.4,SDSS J121922.98+054930.5,SDSS J121923.21+054929.6,SDSS J121923.21+054929.7,UGC 07360;;Additional radio sources may contribute to the WMAP flux.; +NGC4262;G;12:19:30.57;+14:52:39.6;Com;1.74;1.52;145;12.49;11.55;9.29;8.60;8.36;22.35;E-S0;;;;;;;;2MASX J12193058+1452397,MCG +03-31-101,PGC 039676,SDSS J121930.57+145239.5,UGC 07365;;; +NGC4263;G;12:19:42.20;-12:13:32.0;Crv;1.16;0.55;116;14.00;;11.08;10.44;10.09;22.47;SABb;;;;;4265;;;2MASX J12194219-1213319,IRAS 12171-1156,MCG -02-32-001,PGC 039698;;; +NGC4264;G;12:19:35.76;+05:50:48.3;Vir;0.86;0.67;110;13.90;;10.75;10.12;9.88;22.06;S0-a;;;;;;;;2MASX J12193577+0550484,MCG +01-32-001,PGC 039687,SDSS J121935.75+055048.3,SDSS J121935.76+055048.3,UGC 07364;;; +NGC4265;Dup;12:19:42.20;-12:13:32.0;Crv;;;;;;;;;;;;;;;4263;;;;;; +NGC4266;G;12:19:42.30;+05:32:17.8;Vir;2.00;0.50;74;15.00;;10.38;9.77;9.46;23.09;SBa;;;;;;;;2MASX J12194231+0532175,MCG +01-32-002,PGC 039699,SDSS J121942.29+053217.8,SDSS J121942.30+053217.8,UGC 07368;;Multiple SDSS entries describe this object.; +NGC4267;G;12:19:45.24;+12:47:53.8;Vir;2.55;1.76;143;12.40;;8.73;8.07;7.84;22.58;E-S0;;;;;;;;2MASX J12194528+1247540,MCG +02-32-004,PGC 039710,SDSS J121945.27+124753.7,UGC 07373;;; +NGC4268;G;12:19:47.22;+05:17:01.6;Vir;1.51;0.64;47;13.90;;10.43;9.71;9.47;23.10;S0-a;;;;;;;;2MASX J12194722+0517011,MCG +01-32-004,PGC 039712,SDSS J121947.21+051701.5,SDSS J121947.21+051701.6,SDSS J121947.22+051701.6,UGC 07371;;; +NGC4269;G;12:19:49.19;+06:00:53.9;Vir;1.22;0.93;130;13.90;;10.68;10.04;9.89;22.55;S0-a;;;;;;;;2MASX J12194918+0600541,MCG +01-32-005,PGC 039719,UGC 07372;;; +NGC4270;G;12:19:49.47;+05:27:48.4;Vir;1.88;0.78;110;13.30;;9.95;9.28;9.04;23.02;S0;;;;;;;;2MASX J12194943+0527481,MCG +01-32-007,PGC 039718,SDSS J121949.46+052748.3,UGC 07376;;; +NGC4271;G;12:19:32.60;+56:44:11.7;UMa;1.77;1.36;59;13.70;;10.46;9.78;9.51;23.61;E-S0;;;;;;;;2MASX J12193263+5644119,MCG +10-18-025,PGC 039683,SDSS J121932.59+564411.6,SDSS J121932.59+564411.7,SDSS J121932.59+564411.8,SDSS J121932.60+564411.6,SDSS J121932.60+564411.9,UGC 07375;;; +NGC4272;G;12:19:47.64;+30:20:20.7;Com;1.02;0.83;117;14.20;;10.95;10.26;9.99;23.06;E;;;;;;;;2MASX J12194763+3020211,MCG +05-29-059,PGC 039715,SDSS J121947.63+302020.6,SDSS J121947.64+302020.6,SDSS J121947.64+302020.7,UGC 07378;;87GB source with large sky, narrow minor axis, or very bad confusion.; +NGC4273;G;12:19:56.08;+05:20:36.0;Vir;2.19;1.95;11;12.30;;10.03;9.44;9.11;22.66;Sc;;;;;;;;2MASX J12195606+0520361,IRAS 12173+0537,MCG +01-32-008,PGC 039738,SDSS J121956.07+052035.9,UGC 07380;;; +NGC4274;G;12:19:50.59;+29:36:52.1;Com;3.63;1.70;102;11.34;10.41;8.02;7.32;7.03;22.44;SBab;;;;;;;;2MASX J12195066+2936529,IRAS 12173+2953,MCG +05-29-060,PGC 039724,SDSS J121950.59+293652.9,UGC 07377;;; +NGC4275;G;12:19:52.58;+27:37:15.6;Com;0.87;0.81;120;13.40;;11.06;10.37;10.19;21.85;SABb;;;;;;;;2MASX J12195260+2737152,IRAS 12173+2753,MCG +05-29-058,PGC 039728,SDSS J121952.57+273715.5,SDSS J121952.57+273715.6,SDSS J121952.58+273715.5,SDSS J121952.58+273715.6,UGC 07382;;; +NGC4276;G;12:20:07.48;+07:41:30.7;Vir;1.34;1.18;80;14.10;;11.66;10.94;10.69;22.84;Sc;;;;;;;;2MASX J12200749+0741311,MCG +01-32-010,PGC 039765,SDSS J122007.48+074130.6,SDSS J122007.48+074130.7,UGC 07385;;; +NGC4277;G;12:20:03.72;+05:20:28.9;Vir;0.76;0.32;132;15.00;;11.66;11.02;10.61;22.30;S0-a;;;;;;;;2MASX J12200369+0520161,2MASX J12200369+0520291,MCG +01-32-009,PGC 039759,SDSS J122003.72+052028.8,SDSS J122003.72+052028.9;;; +NGC4278;G;12:20:06.82;+29:16:50.7;Com;2.89;2.83;35;11.09;10.16;8.09;7.42;7.18;22.22;E;;;;;;;;2MASX J12200679+2916502,2MASX J12200682+2916498,IRAS 12175+2933,MCG +05-29-062,PGC 039764,SDSS J122006.82+291650.6,SDSS J122006.84+291650.6,UGC 07386;;; +NGC4279;G;12:20:25.00;-11:39:59.8;Crv;1.17;0.72;26;14.00;;11.45;10.66;10.55;23.93;S0-a;;;;;;;;2MASX J12202503-1139593,MCG -02-32-003,PGC 039812;;; +NGC4280;Other;12:20:31.90;-11:39:08.8;Crv;;;;;;;;;;;;;;;;;;;;Three Galactic stars. Identification as NGC 4280 is uncertain.; +NGC4281;G;12:20:21.52;+05:23:11.0;Vir;2.85;1.43;86;12.50;;8.90;8.21;7.94;23.07;S0-a;;;;;;;;2MASX J12202152+0523111,IRAS 12177+0539,MCG +01-32-012,PGC 039801,SDSS J122021.52+052311.0,UGC 07389;;; +NGC4282;G;12:20:24.31;+05:34:22.2;Vir;0.88;0.56;100;14.70;;11.58;10.89;10.69;22.96;S0-a;;;;;;;;2MASX J12202426+0534221,MCG +01-32-013,PGC 039809,SDSS J122024.29+053422.1,SDSS J122024.30+053422.2,SDSS J122024.30+053422.3;;; +NGC4283;G;12:20:20.85;+29:18:39.4;Com;1.23;1.13;140;13.00;12.07;10.01;9.34;9.13;22.32;E;;;;;;;;2MASX J12202078+2918392,MCG +05-29-063,PGC 039800,SDSS J122020.77+291839.1,UGC 07390;;; +NGC4284;G;12:20:12.62;+58:05:34.4;UMa;1.90;0.86;101;14.70;;11.54;10.93;10.63;24.00;Sbc;;;;;;;;2MASX J12201263+5805347,MCG +10-18-026,PGC 039775,SDSS J122012.62+580534.3,UGC 07393;;; +NGC4285;G;12:20:39.80;-11:38:30.9;Crv;0.93;0.46;43;14.00;;11.98;11.33;11.19;23.26;Sa;;;;;;;;2MASX J12203979-1138310,MCG -02-32-004,PGC 039842;;; +NGC4286;G;12:20:42.09;+29:20:45.2;Com;1.08;0.38;144;14.10;;11.78;11.15;10.82;23.02;Sa;;;;;;3181;;2MASX J12204209+2920454,MCG +05-29-065,PGC 039846,SDSS J122042.08+292045.1,SDSS J122042.09+292045.1,UGC 07398;;; +NGC4287;G;12:20:48.50;+05:38:23.6;Vir;1.22;0.39;71;15.20;;12.19;11.48;11.02;23.29;Sbc;;;;;;;;2MASX J12204845+0538229,MCG +01-32-014,PGC 039860,SDSS J122048.49+053823.5,SDSS J122048.49+053823.6;;; +NGC4288;G;12:20:38.11;+46:17:30.0;CVn;1.70;1.35;138;13.60;;11.96;11.50;11.30;22.99;SBcd;;;;;;;;2MASX J12203811+4617276,MCG +08-23-006,PGC 039840,SDSS J122038.14+461730.4,SDSS J122038.15+461730.4,UGC 07399;;; +NGC4288A;G;12:20:40.57;+46:15:19.6;CVn;0.72;0.64;155;15.00;;13.09;12.29;11.99;23.73;S0-a;;;;;;;;2MASX J12204053+4615196,MCG +08-23-007,PGC 039841,SDSS J122040.56+461519.5,SDSS J122040.56+461519.6,SDSS J122040.57+461519.6;;; +NGC4289;G;12:21:02.25;+03:43:19.7;Vir;4.26;0.46;1;15.00;;11.13;10.26;9.89;24.44;SBc;;;;;;;;2MASX J12210230+0343190,IRAS 12184+0400,MCG +01-32-015,PGC 039886,SDSS J122102.25+034319.7,SDSS J122102.33+034317.0,UGC 07403;;; +NGC4290;G;12:20:47.53;+58:05:33.0;UMa;2.19;1.47;70;12.80;;10.26;9.59;9.30;23.07;Sb;;;;;;;;2MASX J12204750+5805325,IRAS 12183+5822,MCG +10-18-029,PGC 039859,SDSS J122047.51+580533.0,SDSS J122047.52+580533.0,SDSS J122047.53+580533.0,SDSS J122047.53+580533.3,UGC 07402;;; +NGC4291;G;12:20:18.20;+75:22:15.0;Dra;1.93;1.62;108;17.00;;9.37;8.65;8.42;22.68;E;;;;;;;;2MASX J12201769+7522154,MCG +13-09-024,PGC 039791,UGC 07397;;; +NGC4292;G;12:21:16.46;+04:35:44.5;Vir;1.60;1.11;10;13.09;12.21;10.40;9.75;9.55;22.84;S0;;;;;;;;2MASX J12211648+0435444,MCG +01-32-016,PGC 039922,SDSS J122116.45+043544.5,UGC 07404;;; +NGC4293;G;12:21:12.89;+18:22:56.6;Com;6.24;3.72;72;11.60;;8.37;7.72;7.48;23.61;S0-a;;;;;;;;2MASX J12211289+1822566,IRAS 12186+1839,MCG +03-32-006,PGC 039907,SDSS J122112.82+182257.7,UGC 07405;;; +NGC4294;G;12:21:17.83;+11:30:37.6;Vir;2.69;1.02;148;12.60;;10.58;10.19;9.70;22.49;SBc;;;;;;;;2MASX J12211778+1130399,IRAS 12187+1147,MCG +02-32-009,PGC 039925,SDSS J122117.82+113037.5,SDSS J122117.83+113037.6,UGC 07407;;ALFALFA source also includes UGC 07414.; +NGC4295;G;12:21:09.78;+28:09:54.4;Com;0.51;0.44;152;15.00;;11.69;11.00;10.73;22.27;S0-a;;;;;;;;2MASX J12210974+2809538,MCG +05-29-068,PGC 039906,SDSS J122109.77+280954.3,SDSS J122109.78+280954.4;;; +NGC4296;G;12:21:28.39;+06:39:12.8;Vir;1.44;0.79;16;14.00;;10.64;9.97;9.74;23.99;S0;;;;;;;;2MASX J12212838+0639128,MCG +01-32-017,PGC 039943,SDSS J122128.39+063912.8,UGC 07409;;; +NGC4297;G;12:21:27.41;+06:40:15.7;Vir;0.64;0.31;171;16.00;;13.04;12.52;12.29;21.56;S0-a;;;;;;;;2MASX J12212737+0640159,MCG +01-32-018,PGC 039940,SDSS J122127.40+064016.3,SDSS J122127.41+064016.4,UGC 07409 NOTES01;;; +NGC4298;G;12:21:32.76;+14:36:22.2;Com;2.54;1.40;137;12.04;11.34;9.43;8.66;8.47;22.21;Sc;;;;;;;;2MASX J12213279+1436217,IRAS 12190+1452,MCG +03-32-007,PGC 039950,SDSS J122132.76+143622.1,SDSS J122132.76+143622.2,SDSS J122132.77+143622.2,UGC 07412;;; +NGC4299;G;12:21:40.55;+11:29:59.7;Vir;1.48;1.38;0;12.80;;;;;22.27;SABd;;;;;;;;2MASX J12214230+1130118,IRAS 12191+1146,MCG +02-32-010,PGC 039968,SDSS J122140.55+112959.7,UGC 07414;;ALFALFA source also includes UGC 07407.; +NGC4300;G;12:21:41.47;+05:23:05.3;Vir;1.79;0.72;40;13.90;;10.44;9.78;9.53;22.97;Sa;;;;;;;;2MASX J12214148+0523051,MCG +01-32-021,PGC 039972,SDSS J122141.46+052305.2,SDSS J122141.46+052305.3,UGC 07413;;; +NGC4301;G;12:22:27.21;+04:33:58.6;Vir;1.14;1.09;15;13.40;12.99;12.14;11.94;11.20;22.51;Sc;;;;;4303A;;;2MASX J12222724+0433586,IRAS 12198+0450,MCG +01-32-027,PGC 040087,UGC 07439;;; +NGC4302;G;12:21:42.48;+14:35:53.9;Com;6.00;1.13;178;13.40;11.61;9.08;8.21;7.83;23.42;Sc;;;;;;;;2MASX J12214247+1435519,MCG +03-32-009,PGC 039974,SDSS J122142.47+143553.8,SDSS J122142.48+143553.9,UGC 07418;;; +NGC4303;G;12:21:54.90;+04:28:25.1;Vir;6.89;6.56;20;10.18;9.65;7.73;7.09;6.84;23.05;Sbc;;;;061;;;;2MASX J12215494+0428249,IRAS 12194+0444,MCG +01-32-022,PGC 040001,SDSS J122154.92+042825.6,UGC 07420;;; +NGC4303A;Dup;12:22:27.21;+04:33:58.6;Vir;;;;;;;;;;;;;;;4301;;;;;; +NGC4304;G;12:22:12.72;-33:29:04.2;Hya;2.48;2.43;105;12.41;12.02;10.00;9.35;9.05;23.17;Sbc;;;;;;;;2MASX J12221272-3329038,ESO 380-020,ESO-LV 380-0200,IRAS 12195-3312,MCG -05-29-034,PGC 040055;;; +NGC4305;G;12:22:03.60;+12:44:27.3;Vir;2.30;1.19;30;13.80;;10.48;9.93;9.83;23.53;Sa;;;;;;;;2MASX J12220361+1244269,MCG +02-32-013,PGC 040030,SDSS J122203.59+124427.3,SDSS J122203.60+124427.3,UGC 07432;;; +NGC4306;G;12:22:04.11;+12:47:14.9;Vir;1.49;1.06;142;14.40;;11.35;10.55;10.54;23.18;S0;;;;;;;;2MASX J12220408+1247139,MCG +02-32-014,PGC 040032,SDSS J122204.10+124714.9,SDSS J122204.11+124714.9,UGC 07433;;; +NGC4307;G;12:22:05.68;+09:02:37.1;Vir;3.44;0.81;24;13.40;;9.72;9.00;8.72;23.14;SBb;;;;;;;;2MASX J12220562+0902367,IRAS 12195+0919,MCG +02-32-012a,PGC 040033,SDSS J122205.68+090237.0,UGC 07431;;; +NGC4307A;G;12:22:07.32;+08:59:26.0;Vir;0.76;0.69;90;15.50;;13.71;13.99;13.52;23.12;SABc;;;;;;3211;;2MASX J12220731+0859257,MCG +02-32-012,PGC 040034,SDSS J122207.32+085926.0,UGC 07430;;; +NGC4308;G;12:21:56.85;+30:04:27.7;Com;0.94;0.69;21;14.30;;11.47;10.89;10.62;22.83;E;;;;;;;;2MASX J12215687+3004271,MCG +05-29-069,PGC 040011,SDSS J122156.85+300427.6,SDSS J122156.86+300427.7,UGC 07426;;; +NGC4309;G;12:22:12.38;+07:08:39.5;Vir;1.93;0.92;86;14.30;;10.63;9.99;9.77;23.66;S0-a;;;;;;;;2MASX J12221234+0708398,IRAS 12196+0725,MCG +01-32-025,PGC 040051,SDSS J122212.38+070839.4,SDSS J122212.38+070839.5,UGC 07435;;; +NGC4310;G;12:22:26.30;+29:12:32.5;Com;1.93;0.76;148;13.22;;10.62;10.01;9.68;23.64;S0-a;;;;;4338;;;2MASX J12222627+2912312,IRAS 12199+2929,MCG +05-29-074,PGC 040086,SDSS J122226.29+291232.5,SDSS J122226.30+291232.5,UGC 07440;;Often mistakenly called NGC 4311.; +NGC4311;**;12:22:26.85;+29:08:45.4;Com;;;;;;;;;;;;;;;;;;;;NGC identification is uncertain.; +NGC4312;G;12:22:31.36;+15:32:16.5;Com;5.02;1.15;170;12.53;11.72;9.69;9.02;8.79;23.90;Sab;;;;;;;;2MASX J12223135+1532165,IRAS 12199+1548,MCG +03-32-014,PGC 040095,UGC 07442;;; +NGC4313;G;12:22:38.54;+11:48:03.4;Vir;3.80;0.99;141;13.20;;9.43;8.76;8.47;23.29;Sab;;;;;;;;2MASX J12223853+1148031,IRAS 12200+1204,MCG +02-32-016,PGC 040105,SDSS J122238.54+114803.3,SDSS J122238.55+114803.4,UGC 07445;;HOLM 385B is a star.; +NGC4314;G;12:22:31.82;+29:53:45.2;Com;3.70;3.56;150;11.43;10.58;8.52;7.83;7.56;22.98;Sa;;;;;;;;2MASX J12223197+2953430,IRAS 12200+3010,MCG +05-29-075,PGC 040097,SDSS J122232.01+295343.7,UGC 07443;;; +NGC4315;**;12:22:39.39;+09:17:09.3;Vir;;;;;;;;;;;;;;;;;;SDSS J122239.39+091709.3;;; +NGC4316;G;12:22:42.24;+09:19:56.9;Vir;2.47;0.58;112;14.00;;10.37;9.57;9.25;23.06;Sc;;;;;;;;2MASX J12224222+0919581,IRAS 12201+0936,MCG +02-32-017,PGC 040119,SDSS J122242.23+091956.9,SDSS J122242.24+091956.9,UGC 07447;;; +NGC4317;Other;12:22:41.98;+31:02:16.3;Com;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC4318;G;12:22:43.29;+08:11:53.8;Vir;0.73;0.50;65;14.10;;11.24;10.55;10.35;22.25;E;;;;;;;;2MASX J12224330+0811541,MCG +02-32-015,PGC 040122,SDSS J122243.28+081153.7,SDSS J122243.29+081153.7,SDSS J122243.29+081153.8,UGC 07446;;; +NGC4319;G;12:21:43.87;+75:19:21.3;Dra;2.45;0.97;154;13.00;;9.78;9.06;8.86;23.03;SBab;;;;;4345;;;2MASX J12214384+7519214,MCG +13-09-025,PGC 039981,UGC 07429;;; +NGC4320;G;12:22:57.72;+10:32:54.0;Vir;0.94;0.66;149;15.30;;11.91;11.22;10.91;23.25;Sbc;;;;;;;;2MASX J12225772+1032540,IRAS 12204+1049,MCG +02-32-018,PGC 040160,SDSS J122257.72+103253.9,SDSS J122257.73+103254.0,UGC 07452;;; +NGC4321;G;12:22:54.83;+15:49:18.5;Com;6.10;5.62;108;10.05;9.35;7.46;6.82;6.59;22.61;SABb;;;;100;;;;2MASX J12225489+1549205,IRAS 12204+1605,MCG +03-32-015,PGC 040153,SDSS J122254.91+154920.2,UGC 07450;;; +NGC4322;*;12:22:41.89;+15:54:11.8;Com;;;;13.40;;11.95;11.71;11.68;;;;;;;;;;2MASS J12224188+1554119,SDSS J122241.89+155411.8;;Not the same as NGC 4323, which is a galaxy.; +NGC4323;G;12:23:01.73;+15:54:20.1;Com;1.23;0.71;133;14.81;13.94;12.88;12.43;12.14;23.79;S0;;;;;;;;2MASX J12230167+1554196,MCG +03-32-016,PGC 040171,SDSS J122301.72+155420.0,SDSS J122301.73+155420.0,SDSS J122301.73+155420.1,UGC 07450 NOTES01;;Often mistakenly called NGC 4322 (which is a star).; +NGC4324;G;12:23:06.18;+05:15:01.2;Vir;2.96;1.21;55;12.50;;9.42;8.68;8.48;23.42;S0-a;;;;;;;;2MASX J12230617+0515017,IRAS 12205+0531,MCG +01-32-032,PGC 040179,SDSS J122306.17+051501.2,UGC 07451;;HOLM 388B is a star.; +NGC4325;G;12:23:06.68;+10:37:16.3;Vir;1.23;0.77;180;15.00;;11.24;10.56;10.30;23.62;E;;;;;4368;;;2MASX J12230667+1037170,MCG +02-32-019,PGC 040183,SDSS J122306.66+103716.4,SDSS J122306.66+103716.5;;; +NGC4326;G;12:23:11.63;+06:04:19.7;Vir;1.13;1.07;110;13.10;;11.22;10.82;10.23;23.25;Sab;;;;;;;;2MASX J12231163+0604200,MCG +01-32-033,PGC 040192,SDSS J122311.63+060419.6,SDSS J122311.63+060419.7,UGC 07454;;; +NGC4327;*;12:23:07.51;+15:44:11.4;Com;;;;16.10;;15.00;14.63;14.81;;;;;;;;;;2MASS J12230749+1544115,SDSS J122307.50+154411.4;;Identification as NGC 4327 is uncertain.; +NGC4328;G;12:23:20.03;+15:49:13.4;Com;1.60;1.23;99;14.04;;12.01;11.45;11.46;23.94;E-S0;;;;;;;;2MASX J12232004+1549139,MCG +03-32-019,PGC 040209,SDSS J122320.02+154913.2,SDSS J122320.02+154913.3,SDSS J122320.03+154913.4;;; +NGC4329;G;12:23:20.71;-12:33:31.0;Crv;1.08;0.59;49;14.00;;10.82;10.10;9.84;23.64;E;;;;;;;;2MASX J12232069-1233308,MCG -02-32-009,PGC 040212;;; +NGC4330;G;12:23:17.25;+11:22:04.7;Vir;2.29;0.60;60;14.00;;10.56;9.75;9.51;22.54;Sc;;;;;;;;2MASX J12231724+1122047,IRAS 12207+1138,MCG +02-32-020,PGC 040201,UGC 07456;;; +NGC4331;G;12:22:35.96;+76:10:20.9;Dra;1.58;0.37;2;14.80;;;;;23.22;I;;;;;;;;MCG +13-09-026,PGC 040085,UGC 07449;;; +NGC4332;G;12:22:46.76;+65:50:37.6;Dra;1.97;1.43;137;13.20;;10.25;9.51;9.23;23.42;SBa;;;;;;;;2MASX J12224682+6550373,IRAS 12204+6607,MCG +11-15-048,PGC 040133,SDSS J122246.75+655037.6,SDSS J122246.75+655037.9,SDSS J122246.76+655037.6,UGC 07453;;; +NGC4333;G;12:23:22.27;+06:02:26.6;Vir;0.80;0.75;90;14.80;;11.64;10.92;10.58;22.57;SBab;;;;;;;;2MASX J12232229+0602269,MCG +01-32-034,PGC 040217,SDSS J122322.27+060226.5,SDSS J122322.27+060226.6;;; +NGC4334;G;12:23:23.88;+07:28:23.5;Vir;2.00;0.91;135;14.90;;10.63;9.96;9.49;23.91;Sab;;;;;;;;2MASX J12232386+0728230,IRAS 12208+0744,MCG +01-32-035,PGC 040218,SDSS J122323.88+072823.5,SDSS J122323.89+072825.6,SDSS J122323.90+072825.6,UGC 07458;;; +NGC4335;G;12:23:01.88;+58:26:40.4;UMa;1.85;1.37;149;13.70;;10.06;9.36;9.09;23.83;E;;;;;;;;2MASX J12230190+5826409,MCG +10-18-035,PGC 040169,SDSS J122301.91+582640.4,SDSS J122301.92+582640.4,UGC 07455;;One of two 6cm sources associated with [WB92] 1220+5843; +NGC4336;G;12:23:29.83;+19:25:36.9;Com;1.54;0.81;162;13.60;;10.74;10.05;9.96;22.75;S0-a;;;;;;3254;;2MASX J12232983+1925373,MCG +03-32-020,PGC 040231,SDSS J122329.82+192536.8,SDSS J122329.82+192536.9,UGC 07462;;HOLM 389B is a star.; +NGC4337;OCl;12:24:03.31;-58:07:25.6;Cru;6.60;;;9.44;8.90;;;;;;;;;;;;;MWSC 2023;;; +NGC4338;Dup;12:22:26.30;+29:12:32.5;Com;;;;;;;;;;;;;;;4310;;;;;; +NGC4339;G;12:23:34.95;+06:04:54.3;Vir;2.32;2.20;50;13.10;;9.43;8.75;8.54;23.03;E;;;;;;;;2MASX J12233494+0604541,MCG +01-32-036,PGC 040240,UGC 07461;;; +NGC4340;G;12:23:35.29;+16:43:20.5;Com;2.82;1.79;87;12.40;;9.22;8.53;8.32;23.03;S0-a;;;;;;;;2MASX J12233531+1643199,MCG +03-32-021,PGC 040245,SDSS J122335.28+164320.4,UGC 07467;;; +NGC4341;G;12:23:53.56;+07:06:25.6;Vir;1.67;0.51;95;14.50;;11.58;10.93;10.64;23.56;S0;;;;;;3260;;2MASX J12235347+0706261,MCG +01-32-042,PGC 040280,SDSS J122353.55+070625.6,SDSS J122353.56+070625.6,UGC 07472;;; +NGC4342;G;12:23:39.00;+07:03:14.4;Vir;1.25;0.64;165;13.00;;9.95;9.26;9.02;22.40;E-S0;;;;;;3256;;2MASX J12233902+0703141,MCG +01-32-039,PGC 040252,SDSS J122339.00+070314.3,UGC 07466;;POSS-I E print shows star-like flaw on northeast side (Wei-Dong Li).; +NGC4343;G;12:23:38.70;+06:57:14.7;Vir;1.92;1.92;130;13.50;;10.04;9.27;8.97;23.47;Sb;;;;;;;;2MASX J12233869+0657141,IRAS 12210+0713,MCG +01-32-038,PGC 040251,SDSS J122338.69+065714.6,SDSS J122338.70+065714.7,UGC 07465;;; +NGC4344;G;12:23:37.47;+17:32:27.1;Com;1.34;1.30;56;13.34;;11.36;10.67;10.48;22.70;S0;;;;;;;;2MASX J12233719+1732150,IRAS 12210+1748,MCG +03-32-022,PGC 040249,SDSS J122337.45+173227.2,UGC 07468;;HOLM 390B is a star.; +NGC4345;Dup;12:21:43.87;+75:19:21.3;Dra;;;;;;;;;;;;;;;4319;;;;;; +NGC4346;G;12:23:27.94;+46:59:37.8;CVn;3.13;1.13;99;12.30;;9.07;8.42;8.18;23.29;S0;;;;;;;;2MASX J12232794+4659379,MCG +08-23-016,PGC 040228,SDSS J122327.95+465937.6,UGC 07463;;; +NGC4347;*;12:14:52.31;-03:14:27.7;Vir;;;;;;;;;;;;;;;;;;;;"Identification as NGC 4347 is uncertain; N4347 may be NGC 4348."; +NGC4348;G;12:23:53.99;-03:26:34.5;Vir;2.67;0.50;31;13.60;;9.98;9.27;8.91;22.77;Sbc;;;;;;;;2MASX J12235396-0326344,IRAS 12213-0310,MCG +00-32-003,PGC 040284,SDSS J122353.76-032635.2,SDSS J122353.98-032634.5,SDSS J122353.99-032634.5;;; +NGC4349;OCl;12:24:06.04;-61:52:13.6;Cru;6.30;;;8.01;7.40;;;;;;;;;;;;;MWSC 2024;;; +NGC4350;G;12:23:57.87;+16:41:36.3;Com;2.80;1.33;28;11.50;11.08;8.76;8.01;7.82;22.75;S0;;;;;;;;2MASX J12235781+1641360,MCG +03-32-023,PGC 040295,UGC 07473;;; +NGC4351;G;12:24:01.50;+12:12:17.2;Vir;1.58;1.28;72;13.50;;11.26;10.59;10.24;22.54;SBb;;;;;4354;;;2MASX J12240156+1212180,IRAS 12214+1229,MCG +02-32-024,PGC 040306,SDSS J122401.49+121217.1,SDSS J122401.50+121217.1,SDSS J122401.50+121217.2,UGC 07476;;; +NGC4352;G;12:24:05.02;+11:13:05.0;Vir;1.64;0.77;102;14.00;;10.63;10.05;9.87;23.20;S0;;;;;;;;2MASX J12240502+1113048,MCG +02-32-023,PGC 040313,SDSS J122405.02+111305.0,UGC 07475;;; +NGC4353;G;12:24:00.26;+07:47:06.7;Vir;1.05;0.81;67;14.60;;;;;22.74;IB;;;;;;3266;;2MASX J12235912+0746578,MCG +01-32-043,PGC 040303,SDSS J122400.25+074706.6,SDSS J122400.26+074706.7;;2MASS position is on western edge.; +NGC4354;Dup;12:24:01.50;+12:12:17.2;Vir;;;;;;;;;;;;;;;4351;;;;;; +NGC4355;G;12:26:54.62;-00:52:39.4;Vir;1.41;0.68;64;14.21;13.37;11.04;10.35;10.12;22.98;SABa;;;;;4418;;;2MASX J12265462-0052395,IRAS 12243-0036,MCG +00-32-012,PGC 040762,SDSS J122654.61-005239.4,SDSS J122654.62-005239.2,SDSS J122654.62-005239.3,SDSS J122654.62-005239.4,UGC 07545;;; +NGC4356;G;12:24:14.53;+08:32:09.1;Vir;2.01;0.73;40;14.30;;10.67;9.95;9.69;22.81;Sc;;;;;;3273;;2MASX J12241453+0832088,IRAS 12217+0848,MCG +02-32-026,PGC 040342,UGC 07482;;; +NGC4357;G;12:23:58.82;+48:46:46.1;CVn;3.48;1.27;77;13.36;12.68;10.49;9.86;9.59;24.24;Sbc;;;;;4381;;;2MASX J12235883+4846454,MCG +08-23-017,PGC 040296,SDSS J122358.82+484646.1,SDSS J122358.84+484646.0,SDSS J122358.86+484646.3,UGC 07478;;; +NGC4358;G;12:24:02.02;+58:23:06.8;UMa;1.15;0.92;167;14.30;;11.33;10.70;10.52;23.31;S0;;;;;;;;2MASX J12240211+5823063,MCG +10-18-038,PGC 040309,SDSS J122402.02+582306.7,SDSS J122402.02+582306.8,SDSS J122402.03+582306.7,SDSS J122402.04+582306.7,SDSS J122402.04+582306.9,UGC 07479;;Incorrectly identified as NGC 4364 in MCG and UGC.; +NGC4359;G;12:24:11.17;+31:31:19.0;Com;1.38;0.83;108;13.90;;11.73;10.99;10.81;22.75;SBc;;;;;;;;2MASX J12241105+3131177,IRAS 12216+3147,MCG +05-29-079,PGC 040330,SDSS J122411.16+313119.0,SDSS J122411.17+313119.0,UGC 07483;;; +NGC4360;G;12:24:21.70;+09:17:34.0;Vir;1.40;1.20;148;13.90;;10.46;9.77;9.51;22.92;E;;;;;;;;2MASX J12242169+0917338,MCG +02-32-028,PGC 040363,SDSS J122421.70+091733.9,UGC 07484;;; +NGC4360B;G;12:24:14.72;+09:16:00.7;Vir;0.50;0.41;151;15.20;;11.89;11.18;10.91;22.01;S?;;;;;;3274;;2MASX J12241473+0916008,MCG +02-32-027,PGC 040344,SDSS J122414.71+091600.6,SDSS J122414.72+091600.6,SDSS J122414.72+091600.7;;; +NGC4361;PN;12:24:30.76;-18:47:05.4;Crv;1.05;;;10.30;10.90;13.94;14.00;14.02;;;11.53;12.85;13.21;;;;HD 107969,BD -17 3614;2MASX J12243097-1847190,ESO 573-019,IRAS 12219-1830,PN G294.1+43.6;;Incorrectly called a galaxy in RC1.; +NGC4362;G;12:24:11.26;+58:21:38.4;UMa;1.28;0.49;41;15.00;;11.75;11.13;10.85;23.98;S0-a;;;;;4364;;;2MASX J12241139+5821383,MCG +10-18-039,PGC 040350,SDSS J122411.26+582138.3,SDSS J122411.26+582138.4,SDSS J122411.29+582138.2;;; +NGC4363;G;12:23:28.40;+74:57:08.0;Dra;0.79;0.63;10;14.60;;;;;22.75;Sb;;;;;;;;PGC 040233;;; +NGC4364;Dup;12:24:11.26;+58:21:38.4;UMa;;;;;;;;;;;;;;;4362;;;;;; +NGC4365;G;12:24:28.28;+07:19:03.6;Vir;5.12;3.66;40;11.50;;7.54;6.87;6.64;22.90;E;;;;;;;;2MASX J12242822+0719030,MCG +01-32-048,PGC 040375,UGC 07488;;; +NGC4366;G;12:24:47.01;+07:21:10.9;Vir;0.85;0.31;41;15.20;;12.62;11.99;11.73;23.35;E;;;;;;;;2MASX J12244694+0721113,MCG +01-32-050,PGC 040421,SDSS J122447.00+072110.8,SDSS J122447.00+072110.9,SDSS J122447.01+072110.9;;; +NGC4367;**;12:24:35.14;+12:10:56.3;Vir;;;;;;;;;;;;;;;;;;;;; +NGC4368;Dup;12:23:06.68;+10:37:16.3;Vir;;;;;;;;;;;;;;;4325;;;;;; +NGC4369;G;12:24:36.20;+39:22:58.8;CVn;1.98;1.89;175;12.30;;9.78;9.13;8.92;22.55;SBa;;;;;;;;2MASX J12243620+3922587,IRAS 12221+3939,MCG +07-26-004,PGC 040396,SDSS J122436.13+392259.8,UGC 07489;;; +NGC4370;G;12:24:54.90;+07:26:41.6;Vir;1.62;1.06;79;15.59;13.84;10.31;9.63;9.31;23.01;SBa;;;;;;;;2MASX J12245493+0726404,IRAS 12223+0743,MCG +01-32-051,PGC 040439,SDSS J122454.89+072641.5,SDSS J122454.90+072641.6,UGC 07492;;; +NGC4371;G;12:24:55.43;+11:42:15.2;Vir;3.88;1.81;96;11.79;10.81;8.60;7.96;7.72;23.30;S0-a;;;;;;;;2MASX J12245542+1142154,MCG +02-32-033,PGC 040442,SDSS J122455.43+114215.1,UGC 07493;;; +NGC4372;GCl;12:25:45.38;-72:39:32.7;Mus;12.00;;;10.86;9.85;;;;;;;;;;;;;C 108,MWSC 2029;;; +NGC4373;G;12:25:17.82;-39:45:35.0;Cen;3.98;2.11;54;11.59;11.05;8.58;7.92;7.65;23.61;E-S0;;;;;;;;2MASX J12251781-3945347,ESO 322-006,ESO-LV 322-0060,MCG -06-27-025,PGC 040498;;; +NGC4373A;G;12:25:37.73;-39:19:10.8;Cen;2.80;1.04;152;13.11;12.94;9.74;9.05;8.80;23.59;S0;;;;;;;;2MASX J12253773-3919110,ESO 322-008,ESO-LV 322-0080,IRAS 12229-3902,MCG -06-27-026,PGC 040549;;; +NGC4373B;G;12:26:43.78;-39:08:03.2;Cen;1.03;0.80;95;15.05;;13.76;13.25;12.71;23.63;SBd;;;;;;;;2MASX J12264376-3908033,ESO 322-010,ESO-LV 322-0100,MCG -06-27-027A,PGC 040735;;; +NGC4374;G;12:25:03.74;+12:53:13.1;Vir;7.41;6.44;133;12.09;10.49;7.12;6.47;6.22;23.23;E;;;;084;;;;2MASX J12250377+1253130,IRAS 12224+1309,MCG +02-32-034,PGC 040455,SDSS J122503.74+125312.8,UGC 07494;;; +NGC4375;G;12:25:00.47;+28:33:31.0;Com;1.16;0.85;14;13.90;;11.00;10.25;10.02;22.82;SBab;;;;;;;;2MASX J12250049+2833306,IRAS 12224+2850,MCG +05-29-080,PGC 040449,SDSS J122500.46+283330.9,SDSS J122500.47+283330.9,SDSS J122500.47+283331.0,UGC 07496;;; +NGC4376;G;12:25:18.06;+05:44:28.3;Vir;1.32;0.79;152;13.90;;12.16;11.53;11.23;22.69;I;;;;;;;;2MASX J12251806+0544280,IRAS 12227+0601,MCG +01-32-053,PGC 040494,SDSS J122518.01+054428.3,UGC 07498;;; +NGC4377;G;12:25:12.34;+14:45:43.8;Com;1.60;1.24;179;12.50;;9.73;9.06;8.83;22.43;E-S0;;;;;;;;2MASX J12251230+1445439,MCG +03-32-025,PGC 040477,SDSS J122512.33+144543.7,UGC 07501;;; +NGC4378;G;12:25:18.10;+04:55:30.5;Vir;2.09;1.93;155;14.51;13.49;9.42;8.72;8.51;22.54;Sa;;;;;;;;2MASX J12251807+0455300,MCG +01-32-052,PGC 040490,SDSS J122518.10+045530.5,UGC 07497;;; +NGC4379;G;12:25:14.74;+15:36:26.9;Com;1.87;1.52;103;12.63;11.72;9.65;8.96;8.77;22.63;E-S0;;;;;;;;2MASX J12251473+1536269,MCG +03-32-026,PGC 040484,UGC 07502;;; +NGC4380;G;12:25:22.17;+10:01:00.5;Vir;3.35;1.78;158;13.40;;9.23;8.44;8.33;23.24;SABa;;;;;;;;2MASX J12252217+1001001,IRAS 12228+1017,MCG +02-32-037,PGC 040507,SDSS J122522.16+100100.5,SDSS J122522.17+100100.5,UGC 07503;;; +NGC4381;Dup;12:23:58.82;+48:46:46.1;CVn;;;;;;;;;;;;;;;4357;;;;;; +NGC4382;G;12:25:24.11;+18:11:29.4;Com;6.95;5.35;12;10.20;9.05;7.06;6.42;6.15;22.87;S0-a;;;;085;;;;2MASX J12252405+1811278,MCG +03-32-029,PGC 040515,SDSS J122524.06+181127.7,UGC 07508;;;V-mag taken from LEDA +NGC4383;G;12:25:25.52;+16:28:12.5;Com;1.67;0.90;31;12.67;12.12;10.40;9.77;9.49;22.25;Sa;;;;;;;;2MASX J12252551+1628120,IRAS 12228+1644,MCG +03-32-030,PGC 040516,SDSS J122525.52+162812.4,UGC 07507;;; +NGC4384;G;12:25:11.98;+54:30:22.4;UMa;1.27;0.99;85;13.50;;11.36;10.68;10.38;22.66;Sa;;;;;;;;2MASX J12251201+5430220,IRAS 12227+5446,MCG +09-20-168,PGC 040475,SDSS J122511.97+543022.3,SDSS J122511.98+543022.3,SDSS J122511.98+543022.4,UGC 07506;;; +NGC4385;G;12:25:42.80;+00:34:21.4;Vir;2.15;1.16;91;14.63;14.12;10.65;10.02;9.78;23.41;S0-a;;;;;;;;2MASX J12254281+0034213,IRAS 12231+0050,MCG +00-32-009,PGC 040564,SDSS J122542.79+003420.3,SDSS J122542.80+003421.4,UGC 07515;;Confused HIPASS source; +NGC4386;G;12:24:28.35;+75:31:44.1;Dra;2.52;1.44;135;12.60;;9.45;8.71;8.50;23.38;S0;;;;;;;;2MASX J12242831+7531440,MCG +13-09-027,PGC 040378,UGC 07491;;; +NGC4387;G;12:25:41.68;+12:48:37.9;Vir;1.58;0.94;138;13.01;12.12;10.04;9.34;9.15;22.75;E;;;;;;;;2MASX J12254171+1248372,MCG +02-32-039,PGC 040562,SDSS J122541.67+124837.8,SDSS J122541.68+124837.8,SDSS J122541.68+124837.9,UGC 07517;;; +NGC4388;G;12:25:46.75;+12:39:43.5;Vir;5.38;1.29;91;11.76;11.02;8.98;8.25;8.00;23.20;SBb;;;;;;;;2MASX J12254682+1239434,IRAS 12232+1256,MCG +02-32-041,PGC 040581,SDSS J122546.72+123942.7,UGC 07520;;; +NGC4389;G;12:25:35.10;+45:41:04.8;CVn;2.51;1.67;98;12.64;;10.12;9.46;9.13;22.98;SBbc;;;;;;;;2MASX J12253509+4541048,MCG +08-23-028,PGC 040537,SDSS J122534.60+454106.8,SDSS J122534.61+454106.8,UGC 07514;;Multiple SDSS entries describe this object.; +NGC4390;G;12:25:50.67;+10:27:32.6;Vir;1.52;1.13;99;13.70;;11.30;10.67;10.33;22.74;Sc;;;;;;3320;;2MASX J12255069+1027323,IRAS 12233+1044,MCG +02-32-040,PGC 040597,SDSS J122550.67+102732.5,SDSS J122550.67+102732.6,UGC 07519;;; +NGC4391;G;12:25:18.79;+64:56:00.5;Dra;1.25;1.24;125;13.80;;10.82;10.10;9.93;22.99;E-S0;;;;;;;;2MASX J12251872+6456008,MCG +11-15-053,PGC 040500,SDSS J122518.79+645600.4,SDSS J122518.79+645600.5,UGC 07511;;; +NGC4392;G;12:25:18.96;+45:50:50.9;CVn;1.58;1.16;75;14.60;;11.12;10.43;10.12;24.02;S0;;;;;;;;2MASX J12251894+4550507,MCG +08-23-023,PGC 040499,SDSS J122518.95+455050.8,SDSS J122518.96+455050.8;;; +NGC4393;G;12:25:51.23;+27:33:41.6;Com;2.92;2.70;15;13.80;;;;;24.86;Scd;;;;;;;;MCG +05-29-083,PGC 040600,UGC 07521;;; +NGC4394;G;12:25:55.53;+18:12:50.6;Com;3.48;3.35;145;11.90;;9.10;8.40;8.16;23.05;SBb;;;;;;;;2MASX J12255562+1812501,IRAS 12234+1829,MCG +03-32-035,PGC 040614,UGC 07523;;; +NGC4395;G;12:25:48.86;+33:32:48.9;CVn;4.17;1.39;128;10.54;10.11;10.66;10.25;9.98;21.71;Sm;;;;;;;;2MASX J12254892+3332482,IRAS 12233+3348,MCG +06-27-053,PGC 040596,SDSS J122548.86+333248.7,SDSS J122548.87+333248.7,UGC 07524;;NGC 4399, 4400 and 4401 are HII regions in NGC 4395.; +NGC4396;G;12:25:58.82;+15:40:17.3;Com;2.97;1.04;124;13.06;12.58;11.06;10.46;10.34;23.32;Scd;;;;;;;;2MASX J12255880+1540172,IRAS 12234+1556,MCG +03-32-034,PGC 040622,UGC 07526;;HOLM 400B is a double star.; +NGC4397;Other;12:25:58.16;+18:18:03.7;Com;;;;;;;;;;;;;;;;;;;;"Three Galactic stars within 12""."; +NGC4398;*;12:26:07.43;+10:41:09.9;Vir;;;;;;;;;;;;;;;;;;SDSS J122607.43+104109.8;;; +NGC4399;Other;12:25:43.01;+33:30:57.9;CVn;;;;;;;;;;;;;;;;;;;;This is a superassociation in the galaxy NGC 4395.;This is a superassociation in the galaxy NGC 4395. +NGC4400;Other;12:25:55.91;+33:30:53.4;CVn;;;;;;;;;;;;;;;;;;;;This is a superassociation in the galaxy NGC 4395.;This is a superassociation in the galaxy NGC 4395. +NGC4401;Other;12:25:57.57;+33:31:42.1;CVn;;;;;;;;;;;;;;;;;;;;This is a superassociation in the galaxy NGC 4395.;This is a superassociation in the galaxy NGC 4395. +NGC4402;G;12:26:07.65;+13:06:48.0;Vir;3.52;1.00;89;12.55;;9.60;8.63;8.49;23.38;Sb;;;;;;;;2MASX J12260756+1306460,IRAS 12235+1323,MCG +02-32-044,PGC 040644,SDSS J122607.65+130647.9,SDSS J122607.71+130649.0,UGC 07528;;; +NGC4403;G;12:26:12.79;-07:41:05.8;Vir;1.58;0.61;17;14.00;;10.74;9.96;9.72;22.91;SBab;;;;;;;;2MASX J12261279-0741059,IRAS 12236-0724,MCG -01-32-008,PGC 040656;;; +NGC4404;G;12:26:16.21;-07:40:51.0;Vir;1.56;1.00;139;14.00;;10.73;10.11;9.77;23.93;E-S0;;;;;;;;2MASX J12261616-0740509,MCG -01-32-009,PGC 040666;;; +NGC4405;G;12:26:07.15;+16:10:51.6;Com;1.52;1.02;21;13.03;;10.28;9.58;9.38;22.47;S0-a;;;;;;0788;;2MASX J12260711+1610510,IRAS 12235+1627,MCG +03-32-036,PGC 040643,SDSS J122607.14+161051.5,SDSS J122607.14+161051.6,SDSS J122607.15+161051.6,UGC 07529;;; +NGC4406;G;12:26:11.74;+12:56:46.4;Vir;11.53;8.43;128;9.83;8.90;7.01;6.33;6.10;23.90;E;;;;086;;;;2MASX J12261181+1256454,MCG +02-32-046,PGC 040653,SDSS J122611.75+125646.3,UGC 07532;;HOLM 403H is a star.; +NGC4407;G;12:26:32.25;+12:36:39.5;Vir;2.08;1.46;53;13.60;12.25;10.63;10.11;9.79;22.91;Sab;;;;;4413;;;2MASX J12263225+1236390,IRAS 12239+1253,MCG +02-32-049,PGC 040705,SDSS J122632.24+123638.3,UGC 07538;;; +NGC4408;G;12:26:17.24;+27:52:16.2;Com;0.62;0.52;36;15.20;;12.12;11.39;11.12;23.09;E;;;;;;;;2MASX J12261724+2752158,PGC 040668,SDSS J122617.24+275216.1,SDSS J122617.24+275216.2,SDSS J122617.25+275216.2;;; +NGC4409;G;12:26:58.50;+02:29:39.7;Vir;1.82;0.89;9;12.70;;10.51;9.89;9.66;22.23;SBc;;;;;4420;;;2MASX J12265847+0229396,IRAS 12244+0246,MCG +01-32-064,PGC 040775,SDSS J122658.44+022936.6,SDSS J122658.50+022939.6,SDSS J122658.50+022939.7,UGC 07549;;; +NGC4410A;G;12:26:28.19;+09:01:09.0;Vir;0.62;0.45;0;13.60;;;;;21.51;Sa;;;;;;;;MCG +02-32-047 NED01,PGC 040694,UGC 07535 NED01;;ALFALFA source may include the galaxy NGC 4410 NED02.; +NGC4410B;G;12:26:29.58;+09:01:09.2;Vir;0.58;0.53;105;13.60;;10.45;9.72;9.46;21.72;S0-a;;;;;;;;2MASX J12262960+0901094,MCG +02-32-047 NED02,PGC 040697,SDSS J122629.57+090109.2,UGC 07535 NED02;;Identified as NGC 4410B and as UGC 07535 in VCC.; +NGC4410C;G;12:26:35.50;+09:02:07.7;Vir;0.85;0.56;93;15.20;;11.70;10.95;10.56;23.12;S0-a;;;;;;0790;;2MASX J12263547+0902074,MCG +02-32-051,PGC 040713,SDSS J122635.49+090207.6,SDSS J122635.50+090207.6,SDSS J122635.50+090207.7;;; +NGC4411;G;12:26:30.10;+08:52:20.0;Vir;1.63;0.98;19;14.40;;;;;22.69;Sc;;;;;4411A;3339;;MCG +02-32-048,PGC 040695,UGC 07537;;The position in 1995ApJS...96..359Y includes a superposed star.; +NGC4411B;G;12:26:47.23;+08:53:04.6;Vir;1.92;1.72;90;14.40;;12.14;11.41;10.71;23.04;SABc;;;;;;;;2MASX J12264721+0853044,IRAS 12242+0909,MCG +02-32-055,PGC 040745,SDSS J122647.22+085304.5,SDSS J122647.23+085304.5,SDSS J122647.23+085304.6,UGC 07546;;NGC 4411 and UGC 07590 may contribute to the HIPASS detection.; +NGC4412;G;12:26:36.08;+03:57:52.9;Vir;1.50;1.35;109;13.20;;10.76;10.17;9.65;22.54;Sb;;;;;;;;2MASX J12263610+0357526,IRAS 12240+0414,MCG +01-32-062,PGC 040715,SDSS J122636.08+035752.8,UGC 07536;;; +NGC4413;Dup;12:26:32.25;+12:36:39.5;Vir;;;;;;;;;;;;;;;4407;;;;;; +NGC4414;G;12:26:27.10;+31:13:24.7;Com;1.95;1.12;162;10.96;10.12;7.93;7.23;6.95;20.72;Sc;;;;;;;;2MASX J12262708+3113247,IRAS 12239+3129,MCG +05-29-085,PGC 040692,SDSS J122627.12+311324.5,UGC 07539;;; +NGC4415;G;12:26:40.49;+08:26:08.5;Vir;1.28;1.13;6;14.20;;11.12;10.52;10.19;22.86;S0-a;;;;;;;;2MASX J12264046+0826084,MCG +02-32-052,PGC 040727,SDSS J122640.48+082608.5,SDSS J122640.49+082608.5,UGC 07540;;; +NGC4416;G;12:26:46.72;+07:55:08.4;Vir;1.57;1.37;112;13.15;11.57;11.38;10.81;10.97;22.76;Sc;;;;;;;;2MASX J12264672+0755084,IRAS 12242+0811,MCG +01-32-063,PGC 040743,TYC 874-874-1,UGC 07541;;; +NGC4417;G;12:26:50.61;+09:35:03.3;Vir;3.09;1.09;49;12.20;;9.05;8.42;8.17;23.07;S0;;;;;;;;2MASX J12265062+0935028,MCG +02-32-053,PGC 040756,SDSS J122650.61+093503.3,UGC 07542;;; +NGC4418;Dup;12:26:54.62;-00:52:39.4;Vir;;;;;;;;;;;;;;;4355;;;;;; +NGC4419;G;12:26:56.44;+15:02:50.6;Com;3.89;1.30;133;12.08;11.16;8.78;8.04;7.74;23.17;Sa;;;;;;;;2MASX J12265643+1502507,IRAS 12244+1519,MCG +03-32-038,PGC 040772,SDSS J122656.42+150250.4,UGC 07551;;; +NGC4420;Dup;12:26:58.50;+02:29:39.7;Vir;;;;;;;;;;;;;;;4409;;;;;; +NGC4421;G;12:27:02.54;+15:27:41.3;Com;2.59;1.97;9;12.47;11.60;9.71;9.04;8.80;23.06;S0-a;;;;;;;;2MASX J12270254+1527406,MCG +03-32-039,PGC 040785,SDSS J122702.53+152741.3,SDSS J122702.54+152741.3,UGC 07554;;; +NGC4422;G;12:27:12.11;-05:49:51.6;Vir;1.48;1.43;80;14.50;;10.71;10.04;9.74;24.20;E-S0;;;;;;;;2MASX J12271208-0549511,MCG -01-32-010,PGC 040813;;; +NGC4423;G;12:27:08.97;+05:52:48.6;Vir;2.05;0.41;20;14.40;;11.49;10.74;11.05;22.79;Sd;;;;;;;;2MASX J12270897+0552488,IRAS 12246+0609,MCG +01-32-065,PGC 040801,SDSS J122708.99+055248.2,UGC 07556;;; +NGC4424;G;12:27:11.61;+09:25:14.4;Vir;3.04;1.57;95;13.10;;9.87;9.27;9.09;23.15;Sa;;;;;;;;2MASX J12271158+0925138,IRAS 12246+0941,MCG +02-32-058,PGC 040809,SDSS J122711.61+092514.4,UGC 07561;;; +NGC4425;G;12:27:13.33;+12:44:05.0;Vir;3.08;1.26;26;12.73;11.83;9.88;9.26;9.01;23.92;S0-a;;;;;;;;2MASX J12271335+1244052,MCG +02-32-059,PGC 040816,SDSS J122713.33+124405.1,SDSS J122713.34+124405.2,UGC 07562;;; +NGC4426;**;12:27:10.53;+27:50:17.5;Com;;;;;;;;;;;;;;;4427;;;;;; +NGC4427;Dup;12:27:10.53;+27:50:17.5;Com;;;;;;;;;;;;;;;4426;;;;;; +NGC4428;G;12:27:28.30;-08:10:04.4;Vir;1.62;0.67;93;14.50;;10.64;10.03;9.65;22.28;SABc;;;;;;;;2MASX J12272830-0810044,IRAS 12248-0753,MCG -01-32-012,PGC 040860;;; +NGC4429;G;12:27:26.51;+11:06:27.8;Vir;5.30;2.42;98;11.40;;7.73;7.01;6.78;23.17;S0-a;;;;;;;;2MASX J12272655+1106271,IRAS 12249+1123,MCG +02-32-061,PGC 040850,SDSS J122726.50+110627.7,UGC 07568;;; +NGC4430;G;12:27:26.41;+06:15:46.0;Vir;2.02;1.50;75;13.40;;10.29;9.71;9.35;22.69;Sb;;;;;;;;2MASX J12272638+0615455,IRAS 12248+0632,MCG +01-32-067,PGC 040851,SDSS J122726.40+061545.9,SDSS J122726.41+061546.0,UGC 07566;;; +NGC4431;G;12:27:27.38;+12:17:25.0;Vir;1.53;0.88;179;13.74;12.89;11.22;10.54;10.31;23.46;S0;;;;;;;;2MASX J12272735+1217252,MCG +02-32-062,PGC 040852,SDSS J122727.38+121725.0,UGC 07569;;; +NGC4432;G;12:27:32.97;+06:13:59.7;Vir;0.64;0.49;4;15.00;;13.32;12.54;12.52;22.56;SABb;;;;;;;;2MASX J12273295+0613595,MCG +01-32-068,PGC 040875,SDSS J122732.97+061400.0,UGC 07570;;; +NGC4433;G;12:27:38.59;-08:16:42.3;Vir;2.00;0.67;3;13.40;;10.62;9.89;9.51;22.82;SABa;;;;;;;;2MASX J12273860-0816424,IRAS 12250-0800,MCG -01-32-013,PGC 040894;;; +NGC4434;G;12:27:36.68;+08:09:15.6;Vir;1.42;1.36;75;13.20;;10.07;9.44;9.21;22.59;E;;;;;;;;2MASX J12273667+0809155,MCG +01-32-069,PGC 040886,SDSS J122736.68+080915.6,UGC 07571;;; +NGC4435;G;12:27:40.49;+13:04:44.2;Vir;3.03;2.14;12;11.74;10.80;8.42;7.16;7.30;22.66;S0;;;;;;;;2MASX J12274050+1304444,IRAS 12251+1321,MCG +02-32-064,PGC 040898,SDSS J122740.46+130444.4,UGC 07575;;; +NGC4436;G;12:27:41.24;+12:18:57.2;Vir;1.66;0.79;114;13.91;12.98;11.53;10.86;10.75;23.75;S0;;;;;;;;2MASX J12274122+1218574,MCG +02-32-066,PGC 040903,SDSS J122741.23+121857.2,SDSS J122741.24+121857.2,UGC 07573;;; +NGC4437;Dup;12:32:45.59;+00:06:54.1;Vir;;;;;;;;;;;;;;;4517;;;;;; +NGC4438;G;12:27:45.59;+13:00:31.8;Vir;9.16;4.02;27;11.02;10.17;8.25;7.56;7.27;24.21;Sa;;;;;;;;2MASX J12274565+1300309,IRAS 12252+1317,MCG +02-32-065,PGC 040914,SDSS J122745.63+130031.7,UGC 07574;;; +NGC4439;OCl;12:28:26.35;-60:06:11.6;Cru;4.50;;;8.73;8.40;;;;;;;;;;;;;MWSC 2035;;; +NGC4440;G;12:27:53.57;+12:17:35.8;Vir;1.77;1.44;120;12.70;11.72;9.82;9.14;8.91;22.66;Sa;;;;;;;;2MASX J12275357+1217354,MCG +02-32-067,PGC 040927,SDSS J122753.56+121735.8,UGC 07581;;; +NGC4441;G;12:27:20.35;+64:48:05.4;Dra;4.13;2.96;171;13.50;;10.94;10.30;10.01;25.13;S0-a;;;;;;;;2MASX J12272040+6448056,IRAS 12250+6504,MCG +11-15-056,PGC 040836,SDSS J122720.34+644805.4,SDSS J122720.35+644805.3,SDSS J122720.35+644805.4,SDSS J122720.36+644805.3,UGC 07572;;; +NGC4442;G;12:28:03.88;+09:48:13.4;Vir;4.32;1.61;87;11.20;;8.22;7.50;7.29;23.18;S0;;;;;;;;2MASX J12280389+0948130,MCG +02-32-068,PGC 040950,SDSS J122803.88+094813.3,UGC 07583;;; +NGC4443;Dup;12:29:03.01;+13:11:01.5;Vir;;;;;;;;;;;;;;;4461;;;;;; +NGC4444;G;12:28:36.41;-43:15:42.3;Cen;2.27;1.85;68;13.00;;10.42;9.73;9.41;23.40;SABb;;;;;;;;2MASX J12283639-4315423,ESO 268-010,ESO-LV 268-0100,IRAS 12259-4259,MCG -07-26-007,PGC 041043;;; +NGC4445;G;12:28:15.93;+09:26:10.3;Vir;2.54;0.50;105;13.70;;10.79;10.12;9.83;23.44;Sab;;;;;;0793;;2MASX J12281593+0926106,MCG +02-32-072,PGC 040987,SDSS J122815.92+092610.3,SDSS J122815.93+092610.7,UGC 07587;;; +NGC4446;G;12:28:06.79;+13:54:42.3;Com;0.98;0.59;89;15.00;;12.47;11.94;11.97;22.89;Sc;;;;;;;;2MASX J12280679+1354418,MCG +02-32-069,PGC 040962,SDSS J122806.78+135442.3,SDSS J122806.79+135442.3,UGC 07586;;; +NGC4447;G;12:28:12.53;+13:53:57.2;Com;0.75;0.62;117;15.20;;12.05;11.47;11.02;22.96;S0;;;;;;;;2MASX J12281256+1353569,MCG +02-32-073,PGC 040979,SDSS J122812.53+135357.2;;; +NGC4448;G;12:28:15.43;+28:37:13.1;Com;1.58;1.04;92;11.90;;8.73;8.06;7.81;21.52;SBab;;;;;;;;2MASX J12281542+2837130,IRAS 12257+2853,MCG +05-29-089,PGC 040988,UGC 07591;;; +NGC4449;G;12:28:11.10;+44:05:37.1;CVn;4.66;2.71;51;9.98;9.64;8.10;7.45;7.25;21.10;IB;;;;;;;;2MASX J12281111+4405368,C 021,MCG +07-26-009,PGC 040973,SDSS J122811.10+440537.0,UGC 07592;;One of two 6cm sources associated with [WB92] 1225+4417; +NGC4450;G;12:28:29.63;+17:05:05.8;Com;5.46;3.78;173;10.90;10.08;7.94;7.22;7.05;22.99;Sab;;;;;;;;2MASX J12282963+1705058,IRAS 12259+1721,MCG +03-32-048,PGC 041024,UGC 07594;;; +NGC4451;G;12:28:40.55;+09:15:31.7;Vir;1.35;0.86;166;13.40;;10.81;10.18;9.99;22.40;Sb;;;;;;;;2MASX J12284055+0915321,IRAS 12260+0932,MCG +02-32-079,PGC 041050,SDSS J122840.50+091533.7,UGC 07600;;; +NGC4452;G;12:28:43.31;+11:45:18.1;Vir;3.36;0.60;32;12.87;11.98;9.95;9.21;9.07;24.03;S0;;;;;;;;2MASX J12284362+1145261,MCG +02-32-080,PGC 041060,SDSS J122843.30+114518.1,SDSS J122843.31+114518.1,UGC 07601;;; +NGC4453;GPair;12:28:47.20;+06:30:27.0;Vir;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC4453 NED01;G;12:28:46.81;+06:30:43.2;Vir;0.63;0.30;157;15.40;;13.21;12.52;12.16;22.91;Sbc;;;;;;;;2MASX J12284685+0630429,IRAS 12262+0647,MCG +01-32-073,PGC 041072,SDSS J122846.81+063043.2;;; +NGC4453 NED02;G;12:28:47.68;+06:30:12.8;Vir;0.34;0.22;42;17.34;;;;;23.85;Scd;;;;;;;;MCG +01-32-073 NOTES01,SDSS J122847.68+063012.7,SDSS J122847.68+063012.8;;;B-Mag taken from LEDA +NGC4454;G;12:28:50.75;-01:56:21.1;Vir;2.17;1.99;25;12.72;11.87;10.01;9.33;9.05;23.16;S0-a;;;;;;;;2MASX J12285074-0156209,MCG +00-32-014,PGC 041083,SDSS J122850.74-015621.0,UGC 07606;;; +NGC4455;G;12:28:44.11;+22:49:13.6;Com;1.61;0.56;16;15.50;;;;;21.98;SBcd;;;;;;;;MCG +04-30-001,PGC 041066,SDSS J122844.11+224913.5,SDSS J122844.11+224913.6,UGC 07603;;; +NGC4456;G;12:27:52.40;-30:05:52.4;Hya;1.29;0.69;154;14.08;;11.35;10.61;10.34;22.92;Sbc;;;;;;;;2MASX J12275243-3005510,ESO 441-030,ESO-LV 441-0300,IRAS 12252-2949,MCG -05-30-002,PGC 040922,PGC 040925;;; +NGC4457;G;12:28:59.01;+03:34:14.1;Vir;2.79;2.37;79;11.90;;8.67;8.02;7.78;22.34;S0-a;;;;;;;;2MASX J12285901+0334141,IRAS 12264+0350,MCG +01-32-075,PGC 041101,SDSS J122858.90+033413.4,UGC 07609;;; +NGC4458;G;12:28:57.57;+13:14:30.8;Vir;1.59;1.48;175;12.93;12.07;10.22;9.57;9.32;22.79;E;;;;;;;;2MASX J12285753+1314308,MCG +02-32-082,PGC 041095,SDSS J122857.56+131430.9,UGC 07610;;; +NGC4459;G;12:29:00.01;+13:58:42.1;Com;4.17;3.16;109;11.60;;8.10;7.40;7.15;23.13;S0;;;;;;;;2MASX J12290002+1358428,IRAS 12264+1415,MCG +02-32-083,PGC 041104,SDSS J122900.03+135842.8,UGC 07614;;; +NGC4460;G;12:28:45.56;+44:51:51.2;CVn;3.93;1.05;40;12.50;;9.97;9.29;9.06;24.05;S0-a;;;;;;;;2MASX J12284555+4451512,MCG +08-23-041,PGC 041069,UGC 07611;;; +NGC4461;G;12:29:03.01;+13:11:01.5;Vir;3.61;1.23;8;12.09;11.19;8.97;8.24;8.01;23.35;S0-a;;;;;4443;;;2MASX J12290301+1311018,MCG +02-32-084,PGC 041111,SDSS J122903.00+131101.7,UGC 07613;;Identification as NGC 4443 is not certain.; +NGC4462;G;12:29:21.22;-23:09:58.9;Crv;3.60;1.33;124;12.81;11.54;9.44;8.74;8.46;23.71;SBab;;;;;;;;2MASX J12292109-2309598,ESO 506-013,ESO-LV 506-0130,IRAS 12266-2253,MCG -04-30-002,PGC 041150;;; +NGC4463;OCl;12:29:55.22;-64:47:22.8;Mus;4.80;;;7.62;7.20;;;;;;;;;;;;;MWSC 2042;;; +NGC4464;G;12:29:21.29;+08:09:23.8;Vir;1.01;0.76;11;13.50;;10.45;9.81;9.58;22.19;E-S0;;;;;;;;2MASX J12292131+0809236,MCG +01-32-078,PGC 041148,SDSS J122921.29+080923.8,UGC 07619;;; +NGC4465;G;12:29:23.54;+08:01:33.6;Vir;0.26;0.21;108;15.40;;13.94;13.34;12.99;20.88;Sc;;;;;;;;2MASX J12292353+0801336,PGC 041157,SDSS J122923.70+080135.7;;The SDSS image includes the star or companion to the northeast.; +NGC4466;G;12:29:30.57;+07:41:47.1;Vir;0.93;0.57;101;14.70;;;;;22.58;Sb;;;;;;;;MCG +01-32-081,PGC 041170,SDSS J122930.56+074147.1,SDSS J122930.57+074147.1,UGC 07626;;HOLM 412B is a star.; +NGC4467;G;12:29:30.25;+07:59:34.3;Vir;0.59;0.49;55;15.20;;11.43;11.31;10.49;22.66;E;;;;;;;;2MASX J12293026+0759346,MCG +01-32-080,PGC 041169,SDSS J122930.24+075934.2,SDSS J122930.24+075934.3,SDSS J122930.25+075934.3;;; +NGC4468;G;12:29:30.90;+14:02:56.7;Com;1.54;1.00;72;14.20;;11.10;10.49;10.24;23.45;E-S0;;;;;;;;2MASX J12293088+1402569,MCG +02-32-090,PGC 041171,SDSS J122930.89+140256.6,SDSS J122930.89+140256.7,SDSS J122930.90+140256.7,UGC 07628;;; +NGC4469;G;12:29:28.03;+08:44:59.7;Vir;2.86;1.05;87;12.60;;9.05;8.23;8.04;22.73;S0-a;;;;;;;;2MASX J12292799+0845006,IRAS 12269+0901,MCG +02-32-089,PGC 041164,SDSS J122928.02+084459.7,SDSS J122928.03+084459.7,UGC 07622;;; +NGC4470;G;12:29:37.78;+07:49:27.1;Vir;1.28;0.86;1;12.90;;10.88;10.30;10.12;22.10;Sab;;;;;4610;;;2MASX J12293780+0749266,IRAS 12270+0806,MCG +01-32-082,PGC 041189,SDSS J122937.77+074927.1,SDSS J122937.78+074927.1,UGC 07627;;; +NGC4471;G;12:29:37.05;+07:55:57.9;Vir;0.44;0.43;150;16.76;15.92;13.48;12.81;12.90;23.21;E;;;;;;;;2MASX J12293706+0755576,PGC 041185,SDSS J122937.05+075557.8,SDSS J122937.05+075557.9;;"NGC identification is doubtful; NGC 4471 is probably a nearby field star."; +NGC4472;G;12:29:46.76;+08:00:01.7;Vir;10.21;8.38;156;13.21;12.17;6.27;5.64;5.40;23.25;E;;;;049;;;;2MASX J12294679+0800014,MCG +01-32-083,PGC 041220,SDSS J122946.76+080001.7,UGC 07629;;HOLM 413B is a star.; +NGC4473;G;12:29:48.87;+13:25:45.7;Com;4.27;2.51;100;11.16;10.20;8.04;7.40;7.16;23.03;E;;;;;;;;2MASX J12294887+1325455,MCG +02-32-093,PGC 041228,SDSS J122948.86+132545.9,UGC 07631;;; +NGC4474;G;12:29:53.55;+14:04:06.9;Com;2.33;1.57;79;12.60;;9.62;8.97;8.70;23.01;S0;;;;;;;;2MASX J12295354+1404072,MCG +02-32-094,PGC 041241,SDSS J122953.54+140406.9,UGC 07634;;; +NGC4475;G;12:29:47.58;+27:14:36.0;Com;1.10;0.61;9;14.60;;11.81;11.05;10.98;23.05;SBbc;;;;;;;;2MASX J12294758+2714362,MCG +05-30-008,PGC 041225,SDSS J122947.57+271436.0,SDSS J122947.58+271436.0,UGC 07632;;; +NGC4476;G;12:29:59.08;+12:20:55.2;Vir;1.70;1.15;27;13.01;12.19;10.38;9.72;9.47;22.98;E-S0;;;;;;;;2MASX J12295908+1220552,IRAS 12274+1237,MCG +02-32-096,PGC 041255,SDSS J122959.08+122055.1,SDSS J122959.08+122055.2,UGC 07637;;; +NGC4477;G;12:30:02.20;+13:38:11.8;Com;3.70;3.22;26;11.38;10.42;8.28;7.60;7.35;22.86;S0;;;;;;;;2MASX J12300217+1338111,IRAS 12275+1354,MCG +02-32-097,PGC 041260,SDSS J123002.19+133811.5,UGC 07638;;; +NGC4478;G;12:30:17.42;+12:19:42.8;Vir;1.75;1.43;144;12.36;11.45;9.25;8.56;8.36;22.30;E;;;;;;;;2MASX J12301743+1219428,MCG +02-32-099,PGC 041297,SDSS J123017.41+121942.7,UGC 07645;;Multiple SDSS entries describe this object.; +NGC4479;G;12:30:18.37;+13:34:39.5;Com;1.43;1.25;14;13.40;12.44;10.64;10.02;9.77;23.00;S0;;;;;;;;2MASX J12301834+1334388,MCG +02-32-100,PGC 041302,SDSS J123018.37+133439.5,UGC 07646;;; +NGC4480;G;12:30:26.78;+04:14:47.7;Vir;1.89;0.97;173;13.40;;10.54;9.95;9.75;22.68;SABc;;;;;;;;2MASX J12302678+0414472,IRAS 12278+0431,MCG +01-32-087,PGC 041317,SDSS J123026.78+041447.6,SDSS J123026.78+041447.7,UGC 07647;;; +NGC4481;G;12:29:48.67;+64:01:58.8;Dra;1.23;0.52;146;14.30;;11.87;11.20;10.95;23.42;Sab;;;;;;;;2MASX J12294832+6402020,IRAS 12275+6418,MCG +11-15-057,PGC 041222,SDSS J122948.66+640158.8,SDSS J122948.67+640158.8,SDSS J122948.67+640158.9;;; +NGC4482;G;12:30:10.33;+10:46:46.1;Vir;1.51;0.85;137;14.20;;11.25;10.79;10.58;23.41;E;;;;;;3427;;2MASX J12301033+1046461,MCG +02-32-098,PGC 041272,SDSS J123010.32+104646.1,SDSS J123010.33+104646.1,UGC 07640;;; +NGC4483;G;12:30:40.65;+09:00:56.4;Vir;1.65;0.85;70;13.40;;10.11;9.50;9.29;22.86;S0-a;;;;;;;;2MASX J12304062+0900563,MCG +02-32-103,PGC 041339,SDSS J123040.64+090056.4,SDSS J123040.65+090056.4,UGC 07649;;; +NGC4484;G;12:28:52.68;-11:39:07.4;Crv;1.26;1.10;72;13.90;;11.83;11.13;11.17;23.33;Sc;;;;;;;;2MASX J12285267-1139073,IRAS 12262-1122,MCG -02-32-013,PGC 041087;;; +NGC4485;G;12:30:31.13;+41:42:04.2;CVn;2.01;1.34;2;12.42;11.93;11.01;10.44;10.58;22.22;I;;;;;;;;2MASX J12303111+4142042,MCG +07-26-013,PGC 041326,SDSS J123030.96+414201.4,UGC 07648;;; +NGC4486;G;12:30:49.42;+12:23:28.0;Vir;7.11;6.67;153;9.59;8.63;6.72;6.07;5.81;22.79;E;;;;087;;;;2MASX J12304942+1223279,IRAS 12282+1240,MCG +02-32-105,PGC 041361,SDSS J123049.41+122328.1,UGC 07654;Virgo Galaxy;; +NGC4486A;G;12:30:57.71;+12:16:13.3;Vir;0.92;0.81;25;11.20;;9.83;9.22;9.01;21.42;E;;;;;;;;2MASX J12305772+1216132,MCG +02-32-110,PGC 041377,SDSS J123057.71+121613.2,UGC 07658;;; +NGC4486B;G;12:30:31.97;+12:29:24.6;Vir;0.38;0.37;20;14.50;;11.01;10.29;10.09;21.00;E;;;;;;;;2MASX J12303198+1229248,MCG +02-32-101,PGC 041327,SDSS J123031.97+122924.6,UGCA 283;;; +NGC4487;G;12:31:04.46;-08:03:14.1;Vir;3.46;1.90;74;11.70;;10.07;9.39;9.35;22.75;Sc;;;;;;;;2MASX J12310446-0803140,IRAS 12285-0746,MCG -01-32-021,PGC 041399;;; +NGC4488;G;12:30:51.37;+08:21:36.0;Vir;2.75;0.76;167;13.80;;10.30;9.60;9.41;23.58;S0-a;;;;;;;;2MASX J12305139+0821364,MCG +02-32-104,PGC 041363,SDSS J123051.37+082135.9,SDSS J123051.37+082136.0,UGC 07653;;; +NGC4489;G;12:30:52.25;+16:45:31.9;Com;1.72;1.56;125;13.20;;10.24;9.59;9.37;23.02;E;;;;;;;;2MASX J12305224+1645313,MCG +03-32-054,PGC 041365,SDSS J123052.24+164531.8,UGC 07655;;; +NGC4490;G;12:30:36.24;+41:38:38.0;CVn;6.71;1.65;133;10.22;9.79;8.21;7.64;7.35;21.43;SBcd;;;;;;;;2MASX J12303636+4138370,IRAS 12281+4155,MCG +07-26-014,PGC 041333,UGC 07651;;; +NGC4491;G;12:30:57.11;+11:29:00.7;Vir;1.64;0.86;147;13.50;12.55;10.70;10.06;9.88;22.88;SBa;;;;;;;;2MASX J12305713+1129007,IRAS 12284+1145,MCG +02-32-107,PGC 041376,SDSS J123057.11+112900.7,UGC 07657;;; +NGC4492;G;12:30:59.71;+08:04:40.3;Vir;2.11;1.86;65;14.10;;9.87;9.33;9.08;22.94;Sa;;;;;;3438;;2MASX J12305975+0804404,MCG +01-32-089,PGC 041383,SDSS J123059.71+080440.3,UGC 07656;;; +NGC4493;G;12:31:08.37;+00:36:49.3;Vir;1.52;0.74;139;14.85;;11.32;10.54;10.32;24.51;E;;;;;;;;2MASX J12310835+0036496,MCG +00-32-017 NED01,PGC 041409,SDSS J123108.36+003649.3,SDSS J123108.37+003649.3,SDSS J123108.37+003649.4;;; +NGC4494;G;12:31:24.10;+25:46:30.9;Com;4.35;4.13;173;10.55;9.74;7.90;7.25;7.00;22.75;E;;;;;;;;2MASX J12312403+2546299,MCG +04-30-002,PGC 041441,UGC 07662;;The position given in 1996ApJS..106....1W is 11 arcsec west of the nucleus.; +NGC4495;G;12:31:22.88;+29:08:11.3;Com;1.34;0.57;132;14.19;13.46;11.28;10.51;10.14;23.02;Sab;;;;;;;;2MASX J12312290+2908109,IRAS 12289+2924,MCG +05-30-012,PGC 041438,SDSS J123122.88+290811.3,UGC 07663;;; +NGC4496A;G;12:31:39.21;+03:56:22.1;Vir;3.37;2.78;68;11.71;;10.32;9.78;9.56;23.32;Scd;;;;;4505;;;2MASX J12313920+0356220,MCG +01-32-090 NED01,PGC 041471,SDSS J123139.23+035622.1,UGC 07668 NED01;;; +NGC4496B;G;12:31:40.88;+03:55:34.8;Vir;1.05;0.91;112;14.50;;11.07;10.50;10.28;23.27;SBm;;;;;;;;2MASX J12314087+0355350,MCG +01-32-090 NED02,PGC 041473,SDSS J123140.88+035534.7,SDSS J123140.88+035534.8,SDSS J123140.89+035534.7,UGC 07668 NED02;;; +NGC4497;G;12:31:32.53;+11:37:29.0;Vir;2.00;1.03;62;13.19;12.47;10.61;9.94;9.74;23.37;S0-a;;;;;;3452;;2MASX J12313253+1137291,MCG +02-32-113,PGC 041457,SDSS J123132.52+113728.9,SDSS J123132.53+113729.0,UGC 07665;;; +NGC4498;G;12:31:39.56;+16:51:10.0;Com;2.88;1.53;131;12.80;;10.64;9.93;9.66;23.25;Sc;;;;;;;;2MASX J12313956+1651101,IRAS 12291+1707,MCG +03-32-056,PGC 041472,UGC 07669;;; +NGC4499;G;12:32:04.94;-39:58:56.9;Cen;2.01;1.29;102;13.58;;10.91;10.21;9.93;23.87;SBbc;;;;;;;;2MASX J12320494-3958568,ESO 322-022,ESO-LV 322-0220,MCG -07-26-008,PGC 041537;;; +NGC4500;G;12:31:22.16;+57:57:52.7;UMa;1.53;1.06;135;13.20;;10.67;10.06;9.75;22.59;Sa;;;;;;;;2MASX J12312214+5757528,IRAS 12290+5814,MCG +10-18-062,PGC 041436,SDSS J123122.15+575752.4,UGC 07667;;; +NGC4501;G;12:31:59.16;+14:25:13.4;Com;8.65;4.38;138;14.33;13.18;7.21;6.56;6.27;23.17;Sb;;;;088;;;;2MASX J12315921+1425134,IRAS 12294+1441,MCG +03-32-059,PGC 041517,UGC 07675;;; +NGC4502;G;12:32:03.35;+16:41:15.8;Com;1.04;0.54;43;14.80;;12.50;11.96;11.90;22.83;Sc;;;;;;;;2MASX J12320335+1641157,MCG +03-32-060,PGC 041531,SDSS J123203.22+164115.4,UGC 07677;;; +NGC4503;G;12:32:06.23;+11:10:35.1;Vir;3.48;1.58;12;12.05;11.07;8.82;8.14;7.89;23.34;S0;;;;;;;;2MASX J12320619+1110351,MCG +02-32-118,PGC 041538,SDSS J123206.23+111035.0,UGC 07680;;; +NGC4504;G;12:32:17.45;-07:33:48.4;Vir;3.18;1.97;163;12.10;;10.29;9.66;9.50;23.01;SABc;;;;;;;;2MASX J12321745-0733483,IRAS 12296-0717,MCG -01-32-022,PGC 041555;;; +NGC4505;Dup;12:31:39.21;+03:56:22.1;Vir;;;;;;;;;;;;;;;4496A;;;;;; +NGC4506;G;12:32:10.53;+13:25:10.6;Com;1.63;1.11;107;13.63;;11.04;10.52;10.26;23.18;SABa;;;;;;;;2MASX J12321048+1325107,MCG +02-32-120,PGC 041546,SDSS J123210.52+132510.6,SDSS J123210.53+132510.6,UGC 07682;;; +NGC4507;G;12:35:36.63;-39:54:33.3;Cen;1.39;1.19;50;12.95;13.54;9.93;9.20;8.87;22.37;Sab;;;;;;;;2MASX J12353661-3954331,ESO 322-029,ESO-LV 322-0290,IRAS 12329-3938,MCG -07-26-011,PGC 041960;;; +NGC4508;**;12:32:17.42;+05:49:11.9;Vir;;;;;;;;;;;;;;;;;;;;; +NGC4509;G;12:33:06.79;+32:05:29.6;CVn;0.67;0.37;161;14.10;;13.51;12.69;12.71;21.87;Sb;;;;;;;;2MASX J12330650+3205273,IRAS 12306+3222,MCG +05-30-018,PGC 041660,UGC 07704;;; +NGC4510;G;12:31:47.21;+64:14:01.7;Dra;1.46;0.84;151;14.20;;11.18;10.49;10.24;23.72;E;;;;;;;;2MASX J12314721+6414019,MCG +11-15-058,PGC 041489,SDSS J123147.21+641401.6,UGC 07679;;; +NGC4511;G;12:32:08.11;+56:28:16.2;UMa;0.92;0.57;7;14.00;;11.86;11.18;11.00;22.84;Sb;;;;;;;;2MASX J12320816+5628159,MCG +10-18-063,PGC 041560,SDSS J123208.10+562816.1,SDSS J123208.10+562816.2,SDSS J123208.11+562816.1,SDSS J123208.11+562816.4;;; +NGC4512;G;12:32:47.65;+63:56:21.1;Dra;2.57;0.50;166;13.00;;9.98;9.25;9.09;23.56;S0-a;;;;;4521;;;2MASX J12324772+6356214,MCG +11-15-061,PGC 041621,SDSS J123247.65+635621.1,SDSS J123247.65+635621.2,UGC 07706;;; +NGC4513;G;12:32:01.52;+66:19:57.3;Dra;2.06;1.35;16;14.10;;11.05;10.42;10.22;24.28;S0;;;;;;;;2MASX J12320145+6619575,MCG +11-15-059,PGC 041527,SDSS J123201.51+661957.5,SDSS J123201.52+661957.3,UGC 07683;;; +NGC4514;G;12:32:42.97;+29:42:44.6;Com;1.00;0.80;62;14.68;13.98;11.84;11.18;10.98;22.96;Sbc;;;;;;;;2MASX J12324296+2942441,MCG +05-30-015,PGC 041610,SDSS J123242.96+294244.5,SDSS J123242.97+294244.5,SDSS J123242.97+294244.6,UGC 07693;;; +NGC4515;G;12:33:04.97;+16:15:55.9;Com;1.35;1.06;6;13.30;;10.70;10.06;9.89;22.74;E-S0;;;;;;;;2MASX J12330494+1615557,MCG +03-32-065,PGC 041652,SDSS J123304.96+161555.9,SDSS J123304.97+161555.9,UGC 07701;;; +NGC4516;G;12:33:07.54;+14:34:29.8;Com;1.75;0.97;175;13.90;;10.90;10.19;9.99;23.16;SBa;;;;;;;;2MASX J12330756+1434297,MCG +03-32-067,PGC 041661,SDSS J123307.53+143429.7,SDSS J123307.53+143429.8,SDSS J123307.54+143429.8,UGC 07703;;; +NGC4517;G;12:32:45.59;+00:06:54.1;Vir;9.02;1.42;84;11.10;;8.36;7.62;7.33;23.18;Sc;;;;;4437;;;2MASX J12324558+0006541,IRAS 12301+0023,MCG +00-32-020,PGC 041618,SDSS J123244.76+000655.1,UGC 07694;;Host galaxy of UM 505.; +NGC4517A;G;12:32:28.15;+00:23:22.8;Vir;2.05;0.98;30;12.70;;;;;22.45;Sd;;;;;;;;MCG +00-32-019,PGC 041578,SDSS J123227.94+002326.2,SDSS J123227.95+002326.4,SDSS J123228.08+002319.3,SDSS J123228.08+002326.4,UGC 07685;;Multiple SDSS entries describe this object.; +NGC4518;G;12:33:11.76;+07:51:05.9;Vir;1.18;0.58;179;15.00;;11.24;10.53;10.26;23.58;S0-a;;;;;;;;2MASX J12331176+0751057,MCG +01-32-095,PGC 041674,SDSS J123311.75+075105.8,SDSS J123311.76+075105.9;;; +NGC4519;G;12:33:30.25;+08:39:17.1;Vir;2.33;1.77;147;12.80;;10.52;9.95;9.56;22.72;Scd;;;;;;;;2MASX J12333027+0839160,IRAS 12308+0856,MCG +02-32-135,PGC 041719,SDSS J123330.25+083917.0,SDSS J123330.25+083917.1,UGC 07709;;; +NGC4519A;G;12:33:24.71;+08:41:26.7;Vir;0.58;0.30;45;15.58;;;13.17;;22.68;I;;;;;;;;MCG +02-32-134,PGC 041706,SDSS J123324.70+084126.7;;; +NGC4520;G;12:33:49.90;-07:22:32.0;Vir;0.79;0.46;98;13.91;;11.27;10.74;10.36;23.01;E-S0;;;;;;0799;;2MASX J12334988-0722318,PGC 041748;;; +NGC4521;Dup;12:32:47.65;+63:56:21.1;Dra;;;;;;;;;;;;;;;4512;;;;;; +NGC4522;G;12:33:39.71;+09:10:30.1;Vir;3.51;0.91;34;13.60;;10.74;10.13;9.80;23.27;Sc;;;;;;;;2MASX J12333965+0910295,IRAS 12311+0926,MCG +02-32-137,PGC 041729,SDSS J123339.70+091030.0,SDSS J123339.71+091030.0,SDSS J123339.71+091030.1,UGC 07711;;; +NGC4523;G;12:33:48.00;+15:10:05.9;Com;1.24;1.15;0;15.10;;;10.98;;23.06;Sm;;;;;;;;IRAS 12313+1526,MCG +03-32-068,PGC 041746,SDSS J123347.74+151001.6,SDSS J123347.99+151005.8,UGC 07713;;The 2MASS position applies to the compact object 11 arcsec southeast.; +NGC4524;G;12:33:54.39;-12:01:39.4;Crv;1.25;0.70;80;14.00;;11.81;11.17;10.97;23.01;SABb;;;;;;;;2MASX J12335438-1201392,MCG -02-32-014,PGC 041757;;; +NGC4525;G;12:33:51.14;+30:16:38.9;Com;2.00;1.03;53;13.00;;10.89;10.24;9.99;22.91;Sc;;;;;;;;2MASX J12335119+3016390,MCG +05-30-020,PGC 041755,SDSS J123351.13+301638.9,SDSS J123351.14+301638.9,UGC 07714;;; +NGC4526;G;12:34:03.09;+07:41:58.3;Vir;6.95;2.47;138;10.60;;7.45;6.70;6.47;23.43;S0;;;;;4560;;;2MASX J12340302+0741569,IRAS 12315+0758,MCG +01-32-100,PGC 041772,SDSS J123402.98+074157.4,UGC 07718;;; +NGC4527;G;12:34:08.42;+02:39:13.2;Vir;6.30;1.72;69;12.40;;8.02;7.26;6.93;23.10;SABb;;;;;;;;2MASX J12340849+0239137,IRAS 12315+0255,MCG +01-32-101,PGC 041789,SDSS J123408.44+023913.7,UGC 07721;;; +NGC4528;G;12:34:06.07;+11:19:16.5;Vir;1.60;0.86;5;12.97;12.06;9.88;9.14;8.97;22.60;S0;;;;;;;;2MASX J12340606+1119165,MCG +02-32-140,PGC 041781,SDSS J123406.07+111916.5,TYC 877-409-1,UGC 07722;;; +NGC4529;G;12:32:51.65;+20:11:00.6;Com;1.11;0.25;98;15.30;;13.44;12.72;12.94;22.84;Sc;;;;;;;;2MASX J12325162+2011013,MCG +03-32-064,PGC 041639,SDSS J123251.64+201100.5,SDSS J123251.64+201100.6,UGC 07697;;"Identification as NGC 4529 is uncertain; N4529 may be CGCG 129-006."; +NGC4530;*;12:33:47.71;+41:21:12.5;CVn;;;;;;;;;;;;;;;;;;;;; +NGC4531;G;12:34:15.89;+13:04:31.2;Vir;3.03;1.97;155;12.42;;9.59;8.99;8.76;23.40;S0-a;;;;;;;;2MASX J12341584+1304318,IRAS 12317+1321,MCG +02-32-141,PGC 041806,SDSS J123415.88+130431.1,TYC 880-751-1,UGC 07729;;; +NGC4532;G;12:34:19.33;+06:28:03.7;Vir;2.49;0.88;161;12.30;;10.43;9.75;9.48;22.02;I;;;;;;;;2MASX J12341932+0628037,IRAS 12317+0644,MCG +01-32-103,PGC 041811,SDSS J123418.74+062823.6,UGC 07726;;The SDSS position is for a knot at the northwest end of the galaxy.; +NGC4533;G;12:34:22.02;+02:19:31.3;Vir;1.82;0.43;165;14.70;;;;;23.04;Scd;;;;;;;;MCG +01-32-102,PGC 041816,SDSS J123422.02+021931.2,SDSS J123422.02+021931.3,UGC 07725;;; +NGC4534;G;12:34:05.42;+35:31:06.0;CVn;2.78;1.64;120;13.20;;;;;23.71;SABd;;;;;;;;MCG +06-28-010,PGC 041779,SDSS J123405.41+353105.9,SDSS J123405.42+353106.0,UGC 07723;;HOLM 419B superposed on southeast side.; +NGC4535;G;12:34:20.31;+08:11:51.9;Vir;8.15;7.48;27;11.10;;8.23;7.65;7.38;23.79;Sc;;;;;;;;2MASX J12342031+0811519,IRAS 12318+0828,MCG +01-32-104,PGC 041812,UGC 07727;;; +NGC4536;G;12:34:27.05;+02:11:17.3;Vir;7.08;2.55;121;11.16;10.55;8.50;7.88;7.52;23.26;SABb;;;;;;;;2MASS J12342707+0211174,2MASX J12342712+0211163,IRAS 12318+0227,MCG +00-32-023,PGC 041823,SDSS J123427.04+021117.2,UGC 07732;;Contains the possible HII region UM 506.; +NGC4537;G;12:34:48.91;+50:48:18.6;CVn;1.34;0.76;21;15.50;;11.73;11.02;10.62;24.42;S0-a;;;;;4542;;;2MASX J12344888+5048184,MCG +09-21-021,PGC 041864,SDSS J123448.90+504818.5,UGC 07746;;; +NGC4538;G;12:34:40.90;+03:19:25.2;Vir;0.71;0.40;80;14.80;;12.51;11.83;11.68;22.14;Sc;;;;;;;;2MASX J12344093+0319253,IRAS 12320+0336,MCG +01-32-105,PGC 041850,SDSS J123440.89+031925.1,SDSS J123440.90+031925.2;;; +NGC4539;G;12:34:34.74;+18:12:09.7;Com;2.74;1.08;94;13.50;;10.37;9.61;9.45;23.46;Sa;;;;;;;;2MASX J12343476+1812092,MCG +03-32-071,PGC 041839,SDSS J123434.73+181209.6,UGC 07735;;; +NGC4540;G;12:34:50.87;+15:33:06.2;Com;2.19;1.83;43;12.50;;10.24;9.55;9.24;22.61;SABc;;;;;;;;2MASX J12345086+1533052,IRAS 12323+1549,MCG +03-32-074,PGC 041876,SDSS J123450.86+153306.1,UGC 07742;;; +NGC4541;G;12:35:10.66;-00:13:16.1;Vir;1.63;0.64;91;14.00;;11.12;10.46;10.15;23.04;SABb;;;;;;;;2MASX J12351066-0013157,IRAS 12326+0003,MCG +00-32-024,PGC 041911,SDSS J123510.66-001316.1,UGC 07749;;; +NGC4542;Dup;12:34:48.91;+50:48:18.6;CVn;;;;;;;;;;;;;;;4537;;;;;; +NGC4543;G;12:35:20.24;+06:06:54.3;Vir;1.02;0.63;178;14.60;;11.51;10.76;10.54;23.15;E;;;;;;;;2MASX J12352028+0606551,MCG +01-32-109,PGC 041923,SDSS J123520.23+060654.3;;; +NGC4544;G;12:35:36.57;+03:02:04.3;Vir;1.93;0.60;163;14.40;;11.14;10.42;10.11;23.42;SBa;;;;;;;;2MASX J12353660+0302043,MCG +01-32-110,PGC 041958,SDSS J123536.57+030204.2,SDSS J123536.57+030204.3,UGC 07756;;; +NGC4545;G;12:34:34.15;+63:31:30.2;Dra;2.43;1.37;9;13.10;;10.92;10.26;9.97;23.53;Sc;;;;;;;;2MASX J12343421+6331301,IRAS 12323+6348,MCG +11-15-064,PGC 041838,SDSS J123434.13+633130.5,SDSS J123434.14+633130.2,SDSS J123434.15+633130.2,UGC 07747;;; +NGC4546;G;12:35:29.51;-03:47:35.5;Vir;3.16;1.76;90;11.30;10.32;8.31;7.64;7.39;22.56;E-S0;;;;;;;;2MASX J12352950-0347356,MCG -01-32-027,PGC 041939,UGCA 288;;The APM position refers to the northeast side of the galaxy.; +NGC4547;G;12:34:51.84;+58:55:00.4;UMa;1.19;0.92;38;15.30;;11.53;11.20;10.56;24.24;E;;;;;;;;2MASX J12345191+5855002,MCG +10-18-069,PGC 041896,SDSS J123451.82+585500.6,SDSS J123451.83+585500.4,SDSS J123451.84+585500.3,SDSS J123451.84+585500.4;;Incorrectly identified as NGC 4549 in MCG.; +NGC4548;G;12:35:26.45;+14:29:46.8;Com;5.55;4.52;150;14.63;13.57;8.01;7.37;7.12;23.24;Sb;;;;091;;;;2MASX J12352642+1429467,IRAS 12328+1446,MCG +03-32-075,PGC 041934,SDSS J123526.45+142946.8,UGC 07753;;; +NGC4549;G;12:35:21.27;+58:56:58.8;UMa;0.60;0.27;100;16.00;;13.04;12.35;12.11;23.20;SABb;;;;;;;;2MASX J12352123+5856592,MCG +10-18-072,PGC 041954,SDSS J123521.26+585658.8,SDSS J123521.26+585659.0,SDSS J123521.27+585658.8;;; +NGC4550;G;12:35:30.58;+12:13:15.0;Vir;3.16;0.71;179;12.56;11.68;9.55;8.87;8.69;23.57;S0;;;;;;;;2MASX J12353061+1213154,MCG +02-32-147,PGC 041943,SDSS J123530.58+121314.9,UGC 07757;;; +NGC4551;G;12:35:37.95;+12:15:50.3;Vir;1.71;1.26;67;12.97;12.02;9.78;9.11;8.87;22.87;E;;;;;;;;2MASX J12353797+1215504,MCG +02-32-148,PGC 041963,SDSS J123537.95+121550.3,UGC 07759;;; +NGC4552;G;12:35:39.81;+12:33:22.8;Vir;8.13;8.00;150;10.73;9.75;7.62;6.94;6.73;24.11;E;;;;089;;;;2MASX J12353988+1233217,MCG +02-32-149,PGC 041968,SDSS J123539.80+123322.8,UGC 07760;;; +NGC4553;G;12:36:07.60;-39:26:19.2;Cen;2.59;1.34;175;13.31;13.20;9.95;9.25;8.94;23.98;S0-a;;;;;;;;2MASX J12360761-3926191,ESO 322-030,ESO-LV 322-0300,MCG -06-28-006,PGC 042018;;; +NGC4554;**;12:35:59.52;+11:15:55.3;Vir;;;;;;;;;;;;;;;;;;;;Identification as NGC 4554 is very uncertain.; +NGC4555;G;12:35:41.18;+26:31:23.2;Com;1.40;1.04;121;13.50;;10.18;9.45;9.17;23.03;E;;;;;;3545;;2MASX J12354118+2631227,MCG +05-30-026,PGC 041975,SDSS J123541.17+263123.0,SDSS J123541.19+263123.0,SDSS J123541.19+263123.1,UGC 07762;;; +NGC4556;G;12:35:45.86;+26:54:32.0;Com;1.31;0.87;81;14.40;;10.89;10.23;9.91;23.65;E;;;;;;;;2MASX J12354585+2654317,MCG +05-30-027,PGC 041980,SDSS J123545.85+265431.9,SDSS J123545.85+265432.0,SDSS J123545.86+265432.0,SDSS J123545.87+265431.9,UGC 07765;;; +NGC4557;Other;12:35:49.74;+27:03:13.6;Com;;;;;;;;;;;;;;;;;;SDSS J123549.74+270313.6;;Galactic triple star.; +NGC4558;G;12:35:52.65;+26:59:31.7;Com;0.73;0.31;95;15.10;;11.86;11.15;10.84;23.07;S0-a;;;;;;;;2MASX J12355268+2659310,MCG +05-30-028,PGC 041995,SDSS J123552.64+265931.6,SDSS J123552.65+265931.7;;; +NGC4559;G;12:35:57.65;+27:57:36.0;Com;10.57;4.82;148;10.46;10.01;8.41;7.83;7.58;23.48;Sc;;;;;;;;2MASX J12355768+2757351,C 036,IRAS 12334+2814,MCG +05-30-030,PGC 042002,SDSS J123557.64+275735.9,UGC 07766;;; +NGC4559A;G;12:36:53.44;+27:51:43.3;Com;0.40;0.21;133;15.10;;12.20;11.51;11.15;21.73;Sa;;;;;;3592;;2MASX J12365341+2751439,MCG +05-30-038,PGC 042097,SDSS J123653.44+275143.2,SDSS J123653.44+275143.3,SDSS J123653.45+275143.3,UGC 07789;;; +NGC4559B;G;12:36:53.93;+27:44:56.8;Com;0.62;0.25;3;15.40;;12.68;11.83;11.76;22.58;SBab;;;;;;3593;;2MASX J12365393+2744569,IRAS F12344+2801,MCG +05-30-039,PGC 042098,SDSS J123653.92+274456.7,SDSS J123653.92+274456.8,SDSS J123653.93+274456.8;;; +NGC4559C;HII;12:35:52.12;+27:55:55.5;Com;;;;;;;;;;;;;;;;3550;;;;This is an HII region in NGC 4559.; +NGC4560;Dup;12:34:03.09;+07:41:58.3;Vir;;;;;;;;;;;;;;;4526;;;;;; +NGC4561;G;12:36:08.20;+19:19:22.5;Com;1.32;1.12;61;12.70;;11.50;10.98;10.63;22.24;SBcd;;;;;;3569;;2MASX J12360813+1919213,IRAS 12336+1935,MCG +03-32-076,PGC 042020,UGC 07768;;; +NGC4562;G;12:35:34.80;+25:51:00.0;Com;1.93;0.64;49;14.60;;;;;23.59;SBcd;;;;;4565A;;;MCG +04-30-004,PGC 041955,SDSS J123534.57+255058.5,UGC 07758;;; +NGC4563;G;12:36:12.88;+26:56:29.2;Com;0.56;0.40;106;15.70;;12.64;11.84;11.67;23.16;E;;;;;;;;2MASX J12361287+2656290,MCG +05-30-033,PGC 042030,SDSS J123612.87+265629.2,SDSS J123612.88+265629.2;;; +NGC4564;G;12:36:26.98;+11:26:21.4;Vir;3.13;1.68;48;12.05;11.12;8.87;8.09;7.94;23.25;E;;;;;;;;2MASX J12362699+1126215,MCG +02-32-150,PGC 042051,SDSS J123626.98+112621.2,UGC 07773;;; +NGC4565;G;12:36:20.78;+25:59:15.6;Com;16.75;2.89;135;13.61;12.43;7.16;6.31;6.06;23.75;Sb;;;;;;;;2MASX J12362080+2559146,C 038,IRAS 12338+2615,MCG +04-30-006,PGC 042038,UGC 07772;Needle Galaxy;HOLM 426D is a star.; +NGC4565A;Dup;12:35:34.80;+25:51:00.0;Com;;;;;;;;;;;;;;;4562;;;;;; +NGC4565B;G;12:35:41.69;+26:13:19.9;Com;0.80;0.45;139;15.30;;12.58;11.98;11.63;23.02;Sbc;;;;;;3546;;2MASX J12354167+2613197,MCG +04-30-005,PGC 041976,SDSS J123541.68+261319.8,SDSS J123541.69+261319.9;;; +NGC4565C;G;12:35:41.42;+26:17:09.0;Com;0.96;0.14;141;16.50;;13.60;13.20;12.77;23.53;Scd;;;;;;3543;;2MASX J12354145+2617077,PGC 041974,SDSS J123541.42+261708.9,SDSS J123541.42+261709.0,UGC 07764;;; +NGC4566;G;12:36:00.11;+54:13:15.5;UMa;1.08;0.75;72;14.17;13.31;11.11;10.47;10.24;22.64;SBb;;;;;;;;2MASX J12360013+5413150,MCG +09-21-024,PGC 042007,SDSS J123600.10+541315.5,SDSS J123600.10+541315.6,SDSS J123600.11+541315.4,SDSS J123600.11+541315.5,UGC 07769;;; +NGC4567;G;12:36:32.71;+11:15:28.8;Vir;2.74;2.15;89;12.06;11.31;9.19;8.57;8.30;22.67;Sbc;;;;;;;;2MASX J12363270+1115283,MCG +02-32-151,PGC 042064,SDSS J123632.70+111528.7,SDSS J123632.71+111528.8,UGC 07777;;ALFALFA source is a blend of this and NGC 4568.; +NGC4568;G;12:36:34.26;+11:14:20.0;Vir;4.31;1.87;29;12.11;11.19;8.52;7.82;7.52;22.89;Sbc;;;;;;;;2MASX J12363429+1114190,MCG +02-32-152,PGC 042069,SDSS J123634.26+111419.9,SDSS J123634.26+111420.0,UGC 07776;;; +NGC4569;G;12:36:49.79;+13:09:46.6;Vir;9.12;3.82;22;10.26;9.54;7.50;6.79;6.58;23.16;Sab;;;;090;;;;2MASX J12364981+1309463,IRAS 12343+1326,MCG +02-32-155,PGC 042089,SDSS J123649.79+130946.5,UGC 07786;;; +NGC4570;G;12:36:53.40;+07:14:47.9;Vir;3.88;0.94;160;11.80;;8.61;7.93;7.69;23.30;S0;;;;;;;;2MASX J12365340+0714479,MCG +01-32-114,PGC 042096,UGC 07785;;; +NGC4571;G;12:36:56.38;+14:13:02.5;Com;3.56;3.31;35;13.60;;9.26;8.85;8.52;23.36;Sc;;;;;;3588;;2MASX J12365637+1413024,IRAS 12344+1429,MCG +02-32-156,PGC 042100,SDSS J123656.37+141302.4,UGC 07788;;; +NGC4572;G;12:35:45.30;+74:14:44.0;Dra;1.47;0.42;168;14.90;;;;;23.36;Sc;;;;;;;;2MASX J12354538+7414334,MCG +12-12-012,PGC 041991,UGC 07775;;; +NGC4573;G;12:37:43.79;-43:37:16.1;Cen;2.49;1.89;125;13.48;;10.61;9.98;9.65;24.52;S0-a;;;;;;;;2MASX J12374380-4337163,ESO 268-026,ESO-LV 268-0260,MCG -07-26-014,PGC 042167;;; +NGC4574;G;12:37:43.51;-35:31:03.5;Cen;1.83;1.14;112;13.69;;11.22;10.67;10.29;23.26;SABc;;;;;;;;2MASX J12374350-3531037,ESO 380-049,ESO-LV 380-0490,IRAS 12350-3514,MCG -06-28-007,PGC 042166;;; +NGC4575;G;12:37:51.12;-40:32:14.5;Cen;2.06;1.24;109;13.13;13.06;10.31;9.64;9.35;23.06;SBbc;;;;;;;;2MASX J12375111-4032146,ESO 322-036,ESO-LV 322-0360,IRAS 12351-4015,MCG -07-26-015,PGC 042181;;; +NGC4576;G;12:37:33.56;+04:22:03.7;Vir;1.22;0.66;152;14.70;;11.76;11.07;10.69;22.94;SABb;;;;;;;;2MASX J12373357+0422034,MCG +01-32-116,PGC 042152,SDSS J123733.55+042203.6,SDSS J123733.56+042203.6,SDSS J123733.56+042203.7,UGC 07792;;; +NGC4577;G;12:39:12.44;+06:00:44.3;Vir;1.42;0.78;39;14.10;;11.18;10.47;10.24;22.90;SBb;;;;;4591;;;2MASX J12391244+0600439,IRAS 12366+0617,MCG +01-32-125,PGC 042319,SDSS J123912.44+060044.3,UGC 07821;;Identification as NGC 4577 is uncertain.; +NGC4578;G;12:37:30.56;+09:33:18.3;Vir;2.50;1.75;34;12.90;;9.35;8.63;8.40;22.98;S0;;;;;;;;2MASX J12373054+0933184,MCG +02-32-159,PGC 042149,UGC 07793;;; +NGC4579;G;12:37:43.52;+11:49:05.5;Vir;5.01;3.84;90;10.48;9.66;7.37;6.71;6.49;22.49;Sb;;;;058;;;;2MASX J12374359+1149051,IRAS 12351+1205,MCG +02-32-160,PGC 042168,SDSS J123743.52+114905.4,UGC 07796;;; +NGC4580;G;12:37:48.39;+05:22:06.7;Vir;1.87;1.28;156;13.10;;9.75;9.06;8.77;22.45;SABa;;;;;;;;2MASX J12374839+0522063,IRAS 12352+0538,MCG +01-32-117,PGC 042174,SDSS J123748.38+052206.6,SDSS J123748.39+052206.6,SDSS J123748.39+052206.7,UGC 07794;;Nearest galaxy of comparable redshift to [HB89] 1226+023 ABS07.; +NGC4581;G;12:38:05.17;+01:28:39.9;Vir;1.62;1.06;172;13.40;;10.56;9.86;9.61;23.12;E;;;;;;;;2MASX J12380513+0128404,MCG +00-32-028,PGC 042199,SDSS J123805.17+012839.8,SDSS J123805.17+012839.9,UGC 07801;;; +NGC4582;*;12:38:10.20;+00:10:57.9;Vir;;;;14.28;;;;;;;;;;;;;;;;; +NGC4583;G;12:38:04.54;+33:27:31.8;CVn;1.51;1.51;95;15.67;14.47;10.99;10.29;9.98;24.00;S0;;;;;;;;2MASX J12380454+3327323,MCG +06-28-017,PGC 042198,SDSS J123804.54+332731.7,SDSS J123804.54+332731.8;;; +NGC4584;G;12:38:17.87;+13:06:35.6;Vir;1.61;1.11;8;13.77;;11.15;10.56;10.46;23.32;Sa;;;;;;;;2MASX J12381783+1306360,MCG +02-32-162,PGC 042223,SDSS J123817.87+130635.6,UGC 07803;;; +NGC4585;G;12:38:13.28;+28:56:13.3;Com;0.79;0.47;105;14.60;14.22;12.29;11.60;11.29;22.71;SBb;;;;;;;;2MASX J12381331+2856128,IRAS 12357+2912,MCG +05-30-042,PGC 042215,SDSS J123813.27+285613.2,SDSS J123813.28+285613.2,SDSS J123813.28+285613.3;;; +NGC4586;G;12:38:28.40;+04:19:08.7;Vir;3.43;1.12;116;13.50;;9.38;8.72;8.47;23.43;Sa;;;;;;;;2MASX J12382843+0419087,MCG +01-32-122,PGC 042241,SDSS J123828.40+041908.7,UGC 07804;;; +NGC4587;G;12:38:35.42;+02:39:26.4;Vir;1.32;0.75;47;14.40;;11.17;10.47;10.10;23.11;S0;;;;;;;;2MASX J12383544+0239267,MCG +01-32-123,PGC 042253,SDSS J123835.42+023926.4,UGC 07805;;; +NGC4588;G;12:38:45.43;+06:46:05.4;Vir;1.19;0.46;60;15.10;;12.80;12.40;11.78;23.31;Sc;;;;;;;;2MASX J12384531+0646042,MCG +01-32-124,PGC 042277,SDSS J123845.42+064605.3,SDSS J123845.43+064605.3,SDSS J123845.43+064605.4,UGC 07810;;; +NGC4589;G;12:37:24.99;+74:11:30.9;Dra;2.93;2.31;84;12.00;;8.70;7.97;7.76;22.90;E;;;;;;;;2MASX J12372503+7411307,MCG +12-12-013,PGC 042139,UGC 07797;;The 2MASS position is 7 arcsec north of the nucleus.; +NGC4590;GCl;12:39:28.01;-26:44:34.9;Hya;6.60;;;10.26;7.96;;;;;;;;;068;;;;MWSC 2059;;; +NGC4591;Dup;12:39:12.44;+06:00:44.3;Vir;;;;;;;;;;;;;;;4577;;;;;; +NGC4592;G;12:39:18.74;-00:31:55.2;Vir;4.10;1.17;94;12.40;;11.00;10.40;10.22;23.04;Sd;;;;;;;;2MASX J12391877-0031546,IRAS 12367-0015,MCG +00-32-032,PGC 042336,SDSS J123918.14-003153.0,SDSS J123918.73-003154.9,SDSS J123918.73-003155.0,SDSS J123918.73-003155.2,SDSS J123918.74-003155.0,UGC 07819;;Extended HIPASS source; +NGC4593;G;12:39:39.43;-05:20:39.3;Vir;2.40;2.04;38;13.95;13.15;8.96;8.29;7.99;22.68;Sb;;;;;;;;2MASX J12393949-0520391,IRAS 12370-0504,MCG -01-32-032,PGC 042375;;; +NGC4594;G;12:39:59.43;-11:37:23.0;Crv;8.45;4.91;90;9.55;8.00;5.89;5.21;4.96;22.26;Sa;;;;104;;;;2MASX J12395949-1137230,IRAS 12373-1120,MCG -02-32-020,PGC 042407,UGCA 293;Sombrero Galaxy;; +NGC4595;G;12:39:51.91;+15:17:52.1;Com;1.52;0.97;110;12.80;;10.75;10.30;10.03;22.23;SABb;;;;;;;;2MASX J12395191+1517520,IRAS 12373+1534,MCG +03-32-081,PGC 042396,UGC 07826;;; +NGC4596;G;12:39:55.95;+10:10:34.1;Vir;3.93;3.30;120;12.40;;8.36;7.72;7.46;22.99;S0-a;;;;;;;;2MASX J12395593+1010337,MCG +02-32-170,PGC 042401,SDSS J123955.94+101034.0,UGC 07828;;; +NGC4597;G;12:40:12.93;-05:47:57.4;Vir;3.55;1.42;70;12.30;;12.67;12.04;11.68;23.55;Sm;;;;;;;;2MASX J12401293-0547574,IRAS 12376-0531,MCG -01-32-034,PGC 042429;;Extended HIPASS source; +NGC4598;G;12:40:11.93;+08:23:01.5;Vir;1.50;1.15;131;14.10;;11.05;10.35;9.93;23.16;S0;;;;;;;;2MASX J12401194+0823014,MCG +02-32-171,PGC 042427,SDSS J124011.93+082301.4,SDSS J124011.93+082301.5,SDSS J124011.94+082301.5,UGC 07829;;; +NGC4599;G;12:40:27.09;+01:11:48.9;Vir;1.71;0.72;145;13.70;;10.57;9.89;9.69;23.13;S0-a;;;;;;;;2MASX J12402707+0111486,MCG +00-32-034,PGC 042453,SDSS J124027.09+011148.8,SDSS J124027.09+011148.9,UGC 07833;;; +NGC4600;G;12:40:22.96;+03:07:03.9;Vir;1.42;1.01;59;13.70;;10.72;10.04;9.81;22.76;S0;;;;;;;;2MASX J12402299+0307036,MCG +01-32-128,PGC 042447,SDSS J124022.95+030703.8,UGC 07832;;; +NGC4601;G;12:40:46.74;-40:53:35.0;Cen;1.82;0.50;18;14.58;14.20;11.12;10.35;10.11;24.82;S0-a;;;;;;;;2MASX J12404671-4053350,ESO 322-050,ESO-LV 322-0500,MCG -07-26-026,PGC 042492;;; +NGC4602;G;12:40:36.85;-05:07:58.8;Vir;1.29;0.79;88;12.34;;9.50;8.83;8.54;21.42;SABb;;;;;;;;2MASX J12403684-0507588,IRAS 12380-0451,MCG -01-32-036,PGC 042476;;One APM position refers to the east side of the galaxy.; +NGC4603;G;12:40:55.21;-40:58:35.0;Cen;2.60;1.84;18;12.42;11.30;9.36;8.68;8.37;22.99;SABc;;;;;;;;2MASX J12405519-4058350,ESO 322-052,ESO-LV 322-0520,IRAS 12382-4042,MCG -07-26-028,PGC 042510;;Confused HIPASS source; +NGC4603A;G;12:39:36.92;-40:44:24.1;Cen;1.84;0.63;90;14.24;;11.15;10.39;10.08;23.45;SBc;;;;;;;;2MASX J12393691-4044240,ESO 322-044,ESO-LV 322-0440,IRAS 12368-4027,MCG -07-26-020,PGC 042369;;; +NGC4603B;G;12:40:29.74;-41:04:11.4;Cen;1.30;0.26;38;15.21;;12.54;11.84;11.81;23.72;SBb;;;;;;;;2MASX J12402971-4104113,ESO 322-048,ESO-LV 322-0480,PGC 042460;;; +NGC4603C;G;12:40:43.11;-40:45:48.1;Cen;1.83;0.44;159;14.16;;10.79;10.04;9.83;24.19;S0;;;;;;;;2MASX J12404311-4045480,ESO 322-049,ESO-LV 322-0490,MCG -07-26-025,PGC 042486;;; +NGC4603D;G;12:42:08.10;-40:49:15.1;Cen;1.62;0.97;75;14.14;12.80;10.78;10.12;9.95;23.42;SABc;;;;;;;;2MASX J12420808-4049151,ESO 322-055,ESO-LV 322-0550,MCG -07-26-029,PGC 042640;;; +NGC4604;G;12:40:45.06;-05:18:10.4;Vir;1.06;0.44;104;14.38;;12.28;11.64;11.40;22.47;IB;;;;;;;;2MASX J12404493-0518091,IRAS 12381-0501,MCG -01-32-037,PGC 042489;;; +NGC4605;G;12:39:59.38;+61:36:33.1;UMa;5.87;2.29;122;10.94;;8.61;7.96;7.76;22.63;SBc;;;;;;;;2MASX J12395938+6136330,IRAS 12378+6152,MCG +10-18-074,PGC 042408,UGC 07831;;; +NGC4606;G;12:40:57.54;+11:54:44.0;Vir;2.47;1.36;14;12.70;;10.00;9.40;9.17;23.10;SBa;;;;;;;;2MASX J12405755+1154438,IRAS 12384+1211,MCG +02-32-174,PGC 042516,SDSS J124057.53+115444.0,UGC 07839;;; +NGC4607;G;12:41:12.40;+11:53:11.9;Vir;2.86;0.58;2;14.70;;10.75;9.95;9.58;23.51;SBbc;;;;;;;;2MASX J12411240+1153118,IRAS 12386+1209,MCG +02-32-176,PGC 042544,UGC 07843;;; +NGC4608;G;12:41:13.29;+10:09:20.4;Vir;2.88;2.49;25;12.60;;9.03;8.42;8.16;22.96;S0;;;;;;;;2MASX J12411328+1009208,MCG +02-32-177,PGC 042545,SDSS J124113.28+100920.3,UGC 07842;;; +NGC4609;OCl;12:42:16.83;-62:59:44.7;Cru;5.40;;;7.32;6.90;;;;;;;;;;;;;C 098,MWSC 2062;Coalsack Cluster;; +NGC4610;Dup;12:29:37.78;+07:49:27.1;Vir;;;;;;;;;;;;;;;4470;;;;;; +NGC4611;G;12:41:25.45;+13:43:46.3;Com;1.24;0.38;125;15.10;;12.24;11.49;11.20;23.27;Sbc;;;;;;0805;;2MASX J12412541+1343458,MCG +02-32-179,PGC 042564,SDSS J124125.45+134346.3,UGC 07849;;; +NGC4612;G;12:41:32.75;+07:18:53.6;Vir;2.57;1.77;138;11.90;;9.42;8.82;8.56;22.88;S0;;;;;;;;2MASX J12413275+0718532,MCG +01-32-134,PGC 042574,SDSS J124132.75+071853.5,UGC 07850;;; +NGC4613;G;12:41:28.95;+26:05:19.0;Com;0.52;0.49;15;15.50;;12.73;12.05;11.75;22.75;Sbc;;;;;;;;2MASX J12412891+2605184,MCG +04-30-011,PGC 042570,SDSS J124128.94+260518.9,UGC 07852 NOTES01;;; +NGC4614;G;12:41:31.47;+26:02:33.6;Com;1.00;0.86;152;14.20;;11.32;10.62;10.33;23.03;S0-a;;;;;;;;2MASX J12413143+2602333,MCG +04-30-012,PGC 042573,SDSS J124131.46+260233.5,SDSS J124131.47+260233.5,UGC 07851;;; +NGC4615;G;12:41:37.32;+26:04:22.2;Com;1.54;0.46;120;13.80;;12.22;11.15;11.01;22.63;Sc;;;;;;;;2MASX J12413730+2604223,IRAS 12391+2620,MCG +04-30-013,PGC 042584,SDSS J124137.31+260422.1,SDSS J124137.32+260422.1,UGC 07852;;The position in 1998AJ....116.1573B is 5 arcsec south of the nucleus.; +NGC4616;G;12:42:16.45;-40:38:31.4;Cen;1.31;1.06;50;14.15;12.80;10.62;9.96;9.68;23.83;E;;;;;;;;2MASX J12421644-4038313,ESO 322-056,ESO-LV 322-0560,MCG -07-26-030,PGC 042662;;; +NGC4617;G;12:41:05.87;+50:23:36.3;CVn;2.81;0.52;180;14.20;;10.88;10.14;9.83;23.98;SABb;;;;;;;;2MASX J12410588+5023364,MCG +09-21-028,PGC 042530,SDSS J124105.86+502336.2,UGC 07847;;; +NGC4618;G;12:41:32.85;+41:09:02.8;CVn;3.56;2.29;32;11.22;10.78;9.51;8.79;8.66;22.41;SBm;;;;;;3667;;2MASX J12413284+4109027,IRAS 12391+4125,MCG +07-26-037,PGC 042575,UGC 07853;;; +NGC4619;G;12:41:44.55;+35:03:46.0;CVn;1.37;1.33;0;13.50;;10.82;10.21;9.89;23.01;Sb;;;;;;;;2MASX J12414453+3503463,IRAS 12393+3520,MCG +06-28-018,PGC 042594,SDSS J124144.54+350345.9,SDSS J124144.55+350346.0,UGC 07856;;; +NGC4620;G;12:41:59.36;+12:56:34.0;Vir;1.60;1.45;52;14.00;;10.93;10.22;10.04;23.15;S0;;;;;;;;2MASX J12415932+1256346,MCG +02-32-182,PGC 042619,SDSS J124159.34+125634.2,SDSS J124159.35+125634.3,UGC 07859;;; +NGC4621;G;12:42:02.24;+11:38:49.3;Vir;4.55;3.21;165;11.00;9.56;7.65;6.97;6.75;22.71;E;;;;059;;;;2MASX J12420232+1138489,MCG +02-32-183,PGC 042628,SDSS J124202.25+113848.8,UGC 07858;;;V-mag taken from LEDA +NGC4622;G;12:42:37.62;-40:44:39.2;Cen;1.81;1.56;9;13.28;12.44;10.02;9.30;9.04;23.92;Sa;;;;;;;;2MASX J12423762-4044394,ESO 322-057,ESO-LV 322-0570,MCG -07-26-031,PGC 042701;;Star superposed northeast of nucleus.; +NGC4622A;G;12:43:49.11;-40:42:52.6;Cen;0.70;0.58;119;14.50;;10.72;10.01;9.71;22.68;E-S0;;;;;;;;2MASX J12434912-4042528,ESO-LV 322-0640,MCG -07-26-036,PGC 042845;;; +NGC4622B;G;12:43:50.61;-40:43:02.9;Cen;1.15;0.77;68;14.96;;;;;24.31;S0;;;;;;;;MCG -07-26-035,PGC 042852;;; +NGC4623;G;12:42:10.69;+07:40:37.0;Vir;2.23;0.74;175;13.24;;10.31;9.64;9.47;23.53;S0-a;;;;;;;;2MASX J12421070+0740369,MCG +01-32-135,PGC 042647,UGC 07862;;; +NGC4624;Dup;12:45:05.99;+03:03:20.8;Vir;;;;;;;;;;;;;;;4664;;;;;; +NGC4625;G;12:41:52.72;+41:16:26.3;CVn;1.41;1.06;27;12.92;12.35;10.65;9.93;9.75;22.26;SABm;;;;;;3675;;2MASX J12415270+4116253,IRAS 12395+4132,MCG +07-26-038,PGC 042607,SDSS J124152.71+411626.2,SDSS J124152.72+411626.2,SDSS J124152.72+411626.3,UGC 07861;;; +NGC4626;G;12:42:25.31;-07:02:39.4;Vir;1.63;0.49;39;14.00;;11.67;11.06;10.83;22.80;SBbc;;;;;;;;2MASX J12422507-0702456,2MASX J12422554-0702364,IRAS 12398-0646,MCG -01-32-040,PGC 042680;;; +NGC4627;G;12:41:59.68;+32:34:24.8;CVn;2.36;1.66;21;13.06;12.43;;;;23.73;E;;;;;;;;MCG +06-28-019,PGC 042620,UGC 07860;;; +NGC4628;G;12:42:25.26;-06:58:15.6;Vir;1.64;0.57;46;13.80;;10.51;9.84;9.46;23.13;Sb;;;;;;;;2MASX J12422527-0658154,IRAS 12398-0641,MCG -01-32-041,PGC 042681;;; +NGC4629;G;12:42:32.67;-01:21:02.4;Vir;1.03;0.71;90;14.00;;12.57;11.94;11.84;22.38;SABm;;;;;;;;2MASX J12423272-0121021,MCG +00-32-037,PGC 042692,SDSS J124232.42-012102.9,SDSS J124232.67-012102.3,SDSS J124232.67-012102.4,UGC 07869;;; +NGC4630;G;12:42:31.13;+03:57:36.9;Vir;1.66;1.21;10;13.40;;10.75;10.21;9.89;22.60;I;;;;;;;;2MASX J12423114+0357372,IRAS 12399+0414,MCG +01-32-136,PGC 042688,SDSS J124231.01+035727.0,SDSS J124231.12+035736.8,UGC 07871;;; +NGC4631;G;12:42:08.01;+32:32:29.4;CVn;14.45;2.20;86;9.78;9.19;7.53;6.83;6.47;22.44;SBcd;;;;;;;;2MASX J12420800+3232294,C 032,IRAS 12396+3249,MCG +06-28-020,PGC 042637,UGC 07865;Whale Galaxy;; +NGC4632;G;12:42:32.03;-00:04:57.4;Vir;2.56;0.98;59;12.50;;10.12;9.55;9.28;22.27;Sc;;;;;;;;IRAS 12399+0011,MCG +00-32-038,PGC 042689,SDSS J124231.87-000454.8,SDSS J124231.99-000457.7,UGC 07870;;Position is for 2MASX J12423203-0004571, the nucleus.; +NGC4633;G;12:42:37.38;+14:21:25.9;Com;1.77;0.75;33;14.70;;;10.27;;22.97;SABd;;;;;;3688;;MCG +03-32-085,PGC 042699,SDSS J124237.37+142125.9,UGC 07874;;; +NGC4634;G;12:42:40.96;+14:17:45.0;Com;2.47;0.60;156;13.60;;10.38;9.56;9.25;22.56;SBc;;;;;;;;2MASX J12424098+1417451,IRAS 12401+1434,MCG +03-32-086,PGC 042707,UGC 07875;;; +NGC4635;G;12:42:39.24;+19:56:43.1;Com;1.94;1.40;178;13.60;13.00;11.45;10.98;10.71;23.14;SABc;;;;;;;;2MASX J12423925+1956428,IRAS 12402+2012,MCG +03-32-087,PGC 042704,SDSS J124239.23+195643.0,SDSS J124239.24+195643.1,UGC 07876;;; +NGC4636;G;12:42:49.83;+02:41:16.0;Vir;6.35;4.70;150;12.62;11.84;7.31;6.60;6.42;22.91;E;;;;;;;;2MASX J12424986+0241160,MCG +01-32-137,PGC 042734,SDSS J124249.82+024115.9,UGC 07878;;; +NGC4637;G;12:42:54.10;+11:26:17.8;Vir;1.29;0.71;91;16.00;;13.65;13.11;12.71;24.15;S0;;;;;;;;2MASX J12425409+1126178,MCG +02-32-188,PGC 042744,SDSS J124254.09+112617.7,UGC 07881;;NGC identification is not certain.; +NGC4638;G;12:42:47.42;+11:26:33.0;Vir;2.31;1.50;123;12.20;11.23;9.13;8.46;8.21;22.60;E-S0;;;;;4667;;;2MASX J12424743+1126328,MCG +02-32-187,PGC 042728,SDSS J124247.42+112633.0,UGC 07880;;Identification as NGC 4667 is not certain.; +NGC4639;G;12:42:52.39;+13:15:26.6;Vir;2.87;1.88;138;13.62;12.72;9.65;9.03;8.81;22.79;Sbc;;;;;;;;2MASX J12425235+1315271,IRAS 12403+1331,MCG +02-32-189,PGC 042741,SDSS J124252.36+131526.5,SDSS J124252.37+131526.6,UGC 07884;;; +NGC4640;G;12:42:57.77;+12:17:13.1;Vir;1.61;0.89;53;15.20;;11.84;11.11;10.82;23.89;S0-a;;;;;;;;2MASX J12425775+1217121,MCG +02-32-190,PGC 042753,SDSS J124257.76+121713.0,SDSS J124257.77+121713.0,SDSS J124257.77+121713.1,UGC 07888;;; +NGC4641;G;12:43:07.66;+12:03:04.3;Vir;1.28;1.05;172;14.90;;11.74;11.21;11.12;23.00;S0;;;;;;;;2MASX J12430765+1203039,MCG +02-32-191,PGC 042769,SDSS J124307.66+120304.2,SDSS J124307.66+120304.3,UGC 07889;;; +NGC4642;G;12:43:17.78;-00:38:39.3;Vir;1.55;0.53;27;13.80;;11.32;10.71;10.36;22.68;Sbc;;;;;;;;2MASX J12431778-0038392,IRAS 12407-0022,MCG +00-33-004,PGC 042791,TYC 4949-288-1,UGC 07893;;The APM position refers to the northeastern end of the galaxy.; +NGC4643;G;12:43:20.14;+01:58:41.8;Vir;2.24;1.75;132;11.90;;8.32;7.67;7.41;21.68;S0-a;;;;;;;;2MASX J12432013+0158422,IRAS 12407+0215,MCG +00-33-005,PGC 042797,SDSS J124319.16+015838.2,SDSS J124320.13+015841.7,UGC 07895;;; +NGC4644;G;12:42:42.66;+55:08:43.8;UMa;1.51;0.63;51;14.80;;11.65;10.98;10.61;23.62;Sb;;;;;;;;2MASX J12424266+5508435,MCG +09-21-030,PGC 042708,SDSS J124242.65+550843.8,SDSS J124242.66+550843.8,UGC 07887;;; +NGC4645;G;12:44:09.99;-41:44:59.8;Cen;1.97;0.89;46;12.82;11.68;9.37;8.72;8.44;23.18;E;;;;;;;;2MASX J12440998-4144596,ESO 322-066,ESO-LV 322-0660,MCG -07-26-037,PGC 042879;;; +NGC4645A;G;12:43:05.57;-41:21:32.1;Cen;3.03;0.97;30;13.45;;9.42;8.67;8.44;24.50;S0;;;;;;;;2MASX J12430555-4121319,ESO 322-059,ESO-LV 322-0590,IRAS 12403-4105,MCG -07-26-032,PGC 042764;;; +NGC4645B;G;12:43:31.18;-41:21:45.1;Cen;2.16;0.89;158;13.42;12.99;;;;23.84;S0;;;;;;;;ESO 322-060,ESO-LV 322-0600,MCG -07-26-034,PGC 042813;;; +NGC4646;G;12:42:52.12;+54:51:21.6;UMa;0.63;0.28;17;13.80;;10.82;10.09;9.81;22.14;E;;;;;;;;2MASX J12425218+5451215,MCG +09-21-031,PGC 042740,SDSS J124252.11+545121.6,SDSS J124252.12+545121.5,SDSS J124252.12+545121.6,UGC 07892;;; +NGC4647;G;12:43:32.31;+11:34:54.7;Vir;2.75;2.36;139;12.50;12.50;8.88;8.28;8.05;22.41;SABc;;;;;;;;2MASX J12433254+1134568,IRAS 12410+1151,MCG +02-33-001,PGC 042816,UGC 07896;;; +NGC4648;G;12:41:44.39;+74:25:15.4;Dra;1.41;1.16;73;12.60;;9.77;9.11;8.85;22.55;E;;;;;;;;2MASX J12414441+7425151,MCG +13-09-029,PGC 042595,UGC 07868;;; +NGC4649;G;12:43:39.98;+11:33:09.7;Vir;6.78;5.45;105;10.30;8.79;6.67;6.00;5.74;22.81;E;;;;060;;;;2MASS J12434000+1133099,2MASX J12434000+1133093,MCG +02-33-002,PGC 042831,SDSS J124339.97+113309.7,UGC 07898;;;V-mag taken from LEDA +NGC4650;G;12:44:19.59;-40:43:54.5;Cen;3.05;2.04;111;12.74;11.91;9.56;8.84;8.56;23.73;S0-a;;;;;;;;2MASX J12441959-4043546,ESO 322-067,ESO-LV 322-0670,IRAS 12415-4027,MCG -07-26-038,PGC 042891;;; +NGC4650A;G;12:44:49.06;-40:42:51.5;Cen;1.46;0.33;172;14.12;13.58;11.92;11.20;11.03;23.18;S0-a;;;;;;;;2MASX J12444906-4042512,ESO 322-069,ESO-LV 322-0690,PGC 042951;;; +NGC4651;G;12:43:42.63;+16:23:36.2;Com;3.87;2.58;77;11.30;10.92;8.93;8.27;8.03;22.71;Sc;;;;;;;;2MASX J12434262+1623362,IRAS 12412+1639,MCG +03-33-001,PGC 042833,SDSS J124342.64+162335.9,UGC 07901;Umbrella Galaxy;; +NGC4652;G;12:43:19.75;+58:57:53.6;UMa;1.10;0.38;40;14.20;;12.00;11.37;11.10;23.54;Sb;;;;;;;;2MASX J12431978+5857536,MCG +10-18-078,PGC 042802,SDSS J124319.74+585753.5,SDSS J124319.74+585753.6,SDSS J124319.74+585753.8,SDSS J124319.75+585753.6;;; +NGC4653;G;12:43:50.91;-00:33:40.4;Vir;2.31;2.08;17;12.60;;10.60;10.12;9.97;23.24;SABc;;;;;;;;2MASX J12435092-0033406,IRAS 12412-0017,MCG +00-33-006,PGC 042847,SDSS J124350.90-003340.4,SDSS J124350.91-003340.4,SDSS J124350.98-003345.4,UGC 07900;;The APM position is northeast of the nucleus.; +NGC4654;G;12:43:56.58;+13:07:36.0;Vir;4.72;2.49;123;11.80;;8.65;7.98;7.74;22.65;Sc;;;;;;;;2MASX J12435663+1307348,IRAS 12414+1324,MCG +02-33-004,PGC 042857,SDSS J124356.57+130736.0,SDSS J124356.58+130736.0,UGC 07902;;; +NGC4655;G;12:43:36.49;+41:01:06.7;CVn;0.86;0.79;10;15.30;;11.39;10.68;10.38;23.37;E;;;;;;;;2MASX J12433648+4101069,MCG +07-26-042,PGC 042823,SDSS J124336.49+410106.7;;; +NGC4656;GPair;12:43:57.73;+32:10:05.3;CVn;8.00;;;;;;;;;;;;;;;;;MCG +05-30-066,UGC 07907;;;Diameter of the group inferred by the author. +NGC4656 NED01;G;12:43:57.67;+32:10:12.9;CVn;6.46;0.66;36;10.96;10.52;11.61;11.05;10.91;20.62;SBm;;;;;;;;2MASX J12435764+3210130,IRAS 12415+3226,MCG +05-30-066 NED01,PGC 042863,UGC 07907 NED01;;; +NGC4656 NED02;Dup;12:44:07.10;+32:12:31.5;CVn;;;;;;;;;;;;;;;4657;;;;;; +NGC4657;G;12:44:07.10;+32:12:31.5;CVn;1.86;0.63;71;13.57;;;;;23.65;Sm;;;;;4656 NED02;;;2MASXJ12440599+3212340,MCG +05-30-066 NED02,SDSSJ124405.97+321232.3,UGC 07907 NED02;;;B-Mag taken from LEDA +NGC4658;G;12:44:37.79;-10:04:59.2;Vir;1.38;0.86;3;13.10;;13.20;10.07;9.82;22.01;Sbc;;;;;;;;2MASX J12443778-1004592,IRAS 12420-0948,MCG -02-33-001,PGC 042929;;; +NGC4659;G;12:44:29.39;+13:29:54.8;Com;1.75;1.24;176;13.30;;10.12;9.48;9.26;22.82;S0-a;;;;;;;;2MASX J12442937+1329552,MCG +02-33-007,PGC 042913,SDSS J124429.39+132954.8,UGC 07915;;; +NGC4660;G;12:44:31.98;+11:11:25.9;Vir;2.09;1.57;100;12.10;;9.11;8.44;8.21;22.50;E;;;;;;;;2MASX J12443197+1111259,MCG +02-33-006,PGC 042917,UGC 07914;;; +NGC4661;G;12:45:14.95;-40:49:27.3;Cen;1.17;0.41;116;14.58;;11.44;10.74;10.47;23.67;E-S0;;;;;4650B;;;2MASX J12451495-4049272,ESO 322-072,ESO-LV 322-0720,MCG -07-26-040,PGC 042983;;; +NGC4662;G;12:44:26.20;+37:07:16.4;CVn;1.83;1.48;60;14.10;;10.83;10.10;9.77;23.42;Sbc;;;;;;;;2MASX J12442621+3707167,MCG +06-28-025,PGC 042904,SDSS J124426.19+370716.3,SDSS J124426.20+370716.4,UGC 07917;;; +NGC4663;G;12:44:47.05;-10:11:52.2;Vir;1.07;0.85;170;14.00;;10.64;9.95;9.70;23.02;S0;;;;;;0811;;2MASX J12444706-1011522,MCG -02-33-002,PGC 042946;;; +NGC4664;G;12:45:05.99;+03:03:20.8;Vir;4.52;4.52;5;11.50;10.50;8.34;7.68;7.43;23.13;S0-a;;;;;4624,4665;;;2MASX J12450595+0303204,MCG +01-33-005,PGC 042970,SDSS J124505.99+030320.7,UGC 07924;;; +NGC4665;Dup;12:45:05.99;+03:03:20.8;Vir;;;;;;;;;;;;;;;4664;;;;;; +NGC4666;G;12:45:08.59;-00:27:42.8;Vir;4.97;1.97;40;11.70;;8.20;7.40;7.06;22.92;SABc;;;;;;;;2MASX J12450867-0027428,IRAS 12425-0011,MCG +00-33-008,PGC 042975,SDSS J124508.16-002742.8,SDSS J124508.59-002742.7,UGC 07926;;; +NGC4667;Dup;12:42:47.42;+11:26:33.0;Vir;;;;;;;;;;;;;;;4638;;;;;; +NGC4668;G;12:45:31.99;-00:32:08.6;Vir;1.59;0.92;3;13.50;;11.71;11.07;10.58;22.82;Scd;;;;;;;;2MASX J12453194-0032023,IRAS 12429-0015,MCG +00-33-009,PGC 042999,SDSS J124531.99-003208.6,UGC 07931;;The 2MASX position is 6.2 arcsec north of the nucleus.; +NGC4669;G;12:44:46.74;+54:52:32.4;UMa;1.53;0.38;2;15.10;;10.99;10.30;10.11;22.86;Sb;;;;;;;;2MASX J12444673+5452328,MCG +09-21-038,PGC 042942,SDSS J124446.53+545233.2,SDSS J124446.54+545233.2,SDSS J124446.54+545233.3,UGC 07925;;Multiple SDSS entries describe this object.; +NGC4670;G;12:45:17.07;+27:07:31.5;Com;0.97;0.83;90;12.60;;11.31;10.74;10.41;21.76;SBa;;;;;;;;2MASX J12451714+2707317,IRAS 12428+2724,MCG +05-30-072,PGC 042987,SDSS J124517.25+270732.1,UGC 07930;;Multiple SDSS entries describe this galaxy.; +NGC4671;G;12:45:47.63;-07:04:10.9;Vir;1.69;1.26;138;14.50;;10.17;9.49;9.28;23.61;E;;;;;;;;2MASX J12454763-0704111,MCG -01-33-004,PGC 043029;;; +NGC4672;G;12:46:15.75;-41:42:21.5;Cen;2.06;0.50;59;14.12;14.25;10.81;10.03;9.75;23.74;Sa;;;;;;;;2MASX J12461573-4142214,ESO 322-073,ESO-LV 322-0730,IRAS 12435-4125,MCG -07-26-041,PGC 043073;;; +NGC4673;G;12:45:34.67;+27:03:39.0;Com;1.07;0.84;171;13.70;;10.82;10.15;9.87;23.78;E;;;;;;;;2MASX J12453470+2703386,MCG +05-30-073,PGC 043008,SDSS J124534.67+270338.9,UGC 07933;;; +NGC4674;G;12:46:03.47;-08:39:19.6;Vir;1.79;0.70;105;15.00;;11.22;10.45;10.28;23.64;Sa;;;;;;;;2MASX J12460347-0839196,MCG -01-33-005,PGC 043050,SDSS J124603.46-083920.5;;; +NGC4675;G;12:45:31.89;+54:44:15.4;UMa;1.34;0.43;92;15.40;;11.71;10.94;10.64;23.44;SBb;;;;;;;;2MASX J12453191+5444151,IRAS 12432+5500,MCG +09-21-039,PGC 042998,SDSS J124531.88+544415.3,SDSS J124531.88+544415.4,SDSS J124531.89+544415.4,UGC 07935;;; +NGC4676;GPair;12:46:10.70;+30:43:38.0;Com;3.00;;;;;;;;;;;;;;;;;IRAS 12437+3059;Mice Galaxy;;Diameter of the group inferred by the author. +NGC4676A;G;12:46:10.11;+30:43:54.9;Com;2.16;1.26;179;;;11.54;10.74;10.39;24.90;S0-a;;;;;;0819;;2MASX J12461005+3043546,MCG +05-30-076,PGC 043062,SDSS J124610.10+304354.8,SDSS J124610.11+304354.9,UGC 07938;;; +NGC4676B;G;12:46:11.24;+30:43:21.9;Com;0.98;0.66;169;14.10;;;;;23.06;S0-a;;;;;4676S;0820;;MCG +05-30-077,PGC 043065,SDSS J124611.24+304321.8,SDSS J124611.24+304321.9,UGC 07939;;; +NGC4677;G;12:46:57.13;-41:34:57.1;Cen;1.49;0.84;166;13.77;12.67;10.52;9.81;9.60;23.44;S0-a;;;;;;;;2MASX J12465714-4134571,ESO 322-078,ESO-LV 322-0780,MCG -07-26-044,PGC 043127;;; +NGC4678;G;12:49:41.85;-04:34:47.0;Vir;0.97;0.51;85;14.50;;13.22;12.69;12.42;22.38;S?;;;;;;0824;;IRAS 12471-0418,MCG -01-33-018,PGC 043385;;Diameter includes companions or long extensions.; +NGC4679;G;12:47:30.25;-39:34:15.1;Cen;2.43;0.88;5;13.32;11.90;10.42;9.72;9.42;24.39;SBc;;;;;;;;2MASX J12473024-3934150,ESO 322-082,ESO-LV 322-0820,IRAS 12447-3917,MCG -06-28-018,PGC 043170;;; +NGC4680;G;12:46:54.71;-11:38:13.4;Crv;1.36;0.76;40;13.00;;10.70;10.06;9.77;23.11;S0-a;;;;;;;;2MASX J12465474-1138133,IRAS 12443-1121,MCG -02-33-007,PGC 043118,SDSS J124654.73-113813.4;;; +NGC4681;G;12:47:28.81;-43:20:05.3;Cen;1.40;1.17;171;13.46;;10.59;9.88;9.65;22.80;Sab;;;;;;;;2MASX J12472882-4320051,ESO 268-040,ESO-LV 268-0400,IRAS 12446-4303,MCG -07-26-046,PGC 043166;;; +NGC4682;G;12:47:15.49;-10:03:48.4;Vir;2.58;1.19;86;12.90;;10.59;9.81;9.60;23.26;SABc;;;;;;;;2MASX J12471548-1003484,IRAS 12446-0947,MCG -02-33-008,PGC 043147;;; +NGC4683;G;12:47:42.37;-41:31:41.8;Cen;1.44;1.33;130;14.02;13.80;10.43;9.70;9.44;23.47;E-S0;;;;;;;;2MASX J12474238-4131418,ESO 322-083,ESO-LV 322-0830,MCG -07-26-047,PGC 043182;;; +NGC4684;G;12:47:17.52;-02:43:38.7;Vir;2.97;0.96;18;12.40;;9.26;8.60;8.39;23.16;S0-a;;;;;;;;2MASX J12471748-0243391,IRAS 12447-0227,MCG +00-33-011,PGC 043149,SDSS J124717.51-024338.6,SDSS J124717.52-024338.6,UGC 07951;;; +NGC4685;G;12:47:11.44;+19:27:51.7;Com;1.59;0.87;155;13.80;;10.84;10.16;9.93;23.35;E-S0;;;;;;;;2MASX J12471143+1927520,MCG +03-33-004,PGC 043143,SDSS J124711.44+192751.6,UGC 07954;;; +NGC4686;G;12:46:39.88;+54:32:03.4;UMa;1.92;0.67;2;13.70;;10.04;9.32;9.06;23.30;Sa;;;;;;;;2MASX J12463982+5432030,MCG +09-21-044,PGC 043101,SDSS J124639.88+543203.3,UGC 07946;;; +NGC4687;G;12:47:23.77;+35:21:07.4;CVn;0.96;0.90;95;14.30;;11.25;10.64;10.35;22.81;E;;;;;;;;2MASX J12472374+3521076,MCG +06-28-031,PGC 043157,SDSS J124723.77+352107.4,UGC 07958;;; +NGC4688;G;12:47:46.52;+04:20:09.8;Vir;3.72;3.42;35;14.50;;12.33;11.32;11.16;24.44;Sc;;;;;;;;2MASX J12474646+0420098,IRAS 12452+0436,MCG +01-33-013,PGC 043189,SDSS J124746.52+042009.7,UGC 07961;;; +NGC4689;G;12:47:45.56;+13:45:46.1;Com;3.82;2.86;163;12.80;;8.76;8.06;7.96;22.96;Sc;;;;;;;;2MASX J12474552+1345456,IRAS 12452+1402,MCG +02-33-022,PGC 043186,SDSS J124745.56+134546.1,UGC 07965;;; +NGC4690;G;12:47:55.52;-01:39:21.8;Vir;1.60;1.14;150;14.00;;10.90;10.33;10.08;23.32;E-S0;;;;;;;;2MASX J12475551-0139215,MCG +00-33-012,PGC 043202,SDSS J124755.52-013921.8,UGC 07964;;; +NGC4691;G;12:48:13.63;-03:19:57.8;Vir;3.03;2.46;28;11.66;11.08;9.39;8.75;8.54;22.59;S0-a;;;;;;;;2MASX J12481367-0319585,IRAS 12456-0303,MCG +00-33-013,PGC 043238,SDSS J124813.63-031957.7,SDSS J124813.65-031958.2,UGCA 299;;; +NGC4692;G;12:47:55.32;+27:13:20.5;Com;1.00;0.94;85;14.00;;10.70;10.05;9.76;22.59;E;;;;;;;;2MASX J12475528+2713209,MCG +05-30-086,PGC 043200,SDSS J124755.31+271320.4,UGC 07967;;; +NGC4693;G;12:47:09.17;+71:10:34.1;Dra;1.00;0.56;34;14.00;;11.54;10.59;10.38;22.49;Sc;;;;;;;;2MASX J12470913+7110341,MCG +12-12-018,PGC 043141,UGC 07962;;HOLM 460B is a star.; +NGC4694;G;12:48:15.08;+10:59:01.0;Vir;2.00;1.11;135;13.93;13.36;9.87;9.23;8.96;22.42;S0;;;;;;;;2MASX J12481509+1059010,IRAS 12457+1115,MCG +02-33-023,PGC 043241,UGC 07969;;; +NGC4695;G;12:47:32.11;+54:22:29.4;UMa;1.12;0.65;79;14.50;;12.93;12.23;12.20;22.54;SABb;;;;;;3791;;2MASX J12473208+5422297,MCG +09-21-048,PGC 043173,SDSS J124732.10+542229.4,UGC 07966;;; +NGC4696;G;12:48:49.25;-41:18:39.0;Cen;3.85;2.56;88;11.21;;8.10;7.38;7.14;23.42;E;;;;;;;;2MASX J12484927-4118399,ESO 322-091,ESO-LV 322-0910,MCG -07-26-051,PGC 043296;;Incorrectly identified as NGC 4296 in PKSCAT90 (version 1.01).; +NGC4696A;G;12:46:55.62;-41:29:48.3;Cen;1.74;0.57;174;14.57;;10.86;10.12;9.81;23.70;SBb;;;;;;;;2MASX J12465561-4129482,ESO 322-077,ESO-LV 322-0770,IRAS 12441-4113,MCG -07-26-043,PGC 043120;;; +NGC4696B;G;12:47:21.78;-41:14:15.0;Cen;1.33;0.81;40;13.84;;10.01;9.27;9.01;23.12;E-S0;;;;;;;;2MASX J12472179-4114150,ESO 322-081,ESO-LV 322-0810,IRAS 12446-4058,MCG -07-26-045,PGC 043155;;Marginal HIPASS detection.; +NGC4696C;G;12:48:02.66;-40:49:06.8;Cen;2.30;0.37;140;14.68;;11.26;10.43;10.07;24.01;Sb;;;;;;;;2MASX J12480264-4049068,ESO 322-087,ESO-LV 322-0870,MCG -07-26-048,PGC 043218;;; +NGC4696D;G;12:48:21.66;-41:42:50.5;Cen;1.38;0.54;129;14.02;;10.41;9.70;9.52;23.36;S0;;;;;;;;2MASX J12482156-4142516,ESO 322-088,ESO-LV 322-0880,MCG -07-26-049,PGC 043249;;; +NGC4696E;G;12:48:26.12;-40:56:11.4;Cen;1.41;0.71;178;14.56;;11.47;10.78;10.79;23.98;S0;;;;;;;;2MASX J12482614-4056086,ESO 322-090,ESO-LV 322-0900,MCG -07-26-050,PGC 043262;;; +NGC4697;G;12:48:35.88;-05:48:02.7;Vir;7.14;4.16;83;10.97;;7.24;6.59;6.37;23.36;E;;;;;;;;2MASX J12483590-0548030,C 052,MCG -01-33-010,PGC 043276,UGCA 300;;; +NGC4698;G;12:48:22.91;+08:29:14.6;Vir;3.81;1.55;170;13.24;12.27;8.40;7.78;7.56;22.64;Sab;;;;;;;;2MASX J12482293+0829140,IRAS 12458+0845,MCG +02-33-024,PGC 043254,UGC 07970;;; +NGC4699;G;12:49:02.23;-08:39:53.5;Vir;3.99;3.02;35;10.80;;7.40;6.75;6.50;21.92;SABb;;;;;;;;2MASX J12490218-0839514,IRAS 12464-0823,MCG -01-33-013,PGC 043321,SDSS J124902.19-083951.8,UGCA 301;;; +NGC4700;G;12:49:08.15;-11:24:35.5;Vir;2.72;0.47;51;12.70;14.32;10.59;9.96;9.78;21.58;SBc;;;;;;;;2MASX J12490814-1124354,IRAS 12465-1108,MCG -02-33-013,PGC 043330;;Extended HIPASS source; +NGC4701;G;12:49:11.59;+03:23:19.4;Vir;1.74;1.28;39;13.10;;10.71;10.07;9.77;22.47;Sc;;;;;;;;2MASX J12491156+0323194,IRAS 12466+0339,MCG +01-33-015,PGC 043331,SDSS J124911.52+032322.6,SDSS J124911.59+032319.3,UGC 07975;;; +NGC4702;G;12:49:01.49;+27:10:44.9;Com;0.58;0.33;176;15.00;;14.06;13.43;13.27;23.21;Sd;;;;;;;;MCG +05-30-091,PGC 043317,SDSS J124901.49+271044.8,SDSS J124901.49+271044.9;;; +NGC4703;G;12:49:18.97;-09:06:30.3;Vir;1.70;0.41;155;14.50;;9.98;9.31;9.03;23.29;Sb;;;;;;;;2MASX J12491896-0906301,MCG -01-33-015,PGC 043342;;; +NGC4704;G;12:48:46.43;+41:55:16.5;CVn;1.01;0.95;40;14.80;;11.82;11.12;10.69;23.23;SBbc;;;;;;;;2MASX J12484638+4155166,IRAS 12464+4211,MCG +07-26-054,PGC 043288,SDSS J124846.42+415516.5,UGC 07972;;; +NGC4705;G;12:49:24.97;-05:11:45.1;Vir;3.65;1.09;106;13.10;;10.37;9.58;9.32;23.16;SABb;;;;;;;;2MASX J12492497-0511452,IRAS 12468-0455,MCG -01-33-016,PGC 043350;;The APM position refers to the southeastern part of the galaxy.; +NGC4706;G;12:49:54.15;-41:16:46.4;Cen;1.47;0.75;26;14.00;13.50;10.37;9.59;9.36;23.47;S0;;;;;;;;2MASX J12495418-4116456,ESO 323-001,ESO-LV 323-0010,MCG -07-26-055,PGC 043411;;; +NGC4707;G;12:48:22.87;+51:09:52.9;CVn;2.19;2.00;25;15.20;;;;;23.82;Sm;;;;;;;;MCG +09-21-050,PGC 043255,UGC 07971;;The 2MASS position refers to a superposed star.; +NGC4708;G;12:49:41.48;-11:05:34.9;Vir;1.25;0.91;30;14.00;;11.16;10.52;10.14;22.92;SABa;;;;;;;;2MASX J12494148-1105350,IRAS 12470-1049,MCG -02-33-016,PGC 043382;;HOLM 463B superposed on arm northwest side.; +NGC4709;G;12:50:03.88;-41:22:55.1;Cen;3.09;1.51;107;12.48;11.32;9.02;8.31;8.01;23.36;E;;;;;;;;2MASX J12500394-4122554,ESO 323-003,ESO-LV 323-0030,MCG -07-26-056,PGC 043423;;; +NGC4710;G;12:49:38.83;+15:09:55.6;Com;4.39;1.13;26;11.60;;8.53;7.79;7.57;23.43;S0-a;;;;;;;;2MASX J12493895+1509557,IRAS 12471+1526,MCG +03-33-009,PGC 043375,UGC 07980;;; +NGC4711;G;12:48:45.87;+35:19:57.7;CVn;1.21;0.68;41;14.40;;11.34;10.62;10.42;22.96;SBb;;;;;;3804;;2MASX J12484584+3519581,IRAS 12463+3536,MCG +06-28-033,PGC 043286,SDSS J124845.86+351957.7,SDSS J124845.87+351957.7,UGC 07973;;; +NGC4712;G;12:49:34.22;+25:28:11.8;Com;1.56;0.75;162;13.50;;10.92;10.42;10.09;22.66;Sbc;;;;;;;;2MASX J12493421+2528117,IRAS 12471+2544,MCG +04-30-021,PGC 043368,UGC 07977;;; +NGC4713;G;12:49:57.87;+05:18:41.1;Vir;1.66;1.52;50;12.30;;10.39;9.83;9.75;21.97;Scd;;;;;;;;2MASX J12495789+0518411,IRAS 12474+0534,MCG +01-33-018,PGC 043413,SDSS J124957.72+051840.7,SDSS J124957.86+051841.0,SDSS J124957.87+051841.0,SDSS J124957.87+051841.1,UGC 07985;;; +NGC4714;G;12:50:19.25;-13:19:27.6;Crv;2.00;1.11;152;14.00;;10.02;9.35;9.09;24.33;E-S0;;;;;;;;2MASX J12501925-1319275,MCG -02-33-018,PGC 043442;;; +NGC4715;G;12:49:57.88;+27:49:20.7;Com;1.34;0.99;18;15.40;;10.86;10.25;10.07;24.21;S0-a;;;;;;;;2MASX J12495786+2749203,MCG +05-30-096,PGC 043399,SDSS J124957.87+274920.6,SDSS J124957.87+274920.7,SDSS J124957.88+274920.7,UGC 07986;;; +NGC4716;G;12:50:33.11;-09:27:04.0;Vir;1.13;0.85;94;15.00;;10.45;9.87;9.55;22.87;S0;;;;;;;;2MASX J12503310-0927038,MCG -01-33-021,PGC 043464;;; +NGC4717;G;12:50:34.39;-09:27:46.9;Vir;1.61;0.68;2;15.00;;10.79;10.11;9.86;23.43;Sa;;;;;;;;2MASX J12503439-0927468,MCG -01-33-023,PGC 043467;;; +NGC4718;G;12:50:32.64;-05:16:54.9;Vir;2.02;0.70;97;13.90;;11.36;10.75;10.54;23.72;Sb;;;;;;;;2MASX J12503262-0516548,MCG -01-33-020,PGC 043463;;Confused HIPASS source; +NGC4719;G;12:50:08.72;+33:09:32.9;CVn;1.42;1.25;159;14.20;;11.32;10.59;10.35;23.48;SBb;;;;;;;;2MASX J12500870+3309330,IRAS 12477+3325,MCG +06-28-035,PGC 043428,SDSS J125008.71+330932.9,SDSS J125008.72+330932.9,UGC 07987;;; +NGC4720;G;12:50:42.78;-04:09:21.0;Vir;1.23;0.73;107;14.20;;11.66;11.03;10.77;23.46;E-S0;;;;;;;;2MASX J12504278-0409208,IRAS 12481-0352,MCG -01-33-024,PGC 043478;;Confused HIPASS source; +NGC4721;G;12:50:19.92;+27:19:26.4;Com;0.84;0.24;113;15.20;;11.86;11.20;10.73;23.46;S0;;;;;;;;2MASX J12501989+2719266,MCG +05-30-097,PGC 043437,SDSS J125019.91+271926.3,SDSS J125019.92+271926.4;;; +NGC4722;G;12:51:32.39;-13:19:48.1;Crv;1.98;0.69;32;13.00;;10.41;9.70;9.42;23.58;S0-a;;;;;;3833;;2MASX J12513239-1319482,IRAS 12488-1303,MCG -02-33-031,PGC 043560;;; +NGC4723;G;12:51:02.91;-13:14:11.8;Crv;1.02;0.55;43;14.60;;;;;23.39;SABm;;;;;;;;MCG -02-33-026,PGC 043510;;Holmberg 471b is a star (perhaps with a plate defect involved).; +NGC4724;G;12:50:53.84;-14:19:54.7;Crv;0.95;0.54;95;15.00;;;;;22.30;E-S0;;;;;;;;MCG -02-33-022,PGC 043494;;; +NGC4725;G;12:50:26.58;+25:30:02.9;Com;9.71;7.10;36;13.45;12.44;7.16;6.31;6.17;23.39;SABa;;;;;;;;2MASX J12502661+2530027,MCG +04-30-022,PGC 043451,SDSS J125026.57+253002.7,UGC 07989;;; +NGC4726;G;12:50:46.06;-14:16:06.8;Crv;1.10;0.24;76;15.68;;12.44;11.81;11.43;24.41;;;;;;;;;2MASX J12504606-1416068,PGC 926789;;; +NGC4727;G;12:50:57.24;-14:19:58.6;Crv;2.70;1.54;127;18.21;;9.87;9.19;8.88;23.10;Sbc;;;;;4740;;;2MASX J12505723-1419588,IRAS 12483-1403,MCG -02-33-023,PGC 043499;;; +NGC4728;G;12:50:28.08;+27:26:05.7;Com;0.78;0.60;107;15.60;;11.81;11.08;10.73;23.57;E;;;;;4728A;;;2MASX J12502807+2726056,MCG +05-30-098,PGC 043455,SDSS J125028.07+272605.6;;; +NGC4729;G;12:51:46.28;-41:07:56.2;Cen;1.97;0.90;145;13.49;;9.97;9.26;8.95;23.85;E;;;;;;;;2MASX J12514627-4107561,2MASX J12514810-4107417,ESO 323-016,ESO-LV 323-0160,MCG -07-27-002,PGC 043591;;; +NGC4730;G;12:52:00.47;-41:08:50.3;Cen;1.28;1.05;28;13.90;;10.23;9.49;9.19;23.29;E-S0;;;;;;;;2MASX J12520048-4108488,ESO 323-017,ESO-LV 323-0170,MCG -07-27-003,PGC 043611,TYC 7776-638-1;;; +NGC4731;G;12:51:01.09;-06:23:35.0;Vir;6.32;2.14;97;12.00;;10.50;9.94;9.79;23.72;SBc;;;;;;;;2MASX J12510109-0623349,IRAS 12484-0607,MCG -01-33-026,PGC 043507,UGCA 302;;Confused and extended HIPASS source; +NGC4732;G;12:50:07.10;+52:51:00.4;UMa;1.21;0.56;8;15.20;;11.53;10.85;10.53;24.06;E;;;;;;;;2MASX J12500704+5251002,MCG +09-21-053,PGC 043430,SDSS J125007.09+525100.3,SDSS J125007.09+525100.4,SDSS J125007.10+525100.4,SDSS J125007.11+525100.6,UGC 07988;;"The position in 1999A&AS..140...89P is 7.5"" east of the nucleus."; +NGC4733;G;12:51:06.78;+10:54:43.5;Vir;1.97;1.82;70;13.20;;9.92;9.23;9.02;22.95;E;;;;;;;;2MASX J12510678+1054435,2MASX J12510753+1054571,MCG +02-33-028,PGC 043516,SDSS J125106.77+105443.4,UGC 07997;;HOLM 473B is a star.; +NGC4734;G;12:51:12.89;+04:51:32.6;Vir;0.97;0.80;60;14.30;;11.43;10.71;10.41;22.78;Sc;;;;;;;;2MASX J12511286+0451320,IRAS 12486+0507,MCG +01-33-019,PGC 043525,SDSS J125112.88+045132.5,SDSS J125112.89+045132.4,SDSS J125112.89+045132.5,SDSS J125112.89+045132.6,UGC 07998;;; +NGC4735;G;12:51:01.73;+28:55:40.7;Com;0.66;0.51;117;15.10;14.42;12.48;11.75;11.48;22.80;SBc;;;;;;;;2MASX J12510174+2855401,IRAS 12485+2911,MCG +05-30-104,PGC 043509,SDSS J125101.72+285540.6,SDSS J125101.73+285540.7;;; +NGC4736;G;12:50:53.06;+41:07:13.6;CVn;7.74;6.68;105;8.96;8.24;6.03;5.35;5.11;21.79;SABa;;;;094;;;;2MASX J12505314+4107125,IRAS 12485+4123,MCG +07-26-058,PGC 043495,UGC 07996;;IRAS F12485+4123 (in FSC version 1) was removed from version 2.; +NGC4737;G;12:50:52.94;+34:09:24.7;CVn;1.36;0.97;49;15.30;;11.51;10.86;10.53;24.11;S0-a;;;;;;;;2MASX J12505290+3409246,MCG +06-28-036,PGC 043490,SDSS J125052.93+340924.6,SDSS J125052.94+340924.6,SDSS J125052.94+340924.7;;; +NGC4738;G;12:51:08.90;+28:47:17.0;Com;1.82;0.26;33;14.90;13.81;11.33;10.56;10.30;22.76;Sc;;;;;;;;2MASX J12510889+2847171,MCG +05-30-103,PGC 043517,SDSS J125108.90+284716.9,SDSS J125108.90+284717.0,UGC 07999;;; +NGC4739;G;12:51:37.08;-08:24:36.8;Vir;1.50;1.37;115;14.00;;10.18;9.46;9.21;23.78;E;;;;;;;;2MASX J12513706-0824369,MCG -01-33-029,PGC 043571;;; +NGC4740;Dup;12:50:57.24;-14:19:58.6;Crv;;;;;;;;;;;;;;;4727;;;;;; +NGC4741;G;12:50:59.52;+47:40:17.6;CVn;1.17;0.76;171;14.50;;11.43;10.82;10.48;23.10;Sc;;;;;;;;2MASX J12505951+4740171,MCG +08-23-098,PGC 043504,SDSS J125059.51+474017.4,SDSS J125059.51+474017.5,SDSS J125059.52+474017.5,SDSS J125059.52+474017.6,UGC 08000;;; +NGC4742;G;12:51:48.04;-10:27:17.0;Vir;2.14;1.39;76;12.00;;9.24;8.57;8.39;22.61;E;;;;;;;;2MASX J12514803-1027172,MCG -02-33-032,PGC 043594,UGCA 303;;; +NGC4743;G;12:52:15.98;-41:23:26.4;Cen;1.73;0.66;176;14.00;13.31;10.49;9.77;9.52;23.81;S0;;;;;;;;2MASX J12521598-4123259,ESO 323-021,ESO-LV 323-0210,MCG -07-27-005,PGC 043653;;; +NGC4744;G;12:52:19.60;-41:03:36.1;Cen;2.45;0.95;126;13.47;12.34;10.09;9.39;9.06;24.23;S0-a;;;;;;;;2MASX J12521960-4103358,ESO 323-022,ESO-LV 323-0220,IRAS 12495-4047,MCG -07-27-006,PGC 043661;;; +NGC4745;G;12:51:26.16;+27:25:16.6;Com;0.61;0.56;25;15.40;;12.19;11.35;11.23;23.79;S0;;;;;;;;2MASX J12512615+2725163,MCG +05-30-105a,PGC 043539,SDSS J125126.16+272516.4,SDSS J125126.16+272516.5;;; +NGC4746;G;12:51:55.36;+12:04:58.7;Vir;2.03;0.42;120;13.30;;10.57;9.79;9.50;22.55;Sb;;;;;;;;2MASX J12515537+1204588,IRAS 12494+1221,MCG +02-33-029,PGC 043601,SDSS J125155.14+120500.7,UGC 08007;;The SDSS position is 3.8 arcsec northwest of the nucleus.; +NGC4747;G;12:51:45.95;+25:46:37.5;Com;2.09;1.00;33;13.20;;;;;22.69;SBcd;;;;;;;;2MASX J12514596+2546383,IRAS 12492+2602,MCG +04-30-023,PGC 043586,SDSS J125145.95+254637.4,UGC 08005;;; +NGC4748;G;12:52:12.46;-13:24:53.0;Crv;1.27;0.82;66;14.73;14.03;10.90;10.20;9.85;23.27;S?;;;;;;;;2MASX J12521245-1324528,IRAS 12495-1308,MCG -02-33-034,PGC 043643;;; +NGC4749;G;12:51:11.97;+71:38:12.2;Dra;1.59;0.53;156;14.20;;10.75;9.89;9.47;23.27;Sb;;;;;;;;2MASX J12511200+7138124,IRAS 12493+7154,MCG +12-12-020,PGC 043527,UGC 08006;;; +NGC4750;G;12:50:07.27;+72:52:28.7;Dra;2.40;2.06;142;11.80;;9.05;8.38;8.12;22.45;Sab;;;;;;;;2MASX J12500721+7252281,IRAS 12483+7308,MCG +12-12-019,PGC 043426,UGC 07994;;; +NGC4751;G;12:52:50.79;-42:39:35.7;Cen;1.66;0.63;175;12.99;;9.23;8.52;8.24;22.87;E-S0;;;;;;;;2MASX J12525080-4239358,ESO 323-029,ESO-LV 323-0290,IRAS 12500-4223,MCG -07-27-011,PGC 043723;;; +NGC4752;G;12:51:29.07;+13:46:54.5;Com;0.95;0.45;153;15.40;;12.36;11.70;11.41;23.45;SBab;;;;;;;;2MASX J12512906+1346542,PGC 043555,SDSS J125129.06+134654.4,SDSS J125129.06+134654.5,SDSS J125129.07+134654.5;;Identification as NGC 4752 is uncertain.; +NGC4753;G;12:52:22.11;-01:11:58.9;Vir;6.49;3.06;86;10.85;9.95;7.65;6.97;6.72;23.31;S0-a;;;;;;;;2MASX J12522211-0111588,IRAS 12498-0055,MCG +00-33-016,PGC 043671,SDSS J125222.06-011158.4,UGC 08009;;; +NGC4754;G;12:52:17.50;+11:18:50.0;Vir;4.16;1.95;22;11.60;;8.31;7.64;7.41;23.19;S0;;;;;;;;2MASX J12521756+1118491,MCG +02-33-030,PGC 043656,SDSS J125217.49+111849.9,UGC 08010;;; +NGC4755;OCl;12:53:37.08;-60:21:22.7;Cru;7.80;;;;;;;;;;;;;;;;;C 094,MWSC 2072;Herschel's Jewel Box,kappa Crucis Cluster;; +NGC4756;G;12:52:52.63;-15:24:47.8;Crv;2.28;1.56;47;13.00;;9.96;9.32;9.08;23.83;E-S0;;;;;;;;2MASX J12525262-1524478,MCG -02-33-039,PGC 043725;;; +NGC4757;G;12:52:50.09;-10:18:36.8;Vir;0.80;0.26;58;15.00;;11.20;10.46;10.32;23.18;S0;;;;;;;;2MASX J12525011-1018361,MCG -02-33-040,PGC 043715;;; +NGC4758;G;12:52:44.05;+15:50:54.7;Com;2.75;0.77;159;14.10;;;;;23.22;SBm;;;;;;;;2MASX J12524473+1550289,IRAS 12502+1607,MCG +03-33-015,PGC 043707,UGC 08014;;; +NGC4759;GPair;12:53:05.20;-09:12:08.0;Vir;;;;;;;;;;;;;;;;;;;;This is a pair included in the GTrpl [PCM2000] 05.;Diameter of the group inferred by the author. +NGC4759 NED01;Dup;12:53:04.46;-09:11:59.7;Vir;;;;;;;;;;;;;;;4776;;;;;; +NGC4759 NED02;Dup;12:53:05.81;-09:12:13.8;Vir;;;;;;;;;;;;;;;4778;;;;;; +NGC4760;G;12:53:07.23;-10:29:39.1;Vir;2.57;2.01;9;13.00;;9.49;8.81;8.55;23.41;E;;;;;;;;2MASX J12530723-1029394,MCG -02-33-041,PGC 043763;;; +NGC4761;G;12:53:09.81;-09:11:52.1;Vir;1.55;0.65;168;15.00;;;;;23.96;S?;;;;;;;;MCG -01-33-039,PGC 043768;;; +NGC4762;G;12:52:56.05;+11:13:50.9;Vir;8.26;3.52;32;11.10;;8.20;7.46;7.30;24.30;S0;;;;;;;;2MASX J12525604+1113508,MCG +02-33-033,PGC 043733,UGC 08016;;; +NGC4763;G;12:53:27.22;-17:00:19.9;Crv;1.86;1.16;105;14.00;;10.51;9.84;9.58;23.09;SBa;;;;;;;;2MASX J12532723-1700197,IRAS 12507-1643,MCG -03-33-013,PGC 043792;;; +NGC4764;G;12:53:06.63;-09:15:27.5;Vir;0.46;0.37;78;16.30;;12.73;12.20;11.96;23.16;E;;;;;;;;2MASX J12530661-0915274,PGC 043760;;NGC identification is not certain.; +NGC4765;G;12:53:14.41;+04:27:47.2;Vir;1.16;0.85;80;13.00;;11.64;10.98;10.82;22.28;Sa;;;;;;;;2MASX J12531456+0427479,IRAS 12507+0444,MCG +01-33-020,PGC 043775,SDSS J125314.31+042748.9,SDSS J125314.41+042747.2,SDSS J125314.42+042747.2,SDSS J125314.47+042749.7,UGC 08018;;Multiple SDSS entries describe this object.; +NGC4766;G;12:53:08.17;-10:22:41.5;Vir;0.98;0.23;129;15.00;;11.81;11.09;10.83;23.99;S0;;;;;;;;2MASX J12530818-1022414,MCG -02-33-042,PGC 043766;;; +NGC4767;G;12:53:52.95;-39:42:51.5;Cen;2.82;1.39;141;12.62;11.53;9.17;8.49;8.23;23.59;E;;;;;;;;2MASX J12535295-3942516,ESO 323-036,ESO-LV 323-0360,MCG -06-28-023,PGC 043845;;; +NGC4767A;G;12:53:01.48;-39:50:06.9;Cen;0.59;0.27;110;16.39;;13.24;12.26;11.86;23.29;Sc;;;;;;;;2MASX J12530149-3950067,ESO 323-031,ESO-LV 323-0310,IRAS 12502-3933,MCG -07-27-011A,PGC 043744;;; +NGC4767B;G;12:54:45.03;-39:51:08.2;Cen;1.47;1.17;96;13.85;;10.89;10.16;9.83;23.26;SBc;;;;;;;;2MASX J12544502-3951082,ESO 323-041,ESO-LV 323-0410,IRAS 12519-3934,MCG -07-27-015,PGC 043954;;; +NGC4768;*;12:53:17.25;-09:31:53.2;Vir;;;;;;;;;;;;;;;;;;;;; +NGC4769;**;12:53:18.08;-09:32:09.6;Vir;;;;;;;;;;;;;;;;;;;;; +NGC4770;G;12:53:32.15;-09:32:29.4;Vir;1.73;1.11;88;14.00;;10.23;9.55;9.26;23.58;S0-a;;;;;;;;2MASX J12533215-0932294,MCG -01-33-040,PGC 043804;;; +NGC4771;G;12:53:21.22;+01:16:08.7;Vir;3.10;0.98;133;12.92;;9.96;9.28;9.01;22.97;Sc;;;;;;;;2MASX J12532127+0116090,IRAS 12507+0132,MCG +00-33-017,PGC 043784,SDSS J125321.21+011608.7,SDSS J125321.22+011608.7,SDSS J125321.22+011608.8,SDSS J125321.41+011606.2,UGC 08020;;; +NGC4772;G;12:53:29.16;+02:10:06.2;Vir;4.12;2.00;155;11.96;11.04;9.16;8.53;8.36;23.36;SABa;;;;;;;;2MASX J12532917+0210060,MCG +00-33-018,PGC 043798,SDSS J125329.04+021006.6,SDSS J125329.17+021006.0,SDSS J125329.17+021006.1,UGC 08021;;; +NGC4773;G;12:53:36.01;-08:38:19.5;Vir;0.85;0.52;77;15.00;;10.36;9.73;9.41;22.14;E;;;;;;;;2MASX J12533599-0838197,MCG -01-33-041,PGC 043810;;; +NGC4774;GPair;12:53:06.20;+36:49:22.0;CVn;1.20;;;;;;;;;;;;;;;;;MCG +06-28-037;;;Diameter of the group inferred by the author. +NGC4774 NED01;G;12:53:06.02;+36:49:34.8;CVn;0.40;0.27;143;16.25;;;;;24.71;Sbc;;;;;;;;MCG +06-28-037 NED01,PGC 2087677,SDSS J125306.01+364934.7;;;B-Mag taken from LEDA +NGC4774 NED02;G;12:53:06.59;+36:49:08.6;CVn;0.60;0.35;125;14.60;;12.48;11.79;11.33;22.02;Sc;;;;;;;;2MASX J12530651+3649109,IRAS 12507+3705,MCG +06-28-037 NED02,PGC 043759,SDSS J125306.58+364908.6;;; +NGC4775;G;12:53:45.70;-06:37:19.8;Vir;2.22;1.96;59;12.30;;10.20;9.80;9.22;21.94;Scd;;;;;;;;2MASX J12534570-0637197,IRAS 12511-0621,MCG -01-33-043,PGC 043826,UGCA 306;;; +NGC4776;G;12:53:04.46;-09:11:59.7;Vir;1.96;1.08;65;14.21;;;;;24.20;S0;;;;;4759 NED01;;;MCG -01-33-036,PGC 043754;;; +NGC4777;G;12:53:58.54;-08:46:32.6;Vir;1.84;0.79;8;14.50;;10.66;10.08;9.93;23.64;SABa;;;;;;;;2MASX J12535853-0846326,MCG -01-33-044,PGC 043852;;; +NGC4778;G;12:53:05.81;-09:12:13.8;Vir;2.69;2.09;120;13.79;;9.59;8.89;8.63;24.37;S0;;;;;4759 NED02;;;2MASX J12530567-0912141,MCG -01-33-037,PGC 043757;;; +NGC4779;G;12:53:50.84;+09:42:36.2;Vir;1.86;1.31;54;13.50;;10.78;10.15;9.87;22.88;SBc;;;;;;;;2MASX J12535086+0942357,IRAS 12513+0958,MCG +02-33-034,PGC 043837,SDSS J125350.82+094234.7,SDSS J125350.83+094236.2,UGC 08022;;; +NGC4780;G;12:54:05.23;-08:37:16.0;Vir;1.96;0.50;173;13.20;;10.89;10.27;10.15;22.89;SABc;;;;;;;;2MASX J12540524-0837159,IRAS 12515-0821,MCG -01-33-045,PGC 043870;;; +NGC4780A;G;12:54:03.04;-08:39:13.7;Vir;0.74;0.25;26;16.05;;12.74;12.05;11.81;24.05;;;;;;;;;2MASX J12540303-0839136,PGC 1000913;;; +NGC4781;G;12:54:23.75;-10:32:13.9;Vir;3.66;1.48;120;11.80;;9.47;8.89;8.61;22.16;Scd;;;;;;;;2MASX J12542374-1032139,IRAS 12517-1015,MCG -02-33-049,PGC 043902;;; +NGC4782;G;12:54:35.72;-12:34:07.1;Crv;1.48;0.87;171;13.00;12.75;8.75;8.04;7.75;21.93;E;;;;;;;;2MASX J12543569-1234069,2MASX J12543570-1234070,MCG -02-33-050,PGC 043924;;Sometimes confused with NGC 4783.; +NGC4783;G;12:54:36.59;-12:33:28.2;Crv;1.41;0.69;134;12.50;12.80;;;;22.39;E;;;;;;;;MCG -02-33-051,PGC 043926;;Sometimes confused with NGC 4782.; +NGC4784;G;12:54:37.02;-10:36:47.0;Vir;1.67;0.41;103;15.00;;10.91;10.22;9.93;24.16;S0;;;;;;;;2MASX J12543702-1036471,MCG -02-33-053,PGC 043929;;; +NGC4785;G;12:53:27.33;-48:44:57.1;Cen;2.04;0.97;80;13.22;12.09;9.62;8.85;8.57;22.95;SBb;;;;;;;;2MASX J12532731-4844569,ESO 219-004,ESO-LV 219-0040,IRAS 12506-4828,PGC 043791;;; +NGC4786;G;12:54:32.42;-06:51:33.9;Vir;1.98;1.51;171;14.00;;9.68;8.97;8.72;23.06;E;;;;;;;;2MASX J12543242-0651339,MCG -01-33-046,PGC 043922;;; +NGC4787;G;12:54:05.52;+27:04:07.1;Com;1.02;0.32;1;15.44;;12.20;11.70;11.40;24.00;S0-a;;;;;;;;2MASX J12540552+2704071,MCG +05-30-121,PGC 043875,SDSS J125405.51+270407.0,SDSS J125405.52+270406.9,SDSS J125405.52+270407.0,SDSS J125405.52+270407.1,UGC 08026;;; +NGC4788;G;12:54:16.03;+27:18:13.3;Com;0.91;0.32;141;15.40;;12.03;11.23;11.03;23.66;S0-a;;;;;;;;2MASX J12541602+2718131,MCG +05-30-123,PGC 043874,SDSS J125416.02+271813.4,SDSS J125416.03+271813.6;;; +NGC4789;G;12:54:19.02;+27:04:04.9;Com;1.66;1.12;174;13.12;12.10;10.00;9.53;9.24;22.91;S0;;;;;;;;2MASX J12541900+2704051,MCG +05-30-124,PGC 043895,SDSS J125419.01+270404.9,UGC 08028;;; +NGC4789A;G;12:54:05.25;+27:08:58.7;Com;1.90;1.24;37;14.23;13.95;14.79;14.33;15.35;23.87;I;;;;;;;;2MASX J12540524+2708586,MCG +05-30-120,PGC 043869,UGC 08024;;; +NGC4790;G;12:54:51.94;-10:14:52.2;Vir;1.69;0.93;87;12.00;;10.70;10.03;9.78;22.16;SBc;;;;;;;;2MASX J12545193-1014521,IRAS 12522-0958,MCG -02-33-056,PGC 043972;;Confused HIPASS source; +NGC4791;G;12:54:43.95;+08:03:11.2;Vir;1.06;0.70;66;15.10;;12.17;11.60;11.35;23.62;SBa;;;;;;;;2MASX J12544393+0803113,MCG +01-33-021,PGC 043950,SDSS J125443.94+080311.1;;; +NGC4792;G;12:55:03.68;-12:29:49.8;Crv;0.85;0.42;143;15.44;15.00;11.36;10.61;10.41;23.43;S0;;;;;;;;2MASX J12550368-1229493,PGC 043999;;; +NGC4793;G;12:54:40.62;+28:56:19.2;Com;1.82;0.94;54;12.50;11.93;9.85;9.22;8.89;21.80;Sc;;;;;;;;2MASX J12544060+2856195,IRAS 12522+2912,MCG +05-31-003,PGC 043939,SDSS J125440.61+285619.2,SDSS J125440.62+285619.2,UGC 08033;;; +NGC4794;G;12:55:10.50;-12:36:30.5;Crv;1.12;0.51;151;14.00;13.00;10.33;9.63;9.40;23.25;Sa;;;;;;;;2MASX J12551051-1236303,MCG -02-33-060,PGC 044012;;; +NGC4795;G;12:55:02.86;+08:03:55.8;Vir;2.16;1.42;119;13.50;;9.82;9.20;8.96;23.00;SBa;;;;;;;;2MASX J12550289+0803555,MCG +01-33-024 NED01,PGC 043998,SDSS J125502.85+080355.9,UGC 08037;;; +NGC4796;G;12:55:04.69;+08:03:58.4;Vir;1.80;1.73;110;14.50;;;;;25.38;E-S0;;;;;;;;MCG +01-33-024 NED02,PGC 093119,UGC 08037 NOTES01;;Superimposed on NGC 4795, 0.45 arcmin East of center.; +NGC4797;G;12:54:55.17;+27:24:45.7;Com;1.15;0.85;34;14.20;13.17;10.92;10.22;9.89;23.23;E-S0;;;;;4798;;;2MASX J12545516+2724455,MCG +05-31-004,PGC 043981,SDSS J125455.16+272445.7,SDSS J125455.17+272445.7,UGC 08038;;; +NGC4798;Dup;12:54:55.17;+27:24:45.7;Com;;;;;;;;;;;;;;;4797;;;;;; +NGC4799;G;12:55:15.53;+02:53:47.9;Vir;1.44;0.62;91;14.32;;10.83;10.16;9.89;22.78;Sab;;;;;;;;2MASX J12551554+0253477,IRAS 12526+0310,MCG +01-33-025,PGC 044017,SDSS J125515.50+025347.0,SDSS J125515.53+025347.8,SDSS J125515.53+025347.9,UGC 08043;;; +NGC4800;G;12:54:37.80;+46:31:52.2;CVn;1.65;1.16;21;12.00;;9.28;8.57;8.30;21.90;Sb;;;;;;;;2MASX J12543777+4631521,IRAS 12523+4648,MCG +08-24-004,PGC 043931,SDSS J125437.79+463152.1,UGC 08035;;; +NGC4801;G;12:54:37.77;+53:05:24.0;UMa;1.35;0.67;138;14.60;;11.59;10.88;10.61;24.48;E-S0;;;;;;;;2MASX J12543771+5305241,MCG +09-21-060,PGC 043946,SDSS J125437.76+530523.9,SDSS J125437.76+530524.1,SDSS J125437.77+530524.0;;; +NGC4802;G;12:55:49.64;-12:03:19.1;Vir;2.64;2.30;18;12.00;;9.36;8.60;8.50;23.24;S0;;;;;4804;;;2MASX J12554963-1203192,IRAS 12532-1147,MCG -02-33-061,PGC 044087;;; +NGC4803;G;12:55:33.68;+08:14:25.5;Vir;0.76;0.42;15;15.00;;11.49;10.80;10.71;23.06;E-S0;;;;;;;;2MASX J12553366+0814259,MCG +02-33-036,PGC 044061,SDSS J125533.67+081425.4;;; +NGC4804;Dup;12:55:49.64;-12:03:19.1;Vir;;;;;;;;;;;;;;;4802;;;;;; +NGC4805;*;12:55:24.23;+27:58:52.7;Com;;;;;;;;;;;;;;;;;;;;; +NGC4806;G;12:56:12.40;-29:30:10.6;Hya;1.35;1.15;52;13.44;;11.39;10.74;10.34;22.68;Sc;;;;;;;;2MASX J12561239-2930106,ESO 443-012,ESO-LV 443-0120,IRAS 12535-2914,MCG -05-31-003,PGC 044116;;; +NGC4807;G;12:55:29.10;+27:31:17.1;Com;0.88;0.65;22;14.50;13.50;11.30;10.67;10.40;22.94;E-S0;;;;;;;;2MASX J12552907+2731169,MCG +05-31-006,PGC 044037,SDSS J125529.08+273117.0,SDSS J125529.09+273117.1,SDSS J125529.10+273117.1,UGC 08049;;; +NGC4808;G;12:55:48.95;+04:18:14.8;Vir;2.36;0.93;127;12.50;;10.00;9.33;9.04;22.21;SABc;;;;;;;;2MASX J12554894+0418147,IRAS 12532+0434,MCG +01-33-028,PGC 044086,UGC 08054;;; +NGC4809;G;12:54:51.06;+02:39:14.7;Vir;1.58;0.64;65;14.20;;;;;23.23;IAB;;;;;;;;MCG +01-33-022,PGC 043969,SDSS J125451.06+023914.7,SDSS J125451.07+023914.7,SDSS J125451.12+023914.7,UGC 08034;;NGC gives only one pos. for N4809 & N4810. NED follows CGCG and RC2.; +NGC4810;G;12:54:51.20;+02:38:25.0;Vir;0.86;0.43;167;14.80;;;;;22.50;IAB;;;;;;;;MCG +01-33-023,PGC 043971,UGC 08034 NOTES01;;NGC gives only one pos. for N4809 & N4810. NED follows CGCG and RC2.; +NGC4811;G;12:56:52.36;-41:47:49.9;Cen;1.32;0.89;40;14.05;;10.70;9.92;9.72;23.73;S0-a;;;;;;;;2MASX J12565235-4147499,ESO 323-047,ESO-LV 323-0470,MCG -07-27-019,PGC 044201;;; +NGC4812;G;12:56:52.70;-41:48:48.0;Cen;1.50;0.63;34;14.16;;10.60;9.90;9.65;23.79;S0;;;;;;;;2MASX J12565270-4148479,ESO 323-048,ESO-LV 323-0480,MCG -07-27-018,PGC 044204;;; +NGC4813;G;12:56:36.12;-06:49:04.2;Vir;1.59;0.86;26;15.00;;10.79;10.11;9.88;23.81;S0;;;;;;;;2MASX J12563612-0649040,MCG -01-33-055,PGC 044160;;The APM position refers to the northeastern part of the galaxy.; +NGC4814;G;12:55:21.94;+58:20:38.8;UMa;2.75;2.00;128;12.40;;9.99;9.32;9.05;23.53;Sb;;;;;;;;2MASX J12552194+5820382,IRAS 12532+5836,MCG +10-19-003,PGC 044025,SDSS J125521.92+582038.7,SDSS J125521.94+582038.7,SDSS J125521.94+582038.8,UGC 08051;;; +NGC4815;OCl;12:57:58.37;-64:57:42.3;Mus;3.90;;;9.61;8.60;;;;;;;;;;;;;MWSC 2075;;; +NGC4816;G;12:56:12.15;+27:44:43.7;Com;1.38;0.63;90;13.80;12.84;10.70;10.01;9.71;23.03;E-S0;;;;;;;;2MASX J12561213+2744440,MCG +05-31-010,PGC 044114,SDSS J125612.14+274443.7,UGC 08057;;; +NGC4817;G;12:56:29.82;+27:56:24.0;Com;0.69;0.60;120;15.00;;12.69;11.96;11.47;23.81;E;;;;;;;;2MASX J12562984+2756240,PGC 083663,SDSS J125629.80+275624.0,SDSS J125629.81+275623.9,SDSS J125629.81+275624.0,SDSS J125629.82+275624.0;;; +NGC4818;G;12:56:48.90;-08:31:31.1;Vir;4.27;1.28;178;11.00;;8.81;8.19;7.94;23.20;SABa;;;;;;;;2MASX J12564890-0831310,IRAS 12542-0815,MCG -01-33-057,PGC 044191;;; +NGC4819;G;12:56:27.86;+26:59:14.4;Com;1.00;0.78;150;14.10;13.17;11.05;10.29;10.12;22.73;Sa;;;;;;;;2MASX J12562784+2659150,MCG +05-31-014,PGC 044144,SDSS J125627.85+265914.7,SDSS J125627.86+265914.6,UGC 08060;;; +NGC4820;G;12:57:00.56;-13:43:09.6;Vir;1.19;0.42;106;15.00;;11.34;10.68;10.39;23.91;S0;;;;;;;;2MASX J12570056-1343094,MCG -02-33-067,PGC 044227;;; +NGC4821;G;12:56:29.13;+26:57:25.2;Com;0.59;0.34;8;15.00;;12.06;11.33;11.10;22.70;E;;;;;;;;2MASX J12562911+2657250,MCG +05-31-015,PGC 044148,SDSS J125629.13+265725.1,SDSS J125629.13+265725.2;;; +NGC4822;G;12:57:03.74;-10:45:42.6;Vir;1.38;0.97;93;14.00;;10.87;10.12;9.88;23.79;E-S0;;;;;;;;2MASX J12570373-1045423,MCG -02-33-069,PGC 044236;;; +NGC4823;G;12:57:25.64;-13:41:55.3;Vir;0.81;0.22;178;15.97;;12.67;11.98;11.80;;S0-a;;;;;;;;2MASX J12572565-1341551,PGC 044305;;; +NGC4824;*;12:56:36.37;+27:25:57.5;Com;;;;;;;;;;;;;;;;;;SDSS J125636.36+272557.4;;; +NGC4825;G;12:57:12.24;-13:39:53.4;Vir;2.69;1.64;139;9.30;;9.47;8.77;8.51;23.75;E-S0;;;;;;;;2MASX J12571223-1339534,MCG -02-33-070,PGC 044261;;; +NGC4826;G;12:56:43.64;+21:40:58.7;Com;10.52;5.33;114;9.36;8.52;6.27;5.58;5.33;22.68;SABa;;;;064;;;;2MASX J12564369+2140575,IRAS 12542+2157,MCG +04-31-001,PGC 044182,UGC 08062;Black Eye Galaxy,Evil Eye Galaxy;; +NGC4827;G;12:56:43.53;+27:10:43.1;Com;1.22;0.97;34;13.90;12.91;10.98;10.32;10.04;23.07;E-S0;;;;;;;;2MASX J12564351+2710438,MCG +05-31-016,PGC 044178,SDSS J125643.51+271043.6,SDSS J125643.52+271043.6,SDSS J125643.52+271043.7,SDSS J125643.53+271043.7,UGC 08065;;; +NGC4828;G;12:56:42.86;+28:01:13.6;Com;0.75;0.70;155;15.40;;11.99;11.20;10.92;22.82;S0;;;;;;;;2MASX J12564283+2801138,MCG +05-31-017,PGC 044176,SDSS J125642.85+280113.5,SDSS J125642.86+280113.6,SDSS J125642.86+280113.8;;; +NGC4829;G;12:57:24.48;-13:44:15.0;Vir;0.58;0.37;106;16.09;;12.76;12.00;11.91;23.67;E;;;;;;;;2MASX J12572449-1344151,PGC 044299;;; +NGC4830;G;12:57:27.91;-19:41:28.6;Vir;2.31;1.49;164;12.68;;9.80;9.07;8.85;23.63;E-S0;;;;;;;;2MASX J12572790-1941286,ESO 575-037,ESO-LV 575-0370,MCG -03-33-024,PGC 044313;;; +NGC4831;G;12:57:36.69;-27:17:31.7;Hya;1.57;0.87;177;13.39;;10.31;9.56;9.32;23.19;E-S0;;;;;;;;2MASX J12573667-2717318,ESO 507-055,ESO-LV 507-0550,MCG -04-31-010,PGC 044340;;; +NGC4832;G;12:57:47.53;-39:45:42.1;Cen;2.14;1.48;35;13.17;;9.89;9.17;8.93;23.69;S0;;;;;;;;2MASX J12574754-3945421,ESO 323-051,ESO-LV 323-0510,MCG -06-29-001,PGC 044361;;; +NGC4833;GCl;12:59:34.94;-70:52:28.5;Mus;8.40;;;8.72;7.79;;;;;;;;;;;;;C 105,MWSC 2077;;; +NGC4834;G;12:56:25.28;+52:17:45.1;CVn;1.08;0.46;109;15.50;;11.73;11.00;10.73;23.68;Sa;;;;;;;;2MASX J12562525+5217453,MCG +09-21-067,PGC 044136,SDSS J125625.27+521745.1,SDSS J125625.28+521745.1,SDSS J125625.29+521745.3;;; +NGC4835;G;12:58:07.84;-46:15:51.2;Cen;3.30;0.68;150;12.31;11.74;9.26;8.50;8.18;22.57;Sbc;;;;;;;;2MASX J12580782-4615511,ESO 269-019,ESO-LV 269-0190,IRAS 12552-4559,PGC 044409;;; +NGC4835A;G;12:57:13.13;-46:22:28.9;Cen;2.95;0.38;178;14.07;;11.27;10.48;10.11;23.56;Sc;;;;;;;;2MASX J12571315-4622287,ESO 269-015,ESO-LV 269-0150,PGC 044271;;; +NGC4836;G;12:57:34.29;-12:44:38.8;Vir;1.48;1.08;8;13.99;;11.18;10.50;10.14;23.87;SABc;;;;;;;;2MASX J12573428-1244381,IRAS 12549-1228,MCG -02-33-072,PGC 044328;;; +NGC4837;GPair;12:56:49.10;+48:17:55.0;CVn;1.30;;;;;;;;;;;;;;;;;UGC 08068;;;Diameter of the group inferred by the author. +NGC4837 NED01;G;12:56:48.30;+48:17:48.8;CVn;1.32;0.54;64;14.40;;11.59;10.88;10.52;23.06;I;;;;;;;;2MASX J12564828+4817485,IRAS 12545+4834,MCG +08-24-011,PGC 044188,UGC 08068 NED01;;; +NGC4837 NED02;G;12:56:49.90;+48:18:00.4;CVn;0.33;0.28;;16.00;;;;;;Sd;;;;;;;;MCG +08-24-012,PGC 044198,SDSS J125649.90+481800.3,UGC 08068 NED02;;; +NGC4838;G;12:57:56.16;-13:03:36.3;Vir;1.79;1.41;9;13.30;;10.74;10.09;9.77;23.62;Sb;;;;;;;;2MASX J12575614-1303360,MCG -02-33-074,PGC 044383;;; +NGC4839;G;12:57:24.36;+27:29:52.1;Com;2.70;1.24;65;13.02;12.06;10.09;9.33;9.20;24.04;E;;;;;;;;2MASX J12572435+2729517,MCG +05-31-025,PGC 044298,SDSS J125724.36+272952.0,SDSS J125724.36+272952.1,UGC 08070;;The position in 1996ApJS..106....1W is 6 arcsec south of the nucleus.; +NGC4840;G;12:57:32.84;+27:36:37.2;Com;0.73;0.70;125;14.80;;11.58;10.84;10.56;22.88;E;;;;;;;;2MASX J12573284+2736368,MCG +05-31-029,PGC 044324,SDSS J125732.83+273637.1,SDSS J125732.83+273637.2,SDSS J125732.83+273637.4;;; +NGC4841A;G;12:57:31.95;+28:28:37.0;Com;1.45;1.38;60;13.50;;10.26;9.45;9.22;23.44;E;;;;;;;;2MASX J12573197+2828368,MCG +05-31-026,PGC 044323,SDSS J125731.94+282836.8,SDSS J125731.95+282836.9,SDSS J125731.95+282837.0,UGC 08072;;Component 'a)' in UGC notes.; +NGC4841B;G;12:57:33.89;+28:28:56.1;Com;1.00;0.79;169;13.50;;;;;22.58;E;;;;;;;;MCG +05-31-027,PGC 044329,SDSS J125733.88+282856.1,SDSS J125733.88+282856.2,UGC 08073;;Component 'b)' in UGC notes.; +NGC4842A;G;12:57:35.84;+27:29:35.7;Com;0.58;0.57;70;14.90;;11.88;11.18;11.00;22.91;E;;;;;;;;2MASX J12573584+2729358,MCG +05-31-030,PGC 044337,SDSS J125735.85+272935.5,SDSS J125735.85+272935.6,SDSS J125735.86+272935.5,UGC 08070 NOTES02;;; +NGC4842B;G;12:57:36.14;+27:29:05.3;Com;0.42;0.29;49;16.30;;13.11;12.47;12.14;23.06;E;;;;;;;;2MASX J12573614+2729058,MCG +05-31-031,PGC 044338,SDSS J125736.14+272905.2,UGC 08070 NOTES03;;; +NGC4843;G;12:58:00.82;-03:37:16.1;Vir;1.98;0.44;91;14.10;;10.49;9.74;9.47;24.04;S0-a;;;;;;;;2MASX J12580082-0337161,MCG +00-33-024,PGC 044388,SDSS J125800.83-033715.9;;; +NGC4844;*;12:58:08.26;-13:04:47.7;Vir;;;;15.77;14.14;10.58;10.03;9.80;;;;;;;;;;2MASS J12580816-1304505,UCAC3 154-139697,UCAC4 385-061931;;NGC identification is not certain.; +NGC4845;G;12:58:01.19;+01:34:33.0;Vir;5.50;1.20;82;17.40;16.31;8.81;8.08;7.79;23.46;SABa;;;;;4910;;;2MASX J12580124+0134320,IRAS 12554+0150,MCG +00-33-025,PGC 044392,SDSS J125801.18+013433.0,SDSS J125801.19+013433.0,UGC 08078;;Identification as NGC 4910 is uncertain.; +NGC4846;G;12:57:47.69;+36:22:14.6;CVn;1.21;0.50;62;14.60;;11.60;10.86;10.76;23.03;SBbc;;;;;;;;2MASX J12574764+3622139,MCG +06-29-002,PGC 044362,SDSS J125747.68+362214.5,SDSS J125747.69+362214.6,UGC 08079;;; +NGC4847;G;12:58:28.95;-13:08:27.3;Vir;0.83;0.63;155;15.07;;12.12;11.44;11.33;23.77;E;;;;;;;;2MASX J12582896-1308274,PGC 044464;;; +NGC4848;G;12:58:05.64;+28:14:33.9;Com;1.27;0.42;157;14.20;;11.74;11.10;10.72;22.68;Sc;;;;;;;;2MASX J12580552+2814335,IRAS 12556+2830,MCG +05-31-039,PGC 044405,SDSS J125805.58+281433.3,SDSS J125805.59+281433.3,SDSS J125805.59+281433.4,UGC 08082;;; +NGC4849;G;12:58:12.68;+26:23:48.8;Com;1.40;0.99;176;14.50;;10.98;10.34;10.02;23.71;S0;;;;;;3935;;2MASX J12581261+2623486,MCG +05-31-044,PGC 044424,SDSS J125812.66+262348.7,SDSS J125812.67+262348.7,SDSS J125812.68+262348.8,UGC 08086;;"CGCG misprints name as 'IC 0838'; corrected in vol III (errata)."; +NGC4850;G;12:58:21.84;+27:58:03.8;Com;0.66;0.64;130;15.30;14.03;12.02;11.43;11.04;23.11;S0;;;;;;;;2MASX J12582185+2758037,MCG +05-31-040,PGC 044449,SDSS J125821.82+275803.9,SDSS J125821.83+275804.0,SDSS J125821.84+275804.0,SDSS J125821.84+275804.1;;; +NGC4851;G;12:58:21.71;+28:08:55.5;Com;0.40;0.33;94;15.20;14.94;;;;22.38;S0;;;;;;;;2MASX J12582169+2808557,PGC 044439,SDSS J125821.69+280855.6,SDSS J125821.70+280855.5,SDSS J125821.71+280855.5;;; +NGC4852;OCl;13:00:04.39;-59:36:34.0;Cen;5.40;;;;8.90;;;;;;;;;;;;;MWSC 2078;;; +NGC4853;G;12:58:35.19;+27:35:46.8;Com;0.68;0.57;76;14.68;13.00;11.62;10.94;10.57;22.30;E-S0;;;;;;;;2MASX J12583518+2735467,IRAS 12561+2752,MCG +05-31-048,PGC 044481,SDSS J125835.18+273546.9,SDSS J125835.18+273547.0,SDSS J125835.19+273547.0,UGC 08092;;; +NGC4854;G;12:58:47.40;+27:40:29.1;Com;0.95;0.67;44;15.20;14.21;11.87;11.22;10.93;23.56;S0;;;;;;;;2MASX J12584742+2740288,MCG +05-31-049,PGC 044502,SDSS J125847.39+274029.0,SDSS J125847.40+274028.9,SDSS J125847.40+274029.0;;; +NGC4855;G;12:59:18.45;-13:13:51.7;Vir;1.68;1.24;170;14.00;;10.32;9.66;9.36;24.17;E-S0;;;;;;;;2MASX J12591844-1313519,MCG -02-33-077,PGC 044572;;; +NGC4856;G;12:59:21.27;-15:02:31.8;Vir;4.25;1.57;38;11.00;;8.38;7.74;7.47;23.23;S0-a;;;;;;;;2MASX J12592127-1502318,MCG -02-33-078,PGC 044582,UGCA 313;;; +NGC4857;G;12:57:18.34;+70:12:12.4;Dra;1.15;0.66;118;14.70;;11.87;11.21;10.89;23.28;SABb;;;;;;;;2MASX J12571835+7012123,IRAS 12554+7028,MCG +12-12-022,PGC 044284,UGC 08077;;; +NGC4858;G;12:59:02.04;+28:06:56.7;Com;0.51;0.42;28;15.50;15.02;13.53;12.84;12.53;22.80;SBb;;;;;;;;2MASX J12590210+2806559,IRAS 12566+2823,MCG +05-31-051,PGC 044535,SDSS J125902.06+280656.3,SDSS J125902.06+280656.5,SDSS J125902.07+280656.3,SDSS J125902.07+280656.4;;; +NGC4859;G;12:59:01.83;+26:48:56.4;Com;1.51;0.65;93;14.80;;11.42;10.70;10.42;24.08;S0-a;;;;;;;;2MASX J12590180+2648569,MCG +05-31-053,PGC 044534,SDSS J125901.82+264856.3,SDSS J125901.82+264856.4,SDSS J125901.82+264856.5,UGC 08097;;; +NGC4860;G;12:59:03.90;+28:07:25.3;Com;1.07;0.94;121;14.70;13.24;11.28;10.62;10.29;23.51;E;;;;;;;;2MASX J12590392+2807249,MCG +05-31-054,PGC 044539,SDSS J125903.89+280725.3,SDSS J125903.90+280725.3,SDSS J125903.91+280725.3;;; +NGC4861;G;12:59:02.34;+34:51:34.0;CVn;3.81;1.45;18;12.90;12.32;12.44;12.16;11.77;23.65;Sm;;;;;;3961;;2MASX J12590234+3451339,MCG +06-29-003,PGC 044536,UGC 08098;;; +NGC4862;G;12:59:30.82;-14:07:56.4;Vir;1.09;0.89;147;15.00;;13.12;12.33;12.01;23.71;Sc;;;;;;3999;;2MASX J12593083-1407566,MCG -02-33-079,PGC 044610;;IC identification is not certain.; +NGC4863;G;12:59:42.46;-14:01:46.7;Vir;1.90;0.40;23;15.00;;11.42;10.73;10.79;24.75;S0-a;;;;;;;;2MASX J12594244-1401465,MCG -02-33-081,PGC 044650;;; +NGC4864;G;12:59:13.11;+27:58:37.2;Com;0.77;0.47;90;14.80;13.87;11.60;10.77;10.60;22.80;E;;;;;;;;2MASX J12591312+2758369,MCG +05-31-058,PGC 044566,SDSS J125913.11+275837.1,SDSS J125913.13+275837.2;;Shortened CGCG name may be confused with CGCG 125650+2814.5.; +NGC4865;G;12:59:19.87;+28:05:03.5;Com;0.88;0.42;113;14.60;13.69;11.43;10.74;10.48;22.94;E;;;;;;;;2MASX J12591985+2805038,MCG +05-31-064,PGC 044578,SDSS J125919.87+280503.4,SDSS J125919.87+280503.5,UGC 08100;;; +NGC4866;G;12:59:27.14;+14:10:15.8;Vir;5.77;0.98;88;11.90;;8.86;8.19;7.92;24.19;S0-a;;;;;;;;2MASX J12592713+1410157,MCG +02-33-045,PGC 044600,UGC 08102;;; +NGC4867;G;12:59:15.25;+27:58:14.6;Com;0.65;0.50;13;15.50;14.14;12.19;11.51;11.00;23.32;E;;;;;;;;2MASX J12591525+2758147,MCG +05-31-062,PGC 044568,SDSS J125915.24+275814.5;;Shortened CGCG name may be confused with CGCG 125648+2814.9.; +NGC4868;G;12:59:08.90;+37:18:37.2;CVn;1.43;1.30;155;12.90;;10.45;9.76;9.51;22.41;Sab;;;;;;;;2MASX J12590891+3718370,IRAS 12567+3734,MCG +06-29-004,PGC 044557,UGC 08099;;; +NGC4869;G;12:59:23.36;+27:54:41.7;Com;0.77;0.73;0;14.90;13.52;11.64;10.84;10.61;22.66;E;;;;;;;;2MASX J12592333+2754418,MCG +05-31-065,PGC 044587,SDSS J125923.36+275441.7,SDSS J125923.37+275441.8;;One of two 6cm sources associated with [WB92] 1256+2811; +NGC4870;G;12:59:17.77;+37:02:54.1;CVn;0.91;0.31;2;;;12.45;11.82;11.42;23.29;Sbc;;;;;;;;2MASX J12591779+3702540,PGC 044569,SDSS J125917.76+370254.0,SDSS J125917.77+370254.1;;; +NGC4871;G;12:59:29.96;+27:57:23.2;Com;0.77;0.57;160;15.10;14.07;12.16;11.32;11.12;23.42;S0;;;;;;;;2MASS J12592995+2757231,MCG +05-31-066,PGC 044606,SDSS J125929.95+275723.0,SDSS J125929.96+275723.1,SDSS J125929.96+275723.2;;; +NGC4872;G;12:59:34.04;+27:56:49.0;Com;0.67;0.41;124;14.70;14.10;12.33;11.66;11.00;22.41;E-S0;;;;;;;;MCG +05-31-068,PGC 044624,SDSS J125934.11+275648.5,SDSS J125934.12+275648.4,SDSS J125934.12+275648.6,SDSS J125934.13+275648.5;;; +NGC4873;G;12:59:32.79;+27:59:01.0;Com;0.81;0.52;103;15.40;14.13;12.29;11.53;11.25;23.37;S0;;;;;;;;2MASX J12593276+2759008,MCG +05-31-069,PGC 044621,SDSS J125932.78+275900.9,SDSS J125932.79+275900.9,SDSS J125932.80+275901.0;;; +NGC4874;G;12:59:35.71;+27:57:33.4;Com;2.29;1.98;49;13.70;11.40;9.85;9.02;8.86;23.44;E;;;;;;;;2MASX J12593570+2757338,MCG +05-31-070,PGC 044628,SDSS J125935.70+275733.3,SDSS J125935.71+275733.4,SDSS J125935.71+275733.5,UGC 08103;;One of two 6cm sources associated with [WB92] 1256+2811; +NGC4875;G;12:59:37.91;+27:54:26.4;Com;0.48;0.36;117;15.92;14.57;12.64;11.81;11.57;22.80;S0;;;;;;;;2MASX J12593789+2754267,PGC 044640,SDSS J125937.90+275426.3,SDSS J125937.91+275426.3,SDSS J125937.92+275426.2;;; +NGC4876;G;12:59:44.41;+27:54:44.9;Com;0.56;0.42;26;15.10;14.18;12.23;11.55;11.34;22.96;E;;;;;;;;2MASX J12594438+2754447,MCG +05-31-073,PGC 044658,SDSS J125944.40+275444.8,SDSS J125944.40+275445.0,SDSS J125944.41+275444.9;;; +NGC4877;G;13:00:26.34;-15:17:00.4;Vir;2.36;0.94;8;13.30;;10.00;9.26;8.95;23.19;Sab;;;;;;;;2MASX J13002634-1517005,IRAS 12577-1500,MCG -02-33-086,PGC 044761;;; +NGC4878;G;13:00:20.17;-06:06:13.8;Vir;1.53;1.43;70;14.50;;10.44;9.70;9.48;23.62;S0-a;;;;;;;;2MASX J13002017-0606135,MCG -01-33-064,PGC 044747;;NGC identification is not certain.; +NGC4879;*;13:00:25.61;-06:06:40.4;Vir;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC4880;G;13:00:10.57;+12:28:59.9;Vir;2.63;1.97;164;13.30;;10.10;9.32;9.08;23.47;S0-a;;;;;;;;2MASX J13001053+1229001,MCG +02-33-047,PGC 044719,SDSS J130010.57+122859.9,SDSS J130010.58+122859.9,UGC 08109;;HOLM 497B is a star.; +NGC4881;G;12:59:57.60;+28:14:50.6;Com;0.98;0.91;15;14.70;13.56;11.37;10.67;10.39;23.32;E;;;;;;;;2MASX J12595775+2814473,MCG +05-31-075,PGC 044686,UGC 08106;;; +NGC4882;Dup;13:00:04.44;+27:59:15.3;Com;;;;;;;;;;;;;;;4886;;;;;; +NGC4883;G;12:59:56.01;+28:02:05.0;Com;0.77;0.61;83;15.20;14.27;12.13;11.39;11.16;23.54;E-S0;;;;;;;;2MASX J12595601+2802052,PGC 044682,SDSS J125956.01+280204.9;;; +NGC4884;Dup;13:00:08.13;+27:58:37.2;Com;;;;;;;;;;;;;;;4889;;;;;; +NGC4885;G;13:00:33.87;-06:51:11.1;Vir;0.85;0.66;100;15.00;;12.38;11.90;11.42;23.13;Sab;;;;;;;;2MASX J13003387-0651110,IRAS 12579-0635,MCG -01-33-065,PGC 044781;;; +NGC4886;G;13:00:04.44;+27:59:15.3;Com;0.80;0.70;112;15.10;14.29;12.13;11.44;11.05;23.16;E;;;;;4882;;;MCG +05-31-076,PGC 044698,SDSS J130004.44+275915.2,SDSS J130004.44+275915.3;;; +NGC4887;G;13:00:39.26;-14:39:58.5;Vir;1.14;0.59;155;14.00;;11.73;11.24;10.90;23.10;S0-a;;;;;;;;2MASX J13003924-1439585,IRAS 12580-1423,MCG -02-33-087,PGC 044796;;; +NGC4888;G;13:00:36.26;-06:04:30.7;Vir;1.55;0.79;107;15.00;;10.76;9.99;9.96;23.70;Sa;;;;;;;;2MASX J13003582-0604290,MCG -01-33-066,PGC 044766;;The APM position refers to the eastern end of the galaxy.; +NGC4889;G;13:00:08.13;+27:58:37.2;Com;2.59;1.68;80;13.00;11.30;9.40;8.71;8.41;23.39;E;;;;;4884;;;2MASX J13000809+2758372,C 035,MCG +05-31-077,PGC 044715,SDSS J130008.12+275837.0,SDSS J130008.13+275836.9,SDSS J130008.13+275837.2,SDSS J130008.14+275837.2,UGC 08110;;; +NGC4890;G;13:00:39.12;-04:36:15.6;Vir;0.96;0.79;93;13.90;;11.45;10.84;10.56;22.32;Sm;;;;;;;;IRAS 12580-0420,MCG -01-33-067,PGC 044793;;; +NGC4891;*;13:00:46.99;-13:25:33.4;Vir;;;;;;;;;;;;;;;;;;;;This NGC number is often mistakenly applied to the galaxy NGC 4897.; +NGC4892;G;13:00:03.53;+26:53:53.2;Com;1.40;0.26;12;14.70;;11.54;10.88;10.63;23.59;S0-a;;;;;;;;2MASX J13000351+2653532,MCG +05-31-078,PGC 044697,SDSS J130003.52+265353.1,SDSS J130003.52+265353.2,SDSS J130003.53+265353.2,UGC 08108;;; +NGC4893;G;12:59:59.61;+37:11:36.2;CVn;1.10;0.70;3;15.60;;11.71;10.88;10.97;24.30;E;;;;;;4015;;2MASX J12595961+3711359,MCG +06-29-008,PGC 044690,SDSS J125959.61+371136.1,UGC 08111 NED01;;HOLM 498C is a star.; +NGC4893A;G;12:59:59.84;+37:11:17.3;CVn;0.56;0.39;177;16.00;;;;;23.43;E?;;;;;;4016;;MCG +06-29-009,PGC 044696,SDSS J125959.83+371117.3,SDSS J125959.84+371117.3;;Component 'a)' in UGC notes.; +NGC4894;G;13:00:16.52;+27:58:03.1;Com;0.60;0.28;36;16.11;15.04;12.88;12.20;11.88;23.64;S0;;;;;;;;2MASX J13001655+2758032,PGC 044732,SDSS J130016.51+275803.0,SDSS J130016.52+275803.1;;; +NGC4895;G;13:00:17.93;+28:12:08.3;Com;1.66;0.56;152;14.30;13.09;11.09;10.41;10.14;23.98;S0;;;;;;;;2MASX J13001795+2812082,MCG +05-31-081,PGC 044737,SDSS J130017.92+281208.6,SDSS J130017.93+281208.6,UGC 08113;;; +NGC4895A;G;13:00:09.12;+28:10:13.4;Com;0.59;0.32;99;15.60;14.94;12.80;12.28;11.78;23.64;E;;;;;;;;2MASX J13000909+2810132,PGC 044717,SDSS J130009.11+281013.3,SDSS J130009.11+281013.4,SDSS J130009.12+281013.4;;; +NGC4896;G;13:00:30.78;+28:20:46.4;Com;0.85;0.48;5;15.10;;11.75;11.11;10.76;23.25;E-S0;;;;;;;;2MASX J13003074+2820466,MCG +05-31-084,PGC 044768,SDSS J130030.76+282046.9,SDSS J130030.76+282047.0,UGC 08117;;; +NGC4897;G;13:00:52.95;-13:26:59.3;Vir;2.65;2.12;153;12.80;;10.50;9.77;9.58;23.92;Sbc;;;;;;;;2MASX J13005294-1326592,IRAS 12582-1310,MCG -02-33-089,PGC 044829,UGCA 316;;Misidentified as NGC 4891 in many catalogs.; +NGC4898;GPair;13:00:18.00;+27:57:26.0;Com;0.80;;;;;;;;;;;;;;;;;MCG +05-31-082;;;Diameter of the group inferred by the author. +NGC4898A;G;13:00:17.67;+27:57:19.4;Com;0.68;0.31;96;15.00;13.86;11.69;10.91;10.68;23.51;E;;;;;4898W;;;2MASX J13001768+2757192,MCG +05-31-082 NED01,PGC 044736,SDSS J130017.67+275718.9,SDSS J130017.69+275719.1;;; +NGC4898B;G;13:00:18.09;+27:57:23.6;Com;0.61;0.47;155;15.28;14.33;12.16;11.42;11.25;23.42;E-S0;;;;;4898E;;;2MASS J13001809+2757235,MCG +05-31-082 NED02,PGC 3098454;;; +NGC4899;G;13:00:56.63;-13:56:39.2;Vir;2.02;1.17;15;12.90;;10.30;9.65;9.35;22.48;SABc;;;;;;;;2MASX J13005663-1356392,IRAS 12583-1340,MCG -02-33-090,PGC 044841;;; +NGC4900;G;13:00:39.11;+02:30:05.2;Vir;2.13;2.02;150;12.80;;9.51;8.97;8.64;22.23;Sc;;;;;;;;2MASX J13003914+0230052,IRAS 12580+0246,MCG +01-33-035,PGC 044797,SDSS J130036.55+023002.2,SDSS J130039.10+023005.1,SDSS J130039.24+023002.6,SDSS J130039.24+023002.8,SDSS J130039.25+023002.6,UGC 08116;;Multiple SDSS entries describe this object.; +NGC4901;G;12:59:56.41;+47:12:20.0;CVn;1.15;1.10;155;15.50;;11.62;10.86;10.62;24.30;E;;;;;;;;2MASX J12595639+4712196,MCG +08-24-019,PGC 044684,SDSS J125956.41+471219.9,SDSS J125956.41+471220.0,SDSS J125956.42+471220.0,UGC 08112;;; +NGC4902;G;13:00:59.73;-14:30:49.1;Vir;2.63;2.37;78;12.00;;9.38;8.56;8.32;22.57;Sb;;;;;;;;2MASX J13005972-1430492,IRAS 12583-1414,MCG -02-33-092,PGC 044847,UGCA 315;;; +NGC4903;G;13:01:22.77;-30:56:05.9;Cen;1.72;1.41;90;13.74;;11.09;10.28;9.77;23.48;Sc;;;;;;;;2MASX J13012275-3056057,ESO 443-030,ESO-LV 443-0300,IRAS 12586-3039,MCG -05-31-013,PGC 044894;;; +NGC4904;G;13:00:58.66;-00:01:39.4;Vir;1.99;1.24;7;13.20;;10.40;9.75;9.50;22.42;Sc;;;;;;;;2MASX J13005866-0001388,IRAS 12584+0014,MCG +00-33-026,PGC 044846,SDSS J130058.65-000139.3,SDSS J130058.65-000139.6,SDSS J130058.66-000139.1,SDSS J130058.66-000139.3,SDSS J130058.66-000139.4,UGC 08121;;Multiple SDSS entries describe this object.; +NGC4905;G;13:01:30.68;-30:52:05.8;Cen;1.55;0.50;174;14.28;;10.94;10.21;9.95;23.94;S0-a;;;;;;;;2MASX J13013067-3052056,ESO 443-031,ESO-LV 443-0310,MCG -05-31-015,PGC 044902;;; +NGC4906;G;13:00:39.77;+27:55:26.0;Com;0.70;0.64;0;15.20;14.08;12.15;11.58;11.24;23.18;E;;;;;;;;2MASX J13003975+2755256,PGC 044799,SDSS J130039.76+275526.0;;; +NGC4907;G;13:00:48.80;+28:09:30.0;Com;1.00;0.90;32;14.60;13.81;11.54;10.86;10.53;23.18;Sb;;;;;;;;2MASX J13004875+2809296,MCG +05-31-089,PGC 044819,SDSS J130048.79+280929.8,SDSS J130048.80+280930.0;;; +NGC4908;G;13:00:54.46;+28:00:27.5;Com;1.19;0.77;97;14.80;13.50;11.33;10.72;10.41;23.45;E;;;;;;;;2MASX J13005445+2800271,MCG +05-31-090,PGC 044832,SDSS J130054.45+280027.3,SDSS J130054.45+280027.4,UGC 08129;;The identifications of IC 4051 and NGC 4908 are often confused.; +NGC4909;G;13:02:01.85;-42:46:17.1;Cen;1.96;1.80;30;13.63;;11.14;10.43;10.13;23.75;Sa;;;;;;;;2MASX J13020184-4246169,ESO 269-035,ESO-LV 269-0350,MCG -07-27-028,PGC 044949;;; +NGC4910;Dup;12:58:01.19;+01:34:33.0;Vir;;;;;;;;;;;;;;;4845;;;;;; +NGC4911;G;13:00:56.08;+27:47:27.0;Com;1.16;0.96;130;13.70;13.33;10.83;10.16;9.84;22.57;SABb;;;;;;;;2MASX J13005609+2747268,IRAS 12584+2803,MCG +05-31-093,PGC 044840,SDSS J130056.05+274727.0,SDSS J130056.05+274727.1,SDSS J130056.06+274727.2,UGC 08128;;; +NGC4912;Other;13:00:46.57;+37:22:39.7;CVn;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC4913;Other;13:00:46.59;+37:20:39.7;CVn;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC4914;G;13:00:42.95;+37:18:55.0;CVn;2.69;1.31;154;12.70;;9.59;8.90;8.65;23.48;E;;;;;;;;2MASX J13004296+3718552,MCG +06-29-014,PGC 044807,UGC 08125;;; +NGC4915;G;13:01:28.22;-04:32:47.5;Vir;1.64;1.55;65;14.00;;9.72;9.02;8.77;22.84;E;;;;;;;;2MASX J13012822-0432470,MCG -01-33-069,PGC 044891,UGCA 318;;; +NGC4916;Other;13:00:54.55;+37:21:39.8;CVn;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC4917;G;13:00:55.57;+47:13:19.6;CVn;1.33;0.81;152;15.00;;11.89;11.17;10.92;23.87;Sb;;;;;;;;2MASX J13005553+4713197,MCG +08-24-023,PGC 044838,SDSS J130055.56+471319.5,SDSS J130055.57+471319.6,UGC 08130;;; +NGC4918;G;13:01:50.62;-04:30:02.0;Vir;0.89;0.33;77;15.36;;12.71;12.05;11.81;23.59;S0-a;;;;;;;;2MASX J13015062-0430020,PGC 044934;;; +NGC4919;G;13:01:17.59;+27:48:32.7;Com;1.11;0.58;142;14.90;;11.78;11.20;10.85;23.99;S0;;;;;;;;2MASX J13011761+2748321,MCG +05-31-097,PGC 044885,SDSS J130117.59+274832.6,SDSS J130117.59+274832.7,UGC 08133;;; +NGC4920;G;13:02:04.15;-11:22:42.3;Vir;1.08;0.83;170;14.00;;;;;22.82;I;;;;;;4134;;2MASX J13020525-1122378,MCG -02-33-094,PGC 044958;;; +NGC4921;G;13:01:26.15;+27:53:09.4;Com;1.96;1.80;135;13.70;;10.23;9.58;9.31;23.64;Sab;;;;;;;;2MASX J13012613+2753095,MCG +05-31-098,PGC 044899,SDSS J130126.11+275309.6,SDSS J130126.12+275309.5,SDSS J130126.13+275309.6,UGC 08134;;; +NGC4922;GPair;13:01:24.90;+29:18:40.0;Com;1.10;;;;;;;;;;;;;;;;;MCG +05-31-099,UGC 08135;;;Diameter of the group inferred by the author. +NGC4922 NED01;G;13:01:24.52;+29:18:30.1;Com;1.23;1.17;137;15.93;14.99;10.85;10.10;9.84;23.15;E;;;;;;;;2MASX J13012450+2918306,MCG +05-31-099 NED01,PGC 044896,SDSS J130124.51+291830.1,UGC 08135 NED01;;; +NGC4922 NED02;G;13:01:25.26;+29:18:49.6;Com;0.58;0.34;123;15.60;14.67;;;;21.90;S?;;;;;;;;IRAS 12590+2934,MCG +05-31-099 NED02,PGC 086794,SDSS J130125.26+291849.4,SDSS J130125.26+291849.5,SDSS J130125.27+291849.4,UGC 08135 NED02;;; +NGC4923;G;13:01:31.80;+27:50:51.1;Com;0.72;0.67;60;14.70;;11.62;10.89;10.72;22.73;E-S0;;;;;;;;2MASX J13013176+2750507,MCG +05-31-101,PGC 044903,SDSS J130131.80+275051.0;;; +NGC4924;G;13:02:12.85;-14:58:11.4;Vir;1.77;1.35;58;13.70;;10.91;10.26;9.97;23.73;S0-a;;;;;;;;2MASX J13021285-1458115,IRAS 12595-1442,MCG -02-33-096,PGC 044977;;; +NGC4925;G;13:02:07.39;-07:42:38.8;Vir;1.18;0.87;119;14.00;;10.88;10.23;9.98;23.51;S0;;;;;;;;2MASX J13020740-0742388,MCG -01-33-074,PGC 044967;;; +NGC4926;G;13:01:53.73;+27:37:28.0;Com;1.23;1.04;64;14.10;;10.84;10.17;9.89;23.23;E-S0;;;;;;;;2MASX J13015375+2737277,MCG +05-31-103,PGC 044938,SDSS J130153.72+273727.9,SDSS J130153.73+273728.0,SDSS J130153.73+273728.2,UGC 08142;;; +NGC4926A;G;13:02:07.88;+27:38:53.9;Com;0.63;0.44;87;15.10;;12.61;12.03;11.74;23.17;S0;;;;;;;;2MASX J13020791+2738539,IRAS 12596+2755,MCG +05-31-107,PGC 044968,SDSS J130207.87+273853.8,SDSS J130207.88+273853.9,UGC 08142 NOTES01;;; +NGC4927;G;13:01:57.60;+28:00:21.2;Com;1.01;0.64;12;14.80;;11.37;10.57;10.37;23.48;E-S0;;;;;;;;2MASX J13015756+2800209,MCG +05-31-104,PGC 044945,SDSS J130157.57+280020.8,SDSS J130157.57+280020.9,SDSS J130157.57+280021.0;;; +NGC4928;G;13:03:00.57;-08:05:05.9;Vir;1.05;0.80;73;13.40;;11.06;10.46;10.27;21.55;Sbc;;;;;;;;2MASX J13030056-0805059,IRAS 13004-0749,MCG -01-33-075,PGC 045052;;; +NGC4929;G;13:02:44.40;+28:02:43.3;Com;0.82;0.68;48;14.90;;11.92;11.11;10.80;23.36;E;;;;;;;;2MASX J13024442+2802434,MCG +05-31-111,PGC 045027,SDSS J130244.39+280243.2,SDSS J130244.40+280243.0;;; +NGC4930;G;13:04:05.27;-41:24:41.7;Cen;3.54;2.84;44;12.35;12.00;9.79;9.06;8.83;23.49;Sbc;;;;;;;;2MASX J13040526-4124417,ESO 323-074,ESO-LV 323-0740,IRAS 13012-4108,MCG -07-27-029,PGC 045155,TYC 7781-612-1;;; +NGC4931;G;13:03:00.88;+28:01:56.9;Com;1.65;0.62;77;14.40;;11.18;10.47;10.31;24.23;S0;;;;;;;;2MASX J13030089+2801573,MCG +05-31-114,PGC 045055,SDSS J130300.87+280156.9,SDSS J130300.88+280157.0,UGC 08154;;; +NGC4932;G;13:02:37.71;+50:26:18.3;CVn;1.44;1.08;1;14.70;;12.04;11.25;11.07;23.88;Sc;;;;;;;;2MASX J13023767+5026181,MCG +09-21-089,PGC 045015,SDSS J130237.71+502618.2,SDSS J130237.71+502618.3,UGC 08150;;; +NGC4933;GTrpl;13:03:57.90;-11:29:52.0;Vir;3.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC4933A;G;13:03:54.73;-11:30:18.2;Vir;0.74;0.74;40;13.00;;9.39;8.69;8.43;22.18;E;;;;;;4173;;MCG -02-33-101,PGC 045142;;; +NGC4933B;G;13:03:56.74;-11:29:53.0;Vir;4.37;1.88;46;15.00;;;;;24.41;S0-a;;;;;;4176;;2MASX J13035697-1129475,MCG -02-33-102,PGC 045146;;; +NGC4933C;G;13:04:01.09;-11:29:26.0;Vir;0.65;0.52;146;17.00;;;;;23.50;Sd;;;;;;;;MCG -02-33-103,PGC 045143;;; +NGC4934;G;13:03:16.24;+28:01:49.5;Com;1.00;0.16;103;15.00;;12.13;11.46;11.15;23.71;S0-a;;;;;;;;2MASX J13031623+2801494,MCG +05-31-115,PGC 045082,SDSS J130316.24+280149.4,UGC 08160;;; +NGC4935;G;13:03:21.23;+14:22:39.0;Vir;1.09;0.92;84;13.90;;11.62;10.76;10.45;22.78;Sb;;;;;;;;2MASX J13032119+1422391,MCG +03-33-023,PGC 045093,SDSS J130321.22+142239.0,UGC 08159;;; +NGC4936;G;13:04:16.89;-30:31:34.5;Cen;2.85;2.43;6;11.76;12.23;8.68;7.98;7.73;23.12;E;;;;;;;;2MASX J13041709-3031347,ESO 443-047,ESO-LV 443-0470,MCG -05-31-028,PGC 045174;;; +NGC4937;*Ass;13:04:51.57;-47:13:09.7;Cen;;;;;;;;;;;;;;;;;;;;Group of stars.; +NGC4938;G;13:02:57.59;+51:19:06.7;CVn;0.87;0.78;44;15.30;;;;;23.41;SBb;;;;;;;;2MASX J13025758+5119070,MCG +09-21-091,PGC 045044,SDSS J130257.58+511906.7,SDSS J130257.59+511906.7,SDSS J130257.59+511906.9;;MCG implies the R.A.=12h00.5m.; +NGC4939;G;13:04:14.39;-10:20:22.6;Vir;5.71;2.30;6;14.81;13.80;9.32;8.69;8.44;23.71;Sbc;;;;;;;;2MASX J13041438-1020225,IRAS 13016-1004,MCG -02-33-104,PGC 045170;;; +NGC4940;G;13:05:00.25;-47:14:12.9;Cen;1.13;1.00;28;13.81;;10.75;10.09;9.79;22.89;Sa;;;;;;;;2MASX J13050026-4714129,ESO 269-042,ESO-LV 269-0420,IRAS 13021-4658,PGC 045235;;; +NGC4941;G;13:04:13.14;-05:33:05.8;Vir;3.29;2.70;23;13.18;12.23;9.09;8.44;8.22;23.09;SABa;;;;;;;;2MASX J13041314-0533058,IRAS 13016-0516,MCG -01-33-077,PGC 045165,UGCA 321;;; +NGC4942;G;13:04:19.11;-07:38:58.0;Vir;1.68;1.22;25;13.50;;11.66;10.97;10.45;23.25;SABc;;;;;;4136;;2MASX J13041910-0738579,IRAS 13017-0723,MCG -01-33-078,PGC 045177;;The IC identification is not certain.; +NGC4943;G;13:03:44.94;+28:05:03.2;Com;0.79;0.54;105;15.60;;12.36;11.62;11.40;23.64;S0;;;;;;;;2MASX J13034495+2805029,PGC 045129,SDSS J130344.94+280503.1,SDSS J130344.94+280503.2,SDSS J130344.95+280503.1;;; +NGC4944;G;13:03:49.95;+28:11:08.6;Com;1.39;0.43;88;13.30;;10.92;10.27;10.00;22.69;Sa;;;;;;;;2MASX J13034994+2811089,MCG +05-31-118,PGC 045133,SDSS J130349.94+281108.5,SDSS J130349.94+281108.6,UGC 08167;;; +NGC4945;G;13:05:27.48;-49:28:05.6;Cen;23.33;4.03;44;9.31;14.40;5.60;4.84;4.48;23.40;SBc;;;;;;;;2MASX J13052727-4928044,C 083,ESO 219-024,ESO-LV 219-0240,IRAS 13025-4911,PGC 045279;;A-M +30' Dec error.; +NGC4945A;G;13:06:33.73;-49:41:26.3;Cen;2.63;1.62;57;13.01;;;;;23.72;Sm;;;;;;;;ESO 219-028,ESO-LV 219-0280,PGC 045380;;; +NGC4946;G;13:05:29.38;-43:35:28.1;Cen;2.00;1.67;135;13.31;;9.91;9.17;8.90;23.76;E;;;;;;;;2MASX J13052940-4335279,ESO 269-045,ESO-LV 269-0450,MCG -07-27-030,PGC 045283;;; +NGC4947;G;13:05:20.20;-35:20:14.7;Cen;2.65;1.34;11;12.74;11.89;9.95;9.28;9.02;23.05;Sb;;;;;;3974;;2MASX J13052020-3520147,ESO 382-005,ESO-LV 382-0050,IRAS 13025-3504,MCG -06-29-006,PGC 045269;;; +NGC4947A;G;13:04:20.83;-35:13:40.0;Cen;1.28;0.51;23;15.06;;14.48;13.61;13.71;23.53;SBm;;;;;;;;2MASX J13042083-3513396,ESO 382-004,ESO-LV 382-0040,MCG -06-29-005A,PGC 045180;;; +NGC4948;G;13:04:55.96;-07:56:51.7;Vir;2.30;0.82;140;13.62;;11.67;10.99;10.75;23.20;SBcd;;;;;;4156;;2MASX J13045595-0756517,MCG -01-33-079,PGC 045224;;"The IC identification is not certain; HOLM 505B is a double star."; +NGC4948A;G;13:05:05.79;-08:09:40.8;Vir;1.44;1.04;180;14.02;;12.75;12.76;11.94;23.24;SBd;;;;;;;;2MASX J13050578-0809407,MCG -01-33-080,PGC 045242;;HOLM 506B is a star.; +NGC4949;G;13:04:17.92;+29:01:46.3;Com;0.72;0.38;102;;14.97;12.71;11.83;11.65;23.40;Sb;;;;;;;;PGC 045161,SDSS J130417.92+290146.2,SDSS J130417.92+290146.3;;; +NGC4950;G;13:05:36.53;-43:30:01.9;Cen;0.92;0.79;99;14.94;;11.74;11.11;10.62;23.48;S0;;;;;;;;2MASX J13053653-4330017,ESO 269-047,ESO-LV 269-0470,MCG -07-27-031,PGC 045294;;; +NGC4951;G;13:05:07.70;-06:29:37.8;Vir;3.14;1.16;90;12.50;;9.94;9.22;8.96;22.96;SABc;;;;;;;;2MASX J13050769-0629377,IRAS 13025-0613,MCG -01-33-081,PGC 045246;;The APM position is west of the nucleus.; +NGC4952;G;13:04:58.38;+29:07:20.1;Com;1.60;0.97;22;13.39;13.01;10.70;9.99;9.76;23.58;E;;;;;4962;;;2MASX J13045839+2907204,MCG +05-31-121,PGC 045233,SDSS J130458.38+290720.0,SDSS J130458.38+290720.1,SDSS J130458.39+290719.9,UGC 08175;;; +NGC4953;G;13:06:10.47;-37:35:08.7;Cen;1.84;0.99;51;14.12;;10.96;10.24;9.98;24.13;S0-a;;;;;;;;2MASX J13061048-3735086,ESO 382-008,ESO-LV 382-0080,MCG -06-29-009,PGC 045349;;; +NGC4954;G;13:02:19.87;+75:24:15.0;Dra;0.99;0.65;68;15.30;;11.11;10.37;10.11;22.98;S0;;;;;4972;;;2MASX J13021987+7524148,IRAS 13009+7540,MCG +13-09-044,PGC 044988,UGC 08157;;; +NGC4955;G;13:06:04.82;-29:45:15.4;Hya;2.34;1.72;15;12.89;;9.85;9.20;8.91;23.87;E;;;;;;;;2MASX J13060479-2945155,ESO 443-062,ESO-LV 443-0620,MCG -05-31-034,PGC 045340;;; +NGC4956;G;13:05:00.94;+35:10:40.9;CVn;1.56;1.52;60;13.50;;10.50;9.82;9.60;22.99;S0;;;;;;;;2MASX J13050097+3510413,MCG +06-29-025,PGC 045236,SDSS J130500.94+351040.9,UGC 08177;;; +NGC4957;G;13:05:12.39;+27:34:11.1;Com;1.22;0.93;97;14.20;;10.98;10.26;9.98;23.29;E;;;;;;;;2MASX J13051235+2734113,MCG +05-31-124,PGC 045253,SDSS J130512.38+273411.2,SDSS J130512.39+273411.1,UGC 08178;;; +NGC4958;G;13:05:48.88;-08:01:13.0;Vir;4.79;1.20;7;12.10;;8.49;7.83;7.61;23.53;S0;;;;;;;;2MASX J13054887-0801129,MCG -01-33-084,PGC 045313,UGCA 323;;; +NGC4959;G;13:05:41.03;+33:10:44.1;CVn;0.74;0.64;178;15.40;;11.81;11.12;10.91;23.37;S0-a;;;;;;;;2MASX J13054103+3310440,MCG +06-29-029,PGC 045301,SDSS J130541.02+331044.0,SDSS J130541.03+331044.0,SDSS J130541.03+331044.1;;; +NGC4960;Dup;13:05:47.57;+27:44:02.9;Com;;;;;;;;;;;;;;;4961;;;;;; +NGC4961;G;13:05:47.57;+27:44:02.9;Com;1.11;0.88;106;13.50;;11.75;10.98;10.85;22.73;Sc;;;;;4960;;;2MASX J13054757+2744027,IRAS 13033+2800,MCG +05-31-126,PGC 045311,SDSS J130547.56+274402.8,SDSS J130547.56+274402.9,UGC 08185;;Identification as NGC 4960 is not certain.; +NGC4962;Dup;13:04:58.38;+29:07:20.1;Com;;;;;;;;;;;;;;;4952;;;;;; +NGC4963;G;13:05:51.95;+41:43:18.9;CVn;0.86;0.81;55;14.20;;11.35;10.65;10.32;22.59;Sa;;;;;;;;2MASX J13055194+4143191,IRAS 13035+4159,MCG +07-27-030,PGC 045315,SDSS J130551.95+414318.8,SDSS J130551.95+414318.9,SDSS J130551.96+414318.8,UGC 08190;;; +NGC4964;G;13:05:24.86;+56:19:22.0;UMa;1.10;0.69;134;14.00;;11.87;11.21;10.94;22.71;SABa;;;;;;;;2MASX J13052487+5619216,MCG +09-22-007,PGC 045278,SDSS J130524.86+561921.9,SDSS J130524.87+561922.0,UGC 08184;;; +NGC4965;G;13:07:09.38;-28:13:41.5;Hya;2.49;2.05;142;12.76;;11.42;10.86;10.50;23.27;SABc;;;;;;;;2MASX J13070938-2813414,ESO 443-070,ESO-LV 443-0700,IRAS 13044-2757,MCG -05-31-036,PGC 045437,UGCA 326;;Confused HIPASS source; +NGC4966;G;13:06:17.31;+29:03:46.3;Com;1.03;0.49;142;14.23;13.48;11.14;10.42;10.25;22.34;SABa;;;;;;;;2MASX J13061725+2903471,MCG +05-31-131,PGC 045358,SDSS J130617.29+290347.4,SDSS J130617.29+290347.5,UGC 08194;;; +NGC4967;G;13:05:36.43;+53:33:51.4;UMa;1.15;0.87;117;14.20;;11.80;11.16;10.98;24.11;E;;;;;;;;2MASX J13053642+5333509,MCG +09-22-005,PGC 045281,SDSS J130536.42+533351.3,SDSS J130536.43+533351.3,SDSS J130536.43+533351.4,SDSS J130536.44+533351.6;;; +NGC4968;G;13:07:05.98;-23:40:37.3;Hya;2.28;1.04;57;13.78;14.79;10.55;9.63;9.48;24.30;S0;;;;;;;;2MASX J13070597-2340373,ESO 508-006,ESO-LV 508-0060,IRAS 13044-2324,MCG -04-31-030,PGC 045426;;; +NGC4969;GPair;13:07:03.00;+13:38:13.0;Vir;0.80;;;;;;;;;;;;;;;;;MCG +02-33-055;;;Diameter of the group inferred by the author. +NGC4969 NED01;G;13:07:02.74;+13:38:14.5;Vir;0.78;0.74;77;14.76;;11.63;11.07;11.02;23.33;E;;;;;;;;2MASX J13070274+1338143,MCG +02-33-055 NED01,PGC 045425;;;B-Mag taken from LEDA +NGC4969 NED02;G;13:07:03.47;+13:38:13.6;Vir;0.68;0.66;82;15.51;;;;;23.66;E-S0;;;;;;;;2MASS J13070346+1338134,MCG +02-33-055 NED02,SDSS J130703.46+133813.2,SDSS J130703.47+133813.2;;;B-Mag taken from LEDA +NGC4970;G;13:07:33.74;-24:00:30.8;Hya;1.79;1.14;138;13.24;;10.06;9.40;9.10;23.31;S0;;;;;;4196;;2MASX J13073375-2400309,ESO 508-009,ESO-LV 508-0090,MCG -04-31-033,PGC 045466;;; +NGC4971;G;13:06:54.96;+28:32:52.9;Com;0.78;0.68;101;15.00;;11.77;11.06;10.75;23.21;E-S0;;;;;;;;2MASX J13065496+2832523,MCG +05-31-134,PGC 045406,SDSS J130654.95+283252.9,SDSS J130654.96+283252.9;;; +NGC4972;Dup;13:02:19.87;+75:24:15.0;Dra;;;;;;;;;;;;;;;4954;;;;;; +NGC4973;G;13:05:32.15;+53:41:06.5;UMa;0.96;0.82;94;15.10;;11.63;10.96;10.70;23.41;E;;;;;;0847;;2MASX J13053216+5341069,MCG +09-22-006,PGC 045280,PGC 045299,SDSS J130532.15+534106.5,SDSS J130532.17+534106.7;;; +NGC4974;G;13:05:55.89;+53:39:33.4;UMa;1.57;1.11;123;14.30;;11.23;10.50;10.22;24.14;E;;;;;;;;2MASX J13055593+5339331,MCG +09-22-009,PGC 045321,SDSS J130555.89+533933.3,SDSS J130555.89+533933.4,SDSS J130555.90+533933.5;;; +NGC4975;G;13:07:50.20;-05:01:02.9;Vir;0.97;0.61;29;15.50;;11.19;10.53;10.30;23.63;S0;;;;;;;;2MASX J13075018-0501027,MCG -01-34-002,PGC 045492;;; +NGC4976;G;13:08:37.53;-49:30:23.1;Cen;5.83;3.27;161;11.05;10.20;7.76;7.12;6.85;23.63;E;;;;;;;;2MASX J13083752-4930230,ESO 219-029,ESO-LV 219-0290,PGC 045562;;; +NGC4977;G;13:06:04.43;+55:39:21.9;UMa;1.05;1.02;45;14.50;;11.03;10.35;10.12;23.25;Sb;;;;;;;;2MASX J13060447+5539218,MCG +09-22-010,PGC 045339,SDSS J130604.42+553921.9,SDSS J130604.43+553921.9,SDSS J130604.44+553921.7,SDSS J130604.45+553921.9,UGC 08196;;; +NGC4978;G;13:07:50.53;+18:24:55.8;Com;1.51;0.63;142;14.40;;10.90;10.19;9.96;23.72;S0-a;;;;;;;;2MASX J13075053+1824560,MCG +03-34-002,PGC 045494,SDSS J130750.52+182455.7,SDSS J130750.52+182455.8,UGC 08212;;; +NGC4979;G;13:07:42.82;+24:48:38.1;Com;0.86;0.74;102;15.30;;12.00;11.28;11.41;23.61;Sb;;;;;;4198;;2MASX J13074277+2448379,MCG +04-31-007,PGC 045484,SDSS J130742.81+244838.1,UGC 08209;;; +NGC4980;G;13:09:10.08;-28:38:30.4;Hya;1.77;0.78;165;13.53;;11.54;10.84;10.85;23.14;Sa;;;;;;;;2MASX J13091008-2838304,ESO 443-075,ESO-LV 443-0750,IRAS 13064-2822,MCG -05-31-037,PGC 045596;;; +NGC4981;G;13:08:48.74;-06:46:39.1;Vir;2.70;1.97;155;12.10;;9.43;8.79;8.49;22.72;Sbc;;;;;;;;2MASX J13084873-0646392,IRAS 13062-0630,MCG -01-34-003,PGC 045574;;; +NGC4982;Other;13:08:46.14;-10:35:19.2;Vir;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC4983;G;13:08:27.29;+28:19:13.8;Com;1.04;0.57;122;14.90;;11.68;11.02;10.63;23.48;SBa;;;;;;;;2MASX J13082728+2819139,MCG +05-31-138,PGC 045542,SDSS J130827.28+281913.7,SDSS J130827.28+281913.8,SDSS J130827.29+281913.8;;; +NGC4984;G;13:08:57.23;-15:30:58.7;Vir;3.37;2.50;45;12.00;;8.73;8.02;7.74;23.55;S0-a;;;;;;;;2MASX J13085721-1530586,IRAS 13062-1514,MCG -02-34-004,PGC 045585;;; +NGC4985;G;13:08:12.10;+41:40:34.8;CVn;1.15;0.82;126;15.10;;11.48;10.73;10.53;23.77;S0;;;;;;;;2MASX J13081207+4140349,MCG +07-27-032,PGC 045522,SDSS J130812.09+414034.8,SDSS J130812.10+414034.8,UGC 08218;;; +NGC4986;G;13:08:24.46;+35:12:23.2;CVn;1.55;0.93;82;14.20;;11.82;11.21;10.86;23.44;SBb;;;;;;;;2MASX J13082447+3512229,MCG +06-29-044,PGC 045538,SDSS J130824.45+351223.1,UGC 08221;;; +NGC4987;G;13:07:59.06;+51:55:45.5;CVn;1.24;0.71;33;14.60;;11.28;10.57;10.49;23.65;E;;;;;;;;2MASX J13075908+5155450,MCG +09-22-015,PGC 045502,SDSS J130759.04+515545.4,SDSS J130759.05+515545.7,SDSS J130759.06+515545.4,SDSS J130759.06+515545.5,SDSS J130759.06+515545.7,UGC 08216;;; +NGC4988;G;13:09:54.38;-43:06:20.6;Cen;1.86;0.64;26;13.86;;11.29;10.65;10.28;23.87;S0-a;;;;;;;;2MASX J13095440-4306204,2MASX J13095623-4306274,ESO 269-055,ESO-LV 269-0550,IRAS 13070-4250,MCG -07-27-037,PGC 045671;;; +NGC4989;G;13:09:16.05;-05:23:47.1;Vir;1.41;0.55;175;14.00;;10.15;9.46;9.24;23.83;S0;;;;;;;;2MASX J13091607-0523469,MCG -01-34-005,PGC 045606;;; +NGC4990;G;13:09:17.29;-05:16:22.1;Vir;0.90;0.81;48;14.38;13.82;11.28;10.63;10.37;22.79;S0;;;;;;;;2MASX J13091728-0516219,IRAS 13067-0500,MCG -01-34-004,PGC 045608;Cocoon Galaxy;; +NGC4991;G;13:09:15.11;+02:20:51.6;Vir;0.59;0.48;101;15.50;;12.88;12.27;12.18;22.97;SBb;;;;;;;;2MASX J13091510+0220513,PGC 045604,SDSS J130915.10+022051.5,SDSS J130915.11+022051.5,SDSS J130915.11+022051.6;;; +NGC4992;G;13:09:05.60;+11:38:03.0;Vir;1.06;0.60;11;14.60;;11.23;10.51;10.18;23.03;SBa;;;;;;;;2MASX J13090558+1138026,MCG +02-34-001,PGC 045593,SDSS J130905.59+113802.8,SDSS J130905.60+113802.9,UGC 08232;;; +NGC4993;G;13:09:47.70;-23:23:02.0;Hya;1.55;1.35;173;13.34;;10.18;9.51;9.22;23.16;E-S0;;;;;4994;;;2MASX J13094770-2323017,ESO 508-018,ESO-LV 508-0180,MCG -04-31-039,PGC 045657;;; +NGC4994;Dup;13:09:47.70;-23:23:02.0;Hya;;;;;;;;;;;;;;;4993;;;;;; +NGC4995;G;13:09:40.65;-07:50:00.3;Vir;2.43;1.49;99;12.00;;9.11;8.39;8.23;22.23;SABb;;;;;;;;2MASX J13094065-0750002,IRAS 13070-0734,MCG -01-34-007,PGC 045643,UGCA 329;;; +NGC4996;G;13:09:31.89;+00:51:25.3;Vir;1.81;1.36;16;14.40;;;;;24.33;S0-a;;;;;;;;MCG +00-34-009,PGC 045629,SDSS J130931.88+005125.2,SDSS J130931.89+005125.3,UGC 08235;;; +NGC4997;G;13:09:51.70;-16:30:55.7;Vir;1.61;0.89;85;13.00;;;;11.52;23.74;E-S0;;;;;;;;2MASX J13095347-1631018,MCG -03-34-005,PGC 045667;;; +NGC4998;G;13:08:10.16;+50:39:49.5;CVn;1.02;0.87;19;15.20;;;;;23.57;Sc;;;;;;;;2MASX J13081011+5039491,MCG +09-22-017,PGC 045537,SDSS J130810.15+503949.4;;; +NGC4999;G;13:09:33.13;+01:40:23.0;Vir;2.50;2.11;98;13.50;;9.93;9.32;8.94;23.90;Sb;;;;;;;;2MASX J13093312+0140233,IRAS 13069+0156,MCG +00-34-010,PGC 045632,SDSS J130933.13+014023.0,UGC 08236;;; +NGC5000;G;13:09:47.49;+28:54:25.0;Com;1.28;1.02;63;14.00;13.41;11.38;10.64;10.15;23.08;Sbc;;;;;;;;2MASX J13094745+2854250,IRAS 13073+2910,MCG +05-31-144,PGC 045658,SDSS J130947.48+285424.9,SDSS J130947.48+285425.0,SDSS J130947.49+285425.0,UGC 08241;;; +NGC5001;G;13:09:33.11;+53:29:39.4;UMa;1.15;0.42;157;14.60;;11.51;10.78;10.43;23.75;SBb;;;;;;;;2MASX J13093325+5329391,IRAS 13074+5345,MCG +09-22-022,PGC 045631,SDSS J130933.10+532939.3,UGC 08243;;; +NGC5002;G;13:10:38.01;+36:38:02.1;CVn;1.39;0.71;179;14.70;;13.55;13.17;12.95;23.55;Sm;;;;;;;;2MASX J13103818+3638031,MCG +06-29-051,PGC 045728,SDSS J131038.00+363802.1,SDSS J131038.24+363804.3,UGC 08254;;Multiple SDSS entries describe this galaxy.; +NGC5003;G;13:08:37.91;+43:44:15.1;CVn;1.03;0.77;148;15.30;;11.34;10.63;10.30;23.64;Sa;;;;;;;;2MASX J13083783+4344152,MCG +07-27-033,PGC 045559,SDSS J130837.91+434415.0,SDSS J130837.91+434415.1,UGC 08228;;; +NGC5004;G;13:11:01.55;+29:38:12.1;Com;1.33;0.96;167;13.89;13.15;10.88;10.20;9.87;23.48;S0;;;;;;;;2MASX J13110159+2938120,MCG +05-31-149,PGC 045756,SDSS J131101.55+293812.1,SDSS J131101.56+293812.0,UGC 08260;;; +NGC5004A;G;13:11:01.70;+29:34:41.8;Com;1.25;0.55;173;14.60;14.20;11.61;10.88;10.72;23.83;Sab;;;;;;;;2MASX J13110168+2934420,IRAS 13086+2950,MCG +05-31-150,PGC 045757,SDSS J131101.71+293442.0,SDSS J131101.71+293442.1,UGC 08259;;; +NGC5004B;G;13:10:47.65;+29:42:35.6;Com;0.81;0.48;175;15.30;14.67;12.84;11.96;11.82;23.15;SBb;;;;;;4210;;2MASX J13104761+2942349,IRAS F13083+2958,MCG +05-31-148,PGC 045742,SDSS J131047.64+294235.6;;; +NGC5005;G;13:10:56.23;+37:03:33.1;CVn;4.82;1.52;70;14.67;13.67;7.46;6.73;6.44;21.82;SABb;;;;;;;;2MASX J13105631+3703321,C 029,IRAS 13086+3719,MCG +06-29-052,PGC 045749,UGC 08256;;; +NGC5006;G;13:11:45.77;-19:15:42.3;Vir;2.07;1.66;2;13.33;;10.26;9.56;9.27;23.70;S0-a;;;;;;;;2MASX J13114576-1915421,ESO 576-006,ESO-LV 576-0060,MCG -03-34-011,PGC 045806;;; +NGC5007;G;13:09:14.39;+62:10:30.1;UMa;0.93;0.57;136;14.20;;11.32;10.65;10.33;22.75;E-S0;;;;;;;;2MASX J13091431+6210299,MCG +10-19-042,PGC 045605,SDSS J130914.38+621030.1,SDSS J130914.38+621030.2,SDSS J130914.39+621029.9,SDSS J130914.39+621030.1,UGC 08240;;; +NGC5008;G;14:10:57.24;+25:29:50.0;Boo;1.07;0.83;165;14.80;;11.70;10.97;10.61;23.08;Sc;;;;;;4381;;2MASX J14105726+2529502,MCG +04-33-042,PGC 050629,SDSS J141057.23+252950.0,SDSS J141057.24+252950.0,UGC 09073;;; +NGC5009;G;13:10:47.03;+50:05:34.3;CVn;1.08;0.62;67;15.60;;12.16;11.41;11.25;23.70;Sb;;;;;;;;2MASX J13104698+5005301,MCG +08-24-061,PGC 045739,SDSS J131047.02+500534.5,SDSS J131047.03+500534.3,SDSS J131047.04+500534.3,UGC 08258;;; +NGC5010;G;13:12:26.35;-15:47:52.3;Vir;1.00;0.75;115;14.30;;10.62;9.74;9.34;23.16;S0-a;;;;;;;;2MASX J13122633-1547526,IRAS 13097-1531,MCG -03-34-015,PGC 045868;;; +NGC5011;G;13:12:51.86;-43:05:46.4;Cen;2.92;2.43;154;12.14;11.33;9.08;8.39;8.14;23.59;E;;;;;;;;2MASX J13125184-4305462,ESO 269-065,ESO-LV 269-0650,MCG -07-27-042,PGC 045898;;; +NGC5011A;G;13:12:09.72;-43:18:28.3;Cen;1.58;0.81;92;14.36;;11.14;10.46;10.15;23.50;SABc;;;;;;;;2MASX J13120971-4318283,ESO 269-063,ESO-LV 269-0630,MCG -07-27-041,PGC 045847;;; +NGC5012;G;13:11:37.04;+22:54:55.8;Com;2.64;1.44;10;13.60;;9.75;9.02;8.76;22.75;Sc;;;;;;;;2MASX J13113705+2254556,IRAS 13091+2310,MCG +04-31-012,PGC 045795,SDSS J131137.03+225455.7,UGC 08270;;Position in 1987AnTok..212.251T is for a superposed star.; +NGC5013;G;13:12:07.35;+03:11:56.6;Vir;0.74;0.51;148;15.00;;12.59;11.82;11.70;22.99;SBbc;;;;;;;;2MASX J13120735+0311564,MCG +01-34-007,PGC 045838,SDSS J131207.15+031156.4,SDSS J131207.35+031156.5;;; +NGC5014;G;13:11:31.22;+36:16:55.7;CVn;2.11;0.73;100;13.50;;10.97;10.30;10.11;23.36;Sa;;;;;;;;2MASX J13113119+3616556,IRAS 13092+3632,MCG +06-29-055,PGC 045787,SDSS J131131.22+361655.6,SDSS J131131.22+361655.7,UGC 08271;;; +NGC5015;G;13:12:22.89;-04:20:11.3;Vir;2.00;0.79;62;12.90;;10.36;9.67;9.49;23.23;Sa;;;;;;;;2MASX J13122290-0420111,IRAS 13097-0404,MCG -01-34-012,PGC 045862;;; +NGC5016;G;13:12:06.68;+24:05:42.0;Com;1.57;1.14;56;13.18;12.56;10.68;10.01;9.72;22.55;SABb;;;;;;;;2MASX J13120668+2405421,IRAS 13096+2421,MCG +04-31-013,PGC 045836,SDSS J131206.67+240542.0,SDSS J131206.68+240542.0,UGC 08279;;; +NGC5017;G;13:12:54.50;-16:45:57.0;Vir;1.50;1.29;29;13.20;;10.24;9.55;9.27;23.29;E;;;;;;;;2MASX J13125449-1645571,MCG -03-34-016,PGC 045900;;; +NGC5018;G;13:13:01.03;-19:31:05.5;Vir;3.49;2.17;99;11.71;;8.67;8.04;7.73;23.24;E;;;;;;;;2MASX J13130099-1931058,ESO 576-010,ESO-LV 576-0100,IRAS 13103-1915,MCG -03-34-017,PGC 045908,UGCA 335;;; +NGC5019;G;13:12:42.39;+04:43:46.8;Vir;0.85;0.72;101;14.50;;12.16;11.58;11.42;22.79;SABc;;;;;;;;2MASX J13124237+0443465,IRAS 13101+0459,MCG +01-34-009,PGC 045885,SDSS J131242.37+044346.8,SDSS J131242.38+044346.8,SDSS J131242.39+044346.8,UGC 08288;;; +NGC5020;G;13:12:39.87;+12:35:59.1;Vir;2.69;2.42;85;13.40;;10.02;9.34;9.08;24.02;Sbc;;;;;;;;2MASX J13123987+1235590,IRAS 13102+1251,MCG +02-34-003,PGC 045883,SDSS J131239.87+123559.1,UGC 08289;;; +NGC5021;G;13:12:06.27;+46:11:46.1;CVn;1.49;0.60;78;14.30;;10.74;10.01;10.14;23.16;SBb;;;;;;;;2MASX J13120529+4611469,2MASX J13120625+4611458,IRAS 13099+4627,MCG +08-24-084,PGC 045834,SDSS J131206.27+461146.0,SDSS J131206.27+461146.1,UGC 08284;;; +NGC5022;G;13:13:30.79;-19:32:47.9;Vir;2.46;0.49;19;13.72;;10.53;9.84;9.52;23.45;Sbc;;;;;;;;2MASX J13133078-1932477,ESO 576-014,ESO-LV 576-0140,MCG -03-34-021,PGC 045952,PGC 045953;;; +NGC5023;G;13:12:12.60;+44:02:28.4;CVn;6.22;0.78;28;13.20;;10.65;10.03;9.74;23.84;Sc;;;;;;;;2MASX J13121179+4402168,MCG +07-27-043,PGC 045849,UGC 08286;;; +NGC5024;GCl;13:12:55.23;+18:10:08.8;Com;9.00;;;8.95;7.79;;;;;;;;;053;;;;MWSC 2094;;; +NGC5025;G;13:12:44.75;+31:48:33.8;CVn;2.07;0.51;59;14.60;;11.51;10.79;10.56;23.82;Sb;;;;;;;;2MASX J13124475+3148335,MCG +05-31-155,PGC 045887,SDSS J131244.75+314833.7,SDSS J131244.75+314833.8,UGC 08292;;Position in 1995ApJS...97...77D is for northeast end of galaxy.; +NGC5026;G;13:14:13.64;-42:57:40.6;Cen;3.52;1.79;50;12.48;13.42;9.08;8.40;8.13;23.74;Sa;;;;;;;;2MASX J13141365-4257404,ESO 269-073,ESO-LV 269-0730,MCG -07-27-048,PGC 046023;;; +NGC5027;G;13:13:20.99;+06:03:40.6;Vir;1.10;1.01;0;14.80;;11.74;11.15;10.78;23.75;Sb;;;;;;;;2MASX J13132098+0603401,IRAS 13108+0619,MCG +01-34-010,PGC 045936,SDSS J131320.83+060341.4,SDSS J131320.98+060340.5,SDSS J131320.98+060340.6,SDSS J131320.99+060340.6,UGC 08297;;; +NGC5028;G;13:13:45.86;-13:02:32.9;Vir;2.12;1.38;118;14.00;;10.02;9.34;9.08;24.52;E;;;;;;;;2MASX J13134588-1302324,MCG -02-34-011,PGC 045976;;; +NGC5029;G;13:12:37.59;+47:03:47.8;CVn;1.52;0.93;147;14.50;;10.71;10.02;9.77;23.84;E;;;;;;;;2MASX J13123755+4703480,MCG +08-24-087,PGC 045880,SDSS J131237.59+470347.8,SDSS J131237.60+470347.8,UGC 08293;;; +NGC5030;G;13:13:54.15;-16:29:27.4;Vir;1.78;1.16;173;14.20;;10.69;10.01;9.81;23.82;S0-a;;;;;;;;2MASX J13135414-1629274,MCG -03-34-023,PGC 045991;;; +NGC5031;G;13:14:03.22;-16:07:23.2;Vir;1.89;0.30;110;14.00;;10.15;9.52;9.26;24.18;S0-a;;;;;;;;2MASX J13140323-1607234,MCG -03-34-024,PGC 046006;;; +NGC5032;G;13:13:26.95;+27:48:08.6;Com;1.95;1.08;18;13.60;;10.74;10.04;9.72;23.47;Sb;;;;;;;;2MASX J13132694+2748086,MCG +05-31-160,PGC 045947,SDSS J131326.94+274808.5,SDSS J131326.95+274808.6,UGC 08300;;; +NGC5033;G;13:13:27.47;+36:35:38.2;CVn;9.84;4.58;172;11.01;12.03;7.92;7.24;6.96;23.78;Sc;;;;;;;;2MASX J13132753+3635371,IRAS 13111+3651,MCG +06-29-062,PGC 045948,SDSS J131327.49+363538.0,UGC 08307;;; +NGC5034;G;13:12:19.01;+70:38:57.7;UMi;0.89;0.65;20;14.10;;11.98;11.38;11.06;22.57;Sbc;;;;;;;;2MASX J13121901+7038576,IRAS 13107+7054,MCG +12-13-001,PGC 045859,UGC 08295;;; +NGC5035;G;13:14:49.23;-16:29:33.7;Vir;1.56;0.99;171;13.90;;10.57;9.91;9.62;23.34;S0-a;;;;;;;;2MASX J13144922-1629331,MCG -03-34-028,PGC 046068;;; +NGC5036;G;13:14:42.84;-04:10:42.9;Vir;0.69;0.57;73;14.99;;12.13;11.45;11.15;23.26;E-S0;;;;;;;;2MASX J13144283-0410424,PGC 046057;;; +NGC5037;G;13:14:59.37;-16:35:25.1;Vir;2.02;0.47;44;13.00;;9.56;8.89;8.60;22.74;Sa;;;;;;;;2MASX J13145938-1635251,IRAS 13123-1619,MCG -03-34-029,PGC 046078;;; +NGC5038;G;13:15:02.13;-15:57:06.5;Vir;1.79;0.38;94;13.90;;10.54;9.83;9.53;24.09;S0;;;;;;;;2MASX J13150213-1557061,IRAS 13123-1541,MCG -03-34-031,PGC 046081;;; +NGC5039;G;13:14:51.92;-04:09:29.4;Vir;0.55;0.19;133;16.98;;;;;24.69;Sa;;;;;;;;2MASX J13145192-0409294,PGC 046064;;; +NGC5040;G;13:13:32.64;+51:15:30.1;CVn;1.03;0.48;70;14.30;;11.21;10.57;10.29;23.09;Sab;;;;;;;;2MASX J13133267+5115300,MCG +09-22-031,PGC 045945,SDSS J131332.63+511530.0,SDSS J131332.63+511530.1,SDSS J131332.64+511530.1,SDSS J131332.64+511530.3;;; +NGC5041;G;13:14:32.46;+30:42:20.8;Com;1.26;0.97;143;14.20;;11.57;10.94;10.67;23.15;Sc;;;;;;;;2MASX J13143246+3042205,IRAS 13122+3058,MCG +05-31-162,PGC 046046,SDSS J131432.45+304220.8,SDSS J131432.46+304220.8,UGC 08319;;; +NGC5042;G;13:15:31.02;-23:59:02.6;Hya;4.15;2.20;19;12.49;;10.33;9.75;9.40;23.88;SABc;;;;;;;;2MASX J13153130-2358565,ESO 508-031,ESO-LV 508-0310,IRAS 13127-2343,MCG -04-31-043,PGC 046126,UGCA 340;;; +NGC5043;OCl;13:16:14.66;-60:02:43.8;Cen;5.52;;;;;;;;;;;;;;;;;MWSC 2099;;; +NGC5044;G;13:15:23.97;-16:23:07.9;Vir;3.66;3.17;41;11.90;;8.67;7.99;7.71;23.27;E;;;;;;;;2MASX J13152396-1623079,MCG -03-34-034,PGC 046115,UGCA 341;;; +NGC5045;*Ass;13:28:35.09;-63:30:31.3;Cen;9.30;;;;;;;;;;;;;;5155;;;MWSC 2096;;This is a Milky Way star cloud. NGC RA for NGC 5045 is -10m in error.; +NGC5046;G;13:15:45.12;-16:19:36.6;Vir;1.02;0.85;42;14.30;;11.14;10.46;10.22;23.00;E;;;;;;;;2MASX J13154512-1619360,MCG -03-34-035,PGC 046141;;; +NGC5047;G;13:15:48.52;-16:31:08.0;Vir;2.86;0.29;84;13.70;;10.21;9.59;9.42;24.44;S0;;;;;;;;2MASX J13154852-1631080,MCG -03-34-036,PGC 046150;;; +NGC5048;G;13:16:08.38;-28:24:37.9;Hya;1.57;0.92;43;13.74;;10.63;9.89;9.63;23.65;E-S0;;;;;;;;2MASX J13160837-2824376,ESO 443-087,ESO-LV 443-0870,MCG -05-31-041,PGC 046179;;; +NGC5049;G;13:15:59.30;-16:23:49.8;Vir;2.01;0.40;115;13.80;;10.40;9.73;9.52;23.89;S0;;;;;;;;2MASX J13155930-1623500,MCG -03-34-037,PGC 046166,UGCA 343;;; +NGC5050;G;13:15:41.73;+02:52:44.3;Vir;1.40;0.44;32;14.70;;11.11;10.39;10.17;23.60;S0-a;;;;;;;;2MASX J13154175+0252448,MCG +01-34-012,PGC 046138,SDSS J131541.72+025244.2,UGC 08329;;; +NGC5051;G;13:16:20.10;-28:17:08.5;Hya;1.65;0.71;48;14.02;;10.64;9.95;9.62;23.16;SABb;;;;;;;;2MASX J13162008-2817085,ESO 444-001,ESO-LV 444-0010,IRAS 13135-2801,MCG -05-31-042,PGC 046194;;; +NGC5052;G;13:15:34.89;+29:40:33.9;Com;1.37;1.02;150;14.60;13.57;11.37;10.61;10.56;23.74;S0-a;;;;;;;;2MASX J13153485+2940338,MCG +05-31-165,PGC 046131,SDSS J131534.88+294033.8,SDSS J131534.89+294033.9,UGC 08330;;; +NGC5053;GCl;13:16:26.99;+17:41:51.9;Com;4.80;;;;9.96;;;;;;;;;;;;;MWSC 2101;;; +NGC5054;G;13:16:58.49;-16:38:05.5;Vir;5.04;2.90;171;11.30;;8.52;7.82;7.59;23.45;Sbc;;;;;;;;2MASX J13165848-1638054,IRAS 13142-1622,MCG -03-34-039,PGC 046247,UGCA 344;;; +NGC5055;G;13:15:49.33;+42:01:45.4;CVn;11.83;7.16;103;9.34;8.59;6.57;5.83;5.61;23.04;Sbc;;;;063;;;;2MASX J13154932+4201454,IRAS 13135+4217,MCG +07-27-054,PGC 046153,SDSS J131549.26+420145.8,UGC 08334;Sunflower Galaxy;; +NGC5056;G;13:16:12.32;+30:57:01.2;Com;1.62;0.82;1;13.60;;11.13;9.85;9.99;22.92;SABc;;;;;;;;2MASX J13161233+3057009,IRAS 13138+3112,MCG +05-31-166,PGC 046180,SDSS J131612.32+305701.1,UGC 08337;;; +NGC5057;G;13:16:27.77;+31:01:53.4;Com;1.31;0.99;0;14.60;;11.46;10.72;10.50;23.74;S0;;;;;;;;2MASX J13162775+3101531,MCG +05-31-169,PGC 046202,SDSS J131627.76+310153.3,SDSS J131627.77+310153.4,UGC 08342;;; +NGC5058;G;13:16:52.31;+12:32:53.6;Vir;0.76;0.56;13;14.60;;12.59;11.95;11.46;22.13;Scd;;;;;;;;2MASX J13165233+1232539,MCG +02-34-006,PGC 046241,SDSS J131652.31+123253.6,UGC 08345;;; +NGC5059;G;13:16:58.46;+07:50:40.2;Vir;1.12;0.41;6;15.50;;12.26;11.59;11.27;23.75;Sc;;;;;;;;2MASX J13165848+0750407,PGC 046244,SDSS J131658.45+075040.1,SDSS J131658.46+075040.1,UGC 08344;;; +NGC5060;G;13:17:16.22;+06:02:14.8;Vir;1.17;0.95;61;14.20;;11.46;10.64;10.32;23.14;SBb;;;;;;;;2MASX J13171622+0602149,IRAS 13147+0618,MCG +01-34-015,PGC 046278,SDSS J131716.21+060214.8,UGC 08351;;; +NGC5061;G;13:18:05.07;-26:50:14.0;Hya;3.75;3.05;109;11.18;10.41;8.19;7.53;7.29;22.94;E;;;;;;;;2MASX J13180505-2650139,ESO 508-038,ESO-LV 508-0380,MCG -04-31-048,PGC 046330;;; +NGC5062;G;13:18:23.62;-35:27:31.2;Cen;2.69;1.18;132;13.19;;9.79;9.07;8.82;24.10;S0;;;;;;;;2MASX J13182362-3527311,ESO 382-035,ESO-LV 382-0350,MCG -06-29-026,PGC 046351;;; +NGC5063;G;13:18:25.71;-35:21:08.9;Cen;2.02;1.63;146;13.27;;10.01;9.20;9.34;23.39;Sa;;;;;;;;2MASX J13182572-3521091,ESO 382-036,ESO-LV 382-0360,MCG -06-29-027,PGC 046357;;; +NGC5064;G;13:18:59.93;-47:54:31.2;Cen;2.70;1.40;36;12.81;11.61;9.09;8.38;8.01;23.50;Sb;;;;;;;;2MASX J13185991-4754311,ESO 220-002,ESO-LV 220-0020,IRAS 13160-4738,PGC 046409;;Confused HIPASS source; +NGC5065;G;13:17:30.61;+31:05:33.7;Com;1.22;0.73;87;14.30;;11.94;11.27;10.98;23.00;SABc;;;;;;;;2MASX J13173061+3105336,IRAS 13151+3121,MCG +05-31-170,PGC 046293,UGC 08356;;; +NGC5066;G;13:18:28.45;-10:14:02.0;Vir;0.80;0.56;0;14.00;;12.09;11.40;11.22;22.23;Sa;;;;;5069;;;2MASX J13182846-1014021,MCG -02-34-020,PGC 046360;;; +NGC5067;**;13:18:27.76;-10:08:43.0;Vir;;;;;;;;;;;;;;;;;;;;; +NGC5068;G;13:18:54.81;-21:02:20.8;Vir;7.48;6.70;138;10.53;10.01;8.36;7.87;7.55;23.65;Sc;;;;;;;;2MASX J13185480-2102207,ESO 576-029,ESO-LV 576-0290,IRAS 13161-2046,MCG -03-34-046,PGC 046400,UGCA 345;;; +NGC5069;Dup;13:18:28.45;-10:14:02.0;Vir;;;;;;;;;;;;;;;5066;;;;;; +NGC5070;G;13:19:12.56;-12:32:23.6;Vir;1.17;0.98;90;14.00;;11.07;10.36;10.12;23.55;E-S0;;;;;5072;;;2MASX J13191256-1232232,MCG -02-34-022,PGC 046432;;; +NGC5071;G;13:18:37.19;+07:56:07.9;Vir;0.77;0.57;142;15.50;;12.17;11.26;10.93;23.71;S0;;;;;;;;2MASX J13183717+0756079,PGC 046375,SDSS J131837.18+075607.9,SDSS J131837.19+075607.9;;; +NGC5072;Dup;13:19:12.56;-12:32:23.6;Vir;;;;;;;;;;;;;;;5070;;;;;; +NGC5073;G;13:19:20.65;-14:50:40.3;Vir;3.78;0.56;149;13.46;;10.14;9.44;9.16;23.62;SBc;;;;;;;;2MASX J13192062-1450402,IRAS 13167-1435,MCG -02-34-025,PGC 046441,UGCA 346;;; +NGC5074;G;13:18:25.77;+31:28:08.7;CVn;0.82;0.41;145;14.70;;13.09;12.57;12.38;22.23;SABb;;;;;;;;2MASX J13182578+3128088,MCG +05-31-172,PGC 046354;;; +NGC5075;G;13:19:06.25;+07:49:51.7;Vir;1.02;0.76;57;15.10;;11.86;11.21;10.98;23.97;E;;;;;;;;2MASX J13190624+0749513,PGC 046424,SDSS J131906.24+074951.6;;; +NGC5076;G;13:19:30.40;-12:44:27.1;Vir;1.35;0.97;31;13.00;;11.13;10.42;10.12;23.25;S0-a;;;;;;;;2MASX J13193039-1244272,MCG -02-34-026,PGC 046453;;; +NGC5077;G;13:19:31.67;-12:39:25.1;Vir;2.65;2.07;4;13.87;12.85;9.20;8.49;8.22;23.30;E;;;;;;;;2MASX J13193162-1239252,MCG -02-34-027,PGC 046456,UGCA 347;;; +NGC5078;G;13:19:49.98;-27:24:37.4;Hya;2.56;0.62;147;11.51;;8.21;7.46;7.12;22.26;Sa;;;;;;;;2MASX J13195002-2724362,ESO 508-048,ESO-LV 508-0480,IRAS 13170-2708,MCG -04-32-001,PGC 046490;;Confused HIPASS source; +NGC5079;G;13:19:38.05;-12:41:56.5;Vir;1.38;0.89;31;12.00;;11.22;10.35;10.09;22.15;SBbc;;;;;;;;2MASX J13193805-1241562,IRAS 13169-1226,MCG -02-34-030,PGC 046473;;; +NGC5080;G;13:19:19.22;+08:25:44.9;Vir;1.31;1.17;93;14.60;;10.84;10.20;9.96;23.58;S0;;;;;;;;2MASX J13191921+0825443,MCG +02-34-007,PGC 046440,SDSS J131919.22+082544.9;;; +NGC5081;G;13:19:08.24;+28:30:24.9;Com;1.90;0.73;101;14.30;;11.12;10.28;10.07;23.64;Sb;;;;;;;;2MASX J13190823+2830244,MCG +05-31-174,PGC 046427,SDSS J131908.23+283024.9,SDSS J131908.24+283024.9,UGC 08366;;; +NGC5082;G;13:20:40.03;-43:41:59.8;Cen;1.73;1.04;33;13.78;;9.98;9.17;8.96;23.67;S0;;;;;;;;2MASX J13204003-4341598,ESO 269-089,ESO-LV 269-0890,MCG -07-27-053,PGC 046566;;; +NGC5083;G;13:19:03.10;+39:35:21.6;CVn;1.09;0.83;136;15.40;;12.11;11.25;11.13;23.68;Sc;;;;;;;;2MASX J13190306+3935258,IRAS 13167+3951,MCG +07-27-059,PGC 046413,SDSS J131903.10+393521.5,SDSS J131903.10+393521.6,UGC 08367;;; +NGC5084;G;13:20:16.92;-21:49:39.3;Vir;9.93;2.46;80;11.15;12.21;8.01;7.26;7.06;25.22;S0;;;;;;;;2MASX J13201692-2149392,ESO 576-033,ESO-LV 576-0330,MCG -04-32-004,PGC 046525;;Confused and extended HIPASS source; +NGC5085;G;13:20:17.75;-24:26:24.5;Hya;4.06;3.26;42;11.99;11.12;;;;25.07;Sc;;;;;;;;2MASX J13201659-2426464,ESO 508-050,ESO-LV 508-0500,IRAS 13175-2410,MCG -04-32-005,PGC 046531,UGCA 349;;Extended HIPASS source; +NGC5086;**;13:20:59.41;-43:44:00.7;Cen;;;;;;;;;;;;;;;;;;ESO 270-001,ESO-LV 270-0010;;; +NGC5087;G;13:20:24.96;-20:36:39.6;Vir;2.99;2.52;6;11.96;12.08;8.80;8.05;7.82;23.35;E-S0;;;;;;;;2MASX J13202496-2036396,ESO 576-035,ESO-LV 576-0350,IRAS 13177-2021,MCG -03-34-050,PGC 046541,UGCA 350;;; +NGC5088;G;13:20:20.25;-12:34:18.4;Vir;1.86;0.51;180;12.90;;10.86;10.17;10.08;22.43;SABb;;;;;;;;2MASX J13202023-1234185,IRAS 13176-1218,MCG -02-34-034,PGC 046535;;HOLM 515B is a star.; +NGC5089;G;13:19:39.36;+30:15:23.6;Com;0.95;0.65;122;14.40;;11.70;11.27;10.87;22.77;Sb;;;;;;;;2MASX J13193929+3015227,IRAS 13173+3031,MCG +05-31-175,PGC 046477,SDSS J131939.35+301523.6,UGC 08371;;; +NGC5090;G;13:21:12.82;-43:42:16.4;Cen;3.51;2.76;106;12.59;11.51;8.58;7.80;7.57;24.15;E;;;;;;;;2MASX J13211286-4342168,ESO 270-002,ESO-LV 270-0020,MCG -07-27-054,PGC 046618;;; +NGC5090A;G;13:19:21.11;-43:38:57.8;Cen;1.91;0.73;142;13.99;;10.33;9.65;9.37;24.50;S0;;;;;;;;2MASX J13192110-4338578,ESO 269-084,ESO-LV 269-0840,MCG -07-27-051,PGC 046442;;; +NGC5090B;G;13:20:17.52;-43:51:52.8;Cen;2.39;0.85;128;14.03;;;;;23.97;SBb;;;;;;;;2MASX J13201750-4351525,ESO 269-088,ESO-LV 269-0880,MCG -07-27-052,PGC 046528;;; +NGC5091;G;13:21:17.72;-43:43:10.8;Cen;2.15;1.33;122;13.94;13.35;11.42;10.64;10.33;23.82;Sb;;;;;;;;ESO 270-004,ESO-LV 270-0040,MCG -07-27-055,PGC 046626;;; +NGC5092;G;13:19:51.53;+22:59:59.6;Com;1.01;0.96;50;14.70;;10.90;10.24;9.94;23.22;E;;;;;;;;2MASX J13195150+2300000,MCG +04-31-023,PGC 046493,SDSS J131951.52+225959.5,SDSS J131951.53+225959.5,UGC 08376;;; +NGC5093;G;13:19:37.81;+40:23:10.0;CVn;1.14;0.53;139;14.80;;10.99;10.33;10.01;23.13;SBa;;;;;;;;2MASX J13193778+4023100,MCG +07-27-060,PGC 046472,SDSS J131937.80+402310.0,SDSS J131937.81+402309.9,SDSS J131937.81+402310.0,UGC 08373;;; +NGC5094;G;13:20:46.85;-14:04:50.4;Vir;1.52;1.13;99;14.00;;10.51;9.83;9.50;24.03;E;;;;;;;;2MASX J13204685-1404504,MCG -02-34-037,PGC 046580;;; +NGC5095;G;13:20:36.87;-02:17:21.6;Vir;1.29;0.41;122;14.80;;11.52;10.81;10.55;23.62;S0-a;;;;;;;;2MASX J13203685-0217217,MCG +00-34-029,PGC 046561,SDSS J132036.87-021721.6,UGC 08381;;The APM position refers to the southeastern end of the galaxy.; +NGC5096;GTrpl;13:20:08.70;+33:05:22.0;CVn;0.70;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC5096 NED01;G;13:20:08.69;+33:05:16.6;CVn;0.87;0.71;7;15.10;;11.91;11.09;10.70;23.64;E-S0;;;;;;;;2MASX J13200867+3305169,MCG +06-29-076,PGC 046506,SDSS J132008.70+330516.6;;; +NGC5096 NED02;G;13:20:09.16;+33:05:26.7;CVn;0.66;0.49;79;16.09;;12.51;11.68;11.40;24.30;E;;;;;;;;2MASX J13200914+3305266,SDSS J132009.15+330526.7;;;B-Mag taken from LEDA +NGC5096 NED03;G;13:20:08.09;+33:05:22.5;CVn;0.65;0.48;60;16.33;;;;;24.51;E;;;;;;;;SDSS J132008.08+330522.4;;;B-Mag taken from LEDA +NGC5097;G;13:20:59.69;-12:28:16.5;Vir;0.54;0.39;38;15.10;;11.98;11.29;10.96;23.14;E;;;;;;;;2MASX J13205967-1228164,IRAS 13183-1212,PGC 046602;;; +NGC5098;GPair;13:20:16.20;+33:08:39.0;CVn;1.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC5098 NED01;G;13:20:17.75;+33:08:41.1;CVn;0.79;0.65;61;15.00;;11.89;11.37;10.96;23.58;E;;;;;;;;2MASX J13201775+3308409,MCG +06-29-078,PGC 046515;;; +NGC5098 NED02;G;13:20:14.73;+33:08:36.3;CVn;1.10;0.98;61;15.00;;11.70;10.97;10.76;23.78;E;;;;;;;;2MASX J13201472+3308359,MCG +06-29-077,PGC 046529,SDSS J132014.72+330836.2,SDSS J132014.73+330836.2;;Incorrectly called 'NGC 5096' in MCG.; +NGC5099;G;13:21:19.57;-13:02:32.5;Vir;0.69;0.59;50;15.00;;12.86;12.30;12.03;23.41;E;;;;;;;;2MASX J13211966-1302306,PGC 046627;;; +NGC5100;GPair;13:20:58.60;+08:58:55.0;Vir;1.40;;;;;;;;;;;;;;;;;MCG +02-34-009,UGC 08389;;;Diameter of the group inferred by the author. +NGC5100 NED01;G;13:20:57.58;+08:59:07.7;Vir;0.66;0.42;146;17.90;;14.48;13.84;13.36;23.97;SBbc;;;;;;;;2MASX J13205758+0859081,MCG +02-34-009 NED01,PGC 046603,SDSS J132057.57+085907.6,SDSS J132057.57+085907.7,UGC 08389 NED01;;; +NGC5100 NED02;Dup;13:20:59.59;+08:58:41.9;Vir;;;;;;;;;;;;;;;5106;;;;;; +NGC5101;G;13:21:46.24;-27:25:49.9;Hya;5.90;5.52;123;11.26;10.47;8.07;7.40;7.16;24.15;S0-a;;;;;;;;2MASX J13214624-2725498,ESO 508-058,ESO-LV 508-0580,IRAS 13190-2709,MCG -04-32-008,PGC 046661,UGCA 351;;Confused HIPASS source; +NGC5102;G;13:21:57.61;-36:37:48.9;Cen;9.71;3.71;49;9.74;9.65;7.71;7.03;6.92;23.87;E-S0;;;;;;;;2MASX J13215765-3637487,ESO 382-050,ESO-LV 382-0500,IRAS 13191-3622,MCG -06-29-031,PGC 046674;;Extended HIPASS source; +NGC5103;G;13:20:30.08;+43:05:02.3;CVn;1.59;0.98;142;13.60;;10.38;9.76;9.49;23.16;S0;;;;;;;;2MASX J13203005+4305024,MCG +07-27-062,PGC 046552,UGC 08388;;; +NGC5104;G;13:21:23.09;+00:20:32.6;Vir;1.20;0.46;170;14.50;;10.87;10.15;9.74;23.11;Sa;;;;;;;;2MASX J13212311+0020333,IRAS 13188+0036,MCG +00-34-031,PGC 046633,SDSS J132123.08+002032.6,SDSS J132123.08+002032.7,SDSS J132123.09+002032.6,SDSS J132123.09+002032.7,UGC 08391;;; +NGC5105;G;13:21:49.09;-13:12:24.4;Vir;1.93;1.37;140;13.30;;11.58;11.24;10.68;22.69;Sc;;;;;;;;2MASX J13214910-1312244,IRAS 13191-1256,MCG -02-34-039,PGC 046664;;; +NGC5106;G;13:20:59.59;+08:58:41.9;Vir;0.94;0.67;22;15.10;;11.55;10.78;10.41;23.24;Sb;;;;;5100 NED02;;;2MASX J13205961+0858421,MCG +02-34-009 NED02,PGC 046599,SDSS J132059.58+085841.9,UGC 08389 NED02;;; +NGC5107;G;13:21:24.68;+38:32:15.4;CVn;1.71;0.51;128;13.70;;12.19;11.74;11.49;22.75;SBcd;;;;;;;;2MASX J13212526+3832109,IRAS 13191+3847,MCG +07-28-001,PGC 046636,UGC 08396;;; +NGC5108;G;13:23:18.84;-32:20:31.6;Cen;1.32;0.37;2;15.00;;11.91;11.14;10.92;23.38;SBbc;;;;;;;;2MASX J13231884-3220314,ESO 444-020,ESO-LV 444-0200,MCG -05-32-005,PGC 046774;;; +NGC5109;G;13:20:52.35;+57:38:41.1;UMa;1.60;0.43;155;13.60;;12.25;11.62;11.30;22.18;Sc;;;;;5113;;;2MASX J13205234+5738410,IRAS 13189+5754,MCG +10-19-061,PGC 046589,UGC 08393;;; +NGC5110;G;13:22:56.52;-12:57:53.3;Vir;2.63;2.10;108;13.00;;9.91;9.29;8.99;24.29;E-S0;;;;;5111;;;2MASX J13225651-1257530,MCG -02-34-041,PGC 046737;;Star superposed.; +NGC5111;Dup;13:22:56.52;-12:57:53.3;Vir;;;;;;;;;;;;;;;5110;;;;;; +NGC5112;G;13:21:56.40;+38:44:04.9;CVn;2.99;1.83;127;12.50;;10.87;10.29;10.02;23.34;SBc;;;;;;;;2MASX J13215650+3844042,IRAS 13196+3859,MCG +07-28-003,PGC 046671,SDSS J132156.40+384404.9,SDSS J132156.41+384405.0,UGC 08403;;; +NGC5113;Dup;13:20:52.35;+57:38:41.1;UMa;;;;;;;;;;;;;;;5109;;;;;; +NGC5114;G;13:24:01.73;-32:20:38.2;Cen;1.81;1.12;78;13.47;;10.25;9.54;9.29;23.65;E-S0;;;;;;;;2MASX J13240173-3220383,ESO 444-024,ESO-LV 444-0240,MCG -05-32-006,PGC 046828;;; +NGC5115;G;13:23:00.38;+13:57:02.4;Vir;1.14;0.63;97;14.80;;12.09;11.98;11.38;23.38;Sc;;;;;;;;2MASX J13230036+1357022,MCG +02-34-010,PGC 046754,SDSS J132300.38+135702.3,SDSS J132300.39+135702.4,UGC 08408;;; +NGC5116;G;13:22:55.61;+26:58:50.6;Com;1.95;0.67;39;13.70;;10.87;10.09;9.91;22.78;SBc;;;;;;;;2MASX J13225563+2658505,IRAS 13205+2714,MCG +05-32-009,PGC 046744,SDSS J132255.61+265850.6,SDSS J132255.62+265850.6,UGC 08410;;; +NGC5117;G;13:22:56.48;+28:18:59.2;CVn;1.54;0.76;154;14.50;;12.06;12.22;11.34;23.50;Sc;;;;;;;;2MASX J13225646+2818595,MCG +05-32-010,PGC 046746,SDSS J132256.47+281859.1,SDSS J132256.48+281859.2,UGC 08411;;; +NGC5118;G;13:23:27.45;+06:23:33.2;Vir;0.95;0.82;91;14.40;;11.97;11.31;11.05;22.99;SABc;;;;;;4236;;2MASX J13232747+0623338,IRAS 13209+0639,MCG +01-34-019,PGC 046782,SDSS J132327.45+062333.2,UGC 08413;;; +NGC5119;G;13:24:00.32;-12:16:35.2;Vir;1.49;0.41;22;14.00;;10.56;9.91;9.66;23.80;S0;;;;;;;;2MASX J13240030-1216351,MCG -02-34-042,PGC 046826;;; +NGC5120;OCl;13:25:39.41;-63:27:30.0;Cen;;;;11.68;10.80;;;;;;;;;;;;;MWSC 2121;;; +NGC5121;G;13:24:45.61;-37:40:55.9;Cen;2.16;1.67;30;12.54;11.41;9.39;8.73;8.46;22.79;Sa;;;;;;;;2MASX J13244558-3740559,ESO 382-057,ESO-LV 382-0570,IRAS 13219-3725,MCG -06-29-035,PGC 046896;;Confused HIPASS source; +NGC5121A;G;13:25:32.80;-37:22:43.7;Cen;1.21;0.38;106;15.69;;;;;23.92;SABd;;;;;;;;ESO 382-061,ESO-LV 382-0610,MCG -06-30-001,PGC 046960;;Confused HIPASS source; +NGC5122;G;13:24:14.94;-10:39:15.4;Vir;1.15;1.00;126;14.00;;11.00;10.32;10.04;23.30;S0-a;;;;;;;;2MASX J13241494-1039156,MCG -02-34-043,PGC 046848;;; +NGC5123;G;13:23:10.52;+43:05:10.5;CVn;1.18;1.05;154;13.50;;11.09;10.39;10.05;22.62;Sc;;;;;;;;2MASX J13231050+4305108,IRAS 13209+4320,MCG +07-28-005,PGC 046767,SDSS J132310.52+430510.5,UGC 08415;;; +NGC5124;G;13:24:50.43;-30:18:27.1;Cen;2.48;0.80;12;13.17;;9.84;9.12;8.93;23.83;E;;;;;;4233;;2MASX J13245027-3018279,ESO 444-027,ESO-LV 444-0270,MCG -05-32-009,PGC 046902;;; +NGC5125;G;13:24:00.71;+09:42:36.7;Vir;1.77;1.37;169;13.50;;10.74;10.07;9.78;23.38;Sb;;;;;;;;2MASX J13240068+0942362,MCG +02-34-011,PGC 046827,SDSS J132400.70+094236.6,SDSS J132400.71+094236.7,UGC 08421;;; +NGC5126;G;13:24:53.60;-30:20:01.0;Cen;1.86;0.64;57;14.09;;10.67;9.93;9.66;24.03;S0-a;;;;;;;;2MASX J13245297-3020059,2MASX J13245359-3020009,ESO 444-028,ESO-LV 444-0280,MCG -05-32-010,PGC 046910;;; +NGC5127;G;13:23:45.02;+31:33:56.7;CVn;2.18;1.58;72;13.90;;10.34;9.72;9.36;24.07;E;;;;;;;;2MASX J13234497+3133568,MCG +05-32-013,PGC 046809,SDSS J132345.01+313356.7,SDSS J132345.02+313356.7,UGC 08419;;; +NGC5128;G;13:25:27.62;-43:01:08.8;Cen;25.88;19.77;33;8.18;6.84;4.98;4.27;3.94;23.59;S0;;;;;;;;2MASX J13252775-4301073,C 077,ESO 270-009,ESO-LV 270-0090,IRAS 13225-4245,MCG -07-28-001,PGC 046957;Centaurus A;; +NGC5129;G;13:24:10.01;+13:58:35.5;Vir;1.65;1.29;7;13.30;;10.16;9.47;9.25;22.98;E;;;;;;;;2MASX J13241000+1358351,MCG +02-34-012,PGC 046836,SDSS J132410.01+135835.5,SDSS J132410.02+135835.5,SDSS J132410.02+135835.6,UGC 08423;;; +NGC5130;G;13:24:27.16;-10:12:36.8;Vir;1.11;0.82;45;14.00;;11.17;10.51;10.20;23.28;S0-a;;;;;;;;2MASX J13242716-1012368,MCG -02-34-044,PGC 046866;;; +NGC5131;G;13:23:56.94;+30:59:17.0;CVn;0.45;0.39;77;14.40;;10.89;10.34;9.95;21.43;Sa;;;;;;;;2MASX J13235697+3059168,MCG +05-32-014,PGC 046819,SDSS J132356.93+305916.9,SDSS J132356.94+305916.9,SDSS J132356.94+305917.0,UGC 08422;;; +NGC5132;G;13:24:28.90;+14:05:33.3;Vir;1.31;0.88;63;14.30;;10.82;10.05;9.84;23.51;S0-a;;;;;;;;2MASX J13242889+1405332,IRAS 13219+1421,MCG +02-34-014,PGC 046868,UGC 08428;;; +NGC5133;G;13:24:52.91;-04:04:55.2;Vir;1.10;0.65;25;15.00;;11.05;10.32;10.03;23.59;E-S0;;;;;;;;2MASX J13245289-0404550,MCG -01-34-015,PGC 046909;;; +NGC5134;G;13:25:18.55;-21:08:03.0;Vir;2.70;1.53;159;12.11;;9.15;8.48;8.19;22.95;SABb;;;;;;;;2MASX J13251856-2108030,ESO 576-052,ESO-LV 576-0520,IRAS 13225-2052,MCG -03-34-073,PGC 046938;;; +NGC5135;G;13:25:44.06;-29:50:01.2;Hya;2.40;2.20;125;12.58;13.35;9.87;8.98;8.83;23.41;Sab;;;;;;;;2MASX J13254405-2950012,ESO 444-032,ESO-LV 444-0320,IRAS 13229-2934,MCG -05-32-013,PGC 046974;;; +NGC5136;G;13:24:51.41;+13:44:16.3;Vir;1.31;1.17;89;14.70;;11.19;10.52;10.19;23.91;E;;;;;;0888;;2MASX J13245137+1344162,MCG +02-34-015,PGC 046905,SDSS J132451.40+134416.2,SDSS J132451.40+134416.3;;; +NGC5137;G;13:24:52.50;+14:04:37.9;Vir;0.77;0.55;120;15.60;;12.84;12.36;11.91;23.87;S0-a;;;;;;;;2MASX J13245247+1404382,PGC 046907,SDSS J132452.49+140437.9,SDSS J132452.50+140437.9;;; +NGC5138;OCl;13:27:15.21;-59:02:27.4;Cen;4.20;;;6.12;5.33;;;;;;;;;;;;;MWSC 2120;;; +NGC5139;GCl;13:26:45.89;-47:28:36.7;Cen;27.00;;;6.12;5.33;;;;;;;;;;;;;C 080,MWSC 2125;Omega Centauri;; +NGC5140;G;13:26:21.73;-33:52:06.5;Cen;2.36;1.98;47;12.78;12.97;9.59;8.90;8.62;23.46;E-S0;;;;;;;;2MASX J13262174-3352067,ESO 382-065,ESO-LV 382-0650,IRAS 13235-3336,MCG -05-32-016,PGC 047031;;; +NGC5141;G;13:24:51.44;+36:22:42.7;CVn;1.59;1.10;78;13.90;;10.58;9.90;9.64;23.52;S0;;;;;;;;2MASX J13245144+3622424,MCG +06-30-004,PGC 046906,UGC 08433;;; +NGC5142;G;13:25:01.11;+36:23:58.2;CVn;1.18;1.04;14;14.00;;11.07;10.41;10.11;23.29;S0;;;;;;;;2MASX J13250113+3623585,MCG +06-30-006,PGC 046919,SDSS J132501.10+362358.2,UGC 08435;;; +NGC5143;G;13:25:01.28;+36:26:13.8;CVn;0.53;0.34;101;15.50;;14.56;13.69;14.05;23.00;SBd;;;;;;;;2MASX J13250120+3626145,MCG +06-30-005,PGC 046918,SDSS J132501.28+362613.7;;; +NGC5144;GPair;13:22:53.70;+70:30:44.0;UMi;1.10;;;;;;;;;;;;;;;;;MCG +12-13-005,UGC 08420;;;Diameter of the group inferred by the author. +NGC5144 NED01;G;13:22:53.49;+70:30:36.4;UMi;0.89;0.40;55;15.62;;;;;;;;;;;;;;2MASX J13225349+7030363,MCG +12-13-005 NED01,PGC 200298,UGC 08420 NED01;;UGC says this is probably a superimposed companion of UGC 08420 NED02.;b-Mag taken from LEDA. +NGC5144 NED02;G;13:22:54.08;+70:30:53.0;UMi;1.00;0.81;151;13.20;;;;;22.05;Sc;;;;;;;;IRAS 13214+7046,MCG +12-13-005 NED02,PGC 046742,UGC 08420 NED02;;; +NGC5145;G;13:25:13.92;+43:16:02.2;CVn;1.97;1.45;84;13.60;;10.39;9.64;9.33;23.70;S0-a;;;;;;;;2MASX J13251390+4316018,IRAS 13230+4331,MCG +07-28-009,PGC 046934,SDSS J132513.91+431602.1,SDSS J132513.92+431602.2,UGC 08439;;; +NGC5146;G;13:26:37.49;-12:19:26.3;Vir;2.16;1.39;33;14.00;;10.18;9.48;9.23;24.35;E-S0;;;;;;;;2MASX J13263751-1219259,MCG -02-34-049,PGC 047055;;HOLM 516B is a star.; +NGC5147;G;13:26:19.73;+02:06:03.1;Vir;1.47;1.36;160;12.70;;10.57;9.91;9.73;21.78;Sd;;;;;;;;2MASX J13261970+0206027,IRAS 13237+0221,MCG +00-34-033,PGC 047027,SDSS J132619.73+020603.0,UGC 08443;;; +NGC5148;G;13:26:38.78;+02:18:49.4;Vir;0.66;0.60;0;15.40;;13.69;13.36;12.66;23.26;SBcd;;;;;;;;2MASX J13263886+0218499,MCG +01-34-021,PGC 047060,SDSS J132638.78+021849.3,SDSS J132638.78+021849.4;;; +NGC5149;G;13:26:09.15;+35:56:03.9;CVn;1.62;0.95;153;13.80;;10.85;10.14;9.87;23.15;SBbc;;;;;;;;2MASX J13260917+3556039,IRAS 13238+3611,MCG +06-30-010,PGC 047011,SDSS J132609.14+355603.9,UGC 08444;;; +NGC5150;G;13:27:36.54;-29:33:44.1;Hya;1.40;1.03;117;13.43;12.54;10.42;9.75;9.46;22.66;SBbc;;;;;;;;2MASX J13273652-2933438,ESO 444-043,ESO-LV 444-0430,IRAS 13248-2918,MCG -05-32-023,PGC 047169;;; +NGC5151;G;13:26:40.84;+16:52:25.7;Com;0.91;0.82;175;14.90;;11.41;10.67;10.42;23.29;E;;;;;;;;2MASX J13264084+1652258,MCG +03-34-032,PGC 047056,SDSS J132640.83+165225.7,SDSS J132640.84+165225.7;;; +NGC5152;G;13:27:51.12;-29:37:07.0;Hya;2.03;1.04;110;13.32;;12.27;11.58;11.39;23.45;SBb;;;;;;;;2MASX J13274933-2937048,ESO 444-044,ESO-LV 444-0440,MCG -05-32-024,PGC 047187;;; +NGC5153;G;13:27:54.33;-29:37:04.9;Hya;2.44;1.89;17;13.29;;10.00;9.38;9.15;23.71;E;;;;;;;;2MASX J13275431-2937048,ESO 444-045,ESO-LV 444-0450,MCG -05-32-025,PGC 047194;;; +NGC5154;G;13:26:28.54;+36:00:37.0;CVn;1.35;1.26;60;14.90;;12.20;11.64;11.24;23.94;Sc;;;;;;;;2MASX J13262849+3600373,MCG +06-30-011,PGC 047041,SDSS J132628.53+360036.9,SDSS J132628.53+360037.0,UGC 08447;;; +NGC5155;Dup;13:28:35.09;-63:30:31.3;Cen;;;;;;;;;;;;;;;5045;;;;;; +NGC5156;G;13:28:44.09;-48:55:00.5;Cen;2.54;2.08;115;12.54;11.99;9.69;9.04;8.73;23.12;SBb;;;;;;;;2MASX J13284409-4855005,ESO 220-013,ESO-LV 220-0130,IRAS 13256-4839,PGC 047283;;Confused HIPASS source; +NGC5157;G;13:27:16.85;+32:01:50.6;CVn;1.32;1.11;116;14.40;;11.01;10.28;10.02;23.28;Sa;;;;;;;;2MASX J13271683+3201505,MCG +05-32-021,PGC 047131,SDSS J132716.84+320150.5,SDSS J132716.85+320150.5,UGC 08455;;; +NGC5158;G;13:27:46.97;+17:46:43.8;Com;0.98;0.93;30;13.80;;11.24;10.51;10.31;22.59;Sab;;;;;;;;2MASX J13274693+1746442,MCG +03-34-038,PGC 047180,SDSS J132746.96+174643.7,SDSS J132746.97+174643.7,UGC 08459;;"CGCG misprints name as 'NGC 5188'; corrected in vol III (errata)"; +NGC5159;G;13:28:16.17;+02:58:57.6;Vir;1.24;0.35;162;15.20;;12.70;11.97;11.93;23.41;Sc;;;;;;;;2MASX J13281623+0258574,MCG +01-34-022,PGC 047235,SDSS J132816.17+025857.5,SDSS J132816.18+025857.6,UGC 08460;;; +NGC5160;**;13:28:21.60;+05:59:45.2;Vir;;;;;;;;;;;;;;;;;;;;; +NGC5161;G;13:29:13.91;-33:10:25.8;Cen;5.36;1.62;77;12.13;11.00;9.49;8.85;8.63;23.43;Sc;;;;;;;;2MASX J13291390-3310258,ESO 383-004,ESO-LV 383-0040,IRAS 13264-3255,MCG -05-32-031,PGC 047321,UGCA 359;;; +NGC5162;G;13:29:25.93;+11:00:28.4;Vir;2.96;1.60;162;13.70;;10.29;9.63;9.33;24.30;SBc;;;;;5174;;;2MASX J13292596+1100285,IRAS 13269+1115,MCG +02-34-018,PGC 047346,SDSS J132925.92+110028.4,SDSS J132925.93+110028.4,SDSS J132925.94+110028.4,UGC 08475;;"Called 'double nebula' in CGCG; UGC calls it galaxy with star superposed."; +NGC5163;G;13:26:54.26;+52:45:12.7;UMa;1.13;0.72;10;14.90;;11.22;10.46;10.24;23.81;E;;;;;;;;2MASX J13265425+5245127,MCG +09-22-062,PGC 047096,SDSS J132654.25+524512.8,SDSS J132654.26+524512.6,SDSS J132654.26+524513.0,SDSS J132654.27+524512.7,UGC 08453;;; +NGC5164;G;13:27:11.90;+55:29:13.8;UMa;0.99;0.90;35;14.60;;11.73;11.11;10.75;23.11;SBb;;;;;;;;2MASX J13271189+5529135,MCG +09-22-063,PGC 047124,SDSS J132711.89+552913.8,SDSS J132711.90+552913.8,SDSS J132711.90+552914.0,UGC 08458;;MRK 0257 in Astrofiz,5,581,1969 table, but chart/note are for CGCG 271-046.; +NGC5165;G;13:28:39.18;+11:23:13.4;Vir;1.64;0.91;2;14.60;;11.22;10.54;10.22;24.33;E-S0;;;;;;;;2MASX J13283913+1123131,MCG +02-34-016,PGC 047281,SDSS J132839.17+112313.3;;; +NGC5166;G;13:28:15.04;+32:01:56.6;CVn;2.13;0.37;67;14.30;;10.59;9.80;9.48;23.54;SABb;;;;;;;;2MASX J13281504+3201565,IRAS 13259+3217,MCG +05-32-026,PGC 047234,UGC 08463;;; +NGC5167;G;13:28:40.23;+12:42:40.3;Vir;1.00;0.96;15;14.70;;12.21;11.66;11.22;23.40;SBb;;;;;;;;IRAS 13261+1258,MCG +02-34-017,PGC 047277,SDSS J132840.23+124240.3;;; +NGC5168;OCl;13:31:05.25;-60:56:21.2;Cen;4.20;;;9.55;9.10;;;;;;;;;;;;;MWSC 2129;;; +NGC5169;G;13:28:10.05;+46:40:19.7;CVn;1.51;0.60;104;14.30;;12.00;11.34;11.08;23.64;Sbc;;;;;;;;2MASX J13281003+4640196,MCG +08-25-004,PGC 047231,SDSS J132810.04+464019.6,SDSS J132810.05+464019.6,SDSS J132810.05+464019.7,UGC 08465;;; +NGC5170;G;13:29:48.79;-17:57:59.1;Vir;7.96;1.41;123;12.08;10.79;8.70;7.95;7.63;23.95;Sc;;;;;;;;2MASX J13294883-1757593,ESO 576-065,ESO-LV 576-0650,IRAS 13271-1742,MCG -03-34-084,PGC 047394,PGC 047396,UGCA 360;;; +NGC5171;G;13:29:21.56;+11:44:06.4;Vir;1.07;0.78;5;14.70;;11.02;10.30;10.04;22.61;E-S0;;;;;;;;2MASX J13292154+1144065,MCG +02-34-020,PGC 047339,SDSS J132921.56+114406.4,UGC 08476;;; +NGC5172;G;13:29:19.31;+17:03:06.9;Com;2.38;1.34;101;12.70;;10.17;9.50;9.20;22.84;SABc;;;;;;;;2MASX J13291914+1703061,IRAS 13268+1718,MCG +03-34-041,PGC 047330,SDSS J132919.16+170306.2,UGC 08477;;; +NGC5173;G;13:28:25.27;+46:35:29.9;CVn;1.10;1.04;130;13.10;;10.88;10.26;10.05;22.47;E;;;;;;;;2MASX J13282527+4635296,MCG +08-25-005,PGC 047257,SDSS J132825.27+463529.9,SDSS J132825.28+463529.9,UGC 08468;;; +NGC5174;Dup;13:29:25.93;+11:00:28.4;Vir;;;;;;;;;;;;;;;5162;;;;;; +NGC5175;*;13:29:26.27;+10:59:42.5;Vir;;;;;;;;;;;;;;;;;;SDSS J132926.26+105942.5;;This star is superposed on NGC 5174.; +NGC5176;G;13:29:24.96;+11:46:53.3;Vir;0.38;0.38;130;15.40;;11.87;11.29;10.69;22.14;E;;;;;;;;2MASX J13292494+1146535,MCG +02-34-021,PGC 047338,SDSS J132924.95+114653.3,SDSS J132924.96+114653.3;;; +NGC5177;G;13:29:24.26;+11:47:49.3;Vir;0.86;0.23;134;15.40;;12.60;11.65;11.35;23.17;Sa;;;;;;;;2MASX J13292426+1147495,MCG +02-34-019,PGC 047337,SDSS J132924.25+114749.3,SDSS J132924.26+114749.3;;; +NGC5178;G;13:29:29.31;+11:37:29.2;Vir;1.03;0.66;94;15.00;;11.86;11.08;11.03;23.49;S0-a;;;;;;;;2MASX J13292930+1137295,MCG +02-34-022,PGC 047358,SDSS J132929.30+113729.1,SDSS J132929.31+113729.2,UGC 08478;;; +NGC5179;G;13:29:30.88;+11:44:45.0;Vir;1.10;0.73;40;14.90;;11.42;10.69;10.56;23.62;E-S0;;;;;;;;2MASX J13293087+1144445,MCG +02-34-023,PGC 047363,SDSS J132930.88+114444.9,SDSS J132930.88+114445.0;;; +NGC5180;G;13:29:26.96;+16:49:33.0;Com;1.25;0.89;34;14.30;;10.92;10.25;9.97;23.19;S0;;;;;;;;2MASX J13292695+1649331,MCG +03-34-042,PGC 047352,UGC 08479;;; +NGC5181;G;13:29:42.00;+13:18:14.8;Vir;1.04;0.90;30;14.70;;11.11;10.42;10.20;23.42;E;;;;;;;;2MASX J13294202+1318144,MCG +02-34-024,PGC 047373,SDSS J132942.00+131814.7,SDSS J132942.00+131814.8;;; +NGC5182;G;13:30:41.11;-28:09:01.1;Hya;2.06;1.60;12;13.22;;;;;23.45;Sbc;;;;;;;;2MASX J13304109-2809009,ESO 444-062,ESO-LV 444-0620,IRAS 13278-2753,MCG -05-32-034,PGC 047489;;The position in 1995AJ....110..463Q is 13 arcsec north of the nucleus.; +NGC5183;G;13:30:06.15;-01:43:14.1;Vir;1.72;0.60;118;13.60;;10.92;10.22;9.98;23.03;Sb;;;;;;;;2MASX J13300614-0143144,IRAS 13275-0127,MCG +00-34-039,PGC 047432,SDSS J133006.14-014314.1,SDSS J133006.15-014314.1,UGC 08485;;; +NGC5184;G;13:30:11.49;-01:39:47.3;Vir;1.57;0.94;128;13.70;;10.45;9.80;9.61;22.92;SABb;;;;;;;;2MASX J13301147-0139474,MCG +00-34-041,PGC 047438,SDSS J133011.48-013947.2,SDSS J133011.49-013947.2,SDSS J133011.49-013947.3,UGC 08487;;; +NGC5185;G;13:30:02.25;+13:24:57.8;Vir;2.00;0.74;58;14.70;;11.20;10.56;10.24;24.02;SBb;;;;;;;;2MASX J13300224+1324573,MCG +02-34-025,PGC 047422,SDSS J133002.24+132457.8,SDSS J133002.25+132457.8,UGC 08488;;; +NGC5186;G;13:30:03.90;+12:10:30.7;Vir;0.73;0.49;160;15.60;;13.63;12.93;12.51;23.60;Sb;;;;;;;;2MASX J13300388+1210313,PGC 047426,SDSS J133003.89+121030.6,SDSS J133003.90+121030.7;;; +NGC5187;G;13:29:48.19;+31:07:48.5;CVn;0.81;0.54;45;14.60;;11.75;11.14;10.80;22.71;Sb;;;;;;;;2MASX J13294820+3107485,IRAS 13274+3123,MCG +05-32-029,PGC 047393,SDSS J132948.19+310748.5;;; +NGC5188;G;13:31:28.28;-34:47:39.9;Cen;3.41;2.41;98;12.68;11.85;9.53;8.81;8.52;24.07;Sb;;;;;;;;2MASX J13312829-3447400,ESO 383-009,ESO-LV 383-0090,IRAS 13286-3432,MCG -06-30-007,PGC 047549;;; +NGC5189;PN;13:33:32.91;-65:58:26.6;Mus;2.33;;;10.30;;14.02;13.84;13.53;;;;14.92;;;;4274;HD 117622;ESO 096-016,PN G307.2-03.4;;; +NGC5190;G;13:30:38.55;+18:08:04.6;Com;0.97;0.76;155;13.70;;11.40;10.76;10.33;22.59;Sb;;;;;;;;2MASX J13303853+1808042,IRAS 13282+1823,MCG +03-34-043,PGC 047482,SDSS J133038.54+180804.5,SDSS J133038.54+180804.6,UGC 08500;;; +NGC5191;G;13:30:47.36;+11:12:02.7;Vir;1.03;0.67;89;14.90;;11.44;10.71;10.50;23.49;S0;;;;;;;;2MASX J13304735+1112023,MCG +02-34-026,PGC 047498,SDSS J133047.35+111202.7,SDSS J133047.36+111202.7;;; +NGC5192;G;13:30:51.68;-01:46:43.3;Vir;0.61;0.30;12;15.20;;12.45;11.76;11.56;22.74;Sa;;;;;;;;2MASX J13305167-0146433,IRAS 13282-0131,PGC 047503,SDSS J133051.67-014643.3,SDSS J133051.68-014643.3;;; +NGC5193;G;13:31:53.53;-33:14:03.2;Cen;2.07;1.89;65;12.69;11.92;9.62;8.92;8.69;23.03;E;;;;;;;;2MASX J13315348-3314040,ESO 383-015,ESO-LV 383-0150,MCG -05-32-037,PGC 047582,TYC 7269-1438-1;;; +NGC5193A;G;13:31:49.08;-33:14:22.1;Cen;1.49;0.53;48;14.00;;11.42;10.68;10.94;23.68;S0;;;;;;;;2MASX J13314907-3314221,ESO 383-014,ESO-LV 383-0140,MCG -05-32-036,PGC 047568;;; +NGC5194;G;13:29:52.71;+47:11:42.6;CVn;13.71;11.67;163;9.26;8.36;6.40;5.65;5.50;22.90;SABb;;;;051;;;;2MASX J13295269+4711429,IRAS 13277+4727,MCG +08-25-012,PGC 047404,UGC 08493;Whirlpool Galaxy;; +NGC5195;G;13:29:59.59;+47:15:58.1;CVn;5.50;4.36;79;10.45;9.55;7.21;6.46;6.25;22.84;SBa;;;;;;;;2MASX J13295958+4715580,IRAS 13278+4731,MCG +08-25-014,PGC 047413,UGC 08494;;; +NGC5196;G;13:31:19.66;-01:36:54.2;Vir;0.87;0.80;165;15.50;;12.05;11.30;11.13;23.57;E-S0;;;;;;;;2MASX J13311969-0136537,PGC 047540,SDSS J133119.66-013654.1,SDSS J133119.66-013654.2;;; +NGC5197;G;13:31:25.13;-01:41:35.0;Vir;0.86;0.19;148;15.40;;12.44;11.73;11.66;24.15;S0-a;;;;;;;;2MASX J13312516-0141347,PGC 047546,SDSS J133125.13-014135.0;;; +NGC5198;G;13:30:11.40;+46:40:14.8;CVn;2.03;1.68;15;13.20;;9.81;9.14;8.90;23.10;E;;;;;;;;2MASX J13301141+4640149,MCG +08-25-015,PGC 047441,TYC 3463-238-1,UGC 08499;;; +NGC5199;G;13:30:42.76;+34:49:50.4;CVn;1.27;0.91;130;15.10;;11.34;10.72;10.48;23.96;S0;;;;;;;;2MASX J13304274+3449503,2MASX J13304388+3449263,MCG +06-30-024,PGC 047492,SDSS J133042.75+344950.3,SDSS J133042.76+344950.3,SDSS J133042.76+344950.4,UGC 08504;;; +NGC5200;**;13:31:42.46;-00:01:48.6;Vir;;;;;;;;;;;;;;;;;;;;;Components are 2MASS J13314257-0001487 and 2MASS J13314200-0001488. +NGC5201;G;13:29:16.21;+53:04:55.1;UMa;1.58;0.99;127;14.30;;10.91;10.34;10.08;23.61;Sb;;;;;;;;2MASX J13291617+5304554,MCG +09-22-069,PGC 047324,SDSS J132916.20+530455.1,SDSS J132916.21+530455.0,SDSS J132916.21+530455.1,SDSS J132916.22+530455.4,UGC 08480;;; +NGC5202;G;13:32:00.51;-01:41:55.6;Vir;0.67;0.29;178;15.57;;12.55;11.84;11.89;23.00;Sb;;;;;;;;2MASX J13320050-0141555,PGC 047589,SDSS J133200.50-014155.5,SDSS J133200.51-014155.5,SDSS J133200.51-014155.6;;; +NGC5203;G;13:32:13.40;-08:47:10.4;Vir;1.66;1.05;90;14.00;;10.54;9.86;9.61;23.97;E-S0;;;;;;;;2MASX J13321340-0847104,MCG -01-35-001,PGC 047610;;; +NGC5204;G;13:29:36.51;+58:25:07.4;UMa;4.50;2.82;5;11.84;;10.24;9.64;9.51;23.32;Sm;;;;;;;;2MASX J13293650+5825074,IRAS 13277+5840,MCG +10-19-078,PGC 047368,UGC 08490;;; +NGC5205;G;13:30:03.58;+62:30:41.7;UMa;1.58;0.94;168;13.50;;10.67;9.59;9.76;22.89;SBbc;;;;;;;;2MASX J13300369+6230415,IRAS 13283+6245,MCG +11-17-003,PGC 047425,SDSS J133003.57+623041.6,SDSS J133003.58+623041.7,UGC 08501;;; +NGC5206;G;13:33:43.98;-48:09:04.2;Cen;4.26;2.81;28;11.62;;9.39;8.55;8.49;23.77;E-S0;;;;;;;;2MASX J13334398-4809044,ESO 220-018,ESO-LV 220-0180,PGC 047762;;; +NGC5207;G;13:32:13.99;+13:53:32.6;Vir;1.75;0.88;142;14.70;;10.83;10.08;9.82;23.76;Sb;;;;;;;;2MASX J13321395+1353323,MCG +02-35-001,PGC 047612,SDSS J133213.98+135332.5,UGC 08518;;; +NGC5208;G;13:32:27.93;+07:18:59.2;Vir;1.69;0.60;161;14.40;;10.52;9.77;9.51;24.01;S0;;;;;;;;2MASX J13322790+0718599,MCG +01-35-001,PGC 047637,SDSS J133227.93+071859.1,SDSS J133227.93+071859.2,UGC 08519;;Possible association with NGC 5212 indicated in MCG.; +NGC5209;G;13:32:42.54;+07:19:38.1;Vir;1.25;0.88;111;14.70;;10.98;10.42;10.07;23.83;E;;;;;;;;2MASX J13324251+0719382,MCG +01-35-002,PGC 047654,SDSS J133242.54+071938.1,SDSS J133242.55+071938.1,UGC 08522;;; +NGC5210;G;13:32:49.25;+07:10:12.3;Vir;1.51;1.25;12;14.40;;10.59;9.95;9.69;23.55;Sa;;;;;;;;2MASX J13324924+0710122,MCG +01-35-003,PGC 047678,SDSS J133249.24+071012.3,UGC 08523;;; +NGC5211;G;13:33:05.34;-01:02:08.9;Vir;2.00;1.55;30;13.79;13.10;10.60;9.90;9.63;23.77;Sab;;;;;;;;2MASX J13330535-0102085,IRAS 13305-0046,MCG +00-35-009,PGC 047709,SDSS J133305.33-010208.8,SDSS J133305.34-010208.8,SDSS J133305.34-010208.9,UGC 08530;;; +NGC5212;G;13:32:56.05;+07:17:15.9;Vir;0.51;0.47;90;15.40;;13.64;13.22;12.78;23.21;Sc;;;;;;;;2MASX J13325602+0717162,PGC 047687,SDSS J133256.10+071716.0;;; +NGC5213;GPair;13:34:39.40;+04:08:00.0;Vir;0.93;0.71;133;14.90;;12.11;11.38;11.20;23.18;Sb;;;;;;;;2MASX J13343925+0407477,MCG +01-35-008,PGC 047842,SDSS J133439.26+040747.8,SDSS J133439.26+040747.9,UGC 08552;;; +NGC5214;G;13:32:48.70;+41:52:18.6;CVn;1.04;0.83;131;14.12;13.67;11.75;11.11;10.79;22.99;Sc;;;;;;;;2MASX J13324873+4152184,MCG +07-28-030,PGC 047675,SDSS J133248.70+415218.5,SDSS J133248.70+415218.6,SDSS J133248.71+415218.5,SDSS J133248.71+415218.6,UGC 08531;;; +NGC5215A;G;13:35:06.66;-33:28:51.6;Cen;0.64;0.59;135;14.16;;11.01;10.33;9.98;21.94;S0;;;;;;;;2MASX J13350667-3328517,ESO 383-028,ESO-LV 383-0280,ESO-LV 383-0291,MCG -05-32-040,PGC 047883;;The position in 2003A&A...405....1P is for a knot on the southwestern side.; +NGC5215B;G;13:35:09.86;-33:28:58.7;Cen;1.24;0.88;85;13.93;;;;;23.15;S0;;;;;;;;2MASX J13351155-3328576,ESO 383-029,ESO-LV 383-0281,ESO-LV 383-0290,MCG -05-32-041,PGC 047887;;ESO-LV has two entries for this object.; +NGC5216;G;13:32:06.89;+62:42:02.5;UMa;1.69;1.10;54;16.80;16.14;10.80;10.13;9.87;23.70;E;;;;;;;;2MASX J13320682+6242029,MCG +11-17-004,PGC 047598,SDSS J133206.89+624202.3,SDSS J133206.89+624202.5,SDSS J133206.90+624202.5,UGC 08528;;; +NGC5217;G;13:34:05.93;+17:51:24.7;Com;1.56;0.53;16;14.00;;10.82;10.08;9.80;23.76;E;;;;;;;;2MASX J13340593+1751244,MCG +03-35-009,PGC 047793,SDSS J133405.92+175124.6,SDSS J133405.93+175124.6,SDSS J133405.93+175124.7,UGC 08546;;; +NGC5218;G;13:32:10.38;+62:46:03.9;UMa;1.84;1.21;93;13.10;;10.14;9.43;9.21;22.86;SBb;;;;;;;;2MASX J13321042+6246039,IRAS 13304+6301,MCG +11-17-005,PGC 047603,SDSS J133210.37+624603.8,SDSS J133210.37+624603.9,SDSS J133210.38+624603.9,SDSS J133210.39+624603.9,UGC 08529;;; +NGC5219;Dup;13:38:41.70;-45:51:21.5;Cen;;;;;;;;;;;;;;;5244;;;;;; +NGC5220;G;13:35:56.67;-33:27:13.7;Cen;2.62;1.21;95;13.12;;9.88;9.11;8.87;24.09;Sa;;;;;;;;2MASX J13355666-3327137,ESO 383-036,ESO-LV 383-0360,IRAS 13330-3311,MCG -05-32-046,PGC 047972;;; +NGC5221;G;13:34:55.90;+13:49:57.0;Vir;1.56;0.77;109;14.50;;10.88;10.26;10.05;23.60;SABb;;;;;;;;2MASX J13345590+1349571,MCG +02-35-006,PGC 047869,UGC 08559;;Misidentified in VV as 'NGC 5226'.; +NGC5222;GPair;13:34:56.70;+13:44:36.0;Vir;1.20;;;;;;;;;;;;;;;;;MCG +02-35-005,UGC 08558;;;Diameter of the group inferred by the author. +NGC5222 NED01;G;13:34:55.95;+13:44:31.8;Vir;1.51;1.00;12;14.10;;10.81;10.00;9.82;23.75;E;;;;;;;;2MASX J13345590+1344311,MCG +02-35-005 NED01,PGC 047871,SDSS J133455.94+134431.7,SDSS J133455.95+134431.8,UGC 08558 NED01;;Component 'a)' in UGC notes.; +NGC5222 NED02;G;13:34:57.59;+13:44:39.4;Vir;0.93;0.59;33;15.14;;;;;23.87;Sab;;;;;;;;MCG +02-35-005 NED02,PGC 093122,SDSS J133457.59+134439.3,UGC 08558 NED02;;Component 'c)' in UGC notes. UGC says VV identification as NGC 5221 incorrect.;B-Mag taken from LEDA +NGC5223;G;13:34:25.22;+34:41:25.6;CVn;2.14;1.42;170;14.40;;10.46;9.71;9.48;24.58;E;;;;;;;;2MASX J13342524+3441255,MCG +06-30-040,PGC 047822,SDSS J133425.21+344125.5,UGC 08553;;; +NGC5224;G;13:35:08.86;+06:28:52.0;Vir;0.87;0.76;139;15.00;;11.62;10.91;10.69;23.50;E;;;;;;;;2MASX J13350883+0628519,MCG +01-35-009,PGC 047884,SDSS J133508.85+062851.9;;; +NGC5225;G;13:33:20.16;+51:29:25.2;CVn;0.73;0.73;60;14.40;;11.41;10.83;10.58;22.56;E;;;;;;;;2MASX J13332012+5129253,MCG +09-22-078,PGC 047731,SDSS J133320.15+512925.1,SDSS J133320.16+512925.1,SDSS J133320.16+512925.2,UGC 08540;;; +NGC5226;G;13:35:03.62;+13:55:19.8;Vir;0.50;0.26;17;;;13.54;12.41;12.69;23.82;E;;;;;;;;2MASX J13350365+1355200,PGC 047877,SDSS J133503.61+135519.7,SDSS J133503.62+135519.8;;; +NGC5227;G;13:35:24.56;+01:24:38.1;Vir;1.51;1.29;161;17.16;16.45;11.54;10.83;10.56;23.38;Sb;;;;;;;;2MASX J13352457+0124376,IRAS 13328+0140,MCG +00-35-010,PGC 047915,SDSS J133524.50+012437.4,SDSS J133524.55+012438.0,SDSS J133524.55+012438.1,SDSS J133524.56+012438.1,UGC 08566;;; +NGC5228;G;13:34:35.06;+34:46:40.1;CVn;1.15;0.98;20;14.50;;10.93;10.23;10.01;23.31;E-S0;;;;;;;;2MASX J13343506+3446405,MCG +06-30-043,PGC 047837,SDSS J133435.06+344639.9,SDSS J133435.07+344639.9,UGC 08556;;; +NGC5229;G;13:34:02.83;+47:54:55.6;CVn;2.28;0.63;169;14.60;;12.49;12.09;11.67;23.91;SBcd;;;;;;;;2MASX J13340283+4754556,MCG +08-25-019,PGC 047788,UGC 08550;;; +NGC5230;G;13:35:31.88;+13:40:34.2;Boo;1.55;1.48;0;13.40;;10.59;9.80;9.83;22.84;SABc;;;;;;;;2MASX J13353188+1340344,IRAS 13330+1355,MCG +02-35-009,PGC 047932,SDSS J133531.87+134034.2,UGC 08573;;; +NGC5231;G;13:35:48.25;+02:59:56.1;Vir;1.15;0.76;133;14.25;16.15;10.99;10.31;10.14;23.14;SBa;;;;;;;;2MASX J13354825+0259556,IRAS 13332+0315,MCG +01-35-011,PGC 047953,SDSS J133548.24+025956.1,SDSS J133548.25+025956.1,UGC 08574;;; +NGC5232;G;13:36:08.26;-08:29:51.8;Vir;1.72;1.34;65;13.00;;10.20;9.50;9.17;23.27;S0-a;;;;;;;;2MASX J13360823-0829519,IRAS 13335-0814,MCG -01-35-003,PGC 047998;;; +NGC5233;G;13:35:13.34;+34:40:38.8;CVn;1.46;0.76;80;14.80;;10.97;10.23;9.98;23.61;Sab;;;;;;;;2MASX J13351333+3440383,MCG +06-30-047,PGC 047895,SDSS J133513.34+344038.7,SDSS J133513.34+344038.8,UGC 08568;;; +NGC5234;G;13:37:29.94;-49:50:12.9;Cen;1.51;0.87;46;14.00;;10.41;9.75;9.46;23.57;S0-a;;;;;;;;2MASX J13372994-4950128,ESO 220-024,ESO-LV 220-0240,PGC 048129;;; +NGC5235;G;13:36:01.41;+06:35:07.3;Vir;1.31;0.57;115;14.90;;11.52;10.84;10.67;23.78;SBb;;;;;;;;2MASX J13360139+0635076,IRAS 13335+0650,MCG +01-35-012,PGC 047984,SDSS J133601.40+063507.2,UGC 08582;;; +NGC5236;G;13:37:00.95;-29:51:55.5;Hya;13.61;13.21;45;8.11;7.52;5.54;4.87;4.62;22.20;Sc;;;;083;;;;2MASX J13370091-2951567,ESO 444-081,ESO-LV 444-0810,IRAS 13341-2936,MCG -05-32-050,PGC 048082,UGCA 366;Southern Pinwheel Galaxy;Extended HIPASS source; +NGC5237;G;13:37:39.05;-42:50:49.1;Cen;2.34;1.57;111;13.26;12.67;10.64;10.13;9.85;23.80;E-S0;;;;;;;;2MASX J13373905-4250488,ESO 270-022,ESO-LV 270-0220,MCG -07-28-005,PGC 048139;;; +NGC5238;G;13:34:42.51;+51:36:49.2;UMa;1.75;1.44;162;14.20;;;;;23.68;SABd;;;;;;;;2MASX J13344249+5136494,MCG +09-22-082,PGC 047853,PGC 047857,SDSS J133442.50+513649.2,SDSS J133442.51+513649.2,UGC 08565;;; +NGC5239;G;13:36:26.20;+07:22:10.5;Vir;1.80;1.75;150;14.70;;11.29;10.98;10.22;24.39;Sbc;;;;;;;;2MASX J13362618+0722109,IRAS 13339+0737,MCG +01-35-015,PGC 048023,SDSS J133626.20+072210.5,UGC 08589;;; +NGC5240;G;13:35:55.20;+35:35:17.7;CVn;1.83;1.26;57;14.10;;11.56;10.88;10.68;23.57;SBc;;;;;;;;2MASX J13355522+3535177,MCG +06-30-056,PGC 047971,SDSS J133555.19+353517.6,SDSS J133555.19+353517.7,SDSS J133555.20+353517.7,UGC 08587;;; +NGC5241;G;13:36:39.87;-08:24:06.8;Vir;1.05;0.46;50;15.00;;11.35;10.62;10.38;22.16;SBab;;;;;;;;2MASX J13363986-0824065,IRAS 13340-0808,MCG -01-35-006,PGC 048043;;; +NGC5242;Other;13:37:07.39;+02:46:14.1;Vir;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC5243;G;13:36:14.95;+38:20:38.1;CVn;1.01;0.45;126;14.00;;11.08;10.39;10.13;22.50;Sbc;;;;;;;;2MASX J13361501+3820381,2MASX J13361539+3820345,IRAS 13340+3836,MCG +07-28-036,PGC 048011,SDSS J133614.95+382038.1,UGC 08592;;; +NGC5244;G;13:38:41.70;-45:51:21.5;Cen;2.22;1.49;18;13.34;;10.78;10.18;9.96;23.52;Sbc;;;;;5219;;;2MASX J13384167-4551217,ESO 270-023,ESO-LV 270-0230,IRAS 13356-4536,MCG -07-28-007,PGC 048093,PGC 048236;;The name ESO 270- ? 020 applies to the nominal position for NGC 5219.; +NGC5245;G;13:37:23.23;+03:53:50.7;Vir;0.56;0.21;90;15.30;;11.89;11.07;11.01;23.05;S0-a;;;;;;;;2MASX J13372326+0353504,PGC 048110,SDSS J133723.23+035350.7,SDSS J133723.24+035350.7;;; +NGC5246;G;13:37:29.37;+04:06:16.0;Vir;0.85;0.65;85;14.80;;11.97;11.29;11.13;22.93;SBb;;;;;;;;2MASX J13372941+0406164,IRAS 13349+0421,MCG +01-35-017,PGC 048128,SDSS J133729.36+040615.9,SDSS J133729.36+040616.0,UGC 08612;;; +NGC5247;G;13:38:03.04;-17:53:02.5;Vir;5.32;4.26;170;10.77;;8.40;7.79;7.53;22.95;SABb;;;;;;;;2MASX J13380303-1753025,ESO 577-014,ESO-LV 577-0140,IRAS 13353-1737,MCG -03-35-011,PGC 048171,UGCA 368;;; +NGC5248;G;13:37:32.02;+08:53:06.6;Boo;4.07;2.38;120;11.40;;8.18;7.46;7.25;22.25;SABb;;;;;;;;2MASX J13373206+0853062,C 045,IRAS 13350+0908,MCG +02-35-015,PGC 048130,SDSS J133732.02+085306.6,UGC 08616;;; +NGC5249;G;13:37:37.50;+15:58:20.0;Boo;1.49;0.93;176;15.09;13.97;10.88;10.17;9.93;23.83;S0;;;;;;;;2MASX J13373751+1558197,MCG +03-35-015,PGC 048134,SDSS J133737.49+155820.0,UGC 08618;;; +NGC5250;G;13:36:07.33;+51:14:08.9;UMa;0.93;0.85;110;14.00;;10.90;10.30;10.05;22.42;S0;;;;;;;;2MASX J13360737+5114085,MCG +09-22-085,PGC 047997,SDSS J133607.32+511408.9,SDSS J133607.33+511408.9,SDSS J133607.33+511409.2,SDSS J133607.34+511408.9,UGC 08594;;; +NGC5251;G;13:37:24.83;+27:25:09.2;Boo;0.90;0.76;54;14.70;;11.81;10.96;10.77;23.14;S0-a;;;;;;;;2MASX J13372485+2725097,MCG +05-32-044,PGC 048119,SDSS J133724.82+272509.1,SDSS J133724.83+272509.1;;; +NGC5252;G;13:38:15.96;+04:32:33.3;Vir;1.29;0.75;11;15.21;14.21;10.89;10.10;9.77;23.56;S0;;;;;;;;2MASX J13381586+0432330,MCG +01-35-022,PGC 048189,SDSS J133815.86+043233.3,SDSS J133815.87+043233.3,UGC 08622;;; +NGC5253;G;13:39:55.96;-31:38:24.4;Cen;5.01;2.12;43;10.94;10.49;9.05;8.50;8.29;22.28;SBm;;;;;;;;2MASX J13395599-3138241,ESO 445-004,ESO-LV 445-0040,IRAS 13370-3123,MCG -05-32-060,PGC 048334,UGCA 369;;; +NGC5254;G;13:39:37.91;-11:29:37.9;Vir;3.35;1.44;127;12.20;;10.24;9.56;9.37;23.34;Sc;;;;;;;;2MASX J13393790-1129379,IRAS 13369-1114,MCG -02-35-012,PGC 048307;;; +NGC5255;G;13:37:18.12;+57:06:32.2;UMa;1.41;0.40;26;14.50;;11.94;11.24;10.98;24.14;Sa;;;;;;;;2MASX J13371811+5706324,MCG +10-19-098,PGC 048124,SDSS J133718.11+570632.1,SDSS J133718.12+570632.2,SDSS J133718.13+570632.1,SDSS J133718.13+570632.3;;; +NGC5256;GPair;13:38:17.50;+48:16:37.0;UMa;0.95;0.83;;14.10;13.42;;;;;;;;;;;;;MCG +08-25-031,UGC 08632;;; +NGC5256 NED01;G;13:38:17.31;+48:16:32.0;UMa;0.22;0.19;117;14.19;13.42;11.27;10.52;9.80;21.59;Sbc;;;;;;;;2MASX J13381728+4816319,MCG +08-25-031 NED01,PGC 093123,SDSS J133817.27+481632.3,SDSS J133817.28+481632.2,UGC 08632 NED01;;; +NGC5256 NED02;G;13:38:17.79;+48:16:41.0;UMa;1.48;1.29;9;15.00;;;;;23.52;Sab;;;;;;;;IRAS 13362+4831,MCG +08-25-031 NED02,PGC 048192,SDSS J133817.77+481640.9,SDSS J133817.77+481641.0,SDSS J133817.77+481641.1,UGC 08632 NED02;;; +NGC5257;G;13:39:52.91;+00:50:24.0;Vir;1.48;0.77;85;13.70;12.99;11.14;10.46;10.08;22.78;SABb;;;;;;;;2MASX J13395227+0050224,MCG +00-35-015,PGC 048330,UGC 08641;;UM 598 is a set of two HII regions within NGC 5257.; +NGC5258;G;13:39:57.69;+00:49:51.4;Vir;1.48;1.24;178;13.80;12.83;11.02;10.30;9.96;23.32;SBb;;;;;;;;2MASX J13395767+0049514,MCG +00-35-016,PGC 048338,UGC 08645;;; +NGC5259;GPair;13:39:23.90;+30:59:29.0;CVn;1.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC5259 NED01;G;13:39:23.13;+30:59:32.5;CVn;0.83;0.55;101;16.35;;;;;24.86;E;;;;;;;;SDSS J133923.13+305932.4;;Incorrectly called a superposed star in MCG Notes.;B-Mag taken from LEDA +NGC5259 NED02;G;13:39:24.67;+30:59:26.9;CVn;0.87;0.69;132;15.20;;11.43;10.67;10.45;23.73;E;;;;;;;;2MASX J13392470+3059275,MCG +05-32-052,PGC 048292,SDSS J133924.66+305926.8;;; +NGC5260;G;13:40:19.90;-23:51:29.1;Hya;1.64;1.60;160;13.63;;11.12;10.28;9.94;23.37;Sc;;;;;;;;2MASX J13401990-2351291,ESO 509-092,ESO-LV 509-0920,IRAS 13375-2336,MCG -04-32-050,PGC 048371,TYC 6714-1168-1;;; +NGC5261;G;13:40:16.09;+05:04:34.7;Vir;0.86;0.45;131;15.30;;11.91;11.22;10.82;23.27;Sa;;;;;;;;2MASX J13401609+0504343,PGC 048360,SDSS J134016.08+050434.7;;; +NGC5262;G;13:35:38.58;+75:02:21.9;UMi;1.22;0.69;177;14.41;13.65;11.58;10.90;10.53;24.19;E-S0;;;;;;;;2MASX J13353855+7502217,PGC 047923,UGC 08606;;; +NGC5263;G;13:39:55.64;+28:24:02.1;CVn;1.14;0.39;26;14.00;;11.23;10.52;10.17;22.51;Sc;;;;;;;;2MASX J13395563+2824020,IRAS 13376+2839,MCG +05-32-058,PGC 048333,UGC 08648;;; +NGC5264;G;13:41:36.68;-29:54:47.1;Hya;2.97;2.20;64;12.96;12.39;11.49;10.87;10.54;23.42;IB;;;;;;;;2MASX J13413668-2954472,ESO 445-012,ESO-LV 445-0120,MCG -05-32-066,PGC 048467,UGCA 370;;; +NGC5265;G;13:40:09.11;+36:51:39.9;CVn;0.95;0.85;140;14.90;;11.90;11.26;10.90;23.14;SBc;;;;;;;;2MASX J13400908+3651396,IRAS 13379+3706,MCG +06-30-068,PGC 048354,SDSS J134009.10+365139.9,SDSS J134009.11+365139.9,SDSS J134009.12+365139.9;;; +NGC5266;G;13:43:02.11;-48:10:09.9;Cen;2.92;2.09;98;11.89;11.14;8.43;7.70;7.48;23.11;S0;;;;;;;;2MASX J13430212-4810097,ESO 220-033,ESO-LV 220-0330,IRAS 13399-4755,PGC 048593;;Confused HIPASS source; +NGC5266A;G;13:40:37.10;-48:20:31.1;Cen;1.91;1.69;30;12.70;13.82;11.56;10.90;10.70;23.00;SBc;;;;;;;;2MASX J13403707-4820311,ESO 220-030,ESO-LV 220-0300,IRAS 13375-4805,PGC 048390;;Confused and extended HIPASS source; +NGC5267;G;13:40:39.96;+38:47:38.7;CVn;1.53;0.55;53;14.30;;10.83;10.13;9.83;23.06;SBb;;;;;;;;2MASX J13403994+3847384,MCG +07-28-049,PGC 048393,SDSS J134039.96+384738.6,SDSS J134039.96+384738.7,UGC 08655;;; +NGC5268;*;13:42:12.59;-13:51:34.4;Vir;;;;11.78;11.33;9.92;9.59;9.50;;;;;;;;;;2MASS J13421242-1351343,TYC 5552-395-1;;; +NGC5269;OCl;13:44:44.20;-62:54:45.0;Cen;4.80;;;;;;;;;;;;;;;;;MWSC 2156;;; +NGC5270;G;13:42:10.88;+04:15:45.3;Vir;1.00;0.76;20;14.70;;11.95;11.35;10.96;23.43;SBb;;;;;;;;2MASX J13421086+0415450,MCG +01-35-031,PGC 048527,UGC 08673;;; +NGC5271;G;13:41:42.41;+30:07:31.6;CVn;0.84;0.67;80;15.40;;12.27;11.59;11.38;23.42;SBa;;;;;;;;2MASX J13414237+3007312,MCG +05-32-065,PGC 048477,SDSS J134142.40+300731.5,SDSS J134142.41+300731.6;;; +NGC5272;GCl;13:42:11.23;+28:22:31.6;CVn;16.20;;;;6.39;;;;;;;;;003;;;;MWSC 2152;;;V-mag taken from LEDA +NGC5273;G;13:42:08.34;+35:39:15.2;CVn;2.31;1.52;6;14.01;13.12;9.50;8.84;8.67;23.07;S0;;;;;;;;2MASS J13420837+3539154,2MASX J13420838+3539152,MCG +06-30-072,PGC 048521,SDSS J134208.38+353915.4,SDSS J134208.39+353915.5,UGC 08675;;; +NGC5274;G;13:42:23.31;+29:50:52.2;CVn;0.60;0.54;111;15.40;;12.43;11.72;11.52;23.16;E;;;;;;;;2MASX J13422333+2950523,MCG +05-32-066,PGC 048536,SDSS J134223.31+295052.2,SDSS J134223.32+295052.1;;; +NGC5275;G;13:42:23.56;+29:49:29.6;CVn;0.88;0.67;79;15.40;;11.81;11.18;10.81;23.68;S0-a;;;;;;;;2MASX J13422356+2949293,MCG +05-32-067,PGC 048544,SDSS J134223.55+294929.5;;; +NGC5276;G;13:42:22.00;+35:37:26.9;CVn;0.86;0.60;156;14.60;;12.42;11.97;11.60;22.89;Sb;;;;;;;;2MASX J13422200+3537262,MCG +06-30-074,PGC 048542,SDSS J134222.00+353726.8,SDSS J134222.00+353726.9,UGC 08680;;; +NGC5277;G;13:42:38.38;+29:57:15.9;CVn;0.58;0.45;119;15.40;;13.18;12.67;12.30;22.91;Sbc;;;;;;;;2MASX J13423840+2957154,PGC 048563,SDSS J134238.38+295715.9;;; +NGC5278;G;13:41:39.62;+55:40:14.3;UMa;0.76;0.60;73;13.60;;11.25;10.64;10.27;21.72;Sb;;;;;;;;2MASX J13413961+5540146,IRAS 13397+5555,MCG +09-22-101,PGC 048473,SDSS J134139.61+554014.3,UGC 08677;;Multiple SDSS entries describe this object.; +NGC5279;G;13:41:43.75;+55:40:25.7;UMa;0.61;0.35;24;13.60;;12.35;11.70;11.41;21.98;SBa;;;;;;;;2MASX J13414375+5540256,MCG +09-22-102,PGC 048482,UGC 08678;;; +NGC5280;G;13:42:55.54;+29:52:07.0;CVn;0.84;0.81;100;15.10;;11.68;10.77;10.58;23.17;E;;;;;;;;2MASX J13425552+2952070,MCG +05-32-072,PGC 048580,SDSS J134255.53+295206.9;;; +NGC5281;OCl;13:46:35.15;-62:54:59.5;Cen;6.90;;;6.15;5.90;;;;;;;;;;;;;MWSC 2161;;; +NGC5282;G;13:43:24.88;+30:04:10.3;CVn;0.66;0.62;80;15.00;;11.71;10.99;10.69;22.93;E;;;;;;;;2MASX J13432486+3004104,MCG +05-32-075,PGC 048614,SDSS J134324.87+300410.2,SDSS J134324.88+300410.3,UGC 08687;;; +NGC5283;G;13:41:05.76;+67:40:20.3;Dra;1.19;1.03;132;14.97;14.05;10.97;10.29;9.97;23.41;S0;;;;;;;;2MASX J13410573+6740197,MCG +11-17-007,PGC 048425,UGC 08672;;; +NGC5284;*Ass;13:47:23.30;-59:08:57.8;Cen;8.40;;;;;;;;;;;;;;;;;MWSC 2162;;The ESO number applies to the nominal position.; +NGC5285;G;13:44:25.79;+02:06:35.7;Vir;0.77;0.64;61;15.50;;11.76;10.99;10.81;23.75;E;;;;;;;;2MASX J13442577+0206352,PGC 048688,SDSS J134425.79+020635.6,SDSS J134425.79+020635.7;;; +NGC5286;GCl;13:46:26.58;-51:22:24.5;Cen;6.60;;;9.18;8.31;;;;;;;;;;;;;C 084,MWSC 2160;;; +NGC5287;G;13:44:52.54;+29:46:15.3;CVn;0.68;0.45;116;16.00;;12.45;11.75;11.51;23.56;E;;;;;;;;2MASX J13445252+2946157,PGC 048741,SDSS J134452.54+294615.2,SDSS J134452.54+294615.3;;; +NGC5288;OCl;13:48:44.94;-64:41:07.4;Cir;3.60;;;;11.80;;;;;;;;;;;;;MWSC 2168;;; +NGC5289;G;13:45:08.71;+41:30:12.2;CVn;2.33;0.70;100;14.09;13.09;10.76;9.93;9.74;23.83;SABa;;;;;;;;2MASX J13450866+4130118,MCG +07-28-058,PGC 048749,SDSS J134508.71+413012.2,UGC 08699;;; +NGC5290;G;13:45:19.18;+41:42:45.3;CVn;3.24;0.90;95;17.80;16.50;9.51;8.76;8.44;23.63;Sbc;;;;;;;;2MASX J13451913+4142444,IRAS 13432+4157,MCG +07-28-061,PGC 048767,SDSS J134519.14+414244.7,SDSS J134519.18+414245.2,SDSS J134519.18+414245.3,UGC 08700;;; +NGC5291;G;13:47:24.48;-30:24:25.2;Cen;1.77;1.24;173;15.18;14.00;10.26;9.58;9.38;23.83;E-S0;;;;;;;;2MASX J13472445-3024250,ESO 445-030,ESO-LV 445-0300,MCG -05-33-006,PGC 048893;;; +NGC5292;G;13:47:40.07;-30:56:22.3;Cen;2.29;1.33;51;12.85;;9.62;8.98;8.69;22.98;Sab;;;;;;;;2MASX J13474008-3056225,ESO 445-031,ESO-LV 445-0310,MCG -05-33-008,PGC 048909;;; +NGC5293;G;13:46:52.68;+16:16:22.3;Boo;1.58;1.07;122;14.30;;11.43;10.92;10.66;23.16;Sc;;;;;;;;2MASX J13465265+1616220,MCG +03-35-024,PGC 048854,SDSS J134652.67+161622.2,UGC 08710;;; +NGC5294;G;13:45:18.13;+55:17:27.0;UMa;1.26;0.65;125;15.20;;13.41;12.70;12.74;23.81;I;;;;;;;;2MASX J13451806+5517256,PGC 048761,SDSS J134518.13+551726.9,SDSS J134518.13+551727.0;;; +NGC5295;G;13:38:39.39;+79:27:32.0;Cam;0.63;0.62;70;14.90;;11.67;10.98;10.67;22.54;E-S0;;;;;;;;2MASX J13383945+7927316,MCG +13-10-009,PGC 048215;;; +NGC5296;G;13:46:18.66;+43:51:04.9;CVn;0.95;0.55;11;15.00;;12.62;12.01;11.90;23.06;S0-a;;;;;;;;2MASX J13461868+4351046,MCG +07-28-062,PGC 048811,SDSS J134618.66+435104.8,SDSS J134618.66+435104.9;;; +NGC5297;G;13:46:23.67;+43:52:20.4;CVn;3.72;0.91;147;12.30;;9.84;9.18;8.89;22.87;Sc;;;;;;;;2MASX J13462369+4352193,IRAS 13442+4407,MCG +07-28-063,PGC 048815,SDSS J134623.67+435220.4,UGC 08709;;; +NGC5298;G;13:48:36.49;-30:25:42.7;Cen;1.86;0.87;69;13.83;13.09;10.43;9.73;9.45;23.54;SBb;;;;;;;;2MASX J13483648-3025427,ESO 445-039,ESO-LV 445-0390,MCG -05-33-015,PGC 048985;;; +NGC5299;OCl;13:50:26.26;-59:56:51.8;Cen;4.20;;;;;;;;;;;;;;;;;MWSC 2170;;; +NGC5300;G;13:48:16.04;+03:57:03.1;Vir;2.83;1.84;147;13.70;;10.40;9.71;9.50;23.77;SABc;;;;;;;;2MASX J13481608+0357032,IRAS 13457+0411,MCG +01-35-038,PGC 048959,SDSS J134816.03+035703.1,SDSS J134816.04+035703.1,SDSS J134816.08+035702.5,UGC 08727;;; +NGC5301;G;13:46:24.67;+46:06:25.4;CVn;3.96;0.84;150;13.00;;10.08;9.34;9.11;23.85;SBc;;;;;;;;2MASX J13462460+4606266,IRAS 13443+4621,MCG +08-25-041,PGC 048816,SDSS J134624.66+460625.4,SDSS J134624.67+460625.4,UGC 08711;;; +NGC5302;G;13:48:49.68;-30:30:40.0;Cen;1.05;0.59;162;13.23;12.20;9.80;9.11;8.85;22.21;S0-a;;;;;;;;2MASX J13484969-3030401,ESO 445-043,ESO-LV 445-0430,MCG -05-33-018,PGC 049007;;; +NGC5303;G;13:47:44.99;+38:18:16.7;CVn;0.86;0.44;90;12.90;;11.10;10.53;10.23;20.77;Sb;;;;;;;;2MASX J13474496+3818163,IRAS 13455+3833,MCG +07-28-067,PGC 048917,SDSS J134744.98+381816.6,SDSS J134744.99+381816.6,UGC 08725;;; +NGC5304;G;13:50:01.48;-30:34:42.5;Cen;1.91;1.39;140;13.59;13.56;10.44;9.74;9.51;23.75;E-S0;;;;;;;;2MASX J13500146-3034426,ESO 445-052,ESO-LV 445-0520,MCG -05-33-022,PGC 049090;;; +NGC5305;G;13:47:55.74;+37:49:34.8;CVn;1.46;1.02;26;14.70;;11.48;10.80;10.50;23.69;Sb;;;;;;;;2MASX J13475569+3749343,MCG +06-30-087,PGC 048930,SDSS J134755.74+374934.7,SDSS J134755.75+374934.8,UGC 08729;;; +NGC5306;G;13:49:11.40;-07:13:27.8;Vir;1.94;1.24;33;13.43;;9.91;9.26;8.96;23.25;S0;;;;;;;;2MASX J13491141-0713277,MCG -01-35-014,PGC 049039;;; +NGC5307;PN;13:51:03.30;-51:12:20.8;Cen;0.21;;;12.10;11.20;12.03;11.99;11.28;;;;14.67;14.66;;;;HD 120489;2MASX J13510332-5112207,ESO 221-011,IRAS 13478-5057,PN G312.3+10.5;;; +NGC5308;G;13:47:00.43;+60:58:23.4;UMa;4.33;0.57;60;12.50;;9.28;8.59;8.36;24.00;S0;;;;;;;;2MASX J13470039+6058229,MCG +10-20-029,PGC 048860,SDSS J134700.42+605823.4,SDSS J134700.43+605823.3,UGC 08722;;; +NGC5309;G;13:50:10.76;-15:37:06.3;Vir;0.63;0.56;125;15.71;;13.24;12.69;12.32;23.34;;;;;;;;;2MASX J13501075-1537063,PGC 908764;;Identification as NGC 5309 is very uncertain.; +NGC5310;*;13:49:47.74;+00:04:09.1;Vir;;;;14.07;;11.75;11.45;11.43;;;;;;;;;;2MASS J13494774+0004088,SDSS J134947.74+000409.0;;; +NGC5311;G;13:48:56.08;+39:59:06.4;CVn;2.01;1.66;102;14.35;13.30;10.17;9.47;9.25;23.60;S0-a;;;;;;;;2MASX J13485605+3959068,IRAS 13467+4014,MCG +07-28-072,PGC 049011,SDSS J134856.07+395906.6,SDSS J134856.07+395906.7,UGC 08735;;; +NGC5312;G;13:49:50.57;+33:37:18.3;CVn;1.09;0.57;39;14.80;;11.54;10.86;10.58;23.52;S0-a;;;;;;;;2MASX J13495059+3337179,MCG +06-30-092,PGC 049075,SDSS J134950.57+333718.3;;; +NGC5313;G;13:49:44.34;+39:59:05.2;CVn;1.81;1.05;42;12.40;;9.80;9.12;8.82;22.38;SABb;;;;;;;;2MASX J13494435+3959045,IRAS 13475+4013,MCG +07-28-074,PGC 049069,SDSS J134944.34+395905.2,UGC 08744;;; +NGC5314;G;13:46:11.40;+70:20:22.4;UMi;0.95;0.49;86;14.60;;11.36;10.65;10.36;23.01;Sa;;;;;;;;2MASX J13461136+7020225,IRAS 13450+7035,MCG +12-13-009,PGC 048810;;; +NGC5315;PN;13:53:56.89;-66:30:51.0;Cir;0.10;;;13.00;9.80;10.23;10.06;9.11;;;;14.58;14.40;;;;HD 120800;ESO 097-009,PN G309.1-04.3;;Incorrectly identified as IC 5315 in PKSCAT90 (version 1.01).; +NGC5316;OCl;13:53:57.22;-61:52:08.8;Cen;9.90;;;6.08;6.00;;;;;;;;;;;;;MWSC 2175;;; +NGC5317;Dup;13:56:12.00;+05:00:52.1;Vir;;;;;;;;;;;;;;;5364;;;;;; +NGC5318;G;13:50:36.01;+33:42:17.6;CVn;1.51;1.12;165;13.50;;10.46;9.78;9.49;23.21;S0;;;;;;;;PGC 049139;;; +NGC5319;G;13:50:40.66;+33:45:41.6;CVn;0.65;0.27;68;16.50;;14.16;13.70;12.99;23.70;Sbc;;;;;;;;2MASX J13504067+3345414,PGC 084061,SDSS J135040.65+334541.5,SDSS J135040.66+334541.6;;; +NGC5320;G;13:50:20.38;+41:21:58.4;CVn;1.82;0.92;17;13.10;;10.63;9.99;9.73;22.83;SABc;;;;;;;;2MASX J13502037+4121588,IRAS 13482+4136,MCG +07-28-076,PGC 049112,SDSS J135020.37+412158.3,SDSS J135020.38+412158.4,UGC 08749;;; +NGC5321;G;13:50:43.69;+33:37:57.4;CVn;0.89;0.63;49;15.30;;11.75;11.13;10.84;23.32;S0-a;;;;;;;;2MASX J13504364+3337574,MCG +06-30-101,PGC 049148,SDSS J135043.69+333757.3,SDSS J135043.70+333757.4;;; +NGC5322;G;13:49:15.27;+60:11:25.9;UMa;5.62;3.49;95;11.30;;11.08;10.41;9.92;23.64;E;;;;;;;;2MASX J13491520+6011254,MCG +10-20-035,PGC 049044,UGC 08745;;; +NGC5323;G;13:45:36.52;+76:49:42.0;UMi;1.05;0.44;164;14.30;;11.96;11.39;11.11;22.78;Sab;;;;;;;;2MASX J13453654+7649421,IRAS 13451+7704,MCG +13-10-012,PGC 048785,UGC 08719;;; +NGC5324;G;13:52:05.89;-06:03:29.9;Vir;2.22;1.09;15;12.50;;10.33;9.75;9.38;22.51;Sc;;;;;;;;2MASX J13520588-0603299,IRAS 13494-0548,MCG -01-35-016,PGC 049236;;; +NGC5325;G;13:50:54.21;+38:16:29.2;CVn;0.86;0.62;108;15.10;;13.03;12.24;12.31;23.29;Sc;;;;;;;;2MASX J13505425+3816279,MCG +07-28-080,PGC 049163,SDSS J135054.21+381629.2;;VV 607 incorrectly identified as MCG +06-30-103 in 1977A&AS...28....1V .; +NGC5326;G;13:50:50.70;+39:34:29.5;CVn;2.18;1.03;136;12.90;;9.80;9.12;8.88;23.00;Sa;;;;;;;;2MASX J13505071+3934296,MCG +07-28-082,PGC 049157,SDSS J135050.70+393429.4,UGC 08764;;; +NGC5327;G;13:52:04.17;-02:12:23.8;Vir;1.61;0.95;93;13.60;;11.00;10.29;9.90;23.17;Sb;;;;;;;;2MASX J13520418-0212233,IRAS 13494-0157,MCG +00-35-021,PGC 049234,SDSS J135204.17-021223.7,SDSS J135204.17-021223.8,SDSS J135204.18-021223.8,UGC 08768;;; +NGC5328;G;13:52:53.31;-28:29:21.8;Hya;3.07;1.71;78;12.74;;9.48;8.76;8.49;23.98;E;;;;;;;;2MASX J13525331-2829213,ESO 445-067,ESO-LV 445-0670,MCG -05-33-028,PGC 049307;;; +NGC5329;G;13:52:10.09;+02:19:30.4;Vir;1.48;0.71;170;13.37;12.43;10.57;9.91;9.68;23.09;E;;;;;;;;2MASX J13521008+0219305,MCG +01-35-044,PGC 049248,SDSS J135210.09+021930.4,UGC 08771;;; +NGC5330;G;13:52:59.19;-28:28:14.4;Hya;1.14;0.93;165;14.86;;11.42;10.76;10.50;23.66;E;;;;;;;;2MASX J13525917-2828141,ESO 445-068,ESO-LV 445-0680,MCG -05-33-028a,PGC 049316;;; +NGC5331;GPair;13:52:16.30;+02:06:10.9;Vir;1.10;;;;;;;;;;;;;;;;;MCG +00-35-022,UGC 08774;;;Diameter of the group inferred by the author. +NGC5331 NED01;G;13:52:16.15;+02:06:03.3;Vir;1.07;0.58;132;15.99;;;;;25.02;SABb;;;;;5331S;;;IRAS13496+0221,MCG +00-35-022 NED01,PGC049264,SDSSJ135215.66+020608.9,SDSSJ135215.66+020608.8,SDSSJ135215.63+020609.8,UGC 08774 NED01;;Component 'a)' in UGC notes.;B-Mag taken from LEDA +NGC5331 NED02;G;13:52:16.42;+02:06:31.1;Vir;0.56;0.29;50;14.30;;12.07;11.38;10.96;22.59;Sb;;;;;5331N;;;2MASX J13521641+0206305,MCG +00-35-022 NED02,PGC 049266,UGC 08774 NED02;;Component 'b)' in UGC notes.; +NGC5332;G;13:52:07.92;+16:58:11.1;Boo;1.06;0.77;55;14.10;;10.77;10.07;9.84;22.81;E-S0;;;;;;;;2MASX J13520794+1658115,MCG +03-35-030,PGC 049243,SDSS J135207.92+165811.0,UGC 08773;;; +NGC5333;G;13:54:24.22;-48:30:45.1;Cen;2.18;1.09;51;12.82;;9.34;8.62;8.37;23.21;S0;;;;;;;;2MASX J13542423-4830454,ESO 221-017,ESO-LV 221-0170,PGC 049424;;; +NGC5334;G;13:52:54.46;-01:06:52.7;Vir;3.38;2.44;17;12.00;;10.82;10.16;9.94;24.15;Sc;;;;;;4338;;2MASX J13525447-0106531,IRAS 13502-0051,MCG +00-35-024,PGC 049308,SDSS J135254.45-010652.6,SDSS J135254.46-010652.6,SDSS J135254.46-010652.7,SDSS J135254.50-010653.3,UGC 08790;;; +NGC5335;G;13:52:56.56;+02:48:51.4;Vir;1.45;1.32;155;14.50;;10.96;10.26;10.09;23.82;Sb;;;;;;;;2MASX J13525653+0248516,MCG +01-35-046,PGC 049310,SDSS J135256.54+024902.3,SDSS J135256.55+024851.3,SDSS J135256.55+024851.4,UGC 08791;;; +NGC5336;G;13:52:09.80;+43:14:34.5;CVn;1.22;0.92;101;13.60;;11.67;11.07;10.81;22.76;SABc;;;;;;;;2MASX J13520974+4314340,IRAS 13500+4329,MCG +07-29-003,PGC 049250,SDSS J135209.79+431434.4,SDSS J135209.80+431434.4,SDSS J135209.80+431434.5,UGC 08785;;; +NGC5337;G;13:52:23.03;+39:41:14.1;CVn;1.66;0.80;22;13.40;;10.82;10.15;9.97;22.88;SBab;;;;;;;;2MASX J13522304+3941140,MCG +07-29-004,PGC 049275,UGC 08789;;; +NGC5338;G;13:53:26.55;+05:12:28.0;Vir;1.94;0.85;98;14.30;;11.22;10.58;10.38;24.16;S0;;;;;;;;2MASX J13532652+0512280,MCG +01-35-048,PGC 049353,SDSS J135326.54+051227.9,SDSS J135326.55+051227.9,SDSS J135326.55+051228.0,SDSS J135326.56+051228.0,UGC 08800;;; +NGC5339;G;13:54:00.27;-07:55:50.4;Vir;1.82;1.50;85;16.50;;10.57;9.95;9.70;22.77;Sa;;;;;;;;2MASX J13540027-0755502,MCG -01-35-018,PGC 049388;;; +NGC5340;G;13:48:59.91;+72:39:13.8;UMi;0.84;0.64;85;15.20;;11.44;10.72;10.38;;E;;;;;;;;2MASX J13485986+7239140,MCG +12-13-014,PGC 049021;;MCG declination is -10 arcmin in error.;Diameters and position angle taken from Simbad. +NGC5341;G;13:52:31.96;+37:49:02.7;CVn;1.07;0.58;159;14.10;;11.89;11.42;11.23;22.63;SBm;;;;;;;;2MASX J13523191+3749028,IRAS 13503+3803,MCG +06-31-002,PGC 049285,SDSS J135231.95+374902.7,SDSS J135231.96+374902.7,UGC 08792;;; +NGC5342;G;13:51:25.85;+59:51:50.2;UMa;0.92;0.30;154;14.40;;11.08;10.41;10.15;22.75;S0;;;;;;;;2MASX J13512589+5951468,MCG +10-20-041,PGC 049192,SDSS J135125.84+595150.2,UGC 08776;;; +NGC5343;G;13:54:11.71;-07:35:17.3;Vir;1.23;0.93;78;14.00;;10.20;9.51;9.27;23.44;E-S0;;;;;;;;2MASX J13541170-0735172,MCG -01-35-019,PGC 049412;;; +NGC5344;GPair;13:49:58.03;+73:57:10.4;UMi;0.54;0.47;100;15.40;;11.95;11.21;11.12;;E;;;;;;;;2MASX J13501205+7357108,PGC 049085;;; +NGC5345;G;13:54:14.25;-01:26:11.3;Vir;1.50;0.91;157;13.80;;10.53;9.72;9.52;23.15;Sa;;;;;;;;2MASX J13541422-0126111,IRAS 13516-0111,MCG +00-35-026,PGC 049415,SDSS J135414.24-012611.3,SDSS J135414.25-012611.3,UGC 08820;;; +NGC5346;G;13:53:01.89;+39:34:50.8;CVn;1.56;0.64;160;14.90;;12.39;11.54;11.18;23.71;SABc;;;;;;;;2MASX J13530191+3934498,MCG +07-29-007,PGC 049322,SDSS J135301.88+393450.8,SDSS J135301.89+393450.8,UGC 08804;;; +NGC5347;G;13:53:17.83;+33:29:27.0;CVn;1.62;1.19;122;13.46;12.70;10.62;9.98;9.65;23.03;Sab;;;;;;;;2MASX J13531785+3329267,IRAS 13510+3344,MCG +06-31-007,PGC 049342,SDSS J135317.78+332927.0,SDSS J135317.79+332927.0,UGC 08805;;Large position error in 1991ApJS...76.1043P.; +NGC5348;G;13:54:11.27;+05:13:38.8;Vir;3.88;0.73;175;14.50;;11.50;10.77;10.87;24.75;SBbc;;;;;;;;2MASX J13541125+0513379,MCG +01-35-051,PGC 049411,SDSS J135411.26+051338.7,UGC 08821;;; +NGC5349;G;13:53:13.13;+37:52:59.3;CVn;1.60;0.48;81;15.10;;11.71;10.98;10.63;23.88;SBb;;;;;;;;2MASX J13531316+3752592,IRAS 13510+3807,MCG +06-31-005,PGC 049336,SDSS J135313.12+375259.3,UGC 08803;;; +NGC5350;G;13:53:21.63;+40:21:50.2;CVn;2.69;1.66;35;12.40;;9.24;8.87;8.62;22.80;Sbc;;;;;;;;2MASX J13532158+4021502,IRAS 13512+4036,MCG +07-29-009,PGC 049347,SDSS J135321.62+402150.1,SDSS J135321.63+402150.2,UGC 08810;;; +NGC5351;G;13:53:27.71;+37:54:53.9;CVn;2.43;1.31;101;13.10;;10.40;9.71;9.45;23.30;SBb;;;;;;;;2MASX J13532769+3754542,IRAS 13513+3809,MCG +06-31-008,PGC 049359,SDSS J135327.71+375453.9,UGC 08809;;; +NGC5352;G;13:53:38.43;+36:08:02.6;CVn;1.42;1.24;92;14.40;;10.83;10.07;9.80;23.57;E-S0;;;;;;;;2MASX J13533847+3608031,MCG +06-31-011,PGC 049370,SDSS J135338.42+360802.5,SDSS J135338.43+360802.5,SDSS J135338.43+360802.6,UGC 08812;;; +NGC5353;G;13:53:26.69;+40:16:58.9;CVn;2.37;1.18;152;11.80;;8.52;7.73;7.63;22.57;S0;;;;;;;;2MASX J13532674+4016592,MCG +07-29-010,PGC 049356,SDSS J135326.72+401659.4,UGC 08813;;; +NGC5354;G;13:53:26.70;+40:18:09.9;CVn;3.03;1.15;174;12.30;;;;;23.42;S0;;;;;;;;MCG +07-29-011,PGC 049354,UGC 08814;;; +NGC5355;G;13:53:45.56;+40:20:19.2;CVn;1.15;0.72;30;14.00;;11.38;10.70;10.45;23.06;S0;;;;;;;;2MASX J13534556+4020196,MCG +07-29-012,PGC 049380,SDSS J135345.56+402019.2,UGC 08819;;; +NGC5356;G;13:54:58.46;+05:20:01.4;Vir;2.83;0.67;16;14.10;;10.66;9.97;9.64;23.60;Sbc;;;;;;;;2MASX J13545842+0520009,IRAS 13524+0534,MCG +01-35-052,PGC 049468,SDSS J135458.45+052001.4,SDSS J135458.46+052001.4,UGC 08831;;; +NGC5357;G;13:55:59.55;-30:20:29.2;Cen;2.18;1.87;24;13.09;13.51;9.94;9.21;8.93;23.54;E;;;;;;;;2MASX J13555954-3020291,ESO 445-078,ESO-LV 445-0780,MCG -05-33-032,PGC 049534;;; +NGC5358;G;13:54:00.41;+40:16:38.3;CVn;1.12;0.38;138;14.60;;11.66;10.96;10.90;23.40;S0-a;;;;;;;;2MASX J13540043+4016387,MCG +07-29-013,PGC 049389,SDSS J135400.41+401638.3,UGC 08826;;; +NGC5359;OCl;14:00:09.57;-70:23:32.3;Cir;5.40;;;;;;;;;;;;;;;;;MWSC 2194;;; +NGC5360;G;13:55:38.75;+04:59:06.2;Vir;1.10;0.62;63;14.90;;11.78;11.06;11.15;23.76;S0-a;;;;;;0958;;2MASX J13553867+0459050,MCG +01-36-001,PGC 049513,SDSS J135538.75+045906.2;;Identification as IC 0958 is not certain.; +NGC5361;G;13:54:35.23;+38:26:57.9;CVn;0.76;0.42;64;14.70;;12.26;11.55;11.24;23.00;S0-a;;;;;;;;2MASX J13543519+3826582,IRAS 13524+3841,MCG +07-29-015,PGC 049441,SDSS J135435.22+382657.8;;; +NGC5362;G;13:54:53.30;+41:18:48.7;CVn;1.89;0.78;87;13.20;;10.88;10.24;9.98;22.85;Sb;;;;;;;;2MASX J13545329+4118487,IRAS 13527+4133,MCG +07-29-016,PGC 049464,SDSS J135453.31+411848.6,UGC 08835;;; +NGC5363;G;13:56:07.21;+05:15:17.2;Vir;4.17;2.75;133;12.12;10.51;7.83;7.16;6.93;22.82;S0-a;;;;;;;;2MASX J13560724+0515169,IRAS 13536+0529,MCG +01-36-002,PGC 049547,UGC 08847;;; +NGC5364;G;13:56:12.00;+05:00:52.1;Vir;3.80;1.66;45;13.20;;8.67;8.08;7.80;22.19;Sbc;;;;;5317;;;2MASX J13561200+0500520,IRAS 13536+0515,MCG +01-36-003,PGC 049555,UGC 08853;;NGC 5348 may also contribute to the HIPASS detection.; +NGC5365;G;13:57:50.64;-43:55:52.7;Cen;3.88;2.14;174;12.20;11.14;8.83;8.18;7.92;24.03;S0;;;;;;;;2MASX J13575063-4355528,ESO 271-008,ESO-LV 271-0080,MCG -07-29-002,PGC 049673;;; +NGC5365A;G;13:56:39.53;-44:00:33.3;Cen;2.84;0.68;94;13.60;13.52;9.89;9.12;8.84;23.61;SBb;;;;;;;;2MASX J13563952-4400331,ESO 271-006,ESO-LV 271-0060,IRAS 13535-4345,MCG -07-29-001,PGC 049586;;; +NGC5365B;G;13:58:39.57;-43:57:49.4;Cen;1.79;0.42;51;14.14;;10.90;10.16;9.88;23.37;Sab;;;;;;;;2MASX J13583954-4357492,ESO 271-009,ESO-LV 271-0090,IRAS 13555-4343,MCG -07-29-003,PGC 049750;;; +NGC5366;G;13:56:24.86;-00:14:51.2;Vir;0.80;0.57;43;14.70;;12.18;11.39;10.73;22.78;S0-a;;;;;;;;2MASX J13562484-0014514,IRAS 13538-0000,MCG +00-36-002,PGC 049569;;; +NGC5367;RfN;13:57:43.87;-39:58:42.3;Cen;2.00;2.00;;;;;;;;;;;;;;4347;;IRAS 13547-3944;;Includes at least two Galactic stars.;Dimensions taken from LEDA +NGC5368;G;13:54:29.16;+54:19:50.4;UMa;0.99;0.75;19;13.80;;11.14;10.46;10.20;22.60;Sab;;;;;;;;2MASX J13542914+5419507,IRAS 13526+5434,MCG +09-23-014,PGC 049431,SDSS J135429.14+541950.6,SDSS J135429.15+541950.3,SDSS J135429.16+541950.3,SDSS J135429.16+541950.4,UGC 08834;;; +NGC5369;G;13:56:37.62;-05:28:11.6;Vir;1.08;0.87;110;14.49;;11.03;10.33;10.12;23.48;E;;;;;;;;2MASX J13563762-0528114,PGC 049583;;; +NGC5370;G;13:54:09.37;+60:40:41.0;UMa;1.37;1.29;65;14.30;;11.03;10.39;10.03;23.49;S0;;;;;;;;2MASX J13540935+6040406,MCG +10-20-044,PGC 049408,SDSS J135409.36+604040.9,SDSS J135409.37+604041.0,SDSS J135409.37+604041.2,UGC 08832;;; +NGC5371;G;13:55:39.94;+40:27:42.3;CVn;3.98;2.45;7;12.81;11.93;8.56;7.89;7.61;22.64;Sbc;;;;;5390;;;2MASX J13554002+4027423,IRAS 13535+4042,MCG +07-29-020,PGC 049514,SDSS J135539.94+402742.3,UGC 08846;;Identification as NGC 5390 is not certain.; +NGC5372;G;13:54:45.99;+58:40:00.7;UMa;0.69;0.37;137;13.70;;11.51;10.90;10.65;21.52;E?;;;;;;;;2MASX J13544600+5839590,IRAS 13530+5854,MCG +10-20-046,PGC 049451,SDSS J135445.99+584000.7,UGC 08843;;; +NGC5373;G;13:57:07.46;+05:15:06.8;Vir;0.60;0.52;45;15.30;;12.27;11.73;11.31;23.08;E-S0;;;;;;;;2MASX J13570745+0515068,PGC 049620,SDSS J135707.45+051506.7,SDSS J135707.46+051506.7,SDSS J135707.46+051506.8;;; +NGC5374;G;13:57:29.63;+06:05:49.2;Vir;1.62;1.32;45;13.70;;10.54;9.93;9.70;23.34;SBbc;;;;;;;;2MASX J13572962+0605487,IRAS 13549+0620,MCG +01-36-004,PGC 049650,SDSS J135729.62+060549.1,SDSS J135729.63+060549.1,SDSS J135729.63+060549.2,UGC 08874;;; +NGC5375;G;13:56:56.00;+29:09:51.7;CVn;2.34;1.73;179;12.78;12.08;10.19;9.39;9.24;23.20;SBab;;;;;5396;;;2MASX J13565598+2909514,MCG +05-33-027,PGC 049604,SDSS J135655.99+290951.7,SDSS J135656.00+290951.7,UGC 08865;;; +NGC5376;G;13:55:16.07;+59:30:23.8;UMa;1.48;0.92;66;12.90;;10.03;9.35;9.10;22.26;SABa;;;;;;;;2MASX J13551606+5930241,IRAS 13536+5945,MCG +10-20-047,PGC 049489,SDSS J135516.05+593023.7,SDSS J135516.06+593023.8,SDSS J135516.07+593023.8,UGC 08852;;; +NGC5377;G;13:56:16.67;+47:14:08.5;CVn;3.64;1.42;34;12.39;11.46;9.26;8.61;8.36;23.29;Sa;;;;;;;;2MASX J13561666+4714080,IRAS 13542+4729,MCG +08-25-052,PGC 049563,SDSS J135616.66+471408.5,SDSS J135616.67+471408.5,UGC 08863;;; +NGC5378;G;13:56:51.02;+37:47:50.1;CVn;2.03;1.57;73;13.80;;10.75;10.07;9.83;23.74;Sa;;;;;;;;2MASX J13565101+3747494,MCG +06-31-027,PGC 049598,SDSS J135651.01+374750.0,SDSS J135651.02+374750.1,UGC 08869;;; +NGC5379;G;13:55:34.32;+59:44:34.1;UMa;2.06;0.72;60;14.10;;11.25;10.56;10.31;24.29;S0;;;;;;;;2MASX J13553434+5944341,MCG +10-20-049,PGC 049508,SDSS J135534.32+594434.0,SDSS J135534.32+594434.1,UGC 08860;;; +NGC5380;G;13:56:56.69;+37:36:37.4;CVn;2.00;0.99;95;13.50;;10.30;9.61;9.35;23.49;E-S0;;;;;;;;2MASX J13565666+3736374,MCG +06-31-028,PGC 049605,SDSS J135656.68+373637.3,UGC 08870;;; +NGC5381;OCl;14:00:41.96;-59:35:12.5;Cen;6.30;;;;;;;;;;;;;;;;;MWSC 2196;;; +NGC5382;G;13:58:14.89;+06:15:31.3;Vir;1.45;1.08;24;14.00;;10.58;9.86;9.70;23.05;S0;;;;;;;;2MASX J13581486+0615318,MCG +01-36-007,PGC 049711,SDSS J135814.89+061531.2,UGC 08885;;; +NGC5383;G;13:57:04.97;+41:50:46.5;CVn;2.48;1.88;98;12.50;;9.52;8.84;8.54;22.73;Sb;;;;;;;;2MASX J13570498+4150456,IRAS 13550+4205,MCG +07-29-023,PGC 049618,SDSS J135704.97+415046.5,UGC 08875;;; +NGC5384;G;13:58:12.86;+06:31:05.5;Vir;1.80;0.74;56;14.00;;10.79;10.12;9.88;24.03;S0;;;;;;;;2MASX J13581285+0631048,MCG +01-36-008,PGC 049707,SDSS J135812.85+063105.4,SDSS J135812.86+063105.5,UGC 08886;;; +NGC5385;OCl;13:52:31.92;+76:09:46.0;UMi;;;;;;;;;;;;;;;;;;;;; +NGC5386;G;13:58:22.34;+06:20:20.8;Vir;0.98;0.45;47;13.70;;11.45;10.74;10.48;22.14;S0-a;;;;;;;;2MASX J13582234+0620213,IRAS 13558+0634,MCG +01-36-010,PGC 049719,SDSS J135822.33+062020.7,UGC 08890;;; +NGC5387;G;13:58:24.79;+06:04:16.6;Vir;1.17;0.37;24;14.80;;11.81;11.08;10.71;23.07;SBbc;;;;;;;;2MASX J13582480+0604166,IRAS 13559+0618,MCG +01-36-011,PGC 049724,SDSS J135824.78+060416.5,SDSS J135824.79+060416.5,UGC 08891;;; +NGC5388;Other;13:58:57.97;-14:09:03.2;Vir;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC5389;G;13:56:06.33;+59:44:31.4;UMa;3.27;0.71;4;13.20;;9.61;8.88;8.62;23.99;S0-a;;;;;;;;2MASX J13560636+5944311,IRAS 13544+5959,MCG +10-20-051,PGC 049548,SDSS J135606.32+594431.3,UGC 08866;;; +NGC5390;Dup;13:55:39.94;+40:27:42.3;CVn;;;;;;;;;;;;;;;5371;;;;;; +NGC5391;Other;13:57:37.53;+46:19:31.0;CVn;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC5392;G;13:59:24.77;-03:12:33.1;Vir;0.95;0.74;145;15.10;;11.14;10.43;10.12;23.12;S0-a;;;;;;;;2MASX J13592475-0312330,MCG +00-36-005,PGC 049792,SDSS J135924.77-031233.1;;; +NGC5393;G;14:00:32.04;-28:52:28.5;Hya;0.95;0.62;5;14.00;;10.88;10.17;9.90;22.58;SBa;;;;;;;;2MASX J14003201-2852283,ESO 445-087,ESO-LV 445-0870,IRAS 13576-2838,MCG -05-33-035,PGC 049863;;; +NGC5394;G;13:58:33.65;+37:27:12.5;CVn;2.63;1.07;60;13.70;13.12;11.14;10.39;10.07;23.78;SBb;;;;;;;;2MASX J13583365+3727124,MCG +06-31-033,PGC 049739,SDSS J135833.63+372712.7,SDSS J135834.11+372709.9,UGC 08898;;Multiple SDSS entries describe this object.; +NGC5395;G;13:58:37.98;+37:25:28.1;CVn;2.49;1.16;171;13.26;12.48;9.55;8.99;8.57;22.45;SABb;;;;;;;;2MASX J13583793+3725284,MCG +06-31-034,PGC 049747,SDSS J135837.97+372528.1,SDSS J135837.98+372528.1,UGC 08900;;The Bologna position is 9 arcsec west of the nucleus.; +NGC5396;Dup;13:56:56.00;+29:09:51.7;CVn;;;;;;;;;;;;;;;5375;;;;;; +NGC5397;G;14:01:10.46;-33:56:45.0;Cen;1.62;1.01;65;13.79;;10.26;9.44;9.27;23.66;E-S0;;;;;;;;2MASX J14011044-3356451,ESO 384-031,ESO-LV 384-0310,MCG -06-31-013,PGC 049908;;; +NGC5398;G;14:01:21.56;-33:03:49.6;Cen;2.76;1.65;174;12.87;12.39;11.10;10.87;10.34;24.57;Sd;;;;;;;;2MASX J14012155-3303496,ESO 384-032,ESO-LV 384-0320,IRAS 13584-3249,MCG -05-33-037,PGC 049923,UGCA 379;;; +NGC5399;G;13:59:31.42;+34:46:24.9;CVn;1.14;0.32;87;14.70;;11.09;10.34;10.01;22.53;Sbc;;;;;;;;2MASX J13593143+3446244,IRAS 13573+3500,MCG +06-31-039,PGC 049799,SDSS J135931.41+344624.8,SDSS J135931.42+344624.9,UGC 08912;;; +NGC5400;G;14:00:37.20;-02:51:28.1;Vir;1.40;1.25;104;14.50;;10.63;9.97;9.64;23.76;E-S0;;;;;;;;2MASX J14003719-0251281,MCG +00-36-008,PGC 049869,SDSS J140037.20-025128.1,SDSS J140037.21-025128.2;;; +NGC5401;G;13:59:43.43;+36:14:17.2;CVn;1.46;0.31;81;14.60;;11.18;10.54;10.31;23.34;SABa;;;;;;;;2MASX J13594345+3614176,MCG +06-31-040,PGC 049810,SDSS J135943.42+361417.2,SDSS J135943.43+361417.2,UGC 08916;;; +NGC5402;G;13:58:16.55;+59:48:52.4;UMa;1.13;0.28;166;14.60;;11.90;11.23;10.92;22.44;SBc;;;;;;;;2MASX J13581654+5948524,IRAS 13566+6003,MCG +10-20-054,PGC 049712,UGC 08903;;; +NGC5403;G;13:59:50.92;+38:10:57.1;CVn;2.75;0.89;143;14.90;;11.20;10.67;10.29;24.63;SBb;;;;;;;;IRAS 13577+3825,MCG +06-31-041,PGC 049820,SDSS J135950.75+381056.2,SDSS J135950.76+381056.2,UGC 08919;;The SDSS position refers to the bulge southwest of the dust lane.; +NGC5404;**;14:01:07.48;+00:05:09.2;Vir;;;;;;;;;;;;;;;;;;;;; +NGC5405;G;14:01:09.47;+07:42:08.2;Boo;0.83;0.76;145;14.50;;12.75;12.08;12.03;22.91;Sc;;;;;;;;2MASX J14010944+0742086,MCG +01-36-014,PGC 049906,SDSS J140109.47+074208.1,UGC 08928;;; +NGC5406;G;14:00:20.12;+38:54:55.5;CVn;1.69;1.22;115;13.10;;10.32;9.61;9.35;22.75;Sbc;;;;;;;;2MASX J14002009+3854553,IRAS 13582+3909,MCG +07-29-031,PGC 049847,SDSS J140020.11+385455.5,SDSS J140020.12+385455.5,UGC 08925;;; +NGC5407;G;14:00:50.10;+39:09:22.4;CVn;1.37;0.89;97;14.50;;11.27;10.58;10.34;23.84;E;;;;;;;;2MASX J14005010+3909220,MCG +07-29-033,PGC 049890,SDSS J140050.07+390922.4,SDSS J140050.09+390922.4,UGC 08930;;; +NGC5408;G;14:03:20.91;-41:22:39.7;Cen;2.84;1.53;66;12.59;;11.44;10.89;11.39;22.66;IB;;;;;;;;2MASX J14032090-4122397,ESO 325-046,ESO 325-047,ESO-LV 325-0470,IRAS 14002-4108,MCG -07-29-006,PGC 050073;;; +NGC5409;G;14:01:46.08;+09:29:25.0;Boo;1.56;1.00;51;14.40;;11.62;10.98;10.42;23.51;SABb;;;;;;;;2MASX J14014606+0929248,MCG +02-36-009,PGC 049952,SDSS J140146.08+092925.0,UGC 08938;;; +NGC5410;G;14:00:54.61;+40:59:19.0;CVn;1.15;0.65;63;14.10;;12.13;11.41;11.07;22.88;Sc;;;;;;;;2MASX J14005456+4059181,IRAS 13588+4113,MCG +07-29-034,PGC 049893,SDSS J140054.61+405918.9,SDSS J140054.61+405919.0,UGC 08931;;; +NGC5411;G;14:01:59.26;+08:56:15.7;Boo;1.51;0.79;138;14.60;;11.17;10.44;10.15;23.99;E-S0;;;;;;;;2MASX J14015923+0856158,MCG +02-36-011,PGC 049967,SDSS J140159.25+085615.6,SDSS J140159.25+085615.7,SDSS J140159.26+085615.7,UGC 08940;;; +NGC5412;G;13:57:13.53;+73:37:00.2;UMi;1.17;0.95;22;14.70;;11.32;10.66;10.41;23.86;E-S0;;;;;;;;2MASX J13571358+7336599,PGC 049644,UGC 08905;;; +NGC5413;G;13:57:53.53;+64:54:39.5;Dra;1.29;1.00;27;14.40;;10.90;10.23;9.98;23.73;E;;;;;;;;2MASX J13575347+6454394,MCG +11-17-012,PGC 049677,SDSS J135753.53+645439.5,SDSS J135753.53+645439.7,SDSS J135753.54+645439.5,UGC 08901;;; +NGC5414;G;14:02:03.52;+09:55:45.5;Boo;0.97;0.66;165;13.80;;11.97;11.37;11.20;22.57;E?;;;;;;;;2MASX J14020351+0955458,IRAS 13595+1010,MCG +02-36-013,PGC 049976,SDSS J140203.52+095545.5,SDSS J140203.52+095545.6,UGC 08942;;; +NGC5415;G;13:56:56.92;+70:45:15.8;UMi;0.87;0.63;126;15.00;;11.84;11.19;10.81;23.64;E;;;;;;;;2MASX J13565696+7045156,PGC 049610;;; +NGC5416;G;14:02:11.32;+09:26:24.4;Boo;1.29;0.73;105;13.60;;10.97;10.46;10.29;22.79;Sc;;;;;;;;2MASX J14021133+0926237,IRAS 13597+0940,MCG +02-36-014,PGC 049991,SDSS J140211.31+092624.3,SDSS J140211.31+092624.4,SDSS J140211.32+092624.4,UGC 08944;;; +NGC5417;G;14:02:13.04;+08:02:13.6;Boo;1.67;0.84;118;13.80;;10.30;9.63;9.37;23.13;Sa;;;;;;;;2MASX J14021302+0802127,MCG +01-36-015,PGC 049995,SDSS J140213.03+080213.5,UGC 08943;;; +NGC5418;G;14:02:17.59;+07:41:03.0;Boo;0.95;0.41;45;14.40;;11.21;10.41;10.26;22.49;SBb;;;;;;;;2MASX J14021756+0741027,IRAS 13597+0755,MCG +01-36-016,PGC 049997,SDSS J140217.58+074102.9,SDSS J140217.59+074103.0,UGC 08946;;; +NGC5419;G;14:03:38.73;-33:58:41.7;Cen;3.98;2.95;78;11.77;11.33;8.48;7.83;7.52;23.76;E;;;;;;;;2MASX J14033877-3358422,ESO 384-039,ESO-LV 384-0390,MCG -06-31-019,PGC 050100;;; +NGC5420;G;14:03:59.90;-14:37:00.7;Vir;1.90;0.70;135;13.00;;10.96;10.26;9.96;23.32;Sb;;;;;;;;2MASX J14035990-1437007,IRAS 14012-1422,MCG -02-36-006,PGC 050121;;; +NGC5421;GPair;14:01:41.88;+33:49:25.6;CVn;1.30;;;14.30;14.30;;;;;;;;;;;;;MCG +06-31-045,UGC 08941;;Holmberg 568 also includes a Galactic star.;Diameter of the group inferred by the author. +NGC5421 NED01;G;14:01:41.39;+33:49:36.6;CVn;1.17;0.68;156;14.02;;11.13;10.54;10.24;23.19;Sc;;;;;;;;2MASX J14014138+3349363,IRAS 13594+3404,MCG +06-31-045 NED01,PGC 049950,SDSS J140141.38+334936.5,SDSS J140141.39+334936.5,SDSS J140141.39+334936.6,UGC 08941 NED01;;HOLM 568C is a star.;B-Mag taken from LEDA +NGC5421 NED02;G;14:01:42.11;+33:49:17.4;CVn;1.00;0.55;168;15.00;;;;;23.88;S0;;;;;;;;MCG +06-31-045 NED02,PGC 049949,SDSS J140142.10+334917.4,UGC 08941 NED02;;Component 'b)' in UGC notes.; +NGC5422;G;14:00:42.04;+55:09:52.1;UMa;2.81;0.59;153;13.10;;9.64;8.93;8.76;23.67;S0-a;;;;;;;;2MASX J14004206+5509521,MCG +09-23-024,PGC 049874,SDSS J140042.02+550951.9,UGC 08935;;HOLM 567B is a star.; +NGC5423;G;14:02:48.62;+09:20:29.0;Boo;1.53;0.90;75;13.90;;10.63;9.96;9.72;23.46;E-S0;;;;;;;;2MASX J14024862+0920293,MCG +02-36-017,PGC 050028,SDSS J140248.62+092028.9,SDSS J140248.63+092029.0,UGC 08952;;; +NGC5424;G;14:02:55.70;+09:25:14.4;Boo;1.46;1.18;108;14.30;;10.81;10.18;9.89;23.65;S0;;;;;;;;2MASX J14025571+0925143,MCG +02-36-019,PGC 050035,SDSS J140255.70+092514.4,UGC 08956;;"Often incorrectly called ""NGC 5724"" in the literature."; +NGC5425;G;14:00:47.67;+48:26:37.9;UMa;1.58;0.44;127;14.30;;11.56;11.07;10.97;22.94;Sc;;;;;;;;2MASX J14004767+4826378,MCG +08-26-001,PGC 049889,UGC 08933;;; +NGC5426;G;14:03:24.85;-06:04:08.8;Vir;3.06;1.21;1;12.60;;10.34;9.69;9.50;23.12;Sc;;;;;;;;2MASX J14032485-0604087,MCG -01-36-004,PGC 050083,UGCA 380;;; +NGC5427;G;14:03:26.05;-06:01:50.9;Vir;3.61;3.27;178;14.67;13.96;9.48;8.82;8.59;23.40;SABc;;;;;;;;2MASX J14032604-0601509,IRAS 14008-0547,MCG -01-36-003,PGC 050084,UGCA 381;;The APM position is 11 arcsec northwest of the nucleus.; +NGC5428;**;14:03:28.03;-05:59:04.1;Vir;;;;;;;;;;;;;;;;;;;;; +NGC5429;**;14:03:33.36;-06:02:17.8;Vir;;;;;;;;;;;;;;;;;;;;; +NGC5430;G;14:00:45.74;+59:19:41.8;UMa;2.18;1.46;177;12.70;;10.01;9.31;8.98;23.13;SBb;;;;;;;;2MASX J14004582+5919431,IRAS 13591+5934,MCG +10-20-062,PGC 049881,SDSS J140045.72+591941.8,SDSS J140045.72+591942.1,SDSS J140045.73+591941.9,SDSS J140045.74+591941.8,SDSS J140045.75+591941.8,UGC 08937;;HOLM 569B is a part of NGC 5430.; +NGC5431;G;14:03:07.15;+09:21:47.0;Boo;0.90;0.38;83;14.80;;12.03;11.37;11.06;23.56;SBbc;;;;;;;;2MASX J14030713+0921473,MCG +02-36-020,PGC 050046,SDSS J140307.14+092146.9;;; +NGC5432;Other;14:03:40.65;-05:58:31.6;Vir;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC5433;G;14:02:36.08;+32:30:37.6;CVn;1.52;0.36;4;14.00;;11.06;10.33;9.93;22.51;SBcd;;;;;;;;2MASX J14023606+3230375,IRAS 14003+3245,MCG +06-31-050,PGC 050012,SDSS J140236.07+323037.6,SDSS J140236.08+323037.6,UGC 08954;;HOLM 574B is a star.; +NGC5434;G;14:03:23.14;+09:26:53.1;Boo;1.48;1.39;35;14.30;;11.56;10.94;10.63;23.48;Sc;;;;;;;;2MASX J14032314+0926531,MCG +02-36-022,PGC 050077,SDSS J140323.14+092653.1,SDSS J140323.15+092653.1,UGC 08965;;; +NGC5435;**;14:04:00.05;-05:55:54.0;Vir;;;;;;;;;;;;;;;;;;;;; +NGC5436;G;14:03:41.10;+09:34:24.6;Boo;1.24;0.53;124;14.90;;11.27;10.62;10.41;23.89;S0-a;;;;;;;;2MASX J14034112+0934241,MCG +02-36-025,PGC 050104,SDSS J140341.09+093424.6,SDSS J140341.10+093424.6,UGC 08971;;; +NGC5437;G;14:03:47.34;+09:31:25.3;Boo;1.07;0.54;1;15.10;;11.70;11.04;10.74;23.30;Sb;;;;;;4365;;2MASX J14034736+0931250,MCG +02-36-028,PGC 050113,SDSS J140347.34+093125.2,SDSS J140347.34+093125.3;;; +NGC5438;G;14:03:48.00;+09:36:38.1;Boo;1.18;1.11;70;14.70;;11.24;10.58;10.27;23.65;E;;;;;5446;;;2MASX J14034803+0936380,MCG +02-36-029,PGC 050112,SDSS J140348.00+093638.1;;; +NGC5439;G;14:01:57.67;+46:18:42.9;CVn;1.27;0.40;10;14.60;;11.88;11.22;11.02;23.38;Sa;;;;;;;;2MASX J14015766+4618425,IRAS 14000+4632,MCG +08-26-002,PGC 049965,SDSS J140157.67+461842.8,SDSS J140157.67+461842.9,UGC 08947;;The 2MASS position is 8 arcsec north of the nucleus.; +NGC5440;G;14:03:01.04;+34:45:28.3;CVn;2.84;1.45;48;13.40;;9.83;9.15;8.89;23.96;Sa;;;;;;;;2MASX J14030101+3445281,MCG +06-31-052,PGC 050042,SDSS J140301.03+344528.3,SDSS J140301.04+344528.3,UGC 08963;;; +NGC5441;G;14:03:12.00;+34:41:04.6;CVn;0.44;0.38;111;15.00;;13.75;13.65;13.30;22.46;Sbc;;;;;;;;2MASX J14031203+3441040,MCG +06-31-053,PGC 050057,SDSS J140311.99+344104.5,SDSS J140312.00+344104.5;;; +NGC5442;G;14:04:43.22;-09:42:49.2;Vir;1.19;0.56;162;14.50;;11.22;10.52;10.16;22.54;SBb;;;;;;;;2MASX J14044322-0942490,IRAS 14020-0928,MCG -01-36-006,PGC 050189,SDSS J140443.21-094249.2;;; +NGC5443;G;14:02:11.80;+55:48:50.5;UMa;1.68;0.57;31;13.20;;9.95;9.28;9.04;22.41;Sb;;;;;;;;2MASX J14021182+5548505,IRAS 14004+5603,MCG +09-23-026,PGC 049993,SDSS J140211.79+554850.5,SDSS J140211.80+554850.4,SDSS J140211.80+554850.5,UGC 08958;;HOLM 578B is a star.; +NGC5444;G;14:03:24.13;+35:07:55.6;CVn;2.48;1.94;87;12.80;;9.79;9.09;8.84;23.62;E;;;;;;;;2MASX J14032415+3507554,MCG +06-31-054,PGC 050080,SDSS J140324.12+350755.5,UGC 08974;;; +NGC5445;G;14:03:31.50;+35:01:31.1;CVn;1.56;0.56;26;14.10;;10.82;10.11;9.85;23.53;S0;;;;;;;;2MASX J14033149+3501304,MCG +06-31-055,PGC 050090,SDSS J140331.50+350131.1,UGC 08976;;; +NGC5446;Dup;14:03:48.00;+09:36:38.1;Boo;;;;;;;;;;;;;;;5438;;;;;; +NGC5447;HII;14:02:28.40;+54:16:36.9;UMa;;;;;;;;;;;;;;;;;;IRAS 14007+5430;;"HII region in MESSIER 101; NGC 5450 is 18 arcsec southeast."; +NGC5448;G;14:02:50.03;+49:10:21.7;UMa;3.77;1.95;109;12.70;;9.72;9.08;8.79;23.39;Sa;;;;;;;;2MASX J14025007+4910215,IRAS 14009+4924,MCG +08-26-003,PGC 050031,SDSS J140250.02+491021.5,SDSS J140250.03+491021.7,UGC 08969;;; +NGC5449;Other;14:02:27.27;+54:19:48.8;UMa;;;;;;;;;;;;;;;;;;;;HII region in MESSIER 101.; +NGC5450;HII;14:02:29.79;+54:16:15.7;UMa;;;;;;;;;;;;;;;5457S;;;;;"HII region in MESSIER 101; NGC 5447 is 18 arcsec northwest."; +NGC5451;HII;14:02:37.05;+54:21:45.1;UMa;0.52;0.31;58;16.70;;;;;;;;;;;;;;;;HII region in MESSIER 101.;Dimensions and B-Mag taken from LEDA +NGC5452;G;13:54:24.90;+78:13:14.0;UMi;1.25;0.80;110;14.20;;;;;23.19;SABc;;;;;;;;MCG +13-10-014,PGC 049426,UGC 08867;;; +NGC5453;HII;14:02:56.39;+54:18:28.7;UMa;;;;;;;;;;;;;;;;;;;;HII region in MESSIER 101.; +NGC5454;G;14:04:45.71;+14:22:55.4;Boo;1.34;0.79;113;14.40;;10.82;10.03;9.77;23.61;S0;;;;;;;;2MASX J14044572+1422557,MCG +03-36-042,PGC 050192,SDSS J140445.70+142255.3,SDSS J140445.71+142255.3,SDSS J140445.71+142255.4,UGC 08997;;; +NGC5455;HII;14:03:01.17;+54:14:29.3;UMa;0.63;0.49;178;15.22;;;;;;;;;;;;;;IRAS 14012+5428,SDSS J140301.17+541429.3,SDSS J140301.17+541429.4,SDSS J140301.19+541426.8;;HII region in MESSIER 101. Multiple SDSS entries describe this object.;Dimensions and B-Mag taken from LEDA +NGC5456;G;14:04:58.89;+11:52:17.9;Boo;1.36;1.10;174;14.20;;;;;23.39;S0;;;;;;;;MCG +02-36-036,PGC 050213,SDSS J140458.88+115217.8,SDSS J140458.89+115217.8,SDSS J140458.89+115217.9,UGC 09004;;; +NGC5457;G;14:03:12.54;+54:20:56.2;UMa;23.99;23.07;28;8.46;7.86;6.52;5.81;5.51;23.97;SABc;;;;101;;;;IRAS 14013+5435,MCG +09-23-028,PGC 050063,SDSS J140312.52+542056.2,UGC 08981;;"M102 may be a duplicate obs. of M101; see Sawyer, JRASC 41, Nos 7&8, 1947."; +NGC5458;HII;14:03:12.47;+54:17:54.0;UMa;;;;;;;;;;;;;;;;;;;;HII region in MESSIER 101.; +NGC5459;G;14:05:00.19;+13:07:54.8;Boo;1.27;1.11;7;14.50;;11.02;10.43;10.17;23.62;S0;;;;;;;;2MASX J14050018+1307546,MCG +02-36-037,PGC 050215,SDSS J140500.18+130754.8,SDSS J140500.19+130754.8,UGC 09005;;; +NGC5460;OCl;14:07:27.81;-48:20:33.1;Cen;13.20;;;5.85;5.60;;;;;;;;;;;;;MWSC 2202;;; +NGC5461;HII;14:03:41.41;+54:19:04.9;UMa;1.62;0.98;49;14.38;;;;;;;;;;;5457E;;;IRAS 14019+5433,IRAS 14019+5433;;HII region in MESSIER 101.;Dimensions and B-Mag taken from LEDA +NGC5462;HII;14:03:53.00;+54:21:56.1;UMa;0.13;0.11;80;18.17;;;;;;;;;;;;;;;;HII region in MESSIER 101.;Dimensions and B-Mag taken from LEDA +NGC5463;G;14:06:10.54;+09:21:12.4;Boo;1.25;0.45;48;14.10;;10.85;10.10;9.85;23.17;S0;;;;;;;;2MASX J14061051+0921122,MCG +02-36-040,PGC 050299,SDSS J140610.54+092112.4,UGC 09017;;; +NGC5464;G;14:07:04.40;-30:01:01.6;Cen;1.38;0.73;82;13.43;12.90;11.69;11.02;11.00;22.19;SBm;;;;;;;;2MASX J14070439-3001015,ESO 446-011,ESO-LV 446-0110,IRAS 14041-2946,MCG -05-33-045,PGC 050356;;; +NGC5465;*;14:06:27.28;-05:30:22.6;Vir;;;;15.01;14.47;13.34;12.96;12.96;;;;;;;;;;2MASS J14062734-0530232;;; +NGC5466;GCl;14:05:27.36;+28:32:04.2;Boo;6.60;;;10.50;9.70;;;;;;;;;;;;;MWSC 2198;;; +NGC5467;*;14:06:29.50;-05:28:53.3;Vir;;;;15.26;15.12;14.66;14.47;14.48;;;;;;;;0973;;2MASS J14062939-0528542;;; +NGC5468;G;14:06:34.89;-05:27:11.2;Vir;2.28;2.13;155;12.10;;10.93;10.34;10.40;23.41;SABc;;;;;;;;2MASX J14063487-0527113,IRAS 14039-0512,MCG -01-36-007,PGC 050323,UGCA 384;;The APM position is 8 arcsec northeast of the nucleus.; +NGC5469;G;14:12:29.90;+08:38:52.6;Boo;0.92;0.78;135;15.10;;11.77;11.12;10.86;23.50;S0;;;;;;;;2MASX J14122990+0838526,PGC 050740,SDSS J141229.89+083852.5,SDSS J141229.89+083852.6;;Identification as NGC 5469 is uncertain.; +NGC5470;G;14:06:31.91;+06:01:46.9;Vir;2.60;0.42;62;14.50;;11.02;10.28;9.97;23.78;Sb;;;;;;;;2MASX J14063199+0601458,IRAS 14040+0615,MCG +01-36-019,PGC 050317,SDSS J140631.91+060146.8,SDSS J140631.91+060146.9,UGC 09020;;; +NGC5471;HII;14:04:29.02;+54:23:48.9;UMa;0.82;0.61;;14.54;;;;;;;;;;;;;;2MASX J14042941+5423470,IRAS 14027+5438,MCG +09-23-030,SDSS J140429.48+542347.2;;HII region in MESSIER 101.;Dimensions and B-Mag taken from LEDA +NGC5472;G;14:06:55.02;-05:27:37.7;Vir;1.46;0.29;29;15.00;;11.66;10.91;10.65;23.45;Sab;;;;;;;;2MASX J14065503-0527379,IRAS 14042-0513,MCG -01-36-008,PGC 050345;;; +NGC5473;G;14:04:43.23;+54:53:33.5;UMa;1.99;1.54;156;12.50;;9.30;8.64;8.36;22.60;E-S0;;;;;;;;2MASX J14044324+5453334,MCG +09-23-031,PGC 050191,SDSS J140443.22+545333.4,UGC 09011;;; +NGC5474;G;14:05:01.61;+53:39:44.0;UMa;2.39;1.57;100;11.28;10.79;10.23;9.56;9.48;21.75;Sc;;;;;;;;2MASX J14050160+5339439,IRAS 14032+5353,MCG +09-23-032,PGC 050216,SDSS J140501.41+533944.4,UGC 09013;;Highly asymmetrical.; +NGC5475;G;14:05:12.41;+55:44:30.7;UMa;1.94;0.58;166;13.40;;10.30;9.64;9.40;23.07;Sa;;;;;;;;2MASX J14051234+5544304,MCG +09-23-033,PGC 050231,SDSS J140512.41+554430.6,SDSS J140512.41+554430.7,UGC 09016;;; +NGC5476;G;14:08:08.49;-06:05:31.4;Vir;1.41;1.31;130;13.20;;11.31;10.70;10.26;22.78;SABd;;;;;;;;2MASX J14080847-0605312,IRAS 14055-0551,MCG -01-36-009,PGC 050429;;; +NGC5477;G;14:05:33.30;+54:27:40.1;UMa;1.11;0.78;87;14.36;14.01;;;;23.02;Sm;;;;;;;;MCG +09-23-034,PGC 050262,SDSS J140533.29+542740.1,UGC 09018;;May be associated with MESSIER 101. Multiple SDSS entries describe this object.; +NGC5478;G;14:08:08.51;-01:42:08.3;Vir;0.97;0.66;22;14.70;;11.57;10.85;10.52;22.85;Sbc;;;;;;;;2MASX J14080854-0142081,IRAS 14055-0127,MCG +00-36-019,PGC 050430,SDSS J140808.50-014208.2,SDSS J140808.50-014208.3,SDSS J140808.51-014208.2,SDSS J140808.51-014208.3,UGC 09034;;; +NGC5479;G;14:05:57.37;+65:41:26.7;UMi;0.93;0.76;20;15.20;;11.68;10.99;10.70;23.66;E;;;;;;;;2MASX J14055741+6541264,MCG +11-17-019,PGC 050282,SDSS J140557.36+654126.6,SDSS J140557.36+654126.7,SDSS J140557.36+654126.9,SDSS J140557.37+654126.7;;; +NGC5480;G;14:06:21.58;+50:43:30.4;Boo;1.67;1.28;177;12.60;;10.37;9.74;9.46;22.49;Sc;;;;;;;;2MASX J14062152+5043299,IRAS 14045+5057,MCG +09-23-035,PGC 050312,SDSS J140621.57+504330.2,SDSS J140621.57+504330.3,SDSS J140621.58+504330.3,SDSS J140621.58+504330.4,UGC 09026;;UGC misprints dec as +50d39', as is evident in the UGC notes.; +NGC5481;G;14:06:41.27;+50:43:24.0;Boo;1.76;1.22;113;13.50;;10.30;9.60;9.38;23.39;E;;;;;;;;2MASX J14064121+5043239,MCG +09-23-036,PGC 050331,SDSS J140641.27+504323.9,UGC 09029;;; +NGC5482;G;14:08:30.70;+08:55:54.9;Boo;1.17;0.81;88;14.20;;10.70;10.02;9.73;23.03;S0;;;;;;;;2MASX J14083072+0855548,MCG +02-36-043,PGC 050459,SDSS J140830.69+085554.8,SDSS J140830.70+085554.9,UGC 09038;;; +NGC5483;G;14:10:25.03;-43:19:28.6;Cen;3.42;3.08;16;11.86;11.38;9.37;8.73;8.46;23.27;Sc;;;;;;;;2MASX J14102503-4319285,ESO 271-019,ESO-LV 271-0190,IRAS 14072-4305,MCG -07-29-008,PGC 050600;;Extended HIPASS source; +NGC5484;G;14:06:48.22;+55:01:47.7;UMa;0.47;0.46;5;15.60;;12.75;12.14;11.91;22.96;E;;;;;;;;2MASX J14064813+5501473,PGC 050338,SDSS J140648.22+550147.5,SDSS J140648.22+550147.7;;; +NGC5485;G;14:07:11.35;+55:00:06.1;UMa;2.51;1.75;170;13.82;12.22;9.32;8.64;8.40;23.13;S0;;;;;;;;2MASX J14071131+5500054,MCG +09-23-037,PGC 050369,SDSS J140711.33+550006.2,SDSS J140711.34+550005.9,SDSS J140711.34+550006.0,SDSS J140711.35+550006.1,UGC 09033;;; +NGC5486;G;14:07:24.96;+55:06:11.1;UMa;1.36;0.82;69;14.00;;12.79;12.15;11.95;23.14;SABm;;;;;;;;2MASX J14072502+5506105,IRAS 14056+5520,MCG +09-23-038,PGC 050383,SDSS J140724.96+550610.8,SDSS J140724.96+550611.0,SDSS J140724.97+550611.1,UGC 09036;;; +NGC5487;G;14:09:43.90;+08:04:08.9;Boo;1.05;0.52;67;14.60;;11.69;11.00;10.67;22.99;SABb;;;;;;;;2MASX J14094386+0804085,IRAS 14072+0818,MCG +01-36-021,PGC 050537,SDSS J140943.89+080408.8,SDSS J140943.89+080408.9;;; +NGC5488;G;14:08:03.11;-33:18:53.7;Cen;2.63;0.73;26;12.72;;11.19;10.43;10.11;23.22;SABb;;;;;;4375;;2MASX J14080312-3318537,ESO 384-058,ESO-LV 384-0580,MCG -05-33-048,PGC 050423;;; +NGC5489;G;14:12:00.72;-46:05:19.4;Cen;2.29;1.28;126;13.15;;9.97;9.26;9.04;23.44;Sa;;;;;;;;2MASX J14120072-4605192,ESO 271-021,ESO-LV 271-0210,PGC 050701;;; +NGC5490;G;14:09:57.29;+17:32:44.0;Boo;1.66;1.29;2;13.40;15.50;9.91;9.19;8.92;23.03;E;;;;;;;;2MASX J14095733+1732435,MCG +03-36-065,PGC 050558,SDSS J140957.29+173243.9,UGC 09058;;One of two 6cm sources associated with [WB92] 1407+1748; +NGC5490C;G;14:10:06.91;+17:36:56.7;Boo;0.75;0.61;34;15.20;;14.43;14.13;13.91;23.28;SBbc;;;;;;;;2MASX J14100691+1736565,MCG +03-36-069,PGC 050584,SDSS J141006.90+173656.7;;; +NGC5491;G;14:10:57.35;+06:21:53.5;Vir;1.32;0.75;78;13.90;;10.96;10.26;9.93;22.81;Sbc;;;;;;;;2MASX J14105735+0621533,IRAS 14084+0636,MCG +01-36-022,PGC 050630,SDSS J141057.35+062153.4,UGC 09072;;HOLM 596C is a star.; +NGC5492;G;14:10:35.20;+19:36:44.4;Boo;1.58;0.38;151;13.70;;11.17;10.41;10.18;22.57;Sb;;;;;;;;2MASX J14103518+1936444,IRAS 14082+1950,MCG +03-36-074,PGC 050613,SDSS J141035.23+193644.0,UGC 09065;;; +NGC5493;G;14:11:29.38;-05:02:37.0;Vir;2.17;1.92;125;13.50;;9.37;8.74;8.47;22.72;S0;;;;;;;;2MASX J14112938-0502371,MCG -01-36-013,PGC 050670,UGCA 386;;; +NGC5494;G;14:12:24.18;-30:38:38.7;Cen;2.33;2.18;50;12.64;12.02;9.96;9.29;8.97;23.82;Sc;;;;;;;;2MASX J14122417-3038387,ESO 446-025,ESO-LV 446-0250,IRAS 14094-3024,MCG -05-34-001,PGC 050732;;; +NGC5495;G;14:12:23.35;-27:06:28.9;Hya;1.52;1.26;44;13.53;13.50;10.76;9.85;9.56;23.02;Sc;;;;;;;;2MASX J14122335-2706287,ESO 511-010,ESO-LV 511-0100,IRAS 14095-2652,MCG -04-34-001,PGC 050729;;; +NGC5496;G;14:11:37.86;-01:09:32.8;Vir;2.69;0.58;176;13.40;;11.21;10.51;10.32;23.11;SBc;;;;;;;;2MASX J14113785-0109313,IRAS 14090-0055,MCG +00-36-026,PGC 050676,SDSS J141137.73-010929.9,SDSS J141137.86-010932.7,SDSS J141137.86-010932.8,UGC 09079;;; +NGC5497;G;14:10:31.64;+38:53:36.8;Boo;0.60;0.49;62;15.10;;12.54;11.72;11.62;22.77;SBb;;;;;;;;2MASX J14103162+3853368,MCG +07-29-048,PGC 050610,SDSS J141031.63+385336.7,SDSS J141031.64+385336.8,UGC 09069;;; +NGC5498;G;14:11:04.53;+25:41:52.7;Boo;1.23;0.84;118;15.00;;11.18;10.41;10.21;23.72;E-S0;;;;;;;;2MASX J14110448+2541522,MCG +04-33-043,PGC 050639,SDSS J141104.52+254152.7,SDSS J141104.53+254152.6,SDSS J141104.53+254152.7,UGC 09075;;; +NGC5499;G;14:10:47.65;+35:54:48.6;Boo;1.12;0.74;143;14.50;;10.95;10.23;9.92;23.21;S0-a;;;;;;;;2MASX J14104763+3554481,MCG +06-31-076,PGC 050623,SDSS J141047.64+355448.5,SDSS J141047.65+355448.5,SDSS J141047.65+355448.6,UGC 09074;;; +NGC5500;G;14:10:15.23;+48:32:46.0;Boo;0.92;0.76;136;14.50;;11.45;10.70;10.58;23.03;E;;;;;;;;2MASX J14101524+4832458,MCG +08-26-008,PGC 050588,SDSS J141015.23+483245.9,SDSS J141015.23+483246.0,SDSS J141015.24+483246.0,UGC 09070;;; +NGC5501;G;14:12:20.18;+01:16:21.1;Vir;0.89;0.65;65;15.10;;12.11;11.48;10.98;23.48;S0-a;;;;;;;;2MASX J14122017+0116206,MCG +00-36-027,PGC 050724,SDSS J141220.18+011621.1;;; +NGC5502;G;14:09:33.95;+60:24:34.5;UMa;0.63;0.34;81;16.00;;13.09;12.42;12.40;23.88;S0;;;;;5503;;;2MASX J14093397+6024346,MCG +10-20-077,PGC 050508,SDSS J140933.94+602434.2,SDSS J140933.94+602434.4,SDSS J140933.94+602434.6,SDSS J140933.95+602434.4;;; +NGC5503;Dup;14:09:33.95;+60:24:34.5;UMa;;;;;;;;;;;;;;;5502;;;;;; +NGC5504;G;14:12:15.81;+15:50:30.9;Boo;1.18;1.03;114;13.90;;11.47;10.99;10.40;23.03;Sbc;;;;;;;;2MASX J14121583+1550310,IRAS 14098+1604,MCG +03-36-081,PGC 050718,SDSS J141215.81+155030.8,UGC 09085;;; +NGC5504B;G;14:12:12.72;+15:52:08.0;Boo;0.56;0.38;112;15.40;;12.70;12.11;11.95;22.54;SBbc;;;;;;4383;;2MASX J14121274+1552077,MCG +03-36-079,PGC 050716,SDSS J141212.71+155207.9;;; +NGC5504C;G;14:12:15.79;+15:52:45.6;Boo;0.81;0.32;78;15.50;;;;;23.34;Sd;;;;;;;;MCG +03-36-082,PGC 050713,SDSS J141215.51+155245.8;;Multiple SDSS entries describe this source.; +NGC5505;G;14:12:31.71;+13:18:17.0;Boo;0.89;0.71;127;14.10;;11.68;11.00;10.77;21.50;SBa;;;;;;;;2MASX J14123202+1318160,IRAS 14101+1332,MCG +02-36-048,PGC 050745,SDSS J141231.71+131817.0,SDSS J141231.72+131817.1,UGC 09092;;; +NGC5506;G;14:13:14.89;-03:12:27.3;Vir;2.88;0.76;89;15.25;14.38;9.71;8.84;8.19;23.26;SABa;;;;;;;;2MASS J14131487-0312276,2MASX J14131490-0312272,IRAS 14106-0258,MCG +00-36-028,PGC 050782,SDSS J141314.87-031227.3,SDSS J141314.88-031227.3,SDSS J141314.88-031227.4,UGCA 387;;; +NGC5507;G;14:13:19.87;-03:08:56.0;Vir;1.60;0.79;80;13.30;12.46;10.05;9.34;9.11;23.15;S0;;;;;;;;2MASX J14131987-0308558,MCG +00-36-029,PGC 050786,SDSS J141319.86-030855.9,UGCA 388;;; +NGC5508;G;14:12:29.04;+24:38:07.8;Boo;0.98;0.65;135;15.20;;12.11;11.45;11.12;23.64;S0;;;;;;;;2MASX J14122906+2438082,MCG +04-34-002,PGC 050741,SDSS J141229.03+243807.8,SDSS J141229.04+243807.8,UGC 09094;;; +NGC5509;G;14:12:39.58;+20:23:13.2;Boo;1.19;0.74;92;15.20;;11.48;10.78;10.48;23.99;S0;;;;;;;;2MASX J14123959+2023133,MCG +04-34-003,PGC 050751,SDSS J141239.57+202313.1,SDSS J141239.57+202313.2;;; +NGC5510;G;14:13:37.22;-17:59:01.7;Vir;0.95;0.65;32;13.80;;11.81;11.41;11.07;22.77;SBm;;;;;;;;2MASX J14133725-1759006,ESO 579-003,IRAS 14108-1744,MCG -03-36-010,PGC 050807;;; +NGC5511;G;14:13:05.42;+08:37:54.8;Boo;0.68;0.24;166;15.50;;12.96;12.24;11.95;23.60;E?;;;;;;;;2MASX J14130540+0837549,MCG +02-36-050,PGC 050771,SDSS J141305.42+083754.7,SDSS J141305.42+083754.8;;"MCG implies the R.A. is 13h10.6m; corrected in MCG errata."; +NGC5512;G;14:12:41.13;+30:51:18.2;Boo;0.67;0.56;74;15.30;;12.24;11.61;11.38;23.28;E;;;;;;;;2MASX J14124111+3051183,PGC 050749,SDSS J141241.13+305118.1,SDSS J141241.13+305118.2;;; +NGC5513;G;14:13:08.63;+20:24:58.6;Boo;2.02;1.09;114;14.10;;10.31;9.60;9.38;24.02;S0;;;;;;;;2MASX J14130864+2024587,MCG +04-34-005,PGC 050776,SDSS J141308.62+202458.5,SDSS J141308.63+202458.5,UGC 09099;;; +NGC5514;GPair;14:13:38.78;+07:39:34.3;Boo;1.30;;;;;;;;;;;;;;;;;MCG +01-36-023,UGC 09102;;;Diameter of the group inferred by the author. +NGC5514 NED01;G;14:13:38.44;+07:39:37.9;Boo;1.15;0.65;97;14.50;;11.05;10.32;9.95;23.00;Sbc;;;;;;;;2MASX J14133869+0739373,IRAS 14111+0753,MCG +01-36-023 NED01,PGC 050809,UGC 09102 NED01;;; +NGC5514 NED02;G;14:13:39.38;+07:39:28.8;Boo;0.85;0.74;111;15.63;;;;;24.16;Sbc;;;;;;;;MCG +01-36-023 NED02,PGC 093124,UGC 09102 NED02;;;B-Mag taken from LEDA +NGC5515;G;14:12:38.17;+39:18:37.0;Boo;1.22;0.64;107;13.70;;11.06;10.28;9.93;22.78;Sab;;;;;;;;2MASX J14123812+3918369,IRAS 14105+3932,MCG +07-29-052,PGC 050750,SDSS J141238.13+391836.6,SDSS J141238.14+391836.5,SDSS J141238.14+391836.6,SDSS J141238.15+391836.6,UGC 09096;;; +NGC5516;G;14:15:54.69;-48:06:53.5;Cen;2.39;1.56;162;13.01;;9.29;8.54;8.31;23.62;E-S0;;;;;;;;2MASX J14155467-4806535,ESO 221-034,ESO-LV 221-0340,PGC 050960;;; +NGC5517;G;14:12:51.24;+35:42:39.2;Boo;1.01;0.71;123;15.00;;11.64;10.95;10.71;23.37;S0-a;;;;;;;;2MASX J14125126+3542386,MCG +06-31-079,PGC 050758,SDSS J141251.23+354239.2,SDSS J141251.24+354239.1,SDSS J141251.24+354239.2,UGC 09100;;; +NGC5518;G;14:13:47.68;+20:50:53.9;Boo;1.28;1.09;121;15.00;;11.07;10.42;10.11;23.75;E;;;;;;;;2MASX J14134764+2050535,MCG +04-34-006,PGC 050817,SDSS J141347.67+205053.8;;; +NGC5519;G;14:14:20.87;+07:30:57.3;Boo;1.77;1.08;76;14.60;;11.92;11.23;10.88;24.23;SBa;;;;;5570;;;2MASX J14142084+0730575,MCG +01-36-025,PGC 050865,SDSS J141420.86+073057.2,SDSS J141420.86+073057.3,UGC 09111;;Identification as NGC 5570 is uncertain.; +NGC5520;G;14:12:22.79;+50:20:54.3;Boo;1.61;0.80;66;13.30;;10.88;10.25;9.97;22.58;Sb;;;;;;;;2MASX J14122277+5020543,IRAS 14105+5034,MCG +08-26-013,PGC 050728,UGC 09097;;; +NGC5521;G;14:15:23.72;+04:24:30.7;Vir;0.61;0.49;40;14.30;;12.86;12.30;11.96;22.24;Sbc;;;;;;;;2MASX J14152371+0424304,MCG +01-36-030,PGC 050931,SDSS J141523.71+042430.6,SDSS J141523.71+042430.7,SDSS J141523.72+042430.6,SDSS J141523.72+042430.7,SDSS J141526.33+042429.9,UGC 09122;;; +NGC5522;G;14:14:50.37;+15:08:48.8;Boo;1.87;0.42;50;14.10;;10.99;10.26;9.91;23.16;SBb;;;;;;;;2MASX J14145036+1508480,IRAS 14124+1522,MCG +03-36-089,PGC 050889,SDSS J141450.36+150848.7,SDSS J141450.37+150848.8,UGC 09116;;; +NGC5523;G;14:14:52.32;+25:19:03.4;Boo;2.04;0.89;92;13.40;;10.68;10.26;9.74;22.67;SABc;;;;;;;;2MASX J14145230+2519034,IRAS 14125+2533,MCG +04-34-008,PGC 050895,UGC 09119;;; +NGC5524;**;14:13:48.81;+36:22:51.5;Boo;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC5525;G;14:15:39.23;+14:16:57.4;Boo;1.21;0.66;21;14.10;;10.51;9.77;9.44;22.92;S0;;;;;;;;2MASX J14153923+1416576,MCG +03-36-096,PGC 050946,SDSS J141539.22+141657.4,UGC 09124;;; +NGC5526;G;14:13:53.76;+57:46:16.8;UMa;1.10;0.30;135;14.20;;11.41;10.68;10.32;22.52;Sbc;;;;;;;;PGC 050832;;"Delta V > 1000 km/sec; probably an optical pair."; +NGC5527;G;14:14:27.23;+36:24:16.2;Boo;0.94;0.69;153;15.30;;11.77;11.10;10.87;23.19;Sb;;;;;;;;2MASX J14142717+3624159,MCG +06-31-081,PGC 050868,SDSS J141427.22+362416.1,SDSS J141427.23+362416.2;;NGC 5524 is a double star.; +NGC5528;G;14:16:19.92;+08:17:36.5;Boo;0.99;0.55;17;14.80;;11.39;10.71;10.47;22.95;Sbc;;;;;;;;2MASX J14161994+0817363,MCG +02-36-060,PGC 050981,SDSS J141619.92+081736.4,SDSS J141619.92+081736.5;;HOLM 620B is a star.; +NGC5529;G;14:15:34.07;+36:13:35.7;Boo;5.79;0.68;114;12.90;;9.67;8.85;8.52;23.68;SABc;;;;;;;;2MASX J14153422+3613371,IRAS 14134+3627,MCG +06-31-085,PGC 050942,SDSS J141534.07+361335.6,SDSS J141534.07+361335.7,UGC 09127;;; +NGC5530;G;14:18:27.15;-43:23:18.9;Lup;4.86;2.18;127;11.78;11.00;;;;23.36;SABb;;;;;;;;ESO 272-003,ESO-LV 272-0030,IRAS 14152-4309,MCG -07-29-013,PGC 051106;;; +NGC5531;GPair;14:16:43.30;+10:53:05.2;Boo;1.07;0.60;170;14.70;;11.34;10.64;10.36;23.29;S0;;;;;;;;2MASX J14164323+1053070,MCG +02-36-061,PGC 050999,SDSS J141643.21+105307.3,SDSS J141643.22+105307.4;;; +NGC5532;G;14:16:52.95;+10:48:26.6;Boo;2.34;1.94;144;13.30;;9.75;9.05;8.76;23.55;S0;;;;;;;;2MASX J14165292+1048264,MCG +02-36-062 NED01,PGC 051006,SDSS J141652.94+104826.7,SDSS J141652.95+104826.7,UGC 09137 NED01;;; +NGC5533;G;14:16:07.74;+35:20:37.8;Boo;2.86;1.58;28;13.00;;9.75;9.08;8.80;23.31;SABa;;;;;;;;2MASX J14160771+3520373,IRAS 14140+3534,MCG +06-31-089,PGC 050973,SDSS J141607.74+352037.7,UGC 09133;;; +NGC5534;G;14:17:40.26;-07:25:02.7;Vir;1.36;1.23;65;13.60;;10.53;9.94;9.63;22.50;Sab;;;;;;;;2MASX J14174025-0725030,IRAS 14150-0711,MCG -01-36-014,PGC 051055;;; +NGC5535;G;14:17:31.27;+08:12:30.2;Boo;0.66;0.42;15;;;12.80;12.09;11.91;23.75;E;;;;;;;;2MASX J14173129+0812298,PGC 097424,SDSS J141731.27+081230.1,SDSS J141731.27+081230.2;;; +NGC5536;G;14:16:23.86;+39:30:07.9;Boo;0.83;0.64;11;14.50;;11.52;10.86;10.59;22.73;Sa;;;;;;;;2MASX J14162391+3930084,IRAS 14143+3944,MCG +07-29-057,PGC 050986,SDSS J141623.85+393007.8,SDSS J141623.86+393007.8,SDSS J141623.86+393007.9,UGC 09136;;; +NGC5537;G;14:17:37.09;+07:03:18.0;Vir;0.94;0.40;32;15.10;;12.30;11.59;11.46;23.10;Sb;;;;;;;;2MASX J14173708+0703178,IRAS 14151+0717,MCG +01-36-032,PGC 051047,SDSS J141737.09+070317.9,SDSS J141737.09+070318.0;;; +NGC5538;G;14:17:42.49;+07:28:36.0;Vir;0.89;0.31;62;15.40;;12.52;11.78;11.52;23.22;Sbc;;;;;;;;2MASX J14174246+0728358,PGC 051056,SDSS J141742.49+072835.9,SDSS J141742.49+072836.0;;; +NGC5539;G;14:17:37.77;+08:10:46.6;Boo;1.15;0.75;35;14.92;;11.31;10.66;10.30;23.97;S0;;;;;;;;2MASX J14173775+0810468,MCG +01-36-033,PGC 051054,SDSS J141737.76+081046.5;;Called NGC 5535/5539 in CGCG and MCG.; +NGC5540;G;14:14:54.43;+60:00:40.0;UMa;1.10;0.88;17;14.90;;11.50;10.78;10.51;23.77;E;;;;;;;;2MASX J14145441+6000401,MCG +10-20-090,PGC 050883,SDSS J141454.42+600039.9,SDSS J141454.42+600040.0,SDSS J141454.43+600040.0,SDSS J141454.43+600040.1;;; +NGC5541;G;14:16:31.80;+39:35:20.6;Boo;0.92;0.59;31;13.40;;11.13;10.39;10.02;21.97;Sc;;;;;;;;2MASX J14163182+3935207,IRAS 14144+3949,MCG +07-29-059,PGC 050991,SDSS J141631.80+393520.5,SDSS J141631.80+393520.6,UGC 09139;;; +NGC5542;G;14:17:53.20;+07:33:31.6;Boo;0.60;0.35;164;15.00;;11.71;11.01;10.78;22.57;E;;;;;;;;2MASX J14175320+0733314,MCG +01-36-034,PGC 051066,SDSS J141753.19+073331.5,SDSS J141753.20+073331.5,SDSS J141753.20+073331.6;;; +NGC5543;G;14:18:04.07;+07:39:17.5;Boo;0.79;0.42;140;15.30;;11.98;11.29;10.93;23.11;Sab;;;;;;;;2MASX J14180403+0739174,PGC 051079,SDSS J141804.07+073917.4,SDSS J141804.07+073917.5;;; +NGC5544;G;14:17:02.52;+36:34:17.7;Boo;1.03;0.96;57;13.20;;;;;22.66;S0-a;;;;;;;;MCG +06-31-090,PGC 051018,SDSS J141702.51+363417.7,SDSS J141702.52+363417.6,SDSS J141702.52+363417.7,UGC 09142;;; +NGC5545;G;14:17:05.16;+36:34:30.4;Boo;0.97;0.33;59;13.20;;11.12;10.45;10.16;21.05;Sbc;;;;;;;;2MASX J14170522+3634308,MCG +06-31-091,PGC 051023,SDSS J141705.15+363430.3,UGC 09143;;Multiple SDSS entries describe this object.; +NGC5546;G;14:18:09.23;+07:33:52.4;Boo;1.57;1.29;22;14.10;;10.29;9.57;9.34;23.18;E;;;;;;;;2MASX J14180921+0733524,MCG +01-36-035,PGC 051084,SDSS J141809.22+073352.3,SDSS J141809.23+073352.4,UGC 09148;;; +NGC5547;G;14:09:45.20;+78:36:03.8;UMi;0.74;0.30;61;14.50;;12.45;11.86;11.32;22.91;;;;;;;;;2MASX J14094552+7836038,PGC 050543,UGC 09095 NED01;;; +NGC5548;G;14:17:59.53;+25:08:12.4;Boo;1.33;1.05;118;14.35;13.73;10.64;9.88;9.39;22.56;S0-a;;;;;;;;2MASX J14175951+2508124,IRAS 14156+2522,MCG +04-34-013,PGC 051074,SDSS J141759.54+250812.7,SDSS J141759.55+250812.7,UGC 09149;;; +NGC5549;G;14:18:38.81;+07:22:38.4;Vir;1.53;0.75;119;14.20;;10.35;9.68;9.40;23.59;S0;;;;;;;;2MASX J14183879+0722384,MCG +01-36-036,PGC 051118,SDSS J141838.81+072238.4,UGC 09156;;; +NGC5550;G;14:18:27.97;+12:52:59.1;Boo;1.10;0.81;98;14.20;;11.26;10.53;10.26;22.82;SBb;;;;;;;;2MASX J14182795+1252588,MCG +02-36-065,PGC 051108,SDSS J141827.97+125259.0,UGC 09154;;; +NGC5551;G;14:18:54.84;+05:27:05.3;Vir;0.81;0.59;116;15.10;;11.73;10.99;10.74;23.26;E;;;;;;;;2MASX J14185484+0527057,MCG +01-36-037,PGC 051139,SDSS J141854.83+052705.3;;; +NGC5552;G;14:19:03.85;+07:01:54.1;Vir;0.91;0.39;172;15.20;;12.06;11.33;11.01;23.07;Sbc;;;;;5558;;;2MASX J14190387+0701539,PGC 051140,SDSS J141903.85+070154.1;;; +NGC5553;G;14:18:29.73;+26:17:16.2;Boo;1.15;0.25;87;14.80;;11.34;10.62;10.37;23.03;Sa;;;;;;;;2MASX J14182972+2617165,MCG +05-34-017,PGC 051105,SDSS J141829.72+261716.2,SDSS J141829.73+261716.2,UGC 09160;;; +NGC5554;G;14:19:15.00;+07:01:16.1;Vir;0.65;0.45;38;15.20;;12.26;11.64;11.30;22.76;SBb;;;;;5564;;;2MASX J14191496+0701158,IRAS 14167+0715,PGC 051160,SDSS J141915.00+070116.1;;; +NGC5555;G;14:18:48.08;-19:08:20.1;Vir;0.61;0.37;113;15.53;;12.43;11.81;11.38;22.57;Sb;;;;;;;;2MASX J14184808-1908201,ESO 579-015,IRAS 14160-1854,MCG -03-36-011,PGC 051124;;; +NGC5556;G;14:20:34.09;-29:14:30.4;Hya;3.45;2.75;145;12.43;;;;;24.05;Scd;;;;;;;;ESO 446-050,ESO-LV 446-0500,IRAS 14176-2901,MCG -05-34-009,PGC 051245,UGCA 389;;; +NGC5557;G;14:18:25.72;+36:29:36.8;Boo;2.28;1.12;97;12.20;;9.03;8.34;8.08;22.54;E;;;;;;;;2MASX J14182570+3629372,MCG +06-31-093,PGC 051104,SDSS J141825.72+362936.8,UGC 09161;;; +NGC5558;Dup;14:19:03.85;+07:01:54.1;Vir;;;;;;;;;;;;;;;5552;;;;;; +NGC5559;G;14:19:12.78;+24:47:55.4;Boo;1.31;0.38;65;15.00;;11.35;10.62;10.27;23.14;Sb;;;;;;;;2MASX J14191279+2447550,IRAS 14169+2501,MCG +04-34-017,PGC 051155,SDSS J141912.78+244755.4,SDSS J141912.79+244755.4,UGC 09166;;; +NGC5560;G;14:20:04.49;+03:59:32.9;Vir;3.45;0.85;109;13.20;12.37;10.45;9.69;9.47;23.66;Sb;;;;;;;;2MASX J14200449+0359335,2MASX J14200543+0359285,IRAS 14175+0413,MCG +01-37-001,PGC 051223,SDSS J142005.38+035927.4,UGC 09172;;; +NGC5561;G;14:17:22.83;+58:45:01.8;UMa;0.65;0.52;161;16.00;;12.89;12.17;11.96;23.09;Sb;;;;;;;;2MASX J14172281+5845020,IRAS 14158+5858,PGC 2800986,SDSS J141722.82+584501.7,SDSS J141722.83+584501.7,SDSS J141722.83+584501.8,SDSS J141722.83+584502.0;;; +NGC5562;G;14:20:11.05;+10:15:46.2;Boo;0.80;0.74;10;14.50;;11.07;10.37;10.06;22.59;S0-a;;;;;;;;2MASX J14201108+1015462,MCG +02-37-002,PGC 051227,SDSS J142011.06+101546.5,UGC 09174;;; +NGC5563;G;14:20:13.09;+07:03:19.5;Vir;0.95;0.45;77;15.30;;11.81;10.97;10.92;23.96;E;;;;;;;;2MASX J14201307+0703192,PGC 051226,SDSS J142013.08+070319.5,SDSS J142013.09+070319.5;;; +NGC5564;Dup;14:19:15.00;+07:01:16.1;Vir;;;;;;;;;;;;;;;5554;;;;;; +NGC5565;*;14:19:18.50;+06:59:41.8;Vir;;;;;;;;;;;;;;;;;;SDSS J141918.49+065941.7;;Identification as NGC 5565 is uncertain.; +NGC5566;G;14:20:19.89;+03:56:01.5;Vir;5.36;2.08;35;11.46;10.55;8.35;7.64;7.39;23.30;SBab;;;;;;;;2MASX J14201994+0356009,IRAS 14178+0409,MCG +01-37-002,PGC 051233,SDSS J142019.88+035601.4,UGC 09175;;; +NGC5567;G;14:19:17.64;+35:08:16.6;Boo;1.06;0.92;53;15.00;;11.14;10.44;10.20;23.40;E-S0;;;;;;;;2MASX J14191759+3508168,MCG +06-31-096,PGC 051161,SDSS J141917.63+350816.6;;; +NGC5568;G;14:19:21.32;+35:05:31.8;Boo;0.74;0.57;117;15.70;;12.70;11.83;11.58;23.23;Sc;;;;;;;;2MASX J14192133+3505318,MCG +06-31-098,PGC 051168,SDSS J141921.31+350531.7,SDSS J141921.32+350531.8;;; +NGC5569;G;14:20:32.09;+03:58:59.6;Vir;1.11;0.87;56;13.90;;13.07;13.01;12.32;23.84;SABc;;;;;;;;2MASX J14203215+0358594,MCG +01-37-003,PGC 051241,SDSS J142032.09+035859.5,SDSS J142032.09+035859.6,UGC 09176;;; +NGC5570;Dup;14:14:20.87;+07:30:57.3;Boo;;;;;;;;;;;;;;;5519;;;;;; +NGC5571;Other;14:19:32.03;+35:09:03.4;Boo;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC5572;G;14:19:35.30;+36:08:26.4;Boo;0.89;0.72;178;15.20;;12.41;11.83;11.40;23.33;Sb;;;;;;;;IRAS 14174+3622,MCG +06-31-099,PGC 051196,SDSS J141935.30+360826.4,UGC 09173;;; +NGC5573;G;14:20:41.51;+06:54:26.3;Vir;1.24;0.37;106;15.00;;11.68;11.01;10.77;23.38;Sbc;;;;;;;;2MASX J14204147+0654261,MCG +01-37-005,PGC 051257,SDSS J142041.50+065426.6,SDSS J142041.51+065426.7;;; +NGC5574;G;14:20:55.97;+03:14:16.8;Vir;1.32;0.83;61;13.23;12.39;10.45;9.78;9.54;22.61;E-S0;;;;;;;;2MASX J14205594+0314167,MCG +01-37-006,PGC 051270,SDSS J142055.96+031416.8,UGC 09181;;; +NGC5575;G;14:20:59.41;+06:12:09.6;Vir;0.91;0.75;95;14.50;;11.00;10.31;10.00;23.01;S0;;;;;5578;;;2MASX J14205937+0612095,MCG +01-37-008,PGC 051272,SDSS J142059.40+061209.5,SDSS J142059.41+061209.5,SDSS J142059.41+061209.6,UGC 09184;;; +NGC5576;G;14:21:03.68;+03:16:15.6;Vir;2.83;1.87;91;11.85;10.96;8.74;7.97;7.83;22.90;E;;;;;;;;2MASX J14210369+0316157,MCG +01-37-007,PGC 051275,UGC 09183;;; +NGC5577;G;14:21:13.11;+03:26:08.8;Vir;2.86;0.73;61;13.05;;10.55;9.98;9.75;23.57;Sbc;;;;;;;;2MASX J14211311+0326087,IRAS 14187+0339,MCG +01-37-009,PGC 051286,UGC 09187;;; +NGC5578;Dup;14:20:59.41;+06:12:09.6;Vir;;;;;;;;;;;;;;;5575;;;;;; +NGC5579;G;14:20:26.48;+35:11:19.7;Boo;1.49;1.12;177;14.70;;12.86;12.43;12.16;23.87;Sc;;;;;;;;2MASX J14202656+3511188,MCG +06-32-002,PGC 051236,SDSS J142026.48+351119.6,SDSS J142026.48+351119.7,UGC 09180;;; +NGC5580;G;14:21:38.41;+35:12:17.5;Boo;1.54;1.38;137;13.60;;10.48;9.88;9.65;23.26;S0;;;;;5590;;;2MASX J14213841+3512178,MCG +06-32-006,PGC 051312,SDSS J142138.40+351217.5,UGC 09200;;Identification as NGC 5590 is not certain.; +NGC5581;G;14:21:16.31;+23:28:48.1;Boo;0.60;0.48;0;15.10;;11.68;10.98;10.80;;E;;;;;;;;2MASX J14211626+2328476,MCG +04-34-021,PGC 051282,SDSS J142116.30+232848.0,SDSS J142116.31+232848.1;;;Diameters and position angle taken from Simbad. +NGC5582;G;14:20:43.12;+39:41:36.9;Boo;2.20;1.40;24;13.00;;9.79;9.17;8.94;23.05;E;;;;;;;;2MASX J14204312+3941369,MCG +07-29-063,PGC 051251,UGC 09188;;; +NGC5583;G;14:21:40.50;+13:13:56.6;Boo;0.84;0.64;81;14.20;;11.41;10.78;10.47;22.68;E;;;;;;;;2MASX J14214048+1313562,MCG +02-37-004,PGC 051313,SDSS J142140.49+131356.6,UGC 09196;;; +NGC5584;G;14:22:23.77;-00:23:15.6;Vir;3.13;2.34;154;12.80;;10.84;10.05;9.95;23.71;SABc;;;;;;;;2MASX J14222381-0023148,IRAS 14198-0009,MCG +00-37-001,PGC 051344,SDSS J142223.59-002318.2,SDSS J142223.76-002315.5,SDSS J142223.76-002315.6,SDSS J142223.77-002315.6,UGC 09201;;The APM image refers to part of the galaxy east of the nucleus.; +NGC5585;G;14:19:48.20;+56:43:44.6;UMa;4.27;2.62;33;11.73;11.22;10.23;9.58;9.50;22.86;SABc;;;;;;;;2MASX J14194820+5643445,IRAS 14182+5657,MCG +10-20-094,PGC 051210,SDSS J141948.25+564342.2,UGC 09179;;; +NGC5586;Other;14:22:07.66;+13:11:03.4;Boo;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC5587;G;14:22:10.71;+13:55:05.0;Boo;2.13;0.67;162;14.00;;10.66;9.95;9.68;23.84;S0-a;;;;;;;;2MASX J14221073+1355045,MCG +02-37-005,PGC 051332,SDSS J142210.71+135505.0,UGC 09202;;; +NGC5588;G;14:21:25.11;+35:16:14.3;Boo;0.95;0.80;58;14.30;;11.54;10.76;10.54;22.75;Sa;;;;;5589;;;2MASX J14212511+3516138,MCG +06-32-005,PGC 051300,SDSS J142125.11+351614.2,SDSS J142125.11+351614.3,UGC 09197;;Identification as NGC 5588 is not certain.; +NGC5589;Dup;14:21:25.11;+35:16:14.3;Boo;;;;;;;;;;;;;;;5588;;;;;; +NGC5590;Dup;14:21:38.41;+35:12:17.5;Boo;;;;;;;;;;;;;;;5580;;;;;; +NGC5591;GPair;14:22:34.00;+13:43:00.0;Boo;1.40;;;;;;;;;;;;;;;;;MCG +02-37-006,UGC 09207;;;Diameter of the group inferred by the author. +NGC5591 NED01;G;14:22:33.29;+13:43:01.9;Boo;0.85;0.48;79;14.50;;12.39;11.82;11.49;22.47;Sc;;;;;;;;2MASX J14223326+1343016,IRAS 14201+1356,MCG +02-37-006 NED01,PGC 051360,SDSS J142233.28+134301.8,SDSS J142233.29+134301.9,UGC 09207 NED01;;; +NGC5591 NED02;G;14:22:34.76;+13:43:02.5;Boo;1.02;0.25;64;16.50;;;;;23.62;Sc;;;;;;;;MCG +02-37-006 NED02,PGC 093125,SDSS J142234.75+134302.4,UGC 09207 NED02;;; +NGC5592;G;14:23:55.05;-28:41:17.0;Hya;1.63;0.75;88;13.62;12.71;10.44;9.74;9.39;22.70;Sbc;;;;;;;;2MASX J14235504-2841173,ESO 446-058,ESO-LV 446-0580,IRAS 14210-2827,MCG -05-34-011,PGC 051428;;; +NGC5593;OCl;14:25:39.18;-54:47:55.3;Lup;4.50;;;;;;;;;;;;;;;;;MWSC 2217;;; +NGC5594;G;14:23:10.31;+26:15:56.9;Boo;1.47;0.70;152;17.00;;11.30;10.70;10.30;24.45;E;;;;;;4412;;2MASX J14231031+2615567,MCG +04-34-024,PGC 051391,SDSS J142310.31+261556.8;;; +NGC5595;G;14:24:13.24;-16:43:22.8;Lib;2.12;1.01;54;12.00;;10.01;9.31;9.18;22.35;SABc;;;;;;;;2MASX J14241324-1643227,IRAS 14214-1629,MCG -03-37-001,PGC 051445;;; +NGC5596;G;14:22:28.74;+37:07:19.9;Boo;1.04;0.72;95;14.50;;11.33;10.65;10.41;23.26;S0;;;;;;;;2MASX J14222871+3707193,MCG +06-32-010,PGC 051355,SDSS J142228.73+370719.8,SDSS J142228.73+370719.9,SDSS J142228.74+370719.9,UGC 09208;;; +NGC5597;G;14:24:27.44;-16:45:45.9;Lib;2.00;1.55;65;14.75;14.18;10.71;10.20;9.92;22.63;Sc;;;;;;;;2MASX J14242744-1645457,IRAS 14216-1632,MCG -03-37-002,PGC 051456;;; +NGC5598;G;14:22:28.28;+40:19:11.3;Boo;1.55;0.99;51;14.30;;10.97;10.32;10.02;23.73;S0;;;;;;;;2MASX J14222828+4019113,MCG +07-30-004,PGC 051354,SDSS J142228.27+401911.3,SDSS J142228.28+401911.3,UGC 09209;;; +NGC5599;G;14:23:50.61;+06:34:34.0;Vir;1.34;0.51;158;14.70;;11.43;10.70;10.46;23.30;Sb;;;;;;;;2MASX J14235062+0634338,IRAS 14213+0647,MCG +01-37-010,PGC 051423,SDSS J142350.61+063433.9,UGC 09218;;; +NGC5600;G;14:23:49.52;+14:38:19.6;Boo;1.60;1.57;135;11.90;;10.37;9.75;9.41;22.65;SABc;;;;;;;;2MASX J14234954+1438194,IRAS 14214+1451,MCG +03-37-013,PGC 051422,SDSS J142349.51+143819.5,UGC 09220;;; +NGC5601;G;14:22:53.28;+40:18:34.5;Boo;0.83;0.33;4;15.60;;12.46;11.81;11.62;23.36;Sa;;;;;;;;2MASX J14225329+4018344,MCG +07-30-006,PGC 051370,SDSS J142253.28+401834.4,SDSS J142253.28+401834.5,SDSS J142253.29+401834.4;;Two MAPS entries for the same object.; +NGC5602;G;14:22:18.83;+50:30:05.0;Boo;1.31;0.68;167;13.50;;10.48;9.87;9.60;22.41;Sa;;;;;;;;2MASX J14221883+5030051,MCG +09-24-002,PGC 051340,SDSS J142218.83+503004.9,UGC 09210;;; +NGC5603;G;14:23:01.53;+40:22:38.7;Boo;1.11;1.04;90;14.00;;10.94;10.24;9.98;22.97;S0;;;;;;;;2MASX J14230151+4022382,MCG +07-30-008,PGC 051382,SDSS J142301.52+402238.7,SDSS J142301.53+402238.7,UGC 09217;;; +NGC5604;G;14:24:42.80;-03:12:43.8;Vir;1.80;0.92;6;13.70;;10.69;9.96;9.71;23.21;SABa;;;;;;;;2MASX J14244280-0312437,IRAS 14221-0259,MCG +00-37-003,PGC 051471;;; +NGC5605;G;14:25:07.57;-13:09:46.8;Lib;1.50;1.23;66;12.00;;10.30;9.58;9.42;22.59;SABc;;;;;;;;2MASX J14250757-1309467,IRAS 14223-1256,MCG -02-37-003,PGC 051492;;; +NGC5606;OCl;14:27:47.28;-59:37:56.1;Cen;3.60;;;7.95;7.70;;;;;;;;;;;;;ESO 134-003,MWSC 2218;;; +NGC5607;G;14:19:26.70;+71:35:17.6;UMi;0.87;0.73;71;13.90;;11.57;10.98;10.58;22.30;Sab;;;;;5620;1005;;2MASX J14192669+7135177,IRAS 14188+7148,MCG +12-14-001,PGC 051182,UGC 09189;;This is the most likely candidate for NGC 5620.; +NGC5608;G;14:23:17.89;+41:46:33.2;Boo;1.66;0.74;98;13.96;;;;;23.15;IB;;;;;;;;MCG +07-30-009,PGC 051396,UGC 09219;;; +NGC5609;G;14:23:48.30;+34:50:34.0;Boo;0.48;0.39;116;;;13.61;12.70;12.46;23.44;E;;;;;;;;2MASX J14234825+3450350,PGC 3088538,SDSS J142348.27+345034.3,SDSS J142348.27+345034.4,SDSS J142348.28+345034.4;;; +NGC5610;G;14:24:22.94;+24:36:50.9;Boo;1.73;0.60;105;14.50;;11.09;10.33;10.00;23.60;SBab;;;;;;;;2MASX J14242294+2436513,IRAS 14221+2450,MCG +04-34-025,PGC 051450,SDSS J142422.93+243650.8,SDSS J142422.94+243650.9,UGC 09230;;; +NGC5611;G;14:24:04.78;+33:02:50.6;Boo;1.36;0.59;65;13.50;;10.65;10.02;9.75;22.80;S0;;;;;;;;2MASX J14240477+3302510,MCG +06-32-020,PGC 051431,SDSS J142404.77+330250.6,UGC 09227;;; +NGC5612;G;14:34:01.25;-78:23:15.0;Aps;1.94;1.15;64;13.01;12.14;9.59;8.83;8.55;22.86;Sab;;;;;;;;2MASX J14335665-7823278,2MASX J14340127-7823148,ESO 022-001,ESO-LV 22-0010,IRAS 14281-7809,PGC 052057;;; +NGC5613;G;14:24:05.96;+34:53:31.6;Boo;0.56;0.37;30;16.00;;12.61;12.13;11.66;23.14;S0-a;;;;;;;;2MASX J14240596+3453310,MCG +06-32-021,PGC 051433,SDSS J142405.95+345331.5,SDSS J142405.96+345331.5,SDSS J142405.96+345331.6,UGC 09228;;; +NGC5614;G;14:24:07.59;+34:51:31.9;Boo;2.43;2.00;150;12.60;;9.50;8.79;8.53;23.12;Sab;;;;;;;;2MASX J14240759+3451320,IRAS 14220+3505,MCG +06-32-022,PGC 051439,SDSS J142407.58+345131.8,UGC 09226;;; +NGC5615;G;14:24:06.50;+34:51:54.0;Boo;0.16;0.16;162;15.00;;;;;21.21;;;;;;;;;MCG +06-32-023,PGC 051435,SDSS J142406.49+345153.9,SDSS J142406.50+345154.0,UGC 09226 NOTES01;;; +NGC5616;G;14:24:20.70;+36:27:41.1;Boo;2.13;0.41;158;14.80;;11.07;10.28;9.94;23.73;SBbc;;;;;;;;2MASX J14242075+3627410,IRAS 14222+3641,MCG +06-32-026,PGC 051448,SDSS J142420.69+362741.1,UGC 09231;;; +NGC5617;OCl;14:29:44.07;-60:42:39.0;Cen;5.10;;;7.00;6.30;;;;;;;;;;;;;MWSC 2223;;; +NGC5618;G;14:27:11.81;-02:15:44.7;Vir;1.45;0.78;4;13.60;;11.68;10.98;10.50;23.18;SBc;;;;;;;;2MASX J14271179-0215448,MCG +00-37-005,PGC 051603,SDSS J142711.81-021544.6,SDSS J142711.81-021544.7,UGC 09250;;; +NGC5619;G;14:27:18.23;+04:48:10.2;Vir;2.29;0.93;12;13.40;;10.18;9.47;9.36;23.80;Sb;;;;;;;;2MASX J14271827+0448103,IRAS 14248+0501,MCG +01-37-012,PGC 051610,SDSS J142718.22+044810.1,SDSS J142718.23+044810.1,SDSS J142718.23+044810.2,UGC 09255;;; +NGC5619B;G;14:27:32.37;+04:49:17.8;Vir;1.05;0.44;121;14.80;;11.79;11.11;10.80;22.96;Sbc;;;;;;1016,4424;;2MASX J14273238+0449173,IRAS F14250+0502,MCG +01-37-014,PGC 051624,SDSS J142732.37+044917.7,SDSS J142732.37+044917.8,SDSS J142732.38+044917.8;;; +NGC5620;Dup;14:19:26.70;+71:35:17.6;UMi;;;;;;;;;;;;;;;5607;;;;;; +NGC5621;Other;14:27:49.81;+08:14:24.9;Boo;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC5622;G;14:26:12.19;+48:33:50.4;Boo;1.34;0.76;86;14.11;13.44;11.42;10.82;10.56;23.12;Sb;;;;;;;;2MASX J14261219+4833503,MCG +08-26-032,PGC 051541,SDSS J142612.19+483350.3,SDSS J142612.19+483350.4,UGC 09248;;; +NGC5623;G;14:27:08.68;+33:15:09.2;Boo;1.65;1.08;17;13.53;12.53;;;;23.58;E;;;;;;;;MCG +06-32-035,PGC 051598,UGC 09260;;; +NGC5624;G;14:26:35.21;+51:35:07.3;Boo;1.02;0.68;7;14.10;;;;;22.54;I;;;;;;;;IRAS 14248+5148,MCG +09-24-006,PGC 051568,SDSS J142635.21+513507.3,UGC 09256;;; +NGC5625;GPair;14:27:01.50;+39:57:25.0;Boo;1.20;;;;;;;;;;;;;;;;;MCG +07-30-013;;;Diameter of the group inferred by the author. +NGC5625 NED01;G;14:27:00.60;+39:57:22.4;Boo;0.48;0.28;144;16.68;;;;;23.88;Sbc;;;;;;;;MCG +07-30-013 NED01,PGC 2158342,SDSS J142700.60+395722.4;;;B-Mag taken from LEDA +NGC5625 NED02;G;14:27:02.33;+39:57:26.2;Boo;1.00;0.78;67;14.80;;12.33;11.81;11.29;23.42;Sc;;;;;;;;2MASX J14270227+3957266,IRAS 14250+4010,MCG +07-30-013 NED02,PGC 051592,SDSS J142702.32+395726.1,SDSS J142702.33+395726.1,SDSS J142702.33+395726.2;;; +NGC5626;G;14:29:49.09;-29:44:54.5;Hya;1.37;1.05;102;14.01;;10.43;9.71;9.43;23.40;S0-a;;;;;;;;2MASX J14294908-2944544,ESO 447-008,ESO-LV 447-0080,MCG -05-34-015,PGC 051794;;; +NGC5627;G;14:28:34.28;+11:22:41.7;Boo;1.28;0.78;121;14.70;;11.18;10.44;10.27;23.81;S0;;;;;;;;2MASX J14283429+1122417,MCG +02-37-013,PGC 051705,SDSS J142834.28+112241.6,UGC 09280;;; +NGC5628;G;14:28:25.79;+17:55:27.7;Boo;0.97;0.63;173;14.50;;11.13;10.40;10.10;23.24;E;;;;;;;;2MASX J14282579+1755272,MCG +03-37-019,PGC 051699,SDSS J142825.79+175527.6,SDSS J142825.79+175527.7,UGC 09278;;; +NGC5629;G;14:28:16.37;+25:50:55.6;Boo;1.71;1.58;110;14.20;;10.17;9.45;9.22;23.08;S0;;;;;;;;2MASX J14281635+2550557,MCG +04-34-034,PGC 051681,SDSS J142816.37+255055.5,UGC 09281;;; +NGC5630;G;14:27:36.61;+41:15:27.9;Boo;1.48;0.52;96;13.60;;11.54;11.05;10.84;22.42;SBd;;;;;;;;2MASX J14273658+4115281,IRAS 14256+4128,MCG +07-30-014,PGC 051635,SDSS J142736.60+411527.9,SDSS J142736.61+411527.9,UGC 09270;;HOLM 649B is a star.; +NGC5631;G;14:26:33.30;+56:34:57.5;UMa;1.95;1.95;140;13.51;12.55;9.39;8.67;8.47;22.69;S0;;;;;;;;2MASX J14263328+5634575,MCG +10-21-002,PGC 051564,SDSS J142633.29+563457.4,UGC 09261;;; +NGC5632;*;14:29:19.55;-00:26:53.4;Vir;;;;;;;;;;;;;;;;;;SDSS J142919.54-002653.3;;; +NGC5633;G;14:27:28.38;+46:08:47.5;Boo;1.09;0.72;11;13.18;12.93;10.52;9.87;9.59;21.73;Sb;;;;;;;;2MASX J14272838+4608475,IRAS 14255+4622,MCG +08-26-034,PGC 051620,SDSS J142728.38+460847.5,SDSS J142728.38+460847.6,UGC 09271;;; +NGC5634;GCl;14:29:37.28;-05:58:35.1;Vir;4.50;;;10.69;10.05;;;;;;;;;;;;;MWSC 2222;;; +NGC5635;G;14:28:31.76;+27:24:32.2;Boo;2.62;1.00;64;13.90;;9.97;9.23;8.98;23.73;Sb;;;;;;;;2MASX J14283173+2724326,MCG +05-34-049,PGC 051706,SDSS J142831.74+272432.3,UGC 09283;;; +NGC5636;G;14:29:39.02;+03:15:58.7;Vir;1.36;0.89;56;13.70;;11.98;11.32;11.29;23.23;S0-a;;;;;;;;2MASX J14293905+0315583,MCG +01-37-017,PGC 051785,SDSS J142939.01+031558.6,SDSS J142939.02+031558.6,SDSS J142939.02+031558.7,UGC 09304;;; +NGC5637;G;14:28:59.60;+23:11:29.4;Boo;0.84;0.44;7;14.60;;11.60;10.94;10.59;22.57;Sb;;;;;;;;2MASX J14285963+2311294,IRAS 14267+2324,MCG +04-34-037,PGC 051736,SDSS J142859.59+231129.3,SDSS J142859.59+231129.4,SDSS J142859.60+231129.4,UGC 09293;;; +NGC5638;G;14:29:40.38;+03:13:59.9;Vir;1.94;1.71;154;12.14;11.20;9.16;8.50;8.25;22.46;E;;;;;;;;2MASX J14294038+0314003,MCG +01-37-018,PGC 051787,SDSS J142940.37+031359.9,UGC 09308;;; +NGC5639;G;14:28:46.55;+30:24:46.6;Boo;1.26;0.81;108;14.60;;11.83;10.96;10.81;23.33;Sc;;;;;;;;2MASX J14284654+3024467,MCG +05-34-051,PGC 051730,UGC 09290;;; +NGC5640;G;14:20:40.81;+80:07:23.2;Cam;0.78;0.47;22;15.40;;12.23;11.59;11.24;23.69;;;;;;;;;2MASX J14204091+8007234,PGC 051263;;; +NGC5641;G;14:29:16.62;+28:49:18.8;Boo;2.07;1.03;160;13.60;;10.13;9.46;9.19;23.18;Sab;;;;;;;;2MASX J14291660+2849189,MCG +05-34-055,PGC 051758,SDSS J142916.62+284918.7,SDSS J142916.62+284918.8,UGC 09300;;; +NGC5642;G;14:29:13.49;+30:01:35.2;Boo;1.77;1.13;126;14.30;;10.23;9.56;9.35;24.12;E;;;;;;;;2MASX J14291348+3001349,MCG +05-34-052,PGC 051751,SDSS J142913.48+300135.2,UGC 09301;;; +NGC5643;G;14:32:40.74;-44:10:27.9;Lup;5.27;4.60;88;11.03;13.60;8.07;7.46;7.17;23.02;Sc;;;;;;;;2MASX J14324077-4410285,ESO 272-016,ESO-LV 272-0160,IRAS 14294-4357,MCG -07-30-003,PGC 051969;;; +NGC5644;G;14:30:25.58;+11:55:40.8;Boo;1.24;1.14;150;14.10;;10.46;9.72;9.45;23.18;S0;;;;;;;;2MASX J14302556+1155408,MCG +02-37-016,PGC 051834,SDSS J143025.57+115540.7,SDSS J143025.58+115540.7,SDSS J143025.58+115540.8,UGC 09321;;; +NGC5645;G;14:30:39.35;+07:16:30.3;Vir;2.02;1.09;85;12.80;;10.46;9.91;9.69;22.64;SBcd;;;;;;;;2MASX J14303940+0716300,IRAS 14281+0729,MCG +01-37-019,PGC 051846,SDSS J143039.34+071630.3,SDSS J143039.35+071630.3,UGC 09328;;; +NGC5646;G;14:29:34.01;+35:27:43.0;Boo;1.19;0.45;79;14.99;;;;11.20;23.42;Sb;;;;;;;;MCG +06-32-045,PGC 051779,SDSS J142934.01+352743.0,UGC 09312;;; +NGC5647;G;14:30:36.10;+11:52:36.1;Boo;1.02;0.24;180;15.30;;11.87;11.25;10.99;23.66;SABa;;;;;;;;2MASX J14303611+1152360,MCG +02-37-017,PGC 051843,SDSS J143036.09+115236.0,UGC 09329;;; +NGC5648;G;14:30:32.60;+14:01:23.0;Boo;0.77;0.63;175;14.10;;12.39;11.67;11.45;22.53;Sb;;;;;5649;;;IRAS 14281+1414,MCG +02-37-019,PGC 051840,UGC 09330;;; +NGC5649;Dup;14:30:32.60;+14:01:23.0;Boo;;;;;;;;;;;;;;;5648;;;;;; +NGC5650;G;14:31:01.08;+05:58:42.3;Vir;1.05;0.24;114;13.80;;11.25;10.68;10.43;22.00;Sbc;;;;;5652;;;2MASX J14310109+0558424,IRAS 14285+0611,MCG +01-37-020,PGC 051865,UGC 09334;;HOLM 656B is a star.; +NGC5651;*;14:31:12.70;-00:19:22.7;Vir;;;;;;;;;;;;;;;;;;SDSS J143112.70-001922.6;;; +NGC5652;Dup;14:31:01.08;+05:58:42.3;Vir;;;;;;;;;;;;;;;5650;;;;;; +NGC5653;G;14:30:10.42;+31:12:55.8;Boo;1.60;1.33;120;12.70;;10.18;9.50;9.17;22.52;Sb;;;;;5653E;1026;;2MASX J14301041+3112558,IRAS 14280+3126,MCG +05-34-058,PGC 051814,UGC 09318;;; +NGC5654;G;14:30:01.33;+36:21:39.3;Boo;1.25;0.73;133;14.10;;10.57;9.88;9.60;23.29;S0-a;;;;;;;;2MASX J14300134+3621392,MCG +06-32-050,PGC 051807,SDSS J143001.32+362139.3,SDSS J143001.70+362129.6,UGC 09319;;; +NGC5655;G;14:30:50.93;+13:58:07.5;Boo;0.73;0.47;152;14.00;;11.98;11.38;10.92;22.06;SBc;;;;;;;;2MASX J14305092+1358077,IRAS 14284+1411,MCG +02-37-020,PGC 051857,UGC 09333;;Often mistakenly called NGC 5649.; +NGC5656;G;14:30:25.51;+35:19:15.7;Boo;1.26;0.89;57;12.73;12.43;10.33;9.64;9.35;22.16;Sab;;;;;;;;2MASX J14302551+3519159,IRAS 14283+3532,MCG +06-32-053,PGC 051831,SDSS J143025.50+351915.7,SDSS J143025.51+351915.6,SDSS J143025.51+351915.7,UGC 09332;;; +NGC5657;G;14:30:43.60;+29:10:51.0;Boo;1.75;0.71;168;14.40;;11.34;10.65;10.38;23.66;Sb;;;;;;;;2MASX J14304364+2910503,IRAS 14285+2924,MCG +05-34-060,PGC 051850,SDSS J143043.59+291050.9,UGC 09335;;; +NGC5658;*;14:31:55.29;-00:22:02.3;Vir;;;;;;;;;;;;;;;;;;SDSS J143155.28-002202.2;;; +NGC5659;G;14:31:06.14;+25:21:18.4;Boo;1.79;0.51;45;15.00;;11.36;10.69;10.39;23.65;SBb;;;;;;;;2MASX J14310611+2521183,MCG +04-34-044,PGC 051875,SDSS J143106.13+252118.4,UGC 09342;;; +NGC5660;G;14:29:49.81;+49:37:21.6;Boo;2.64;2.43;30;12.20;;10.26;9.54;9.39;23.15;SABc;;;;;;;;2MASX J14294980+4937214,IRAS 14280+4950,MCG +08-26-039,PGC 051795,SDSS J142949.81+493721.6,TYC 3475-83-1,UGC 09325;;; +NGC5661;G;14:31:57.39;+06:15:01.5;Vir;1.14;0.61;22;14.20;;12.22;11.52;11.21;22.93;Sb;;;;;;;;2MASX J14315739+0615016,IRAS 14294+0628,MCG +01-37-023,PGC 051921,SDSS J143157.38+061501.4,SDSS J143157.39+061501.5,UGC 09346;;; +NGC5662;OCl;14:35:37.58;-56:37:05.1;Cen;8.10;;;6.18;5.50;;;;;;;;;;;;;MWSC 2234;;; +NGC5663;G;14:33:56.30;-16:34:51.8;Lib;0.92;0.87;60;15.00;;11.19;10.55;10.24;23.62;E-S0;;;;;;;;2MASX J14335631-1634509,MCG -03-37-003,PGC 052049;;; +NGC5664;G;14:33:43.62;-14:37:10.9;Lib;0.85;0.39;27;15.00;;11.28;10.52;10.22;22.55;Sa;;;;;;4455;;2MASX J14334360-1437109,IRAS 14309-1424,MCG -02-37-008,PGC 052033;;; +NGC5665;G;14:32:25.74;+08:04:43.1;Boo;1.88;1.17;150;12.60;;10.36;9.68;9.48;22.45;Sc;;;;;;;;2MASX J14322579+0804424,IRAS 14299+0817,MCG +01-37-024,PGC 051953,SDSS J143225.74+080443.1,UGC 09352;;; +NGC5665A;Other;14:32:27.34;+08:04:43.4;Boo;;;;;;;;;;;;;;;;;;SDSS J143227.33+080443.3;;Part of galaxy NGC5665; +NGC5666;G;14:33:09.21;+10:30:38.9;Boo;0.97;0.75;150;13.50;;11.00;10.33;10.18;22.21;S0;;;;;;;;2MASX J14330917+1030388,IRAS 14307+1043,MCG +02-37-023,PGC 051995,SDSS J143309.21+103038.9,UGC 09360;;; +NGC5667;G;14:30:22.91;+59:28:11.2;Dra;1.62;0.82;170;13.10;;11.24;10.51;10.47;22.51;Sc;;;;;;;;2MASX J14302288+5928108,IRAS 14289+5941,MCG +10-21-004,PGC 051830,SDSS J143022.90+592811.1,UGC 09344;;; +NGC5668;G;14:33:24.34;+04:27:01.6;Vir;1.91;1.61;107;12.70;;;;;22.25;Scd;;;;;;;;2MASX J14332469+0427223,IRAS 14309+0440,MCG +01-37-028,PGC 052018,SDSS J143324.33+042701.6,SDSS J143324.33+042701.7,SDSS J143324.34+042701.7,UGC 09363;;2MASS position refers to a superposed star.; +NGC5669;G;14:32:43.49;+09:53:25.6;Boo;2.57;1.46;54;13.20;;11.18;10.53;10.35;23.31;Sc;;;;;;;;2MASX J14324347+0953254,IRAS 14302+1006,MCG +02-37-021,PGC 051973,UGC 09353;;; +NGC5670;G;14:35:36.03;-45:58:01.1;Lup;2.59;1.18;67;12.96;;9.57;8.84;8.61;23.71;S0;;;;;;;;2MASX J14353601-4558011,ESO 272-019,ESO-LV 272-0190,PGC 052161;;; +NGC5671;G;14:27:42.00;+69:41:39.0;UMi;1.41;1.02;62;14.40;;11.28;10.55;10.28;23.61;Sb;;;;;;;;2MASX J14274201+6941392,MCG +12-14-006,PGC 051641,UGC 09297;;; +NGC5672;G;14:32:38.34;+31:40:12.6;Boo;0.91;0.75;49;14.50;;12.03;11.28;11.09;22.52;Sb;;;;;;1030;;2MASX J14323834+3140127,IRAS 14305+3153,MCG +05-34-068,PGC 051964,SDSS J143238.34+314012.6,UGC 09354;;; +NGC5673;G;14:31:30.91;+49:57:31.4;Boo;2.33;0.45;134;14.00;;11.79;11.02;11.08;22.25;Sc;;;;;;;;2MASX J14313092+4957317,MCG +08-26-041,PGC 051901,SDSS J143130.90+495731.3,SDSS J143130.90+495731.4,UGC 09347;;; +NGC5674;G;14:33:52.24;+05:27:29.6;Vir;1.15;0.30;6;13.70;13.70;11.03;10.50;9.96;22.03;Sc;;;;;;;;2MASX J14335228+0527298,IRAS 14313+0540,MCG +01-37-031,PGC 052042,SDSS J143352.28+052730.1,UGC 09369;;; +NGC5675;G;14:32:39.83;+36:18:07.9;Boo;2.27;0.72;135;14.00;;10.36;9.56;9.42;23.73;SBab;;;;;;;;2MASX J14323987+3618083,IRAS 14305+3631,MCG +06-32-062,PGC 051965,SDSS J143239.83+361808.0,SDSS J143239.84+361808.0,UGC 09357;;; +NGC5676;G;14:32:46.85;+49:27:28.4;Boo;3.59;1.61;46;11.70;;8.97;8.20;7.91;22.74;Sc;;;;;;;;2MASX J14324685+4927281,IRAS 14310+4940,MCG +08-26-043,PGC 051978,SDSS J143246.84+492728.4,SDSS J143246.85+492728.4,UGC 09366;;; +NGC5677;G;14:34:12.74;+25:28:04.9;Boo;0.94;0.70;136;14.80;;11.44;10.88;10.56;23.05;SBbc;;;;;;;;2MASX J14341275+2528048,IRAS 14319+2541,MCG +04-34-046,PGC 052072,SDSS J143412.73+252804.9,UGC 09378;;; +NGC5678;G;14:32:05.61;+57:55:17.2;Dra;2.96;1.55;2;12.10;;9.25;8.55;8.28;22.92;SABb;;;;;;;;2MASX J14320558+5755171,IRAS 14306+5808,MCG +10-21-005,PGC 051932,SDSS J143205.60+575517.1,SDSS J143205.61+575517.1,SDSS J143205.61+575517.2,UGC 09358;;The 2MASS position is 6 arcsec northwest of the optical nucleus.; +NGC5679;GTrpl;14:35:08.70;+05:21:23.0;Vir;1.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC5679A;G;14:35:06.39;+05:21:24.6;Vir;0.78;0.47;133;14.50;;14.37;13.83;13.91;;Sc;;;;;;;;2MASX J14350635+0521244,MCG +01-37-034,PGC 052130,SDSS J143506.39+052124.5,UGC 09383 NOTES01;;; +NGC5679B;G;14:35:08.76;+05:21:32.2;Vir;1.08;0.62;124;14.50;;12.20;11.54;11.36;22.83;Sb;;;;;;;;2MASX J14350876+0521324,MCG +01-37-035,PGC 052132,SDSS J143508.75+052132.2,UGC 09383;;; +NGC5679C;G;14:35:10.99;+05:21:15.4;Vir;0.27;0.18;11;16.00;;;;;22.94;Scd;;;;;;;;MCG +01-37-036,PGC 052129,SDSS J143510.98+052115.3,UGC 09383 NOTES02;;; +NGC5680;G;14:35:44.53;-00:00:48.1;Vir;0.96;0.67;21;15.40;;11.51;10.87;10.70;23.83;E-S0;;;;;;;;2MASX J14354456-0000474,PGC 052173,SDSS J143544.53-000048.1;;"Stars superposed 17"" NE and 27"" north."; +NGC5681;G;14:35:42.87;+08:18:02.2;Boo;0.86;0.61;2;14.30;;11.94;11.31;11.00;22.55;Sbc;;;;;;;;2MASX J14354286+0818018,IRAS 14332+0831,MCG +02-37-025,PGC 052169,SDSS J143542.86+081802.1,UGC 09393;;; +NGC5682;G;14:34:44.98;+48:40:12.9;Boo;0.65;0.24;136;15.10;;13.27;12.48;12.25;21.89;Sb;;;;;;;;2MASX J14344551+4840039,IRAS 14329+4853,MCG +08-27-002,PGC 052107,SDSS J143444.97+484012.8,SDSS J143444.98+484012.9,UGC 09388;;; +NGC5683;G;14:34:52.45;+48:39:42.9;Boo;0.57;0.49;95;16.46;16.08;12.74;11.66;11.50;23.21;S0-a;;;;;;;;2MASX J14345248+4839429,MCG +08-27-003,PGC 052114,SDSS J143452.45+483942.7,SDSS J143452.45+483942.8,SDSS J143452.46+483942.7;;; +NGC5684;G;14:35:50.16;+36:32:35.6;Boo;1.41;1.12;101;14.20;;10.60;9.99;9.72;23.13;S0;;;;;;;;2MASX J14355015+3632352,MCG +06-32-073,PGC 052179,SDSS J143550.15+363235.6,SDSS J143550.16+363235.6,UGC 09402;;; +NGC5685;G;14:36:15.37;+29:54:30.2;Boo;1.05;0.94;20;;;;;;23.72;E;;;;;;;;2MASX J14361538+2954299,MCG +05-34-081,PGC 052192,SDSS J143615.36+295430.1,SDSS J143615.36+295430.2,SDSS J143615.37+295430.1,SDSS J143615.37+295430.2,UGC 09403;;; +NGC5686;G;14:36:02.59;+36:30:11.5;Boo;0.77;0.73;80;15.20;;12.08;11.43;11.20;23.08;SBa;;;;;;;;2MASX J14360260+3630113,MCG +06-32-075,PGC 052189,SDSS J143602.58+363011.5,SDSS J143602.59+363011.5;;; +NGC5687;G;14:34:52.40;+54:28:33.1;Boo;2.41;1.37;103;13.30;;9.89;9.14;8.95;23.21;E-S0;;;;;;;;2MASX J14345236+5428324,MCG +09-24-020,PGC 052116,SDSS J143452.39+542833.0,UGC 09395;;; +NGC5688;G;14:39:35.15;-45:01:08.4;Lup;4.13;1.91;86;12.62;;9.21;8.49;8.32;23.96;Sc;;;;;;;;2MASX J14393515-4501082,ESO 272-022,ESO-LV 272-0220,IRAS 14363-4448,MCG -07-30-004,PGC 052381;;; +NGC5689;G;14:35:29.69;+48:44:29.9;Boo;3.66;0.91;86;12.70;;9.38;8.68;8.40;23.88;S0-a;;;;;;;;2MASX J14352967+4844293,IRAS 14337+4857,MCG +08-27-004,PGC 052154,UGC 09399;;; +NGC5690;G;14:37:41.07;+02:17:27.0;Vir;3.20;0.99;145;13.10;;9.96;9.33;8.97;22.79;Sc;;;;;;;;2MASX J14374107+0217274,IRAS 14351+0230,MCG +00-37-019,PGC 052273,SDSS J143741.07+021726.9,UGC 09416;;; +NGC5691;G;14:37:53.34;-00:23:56.0;Vir;1.86;1.40;101;12.90;;10.84;10.14;9.97;22.84;Sa;;;;;;;;2MASX J14375333-0023559,IRAS 14353-0011,MCG +00-37-020,PGC 052291,SDSS J143752.54-002355.1,SDSS J143753.33-002355.9,SDSS J143753.52-002355.7,UGC 09420;;; +NGC5692;G;14:38:18.11;+03:24:37.2;Vir;0.95;0.60;36;13.30;;11.42;10.79;10.54;21.68;Sbc;;;;;;;;2MASX J14381814+0324368,IRAS 14357+0337,MCG +01-37-039,PGC 052317,SDSS J143818.11+032437.1,SDSS J143818.11+032437.2,UGC 09427;;; +NGC5693;G;14:36:11.19;+48:35:06.1;Boo;1.57;1.07;50;14.50;;11.84;11.26;11.08;23.59;Scd;;;;;;;;2MASX J14361115+4835043,MCG +08-27-006,PGC 052194,SDSS J143611.18+483506.1,SDSS J143611.19+483506.1,SDSS J143611.19+483506.2,UGC 09406;;; +NGC5694;GCl;14:39:36.51;-26:32:18.0;Hya;3.30;;;11.58;10.89;;;;;;;;;;;;;C 066,MWSC 2238;;; +NGC5695;G;14:37:22.12;+36:34:04.1;Boo;0.99;0.49;139;14.55;13.60;10.63;9.98;9.67;22.01;SBab;;;;;;;;2MASX J14372214+3634040,IRAS 14353+3647,MCG +06-32-077,PGC 052261,SDSS J143722.14+363404.2,SDSS J143722.14+363404.3,UGC 09421;;; +NGC5696;G;14:36:57.08;+41:49:41.2;Boo;1.21;0.84;42;14.10;;11.20;10.64;10.31;22.84;SBbc;;;;;;;;2MASX J14365708+4149409,IRAS 14350+4202,MCG +07-30-036,PGC 052235,SDSS J143657.08+414941.2,UGC 09415;;; +NGC5697;G;14:36:32.06;+41:41:09.2;Boo;1.00;0.64;26;14.60;;11.99;11.30;11.05;23.05;Sc;;;;;;4471;;2MASX J14363198+4141084,IRAS 14345+4154,MCG +07-30-031,PGC 052207,SDSS J143632.06+414109.1,SDSS J143632.06+414109.2,TYC 3039-465-1,UGC 09407;;; +NGC5698;G;14:37:14.70;+38:27:15.4;Boo;1.73;0.74;61;14.00;;11.24;10.58;10.29;23.26;Sb;;;;;;;;2MASX J14371464+3827150,IRAS 14352+3840,MCG +07-30-038,PGC 052251,SDSS J143714.69+382715.2,SDSS J143714.69+382715.3,SDSS J143714.69+382715.4,UGC 09419;;; +NGC5699;G;14:38:42.36;+30:27:57.3;Boo;0.61;0.56;40;15.70;;12.14;11.70;11.28;23.45;E;;;;;5706;;;2MASX J14384237+3027577,MCG +05-35-002,PGC 052334,SDSS J143842.35+302757.2,SDSS J143842.36+302757.3;;; +NGC5700;G;14:37:01.56;+48:32:41.4;Boo;0.99;0.55;37;15.20;;12.66;12.02;11.92;23.42;SBb;;;;;;;;2MASX J14370164+4832422,MCG +08-27-007,PGC 052237,SDSS J143701.54+483241.4,SDSS J143701.56+483241.3,SDSS J143701.56+483241.4,UGC 09423;;; +NGC5701;G;14:39:11.08;+05:21:48.5;Vir;2.00;1.60;4;11.76;10.88;9.06;8.36;8.14;22.28;S0-a;;;;;;;;2MASX J14391104+0521489,MCG +01-37-042,PGC 052365,SDSS J143911.07+052148.5,UGC 09436;;; +NGC5702;G;14:38:55.08;+20:30:24.2;Boo;1.19;0.91;137;14.50;;11.05;10.34;10.07;23.39;S0;;;;;;;;2MASX J14385510+2030240,MCG +04-35-002,PGC 052347,SDSS J143855.08+203024.1,UGC 09434;;; +NGC5703;G;14:38:50.02;+30:26:33.1;Boo;1.51;0.44;103;14.50;;11.41;10.74;10.51;23.47;Sa;;;;;5709;;;2MASX J14384995+3026338,IRAS 14366+3039,MCG +05-35-003,PGC 052343,SDSS J143850.01+302633.0,SDSS J143850.01+302633.1,UGC 09435;;; +NGC5704;G;14:38:16.28;+40:27:24.3;Boo;1.56;0.57;177;13.90;;11.64;11.00;10.74;22.65;Scd;;;;;5708;;;2MASX J14381625+4027243,IRAS 14363+4040,MCG +07-30-044,PGC 052315,SDSS J143816.28+402724.2,SDSS J143816.28+402724.3,UGC 09430;;Identification as NGC 5704 is not certain.; +NGC5705;G;14:39:49.69;-00:43:06.5;Vir;1.35;0.60;77;13.30;;12.28;11.65;11.31;22.92;SBcd;;;;;;;;2MASX J14394969-0043061,IRAS 14371-0029,MCG +00-37-021,PGC 052395,SDSS J143949.46-004309.5,SDSS J143949.68-004306.4,UGC 09447;;Confused HIPASS source; +NGC5706;Dup;14:38:42.36;+30:27:57.3;Boo;;;;;;;;;;;;;;;5699;;;;;; +NGC5707;G;14:37:30.77;+51:33:42.7;Boo;2.38;0.60;33;13.30;;10.36;9.67;9.44;23.18;Sab;;;;;;;;MCG +09-24-023,PGC 052266,SDSS J143730.76+513342.6,SDSS J143730.77+513342.7,UGC 09428;;; +NGC5708;Dup;14:38:16.28;+40:27:24.3;Boo;;;;;;;;;;;;;;;5704;;;;;; +NGC5709;Dup;14:38:50.02;+30:26:33.1;Boo;;;;;;;;;;;;;;;5703;;;;;; +NGC5710;G;14:39:16.19;+20:02:37.3;Boo;1.42;1.03;174;14.50;;11.01;10.31;10.02;23.64;E;;;;;;;;2MASX J14391621+2002376,MCG +03-37-032,PGC 052369,SDSS J143916.18+200237.3,UGC 09440;;; +NGC5711;G;14:39:22.56;+19:59:27.2;Boo;1.03;0.46;71;15.10;;12.01;11.28;10.93;23.59;SBa;;;;;;;;2MASX J14392238+1959266,IRAS 14370+2012,MCG +03-37-033,PGC 052376,SDSS J143922.55+195927.1,UGC 09445;;; +NGC5712;G;14:29:41.72;+78:51:51.3;UMi;0.72;0.68;110;15.30;;11.86;11.37;11.10;23.47;E;;;;;;;;2MASX J14294194+7851515,MCG +13-10-021,PGC 051799;;; +NGC5713;G;14:40:11.51;-00:17:20.3;Vir;2.47;1.70;11;11.84;11.20;9.22;8.61;8.33;22.03;SABb;;;;;;;;2MASX J14401152-0017211,IRAS 14376-0004,MCG +00-37-022,PGC 052412,SDSS J144010.75-001738.3,SDSS J144011.50-001720.3,UGC 09451;;; +NGC5714;G;14:38:11.52;+46:38:17.7;Boo;2.84;0.50;82;14.20;;11.00;10.23;9.97;23.77;SBc;;;;;;;;2MASX J14381154+4638180,IRAS 14363+4651,MCG +08-27-011,PGC 052307,SDSS J143811.51+463817.6,SDSS J143811.52+463817.7,UGC 09431;;; +NGC5715;OCl;14:43:29.69;-57:34:37.3;Cir;3.60;;;;9.80;;;;;;;;;;;;;MWSC 2245;;; +NGC5716;G;14:41:05.52;-17:28:37.1;Lib;1.57;1.19;89;13.00;;10.98;10.39;9.95;23.19;SBc;;;;;;;;2MASX J14410551-1728369,IRAS 14383-1715,MCG -03-37-004,PGC 052458;;; +NGC5717;G;14:38:37.69;+46:39:47.3;Boo;1.02;0.63;33;14.30;;11.46;10.73;10.48;23.87;S0-a;;;;;;;;2MASX J14383767+4639472,MCG +08-27-012,PGC 052332,SDSS J143837.69+463947.2;;; +NGC5718;G;14:40:42.84;+03:27:55.5;Vir;1.54;1.09;96;14.60;;10.55;9.86;9.51;23.65;E-S0;;;;;;;;2MASX J14404287+0327555,MCG +01-37-047,PGC 052441,SDSS J144042.83+032755.2,SDSS J144042.83+032755.5,SDSS J144042.83+032756.0,UGC 09459;;; +NGC5719;G;14:40:56.36;-00:19:05.6;Vir;3.08;1.29;99;13.10;;9.30;8.54;8.23;23.97;SABa;;;;;;;;2MASX J14405639-0019054,IRAS 14383-0006,MCG +00-37-024,PGC 052455,SDSS J144056.35-001905.5,SDSS J144056.36-001905.4,SDSS J144056.36-001905.5,SDSS J144056.36-001905.6,UGC 09462;;One APM position is on the eastern end of the bulge.; +NGC5720;G;14:38:33.29;+50:48:54.8;Boo;1.90;1.23;132;14.70;;11.25;10.51;10.27;24.27;SBb;;;;;;;;2MASX J14383328+5048552,MCG +09-24-025,PGC 052328,SDSS J143833.29+504854.7,UGC 09439;;; +NGC5721;G;14:38:52.96;+46:40:28.0;Boo;0.35;0.28;147;15.30;;13.26;12.79;12.36;22.25;E;;;;;;;;2MASX J14385293+4640282,MCG +08-27-013,PGC 052346,SDSS J143852.96+464027.9,SDSS J143852.96+464028.0;;; +NGC5722;G;14:38:54.41;+46:39:56.2;Boo;0.72;0.63;114;15.00;;12.04;11.24;11.01;23.51;E-S0;;;;;;;;2MASX J14385438+4639562,MCG +08-27-014,PGC 052355,SDSS J143854.40+463956.1,SDSS J143854.40+463956.2,SDSS J143854.41+463956.2;;; +NGC5723;G;14:38:57.92;+46:41:22.6;Boo;0.64;0.23;180;17.00;;13.26;12.51;12.25;24.43;E;;;;;;;;2MASX J14385789+4641221,MCG +08-27-015,PGC 052354,SDSS J143857.92+464122.5,SDSS J143857.92+464122.6;;; +NGC5724;*;14:39:02.13;+46:41:31.3;Boo;;;;18.00;;;;;;;;;;;;;;;;Most references to NGC 5724 are for NGC 5424, a member of the group MKW 12.; +NGC5725;G;14:40:58.32;+02:11:11.6;Vir;0.95;0.57;31;14.50;;12.55;11.89;11.58;22.73;SBcd;;;;;;;;2MASX J14405838+0211125,IRAS 14384+0224,MCG +00-37-025,PGC 052456,SDSS J144058.25+021112.1,SDSS J144058.31+021110.5,SDSS J144058.31+021111.5,UGC 09466;;; +NGC5726;G;14:42:56.05;-18:26:41.6;Lib;1.20;0.93;151;13.87;;10.62;9.99;9.72;23.11;E-S0;;;;;;;;2MASX J14425605-1826414,ESO 580-012,ESO-LV 580-0120,MCG -03-37-006,PGC 052563;;; +NGC5727;G;14:40:26.12;+33:59:20.8;Boo;0.78;0.31;141;14.20;;;;;22.09;SABd;;;;;;;;MCG +06-32-083,PGC 052424,SDSS J144026.11+335920.8,SDSS J144026.12+335920.8,UGC 09465;;; +NGC5728;G;14:42:23.90;-17:15:11.1;Lib;3.20;1.87;15;14.34;13.40;9.18;8.48;8.17;23.22;Sa;;;;;;;;2MASX J14422392-1715114,IRAS 14396-1702,MCG -03-37-005,PGC 052521;;; +NGC5729;G;14:42:06.88;-09:00:34.0;Lib;2.47;0.62;175;12.80;;10.39;9.89;9.49;22.74;Sb;;;;;;;;2MASX J14420688-0900339,IRAS 14394-0847,MCG -01-37-012,PGC 052507;;; +NGC5730;G;14:39:52.16;+42:44:32.5;Boo;2.01;0.38;89;14.70;;11.94;11.20;11.00;23.23;Sm;;;;;;;;2MASX J14395218+4244324,IRAS 14379+4257,MCG +07-30-046,PGC 052396,SDSS J143952.16+424432.4,SDSS J143952.16+424432.5,UGC 09456;;; +NGC5731;G;14:40:09.21;+42:46:46.4;Boo;1.50;0.37;115;14.00;;12.40;11.93;11.55;22.64;Sc;;;;;;1045;;2MASX J14400926+4246463,IRAS 14382+4259,MCG +07-30-047,PGC 052409,SDSS J144009.21+424646.3,SDSS J144009.21+424646.4,UGC 09460;;The IC identification is uncertain.; +NGC5732;G;14:40:38.95;+38:38:16.1;Boo;1.23;0.65;42;14.40;;11.93;11.34;11.10;23.03;Sbc;;;;;;;;2MASX J14403899+3838157,IRAS 14386+3851,MCG +07-30-048,PGC 052438,SDSS J144038.95+383816.1,UGC 09467;;; +NGC5733;G;14:42:45.93;-00:21:03.9;Vir;0.99;0.34;29;14.60;;12.85;12.16;11.64;22.58;Sc;;;;;;;;2MASX J14424590-0021049,MCG +00-38-001,PGC 052550,SDSS J144245.90-002104.1,SDSS J144245.90-002104.2,SDSS J144245.91-002103.8,SDSS J144245.91-002103.9,SDSS J144245.93-002103.9;;; +NGC5734;G;14:45:09.05;-20:52:13.7;Lib;1.40;0.92;45;13.75;;10.24;9.49;9.14;23.22;S0;;;;;5734N;;;2MASX J14450905-2052138,ESO 580-016,ESO-LV 580-0160,IRAS 14423-2039,MCG -03-38-003,PGC 052678;;; +NGC5735;G;14:42:33.24;+28:43:35.2;Boo;2.00;1.47;51;14.06;13.36;11.29;10.61;10.25;23.83;Sbc;;;;;;;;2MASX J14423324+2843347,IRAS 14403+2856,MCG +05-35-007,PGC 052535,SDSS J144233.24+284335.2,UGC 09481;;; +NGC5736;G;14:43:30.81;+11:12:09.7;Boo;0.96;0.62;97;14.90;;11.78;11.20;10.85;23.44;S0-a;;;;;;;;2MASX J14433082+1112099,MCG +02-38-001,PGC 052597,SDSS J144330.80+111209.6,SDSS J144330.80+111209.7;;; +NGC5737;G;14:43:11.82;+18:52:47.8;Boo;1.14;0.78;177;14.60;;11.66;10.97;10.65;23.39;Sb;;;;;;;;2MASX J14431179+1852479,MCG +03-37-039,PGC 052582,SDSS J144311.82+185247.8,UGC 09488;;; +NGC5738;G;14:43:56.37;+01:36:15.0;Vir;0.94;0.48;71;14.70;;11.71;11.05;10.80;23.30;S0;;;;;;;;2MASX J14435637+0136145,MCG +00-38-002,PGC 052614,SDSS J144356.37+013615.0,SDSS J144356.38+013615.0;;; +NGC5739;G;14:42:28.91;+41:50:32.4;Boo;1.75;1.26;44;13.70;;10.00;9.28;8.99;23.18;S0-a;;;;;;;;2MASX J14422885+4150321,MCG +07-30-052,PGC 052531,SDSS J144228.91+415032.4,UGC 09486;;; +NGC5740;G;14:44:24.45;+01:40:47.2;Vir;2.70;1.34;165;12.50;;9.82;9.07;8.88;23.00;Sb;;;;;;;;2MASX J14442442+0140468,IRAS 14418+0153,MCG +00-38-003,PGC 052641,SDSS J144424.44+014047.1,SDSS J144424.45+014047.2,SDSS J144424.50+014048.0,UGC 09493;;The APM position is northwest of the nucleus.; +NGC5741;G;14:45:51.72;-11:54:51.4;Lib;1.05;0.99;145;15.00;;10.89;10.22;9.93;23.61;E;;;;;;;;2MASX J14455173-1154507,MCG -02-38-008,PGC 052718;;; +NGC5742;G;14:45:36.88;-11:48:34.7;Lib;1.17;0.87;72;14.00;;10.38;9.65;9.35;23.05;S0;;;;;;;;2MASX J14453688-1148347,IRAS 14428-1135,MCG -02-38-007,PGC 052707;;; +NGC5743;G;14:45:10.99;-20:54:48.6;Lib;1.29;0.47;92;13.85;;10.88;10.15;9.81;22.50;Sb;;;;;5734S;;;2MASX J14451098-2054488,ESO 580-017,ESO-LV 580-0170,MCG -03-38-004,PGC 052680;;; +NGC5744;G;14:46:38.65;-18:30:47.8;Lib;1.05;0.69;97;14.21;;12.27;11.60;11.51;22.96;Sa;;;;;;;;2MASX J14463867-1830477,ESO 580-023,ESO-LV 580-0230,IRAS 14438-1818,MCG -03-38-007,PGC 052761;;NGC identification is not certain.; +NGC5745;GTrpl;14:45:02.16;-13:56:46.4;Lib;1.62;0.81;79;14.00;;;;;22.79;Sa;;;;;;;;2MASXJ14450189-1356477,IRAS14423-1344,MCG -02-38-004,PGC 052669;;Part of the GGroup VV 098.; +NGC5746;G;14:44:55.92;+01:57:18.0;Vir;7.24;1.08;172;12.30;;7.95;7.17;6.88;23.19;Sb;;;;;;;;2MASX J14445600+0157170,IRAS 14424+0209,MCG +00-38-005,PGC 052665,SDSS J144455.91+015717.8,SDSS J144455.91+015718.0,UGC 09499;;; +NGC5747;GPair;14:44:20.80;+12:07:47.0;Boo;1.30;;;;;;;;;;;;;;;4493;;;;;Diameter of the group inferred by the author. +NGC5747 NED01;G;14:44:20.80;+12:07:42.0;Boo;0.43;0.20;161;;;11.47;10.78;10.44;;SBa;;;;;;;;PGC 093126,UGC 09496 NOTES01;;; +NGC5747 NED02;G;14:44:20.80;+12:07:55.2;Boo;1.00;0.78;174;14.40;;11.30;10.52;9.89;22.98;SBbc;;;;;;;;2MASX J14442079+1207551,IRAS 14419+1220,MCG +02-38-002,PGC 052638,SDSS J144420.79+120755.2,UGC 09496;;; +NGC5748;G;14:45:05.11;+21:54:58.4;Boo;0.96;0.63;150;15.40;;12.09;11.34;11.12;23.56;Sb;;;;;;;;2MASX J14450508+2154583,PGC 052672,SDSS J144505.10+215458.3;;; +NGC5749;OCl;14:48:53.94;-54:29:51.7;Lup;7.20;;;;8.80;;;;;;;;;;;;;MWSC 2256;;; +NGC5750;G;14:46:11.12;-00:13:22.6;Vir;2.65;1.37;70;16.23;15.58;9.39;8.64;8.44;23.20;S0-a;;;;;;;;2MASX J14461110-0013229,IRAS 14436-0000,MCG +00-38-006,PGC 052735,SDSS J144611.12-001322.5,SDSS J144611.12-001322.6,SDSS J144611.12-001322.8,SDSS J144611.13-001322.7,UGC 09512;;The APM position is 6 arcsec northwest of the nucleus.; +NGC5751;G;14:43:49.18;+53:24:02.4;Boo;1.30;0.68;53;13.90;;11.26;10.63;10.51;22.62;SBc;;;;;;;;2MASX J14434921+5324030,IRAS 14422+5336,MCG +09-24-033,PGC 052607,SDSS J144349.18+532402.3,SDSS J144349.18+532402.6,SDSS J144349.19+532402.4,UGC 09498;;; +NGC5752;G;14:45:14.16;+38:43:43.9;Boo;0.77;0.24;122;;;12.71;12.06;11.86;22.82;SABb;;;;;;;;2MASX J14451411+3843436,MCG +07-30-060,PGC 052685,SDSS J144514.15+384343.8,SDSS J144514.16+384343.8,SDSS J144514.16+384343.9,UGC 09505 NOTES01;;Component 'a)' in UGC notes.; +NGC5753;G;14:45:18.88;+38:48:21.2;Boo;0.54;0.43;156;;;13.41;12.67;12.22;23.26;Sab;;;;;;;;2MASX J14451887+3848206,MCG +07-30-062,PGC 052695,SDSS J144518.87+384821.2,SDSS J144518.88+384821.2,UGC 09507 NOTES01;;; +NGC5754;G;14:45:19.65;+38:43:52.4;Boo;1.28;1.10;96;14.10;;10.95;10.26;10.03;23.12;SBb;;;;;;;;2MASX J14451966+3843526,IRAS 14432+3856,MCG +07-30-061,PGC 052686,SDSS J144519.64+384352.3,UGC 09505;;; +NGC5755;G;14:45:24.52;+38:46:47.6;Boo;0.46;0.31;103;15.10;;12.60;11.93;11.43;21.96;SBcd;;;;;;;;2MASX J14452452+3846477,IRAS 14434+3859,MCG +07-30-063,PGC 052690,SDSS J144524.58+384646.9,UGC 09507;;; +NGC5756;G;14:47:33.73;-14:51:12.9;Lib;2.95;1.13;52;13.00;;10.12;9.45;9.17;23.40;Sbc;;;;;;;;2MASX J14473370-1451128,IRAS 14448-1438,MCG -02-38-012,PGC 052825;;HOLM 676B does not exist (it is probably a plate defect).; +NGC5757;G;14:47:46.38;-19:04:42.8;Lib;2.09;1.39;178;12.77;13.73;9.86;9.19;8.89;23.32;Sb;;;;;;;;2MASX J14474636-1904427,ESO 580-033,ESO-LV 580-0330,IRAS 14449-1852,MCG -03-38-014,PGC 052839;;; +NGC5758;G;14:47:02.08;+13:40:06.2;Boo;1.11;0.81;84;15.00;;11.56;10.92;10.58;23.61;E-S0;;;;;;;;2MASX J14470210+1340056,MCG +02-38-011,PGC 052787,SDSS J144702.07+134006.1,SDSS J144702.08+134006.2,UGC 09524;;; +NGC5759;GPair;14:47:14.61;+13:27:28.6;Boo;1.10;0.51;138;14.90;;11.42;10.71;10.32;23.21;Scd;;;;;;;;IRAS 14448+1339,MCG +02-38-012,PGC 052797,UGC 09525;;; +NGC5760;G;14:47:42.26;+18:30:07.3;Boo;1.57;0.65;95;14.30;;11.20;10.48;10.30;23.46;Sa;;;;;;;;2MASX J14474224+1830074,MCG +03-38-015,PGC 052833,SDSS J144742.26+183007.2,UGC 09531;;; +NGC5761;G;14:49:08.48;-20:22:33.7;Lib;1.79;1.41;85;13.62;;10.25;9.50;9.28;23.45;S0;;;;;;;;2MASX J14490848-2022336,ESO 580-039,ESO-LV 580-0390,MCG -03-38-018,PGC 052916;;NGC identification is not certain.; +NGC5762;G;14:48:42.57;+12:27:26.0;Boo;1.34;0.97;141;14.30;;11.71;11.08;10.89;23.46;Sab;;;;;;;;2MASX J14484256+1227254,MCG +02-38-014,PGC 052887,SDSS J144842.57+122725.9,SDSS J144842.57+122726.0,UGC 09535;;; +NGC5763;G;14:48:58.72;+12:29:24.5;Boo;0.64;0.55;90;15.30;;12.19;11.46;10.99;;E;;;;;;;;PGC 052905,SDSS J144858.72+122924.4,SDSS J144858.72+122924.5;;;Diameters and position angle taken from Simbad. +NGC5764;OCl;14:53:32.24;-52:40:13.9;Lup;4.20;;;;12.60;;;;;;;;;;;;;MWSC 2259;;; +NGC5765A;G;14:50:50.70;+05:07:10.0;Vir;0.80;0.35;96;14.60;;;;;22.12;Sc;;;;;;;;MCG +01-38-004,PGC 053011,UGC 09554 NED01;;Component 'a)' in UGC notes.; +NGC5765B;G;14:50:51.51;+05:06:52.1;Vir;0.81;0.56;144;14.60;;11.68;10.52;10.46;22.52;SABb;;;;;;;;2MASX J14505151+0506522,MCG +01-38-005,PGC 053012,SDSS J145051.51+050652.1,UGC 09554 NED02;;Component 'b)' in UGC notes.; +NGC5766;G;14:53:09.56;-21:23:38.8;Lib;0.96;0.63;145;14.20;;11.28;10.54;10.31;22.53;Sbc;;;;;;;;2MASX J14530955-2123389,ESO 580-050,ESO-LV 580-0500,IRAS 14503-2111,MCG -03-38-024,PGC 053186;;; +NGC5767;G;14:49:34.43;+47:22:34.2;Boo;0.95;0.68;160;15.10;;11.33;10.63;10.37;23.17;Sab;;;;;;;;2MASX J14493438+4722342,PGC 052942,SDSS J144934.42+472234.2,SDSS J144934.43+472234.1,SDSS J144934.43+472234.2,UGC 09549;;HOLM 681B is a star.; +NGC5768;G;14:52:07.95;-02:31:47.1;Lib;1.28;0.97;111;14.20;;10.75;10.07;9.73;22.63;SABc;;;;;;;;2MASX J14520794-0231469,IRAS 14495-0219,MCG +00-38-009,PGC 053089,SDSS J145207.95-023147.0,SDSS J145207.96-023147.1,UGC 09564;;; +NGC5769;G;14:52:41.53;+07:55:54.5;Boo;0.98;0.79;102;14.90;;11.57;10.92;10.73;23.76;E;;;;;;;;2MASX J14524154+0755545,MCG +01-38-008,PGC 053145;;; +NGC5770;G;14:53:15.02;+03:57:35.0;Vir;1.10;0.90;105;13.15;12.26;10.14;9.46;9.19;22.14;S0;;;;;;;;2MASX J14531503+0357349,MCG +01-38-011,PGC 053201,SDSS J145315.01+035735.0,UGC 09575;;; +NGC5771;G;14:52:14.33;+29:50:43.5;Boo;0.86;0.75;168;14.60;;11.75;11.09;10.79;23.31;E;;;;;;;;2MASX J14521434+2950437,MCG +05-35-021,PGC 053088,SDSS J145214.32+295043.5;;; +NGC5772;G;14:51:38.88;+40:35:57.0;Boo;1.38;0.52;32;13.90;;10.49;9.72;9.52;22.60;Sb;;;;;;;;2MASX J14513884+4035572,IRAS 14497+4048,MCG +07-31-001,PGC 053067,SDSS J145138.88+403556.9,SDSS J145138.88+403557.0,SDSS J145138.89+403556.9,SDSS J145138.89+403557.1,UGC 09566;;; +NGC5773;G;14:52:30.42;+29:48:26.6;Boo;0.89;0.89;30;14.50;;11.33;10.52;10.32;23.09;Sa;;;;;;;;2MASX J14523041+2948259,MCG +05-35-022,PGC 053124,SDSS J145230.42+294826.6,UGC 09571;;; +NGC5774;G;14:53:42.46;+03:34:57.0;Vir;1.70;1.06;123;13.90;12.94;11.20;10.69;10.56;22.58;Scd;;;;;;;;2MASX J14534275+0334560,IRAS 14511+0347,MCG +01-38-013,PGC 053231,SDSS J145342.46+033456.9,SDSS J145342.46+033457.0,SDSS J145342.47+033457.0,UGC 09576;;The Kiso position is for a superposed star or knot.; +NGC5775;G;14:53:57.60;+03:32:40.0;Vir;3.70;0.85;148;13.00;11.34;8.94;8.12;7.76;22.62;SBc;;;;;;;;2MASX J14535765+0332401,IRAS 14514+0344,MCG +01-38-014,PGC 053247,SDSS J145357.59+033240.0,SDSS J145357.61+033240.0,SDSS J145357.62+033240.1,UGC 09579;;Multiple SDSS entries describe this object.; +NGC5776;G;14:54:32.75;+02:57:59.2;Vir;1.21;0.80;121;14.70;;11.03;10.39;10.05;23.82;E;;;;;;;;2MASX J14543275+0257596,MCG +01-38-018,PGC 053289,SDSS J145432.74+025759.1,SDSS J145432.75+025759.2;;; +NGC5777;G;14:51:17.85;+58:58:40.6;Dra;2.96;0.42;145;14.20;;10.44;9.65;9.31;23.96;Sb;;;;;;;;2MASX J14511779+5858401,IRAS 14499+5910,MCG +10-21-034,PGC 053043,SDSS J145117.84+585840.6,SDSS J145117.84+585840.9,SDSS J145117.91+585841.6,SDSS J145117.91+585841.7,UGC 09568;;; +NGC5778;G;14:54:31.49;+18:38:32.3;Boo;1.23;0.79;11;15.60;;11.76;11.04;10.77;24.39;E;;;;;5825;;;2MASX J14543146+1838325,MCG +03-38-050,PGC 053279,SDSS J145431.49+183832.3,UGC 09590;;; +NGC5779;G;14:52:09.56;+55:53:58.0;Dra;0.73;0.69;50;15.70;;12.19;11.47;11.22;23.60;S0;;;;;;;;2MASX J14520952+5553581,MCG +09-24-048,PGC 053090,SDSS J145209.55+555357.9,SDSS J145209.56+555358.0,SDSS J145209.57+555358.1;;; +NGC5780;G;14:54:22.67;+28:56:22.8;Boo;0.69;0.45;124;14.82;13.96;11.67;10.95;10.65;22.73;Sab;;;;;;;;2MASX J14542268+2856226,MCG +05-35-024,PGC 053275,SDSS J145422.66+285622.8;;; +NGC5781;G;14:56:41.22;-17:14:38.2;Lib;1.29;0.70;20;14.00;;10.97;10.31;9.98;22.68;SBb;;;;;;;;2MASX J14564121-1714382,IRAS 14539-1702,MCG -03-38-028,PGC 053417;;; +NGC5782;G;14:55:55.27;+11:51:41.5;Boo;0.95;0.84;153;14.90;;11.07;10.47;10.07;23.41;S0;;;;;;;;2MASX J14555524+1151407,MCG +02-38-022,PGC 053379,SDSS J145555.26+115141.5,SDSS J145555.27+115141.4,SDSS J145555.27+115141.5,UGC 09602;;; +NGC5783;G;14:53:28.31;+52:04:34.0;Boo;2.45;1.49;176;14.00;;;;;24.11;Sc;;;;;5785;;;IRAS 14519+5216,MCG +09-24-050,PGC 053217,UGC 09586;;; +NGC5784;G;14:54:16.45;+42:33:28.5;Boo;1.48;1.36;65;13.70;;10.26;9.56;9.28;23.30;S0;;;;;;;;2MASX J14541645+4233279,IRAS 14524+4245,MCG +07-31-006,PGC 053265,SDSS J145416.45+423328.4,UGC 09592;;; +NGC5785;Dup;14:53:28.31;+52:04:34.0;Boo;;;;;;;;;;;;;;;5783;;;;;; +NGC5786;G;14:58:56.26;-42:00:48.1;Cen;2.40;1.32;79;12.00;;9.65;8.88;8.56;;Sbc;;;;;;;;2MASX J14585625-4200482,ESO 327-037,IRAS 14556-4148,MCG -07-31-004,PGC 053527;;; +NGC5787;G;14:55:15.58;+42:30:24.7;Boo;1.15;1.04;85;14.10;;10.91;10.25;9.96;23.03;S0-a;;;;;;;;2MASX J14551561+4230246,MCG +07-31-008,PGC 053339,SDSS J145515.57+423024.7,UGC 09599;;; +NGC5788;G;14:53:16.99;+52:02:39.3;Boo;0.73;0.59;33;15.60;;12.53;12.00;11.59;23.52;SBab;;;;;;;;2MASX J14531693+5202391,MCG +09-24-049,PGC 053189,SDSS J145316.98+520239.3,SDSS J145316.99+520239.2,SDSS J145316.99+520239.3,SDSS J145316.99+520239.5;;; +NGC5789;G;14:56:35.52;+30:14:02.5;Boo;1.15;1.03;92;13.90;;;;;22.97;SBd;;;;;;;;IRAS 14545+3025,MCG +05-35-026,PGC 053414,SDSS J145635.29+301404.3,UGC 09615;;; +NGC5790;G;14:57:35.81;+08:17:07.0;Boo;1.18;0.78;73;15.10;;11.46;10.73;10.56;23.83;S0-a;;;;;;;;2MASX J14573582+0817068,MCG +01-38-022,PGC 053459,SDSS J145735.81+081706.9,SDSS J145735.81+081707.0,UGC 09624;;; +NGC5791;G;14:58:46.22;-19:16:00.7;Lib;2.71;1.43;172;12.89;;9.39;8.69;8.43;23.69;E;;;;;;;;2MASX J14584622-1916006,ESO 581-007,ESO-LV 581-0070,MCG -03-38-035,PGC 053516;;; +NGC5792;G;14:58:22.71;-01:05:27.9;Lib;3.55;1.38;88;11.80;;8.59;7.95;7.71;22.95;Sb;;;;;;;;2MASX J14582270-0105278,IRAS 14557-0053,MCG +00-38-012,PGC 053499,UGC 09631;;Extended HIPASS source; +NGC5793;G;14:59:24.76;-16:41:36.1;Lib;1.94;0.65;148;14.47;13.32;10.52;9.71;9.37;23.68;Sb;;;;;;;;2MASX J14592480-1641365,IRAS 14566-1629,MCG -03-38-038,PGC 053550;;; +NGC5794;G;14:55:53.63;+49:43:33.9;Boo;1.07;0.91;143;14.50;;11.13;10.41;10.25;23.16;S0-a;;;;;;;;2MASX J14555357+4943341,MCG +08-27-032,PGC 053378,SDSS J145553.63+494333.9,UGC 09610;;; +NGC5795;G;14:56:19.88;+49:24:00.2;Boo;0.78;0.33;63;15.01;;11.06;10.28;9.90;22.18;Sc;;;;;;;;2MASX J14561988+4924007,IRAS 14546+4935,MCG +08-27-035,PGC 053402,UGC 09617;;; +NGC5796;G;14:59:24.11;-16:37:25.9;Lib;2.65;2.18;90;13.00;;9.13;8.38;8.15;23.71;E;;;;;;;;2MASX J14592411-1637265,MCG -03-38-039,PGC 053549;;Confused HIPASS source; +NGC5797;G;14:56:24.05;+49:41:46.2;Boo;1.58;1.01;108;13.60;;10.53;9.86;9.62;23.29;S0-a;;;;;;;;2MASX J14562406+4941457,MCG +08-27-036,PGC 053408,SDSS J145624.05+494146.2,UGC 09619;;; +NGC5798;G;14:57:37.97;+29:58:06.6;Boo;1.24;0.83;46;13.50;;11.88;11.29;10.95;22.28;I;;;;;;;;2MASX J14573796+2958065,IRAS 14555+3009,MCG +05-35-028,PGC 053463,SDSS J145737.96+295808.1,UGC 09628;;Multiple SDSS entries describe this object.; +NGC5799;G;15:05:35.21;-72:25:58.2;Aps;1.20;1.09;135;13.50;;10.13;9.46;9.19;23.10;S0-a;;;;;;;;2MASX J15053518-7225583,ESO 067-006,PGC 053875;;; +NGC5800;OCl;15:01:47.87;-51:55:06.9;Lup;4.50;;;;;;;;;;;;;;;;;MWSC 2265;;; +NGC5801;G;15:00:25.94;-13:54:15.5;Lib;0.71;0.53;40;15.10;;12.42;11.77;11.34;23.32;Sb;;;;;;;;2MASX J15002593-1354155,PGC 053596;;; +NGC5802;G;15:00:30.00;-13:55:08.5;Lib;1.29;0.81;101;14.53;;11.32;10.60;10.26;24.39;S0;;;;;;;;2MASX J15002998-1355075,PGC 053601;;; +NGC5803;G;15:00:34.54;-13:53:40.3;Lib;0.67;0.50;111;15.40;;12.36;11.48;11.19;23.65;E-S0;;;;;;;;2MASX J15003451-1353395,PGC 053609;;; +NGC5804;G;14:57:06.80;+49:40:08.5;Boo;1.17;1.05;5;16.52;15.94;11.20;10.56;10.25;22.93;SBb;;;;;;;;2MASX J14570678+4940086,IRAS 14554+4952,MCG +08-27-038,PGC 053437,SDSS J145706.79+494008.4,SDSS J145706.80+494008.4,SDSS J145706.80+494008.5,UGC 09627;;; +NGC5805;GPair;14:57:11.90;+49:37:40.0;Boo;0.70;;;;;;;;;;;;;;;;;MCG +08-27-039;;Not noted as a pair in MCG.;Diameter of the group inferred by the author. +NGC5805 NED01;G;14:57:11.62;+49:37:44.4;Boo;0.66;0.41;148;15.00;;12.53;11.85;11.45;23.85;E;;;;;;;;2MASX J14571162+4937446,MCG +08-27-039 NED01,PGC 053435,SDSS J145711.61+493744.4;;; +NGC5805 NED02;G;14:57:12.13;+49:37:36.8;Boo;0.38;0.38;166;17.51;;;;;24.36;E;;;;;;;;2MASSJ14571214+4937366,MCG +08-27-039 NED02,SDSSJ145712.17+493736.7;;;B-Mag taken from LEDA +NGC5806;G;15:00:00.40;+01:53:28.7;Vir;3.03;1.63;172;12.40;11.70;9.42;8.76;8.45;23.05;Sb;;;;;;;;2MASX J15000043+0153285,IRAS 14574+0205,MCG +00-38-014,PGC 053578,SDSS J150000.26+015329.0,SDSS J150000.39+015328.7,SDSS J150000.40+015328.7,SDSS J150000.40+015328.8,UGC 09645;;; +NGC5807;G;14:55:48.67;+63:54:12.5;Dra;0.78;0.65;83;15.00;;11.65;10.82;10.65;23.54;E;;;;;;;;2MASX J14554868+6354122,MCG +11-18-016,PGC 053373;;; +NGC5808;G;14:54:02.81;+73:07:54.1;UMi;0.95;0.78;88;14.30;;11.60;10.96;10.66;22.82;Sbc;;;;;5819;;;2MASX J14540285+7307539,IRAS 14540+7319,PGC 053251,UGC 09609;;; +NGC5809;G;15:00:52.33;-14:09:54.7;Lib;1.65;0.60;150;14.10;;11.28;10.56;10.31;23.94;S0-a;;;;;;;;2MASX J15005234-1409546,IRAS 14581-1358,MCG -02-38-025,PGC 053624;;; +NGC5810;G;15:02:42.73;-17:52:04.8;Lib;0.98;0.52;17;14.01;;11.67;11.09;10.98;22.38;SBb;;;;;;;;2MASX J15024274-1752049,ESO 581-018,ESO-LV 581-0180,IRAS 14598-1740,MCG -03-38-046,PGC 053711;;; +NGC5811;GPair;15:00:26.90;+01:37:26.0;Vir;1.02;0.91;96;14.80;;12.41;11.86;11.73;23.38;SBm;;;;;;;;2MASX J15002729+0137242,MCG +00-38-015,PGC 053597;;; +NGC5812;G;15:00:55.70;-07:27:26.5;Lib;2.66;2.29;73;12.00;;8.95;8.20;7.96;23.18;E;;;;;;;;2MASX J15005570-0727263,MCG -01-38-016,PGC 053630,UGCA 398;;; +NGC5813;G;15:01:11.23;+01:42:07.1;Vir;4.13;2.70;143;11.45;10.46;8.34;7.63;7.41;23.45;E;;;;;;;;2MASX J15011126+0142070,MCG +00-38-016,PGC 053643,SDSS J150111.23+014207.1,UGC 09655;;; +NGC5814;G;15:01:21.15;+01:38:13.5;Vir;0.82;0.56;40;14.70;;11.51;10.78;10.43;22.70;Sab;;;;;;;;2MASX J15012118+0138134,IRAS 14588+0149,MCG +00-38-017,PGC 053653,SDSS J150121.14+013813.4,SDSS J150121.15+013813.5;;; +NGC5815;G;15:00:29.29;-16:50:03.5;Lib;0.78;0.26;5;14.50;;11.96;11.34;11.06;22.59;Sb;;;;;;;;2MASX J15002929-1650035,IRAS 14576-1638,MCG -03-38-044,PGC 053600;;Confused HIPASS source; +NGC5816;G;15:00:04.86;-16:05:37.1;Lib;0.95;0.66;103;15.44;;11.60;10.84;10.65;24.06;S0-a;;;;;;;;2MASX J15000484-1605367,PGC 902544;;NGC identification is not certain.; +NGC5817;G;14:59:40.85;-16:10:49.3;Lib;1.04;0.85;15;15.00;;11.46;10.69;10.47;23.95;S0;;;;;;;;2MASX J14594086-1610495,MCG -03-38-041,PGC 053567;;NGC identification is not certain.; +NGC5818;G;14:58:58.39;+49:49:17.1;Boo;0.99;0.77;152;15.00;;11.12;10.38;10.08;23.49;S0;;;;;;;;2MASX J14585835+4949169,MCG +08-27-046,PGC 053530,SDSS J145858.39+494917.0,UGC 09643;;; +NGC5819;Dup;14:54:02.81;+73:07:54.1;UMi;;;;;;;;;;;;;;;5808;;;;;; +NGC5820;G;14:58:39.82;+53:53:09.9;Boo;1.66;1.13;94;13.00;;10.12;9.42;9.14;23.03;S0;;;;;;;;2MASX J14583982+5353100,MCG +09-25-001,PGC 053511,SDSS J145839.78+535309.3,UGC 09642;;; +NGC5821;G;14:58:59.66;+53:55:23.8;Boo;1.49;0.79;146;14.90;;11.35;11.24;10.64;23.76;Sc;;;;;;;;2MASX J14585972+5355234,MCG +09-25-002,PGC 053532,SDSS J145859.65+535523.7,SDSS J145859.65+535523.8,SDSS J145859.65+535524.0,UGC 09648;;; +NGC5822;OCl;15:04:21.25;-54:23:47.1;Lup;18.00;;;;6.50;;;;;;;;;;;;;MWSC 2269;;; +NGC5823;OCl;15:05:30.63;-55:36:13.5;Cir;3.90;;;8.61;7.90;;;;;;;;;;;;;C 088,MWSC 2273;;; +NGC5824;GCl;15:03:58.64;-33:04:05.3;Lup;5.10;;;10.28;9.56;7.44;6.92;6.84;;;;;;;;;;2MASX J15035861-3304066,MWSC 2267;;; +NGC5825;Dup;14:54:31.49;+18:38:32.3;Boo;;;;;;;;;;;;;;;5778;;;;;; +NGC5826;G;15:06:33.84;+55:28:44.8;Dra;1.39;1.04;26;14.89;;;;;24.46;S0;;;;;5870;;;MCG +09-25-016,PGC 053949,SDSS J150633.82+552845.0,SDSS J150633.84+552844.7,SDSS J150633.84+552844.8,UGC 09725;;; +NGC5827;G;15:01:53.73;+25:57:52.3;Boo;1.04;0.75;131;13.70;;11.01;10.38;10.13;22.31;Sb;;;;;;;;2MASX J15015375+2557527,IRAS 14597+2609,MCG +04-35-024,PGC 053676,SDSS J150153.72+255752.3,UGC 09662;;; +NGC5828;G;15:00:46.11;+49:59:37.2;Boo;0.84;0.29;46;14.30;;11.72;11.07;10.81;22.11;SBc;;;;;;;;2MASX J15004607+4959379,MCG +08-27-051,PGC 053618,SDSS J150046.10+495937.1,SDSS J150046.11+495937.1,SDSS J150046.11+495937.2,UGC 09658;;; +NGC5829;G;15:02:42.01;+23:20:01.0;Boo;1.42;1.08;41;14.14;;11.95;11.59;11.26;23.24;Sc;;;;;;;;2MASX J15024196+2320009,MCG +04-35-027,PGC 053709,SDSS J150242.00+232001.0,SDSS J150242.01+232001.0,UGC 09673;;; +NGC5830;G;15:01:50.91;+47:52:31.4;Boo;0.90;0.48;172;15.20;;11.90;11.19;10.73;23.10;Sb;;;;;;;;2MASX J15015094+4752318,IRAS 15001+4804,MCG +08-27-056,PGC 053674,SDSS J150150.90+475231.4,SDSS J150150.91+475231.4,UGC 09670;;; +NGC5831;G;15:04:07.00;+01:13:11.7;Vir;2.24;1.98;130;13.10;;9.35;8.68;8.44;23.06;E;;;;;;;;2MASX J15040702+0113117,MCG +00-38-020,PGC 053770,SDSS J150406.99+011311.7,SDSS J150407.00+011311.7,UGC 09678;;; +NGC5832;G;14:57:45.71;+71:40:56.4;UMi;1.86;0.78;42;12.80;12.26;;;;23.03;Sb;;;;;;;;MCG +12-14-015,PGC 053469,UGC 09649;;; +NGC5833;G;15:11:53.65;-72:51:33.9;Aps;3.10;0.98;129;12.30;;9.52;8.76;8.43;23.19;SBbc;;;;;;;;2MASX J15115360-7251339,ESO 042-003,IRAS 15066-7240,PGC 054250;;Confused and extended HIPASS source; +NGC5834;Dup;15:03:58.64;-33:04:05.3;Lup;;;;;;;;;;;;;;;5824;;;;;; +NGC5835;G;15:02:25.37;+48:52:39.7;Boo;1.13;0.78;163;15.70;;11.99;11.40;11.25;24.12;SABa;;;;;;;;2MASX J15022536+4852393,MCG +08-27-057,PGC 053699,SDSS J150225.36+485239.6,SDSS J150225.37+485239.6,SDSS J150225.37+485239.7,UGC 09674;;; +NGC5836;G;14:59:30.99;+73:53:35.6;UMi;1.16;0.93;38;14.90;;11.51;10.80;10.43;23.67;Sb;;;;;;;;2MASX J14593099+7353358,MCG +12-14-016,PGC 053554,UGC 09664;;; +NGC5837;G;15:04:40.58;+12:38:00.4;Boo;1.00;0.62;23;14.50;;11.61;10.84;10.60;22.89;Sb;;;;;;;;2MASX J15044058+1238007,IRAS 15022+1249,MCG +02-38-036,PGC 053817,SDSS J150440.57+123800.4,SDSS J150440.58+123800.4,UGC 09686;;; +NGC5838;G;15:05:26.26;+02:05:57.6;Vir;3.86;1.29;40;12.10;;8.48;7.78;7.58;23.39;E-S0;;;;;;;;2MASX J15052627+0205576,IRAS 15029+0217,MCG +00-38-022,PGC 053862,UGC 09692;;; +NGC5839;G;15:05:27.49;+01:38:05.3;Vir;1.44;1.29;103;13.90;12.19;10.18;9.45;9.20;23.24;S0;;;;;;;;2MASX J15052747+0138046,MCG +00-38-023,PGC 053865,SDSS J150527.48+013805.3,UGC 09693;;; +NGC5840;Other;15:04:20.55;+29:30:21.7;Boo;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC5841;G;15:06:35.04;+02:00:17.3;Vir;1.19;0.49;150;14.80;;11.35;10.69;10.52;23.53;S0-a;;;;;5848;;;2MASX J15063505+0200172,MCG +00-39-001,PGC 053941,SDSS J150635.03+020017.3,SDSS J150635.04+020017.3;;; +NGC5842;G;15:04:51.99;+21:04:10.0;Boo;0.52;0.50;50;15.20;;12.84;12.22;11.85;22.60;Sbc;;;;;;;;2MASX J15045198+2104097,IRAS 15026+2115,MCG +04-36-003,PGC 053831,SDSS J150451.99+210410.0;;; +NGC5843;G;15:07:27.89;-36:19:38.7;Lup;1.96;1.24;68;13.12;;10.03;9.32;8.99;23.00;SBb;;;;;;;;2MASX J15072789-3619385,ESO 387-004,ESO-LV 387-0040,IRAS 15043-3608,MCG -06-33-013,PGC 053996;;; +NGC5844;PN;15:10:40.95;-64:40:25.2;TrA;0.88;;;13.20;;;;;;;;;;;;;;ESO 099-001,IRAS 15064-6429;;; +NGC5845;G;15:06:00.81;+01:38:01.7;Vir;1.00;0.71;152;13.80;11.20;10.08;9.36;9.11;22.30;E;;;;;;;;2MASX J15060078+0138017,MCG +00-38-024,PGC 053901,SDSS J150600.78+013801.6,UGC 09700;;; +NGC5846;G;15:06:29.28;+01:36:20.2;Vir;4.27;4.05;35;11.90;;7.88;7.20;6.94;23.12;E;;;;;;;;2MASX J15062925+0136202,MCG +00-38-025,PGC 053932,SDSS J150629.28+013620.2,UGC 09706;;Called 'NGC 5846a' in MCG.; +NGC5846A;G;15:06:29.20;+01:35:41.5;Vir;3.16;2.22;112;14.10;13.37;;;;24.08;E;;;;;;;;MCG +00-38-026,PGC 053930,SDSS J150629.19+013541.5,UGC 09706 NOTES01;;Called 'NGC 5846b' in MCG.; +NGC5847;G;15:06:22.27;+06:22:47.6;Vir;0.70;0.47;153;15.10;;12.59;11.96;11.74;22.94;Sb;;;;;;;;2MASX J15062227+0622476,MCG +01-38-030,PGC 053928,SDSS J150622.26+062247.5;;"Mistakenly called a ""double system"" in CGCG."; +NGC5848;Dup;15:06:35.04;+02:00:17.3;Vir;;;;;;;;;;;;;;;5841;;;;;; +NGC5849;G;15:06:50.69;-14:34:18.6;Lib;1.05;0.78;35;15.00;;11.49;10.75;10.28;24.29;S0;;;;;;;;2MASX J15065067-1434185,MCG -02-38-035,PGC 053962;;; +NGC5850;G;15:07:07.69;+01:32:39.3;Vir;3.35;2.37;119;11.50;;9.02;8.38;8.10;23.00;Sb;;;;;;;;2MASX J15070767+0132394,IRAS 15045+0144,MCG +00-39-002,PGC 053979,SDSS J150707.68+013239.2,SDSS J150707.68+013240.2,SDSS J150707.69+013239.3,UGC 09715;;; +NGC5851;G;15:06:53.42;+12:51:31.9;Boo;1.07;0.38;44;14.90;;12.00;11.24;11.08;22.97;Sc;;;;;;;;2MASX J15065340+1251315,IRAS 15044+1302,MCG +02-38-044,PGC 053965,SDSS J150653.38+125131.2,SDSS J150653.39+125131.2,UGC 09714;;; +NGC5852;G;15:06:56.41;+12:50:48.6;Boo;1.10;0.71;127;14.70;;11.01;10.29;10.10;23.48;S0-a;;;;;;;;2MASX J15065641+1250485,MCG +02-38-045,PGC 053974,SDSS J150656.41+125048.5,SDSS J150656.41+125048.6,SDSS J150656.42+125048.6;;; +NGC5853;G;15:05:53.29;+39:31:19.9;Boo;1.10;0.65;140;14.80;;11.38;10.62;10.45;23.12;SBbc;;;;;;;;2MASX J15055331+3931198,MCG +07-31-030,PGC 053894,SDSS J150553.28+393119.8,SDSS J150553.28+393119.9,SDSS J150553.29+393119.8,UGC 09707;;; +NGC5854;G;15:07:47.70;+02:34:07.1;Vir;3.02;0.71;55;13.10;;9.72;9.03;8.82;23.67;S0-a;;;;;;;;2MASX J15074772+0234068,MCG +01-39-001,PGC 054013,SDSS J150747.69+023407.0,UGC 09726;;; +NGC5855;G;15:07:49.04;+03:59:03.0;Vir;0.83;0.61;62;15.50;;11.70;10.93;10.69;23.80;E;;;;;;;;2MASX J15074903+0359028,PGC 054014,SDSS J150749.04+035902.9;;; +NGC5856;**;15:07:20.23;+18:26:32.8;Boo;;;;6.10;6.03;5.87;5.89;5.87;;;;;;;;;;2MASS J15072035+1826307,BD+19 2924,HD 134064,HIP 74000,IDS 15028+1850 B,SAO 101379,TYC 1489-23-1,WDS J15073+1827AB;;; +NGC5857;G;15:07:27.31;+19:35:51.5;Boo;1.14;0.57;137;13.99;13.11;10.83;10.12;9.84;22.42;SBab;;;;;;;;2MASX J15072731+1935512,MCG +03-39-004,PGC 053995,SDSS J150727.29+193551.9,UGC 09724;;; +NGC5858;G;15:08:49.14;-11:12:28.2;Lib;2.16;1.19;140;14.00;;10.06;9.38;9.15;24.45;E;;;;;;;;2MASX J15084914-1112280,MCG -02-39-002,PGC 054075;;; +NGC5859;G;15:07:34.74;+19:34:56.3;Boo;2.55;0.63;134;13.10;12.47;10.27;9.50;9.19;22.99;SBbc;;;;;;;;2MASX J15073474+1934562,IRAS 15052+1946,MCG +03-39-005,PGC 054001,SDSS J150734.75+193456.6,SDSS J150734.75+193456.7,UGC 09728;;; +NGC5860;GPair;15:06:33.80;+42:38:29.0;Boo;0.80;;;;;;;;;;;;;;;;;MCG +07-31-033,UGC 09717;;;Diameter of the group inferred by the author. +NGC5860 NED01;G;15:06:33.62;+42:38:25.3;Boo;1.07;0.95;79;14.20;;11.63;10.95;10.78;23.34;E;;;;;;;;2MASX J15063361+4238251,IRAS 15047+4249,MCG +07-31-033 NED01,PGC 053939,SDSS J150633.61+423825.2,SDSS J150633.61+423825.3,SDSS J150633.62+423825.3,UGC 09717 NED01;;; +NGC5860 NED02;G;15:06:33.80;+42:38:34.1;Boo;0.28;0.28;25;15.86;;;;;22.03;E-S0;;;;;;;;MCG +07-31-033 NED02,PGC 093127,SDSS J150633.79+423834.0,SDSS J150633.80+423834.1,UGC 09717 NED02;;;B-Mag taken from LEDA +NGC5861;G;15:09:16.09;-11:19:18.0;Lib;2.78;1.11;149;13.34;12.62;9.62;8.94;8.70;22.55;SABc;;;;;;;;2MASX J15091609-1119179,IRAS 15065-1107,MCG -02-39-003,PGC 054097;;; +NGC5862;G;15:06:03.31;+55:34:25.9;Dra;0.77;0.51;35;15.70;;12.20;11.62;11.40;23.80;E;;;;;;;;2MASX J15060333+5534265,PGC 053900,SDSS J150603.30+553426.1,SDSS J150603.31+553425.9,SDSS J150603.32+553426.1,SDSS J150603.33+553426.1;;; +NGC5863;G;15:10:48.36;-18:25:51.7;Lib;1.45;1.16;27;13.72;;10.70;9.98;9.75;22.66;SABa;;;;;;;;2MASX J15104835-1825515,ESO 581-022,ESO-LV 581-0220,MCG -03-39-001,PGC 054160;;; +NGC5864;G;15:09:33.56;+03:03:09.9;Vir;2.49;0.77;67;12.90;;9.61;8.93;8.71;23.37;S0;;;;;;;;2MASX J15093354+0303098,MCG +01-39-002,PGC 054111,UGC 09740;;; +NGC5865;G;15:09:49.18;+00:31:47.4;Vir;1.25;1.03;165;15.20;;11.06;10.36;10.07;23.98;E-S0;;;;;5868;;;2MASX J15094918+0031468,MCG +00-39-007,PGC 054118,SDSS J150949.18+003147.3,UGC 09743;;; +NGC5866;G;15:06:29.50;+55:45:47.6;Dra;6.31;2.72;126;10.74;9.89;7.83;7.13;6.87;23.40;S0-a;;;;;;;;2MASX J15062956+5545479,IRAS 15051+5557,MCG +09-25-017,PGC 053933,UGC 09723;;This may be M102; +NGC5866B;G;15:12:07.23;+55:47:06.3;Dra;2.33;1.66;16;15.70;;;;;25.56;SABd;;;;;;;;MCG +09-25-034,PGC 054267,SDSS J151207.19+554706.3,SDSS J151207.22+554706.2,SDSS J151207.23+554706.2,SDSS J151207.23+554706.3,UGC 09769;;; +NGC5867;G;15:06:24.32;+55:43:53.7;Dra;0.44;0.36;58;;;;;;23.65;Sb;;;;;;;;2MASX J15062441+5543543,PGC 2512461,SDSS J150624.32+554353.7,SDSS J150624.35+554353.9;;; +NGC5868;Dup;15:09:49.18;+00:31:47.4;Vir;;;;;;;;;;;;;;;5865;;;;;; +NGC5869;G;15:09:49.44;+00:28:12.1;Vir;2.17;1.39;114;13.50;;9.60;8.94;8.73;23.56;S0;;;;;;;;2MASX J15094945+0028118,MCG +00-39-006,PGC 054119,UGC 09742;;HOLM 699B,C are stars.; +NGC5870;Dup;15:06:33.84;+55:28:44.8;Dra;;;;;;;;;;;;;;;5826;;;;;; +NGC5871;*;15:10:04.79;+00:29:52.8;Vir;;;;;;;;;;;;;;;;;;SDSS J151004.79+002952.8;;NGC identification is not certain.; +NGC5872;G;15:10:55.66;-11:28:48.5;Lib;1.77;0.96;10;14.00;;10.11;9.42;9.10;24.16;S0;;;;;;;;2MASX J15105568-1128477,MCG -02-39-005,PGC 054169;;; +NGC5873;PN;15:12:50.80;-38:07:32.0;Lup;0.12;;;13.30;11.00;;;;;;;15.70;15.50;;;;HD 134743;ESO 328-034,IRAS 15096-3756,PN G331.3+16.8;;; +NGC5874;G;15:07:51.83;+54:45:10.0;Boo;2.38;1.56;51;14.10;;11.32;10.71;10.44;23.45;SABc;;;;;;;;2MASX J15075180+5445097,IRAS 15064+5456,MCG +09-25-024,PGC 054018,SDSS J150751.82+544510.0,SDSS J150751.83+544510.0,SDSS J150751.83+544510.1,UGC 09736;;; +NGC5875;G;15:09:13.16;+52:31:42.4;Boo;2.42;1.08;143;13.40;;10.47;9.70;9.43;23.47;Sb;;;;;;;;2MASX J15091320+5231418,IRAS 15077+5243,MCG +09-25-027,PGC 054095,SDSS J150913.16+523142.3,SDSS J150913.16+523142.4,SDSS J150913.16+523142.6,UGC 09745;;; +NGC5876;G;15:09:31.56;+54:30:23.4;Boo;2.46;1.16;48;13.90;;10.43;9.84;9.52;23.97;SBab;;;;;;1111;;2MASX J15093156+5430228,MCG +09-25-028,PGC 054110,SDSS J150931.56+543023.3,SDSS J150931.56+543023.4,SDSS J150931.57+543023.3,SDSS J150931.57+543023.4,UGC 09747;;; +NGC5877;**;15:12:53.07;-04:55:38.0;Lib;;;;;;;;;;;;;;;;;;;;; +NGC5878;G;15:13:45.71;-14:16:11.4;Lib;3.27;1.21;6;12.10;;9.14;8.47;8.18;22.94;Sb;;;;;;;;2MASX J15134569-1416112,IRAS 15109-1405,MCG -02-39-006,PGC 054364,UGCA 403;;Confused HIPASS source; +NGC5879;G;15:09:46.73;+57:00:00.7;Dra;3.79;1.42;1;11.90;;9.68;8.98;8.79;23.03;Sbc;;;;;;;;2MASX J15094675+5700007,IRAS 15084+5711,MCG +10-22-001,PGC 054117,SDSS J150946.76+570000.7,SDSS J150946.77+570000.7,UGC 09753;;; +NGC5880;G;15:15:01.14;-14:34:44.5;Lib;0.87;0.67;145;15.04;;11.47;10.72;10.44;23.62;E;;;;;;;;2MASX J15150115-1434437,MCG -02-39-012,PGC 054427;;; +NGC5881;G;15:06:20.82;+62:58:51.5;Dra;0.81;0.58;61;14.10;;11.39;10.76;10.53;22.22;Sbc;;;;;;1100;;2MASX J15062081+6258515,IRAS 15053+6310,MCG +11-18-025,PGC 053920,UGC 09729;;; +NGC5882;PN;15:16:50.00;-45:38:57.5;Lup;0.23;;;11.33;10.18;;;;;;;13.30;13.43;;;1108;HD 135456,TYC 8294-00398-1;ESO 274-007,IRAS 15134-4527,PN G327.8+10.0;;; +NGC5883;G;15:15:10.18;-14:37:01.4;Lib;1.29;0.85;122;15.00;;10.49;9.75;9.47;23.78;S0;;;;;;;;2MASX J15151018-1437007,MCG -02-39-014,PGC 054439;;; +NGC5884;**;15:13:09.13;+31:51:39.8;Boo;;;;;;;;;;;;;;;;;;;;; +NGC5885;G;15:15:04.16;-10:05:09.6;Lib;3.07;2.59;58;11.70;;10.35;9.86;9.01;23.37;SABc;;;;;;;;2MASX J15150414-1005101,IRAS 15123-0954,MCG -02-39-013,PGC 054429;;This is a part of the galaxy NGC 5885.; +NGC5886;G;15:12:45.44;+41:14:00.9;Boo;0.86;0.60;92;15.10;;11.43;10.71;10.46;23.29;E-S0;;;;;;;;2MASX J15124541+4114008,PGC 054298,SDSS J151245.44+411400.8,SDSS J151245.44+411400.9;;; +NGC5887;G;15:14:43.98;+01:09:15.3;Se1;1.38;1.08;166;15.20;;11.01;10.32;9.99;24.17;S0-a;;;;;;;;2MASX J15144398+0109151,MCG +00-39-012,PGC 054416,SDSS J151443.98+010915.3,SDSS J151443.98+010915.4,UGC 09779;;; +NGC5888;G;15:13:07.37;+41:15:52.7;Boo;1.33;0.81;157;14.30;;10.96;10.27;9.91;23.16;Sbc;;;;;;;;2MASX J15130737+4115526,MCG +07-31-038,PGC 054316,SDSS J151307.37+411552.6,SDSS J151307.37+411552.7,UGC 09771;;; +NGC5889;G;15:13:15.75;+41:19:40.7;Boo;0.70;0.27;40;16.01;;13.05;12.19;11.80;23.29;Sbc;;;;;;;;2MASX J15131571+4119406,PGC 054317,SDSS J151315.74+411940.7,SDSS J151315.75+411940.7;;; +NGC5890;G;15:17:51.17;-17:35:21.1;Lib;1.56;1.08;85;14.00;;10.74;10.07;9.78;23.72;S0-a;;;;;;;;2MASX J15175117-1735214,IRAS 15150-1724,MCG -03-39-004,PGC 054602;;; +NGC5891;G;15:16:13.40;-11:29:39.3;Lib;0.83;0.54;140;14.00;;12.00;11.36;11.09;22.58;Sbc;;;;;;;;2MASX J15161336-1129391,IRAS 15134-1118,MCG -02-39-015,PGC 054491;;; +NGC5892;G;15:13:48.21;-15:27:50.0;Lib;3.05;2.39;165;12.00;;10.90;10.25;10.05;24.21;SABc;;;;;;;;2MASX J15134821-1527492,IRAS 15109-1516,MCG -02-39-007,PGC 054365;;; +NGC5893;G;15:13:34.17;+41:57:31.7;Boo;1.05;0.97;20;14.10;;11.27;10.62;10.36;22.93;SBb;;;;;;;;2MASX J15133416+4157318,IRAS 15117+4208,MCG +07-31-042,PGC 054351,UGC 09774;;; +NGC5894;G;15:11:40.98;+59:48:32.2;Dra;2.98;0.47;14;13.40;;10.11;9.34;9.05;22.94;Scd;;;;;;;;2MASX J15114093+5948317,IRAS 15105+5959,MCG +10-22-004,PGC 054234,SDSS J151140.97+594832.1,SDSS J151140.98+594832.1,UGC 09768;;; +NGC5895;G;15:13:50.00;+42:00:29.1;Boo;0.87;0.23;23;15.50;;;;;22.58;Sc;;;;;;;;MCG +07-31-043,PGC 054366,SDSS J151349.99+420029.0,SDSS J151350.00+420029.0,SDSS J151350.01+420029.1,UGC 09774 NOTES01;;; +NGC5896;G;15:13:50.68;+42:01:27.4;Boo;0.29;0.26;65;16.00;;14.00;13.42;13.00;21.88;Sc;;;;;;;;2MASX J15135069+4201272,MCG +07-31-044,PGC 054367,SDSS J151350.67+420127.3,SDSS J151350.68+420127.3,SDSS J151350.68+420127.4,UGC 09774 NOTES02;;; +NGC5897;GCl;15:17:24.40;-21:00:36.4;Lib;9.90;;;10.16;8.52;;;;;;;;;;;;;MWSC 2285;;; +NGC5898;G;15:18:13.56;-24:05:52.6;Lib;2.66;2.37;51;12.37;11.52;9.03;8.31;8.07;23.43;E;;;;;;;;2MASX J15181355-2405526,ESO 514-002,ESO-LV 514-0020,MCG -04-36-006,PGC 054625,UGCA 404;;; +NGC5899;G;15:15:03.22;+42:02:59.4;Boo;2.10;0.85;21;14.19;13.21;9.62;8.99;8.59;22.16;Sc;;;;;;;;2MASX J15150325+4202594,IRAS 15132+4214,MCG +07-31-045,PGC 054428,SDSS J151503.22+420259.4,UGC 09789;;The position in 1988BoPos.M...0000V is 5.5 arcsec south of the nucleus.; +NGC5900;G;15:15:05.16;+42:12:33.9;Boo;1.49;0.54;130;14.43;13.39;10.81;9.91;9.43;23.52;Sb;;;;;;;;2MASX J15150501+4212354,IRAS 15132+4223,MCG +07-31-046,PGC 054431,SDSS J151505.16+421233.9,SDSS J151505.16+421234.0,UGC 09790;;HOLM 702B is a star.; +NGC5901;*;15:15:02.60;+42:13:41.0;Boo;;;;;;;;;;;;;;;;;;;;; +NGC5902;G;15:14:22.40;+50:19:46.8;Boo;1.26;1.11;100;15.40;;10.97;10.30;10.00;23.93;S0-a;;;;;;;;2MASX J15142238+5019465,MCG +08-28-011,PGC 054394,SDSS J151422.38+501946.6,SDSS J151422.39+501946.7,SDSS J151422.39+501946.8,SDSS J151422.40+501946.8;;; +NGC5903;G;15:18:36.53;-24:04:06.9;Lib;3.00;2.23;164;12.11;11.48;9.04;8.34;8.10;23.45;E;;;;;;;;2MASX J15183652-2404069,ESO 514-004,ESO-LV 514-0040,MCG -04-36-008,PGC 054646,UGCA 405;;; +NGC5904;GCl;15:18:33.75;+02:04:57.7;Se1;15.00;;;7.34;5.95;;;;;;;;;005;;;;MWSC 2286;;; +NGC5905;G;15:15:23.32;+55:31:02.5;Dra;3.22;2.60;131;13.60;;10.47;9.85;9.51;24.41;Sb;;;;;;;;2MASX J15152332+5531015,IRAS 15140+5541,MCG +09-25-038,PGC 054445,SDSS J151523.33+553102.2,UGC 09797;;; +NGC5906;Dup;15:15:53.77;+56:19:43.6;Dra;;;;;;;;;;;;;;;5907;;;;;; +NGC5907;G;15:15:53.77;+56:19:43.6;Dra;11.30;1.75;156;11.40;;7.94;7.09;6.76;23.60;SABc;;;;;5906;;;2MASX J15155368+5619438,IRAS 15146+5629,MCG +09-25-040,PGC 054470,SDSS J151553.77+561943.5,SDSS J151553.77+561943.6,UGC 09801;;NGC 5906 is the part of NGC 5907 west of the dust lane.; +NGC5908;G;15:16:43.22;+55:24:33.3;Dra;3.37;1.61;153;13.50;;9.43;8.61;8.25;23.67;SBb;;;;;;;;2MASX J15164322+5524332,IRAS 15153+5535,MCG +09-25-041,PGC 054522,UGC 09805;;; +NGC5909;G;15:11:28.03;+75:23:01.7;UMi;1.00;0.56;53;14.32;13.58;11.40;10.65;10.40;22.99;Sbc;;;;;;;;2MASX J15112837+7523018,MCG +13-11-010,PGC 054223,UGC 09778;;CGCG Dec (+75 20) is incorrect.; +NGC5910;GTrpl;15:19:25.10;+20:53:42.0;Se1;1.10;;;;;;;;;;;;;;;;;;;Part of the GGroup VV 139.;Diameter of the group inferred by the author. +NGC5910 NED01;G;15:19:24.26;+20:53:26.9;Se1;0.74;0.56;119;15.97;;;;;23.84;E;;;;;;;;MCG +04-36-036,PGC 054688,SDSS J151924.25+205326.7,SDSS J151924.26+205326.8,UGC 09813 NOTES02;;; +NGC5910 NED02;G;15:19:24.74;+20:53:46.9;Se1;1.15;0.47;110;14.96;;10.91;10.06;9.85;23.69;E;;;;;;;;2MASX J15192473+2053465,MCG +04-36-035,PGC 054689,SDSS J151924.74+205346.8,UGC 09813 NOTES01;;; +NGC5910 NED03;G;15:19:25.83;+20:53:58.3;Se1;0.55;0.36;121;17.00;;;;;23.98;E-S0;;;;;;;;MCG +04-36-035 NOTES01,PGC 054692,SDSS J151925.83+205358.3,UGC 09813 NOTES03;;; +NGC5911;G;15:20:18.22;+03:31:06.0;Se1;1.09;0.69;44;14.70;;11.00;10.27;9.97;23.54;E-S0;;;;;;;;2MASX J15201821+0331062,MCG +01-39-019,PGC 054731,SDSS J152018.21+033106.0;;; +NGC5912;G;15:11:40.90;+75:23:05.3;UMi;1.04;0.91;100;13.84;12.98;10.91;10.18;9.88;23.34;E-S0;;;;;;;;2MASX J15114105+7523057,MCG +13-11-011,PGC 054237;;HOLM 703C is a star.; +NGC5913;G;15:20:55.44;-02:34:40.6;Se1;1.85;0.75;173;14.60;;10.19;9.45;9.12;23.76;Sa;;;;;;;;2MASX J15205543-0234409,IRAS 15183-0223,MCG +00-39-021,PGC 054761,SDSS J152055.43-023440.5,SDSS J152055.43-023440.6,UGC 09818;;; +NGC5914;G;15:18:43.82;+41:51:55.7;Boo;0.92;0.36;156;14.90;;11.37;10.62;10.38;22.65;Sab;;;;;5914A;;;2MASX J15184386+4151555,MCG +07-31-055,PGC 054654,SDSS J151843.82+415155.6,SDSS J151843.82+415155.7;;; +NGC5914B;G;15:18:45.31;+41:53:26.9;Boo;0.50;0.43;26;17.00;;;;;22.96;Sbc;;;;;;;;MCG +07-31-056,PGC 054653,SDSS J151845.30+415326.8,SDSS J151845.31+415326.9;;; +NGC5915;G;15:21:33.08;-13:05:30.3;Lib;1.67;1.23;125;13.10;;10.60;9.99;9.67;22.31;SBb;;;;;;;;2MASX J15213307-1305302,IRAS 15187-1254,MCG -02-39-019,PGC 054816,UGCA 407;;; +NGC5916;G;15:21:37.92;-13:10:09.4;Lib;3.09;0.70;21;14.00;;10.49;9.89;9.68;24.10;SBa;;;;;;;;2MASX J15213793-1310092,IRAS 15188-1259,MCG -02-39-020,PGC 054825;;; +NGC5916A;G;15:21:13.84;-13:06:02.2;Lib;1.38;0.44;145;15.00;;12.01;11.51;11.34;23.20;SBc;;;;;;;;2MASX J15211384-1306022,MCG -02-39-018,PGC 054779;;; +NGC5917;G;15:21:32.57;-07:22:37.8;Lib;1.68;1.05;90;13.70;;11.59;10.92;10.77;23.33;Sb;;;;;;;;2MASX J15213256-0722376,IRAS 15188-0711,MCG -01-39-002,PGC 054809;;; +NGC5918;G;15:19:25.26;+45:52:48.9;Boo;2.01;0.84;85;14.00;;11.01;10.21;9.92;23.53;Sc;;;;;;;;2MASX J15192526+4552493,IRAS 15177+4603,MCG +08-28-017,PGC 054690,SDSS J151925.25+455248.9,SDSS J151925.25+455249.0,SDSS J151925.26+455248.9,UGC 09817;;; +NGC5919;G;15:21:36.88;+07:43:09.5;Se1;1.00;0.59;103;15.50;;12.11;11.70;10.94;24.43;E;;;;;;;;2MASX J15213686+0743099,MCG +01-39-020 NED05,PGC 054826,SDSS J152136.88+074309.4;;; +NGC5920;G;15:21:51.85;+07:42:31.7;Se1;1.28;0.70;100;15.50;;11.55;10.80;10.85;24.00;S0;;;;;;;;2MASX J15215187+0742319,PGC 054839,SDSS J152151.85+074231.7,UGC 09822;;; +NGC5921;G;15:21:56.56;+05:04:13.9;Se1;3.02;2.03;137;12.70;;8.99;8.32;8.10;22.51;Sbc;;;;;;;;2MASX J15215656+0504139,IRAS 15194+0514,MCG +01-39-021,PGC 054849,SDSS J152156.48+050414.2,UGC 09824;;; +NGC5922;**;15:21:09.10;+41:40:14.0;Boo;;;;;;;;;;;;;;;;;;;;; +NGC5923;G;15:21:14.24;+41:43:33.4;Boo;1.33;1.22;45;14.70;;11.46;10.95;10.63;23.08;SABb;;;;;;;;2MASX J15211425+4143334,MCG +07-32-001,PGC 054780,SDSS J152114.23+414333.3,SDSS J152114.24+414333.4,UGC 09823;;HOLM 707B is a double star.; +NGC5924;G;15:22:01.98;+31:13:59.1;CrB;0.65;0.33;16;15.30;;12.52;11.82;11.47;22.97;SBa;;;;;;;;2MASX J15220196+3113588,MCG +05-36-015,PGC 054850,SDSS J152201.98+311359.0,SDSS J152201.98+311359.1;;; +NGC5925;OCl;15:27:26.82;-54:31:43.6;Nor;4.80;;;;8.40;;;;;;;;;;;;;MWSC 2293;;; +NGC5926;G;15:23:24.90;+12:42:55.0;Se1;0.91;0.91;20;14.80;;12.39;11.97;11.49;23.22;Sbc;;;;;;;;IRAS 15210+1253,MCG +02-39-026,PGC 054950;;; +NGC5927;GCl;15:28:00.43;-50:40:22.0;Nor;6.60;;;10.13;8.86;;;;;;;;;;;;;MWSC 2295;;; +NGC5928;G;15:26:02.88;+18:04:25.1;Se1;1.64;1.08;103;13.80;;10.47;9.77;9.53;23.47;S0;;;;;;;;2MASX J15260290+1804253,MCG +03-39-027,PGC 055072,SDSS J152602.87+180425.0,SDSS J152602.87+180425.1,UGC 09847;;; +NGC5929;G;15:26:06.16;+41:40:14.4;Boo;0.90;0.83;45;13.00;14.00;;;;22.54;Sa;;;;;;;;MCG +07-32-006,PGC 055076,SDSS J152606.15+414014.3,SDSS J152606.16+414014.3,SDSS J152606.16+414014.4,UGC 09851;;; +NGC5930;G;15:26:07.94;+41:40:33.8;Boo;1.85;0.79;173;13.00;;9.96;9.22;8.94;22.71;SABa;;;;;;;;2MASX J15260798+4140339,IRAS 15243+4150,MCG +07-32-007,PGC 055080,SDSS J152607.95+414033.8,UGC 09852;;; +NGC5931;G;15:29:29.63;+07:34:23.7;Se1;1.58;0.93;40;15.00;;11.41;10.61;10.31;24.20;S0;;;;;;;;2MASX J15292960+0734239,MCG +01-39-023,PGC 055233,SDSS J152929.62+073423.6;;; +NGC5932;G;15:26:48.21;+48:36:53.9;Boo;1.10;1.06;160;15.20;;11.62;11.00;10.71;23.90;E;;;;;;;;2MASX J15264818+4836534,MCG +08-28-033,PGC 055109,SDSS J152648.20+483653.8,SDSS J152648.20+483653.9,SDSS J152648.21+483653.9;;; +NGC5933;G;15:27:01.57;+48:36:47.9;Boo;0.82;0.59;26;15.70;;12.54;11.95;11.50;24.03;E;;;;;;;;2MASX J15270149+4836474,MCG +08-28-034,PGC 055117,SDSS J152701.56+483647.9,SDSS J152701.57+483647.8,SDSS J152701.57+483647.9;;; +NGC5934;G;15:28:12.78;+42:55:47.7;Boo;0.61;0.29;5;14.50;;11.02;10.30;9.98;21.77;SBa;;;;;;;;2MASX J15281276+4255474,IRAS 15264+4306,MCG +07-32-011,PGC 055178,SDSS J152812.74+425547.6,SDSS J152812.75+425547.5,SDSS J152812.76+425547.6,SDSS J152812.77+425547.7,SDSS J152812.78+425547.7,UGC 09862;;; +NGC5935;G;15:28:16.71;+42:56:38.8;Boo;0.85;0.40;37;15.10;;11.40;10.72;10.44;23.07;SBa;;;;;;;;2MASX J15281667+4256384,MCG +07-32-013,PGC 055183,SDSS J152816.69+425638.7,SDSS J152816.70+425638.7,SDSS J152816.71+425638.8;;; +NGC5936;G;15:30:00.83;+12:59:21.6;Se1;1.18;1.12;60;13.00;;10.49;9.77;9.46;22.11;SBb;;;;;;;;2MASX J15300084+1259215,IRAS 15276+1309,MCG +02-39-030,PGC 055255,SDSS J153000.83+125921.5,UGC 09867;;; +NGC5937;G;15:30:46.13;-02:49:46.2;Se1;1.89;1.08;175;13.10;;10.11;9.37;9.04;22.79;SABb;;;;;;;;2MASX J15304613-0249463,IRAS 15281-0239,MCG +00-40-001,PGC 055281;;; +NGC5938;G;15:36:26.27;-66:51:35.1;TrA;2.31;1.59;15;11.90;;9.23;8.53;8.30;22.79;SBbc;;;;;;;;2MASX J15362626-6651350,ESO 099-007,IRAS 15317-6641,PGC 055582;;; +NGC5939;G;15:24:46.03;+68:43:50.3;UMi;0.82;0.43;33;13.70;;11.13;10.46;10.12;21.46;SABc;;;;;;;;2MASX J15244604+6843501,IRAS 15244+6854,MCG +12-15-007,PGC 055022,UGC 09854;;; +NGC5940;G;15:31:18.07;+07:27:27.9;Se1;0.78;0.74;170;15.56;14.90;11.79;11.15;10.80;22.69;Sab;;;;;;;;2MASX J15311810+0727276,IRAS 15288+0737,MCG +01-39-025,PGC 055295,SDSS J153118.07+072727.9,SDSS J153118.08+072727.9,UGC 09876;;; +NGC5941;G;15:31:40.24;+07:20:20.4;Se1;0.90;0.71;55;15.10;;11.87;11.18;11.08;23.55;E;;;;;;;;2MASX J15314024+0720207,MCG +01-40-003,PGC 055314,SDSS J153140.23+072020.3;;NGC identification is not certain.; +NGC5942;G;15:31:36.82;+07:18:44.7;Se1;0.71;0.67;80;15.20;;11.97;11.33;11.02;23.40;E;;;;;;;;2MASX J15313681+0718447,MCG +01-40-001,PGC 055309,SDSS J153136.82+071844.6;;Sometimes called NGC 5941.; +NGC5943;G;15:29:44.12;+42:46:40.7;Boo;1.24;1.11;170;14.60;;10.83;10.15;9.82;23.59;S0;;;;;;;;2MASX J15294409+4246404,MCG +07-32-016,PGC 055242,SDSS J152944.10+424640.7,SDSS J152944.11+424640.6,SDSS J152944.11+424640.7,SDSS J152944.12+424640.7,UGC 09870;;; +NGC5944;G;15:31:47.60;+07:18:29.3;Se1;0.86;0.21;112;15.20;;12.31;11.51;11.26;23.39;Sb;;;;;;;;2MASX J15314756+0718297,MCG +01-40-004,PGC 055321,SDSS J153147.60+071829.3;;; +NGC5945;G;15:29:45.02;+42:55:07.2;Boo;1.66;0.72;20;14.10;;10.41;9.76;9.48;23.52;Sab;;;;;;;;2MASX J15294500+4255073,IRAS 15280+4305,MCG +07-32-017,PGC 055243,SDSS J152944.99+425507.1,SDSS J152945.01+425507.2,SDSS J152945.02+425507.2,UGC 09871;;; +NGC5946;GCl;15:35:28.57;-50:39:35.0;Nor;3.60;;;11.98;10.72;;;;;;;;;;;4550;;MWSC 2306;;; +NGC5947;G;15:30:36.60;+42:43:01.7;Boo;1.17;0.82;45;14.80;;11.89;11.13;10.83;23.39;SBbc;;;;;;;;2MASX J15303656+4243018,IRAS 15288+4253,MCG +07-32-019,PGC 055274,SDSS J153036.58+424301.7,SDSS J153036.59+424301.7,SDSS J153036.60+424301.7,UGC 09877;;; +NGC5948;**;15:32:58.64;+03:58:58.2;Se1;;;;;;;;;;;;;;;;;;;;; +NGC5949;G;15:28:00.67;+64:45:47.5;Dra;1.84;0.76;148;12.70;;10.28;9.65;9.43;22.25;Sbc;;;;;;;;2MASX J15280067+6445473,IRAS 15273+6456,MCG +11-19-008,PGC 055165,SDSS J152800.67+644547.5,UGC 09866;;The 2MASS position is 5 arcsec northwest of the center of the optical bulge.; +NGC5950;G;15:31:30.79;+40:25:48.1;Boo;1.25;0.63;38;14.80;;11.62;11.20;11.02;23.34;SBb;;;;;;;;2MASX J15313082+4025485,IRAS 15296+4036,MCG +07-32-021,PGC 055305,SDSS J153130.79+402548.1,SDSS J153130.80+402548.1,UGC 09884;;; +NGC5951;G;15:33:43.06;+15:00:26.2;Se1;3.03;0.66;4;13.80;;10.89;10.27;10.05;23.61;SBc;;;;;;;;2MASX J15334307+1500262,IRAS 15313+1510,MCG +03-40-003,PGC 055435,SDSS J153343.07+150026.1,UGC 09895;;HOLM 713B is a star.; +NGC5952;G;15:34:56.44;+04:57:31.8;Se1;0.56;0.43;131;15.50;;12.53;11.81;11.50;23.45;E;;;;;;;;2MASX J15345642+0457317,PGC 055496,SDSS J153456.44+045731.8;;; +NGC5953;G;15:34:32.38;+15:11:37.6;Se1;1.47;1.12;50;13.23;12.45;9.92;9.20;9.16;22.50;S0-a;;;;;;;;2MASX J15343240+1511377,IRAS 15322+1521,MCG +03-40-005,PGC 055480,SDSS J153432.39+151137.5,SDSS J153432.52+151133.2,UGC 09903;;; +NGC5954;G;15:34:35.02;+15:12:00.2;Se1;1.02;0.48;19;13.70;;10.92;10.40;10.00;20.96;SABc;;;;;;;;2MASX J15343517+1511536,MCG +03-40-006,PGC 055482,SDSS J153435.02+151200.2,UGC 09904;;; +NGC5955;G;15:35:12.48;+05:03:46.8;Se1;0.72;0.50;31;15.00;;12.16;11.40;11.19;23.05;Sb;;;;;;;;2MASX J15351249+0503463,MCG +01-40-006,PGC 055510,SDSS J153512.47+050346.8;;; +NGC5956;G;15:34:58.54;+11:45:01.0;Se1;1.49;1.49;30;13.30;;10.76;10.09;9.87;22.88;SBc;;;;;;;;2MASX J15345850+1145012,IRAS 15326+1154,MCG +02-40-003,PGC 055501,SDSS J153458.53+114500.9,SDSS J153458.53+114501.0,UGC 09908;;; +NGC5957;G;15:35:23.21;+12:02:51.4;Se1;2.44;2.34;95;13.30;;10.40;9.77;9.50;24.18;Sb;;;;;;;;2MASX J15352323+1202510,IRAS 15330+1212,MCG +02-40-004,PGC 055520,SDSS J153523.21+120251.3,UGC 09915;;; +NGC5958;G;15:34:49.15;+28:39:18.9;CrB;1.07;1.00;175;13.20;;11.30;10.76;10.41;22.19;SABc;;;;;;;;2MASX J15344912+2839184,IRAS 15327+2849,MCG +05-37-003,PGC 055494,SDSS J153449.14+283918.9,SDSS J153449.15+283918.9,UGC 09909;;; +NGC5959;G;15:37:22.43;-16:35:44.8;Lib;2.09;1.44;1;14.00;;10.12;9.39;9.12;24.86;E;;;;;;;;2MASX J15372243-1635448,MCG -03-40-002,PGC 055625;;; +NGC5960;G;15:36:18.43;+05:39:55.3;Se1;0.88;0.71;99;15.10;;11.96;11.23;10.87;23.21;Sab;;;;;;;;2MASX J15361839+0539548,IRAS 15338+0549,MCG +01-40-007,PGC 055575,SDSS J153618.42+053955.3,SDSS J153618.43+053955.3;;; +NGC5961;G;15:35:16.32;+30:51:51.0;CrB;0.81;0.33;103;14.00;;11.73;11.03;10.72;22.17;Sb;;;;;;;;2MASX J15351646+3051507,IRAS 15332+3101,MCG +05-37-005,PGC 055515,SDSS J153516.32+305151.0,UGC 09918;;HOLM 715C is a star. Multiple SDSS entries describe this object.; +NGC5962;G;15:36:31.68;+16:36:28.0;Se1;2.48;1.61;108;11.98;11.34;9.50;8.81;8.53;22.45;Sc;;;;;;;;2MASX J15363164+1636284,IRAS 15342+1646,MCG +03-40-011,PGC 055588,SDSS J153631.68+163627.9,SDSS J153631.68+163628.0,UGC 09926;;HOLM 716B is a star.; +NGC5963;G;15:33:27.86;+56:33:34.9;Dra;3.14;2.47;58;13.34;13.65;10.74;10.14;9.92;24.07;SABb;;;;;;;;2MASX J15332779+5633345,IRAS 15322+5643,MCG +09-25-058,PGC 055419,SDSS J153327.85+563334.9,SDSS J153327.86+563334.9,TYC 3872-210-1,UGC 09906;;; +NGC5964;G;15:37:36.22;+05:58:26.5;Se1;3.42;2.56;147;12.45;11.82;;;;24.77;SBcd;;;;;;4551;;2MASX J15373722+0558068,IRAS 15351+0608,MCG +01-40-008,PGC 055637,SDSS J153736.21+055826.4,UGC 09935;;2MASS position is for a southern hot-spot.; +NGC5965;G;15:34:02.46;+56:41:08.2;Dra;5.08;0.78;52;13.40;;9.65;8.94;8.61;23.75;SABb;;;;;;;;2MASX J15340245+5641081,IRAS 15328+5651,MCG +10-22-020,PGC 055459,SDSS J153402.28+564108.5,SDSS J153402.29+564108.5,UGC 09914;;; +NGC5966;G;15:35:52.14;+39:46:08.2;Boo;1.53;0.98;88;13.90;;10.63;9.93;9.68;22.91;E;;;;;;;;2MASX J15355211+3946082,MCG +07-32-032,PGC 055552,SDSS J153552.10+394608.0,SDSS J153552.10+394608.1,SDSS J153552.11+394608.2,UGC 09923;;; +NGC5967;G;15:48:15.93;-75:40:22.6;Aps;2.37;1.55;90;14.20;;9.72;8.81;8.71;22.98;Sc;;;;;;;;2MASX J15481597-7540226,ESO 042-010,IRAS 15421-7531,PGC 056078;;Confused HIPASS source; +NGC5967A;G;15:46:58.72;-75:47:14.8;Aps;1.50;1.14;36;14.06;;12.22;11.16;11.17;23.54;Sc;;;;;;;;2MASX J15465869-7547149,ESO 042-009,PGC 056024;;; +NGC5968;G;15:39:57.17;-30:33:10.0;Lup;2.29;2.13;20;13.08;14.32;9.60;8.86;8.66;23.61;SABb;;;;;;;;2MASX J15395715-3033100,ESO 450-005,ESO-LV 450-0050,IRAS 15368-3023,MCG -05-37-001,PGC 055738;;; +NGC5969;G;15:34:51.02;+56:27:03.9;Dra;0.79;0.65;160;15.40;;11.77;11.20;10.80;23.57;E;;;;;;;;2MASX J15345108+5627040,MCG +09-25-059,PGC 055491,SDSS J153451.02+562703.8,SDSS J153451.02+562703.9,SDSS J153451.03+562703.8,SDSS J153451.04+562704.1;;; +NGC5970;G;15:38:29.97;+12:11:11.8;Se1;2.77;1.91;88;12.20;;9.70;9.07;8.82;22.64;SBc;;;;;;;;2MASX J15382998+1211117,IRAS 15361+1220,MCG +02-40-006,PGC 055665,UGC 09943;;; +NGC5971;G;15:35:36.89;+56:27:42.1;Dra;1.25;0.53;132;14.90;;11.65;11.08;11.00;23.53;Sa;;;;;;;;2MASX J15353688+5627424,MCG +09-26-002,PGC 055529,SDSS J153536.89+562742.0,SDSS J153536.89+562742.1,SDSS J153536.90+562742.3,UGC 09929;;; +NGC5972;G;15:38:54.17;+17:01:34.3;Se1;0.70;0.57;10;14.60;14.27;11.71;11.07;10.69;22.72;S0-a;;;;;;;;2MASX J15385414+1701344,MCG +03-40-016,PGC 055684,SDSS J153854.16+170134.2,SDSS J153854.16+170134.3,SDSS J153854.17+170134.2,UGC 09946;;; +NGC5973;G;15:40:15.47;-08:36:03.4;Lib;0.92;0.26;138;15.05;;11.40;10.65;10.26;23.61;S0-a;;;;;;;;2MASX J15401545-0836033,IRAS 15375-0826,PGC 055757;;; +NGC5974;G;15:39:02.42;+31:45:35.7;CrB;0.58;0.33;111;14.30;;12.13;11.47;11.16;21.74;Scd;;;;;;;;2MASX J15390238+3145349,IRAS 15370+3155,MCG +05-37-010,PGC 055694,SDSS J153902.41+314535.7,SDSS J153902.42+314535.7,UGC 09952;;; +NGC5975;G;15:39:57.97;+21:28:14.9;Se1;0.93;0.24;171;14.70;;11.03;10.31;9.95;22.16;Sbc;;;;;;;;2MASX J15395796+2128150,IRAS 15377+2137,MCG +04-37-019,PGC 055739,SDSS J153957.94+212814.2,SDSS J153957.94+212814.3,UGC 09963;;HOLM 718B does not exist (it is probably a plate defect).; +NGC5976;G;15:36:47.97;+59:23:51.9;Dra;0.98;0.33;125;15.90;;12.77;11.98;11.97;24.41;S0;;;;;;;;2MASX J15364801+5923522,MCG +10-22-025,PGC 055609,SDSS J153647.96+592351.8;;; +NGC5977;G;15:40:33.45;+17:07:40.7;Se1;0.91;0.82;80;15.10;;12.06;11.37;11.26;23.77;S0;;;;;;;;2MASX J15403347+1707409,MCG +03-40-023,PGC 055769,SDSS J154033.45+170740.6,UGC 09967;;; +NGC5978;G;15:42:27.22;-13:14:04.0;Lib;0.81;0.74;135;14.00;;11.69;10.89;10.50;23.60;Sa;;;;;;;;2MASX J15422724-1314035,MCG -02-40-002,PGC 055838;;; +NGC5979;PN;15:47:41.06;-61:13:04.3;TrA;0.13;;;11.80;11.50;12.41;12.11;11.53;;;;16.30;15.30;;;;HD 140586;2MASX J15474191-6113079,ESO 136-003,IRAS 15434-6103,PN G322.5-05.2;;The 2MASS position is southeast of the central star.; +NGC5980;G;15:41:30.40;+15:47:15.6;Se1;1.63;0.52;14;13.30;;10.52;9.74;9.44;22.32;Sbc;;;;;;;;2MASX J15413039+1547156,IRAS 15391+1556,MCG +03-40-026,PGC 055800,SDSS J154130.44+154715.6,UGC 09974;;HOLM 720B is a star.; +NGC5981;G;15:37:53.45;+59:23:30.3;Dra;2.73;0.37;139;14.20;;10.41;9.62;9.29;23.35;SBbc;;;;;;;;2MASX J15375266+5923382,2MASX J15375345+5923304,IRAS 15368+5933,MCG +10-22-027,PGC 055647,SDSS J153753.45+592330.3,UGC 09948;;; +NGC5982;G;15:38:39.83;+59:21:21.0;Dra;3.07;2.00;110;12.40;;9.08;8.36;8.15;23.26;E;;;;;;;;2MASX J15383977+5921212,MCG +10-22-029,PGC 055674,SDSS J153839.82+592121.0,UGC 09961;;; +NGC5983;G;15:42:45.63;+08:14:28.0;Se1;0.97;0.92;55;15.10;;11.39;10.75;10.46;23.83;E;;;;;;;;2MASX J15424560+0814279,MCG +01-40-012,PGC 055845,SDSS J154245.62+081427.9,SDSS J154245.63+081427.9,SDSS J154245.63+081428.0,UGC 09983;;; +NGC5984;G;15:42:53.17;+14:13:53.3;Se1;2.48;0.57;144;13.50;;11.06;10.40;10.17;22.76;Sc;;;;;;;;2MASX J15425319+1413531,IRAS 15405+1423,MCG +02-40-011,PGC 055853,SDSS J154253.16+141353.3,UGC 09987;;; +NGC5985;G;15:39:37.09;+59:19:55.0;Dra;3.98;2.01;15;15.24;14.22;9.06;8.32;8.15;23.20;Sb;;;;;;;;2MASX J15393708+5919550,IRAS 15385+5929,MCG +10-22-030,PGC 055725,UGC 09969;;; +NGC5986;GCl;15:46:03.44;-37:47:10.1;Lup;5.40;;;;6.92;;;;;;;;;;;;;ESO 329-018,MWSC 2317;;; +NGC5987;G;15:39:57.37;+58:04:46.3;Dra;3.84;1.32;60;13.30;;9.57;8.87;8.61;23.66;Sb;;;;;;;;2MASX J15395738+5804463,MCG +10-22-032,PGC 055740,UGC 09971;;; +NGC5988;G;15:44:33.86;+10:17:35.3;Se1;1.12;0.77;110;15.30;;11.92;11.19;10.89;23.64;Sc;;;;;;;;2MASX J15443383+1017356,MCG +02-40-012,PGC 055921,SDSS J154433.85+101735.3,UGC 09998;;; +NGC5989;G;15:41:32.80;+59:45:18.8;Dra;0.88;0.82;130;13.60;;11.48;10.94;10.62;21.96;Sc;;;;;;;;2MASX J15413284+5945191,IRAS 15405+5954,MCG +10-22-034,PGC 055802,SDSS J154132.79+594518.7,UGC 09985;;; +NGC5990;G;15:46:16.36;+02:24:55.5;Se1;1.59;0.95;107;13.10;;10.09;9.34;8.95;22.62;SABa;;;;;;;;2MASX J15461637+0224558,IRAS 15437+0234,MCG +01-40-014,PGC 055993,SDSS J154616.35+022455.5,UGC 10024;;; +NGC5991;G;15:45:16.78;+24:37:49.9;Se1;1.00;0.78;129;14.70;;11.29;10.62;10.30;23.39;E;;;;;;;;2MASX J15451680+2437494,MCG +04-37-028,PGC 055953,SDSS J154516.78+243749.8;;; +NGC5992;G;15:44:21.51;+41:05:10.9;Boo;0.69;0.47;156;14.20;;12.21;11.80;11.30;22.19;SBb;;;;;;;;2MASX J15442146+4105110,IRAS 15425+4114,MCG +07-32-049,PGC 055913,SDSS J154421.51+410510.9,UGC 10003;;; +NGC5993;G;15:44:27.62;+41:07:14.9;Boo;0.95;0.60;140;13.90;;11.65;10.90;10.61;22.45;Sb;;;;;;;;IRAS 15426+4116,MCG +07-32-050,PGC 055918,SDSS J154427.61+410714.9,UGC 10007;;Multiple SDSS entries describe this object.; +NGC5994;G;15:46:53.26;+17:52:21.4;Se1;0.60;0.30;93;13.20;;14.06;13.71;13.10;22.89;SBbc;;;;;;;;2MASX J15465326+1752217,MCG +03-40-038,PGC 056020,SDSS J154653.32+175221.6,UGC 10033 NED01;;Incorrectly called NGC 5996 in 1976ApJS...31..187D.; +NGC5995;G;15:48:24.95;-13:45:28.0;Lib;1.02;0.79;147;14.66;13.69;10.75;9.94;9.39;23.21;SABa;;;;;;;;2MASX J15482491-1345273,IRAS 15456-1336,MCG -02-40-004,PGC 056081;;; +NGC5996;G;15:46:58.88;+17:53:03.1;Se1;1.50;0.68;1;13.20;;11.50;10.81;10.42;22.21;SBbc;;;;;;;;2MASX J15465887+1753031,IRAS 15447+1802,MCG +03-40-039,PGC 056023,SDSS J154658.88+175303.0,SDSS J154658.88+175303.1,UGC 10033 NED02;;Incorrectly called NGC 5994 in 1976ApJS...31..187D.; +NGC5997;G;15:47:27.67;+08:19:16.3;Se1;0.68;0.30;87;15.50;;12.25;11.60;11.40;23.66;E;;;;;;;;2MASX J15472770+0819167,PGC 056044,SDSS J154727.66+081916.3,SDSS J154727.67+081916.2,SDSS J154727.67+081916.3;;; +NGC5998;OCl;15:49:38.21;-28:34:41.6;Sco;5.40;;;;;;;;;;;;;;;;;MWSC 2323;;; +NGC5999;OCl;15:52:08.63;-56:28:22.1;Nor;3.30;;;;9.00;;;;;;;;;;;;;MWSC 2326;;; +NGC6000;G;15:49:49.55;-29:23:12.6;Sco;1.91;1.66;159;13.02;;9.28;8.56;8.20;23.06;SBbc;;;;;;;;2MASX J15494955-2923124,ESO 450-020,ESO-LV 450-0200,IRAS 15467-2914,MCG -05-37-003,PGC 056145;;; +NGC6001;G;15:47:45.96;+28:38:30.1;CrB;1.06;0.95;163;14.40;;11.66;11.02;11.00;23.08;SABc;;;;;;;;2MASX J15474595+2838306,MCG +05-37-027,PGC 056056,SDSS J154745.95+283830.0,SDSS J154745.96+283830.0,SDSS J154745.96+283830.1,UGC 10036;;; +NGC6002;*;15:47:44.39;+28:36:34.9;CrB;;;;;;;;;;;;;;;;;;SDSS J154744.39+283634.8;;NGC identification is not certain.; +NGC6003;G;15:49:25.64;+19:01:55.5;Se1;0.97;0.87;101;14.40;;11.18;10.48;10.23;22.98;S0;;;;;;;;2MASX J15492562+1901551,MCG +03-40-048,PGC 056130,SDSS J154925.64+190155.4,UGC 10048;;; +NGC6004;G;15:50:22.72;+18:56:21.4;Se1;1.89;1.49;95;13.40;;10.48;9.79;9.55;23.41;Sc;;;;;;;;2MASX J15502269+1856207,IRAS 15481+1905,MCG +03-40-051,PGC 056166,SDSS J155022.71+185621.3,SDSS J155022.72+185621.3,UGC 10056;;; +NGC6005;OCl;15:55:48.70;-57:26:14.6;Nor;4.20;;;11.90;10.70;;;;;;;;;;;;;MWSC 2336;;; +NGC6006;G;15:53:02.57;+12:00:19.3;Se1;0.71;0.42;157;15.30;;12.63;11.98;11.59;23.44;S0-a;;;;;;;;2MASX J15530253+1200191,PGC 056295,SDSS J155302.56+120019.3;;; +NGC6007;G;15:53:23.18;+11:57:33.1;Se1;1.55;1.19;53;14.10;;11.33;10.75;10.54;23.33;SABc;;;;;;;;2MASX J15532317+1157327,IRAS 15510+1206,MCG +02-40-018,PGC 056309,SDSS J155323.17+115733.0,UGC 10079;;; +NGC6008;G;15:52:56.03;+21:06:01.8;Se1;1.16;0.89;94;14.20;;11.31;10.53;10.28;22.99;Sb;;;;;;;;2MASX J15525603+2106017,IRAS 15507+2114,MCG +04-37-052,PGC 056289,SDSS J155256.02+210601.8,SDSS J155256.03+210601.8,UGC 10076;;; +NGC6009;G;15:53:24.08;+12:03:31.2;Se1;0.66;0.26;167;15.40;;13.21;12.59;12.24;23.51;S0-a;;;;;;;;2MASX J15532407+1203311,PGC 056312,SDSS J155324.09+120330.8;;; +NGC6010;G;15:54:19.15;+00:32:35.0;Se1;1.82;0.40;100;13.30;;9.85;9.15;8.93;22.79;S0-a;;;;;;;;2MASX J15541914+0032349,MCG +00-40-013,PGC 056337,SDSS J155419.15+003234.9,UGC 10081;;; +NGC6011;G;15:46:32.89;+72:10:09.2;UMi;1.77;0.48;108;14.50;;11.03;10.41;10.09;23.49;Sb;;;;;;;;2MASX J15463291+7210090,MCG +12-15-016,PGC 056008,UGC 10047;;; +NGC6012;G;15:54:13.94;+14:36:04.5;Se1;1.77;1.27;164;13.21;12.42;10.45;9.79;9.54;22.65;SBab;;;;;;;;2MASX J15541394+1436044,IRAS 15519+1444,MCG +03-40-059,PGC 056334,UGC 10083;;; +NGC6013;G;15:52:52.84;+40:38:48.2;Her;1.44;0.76;174;14.16;13.63;11.54;10.97;10.60;23.49;SBb;;;;;;;;2MASX J15525286+4038484,MCG +07-33-004,PGC 056287,SDSS J155252.83+403848.2,SDSS J155252.84+403848.1,SDSS J155252.84+403848.2,UGC 10080;;; +NGC6014;G;15:55:57.40;+05:55:54.8;Se1;1.75;1.42;20;13.80;;10.73;10.13;9.80;23.67;S0;;;;;;4586;;2MASX J15555738+0555546,IRAS 15535+0604,MCG +01-41-002,PGC 056413,UGC 10091;;; +NGC6015;G;15:51:25.23;+62:18:36.1;Dra;5.81;2.57;28;11.69;11.14;9.31;8.71;8.47;23.48;Sc;;;;;;;;2MASX J15512523+6218361,IRAS 15506+6227,MCG +10-23-003,PGC 056219,UGC 10075;;; +NGC6016;G;15:55:54.87;+26:57:59.4;CrB;0.98;0.48;25;15.10;;12.18;11.60;11.41;23.07;SABc;;;;;;;;2MASX J15555482+2657587,MCG +05-38-001,PGC 056410,SDSS J155554.86+265759.4,SDSS J155554.87+265759.4,UGC 10096;;; +NGC6017;G;15:57:15.44;+05:59:54.2;Se1;0.80;0.75;140;13.80;;10.78;10.05;9.81;22.19;E;;;;;;;;2MASX J15571548+0559541,MCG +01-41-003,PGC 056475,SDSS J155715.44+055954.1,UGC 10098;;; +NGC6018;G;15:57:29.77;+15:52:21.4;Se1;1.32;0.62;67;14.60;;11.11;10.48;10.14;23.62;S0-a;;;;;;;;2MASX J15572978+1552213,IRAS 15551+1600,MCG +03-41-006,PGC 056481,SDSS J155729.77+155221.4,UGC 10101;;This may also be IC 1150.; +NGC6019;G;15:52:09.14;+64:50:26.4;Dra;0.43;0.39;135;15.70;;13.33;12.62;12.36;22.85;;;;;;;;;2MASX J15520910+6450264,PGC 056265;;; +NGC6020;G;15:57:08.14;+22:24:16.5;Se1;1.74;1.10;136;14.50;;10.68;10.01;9.76;23.81;E;;;;;;1148;;2MASX J15570811+2224163,MCG +04-38-002,PGC 056467,SDSS J155708.13+222416.4,SDSS J155708.13+222416.5,UGC 10100;;; +NGC6021;G;15:57:30.69;+15:57:21.8;Se1;1.55;0.91;158;14.10;;10.93;10.19;9.94;23.86;E;;;;;;;;2MASX J15573067+1557223,MCG +03-41-005,PGC 056482,SDSS J155730.68+155721.7,UGC 10102;;; +NGC6022;G;15:57:47.77;+16:16:56.3;Se1;0.80;0.57;62;15.20;;12.77;12.09;11.98;23.32;SBbc;;;;;;;;2MASX J15574774+1616563,MCG +03-41-009,PGC 056495,SDSS J155747.76+161656.3,SDSS J155747.77+161656.3;;; +NGC6023;G;15:57:49.62;+16:18:36.7;Se1;1.61;1.16;67;14.70;;10.99;10.33;10.00;24.13;E;;;;;;;;2MASX J15574962+1618363,MCG +03-41-010,PGC 056492,SDSS J155749.61+161836.6,SDSS J155749.62+161836.7,UGC 10106;;; +NGC6024;G;15:53:07.87;+64:55:05.0;Dra;0.98;0.73;130;15.10;;11.21;10.54;10.18;23.82;E;;;;;;;;2MASX J15530789+6455050,MCG +11-19-026,PGC 056294;;; +NGC6025;OCl;16:03:17.79;-60:25:52.9;TrA;11.40;;;5.26;5.10;;;;;;;;;;;;;C 095,MWSC 2347;;; +NGC6026;PN;16:01:20.91;-34:32:39.2;Lup;0.67;;;13.20;12.90;13.05;13.04;13.04;;;;13.35;13.29;;;;;ESO 389-007,IRAS 15581-3424,PN G341.6+13.7;;; +NGC6027;G;15:59:12.54;+20:45:48.1;Se1;1.64;1.02;18;13.40;;11.24;10.47;10.59;25.05;S0-a;;;;;;;;2MASX J15591254+2045483,MCG +04-38-008,PGC 056575,SDSS J155912.53+204548.0,UGC 10116 NED01;;"Called 'NGC 6027A' in MCG; VV has two (case sensitive) entries for VV 115A."; +NGC6027A;G;15:59:11.14;+20:45:17.5;Se1;1.79;1.73;75;13.40;;11.50;10.80;10.53;24.78;S0-a;;;;;;;;2MASX J15591112+2045163,MCG +04-38-006,PGC 056576,SDSS J155911.13+204517.4,UGC 10116 NED02;;VV has two (case sensitive) entries for VV 115a.; +NGC6027B;G;15:59:10.83;+20:45:43.9;Se1;0.91;0.41;;13.40;;;;;23.72;S0;;;;;;;;MCG +04-38-005,PGC 056584,SDSS J155910.83+204543.8,UGC 10116 NED03;;; +NGC6027C;G;15:59:11.87;+20:44:51.4;Se1;1.10;0.22;174;16.89;;;;;24.22;SBc;;;;;;;;MCG +04-38-007,PGC 056578,SDSS J155911.86+204451.4,SDSS J155911.87+204451.4,UGC 10116 NED04;;; +NGC6027D;G;15:59:12.90;+20:45:35.7;Se1;0.30;0.26;110;16.61;;13.51;14.57;12.70;22.46;Scd;;;;;;;;2MASX J15591290+2045353,MCG +04-38-009,PGC 056580,SDSS J155912.89+204535.7,UGC 10116 NED05;;; +NGC6027E;G;15:59:14.48;+20:45:57.3;Se1;2.28;1.29;81;16.50;;;;;24.87;S0-a;;;;;;;;MCG +04-38-010,PGC 056579,UGC 10116 NED06;;; +NGC6028;G;16:01:28.96;+19:21:35.6;Her;1.31;1.18;54;14.80;;11.72;11.02;10.77;23.68;S0-a;;;;;6046;;;2MASX J16012897+1921356,MCG +03-41-043,PGC 056716,SDSS J160128.95+192135.5,UGC 10135;;; +NGC6029;G;16:01:58.87;+12:34:26.4;Se1;0.80;0.45;14;;;12.24;11.62;11.36;23.98;S0-a;;;;;;;;PGC 056756,SDSS J160158.86+123426.4,SDSS J160158.87+123426.4;;"Star superposed 5"" to the north of the nucleus."; +NGC6030;G;16:01:51.42;+17:57:27.0;Her;1.29;0.94;43;14.50;;10.76;10.08;9.83;23.16;S0;;;;;;;;2MASX J16015137+1757266,MCG +03-41-044,PGC 056750,SDSS J160151.41+175726.9,SDSS J160151.42+175727.0,UGC 10139;;; +NGC6031;OCl;16:07:35.38;-54:00:53.8;Nor;4.80;;;8.92;8.50;;;;;;;;;;;;;MWSC 2352;;; +NGC6032;G;16:03:01.12;+20:57:21.4;Her;0.83;0.51;1;15.00;;11.29;10.99;10.47;22.33;Sb;;;;;;;;2MASX J16030112+2057215,IRAS 16008+2105,MCG +04-38-016,PGC 056842,SDSS J160301.12+205721.3,SDSS J160301.12+205721.4,UGC 10148;;; +NGC6033;G;16:04:27.98;-02:07:15.5;Se1;1.00;0.91;144;15.30;;10.82;10.05;9.69;23.55;Sbc;;;;;;;;2MASX J16042798-0207153,MCG +00-41-003,PGC 056941,UGC 10159;;; +NGC6034;G;16:03:32.08;+17:11:55.3;Her;1.15;0.83;64;15.20;;11.50;10.76;10.46;23.73;E;;;;;;;;2MASX J16033205+1711546,MCG +03-41-062,PGC 056877,SDSS J160332.08+171155.2,SDSS J160332.08+171155.3;;; +NGC6035;G;16:03:24.18;+20:53:28.5;Her;0.97;0.85;137;14.70;;11.54;10.90;10.60;22.77;Sc;;;;;;;;2MASX J16032417+2053285,MCG +04-38-018,PGC 056864,SDSS J160324.17+205328.4,SDSS J160324.17+205328.5,UGC 10154;;; +NGC6036;G;16:04:30.75;+03:52:06.5;Se1;1.04;0.39;146;14.40;;10.50;9.74;9.44;22.46;S0-a;;;;;;;;2MASX J16043073+0352069,MCG +01-41-010,PGC 056950,SDSS J160430.74+035206.5,UGC 10163;;; +NGC6037;G;16:04:29.90;+03:48:54.5;Se1;0.75;0.67;64;15.20;;12.08;11.38;11.14;23.43;S0-a;;;;;;;;2MASX J16042987+0348549,MCG +01-41-009,PGC 056947,SDSS J160429.89+034854.4,SDSS J160429.90+034854.4,SDSS J160429.90+034854.5;;; +NGC6038;G;16:02:40.55;+37:21:34.2;CrB;1.21;1.05;63;14.40;;11.29;10.55;10.21;23.30;Sc;;;;;;;;2MASX J16024055+3721338,IRAS 16008+3729,MCG +06-35-026,PGC 056812,SDSS J160240.54+372134.1,SDSS J160240.54+372134.2,SDSS J160240.55+372134.1,SDSS J160240.55+372134.2,UGC 10149;;; +NGC6039;G;16:04:39.57;+17:42:03.1;Her;1.00;0.81;46;15.60;;11.88;11.24;10.93;23.80;E-S0;;;;;6042;;;2MASX J16043953+1742032,MCG +03-41-079,PGC 056972,SDSS J160439.56+174203.0,SDSS J160439.57+174203.1;;; +NGC6040;GPair;16:04:26.63;+17:44:42.5;Her;1.41;0.44;47;14.60;;11.90;11.19;10.95;22.83;SABc;;;;;;;;IRAS 16021+1753,PGC 056932,UGC 10165;;Called 'NGC 6039' in VV and Arp. Called 'IC 1170' in MCG.; +NGC6041;GPair;16:04:35.28;+17:43:09.3;Her;1.48;1.17;44;14.90;;11.00;10.33;9.97;23.93;E-S0;;;;;;;;MCG +03-41-078,PGC 056962,UGC 10170;;Part of the GTrpl CGCG 1602.3+1751.; +NGC6042;Dup;16:04:39.57;+17:42:03.1;Her;;;;;;;;;;;;;;;6039;;;;;; +NGC6043;GPair;16:05:01.20;+17:46:26.0;Her;0.74;0.50;35;15.40;;;;;23.40;E-S0;;;;;;;;MCG +03-41-086,PGC 057019;;; +NGC6044;G;16:04:59.68;+17:52:13.3;Her;0.65;0.60;150;15.30;;12.15;11.49;11.17;23.12;S0;;;;;;1172;;2MASX J16045968+1752128,MCG +03-41-084,PGC 057015,SDSS J160459.67+175213.2,SDSS J160459.68+175213.3;;; +NGC6045;G;16:05:07.89;+17:45:27.6;Her;1.40;0.32;78;14.80;;11.65;10.88;10.54;23.23;Sc;;;;;;;;2MASX J16050788+1745278,IRAS 16028+1753,MCG +03-41-088,PGC 057031,SDSS J160507.88+174527.6,SDSS J160507.89+174527.6,UGC 10177;;; +NGC6046;Dup;16:01:28.96;+19:21:35.6;Her;;;;;;;;;;;;;;;6028;;;;;; +NGC6047;G;16:05:08.99;+17:43:47.6;Her;1.18;0.73;117;15.40;;11.50;10.84;10.61;23.71;E;;;;;;;;2MASX J16050900+1743478,MCG +03-41-087,PGC 057033,SDSS J160508.98+174347.6;;; +NGC6048;G;15:57:30.25;+70:41:20.8;UMi;1.95;1.32;137;13.60;;10.57;9.89;9.64;23.88;E;;;;;;;;2MASX J15573014+7041207,MCG +12-15-038,PGC 056484,UGC 10124;;; +NGC6049;*;16:05:37.93;+08:05:46.5;Se1;;;;6.36;6.27;6.08;6.08;5.99;;;;;;;;;;BD +08 3134,HD 144426,HIP 078840,TYC 945-1488-1;;; +NGC6050;G;16:05:23.37;+17:45:25.8;Her;0.86;0.57;114;14.90;;12.31;11.50;11.32;23.47;Sc;;;;;;;;2MASX J16052336+1745258,MCG +03-41-092,PGC 057058,SDSS J160523.36+174525.8,SDSS J160523.37+174525.8,UGC 10186 NED01;;Component 'b)' in UGC notes.; +NGC6050B;G;16:05:22.22;+17:45:15.1;Her;0.62;0.42;9;15.00;;;;;23.43;Sc;;;;;;1179;;MCG +03-41-093,PGC 057053,SDSS J160522.21+174515.0,SDSS J160522.22+174515.1,UGC 10186 NED02;;Component 'a)' in UGC notes.; +NGC6051;G;16:04:56.67;+23:55:57.7;Se1;2.69;0.79;166;14.90;;10.45;9.77;9.49;25.09;E;;;;;;;;2MASX J16045670+2355583,MCG +04-38-021,PGC 057006,SDSS J160456.66+235557.6,UGC 10178;;; +NGC6052;GPair;16:05:12.99;+20:32:32.5;Her;1.20;;;;;;;;;;;;;;6064;;;MCG +04-38-022,UGC 10182;;One of two 6cm sources associated with [WB92] 1603+2037;Diameter of the group inferred by the author. +NGC6052 NED01;G;16:05:12.87;+20:32:32.6;Her;0.83;0.65;5;13.44;13.00;11.58;10.87;10.68;21.57;;;;;;;;;2MASX J16051287+2032326,IRAS 16030+2040,MCG +04-38-022 NED01,PGC 057039,UGC 10182 NED01;;; +NGC6052 NED02;G;16:05:13.23;+20:32:32.7;Her;0.69;0.30;2;14.39;;;;;22.60;Scd;;;;;;;;MCG +04-38-022 NED02,PGC 200329,UGC 10182 NED02;;;B-Mag taken from LEDA +NGC6053;G;16:05:39.65;+18:09:51.7;Her;0.68;0.52;135;15.70;;12.41;11.51;11.41;23.63;E;;;;;6057;;;2MASX J16053963+1809518,MCG +03-41-106,PGC 057090,SDSS J160539.64+180951.6,SDSS J160539.65+180951.6,SDSS J160539.66+180951.7;;; +NGC6054;G;16:05:38.15;+17:46:04.4;Her;0.83;0.48;71;15.60;;12.00;11.31;10.99;23.66;E;;;;;;1183;;2MASX J16053813+1746048,MCG +03-41-103,PGC 057086,SDSS J160538.14+174604.4,SDSS J160538.15+174604.4,UGC 10192 NOTES01;;Misidentified as IC 1184 in CGCG and in several papers referring to it.; +NGC6055;G;16:05:32.56;+18:09:34.5;Her;1.22;0.69;41;15.40;;11.59;10.93;10.61;24.05;S0-a;;;;;;;;2MASX J16053254+1809348,MCG +03-41-101,PGC 057076,SDSS J160532.56+180934.4,SDSS J160532.56+180934.5,UGC 10191;;; +NGC6056;G;16:05:31.28;+17:57:49.1;Her;0.98;0.59;56;15.10;;11.64;10.91;10.59;23.58;S0-a;;;;;;1176;;2MASX J16053126+1757488,MCG +03-41-100,PGC 057075,SDSS J160531.28+175749.0,SDSS J160531.28+175749.1;;; +NGC6057;Dup;16:05:39.65;+18:09:51.7;Her;;;;;;;;;;;;;;;6053;;;;;; +NGC6058;PN;16:04:26.54;+40:40:59.0;Her;0.38;;;13.30;12.90;;;;;;12.37;13.55;13.91;;;;UCAC2 45993562;IRAS 16027+4049,PN G064.6+48.2,SDSS J160426.54+404058.9;;; +NGC6059;Other;16:07:13.31;-06:24:46.7;Oph;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6060;G;16:05:51.98;+21:29:05.9;Her;1.89;1.02;103;14.30;;10.29;9.57;9.22;23.70;SABc;;;;;;;;2MASX J16055197+2129059,IRAS 16036+2137,MCG +04-38-025,PGC 057110,SDSS J160551.99+212905.6,UGC 10196;;; +NGC6061;G;16:06:16.03;+18:14:59.8;Her;1.13;0.95;94;15.00;15.00;11.31;10.64;10.30;23.73;E-S0;;;;;;;;2MASX J16061598+1814592,MCG +03-41-118,PGC 057137,SDSS J160616.02+181459.8,SDSS J160616.03+181459.8,UGC 10199;;; +NGC6062;G;16:06:22.82;+19:46:40.7;Her;1.19;0.79;21;14.40;;11.98;11.40;11.13;23.08;Sbc;;;;;;;;2MASX J16062283+1946402,IRAS 16041+1954,MCG +03-41-125,PGC 057145,SDSS J160622.82+194640.6,SDSS J160622.82+194640.7,UGC 10202;;; +NGC6062B;G;16:06:18.97;+19:45:47.7;Her;0.54;0.49;150;16.00;;13.78;13.17;12.93;23.43;Sc;;;;;;;;2MASX J16061893+1945472,MCG +03-41-122,PGC 057146,SDSS J160618.97+194547.6;;; +NGC6063;G;16:07:12.99;+07:58:44.4;Se1;1.63;0.85;157;14.10;;11.39;10.72;10.55;23.24;Sc;;;;;;;;2MASX J16071296+0758444,MCG +01-41-012,PGC 057205,SDSS J160712.99+075844.3,SDSS J160713.00+075844.4,UGC 10210;;; +NGC6064;Dup;16:05:12.99;+20:32:32.5;Her;;;;;;;;;;;;;;;6052;;;;;; +NGC6065;G;16:07:22.96;+13:53:16.5;Se1;0.98;0.94;150;15.00;;11.44;10.74;10.54;23.53;E-S0;;;;;;;;2MASX J16072297+1353167,MCG +02-41-008,PGC 057215,SDSS J160722.95+135316.4,SDSS J160722.95+135316.5;;; +NGC6066;G;16:07:35.35;+13:56:37.4;Se1;1.00;0.77;112;15.20;;11.47;10.67;10.56;23.80;E;;;;;;;;2MASX J16073534+1356377,PGC 057230,SDSS J160735.34+135637.3;;; +NGC6067;OCl;16:13:11.05;-54:13:08.2;Nor;8.10;;;6.21;5.60;;;;;;;;;;;;;MWSC 2370;;; +NGC6068;G;15:55:25.99;+78:59:48.4;UMi;1.29;0.79;158;13.66;13.01;10.84;10.20;9.95;21.64;SBbc;;;;;;;;2MASX J15552594+7859485,MCG +13-11-019,PGC 056388,UGC 10126;;; +NGC6068A;G;15:54:47.51;+78:59:06.4;UMi;0.94;0.35;1;14.93;14.10;;;;23.26;S0;;;;;;;;2MASX J15544753+7859066,MCG +13-11-017,PGC 056363,UGC 10126 NOTES01;;; +NGC6069;G;16:07:41.64;+38:55:50.7;CrB;1.09;1.02;140;15.50;;11.59;10.91;10.74;24.12;E;;;;;;;;2MASX J16074160+3855507,MCG +07-33-043,PGC 057237,SDSS J160741.64+385550.6,SDSS J160741.64+385550.7,SDSS J160741.65+385550.7;;; +NGC6070;G;16:09:58.69;+00:42:33.5;Se1;3.49;1.84;63;12.10;;9.70;9.02;8.75;23.33;Sc;;;;;;;;2MASX J16095868+0042335,IRAS 16074+0050,MCG +00-41-004,PGC 057345,UGC 10230;;; +NGC6071;G;16:02:07.03;+70:25:01.3;UMi;0.75;0.56;105;14.90;;11.53;10.85;10.59;;E;;;;;;;;2MASX J16020708+7025018,MCG +12-15-047,PGC 056767;;;Diameters and position angle taken from Simbad. +NGC6072;PN;16:12:58.20;-36:13:48.0;Sco;1.17;;;14.10;11.70;;;;;;;19.31;;;;;;2MASX J16125713-3613263,ESO 389-015,IRAS 16097-3606,PN G342.1+10.8;;; +NGC6073;G;16:10:10.85;+16:41:58.6;Her;1.31;0.65;127;14.50;;11.34;10.91;10.51;23.05;Sc;;;;;;;;2MASX J16101083+1641582,IRAS 16078+1649,MCG +03-41-139,PGC 057353,SDSS J161010.84+164158.5,SDSS J161010.85+164158.6,UGC 10235;;HOLM 731B is a star.; +NGC6074;GPair;16:11:17.00;+14:15:25.0;Her;0.80;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC6074 NED01;G;16:11:16.76;+14:15:18.1;Her;0.46;0.36;45;15.30;;;;;22.77;E;;;;;;;;MCG +02-41-015,PGC 057419,SDSS J161116.76+141518.1;;; +NGC6074 NED02;G;16:11:17.22;+14:15:31.5;Her;0.85;0.71;0;15.30;;11.27;10.58;10.62;23.61;E;;;;;;;;2MASX J16111723+1415312,MCG +02-41-016,PGC 057418,SDSS J161117.22+141531.5;;; +NGC6075;G;16:11:22.59;+23:57:54.0;Her;1.03;0.80;93;15.30;;11.37;10.66;10.43;23.76;S0;;;;;;4594;;2MASX J16112256+2357545,MCG +04-38-038,PGC 057426,SDSS J161122.58+235754.0,SDSS J161122.59+235754.0;;; +NGC6076;GPair;16:11:13.40;+26:52:21.0;CrB;0.80;;;;;;;;;;;;;;;;;MCG +05-38-023,UGC 10253;;;Diameter of the group inferred by the author. +NGC6076 NED01;G;16:11:13.01;+26:52:19.3;CrB;1.00;0.46;62;15.40;;11.73;11.03;10.73;23.90;;;;;;6076SW;;;2MASX J16111299+2652195,MCG +05-38-023 NED01,PGC 057409,UGC 10253 NED01;;; +NGC6076 NED02;G;16:11:13.80;+26:52:24.0;CrB;;;;15.40;;;;;;;;;;;6076NE;;;MCG +05-38-023 NED02,PGC 200331,UGC 10253 NED02;;;No diameter data available in LEDA +NGC6077;G;16:11:14.12;+26:55:24.3;CrB;1.16;1.09;45;14.90;;11.32;10.59;10.29;23.96;E;;;;;;;;2MASX J16111411+2655245,MCG +05-38-024,PGC 057408,SDSS J161114.11+265524.2,SDSS J161114.11+265524.3,UGC 10254;;; +NGC6078;G;16:12:05.45;+14:12:31.6;Her;0.93;0.48;15;14.60;;10.92;10.29;10.10;23.62;E;;;;;;;;2MASX J16120546+1412317,MCG +02-41-017,PGC 057460,SDSS J161205.44+141231.6;;; +NGC6079;G;16:04:29.21;+69:39:56.8;Dra;1.37;0.94;150;13.90;;10.90;10.19;9.93;23.39;E;;;;;;1200;;2MASX J16042924+6939568,MCG +12-15-050,PGC 056946,UGC 10206;;; +NGC6080;GPair;16:12:59.00;+02:10:45.0;Se1;1.30;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC6080 NED01;G;16:12:58.64;+02:10:38.2;Se1;1.23;1.17;30;13.77;;;;;23.38;Sab;;;;;;;;2MASX J16125818+0210098,IRAS 16104+0218,MCG +00-41-007,PGC 057509,UGC 10268;;;B-Mag taken from LEDA +NGC6080 NED02;G;16:12:59.46;+02:10:51.8;Se1;1.20;0.66;179;14.10;;11.98;11.15;11.02;24.57;S0;;;;;;;;2MASX J16125951+0210528,MCG +00-41-007 NOTES01,PGC 093131,UGC 10268 NOTES01;;; +NGC6081;G;16:12:56.86;+09:52:01.6;Her;1.55;0.56;131;14.40;;10.72;9.98;9.74;23.95;S0;;;;;;1202;;2MASX J16125685+0952016,MCG +02-41-019,PGC 057506,SDSS J161256.85+095201.5,UGC 10272;;; +NGC6082;Other;16:15:27.56;-34:13:57.9;Sco;;;;;;;;;;;;;;;;;;;;"Five Galactic stars. Ident as N6082 is uncertain; N6082 may be IC 4597."; +NGC6083;G;16:13:12.66;+14:11:07.5;Her;0.79;0.56;33;15.20;;12.09;11.37;11.11;23.35;SBbc;;;;;;;;MCG +02-41-020,PGC 057520;;; +NGC6084;G;16:14:16.72;+17:45:26.8;Her;1.24;0.79;29;15.40;;11.51;10.83;10.56;23.90;Sa;;;;;;;;2MASX J16141669+1745262,MCG +03-41-143,PGC 057575,SDSS J161416.72+174526.7,UGC 10291;;; +NGC6085;G;16:12:35.22;+29:21:54.3;CrB;1.31;1.09;161;14.50;;10.99;10.26;10.03;23.55;Sa;;;;;;;;2MASX J16123523+2921536,MCG +05-38-034,PGC 057486,SDSS J161235.22+292154.2,SDSS J161235.23+292154.3,UGC 10269;;; +NGC6086;G;16:12:35.53;+29:29:05.2;CrB;1.90;1.23;2;14.80;;11.02;10.23;9.97;24.06;E;;;;;;;;2MASX J16123554+2929054,MCG +05-38-035,PGC 057482,SDSS J161235.53+292905.2,UGC 10270;;; +NGC6087;OCl;16:18:50.58;-57:56:04.5;Nor;10.20;;;5.85;5.40;;;;;;;;;;;;;C 089,MWSC 2382;S Nor Cluster;; +NGC6088;GPair;16:10:43.50;+57:27:51.0;Dra;1.10;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC6088 NED01;G;16:10:42.63;+57:27:59.5;Dra;1.07;0.62;170;14.70;;11.68;10.79;10.89;23.04;E?;;;;;;;;2MASX J16104265+5727593,MCG +10-23-029,PGC 057383,SDSS J161042.51+572759.8;;; +NGC6088 NED02;G;16:10:44.38;+57:27:43.7;Dra;0.78;0.72;96;14.10;;;;;22.32;E-S0;;;;;;;;MCG +10-23-030,PGC 057384;;; +NGC6089;GPair;16:12:40.70;+33:02:11.0;CrB;1.10;;;;;;;;;;;;;;;;;MCG +06-36-001;;Listed in CGCG special map in vol III, p 87 (SM1-002).;Diameter of the group inferred by the author. +NGC6089 NED01;G;16:12:40.15;+33:02:05.6;CrB;0.85;0.68;17;15.00;;11.27;10.59;10.34;23.18;S0;;;;;;;;2MASX J16124014+3302054,MCG +06-36-001 NED01,PGC 057491,SDSS J161240.14+330205.6,SDSS J161240.15+330205.6;;; +NGC6089 NED02;G;16:12:41.34;+33:02:15.8;CrB;1.41;0.71;45;16.50;;11.92;11.55;10.86;23.88;S?;;;;;;;;2MASX J16124129+3302158,MCG +06-36-001 NED02,SDSS J161241.33+330215.7,SDSS J161241.34+330215.7,SDSS J161241.34+330215.8;;; +NGC6090;GPair;16:11:40.70;+52:27:24.0;Dra;0.80;;;;;;;;;;;;;;;;;MCG +09-26-064,UGC 10267;;;Diameter of the group inferred by the author. +NGC6090 NED01;G;16:11:40.33;+52:27:23.7;Dra;0.85;0.74;96;14.44;;;;;23.02;Sa;;;;;;;;MCG +09-26-064 NED01,PGC 200335,SDSS J161140.31+522723.1,UGC 10267 NED01;;;B-Mag taken from LEDA +NGC6090 NED02;G;16:11:40.82;+52:27:26.9;Dra;0.44;0.19;;14.00;;;;;20.99;Sab;;;;;;;;2MASX J16114086+5227270,IRAS 16104+5235,MCG +09-26-064 NED02,PGC 057437,SDSS J161140.80+522727.0,SDSS J161140.81+522726.9,SDSS J161140.81+522727.0,SDSS J161140.81+522727.2,SDSS J161140.82+522726.9UGC 10267 NED02;;; +NGC6091;G;16:07:52.99;+69:54:17.2;UMi;0.93;0.66;113;14.70;;11.65;10.96;10.77;23.55;E;;;;;;;;2MASX J16075297+6954175,MCG +12-15-054,PGC 057242;;; +NGC6092;**;16:14:04.60;+28:07:32.2;CrB;;;;;;;;;;;;;;;;;;;;; +NGC6093;GCl;16:17:02.51;-22:58:30.4;Sco;5.70;;;;7.30;;;;;;;;;080;;;;MWSC 2376;;;V-mag taken from LEDA +NGC6094;G;16:06:33.90;+72:29:39.8;UMi;1.85;1.38;113;14.60;;11.10;10.48;10.13;24.49;S0;;;;;;;;2MASX J16063392+7229398,MCG +12-15-052,PGC 057167,UGC 10228;;; +NGC6095;G;16:11:10.97;+61:16:04.7;Dra;1.90;1.25;154;14.50;;10.81;10.17;9.95;23.77;E-S0;;;;;;;;2MASX J16111100+6116045,MCG +10-23-033,PGC 057411,SDSS J161110.97+611604.6,UGC 10265;;; +NGC6096;G;16:14:46.70;+26:33:31.8;Her;0.99;0.50;124;15.30;;12.19;11.44;11.30;23.65;Sb;;;;;;;;2MASX J16144671+2633313,MCG +05-38-044,PGC 057598,SDSS J161446.69+263331.8,SDSS J161446.70+263331.8;;HOLM 735B does not exist (it is probably a plate defect).; +NGC6097;G;16:14:26.17;+35:06:33.0;CrB;1.12;0.59;159;14.90;;11.26;10.53;10.25;23.64;S0-a;;;;;;;;2MASX J16142614+3506328,MCG +06-36-007,PGC 057583,SDSS J161426.16+350632.9,SDSS J161426.17+350632.9,SDSS J161426.17+350633.0;;; +NGC6098;G;16:15:34.18;+19:27:43.1;Her;1.56;1.10;154;14.60;;;;;24.20;E;;;;;;;;MCG +03-41-145,PGC 057634,SDSS J161534.18+192743.0,UGC 10299 NED01;;; +NGC6099;G;16:15:35.56;+19:27:12.2;Her;1.42;0.97;139;14.60;;11.17;10.45;10.22;24.73;E;;;;;;;;2MASX J16153554+1927123,MCG +03-41-146,PGC 057640,SDSS J161535.55+192712.1,SDSS J161535.55+192712.2,SDSS J161535.56+192712.1,UGC 10299 NED02;;; +NGC6100;G;16:16:52.37;+00:50:28.7;Se1;1.42;0.99;112;13.90;;11.64;10.95;10.84;24.04;S0-a;;;;;;;;2MASX J16165235+0050284,MCG +00-41-012,PGC 057706,UGC 10307;;; +NGC6101;GCl;16:25:48.57;-72:12:05.6;Aps;4.50;;;10.90;10.08;;;;;;;;;;;;;C 107,MWSC 2404;;; +NGC6102;G;16:15:36.92;+28:09:30.9;CrB;0.78;0.57;68;15.40;;12.70;12.07;11.87;23.23;Sbc;;;;;;;;2MASX J16153687+2809307,MCG +05-38-047,PGC 057639,SDSS J161536.91+280930.9,UGC 10300;;; +NGC6103;G;16:15:44.62;+31:57:50.2;CrB;0.72;0.45;77;14.40;;11.98;11.35;11.02;22.11;Sc;;;;;;;;2MASX J16154462+3157507,IRAS 16138+3205,MCG +05-38-049,PGC 057648,SDSS J161544.61+315750.2,SDSS J161544.62+315750.2,UGC 10302;;; +NGC6104;G;16:16:30.69;+35:42:29.0;CrB;0.87;0.69;62;18.17;17.35;11.60;10.97;10.68;22.52;SBb;;;;;;;;2MASX J16163069+3542291,IRAS 16146+3549,MCG +06-36-011,PGC 057684,SDSS J161630.67+354228.8,SDSS J161630.67+354228.9,SDSS J161630.68+354228.9,UGC 10309;;; +NGC6105;G;16:17:09.31;+34:52:44.0;CrB;0.71;0.57;110;15.30;;11.86;11.27;10.92;23.38;SBa;;;;;;;;2MASX J16170929+3452439,MCG +06-36-013,PGC 057716;;; +NGC6106;G;16:18:47.17;+07:24:39.2;Her;2.19;1.18;139;13.40;;10.51;9.83;9.62;22.73;Sc;;;;;;;;2MASX J16184720+0724396,IRAS 16163+0731,MCG +01-41-016,PGC 057799,SDSS J161847.16+072439.1,UGC 10328;;; +NGC6107;G;16:17:20.13;+34:54:07.0;CrB;1.59;1.02;36;14.70;;;;;24.69;E;;;;;;;;MCG +06-36-014,PGC 057728,UGC 10311;;; +NGC6108;G;16:17:25.63;+35:08:08.6;CrB;0.95;0.64;105;15.40;;11.81;11.16;10.86;23.44;SBab;;;;;;;;2MASX J16172560+3508084,MCG +06-36-015,PGC 057734,SDSS J161725.63+350808.5,SDSS J161725.63+350808.6,SDSS J161725.64+350808.7;;; +NGC6109;G;16:17:40.52;+35:00:15.4;CrB;1.02;0.97;85;14.90;;11.29;10.57;10.33;22.81;E;;;;;;;;2MASX J16174059+3500154,MCG +06-36-016,PGC 057748,SDSS J161740.53+350015.1,SDSS J161740.53+350015.2,SDSS J161740.54+350015.1,UGC 10316;;; +NGC6110;G;16:17:43.97;+35:05:13.1;CrB;0.69;0.33;105;15.60;;12.36;11.67;11.40;23.16;Sa;;;;;;;;2MASX J16174401+3505134,PGC 057751,SDSS J161743.96+350513.0,SDSS J161743.97+350513.0,SDSS J161743.97+350513.1,SDSS J161743.97+350513.2;;; +NGC6111;GPair;16:14:22.80;+63:15:40.0;Dra;0.85;0.72;12;15.20;;11.74;11.00;10.70;23.53;E;;;;;;;;2MASX J16142217+6315400,MCG +11-20-007,PGC 057579,SDSS J161422.23+631539.9;;; +NGC6112;G;16:18:00.56;+35:06:37.0;CrB;0.78;0.73;135;14.80;;11.64;11.01;10.71;23.20;E;;;;;;;;2MASX J16180057+3506367,MCG +06-36-017,PGC 057762,SDSS J161800.56+350637.0,SDSS J161800.57+350637.0;;; +NGC6113;G;16:19:10.54;+14:08:01.1;Her;1.23;0.58;153;14.80;;11.32;10.57;10.24;23.73;S0;;;;;;;;2MASX J16191057+1408010,IRAS 16168+1415,MCG +02-41-024 NED01,PGC 057807,SDSS J161910.53+140801.1,SDSS J161910.54+140801.1;;; +NGC6114;G;16:18:23.63;+35:10:27.5;CrB;0.93;0.53;112;15.30;;12.16;11.46;11.40;23.36;Sab;;;;;;;;2MASX J16182360+3510277,MCG +06-36-019,PGC 057784,SDSS J161823.62+351027.4,SDSS J161823.63+351027.4,SDSS J161823.63+351027.5;;; +NGC6115;OCl;16:24:26.38;-51:56:53.7;Nor;;;;10.29;9.80;;;;;;;;;;;;;MWSC 2402;;; +NGC6116;G;16:18:54.60;+35:09:14.3;CrB;0.94;0.58;15;15.30;;11.77;11.09;10.87;23.25;SABb;;;;;;;;2MASX J16185458+3509138,MCG +06-36-021,PGC 057800,SDSS J161854.59+350914.2,SDSS J161854.60+350914.1,SDSS J161854.60+350914.2,SDSS J161854.60+350914.3,UGC 10336;;; +NGC6117;G;16:19:18.16;+37:05:42.8;CrB;1.05;0.87;84;14.70;;12.30;11.59;11.25;23.31;Sc;;;;;;;;2MASX J16191819+3705430,MCG +06-36-022,PGC 057816,SDSS J161918.15+370542.7,SDSS J161918.16+370542.8,UGC 10338;;HOLM 737C,D are stars.; +NGC6118;G;16:21:48.62;-02:17:00.4;Oph;4.45;1.78;59;13.20;;9.72;9.02;8.70;23.65;Sc;;;;;;;;2MASX J16214862-0217003,IRAS 16192-0210,MCG +00-42-002,PGC 057924,SDSS J162148.62-021701.0,UGC 10350;;; +NGC6119;G;16:19:41.97;+37:48:22.7;CrB;0.60;0.46;73;15.40;;13.08;12.84;12.11;22.92;Sc;;;;;;;;2MASX J16194193+3748222,MCG +06-36-026,PGC 057837,SDSS J161941.96+374822.6,SDSS J161941.97+374822.6,SDSS J161941.97+374822.7;;; +NGC6120;G;16:19:48.10;+37:46:28.1;CrB;0.48;0.37;35;14.30;;11.48;10.79;10.47;21.26;Sb;;;;;;;;2MASX J16194809+3746282,IRAS 16180+3753,MCG +06-36-029,PGC 057842,UGC 10343;;HOLM 739B is a star.; +NGC6121;GCl;16:23:35.40;-26:31:31.9;Sco;28.20;;;;5.40;;;;;;;;;004;;;;MWSC 2396;;;V-mag taken from LEDA +NGC6122;G;16:20:09.53;+37:47:53.6;CrB;1.10;0.25;160;15.00;;11.68;10.88;10.58;23.54;Sb;;;;;;;;2MASX J16200955+3747535,MCG +06-36-032,PGC 057858,SDSS J162009.52+374753.5,SDSS J162009.53+374753.6;;; +NGC6123;G;16:17:19.74;+61:56:20.8;Dra;0.91;0.32;4;14.40;;11.43;10.76;10.52;22.66;S0-a;;;;;;;;2MASX J16171975+6156207,MCG +10-23-060,PGC 057729,UGC 10333;;; +NGC6124;OCl;16:25:20.06;-40:39:13.3;Sco;13.50;;;6.70;5.80;;;;;;;;;;;;;C 075,MWSC 2403;;; +NGC6125;G;16:19:11.55;+57:59:03.2;Dra;1.38;1.38;40;13.00;;10.07;9.41;9.13;22.57;E;;;;;6127,6128;;;2MASX J16191155+5759028,MCG +10-23-065,PGC 057812,SDSS J161911.53+575902.8,UGC 10345;;; +NGC6126;G;16:21:27.93;+36:22:35.9;CrB;0.93;0.77;22;14.50;;11.12;10.44;10.11;23.21;E-S0;;;;;;;;2MASX J16212794+3622354,MCG +06-36-035,PGC 057908,SDSS J162127.93+362235.8,UGC 10353;;; +NGC6127;Dup;16:19:11.55;+57:59:03.2;Dra;;;;;;;;;;;;;;;6125;;;;;; +NGC6128;Dup;16:19:11.55;+57:59:03.2;Dra;;;;;;;;;;;;;;;6125;;;;;; +NGC6129;G;16:21:43.27;+37:59:45.7;CrB;0.93;0.84;120;14.70;;11.32;10.65;10.34;23.38;E;;;;;;;;2MASX J16214329+3759454,MCG +06-36-037,PGC 057920,SDSS J162143.26+375945.7,SDSS J162143.27+375945.7;;HOLM 741C is a star.; +NGC6130;G;16:19:33.44;+57:36:53.9;Dra;1.22;0.78;32;14.20;;11.65;10.90;10.70;23.04;Sbc;;;;;;;;2MASX J16193345+5736539,IRAS 16185+5743,MCG +10-23-066,PGC 057828,SDSS J161933.43+573653.8,SDSS J161933.43+573653.9,UGC 10347;;; +NGC6131;G;16:21:52.25;+38:55:56.8;CrB;1.08;1.04;25;14.20;;11.55;10.82;10.66;22.67;SABc;;;;;;;;2MASX J16215222+3855566,IRAS 16201+3902,MCG +07-34-004,PGC 057927,SDSS J162152.24+385556.8,UGC 10356;;; +NGC6132;G;16:23:38.84;+11:47:10.5;Her;1.28;0.43;127;14.80;;11.86;11.18;10.95;23.39;Sab;;;;;;4602;;2MASX J16233880+1147109,IRAS 16213+1153,MCG +02-42-002,PGC 058002,SDSS J162338.83+114710.4,SDSS J162338.84+114710.4,SDSS J162338.84+114710.5,UGC 10363;;; +NGC6133;Other;16:20:17.21;+56:39:08.7;Dra;;;;;;;;;;;;;;;;;;;;"Triple star. Ident as N6133 is uncertain; N6133 may be CGCG 276-012."; +NGC6134;OCl;16:27:46.50;-49:09:04.2;Nor;6.90;;;7.89;7.20;;;;;;;;;;;;;MWSC 2412;;; +NGC6135;G;16:14:24.88;+64:58:57.9;Dra;1.01;0.35;45;14.80;;12.14;11.41;11.21;23.48;;;;;;;;;2MASX J16142487+6458581,IRAS 16139+6506,MCG +11-20-008,PGC 057580;;Identification as NGC 6135 is uncertain.; +NGC6136;G;16:20:59.42;+55:58:13.8;Dra;0.91;0.49;94;15.50;;12.41;11.81;11.56;23.42;Sc;;;;;;;;2MASX J16205942+5558137,MCG +09-27-019,PGC 057892;;; +NGC6137;G;16:23:03.10;+37:55:20.5;CrB;1.78;0.92;180;14.10;;10.51;9.81;9.55;23.51;E;;;;;;;;2MASX J16230308+3755204,MCG +06-36-039,PGC 057966,UGC 10364;;; +NGC6138;G;16:24:54.17;+41:03:02.8;Her;1.02;0.31;105;15.00;;12.47;11.68;11.42;23.56;Sb;;;;;6363;;;2MASX J16245415+4103028,MCG +07-34-020,PGC 058070,SDSS J162454.16+410302.7,SDSS J162454.16+410302.8,SDSS J162454.17+410302.8;;"Identification as N6138 is uncertain; N6138 may be CGCG 224-009."; +NGC6139;GCl;16:27:40.51;-38:50:59.1;Sco;4.50;;;11.03;9.68;6.45;5.75;5.56;;;;;;;;;;2MASX J16273998-3850570,MWSC 2411;;The 2MASS position is west of the cluster's core.; +NGC6140;G;16:20:58.16;+65:23:26.0;Dra;2.09;1.78;83;12.60;;10.47;9.85;9.74;22.46;Sc;;;;;;;;2MASX J16205816+6523259,IRAS 16206+6530,MCG +11-20-012,PGC 057886,UGC 10359;;; +NGC6141;G;16:23:06.41;+40:51:29.9;Her;0.43;0.35;150;15.45;;12.40;11.66;11.53;;SBa;;;;;;;;2MASX J16230639+4051295,SDSS J162306.41+405129.8,SDSS J162306.41+405129.9;;;Diameters and position angle taken from Simbad. +NGC6142;G;16:23:21.07;+37:15:30.2;CrB;1.49;0.48;165;14.80;;11.43;10.74;10.41;23.50;Sb;;;;;;;;2MASX J16232109+3715305,MCG +06-36-041,PGC 057984,SDSS J162321.06+371530.1,SDSS J162321.06+371530.2,SDSS J162321.07+371530.2,UGC 10366;;; +NGC6143;G;16:21:42.29;+55:05:09.8;Dra;1.10;0.99;175;13.90;;11.64;11.06;10.76;23.18;SABb;;;;;;;;2MASX J16214227+5505100,IRAS 16205+5512,MCG +09-27-024,PGC 057919,SDSS J162142.28+550509.7,UGC 10358;;; +NGC6144;GCl;16:27:14.14;-26:01:29.0;Sco;5.40;;;10.55;9.63;;;;;;;;;;;;;MWSC 2409;;This may also be IC 4606.; +NGC6145;G;16:25:02.36;+40:56:47.9;Her;0.98;0.51;2;15.10;;11.78;11.10;10.87;23.12;Sb;;;;;;;;2MASX J16250238+4056478,MCG +07-34-021,PGC 058074,SDSS J162502.36+405647.8,SDSS J162502.36+405647.9;;; +NGC6146;G;16:25:10.36;+40:53:34.3;Her;1.66;1.26;83;13.80;;10.45;9.75;9.49;23.47;E;;;;;;;;2MASX J16251032+4053338,MCG +07-34-024,PGC 058080,SDSS J162510.32+405334.3,UGC 10379;;; +NGC6147;G;16:25:05.84;+40:55:43.6;Her;0.57;0.48;50;16.00;;13.40;12.44;12.57;23.00;SABb;;;;;;;;2MASX J16250583+4055428,MCG +07-34-023,PGC 058077,SDSS J162505.83+405543.5,SDSS J162505.83+405543.6,SDSS J162505.84+405543.5;;; +NGC6148;G;16:27:04.03;+24:05:35.8;Her;0.42;0.24;54;16.48;;13.80;12.98;12.65;23.28;Sb;;;;;;;;2MASX J16270405+2405357,PGC 058162,SDSS J162704.03+240535.7,SDSS J162704.03+240535.8;;; +NGC6149;G;16:27:24.23;+19:35:49.9;Her;1.24;0.43;18;14.80;;11.19;10.52;10.28;23.59;S0;;;;;;;;2MASX J16272427+1935502,MCG +03-42-011,PGC 058183,SDSS J162724.23+193549.8,SDSS J162724.23+193549.9,UGC 10391;;; +NGC6150;G;16:25:50.03;+40:29:18.8;Her;1.61;0.85;74;14.90;;11.12;10.41;10.11;24.27;E;;;;;;;;2MASX J16255000+4029194,MCG +07-34-029,PGC 058105,SDSS J162549.96+402919.3,SDSS J162549.96+402919.4,SDSS J162549.97+402919.3;;; +NGC6151;Other;16:38:24.22;-73:15:08.8;Aps;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC6152;OCl;16:32:45.62;-52:38:38.4;Nor;6.60;;;;8.10;;;;;;;;;;;;;MWSC 2423;;; +NGC6153;PN;16:31:30.64;-40:15:12.4;Sco;0.40;;;11.50;10.90;9.94;9.93;9.06;;;;16.14;;;;;HD 148687;2MASX J16313062-4015123,ESO 331-006,IRAS 16280-4008,PN G341.8+05.4;;; +NGC6154;G;16:25:30.48;+49:50:24.9;Her;1.40;1.00;150;13.60;;11.10;10.40;10.19;23.28;Sa;;;;;;;;2MASX J16253049+4950244,MCG +08-30-012,PGC 058095,SDSS J162530.48+495024.9,SDSS J162530.48+495025.1,UGC 10382;;; +NGC6155;G;16:26:08.34;+48:22:00.5;Her;1.33;0.85;147;13.20;;10.76;10.20;9.97;22.32;SBbc;;;;;;;;2MASX J16260830+4822009,IRAS 16247+4828,MCG +08-30-013,PGC 058115,SDSS J162608.33+482200.4,SDSS J162608.33+482200.5,UGC 10385;;; +NGC6156;G;16:34:52.55;-60:37:07.7;Ara;1.87;1.60;149;12.30;;9.76;9.03;8.70;22.28;Sc;;;;;;;;2MASX J16345255-6037075,ESO 137-033,ESO-LV 137-0330,IRAS 16304-6030,PGC 058536;;Confused HIPASS source; +NGC6157;G;16:25:48.39;+55:21:38.1;Dra;0.90;0.74;19;15.50;;12.07;11.39;11.31;23.99;E;;;;;;;;2MASX J16254836+5521385,MCG +09-27-039,PGC 058101,SDSS J162548.39+552138.1;;; +NGC6158;G;16:27:40.89;+39:22:58.8;Her;1.22;0.99;81;15.50;;11.50;10.83;10.58;23.98;E;;;;;;;;2MASX J16274088+3922588,MCG +07-34-041,PGC 058198,SDSS J162740.88+392258.8;;; +NGC6159;G;16:27:25.23;+42:40:47.0;Her;1.50;1.02;126;15.20;;11.22;10.57;10.23;24.25;E-S0;;;;;;;;2MASX J16272524+4240468,MCG +07-34-038,PGC 058185,SDSS J162725.22+424047.0,SDSS J162725.23+424046.9,SDSS J162725.23+424047.0,UGC 10397;;; +NGC6160;G;16:27:41.13;+40:55:37.2;Her;1.79;1.22;72;14.80;;10.76;10.01;9.78;24.29;E;;;;;;;;2MASX J16274107+4055368,MCG +07-34-042,PGC 058191,PGC 058199,SDSS J162741.12+405537.0,SDSS J162741.12+405537.1,SDSS J162741.13+405537.0,SDSS J162741.13+405537.2,UGC 10400;;; +NGC6161;G;16:28:20.63;+32:48:38.3;Her;0.72;0.26;153;15.74;;12.93;12.15;11.78;22.88;S?;;;;;;;;2MASX J16282062+3248380,IRAS 16264+3255,MCG +06-36-046,PGC 058235,SDSS J162820.56+324834.8;;Multiple SDSS entries describe this object.; +NGC6162;G;16:28:22.37;+32:50:57.6;Her;1.11;0.72;49;15.20;;11.43;10.72;10.43;23.58;S0;;;;;;;;2MASX J16282237+3250580,MCG +06-36-047,PGC 058238,SDSS J162822.37+325057.5,UGC 10403;;; +NGC6163;G;16:28:27.91;+32:50:47.0;Her;0.90;0.61;24;15.40;;11.98;11.22;10.82;23.75;S0;;;;;;;;2MASX J16282791+3250466,MCG +06-36-048,PGC 058250,SDSS J162827.90+325046.9,SDSS J162827.90+325047.0,SDSS J162827.91+325047.0;;; +NGC6164;Neb;16:33:41.84;-48:04:48.2;Ara;1.41;0.60;;7.12;6.71;5.87;5.74;5.64;;;;;;;;;;ESO 226-013,TYC 8329-3343-1;;Part of the bipolar nebula associated with HD 148937 (1995ApJ...450..196S).; +NGC6165;Neb;16:34:03.45;-48:09:01.8;Ara;2.50;0.50;;7.12;6.71;5.87;5.74;5.64;;;;;;;;;;;;Part of the bipolar nebula associated with HD 148937 (1995ApJ...450..196S).; +NGC6166;G;16:28:38.48;+39:33:05.6;Her;2.14;1.54;35;12.78;11.78;10.20;9.49;9.17;23.41;E;;;;;;;;MCG +07-34-060,PGC 058265,UGC 10409;;; +NGC6166B;G;16:28:53.21;+39:33:36.0;Her;0.43;0.35;176;15.70;;13.92;13.27;12.93;22.66;Sc;;;;;;;;2MASX J16285323+3933359,MCG +07-34-076,PGC 058299,SDSS J162853.13+393338.4,SDSS J162853.13+393338.5,SDSS J162853.21+393336.0;;; +NGC6166C;G;16:28:23.31;+39:34:13.1;Her;0.74;0.71;90;16.50;;12.47;11.58;11.46;23.45;E;;;;;;;;2MASX J16282330+3934128,MCG +07-34-048,PGC 058233,PGC 058244,SDSS J162823.30+393413.0,SDSS J162823.30+393413.1,SDSS J162823.31+393413.1;;; +NGC6167;OCl;16:34:34.98;-49:46:18.8;Ara;7.20;;;7.58;6.70;;;;;;;;;;;;;MWSC 2425;;; +NGC6168;G;16:31:21.30;+20:11:05.8;Her;1.65;0.48;111;15.22;;11.70;11.03;10.64;23.31;Sd;;;;;;;;2MASX J16312081+2011077,IRAS 16291+2017,MCG +03-42-016,PGC 058423,SDSS J163120.83+201108.3,SDSS J163121.30+201105.8,UGC 10434;;Position is for SDSS J163121.30+201105.8.; +NGC6169;OCl;16:34:04.63;-44:02:44.3;Sco;4.20;;;;6.60;;;;;;;;;;;;;MWSC 2424;;; +NGC6170;G;16:27:36.50;+59:33:45.0;Dra;0.80;0.67;85;14.80;;11.72;11.08;10.68;;E;;;;;6176;;;2MASX J16273651+5933446,MCG +10-23-076,PGC 058188;;;Diameters and position angle taken from Simbad. +NGC6171;GCl;16:32:31.92;-13:03:13.1;Oph;7.80;;;9.96;8.85;;;;;;;;;107;;;;MWSC 2422;;; +NGC6172;G;16:22:10.30;-01:30:53.5;Oph;0.90;0.89;80;14.28;;10.81;10.12;9.80;22.85;E;;;;;;1213;;2MASX J16221032-0130531,MCG +00-42-003,PGC 057937,UGC 10352;;; +NGC6173;G;16:29:44.90;+40:48:41.8;Her;2.03;1.40;145;14.00;;10.26;9.61;9.36;23.53;E;;;;;;;;2MASX J16294485+4048421,MCG +07-34-083,PGC 058348,SDSS J162944.87+404841.9,SDSS J162944.88+404841.9,SDSS J162944.99+404841.7,UGC 10421;;HOLM 753B is a double star.; +NGC6174;GPair;16:29:47.68;+40:52:19.1;Her;0.90;;;;;;;;;;;;;;;;;;;Identification as NGC 6174 is very uncertain.;Diameter of the group inferred by the author. +NGC6174 NED01;G;16:29:46.50;+40:52:29.5;Her;0.41;0.29;150;16.50;;13.46;14.97;12.63;23.60;E;;;;;;;;2MASX J16294651+4052291,MCG +07-34-085 NOTES01,PGC 058350,SDSS J162946.50+405229.4,SDSS J162946.50+405229.5;;Identification as NGC 6174 is very uncertain. Is this component a star?; +NGC6174 NED02;G;16:29:47.32;+40:52:21.8;Her;0.72;0.65;123;15.00;;12.73;11.98;11.98;23.70;S0;;;;;;;;2MASX J16294765+4052191,MCG +07-34-085,PGC 058351,SDSS J162947.67+405219.1,SDSS J162947.68+405219.1;;; +NGC6175;GPair;16:29:57.90;+40:37:45.0;Her;1.50;;;;;;;;;;;;;;;;;MCG +07-34-087,UGC 10422;;;Diameter of the group inferred by the author. +NGC6175 NED01;G;16:29:57.53;+40:37:50.6;Her;1.45;0.85;97;15.00;;;;;23.86;Sbc;;;;;6175N;;;MCG +07-34-087 NED01,PGC 058362,SDSS J162957.52+403750.4,SDSS J162957.52+403750.5,UGC 10422 NED01;;; +NGC6175 NED02;G;16:29:58.06;+40:37:42.8;Her;1.32;1.05;121;15.00;;10.65;9.88;9.59;24.04;I;;;;;;;;2MASX J16295808+4037432,MCG +07-34-087 NED02,PGC 200339,SDSS J162958.06+403742.6,SDSS J162958.06+403742.7,SDSS J162958.06+403742.8,UGC 10422 NED02;;; +NGC6176;Dup;16:27:36.50;+59:33:45.0;Dra;;;;;;;;;;;;;;;6170;;;;;; +NGC6177;G;16:30:38.88;+35:03:23.2;Her;1.62;1.09;19;14.80;;11.42;10.82;10.52;24.14;SBb;;;;;;;;2MASX J16303889+3503234,MCG +06-36-049,PGC 058390,SDSS J163038.87+350323.0,SDSS J163038.87+350323.1,SDSS J163038.88+350323.2,UGC 10428;;; +NGC6178;OCl;16:35:47.25;-45:38:37.5;Sco;6.90;;;7.28;7.20;;;;;;;;;;;;;MWSC 2428;;; +NGC6179;G;16:30:47.05;+35:06:08.1;Her;0.36;0.31;24;15.70;;13.10;12.42;12.24;22.56;S0-a;;;;;;;;2MASX J16304703+3506075,PGC 058401,SDSS J163047.04+350608.0,SDSS J163047.04+350608.1;;; +NGC6180;G;16:30:33.92;+40:32:22.0;Her;1.09;0.85;22;15.20;;11.59;10.85;10.60;23.77;E;;;;;;;;2MASX J16303388+4032221,MCG +07-34-095,PGC 058386,SDSS J163033.91+403221.9,SDSS J163033.92+403222.0;;; +NGC6181;G;16:32:20.96;+19:49:35.6;Her;2.39;0.99;177;12.70;;9.65;8.97;8.67;22.14;SABc;;;;;;;;2MASX J16322096+1949357,IRAS 16301+1955,MCG +03-42-020,PGC 058470,SDSS J163220.95+194935.0,UGC 10439;;; +NGC6182;G;16:29:34.00;+55:31:04.0;Dra;1.51;0.56;144;14.60;;11.28;10.63;10.29;23.74;Sa;;;;;;;;2MASX J16293398+5531036,MCG +09-27-048,PGC 058338,SDSS J162934.00+553104.0,UGC 10424;;; +NGC6183;G;16:41:41.90;-69:22:19.8;TrA;2.36;0.80;37;14.09;;9.80;9.07;8.76;;Sa;;;;;;;;2MASX J16414191-6922196,ESO 069-008,PGC 058785;;; +NGC6184;G;16:31:34.53;+40:33:56.2;Her;0.93;0.56;121;15.10;;11.87;11.21;10.86;23.09;SABb;;;;;;;;2MASX J16313454+4033560,IRAS 16298+4040,MCG +07-34-109,PGC 058432,SDSS J163134.52+403356.1,SDSS J163134.53+403356.1,SDSS J163134.53+403356.2;;; +NGC6185;G;16:33:17.83;+35:20:32.4;Her;1.47;0.80;3;14.50;;10.86;10.16;9.86;23.64;Sa;;;;;;;;2MASX J16331778+3520329,MCG +06-36-052,PGC 058493,SDSS J163317.84+352032.3,UGC 10444;;; +NGC6186;G;16:34:25.48;+21:32:27.2;Her;1.57;0.70;59;14.20;;10.63;9.87;9.60;23.53;Sa;;;;;;;;2MASX J16342548+2132270,IRAS 16322+2138,MCG +04-39-015,PGC 058523,SDSS J163425.48+213227.2,UGC 10448;;; +NGC6187;G;16:31:36.70;+57:42:24.0;Dra;0.75;0.62;140;15.10;;11.99;11.23;11.00;23.42;S0-a;;;;;;;;2MASX J16313682+5742241,MCG +10-23-079,PGC 058429;;; +NGC6188;Neb;16:40:05.84;-48:39:44.2;Ara;20.00;12.00;;;;;;;;;;;;;;;;;Rim Nebula;;Dimensions taken from LEDA +NGC6189;G;16:31:40.90;+59:37:34.0;Dra;1.49;0.75;27;13.30;;;;;22.41;SABc;;;;;;;;IRAS 16307+5944,MCG +10-23-081,PGC 058440,UGC 10442;;; +NGC6190;G;16:32:06.70;+58:26:20.3;Dra;1.42;1.04;77;13.20;;11.11;10.52;10.21;22.63;Sc;;;;;;;;2MASX J16320669+5826202,IRAS 16312+5832,MCG +10-23-082,PGC 058458,UGC 10443;;; +NGC6191;G;16:11:30.49;+58:47:09.0;Dra;1.30;0.49;180;15.00;;11.46;10.75;10.46;23.34;SBbc;;;;;;;;2MASX J16113038+5847085,MCG +10-23-034,PGC 057427,SDSS J161130.48+584708.9,UGC 10271;;"NGC identification is very uncertain; N6191 could by N6187, N6189, or N6190."; +NGC6192;OCl;16:40:23.87;-43:22:00.5;Sco;7.50;;;;8.50;;;;;;;;;;;;;MWSC 2440;;; +NGC6193;OCl;16:41:20.23;-48:45:45.1;Ara;8.10;;;;;;;;;;;;;;;;;C 082,MWSC 2444;;Involved in NGC 6188.; +NGC6194;G;16:36:37.15;+36:12:01.6;Her;0.90;0.70;112;14.60;;11.22;10.54;10.21;23.10;E;;;;;;;;2MASX J16363717+3612018,MCG +06-36-054,PGC 058598,SDSS J163637.15+361201.5,SDSS J163637.15+361201.6,SDSS J163637.16+361201.5;;; +NGC6195;G;16:36:32.57;+39:01:40.4;Her;1.44;0.97;41;14.70;;11.18;10.40;10.18;23.22;Sb;;;;;;;;2MASX J16363253+3901408,MCG +07-34-118,PGC 058596,SDSS J163632.56+390140.3,SDSS J163632.57+390140.4,UGC 10469;;; +NGC6196;G;16:37:53.92;+36:04:23.0;Her;1.14;0.82;140;14.20;;10.75;10.12;9.80;22.96;E-S0;;;;;;4615;;2MASX J16375395+3604233,MCG +06-36-058,PGC 058644,SDSS J163753.91+360422.9,SDSS J163753.91+360423.0,SDSS J163753.92+360422.9,SDSS J163753.92+360423.0,UGC 10482;;; +NGC6197;G;16:37:59.88;+35:59:43.8;Her;0.75;0.38;38;15.40;;11.92;11.30;11.03;22.93;SBab;;;;;;4616;;2MASX J16375990+3559438,MCG +06-36-059,PGC 058655,SDSS J163759.87+355943.8,SDSS J163759.88+355943.7,SDSS J163759.88+355943.8;;; +NGC6198;G;16:35:30.65;+57:29:12.4;Dra;0.88;0.60;92;14.80;;11.87;11.05;11.01;23.60;E;;;;;;;;2MASX J16353065+5729126,MCG +10-24-003,PGC 058554,UGC 10467;;; +NGC6199;*;16:39:28.97;+36:03:32.3;Her;;;;15.00;;14.50;14.03;14.08;;;;;;;;;;2MASS J16392895+3603321,SDSS J163928.97+360332.3;;; +NGC6200;OCl;16:44:07.35;-47:27:45.6;Ara;8.10;;;7.74;7.40;;;;;;;;;;;;;MWSC 2450;;; +NGC6201;G;16:40:14.41;+23:45:55.2;Her;0.56;0.48;50;15.50;;12.05;11.12;10.98;;;;;;;;;;2MASX J16401441+2345550,PGC 058727,SDSS J164014.41+234555.2;;;Diameters and position angle taken from Simbad. +NGC6202;G;16:43:23.23;+61:59:02.2;Dra;0.72;0.40;69;13.80;;11.35;10.59;10.31;21.43;Sab;;;;;6226;;;2MASX J16432324+6159020,IRAS 16428+6204,MCG +10-24-043,PGC 058847,UGC 10532;;Identification as NGC 6202 is very uncertain.; +NGC6203;G;16:40:27.41;+23:46:29.4;Her;1.07;1.07;0;15.30;;11.53;10.83;10.50;24.32;E;;;;;;;;2MASX J16402738+2346291,MCG +04-39-019,PGC 058729;;; +NGC6204;OCl;16:46:09.50;-47:01:01.1;Ara;4.50;;;8.51;8.20;;;;;;;;;;;;;MWSC 2457;;; +NGC6205;GCl;16:41:41.63;+36:27:40.7;Her;16.50;;;;5.80;4.45;3.94;3.85;;;;;;013;;;;2MASX J16414163+3627407,MWSC 2445;Hercules Globular Cluster;; +NGC6206;G;16:40:07.90;+58:37:02.5;Dra;0.72;0.63;94;14.50;;11.46;10.71;10.44;22.63;S0;;;;;;1227;;2MASX J16400791+5837025,MCG +10-24-018,PGC 058723,UGC 10506;;Misidentified in UGC as MCG +10-24-019.; +NGC6207;G;16:43:03.75;+36:49:56.7;Her;3.46;1.61;17;12.19;11.65;10.08;9.42;9.12;22.66;Sc;;;;;;;;2MASX J16430375+3649567,IRAS 16412+3655,MCG +06-37-007,PGC 058827,SDSS J164303.66+364955.7,UGC 10521;;; +NGC6208;OCl;16:49:28.19;-53:43:42.0;Ara;8.40;;;8.06;7.20;;;;;;;;;;;;;MWSC 2470;;; +NGC6209;G;16:54:57.66;-72:35:11.9;Aps;2.11;1.54;14;13.16;;10.30;9.61;9.17;23.20;SABb;;;;;;;;2MASX J16545747-7235136,ESO 043-008,IRAS 16489-7230,PGC 059252;;; +NGC6210;PN;16:44:29.52;+23:47:59.4;Her;0.35;;;10.50;9.65;10.13;10.20;9.50;;;;12.44;12.66;;;;BD +24 3048,HD 151121,TYC 2045-00022-1;2MASX J16442953+2348003,IRAS 16423+2353,PN G043.1+37.7,SDSS J164429.51+234759.3;;;Dimensions taken from LEDA +NGC6211;G;16:41:27.64;+57:47:01.1;Dra;1.30;0.95;95;13.80;;10.57;9.94;9.69;23.13;S0;;;;;;;;2MASX J16412760+5747011,MCG +10-24-027,PGC 058775,UGC 10516;;; +NGC6212;G;16:43:23.14;+39:48:23.2;Her;0.91;0.81;84;15.00;;11.83;11.14;10.90;23.54;E;;;;;;;;2MASX J16432319+3948234,MCG +07-34-142,PGC 058840,SDSS J164323.13+394823.1,SDSS J164323.13+394823.2,SDSS J164323.14+394823.2;;; +NGC6213;G;16:41:37.19;+57:48:53.5;Dra;0.69;0.31;62;15.20;;12.18;11.48;11.19;23.58;;;;;;;;;2MASX J16413722+5748533,MCG +10-24-030,PGC 058778,UGC 10516 NOTES01;;; +NGC6214;G;16:39:31.93;+66:02:22.3;Dra;0.96;0.82;156;14.30;;11.28;10.60;10.30;22.78;Sb;;;;;;;;2MASX J16393189+6602221,IRAS 16393+6608,MCG +11-20-024,PGC 058709,UGC 10507;;; +NGC6215;G;16:51:06.81;-58:59:36.5;Ara;2.64;2.34;83;11.63;11.28;9.21;8.50;8.28;22.64;Sc;;;;;;;;2MASX J16510681-5859364,ESO 137-046,ESO-LV 137-0460,IRAS 16467-5854,PGC 059112;;Confused HIPASS source; +NGC6215A;G;16:52:59.45;-58:56:52.8;Ara;1.96;0.64;11;14.23;;11.38;10.63;10.24;23.66;Sb;;;;;;;;2MASX J16524840-5856461,ESO 138-004,ESO-LV 138-0040,PGC 059180;;; +NGC6216;OCl;16:49:23.61;-44:43:53.5;Sco;4.20;;;;10.10;;;;;;;;;;6222;;;MWSC 2469;;; +NGC6217;G;16:32:39.20;+78:11:53.4;UMi;2.24;1.63;155;14.37;13.88;9.68;8.99;8.68;22.12;Sbc;;;;;;;;2MASX J16323921+7811535,IRAS 16350+7818,MCG +13-12-008,PGC 058477,UGC 10470;;; +NGC6218;GCl;16:47:14.52;-01:56:52.2;Oph;11.10;;;8.52;6.07;;;;;;;;;012;;;;MWSC 2464;;; +NGC6219;G;16:46:22.51;+09:02:16.3;Her;0.80;0.65;158;15.20;;11.97;11.35;11.03;23.40;S0;;;;;;;;2MASX J16462248+0902154,MCG +02-43-001,PGC 058944;;; +NGC6220;G;16:47:13.28;-00:16:31.7;Oph;1.53;0.97;134;15.50;;10.80;10.06;9.80;24.38;Sab;;;;;;;;2MASX J16471330-0016310,PGC 058979,UGC 10541;;; +NGC6221;G;16:52:46.08;-59:13:07.0;Ara;4.84;3.15;1;10.90;13.45;8.10;7.36;7.12;22.54;Sc;;;;;;;;2MASX J16524632-5913009,ESO 138-003,ESO-LV 138-0030,IRAS 16484-5908,PGC 059175;;Confused HIPASS source; +NGC6222;Dup;16:49:23.61;-44:43:53.5;Sco;;;;;;;;;;;;;;;6216;;;;;; +NGC6223;G;16:43:04.31;+61:34:44.1;Dra;3.16;2.33;90;13.10;;10.09;9.34;9.11;24.18;E-S0;;;;;;;;2MASX J16430433+6134441,MCG +10-24-040,PGC 058828,UGC 10527;;; +NGC6224;G;16:48:18.54;+06:18:44.0;Her;1.10;1.01;140;15.00;;11.09;10.31;10.06;23.84;E-S0;;;;;;;;2MASX J16481855+0618439,MCG +01-43-002,PGC 059017,UGC 10555;;; +NGC6225;G;16:48:21.58;+06:13:22.0;Her;1.18;0.79;149;15.00;;11.13;10.45;10.20;23.99;E-S0;;;;;;;;2MASX J16482157+0613219,MCG +01-43-003,PGC 059024,UGC 10556;;; +NGC6226;Dup;16:43:23.23;+61:59:02.2;Dra;;;;;;;;;;;;;;;6202;;;;;; +NGC6227;*;16:51:33.72;-41:13:49.9;Sco;;;;5.29;5.22;4.94;4.95;4.80;;;;;;;;;;HD 151804,HIP 082493,TYC 7872-2284-1;;Part of the Milky Way.; +NGC6228;G;16:48:02.66;+26:12:48.8;Her;0.93;0.39;133;15.30;;12.56;11.81;11.73;23.39;Sb;;;;;;;;2MASX J16480266+2612485,IRAS 16460+2617,MCG +04-40-001,PGC 059007,SDSS J164802.65+261248.8,UGC 10558;;; +NGC6229;GCl;16:46:58.86;+47:31:40.1;Her;4.80;;;9.38;9.86;7.98;7.43;7.33;;;;;;;;;;MWSC 2460;;; +NGC6230;GPair;16:50:44.70;+04:36:18.0;Oph;1.70;;;;;;;;;;;;;;;;;MCG +01-43-005;;;Diameter of the group inferred by the author. +NGC6230 NED01;G;16:50:42.73;+04:36:18.0;Oph;0.58;0.35;124;15.50;;12.44;11.74;11.40;23.82;E;;;;;;;;2MASX J16504275+0436180,MCG +01-43-005 NED01,PGC 214543,UGC 10575 NOTES01;;Component 'a)' in UGC notes.; +NGC6230 NED02;G;16:50:46.70;+04:36:16.7;Oph;0.72;0.52;60;15.50;;11.83;11.11;10.84;23.60;E;;;;;;;;2MASX J16504669+0436170,MCG +01-43-005 NED02,PGC 059106,UGC 10575;;Called 'NGC 6230B' in UGC.; +NGC6231;OCl;16:54:10.92;-41:49:27.3;Sco;13.80;;;2.83;2.60;;;;;;;;;;;;;C 076,MWSC 2481;;; +NGC6232;G;16:43:20.24;+70:37:57.1;Dra;1.47;1.16;176;15.80;;11.32;10.66;10.33;23.15;Sa;;;;;;;;2MASX J16432023+7037571,MCG +12-16-007,PGC 058841,UGC 10537;;"MCG misprints name as 'NGC 6237'; corrected in MCG errata."; +NGC6233;G;16:50:15.70;+23:34:47.4;Her;1.46;0.73;28;14.90;;11.07;10.32;10.12;24.11;S0;;;;;;;;2MASX J16501572+2334474,MCG +04-40-002,PGC 059086,SDSS J165015.69+233447.3,SDSS J165015.69+233447.4,SDSS J165015.70+233447.3,SDSS J165015.70+233447.4,UGC 10573;;; +NGC6234;G;16:51:57.34;+04:23:00.7;Oph;0.74;0.67;39;15.30;;11.52;10.80;10.55;23.51;E;;;;;;;;2MASX J16515734+0423008,MCG +01-43-007,PGC 059144;;; +NGC6235;GCl;16:53:25.36;-22:10:38.8;Oph;4.20;;;11.99;7.20;;;;;;;;;;;;;MWSC 2479;;; +NGC6236;G;16:44:34.65;+70:46:48.8;Dra;1.82;1.07;12;12.70;;12.00;11.50;11.34;22.62;SABc;;;;;;;;2MASX J16443469+7046489,IRAS 16450+7052,MCG +12-16-008,PGC 058891,UGC 10546;;; +NGC6237;Other;16:44:07.54;+70:38:05.3;Dra;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6238;G;16:47:16.63;+62:08:49.3;Dra;0.68;0.41;16;14.50;;13.01;12.05;12.20;21.99;Sc;;;;;;;;2MASX J16471664+6208491,IRAS 16467+6213,MCG +10-24-057,PGC 058980,UGC 10563;;HOLM 756B is a superposed star.; +NGC6239;G;16:50:04.98;+42:44:22.9;Her;2.30;1.07;113;12.94;12.45;10.94;10.35;10.05;22.88;SBb;;;;;;;;2MASX J16500502+4244234,IRAS 16484+4249,MCG +07-35-001,PGC 059083,SDSS J165004.83+424422.9,SDSS J165004.96+424422.5,SDSS J165004.98+424422.8,UGC 10577;;; +NGC6240;G;16:52:58.87;+02:24:03.3;Oph;2.20;1.03;12;14.31;13.37;10.30;9.46;9.11;24.08;S0-a;;;;;;4625;;2MASX J16525886+0224035,IRAS 16504+0228,MCG +00-43-004,PGC 059186,SDSS J165258.89+022402.8,UGC 10592;;; +NGC6241;G;16:50:10.95;+45:25:14.2;Her;0.52;0.36;80;14.80;;11.71;11.08;10.75;22.69;Sbc;;;;;;;;2MASX J16501092+4525144,IRAS 16486+4530,MCG +08-31-007,PGC 059085,SDSS J165010.94+452514.2,UGC 10586 NOTES02;;; +NGC6242;OCl;16:55:33.44;-39:27:39.4;Sco;6.60;;;7.09;6.40;;;;;;;;;;;;;MWSC 2488;;; +NGC6243;G;16:52:26.29;+23:19:57.3;Her;1.21;0.60;152;15.10;;11.43;10.65;10.33;23.66;Sa;;;;;;;;2MASX J16522624+2319575,MCG +04-40-004,PGC 059161,SDSS J165226.28+231957.2,SDSS J165226.28+231957.3,SDSS J165226.29+231957.2,SDSS J165226.29+231957.3,UGC 10591;;; +NGC6244;G;16:48:03.91;+62:12:01.6;Dra;1.54;0.34;139;14.30;;11.03;10.22;10.06;23.26;Sa;;;;;;;;2MASX J16480389+6212017,IRAS 16475+6217,MCG +10-24-059,PGC 059009,UGC 10568;;; +NGC6245;Other;16:45:22.48;+70:48:16.5;Dra;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6246;G;16:49:52.72;+55:32:31.4;Dra;1.38;0.73;46;14.20;;11.71;11.02;10.76;23.35;Sb;;;;;;;;2MASX J16495269+5532308,IRAS 16488+5537,MCG +09-27-098,PGC 059077,UGC 10580;;; +NGC6246A;G;16:50:13.98;+55:23:04.6;Dra;2.17;1.28;164;14.70;;11.28;10.82;10.44;24.29;Sc;;;;;;;;2MASX J16501398+5523048,IRAS 16492+5528,MCG +09-27-101,PGC 059090,UGC 10584;;; +NGC6247;G;16:48:20.24;+62:58:35.1;Dra;0.89;0.28;56;15.30;;11.30;10.62;10.32;21.49;Sb;;;;;;1233;;2MASX J16482023+6258348,IRAS 16478+6303,PGC 059023,SDSS J164820.24+625835.1,SDSS J164820.24+625835.4,SDSS J164820.25+625835.1,SDSS J164820.25+625835.2,UGC 10572;;; +NGC6248;G;16:46:21.99;+70:21:31.7;Dra;1.23;0.76;157;14.10;;;;;23.07;SBc;;;;;;;;2MASX J16462197+7021319,MCG +12-16-009,PGC 058864,PGC 058946,UGC 10564;;; +NGC6249;OCl;16:57:41.50;-44:48:42.8;Sco;7.60;;;8.72;8.20;;;;;;;;;;;;;MWSC 2499;;; +NGC6250;Cl+N;16:57:56.07;-45:56:11.9;Ara;9.60;;;6.14;5.90;;;;;;;;;;;;;MWSC 2500;;; +NGC6251;G;16:32:31.97;+82:32:16.4;UMi;1.67;1.44;20;14.66;12.89;10.06;9.31;9.03;23.90;E;;;;;;;;2MASX J16323175+8232165,MCG +14-08-010,PGC 058472,UGC 10501;;; +NGC6252;G;16:32:40.57;+82:34:36.4;UMi;0.76;0.36;63;15.10;;11.43;10.65;10.42;22.96;Sab;;;;;;;;2MASX J16324053+8234365,MCG +14-08-011,PGC 058456;;; +NGC6253;OCl;16:59:05.13;-52:42:31.7;Ara;6.00;;;;10.20;;;;;;;;;;;;;MWSC 2502;;; +NGC6254;GCl;16:57:08.99;-04:05:57.6;Oph;9.30;;;;4.98;;;;;;;;;010;;;;MWSC 2498;;; +NGC6255;G;16:54:47.95;+36:30:04.0;Her;3.10;1.37;95;13.40;;13.23;12.64;12.85;24.17;SBc;;;;;;;;2MASX J16544796+3630031,MCG +06-37-014,PGC 059244,UGC 10606;;; +NGC6256;GCl;16:59:32.69;-37:07:17.1;Sco;4.20;;;;;;;;;;;;;;;;;ESO 391-006,MWSC 2506;;; +NGC6257;G;16:56:03.51;+39:38:43.8;Her;0.87;0.27;122;15.60;;12.92;12.27;12.03;23.24;SBc;;;;;;;;2MASX J16560347+3938442,PGC 059274,SDSS J165603.51+393843.8;;; +NGC6258;G;16:52:29.79;+60:30:52.3;Dra;0.87;0.67;65;14.50;;11.69;11.26;10.69;23.03;E;;;;;;;;2MASX J16522982+6030524,MCG +10-24-073,PGC 059165,UGC 10595;;; +NGC6259;OCl;17:00:45.40;-44:39:17.9;Sco;6.00;;;8.85;8.00;;;;;;;;;;;;;MWSC 2511;;; +NGC6260;G;16:51:50.61;+63:42:52.5;Dra;0.93;0.77;130;15.80;;11.79;11.02;10.94;23.10;Sbc;;;;;;;;2MASX J16515061+6342523,IRAS 16514+6347,MCG +11-20-029,PGC 059142,SDSS J165150.60+634252.4,SDSS J165150.60+634252.5,SDSS J165150.60+634252.6,SDSS J165150.61+634252.4;;; +NGC6261;G;16:56:30.52;+27:58:39.0;Her;1.09;0.44;85;15.20;;11.31;10.54;10.32;23.80;S0-a;;;;;;;;2MASX J16563054+2758392,MCG +05-40-006,PGC 059286,SDSS J165630.51+275839.0,SDSS J165630.51+275839.1,SDSS J165630.52+275839.1,UGC 10617;;; +NGC6262;G;16:58:42.80;+57:05:54.2;Dra;0.78;0.32;77;14.60;;;;;23.16;E-S0;;;;;;;;2MASX J16584281+5705541,IRAS 16578+5710,MCG +10-24-080,PGC 059363;;"NGC identification is very uncertain; N6262 could be CGCG 277-010."; +NGC6263;G;16:56:43.20;+27:49:19.5;Her;1.05;0.31;109;15.10;;11.24;10.54;10.25;23.69;E;;;;;;;;2MASX J16564323+2749199,MCG +05-40-008,PGC 059292,SDSS J165643.20+274919.5,UGC 10618;;; +NGC6264;G;16:57:16.13;+27:50:58.6;Her;0.82;0.52;24;15.50;;12.39;11.59;11.41;23.37;SBb;;;;;;;;2MASX J16571610+2750587,MCG +05-40-009,PGC 059306,SDSS J165716.12+275058.5,SDSS J165716.13+275058.5,SDSS J165716.13+275058.6;;HOLM 763B is a star.; +NGC6265;G;16:57:29.10;+27:50:39.2;Her;0.88;0.57;35;15.40;;11.72;11.06;10.75;23.65;S0;;;;;;;;2MASX J16572915+2750397,MCG +05-40-011,PGC 059315,UGC 10624;;; +NGC6266;GCl;17:01:12.60;-30:06:44.5;Oph;7.80;;;8.55;7.39;;;;;;;;;062;;;;MWSC 2512;;; +NGC6267;G;16:58:08.66;+22:59:06.4;Her;1.30;0.99;33;14.00;;11.35;10.64;10.22;22.95;Sc;;;;;;;;2MASX J16580867+2259062,IRAS 16560+2303,MCG +04-40-009,PGC 059340,SDSS J165808.65+225906.3,UGC 10628;;HOLM 764B is a star.; +NGC6268;OCl;17:02:10.39;-39:43:41.6;Sco;6.00;;;;9.50;;;;;;;;;;;;;MWSC 2516;;; +NGC6269;G;16:57:58.09;+27:51:15.6;Her;1.84;1.32;80;14.40;13.73;10.40;9.71;9.40;23.61;E;;;;;;;;2MASX J16575809+2751157,MCG +05-40-012,PGC 059332,UGC 10629;;; +NGC6270;G;16:58:44.05;+27:51:32.8;Her;0.72;0.47;93;15.65;;12.46;11.54;11.35;23.64;;;;;;;;;2MASX J16584409+2751331,PGC 095562;;; +NGC6271;G;16:58:50.77;+27:57:52.7;Her;0.67;0.54;20;15.50;;12.03;11.38;11.00;23.51;E-S0;;;;;;;;2MASX J16585070+2757542,MCG +05-40-016,PGC 059365;;; +NGC6272;G;16:58:58.26;+27:55:51.3;Her;0.56;0.29;159;15.50;;12.79;12.08;11.75;22.79;Sa;;;;;;;;2MASX J16585825+2755512,PGC 059367;;; +NGC6273;GCl;17:02:37.68;-26:16:04.6;Oph;7.50;;;8.45;5.57;;;;;;;;;019;;;;MWSC 2519;;; +NGC6274;GPair;16:59:20.92;+29:56:37.8;Her;1.20;;;;;;;;;;;;;;;;;UGC 10643;;;Diameter of the group inferred by the author. +NGC6274 NED01;G;16:59:20.50;+29:56:47.1;Her;0.60;0.43;16;14.50;14.33;12.27;11.47;11.14;22.10;SBb;;;;;;;;2MASX J16592044+2956459,IRAS 16574+3001,MCG +05-40-019,PGC 059383,UGC 10643 NED01;;;Called 'UGC 10643 NED01' in NED +NGC6274 NED02;G;16:59:21.43;+29:56:26.0;Her;0.83;0.17;117;16.00;;13.65;13.02;12.62;23.94;SBab;;;;;;;;2MASX J16592144+2956259,MCG +05-40-020,PGC 059381,UGC 10643 NED02;;;Called 'UGC 10643 NED02' in NED +NGC6275;G;16:55:33.37;+63:14:31.9;Dra;0.76;0.47;146;17.61;17.37;13.41;13.10;12.74;23.09;SBd;;;;;;;;2MASX J16553323+6314338,PGC 059262,SDSS J165533.34+631432.1,SDSS J165533.35+631431.9,SDSS J165533.35+631432.0,SDSS J165533.36+631431.8,SDSS J165533.36+631431.9,SDSS J165533.38+631431.6,SDSS J165533.39+631431.7;;; +NGC6276;G;17:00:45.09;+23:02:38.4;Her;0.64;0.55;130;15.20;;12.69;12.04;11.78;22.87;Sa;;;;;;1239;;2MASX J17004498+2302384,MCG +04-40-010,PGC 059419,SDSS J170045.08+230238.3,SDSS J170045.08+230238.4,SDSS J170045.09+230238.4,UGC 10656 NOTES01;;NGC 6277 is a star.; +NGC6277;*;17:00:48.89;+23:02:21.7;Her;;;;;;;;;;;;;;;;;;;;; +NGC6278;G;17:00:50.33;+23:00:39.7;Her;1.73;0.86;128;13.80;;9.96;9.21;8.99;23.63;S0;;;;;;;;2MASX J17005034+2300394,MCG +04-40-011,PGC 059426,SDSS J170050.32+230039.7,UGC 10656;;HOLM 765C is a double star.; +NGC6279;G;16:59:01.43;+47:14:13.8;Her;1.04;0.87;34;14.90;;11.25;10.52;10.19;23.63;S0;;;;;;;;2MASX J16590146+4714138,MCG +08-31-017,PGC 059370,SDSS J165901.42+471413.7,UGC 10645;;; +NGC6280;GPair;17:01:57.49;+06:39:56.7;Oph;0.71;0.62;137;15.50;;11.81;11.17;10.89;23.59;E;;;;;;;;2MASX J17015742+0639573,MCG +01-43-008,PGC 059464;;; +NGC6281;OCl;17:04:41.30;-37:59:06.8;Sco;10.20;;;5.78;5.40;;;;;;;;;;;;;MWSC 2530;;; +NGC6282;G;17:00:47.11;+29:49:14.2;Her;0.73;0.54;45;15.20;;12.48;11.75;11.52;22.98;SBbc;;;;;;;;2MASX J17004708+2949140,PGC 059418,SDSS J170047.11+294914.1;;; +NGC6283;G;16:59:26.57;+49:55:19.1;Her;1.11;0.98;56;13.70;;11.73;11.16;10.83;22.68;Sc;;;;;;;;2MASX J16592655+4955191,IRAS 16581+4959,MCG +08-31-018,PGC 059386,UGC 10652;;; +NGC6284;GCl;17:04:28.75;-24:45:51.6;Oph;6.60;;;10.72;7.43;7.52;6.97;6.82;;;;;;;;;;2MASX J17042874-2445512,MWSC 2528;;; +NGC6285;G;16:58:24.01;+58:57:21.5;Dra;1.08;0.57;110;15.30;;12.06;11.36;11.05;23.60;S0-a;;;;;6286N;;;2MASX J16582401+5857212,MCG +10-24-081,PGC 059344;;; +NGC6286;G;16:58:31.38;+58:56:10.5;Dra;1.22;1.12;35;14.20;;11.12;10.24;9.76;23.24;Sb;;;;;6286S;;;2MASX J16583138+5856102,IRAS 16577+5900,MCG +10-24-084,PGC 059352,UGC 10647;;; +NGC6287;GCl;17:05:09.34;-22:42:28.8;Oph;5.40;;;11.49;10.30;7.60;7.15;6.73;;;;;;;;;;MWSC 2533;;; +NGC6288;G;16:57:24.45;+68:27:25.3;Dra;0.72;0.52;110;15.30;;11.60;10.85;10.59;;E-S0;;;;;;;;2MASX J16572452+6827258,MCG +11-21-006,PGC 059312;;;Diameters and position angle taken from Simbad. +NGC6289;G;16:57:44.99;+68:30:53.0;Dra;1.10;0.76;14;15.50;;11.60;10.87;10.62;24.20;E;;;;;;;;2MASX J16574502+6830529,MCG +11-21-007,PGC 059322;;; +NGC6290;G;17:00:56.43;+58:58:13.8;Dra;0.99;0.90;135;14.30;;11.24;10.52;10.21;23.21;Sa;;;;;;;;2MASX J17005643+5858140,MCG +10-24-088,PGC 059428,UGC 10665;;; +NGC6291;G;17:00:55.92;+58:56:15.2;Dra;0.62;0.50;176;15.00;;11.81;11.21;10.90;22.90;E;;;;;;;;2MASX J17005591+5856150,MCG +10-24-086,PGC 059435;;; +NGC6292;G;17:03:03.47;+61:02:38.0;Dra;1.32;0.63;102;14.40;;11.87;11.21;11.10;23.20;SABb;;;;;;;;2MASX J17030344+6102381,IRAS 17024+6106,MCG +10-24-093,PGC 059498,SDSS J170303.47+610237.9,SDSS J170303.47+610238.0,SDSS J170303.47+610238.1,UGC 10684;;; +NGC6293;GCl;17:10:10.41;-26:34:54.3;Oph;4.50;;;9.96;9.02;;;;;;;;;;;;;MWSC 2539;;; +NGC6294;**;17:10:16.23;-26:34:28.4;Oph;;;;;;;;;;;;;;;;;;;;; +NGC6295;G;17:03:15.35;+60:20:15.9;Dra;0.98;0.42;77;16.00;;12.03;11.18;10.76;23.51;Sb;;;;;;;;2MASX J17031526+6020160,IRAS 17025+6024,MCG +10-24-092,PGC 059510,SDSS J170315.33+602015.9,SDSS J170315.34+602015.8,SDSS J170315.34+602015.9,SDSS J170315.35+602015.9,UGC 10682;;; +NGC6296;G;17:08:44.47;+03:53:38.7;Oph;0.89;0.70;124;14.20;;11.37;10.58;10.27;22.46;SABb;;;;;;;;2MASX J17084446+0353386,IRAS 17062+0357,MCG +01-44-002,PGC 059690,UGC 10719;;; +NGC6297;G;17:03:36.55;+62:01:32.2;Dra;0.64;0.45;84;14.40;;11.48;10.75;10.56;22.16;S0;;;;;6298;;;2MASX J17033657+6201323,PGC 059525,SDSS J170336.54+620132.2,SDSS J170336.55+620132.2,SDSS J170336.55+620132.4,UGC 10690;;; +NGC6298;Dup;17:03:36.55;+62:01:32.2;Dra;;;;;;;;;;;;;;;6297;;;;;; +NGC6299;G;17:05:04.41;+62:27:28.2;Dra;0.95;0.59;50;15.00;;11.71;11.00;10.76;23.64;E;;;;;;;;2MASX J17050435+6227276,MCG +10-24-097,PGC 059561,SDSS J170504.41+622728.2;;; +NGC6300;G;17:16:59.47;-62:49:14.0;Ara;5.33;3.37;119;10.88;13.08;7.86;7.20;6.93;23.00;SBb;;;;;;;;2MASX J17165947-6249139,ESO 101-025,ESO-LV 101-0250,IRAS 17123-6245,PGC 060001;;Extended HIPASS source; +NGC6301;G;17:08:32.74;+42:20:20.8;Her;1.77;1.00;113;14.60;;11.37;10.74;10.51;23.88;Sc;;;;;;4643;;2MASX J17083273+4220208,IRAS 17069+4224,MCG +07-35-034,PGC 059681,SDSS J170832.74+422020.8,UGC 10723;;; +NGC6302;PN;17:13:44.63;-37:06:11.3;Sco;0.74;;;12.80;9.60;;;;;;;21.10;;;;;HD 155520;2MASX J17134463-3706111,C 069,ESO 392-005,IRAS 17103-3702,PN G349.5+01.0;Bug Nebula;; +NGC6303;G;17:05:02.77;+68:49:39.3;Dra;1.47;0.67;61;15.10;;11.32;10.46;10.23;24.57;E;;;;;;;;2MASX J17050269+6849389,MCG +12-16-017,PGC 059573,UGC 10711;;; +NGC6304;GCl;17:14:32.51;-29:27:44.2;Oph;3.60;;;10.33;9.03;;;;;;;;;;;;;ESO 454-002,MWSC 2550;;; +NGC6305;G;17:18:00.92;-59:10:19.5;Ara;1.69;1.32;137;13.02;12.61;9.84;9.14;8.89;23.10;E-S0;;;;;;;;2MASX J17180092-5910193,ESO 138-019,ESO-LV 138-0190,PGC 060029,TYC 8739-2283-1;;; +NGC6306;G;17:07:36.98;+60:43:44.0;Dra;1.32;0.49;161;14.40;13.74;11.75;11.02;10.85;23.27;SBab;;;;;;;;2MASX J17073690+6043431,IRAS 17069+6047,MCG +10-24-098,PGC 059654,UGC 10724;;; +NGC6307;G;17:07:40.47;+60:45:02.8;Dra;1.36;1.03;153;13.95;;10.40;9.72;9.48;22.94;S0-a;;;;;;;;2MASX J17074044+6045032,MCG +10-24-099,PGC 059655,UGC 10727;;; +NGC6308;G;17:11:59.71;+23:22:47.8;Her;1.19;0.95;156;14.40;;10.99;10.32;10.04;23.13;SABc;;;;;;;;2MASX J17115972+2322483,IRAS 17099+2326,MCG +04-40-021,PGC 059807,SDSS J171159.70+232247.8,SDSS J171159.71+232247.7,SDSS J171159.71+232247.8,UGC 10747;;; +NGC6309;PN;17:14:04.30;-12:54:38.0;Oph;0.26;;;10.80;11.50;11.60;11.54;10.93;;;;16.58;;;;;HD 155752;IRAS 17112-1251,PN G009.6+14.8;Box Nebula;; +NGC6310;G;17:07:57.47;+60:59:24.6;Dra;1.68;0.35;70;13.80;;10.82;10.15;9.77;22.73;Sb;;;;;;;;2MASX J17075743+6059241,MCG +10-24-100,PGC 059662,SDSS J170757.46+605924.6,SDSS J170757.47+605924.6,SDSS J170757.48+605924.5,UGC 10730;;; +NGC6311;G;17:10:43.57;+41:39:04.0;Her;1.23;1.17;5;14.90;;10.85;10.17;9.84;23.90;E;;;;;;;;2MASX J17104357+4139037,MCG +07-35-039,PGC 059750,SDSS J171043.57+413903.9,UGC 10741;;; +NGC6312;G;17:10:48.16;+42:17:15.7;Her;0.87;0.74;5;15.30;;11.45;10.76;10.46;23.57;E;;;;;;;;2MASX J17104818+4217151,MCG +07-35-040,PGC 059751,SDSS J171048.15+421715.7;;; +NGC6313;G;17:10:20.80;+48:19:54.3;Her;1.45;0.52;156;14.80;;11.29;10.58;10.29;23.66;Sab;;;;;;;;2MASX J17102078+4819542,MCG +08-31-025,PGC 059739,UGC 10742;;; +NGC6314;G;17:12:38.71;+23:16:12.2;Her;1.37;0.70;174;15.56;14.62;10.85;10.10;9.81;23.02;Sa;;;;;;;;2MASX J17123873+2316125,IRAS 17105+2319,MCG +04-40-022,PGC 059838,SDSS J171238.71+231612.2,SDSS J171238.71+231612.3,SDSS J171238.72+231612.3,UGC 10752;;; +NGC6315;G;17:12:46.15;+23:13:24.8;Her;0.76;0.59;5;15.40;;12.91;12.29;11.86;22.20;Sc;;;;;;;;2MASX J17124612+2313245,MCG +04-40-023,PGC 059843,SDSS J171246.14+231324.8;;The position in 1999ApJS..122..415A is 4.1 arcsec northwest of the nucleus.; +NGC6316;GCl;17:16:37.41;-28:08:24.1;Oph;4.80;;;10.33;9.03;;;;;;;;;;;;;MWSC 2554;;; +NGC6317;G;17:08:59.51;+62:53:52.8;Dra;0.96;0.61;44;16.00;;12.59;11.87;11.44;23.45;SBc;;;;;;;;2MASX J17085946+6253523,MCG +11-21-009,PGC 059708,SDSS J170859.47+625353.0,SDSS J170859.49+625352.7,SDSS J170859.49+625352.8,SDSS J170859.50+625352.8,SDSS J170859.51+625352.8,SDSS J170859.52+625352.8;;; +NGC6318;OCl;17:16:11.59;-39:25:29.9;Sco;3.30;;;;11.80;;;;;;;;;;;;;MWSC 2552;;; +NGC6319;G;17:09:44.08;+62:58:23.0;Dra;1.17;1.14;170;14.40;;11.28;10.49;10.31;23.54;E;;;;;;;;2MASX J17094401+6258232,IRAS 17092+6302,MCG +11-21-010,PGC 059717,SDSS J170944.06+625823.1,SDSS J170944.07+625823.0,SDSS J170944.08+625823.0,UGC 10744;;; +NGC6320;G;17:12:55.74;+40:15:59.4;Her;1.26;0.82;98;14.90;;11.67;10.89;10.64;23.68;Sbc;;;;;;;;2MASX J17125575+4015595,MCG +07-35-044,PGC 059852,SDSS J171255.73+401559.4,UGC 10761;;; +NGC6321;G;17:14:24.22;+20:18:50.1;Her;1.00;0.91;95;14.50;;11.84;11.20;10.71;23.18;Sbc;;;;;;;;2MASX J17142422+2018498,IRAS 17122+2022,MCG +03-44-002,PGC 059900,UGC 10768;;; +NGC6322;OCl;17:18:25.79;-42:56:02.5;Sco;6.30;;;6.32;6.00;;;;;;;;;;;;;MWSC 2562;;; +NGC6323;G;17:13:18.08;+43:46:56.8;Her;1.20;0.55;175;14.80;;11.55;10.85;10.53;23.39;SBab;;;;;;;;2MASX J17131806+4346563,MCG +07-35-048,PGC 059868,SDSS J171318.07+434656.8,UGC 10764;;; +NGC6324;G;17:05:25.32;+75:24:25.3;UMi;0.98;0.52;74;13.50;;11.58;10.95;10.62;22.00;Sbc;;;;;;;;2MASX J17052594+7524267,IRAS 17070+7528,MCG +13-12-016,PGC 059583,SDSS J170525.30+752425.2,SDSS J170525.31+752425.3,UGC 10725;;; +NGC6325;GCl;17:17:59.27;-23:45:57.7;Oph;4.02;;;11.49;;;;;;;;;;;;;;ESO 519-011,MWSC 2560;;; +NGC6326;PN;17:20:46.36;-51:45:15.8;Ara;0.21;;;12.20;;14.55;;;;;;16.75;;;;;HD 156531;ESO 228-001,IRAS 17168-5142,PN G338.1-08.3;;; +NGC6327;G;17:14:02.29;+43:38:58.1;Her;0.58;0.56;120;15.70;;12.64;11.95;11.70;23.42;E;;;;;;;;2MASX J17140227+4338580,PGC 059889;;; +NGC6328;G;17:23:41.03;-65:00:36.6;Ara;1.61;1.56;160;13.17;13.20;10.15;9.44;9.18;23.02;SABa;;;;;;;;2MASX J17234103-6500371,ESO 102-003,ESO-LV 102-0030,PGC 060198;;Confused HIPASS source; +NGC6329;G;17:14:15.03;+43:41:04.9;Her;1.18;1.15;75;14.30;;10.88;10.19;9.84;23.46;E;;;;;;;;2MASX J17141500+4341050,MCG +07-35-051,PGC 059894,SDSS J171415.02+434104.9,UGC 10771;;; +NGC6330;G;17:15:44.42;+29:24:15.5;Her;1.19;0.55;165;14.80;;11.90;11.19;10.87;23.61;SBb;;;;;;;;2MASX J17154439+2924150,IRAS 17138+2927,MCG +05-41-005,PGC 059961,SDSS J171544.41+292415.4,SDSS J171544.41+292415.5,SDSS J171544.42+292415.4,UGC 10776;;; +NGC6331;G;17:03:35.97;+78:37:44.4;UMi;1.04;1.00;30;14.00;;11.69;10.97;10.60;;E;;;;;;;;2MASX J17033591+7837435,MCG +13-12-015 NED02,PGC 084830;;;Diameters and position angle taken from Simbad. +NGC6332;G;17:15:02.90;+43:39:36.7;Her;1.74;0.89;45;14.60;;10.80;10.12;9.81;23.98;Sa;;;;;;;;2MASX J17150290+4339368,MCG +07-35-054,PGC 059927,UGC 10773;;; +NGC6333;GCl;17:19:11.78;-18:30:58.5;Oph;6.90;;;9.36;8.42;;;;;;;;;009;;;;MWSC 2567;;; +NGC6334;SNR;17:20:49.70;-36:06:09.8;Sco;8.40;;;;;;;;;;;;;;;;;MWSC 2577;;; +NGC6335;*Ass;17:19:31.92;-30:09:51.0;Sco;;;;;;;;;;;;;;;;;;;;; +NGC6336;G;17:16:16.57;+43:49:13.7;Her;1.05;0.73;167;14.50;;11.80;11.12;10.74;23.20;Sa;;;;;;;;2MASX J17161657+4349135,MCG +07-35-057,PGC 059976,UGC 10786;;; +NGC6337;PN;17:22:15.61;-38:29:01.4;Sco;0.85;;;11.90;12.30;;;;;;;15.50;14.90;;;;;ESO 333-005,IRAS 17188-3826,PN G349.3-01.1;;; +NGC6338;G;17:15:22.99;+57:24:40.3;Dra;1.73;1.04;16;14.20;;10.39;9.70;9.40;23.38;S0;;;;;;;;2MASX J17152291+5724404,MCG +10-24-116,PGC 059947,SDSS J171522.96+572440.5,SDSS J171522.97+572440.2,SDSS J171522.98+572440.2,SDSS J171522.99+572440.2,SDSS J171522.99+572440.3,UGC 10784;;; +NGC6339;G;17:17:06.50;+40:50:41.9;Her;1.86;1.17;170;13.70;;11.63;11.01;10.97;23.50;Sc;;;;;;;;2MASX J17170650+4050418,IRAS 17155+4053,MCG +07-35-059,PGC 060003,UGC 10790;;; +NGC6340;G;17:10:24.85;+72:18:16.0;Dra;3.04;2.88;155;11.87;11.01;9.25;8.55;8.39;23.10;S0-a;;;;;;;;2MASX J17102496+7218156,MCG +12-16-023,PGC 059742,SDSS J171024.84+721815.9,UGC 10762;;; +NGC6341;GCl;17:17:07.27;+43:08:11.5;Her;14.40;;;;6.52;;;;;;;;;092;;;;MWSC 2557;;; +NGC6342;GCl;17:21:10.14;-19:35:14.7;Oph;6.60;;;11.25;10.01;;;;;;;;;;;;;MWSC 2580;;; +NGC6343;G;17:17:16.27;+41:03:09.8;Her;1.24;0.94;130;14.70;;11.22;10.53;10.23;23.90;E;;;;;;;;2MASX J17171627+4103099,MCG +07-35-060,PGC 060010,SDSS J171716.27+410309.8,TYC 3077-777-1;;; +NGC6344;**;17:17:18.15;+42:26:03.1;Her;;;;;;;;;;;;;;;;;;;;; +NGC6345;G;17:15:24.28;+57:21:01.1;Dra;0.95;0.39;35;15.40;;11.88;11.20;10.90;23.32;SBa;;;;;;;;2MASX J17152430+5721015,MCG +10-24-115,PGC 059945,SDSS J171524.26+572101.3,SDSS J171524.27+572101.0,SDSS J171524.28+572101.0,SDSS J171524.28+572101.1;;; +NGC6346;G;17:15:24.49;+57:19:21.1;Dra;0.91;0.58;94;15.30;;11.52;10.87;10.66;23.52;E-S0;;;;;;;;2MASX J17152444+5719215,MCG +10-24-114,PGC 059946,SDSS J171524.47+571921.0,SDSS J171524.47+571921.3,SDSS J171524.48+571921.0,SDSS J171524.49+571921.0,SDSS J171524.49+571921.1;;; +NGC6347;G;17:19:54.67;+16:39:38.5;Her;1.22;0.57;98;14.26;13.45;11.41;10.73;10.50;23.16;SBb;;;;;;1253;;2MASX J17195466+1639384,IRAS 17176+1642,MCG +03-44-004,PGC 060086,UGC 10807;;; +NGC6348;G;17:18:21.19;+41:38:51.4;Her;0.85;0.57;118;15.60;;12.02;11.30;10.97;23.60;S0-a;;;;;;;;2MASX J17182124+4138512,MCG +07-35-063,PGC 060036,SDSS J171821.18+413851.3;;; +NGC6349;G;17:19:06.55;+36:03:39.3;Her;1.07;0.25;80;15.10;;11.70;11.05;10.69;23.96;S0-a;;;;;;;;2MASX J17190654+3603389,MCG +06-38-016,PGC 060060,SDSS J171906.54+360339.3;;; +NGC6350;G;17:18:42.25;+41:41:39.6;Her;1.24;1.04;89;14.30;;10.81;10.08;9.76;23.44;S0;;;;;;;;2MASX J17184230+4141392,MCG +07-35-064,PGC 060046,SDSS J171842.25+414139.5,SDSS J171842.25+414139.7,UGC 10800;;; +NGC6351;GPair;17:19:11.40;+36:03:38.0;Her;0.40;;;;;;;;;;;;;;;;;MCG +06-38-017;;;Diameter of the group inferred by the author. +NGC6351 NED01;G;17:19:11.08;+36:03:37.5;Her;0.31;0.27;110;16.00;;12.57;11.72;11.52;;SBab;;;;;;;;MCG +06-38-017 NED01,PGC 060063;;; +NGC6351 NED02;G;17:19:11.67;+36:03:39.8;Her;0.08;0.07;43;16.92;;;;;;E;;;;;;;;MCG +06-38-017 NED02,SDSS J171911.66+360339.7;;;B-Mag taken from LEDA +NGC6352;GCl;17:25:29.16;-48:25:21.7;Ara;7.20;;;9.95;8.87;;;;;;;;;;;;;C 081,MWSC 2592;;; +NGC6353;Other;17:21:12.47;+15:41:18.8;Her;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC6354;Other;17:24:34.28;-38:32:29.8;Sco;;;;;;;;;;;;;;;;;;;;Asterism of six Galactic stars.; +NGC6355;GCl;17:23:58.65;-26:21:12.3;Oph;2.70;;;12.46;11.05;;;;;;;;;;;;;2MASX J17235817-2621060,ESO 519-015,MWSC 2586;;The 2MASS position is for a star northwest of the cluster's core.; +NGC6356;GCl;17:23:34.99;-17:48:46.9;Oph;5.40;;;10.01;7.42;;;;;;;;;;;;;MWSC 2585;;; +NGC6357;Cl+N;17:24:43.57;-34:12:04.8;Sco;3.90;;;;;;;;;;;;;;;;;MWSC 2588;the War and Peace Nebula;Involved in emission nebulosity; +NGC6358;G;17:18:53.01;+52:36:55.0;Dra;1.00;0.40;110;15.10;;11.68;10.95;10.67;23.56;S0-a;;;;;;;;2MASX J17185307+5236552,MCG +09-28-033,PGC 060054,SDSS J171853.03+523655.2,UGC 10810;;; +NGC6359;G;17:17:52.99;+61:46:50.9;Dra;1.06;0.75;141;13.56;12.64;10.44;9.77;9.51;22.41;E-S0;;;;;;;;2MASX J17175302+6146505,MCG +10-25-001,PGC 060025,SDSS J171752.98+614650.9,UGC 10804;;; +NGC6360;*Ass;17:24:27.62;-29:52:17.7;Oph;5.10;;;;;;;;;;;;;;;;;MWSC 2591;;; +NGC6361;G;17:18:41.09;+60:36:29.4;Dra;2.06;0.56;52;13.87;;10.32;9.54;9.10;23.27;Sb;;;;;;;;2MASX J17184108+6036292,IRAS 17180+6039,MCG +10-25-004,PGC 060045,SDSS J171841.08+603629.3,SDSS J171841.08+603629.4,SDSS J171841.08+603629.5,SDSS J171841.10+603629.2,UGC 10815;;; +NGC6362;GCl;17:31:54.84;-67:02:52.3;Ara;8.40;;;9.72;8.86;;;;;;;;;;;;;MWSC 2619;;; +NGC6363;G;17:22:40.02;+41:06:06.1;Her;1.02;0.84;145;14.50;;11.15;10.49;10.22;23.51;E;;;;;;;;2MASX J17223999+4106060,MCG +07-36-005,PGC 060164,UGC 10827;;; +NGC6364;G;17:24:27.33;+29:23:24.6;Her;1.38;1.08;7;13.87;;10.69;9.98;9.74;23.72;S0;;;;;;;;2MASX J17242732+2923243,MCG +05-41-013,PGC 060228,UGC 10835;;; +NGC6365A;G;17:22:43.81;+62:09:57.9;Dra;0.98;0.78;150;18.65;17.98;12.04;11.36;10.91;23.42;SBc;;;;;;;;2MASX J17224380+6209581,MCG +10-25-019,PGC 060138,PGC 060174,SDSS J172243.80+620958.0,SDSS J172243.81+620957.8,SDSS J172243.81+620957.9,SDSS J172243.82+620957.9,UGC 10832;;NED does NOT follow RC3 in assigning lower velocity to UGC 10832.; +NGC6365B;G;17:22:43.53;+62:10:25.4;Dra;1.13;0.24;32;14.60;;;;;23.93;Sd;;;;;;;;MCG +10-25-018,PGC 060171,SDSS J172243.51+621025.1,SDSS J172243.51+621025.2,SDSS J172243.52+621025.4,SDSS J172243.53+621025.4,UGC 10833;;NED does NOT follow RC3 in assigning higher velocity to UGC 10833.; +NGC6366;GCl;17:27:44.33;-05:04:35.9;Oph;13.80;;;;;;;;;;;;;;;;;MWSC 2601;;; +NGC6367;G;17:25:09.01;+37:45:35.6;Her;0.99;0.79;161;15.00;;11.56;10.84;10.59;23.48;Sab;;;;;;;;2MASX J17250905+3745356,MCG +06-38-020,PGC 060251,SDSS J172509.01+374535.6;;; +NGC6368;G;17:27:11.54;+11:32:37.0;Oph;3.44;0.80;43;13.70;;10.16;9.48;9.19;24.00;Sb;;;;;;;;2MASX J17271154+1132370,IRAS 17248+1135,MCG +02-44-004,PGC 060315,UGC 10856;;; +NGC6369;PN;17:29:20.50;-23:45:34.0;Oph;0.63;;;12.90;11.40;12.45;11.87;11.48;;;;16.99;15.94;;;;HD 158269;ESO 520-003,IRAS 17262-2343,PN G002.4+05.8;Little Ghost Nebula;; +NGC6370;G;17:23:25.18;+56:58:28.3;Dra;1.31;1.08;112;14.20;;10.86;10.16;9.85;23.62;E;;;;;;;;2MASX J17232515+5658281,MCG +10-25-020,PGC 060192,UGC 10836;;; +NGC6371;G;17:27:20.59;+26:30:18.2;Her;0.72;0.55;165;15.20;;12.00;11.32;11.04;23.09;S0-a;;;;;;;;2MASX J17272065+2630185,MCG +04-41-012,PGC 060322;;; +NGC6372;G;17:27:31.85;+26:28:30.5;Her;1.61;0.94;75;14.10;;11.05;10.38;10.16;23.04;Sbc;;;;;;;;2MASX J17273183+2628304,IRAS 17255+2630,MCG +04-41-013,PGC 060330,SDSS J172731.85+262830.5,UGC 10861;;; +NGC6373;G;17:24:08.09;+58:59:42.3;Dra;1.04;0.70;84;14.33;;13.33;12.68;12.53;23.29;Sc;;;;;;;;2MASX J17240804+5859425,MCG +10-25-023,PGC 060220,SDSS J172408.07+585942.6,SDSS J172408.08+585942.2,SDSS J172408.09+585942.2,SDSS J172408.09+585942.3,SDSS J172408.09+585942.5,SDSS J172408.10+585942.3,UGC 10850;;; +NGC6374;OCl;17:34:42.54;-32:34:52.9;Sco;6.90;;;5.56;5.50;;;;;;;;;;6383;;;MWSC 2631;;Bright star superposed.; +NGC6375;G;17:29:21.89;+16:12:24.0;Her;1.53;1.48;145;14.50;;10.50;9.79;9.41;24.34;E;;;;;;;;2MASX J17292187+1612244,MCG +03-44-009,PGC 060384,UGC 10875;;; +NGC6376;G;17:25:19.18;+58:49:02.8;Dra;0.52;0.29;172;18.95;18.97;13.35;12.58;12.39;21.79;Sc;;;;;;;;2MASX J17251918+5849023,MCG +10-25-026,PGC 060258,SDSS J172519.06+584900.3,SDSS J172519.07+584900.3,SDSS J172519.07+584900.5,SDSS J172519.09+584900.5,SDSS J172519.18+584902.7,UGC 10855 NED01;;Southern of close pair comprising NGC 6376.; +NGC6377;G;17:25:23.21;+58:49:21.9;Dra;0.64;0.27;64;15.50;;11.69;10.94;10.64;22.50;Sab;;;;;;;;2MASX J17252239+5849193,MCG +10-25-025,PGC 060264,SDSS J172523.21+584921.8,SDSS J172523.21+584921.9,UGC 10855 NED02;;; +NGC6378;G;17:30:41.98;+06:16:56.2;Oph;1.13;0.77;2;15.10;;11.23;10.52;10.20;23.58;Sb;;;;;;;;2MASX J17304198+0616564,MCG +01-44-009,PGC 060418,UGC 10884;;; +NGC6379;G;17:30:34.91;+16:17:19.5;Her;1.04;0.85;36;14.60;;11.62;10.97;10.92;22.36;Sc;;;;;;;;2MASX J17303492+1617193,IRAS 17283+1619,MCG +03-44-010,PGC 060421,UGC 10886;;; +NGC6380;GCl;17:34:28.42;-39:04:10.8;Sco;3.90;;;;;;;;;;;;;;;;;ESO 333-014,MWSC 2629;;; +NGC6381;G;17:27:16.85;+60:00:50.6;Dra;1.22;0.85;34;13.60;;12.26;11.68;11.69;22.73;Sc;;;;;;;;2MASX J17271691+6000506,IRAS 17266+6003,MCG +10-25-038,PGC 060321,UGC 10871;;; +NGC6382;G;17:27:55.18;+56:52:07.4;Dra;1.16;0.71;95;15.20;;11.27;10.55;10.28;24.03;E;;;;;;;;2MASX J17275520+5652078,MCG +09-29-001,PGC 060342,SDSS J172755.17+565207.4;;; +NGC6383;Dup;17:34:42.54;-32:34:52.9;Sco;;;;;;;;;;;;;;;6374;;;;;; +NGC6384;G;17:32:24.30;+07:03:37.0;Oph;2.45;1.11;20;13.20;;8.40;7.60;7.53;21.72;Sbc;;;;;;;;2MASX J17322430+0703369,IRAS 17299+0705,MCG +01-45-001,PGC 060459,SDSS J173224.27+070337.4,UGC 10891;;; +NGC6385;G;17:28:01.41;+57:31:18.5;Dra;1.14;1.08;70;14.20;;11.26;10.61;10.26;23.22;SBa;;;;;;;;2MASX J17280141+5731188,MCG +10-25-044,PGC 060343,SDSS J172801.40+573118.5,SDSS J172801.41+573118.8,SDSS J172801.42+573118.5,SDSS J172801.42+573118.6,UGC 10877;;; +NGC6386;G;17:28:51.78;+52:43:24.1;Dra;0.97;0.97;75;14.90;;11.73;11.05;10.84;23.91;Sb;;;;;;;;2MASX J17285175+5243245,MCG +09-29-004,PGC 060367;;; +NGC6387;G;17:28:23.83;+57:32:43.4;Dra;0.31;0.15;63;15.00;16.81;;;;21.51;SBb;;;;;;;;2MASX J17282376+5732428,IRAS 17275+5735,PGC 060355,SDSS J172823.82+573243.4,SDSS J172823.83+573243.7,SDSS J172823.84+573243.4,SDSS J172823.84+573243.5;;; +NGC6388;GCl;17:36:17.43;-44:44:08.2;Sco;8.40;;;7.40;;4.57;3.99;3.63;;;;;;;;;;2MASX J17361746-4444083,MWSC 2638;;; +NGC6389;G;17:32:39.77;+16:24:06.4;Her;1.20;0.92;135;13.11;12.39;10.15;9.55;9.28;21.79;Sbc;;;;;;;;2MASX J17323978+1624062,IRAS 17304+1626,MCG +03-45-001,PGC 060466,UGC 10893;;; +NGC6390;G;17:28:28.09;+60:05:39.0;Dra;0.88;0.45;11;14.50;;11.99;11.43;11.23;22.87;SBbc;;;;;;;;2MASX J17282804+6005398,MCG +10-25-047,PGC 060356,SDSS J172828.08+600539.1,SDSS J172828.09+600539.0,SDSS J172828.09+600539.2,UGC 10881;;The 2MASXi position is 9 arcsec south-southwest of the nucleus.; +NGC6391;G;17:28:48.99;+58:51:03.2;Dra;0.75;0.52;87;15.00;;11.70;11.01;10.74;23.18;E;;;;;;;;2MASX J17284891+5851032,MCG +10-25-049,PGC 060358,SDSS J172848.98+585103.1,SDSS J172848.98+585103.2,SDSS J172848.98+585103.4,SDSS J172848.99+585103.2,SDSS J172848.99+585103.3;;; +NGC6392;G;17:43:30.37;-69:47:06.7;Aps;1.94;1.71;60;12.98;;10.24;9.63;9.32;;SABa;;;;;;;;2MASX J17433040-6947066,ESO 070-012,PGC 060753;;; +NGC6393;G;17:30:08.45;+59:31:54.5;Dra;0.43;0.40;126;15.90;;16.21;;;22.90;Sbc;;;;;;;;2MASX J17300849+5931541,MCG +10-25-054,PGC 060405,SDSS J173008.44+593154.8,SDSS J173008.45+593154.5,SDSS J173008.45+593154.6,SDSS J173008.45+593154.8;;"NGC identification is uncertain; often called NGC 6394."; +NGC6394;G;17:30:21.42;+59:38:23.6;Dra;1.14;0.43;40;15.27;;11.87;11.15;10.76;23.43;SBb;;;;;;;;2MASX J17302140+5938235,IRAS 17296+5940,MCG +10-25-055,PGC 060410,SDSS J173021.42+593823.5,SDSS J173021.42+593823.6,SDSS J173021.42+593823.8,SDSS J173021.43+593823.6,SDSS J173021.43+593823.7,UGC 10889;;Misidentified as NGC 6393 by VCV (2006).; +NGC6395;G;17:26:31.27;+71:05:46.6;Dra;2.25;0.73;17;12.80;;11.24;10.88;10.58;22.56;SBc;;;;;;;;2MASX J17263128+7105465,IRAS 17272+7108,MCG +12-16-039,PGC 060291,UGC 10876;;; +NGC6396;OCl;17:37:36.34;-35:01:33.1;Sco;3.30;;;9.41;8.50;;;;;;;;;;;;;MWSC 2644;;; +NGC6397;GCl;17:40:41.36;-53:40:25.3;Ara;15.30;;;7.39;5.17;;;3.29;;;;;;;;;;C 086,MWSC 2662;;; +NGC6398;G;17:42:43.74;-61:41:39.4;Pav;2.44;0.85;161;13.45;;10.42;9.75;9.37;23.72;SBa;;;;;;;;2MASX J17424370-6141395,ESO 139-018,ESO-LV 139-0180,PGC 060735;;; +NGC6399;G;17:31:50.30;+59:36:55.9;Dra;1.21;0.58;13;14.80;;11.24;10.53;10.34;23.70;S0-a;;;;;;;;2MASX J17315029+5936555,MCG +10-25-059,PGC 060442,SDSS J173150.28+593656.0,SDSS J173150.29+593655.9,SDSS J173150.29+593656.0,SDSS J173150.30+593655.7,SDSS J173150.30+593655.8,SDSS J173150.30+593655.9,UGC 10896;;; +NGC6400;OCl;17:40:12.80;-36:56:51.8;Sco;6.00;;;;8.80;;;;;;;;;;;;;MWSC 2660;;; +NGC6401;GCl;17:38:36.93;-23:54:31.6;Oph;4.50;;;11.31;10.71;;;;;;;;;;;;;ESO 520-011,MWSC 2653;;; +NGC6402;GCl;17:37:36.16;-03:14:45.3;Oph;;;;9.55;5.73;;;;;;;;;014;;;;MWSC 2643;;; +NGC6403;G;17:43:23.56;-61:40:55.6;Pav;1.15;0.89;19;14.33;;10.92;10.31;9.98;23.38;S0;;;;;;;;2MASX J17432300-6141175,2MASX J17432356-6140555,ESO 139-019,ESO-LV 139-0190,PGC 060750;;; +NGC6404;OCl;17:39:37.36;-33:14:48.2;Sco;4.20;;;;10.60;;;;;;;;;;;;;MWSC 2658;;; +NGC6405;OCl;17:40:20.75;-32:15:15.0;Sco;15.60;;;4.48;4.20;;;;;;;;;006;;;;MWSC 2661;Butterfly Cluster;; +NGC6406;**;17:38:19.05;+18:49:59.0;Her;;;;;;;;;;;;;;;;;;;;; +NGC6407;G;17:44:57.69;-60:44:23.3;Pav;2.47;1.93;56;12.88;;9.59;8.85;8.66;23.69;S0;;;;;;;;2MASX J17445766-6044232,ESO 139-022,ESO-LV 139-0220,PGC 060796;;; +NGC6408;G;17:38:47.36;+18:52:40.3;Her;1.55;1.26;155;14.00;;10.94;10.16;9.92;23.77;Sa;;;;;;;;2MASX J17384732+1852403,IRAS 17366+1854,MCG +03-45-007,PGC 060637,UGC 10930;;; +NGC6409;G;17:36:35.40;+50:45:57.2;Dra;0.72;0.61;55;14.80;;12.24;11.60;11.23;;Sbc;;;;;;;;2MASX J17363538+5045571,IRAS 17353+5047,PGC 060565;;;Diameters and position angle taken from Simbad. +NGC6410;**;17:35:20.48;+60:47:35.0;Dra;;;;;;;;;;;;;;;;;;;;; +NGC6411;G;17:35:32.85;+60:48:48.2;Dra;1.76;1.15;69;13.20;;10.02;9.36;9.13;22.88;E;;;;;;;;2MASX J17353281+6048481,MCG +10-25-068,PGC 060536,SDSS J173532.84+604848.2,SDSS J173532.85+604848.2,UGC 10916;;"MCG misprints dec as +60d20; corrected in MCG errata."; +NGC6412;G;17:29:37.51;+75:42:15.9;Dra;2.13;1.84;142;12.40;;10.15;9.50;9.40;22.63;SABc;;;;;;;;2MASX J17293752+7542155,IRAS 17313+7544,MCG +13-12-026,PGC 060393,UGC 10897;;; +NGC6413;Other;17:40:40.72;+12:37:26.2;Oph;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC6414;G;17:30:36.86;+74:22:34.1;Dra;1.00;0.47;141;15.60;;11.66;10.90;10.70;24.38;S0-a;;;;;;;;2MASX J17303681+7422340,MCG +12-16-041,PGC 060416,UGC 10906;;; +NGC6415;*Ass;17:44:20.55;-35:04:15.7;Sco;;;;;;;;;;;;;;;;;;;;Milky Way star cloud.; +NGC6416;OCl;17:44:19.99;-32:21:39.6;Sco;6.90;;;;;;;;;;;;;;;;;MWSC 2673;;; +NGC6417;G;17:41:47.82;+23:40:19.9;Her;1.42;1.17;27;14.40;;11.13;10.34;10.09;23.52;SBb;;;;;;;;2MASX J17414781+2340201,IRAS 17397+2341,MCG +04-42-001,PGC 060709,UGC 10945;;; +NGC6418;G;17:38:09.32;+58:42:53.7;Dra;0.65;0.52;171;17.83;16.84;13.77;13.28;12.96;22.59;SBab;;;;;;;;2MASX J17380933+5842537,MCG +10-25-074,PGC 060610,SDSS J173809.28+584253.8,SDSS J173809.30+584253.6,SDSS J173809.30+584253.7,SDSS J173809.32+584253.7;;; +NGC6419;G;17:36:05.90;+68:09:20.8;Dra;0.97;0.25;131;15.50;;11.23;10.51;10.23;23.37;Sa;;;;;;;;2MASX J17360571+6809213,MCG +11-21-012,PGC 060543,SDSS J173605.89+680920.8,UGC 10924;;; +NGC6420;G;17:36:16.30;+68:03:08.5;Dra;1.02;0.56;62;15.50;;12.21;11.36;11.06;24.27;E;;;;;;;;2MASX J17361625+6803083,MCG +11-21-013,PGC 060532,SDSS J173616.29+680308.4;;; +NGC6421;*Ass;17:45:44.21;-33:41:33.5;Sco;;;;;;;;;;;;;;;;;;;;Milky Way star cloud.; +NGC6422;G;17:36:30.01;+68:03:31.0;Dra;1.17;0.93;58;15.10;;11.26;10.62;10.41;24.01;E;;;;;;;;2MASX J17363000+6803312,MCG +11-21-015,PGC 060558,SDSS J173630.00+680330.9;;; +NGC6423;G;17:36:53.33;+68:10:17.3;Dra;0.63;0.59;170;15.60;;12.40;11.83;11.33;23.28;SBb;;;;;;;;2MASX J17365333+6810172,MCG +11-21-016,PGC 060576,SDSS J173653.32+681017.3;;; +NGC6424;G;17:36:12.07;+69:59:20.0;Dra;0.81;0.78;75;14.50;;11.51;10.90;10.60;23.09;E;;;;;;;;2MASX J17361210+6959203,MCG +12-17-001,PGC 060552,SDSS J173612.07+695920.0,UGC 10932;;; +NGC6425;OCl;17:47:01.68;-31:31:45.8;Sco;4.80;;;7.90;7.20;;;;;;;;;;;;;MWSC 2691;;; +NGC6426;GCl;17:44:54.71;+03:10:12.5;Oph;5.70;;;;;;;;;;;;;;;;;MWSC 2676;;; +NGC6427;G;17:43:38.59;+25:29:38.1;Her;1.55;0.52;36;14.60;;10.51;9.77;9.57;24.13;E-S0;;;;;6431;;;2MASX J17433859+2529380,MCG +04-42-003,PGC 060758,UGC 10957;;; +NGC6428;**;17:43:52.81;+25:33:17.2;Her;;;;;;;;;;;;;;;;;;;;; +NGC6429;G;17:44:05.35;+25:21:02.6;Her;1.82;0.70;32;14.30;;10.87;10.18;9.93;23.81;SBa;;;;;;;;2MASX J17440533+2521025,IRAS 17420+2522,MCG +04-42-004,PGC 060770,UGC 10960;;; +NGC6430;G;17:45:14.27;+18:08:20.2;Her;1.68;0.58;96;14.80;;11.38;10.56;10.26;23.96;Sab;;;;;;;;2MASX J17451426+1808199,IRAS 17430+1809,MCG +03-45-019,PGC 060805,UGC 10966;;; +NGC6431;Dup;17:43:38.59;+25:29:38.1;Her;;;;;;;;;;;;;;;6427;;;;;; +NGC6432;Other;17:47:22.41;-24:53:14.9;Sgr;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC6433;G;17:43:56.21;+36:48:00.4;Her;1.91;0.50;162;14.10;;10.90;9.94;9.75;23.23;Sb;;;;;;;;2MASX J17435621+3648005,IRAS 17422+3649,MCG +06-39-015,PGC 060766,UGC 10962;;; +NGC6434;G;17:36:48.82;+72:05:20.3;Dra;2.09;0.86;95;13.20;;10.99;10.31;9.97;22.75;Sbc;;;;;;;;2MASX J17364883+7205202,IRAS 17376+7207,MCG +12-17-002,PGC 060573,UGC 10934;;; +NGC6435;G;17:40:11.08;+62:38:30.3;Dra;0.87;0.58;7;14.90;;11.57;10.89;10.52;23.52;E;;;;;;;;2MASX J17401107+6238306,MCG +10-25-080,PGC 060667,SDSS J174011.08+623830.2,UGC 10947;;; +NGC6436;G;17:41:13.24;+60:26:58.9;Dra;1.04;0.60;168;14.90;;12.11;11.55;11.16;23.31;Sc;;;;;;;;2MASX J17411324+6026592,MCG +10-25-082,PGC 060695,SDSS J174113.23+602658.9,UGC 10951;;; +NGC6437;*Ass;17:48:21.12;-35:21:58.3;Sco;;;;;;;;;;;;;;;;;;;;Milky Way star cloud.; +NGC6438;G;18:22:17.48;-85:24:07.4;Oct;1.76;1.49;131;13.37;11.61;9.25;8.51;8.28;22.11;S0;;;;;;;;2MASX J18221738-8524074,ESO 010-001,ESO-LV 10-0010,PGC 061787;;; +NGC6438A;G;18:22:35.49;-85:24:22.8;Oct;3.44;1.36;48;12.57;;;;;23.17;I;;;;;;;;ESO 010-002,ESO-LV 10-0020,IRAS 18061-8525,PGC 061793;;; +NGC6439;PN;17:48:19.80;-16:28:44.0;Sgr;0.08;;;13.80;12.60;12.62;12.65;11.76;;;;20.20;;;;;HD 161801,UCAC2 25817696;IRAS 17454-1627,PN G011.0+05.8;;Within 10 degrees of the galactic plane.; +NGC6440;GCl;17:48:52.67;-20:21:34.5;Sgr;5.10;;;12.01;10.10;;;;;;;;;;;;;MWSC 2701;;; +NGC6441;GCl;17:50:12.84;-37:03:03.9;Sco;4.80;;;9.26;8.00;;;;;;;;;;;;;MWSC 2713;;; +NGC6442;G;17:46:51.34;+20:45:39.9;Her;1.42;0.97;135;14.50;;10.60;9.92;9.59;23.97;E;;;;;;;;2MASX J17465074+2045440,2MASX J17465132+2045400,MCG +03-45-021,PGC 060844,UGC 10978;;; +NGC6443;G;17:44:33.85;+48:06:50.6;Her;1.13;0.50;127;14.80;;11.43;10.74;10.42;23.25;Sab;;;;;;;;2MASX J17443385+4806507,MCG +08-32-018,PGC 060783,UGC 10967;;; +NGC6444;OCl;17:49:35.18;-34:49:10.8;Sco;6.90;;;;;;;;;;;;;;;;;MWSC 2709;;; +NGC6445;PN;17:49:15.06;-20:00:34.2;Sgr;0.55;;;13.20;11.20;;;;;;;19.04;19.00;;;;HD 161944;ESO 589-009,PN G008.0+03.9;Little Gem;; +NGC6446;G;17:46:07.51;+35:34:09.8;Her;0.58;0.42;29;15.50;;12.45;11.75;11.50;22.91;Sab;;;;;;;;2MASX J17460751+3534100,MCG +06-39-018,PGC 060825;;; +NGC6447;G;17:46:17.23;+35:34:19.1;Her;1.35;0.73;150;13.80;;11.51;10.84;10.57;22.64;SABb;;;;;;;;2MASX J17461724+3534189,IRAS 17445+3535,MCG +06-39-019,PGC 060829,UGC 10975;;; +NGC6448;Other;17:44:20.56;+53:32:25.4;Dra;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6449;G;17:43:46.34;+56:48:14.9;Dra;0.90;0.75;136;14.60;;12.01;11.41;11.11;22.99;Sc;;;;;;;;2MASX J17434635+5648148,IRAS 17429+5649,MCG +09-29-020,PGC 060762,SDSS J174346.33+564814.8,UGC 10965;;; +NGC6450;Other;17:47:32.36;+18:34:30.8;Her;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6451;OCl;17:50:40.64;-30:12:41.8;Sco;7.20;;;;8.20;;;;;;;;;;;;;MWSC 2718;;; +NGC6452;G;17:47:58.53;+20:50:16.1;Her;0.70;0.55;10;15.30;;12.75;12.26;11.87;;;;;;;;;;2MASX J17475841+2050163,PGC 060876;;;Diameters and position angle taken from Simbad. +NGC6453;GCl;17:50:51.71;-34:35:59.6;Sco;5.40;;;10.49;;;;;;;;;;;;;;2MASX J17505167-3435596,MWSC 2722;;; +NGC6454;G;17:44:56.61;+55:42:17.2;Dra;1.41;1.07;180;13.00;13.50;10.96;10.27;10.01;23.98;E;;;;;;;;2MASX J17445666+5542166,MCG +09-29-026,PGC 060795,SDSS J174456.60+554217.0;;; +NGC6455;*Ass;17:51:08.10;-35:20:16.1;Sco;7.80;;;;;;;;;;;;;;;;;MWSC 2725;;NGC identification is not certain.; +NGC6456;G;17:42:31.85;+67:35:32.3;Dra;0.51;0.41;145;15.70;;12.30;11.63;11.48;;E;;;;;;;;2MASX J17423174+6735320,PGC 060729,SDSS J174231.84+673532.3;;;Diameters and position angle taken from Simbad. +NGC6457;G;17:42:52.84;+66:28:33.6;Dra;1.08;0.72;131;14.70;;10.96;10.26;9.97;23.97;E-S0;;;;;;;;2MASX J17425289+6628338,MCG +11-21-021,PGC 060738,SDSS J174252.84+662833.6,UGC 10964;;; +NGC6458;G;17:49:11.01;+20:48:15.4;Her;1.08;0.72;147;14.90;;11.21;10.52;10.31;23.81;S0;;;;;;;;2MASX J17491102+2048157,MCG +03-45-029,PGC 060911,UGC 10994;;; +NGC6459;G;17:45:47.19;+55:46:36.3;Dra;0.86;0.46;75;15.30;;11.98;11.21;10.96;23.73;S0;;;;;;;;2MASX J17454712+5546360,MCG +09-29-029,PGC 060817,SDSS J174547.19+554636.2;;; +NGC6460;G;17:49:30.36;+20:45:49.2;Her;1.72;0.98;154;14.40;;11.24;10.58;10.56;24.10;Sc;;;;;;;;2MASX J17493034+2045497,IRAS 17473+2046,MCG +03-45-031,PGC 060925,UGC 10997;;; +NGC6461;G;17:39:56.51;+74:02:03.2;Dra;0.82;0.47;21;15.60;;12.43;11.61;11.40;23.52;Sab;;;;;;;;2MASX J17395652+7402032,MCG +12-17-004,PGC 060659,UGC 10954;;; +NGC6462;G;17:44:48.86;+61:54:38.1;Dra;0.55;0.52;85;14.70;;12.06;11.35;11.03;22.48;E;;;;;;;;2MASX J17444885+6154378,IRAS 17443+6155,MCG +10-25-085,PGC 060790,SDSS J174448.85+615438.1,SDSS J174448.86+615438.2;;; +NGC6463;G;17:43:34.32;+67:36:12.6;Dra;0.95;0.81;161;15.20;;11.58;10.97;10.64;23.86;E;;;;;;;;2MASX J17433438+6736129,MCG +11-21-022,PGC 060755;;; +NGC6464;G;17:45:47.53;+60:53:50.9;Dra;0.56;0.53;175;15.30;;12.62;11.91;11.49;22.82;SBc;;;;;;;;2MASX J17454760+6053507,IRAS 17452+6054,MCG +10-25-087,PGC 060818,SDSS J174547.52+605350.8;;; +NGC6465;Other;17:52:55.58;-25:23:51.7;Sgr;;;;;;;;;;;;;;;;;;;;Asterism of two Galactic double stars.; +NGC6466;G;17:48:08.10;+51:23:57.2;Dra;0.70;0.41;120;15.00;;11.66;10.95;10.67;;E-S0;;;;;;;;2MASX J17480808+5123570,PGC 060883;;;Diameters and position angle taken from Simbad. +NGC6467;G;17:50:40.16;+17:32:16.0;Her;1.41;0.75;76;14.50;;11.46;10.89;10.58;23.79;Sab;;;;;6468;;;2MASX J17504017+1732163,MCG +03-45-035,PGC 060972,UGC 11004;;HOLM 772B does not exist (it is probably a plate defect).; +NGC6468;Dup;17:50:40.16;+17:32:16.0;Her;;;;;;;;;;;;;;;6467;;;;;; +NGC6469;OCl;17:53:12.13;-22:16:30.4;Sgr;9.00;;;;8.20;;;;;;;;;;;;;MWSC 2735;;; +NGC6470;G;17:44:14.87;+67:37:09.8;Dra;1.08;0.69;157;15.20;;12.07;11.38;11.14;23.73;SBb;;;;;;;;2MASX J17441483+6737100,MCG +11-21-025,PGC 060778,UGC 10974;;Often incorrectly called NGC 6472.; +NGC6471;GPair;17:44:15.60;+67:35:31.0;Dra;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC6471 NED01;G;17:44:13.04;+67:35:35.0;Dra;0.93;0.31;172;15.40;;12.85;12.03;11.90;23.15;Sc;;;;;6471W;;;2MASX J17441310+6735350,MCG +11-21-023,PGC 060773,SDSS J174413.04+673535.6,UGC 10973;;; +NGC6471 NED02;G;17:44:18.16;+67:35:27.9;Dra;0.52;0.47;70;16.00;;12.95;12.19;12.10;23.38;E-S0;;;;;6471E;;;2MASX J17441817+6735280,MCG +11-21-024,PGC 060779,UGC 10973 NOTES01;;Component 'b)' in UGC notes.; +NGC6472;G;17:44:03.10;+67:37:49.2;Dra;0.65;0.45;10;;;12.77;12.02;11.92;23.89;;;;;;;;;2MASX J17440309+6737489,PGC 2703230;;; +NGC6473;*;17:47:05.91;+57:18:35.7;Dra;;;;;;;;;;;;;;;;;;;;Identification as NGC 6473 is uncertain.; +NGC6474;G;17:47:05.56;+57:18:04.2;Dra;0.87;0.42;72;15.00;;11.81;11.17;10.95;22.92;Sb;;;;;;;;2MASX J17470549+5718036,MCG +10-25-092,PGC 060850,SDSS J174705.55+571804.2,SDSS J174705.55+571804.4,UGC 10989;;This is not NGC 6373 (which may be a star).; +NGC6475;OCl;17:53:51.18;-34:47:34.2;Sco;22.20;;;3.45;3.30;;;;;;;;;007;;;;MWSC 2739;Ptolemy's Cluster;; +NGC6476;*Ass;17:54:02.01;-29:08:39.0;Sgr;;;;;;;;;;;;;;;;;;ESO 456-008;;Milky Way star cloud.; +NGC6477;G;17:44:30.02;+67:36:38.1;Dra;0.55;0.35;126;;;13.44;12.66;12.50;24.09;;;;;;;;;2MASX J17443006+6736380,PGC 2702901;;; +NGC6478;G;17:48:38.35;+51:09:26.1;Dra;1.45;0.44;35;14.10;;10.71;9.97;9.69;22.61;Sc;;;;;;;;2MASX J17483834+5109260,IRAS 17474+5110,MCG +09-29-032,PGC 060896,UGC 10998;;; +NGC6479;G;17:48:21.59;+54:08:56.4;Dra;0.94;0.83;151;14.50;;11.72;11.08;10.87;23.01;Sc;;;;;;;;2MASX J17482155+5408565,IRAS 17473+5409,PGC 060890,SDSS J174821.58+540856.4,UGC 10996;;; +NGC6480;*Ass;17:54:26.04;-30:27:07.4;Sco;2.70;;;;;;;;;;;;;;;;;MWSC 2746;;Milky Way star cloud.; +NGC6481;Other;17:52:48.91;+04:10:04.2;Oph;3.90;;;;;;;;;;;;;;;;;;;Line of four Galactic stars.; +NGC6482;G;17:51:48.81;+23:04:19.0;Her;2.03;1.71;68;12.35;11.45;9.35;8.61;8.37;22.64;E;;;;;;;;2MASX J17514880+2304190,MCG +04-42-008,PGC 061009,UGC 11009;;; +NGC6483;G;17:59:30.81;-63:40:07.4;Pav;1.83;1.49;117;13.22;;10.13;9.47;9.20;23.18;E;;;;;;;;2MASX J17593083-6340071,ESO 102-020,ESO-LV 102-0200,PGC 061233;;; +NGC6484;G;17:51:46.98;+24:29:00.5;Her;1.74;0.91;77;13.50;;10.58;9.89;9.65;22.97;Sb;;;;;;;;2MASX J17514697+2429001,IRAS 17497+2429,MCG +04-42-007,PGC 061008,UGC 11010;;; +NGC6485;G;17:51:52.74;+31:27:42.4;Her;1.23;1.16;15;14.20;;11.67;10.98;10.74;23.28;Sbc;;;;;;;;2MASX J17515274+3127422,IRAS 17500+3128,MCG +05-42-004,PGC 061013,UGC 11014;;; +NGC6486;G;17:52:35.30;+29:49:04.8;Her;0.61;0.56;70;15.00;;11.68;10.98;10.62;22.97;E;;;;;;;;2MASX J17523529+2949053,MCG +05-42-006,PGC 061033;;; +NGC6487;G;17:52:41.85;+29:50:19.1;Her;1.80;1.57;20;14.00;;10.28;9.54;9.26;23.15;E;;;;;;;;2MASX J17524182+2950193,MCG +05-42-008,PGC 061039,UGC 11022;;; +NGC6488;G;17:49:20.97;+62:13:22.5;Dra;0.65;0.25;82;14.60;;11.49;10.82;10.55;22.83;E;;;;;;;;2MASX J17492094+6213221,MCG +10-25-098,PGC 060918,SDSS J174920.97+621322.5;;; +NGC6489;G;17:50:01.31;+60:05:32.0;Dra;0.51;0.40;32;15.20;;12.24;11.50;11.16;24.47;E-S0;;;;;;;;2MASX J17500138+6005322,MCG +10-25-099,PGC 060928,SDSS J175001.30+600532.0;;; +NGC6490;G;17:54:30.47;+18:22:33.0;Her;1.01;0.78;112;14.70;;10.90;10.17;10.00;23.48;E-S0;;;;;;;;2MASX J17543046+1822333,MCG +03-45-038,PGC 061079,UGC 11033;;; +NGC6491;G;17:50:00.70;+61:31:54.4;Dra;1.25;0.46;37;14.50;;11.29;10.58;10.24;23.26;Sab;;;;;6493A;;;2MASX J17500071+6131542,IRAS 17494+6132,MCG +10-25-103,PGC 060948,PGC 060949,UGC 11008;;; +NGC6492;G;18:02:48.35;-66:25:50.3;Pav;2.38;1.38;79;12.90;;9.66;8.96;8.85;22.56;Sbc;;;;;;;;2MASX J18024831-6625503,ESO 102-022,ESO-LV 102-0220,IRAS 17576-6625,PGC 061315;;; +NGC6493;G;17:50:22.66;+61:33:33.9;Dra;1.07;1.02;25;15.50;;14.51;13.90;13.91;24.29;SABc;;;;;;;;2MASX J17502266+6133334,MCG +10-25-105,PGC 060961,SDSS J175022.66+613333.8,UGC 11011;;; +NGC6494;OCl;17:57:04.77;-18:59:07.2;Sgr;16.80;;;6.03;5.50;;;;;;;;;023;;;;MWSC 2757;;; +NGC6495;G;17:54:50.76;+18:19:36.9;Her;1.44;1.07;75;13.80;;10.42;9.70;9.48;23.50;E;;;;;;;;2MASX J17545074+1819367,MCG +03-45-039,PGC 061091,UGC 11034;;; +NGC6496;GCl;17:59:03.70;-44:15:58.7;CrA;4.62;;;9.96;;;;;;;;;;;;;;MWSC 2764;;; +NGC6497;G;17:51:17.97;+59:28:15.2;Dra;1.45;0.66;110;14.30;;10.95;10.33;10.01;23.27;Sb;;;;;6498;;;2MASX J17511801+5928149,MCG +10-25-109,PGC 060999,SDSS J175117.97+592815.1,UGC 11020;;; +NGC6498;Dup;17:51:17.97;+59:28:15.2;Dra;;;;;;;;;;;;;;;6497;;;;;; +NGC6499;**;17:55:20.01;+18:21:35.1;Her;;;;;;;;;;;;;;;;;;;;; +NGC6500;G;17:55:59.78;+18:20:17.7;Her;2.08;1.65;45;13.43;12.54;10.13;9.42;9.15;23.22;Sab;;;;;;;;2MASX J17555979+1820178,IRAS 17537+1820,MCG +03-46-003,PGC 061123,UGC 11048;;; +NGC6501;G;17:56:03.74;+18:22:23.1;Her;1.73;1.52;15;13.40;;10.08;9.38;9.11;23.02;S0-a;;;;;;;;2MASX J17560372+1822228,MCG +03-46-004,PGC 061128,UGC 11049;;; +NGC6502;G;18:04:13.72;-65:24:35.8;Pav;1.40;1.23;45;13.59;;10.14;9.45;9.20;23.23;E;;;;;;;;2MASX J18041368-6524357,ESO 103-002,ESO-LV 103-0020,PGC 061352;;; +NGC6503;G;17:49:26.43;+70:08:39.7;Dra;5.94;1.98;123;10.95;10.28;8.20;7.52;7.30;22.55;Sc;;;;;;;;2MASX J17492651+7008396,IRAS 17499+7009,MCG +12-17-009,PGC 060921,UGC 11012;;; +NGC6504;G;17:56:05.71;+33:12:30.2;Her;1.94;0.41;95;13.40;;10.21;9.51;9.22;22.86;Sa;;;;;;;;2MASX J17560570+3312300,MCG +06-39-027,PGC 061129,UGC 11053;;; +NGC6505;G;17:51:07.44;+65:31:50.8;Dra;1.15;0.84;149;15.40;;11.29;10.66;10.29;24.33;E;;;;;;;;2MASX J17510740+6531507,MCG +11-22-007,PGC 060995,UGC 11026;;; +NGC6506;OCl;17:59:53.49;-24:41:07.2;Sgr;;;;;;;;;;;;;;;;;;;;; +NGC6507;OCl;17:59:50.79;-17:27:01.0;Sgr;4.80;;;;9.60;;;;;;;;;;;;;MWSC 2770;;; +NGC6508;G;17:49:46.44;+72:01:16.0;Dra;1.29;1.09;23;14.00;;10.72;10.03;9.69;23.52;E;;;;;;;;2MASX J17494650+7201162,MCG +12-17-010,PGC 060938,UGC 11023;;; +NGC6509;G;17:59:25.27;+06:17:13.3;Oph;1.45;1.24;104;13.40;;10.46;9.81;9.73;22.75;SABc;;;;;;;;2MASX J17592526+0617134,IRAS 17569+0617,MCG +01-46-002,PGC 061230,UGC 11075;;; +NGC6510;G;17:54:39.30;+60:49:04.5;Dra;0.83;0.48;15;15.50;;12.24;11.57;11.18;22.39;SBbc;;;;;6511;;;2MASX J17543929+6049043,IRAS 17540+6049,MCG +10-25-114,PGC 061086,UGC 11051;;; +NGC6511;Dup;17:54:39.30;+60:49:04.5;Dra;;;;;;;;;;;;;;;6510;;;;;; +NGC6512;G;17:54:50.31;+62:38:42.3;Dra;0.81;0.66;36;14.80;;11.29;10.59;10.34;23.21;E;;;;;;;;2MASX J17545032+6238422,MCG +10-25-115,PGC 061089;;; +NGC6513;G;17:59:34.53;+24:52:49.9;Her;1.08;0.77;32;14.70;;11.02;10.30;10.03;23.50;S0;;;;;;;;2MASX J17593425+2453128,2MASX J17593454+2452498,MCG +04-42-018,PGC 061235,UGC 11078;;; +NGC6514;Neb;18:02:42.11;-22:58:18.8;Sgr;28.00;28.00;;6.30;8.50;;;;;;;;;020;;;;LBN 27,MWSC 2789;Trifid Nebula;;B-Mag taken from LEDA, V-mag taken from HEASARC's messier table +NGC6515;G;17:57:25.19;+50:43:41.2;Dra;1.53;1.14;17;14.30;;10.82;10.14;9.85;23.97;E;;;;;;;;2MASX J17572518+5043407,MCG +08-33-003,PGC 061167,SDSS J175725.19+504341.1,UGC 11071;;; +NGC6516;G;17:55:16.78;+62:40:11.5;Dra;0.74;0.32;146;15.70;;12.03;11.30;11.04;23.68;S0-a;;;;;;;;2MASX J17551683+6240116,MCG +10-25-118,PGC 061109;;Position in 1995ApJ...449..422H is incorrect.; +NGC6517;GCl;18:01:50.39;-08:57:34.2;Oph;4.80;;;11.08;;7.02;6.21;6.00;;;;;;;;;;2MASX J18015037-0857343,MWSC 2780;;; +NGC6518;G;17:59:43.74;+28:52:00.0;Her;0.80;0.64;53;15.10;;11.23;10.51;10.26;23.29;E;;;;;;;;2MASX J17594376+2851598,MCG +05-42-024,PGC 061238;;; +NGC6519;**;18:03:20.13;-29:48:15.3;Sgr;;;;;;;;;;;;;;;;;;;;; +NGC6520;OCl;18:03:24.14;-27:53:10.0;Sgr;5.40;;;;7.60;;;;;;;;;;;;;MWSC 2790;;; +NGC6521;G;17:55:48.44;+62:36:44.1;Dra;1.55;1.01;157;14.30;;10.54;9.86;9.58;23.76;E;;;;;;;;2MASX J17554844+6236435,MCG +10-25-119,PGC 061121,UGC 11061;;; +NGC6522;GCl;18:03:34.07;-30:02:02.3;Sgr;3.90;;;10.68;9.48;;;;;;;;;;;;;MWSC 2792;;; +NGC6523;Neb;18:03:41.27;-24:22:48.6;Sgr;45.00;30.00;;5.00;5.80;;;;;;;;;008;6533;;;LBN 25;Lagoon Nebula;Nominal position for NGC 6533 is -30 arcmin in error.;B-Mag taken from LEDA, V-mag taken from HEASARC's messier table +NGC6524;G;17:59:14.71;+45:53:13.5;Her;1.63;0.99;156;14.00;;10.70;10.00;9.70;23.65;E-S0;;;;;;;;2MASX J17591469+4553134,IRAS 17578+4553,MCG +08-33-005,PGC 061221,SDSS J175914.73+455314.6,UGC 11079;;; +NGC6525;OCl;18:02:04.75;+11:02:18.0;Oph;5.40;;;;;;;;;;;;;;;;;MWSC 2784;;; +NGC6526;Neb;18:04:06.15;-24:26:30.8;Sgr;40.00;40.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC6527;G;18:01:46.33;+19:43:43.4;Her;1.48;1.13;146;14.90;;10.66;9.86;9.54;24.22;Sa;;;;;;;;2MASX J18014639+1943444,MCG +03-46-009,PGC 061297,UGC 11094;;; +NGC6528;GCl;18:04:49.61;-30:03:20.8;Sgr;3.60;;;12.12;10.65;;;;;;;;;;;;;ESO 456-048,MWSC 2800;;; +NGC6529;*Ass;18:05:28.86;-36:17:43.4;Sgr;;;;;;;;;;;;;;;;;;;;Rich Milky Way star field.; +NGC6530;Cl+N;18:04:31.03;-24:21:29.0;Sgr;6.00;;;4.74;4.60;;;;;;;;;;;;;MWSC 2798;;; +NGC6531;OCl;18:04:13.45;-22:29:24.2;Sgr;6.00;;;;5.90;;;;;;;;;021;;;;MWSC 2796;;;V-mag taken from LEDA +NGC6532;G;17:59:13.95;+56:13:54.4;Dra;1.69;0.66;120;15.00;;12.13;11.43;11.44;23.97;Sc;;;;;;;;2MASX J17591393+5613542,MCG +09-29-045,PGC 061220,UGC 11085;;; +NGC6533;Dup;18:03:41.27;-24:22:48.6;Sgr;;;;;;;;;;;;;;;6523;;;;;; +NGC6534;G;17:56:08.56;+64:17:01.3;Dra;0.93;0.49;17;15.50;;12.63;11.72;11.52;24.16;;;;;;;;;2MASX J17560856+6417009,MCG +11-22-013,PGC 061126;;Identification as NGC 6534 is very uncertain.; +NGC6535;GCl;18:03:50.69;-00:17:48.9;Se2;3.60;;;11.35;9.85;;;;;;;;;;;;;MWSC 2795;;; +NGC6536;G;17:57:16.35;+64:56:17.1;Dra;1.14;0.92;125;14.30;;11.59;10.92;10.64;23.18;SBb;;;;;;;;2MASX J17571633+6456170,IRAS 17571+6456,MCG +11-22-016,PGC 061166,UGC 11077;;; +NGC6537;PN;18:05:13.10;-19:50:34.7;Sgr;0.17;;;12.50;11.60;10.55;10.18;9.17;;;;19.80;18.80;;;;HD 312582,UCAC2 24178895;2MASX J18051311-1950348,ESO 590-001,PN G010.1+00.7;Red Spider Nebula;; +NGC6538;G;17:54:16.61;+73:25:26.2;Dra;0.94;0.52;50;14.10;;12.34;11.74;11.54;22.20;Sbc;;;;;;;;2MASX J17541656+7325262,IRAS 17554+7325,MCG +12-17-012,PGC 061072,UGC 11062;;; +NGC6539;GCl;18:04:49.75;-07:35:09.1;Se2;6.00;;;;;;;;;;;;;;;;;MWSC 2801;;; +NGC6540;GCl;18:06:07.95;-27:45:46.1;Sgr;4.08;;;;;;;;;;;;;;;;;MWSC 2804;;; +NGC6541;GCl;18:08:02.33;-43:42:57.2;CrA;7.50;;;8.06;7.32;;;;;;;;;;;;;C 078,MWSC 2813;;; +NGC6542;G;17:59:38.62;+61:21:33.8;Dra;1.38;0.40;97;14.00;;11.79;11.40;11.04;23.31;S0-a;;;;;;;;2MASX J17593860+6121339,IRAS 17591+6121,MCG +10-25-126,PGC 061239,UGC 11092;;; +NGC6543;PN;17:58:33.39;+66:37:59.5;Dra;0.33;;;9.79;9.01;8.95;9.08;8.34;;;;11.23;11.14;;;;BD +66 1066,HD 164963;2MASX J17583335+6637591,C 006,IRAS 17584+6638,PN G096.4+29.9;Cat's Eye Nebula;Additional radio sources may contribute to the WMAP flux.;Dimensions taken from LEDA +NGC6544;GCl;18:07:20.00;-24:59:54.1;Sgr;6.00;;;11.36;9.90;6.24;5.54;5.37;;;;;;;;;;2MASX J18071996-2459542,MWSC 2810;;; +NGC6545;G;18:12:14.77;-63:46:34.1;Pav;1.11;0.97;151;14.19;;10.90;10.12;9.89;23.31;E;;;;;;;;2MASX J18121473-6346339,ESO 103-006,ESO-LV 103-0060,PGC 061551;;; +NGC6546;OCl;18:07:22.55;-23:17:46.4;Sgr;6.90;;;8.65;8.00;;;;;;;;;;;;;MWSC 2812;;; +NGC6547;G;18:05:10.02;+25:13:57.4;Her;1.63;0.58;134;14.30;;10.44;9.74;9.49;23.94;S0-a;;;;;;;;2MASX J18051001+2513575,MCG +04-43-001,PGC 061378,UGC 11110;;; +NGC6548;G;18:05:49.50;+18:32:16.9;Her;1.22;0.30;52;14.80;;11.26;10.47;10.07;22.93;Sb;;;;;6549;;;2MASX J18054951+1832167,IRAS 18036+1831,MCG +03-46-012,PGC 061399,UGC 11114;;; +NGC6549;Dup;18:05:49.50;+18:32:16.9;Her;;;;;;;;;;;;;;;6548;;;;;; +NGC6550;G;18:05:59.24;+18:35:14.1;Her;2.65;2.37;155;13.10;;9.59;8.89;8.59;23.61;S0;;;;;;;;2MASX J18055923+1835139,MCG +03-46-013,PGC 061404,UGC 11115;;; +NGC6551;Other;18:08:59.66;-29:33:27.6;Sgr;;;;;;;;;;;;;;;;;;;;Nothing in this position. Is NGC 6551 = NGC 6522?; +NGC6552;G;18:00:07.23;+66:36:54.4;Dra;1.06;0.73;103;14.60;;11.44;10.73;10.32;23.16;SBab;;;;;;;;2MASX J18000730+6636543,IRAS 18001+6638,MCG +11-22-018,PGC 061252,UGC 11096;;; +NGC6553;GCl;18:09:17.48;-25:54:28.3;Sgr;5.40;;;9.08;;;;;;;;;;;;;;MWSC 2824;;; +NGC6554;OCl;18:09:23.98;-18:22:43.3;Sgr;8.70;;;;;;;;;;;;;;;;;MWSC 2821;;; +NGC6555;G;18:07:49.17;+17:36:17.6;Her;1.96;1.61;115;12.70;;10.71;10.05;9.84;23.03;SABc;;;;;;;;2MASX J18074916+1736176,IRAS 18056+1735,MCG +03-46-015,PGC 061432,UGC 11121;;HOLM 774B is a clump of stars.; +NGC6556;*Ass;18:09:57.59;-27:31:29.3;Sgr;;;;;;;;;;;;;;;;;;;;; +NGC6557;G;18:21:24.82;-76:34:58.7;Oct;1.38;0.92;77;13.99;;10.28;9.57;9.25;23.35;S0;;;;;;;;2MASX J18212466-7634598,ESO 045-001,PGC 061770;;; +NGC6558;GCl;18:10:18.38;-31:45:48.5;Sgr;5.40;;;12.39;11.29;;;;;;;;;;;;;ESO 456-062,MWSC 2831;;; +NGC6559;Neb;18:09:56.85;-24:06:23.0;Sgr;15.00;10.00;;;;;;;;;;;;;;;;ESO 521-040,LBN 28;;; +NGC6560;G;18:05:13.98;+46:52:53.7;Her;1.12;0.61;62;14.20;;11.93;11.32;10.84;22.78;SABa;;;;;;;;2MASX J18051398+4652535,IRAS 18038+4652,MCG +08-33-019,PGC 061381,UGC 11117;;; +NGC6561;OCl;18:10:30.86;-16:43:32.4;Sgr;6.00;;;;;;;;;;;;;;;;;MWSC 2834;;; +NGC6562;G;18:05:00.91;+56:15:47.2;Dra;1.00;0.95;60;14.70;;11.22;10.51;10.26;23.59;E;;;;;;;;2MASX J18050098+5615465,MCG +09-29-051,PGC 061376;;; +NGC6563;PN;18:12:02.50;-33:52:06.0;Sgr;0.79;;;13.80;11.00;;;;;;;17.33;;;;;HD 166449;ESO 394-033,PN G358.5-07.3;;; +NGC6564;Other;18:09:02.37;+17:23:40.7;Her;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC6565;PN;18:11:52.60;-28:10:42.0;Sgr;0.23;;;13.20;11.60;;;;;;;;18.50;;;;HD 166468,UCAC3 124-398661;ESO 456-070,PN G003.5-04.6;;; +NGC6566;G;18:07:00.67;+52:15:36.4;Dra;0.67;0.60;21;15.50;;11.88;11.18;10.92;23.50;E;;;;;;;;2MASX J18070070+5215363,MCG +09-30-001,PGC 061418;;Star superposed northwest side.; +NGC6567;PN;18:13:45.20;-19:04:33.0;Sgr;0.13;;;11.70;11.00;11.76;11.56;10.30;;;;14.42;14.36;;;;BD -19 18107,HD 166935;ESO 590-008,PN G011.7-00.6;;; +NGC6568;OCl;18:12:44.25;-21:37:40.9;Sgr;7.80;;;;8.60;;;;;;;;;;;;;MWSC 2841;;; +NGC6569;GCl;18:13:38.67;-31:49:39.6;Sgr;4.50;;;10.78;9.47;;;;;;;;;;;;;2MASX J18133867-3149395,ESO 456-077,MWSC 2844;;; +NGC6570;G;18:11:07.30;+14:05:35.1;Oph;1.59;0.86;24;13.20;;10.77;10.13;9.87;22.49;SBm;;;;;;;;2MASX J18110729+1405352,IRAS 18088+1404,MCG +02-46-008,PGC 061512,UGC 11137;;; +NGC6571;G;18:10:49.36;+21:14:18.6;Her;0.79;0.58;50;15.40;;11.58;10.86;10.70;;E;;;;;;;;2MASX J18104931+2114193,MCG +04-43-006,PGC 061504;;Star superposed southeast side of core.;Diameters and position angle taken from Simbad. +NGC6572;PN;18:12:06.21;+06:51:13.4;Oph;0.18;;;9.00;8.10;8.59;8.82;7.99;;;;13.10;;;;;BD +06 3649,HD 166802;2MASX J18120627+0651129,IRAS 18096+0650,PN G034.6+11.8;;; +NGC6573;*Ass;18:14:22.98;-22:10:27.7;Sgr;3.18;;;;;;;;;;;;;;;;;MWSC 2845;;NGC identification is very uncertain.; +NGC6574;G;18:11:51.23;+14:58:54.4;Her;1.57;1.20;160;12.50;;9.50;8.73;8.41;22.30;SABb;;;;;6610;;;2MASX J18115122+1458542,IRAS 18095+1458,MCG +02-46-010,PGC 061536,UGC 11144;;; +NGC6575;G;18:10:57.49;+31:06:58.3;Her;1.50;1.08;64;14.40;;10.52;9.86;9.56;24.04;E;;;;;;;;2MASX J18105749+3106584,MCG +05-43-006,PGC 061506,UGC 11138;;; +NGC6576;G;18:11:48.02;+21:25:41.7;Her;0.76;0.65;139;15.50;;11.94;11.12;10.89;23.82;S0;;;;;;;;2MASX J18114802+2125414,PGC 061530;;; +NGC6577;G;18:12:01.23;+21:27:48.2;Her;1.23;1.06;179;14.70;;10.64;9.95;9.74;23.06;E;;;;;;;;2MASX J18120123+2127486,MCG +04-43-009,PGC 061543,UGC 11148;;; +NGC6578;PN;18:16:16.50;-20:27:03.3;Sgr;0.14;;;13.10;12.90;;;;;;;16.30;15.82;;;;;ESO 590-012,IRAS 18132-2028,PN G010.8-01.8;;; +NGC6579;G;18:12:31.81;+21:25:14.5;Her;1.15;0.78;33;;;;;;23.43;;;;;;;;;MCG +04-43-011,PGC 061562,UGC 11153 NED01;;Component 'a)' in UGC notes.; +NGC6580;G;18:12:33.70;+21:25:34.1;Her;1.39;0.82;98;14.50;;10.52;9.77;9.54;23.12;Sbc;;;;;;;;2MASX J18123372+2125338,MCG +04-43-012,PGC 061566,UGC 11153 NED02;;Component 'c)' in UGC notes.; +NGC6581;G;18:12:18.42;+25:39:44.5;Her;0.60;0.44;5;15.40;;11.43;10.73;10.47;23.10;E;;;;;;1280;;2MASX J18121844+2539443,MCG +04-43-010,PGC 061549;;; +NGC6582;GPair;18:11:03.50;+49:54:38.0;Her;1.40;;;;;;;;;;;;;;;;;UGC 11146;;MCG misidentifies 'NGC 6582' as 'MCG+08-33-026'.;Diameter of the group inferred by the author. +NGC6582 NED01;G;18:11:01.87;+49:54:42.8;Her;0.76;0.76;113;14.80;;;;;23.70;E-S0;;;;;;;;MCG +08-33-029,PGC 061510,UGC 11146 NED01;;; +NGC6582 NED02;G;18:11:05.16;+49:54:33.2;Her;1.45;1.00;146;16.00;;11.11;10.34;10.06;24.35;E;;;;;;;;2MASX J18110514+4954328,MCG +08-33-030,PGC 061513,UGC 11146 NED02;;; +NGC6583;OCl;18:15:48.93;-22:08:15.5;Sgr;3.60;;;;10.00;;;;;;;;;;;;;MWSC 2860;;; +NGC6584;GCl;18:18:37.65;-52:12:54.6;Tel;5.10;;;10.32;8.17;;;;;;;;;;;;;MWSC 2885;;; +NGC6585;G;18:12:21.79;+39:37:58.8;Her;2.01;0.45;50;13.60;;11.14;10.49;10.27;22.86;Sbc;;;;;;;;2MASX J18122179+3937588,IRAS 18107+3937,MCG +07-37-024,PGC 061553,UGC 11159;;; +NGC6586;G;18:13:38.50;+21:05:24.3;Her;1.15;0.59;104;14.60;;11.30;10.64;10.32;23.16;Sab;;;;;;;;2MASX J18133850+2105241,IRAS 18114+2104,MCG +04-43-016,PGC 061600,UGC 11164;;; +NGC6587;G;18:13:50.89;+18:49:30.7;Her;1.82;1.82;20;14.30;;10.13;9.38;9.15;23.80;E-S0;;;;;;;;2MASX J18135090+1849312,MCG +03-46-020,PGC 061607,UGC 11166;;; +NGC6588;Other;18:20:58.86;-63:48:35.9;Pav;5.40;;;;;;;;;;;;;;;;;;;3-4 stars including a close double star 30 seconds preceding nominal pos.; +NGC6589;Neb;18:16:55.37;-19:46:37.5;Sgr;4.00;3.00;;10.50;;;;;;;;;;;;4690;;LBN 43;;"The IC identification as IC 4690 is not certain; this is not IC 1283."; +NGC6590;RfN;18:17:04.99;-19:51:57.8;Sgr;4.00;3.00;;9.80;;;;;;;;;;;6595;4700;;LBN 46;;; +NGC6591;G;18:14:03.90;+21:03:50.0;Her;0.54;0.21;54;;;;;;23.78;;;;;;;;;2MASX J18140377+2103505,PGC 061610;;Two Galactic stars superposed. NGC identification is not certain.; +NGC6592;G;18:09:50.68;+61:25:19.1;Dra;0.81;0.65;116;15.50;;11.72;11.10;10.81;23.61;E;;;;;;;;2MASX J18095070+6125186,MCG +10-26-018,PGC 061477;;; +NGC6593;G;18:14:03.55;+22:17:02.1;Her;0.81;0.67;0;15.30;;11.03;10.32;10.10;;E-S0;;;;;;;;2MASX J18140351+2217015,MCG +04-43-018,PGC 061617;;;Diameters and position angle taken from Simbad. +NGC6594;G;18:10:05.52;+61:08:00.5;Dra;0.86;0.50;93;15.40;;12.10;11.41;11.06;23.44;Sab;;;;;;;;2MASX J18100555+6108006,MCG +10-26-019,PGC 061482;;; +NGC6595;Dup;18:17:04.99;-19:51:57.8;Sgr;;;;;;;;;;;;;;;6590;;;;;; +NGC6596;OCl;18:17:33.73;-16:39:01.6;Sgr;6.60;;;;;;;;;;;;;;;;;MWSC 2874;;; +NGC6597;G;18:11:13.45;+61:10:50.4;Dra;0.89;0.50;87;15.70;;12.07;11.46;11.20;23.99;E-S0;;;;;;;;2MASX J18111349+6110502,MCG +10-26-020,PGC 061520;;; +NGC6598;G;18:08:56.00;+69:04:04.4;Dra;1.18;0.87;35;14.20;;10.95;10.21;9.96;23.18;Sa;;;;;;;;2MASX J18085598+6904042,MCG +12-17-018,PGC 061462,UGC 11139;;; +NGC6599;G;18:15:42.98;+24:54:44.6;Her;1.23;1.14;35;13.71;12.82;10.27;9.56;9.33;22.92;S0;;;;;6600;;;2MASX J18154299+2454448,MCG +04-43-019,PGC 061655,UGC 11178;;Identification as NGC 6600 is not certain.; +NGC6600;Dup;18:15:42.98;+24:54:44.6;Her;;;;;;;;;;;;;;;6599;;;;;; +NGC6601;G;18:11:44.35;+61:27:11.9;Dra;0.79;0.49;45;15.60;;12.05;11.43;11.06;23.83;E-S0;;;;;;;;2MASX J18114437+6127121,MCG +10-26-022,PGC 061533;;; +NGC6602;G;18:16:34.29;+25:02:38.5;Her;0.77;0.57;178;14.60;;10.86;10.11;9.83;22.52;SABb;;;;;;;;2MASX J18163429+2502386,IRAS 18145+2501,MCG +04-43-021,PGC 061674,UGC 11184;;; +NGC6603;OCl;18:18:26.97;-18:24:21.8;Sgr;4.20;;;;11.10;;;;;;;;;;;;;ESO 590-017,MWSC 2883;;Included in the Milky Way starcloud MESSIER 024.; +NGC6604;OCl;18:18:02.96;-12:14:35.2;Se2;9.60;;;7.06;6.50;;;;;;;;;;;;;MWSC 2878;;; +NGC6605;OCl;18:16:21.68;-15:00:54.7;Se2;6.30;;;;6.00;;;;;;;;;;;;;MWSC 2882;;; +NGC6606;G;18:14:41.59;+43:16:07.1;Lyr;0.91;0.71;87;14.40;;11.04;10.28;10.02;22.86;Sa;;;;;;;;2MASX J18144160+4316068,MCG +07-37-025,PGC 061633,UGC 11174;;; +NGC6607;G;18:12:14.74;+61:19:58.5;Dra;0.55;0.48;54;15.00;;13.68;13.16;12.99;23.18;Sbc;;;;;;;;2MASX J18121472+6119581,MCG +10-26-023,PGC 061550;;; +NGC6608;G;18:12:28.88;+61:17:53.4;Dra;0.86;0.19;43;16.00;;13.52;12.75;12.12;23.73;Scd;;;;;;;;2MASX J18122885+6117531,MCG +10-26-024,PGC 061556;;MCG misidentifies this object as NGC 6609.; +NGC6609;G;18:12:33.57;+61:19:54.9;Dra;0.83;0.72;81;15.60;;11.78;11.05;10.74;23.74;E;;;;;;;;2MASX J18123354+6119551,MCG +10-26-025,PGC 061559;;MCG misidentifies this object as NGC 6608.; +NGC6610;Dup;18:11:51.23;+14:58:54.4;Her;;;;;;;;;;;;;;;6574;;;;;; +NGC6611;Neb;18:18:48.17;-13:48:26.0;Se2;120.00;25.00;;6.58;6.00;;;;;;;;;016;;;;LBN 67,MWSC 2886;Eagle Nebula;; +NGC6612;G;18:16:10.85;+36:04:42.8;Lyr;1.02;0.66;170;15.60;;11.93;11.31;11.08;24.14;;;;;;;;;2MASX J18161083+3604430,MCG +06-40-011,PGC 061665;;; +NGC6613;OCl;18:19:58.49;-17:06:07.1;Sgr;6.00;;;7.24;6.90;;;;;;;;;018;;;;MWSC 2892;;; +NGC6614;G;18:25:07.21;-63:14:54.1;Pav;1.64;1.26;69;13.80;;10.15;9.48;9.22;23.59;E-S0;;;;;;;;2MASX J18250719-6314539,ESO 103-018,ESO-LV 103-0180,PGC 061852;;; +NGC6615;G;18:18:33.47;+13:15:54.1;Oph;1.37;0.87;170;14.80;;10.23;9.54;9.25;23.73;S0-a;;;;;;;;2MASX J18183348+1315541,MCG +02-46-013,PGC 061713,UGC 11196;;; +NGC6616;G;18:17:41.08;+22:14:18.4;Her;1.35;0.57;55;15.20;;10.50;9.70;9.40;23.86;Sab;;;;;;;;2MASX J18174109+2214185,MCG +04-43-022,PGC 061693,SDSS J181741.06+221418.1,UGC 11192;;; +NGC6617;G;18:14:02.52;+61:19:10.4;Dra;0.90;0.52;73;15.60;;13.88;13.34;13.06;23.70;Sc;;;;;;;;2MASX J18140251+6119102,MCG +10-26-029,PGC 061613,UGC 11176;;; +NGC6618;Neb;18:20:47.11;-16:10:17.5;Sgr;12.60;;;6.00;7.00;;;;;;;;;017;;;;LBN 60,MWSC 2896;Checkmark Nebula,Lobster Nebula,Swan Nebula,omega Nebula;;B-Mag taken from LEDA, V-mag taken from HEASARC's messier table +NGC6619;G;18:18:55.54;+23:39:20.2;Her;1.38;0.89;104;14.30;;10.10;9.41;9.10;23.75;E;;;;;;;;2MASX J18185554+2339201,MCG +04-43-025,PGC 061721,UGC 11200;;UZC position applies to a superposed star.; +NGC6620;PN;18:22:54.15;-26:49:18.1;Sgr;0.13;;;15.00;12.70;13.63;13.73;12.80;;;;;19.60;;;;UCAC3 127-407067;ESO 522-022,PN G005.8-06.1;;; +NGC6621;G;18:12:55.31;+68:21:48.4;Dra;2.15;0.87;143;13.60;;11.03;10.27;9.87;23.18;Sb;;;;;6621N;;;2MASX J18125527+6821484,IRAS 18131+6820,MCG +11-22-030,PGC 061582,UGC 11175 NED01;;; +NGC6622;G;18:12:59.80;+68:21:14.0;Dra;0.97;0.87;117;16.00;;;;;23.18;Sab;;;;;6621S;;;MCG +11-22-031,PGC 061579,UGC 11175 NED02;;; +NGC6623;GPair;18:19:42.90;+23:42:20.0;Her;1.30;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC6623 NED01;G;18:19:42.82;+23:42:06.4;Her;0.15;0.15;;14.40;;;;;;;;;;;;;;MCG +04-43-027,PGC 061744,UGC 11203 NOTES01;;A star is superposed.; +NGC6623 NED02;G;18:19:42.86;+23:42:34.4;Her;1.35;1.20;140;14.40;;10.16;9.42;9.22;23.84;E;;;;;;;;2MASX J18194285+2342346,MCG +04-43-026,PGC 061739,UGC 11203;;; +NGC6624;GCl;18:23:40.57;-30:21:40.6;Sgr;3.30;;;;;;;;;;;;;;;;;ESO 457-011,MWSC 2906;;; +NGC6625;OCl;18:23:01.97;-12:01:25.5;Sct;6.00;;;;9.00;;;;;;;;;;;;;MWSC 2903;;NGC identification is not certain.; +NGC6626;GCl;18:24:32.89;-24:52:11.4;Sgr;5.10;;;;6.90;;;;;;;;;028;;;;MWSC 2908;;;V-mag taken from LEDA +NGC6627;G;18:22:38.92;+15:41:52.8;Her;1.07;0.96;75;14.50;;10.84;10.11;9.80;23.16;SBb;;;;;;;;2MASX J18223892+1541527,IRAS 18203+1540,MCG +03-47-001,PGC 061792,UGC 11212;;; +NGC6628;G;18:22:21.91;+23:28:42.8;Her;1.52;0.91;89;14.80;;10.39;9.64;9.31;24.16;S0;;;;;;;;2MASX J18222191+2328425,IRAS 18202+2327,MCG +04-43-029,PGC 061790,UGC 11211;;; +NGC6629;PN;18:25:42.46;-23:12:10.4;Sgr;0.26;;;11.60;11.30;10.42;10.15;9.60;;;;13.26;12.93;;;;HD 169460;2MASX J18254245-2312102,ESO 522-026,IRAS 18226-2313,PN G009.4-05.0;;; +NGC6630;G;18:32:35.14;-63:17:35.7;Pav;0.81;0.68;102;14.61;13.97;12.01;11.31;11.09;22.88;E-S0;;;;;;;;2MASX J18323520-6317362,ESO 103-026,ESO-LV 103-0260,IRAS 18278-6319,PGC 062008;;; +NGC6631;OCl;18:27:11.36;-12:01:52.4;Sct;5.70;;;;11.70;;;;;;;;;;;;;MWSC 2916;;; +NGC6632;G;18:25:03.09;+27:32:07.1;Her;2.40;1.16;156;13.20;;9.80;9.25;8.94;23.06;Sbc;;;;;;;;2MASX J18250309+2732073,IRAS 18230+2730,MCG +05-43-018,PGC 061849,UGC 11226;;; +NGC6633;OCl;18:27:15.23;+06:30:29.6;Oph;12.00;;;5.01;4.60;;;;;;;;;;;;;MWSC 2917;;; +NGC6634;Dup;18:31:23.23;-32:20:52.7;Sgr;;;;;;;;;;;;;;;6637;;;;;; +NGC6635;G;18:27:37.11;+14:49:08.6;Her;1.14;1.03;5;14.50;;10.36;9.62;9.33;23.44;S0;;;;;;;;2MASX J18273712+1449085,MCG +02-47-003,PGC 061900,UGC 11239;;; +NGC6636;GPair;18:22:03.50;+66:37:12.8;Dra;2.20;;;;;;;;;;;;;;;;;UGC 11221;;;Diameter of the group inferred by the author. +NGC6636 NED01;G;18:22:02.87;+66:36:59.6;Dra;1.91;0.46;6;14.20;;11.29;10.76;10.55;23.22;Sc;;;;;;;;2MASX J18220220+6636375,2MASX J18220287+6636596,MCG +11-22-046,PGC 061782,UGC 11221 NED01;;; +NGC6636 NED02;G;18:22:05.11;+66:37:19.2;Dra;0.72;0.39;8;16.00;;;;;23.64;Sab;;;;;;;;MCG +11-22-047,PGC 061780,UGC 11221 NED02;;Component 'b)' in UGC notes.; +NGC6637;GCl;18:31:23.23;-32:20:52.7;Sgr;5.70;;;9.32;8.31;;;;;;;;;069;6634;;;MWSC 2936;;; +NGC6638;GCl;18:30:56.25;-25:29:47.1;Sgr;4.20;;;10.81;9.68;;;;;;;;;;;;;MWSC 2933;;; +NGC6639;OCl;18:30:59.30;-13:09:21.0;Sct;6.00;;;;;;;;;;;;;;;;;MWSC 2934;;; +NGC6640;G;18:28:08.27;+34:18:09.6;Lyr;0.83;0.18;146;14.20;;11.31;10.59;10.33;21.63;Sc;;;;;;;;2MASX J18280824+3418096,IRAS 18263+3416,MCG +06-40-018,PGC 061913,UGC 11247;;; +NGC6641;G;18:28:57.37;+22:54:10.8;Her;0.93;0.81;100;14.30;;10.93;10.24;9.97;22.71;Sc;;;;;;;;2MASX J18285738+2254106,IRAS 18268+2252,MCG +04-43-035,PGC 061935,UGC 11250;;; +NGC6642;GCl;18:31:54.22;-23:28:34.1;Sgr;3.90;;;11.30;10.24;;;;;;;;;;;;;ESO 522-032,MWSC 2941;;; +NGC6643;G;18:19:46.41;+74:34:06.1;Dra;3.32;1.63;37;11.80;;9.25;8.56;8.29;22.51;Sc;;;;;;;;2MASX J18194636+7434062,IRAS 18212+7432,MCG +12-17-021,PGC 061742,UGC 11218;;; +NGC6644;PN;18:32:34.73;-25:07:45.7;Sgr;0.04;;;12.20;10.70;11.56;11.60;10.63;;;;16.60;15.60;;;;HD 170839;ESO 522-033,IRAS 18295-2510,PN G008.3-07.3;;; +NGC6645;OCl;18:32:37.90;-16:53:02.0;Sgr;5.40;;;;8.50;;;;;;;;;;;;;MWSC 2946;;; +NGC6646;G;18:29:38.74;+39:51:54.5;Lyr;1.49;1.25;67;13.70;;10.18;9.48;9.20;23.11;Sa;;;;;;;;2MASX J18293874+3951544,MCG +07-38-008,PGC 061944,UGC 11258;;; +NGC6647;OCl;18:32:49.34;-17:13:43.2;Sgr;3.60;;;;8.00;;;;;;;;;;;;;MWSC 2939;;; +NGC6648;Other;18:25:37.80;+64:58:34.2;Dra;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC6649;OCl;18:33:27.96;-10:24:10.1;Sct;5.58;;;10.35;8.90;;;;;;;;;;;;;MWSC 2949;;; +NGC6650;G;18:25:27.99;+68:00:21.0;Dra;0.73;0.66;40;14.80;;11.11;10.42;10.24;;E;;;;;;;;2MASX J18252791+6800208,PGC 061857;;;Diameters and position angle taken from Simbad. +NGC6651;G;18:24:19.71;+71:36:06.9;Dra;1.34;0.71;32;13.70;;11.26;10.58;10.25;22.75;Sbc;;;;;;;;2MASX J18241969+7136067,IRAS 18250+7134,MCG +12-17-022,PGC 061836,UGC 11236;;NGC 6651 is misidentified in CGCG and UGC. NED follows MCG and RC2.; +NGC6652;GCl;18:35:45.75;-32:59:25.1;Sgr;5.10;;;10.64;9.75;;;;;;;;;;;;;MWSC 2960;;; +NGC6653;G;18:44:38.37;-73:15:48.3;Pav;1.64;1.41;56;13.47;;9.97;9.18;8.96;23.31;E;;;;;;;;2MASX J18443832-7315485,ESO 045-013,PGC 062342;;; +NGC6654;G;18:24:07.57;+73:10:59.6;Dra;2.91;2.23;5;12.70;;9.55;8.86;8.59;23.84;S0-a;;;;;;;;2MASX J18240752+7310597,MCG +12-17-023,PGC 061833,UGC 11238;;; +NGC6654A;G;18:39:24.94;+73:34:47.1;Dra;2.11;0.44;59;13.60;;;;;22.86;SBcd;;;;;;;;2MASX J18392710+7334419,IRAS 18406+7331,MCG +12-17-029,PGC 062207,UGC 11332;;; +NGC6655;**;18:34:30.90;-05:55:15.1;Sct;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC6656;GCl;18:36:24.20;-23:54:12.3;Sgr;12.60;;;7.16;6.17;;;;;;;;;022;;;;MWSC 2961;;; +NGC6657;G;18:33:01.46;+34:03:37.7;Lyr;0.77;0.44;135;14.20;;11.17;10.42;10.13;21.87;SBc;;;;;;;;2MASX J18330147+3403376,IRAS 18312+3401,MCG +06-41-003,PGC 062019,UGC 11271;;; +NGC6658;G;18:33:55.65;+22:53:17.8;Her;1.50;0.25;5;15.00;;10.60;9.78;9.51;22.31;S0-a;;;;;;;;2MASX J18335567+2253178,MCG +04-44-002,PGC 062052,UGC 11274;;; +NGC6659;OCl;18:33:59.93;+23:35:41.6;Her;5.40;;;;;;;;;;;;;;;;;MWSC 2952;;; +NGC6660;G;18:34:36.67;+22:54:34.8;Her;1.95;1.13;143;14.10;;9.54;8.81;8.52;23.49;S0-a;;;;;6661;;;2MASX J18343666+2254347,MCG +04-44-003,PGC 062072,UGC 11282;;; +NGC6661;Dup;18:34:36.67;+22:54:34.8;Her;;;;;;;;;;;;;;;6660;;;;;; +NGC6662;G;18:34:11.18;+32:03:52.5;Lyr;1.65;0.51;18;14.90;;11.10;10.35;10.03;23.86;Sab;;;;;;;;2MASX J18341120+3203525,IRAS 18323+3201,MCG +05-44-003,PGC 062059,UGC 11280;;; +NGC6663;G;18:33:33.68;+40:02:56.2;Lyr;0.86;0.74;147;14.80;;12.18;11.55;11.22;23.25;SABc;;;;;;;;2MASX J18333369+4002561,MCG +07-38-011,PGC 062032,UGC 11276;;; +NGC6664;OCl;18:36:33.35;-08:13:14.7;Sct;6.00;;;8.81;7.80;;;;;;;;;;;;;MWSC 2962;;; +NGC6665;G;18:34:30.01;+30:43:14.0;Lyr;0.95;0.47;25;14.60;;11.41;10.70;10.38;22.69;Sab;;;;;;;;2MASX J18343000+3043139,IRAS 18325+3040,MCG +05-44-004,PGC 062065;;; +NGC6666;Other;18:34:44.93;+33:35:15.5;Lyr;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6667;G;18:30:39.79;+67:59:13.3;Dra;1.88;1.05;99;13.70;;10.35;9.67;9.30;23.33;SABa;;;;;6668,6678;;;2MASX J18303981+6759133,IRAS 18308+6756,MCG +11-22-053,PGC 061972,UGC 11269;;; +NGC6668;Dup;18:30:39.79;+67:59:13.3;Dra;;;;;;;;;;;;;;;6667;;;;;; +NGC6669;Other;18:37:15.09;+22:11:44.6;Her;;;;;;;;;;;;;;;;;;;;Six Galactic stars.; +NGC6670;GTrpl;18:33:35.45;+59:53:19.7;Dra;1.20;;;;;;;;;;;;;;;;;MCG +10-26-044,UGC 11284;;;Diameter of the group inferred by the author. +NGC6670A;G;18:33:37.72;+59:53:22.8;Dra;0.68;0.32;116;15.26;;12.49;11.80;11.33;23.45;;;;;;6670N;;;2MASX J18333768+5953227,MCG +10-26-044 NED01,PGC 062033,UGC 11284 NED01;;;B-Mag taken from LEDA +NGC6670B;G;18:33:34.09;+59:53:17.6;Dra;0.78;0.25;69;14.93;;11.93;11.15;10.63;23.27;Sc;;;;;6670W;;;2MASX J18333409+5953177,MCG +10-26-044 NED02,PGC200358,UGC 11284 NED02;;;B-Mag taken from LEDA +NGC6670 NED03;G;18:33:39.03;+59:53:17.3;Dra;;;;;;;;;;;;;;;6670E;;;PGC 200359,UGC 11284 NED03;;;Called 'UGC 11284 NED03' in NED +NGC6671;G;18:37:26.16;+26:25:01.9;Lyr;1.39;1.39;5;13.80;;10.23;9.49;9.22;23.18;Sb;;;;;;;;2MASX J18372616+2625018,IRAS 18354+2622,MCG +04-44-006,PGC 062148,UGC 11299;;; +NGC6672;**;18:36:14.39;+42:56:51.5;Lyr;;;;;;;;;;;;;;;;;;;;; +NGC6673;G;18:45:06.32;-62:17:50.0;Pav;2.60;1.44;27;12.69;;9.19;8.47;8.22;23.43;E;;;;;;;;2MASX J18450633-6217502,ESO 140-044,ESO-LV 140-0440,PGC 062351;;; +NGC6674;G;18:38:33.87;+25:22:30.5;Her;4.01;2.04;144;13.70;;9.95;9.15;9.03;24.18;Sb;;;;;;;;2MASX J18383388+2522303,IRAS 18365+2519,MCG +04-44-007,PGC 062178,UGC 11308;;; +NGC6675;G;18:37:26.48;+40:03:27.8;Lyr;1.31;0.94;131;13.30;;10.46;9.75;9.51;22.52;Sbc;;;;;;;;2MASX J18372647+4003277,IRAS 18357+4000,MCG +07-38-013,PGC 062149,UGC 11305;;; +NGC6676;G;18:33:09.96;+66:57:32.6;Dra;1.50;0.37;141;15.30;;11.78;11.00;10.75;23.68;Sbc;;;;;;;;2MASX J18331000+6657324,IRAS 18331+6655,MCG +11-22-054,PGC 062021,UGC 11286;;; +NGC6677;G;18:33:36.13;+67:06:38.7;Dra;0.84;0.35;103;13.60;;;;;21.53;Sbc;;;;;;;;2MASX J18333612+6706384,MCG +11-22-057,PGC 062035,UGC 11290;;May be a resolved component of WN B1833+6704.; +NGC6678;Dup;18:30:39.79;+67:59:13.3;Dra;;;;;;;;;;;;;;;6667;;;;;; +NGC6679;G;18:33:30.50;+67:08:14.3;Dra;0.60;0.35;99;;;11.79;11.06;10.88;;E;;;;;;4763;;2MASX J18333046+6708144,MCG +11-22-055,PGC 062026,UGC 11288 NED01;;May be a resolved component of WN B1833+6704.; +NGC6680;G;18:39:43.97;+22:18:59.1;Her;0.63;0.41;60;15.40;;12.20;11.51;11.13;23.15;;;;;;;;;2MASX J18394397+2218592,IRAS 18375+2216,PGC 062210;;; +NGC6681;GCl;18:43:12.64;-32:17:30.8;Sgr;6.60;;;9.76;9.06;;;;;;;;;070;;;;MWSC 2981;;; +NGC6682;OCl;18:39:37.36;-04:48:49.3;Sct;4.50;;;;;;;;;;;;;;;;;MWSC 2968;;; +NGC6683;OCl;18:42:13.97;-06:12:44.1;Sct;3.00;;;9.93;9.40;;;;;;;;;;;;;MWSC 2977;;; +NGC6684;G;18:48:57.88;-65:10:24.4;Pav;4.19;2.96;29;11.34;10.45;8.06;7.14;7.05;23.15;S0;;;;;;;;2MASX J18485789-6510244,ESO 104-016,ESO-LV 104-0160,PGC 062453;;; +NGC6684A;G;18:52:22.81;-64:49:53.3;Pav;1.95;1.34;140;13.21;;;;;23.26;IB;;;;;;;;ESO 104-019,ESO-LV 104-0190,PGC 062517;;; +NGC6685;G;18:39:58.64;+39:58:54.4;Lyr;0.95;0.70;38;14.70;;11.17;10.45;10.27;23.34;E-S0;;;;;;;;2MASX J18395865+3958541,MCG +07-38-015,PGC 062220,SDSS J183958.62+395854.5,UGC 11317;;; +NGC6686;G;18:40:07.02;+40:08:15.5;Lyr;0.63;0.56;153;14.90;;11.55;10.87;10.65;23.04;E;;;;;;;;2MASX J18400701+4008151,MCG +07-38-017,PGC 062224,SDSS J184007.01+400815.4;;; +NGC6687;G;18:37:22.11;+59:38:34.7;Dra;1.25;0.94;46;14.90;;11.99;11.35;10.92;23.92;Scd;;;;;;;;2MASX J18372211+5938348,MCG +10-26-046,PGC 062144,UGC 11309;;; +NGC6688;G;18:40:40.13;+36:17:22.7;Lyr;1.64;1.59;40;13.90;;10.04;9.29;9.05;23.66;S0-a;;;;;;;;2MASX J18404012+3617226,MCG +06-41-015,PGC 062242,UGC 11324;;; +NGC6689;G;18:34:50.25;+70:31:26.1;Dra;3.29;0.91;171;12.60;;10.79;10.07;10.14;23.29;SABc;;;;;6690;;;2MASX J18345024+7031259,IRAS 18354+7028,MCG +12-17-026,PGC 062077,UGC 11300;;; +NGC6690;Dup;18:34:50.25;+70:31:26.1;Dra;;;;;;;;;;;;;;;6689;;;;;; +NGC6691;G;18:39:12.25;+55:38:30.5;Dra;1.47;1.37;35;14.10;;11.06;10.42;10.07;23.09;Sbc;;;;;;;;2MASX J18391226+5538305,IRAS 18382+5535,MCG +09-30-031,PGC 062202,UGC 11318;;; +NGC6692;GPair;18:41:41.50;+34:50:37.0;Lyr;1.05;0.55;119;14.30;;10.81;10.09;9.82;23.43;E-S0;;;;;;;;2MASX J18414185+3450377,MCG +06-41-018,PGC 062268,UGC 11330;;; +NGC6693;Other;18:41:32.43;+36:54:57.0;Lyr;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6694;OCl;18:45:18.66;-09:23:01.0;Sct;6.00;;;8.00;8.87;;;;;;;;;026;;;;MWSC 2987;;; +NGC6695;G;18:42:42.74;+40:22:00.8;Lyr;1.21;0.67;13;14.37;13.49;11.38;10.65;10.37;23.12;SBb;;;;;;;;2MASX J18424272+4022006,IRAS 18410+4018,MCG +07-38-018,PGC 062296,UGC 11340;;; +NGC6696;G;18:40:05.04;+59:20:02.3;Dra;0.91;0.23;1;16.00;;12.45;11.69;11.44;24.54;;;;;;;;;2MASX J18400502+5920022,MCG +10-26-047,PGC 062215;;; +NGC6697;G;18:45:14.96;+25:30:45.3;Her;1.19;0.95;65;14.50;;10.40;9.68;9.44;23.70;E;;;;;;;;2MASX J18451494+2530451,MCG +04-44-014,PGC 062354,UGC 11349;;; +NGC6698;OCl;18:48:05.01;-25:28:37.8;Sgr;4.98;;;;;;;;;;;;;;;;;MWSC 2995;;"NGC ident. uncertain; nominal position for NGC 6698 is 25 arcmin south."; +NGC6699;G;18:52:02.04;-57:19:14.7;Pav;1.74;1.71;95;12.86;12.00;9.86;9.18;8.89;22.74;SABb;;;;;;;;2MASX J18520202-5719149,ESO 183-021,ESO-LV 183-0210,IRAS 18477-5722,PGC 062512;;; +NGC6700;G;18:46:04.39;+32:16:46.6;Lyr;1.52;1.01;114;14.20;;10.73;10.02;9.80;23.42;SBc;;;;;;;;2MASX J18460440+3216465,IRAS 18441+3213,MCG +05-44-010,PGC 062376,UGC 11351;;; +NGC6701;G;18:43:12.46;+60:39:12.0;Dra;1.42;1.36;120;12.90;;10.29;9.61;9.30;22.54;Sa;;;;;;;;2MASX J18431242+6039121,IRAS 18425+6036,MCG +10-26-050,PGC 062314,UGC 11348;;; +NGC6702;G;18:46:57.58;+45:42:20.4;Lyr;1.64;1.42;58;14.73;13.05;10.16;9.41;9.18;23.19;E;;;;;;;;2MASX J18465757+4542205,MCG +08-34-019,PGC 062395,UGC 11354;;; +NGC6703;G;18:47:18.83;+45:33:02.3;Lyr;2.43;2.38;85;12.29;11.34;9.17;8.51;8.25;23.07;E-S0;;;;;;;;2MASX J18471884+4533023,MCG +08-34-020,PGC 062409,UGC 11356;;; +NGC6704;OCl;18:50:45.77;-05:12:19.5;Sct;3.30;;;10.00;9.20;;;;;;;;;;;;;MWSC 3007;;; +NGC6705;OCl;18:51:05.99;-06:16:12.1;Sct;9.00;;;6.32;5.80;;;;;;;;;011;;;;MWSC 3008;Amas de l'Ecu de Sobieski,Wild Duck Cluster;; +NGC6706;G;18:56:51.04;-63:09:58.4;Pav;1.70;0.77;124;13.88;;10.62;9.91;9.67;23.87;E-S0;;;;;;;;2MASX J18565104-6309582,ESO 104-024,ESO-LV 104-0240,PGC 062596;;; +NGC6707;G;18:55:22.06;-53:49:06.4;Tel;2.62;1.05;143;13.25;13.64;10.55;9.94;9.65;23.38;SBc;;;;;;;;2MASX J18552204-5349065,ESO 183-025,ESO-LV 183-0250,IRAS 18512-5352,PGC 062563;;Confused HIPASS source; +NGC6708;G;18:55:35.64;-53:43:24.4;Tel;1.16;0.86;163;13.36;12.93;10.93;10.32;10.04;22.26;Sb;;;;;;;;2MASX J18553565-5343242,ESO 183-027,ESO-LV 183-0270,IRAS 18515-5347,PGC 062569;;; +NGC6709;OCl;18:51:18.94;+10:19:07.5;Aql;8.70;;;7.18;6.70;;;;;;;;;;;;;MWSC 3009;;; +NGC6710;G;18:50:34.15;+26:50:18.2;Lyr;1.68;0.93;38;14.60;;10.40;9.65;9.35;23.92;S0-a;;;;;;;;2MASX J18503415+2650180,MCG +04-44-019,PGC 062482,UGC 11364;;; +NGC6711;G;18:49:00.88;+47:39:29.2;Dra;1.03;0.94;70;13.98;13.27;11.16;10.59;10.02;22.45;Sbc;;;;;;;;2MASX J18490084+4739293,IRAS 18476+4735,MCG +08-34-025,PGC 062456,UGC 11361;;; +NGC6712;GCl;18:53:04.89;-08:42:19.7;Sct;5.70;;;9.85;8.69;;;;;;;;;;;;;MWSC 3014;;; +NGC6713;G;18:50:44.56;+33:57:35.2;Lyr;0.48;0.44;110;14.20;;12.37;11.74;11.55;21.37;;;;;;;;;2MASX J18504456+3357353,IRAS 18489+3353,PGC 062487,UGC 11365;;; +NGC6714;Other;18:45:49.78;+66:43:31.0;Dra;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6715;GCl;18:55:03.27;-30:28:42.6;Sgr;5.10;;;;7.70;;;;;;;;;054;;;;MWSC 3023;;Likely associated with the Sagittarius Dwarf Spheroidal.;V-mag taken from LEDA +NGC6716;OCl;18:54:34.37;-19:54:03.9;Sgr;7.20;;;7.70;7.50;;;;;;;;;;;;;MWSC 3020;;; +NGC6717;GCl;18:55:06.04;-22:42:05.8;Sgr;3.90;;;11.29;10.35;;;;;;;;;;;;;ESO 523-014,MWSC 3024;;; +NGC6718;G;19:01:28.63;-66:06:36.7;Pav;1.48;0.74;171;14.16;;10.94;10.04;9.86;23.23;SBb;;;;;;;;2MASX J19012865-6606366,ESO 104-029,ESO-LV 104-0290,PGC 062688;;; +NGC6719;G;19:03:07.49;-68:35:18.1;Pav;1.66;0.84;109;13.49;;11.36;10.90;10.55;22.74;SBc;;;;;;;;2MASX J19030748-6835181,ESO 072-008,ESO-LV 72-0080,IRAS 18578-6839,PGC 062710;;; +NGC6720;PN;18:53:35.01;+33:01:42.9;Lyr;1.27;;;9.70;8.80;16.40;;;;;;15.03;15.29;057;;;HD 175353;IRAS 18517+3257,PN G063.1+13.9;Ring Nebula;; +NGC6721;G;19:00:50.81;-57:45:34.0;Pav;1.90;1.58;155;13.23;12.04;9.90;9.18;8.89;23.33;E;;;;;;;;2MASX J19005081-5745337,ESO 141-019,ESO-LV 141-0190,PGC 062680;;; +NGC6722;G;19:03:40.37;-64:53:40.1;Pav;2.93;0.51;164;13.56;;9.96;9.25;8.91;23.56;Sb;;;;;;;;2MASX J19034037-6453401,ESO 104-033,ESO-LV 104-0330,PGC 062722;;; +NGC6723;GCl;18:59:33.15;-36:37:53.3;Sgr;9.30;;;;;;;;;;;;;;;;;MWSC 3033;;; +NGC6724;OCl;18:56:46.88;+10:25:42.8;Aql;3.18;;;;;;;;;;;;;;;;;MWSC 3029;;NGC identification is not certain.; +NGC6725;G;19:01:56.62;-53:51:47.1;Tel;2.65;0.52;40;13.41;;9.98;9.28;9.03;24.08;S0;;;;;;;;2MASX J19015663-5351471,ESO 183-036,ESO-LV 183-0360,PGC 062692;;; +NGC6726;RfN;19:01:39.30;-36:53:28.7;CrA;9.00;7.00;;;;;;;;;;;;;;;;IRAS 18583-3657;;;Dimensions taken from LEDA +NGC6727;RfN;19:01:42.27;-36:52:34.5;CrA;80.00;80.00;;;;;;;;;;;;;;;;IRAS 18583-3657;;;Dimensions taken from LEDA +NGC6728;OCl;18:58:45.04;-08:57:57.6;Aql;4.50;;;;;;;;;;;;;;;;;MWSC 3032;;NGC identification is not certain.; +NGC6729;Neb;19:01:55.40;-36:57:27.5;CrA;25.00;20.00;;;;;;;;;;;;;;;;C 068,IRAS 18585-3701;;;Dimensions taken from LEDA +NGC6730;G;19:07:33.65;-68:54:46.1;Pav;2.20;1.83;31;13.07;;9.97;9.27;8.99;23.62;E;;;;;;;;2MASX J19073369-6854462,ESO 072-009,ESO-LV 72-0090,PGC 062796;;; +NGC6731;**;18:57:13.47;+43:04:36.4;Lyr;;;;;;;;;;;;;;;;;;;;; +NGC6732;G;18:56:24.02;+52:22:39.4;Dra;0.94;0.68;103;14.40;;10.93;10.25;9.94;23.18;E;;;;;;;;2MASX J18562403+5222394,MCG +09-31-011,PGC 062586,UGC 11381;;; +NGC6733;G;19:06:10.63;-62:11:48.9;Pav;1.96;1.39;109;13.41;;10.20;9.51;9.27;23.63;E-S0;;;;;;;;2MASX J19061060-6211491,ESO 141-025,ESO-LV 141-0250,PGC 062770;;; +NGC6734;G;19:07:14.33;-65:27:42.7;Pav;1.38;0.90;14;13.75;;10.62;9.89;9.63;23.20;E-S0;;;;;;;;2MASX J19071434-6527428,ESO 104-036,ESO-LV 104-0360,PGC 062786;;; +NGC6735;OCl;19:00:37.36;-00:28:31.4;Aql;5.10;;;;;;;;;;;;;;;;;MWSC 3034;;; +NGC6736;G;19:07:29.25;-65:25:43.0;Pav;1.11;0.88;67;14.31;;11.35;10.80;10.45;23.41;E;;;;;;;;2MASX J19072926-6525427,ESO 104-037,ESO-LV 104-0370,PGC 062792;;; +NGC6737;OCl;19:02:17.47;-18:32:49.1;Sgr;6.60;;;;;;;;;;;;;;;;;MWSC 3042;;; +NGC6738;*Ass;19:01:21.56;+11:36:56.2;Aql;5.40;;;;8.30;;;;;;;;;;;;;MWSC 3035;;Not a physical cluster. See Boeche et al (2003A&A...406..893B).; +NGC6739;G;19:07:48.76;-61:22:05.2;Pav;2.65;0.89;173;13.09;;9.80;9.10;8.87;23.90;S0;;;;;;;;2MASX J19074878-6122051,ESO 141-028,ESO-LV 141-0280,PGC 062799;;; +NGC6740;G;19:00:50.51;+28:46:16.4;Lyr;1.09;0.76;31;15.50;;11.33;10.62;10.23;23.65;Sc;;;;;;;;2MASX J19005048+2846164,IRAS 18587+2841,MCG +05-45-001,PGC 062675,UGC 11388;;; +NGC6741;PN;19:02:37.00;-00:26:57.8;Aql;0.13;;;10.80;11.50;12.54;12.48;11.19;;;;20.30;;;;;BD-00 3630,HD 176946;IRAS 19000-0031,PN G033.8-02.6;Phantom Streak Nebula;; +NGC6742;PN;18:59:19.90;+48:27:55.0;Dra;0.45;;;15.00;13.40;;;;;;;;;;;;;PN G078.5+18.7;;; +NGC6743;OCl;19:01:20.67;+29:16:38.9;Lyr;6.90;;;8.20;;;;;;;;;;;;;;MWSC 3036;;; +NGC6744;G;19:09:46.10;-63:51:27.1;Pav;15.67;9.75;15;9.28;8.25;6.73;6.20;5.94;23.47;Sbc;;;;;;;;2MASX J19094609-6351271,C 101,ESO 104-042,ESO-LV 104-0420,IRAS 19051-6357,PGC 062836;;Extended HIPASS source; +NGC6744A;G;19:08:43.76;-63:43:49.8;Pav;1.64;0.60;106;15.15;;;;;24.07;IB;;;;;;;;ESO 104-038,ESO-LV 104-0380,PGC 062815;;; +NGC6745;GTrpl;19:01:41.70;+40:45:11.0;Lyr;2.30;;;;;;;;;;;;;;;;;UGC 11391;;;Diameter of the group inferred by the author. +NGC6745 NED01;G;19:01:41.44;+40:44:52.3;Lyr;0.95;0.46;32;13.30;;11.34;10.66;10.29;22.95;;;;;;;;;IRAS 19000+4040,PGC 062691,UGC 11391 NED01;;; +NGC6745 NED02;G;19:01:41.73;+40:45:35.9;Lyr;0.69;0.22;174;16.34;;14.51;14.55;13.96;24.87;;;;;;;;;2MASX J19014170+4045361,PGC 200361,UGC 11391 NED02;;;B-Mag taken from LEDA +NGC6745 NED03;G;19:01:41.98;+40:45:04.9;Lyr;;;;;;;;;;;;;;;;;;PGC 200362,UGC 11391 NED03;;; +NGC6746;G;19:10:22.01;-61:58:12.6;Pav;1.56;1.09;170;13.69;;;;;23.50;E;;;;;;;;ESO 141-029,ESO-LV 141-0290,PGC 062852;;; +NGC6747;G;18:55:21.65;+72:46:17.5;Dra;0.65;0.50;126;15.00;;11.69;10.82;10.66;23.10;E;;;;;;;;2MASX J18552182+7246171,PGC 062564;;; +NGC6748;Other;19:03:50.05;+21:36:32.1;Vul;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6749;GCl;19:05:15.60;+01:54:02.2;Aql;5.10;;;;12.40;;;;;;;;;;;;;MWSC 3046;;; +NGC6750;G;19:00:36.11;+59:10:00.3;Dra;1.08;0.69;2;13.70;;11.18;10.43;10.22;22.41;Sc;;;;;;;;2MASX J19003607+5910001,IRAS 18598+5905,MCG +10-27-006,PGC 062671,UGC 11389;;; +NGC6751;PN;19:05:55.55;-05:59:32.3;Aql;0.34;;;12.50;11.90;11.94;11.75;10.83;;;;15.78;15.45;;;;HD 177656,UCAC2 29903231;2MASX J19055556-0559327,IRAS 19032-0604,PN G029.2-05.9;;; +NGC6752;GCl;19:10:51.78;-59:58:54.7;Pav;13.20;;;6.96;6.28;;;;;;;;;;6777;;;C 093,MWSC 3062;;Identity as NGC 6777 is uncertain.; +NGC6753;G;19:11:23.64;-57:02:58.4;Pav;2.97;2.60;25;11.84;11.04;8.50;7.80;7.52;22.92;Sb;;;;;;;;2MASX J19112363-5702584,ESO 184-022,ESO-LV 184-0220,IRAS 19071-5707,PGC 062870;;; +NGC6754;G;19:11:25.72;-50:38:30.5;Tel;2.02;1.08;77;12.86;;9.99;9.25;8.86;22.71;Sb;;;;;;;;2MASX J19112359-5038309,2MASX J19112575-5038319,ESO 231-025,ESO-LV 231-0250,IRAS 19075-5043,PGC 062871;;; +NGC6755;OCl;19:07:49.05;+04:15:59.1;Aql;6.00;;;8.60;7.50;;;;;;;;;;;;;MWSC 3051;;; +NGC6756;OCl;19:08:42.57;+04:42:20.8;Aql;3.60;;;;10.60;;;;;;;;;;;;;MWSC 3052;;; +NGC6757;G;19:05:03.38;+55:42:54.6;Dra;1.71;1.15;92;14.00;;;;;23.67;S0-a;;;;;;;;2MASX J19050335+5542544,MCG +09-31-019,PGC 062752,UGC 11401;;; +NGC6758;G;19:13:52.34;-56:18:35.8;Tel;2.75;2.14;111;12.53;11.56;9.31;8.57;8.35;23.66;E;;;;;;;;2MASX J19135231-5618356,ESO 184-037,ESO-LV 184-0370,PGC 062935;;; +NGC6759;G;19:06:56.84;+50:20:39.2;Dra;0.97;0.67;40;15.20;;11.21;10.49;10.25;23.62;Sa;;;;;;;;2MASX J19065686+5020387,2MASX J19065707+5020524,MCG +08-35-002,PGC 062779;;; +NGC6760;GCl;19:11:12.06;+01:01:49.7;Aql;5.40;;;11.37;9.78;;;;;;;;;;;;;MWSC 3064;;; +NGC6761;G;19:15:04.80;-50:39:24.6;Tel;1.63;1.42;22;13.81;13.67;10.79;10.11;9.79;24.00;SBab;;;;;;;;2MASX J19150481-5039246,ESO 231-028,ESO-LV 231-0280,PGC 062957;;; +NGC6762;G;19:05:37.08;+63:56:02.5;Dra;1.55;0.34;119;14.20;;11.16;10.38;10.21;23.47;S0-a;;;;;6763;;;2MASX J19053708+6356023,PGC 062757,UGC 11405;;UGC misprints dec as +63d68'. UGC galactic coordinates are correct.; +NGC6763;Dup;19:05:37.08;+63:56:02.5;Dra;;;;;;;;;;;;;;;6762;;;;;; +NGC6764;G;19:08:16.37;+50:55:59.6;Cyg;2.49;1.22;64;15.00;14.32;10.56;9.87;9.35;22.97;SBbc;;;;;;;;2MASX J19081634+5055591,IRAS 19070+5051,MCG +08-35-003,PGC 062806,UGC 11407;;; +NGC6765;PN;19:11:06.50;+30:32:44.0;Lyr;0.67;;;13.10;12.90;;;;;;;;16.00;;;;;IRAS 19091+3027,PN G062.4+09.5;;; +NGC6766;Other;19:10:03.07;+46:19:58.5;Lyr;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC6767;**;19:11:33.91;+37:43:31.6;Lyr;;;;;;;;;;;;;;;;;;;;; +NGC6768;G;19:16:32.60;-40:12:33.0;CrA;1.26;1.00;36;13.50;;9.83;9.11;8.82;23.06;E;;;;;;;;2MASX J19163258-4012332,ESO 337-018,MCG -07-39-010,PGC 062997;;; +NGC6769;G;19:18:22.68;-60:30:03.9;Pav;2.86;2.19;120;12.33;11.75;9.43;8.75;8.49;23.40;SABb;;;;;;;;2MASX J19182267-6030039,ESO 141-048,ESO-LV 141-0480,PGC 063042;;; +NGC6770;G;19:18:37.32;-60:29:47.3;Pav;2.39;1.72;33;12.44;11.94;9.75;9.12;8.87;23.14;Sb;;;;;;;;2MASX J19183732-6029472,ESO 141-049,ESO-LV 141-0490,PGC 063048;;Confused HIPASS source; +NGC6771;G;19:18:39.51;-60:32:45.6;Pav;2.38;0.54;121;13.41;12.52;9.98;9.28;9.00;24.06;S0-a;;;;;;;;2MASX J19183951-6032456,ESO 141-050,ESO-LV 141-0500,PGC 063049;;; +NGC6772;PN;19:14:36.30;-02:42:24.5;Aql;1.07;;;14.20;12.70;;;;;;;19.02;18.68;;;;;PN G033.1-06.3;;; +NGC6773;OCl;19:15:08.45;+04:51:23.6;Aql;;;;;;;;;;;;;;;;;;;;; +NGC6774;OCl;19:16:16.30;-16:15:38.5;Sgr;30.00;;;;;;;;;;;;;;;;;MWSC 3078;;; +NGC6775;OCl;19:16:42.86;-00:56:00.1;Aql;4.80;;;;;;;;;;;;;;;;;MWSC 3079;;; +NGC6776;G;19:25:19.15;-63:51:36.6;Pav;2.00;1.62;14;13.19;11.99;9.97;9.40;9.04;23.41;E;;;;;;;;2MASX J19251913-6351366,ESO 104-053,ESO-LV 104-0530,PGC 063185;;; +NGC6776A;G;19:25:05.38;-63:41:00.4;Pav;1.44;0.36;83;14.85;;11.88;11.04;11.11;23.25;SBc;;;;;;;;2MASX J19250536-6341005,ESO 104-052,ESO-LV 104-0520,IRAS 19204-6346,PGC 063181;;; +NGC6777;Dup;19:10:51.78;-59:58:54.7;Pav;;;;;;;;;;;;;;;6752;;;;;; +NGC6778;PN;19:18:24.85;-01:35:46.9;Aql;0.26;;;13.30;12.30;;;;;;;16.91;;;6785;;HD 180871;IRAS 19158-0141,PN G034.5-06.7;;; +NGC6779;GCl;19:16:35.51;+30:11:04.2;Lyr;5.80;;;8.90;8.40;;;;;;;;;056;;;;MWSC 3077;;;V-mag taken from LEDA +NGC6780;G;19:22:50.88;-55:46:33.0;Tel;2.01;1.55;4;13.48;;11.23;11.12;10.55;23.39;SABc;;;;;;;;2MASX J19225085-5546329,ESO 184-062,ESO-LV 184-0620,IRAS 19187-5552,PGC 063151;;; +NGC6781;PN;19:18:28.26;+06:32:23.0;Aql;1.80;;;11.80;11.40;;;;;;;17.10;16.78;;;;;PN G041.8-02.9;;; +NGC6782;G;19:23:57.90;-59:55:20.9;Pav;2.45;1.49;18;12.70;11.84;9.82;9.12;8.87;23.13;Sa;;;;;;;;2MASX J19235793-5955210,ESO 142-001,ESO-LV 142-0010,IRAS 19195-6001,PGC 063168;;; +NGC6783;G;19:16:47.62;+46:01:02.0;Cyg;0.66;0.62;135;15.40;;11.70;11.12;10.77;;E;;;;;;;;2MASX J19164762+4601018,MCG +08-35-007,PGC 063003;;;Diameters and position angle taken from Simbad. +NGC6784;G;19:26:35.99;-65:37:03.7;Pav;1.04;0.56;46;15.02;;;;;23.63;E-S0;;;;;;;;2MASX J19263098-6537507,ESO-LV 104-0550,PGC 063210;;; +NGC6784A;G;19:26:31.18;-65:37:34.0;Pav;0.95;0.54;167;14.68;;;;;23.61;E-S0;;;;;;;;2MASX J19263599-6537037,ESO-LV 104-0551,PGC 063209;;;B-Mag taken from LEDA +NGC6785;Dup;19:18:24.85;-01:35:46.9;Aql;;;;;;;;;;;;;;;6778;;;;;; +NGC6786;G;19:10:53.91;+73:24:36.6;Dra;0.81;0.48;20;13.70;;11.37;10.69;10.27;21.98;SABb;;;;;;;;2MASX J19105392+7324362,PGC 062864,UGC 11414;;; +NGC6787;G;19:16:10.58;+60:25:03.1;Dra;0.80;0.74;70;14.90;;11.74;10.98;10.61;23.14;SABb;;;;;;;;2MASX J19161057+6025028,IRAS 19154+6019,MCG +10-27-009,PGC 062987,UGC 11424;;; +NGC6788;G;19:26:49.75;-54:57:04.7;Tel;3.20;1.05;69;12.87;;9.51;8.81;8.52;23.48;Sab;;;;;;;;2MASX J19264973-5457045,ESO 184-067,ESO-LV 184-0670,IRAS 19227-5503,PGC 063214;;; +NGC6789;G;19:16:42.16;+63:58:17.3;Dra;0.97;0.84;145;13.76;;12.87;12.29;12.24;22.37;I;;;;;;;;2MASX J19164116+6358238,MCG +11-23-001,PGC 063000,UGC 11425;;; +NGC6790;PN;19:22:56.90;+01:30:48.0;Aql;0.12;;;10.20;10.50;10.61;10.45;9.47;;;;11.10;;;;;HD 182083,BD +01 3979,TYC 465-00361-1;PN G037.8-06.3;;; +NGC6791;OCl;19:20:53.22;+37:46:18.8;Lyr;6.30;;;10.52;9.50;;;;;;;;;;;;;MWSC 3088;;; +NGC6792;G;19:20:57.41;+43:07:57.0;Lyr;2.08;1.11;24;13.40;;10.06;9.43;9.10;23.14;SBb;;;;;;;;2MASX J19205740+4307572,IRAS 19193+4302,MCG +07-40-002,PGC 063096,UGC 11429;;; +NGC6793;OCl;19:23:14.39;+22:08:27.7;Vul;8.10;;;;;;;;;;;;;;;;;MWSC 3098;;; +NGC6794;G;19:28:03.88;-38:55:07.5;Sgr;1.51;1.26;85;13.88;;10.54;9.83;9.62;23.43;Sab;;;;;;;;2MASX J19280388-3855077,ESO 338-005,ESO-LV 338-0050,MCG -07-40-001,PGC 063241;;; +NGC6795;OCl;19:26:22.02;+03:30:51.7;Aql;;;;;;;;;;;;;;;;;;;;; +NGC6796;G;19:21:30.87;+61:08:41.6;Dra;1.73;0.40;1;13.50;;10.29;9.52;9.19;22.33;Sbc;;;;;;;;2MASX J19213081+6108413,IRAS 19208+6102,MCG +10-27-010,PGC 063121,UGC 11432;;Misidentified as NGC 6797 in CGCG.; +NGC6797;Other;19:29:00.75;-25:39:59.6;Sgr;;;;;;;;;;;;;;;;;;;;Galactic triple star; +NGC6798;G;19:24:03.17;+53:37:29.2;Cyg;1.78;0.80;147;14.50;;10.40;9.69;9.40;24.30;S0;;;;;;1300;;2MASX J19240319+5337291,MCG +09-32-002,PGC 063171,UGC 11434;;; +NGC6799;G;19:32:16.53;-55:54:28.5;Tel;1.83;1.36;107;13.41;;10.34;9.69;9.46;23.55;E-S0;;;;;;;;2MASX J19321651-5554287,ESO 184-078,ESO-LV 184-0780,PGC 063339;;; +NGC6800;OCl;19:27:07.68;+25:08:25.7;Vul;6.00;;;;;;;;;;;;;;;;;MWSC 3124;;; +NGC6801;G;19:27:35.81;+54:22:22.4;Cyg;1.36;0.71;38;14.80;;11.20;10.50;10.39;23.44;Sc;;;;;;;;2MASX J19273579+5422224,IRAS 19264+5416,MCG +09-32-005,PGC 063229,UGC 11443;;; +NGC6802;OCl;19:30:35.04;+20:15:39.5;Vul;4.50;;;10.07;8.80;;;;;;;;;;;;;MWSC 3134;;; +NGC6803;PN;19:31:16.45;+10:03:21.7;Aql;0.09;;;11.30;11.40;11.91;12.03;11.15;;;;;15.20;;;;HD 183889;IRAS 19289+0956,PN G046.4-04.1;;; +NGC6804;PN;19:31:35.39;+09:13:30.6;Aql;0.58;;;12.20;12.00;13.23;12.45;11.28;;;;14.47;14.37;;;;HD 183932;IRAS 19291+0907,PN G045.7-04.5;;; +NGC6805;G;19:36:45.71;-37:33:15.7;Sgr;1.16;1.03;159;14.34;;10.53;9.84;9.48;23.49;E;;;;;;;;2MASX J19364571-3733155,ESO 338-014,ESO-LV 338-0140,MCG -06-43-002,PGC 063413;;; +NGC6806;G;19:37:05.05;-42:17:46.6;Sgr;1.22;0.96;52;13.83;;11.65;11.05;10.79;22.68;Sc;;;;;;;;2MASX J19370506-4217475,ESO 338-015,ESO-LV 338-0150,IRAS 19336-4224,MCG -07-40-003,PGC 063416;;; +NGC6807;PN;19:34:33.50;+05:41:03.0;Aql;0.03;;;13.80;12.00;12.75;12.83;12.07;;;;16.30;;;;;BD +05 4196,HD 184488;IRAS 19320+0534,PN G042.9-06.9;;; +NGC6808;G;19:43:54.00;-70:38:00.2;Pav;0.80;0.25;42;13.15;12.59;10.13;9.38;9.04;21.33;Sa;;;;;;;;2MASX J19435402-7038002,ESO 073-003,ESO-LV 73-0030,IRAS 19385-7045,PGC 063578;;Marginal HIPASS detection.; +NGC6809;GCl;19:39:59.40;-30:57:43.5;Sgr;12.00;;;;6.49;;;;;;;;;055;;;;MWSC 3150;;; +NGC6810;G;19:43:34.25;-58:39:20.1;Pav;3.79;1.05;175;12.34;11.22;8.81;7.98;7.68;23.18;Sab;;;;;;;;2MASX J19433370-5839027,2MASX J19433447-5839207,ESO 142-035,ESO-LV 142-0350,IRAS 19393-5846,PGC 063571;;; +NGC6811;OCl;19:37:17.91;+46:23:19.8;Cyg;7.20;;;7.47;6.80;;;;;;;;;;;;;MWSC 3143;;; +NGC6812;G;19:45:24.22;-55:20:48.5;Tel;1.75;1.12;87;13.58;;9.95;9.29;9.00;23.50;S0;;;;;;;;2MASX J19452422-5520488,ESO 185-015,ESO-LV 185-0150,PGC 063625;;; +NGC6813;PN;19:40:22.44;+27:18:34.4;Vul;3.00;;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC6814;G;19:42:40.64;-10:19:24.6;Aql;3.08;0.74;110;15.33;14.21;8.66;7.95;7.66;22.23;SABb;;;;;;;;2MASX J19424057-1019255,IRAS 19399-1026,MCG -02-50-001,PGC 063545;;; +NGC6815;*Ass;19:40:44.31;+26:45:32.4;Vul;;;;;;;;;;;;;;;;;;;;; +NGC6816;G;19:44:02.23;-28:24:03.0;Sgr;1.72;1.40;80;13.59;;10.00;9.33;8.91;23.97;E-S0;;;;;;;;2MASX J19440229-2824023,ESO 460-030,ESO-LV 460-0300,MCG -05-46-006,PGC 063587;;; +NGC6817;GPair;19:37:22.40;+62:22:59.0;Dra;0.90;;;;;;;;;;;;;;;;;MCG +10-28-005;;;Diameter of the group inferred by the author. +NGC6817 NED01;G;19:37:21.24;+62:22:57.7;Dra;;;;16.05;;;;;;;;;;;;;;MCG +10-28-005 NED01,PGC 3086688;;;B-Mag taken from LEDA +NGC6817 NED02;G;19:37:23.38;+62:23:01.1;Dra;0.66;0.55;115;15.60;;12.09;11.31;11.10;23.26;Sbc;;;;;;;;2MASX J19372334+6223010,MCG +10-28-005 NED02,PGC 063431;;; +NGC6818;PN;19:43:57.73;-14:09:11.4;Sgr;0.77;;;9.90;9.30;10.66;10.60;9.91;;;;16.90;;;;;BD-14 5523,HD 186282;IRAS 19411-1416,PN G025.8-17.9;Little Gem Nebula;;Dimensions taken from LEDA +NGC6819;OCl;19:41:18.09;+40:11:12.3;Cyg;6.90;;;8.21;7.30;;;;;;;;;;;;;MWSC 3155;Foxhead Cluster;; +NGC6820;Neb;19:42:28.02;+23:05:17.1;Vul;0.50;0.50;;15.00;;10.71;10.06;9.62;;;;;;;;;;2MASX J19422860+2305059;;;Dimensions and B-Mag taken from LEDA +NGC6821;G;19:44:24.06;-06:50:00.4;Aql;1.03;0.93;130;14.00;;11.17;10.53;10.15;22.33;Scd;;;;;;;;2MASX J19442405-0650002,IRAS 19417-0657,MCG -01-50-002,PGC 063594;;Confused HIPASS source; +NGC6822;G;19:44:57.74;-14:48:12.4;Sgr;17.38;16.75;27;18.00;8.10;7.48;6.92;6.72;24.25;IB;;;;;;4895;;2MASX J19445619-1447512,C 057,IRAS 19420-1450,MCG -02-50-006,PGC 063616;Barnard's Galaxy;The position is the approximate center of the bar.; +NGC6823;Cl+N;19:43:09.89;+23:17:59.8;Vul;6.00;;;7.71;7.10;;;;;;;;;;;;;LBN 135,MWSC 3163;;; +NGC6824;G;19:43:40.70;+56:06:34.1;Cyg;1.91;1.39;53;13.10;;9.23;8.46;8.19;22.88;Sab;;;;;;;;2MASX J19434067+5606339,IRAS 19426+5559,MCG +09-32-012,PGC 063575,UGC 11470;;; +NGC6825;GPair;19:41:54.80;+64:04:23.0;Dra;0.72;0.32;170;15.30;;12.10;11.49;11.36;;;;;;;;;;PGC 063535;;; +NGC6826;PN;19:44:48.11;+50:31:30.1;Cyg;0.42;;;10.02;9.44;9.57;9.60;8.90;;;;10.33;10.41;;;;BD +50 2869,HD 186924,SAO 31951,TYC 3565-00205-1;2MASX J19444814+5031304,C 015,IRAS 19434+5024,PN G083.5+12.7;Blinking Planetary;; +NGC6827;OCl;19:48:53.44;+21:12:54.2;Vul;2.10;;;;;;;;;;;;;;;;;MWSC 3186;;; +NGC6828;OCl;19:50:17.61;+07:54:09.2;Aql;6.00;;;;;;;;;;;;;;;;;MWSC 3190;;; +NGC6829;G;19:47:07.56;+59:54:25.5;Dra;1.49;0.35;31;15.00;;10.62;9.88;9.59;23.56;Sb;;;;;;;;2MASX J19470756+5954255,MCG +10-28-010,PGC 063667,UGC 11478;;; +NGC6830;OCl;19:50:59.58;+23:06:00.5;Vul;4.20;;;8.41;7.90;;;;;;;;;;;;;MWSC 3191;;; +NGC6831;G;19:47:57.30;+59:53:33.1;Dra;1.29;1.17;115;14.70;;10.84;10.13;9.90;23.81;S0;;;;;;;;2MASX J19475733+5953332,MCG +10-28-011,PGC 063674,UGC 11483;;; +NGC6832;OCl;19:48:15.26;+59:25:16.2;Cyg;3.30;;;;;;;;;;;;;;;;;MWSC 3183;;; +NGC6833;PN;19:49:46.60;+48:57:40.0;Cyg;0.03;;;13.80;12.10;12.71;12.85;12.19;;;;14.60;14.50;;;;HD 187836;PN G082.5+11.3;;; +NGC6834;OCl;19:52:12.56;+29:24:29.4;Cyg;4.50;;;8.46;7.80;;;;;;;;;;;;;MWSC 3197;;; +NGC6835;G;19:54:32.95;-12:34:03.3;Sgr;2.74;0.61;70;13.30;;;;;23.63;SBa;;;;;;;;IRAS 19517-1241,MCG -02-50-009,PGC 063800;;; +NGC6836;G;19:54:40.06;-12:41:16.6;Sgr;1.42;1.11;119;13.00;;;;;22.77;SABm;;;;;;;;2MASX J19544001-1241168,IRAS 19518-1249,MCG -02-50-010,PGC 063803;;; +NGC6837;OCl;19:53:08.63;+11:41:56.4;Aql;3.00;;;;;;;;;;;;;;;;;MWSC 3199;;; +NGC6838;GCl;19:53:46.11;+18:46:42.2;Sge;6.90;;;7.91;6.10;;;;;;;;;071;6839;;;MWSC 3200;;Identification as NGC 6839 is very uncertain.; +NGC6839;Dup;19:53:46.11;+18:46:42.2;Sge;;;;;;;;;;;;;;;6838;;;;;; +NGC6840;OCl;19:55:16.25;+12:06:52.6;Aql;4.50;;;;;;;;;;;;;;;;;MWSC 3205;;; +NGC6841;G;19:57:49.06;-31:48:38.5;Sgr;1.63;1.46;162;13.44;;9.92;9.17;8.89;23.66;E;;;;;;;;2MASX J19574905-3148384,ESO 461-023,ESO-LV 461-0230,MCG -05-47-011,PGC 063881;;; +NGC6842;PN;19:55:02.26;+29:17:21.0;Cyg;0.95;;;13.60;13.10;;;;;;14.75;15.65;15.98;;;;;IRAS 19530+2909,PN G065.9+00.5;;; +NGC6843;OCl;19:56:06.22;+12:09:49.8;Aql;3.60;;;;;;;;;;;;;;;;;MWSC 3206;;; +NGC6844;G;20:02:50.13;-65:13:47.5;Pav;1.26;0.97;5;13.53;;10.37;9.58;9.37;22.70;Sb;;;;;;;;2MASX J20025015-6513473,ESO 105-021,ESO-LV 105-0210,IRAS 19581-6522,PGC 064025;;; +NGC6845;GGroup;20:00:58.28;-47:04:11.9;Tel;4.10;;;;;;;;;;;;;;;;;ESO 284-008;;;Diameter of the group inferred by the author. +NGC6845A;G;20:00:58.42;-47:04:12.9;Tel;1.08;0.61;47;15.81;12.16;11.00;10.27;9.92;22.28;SBbc;;;;;;;;2MASX J20005841-4704130,ESO-LV 284-0080,PGC 063985;;; +NGC6845B;G;20:01:05.30;-47:03:32.7;Tel;0.78;0.60;24;17.18;14.28;12.33;11.44;11.56;22.91;SBb;;;;;;;;2MASX J20010526-4703340,ESO-LV 284-0082,PGC 063986;;; +NGC6845C;G;20:00:56.81;-47:05:03.2;Tel;0.94;0.31;138;14.52;;11.30;10.39;10.42;24.85;S0-a;;;;;;;;2MASX J20005684-4705040,ESO-LV 284-0081,PGC 063979;;; +NGC6845D;G;20:00:53.59;-47:05:42.8;Tel;0.79;0.22;157;15.50;;13.05;12.29;11.87;23.57;S0;;;;;;;;2MASX J20005354-4705424,PGC 063978;;; +NGC6846;OCl;19:56:28.12;+32:20:58.9;Cyg;2.40;;;;14.20;;;;;;;;;;;;;MWSC 3207;;; +NGC6847;Cl+N;19:56:37.82;+30:12:46.5;Cyg;10.00;10.00;;;;;;;;;;;;;;;;LBN 151;;Identification as NGC 6847 is very uncertain.; +NGC6848;G;20:02:47.25;-56:05:25.1;Tel;2.34;1.38;158;13.40;;9.78;8.99;8.72;23.67;Sa;;;;;;;;2MASX J20024726-5605250,ESO 185-052,ESO-LV 185-0520,PGC 064023;;; +NGC6849;G;20:06:15.62;-40:11:53.9;Sgr;2.15;1.42;19;12.90;;10.30;9.61;9.41;23.42;E-S0;;;;;;;;2MASX J20061560-4011539,ESO 339-032,ESO-LV 339-0320,MCG -07-41-007,PGC 064097;;; +NGC6850;G;20:03:30.10;-54:50:41.2;Tel;2.03;1.09;146;13.52;13.07;10.17;9.50;9.21;23.89;S0-a;;;;;;;;2MASX J20033008-5450408,ESO 185-056,ESO-LV 185-0560,PGC 064043;;; +NGC6851;G;20:03:34.37;-48:17:04.2;Tel;2.18;1.70;161;12.83;11.67;9.69;9.00;8.77;23.23;E;;;;;6861A;;;2MASX J20033440-4817042,2MASX J20033564-4817211,ESO 233-021,ESO-LV 233-0210,PGC 064044;;; +NGC6851A;G;20:05:48.51;-47:58:41.7;Tel;1.35;0.70;50;14.88;;;;;23.71;Sbc;;;;;;;;ESO 233-025,ESO-LV 233-0250,PGC 064086;;; +NGC6851B;G;20:05:39.94;-47:58:44.6;Tel;1.12;0.18;67;16.76;14.81;13.27;12.56;12.29;24.08;SBcd;;;;;;;;2MASX J20053994-4758446,ESO 233-023,ESO-LV 233-0230,PGC 064082;;; +NGC6852;PN;20:00:39.16;+01:43:41.2;Aql;0.47;;;12.80;12.60;;;;;;;17.70;17.90;;;;;IRAS 19581+0135,PN G042.5-14.5;;; +NGC6853;PN;19:59:36.38;+22:43:15.7;Vul;6.70;;;7.60;7.40;11.79;10.61;;;;12.43;13.66;13.94;027;;;BD+22 3878;2MASX J19593637+2243157,PN G060.8-03.6;Dumbbell Nebula;; +NGC6854;G;20:05:38.80;-54:22:32.2;Tel;2.28;1.62;166;13.52;12.30;;;;23.83;E-S0;;;;;;;;2MASX J20053878-5422319,ESO 185-061,ESO-LV 185-0610,PGC 064081;;; +NGC6855;G;20:06:49.91;-56:23:23.7;Tel;1.27;0.95;95;13.84;;10.51;9.77;9.42;23.12;S0-a;;;;;;;;2MASX J20064991-5623236,ESO 185-063,ESO-LV 185-0630,PGC 064116;;; +NGC6856;OCl;19:59:17.13;+56:07:51.2;Cyg;3.00;;;;;;;;;;;;;;;;;MWSC 3215;;; +NGC6857;HII;20:01:48.13;+33:31:33.3;Cyg;0.63;0.63;;11.40;;;;;;;;;;;;;;;;;Dimensions and B-Mag taken from LEDA +NGC6858;OCl;20:02:59.39;+11:15:33.9;Aql;4.20;;;;;;;;;;;;;;;;;MWSC 3233;;; +NGC6859;Other;20:03:49.51;+00:26:40.7;Aql;;;;;;;;;;;;;;;;;;;;Three Galactic stars.; +NGC6860;G;20:08:46.89;-61:06:00.7;Pav;1.31;0.75;32;13.70;13.53;10.60;9.84;9.39;22.68;SBb;;;;;;;;2MASX J20084680-6105595,ESO 143-009,ESO-LV 143-0090,IRAS 20044-6114,PGC 064166;;; +NGC6861;G;20:07:19.48;-48:22:12.8;Tel;3.18;2.36;133;12.01;11.10;8.66;7.97;7.71;23.32;E-S0;;;;;;4949;;2MASX J20071948-4822129,ESO 233-032,ESO-LV 233-0320,IRAS 20037-4830,PGC 064136;;; +NGC6861B;G;20:06:05.43;-48:28:28.0;Tel;1.21;0.40;100;15.11;;12.68;12.01;12.14;24.18;S0;;;;;;;;2MASX J20060542-4828280,ESO 233-026,ESO-LV 233-0260,PGC 064094;;; +NGC6861C;G;20:06:41.08;-48:38:59.2;Tel;1.11;0.42;34;15.07;;13.20;12.49;12.30;23.98;S0;;;;;;;;2MASX J20064105-4838594,ESO 233-031,ESO-LV 233-0310,PGC 064107;;; +NGC6861D;G;20:08:19.48;-48:12:41.1;Tel;2.36;0.85;157;13.53;11.20;10.15;9.45;9.20;23.93;E-S0;;;;;;;;2MASX J20081948-4812407,ESO 233-034,ESO-LV 233-0340,PGC 064153;;; +NGC6861E;G;20:11:01.52;-48:41:26.1;Tel;1.48;0.31;37;15.11;;12.54;11.89;11.61;23.84;Sab;;;;;;;;2MASX J20110150-4841266,ESO 233-042,ESO-LV 233-0420,PGC 064216;;; +NGC6861F;G;20:11:11.80;-48:16:33.0;Tel;1.82;0.35;85;15.25;;;;;23.79;SBd;;;;;;;;ESO 233-043,ESO-LV 233-0430,PGC 064219;;; +NGC6862;G;20:08:54.58;-56:23:30.3;Tel;1.43;1.32;125;13.50;;10.88;10.19;9.84;22.90;SBbc;;;;;;;;2MASX J20085482-5623318,ESO 186-002,ESO-LV 186-0020,IRAS 20049-5632,PGC 064168;;; +NGC6863;Other;20:05:07.32;-03:33:18.5;Aql;;;;;;;;;;;;;;;;;;;;Eight Galactic stars.; +NGC6864;GCl;20:06:04.84;-21:55:20.0;Sgr;3.60;;;;8.26;6.93;6.43;6.28;;;;;;075;;;;2MASX J20060484-2155201,MWSC 3254;;; +NGC6865;G;20:05:56.48;-09:02:27.3;Cap;0.63;0.48;135;14.74;;11.00;10.23;10.07;23.24;S0;;;;;;;;2MASX J20055647-0902272,PGC 064089;;; +NGC6866;OCl;20:03:55.18;+44:09:32.8;Cyg;5.10;;;8.04;7.60;;;;;;;;;;;;;MWSC 3239;;; +NGC6867;G;20:10:29.66;-54:46:59.7;Tel;1.61;0.55;156;13.92;;11.14;10.39;10.05;22.98;SBbc;;;;;;;;2MASX J20102965-5446596,ESO 186-006,ESO-LV 186-0060,IRAS 20065-5455,PGC 064203;;; +NGC6868;G;20:09:54.07;-48:22:46.4;Tel;3.58;3.13;81;11.58;9.22;8.29;7.56;7.32;23.31;E;;;;;;;;2MASX J20095408-4822462,ESO 233-039,ESO-LV 233-0390,PGC 064192;;; +NGC6869;G;20:00:42.41;+66:13:39.1;Dra;1.44;1.44;100;12.80;;9.68;8.96;8.71;22.88;S0;;;;;;;;2MASX J20004241+6613392,MCG +11-24-004,PGC 063972,UGC 11506;;; +NGC6870;G;20:10:10.86;-48:17:13.5;Tel;2.56;1.08;86;13.17;11.76;9.88;9.19;8.95;23.41;SABa;;;;;;;;2MASX J20101083-4817135,ESO 233-041,ESO-LV 233-0410,IRAS 20065-4826,PGC 064197;;; +NGC6871;OCl;20:05:59.44;+35:46:38.1;Cyg;9.30;;;5.43;5.20;;;;;;;;;;;;;MWSC 3253;;; +NGC6872;G;20:16:56.56;-70:46:04.6;Pav;4.70;1.80;45;11.97;11.59;9.21;8.64;8.27;24.03;SBb;;;;;;;;2MASX J20165648-7046057,ESO 073-032,ESO-LV 73-0320,IRAS 20115-7055,PGC 064413;;; +NGC6873;OCl;20:07:13.89;+21:06:08.1;Sge;3.00;;;;;;;;;;;;;;;;;MWSC 3263;;; +NGC6874;*Ass;20:07:33.08;+38:14:46.0;Cyg;;;;;;;;;;;;;;;;;;;;; +NGC6875;G;20:13:12.47;-46:09:41.9;Tel;2.15;1.30;22;12.90;11.78;9.86;9.16;8.91;23.36;E-S0;;;;;;;;2MASX J20131249-4609417,ESO 284-028,ESO-LV 284-0280,IRAS 20096-4618,PGC 064296;;; +NGC6875A;G;20:11:55.86;-46:08:38.7;Tel;2.97;0.61;74;13.96;;11.10;10.26;9.97;23.82;SBbc;;;;;;;;2MASX J20115586-4608387,ESO 284-024,ESO-LV 284-0240,PGC 064240;;; +NGC6876;G;20:18:19.15;-70:51:31.7;Pav;3.46;3.00;110;11.76;11.54;8.70;7.97;7.70;23.51;E;;;;;;;;2MASX J20181914-7051317,ESO 073-035,ESO-LV 73-0350,PGC 064447;;; +NGC6876A;G;20:11:16.85;-71:00:46.6;Pav;1.38;0.46;178;14.84;;11.94;11.22;10.93;23.50;SBb;;;;;;4945;;2MASX J20111682-7100466,ESO-LV 0730250,PGC 064222;;; +NGC6877;G;20:18:36.20;-70:51:11.0;Pav;2.38;1.14;163;13.17;12.61;;;;23.87;E;;;;;;;;ESO 073-036,ESO-LV 73-0360,PGC 064457,TYC 9311-35-1;;; +NGC6878;G;20:13:53.24;-44:31:36.3;Sgr;1.61;1.26;98;13.65;12.42;10.77;9.74;9.76;23.23;SABb;;;;;;;;2MASX J20135321-4431361,ESO 284-031,ESO-LV 284-0310,IRAS 20104-4440,MCG -07-41-015,PGC 064317;;; +NGC6878A;G;20:13:36.00;-44:48:58.2;Sgr;1.87;0.86;69;13.99;;12.69;11.99;11.90;23.37;SABb;;;;;;;;2MASX J20133598-4448581,ESO 284-029,ESO-LV 284-0290,MCG -07-41-013,PGC 064314;;; +NGC6879;PN;20:10:26.60;+16:55:22.1;Sge;0.08;;;13.00;12.50;12.80;12.53;12.18;;;;14.90;14.80;;;;;IRAS 20081+1646,PN G057.2-08.9;;; +NGC6880;G;20:19:29.63;-70:51:35.5;Pav;2.46;1.06;25;13.18;13.35;10.19;9.46;9.16;23.90;S0-a;;;;;;;;2MASX J20192966-7051356,ESO 073-037,ESO-LV 73-0370,IRAS 20142-7100,PGC 064479;;; +NGC6881;PN;20:10:52.50;+37:24:41.0;Cyg;0.07;;;14.30;13.90;12.34;11.89;11.00;;;;;18.36;;;;;IRAS 20090+3715,PN G074.5+02.1;;; +NGC6882;OCl;20:11:55.86;+26:29:19.7;Vul;7.50;;;;14.10;;;;;;;;;;6885;;;C 037,MWSC 3278;;Identification as NGC 6682 is not certain.; +NGC6883;OCl;20:11:19.75;+35:49:55.9;Cyg;4.50;;;;8.00;;;;;;;;;;;;;MWSC 3275;;; +NGC6884;PN;20:10:23.70;+46:27:39.0;Cyg;0.10;;;12.60;10.90;11.16;11.19;10.37;;;;16.10;15.60;;;;HD 191916;IRAS 20088+4618,PN G082.1+07.0;;; +NGC6885;Dup;20:11:55.86;+26:29:19.7;Vul;;;;;;;;;;;;;;;6882;;;;;; +NGC6886;PN;20:12:42.90;+19:59:23.0;Sge;0.09;;;12.20;11.40;12.22;12.24;11.49;;;;;18.00;;;;;IRAS 20104+1950,PN G060.1-07.7;;; +NGC6887;G;20:17:17.29;-52:47:48.3;Tel;3.44;1.18;103;12.77;11.76;9.85;9.09;8.87;23.44;Sbc;;;;;;;;2MASX J20171727-5247484,ESO 186-027,ESO-LV 186-0270,IRAS 20135-5257,PGC 064427;;; +NGC6888;HII;20:12:06.55;+38:21:17.8;Cyg;20.00;10.00;;7.44;;;;;;;;;;;;;;BD +37 3821,C 027,HD 192163,HIP 099546,LBN 203;Crescent Nebula;; +NGC6889;G;20:18:53.23;-53:57:25.5;Tel;1.71;1.08;60;13.70;;11.26;10.73;10.39;23.26;SBbc;;;;;;;;2MASX J20185325-5357254,ESO 186-029,ESO-LV 186-0290,IRAS 20151-5406,PGC 064464;;; +NGC6890;G;20:18:18.10;-44:48:24.2;Sgr;1.59;1.27;155;13.06;14.02;9.99;9.31;9.03;22.54;SBb;;;;;;;;2MASX J20181815-4448252,ESO 284-054,ESO-LV 284-0540,IRAS 20148-4457,MCG -07-41-023,PGC 064446;;; +NGC6891;PN;20:15:08.84;+12:42:15.7;Del;0.25;;;11.70;10.50;11.10;11.16;10.55;;;;12.30;12.42;;;;BD +12 4266,HD 192563,TYC 1081-00805-1;2MASX J20150883+1242159,IRAS 20127+1233,PN G054.1-12.1;;; +NGC6892;Other;20:16:57.24;+18:01:10.8;Sge;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC6893;G;20:20:49.64;-48:14:20.7;Tel;2.87;1.78;9;12.73;11.45;8.95;8.26;7.95;23.75;S0;;;;;;;;2MASX J20204964-4814206,ESO 234-006,ESO-LV 234-0060,IRAS 20172-4824,PGC 064507;;Mislabeled as NGC 6873 in de Vaucouleours, 1957HPh....53..275d.; +NGC6894;PN;20:16:24.05;+30:33:54.3;Cyg;0.67;;;14.40;12.30;;;;;;;18.10;;;;;;PN G069.4-02.6;;; +NGC6895;OCl;20:16:32.36;+50:14:25.7;Cyg;5.10;;;;;;;;;;;;;;;;;MWSC 3296;;; +NGC6896;**;20:18:03.58;+30:38:24.2;Cyg;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC6897;G;20:21:01.27;-12:15:16.9;Cap;0.94;0.60;39;15.00;;11.59;10.81;10.53;22.82;Sbc;;;;;;;;2MASX J20210126-1215171,IRAS 20182-1224,MCG -02-52-001,PGC 064513;;; +NGC6898;G;20:21:08.03;-12:21:32.0;Cap;1.03;0.94;145;14.00;;11.01;10.32;10.02;22.80;Sa;;;;;;;;2MASX J20210802-1221320,IRAS 20183-1231,MCG -02-52-002,PGC 064517;;; +NGC6899;G;20:24:22.24;-50:26:02.2;Tel;1.79;0.89;112;13.47;;10.78;10.11;9.88;22.87;Sbc;;;;;;;;2MASX J20242223-5026023,ESO 234-022,ESO-LV 234-0220,IRAS 20207-5035,PGC 064630;;; +NGC6900;G;20:21:35.11;-02:34:09.2;Aql;0.94;0.74;100;14.20;;12.06;11.38;11.02;22.93;Sb;;;;;;;;2MASX J20213512-0234092,IRAS 20189-0243,MCG +00-52-001,PGC 064530;;Two MCG entries for one object.; +NGC6901;G;20:22:21.51;+06:25:47.5;Aql;1.25;0.49;62;14.90;;11.55;10.82;10.48;23.37;SBab;;;;;;5000;;2MASX J20222151+0625475,IRAS 20199+0616,MCG +01-52-002,PGC 064552,SDSS J202221.52+062547.5,UGC 11542;;Called IC 1316 in RC2 by mistake (IC 1316 is non-existent).; +NGC6902;G;20:24:28.14;-43:39:12.7;Sgr;2.69;2.11;158;11.82;10.93;9.41;8.89;8.61;22.70;SBab;;;;;;4948;;2MASX J20242813-4339127,ESO 285-008,ESO-LV 285-0080,IRAS 20210-4348,MCG -07-42-002,PGC 064632;;The IC identification is not certain.; +NGC6902A;G;20:22:59.76;-44:16:17.5;Sgr;0.98;0.74;57;14.42;;11.60;10.89;10.88;23.07;SBm;;;;;;;;ESO 285-004,ESO-LV 285-0040,MCG -07-41-032,PGC 064575;;; +NGC6902B;G;20:23:07.05;-43:52:07.0;Sgr;1.32;1.20;160;14.19;13.63;12.89;12.28;11.95;23.52;SABc;;;;;;;;2MASX J20230706-4352067,ESO 285-005,ESO-LV 285-0050,MCG -07-41-033,PGC 064580;;Confused HIPASS source; +NGC6903;G;20:23:44.86;-19:19:31.5;Cap;2.24;2.04;145;12.91;;9.24;8.60;8.33;23.40;E-S0;;;;;;;;2MASX J20234488-1919315,ESO 596-029,ESO-LV 596-0290,MCG -03-52-003,PGC 064607;;; +NGC6904;OCl;20:21:48.15;+25:44:29.4;Vul;4.20;;;;;;;;;;;;;;;;;MWSC 3326;;; +NGC6905;PN;20:22:22.99;+20:06:16.3;Del;0.67;;;11.90;11.10;12.95;12.85;12.10;;;;16.30;15.70;;;;HD 193949;2MASX J20222299+2006162,IRAS 20201+1956,PN G061.4-09.5;Blue Flash Nebula;; +NGC6906;G;20:23:33.91;+06:26:37.2;Del;1.12;0.48;45;13.70;;10.24;9.58;9.33;21.74;SBbc;;;;;;;;2MASX J20233389+0626372,IRAS 20211+0616,MCG +01-52-003,PGC 064601,SDSS J202333.93+062637.1,UGC 11548;;; +NGC6907;G;20:25:06.63;-24:48:33.0;Cap;3.33;2.68;67;11.91;11.30;;;;23.09;Sbc;;;;;;;;2MASX J20250664-2448335,ESO 528-003,ESO-LV 528-0030,IRAS 20221-2458,MCG -04-48-006,PGC 064650,UGCA 418;;; +NGC6908;G;20:25:08.97;-24:48:04.1;Cap;2.63;1.16;80;12.31;;9.34;8.69;8.37;;S0;;;;;;;;PGC 4581797;;Superposed on the northeastern arm of NGC 6907.;Diameters and position angle taken from Simbad. +NGC6909;G;20:27:38.89;-47:01:37.3;Ind;2.36;1.29;69;12.76;11.88;10.04;9.37;9.22;23.33;E;;;;;;;;2MASX J20273886-4701373,ESO 285-012,ESO-LV 285-0120,PGC 064725;;; +NGC6910;OCl;20:23:12.05;+40:46:43.0;Cyg;6.30;;;7.13;7.40;;;;;;;;;;;;;MWSC 3327;;; +NGC6911;G;20:19:38.33;+66:43:42.0;Dra;1.84;1.01;122;15.70;;10.01;9.26;8.76;24.78;SBb;;;;;;;;2MASX J20193834+6643421,IRAS 20191+6634,MCG +11-24-006,PGC 064485,UGC 11540;;; +NGC6912;G;20:26:52.08;-18:37:02.2;Cap;1.30;1.03;77;14.34;;11.23;10.56;10.17;22.98;SBc;;;;;;;;2MASX J20265207-1837022,ESO 596-038,ESO-LV 596-0380,IRAS 20240-1846,MCG -03-52-008,PGC 064700;;; +NGC6913;OCl;20:23:57.77;+38:30:27.6;Cyg;3.60;;;7.30;6.60;;;;;;;;;029;;;;MWSC 3329;;; +NGC6914;RfN;20:24:43.30;+42:28:57.5;Cyg;3.00;3.00;;;;;;;;;;;;;;;;LBN 274;;; +NGC6915;G;20:27:46.06;-03:04:37.4;Aql;1.65;1.15;85;13.77;;10.21;9.55;9.24;23.39;Sab;;;;;;;;2MASX J20274605-0304375,IRAS 20251-0314,PGC 064729;;; +NGC6916;G;20:23:33.08;+58:20:38.6;Cyg;1.64;1.11;89;15.30;;10.33;9.55;9.29;24.72;SBbc;;;;;;;;2MASX J20233306+5820385,IRAS 20224+5810,MCG +10-29-004,PGC 064600,SDSS J202333.10+582038.5,UGC 11554;;; +NGC6917;G;20:27:28.36;+08:05:53.1;Del;1.11;0.45;48;14.30;;10.68;10.00;9.63;22.66;Sbc;;;;;;;;2MASX J20272835+0805531,MCG +01-52-007,PGC 064715,UGC 11563;;; +NGC6918;G;20:30:47.12;-47:28:25.4;Ind;0.99;0.76;5;14.46;;11.33;10.60;10.18;23.10;S0-a;;;;;;;;2MASX J20304713-4728256,ESO 234-040,ESO-LV 234-0400,IRAS 20272-4738,PGC 064851;;; +NGC6919;G;20:31:38.12;-44:12:59.1;Mic;1.39;1.11;132;13.75;;11.22;10.45;10.21;22.94;SABc;;;;;;;;2MASX J20313813-4412592,ESO 285-027,ESO-LV 285-0270,IRAS 20282-4423,MCG -07-42-011,PGC 064883;;; +NGC6920;G;20:43:57.40;-80:00:03.0;Oct;2.30;1.86;132;13.08;;9.39;8.67;8.37;23.75;S0;;;;;;;;2MASX J20435731-8000029,ESO 026-004,ESO-LV 26-0040,PGC 065273;;; +NGC6921;G;20:28:28.86;+25:43:24.3;Vul;1.08;0.35;141;15.00;;10.01;9.18;8.84;23.01;S0-a;;;;;;;;2MASX J20282884+2543241,MCG +04-48-001,PGC 064768,UGC 11570;;; +NGC6922;G;20:29:52.90;-02:11:28.3;Aql;1.17;0.92;139;14.00;;11.95;11.37;10.95;22.98;Sc;;;;;;;;2MASX J20295290-0211283,IRAS 20272-0221,MCG +00-52-018,PGC 064814,UGC 11574;;; +NGC6923;G;20:31:39.07;-30:49:54.8;Mic;2.54;1.24;76;12.80;12.09;9.65;8.87;8.81;22.99;SBb;;;;;;5004;;2MASX J20313906-3049549,ESO 462-029,ESO-LV 462-0290,IRAS 20285-3100,MCG -05-48-017,PGC 064884;;; +NGC6924;G;20:33:19.23;-25:28:28.0;Cap;1.70;1.45;140;13.47;;10.42;9.68;9.42;23.77;E-S0;;;;;;;;2MASX J20331925-2528281,ESO 528-016,ESO-LV 528-0160,MCG -04-48-014,PGC 064945;;; +NGC6925;G;20:34:20.57;-31:58:51.2;Mic;4.68;1.16;4;12.09;11.30;8.97;8.26;7.99;23.06;Sbc;;;;;;5015;;2MASX J20342056-3158512,ESO 463-004,ESO-LV 463-0040,IRAS 20312-3209,MCG -05-48-022,PGC 064980;;Identification as IC 5015 is not certain.; +NGC6926;G;20:33:06.11;-02:01:39.0;Aql;1.33;0.37;178;14.87;13.87;10.25;9.67;9.35;21.61;Sc;;;;;;;;2MASX J20330610-0201390,IRAS 20305-0211,MCG +00-52-033,PGC 064939,UGC 11588;;; +NGC6927;G;20:32:38.21;+09:54:59.0;Del;0.60;0.20;5;15.60;;12.28;11.63;11.39;23.01;S0;;;;;;;;2MASX J20323818+0954590,MCG +02-52-016,PGC 064925,UGC 11589 NOTES01;;; +NGC6927A;G;20:32:36.69;+09:53:02.1;Del;0.38;0.13;20;17.00;;13.52;13.01;12.59;;E;;;;;;;;2MASX J20323669+0953020,MCG +02-52-015,PGC 064924;;; +NGC6928;G;20:32:50.22;+09:55:35.1;Del;2.08;0.51;106;13.70;;9.81;9.07;8.74;23.11;SBab;;;;;;1325;;2MASX J20325022+0955351,IRAS 20304+0945,MCG +02-52-017,PGC 064932,UGC 11589;;; +NGC6929;G;20:33:21.68;-02:02:13.9;Aql;0.43;0.33;81;14.90;;11.05;10.31;10.05;21.63;S0-a;;;;;;;;2MASX J20332170-0202135,MCG +00-52-035,PGC 064949;;; +NGC6930;G;20:32:58.80;+09:52:28.0;Del;1.43;0.46;9;14.30;;;;;22.62;SBab;;;;;;;;IRAS 20305+0942,MCG +02-52-018,PGC 064935,UGC 11590;;; +NGC6931;G;20:33:41.35;-11:22:07.9;Cap;1.27;0.46;125;14.00;;11.22;10.52;10.16;;Sb;;;;;;;;2MASX J20334133-1122080,IRAS 20309-1132,MCG -02-52-016,PGC 064963;;; +NGC6932;G;20:42:08.58;-73:37:09.7;Pav;2.45;1.44;105;13.29;;10.20;9.52;9.22;23.94;S0-a;;;;;;;;2MASX J20420855-7337097,ESO 047-008,ESO-LV 47-0080,PGC 065219;;; +NGC6933;*;20:33:38.18;+07:23:14.4;Del;;;;12.54;11.61;11.10;10.86;10.77;;;;;;;;;;2MASS J20333810+0723127,TYC 522-63-1;;; +NGC6934;GCl;20:34:11.49;+07:24:14.8;Del;5.40;;;10.48;9.75;;;;;;;;;;;;;C 047,MWSC 3369;;; +NGC6935;G;20:38:20.22;-52:06:37.6;Ind;2.18;1.91;14;12.77;12.10;9.81;9.07;8.88;23.19;SABa;;;;;;;;2MASX J20382024-5206374,ESO 234-059,ESO-LV 234-0590,IRAS 20346-5217,PGC 065112;;; +NGC6936;G;20:35:56.30;-25:16:47.9;Cap;1.82;0.91;5;13.83;;10.62;9.96;9.66;23.95;E-S0;;;;;;;;2MASX J20355629-2516480,ESO 528-022,ESO-LV 528-0220,MCG -04-48-021,PGC 065033;;; +NGC6937;G;20:38:45.83;-52:08:35.7;Ind;2.55;1.69;155;13.37;13.81;11.06;10.38;10.04;23.95;Sbc;;;;;;;;2MASX J20384579-5208355,ESO 234-060,ESO-LV 234-0600,IRAS 20350-5219,PGC 065125;;; +NGC6938;OCl;20:34:42.49;+22:12:52.5;Vul;5.40;;;;;;;;;;;;;;;;;MWSC 3372;;; +NGC6939;OCl;20:31:30.13;+60:39:43.5;Cep;12.00;;;8.85;7.80;;;;;;;;;;;;;MWSC 3357;;; +NGC6940;OCl;20:34:26.69;+28:16:57.8;Vul;10.80;;;6.98;6.30;;;;;;;;;;;;;MWSC 3370;;; +NGC6941;G;20:36:23.47;-04:37:07.5;Aql;1.73;1.20;126;13.30;;10.67;9.98;9.73;23.73;Sb;;;;;;;;2MASX J20362345-0437078,IRAS 20337-0447,MCG -01-52-010,PGC 065054,SDSS J203623.33-043709.5,SDSS J203623.47-043707.4,SDSS J203623.47-043707.5;;; +NGC6942;G;20:40:37.85;-54:18:11.0;Ind;2.24;1.71;134;12.87;12.10;9.67;8.99;8.72;23.41;S0-a;;;;;;;;2MASX J20403786-5418110,ESO 186-073,ESO-LV 186-0730,PGC 065172;;; +NGC6943;G;20:44:33.74;-68:44:51.8;Pav;3.75;2.22;125;11.87;11.25;9.40;9.01;8.52;23.24;Sc;;;;;;;;2MASX J20443374-6844519,ESO 074-006,ESO-LV 74-0060,IRAS 20398-6855,PGC 065295;;; +NGC6944;G;20:38:23.86;+06:59:47.2;Del;1.12;0.79;48;14.60;;10.79;10.11;9.81;23.67;E-S0;;;;;;;;2MASX J20382387+0659476,MCG +01-52-017,PGC 065117;;; +NGC6944A;G;20:38:11.31;+06:54:09.6;Del;0.97;0.69;67;15.00;;12.09;11.60;11.15;23.30;Scd;;;;;;;;2MASX J20381131+0654097,MCG +01-52-016,PGC 065108;;; +NGC6945;G;20:39:00.62;-04:58:21.3;Aqr;1.58;1.01;121;13.50;;10.48;9.81;9.48;24.23;E-S0;;;;;;;;2MASX J20390064-0458215,MCG -01-52-015,PGC 065132;;; +NGC6946;G;20:34:52.32;+60:09:14.1;Cyg;11.40;10.84;52;10.50;;6.27;5.91;5.37;23.73;SABc;;;;;;;;2MASX J20345233+6009132,C 012,IRAS 20338+5958,MCG +10-29-006,PGC 065001,UGC 11597;Fireworks Galaxy;; +NGC6947;G;20:41:15.12;-32:29:11.1;Mic;1.74;0.69;41;14.84;;11.08;10.40;10.00;22.96;Sb;;;;;;;;2MASX J20411513-3229110,ESO 401-003,MCG -05-48-028,PGC 065193;;; +NGC6948;G;20:43:29.14;-53:21:24.2;Ind;2.00;0.95;113;13.79;;10.66;9.91;9.54;23.68;Sa;;;;;;;;2MASX J20432911-5321244,ESO 187-009,ESO-LV 187-0090,IRAS 20397-5332,PGC 065256;;; +NGC6949;G;20:35:06.92;+64:48:10.1;Cep;1.31;1.05;95;15.00;;10.34;9.55;9.22;23.87;Sc;;;;;;;;2MASX J20350692+6448100,IRAS 20343+6437,MCG +11-25-001,PGC 065010,UGC 11600;;; +NGC6950;OCl;20:41:05.58;+16:37:20.0;Del;4.50;;;;;;;;;;;;;;;;;MWSC 3394;;; +NGC6951;G;20:37:14.09;+66:06:20.3;Cep;3.19;2.09;149;11.64;10.65;8.31;7.47;7.22;22.89;SABb;;;;;6952;;;2MASX J20371407+6606203,IRAS 20366+6555,MCG +11-25-002,PGC 065086,UGC 11604;;; +NGC6952;Dup;20:37:14.09;+66:06:20.3;Cep;;;;;;;;;;;;;;;6951;;;;;; +NGC6953;Other;20:37:46.22;+65:45:53.5;Cep;;;;;;;;;;;;;;;;;;;;Group of Galactic stars. NGC identification is not certain.; +NGC6954;G;20:44:03.18;+03:12:34.0;Del;1.27;0.80;84;14.20;;10.61;9.83;9.59;23.27;S0-a;;;;;;;;2MASX J20440318+0312340,MCG +00-53-001,PGC 065279,UGC 11618;;; +NGC6955;G;20:44:17.98;+02:35:41.4;Del;1.27;0.98;115;14.90;;11.88;11.06;10.80;24.16;SABb;;;;;;;;2MASX J20441797+0235414,PGC 065287,UGC 11621;;; +NGC6956;G;20:43:53.71;+12:30:42.9;Del;1.75;1.37;112;13.50;;10.18;9.51;9.18;23.10;Sb;;;;;;;;2MASX J20435368+1230429,IRAS 20415+1219,MCG +02-53-001,PGC 065269,UGC 11619;;; +NGC6957;G;20:44:47.56;+02:34:52.4;Del;0.62;0.57;150;15.30;;12.70;11.92;11.67;22.98;Sc;;;;;;;;2MASX J20444757+0234523,PGC 065302;;; +NGC6958;G;20:48:42.59;-37:59:50.7;Mic;2.44;1.88;97;12.27;11.42;9.34;8.66;8.40;23.08;E;;;;;;;;2MASX J20484256-3759505,ESO 341-015,ESO-LV 341-0150,IRAS 20455-3810,MCG -06-45-017,PGC 065436;;+4m 16s, +0.6m error in A-M position.; +NGC6959;G;20:47:07.24;+00:25:48.7;Aqr;0.50;0.34;63;14.60;;11.58;10.97;10.61;22.32;S0;;;;;;;;2MASX J20470724+0025486,PGC 065369,SDSS J204707.24+002548.6,SDSS J204707.24+002548.7;;; +NGC6960;SNR;20:45:58.18;+30:35:42.5;Cyg;210.00;160.00;;7.00;;;;;;;;;;;;;;C 034,LBN 191;Veil Nebula;;B-Mag taken from LEDA +NGC6961;G;20:47:10.51;+00:21:47.8;Aqr;0.76;0.73;150;14.80;;12.02;11.30;11.07;23.44;E;;;;;;;;2MASX J20471048+0021479,PGC 065372,SDSS J204710.50+002147.8;;; +NGC6962;G;20:47:19.06;+00:19:14.9;Aqr;2.70;2.00;68;13.00;12.14;9.78;9.06;8.79;23.73;SABa;;;;;;;;2MASX J20471908+0019150,MCG +00-53-003,PGC 065375,SDSS J204719.06+001914.8,SDSS J204719.07+001914.9,UGC 11628;;; +NGC6963;**;20:47:19.47;+00:30:38.3;Aqr;;;;15.20;;12.66;12.16;12.04;;;;;;;;;;2MASS J20471928+0030335,SDSS J204719.47+003038.3;;; +NGC6964;G;20:47:24.30;+00:18:03.0;Aqr;1.68;1.26;165;14.00;12.99;10.47;9.86;9.55;23.93;E;;;;;;;;2MASX J20472428+0018030,MCG +00-53-005,PGC 065379,SDSS J204724.30+001802.9,SDSS J204724.30+001803.0,UGC 11629;;; +NGC6965;G;20:47:20.37;+00:29:02.6;Aqr;0.73;0.63;68;15.20;;12.14;11.50;11.18;22.74;S0;;;;;;5058;;2MASX J20472035+0029020,MCG +00-53-004,PGC 065376,SDSS J204720.36+002902.5,SDSS J204720.36+002902.6,SDSS J204720.37+002902.5,SDSS J204720.37+002902.6;;NGC 6963 is a double star.; +NGC6966;**;20:47:26.76;+00:22:03.7;Aqr;;;;;;;;;;;;;;;;;;;;; +NGC6967;G;20:47:34.10;+00:24:41.8;Aqr;1.19;0.71;95;14.30;12.80;10.84;10.15;9.92;23.09;S0-a;;;;;;;;2MASX J20473408+0024420,IRAS 20450+0013,MCG +00-53-006,PGC 065385,SDSS J204734.09+002441.7,UGC 11630;;CGCG misidentifies this with NGC 6965. NED follows MCG and UGC.; +NGC6968;G;20:48:32.48;-08:21:37.1;Aqr;1.97;1.18;135;13.32;;10.30;9.61;9.31;24.16;E-S0;;;;;;;;2MASX J20483244-0821366,MCG -02-53-006,PGC 065428;;; +NGC6969;G;20:48:27.63;+07:44:23.9;Del;1.21;0.37;15;14.47;13.52;11.09;10.38;10.12;23.59;Sa;;;;;;;;2MASX J20482762+0744238,MCG +01-53-001,PGC 065425,UGC 11633;;; +NGC6970;G;20:52:09.46;-48:46:40.0;Ind;1.54;0.87;115;13.16;12.68;10.60;9.92;9.59;22.49;SBa;;;;;;;;2MASX J20520946-4846398,ESO 235-008,ESO-LV 235-0080,IRAS 20486-4857,PGC 065608;;; +NGC6971;G;20:49:23.76;+05:59:44.1;Del;1.05;0.87;60;14.80;;11.60;10.90;10.67;23.43;Sb;;;;;;;;2MASX J20492375+0559440,MCG +01-53-002,PGC 065462,UGC 11637;;; +NGC6972;G;20:49:58.94;+09:53:56.9;Del;1.23;0.49;142;14.30;;10.89;10.17;9.97;23.00;S0-a;;;;;;;;2MASX J20495898+0953565,MCG +02-53-004,PGC 065485,UGC 11640;;UGC misprints name as 'MCG +02-43-004'.; +NGC6973;*;20:52:05.92;-05:53:42.7;Aqr;;;;;;;;;;;;;;;;;;SDSS J205205.92-055342.7;;; +NGC6974;SNR;20:51:04.32;+31:49:41.2;Cyg;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.; +NGC6975;G;20:52:26.03;-05:46:20.3;Aqr;1.02;0.92;165;14.95;;12.44;11.77;11.89;23.50;SABb;;;;;6976;;;2MASX J20522602-0546198,MCG -01-53-015,PGC 065620,SDSS J205226.03-054620.2,SDSS J205226.03-054620.3;;; +NGC6976;Dup;20:52:26.03;-05:46:20.3;Aqr;;;;;;;;;;;;;;;6975;;;;;; +NGC6977;G;20:52:29.71;-05:44:46.0;Aqr;1.25;0.93;168;14.28;;11.04;10.38;10.02;23.20;Sa;;;;;;;;2MASX J20522971-0544459,MCG -01-53-016,PGC 065625,SDSS J205229.70-054445.9,SDSS J205229.70-054446.0,SDSS J205229.71-054445.9;;; +NGC6978;G;20:52:35.43;-05:42:40.1;Aqr;1.51;0.57;126;14.22;;10.74;10.01;9.77;23.07;Sb;;;;;;;;2MASX J20523547-0542399,MCG -01-53-017,PGC 065631,SDSS J205235.43-054240.0,SDSS J205235.43-054240.1;;; +NGC6979;SNR;20:50:28.01;+32:01:33.2;Cyg;7.00;3.00;;;;;;;;;;;;;;;;;;;Dimensions taken from LEDA +NGC6980;*;20:52:48.94;-05:50:16.4;Aqr;;;;;;;;;;;;;;;;;;;;; +NGC6981;GCl;20:53:27.91;-12:32:13.4;Aqr;4.50;;;9.95;8.96;;;;;;;;;072;;;;MWSC 3419;;; +NGC6982;G;20:57:18.38;-51:51:44.2;Ind;1.00;0.49;66;14.25;13.92;11.73;10.98;10.77;22.86;SBa;;;;;;;;2MASX J20571835-5151442,ESO 235-019,ESO-LV 235-0190,IRAS 20537-5203,PGC 065776;;; +NGC6983;G;20:56:43.43;-43:59:09.7;Mic;0.85;0.66;151;14.24;;11.63;11.00;10.63;22.47;Sab;;;;;;;;2MASX J20564341-4359095,ESO 286-014,ESO-LV 286-0140,IRAS 20533-4410,MCG -07-43-004,PGC 065759;;; +NGC6984;G;20:57:53.98;-51:52:15.0;Ind;1.80;1.16;101;13.19;12.65;10.94;10.25;9.99;22.82;Sc;;;;;;;;2MASX J20575398-5152151,ESO 235-020,ESO-LV 235-0200,IRAS 20543-5203,PGC 065798;;; +NGC6985;G;20:45:02.98;-11:06:15.1;Aqr;1.25;0.51;106;14.39;;11.00;10.31;10.06;23.59;SBa;;;;;;;;2MASX J20450296-1106146,MCG -02-53-001 NED01,PGC 065306;;10 minute error in NGC RA.; +NGC6985A;G;20:45:01.27;-11:06:27.6;Aqr;1.02;0.44;160;18.42;;13.57;12.76;12.88;24.25;;;;;;;;;2MASX J20450126-1106276,MCG -02-53-001 NED02,PGC 969910;;; +NGC6986;G;20:56:30.66;-18:33:59.6;Cap;0.98;0.64;6;14.59;;11.21;10.42;10.14;23.38;E-S0;;;;;;;;2MASX J20563063-1833596,ESO 598-007,ESO-LV 598-0070,MCG -03-53-011,PGC 065750;;; +NGC6987;G;20:58:10.36;-48:37:49.1;Ind;2.03;1.63;125;13.57;;10.30;9.59;9.28;23.85;E;;;;;;;;2MASX J20581033-4837491,ESO 235-021,ESO-LV 235-0210,IRAS 20546-4849,PGC 065807;;; +NGC6988;G;20:55:48.96;+10:30:28.3;Del;0.68;0.59;21;15.00;;12.09;11.38;11.18;23.04;E;;;;;;;;2MASX J20554892+1030282,PGC 065732;;; +NGC6989;OCl;20:54:06.92;+45:14:21.4;Cyg;5.40;;;;;;;;;;;;;;;;;MWSC 3424;;; +NGC6990;G;20:59:56.92;-55:33:43.1;Ind;1.24;0.56;179;13.99;;11.78;11.14;10.94;22.85;Sa;;;;;;;;2MASX J20595692-5533431,ESO 187-043,ESO-LV 187-0430,IRAS 20562-5545,PGC 065862;;; +NGC6992;SNR;20:56:19.07;+31:44:33.9;Cyg;60.00;8.00;;7.00;;;;;;;;;;;;;;C 033;;;Dimensions and B-Mag taken from LEDA +NGC6993;G;20:53:54.05;-25:28:21.1;Cap;1.47;1.17;98;13.82;;12.07;11.45;10.83;23.11;SBc;;;;;;;;2MASX J20535406-2528210,ESO 529-011,IRAS 20509-2539,MCG -04-49-007,PGC 065671;;"NGC identification is not certain; ESO 529- ? 015 applies to nominal pos."; +NGC6994;Other;20:58:55.97;-12:38:07.8;Aqr;;;;;8.90;;;;;;;;;073;;;;;;Four Galactic stars.;V-mag taken from LEDA +NGC6995;SNR;20:57:10.76;+31:14:06.6;Cyg;12.00;12.00;;7.00;;;;;;;;;;;;;;;;;Dimensions and B-Mag taken from LEDA +NGC6996;*Ass;20:56:30.01;+45:28:22.9;Cyg;;;;;;;;;;;;;;;;;;;;; +NGC6997;Cl+N;20:56:39.45;+44:37:53.4;Cyg;6.90;;;;10.00;;;;;;;;;;;;;MWSC 3432;;; +NGC6998;G;21:01:37.68;-28:01:54.9;Mic;0.94;0.89;135;15.21;15.60;11.43;10.67;10.35;23.93;E;;;;;;;;2MASX J21013771-2801543,ESO 464-014,ESO-LV 464-0140,PGC 065925;;; +NGC6999;G;21:01:59.54;-28:03:32.1;Mic;1.21;0.99;1;15.02;;11.51;10.74;10.44;24.04;S0;;;;;;;;2MASX J21015953-2803313,ESO 464-015,ESO-LV 464-0150,PGC 065940;;; +NGC7000;HII;20:59:17.14;+44:31:43.6;Cyg;120.00;30.00;;4.00;;;;;;;;;;;;;;C 020,LBN 373;North America Nebula;;B-Mag taken from LEDA +NGC7001;G;21:01:07.75;-00:11:42.6;Aqr;1.38;1.03;169;14.00;;10.76;9.99;9.73;23.03;SABa;;;;;;;;2MASX J21010774-0011426,MCG +00-53-016,PGC 065905,SDSS J210107.74-001142.6,SDSS J210107.75-001142.6,UGC 11663;;; +NGC7002;G;21:03:44.80;-49:01:47.1;Ind;2.10;1.66;12;13.36;;10.45;9.81;9.48;23.92;E;;;;;;;;2MASX J21034478-4901471,ESO 235-043,ESO-LV 235-0430,PGC 066009;;; +NGC7003;G;21:00:42.42;+17:48:17.6;Del;0.99;0.66;116;13.80;;11.45;11.03;10.57;22.15;Sbc;;;;;;;;2MASX J21004241+1748174,IRAS 20584+1736,MCG +03-53-008,PGC 065887,UGC 11662;;; +NGC7004;G;21:04:02.18;-49:06:51.3;Ind;1.26;0.48;70;14.61;;11.59;10.88;10.50;23.70;S0-a;;;;;;;;2MASX J21040216-4906512,ESO 235-046,ESO-LV 235-0460,PGC 066019;;; +NGC7005;Other;21:01:57.65;-12:52:57.4;Aqr;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC7006;GCl;21:01:29.25;+16:11:15.1;Del;4.20;;;;10.46;9.56;9.02;9.00;;;;;;;;;;2MASX J21012946+1611164,C 042,MWSC 3446;;; +NGC7007;G;21:05:27.92;-52:33:07.1;Ind;3.39;1.23;1;12.89;12.04;9.91;9.19;8.96;24.22;E-S0;;;;;;;;2MASX J21052792-5233069,ESO 187-048,ESO-LV 187-0480,PGC 066069;;; +NGC7008;PN;21:00:32.80;+54:32:35.5;Cyg;1.43;;;13.30;10.70;11.87;11.52;11.41;;;12.99;13.75;13.23;;;;BD +53 2533C;IRAS 20590+5420,PN G093.4+05.4;;; +NGC7009;PN;21:04:10.79;-11:21:47.7;Aqr;;;;8.30;8.00;9.33;9.46;8.75;;;;12.66;12.78;;;;BD -11 5511,HD 200516,HIP 103992,TYC 5779-01804-1;2MASX J21041082-1121481,C 055,IRAS 21014-1133,PN G037.7-34.5;Saturn Nebula;; +NGC7010;G;21:04:39.50;-12:20:18.2;Aqr;2.18;1.12;47;13.25;;10.79;10.08;9.78;24.96;E;;;;;;5082;;2MASX J21043947-1220180,MCG -02-53-024,PGC 066039;;; +NGC7011;OCl;21:01:49.38;+47:21:15.5;Cyg;;;;;;;;;;;;;;;;;;;;; +NGC7012;G;21:06:45.52;-44:48:53.0;Mic;1.65;0.81;98;13.67;;10.41;9.74;9.45;23.59;E;;;;;;;;2MASX J21064552-4448531,ESO 286-051,ESO-LV 286-0510,PGC 066116;;; +NGC7013;G;21:03:33.58;+29:53:50.9;Cyg;4.16;1.33;158;12.90;;8.70;8.02;7.72;23.81;Sa;;;;;;;;2MASX J21033361+2953504,IRAS 21014+2941,MCG +05-49-001,PGC 066003,UGC 11670;;; +NGC7014;G;21:07:52.17;-47:10:44.4;Ind;2.03;1.77;130;12.93;12.25;10.13;9.41;9.15;23.71;E;;;;;;;;2MASX J21075218-4710445,ESO 286-057,ESO-LV 286-0570,PGC 066153;;; +NGC7015;G;21:05:37.38;+11:24:51.0;Equ;1.70;1.51;170;13.20;;10.63;9.99;9.69;23.05;Sbc;;;;;;;;2MASX J21053739+1124511,IRAS 21032+1112,MCG +02-53-012,PGC 066076,UGC 11674;;; +NGC7016;G;21:07:16.28;-25:28:08.2;Cap;1.02;0.86;90;14.87;;11.32;10.63;10.33;23.64;E;;;;;;;;2MASX J21071628-2528080,ESO 529-025,MCG -04-49-013,PGC 066136;;; +NGC7017;GPair;21:07:20.53;-25:29:12.7;Cap;0.85;0.60;85;14.93;;11.43;10.69;10.43;23.20;S0;;;;;;;;2MASX J21072021-2529150,ESO 529-026,MCG -04-49-014,PGC 066137;;; +NGC7018;GTrpl;21:07:25.35;-25:25:39.9;Cap;0.93;0.59;93;14.37;16.80;;;;;E;;;;;;;;MCG -04-49-015,PGC 066141;;; +NGC7019;G;21:06:25.73;-24:24:45.6;Cap;0.74;0.39;127;15.09;;12.46;11.81;11.47;22.71;SBb;;;;;;;;2MASX J21062571-2424456,ESO 529-022,IRAS 21035-2436,PGC 066107;;; +NGC7020;G;21:11:20.09;-64:01:31.2;Pav;4.10;1.67;165;12.81;11.48;9.77;9.11;8.89;24.42;S0-a;;;;;7021;;;2MASX J21112011-6401313,ESO 107-013,ESO-LV 107-0130,PGC 066291;;; +NGC7021;Dup;21:11:20.09;-64:01:31.2;Pav;;;;;;;;;;;;;;;7020;;;;;; +NGC7022;G;21:09:35.24;-49:18:13.2;Ind;1.52;1.08;7;14.04;;11.15;10.51;10.23;23.68;S0;;;;;;;;2MASX J21093522-4918132,ESO 235-065,ESO-LV 235-0650,PGC 066224;;; +NGC7023;Neb;21:01:35.62;+68:10:10.4;Cep;10.00;8.00;;7.20;;;;;;;;;;;;;;C 004,IRAS 21009+6758,LBN 487;Iris Nebula;Identified as IR cirrus by Strauss, et al (1992, ApJS, 83, 29).; +NGC7024;OCl;21:06:08.11;+41:29:04.5;Cyg;4.92;;;;;;;;;;;;;;;;;MWSC 3465;;; +NGC7025;G;21:07:47.34;+16:20:09.1;Del;2.02;1.32;45;14.10;;9.60;8.95;8.78;23.86;Sa;;;;;;;;2MASX J21074732+1620090,MCG +03-54-001,PGC 066151,UGC 11681;;; +NGC7026;PN;21:06:18.48;+47:51:07.9;Cyg;0.33;;;12.70;10.90;10.43;10.81;10.05;;;;15.33;14.20;;;;HD 201192;IRAS 21046+4739,PN G089.0+00.3;;; +NGC7027;PN;21:07:01.53;+42:14:11.5;Cyg;0.23;;;10.40;8.50;;;;;;;;16.25;;;;BD +41 4004,HD 201272,SAO 50463;2MASX J21070267+4214098,PN G084.9-03.4;;The 2MASX position refers to a star just east of the nebula.; +NGC7028;G;21:05:50.04;+18:28:05.5;Del;0.64;0.27;5;14.80;;12.62;11.91;11.91;21.82;Sc;;;;;;;;2MASX J21055003+1828056,IRAS 21035+1816,MCG +03-53-015,PGC 066087,UGC 11676;;Identification as NGC 7028 is very uncertain.; +NGC7029;G;21:11:52.05;-49:17:01.4;Ind;2.75;1.57;68;12.54;11.81;9.42;8.73;8.54;23.42;E;;;;;;;;2MASX J21115206-4917013,ESO 235-072,ESO-LV 235-0720,PGC 066318;;The APM position is southwest of the nucleus.; +NGC7030;G;21:11:13.33;-20:29:09.1;Cap;0.86;0.65;36;14.54;;11.55;10.89;10.72;22.81;SBab;;;;;;;;2MASX J21111331-2029084,ESO 598-028,ESO-LV 598-0280,IRAS 21083-2041,MCG -04-50-003,PGC 066283;;; +NGC7031;OCl;21:07:12.55;+50:52:32.0;Cyg;3.90;;;10.01;9.10;;;;;;;;;;;;;MWSC 3466;;; +NGC7032;G;21:15:22.88;-68:17:16.4;Pav;1.17;0.99;20;13.62;;11.56;11.03;10.73;22.57;Sc;;;;;;;;2MASX J21152288-6817164,ESO 074-026,ESO-LV 74-0260,IRAS 21109-6829,PGC 066427;;; +NGC7033;G;21:09:36.26;+15:07:29.6;Peg;0.88;0.60;4;15.20;;11.75;10.99;10.77;23.62;S0-a;;;;;;;;2MASX J21093624+1507299,MCG +02-54-002,PGC 066228;;; +NGC7034;G;21:09:38.18;+15:09:02.4;Peg;0.96;0.70;122;15.30;;11.26;10.54;10.22;23.90;E;;;;;;;;2MASX J21093817+1509019,MCG +02-54-003,PGC 066227,UGC 11687;;; +NGC7035;GPair;21:10:46.40;-23:08:09.0;Cap;1.20;;;15.41;;;;;;;;;;;;;;ESO 530-015;;;Diameter of the group inferred by the author. +NGC7035A;G;21:10:45.46;-23:08:06.5;Cap;0.89;0.65;110;15.37;;11.78;11.12;10.93;23.98;S0;;;;;;;;2MASX J21104545-2308066,ESO-LV 530-0151,PGC 066257;;; +NGC7035B;G;21:10:47.30;-23:08:13.5;Cap;1.23;0.91;88;15.63;;;;;24.57;S0;;;;;;;;ESO-LV 530-0150,PGC 066258;;; +NGC7036;OCl;21:10:12.39;+15:22:34.0;Peg;4.50;;;;;;;;;;;;;;;;;MWSC 3470;;; +NGC7037;OCl;21:10:45.72;+33:43:42.0;Cyg;6.00;;;;;;;;;;;;;;;;;MWSC 3477;;; +NGC7038;G;21:15:07.51;-47:13:13.8;Ind;3.22;1.69;127;12.69;;9.78;9.13;8.81;23.34;SABc;;;;;;;;2MASX J21150752-4713139,ESO 286-079,ESO-LV 286-0790,IRAS 21117-4725,PGC 066414;;; +NGC7039;OCl;21:10:47.80;+45:37:18.5;Cyg;7.80;;;8.06;7.60;;;;;;;;;;;;;MWSC 3474;;; +NGC7040;G;21:13:16.50;+08:51:53.9;Equ;1.04;0.74;155;14.90;;11.95;11.28;11.22;23.39;Sbc;;;;;;;;2MASX J21131651+0851541,MCG +01-54-004,PGC 066366,UGC 11701;;The companion noted in CGCG and UGC may be a line of three stars.; +NGC7041;G;21:16:32.38;-48:21:48.8;Ind;3.46;1.47;84;12.16;11.11;9.07;8.47;8.21;23.48;E-S0;;;;;;;;2MASX J21163238-4821490,ESO 235-082,ESO-LV 235-0820,PGC 066463;;; +NGC7042;G;21:13:45.86;+13:34:29.7;Peg;1.78;1.56;138;13.00;;10.34;9.60;9.37;22.80;Sb;;;;;;;;2MASX J21134584+1334295,IRAS 21113+1321,MCG +02-54-013,PGC 066378,UGC 11702;;; +NGC7043;G;21:14:04.17;+13:37:33.7;Peg;0.82;0.64;129;14.90;;11.93;11.29;11.11;23.11;Sa;;;;;;;;2MASX J21140417+1337337,MCG +02-54-014,PGC 066385,UGC 11704;;; +NGC7044;OCl;21:13:09.41;+42:29:46.3;Cyg;6.00;;;;12.00;;;;;;;;;;;;;MWSC 3485;;; +NGC7045;**;21:14:50.06;+04:30:24.4;Equ;;;;;;;;;;;;;;;;;;;;; +NGC7046;G;21:14:56.04;+02:50:05.4;Equ;1.10;0.77;113;14.20;;10.93;10.19;9.99;22.81;Sc;;;;;;;;2MASX J21145603+0250053,IRAS 21123+0237,MCG +00-54-009,PGC 066407,UGC 11708;;; +NGC7047;G;21:16:27.65;-00:49:35.4;Aqr;1.34;0.65;104;14.30;;11.13;10.47;10.20;23.52;Sb;;;;;;;;2MASX J21162763-0049353,IRAS 21138-0102,MCG +00-54-010,PGC 066461,SDSS J211627.64-004935.3,SDSS J211627.64-004935.4,UGC 11712;;; +NGC7048;PN;21:14:15.20;+46:17:19.0;Cyg;1.02;;;11.30;12.10;;;;;;;;19.12;;;;;IRAS 21124+4604,PN G088.7-01.6;;; +NGC7049;G;21:19:00.30;-48:33:43.8;Ind;3.94;2.69;64;11.28;10.74;8.14;7.59;7.25;23.38;S0;;;;;;;;2MASX J21190024-4833432,ESO 236-001,ESO-LV 236-0010,IRAS 21156-4846,PGC 066549;;; +NGC7050;OCl;21:15:08.55;+36:10:30.9;Cyg;3.60;;;;;;;;;;;;;;;;;MWSC 3487;;; +NGC7051;G;21:19:51.33;-08:46:58.6;Aqr;1.25;0.92;75;14.00;;10.50;9.74;9.47;22.89;Sa;;;;;;;;2MASX J21195132-0846584,IRAS 21171-0859,MCG -02-54-004,PGC 066566;;; +NGC7052;G;21:18:33.05;+26:26:49.3;Vul;1.82;0.90;66;14.85;13.09;9.54;8.86;8.57;24.04;E;;;;;;;;2MASX J21183304+2626486,IRAS 21163+2613,MCG +04-50-006,PGC 066537,UGC 11718;;; +NGC7053;G;21:21:07.61;+23:05:05.3;Peg;1.57;1.47;25;14.30;;10.18;9.48;9.20;23.87;S0-a;;;;;;;;2MASX J21210763+2305059,IRAS 21188+2252,MCG +04-50-009,PGC 066610,SDSS J212107.62+230505.7,UGC 11727;;; +NGC7054;Other;21:20:43.47;+39:10:19.9;Cyg;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7055;OCl;21:19:30.11;+57:32:44.2;Cep;3.00;;;;;;;;;;;;;;;;;MWSC 3494;;; +NGC7056;G;21:22:07.56;+18:39:56.4;Peg;1.10;1.03;60;13.86;13.09;10.80;10.12;9.73;22.68;SBbc;;;;;;1382;;2MASX J21220675+1840003,2MASX J21220752+1839563,IRAS 21198+1827,MCG +03-54-008,PGC 066641,UGC 11734;;; +NGC7057;G;21:24:58.70;-42:27:37.6;Mic;1.36;0.81;107;13.65;;10.59;9.90;9.69;23.21;E-S0;;;;;;;;2MASX J21245868-4227376,ESO 287-017,ESO-LV 287-0170,MCG -07-44-004,PGC 066708;;; +NGC7058;OCl;21:21:53.58;+50:49:08.5;Cyg;5.10;;;;;;;;;;;;;;;;;MWSC 3501;;NGC identification is not certain.; +NGC7059;G;21:27:21.47;-60:00:52.5;Pav;3.69;1.31;101;12.51;12.30;10.40;9.90;9.61;23.20;SABc;;;;;;;;2MASX J21272147-6000524,ESO 145-005,ESO-LV 145-0050,IRAS 21236-6013,PGC 066784;;; +NGC7060;G;21:25:53.58;-42:24:40.6;Mic;2.02;1.09;153;13.58;;10.63;9.93;9.64;23.63;SABa;;;;;;;;2MASX J21255357-4224408,ESO 287-022,ESO-LV 287-0220,IRAS 21226-4237,MCG -07-44-006,PGC 066732;;; +NGC7061;G;21:27:26.85;-49:03:48.6;Gru;1.63;0.94;138;14.15;;11.45;10.78;10.50;24.04;E;;;;;;;;2MASX J21272683-4903486,ESO 236-013,ESO-LV 236-0130,PGC 066785;;; +NGC7062;OCl;21:23:27.48;+46:22:42.7;Cyg;3.60;;;8.99;8.30;;;;;;;;;;;;;MWSC 3505;;; +NGC7063;OCl;21:24:21.70;+36:29:15.0;Cyg;6.30;;;7.32;7.00;;;;;;;;;;;;;MWSC 3507;;; +NGC7064;G;21:29:02.98;-52:46:03.4;Ind;3.74;0.70;92;13.04;12.69;;;;22.99;SBc;;;;;;;;ESO 188-009,ESO-LV 188-0090,IRAS 21255-5259,PGC 066836;;; +NGC7065;G;21:26:42.51;-06:59:41.7;Aqr;1.00;0.79;29;15.00;;11.19;10.54;10.20;22.90;SBab;;;;;;;;2MASX J21264253-0659418,MCG -01-54-017,PGC 066766,SDSS J212642.51-065941.6;;Star superposed 5.0 arcsec southwest of the nucleus.; +NGC7065A;G;21:26:57.85;-07:01:17.5;Aqr;1.10;1.04;130;14.41;;11.66;10.57;10.60;23.84;Sc;;;;;;;;2MASX J21265783-0701179,IRAS 21242-0714,MCG -01-54-018,PGC 066774,SDSS J212657.85-070117.5;;; +NGC7066;GPair;21:26:14.00;+14:10:55.0;Peg;0.83;0.81;160;15.20;;11.19;10.41;10.34;23.47;Sa;;;;;;;;2MASXJ21261376+1410589,MCG +02-54-025,PGC 066747,UGC11741;;; +NGC7067;OCl;21:24:23.12;+48:00:33.3;Cyg;2.40;;;10.64;9.70;;;;;;;;;;;;;MWSC 3508;;; +NGC7068;G;21:26:32.37;+12:11:03.5;Peg;0.76;0.33;175;14.50;;11.66;10.88;10.61;22.52;Sa;;;;;;;;2MASX J21263233+1211036,IRAS 21241+1158,MCG +02-54-027,PGC 066765,SDSS J212632.33+121103.7,SDSS J212632.34+121103.7;;; +NGC7069;G;21:28:05.87;-01:38:48.7;Aqr;1.15;0.70;17;14.80;;10.98;10.26;10.01;23.66;E-S0;;;;;;;;2MASX J21280588-0138487,MCG +00-54-019,PGC 066807,UGC 11747;;; +NGC7070;G;21:30:25.35;-43:05:13.6;Gru;2.50;2.16;178;12.70;12.29;11.23;10.31;10.02;23.40;Sc;;;;;;;;2MASX J21302534-4305135,ESO 287-028,ESO-LV 287-0280,IRAS 21272-4318,MCG -07-44-016,PGC 066869;;; +NGC7070A;G;21:31:47.29;-42:50:51.6;Gru;2.21;1.70;6;13.01;12.39;10.25;9.58;9.31;23.72;S0-a;;;;;;;;2MASX J21314729-4250515,ESO 287-034,ESO-LV 287-0340,MCG -07-44-021,PGC 066909;;; +NGC7071;*Ass;21:26:39.33;+47:55:10.5;Cyg;;;;;;;;;;;;;;;;;;;;; +NGC7072;G;21:30:36.92;-43:09:12.7;Gru;0.82;0.63;81;14.31;12.81;12.42;11.96;11.63;21.95;SABc;;;;;;;;2MASX J21303692-4309126,ESO 287-031,ESO-LV 287-0310,IRAS 21273-4322,MCG -07-44-018,PGC 066874;;; +NGC7072A;G;21:30:25.68;-43:12:09.4;Gru;0.80;0.61;108;15.23;;13.85;13.20;13.18;22.36;SABc;;;;;;;;2MASX J21302566-4312095,ESO 287-029,ESO-LV 287-0290,MCG -07-44-017,PGC 066870;;; +NGC7073;G;21:29:26.02;-11:29:17.3;Cap;0.92;0.81;170;16.00;;12.21;11.47;11.28;22.82;Sb;;;;;;;;2MASX J21292601-1129170,IRAS 21267-1142,MCG -02-54-010,PGC 066847;;; +NGC7074;G;21:29:38.84;+06:40:57.2;Peg;0.83;0.48;120;15.00;;11.87;11.04;10.71;23.77;S0;;;;;;;;2MASX J21293884+0640572,IRAS 21271+0627,PGC 066850;;; +NGC7075;G;21:31:32.98;-38:37:04.5;Gru;1.45;1.09;114;13.80;;10.54;9.80;9.56;23.43;E;;;;;;;;2MASX J21313299-3837046,ESO 343-004,ESO-LV 343-0040,MCG -07-44-020,PGC 066895;;; +NGC7076;PN;21:26:23.50;+62:53:33.0;Cep;0.93;;;14.50;13.50;;;;;;;18.00;;;;;;IRAS 21251+6240,PN G101.8+08.7;;; +NGC7077;G;21:29:59.61;+02:24:51.0;Aqr;0.90;0.56;12;14.25;13.67;12.31;11.82;11.38;23.09;E;;;;;;;;2MASX J21295963+0224517,MCG +00-54-028,PGC 066860,UGC 11755;;; +NGC7078;GCl;21:29:58.38;+12:10:00.6;Peg;11.10;;;3.00;6.30;;;;;;;;;015;;;;IRAS 21274+1156,MWSC 3518,PN G065.0-27.3;;;V-mag taken from LEDA +NGC7079;G;21:32:35.25;-44:04:03.2;Gru;2.30;1.44;77;12.63;11.61;9.48;8.82;8.58;23.02;S0;;;;;;;;2MASX J21323526-4404029,ESO 287-036,ESO-LV 287-0360,MCG -07-44-022,PGC 066934;;; +NGC7080;G;21:30:01.95;+26:43:04.1;Peg;1.63;1.54;100;13.13;12.33;10.54;9.79;9.40;22.94;Sb;;;;;;;;2MASX J21300195+2643044,IRAS 21278+2629,MCG +04-50-012,PGC 066861,SDSS J213001.92+264304.4,UGC 11756;;; +NGC7081;G;21:31:24.12;+02:29:28.6;Peg;0.77;0.65;155;13.70;;11.74;11.16;11.02;22.03;Sb;;;;;;;;2MASX J21312413+0229285,IRAS 21288+0216,MCG +00-54-030,PGC 066891,UGC 11759;;The HIPASS beam probably includes the galaxy UGC 11760.; +NGC7082;OCl;21:29:17.74;+47:07:34.6;Cyg;9.00;;;7.70;7.20;;;;;;;;;;;;;MWSC 3517;;; +NGC7083;G;21:35:44.69;-63:54:10.2;Ind;3.56;1.98;6;11.93;11.04;9.37;8.73;8.42;22.94;SBbc;;;;;;;;2MASX J21354470-6354101,ESO 107-036,ESO-LV 107-0360,IRAS 21318-6407,PGC 067023;;; +NGC7084;OCl;21:32:33.13;+17:30:30.7;Peg;6.00;;;;;;;;;;;;;;;;;MWSC 3524;;; +NGC7085;G;21:32:25.23;+06:34:52.5;Peg;0.99;0.42;148;15.20;;12.03;11.36;11.07;23.39;Sb;;;;;;;;2MASX J21322521+0634525,IRAS 21299+0621,MCG +01-55-001,PGC 066926;;; +NGC7086;OCl;21:30:27.55;+51:36:01.9;Cyg;4.80;;;9.25;8.40;;;;;;;;;;;;;MWSC 3520;;; +NGC7087;G;21:34:33.47;-40:49:07.1;Gru;0.86;0.62;47;13.93;;10.75;9.99;9.67;21.93;SBab;;;;;;;;2MASX J21343347-4049071,ESO 343-008,ESO-LV 343-0080,IRAS 21314-4102,MCG -07-44-025,PGC 066988;;; +NGC7088;Other;21:33:22.12;-00:22:57.4;Aqr;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7089;GCl;21:33:27.01;-00:49:23.9;Aqr;8.40;;;;6.25;;;;;;;;;002;;;;MWSC 3526;;; +NGC7090;G;21:36:28.86;-54:33:26.4;Ind;8.15;1.63;128;11.60;11.05;9.03;8.39;8.16;23.32;Sc;;;;;;;;2MASX J21362886-5433263,ESO 188-012,ESO-LV 188-0120,IRAS 21329-5446,PGC 067045;;Position in 1997AJ....113.1548C is incorrect.; +NGC7091;G;21:34:07.94;-36:39:13.4;Gru;1.86;1.31;86;13.43;;12.30;11.77;11.77;23.30;Sd;;;;;;5114;;ESO 403-008,ESO-LV 403-0080,MCG -06-47-007,PGC 066972;;; +NGC7092;OCl;21:31:48.32;+48:26:17.4;Cyg;19.50;;;4.66;4.60;;;;;;;;;039;;;;MWSC 3521;;; +NGC7093;OCl;21:34:21.70;+45:57:54.0;Cyg;3.60;;;;;;;;;;;;;;;;;MWSC 3528;;; +NGC7094;PN;21:36:52.97;+12:47:19.1;Peg;1.57;;;13.60;13.40;14.14;14.13;14.19;;;12.39;13.58;13.68;;;;;IRAS 21344+1233,PN G066.7-28.2;;; +NGC7095;G;21:52:26.44;-81:31:51.0;Oct;2.71;2.21;135;12.22;;10.11;9.41;9.17;23.11;SBc;;;;;;;;2MASX J21522643-8131507,ESO 027-001,ESO-LV 27-0010,IRAS 21457-8145,PGC 067546;;; +NGC7096;G;21:41:19.28;-63:54:31.3;Ind;2.10;1.98;125;12.81;11.58;9.84;9.16;8.95;23.19;Sa;;;;;;5121;;2MASX J21411929-6354314,ESO 107-046,ESO-LV 107-0460,PGC 067168;;; +NGC7096A;G;21:38:48.27;-64:21:00.7;Ind;2.00;0.69;104;14.05;;11.75;11.10;10.80;23.54;Sbc;;;;;;5120;;2MASX J21384824-6421007,ESO-LV 1070410,IRAS 21348-6434,PGC 067093;;; +NGC7097;G;21:40:12.91;-42:32:21.8;Gru;1.89;1.36;17;12.66;11.71;9.58;8.94;8.68;22.85;E;;;;;;;;2MASX J21401288-4232218,ESO 287-048,ESO-LV 287-0480,MCG -07-44-029,PGC 067146;;SGC incorrectly calls this galaxy NGC 7095.; +NGC7097A;G;21:40:37.86;-42:28:49.0;Gru;0.70;0.44;131;15.09;;12.47;11.90;11.64;23.15;E;;;;;;;;2MASX J21403785-4228488,ESO 287-049,ESO-LV 287-0490,MCG -07-44-030,PGC 067160;;; +NGC7098;G;21:44:16.12;-75:06:40.8;Oct;1.78;0.91;62;12.33;11.37;8.94;7.84;7.87;22.21;Sa;;;;;;;;2MASX J21441607-7506408,ESO 048-005,ESO-LV 48-0050,IRAS 21393-7520,PGC 067266;;; +NGC7099;GCl;21:40:22.02;-23:10:44.7;Cap;9.00;;;;7.10;;;;;;;;;030;;;;MWSC 3543;;; +NGC7100;*;21:39:07.04;+08:57:05.5;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7101;G;21:39:34.61;+08:52:37.0;Peg;0.82;0.75;165;14.70;;11.11;10.36;10.13;23.29;E;;;;;;;;2MASX J21393460+0852366,MCG +01-55-007,PGC 067118;;NGC 7100 is a Galactic star.; +NGC7102;G;21:39:44.49;+06:17:10.7;Peg;1.48;0.89;141;14.40;;11.57;10.89;10.76;23.29;Sb;;;;;;5127;;2MASX J21394454+0617106,MCG +01-55-008,PGC 067120,SDSS J213944.57+061710.8,UGC 11786;;The IC identification is uncertain.; +NGC7103;G;21:39:51.50;-22:28:26.0;Cap;1.42;0.92;63;15.08;;10.90;10.17;9.88;24.39;E;;;;;;;;2MASX J21395143-2228251,ESO 531-015,PGC 067124;;; +NGC7104;G;21:40:03.18;-22:25:29.3;Cap;0.79;0.73;55;15.07;;11.57;10.75;10.43;23.63;E;;;;;;;;2MASX J21400320-2225291,ESO 531-018,MCG -04-51-008,PGC 067137;;; +NGC7105;G;21:41:41.35;-10:38:07.8;Cap;1.51;0.74;136;15.00;;10.77;9.96;9.82;23.88;S0;;;;;;;;2MASX J21414133-1038083,MCG -02-55-001,PGC 067181;;; +NGC7106;G;21:42:36.59;-52:41:58.3;Ind;1.66;1.12;85;13.77;;11.44;11.00;10.46;23.37;SABc;;;;;;;;2MASX J21423659-5241583,ESO 188-017,ESO-LV 188-0170,PGC 067215;;; +NGC7107;G;21:42:26.48;-44:47:25.0;Gru;1.91;0.94;127;13.21;;;;;22.86;SBm;;;;;;;;ESO 287-052,ESO-LV 287-0520,IRAS 21392-4501,PGC 067209;;; +NGC7108;G;21:41:53.75;-06:42:31.8;Aqr;1.17;0.79;53;15.00;;11.47;10.78;10.43;23.98;E;;;;;7111;;;2MASX J21415375-0642317,MCG -01-55-002,PGC 067189,SDSS J214153.74-064231.7,SDSS J214153.74-064231.8,SDSS J214153.75-064231.8;;; +NGC7109;G;21:41:58.53;-34:26:45.2;PsA;0.87;0.81;105;14.42;;11.29;10.69;10.41;23.06;E;;;;;;;;2MASX J21415854-3426451,ESO 403-015,ESO-LV 403-0150,MCG -06-47-011,PGC 067192;;; +NGC7110;G;21:42:12.15;-34:09:44.0;PsA;1.40;0.73;74;14.25;;11.43;10.76;10.47;23.25;Sb;;;;;;;;2MASX J21421214-3409436,ESO 403-016,ESO-LV 403-0160,MCG -06-47-012,PGC 067199,TYC 7490-1217-1;;; +NGC7111;Dup;21:41:53.75;-06:42:31.8;Aqr;;;;;;;;;;;;;;;7108;;;;;; +NGC7112;G;21:42:26.64;+12:34:09.3;Peg;0.99;0.99;40;15.20;;11.01;10.34;10.03;23.96;E;;;;;7113;;;2MASX J21422663+1234093,MCG +02-55-009,PGC 067208,SDSS J214226.63+123409.2;;; +NGC7113;Dup;21:42:26.64;+12:34:09.3;Peg;;;;;;;;;;;;;;;7112;;;;;; +NGC7114;*;21:41:44.03;+42:50:30.5;Cyg;;;;15.40;3.00;13.54;13.25;13.11;;;;;;;;;;UCAC2 46600206;Schmidt's Nova Cygni;; +NGC7115;G;21:43:38.53;-25:21:05.8;PsA;1.91;0.59;69;13.95;;11.08;10.41;10.24;23.45;Sb;;;;;;;;2MASX J21433851-2521057,ESO 531-025,IRAS 21407-2535,MCG -04-51-011,PGC 067248;;; +NGC7116;G;21:42:40.22;+28:56:47.7;Cyg;1.22;0.50;105;14.20;;11.59;10.91;10.69;22.69;Sc;;;;;;;;2MASX J21424021+2856475,MCG +05-51-001,PGC 067218,UGC 11796;;; +NGC7117;G;21:45:47.04;-48:25:13.5;Gru;1.71;1.00;30;13.57;;10.63;9.90;9.66;23.64;E-S0;;;;;;;;2MASX J21454702-4825134,ESO 236-040,ESO-LV 236-0400,PGC 067303;;; +NGC7118;G;21:46:09.74;-48:21:13.7;Gru;1.70;1.36;45;13.49;;10.49;9.80;9.56;23.44;E-S0;;;;;;;;2MASX J21460973-4821135,ESO 236-045,ESO-LV 236-0450,PGC 067318;;; +NGC7119A;G;21:46:16.05;-46:30:58.1;Gru;0.70;0.46;141;13.54;;;;;21.24;SBbc;;;;;;;;ESO 288-002,ESO-LV 288-0020,IRAS 21430-4644,PGC 067325;;; +NGC7119B;G;21:46:15.18;-46:31:06.3;Gru;0.64;0.21;24;13.74;;11.25;10.56;10.21;20.96;Sc;;;;;;;;2MASX J21461519-4631063,ESO 288-001,ESO-LV 288-0010,PGC 067322;;; +NGC7120;G;21:44:33.22;-06:31:23.4;Aqr;0.84;0.46;136;15.00;;12.15;11.51;11.12;22.79;Sb;;;;;;;;2MASX J21443322-0631232,IRAS 21419-0645,MCG -01-55-006,PGC 067273;;; +NGC7121;G;21:44:52.58;-03:37:11.0;Aqr;1.17;0.62;2;14.00;;11.89;11.25;10.96;22.89;SBbc;;;;;;;;2MASX J21445258-0337109,IRAS 21422-0351,MCG -01-55-008,PGC 067287;;; +NGC7122;**;21:45:47.82;-08:49:46.6;Cap;;;;;;;;;;;;;;;;;;;;; +NGC7123;G;21:50:46.63;-70:20:02.9;Ind;2.63;1.12;145;13.29;;9.61;8.81;8.47;23.78;Sa;;;;;;;;2MASX J21504657-7020030,ESO 075-027,ESO-LV 75-0270,PGC 067466;;; +NGC7124;G;21:48:05.39;-50:33:54.8;Ind;2.56;1.06;146;13.28;12.22;10.42;9.94;9.49;23.20;SBbc;;;;;;;;2MASX J21480540-5033549,ESO 236-049,ESO 237-002,ESO-LV 237-0020,IRAS 21447-5047,PGC 067375;;; +NGC7125;G;21:49:15.98;-60:42:47.4;Ind;2.94;1.84;95;12.70;12.37;11.11;10.82;10.21;23.53;SABc;;;;;;;;2MASX J21491594-6042474,ESO 145-017,ESO-LV 145-0170,IRAS 21456-6056,PGC 067417;;Extended HIPASS source; +NGC7126;G;21:49:18.13;-60:36:33.2;Ind;2.55;1.09;79;12.99;12.36;10.64;10.02;9.75;23.02;Sc;;;;;;;;2MASX J21491813-6036334,ESO 145-018,ESO-LV 145-0180,IRAS 21456-6050,PGC 067418;;; +NGC7127;OCl;21:43:41.99;+54:37:47.9;Cyg;2.70;;;;;;;;;;;;;;;;;MWSC 3553;;; +NGC7128;OCl;21:43:57.81;+53:42:54.5;Cyg;3.00;;;10.54;9.70;;;;;;;;;;;;;MWSC 3554;;; +NGC7129;Cl+N;21:42:59.03;+66:06:46.7;Cep;2.10;;;11.50;11.50;;;;;;;;;;;;;2MASX J21425712+6606350,LBN 497,MWSC 3549;;;B-Mag taken from LEDA +NGC7130;G;21:48:19.52;-34:57:04.5;PsA;1.56;1.33;160;12.86;13.87;10.23;9.54;9.20;22.55;Sa;;;;;;5135;;2MASX J21481948-3457047,ESO 403-032,ESO-LV 403-0320,IRAS 21453-3511,MCG -06-47-015,PGC 067387;;; +NGC7131;G;21:47:36.11;-13:10:57.4;Cap;1.13;0.87;114;14.00;;11.14;10.41;10.19;23.83;S0;;;;;;;;2MASX J21473610-1310576,MCG -02-55-002,PGC 067359;;; +NGC7132;G;21:47:16.58;+10:14:28.2;Peg;0.90;0.72;101;14.60;;11.71;10.98;10.99;23.00;Sc;;;;;;;;2MASX J21471659+1014283,MCG +02-55-013,PGC 067349;;; +NGC7133;Other;21:44:26.70;+66:10:06.3;Cep;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7134;Other;21:48:56.26;-12:58:23.3;Cap;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC7135;G;21:49:46.01;-34:52:34.6;PsA;2.60;2.03;45;12.25;13.30;9.72;9.07;8.85;23.61;E-S0;;;;;;5136;;2MASX J21494602-3452346,ESO 403-035,ESO-LV 403-0350,MCG -06-48-001,PGC 067425;;"Joguet et al. (2001A&A...380...19J) claim ""No activity""."; +NGC7136;**;21:49:43.13;-11:47:35.9;Cap;;;;;;;;;;;;;;;;;;;;; +NGC7137;G;21:48:13.04;+22:09:34.5;Peg;1.84;1.65;50;13.30;;10.44;9.73;8.87;23.02;SABc;;;;;;;;2MASX J21481303+2209344,MCG +04-51-005,PGC 067379,UGC 11815;;; +NGC7138;G;21:49:01.09;+12:30:51.2;Peg;1.20;0.62;176;15.40;;11.38;10.63;10.35;23.98;SBa;;;;;;;;2MASX J21490109+1230516,MCG +02-55-014,PGC 067406,SDSS J214901.08+123051.1,UGC 11817;;; +NGC7139;PN;21:46:08.60;+63:47:31.0;Cep;1.28;;;13.00;13.30;;;;;;;;18.72;;;;;IRAS 21448+6333,PN G104.1+07.9;;; +NGC7140;G;21:52:15.31;-55:34:10.8;Ind;3.04;2.07;18;12.68;13.49;9.70;9.10;8.95;23.16;SABb;;;;;7141;;;2MASX J21521535-5534107,ESO 189-007,ESO-LV 189-0070,IRAS 21488-5548,PGC 067532;;; +NGC7141;Dup;21:52:15.31;-55:34:10.8;Ind;;;;;;;;;;;;;;;7140;;;;;; +NGC7142;OCl;21:45:09.51;+65:46:28.0;Cep;9.60;;;10.36;9.30;;;;;;;;;;;;;MWSC 3557;;; +NGC7143;Other;21:48:53.67;+29:57:17.9;Peg;;;;;;;;;;;;;;;;;;;;Line of five Galactic stars.; +NGC7144;G;21:52:42.43;-48:15:13.5;Gru;3.41;3.20;10;11.87;10.71;8.85;8.11;7.96;23.22;E;;;;;;;;2MASX J21524246-4815142,ESO 237-011,ESO-LV 237-0110,PGC 067557;;; +NGC7145;G;21:53:20.24;-47:52:56.8;Gru;2.95;0.76;150;12.13;11.23;9.41;8.70;8.51;23.15;E;;;;;;;;2MASX J21532023-4752569,ESO 237-013,ESO-LV 237-0130,PGC 067583;;; +NGC7146;G;21:51:47.37;+03:01:01.3;Peg;0.73;0.42;89;15.50;;12.30;11.64;11.38;23.27;SABa;;;;;;;;2MASX J21514738+0301014,MCG +00-55-024,PGC 067508;;; +NGC7147;G;21:51:58.43;+03:04:18.1;Peg;0.99;0.76;90;14.80;;11.27;10.56;10.23;23.57;S0-a;;;;;;;;2MASX J21515839+0304184,MCG +00-55-025,PGC 067518;;; +NGC7148;**;21:52:08.47;+03:20:29.3;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7149;G;21:52:11.68;+03:18:04.1;Peg;1.30;0.86;15;14.60;;10.88;10.14;9.90;23.94;E;;;;;;;;2MASX J21521166+0318045,MCG +00-55-026,PGC 067524,UGC 11835;;; +NGC7150;Other;21:50:23.99;+49:45:21.9;Cyg;;;;;;;;;;;;;;;;;;;;Group of 4-5 Galactic stars.; +NGC7151;G;21:55:04.14;-50:39:28.4;Ind;2.66;0.89;73;13.48;;;;;23.34;SABc;;;;;;;;ESO 237-015,ESO-LV 237-0150,PGC 067634;;; +NGC7152;G;21:53:59.04;-29:17:20.7;PsA;1.27;0.31;18;14.45;;11.88;11.30;10.85;22.79;SBb;;;;;;;;2MASX J21535902-2917206,ESO 466-013,ESO-LV 466-0130,MCG -05-51-020,PGC 067601;;; +NGC7153;G;21:54:35.41;-29:03:49.0;PsA;1.91;0.28;66;14.28;;11.03;10.28;10.01;23.35;Sb;;;;;;;;2MASX J21543539-2903488,ESO 466-016,ESO-LV 466-0160,MCG -05-51-022,PGC 067624;;; +NGC7154;G;21:55:21.04;-34:48:50.9;PsA;2.26;1.91;116;12.98;12.35;11.22;10.65;10.38;23.19;I;;;;;;;;2MASX J21552103-3448507,ESO 404-008,ESO-LV 404-0080,IRAS 21523-3503,MCG -06-48-005,PGC 067641;;Confused HIPASS source; +NGC7155;G;21:56:09.73;-49:31:19.0;Ind;2.15;1.91;97;13.01;11.83;9.86;9.20;8.97;23.49;S0;;;;;;5143;;2MASX J21560971-4931188,ESO 237-016,ESO-LV 237-0160,PGC 067663;;SGC and ESO misidentify IC 5143.; +NGC7156;G;21:54:33.63;+02:56:34.9;Peg;1.40;1.22;120;13.41;12.72;10.81;10.15;9.79;22.65;SABc;;;;;;;;2MASX J21543362+0256347,IRAS 21520+0242,MCG +00-55-029,PGC 067622,UGC 11843;;; +NGC7157;G;21:56:56.70;-25:21:01.9;PsA;1.17;0.55;12;15.00;;12.04;11.27;11.17;23.51;Sa;;;;;;;;2MASX J21565669-2521016,ESO 532-003,ESO-LV 532-0030,MCG -04-51-015,PGC 067693;;; +NGC7158;Other;21:57:28.12;-11:35:33.1;Cap;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC7159;G;21:56:25.61;+13:33:45.5;Peg;0.71;0.56;115;15.20;;12.48;11.78;11.45;;;;;;;;;;2MASX J21562561+1333456,IRAS 21540+1319,PGC 067674;;;Diameters and position angle taken from Simbad. +NGC7160;OCl;21:53:40.27;+62:36:11.9;Cep;4.20;;;6.34;6.10;;;;;;;;;;;;;MWSC 3572;;; +NGC7161;Other;21:56:57.89;+02:54:58.4;Peg;;;;;;;;;;;;;;;;;;;;Asterism of Galactic stars. NGC identification is not certain.; +NGC7162;G;21:59:39.13;-43:18:21.5;Gru;3.04;1.10;10;13.36;;10.92;10.32;10.07;23.61;Sc;;;;;;;;2MASX J21593905-4318224,ESO 288-026,ESO-LV 288-0260,MCG -07-45-003,PGC 067795;;The APMBGC position is 17 arcsec south of the nucleus.; +NGC7162A;G;22:00:35.75;-43:08:30.2;Gru;2.39;1.73;42;13.54;;;;;23.45;Sm;;;;;;;;ESO 288-028,ESO-LV 288-0280,MCG -07-45-005,PGC 067818;;The APMBGC position is 8 arcsec northwest of the center of the bar.; +NGC7163;G;21:59:20.44;-31:52:59.4;PsA;2.17;1.04;101;13.52;;10.47;9.74;9.76;24.30;Sab;;;;;;;;2MASX J21592042-3152590,ESO 466-030,ESO-LV 466-0300,IRAS 21564-3207,MCG -05-51-035,PGC 067785;;; +NGC7164;G;21:56:23.64;+01:21:50.2;Aqr;0.72;0.40;113;14.90;;11.93;11.29;10.92;23.56;S0-a;;;;;;;;2MASX J21562364+0121503,PGC 067673;;; +NGC7165;G;21:59:26.10;-16:30:44.4;Aqr;1.12;0.92;38;14.35;13.54;11.40;10.71;10.49;22.89;Sab;;;;;;;;2MASX J21592607-1630446,IRAS 21567-1645,MCG -03-56-002,PGC 067788;;; +NGC7166;G;22:00:32.92;-43:23:23.0;Gru;0.81;0.52;10;12.64;11.84;9.47;8.72;8.52;21.30;E-S0;;;;;;;;2MASX J22003292-4323232,ESO 288-027,ESO-LV 288-0270,MCG -07-45-004,PGC 067817;;; +NGC7167;G;22:00:30.64;-24:37:57.4;Aqr;1.83;1.30;137;13.22;;11.01;10.51;9.95;22.43;SBc;;;;;;;;2MASX J22003063-2437573,ESO 532-009,ESO-LV 532-0090,IRAS 21576-2452,MCG -04-52-001,PGC 067816;;; +NGC7168;G;22:02:07.40;-51:44:35.1;Ind;2.23;1.64;69;12.86;11.86;9.82;9.14;8.88;23.43;E;;;;;;;;2MASX J22020742-5144352,ESO 237-026,ESO-LV 237-0260,PGC 067882;;; +NGC7169;G;22:02:48.64;-47:41:52.2;Gru;1.08;0.56;75;14.55;;11.66;10.91;10.66;23.46;E-S0;;;;;;;;2MASX J22024862-4741522,ESO 237-028,ESO-LV 237-0280,PGC 067913;;; +NGC7170;G;22:01:26.26;-05:25:58.0;Aqr;1.12;0.74;166;14.36;;11.08;10.37;10.15;23.78;E-S0;;;;;;;;2MASX J22012625-0525581,PGC 067848;;; +NGC7171;G;22:01:02.01;-13:16:11.1;Aqr;2.37;1.22;119;12.70;;10.15;9.56;9.31;23.18;SBb;;;;;;;;2MASX J22010200-1316108,IRAS 21583-1330,MCG -02-56-005,PGC 067839;;; +NGC7172;G;22:02:01.89;-31:52:10.8;PsA;2.75;1.82;105;12.72;13.61;9.44;8.69;8.32;23.61;Sa;;;;;;;;2MASX J22020189-3152116,ESO 466-038,ESO-LV 466-0380,IRAS 21591-3206,MCG -05-52-007,PGC 067874;;"Joguet et al. (2001A&A...380...19J) claim ""No activity""."; +NGC7173;G;22:02:03.19;-31:58:25.3;PsA;1.88;1.53;141;12.10;;9.83;9.17;8.96;23.14;E;;;;;;;;2MASX J22020320-3158253,ESO 466-039,ESO-LV 466-0390,MCG -05-52-008,PGC 067878,UGCA 422;;; +NGC7174;G;22:02:06.45;-31:59:34.7;PsA;2.51;2.20;85;12.26;12.15;;;;24.59;Sb;;;;;;;;ESO 466-040,ESO-LV 466-0400,MCG -05-52-010,PGC 067881;;; +NGC7175;OCl;21:58:39.83;+54:48:22.9;Cyg;4.50;;;;;;;;;;;;;;;;;MWSC 3577;;; +NGC7176;G;22:02:08.44;-31:59:23.1;PsA;1.15;0.92;75;12.08;;8.97;8.28;8.01;21.59;E;;;;;;;;2MASX J22020846-3159233,ESO 466-041,ESO-LV 466-0410,MCG -05-52-011,PGC 067883,UGCA 423;;; +NGC7177;G;22:00:41.24;+17:44:17.0;Peg;2.85;1.93;87;12.20;;9.09;8.40;8.17;22.61;SABb;;;;;;;;2MASX J22004125+1744172,MCG +03-56-003,PGC 067823,SDSS J220041.21+174417.5,UGC 11872;;; +NGC7178;G;22:02:25.20;-35:47:25.3;PsA;1.17;0.45;174;14.82;;12.43;11.87;11.39;23.16;SABb;;;;;;;;2MASX J22022517-3547251,ESO 404-022,ESO-LV 404-0220,MCG -06-48-016,PGC 067898;;; +NGC7179;G;22:04:49.32;-64:02:48.6;Ind;2.03;1.00;48;13.40;13.43;10.53;9.87;9.58;23.13;SBbc;;;;;;;;2MASX J22044929-6402487,ESO 108-011,ESO-LV 108-0110,PGC 067995;;; +NGC7180;G;22:02:18.46;-20:32:51.9;Aqr;1.66;0.77;65;13.61;;10.51;9.89;9.62;23.33;E-S0;;;;;;;;2MASX J22021847-2032516,ESO 601-006,ESO-LV 601-0060,MCG -04-52-008,PGC 067890;;; +NGC7181;G;22:01:43.49;-01:57:38.0;Aqr;0.73;0.60;69;15.40;;11.57;10.90;10.58;23.46;S0;;;;;;;;2MASX J22014352-0157380,PGC 067859;;; +NGC7182;G;22:01:51.66;-02:11:47.7;Aqr;0.79;0.43;90;15.60;;11.94;11.17;10.87;23.57;S0-a;;;;;;;;2MASX J22015167-0211480,MCG +00-56-006,PGC 067864;;; +NGC7183;G;22:02:21.62;-18:54:59.4;Aqr;3.89;1.14;82;12.94;;9.45;8.64;8.38;24.50;S0-a;;;;;;;;2MASX J22022161-1854596,ESO 601-008,ESO-LV 601-0080,IRAS 21596-1909,MCG -03-56-004,PGC 067892;;; +NGC7184;G;22:02:39.82;-20:48:46.2;Aqr;5.98;1.26;61;11.98;11.20;8.73;7.91;7.77;23.13;SBc;;;;;;;;2MASX J22023982-2048461,ESO 601-009,ESO-LV 601-0090,IRAS 21599-2103,MCG -04-52-009,PGC 067904,UGCA 425;;; +NGC7185;G;22:02:56.75;-20:28:16.6;Aqr;2.31;1.61;26;13.12;13.03;10.48;9.78;9.69;23.96;E-S0;;;;;;;;2MASX J22025674-2028165,ESO 601-010,ESO-LV 601-0100,MCG -04-52-011,PGC 067919;;; +NGC7186;Other;22:01:05.22;+35:04:43.8;Peg;;;;;;;;;;;;;;;;;;;;Eight Galactic stars.; +NGC7187;G;22:02:44.56;-32:48:07.8;PsA;1.15;1.05;65;13.43;;10.41;9.71;9.40;22.50;S0-a;;;;;;;;ESO 404-024,ESO-LV 404-0240,MCG -06-48-018,PGC 067909;;; +NGC7188;G;22:03:29.00;-20:19:04.7;Aqr;1.76;0.74;49;14.05;;11.34;11.21;10.96;23.30;SBbc;;;;;;;;2MASX J22032898-2019049,ESO 601-011,ESO-LV 601-0110,MCG -04-52-012,PGC 067943;;; +NGC7189;G;22:03:16.00;+00:34:16.0;Aqr;0.99;0.64;121;14.40;;11.42;10.69;10.35;22.83;SBb;;;;;;;;2MASX J22031601+0034163,IRAS 22007+0019,MCG +00-56-007,PGC 067934,SDSS J220315.99+003415.8,SDSS J220315.99+003415.9,SDSS J220316.00+003415.9,SDSS J220316.00+003416.0,UGC 11882;;; +NGC7190;G;22:03:06.68;+11:11:57.5;Peg;0.96;0.48;64;15.00;;11.20;10.53;10.17;23.73;S0-a;;;;;;;;2MASX J22030665+1111576,PGC 067928,UGC 11885;;"Often incorrectly called IC 5160; that is UGC 11884."; +NGC7191;G;22:06:51.79;-64:38:04.4;Ind;1.83;0.73;138;13.80;;11.09;10.45;10.15;23.11;SABc;;;;;;;;2MASX J22065179-6438043,ESO 108-013,ESO-LV 108-0130,IRAS 22031-6452,PGC 068059;;; +NGC7192;G;22:06:50.16;-64:18:58.5;Ind;2.42;2.31;0;12.21;11.21;9.37;8.84;8.51;23.00;E;;;;;;;;2MASX J22065017-6418583,ESO 108-012,ESO-LV 108-0120,PGC 068057;;The APMUKS position is east of the nucleus.; +NGC7193;OCl;22:03:01.56;+10:48:13.8;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7194;G;22:03:30.94;+12:38:12.4;Peg;1.31;0.89;18;14.50;;10.73;9.99;9.67;23.75;E;;;;;;;;2MASX J22033093+1238124,IRAS 22011+1224,MCG +02-56-008,PGC 067945,UGC 11888;;; +NGC7195;G;22:03:30.28;+12:39:39.0;Peg;0.69;0.53;46;15.60;;12.05;11.38;11.03;23.52;S0-a;;;;;;;;2MASX J22033031+1239384,MCG +02-56-009,PGC 067940,SDSS J220330.28+123938.9,SDSS J220330.29+123939.0;;; +NGC7196;G;22:05:54.81;-50:07:09.6;Ind;2.76;2.06;59;12.43;11.54;9.23;8.59;8.27;23.43;E;;;;;;;;2MASX J22055480-5007094,ESO 237-036,ESO-LV 237-0360,IRAS 22026-5021,PGC 068020;;; +NGC7197;G;22:02:58.05;+41:03:32.4;Lac;1.67;0.85;111;14.50;;9.89;9.15;8.79;23.92;Sa;;;;;;;;2MASX J22025805+4103322,IRAS 22008+4049,MCG +07-45-005,PGC 067921,UGC 11887;;; +NGC7198;G;22:05:14.24;-00:38:53.8;Aqr;0.98;0.75;180;14.50;;11.17;10.46;10.22;23.23;S0;;;;;;;;2MASX J22051422-0038534,MCG +00-56-008,PGC 068006,SDSS J220514.24-003853.7;;; +NGC7199;G;22:08:29.84;-64:42:22.1;Tuc;1.21;0.90;30;13.87;13.22;10.92;10.29;10.00;22.92;SBa;;;;;;;;2MASX J22082982-6442222,ESO 108-014,ESO-LV 108-0140,PGC 068124;;; +NGC7200;G;22:07:09.52;-49:59:43.7;Gru;1.28;1.00;45;13.73;;10.91;10.21;9.96;23.17;E;;;;;;;;2MASX J22070954-4959436,ESO 237-037,ESO-LV 237-0370,PGC 068068;;; +NGC7201;G;22:06:31.93;-31:15:46.8;PsA;1.66;0.55;128;13.76;;10.52;9.79;9.48;23.28;Sa;;;;;;;;2MASX J22063191-3115467,ESO 467-004,ESO-LV 467-0040,IRAS 22036-3130,MCG -05-52-026,PGC 068040;;; +NGC7202;*;22:06:43.24;-31:13:04.4;PsA;;;;;;;;;;;;;;;;;;;;; +NGC7203;G;22:06:43.88;-31:09:44.7;PsA;1.08;0.58;68;13.59;;10.45;9.77;9.57;22.48;S0-a;;;;;;;;2MASX J22064390-3109447,ESO 467-007,ESO-LV 467-0070,MCG -05-52-027,PGC 068053;;Misidentified in CSRG (with incorrect Dec) as NGC 7202 (a star 3.4' north).; +NGC7204;GPair;22:06:54.20;-31:03:05.0;PsA;1.60;;;;;;;;;;;;;;;;;ESO-LV 467-008;;;Diameter of the group inferred by the author. +NGC7204A;G;22:06:54.00;-31:03:02.2;PsA;0.93;0.44;78;14.54;;;;;22.97;SBab;;;;;7204N;;;ESO-LV 467-0080,MCG -05-52-028,PGC 068054;;; +NGC7204B;G;22:06:55.26;-31:03:11.1;PsA;1.07;0.28;88;14.16;;11.97;11.25;10.86;23.08;S0-a;;;;;7204S;;;2MASX J22065525-3103113,ESO-LV 467-0082,IRAS 22040-3117,MCG -05-52-029,PGC 068061;;;B-Mag taken from LEDA +NGC7205;G;22:08:34.29;-57:26:33.3;Tuc;3.70;1.71;63;11.77;;8.83;8.21;7.92;22.55;Sbc;;;;;;;;2MASX J22083427-5726331,ESO 146-009,ESO-LV 146-0090,IRAS 22052-5741,PGC 068128;;; +NGC7205A;G;22:07:32.01;-57:27:50.5;Tuc;1.15;0.84;72;14.56;;12.30;11.76;11.52;23.23;SABc;;;;;;;;2MASX J22073201-5727505,ESO 146-007,ESO-LV 146-0070,IRAS 22041-5742,PGC 068083;;; +NGC7206;G;22:05:40.89;+16:47:06.9;Peg;1.19;0.92;142;14.80;;10.85;10.24;9.88;23.73;S0;;;;;;;;2MASX J22054089+1647067,MCG +03-56-007,PGC 068014,UGC 11904;;; +NGC7207;G;22:05:45.68;+16:46:03.9;Peg;0.66;0.26;102;15.60;;12.00;11.28;10.99;;S0;;;;;;;;2MASX J22054569+1646037,PGC 068017;;; +NGC7208;G;22:08:24.42;-29:03:04.2;PsA;0.91;0.60;136;13.82;13.36;11.62;10.93;10.79;22.48;S0;;;;;;;;2MASX J22082441-2903043,ESO 467-010,ESO-LV 467-0100,IRAS 22055-2917,MCG -05-52-032,PGC 068120;;; +NGC7209;OCl;22:05:07.84;+46:29:00.7;Lac;6.00;;;8.24;7.70;;;;;;;;;;;;;MWSC 3585;;; +NGC7210;Other;22:06:22.44;+27:06:33.0;Peg;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7211;G;22:06:21.87;-08:05:23.9;Aqr;0.77;0.63;74;14.86;;11.92;11.12;10.84;23.28;S0;;;;;;;;2MASX J22062187-0805242,PGC 068033,SDSS J220621.87-080523.8,SDSS J220621.87-080523.9;;; +NGC7212;GTrpl;22:07:01.30;+10:13:52.0;Peg;1.35;0.46;32;15.10;;11.32;10.55;10.21;23.61;Sb;;;;;;;;2MASXJ22070199+1014004,IRAS 22045+0959,MCG +02-56-011,PGC 068065;;; +NGC7213;G;22:09:16.31;-47:09:59.8;Gru;4.84;3.89;121;10.97;12.08;7.97;7.35;7.04;23.05;Sa;;;;;;;;2MASX J22091625-4709599,ESO 288-043,ESO-LV 288-0430,IRAS 22061-4724,PGC 068165;;; +NGC7214;G;22:09:07.68;-27:48:34.1;PsA;1.94;1.35;45;12.48;14.10;10.28;9.57;9.33;23.10;Sbc;;;;;;;;2MASX J22090769-2748340,ESO 467-012,ESO-LV 467-0120,IRAS 22062-2803,MCG -05-52-034,PGC 068152;;; +NGC7215;G;22:08:34.48;+00:30:42.1;Aqr;0.91;0.37;90;14.90;;12.16;11.41;11.22;23.54;S0;;;;;;;;2MASX J22083448+0030421,IRAS 22059+0015,PGC 068127,SDSS J220834.47+003042.1;;; +NGC7216;G;22:12:35.84;-68:39:42.7;Ind;1.61;1.10;127;13.41;;10.34;9.58;9.40;23.41;E;;;;;;;;2MASX J22123580-6839427,ESO 076-003,ESO-LV 76-0030,PGC 068291;;; +NGC7217;G;22:07:52.39;+31:21:33.6;Peg;4.52;3.84;90;12.94;11.92;7.78;7.08;6.83;22.93;Sab;;;;;;;;2MASX J22075236+3121333,IRAS 22056+3106,MCG +05-52-001,PGC 068096,UGC 11914;;; +NGC7218;G;22:10:11.71;-16:39:39.6;Aqr;2.55;1.07;35;12.40;;10.17;9.40;9.25;22.45;Sc;;;;;;;;2MASX J22101171-1639395,IRAS 22074-1654,MCG -03-56-008,PGC 068199;;; +NGC7219;G;22:13:09.02;-64:50:56.3;Tuc;1.83;1.10;38;13.33;13.13;10.65;9.89;9.77;23.19;SABa;;;;;;;;2MASX J22130903-6450562,ESO 108-019,ESO-LV 108-0190,IRAS 22094-6505,PGC 068312;;; +NGC7220;G;22:11:31.00;-22:57:10.3;Aqr;0.90;0.72;7;14.57;;11.73;11.17;10.88;22.92;S0;;;;;;;;2MASX J22113100-2257102,ESO 532-028,ESO-LV 532-0280,MCG -04-52-020,PGC 068241;;; +NGC7221;G;22:11:15.25;-30:33:47.4;PsA;2.29;1.46;13;13.06;12.13;10.15;9.32;9.19;23.02;Sbc;;;;;;;;2MASX J22111524-3033472,ESO 467-018,ESO-LV 467-0180,IRAS 22083-3048,MCG -05-52-043,PGC 068235;;; +NGC7222;G;22:10:51.76;+02:06:20.9;Aqr;1.07;1.06;65;15.10;;11.53;10.84;10.44;24.32;SBab;;;;;;;;2MASX J22105172+0206205,MCG +00-56-012,PGC 068224,SDSS J221051.74+020620.9,UGC 11934;;; +NGC7223;G;22:10:09.16;+41:01:02.2;Lac;1.41;1.13;126;13.50;;10.64;10.03;9.70;22.89;SBc;;;;;;;;2MASX J22100914+4101021,IRAS 22081+4046,MCG +07-45-018,PGC 068197,UGC 11931;;; +NGC7224;G;22:11:35.38;+25:51:52.2;Peg;1.51;0.91;108;14.70;;10.78;10.07;9.70;24.67;E;;;;;;;;2MASX J22113537+2551517,MCG +04-52-004,PGC 068242,UGC 11940;;; +NGC7225;G;22:13:08.07;-26:08:54.0;PsA;1.96;1.02;140;13.20;;;;;23.49;S0-a;;;;;;;;ESO 532-033,ESO-LV 532-0330,IRAS 22103-2623,MCG -04-52-023,PGC 068311;;; +NGC7226;OCl;22:10:26.89;+55:23:54.9;Cep;3.00;;;10.11;9.60;;;;;;;;;;;;;MWSC 3591;;; +NGC7227;G;22:11:31.33;+38:43:16.9;Lac;1.24;0.59;9;15.00;;11.18;10.50;10.20;24.06;S0;;;;;;;;2MASX J22113134+3843168,MCG +06-48-015,PGC 068243,UGC 11942;;; +NGC7228;G;22:11:48.60;+38:41:57.0;Lac;1.38;0.84;145;15.00;;10.81;10.09;9.78;24.06;SBa;;;;;;;;2MASX J22114860+3841569,MCG +06-48-016,PGC 068254,UGC 11945;;; +NGC7229;G;22:14:03.22;-29:22:57.9;PsA;1.46;1.25;116;13.31;;11.24;10.68;10.41;22.71;Sc;;;;;;;;2MASX J22140322-2922577,ESO 467-024,ESO-LV 467-0240,IRAS 22112-2937,MCG -05-52-051,PGC 068344;;; +NGC7230;G;22:14:13.19;-17:04:26.6;Aqr;1.00;0.91;10;14.00;;11.36;10.70;10.42;23.11;SBbc;;;;;;;;2MASX J22141319-1704265,IRAS 22114-1719,MCG -03-56-012,PGC 068350;;; +NGC7231;G;22:12:30.12;+45:19:42.5;Lac;1.69;0.60;87;14.00;;11.02;10.33;9.98;23.32;SBa;;;;;;;;2MASX J22123011+4519424,IRAS 22104+4504,PGC 068285,UGC 11951;;; +NGC7232;G;22:15:38.00;-45:51:00.3;Gru;2.86;1.04;100;12.58;11.79;9.45;8.74;8.55;23.56;S0-a;;;;;;;;2MASX J22153798-4551000,ESO 289-007,ESO-LV 289-0070,PGC 068431;;Confused HIPASS source; +NGC7232A;G;22:13:41.44;-45:53:37.4;Gru;2.17;0.31;110;14.02;;11.26;10.57;10.33;23.36;SBab;;;;;;;;2MASX J22134144-4553374,ESO 289-003,ESO-LV 289-0030,IRAS 22105-4608,PGC 068329;;; +NGC7232B;G;22:15:52.45;-45:46:50.3;Gru;1.68;1.48;1;13.47;;;;;23.65;SBm;;;;;;;;ESO 289-009,ESO-LV 289-0090,PGC 068443;;Confused HIPASS source; +NGC7233;G;22:15:48.98;-45:50:47.2;Gru;1.74;1.55;75;12.90;12.82;10.23;9.67;9.64;23.06;S0-a;;;;;;;;2MASX J22154899-4550470,ESO 289-008,ESO-LV 289-0080,IRAS 22127-4605,PGC 068441;;; +NGC7234;OCl;22:12:25.02;+57:16:16.8;Cep;2.40;;;8.58;7.70;;;;;;;;;;7235;;;MWSC 3595;;; +NGC7235;Dup;22:12:25.02;+57:16:16.8;Cep;;;;;;;;;;;;;;;7234;;;;;; +NGC7236;G;22:14:44.99;+13:50:47.5;Peg;1.38;0.81;156;14.30;14.30;10.92;10.24;9.87;24.00;E-S0;;;;;;;;2MASX J22144500+1350476,MCG +02-56-023,PGC 068384,SDSS J221444.98+135047.4,SDSS J221444.99+135047.4,UGC 11958 NED01;;Component 'a)' in UGC notes.; +NGC7237;G;22:14:46.88;+13:50:27.1;Peg;1.98;0.86;143;15.00;;;;;24.70;E-S0;;;;;;;;MCG +02-56-024,PGC 068383,SDSS J221446.88+135027.1,UGC 11958 NED02;;Component 'b)' in UGC notes.; +NGC7238;Other;22:15:20.51;+22:31:09.2;Peg;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7239;G;22:15:01.40;-05:03:12.0;Aqr;0.97;0.66;82;;;11.88;11.22;10.95;24.17;E-S0;;;;;;;;2MASX J22150139-0503122,PGC 068388;;; +NGC7240;G;22:15:22.56;+37:16:50.4;Lac;0.60;0.60;125;15.00;;11.39;10.72;10.27;22.87;E-S0;;;;;;;;2MASX J22152256+3716504,MCG +06-48-024,PGC 068415;;; +NGC7241;G;22:15:49.87;+19:13:56.5;Peg;2.75;0.72;26;13.80;;10.19;9.36;8.97;23.40;SBbc;;;;;;;;2MASX J22154987+1913564,MCG +03-56-020,PGC 068442,UGC 11968;;; +NGC7242;GPair;22:15:40.50;+37:18:02.0;Lac;1.40;;;;;;;;;;;;;;;;;MCG +06-48-025,UGC 11969;;;Diameter of the group inferred by the author. +NGC7242 NED01;G;22:15:39.49;+37:17:55.4;Lac;1.23;0.31;26;14.60;;9.38;8.66;8.33;23.21;E;;;;;;;;2MASXJ22153950+3717554,MCG +06-48-025 NED01,PGC 068434,UGC 11969 NED01;;; +NGC7242 NED02;G;22:15:41.57;+37:18:10.0;Lac;0.29;0.22;72;17.21;;;;;23.91;;;;;;;5195;;MCG +06-48-025 NED02,PGC 068435,UGC 11969 NED02;;;B-Mag taken from LEDA +NGC7243;OCl;22:15:08.58;+49:53:51.0;Lac;15.00;;;6.54;6.40;;;;;;;;;;;;;C 016,MWSC 3602;;; +NGC7244;G;22:16:26.83;+16:28:17.2;Peg;0.91;0.46;0;15.00;;12.08;11.44;11.13;22.94;E?;;;;;;;;2MASX J22162682+1628172,MCG +03-56-021,PGC 068468,SDSS J221626.85+162817.0;;; +NGC7245;OCl;22:15:11.51;+54:20:33.2;Lac;3.90;;;9.81;9.20;;;;;;;;;;;;;MWSC 3603;;; +NGC7246;G;22:17:42.68;-15:34:16.6;Aqr;2.26;0.86;174;13.40;;11.05;10.42;10.09;23.70;Sa;;;;;;5198;;2MASX J22174266-1534166,IRAS 22150-1549,MCG -03-56-014,PGC 068512;;; +NGC7247;G;22:17:41.25;-23:43:51.7;Aqr;1.28;0.67;6;13.45;;10.59;9.89;9.59;22.49;SBb;;;;;;;;2MASX J22174125-2343517,ESO 533-008,ESO-LV 533-0080,IRAS 22149-2358,MCG -04-52-032,PGC 068511;;; +NGC7248;G;22:16:53.94;+40:30:08.4;Lac;1.72;0.78;133;13.50;12.39;10.14;9.42;9.12;23.46;E-S0;;;;;;;;2MASX J22165396+4030083,MCG +07-45-022,PGC 068485,TYC 3203-308-1,UGC 11972;;; +NGC7249;G;22:20:31.00;-55:07:29.5;Gru;0.97;0.69;132;14.40;;11.77;11.06;10.81;23.06;S0;;;;;;;;2MASX J22203102-5507294,ESO 190-001,ESO-LV 190-0010,PGC 068606;;; +NGC7250;G;22:18:17.80;+40:33:44.6;Lac;2.12;0.94;160;13.22;12.58;11.20;10.58;10.25;22.87;Scd;;;;;;;;2MASX J22181777+4033446,IRAS 22161+4018,MCG +07-45-024,PGC 068535,UGC 11980;;; +NGC7251;G;22:20:27.14;-15:46:24.8;Aqr;1.67;1.48;10;13.47;;10.86;10.16;9.88;23.29;Sa;;;;;;;;2MASX J22202715-1546246,IRAS 22177-1601,MCG -03-57-002,PGC 068604;;; +NGC7252;G;22:20:44.75;-24:40:41.8;Aqr;1.85;1.71;95;12.46;12.06;10.26;9.59;9.31;22.88;S0;;;;;;;;2MASX J22204475-2440420,ESO 533-015,ESO-LV 533-0150,IRAS 22179-2455,MCG -04-52-036,PGC 068612;;; +NGC7253;GPair;22:19:28.90;+29:23:30.0;Peg;2.60;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC7253A;G;22:19:27.71;+29:23:44.9;Peg;1.56;0.41;124;14.40;;10.95;10.12;9.86;22.56;SABc;;;;;;;;2MASX J22192770+2923448,IRAS 22171+2908,MCG +05-52-010,PGC 068572,UGC 11984;;; +NGC7253B;G;22:19:30.10;+29:23:16.0;Peg;1.28;0.44;68;14.40;;;;;22.71;Sc;;;;;;;;MCG +05-52-011,PGC 068573,SDSS J221930.27+292316.9,UGC 11985;;; +NGC7254;G;22:22:36.23;-21:44:14.0;Aqr;1.30;0.64;114;13.91;;11.85;11.26;11.01;22.72;SBb;;;;;7256;;;2MASX J22223624-2144140,ESO 602-013,ESO-LV 602-0130,IRAS 22198-2159,MCG -04-52-042,PGC 068686;;; +NGC7255;G;22:23:08.00;-15:32:29.1;Aqr;1.47;0.31;116;15.00;;11.83;11.13;10.83;24.10;Sa;;;;;;;;2MASX J22230800-1532290,IRAS 22204-1547,MCG -03-57-006,PGC 068721;;; +NGC7256;Dup;22:22:36.23;-21:44:14.0;Aqr;;;;;;;;;;;;;;;7254;;;;;; +NGC7257;G;22:22:36.44;-04:07:14.7;Aqr;1.81;1.23;5;13.71;;10.94;10.30;10.00;23.29;SABb;;;;;7260;;;2MASX J22223645-0407146,MCG -01-57-003,PGC 068691,SDSS J222236.43-040714.6;;; +NGC7258;G;22:22:58.07;-28:20:42.5;PsA;1.54;0.65;142;13.94;;11.38;10.72;10.44;23.03;Sb;;;;;;;;2MASX J22225806-2820423,ESO 467-049,ESO-LV 467-0490,IRAS 22201-2836,MCG -05-52-068,PGC 068710;;; +NGC7259;G;22:23:05.52;-28:57:17.4;PsA;1.25;0.97;57;13.91;;11.83;11.20;10.76;22.78;Sb;;;;;;;;2MASX J22230550-2857173,ESO 467-050,ESO-LV 467-0500,MCG -05-52-069,PGC 068718;;This pair is made up of ESO 467- G 050 + ESO 467- G 051.; +NGC7260;Dup;22:22:36.44;-04:07:14.7;Aqr;;;;;;;;;;;;;;;7257;;;;;; +NGC7261;OCl;22:20:06.39;+58:03:06.6;Cep;6.90;;;9.20;8.40;;;;;;;;;;;;;MWSC 3617;;; +NGC7262;G;22:23:28.54;-32:21:51.3;PsA;0.86;0.78;140;14.83;;11.96;11.30;10.84;23.24;S0;;;;;;;;2MASX J22232853-3221512,ESO 405-017,ESO-LV 405-0170,PGC 068737;;; +NGC7263;G;22:21:45.25;+36:21:00.0;Lac;0.94;0.76;55;15.70;;10.93;10.27;10.03;24.17;S0-a;;;;;;;;2MASX J22214524+3620599,MCG +06-49-004,PGC 068642;;; +NGC7264;G;22:22:13.78;+36:23:13.2;Lac;1.99;0.30;56;14.70;;11.04;10.36;9.84;23.61;Sb;;;;;;;;2MASX J22221380+3623131,IRAS 22200+3608,MCG +06-49-005,PGC 068658,UGC 12001;;; +NGC7265;G;22:22:27.44;+36:12:34.6;Lac;2.48;1.79;166;13.70;;9.72;8.95;8.69;23.97;E-S0;;;;;;;;2MASX J22222747+3612354,MCG +06-49-006,PGC 068668,UGC 12004;;; +NGC7266;G;22:23:58.96;-04:04:24.3;Aqr;0.72;0.58;90;14.50;;11.39;10.67;10.39;22.30;Sa;;;;;;;;2MASX J22235895-0404243,IRAS 22213-0419,MCG -01-57-006,PGC 068758;;; +NGC7267;G;22:24:21.81;-33:41:38.7;PsA;1.73;1.50;121;12.97;;10.38;9.70;9.43;22.76;SBa;;;;;;;;2MASX J22242181-3341386,ESO 405-018,ESO-LV 405-0180,IRAS 22214-3356,MCG -06-49-003,PGC 068780;;Position in 1997AJ....113.1548C is incorrect.; +NGC7268;GPair;22:25:41.40;-31:12:02.0;PsA;1.40;;;;;;;;;;;;;;;;;ESO-LV 467-057;;;Diameter of the group inferred by the author. +NGC7268 NED01;G;22:25:40.72;-31:12:02.7;PsA;1.29;0.72;78;14.25;;10.93;10.28;9.97;23.71;S0;;;;;;;;2MASX J22254072-3112024,ESO-LV 467-0570,MCG -05-53-001,PGC 068847;;Called NGC 7268A in SGC.; +NGC7268 NED02;G;22:25:42.16;-31:12:00.0;PsA;1.00;0.44;73;15.44;;;;;24.19;E;;;;;;;;MCG -05-53-002,ESO-LV 467-0571,PGC 068839;;Called NGC 7268B in SGC.; +NGC7269;G;22:25:46.63;-13:09:59.0;Aqr;1.02;0.74;142;14.00;;11.53;10.67;10.53;23.09;SBb;;;;;;;;2MASX J22254662-1309590,IRAS 22231-1325,MCG -02-57-005,PGC 068841;;; +NGC7270;G;22:23:47.53;+32:24:10.9;Peg;0.93;0.55;88;15.00;;11.04;10.41;10.17;23.20;Sab;;;;;;;;2MASX J22234751+3224107,MCG +05-52-015,PGC 068748,UGC 12019;;; +NGC7271;G;22:23:57.59;+32:22:00.7;Peg;0.61;0.29;118;15.70;;12.54;11.89;11.66;23.68;;;;;;;;;2MASX J22235753+3222007,MCG +05-52-016,PGC 068753;;; +NGC7272;G;22:24:31.71;+16:35:17.4;Peg;1.09;0.97;52;15.00;;11.41;10.75;10.26;23.99;SBa;;;;;;;;2MASX J22243171+1635170,MCG +03-57-003,PGC 068786,UGC 12028;;; +NGC7273;G;22:24:09.23;+36:11:59.4;Lac;0.85;0.54;10;14.80;;10.85;10.11;9.81;23.04;S0;;;;;;;;2MASX J22240925+3611590,MCG +06-49-012,PGC 068768;;; +NGC7274;G;22:24:11.11;+36:07:33.1;Lac;1.83;1.52;60;14.20;;10.21;9.48;9.24;24.27;E;;;;;;;;2MASX J22241107+3607330,MCG +06-49-013,PGC 068770,UGC 12026;;; +NGC7275;G;22:24:17.23;+32:26:46.5;Peg;1.16;0.26;36;15.00;;11.77;11.12;10.79;23.49;Sa;;;;;;;;2MASX J22241721+3226463,MCG +05-52-019,PGC 068774,TYC 2738-932-1,UGC 12025;;; +NGC7276;G;22:24:14.37;+36:05:15.2;Lac;1.00;0.85;156;15.00;;11.26;10.58;10.25;23.78;E;;;;;;;;2MASX J22241437+3605150,MCG +06-49-014,PGC 068773;;; +NGC7277;G;22:26:10.94;-31:08:42.9;PsA;1.28;0.54;125;14.14;;11.64;10.98;10.70;22.85;Sb;;;;;;;;2MASX J22261094-3108429,ESO 467-059,ESO-LV 467-0590,IRAS 22233-3123,MCG -05-53-004,PGC 068861;;; +NGC7278;G;22:28:22.41;-60:10:11.4;Tuc;0.76;0.38;1;15.19;;12.73;11.93;11.51;22.88;SBc;;;;;;;;2MASX J22282239-6010112,ESO 146-027,ESO-LV 146-0270,PGC 068940;;; +NGC7279;G;22:27:12.66;-35:08:25.6;PsA;1.24;0.88;67;14.21;13.78;12.39;11.64;11.49;23.27;Sc;;;;;;;;2MASX J22271264-3508256,ESO 405-021,ESO-LV 405-0210,IRAS 22243-3523,MCG -06-49-005,PGC 068896;;; +NGC7280;G;22:26:27.58;+16:08:53.6;Peg;2.01;1.29;76;13.60;;9.99;9.38;9.06;23.31;S0-a;;;;;;;;2MASX J22262757+1608537,MCG +03-57-005,PGC 068870,UGC 12035;;; +NGC7281;OCl;22:25:20.98;+57:49:16.1;Cep;4.80;;;;;;;;;;;;;;;;;MWSC 3624;;; +NGC7282;G;22:25:53.86;+40:18:53.5;Lac;0.79;0.20;40;15.30;;11.06;10.27;10.20;22.88;Sb;;;;;;;;2MASX J22255389+4018533,IRAS 22236+4003,MCG +07-46-007,PGC 068843,UGC 12034;;; +NGC7283;G;22:28:32.74;+17:28:13.2;Peg;0.87;0.38;15;15.20;;12.66;11.99;11.65;23.78;Sab;;;;;;;;2MASX J22283275+1728128,MCG +03-57-012,PGC 068946;;"NGC identification is very uncertain; N7283 could be a double star."; +NGC7284;G;22:28:35.93;-24:50:38.9;Aqr;1.82;1.44;64;12.96;;9.73;9.00;8.83;23.35;S0;;;;;;;;2MASX J22283592-2450385,ESO 533-031,ESO-LV 533-0310,MCG -04-53-004,PGC 068950;;; +NGC7285;G;22:28:38.00;-24:50:26.8;Aqr;2.68;1.54;65;12.82;;;;;23.44;SBa;;;;;;;;ESO 533-032,ESO-LV 533-0320,MCG -04-53-005,PGC 068953;;; +NGC7286;G;22:27:50.52;+29:05:45.5;Peg;1.81;0.56;97;13.40;;11.63;11.05;10.81;23.35;S0-a;;;;;;;;2MASX J22275052+2905455,MCG +05-53-002,PGC 068922,UGC 12043;;; +NGC7287;GPair;22:28:48.70;-22:12:09.0;Aqr;0.70;;;16.78;14.75;;;;;;;;;;;;;ESO 602-020;;;Diameter of the group inferred by the author. +NGC7287A;G;22:28:48.49;-22:12:12.1;Aqr;0.62;0.34;170;15.85;;12.86;12.25;11.81;23.17;S0;;;;;;;;2MASXJ22284847-2212119,ESO-LV 602-0200,PGC 068960;;Identification as NGC 7287 is doubtful.; +NGC7287B;G;22:28:48.69;-22:12:06.4;Aqr;0.62;0.32;68;15.48;;;;;;;;;;;;;;ESO-LV 602-0201,PGC 068959;;Identification as NGC 7287 is doubtful.; +NGC7288;G;22:28:14.97;-02:53:04.4;Aqr;1.92;1.01;83;14.50;;11.00;10.22;10.01;23.81;Sa;;;;;;;;2MASX J22281498-0253043,IRAS 22256-0308,MCG -01-57-013,PGC 068933;;; +NGC7289;G;22:29:20.25;-35:28:19.1;PsA;1.63;1.21;141;14.20;;11.13;10.45;10.21;24.02;S0;;;;;;;;2MASX J22292025-3528193,ESO 405-023,ESO-LV 405-0230,MCG -06-49-006,PGC 068980;;; +NGC7290;G;22:28:26.43;+17:08:50.8;Peg;1.49;0.72;158;13.80;;11.55;10.92;10.74;22.86;Sbc;;;;;;;;2MASX J22282642+1708508,IRAS 22260+1653,MCG +03-57-009,PGC 068942,SDSS J222826.45+170851.0,UGC 12045;;; +NGC7291;G;22:28:29.50;+16:46:59.3;Peg;1.62;1.05;59;14.80;;10.72;10.01;9.71;24.48;S0;;;;;;;;2MASX J22282953+1646598,MCG +03-57-008,PGC 068944,UGC 12047;;; +NGC7292;G;22:28:25.91;+30:17:32.3;Peg;1.82;1.22;113;13.10;;;;;22.74;I;;;;;;;;IRAS 22261+3002,MCG +05-53-003,PGC 068941,SDSS J222826.29+301729.9,UGC 12048;;; +NGC7293;PN;22:29:38.57;-20:50:14.4;Aqr;16.33;;;7.50;7.30;14.33;14.49;14.55;;;11.81;13.10;13.50;;;;USNO 271;C 063,ESO 602-022,PN G036.1-57.1;Helix Nebula;; +NGC7294;G;22:32:08.06;-25:23:52.0;PsA;2.10;1.15;42;13.51;;10.73;10.07;9.77;23.89;S0;;;;;;5225;;2MASX J22320805-2523521,ESO 533-044,ESO-LV 533-0440,MCG -04-53-009,PGC 069088;;; +NGC7295;OCl;22:28:02.84;+52:17:20.7;Lac;2.70;;;;9.70;;;;;;;;;;7296;;;MWSC 3625;;; +NGC7296;Dup;22:28:02.84;+52:17:20.7;Lac;;;;;;;;;;;;;;;7295;;;;;; +NGC7297;G;22:31:10.28;-37:49:35.2;Gru;0.84;0.49;121;14.47;;11.89;11.18;10.85;22.63;SBbc;;;;;;;;2MASX J22311027-3749352,ESO 345-018,ESO-LV 345-0180,IRAS 22282-3804,MCG -06-49-007,PGC 069046;;; +NGC7298;G;22:30:50.65;-14:11:17.7;Aqr;1.28;1.00;4;14.10;;11.92;11.26;11.10;23.41;Sc;;;;;;;;2MASX J22305063-1411177,MCG -02-57-010,PGC 069033,TYC 5817-551-1;;; +NGC7299;G;22:31:33.11;-37:48:34.4;Gru;0.67;0.65;175;14.79;;12.49;11.91;11.60;22.65;Sc;;;;;;;;2MASX J22313310-3748342,ESO 345-019,ESO-LV 345-0190,MCG -06-49-008,PGC 069060;;; +NGC7300;G;22:30:59.91;-14:00:12.7;Aqr;2.06;0.80;162;13.00;;10.51;9.82;9.56;23.20;SABb;;;;;;5204;;2MASX J22305991-1400127,MCG -02-57-011,PGC 069040;;The IC identification is not certain.; +NGC7301;G;22:30:34.72;-17:34:25.6;Aqr;0.85;0.27;180;14.13;;11.69;11.04;10.68;22.09;SBab;;;;;;;;2MASX J22303473-1734254,ESO 602-023,ESO-LV 602-0230,IRAS 22278-1749,MCG -03-57-015,PGC 069021;;; +NGC7302;G;22:32:23.80;-14:07:13.9;Aqr;1.73;1.09;95;13.00;;9.99;9.31;9.04;23.07;E-S0;;;;;;5228;;2MASX J22322379-1407137,MCG -02-57-013,PGC 069094;;; +NGC7303;G;22:31:32.83;+30:57:21.5;Peg;1.54;1.19;117;16.00;;11.40;10.64;10.41;23.19;Sbc;;;;;;;;2MASX J22313281+3057214,IRAS 22292+3042,MCG +05-53-004,PGC 069061,UGC 12065;;; +NGC7304;Other;22:31:44.50;+30:58:46.8;Peg;;;;;;;;;;;;;;;;;;;;Three Galactic stars. NGC identification is very uncertain.; +NGC7305;G;22:32:13.94;+11:42:43.7;Peg;0.86;0.83;90;15.10;;11.31;10.63;10.31;;E;;;;;;;;2MASX J22321393+1142445,MCG +02-57-003,PGC 069091;;;Diameters and position angle taken from Simbad. +NGC7306;G;22:33:16.47;-27:14:47.8;PsA;1.81;0.79;60;13.51;;10.94;10.24;9.99;22.94;SBb;;;;;;;;2MASX J22331645-2714478,ESO 468-011,ESO-LV 468-0110,IRAS 22304-2730,MCG -05-53-014,PGC 069132;;; +NGC7307;G;22:33:52.54;-40:55:57.8;Gru;3.83;0.87;9;12.92;;11.18;10.77;10.42;23.32;Sc;;;;;;;;2MASX J22335253-4055578,ESO 345-026,ESO-LV 345-0260,IRAS 22309-4111,MCG -07-46-003,PGC 069161;;Confused HIPASS source; +NGC7308;G;22:34:32.14;-12:56:01.9;Aqr;1.27;0.92;152;14.00;;10.95;10.23;9.96;23.68;E-S0;;;;;;1448;;2MASX J22343213-1256015,MCG -02-57-017,PGC 069194;;; +NGC7309;G;22:34:20.59;-10:21:25.2;Aqr;2.08;1.86;120;12.90;;10.69;10.04;9.68;23.28;SABc;;;;;;;;2MASX J22342056-1021253,IRAS 22317-1036,MCG -02-57-016,PGC 069183;;; +NGC7310;G;22:34:36.91;-22:29:06.3;Aqr;0.95;0.73;37;14.68;14.20;12.08;11.56;11.37;23.09;SBbc;;;;;;;;2MASX J22343690-2229062,ESO 533-049,ESO-LV 533-0490,IRAS 22318-2244,MCG -04-53-015,PGC 069202;;; +NGC7311;G;22:34:06.71;+05:34:11.6;Peg;1.47;0.68;11;13.40;;9.96;9.20;8.94;22.61;Sab;;;;;;;;2MASX J22340676+0534131,MCG +01-57-009,PGC 069172,SDSS J223406.79+053413.1,UGC 12080;;; +NGC7312;G;22:34:34.79;+05:49:02.5;Peg;0.93;0.63;79;14.50;;11.49;10.77;10.35;22.92;Sb;;;;;;;;2MASX J22343478+0549025,MCG +01-57-010,PGC 069198,UGC 12083;;; +NGC7313;G;22:35:32.56;-26:06:06.4;PsA;0.70;0.42;165;15.00;;13.01;12.38;12.20;22.74;SBb;;;;;;;;2MASX J22353257-2606063,ESO 533-052,ESO-LV 533-0520,PGC 069242;;; +NGC7314;G;22:35:46.19;-26:03:01.7;PsA;4.21;1.71;3;11.62;13.11;9.06;8.52;8.19;22.77;SABb;;;;;;;;2MASX J22354623-2603008,ESO 533-053,ESO-LV 533-0530,IRAS 22330-2618,MCG -04-53-018,PGC 069253;;Confused HIPASS source; +NGC7315;G;22:35:31.71;+34:48:12.2;Peg;1.58;1.58;20;13.80;;10.69;10.11;9.73;23.62;S0;;;;;;;;2MASX J22353169+3448128,MCG +06-49-037,PGC 069241,SDSS J223531.70+344812.4,UGC 12097;;; +NGC7316;G;22:35:56.34;+20:19:20.1;Peg;1.19;1.01;66;13.70;;11.54;10.92;10.46;22.60;SBbc;;;;;;;;2MASX J22355633+2019201,IRAS 22335+2003,MCG +03-57-020,PGC 069259,SDSS J223556.35+201920.0,UGC 12098;;; +NGC7317;G;22:35:51.88;+33:56:41.6;Peg;0.80;0.77;150;14.57;13.60;11.59;11.01;10.60;23.04;E;;;;;;;;2MASX J22355187+3356415,MCG +06-49-038,PGC 069256,UGC 12100 NOTES01;;; +NGC7318;GPair;22:35:57.60;+33:57:56.0;Peg;2.50;;;;;;;;;;;;;;;;;;;Part of the GGroup Stefan's Quintet.;Diameter of the group inferred by the author. +NGC7318A;G;22:35:56.75;+33:57:55.7;Peg;1.47;1.33;90;14.40;;;;;24.03;E;;;;;;;;2MASX J22355791+3357562,MCG +06-49-039,PGC 069260,UGC 12099;;Misidentified in UGC as 'MCG +06-49-040'.; +NGC7318B;G;22:35:58.41;+33:57:57.3;Peg;2.37;1.32;24;14.06;;;;;24.13;SBbc;;;;;;;;MCG +06-49-040,PGC 069263,UGC 12100;;MCG misprints name as 'NGC 7318a'.; +NGC7319;G;22:36:03.55;+33:58:32.6;Peg;1.67;1.04;112;14.57;13.53;11.09;10.29;10.06;23.51;Sbc;;;;;;;;2MASX J22360355+3358327,MCG +06-49-041,PGC 069269,SDSS J223603.57+335833.0,UGC 12102;;; +NGC7320;G;22:36:03.38;+33:56:53.2;Peg;2.55;1.40;132;13.23;12.63;11.25;10.70;10.52;23.47;Scd;;;;;;;;2MASX J22360337+3356531,MCG +06-49-042,PGC 069270,UGC 12101;;Position in 1990Obs...110...93A is for a superposed star.; +NGC7320C;G;22:36:20.37;+33:59:05.9;Peg;0.59;0.48;29;17.00;;13.53;12.76;12.52;24.23;S0-a;;;;;;;;2MASX J22362034+3359059,MCG +06-49-043,PGC 069279;;; +NGC7321;G;22:36:28.02;+21:37:18.5;Peg;1.41;0.97;18;15.40;;10.85;10.23;9.96;23.12;SBb;;;;;;;;2MASX J22362802+2137186,IRAS 22340+2121,MCG +03-57-021,PGC 069287,SDSS J223627.96+213715.6,UGC 12103;;HOLM 793B is a star.; +NGC7322;G;22:37:51.46;-37:13:52.3;Gru;1.04;0.62;115;14.51;;11.49;10.74;10.49;23.34;S0-a;;;;;7334;;;2MASX J22375146-3713525,ESO 405-033,ESO-LV 405-0330,MCG -06-49-010,PGC 069365;;; +NGC7323;G;22:36:53.69;+19:08:37.9;Peg;1.17;0.87;175;14.00;;11.37;10.80;10.51;22.90;Sb;;;;;;;;2MASX J22365362+1908379,IRAS 22344+1853,MCG +03-57-025,PGC 069311,UGC 12108;;; +NGC7324;G;22:37:00.92;+19:08:46.5;Peg;1.14;0.63;163;14.00;;11.61;11.03;10.73;23.61;S0;;;;;;;;2MASX J22370095+1908460,MCG +03-57-026,PGC 069321,UGC 12108 NOTES01;;; +NGC7325;**;22:36:48.52;+34:22:04.9;Peg;;;;14.70;;;;;;;;;;;;;;;;; +NGC7326;**;22:36:52.09;+34:25:23.2;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7327;G;22:36:34.04;+34:30:13.0;Peg;0.51;0.29;0;16.60;16.10;;;;;;;;;;;;;2MASX J22363409+3430136,PGC 069291;;"NGC identification is very uncertain; N7327 could be a star.";Diameters and position angle taken from Simbad. +NGC7328;G;22:37:29.28;+10:31:53.7;Peg;1.95;0.67;87;13.99;13.10;10.62;9.75;9.63;23.66;Sab;;;;;;;;2MASX J22372929+1031537,IRAS 22349+1016,MCG +02-57-007,PGC 069349,UGC 12118;;; +NGC7329;G;22:40:24.22;-66:28:44.3;Tuc;3.12;2.37;105;12.51;11.31;9.80;9.11;8.87;23.36;SBbc;;;;;;;;2MASX J22402419-6628445,ESO 109-012,ESO-LV 109-0120,PGC 069453;;The APMUKS position is northeast of the nucleus.; +NGC7330;G;22:36:56.18;+38:32:53.0;Lac;1.71;1.59;70;13.60;;10.18;9.48;9.19;23.59;E;;;;;;;;2MASX J22365619+3832527,MCG +06-49-046,PGC 069314,UGC 12111;;; +NGC7331;G;22:37:04.01;+34:24:55.9;Peg;9.27;3.76;170;10.35;9.48;7.06;6.29;6.03;23.08;Sbc;;;;;;;;2MASX J22370410+3424573,C 030,IRAS 22347+3409,MCG +06-49-045,PGC 069327,SDSS J223704.05+342456.8,UGC 12113;;"HOLM 795H is a double star; HOLM 795G,I are stars."; +NGC7332;G;22:37:24.54;+23:47:54.0;Peg;2.95;0.71;154;12.00;;8.92;8.25;8.01;22.96;S0;;;;;;;;2MASX J22372452+2347540,MCG +04-53-008,PGC 069342,UGC 12115;;; +NGC7333;*;22:37:11.64;+34:26:16.2;Peg;;;;15.70;15.10;13.87;13.45;13.42;;;;;;;;;;2MASS J22371161+3426142;;; +NGC7334;Dup;22:37:51.46;-37:13:52.3;Gru;;;;;;;;;;;;;;;7322;;;;;; +NGC7335;G;22:37:19.39;+34:26:51.9;Peg;1.26;0.54;150;14.44;13.35;10.16;8.66;9.24;23.64;S0-a;;;;;;;;2MASX J22371935+3426525,MCG +06-49-047,PGC 069338,UGC 12116;;; +NGC7336;G;22:37:21.94;+34:28:54.3;Peg;0.61;0.47;131;15.00;;11.43;10.48;10.54;23.14;SABa;;;;;;;;2MASX J22372186+3428545,MCG +06-49-049,PGC 069337;;; +NGC7337;G;22:37:26.62;+34:22:27.5;Peg;1.02;0.80;5;15.24;;11.40;10.65;10.39;24.28;SBab;;;;;;;;2MASX J22372663+3422275,MCG +06-49-050,PGC 069344,SDSS J223726.63+342227.4,UGC 12120;;; +NGC7338;**;22:37:31.32;+34:24:52.1;Peg;;;;;;;;;;;;;;;;;;;;NGC identification is not certain.;Main component is 2MASS J22373171+3424514. +NGC7339;G;22:37:47.24;+23:47:12.1;Peg;3.21;0.95;92;13.10;;9.69;8.90;8.56;23.46;SABb;;;;;;;;2MASX J22374688+2347120,MCG +04-53-009,PGC 069364,SDSS J223746.72+234710.6,UGC 12122;;; +NGC7340;G;22:37:44.22;+34:24:36.0;Peg;0.86;0.55;170;14.90;;11.13;10.31;10.13;23.16;E;;;;;;;;2MASX J22374423+3424362,MCG +06-49-052,PGC 069362;;; +NGC7341;G;22:39:05.54;-22:40:00.0;Aqr;2.39;0.95;93;13.30;;9.66;7.89;8.52;23.47;SABa;;;;;;;;2MASX J22390552-2240001,ESO 534-011,ESO-LV 534-0110,MCG -04-53-027,PGC 069412;;; +NGC7342;G;22:38:13.15;+35:29:55.9;Peg;1.31;1.25;125;15.30;;11.17;10.46;10.14;24.52;SBa;;;;;;;;2MASX J22381316+3529559,MCG +06-49-054,PGC 069374,SDSS J223813.11+352955.7,UGC 12126;;; +NGC7343;G;22:38:37.86;+34:04:17.2;Peg;0.91;0.73;169;14.40;13.54;11.46;10.80;10.47;22.72;Sb;;;;;;;;2MASX J22383786+3404169,IRAS 22363+3348,MCG +06-49-059,PGC 069391,SDSS J223837.86+340417.4,UGC 12129;;; +NGC7344;G;22:39:36.25;-04:09:32.3;Aqr;1.23;0.55;10;14.00;;11.37;10.64;10.38;23.30;SBab;;;;;;;;2MASX J22393626-0409322,MCG -01-57-020,PGC 069433;;; +NGC7345;G;22:38:44.86;+35:32:26.1;Peg;1.09;0.19;40;15.10;;11.34;10.62;10.42;23.30;Sa;;;;;;;;2MASX J22384486+3532259,MCG +06-49-064,PGC 069401,UGC 12130;;; +NGC7346;G;22:39:35.45;+11:05:00.0;Peg;0.38;0.28;52;15.60;;12.05;11.24;10.97;22.30;E?;;;;;;;;2MASX J22393541+1104595,PGC 069430;;; +NGC7347;G;22:39:56.17;+11:01:39.2;Peg;1.55;0.34;131;14.70;;11.63;10.96;10.72;23.07;Sbc;;;;;;;;2MASX J22395616+1101392,IRAS 22374+1045,MCG +02-57-009,PGC 069443,UGC 12136;;; +NGC7348;G;22:40:36.28;+11:54:22.4;Peg;1.01;0.58;12;14.53;;13.02;12.18;11.83;23.22;SABc;;;;;;;;2MASX J22403630+1154224,IRAS 22381+1138,MCG +02-57-010,PGC 069463,UGC 12142;;; +NGC7349;G;22:41:14.90;-21:47:54.6;Aqr;1.20;0.41;165;15.07;14.51;;;;23.75;SBb;;;;;;;;2MASX J22411491-2147550,ESO 603-004,ESO-LV 603-0040,MCG -04-53-029,PGC 069488;;; +NGC7350;**;22:40:48.56;+12:00:23.5;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7351;G;22:41:26.94;-04:26:41.0;Aqr;1.60;0.84;2;13.00;;10.74;10.13;9.94;23.32;S0;;;;;;;;2MASX J22412693-0426410,MCG -01-57-022,PGC 069489;;; +NGC7352;Other;22:39:43.70;+57:23:39.7;Cep;;;;;;;;;;;;;;;;;;;;"Called a cluster by John Herschel; no cluster at this position."; +NGC7353;G;22:42:12.51;+11:52:38.3;Peg;0.65;0.47;130;16.00;;13.13;12.41;12.53;24.21;Sc;;;;;;;;2MASX J22421253+1152385,PGC 085285;;; +NGC7354;PN;22:40:19.61;+61:17:05.4;Cep;0.38;;;12.90;12.20;10.71;10.23;9.26;;;;;16.20;;;;;IRAS 22384+6101,PN G107.8+02.3;;; +NGC7355;G;22:43:30.56;-36:51:54.6;Gru;1.04;0.44;44;15.07;;12.34;11.66;11.43;23.29;Sb;;;;;;;;2MASX J22433054-3651545,ESO 406-006,ESO-LV 406-0060,PGC 069587;;NGC declination is -1 degree in error.; +NGC7356;G;22:42:02.35;+30:42:31.7;Peg;1.26;0.58;75;15.00;;11.42;10.72;10.57;23.79;Sbc;;;;;;;;2MASX J22420238+3042316,MCG +05-53-010,PGC 069530,UGC 12159;;; +NGC7357;G;22:42:23.94;+30:10:16.9;Peg;0.58;0.37;123;15.10;;12.00;11.33;11.17;22.50;Sb;;;;;;;;2MASX J22422391+3010161,IRAS 22400+2954,MCG +05-53-011,PGC 069544,UGC 12162;;; +NGC7358;G;22:45:36.44;-65:07:18.6;Tuc;2.13;0.69;174;13.64;;10.32;9.64;9.51;24.01;S0;;;;;;;;2MASX J22453648-6507188,ESO 109-018,ESO-LV 109-0180,PGC 069664;;; +NGC7359;G;22:44:48.00;-23:41:17.1;Aqr;2.18;0.50;57;13.44;;10.42;9.73;9.50;23.77;S0;;;;;;;;2MASX J22444799-2341172,ESO 534-022,ESO-LV 534-0220,MCG -04-53-034,PGC 069638;;; +NGC7360;G;22:43:33.95;+04:09:04.2;Peg;0.81;0.42;153;14.50;;11.59;10.85;10.62;23.00;E;;;;;;;;2MASX J22433393+0409039,MCG +01-58-001,PGC 069591,UGC 12167;;; +NGC7361;G;22:42:17.91;-30:03:27.6;PsA;3.14;0.85;8;12.99;12.50;11.29;10.61;10.40;23.08;Sc;;;;;;5237;;2MASX J22421841-3003190,ESO 468-023,ESO-LV 468-0230,IRAS 22395-3019,MCG -05-53-027,PGC 069539,UGCA 434;;The 2MASS position refers to a knot 10 arcsec northeast of the center.; +NGC7362;G;22:43:49.28;+08:42:19.6;Peg;1.30;0.89;175;14.90;;10.63;9.81;9.59;23.24;E;;;;;;;;2MASX J22434930+0842199,MCG +01-58-002,PGC 069602,UGC 12171;;; +NGC7363;G;22:43:19.91;+34:00:05.4;Peg;0.86;0.86;35;14.60;;;;;22.94;SABc;;;;;;;;2MASX J22431991+3400052,IRAS 22409+3344,MCG +06-49-078,PGC 069580;;; +NGC7364;G;22:44:24.37;-00:09:43.5;Aqr;1.65;1.12;66;13.80;;10.52;9.83;9.48;23.19;S0-a;;;;;;;;2MASX J22442436-0009432,MCG +00-58-001,PGC 069630,SDSS J224424.36-000943.5,SDSS J224424.38-000943.5,UGC 12174;;; +NGC7365;G;22:45:10.04;-19:57:07.3;Aqr;1.79;1.08;23;13.48;;10.75;10.13;9.84;23.68;E-S0;;;;;;;;2MASX J22451001-1957072,ESO 603-010,ESO-LV 603-0100,MCG -03-58-001,PGC 069651;;; +NGC7366;G;22:44:26.63;+10:46:52.9;Peg;0.34;0.34;150;15.50;;12.37;11.33;11.31;22.64;;;;;;;;;2MASX J22442662+1046528,MCG +02-58-004,PGC 069629;;; +NGC7367;G;22:44:34.45;+03:38:47.0;Peg;1.43;0.37;123;14.90;;10.66;9.88;9.60;23.57;Sab;;;;;;;;2MASX J22443443+0338470,MCG +00-58-002,PGC 069633,UGC 12175;;; +NGC7368;G;22:45:31.68;-39:20:30.6;Gru;2.85;0.56;130;13.16;;10.23;9.51;9.13;23.12;SBb;;;;;;1459;;2MASX J22453169-3920307,ESO 345-049,ESO-LV 345-0490,IRAS 22426-3936,MCG -07-46-010,PGC 069661;;; +NGC7369;G;22:44:12.30;+34:21:04.4;Peg;0.86;0.73;27;14.80;;12.04;11.27;10.82;23.12;Sc;;;;;;;;2MASX J22441230+3421041,IRAS 22418+3405,MCG +06-49-080,PGC 069619;;; +NGC7370;G;22:45:37.23;+11:03:28.1;Peg;0.65;0.49;120;;;12.68;12.15;11.62;24.09;;;;;;;;;2MASX J22453724+1103279,PGC 069662;;; +NGC7371;G;22:46:03.74;-11:00:04.1;Aqr;2.09;1.92;160;12.50;;10.06;9.51;9.24;23.01;S0-a;;;;;;;;2MASX J22460372-1100038,MCG -02-58-001,PGC 069677;;HOLM 797B is a star.; +NGC7372;G;22:45:46.00;+11:07:51.0;Peg;1.01;0.73;67;14.60;;;;;23.19;Sbc;;;;;;;;IRAS 22432+1051,MCG +02-58-005,PGC 069670,SDSS J224545.94+110751.3;;; +NGC7373;G;22:46:19.41;+03:12:36.2;Peg;1.04;0.55;8;14.80;;11.06;10.34;10.07;23.56;S0;;;;;;;;2MASX J22461942+0312360,PGC 069688;;; +NGC7374;G;22:46:00.95;+10:51:13.0;Peg;0.87;0.71;60;14.90;;11.94;11.28;10.96;23.13;Sbc;;;;;;;;2MASX J22460094+1051130,IRAS 22435+1035,MCG +02-58-007,PGC 069676;;; +NGC7374B;G;22:45:59.19;+10:52:03.0;Peg;0.78;0.46;166;15.60;;12.26;11.64;11.32;23.94;E-S0;;;;;;1452;;2MASX J22455917+1052030,MCG +02-58-006,PGC 069675;;; +NGC7375;G;22:46:32.04;+21:05:01.1;Peg;0.92;0.67;57;14.90;;11.17;10.42;10.21;23.23;S0-a;;;;;;;;2MASX J22463204+2105015,MCG +03-58-003,PGC 069695;;; +NGC7376;G;22:47:17.38;+03:38:44.1;Peg;0.69;0.44;140;15.60;;12.98;12.13;11.77;23.50;S0-a;;;;;;;;2MASX J22471736+0338439,PGC 069715;;; +NGC7377;G;22:47:47.50;-22:18:43.6;Aqr;3.92;3.13;99;11.39;12.78;9.08;8.44;8.18;23.77;S0-a;;;;;;;;2MASX J22474750-2218434,ESO 534-026,ESO-LV 534-0260,MCG -04-53-038,PGC 069733;;; +NGC7378;G;22:47:47.70;-11:48:59.9;Aqr;1.52;0.85;180;13.00;;11.04;10.59;10.12;22.91;SBab;;;;;;;;2MASX J22474769-1148598,MCG -02-58-005,PGC 069734;;; +NGC7379;G;22:47:32.95;+40:14:19.7;Lac;1.25;0.92;93;14.40;;10.69;9.95;9.62;23.32;SBa;;;;;;;;2MASX J22473296+4014197,IRAS 22452+3958,MCG +07-46-018,PGC 069724,UGC 12187;;; +NGC7380;Cl+N;22:47:21.01;+58:07:56.7;Cep;25.00;20.00;;7.62;7.20;;;;;;;;;;;;;LBN 511,MWSC 3659;;; +NGC7381;G;22:50:08.15;-19:43:30.4;Aqr;0.68;0.47;108;14.97;;13.02;12.45;12.12;22.52;Sc;;;;;;;;2MASX J22500813-1943304,ESO 603-017,ESO-LV 603-0170,MCG -03-58-007a,PGC 069828;;; +NGC7382;G;22:50:23.92;-36:51:26.3;Gru;0.74;0.30;109;14.57;;11.52;10.71;10.38;22.45;Sa;;;;;;;;ESO 406-015,ESO-LV 406-0150,MCG -06-50-005,PGC 069840;;; +NGC7383;G;22:49:35.62;+11:33:23.0;Peg;0.86;0.73;166;15.10;;11.44;10.78;10.46;23.42;S0;;;;;;;;2MASX J22493566+1133228,MCG +02-58-014,PGC 069809;;; +NGC7384;*;22:49:42.55;+11:29:14.8;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7385;G;22:49:54.59;+11:36:30.8;Peg;1.93;1.19;83;14.40;;;;;23.44;E;;;;;;;;MCG +02-58-017,PGC 069824,SDSS J224954.58+113630.8,UGC 12207;;; +NGC7386;G;22:50:02.15;+11:41:54.1;Peg;2.04;1.30;144;14.60;;10.39;9.66;9.42;23.79;S0;;;;;;;;2MASX J22500213+1141555,MCG +02-58-018,PGC 069825,UGC 12209;;; +NGC7387;G;22:50:17.64;+11:38:12.2;Peg;1.00;0.63;45;15.30;;11.70;10.97;10.66;23.80;E;;;;;;;;2MASX J22501765+1138125,MCG +02-58-022,PGC 069834;;; +NGC7388;*;22:50:21.02;+11:42:39.4;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7389;G;22:50:16.05;+11:33:58.3;Peg;1.45;0.71;168;15.20;;11.51;10.83;10.49;24.10;SBa;;;;;;;;2MASX J22501609+1133585,MCG +02-58-019,PGC 069836;;; +NGC7390;G;22:50:19.62;+11:31:51.7;Peg;0.82;0.65;173;15.70;;12.21;11.39;11.13;23.81;;;;;;;;;2MASX J22501949+1131525,MCG +02-58-020,PGC 069837;;; +NGC7391;G;22:50:36.13;-01:32:41.4;Psc;1.49;1.29;96;13.70;;9.59;8.88;8.63;22.86;E;;;;;;;;2MASX J22503614-0132413,MCG +00-58-006,PGC 069847,UGC 12211;;; +NGC7392;G;22:51:48.74;-20:36:29.1;Aqr;2.24;1.19;120;12.61;11.85;9.62;8.94;8.64;22.59;SBbc;;;;;;;;2MASX J22514874-2036292,ESO 603-022,ESO-LV 603-0220,IRAS 22491-2052,MCG -04-53-040,PGC 069887;;; +NGC7393;G;22:51:38.09;-05:33:26.3;Aqr;2.04;0.60;92;13.40;;10.56;9.97;9.71;22.84;SBc;;;;;;;;2MASX J22513809-0533262,MCG -01-58-002,PGC 069874;;; +NGC7394;OCl;22:50:07.68;+52:10:48.4;Lac;;;;;;;;;;;;;;;;;;;;; +NGC7395;G;22:51:02.93;+37:05:16.1;Lac;1.15;1.04;110;15.30;;10.82;10.02;9.81;24.21;S0;;;;;;;;2MASX J22510290+3705163,MCG +06-50-006 NED01,PGC 069861,UGC 12216;;; +NGC7396;G;22:52:22.64;+01:05:32.6;Psc;1.77;1.03;98;13.75;;9.76;9.02;8.70;23.30;Sa;;;;;;;;2MASX J22522259+0105332,MCG +00-58-007,PGC 069889,SDSS J225222.60+010533.1,UGC 12220;;; +NGC7397;G;22:52:46.70;+01:07:58.0;Psc;0.71;0.47;162;15.30;;11.84;11.16;10.78;22.99;S0-a;;;;;;;;2MASX J22524672+0107579,MCG +00-58-008,PGC 069904,SDSS J225246.70+010758.0,SDSS J225246.71+010758.1;;; +NGC7398;G;22:52:49.27;+01:12:04.0;Psc;1.05;0.70;74;14.54;;11.53;10.83;10.51;23.42;SBa;;;;;;;;2MASX J22524925+0112039,MCG +00-58-009,PGC 069905,SDSS J225249.27+011203.9,SDSS J225249.27+011204.0,UGC 12225;;; +NGC7399;G;22:52:39.26;-09:16:04.0;Aqr;1.13;0.73;149;15.47;14.50;11.34;10.58;10.22;23.67;S0-a;;;;;;;;2MASX J22523926-0916040,MCG -02-58-006,PGC 069902,SDSS J225239.26-091604.0;;; +NGC7400;G;22:54:20.82;-45:20:49.3;Gru;2.42;0.57;2;13.62;;11.11;10.38;10.13;23.20;Sbc;;;;;;;;2MASX J22542080-4520492,ESO 290-022,ESO-LV 290-0220,IRAS 22514-4536,PGC 069967;;; +NGC7401;G;22:52:58.56;+01:08:33.6;Psc;0.75;0.47;90;14.99;;13.18;12.44;12.18;23.30;SBab;;;;;;;;2MASX J22525858+0108339,PGC 069911,SDSS J225258.56+010833.4,SDSS J225258.56+010833.5,SDSS J225258.56+010833.6;;; +NGC7402;G;22:53:04.48;+01:08:40.0;Psc;0.42;0.29;46;15.70;;13.63;12.86;12.53;23.11;S0;;;;;;;;2MASX J22530445+0108399,MCG +00-58-010,PGC 069914,SDSS J225304.47+010840.0,SDSS J225304.48+010840.0;;; +NGC7403;*;22:53:06.40;+01:28:57.8;Psc;;;;;;;;;;;;;;;;;;;;; +NGC7404;G;22:54:18.61;-39:18:53.8;Gru;1.63;0.93;2;13.64;;10.96;10.27;10.03;23.39;E-S0;;;;;;5260;;2MASX J22541861-3918537,ESO 346-010,ESO-LV 346-0100,MCG -07-47-001,PGC 069964;;+2 degree error in IC declination.; +NGC7405;G;22:52:57.17;+12:35:37.0;Peg;0.33;0.23;95;16.00;;13.29;12.68;12.43;23.02;Sc;;;;;;;;2MASX J22525723+1235368,PGC 069907;;The NGC identification is very uncertain.; +NGC7406;G;22:53:56.24;-06:34:45.3;Aqr;0.92;0.65;75;15.00;;11.38;10.71;10.42;22.71;Sb;;;;;;;;2MASX J22535624-0634453,MCG -01-58-003,PGC 069947;;; +NGC7407;G;22:53:20.88;+32:07:50.4;Peg;1.67;0.79;154;14.20;;11.24;10.64;10.26;23.36;Sc;;;;;;;;2MASX J22532041+3207529,2MASX J22532085+3207507,IRAS 22510+3151,MCG +05-54-002,PGC 069922,SDSS J225321.11+320745.7,UGC 12230;;; +NGC7408;G;22:55:56.86;-63:41:41.0;Tuc;1.91;0.70;168;13.35;15.41;11.61;10.95;10.74;22.64;SBc;;;;;;;;2MASX J22555688-6341411,ESO 109-026,ESO-LV 109-0260,IRAS 22527-6357,PGC 070037;;The APMUKS position is north of the nucleus.; +NGC7409;G;22:53:48.12;+20:12:37.4;Peg;0.58;0.45;159;15.60;;12.25;11.54;11.31;23.14;S0;;;;;;;;2MASX J22534809+2012377,PGC 069939;;; +NGC7410;G;22:55:00.95;-39:39:40.8;Gru;6.01;1.77;43;11.35;11.80;8.14;7.46;7.23;23.36;SBa;;;;;;;;2MASX J22550094-3939409,ESO 346-012,ESO-LV 346-0120,IRAS 22522-3955,MCG -07-47-002,PGC 069994;;; +NGC7411;G;22:54:34.92;+20:14:10.2;Peg;1.00;0.90;127;14.80;;11.20;10.45;10.26;23.61;E;;;;;;;;2MASX J22543490+2014105,MCG +03-58-010,PGC 069974,UGC 12241;;; +NGC7412;G;22:55:45.75;-42:38:31.3;Gru;3.79;2.79;75;11.82;11.38;9.55;8.73;8.59;23.18;SBb;;;;;;;;2MASX J22554573-4238313,ESO 290-024,ESO-LV 290-0240,IRAS 22529-4254,MCG -07-47-004,PGC 070027;;; +NGC7412A;G;22:57:09.00;-42:48:16.1;Gru;0.59;0.42;92;14.30;;;;;21.80;SBd;;;;;;;;ESO 290-028,ESO-LV 290-0280,PGC 070089;;The APM data are for the brighter eastern end.; +NGC7413;G;22:55:03.10;+13:13:13.7;Peg;1.14;0.80;64;15.20;;12.01;11.27;11.00;24.17;E-S0;;;;;;;;2MASX J22550312+1313139,MCG +02-58-035,PGC 069997,SDSS J225503.09+131313.7,SDSS J225503.10+131313.6,SDSS J225503.10+131313.7;;; +NGC7414;G;22:55:24.42;+13:14:53.8;Peg;0.62;0.28;172;;;13.51;12.76;12.41;24.37;S0;;;;;;;;2MASX J22552441+1314539,PGC 070008,SDSS J225524.41+131453.7,SDSS J225524.42+131453.7,SDSS J225524.42+131453.8;;; +NGC7415;G;22:54:53.62;+20:15:41.6;Peg;0.82;0.21;128;15.00;;13.00;12.18;12.04;22.95;Sab;;;;;;;;2MASX J22545362+2015414,MCG +03-58-012,PGC 069985,UGC 12244;;; +NGC7416;G;22:55:41.70;-05:29:43.2;Aqr;3.08;0.60;110;13.00;;10.06;9.43;9.25;23.29;SBb;;;;;;;;2MASX J22554170-0529432,MCG -01-58-004,PGC 070025;;; +NGC7417;G;22:57:49.51;-65:02:18.8;Tuc;2.21;1.45;11;13.24;;10.31;9.65;9.34;23.37;SBab;;;;;;;;2MASX J22574951-6502188,ESO 109-028,ESO-LV 109-0280,PGC 070113;;The APM position is 9 arcsec northwest of the nucleus.; +NGC7418;G;22:56:36.16;-37:01:48.3;Gru;3.66;2.83;139;11.66;11.39;9.45;8.77;8.52;23.03;Sc;;;;;;1459;;2MASX J22563615-3701482,ESO 406-025,ESO-LV 406-0250,IRAS 22538-3717,MCG -06-50-013,PGC 070069;;; +NGC7418A;G;22:56:41.25;-36:46:21.8;Gru;1.75;0.88;81;13.85;;12.97;12.68;12.24;22.96;Scd;;;;;;;;ESO 406-027,ESO-LV 406-0270,MCG -06-50-011B,PGC 070075;;; +NGC7419;OCl;22:54:20.06;+60:48:55.9;Cep;4.08;;;;13.00;;;;;;;;;;;;;MWSC 3672;;; +NGC7420;G;22:55:32.05;+29:48:18.0;Peg;0.85;0.77;50;14.90;;12.08;11.54;11.13;23.32;Sb;;;;;;;;2MASX J22553197+2948184,IRAS 22531+2932,MCG +05-54-018,PGC 070017;;; +NGC7421;G;22:56:54.33;-37:20:50.1;Gru;2.38;1.95;85;12.64;11.93;10.24;9.61;9.25;23.09;Sbc;;;;;;;;2MASX J22565431-3720499,ESO 346-017,ESO-LV 346-0170,MCG -06-50-015,PGC 070083;;; +NGC7422;G;22:56:12.38;+03:55:36.4;Psc;0.83;0.63;146;14.30;;11.93;11.28;11.06;22.58;SBb;;;;;;;;2MASX J22561238+0355364,IRAS 22536+0339,MCG +01-58-013,PGC 070048,SDSS J225612.36+035536.3,UGC 12254;;; +NGC7423;OCl;22:55:08.54;+57:05:48.9;Cep;3.60;;;;;;;;;;;;;;;;;MWSC 3674;;; +NGC7424;G;22:57:18.37;-41:04:14.1;Gru;5.01;2.69;125;10.88;10.38;9.66;9.19;9.25;22.75;Sc;;;;;;;;2MASX J22571836-4104140,ESO 346-019,ESO-LV 346-0190,IRAS 22544-4120,MCG -07-47-008,PGC 070096;;Extended HIPASS source; +NGC7425;G;22:57:15.54;-10:57:00.0;Aqr;0.97;0.59;63;15.00;;12.29;11.67;11.46;23.82;S0-a;;;;;;;;2MASX J22571553-1056596,MCG -02-58-013,PGC 070097;;; +NGC7426;G;22:56:02.86;+36:21:40.9;Lac;1.57;1.22;72;13.60;;9.85;9.09;8.82;23.41;E;;;;;;;;2MASX J22560284+3621411,MCG +06-50-012,PGC 070042,UGC 12256;;; +NGC7427;G;22:57:09.92;+08:30:20.1;Peg;0.58;0.50;102;15.50;;12.33;11.75;11.49;23.06;;;;;;;;;2MASX J22570990+0830200,MCG +01-58-016,PGC 070091;;; +NGC7428;G;22:57:19.53;-01:02:56.4;Psc;0.91;0.83;65;13.80;;10.54;9.87;9.59;22.48;Sa;;;;;;;;2MASX J22571952-0102563,MCG +00-58-014,PGC 070098,UGC 12262;;; +NGC7429;OCl;22:56:00.60;+59:58:25.9;Cep;4.50;;;;;;;;;;;;;;;;;MWSC 3676;;; +NGC7430;G;22:57:29.72;+08:47:39.5;Peg;0.60;0.27;60;15.10;;11.90;11.15;10.98;22.67;S0;;;;;;;;2MASX J22572973+0847377,MCG +01-58-017,PGC 070106;;; +NGC7431;G;22:57:38.69;+26:09:51.5;Peg;0.26;0.20;125;15.60;;13.64;12.97;12.79;22.55;;;;;;;;;2MASX J22573899+2609517,PGC1765321 ;;; +NGC7432;G;22:58:01.94;+13:08:04.2;Peg;1.57;0.92;40;15.95;14.81;10.89;10.20;9.91;24.30;E;;;;;;;;2MASX J22580191+1308043,MCG +02-58-040,PGC 070129,SDSS J225801.94+130804.2,UGC 12268;;; +NGC7433;G;22:57:51.71;+26:09:43.8;Peg;0.78;0.30;47;15.00;;12.55;11.82;11.59;23.08;Sbc;;;;;;;;2MASX J22575170+2609436,MCG +04-54-003,PGC 070112;;; +NGC7434;G;22:58:21.45;-01:11:02.2;Psc;0.61;0.30;80;15.70;;12.08;11.32;11.01;22.96;E-S0;;;;;;;;2MASX J22582143-0111026,MCG +00-58-016,PGC 070145,SDSS J225821.45-011102.1,SDSS J225821.45-011102.2;;; +NGC7435;G;22:57:54.47;+26:08:19.9;Peg;1.31;0.42;112;15.50;;;;;24.16;SBa;;;;;;;;MCG +04-54-004,PGC 070116,UGC 12267;;; +NGC7436;GPair;22:57:56.90;+26:09:00.0;Peg;1.20;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC7436A;G;22:57:56.17;+26:08:59.9;Peg;0.72;0.25;98;15.50;15.00;;;;21.16;Sbc;;;;;;;;MCG +04-54-005,PGC 070123;;; +NGC7436B;G;22:57:57.54;+26:08:59.8;Peg;1.95;1.48;49;15.50;;10.05;9.35;9.01;24.11;E;;;;;;;;2MASX J22575750+2609000,MCG +04-54-006,PGC 070124,UGC 12269;;; +NGC7437;G;22:58:10.06;+14:18:30.6;Peg;1.71;1.64;145;14.40;;12.62;12.50;11.98;23.84;SABc;;;;;;;;2MASX J22581004+1418324,HD ,MCG +02-58-041,PGC 070131,SDSS J225810.05+141830.6,SDSS J225810.06+141830.5,UGC 12270;;; +NGC7438;OCl;22:57:20.37;+54:18:33.5;Cas;5.70;;;;;;;;;;;;;;;;;MWSC 3682;;; +NGC7439;G;22:58:09.96;+29:13:42.3;Peg;1.03;0.56;165;15.20;;12.06;11.32;10.99;23.84;S0;;;;;;;;2MASX J22580996+2913421,MCG +05-54-021,PGC 070134,UGC 12273;;; +NGC7440;G;22:58:32.54;+35:48:08.7;And;1.16;0.93;50;14.60;;11.52;10.82;10.49;23.36;Sa;;;;;;;;2MASX J22583255+3548086,MCG +06-50-014,PGC 070152,UGC 12276;;; +NGC7441;G;22:56:41.38;-07:22:44.6;Aqr;1.29;0.77;160;14.00;;12.01;11.42;11.02;23.09;Sc;;;;;;1458;;2MASX J22564138-0722445,MCG -01-58-007,PGC 070080;;The identification as NGC 7441 is not certain.; +NGC7442;G;22:59:26.55;+15:32:54.2;Peg;1.01;0.95;95;14.20;;11.56;10.89;10.65;22.96;Sc;;;;;;;;2MASX J22592655+1532543,IRAS 22569+1516,MCG +02-58-045,PGC 070183,UGC 12286;;; +NGC7443;G;23:00:08.85;-12:48:28.4;Aqr;1.73;0.69;41;14.00;;10.35;9.63;9.38;23.73;S0-a;;;;;;;;2MASX J23000884-1248284,MCG -02-58-015,PGC 070218;;; +NGC7444;G;23:00:08.96;-12:50:03.4;Aqr;1.45;0.58;1;14.00;;10.47;9.77;9.51;23.35;S0;;;;;;;;2MASX J23000897-1250034,MCG -02-58-016,PGC 070219;;; +NGC7445;G;22:59:22.44;+39:06:27.1;And;0.67;0.17;85;15.60;;11.72;10.98;10.63;23.34;S0-a;;;;;;;;2MASX J22592250+3906270,MCG +06-50-015,PGC 070178;;; +NGC7446;G;22:59:29.00;+39:04:58.4;And;1.26;1.14;110;15.70;;11.11;10.41;10.15;24.59;E;;;;;;;;2MASX J22592904+3904590,PGC 070185;;; +NGC7447;Other;23:00:26.08;-10:31:40.8;Aqr;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7448;G;23:00:03.59;+15:58:49.2;Peg;2.07;0.81;171;12.00;;9.94;9.33;9.01;21.66;Sc;;;;;;;;2MASX J23000358+1558493,IRAS 22575+1542,MCG +03-58-018,PGC 070213,SDSS J230003.60+155848.8,UGC 12294;;; +NGC7449;G;22:59:37.64;+39:08:45.1;And;1.02;0.80;130;15.40;;10.95;10.24;9.87;24.24;E;;;;;;;;2MASX J22593761+3908450,MCG +06-50-016,PGC 070196,UGC 12292;;; +NGC7450;G;23:00:47.82;-12:55:06.7;Aqr;1.54;1.46;25;15.19;14.33;11.09;10.40;10.14;23.80;S0-a;;;;;;;;2MASX J23004784-1255063,MCG -02-58-019,PGC 070252;;; +NGC7451;G;23:00:40.86;+08:28:04.5;Peg;1.11;0.54;65;15.00;;11.83;11.17;10.93;23.34;Sbc;;;;;;;;2MASX J23004081+0828040,IRAS 22581+0811,MCG +01-58-020,PGC 070245,SDSS J230040.79+082803.7,UGC 12299;;; +NGC7452;G;23:00:47.50;+06:44:43.9;Psc;0.51;0.37;25;;;12.63;11.94;11.63;23.76;;;;;;;;;2MASX J23004749+0644440,PGC 1306660;;NGC identification is not certain.; +NGC7453;Other;23:01:25.41;-06:21:23.4;Aqr;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC7454;G;23:01:06.51;+16:23:18.1;Peg;1.54;0.75;140;13.60;;9.79;9.11;8.86;22.58;E;;;;;;;;2MASX J23010651+1623181,2MASX J23010728+1622581,MCG +03-58-020,PGC 070264,UGC 12305;;; +NGC7455;G;23:00:40.97;+07:18:11.0;Psc;0.70;0.40;163;15.30;;12.22;11.62;11.20;23.46;;;;;;;;;2MASX J23004097+0718110,IRAS 22581+0702,PGC 070246;;; +NGC7456;G;23:02:10.42;-39:34:09.8;Gru;5.15;1.76;22;12.27;;10.19;9.56;9.36;23.74;Sc;;;;;;;;2MASX J23021042-3934098,ESO 346-026,ESO-LV 346-0260,IRAS 22594-3950,MCG -07-47-011,PGC 070304;;; +NGC7457;G;23:00:59.93;+30:08:41.8;Peg;3.95;2.25;128;11.04;11.87;9.11;8.47;8.19;23.57;E-S0;;;;;;;;2MASX J23005993+3008416,MCG +05-54-026,PGC 070258,UGC 12306;;; +NGC7458;G;23:01:28.64;+01:45:12.2;Psc;1.03;0.82;14;13.90;;10.30;9.57;9.34;22.54;E;;;;;;;;2MASX J23012865+0145119,MCG +00-58-020,PGC 070277,UGC 12309;;; +NGC7459;GPair;23:00:59.90;+06:45:00.0;Psc;1.00;;;;;;;;;;;;;;;;;UGC 12302;;Misidentified as NGC 7452 in MCG.;Diameter of the group inferred by the author. +NGC7459 NED01;G;23:00:59.64;+06:44:57.9;Psc;1.32;0.78;61;15.00;;10.97;10.21;9.96;24.81;E;;;;;;;;2MASX J23005964+0644580,MCG +01-58-021,PGC 070255,UGC 12302 NED01;;NGC identification is not certain.; +NGC7459 NED02;G;23:01:00.21;+06:45:03.9;Psc;;;;;;;;;;;;;;;;;;PGC 200385,UGC 12302 NED02;;NGC identification is not certain.; +NGC7460;G;23:01:42.91;+02:15:49.0;Psc;1.14;0.81;25;14.20;;10.86;10.21;9.98;22.41;SBb;;;;;;;;2MASX J23014291+0215489,IRAS 22591+0159,MCG +00-58-021,PGC 070287,SDSS J230142.87+021549.1,UGC 12312;;; +NGC7461;G;23:01:48.33;+15:34:56.9;Peg;0.94;0.83;166;14.50;;11.10;10.40;10.07;23.16;S0;;;;;;;;2MASX J23014831+1534566,MCG +02-58-056,PGC 070290,SDSS J230148.33+153457.2,UGC 12314;;; +NGC7462;G;23:02:46.49;-40:50:06.9;Gru;4.99;0.84;76;12.07;;10.39;9.88;9.65;23.20;SBbc;;;;;;;;2MASX J23024649-4050067,ESO 346-028,ESO-LV 346-0280,IRAS 23000-4105,MCG -07-47-013,PGC 070324;;; +NGC7463;G;23:01:51.98;+15:58:54.7;Peg;1.58;0.44;92;13.50;;11.10;10.44;10.25;22.64;SABb;;;;;;;;2MASX J23015197+1558546,MCG +03-58-022,PGC 070291,UGC 12316;;; +NGC7464;G;23:01:53.70;+15:58:25.5;Peg;0.52;0.49;35;14.50;;13.39;12.92;12.75;21.87;E;;;;;;;;2MASX J23015371+1558256,MCG +03-58-023,PGC 070292,UGC 12315;;; +NGC7465;G;23:02:00.97;+15:57:53.2;Peg;1.06;0.64;162;13.30;;10.54;9.84;9.54;22.21;S0;;;;;;;;2MASX J23020095+1557535,IRAS 22595+1541,MCG +03-58-024,PGC 070295,UGC 12317;;; +NGC7466;G;23:02:03.43;+27:03:09.5;Peg;1.54;0.59;25;15.27;14.42;11.56;10.79;10.49;23.60;Sb;;;;;;;;2MASX J23020343+2703093,IRAS 22596+2647,MCG +04-54-017,PGC 070299,UGC 12319;;; +NGC7467;G;23:02:27.48;+15:33:14.7;Peg;0.81;0.58;26;15.50;;11.79;11.04;10.79;23.67;S0;;;;;;;;2MASX J23022748+1533145,MCG +02-58-057,PGC 070310;;; +NGC7468;G;23:02:59.26;+16:36:18.9;Peg;0.82;0.67;28;14.00;;12.34;11.70;11.58;22.52;E;;;;;;;;2MASX J23025917+1636162,IRAS 23004+1619,PGC 070332,UGC 12329;;; +NGC7469;G;23:03:15.62;+08:52:26.4;Peg;1.38;1.21;126;13.00;12.34;10.11;9.25;8.85;22.27;Sa;;;;;;;;2MASX J23031567+0852252,IRAS 23007+0836,MCG +01-58-025,PGC 070348,SDSS J230315.61+085226.0,UGC 12332;;; +NGC7470;G;23:05:14.06;-50:06:41.7;Gru;1.55;1.02;93;14.76;;12.80;12.02;12.13;23.08;Sbc;;;;;;;;2MASX J23051405-5006413,ESO 239-009,PGC 070431;;; +NGC7471;Other;23:03:53.82;-22:54:24.9;Aqr;;;;;;;;;;;;;;;;;;;;"Nominal position for NGC 7471; nothing here."; +NGC7472;G;23:05:38.61;+03:03:33.3;Psc;0.75;0.49;55;14.60;;11.34;10.69;10.40;23.17;E;;;;;7482;;;2MASX J23053862+0303334,MCG +00-58-029,PGC 070446;;; +NGC7473;G;23:03:57.09;+30:09:36.5;Peg;1.09;0.49;42;14.80;;11.41;10.70;10.42;23.62;S0;;;;;;;;2MASX J23035707+3009365,MCG +05-54-030,PGC 070373,UGC 12335;;; +NGC7474;G;23:04:04.43;+20:04:01.9;Peg;0.79;0.62;8;15.20;;11.78;10.93;10.71;23.49;E;;;;;;;;2MASX J23040441+2004022,MCG +03-58-026,PGC 070379;;; +NGC7475;GPair;23:04:10.90;+20:04:52.1;Peg;1.30;;;;;;;;;;;;;;;;;UGC 12337;;;Diameter of the group inferred by the author. +NGC7475 NED01;G;23:04:10.25;+20:04:46.2;Peg;1.41;0.91;62;15.10;;10.76;9.99;9.72;24.33;E;;;;;;;;2MASX J23041023+2004462,MCG +03-58-027,PGC 070383,UGC 12337 NED01;;Called 'NGC 7475' in MCG.; +NGC7475 NED02;G;23:04:11.63;+20:05:06.1;Peg;0.45;0.45;;15.10;;;;;;;;;;;;;;MCG +03-58-028,PGC 070382,UGC 12337 NED02;;; +NGC7476;G;23:05:11.87;-43:05:57.7;Gru;1.33;1.06;178;13.57;;13.65;10.75;10.51;22.80;SBab;;;;;;;;2MASX J23051187-4305577,ESO 290-045,ESO-LV 290-0450,IRAS 23023-4322,MCG -07-47-015,PGC 070427;;; +NGC7477;G;23:04:40.66;+03:07:04.8;Psc;0.38;0.17;23;16.92;;;;;23.56;;;;;;;;;2MASX J23044064+0307048,PGC 1245518;;Two Galactic stars plus faint galaxy.; +NGC7478;G;23:04:56.61;+02:34:40.0;Psc;0.43;0.38;9;15.98;;13.04;12.26;11.91;23.23;Sa;;;;;;;;2MASX J23045659+0234396,PGC 070418;;; +NGC7479;G;23:04:56.65;+12:19:22.4;Peg;3.65;2.72;26;11.60;10.85;9.19;8.51;8.20;23.04;SBbc;;;;;;;;2MASX J23045666+1219223,C 044,IRAS 23024+1203,MCG +02-58-060,PGC 070419,SDSS J230456.65+121922.3,UGC 12343;;; +NGC7480;G;23:05:13.62;+02:32:57.9;Psc;1.32;0.27;101;15.10;;10.95;10.19;9.88;23.79;S0-a;;;;;;;;2MASX J23051361+0232576,MCG +00-58-027,PGC 070432,UGC 12349;;; +NGC7481;Other;23:05:51.62;-19:56:22.8;Aqr;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7482;Dup;23:05:38.61;+03:03:33.3;Psc;;;;;;;;;;;;;;;7472;;;;;; +NGC7483;G;23:05:48.29;+03:32:42.4;Psc;1.43;0.83;116;14.30;;10.68;9.93;9.74;23.53;Sa;;;;;;;;2MASX J23054830+0332425,IRAS 23032+0316,MCG +00-58-030,PGC 070455,SDSS J230548.26+033242.2,UGC 12353;;; +NGC7484;G;23:07:04.91;-36:16:31.3;Scl;1.09;1.00;0;12.79;;9.77;9.13;8.86;22.04;E;;;;;;;;2MASX J23070492-3616315,ESO 407-006,ESO-LV 407-0060,MCG -06-50-026,PGC 070505;;; +NGC7485;G;23:06:04.86;+34:06:27.7;Peg;1.51;0.76;145;14.20;;10.82;10.04;9.82;23.79;S0;;;;;;;;2MASX J23060487+3406278,MCG +06-50-022,PGC 070470,UGC 12360;;; +NGC7486;Other;23:06:12.98;+34:06:05.4;Peg;;;;;;;;;;;;;;;;;;;;Four Galactic stars.; +NGC7487;G;23:06:50.54;+28:10:44.5;Peg;1.80;1.14;166;14.80;;10.81;10.10;9.74;24.75;E;;;;;;;;2MASX J23065052+2810449,MCG +05-54-035,PGC 070496,UGC 12368;;; +NGC7488;G;23:07:48.95;+00:56:25.9;Psc;0.62;0.41;22;14.90;;11.69;10.95;10.67;22.52;E-S0;;;;;;;;2MASX J23074896+0056258,MCG +00-59-001,PGC 070539,SDSS J230748.93+005625.8,SDSS J230748.94+005625.8,SDSS J230748.94+005625.9;;; +NGC7489;G;23:07:32.71;+22:59:52.8;Peg;1.22;0.65;165;14.30;;11.41;10.82;10.42;23.04;Sc;;;;;;;;2MASX J23073271+2259527,IRAS 23050+2243,MCG +04-54-028,PGC 070532,UGC 12378;;; +NGC7490;G;23:07:25.17;+32:22:30.2;Peg;1.81;1.76;70;13.50;;10.29;9.67;9.33;23.65;Sb;;;;;;;;2MASX J23072515+3222303,IRAS 23050+3206,MCG +05-54-036,PGC 070526,UGC 12379;;; +NGC7491;G;23:08:05.98;-05:58:00.0;Aqr;0.84;0.58;174;14.50;;12.32;11.70;11.53;22.62;Sbc;;;;;;;;2MASX J23080596-0558001,MCG -01-59-002,PGC 070546;;; +NGC7492;GCl;23:08:26.68;-15:36:41.3;Aqr;3.00;;;;10.48;;;;;;;;;;;;;MWSC 3705;;; +NGC7493;*;23:08:31.63;+00:54:36.0;Psc;;;;;;;;;;;;;;;;;;SDSS J230831.63+005436.0;;; +NGC7494;G;23:08:58.58;-24:22:10.5;Aqr;0.87;0.65;85;16.04;;11.63;11.03;10.60;23.76;E;;;;;;;;2MASX J23085858-2422106,ESO 535-005,MCG -04-54-007,PGC 070568;;; +NGC7495;G;23:08:57.18;+12:02:52.9;Peg;1.61;1.44;12;14.70;;11.45;11.22;10.59;23.44;SABc;;;;;;;;2MASX J23085717+1202530,IRAS 23064+1146,MCG +02-59-003,PGC 070566,SDSS J230857.17+120252.8,UGC 12391;;; +NGC7496;G;23:09:47.29;-43:25:40.6;Gru;3.40;2.17;169;11.92;13.90;9.49;8.84;8.65;22.96;Sb;;;;;;;;2MASX J23094729-4325408,ESO 291-001,ESO-LV 291-0010,IRAS 23069-4341,MCG -07-47-020,PGC 070588;;; +NGC7496A;G;23:12:23.28;-43:46:41.5;Gru;1.44;1.23;84;14.60;;;;;24.00;SBm;;;;;;;;ESO 291-007,ESO-LV 291-0070,PGC 070687;;; +NGC7497;G;23:09:03.41;+18:10:37.9;Peg;2.75;0.97;45;13.30;;9.95;9.16;9.14;23.05;Sc;;;;;;;;2MASX J23090342+1810378,IRAS 23065+1754,MCG +03-59-002,PGC 070569,UGC 12392;;; +NGC7498;G;23:09:56.20;-24:25:30.2;Aqr;0.95;0.44;3;15.05;;11.83;11.11;10.84;23.21;Sa;;;;;;;;2MASX J23095620-2425299,ESO 535-006,MCG -04-54-008,PGC 070590;;; +NGC7499;G;23:10:22.39;+07:34:50.4;Psc;1.55;0.86;11;15.00;;11.03;10.28;10.00;23.79;S0;;;;;;;;2MASX J23102237+0734501,MCG +01-59-005,PGC 070608,SDSS J231022.37+073450.6,UGC 12397;;; +NGC7500;G;23:10:29.81;+11:00:44.3;Peg;1.51;1.03;121;14.90;;10.91;10.08;9.87;24.44;S0;;;;;;;;2MASX J23102978+1100441,MCG +02-59-004,PGC 070620,UGC 12399;;; +NGC7501;G;23:10:30.42;+07:35:20.5;Psc;1.02;0.90;157;17.40;;11.32;10.60;10.40;23.55;E;;;;;;;;2MASX J23103039+0735201,MCG +01-59-007,PGC 070619;;; +NGC7502;Other;23:10:19.79;-21:44:15.3;Aqr;;;;;;;;;;;;;;;;;;;;Galactic triple star.; +NGC7503;G;23:10:42.28;+07:34:03.7;Psc;0.95;0.84;76;14.90;;11.12;10.35;10.02;23.21;E;;;;;;;;2MASX J23104223+0734033,MCG +01-59-008,PGC 070628,SDSS J231042.27+073403.8;;; +NGC7504;*;23:10:41.17;+14:23:10.7;Peg;;;;;;;;;;;;;;;;;;SDSS J231041.17+142310.7;;NGC identification is not certain.; +NGC7505;G;23:11:00.65;+13:37:53.6;Peg;1.00;0.39;110;15.60;;11.96;11.26;10.94;23.94;S0-a;;;;;;;;2MASX J23110066+1337538,PGC 070636,SDSS J231100.65+133753.6;;; +NGC7506;G;23:11:40.98;-02:09:36.1;Psc;1.25;0.61;94;14.30;;10.70;10.02;9.75;23.50;S0-a;;;;;;;;2MASX J23114100-0209358,MCG +00-59-005,PGC 070660,UGC 12406;;; +NGC7507;G;23:12:07.59;-28:32:22.6;Scl;3.33;3.20;90;11.60;;8.20;7.50;7.29;22.87;E;;;;;;;;2MASX J23120759-2832227,ESO 469-019,ESO-LV 469-0190,MCG -05-54-022,PGC 070676;;; +NGC7508;G;23:11:49.19;+12:56:25.5;Peg;0.81;0.26;160;15.70;;11.79;11.08;10.87;23.56;Sa;;;;;;;;2MASX J23114919+1256255,2MASX J23114960+1256125,MCG +02-59-005,PGC 070663,UGC 12408;;MCG notes a star or possible companion superposed.; +NGC7509;G;23:12:21.41;+14:36:33.7;Peg;1.32;1.22;155;17.53;16.47;10.91;10.19;9.88;23.95;E;;;;;;;;2MASX J23122143+1436333,MCG +02-59-006,PGC 070679,SDSS J231221.41+143633.7,SDSS J231221.41+143633.8,SDSS J231221.42+143633.7;;; +NGC7510;OCl;23:11:03.78;+60:34:15.2;Cep;3.90;;;8.77;7.90;;;;;;;;;;;;;MWSC 3706;;; +NGC7511;G;23:12:26.29;+13:43:35.7;Peg;1.01;0.51;130;14.84;;11.92;11.22;10.87;23.35;Sb;;;;;;;;2MASX J23122627+1343353,IRAS 23099+1327,MCG +02-59-007,PGC 070691,SDSS J231226.29+134335.7,UGC 12412;;; +NGC7512;G;23:12:20.93;+31:07:32.2;Peg;1.90;1.12;36;14.10;;10.94;10.39;9.98;24.28;E;;;;;;;;2MASX J23122095+3107322,MCG +05-54-046,PGC 070683,UGC 12414;;; +NGC7513;G;23:13:14.03;-28:21:27.0;Scl;3.19;1.92;100;12.73;;9.82;9.20;8.95;23.48;SBb;;;;;;;;2MASX J23131402-2821269,ESO 469-022,ESO-LV 469-0220,IRAS 23105-2837,MCG -05-54-023,PGC 070714,UGCA 437;;; +NGC7514;G;23:12:25.86;+34:52:53.4;Peg;1.30;0.89;134;13.98;13.15;11.04;10.32;10.09;22.63;Sbc;;;;;;;;2MASX J23122587+3452535,MCG +06-50-026,PGC 070689,UGC 12415;;; +NGC7515;G;23:12:48.67;+12:40:45.4;Peg;1.65;1.43;10;14.00;;10.29;9.63;9.33;22.95;Sbc;;;;;;;;2MASX J23124864+1240454,IRAS 23103+1224,MCG +02-59-008,PGC 070699,UGC 12418;;; +NGC7516;G;23:12:51.86;+20:14:54.3;Peg;1.26;0.91;99;14.60;;10.82;10.09;9.84;23.78;S0;;;;;;;;2MASX J23125186+2014540,MCG +03-59-010,PGC 070703,UGC 12420;;; +NGC7517;G;23:13:13.83;-02:06:01.5;Psc;0.57;0.35;163;15.50;;11.91;11.25;10.94;23.22;E;;;;;;;;2MASX J23131383-0206011,MCG +00-59-008,PGC 070715;;; +NGC7518;G;23:13:12.73;+06:19:18.0;Psc;1.26;0.75;117;14.50;;11.03;10.32;10.07;23.32;SABa;;;;;;;;2MASX J23131271+0619177,IRAS 23106+0603,MCG +01-59-012,PGC 070712,UGC 12422;;; +NGC7519;G;23:13:11.24;+10:46:19.8;Peg;1.11;0.83;168;15.20;;11.70;10.88;10.77;23.80;Sb;;;;;;;;2MASX J23131123+1046197,MCG +02-59-009,PGC 070713,SDSS J231311.24+104619.7,UGC 12424;;Position in 1991PNAOJ...2...37T is for the companion galaxy.; +NGC7520;Other;23:13:44.88;-23:47:39.1;Aqr;;;;;;;;;;;;;;;;;;;;"Nominal position for NGC 7520; nothing here. NGC 7520 may be IC 5290."; +NGC7521;G;23:13:35.35;-01:43:53.4;Psc;0.52;0.40;172;14.90;;11.42;10.68;10.36;22.56;S0;;;;;;;;2MASX J23133529-0143531,MCG +00-59-009,PGC 070725;;; +NGC7522;*;23:15:36.40;-22:53:41.5;Aqr;;;;;;;;;;;;;;;;;;;;NGC identification is uncertain.; +NGC7523;G;23:13:34.72;+13:59:12.5;Peg;1.32;0.29;2;15.70;;12.14;11.37;11.00;24.01;Sb;;;;;;;;2MASX J23133468+1359121,PGC 070726,SDSS J231334.71+135912.3,SDSS J231334.71+135912.4,SDSS J231334.72+135912.4,SDSS J231334.72+135912.5;;; +NGC7524;G;23:13:46.55;-01:43:48.3;Psc;0.81;0.25;176;15.50;;12.42;11.64;11.45;24.08;S0-a;;;;;;;;2MASX J23134653-0143480,MCG +00-59-010,PGC 070737;;; +NGC7525;GPair;23:13:40.36;+14:01:22.7;Peg;0.90;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC7525 NED01;G;23:13:40.27;+14:01:27.8;Peg;0.12;0.10;23;17.48;;;;;22.01;;;;;;;;;SDSS J231340.27+140127.8,SDSS J231340.28+140127.8;;;B-Mag taken from LEDA +NGC7525 NED02;G;23:13:40.50;+14:01:15.6;Peg;0.79;0.69;16;15.20;;12.53;11.77;11.40;23.23;;;;;;;;;2MASX J23134051+1401151,IRAS 23111+1344,PGC 070731,SDSS J231340.49+140115.5;;; +NGC7526;Other;23:14:02.33;-09:13:17.9;Aqr;;;;;;;;;;;;;;;;;;;;Three Galactic stars in a line.; +NGC7527;G;23:13:41.77;+24:54:08.2;Peg;1.20;0.79;163;14.70;;10.86;10.15;9.79;23.97;E;;;;;;;;2MASX J23134176+2454086,MCG +04-54-031,PGC 070728,UGC 12428;;; +NGC7528;G;23:14:20.26;+10:13:53.2;Peg;0.65;0.48;0;;;12.38;11.69;11.11;23.77;;;;;;;;;2MASX J23142026+1013531,PGC 070770;;; +NGC7529;G;23:14:03.19;+08:59:33.0;Peg;0.80;0.73;65;14.60;;12.50;11.91;11.39;22.85;Sbc;;;;;;;;2MASX J23140320+0859331,MCG +01-59-014,PGC 070755,UGC 12431;;; +NGC7530;G;23:14:11.83;-02:46:45.6;Psc;0.95;0.38;115;15.00;;12.79;11.92;11.88;23.67;S0-a;;;;;;;;2MASX J23141186-0246447,MCG -01-59-004,PGC 070759,SDSS J231411.83-024644.9;;; +NGC7531;G;23:14:48.50;-43:35:59.8;Gru;4.11;1.72;17;11.99;11.26;9.35;8.70;8.45;23.09;SABb;;;;;;;;2MASX J23144850-4335597,ESO 291-010,ESO-LV 291-0100,IRAS 23120-4352,MCG -07-47-025,PGC 070800;;Extended HIPASS source; +NGC7532;G;23:14:22.23;-02:43:41.5;Psc;1.32;0.42;161;14.50;;12.06;11.39;11.09;24.08;S0-a;;;;;;;;2MASX J23142221-0243417,IRAS 23117-0300,MCG -01-59-005,PGC 070779;;; +NGC7533;G;23:14:22.08;-02:02:01.4;Psc;0.66;0.22;126;15.52;;;;;23.50;S0-a;;;;;;;;2MASX J23142205-0202017,PGC 070778;;; +NGC7534;G;23:14:26.68;-02:41:53.7;Psc;0.99;0.52;6;14.50;;12.94;12.59;11.87;22.54;IB;;;;;;;;2MASX J23142668-0241537,MCG -01-59-006,PGC 070781;;; +NGC7535;G;23:14:12.77;+13:34:54.8;Peg;1.46;1.44;40;14.24;13.66;12.02;11.41;11.31;23.83;Scd;;;;;;;;MCG +02-59-010,PGC 070761,UGC 12438;;; +NGC7536;G;23:14:13.18;+13:25:35.0;Peg;1.59;0.70;56;14.07;13.43;11.39;10.63;10.35;23.20;SBbc;;;;;;;;2MASX J23141313+1325350,IRAS 23117+1309,MCG +02-59-011,PGC 070765,SDSS J231413.18+132534.9,SDSS J231413.18+132535.0,SDSS J231413.19+132534.9,UGC 12437;;; +NGC7537;G;23:14:34.50;+04:29:54.1;Psc;1.84;0.48;74;13.80;;11.15;10.57;10.21;22.92;Sbc;;;;;;;;2MASX J23143449+0429540,MCG +01-59-016,PGC 070786,SDSS J231434.51+042954.4,UGC 12442;;; +NGC7538;Cl+N;23:13:38.63;+61:30:44.6;Cep;8.00;7.00;;;;;;;;;;;;;;;;LBN 542,MWSC 3707;;; +NGC7539;G;23:14:29.44;+23:41:05.4;Peg;1.16;0.95;151;13.94;12.95;10.56;9.86;9.57;22.90;S0;;;;;;;;2MASX J23142943+2341053,MCG +04-54-035,PGC 070783,UGC 12443;;; +NGC7540;G;23:14:36.07;+15:57:01.1;Peg;0.66;0.48;141;15.70;;11.87;11.22;10.97;23.39;S0-a;;;;;;;;2MASX J23143608+1557010,PGC 070788;;; +NGC7541;G;23:14:43.89;+04:32:03.7;Psc;3.03;1.00;102;12.70;;9.44;8.76;8.35;22.75;SBc;;;;;7581;;;2MASX J23144385+0432020,IRAS 23121+0415,MCG +01-59-017,PGC 070795,SDSS J231443.88+043202.6,UGC 12447;;Identification as NGC 7581 is doubtful.; +NGC7542;G;23:14:41.63;+10:38:35.7;Peg;0.95;0.65;112;15.70;;12.01;11.20;10.89;24.17;S0;;;;;;;;2MASX J23144163+1038361,PGC 070796;;; +NGC7543;G;23:14:34.58;+28:19:38.0;Peg;1.39;0.95;145;14.10;;10.99;10.20;9.95;23.43;Sb;;;;;;;;2MASX J23143451+2819373,IRAS 23121+2803,MCG +05-54-052,PGC 070785,UGC 12450;;; +NGC7544;G;23:14:56.98;-02:11:57.6;Psc;0.75;0.27;76;15.62;;12.44;11.70;11.68;24.00;S0;;;;;;;;2MASX J23145696-0211570,PGC 070811;;; +NGC7545;G;23:15:32.10;-38:32:08.1;Gru;1.28;0.78;84;13.84;;11.47;10.86;10.78;22.74;Sb;;;;;;;;2MASX J23153209-3832082,ESO 347-004,ESO-LV 347-0040,IRAS 23127-3848,MCG -07-47-026,PGC 070840;;; +NGC7546;G;23:15:05.64;-02:19:29.1;Psc;0.66;0.53;12;14.50;;12.24;11.62;11.44;23.50;SABb;;;;;;;;2MASX J23150565-0219292,MCG -01-59-007,PGC 070820;;; +NGC7547;G;23:15:03.40;+18:58:24.4;Peg;1.06;0.44;104;14.90;;10.94;10.22;9.97;23.21;Sa;;;;;;;;2MASX J23150347+1858245,MCG +03-59-013,PGC 070819,UGC 12453;;; +NGC7548;G;23:15:11.11;+25:16:55.0;Peg;1.06;0.88;22;14.50;;11.01;10.22;9.99;23.32;S0;;;;;;;;2MASX J23151111+2516550,IRAS 23127+2459,MCG +04-54-036,PGC 070826,UGC 12455;;; +NGC7549;G;23:15:17.23;+19:02:30.1;Peg;1.85;0.75;33;14.10;;11.31;10.58;10.29;23.40;Sc;;;;;;;;2MASX J23151728+1902299,IRAS 23127+1846,MCG +03-59-014,PGC 070832,SDSS J231517.26+190230.4,UGC 12457;;Identified as NGC 7594 in Hickson et al.(1989:Ap.J.Suppl. 70,687).; +NGC7550;G;23:15:16.01;+18:57:42.5;Peg;1.45;1.41;150;13.90;;9.93;9.20;8.91;22.73;E-S0;;;;;;;;2MASX J23151609+1857409,MCG +03-59-015,PGC 070830,UGC 12456;;; +NGC7551;G;23:15:22.03;+15:56:27.6;Peg;0.62;0.47;155;15.70;;11.87;11.22;10.97;;;;;;;;;;PGC 070791;;Galactic star superposed.;Diameters and position angle taken from Simbad. +NGC7552;G;23:16:10.76;-42:35:05.1;Gru;3.88;3.58;95;11.22;10.57;8.49;7.84;7.54;22.82;Sab;;;;;;5294;;2MASX J23161076-4235053,ESO 291-012,ESO-LV 291-0120,IRAS 23134-4251,MCG -07-47-028,PGC 070884;;Confused HIPASS source; +NGC7553;G;23:15:33.09;+19:02:53.4;Peg;0.69;0.52;150;15.85;;11.99;11.26;11.03;23.71;E;;;;;;;;2MASX J23153308+1902529,PGC 070842;;NGC identification is not certain.; +NGC7554;G;23:15:41.34;-02:22:43.0;Psc;0.98;0.73;159;16.50;;;;;24.68;E;;;;;;;;PGC 070850;;; +NGC7555;Other;23:15:30.85;+12:34:22.3;Peg;;;;;;;;;;;;;;;;;;;;Nothing at this position. N7555 may be N7515, N7536, N7559, N7563, or N7570.; +NGC7556;G;23:15:44.47;-02:22:53.4;Psc;2.15;1.34;104;14.00;;10.22;9.52;9.25;26.04;E-S0;;;;;;;;2MASX J23154447-0222535,MCG -01-59-009,PGC 070855;;; +NGC7556A;G;23:15:43.73;-02:23:08.0;Psc;;;;;;;;;;;;;;;;;;2MASS J23154371-0223089,MCG -01-59-009 NOTES02;;; +NGC7557;G;23:15:39.77;+06:42:30.0;Psc;0.68;0.62;163;15.00;;11.91;11.28;11.03;23.10;S0;;;;;;;;2MASX J23153974+0642301,MCG +01-59-021,PGC 070854;;; +NGC7558;G;23:15:38.23;+18:55:10.9;Peg;0.89;0.71;65;16.02;;12.04;11.35;11.20;24.35;S0-a;;;;;;;;2MASX J23153820+1855111,MCG +03-59-016,PGC 070844;;; +NGC7559;GPair;23:15:46.30;+13:17:38.0;Peg;1.50;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC7559A;G;23:15:45.99;+13:17:49.0;Peg;0.60;0.43;38;14.00;;10.88;10.17;9.95;24.19;S0-a;;;;;;;;MCG +02-59-014,PGC 070852,SDSS J231545.99+131749.0,UGC 12463;;; +NGC7559B;G;23:15:46.56;+13:17:25.0;Peg;1.29;1.17;66;14.70;;10.88;10.17;9.95;23.50;E-S0;;;;;;;;2MASX J23154653+1317253,MCG +02-59-013,PGC 070864,SDSS J231546.55+131725.0,SDSS J231546.56+131725.0,UGC 12463 NOTES01;;; +NGC7560;**;23:15:53.76;+04:29:45.1;Psc;;;;;;;;;;;;;;;;;;;;; +NGC7561;*;23:15:57.42;+04:31:21.8;Psc;;;;;;;;;;;;;;;;;;;;; +NGC7562;G;23:15:57.50;+06:41:15.1;Psc;2.18;1.59;84;13.00;;9.27;8.59;8.32;23.16;E;;;;;;;;2MASX J23155750+0641149,MCG +01-59-024,PGC 070874,UGC 12464;;; +NGC7562A;G;23:16:01.46;+06:39:08.2;Psc;1.32;0.32;179;16.00;;;;;23.65;Sd;;;;;;;;MCG +01-59-025,PGC 070880,PGC 070881,UGC 12467;;; +NGC7563;G;23:15:55.93;+13:11:46.0;Peg;1.53;0.92;143;13.87;12.81;10.44;9.71;9.45;23.31;Sa;;;;;;;;2MASX J23155594+1311466,MCG +02-59-015,PGC 070872,SDSS J231555.92+131146.0,SDSS J231555.93+131146.0,UGC 12465;;; +NGC7564;*;23:16:01.19;+07:20:53.0;Psc;;;;;;;;;;;;;;;;;;;;; +NGC7565;Other;23:16:19.81;-00:03:31.0;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position on the POSS.; +NGC7566;G;23:16:37.43;-02:19:50.0;Psc;1.58;0.65;99;14.50;;11.16;10.53;10.20;23.58;SBa;;;;;;;;2MASX J23163742-0219500,IRAS 23140-0236,MCG -01-59-010,PGC 070901;;; +NGC7567;G;23:16:10.28;+15:51:00.1;Peg;0.91;0.26;73;15.40;;13.41;12.72;12.84;23.17;Sd;;;;;;;;2MASX J23161029+1550596,IRAS 23136+1534,MCG +03-59-019,PGC 070885,UGC 12468;;; +NGC7568;G;23:16:24.87;+24:29:49.3;Peg;0.90;0.60;123;14.50;;12.24;11.52;11.26;22.83;SBb;;;;;7574;;;2MASX J23162486+2429493,PGC 070892,UGC 12469;;Identification as NGC 7574 is doubtful.; +NGC7569;G;23:16:44.55;+08:54:19.6;Peg;0.96;0.62;92;14.80;;11.23;10.49;10.20;23.11;S0;;;;;;;;2MASX J23164448+0854199,IRAS 23142+0838,MCG +01-59-026,PGC 070914,UGC 12472;;+2 degree error in NGC position.; +NGC7570;G;23:16:44.67;+13:28:58.8;Peg;1.58;0.80;29;13.89;13.18;10.86;10.33;10.13;23.37;Sa;;;;;;;;2MASX J23164464+1328583,IRAS 23142+1312,MCG +02-59-018,PGC 070912,SDSS J231644.67+132858.8,UGC 12473;;; +NGC7571;G;23:18:30.26;+18:41:19.5;Peg;1.20;0.91;133;15.30;;11.28;10.55;10.28;24.06;S0;;;;;7597;;;2MASX J23183020+1841208,MCG +03-59-032,PGC 071006;;Identification as NGC 7571 is doubtful.; +NGC7572;G;23:16:50.37;+18:28:59.4;Peg;1.01;0.50;162;15.00;;11.68;10.91;10.58;23.80;S0-a;;;;;;;;2MASX J23165013+1829093,2MASX J23165036+1828594,MCG +03-59-023,PGC 070919;;; +NGC7573;G;23:16:26.35;-22:09:15.8;Aqr;1.24;0.90;33;14.24;;11.94;11.24;11.16;23.69;SBc;;;;;;;;2MASX J23162637-2209149,ESO 604-008,MCG -04-54-017,PGC 070893;;; +NGC7574;Dup;23:16:24.87;+24:29:49.3;Peg;;;;;;;;;;;;;;;7568;;;;;; +NGC7575;G;23:17:20.87;+05:39:38.8;Psc;0.77;0.40;107;15.00;;12.85;12.12;11.80;23.06;S0-a;;;;;;;;2MASX J23172087+0539389,MCG +01-59-028,PGC 070946;;NGC identification is not certain.; +NGC7576;G;23:17:22.74;-04:43:40.3;Aqr;1.00;0.69;160;14.00;;10.57;9.92;9.64;22.52;S0-a;;;;;;;;2MASX J23172274-0443401,IRAS 23148-0500,MCG -01-59-012,PGC 070948;;; +NGC7577;G;23:17:17.10;+07:21:55.5;Psc;0.38;0.27;65;;;12.87;12.46;12.08;;;;;;;;;;2MASX J23171708+0721556,PGC 070947;;Galactic star superposed.;Diameters and position angle taken from Simbad. +NGC7578;GPair;23:17:12.70;+18:42:16.0;Peg;2.00;;;;;;;;;;;;;;;;;;;;Diameter of the group inferred by the author. +NGC7578A;G;23:17:11.94;+18:42:04.7;Peg;0.69;0.59;166;15.30;;;;;22.75;S0;;;;;;;;MCG +03-59-024,PGC 070933,UGC 12477;;Incorrectly identified as UGC 12478 in 1989ApJS...70..687H.; +NGC7578B;G;23:17:13.56;+18:42:29.7;Peg;1.74;1.20;7;15.00;;10.53;9.65;9.60;24.77;E;;;;;;;;2MASX J23171357+1842295,MCG +03-59-025,PGC 070934,UGC 12478;;Incorrectly identified as UGC 12477 in 1989ApJS...70..687H.; +NGC7579;G;23:17:38.85;+09:25:59.9;Peg;0.45;0.33;49;15.40;;13.97;13.39;13.02;24.05;;;;;;;;;2MASX J23173883+0925596,MCG +01-59-031,PGC 070964;;; +NGC7580;G;23:17:36.40;+14:00:04.3;Peg;0.79;0.65;41;14.80;;11.86;11.25;10.92;22.33;Sb;;;;;;;;2MASX J23173637+1400034,IRAS 23150+1343,MCG +02-59-019,PGC 070962,SDSS J231736.39+140004.3,SDSS J231736.40+140004.3,UGC 12481;;; +NGC7581;Dup;23:14:43.89;+04:32:03.7;Psc;;;;;;;;;;;;;;;7541;;;;;; +NGC7582;G;23:18:23.50;-42:22:14.0;Gru;6.95;3.18;156;10.92;10.62;8.35;7.68;7.32;23.83;SBab;;;;;;;;2MASX J23182362-4222140,ESO 291-016,ESO-LV 291-0160,IRAS 23156-4238,MCG -07-47-029,PGC 071001;;; +NGC7583;G;23:17:52.77;+07:22:46.0;Psc;0.91;0.91;75;14.80;;10.97;10.23;9.94;23.74;S0-a;;;;;7605;;;2MASX J23175277+0722458,MCG +01-59-034,PGC 070975;;; +NGC7584;G;23:17:53.00;+09:26:00.0;Peg;0.85;0.77;18;15.30;;;;;23.74;;;;;;;;;MCG +01-59-035,PGC 070977;;; +NGC7585;G;23:18:01.34;-04:39:01.1;Aqr;2.55;1.92;95;12.00;18.70;;;;23.19;S0-a;;;;;;;;2MASX J23180134-0439010,MCG -01-59-015,PGC 070986;;; +NGC7586;G;23:17:55.60;+08:35:02.7;Peg;0.63;0.54;146;;;12.36;11.80;11.55;24.39;;;;;;;;;2MASX J23175556+0835028,PGC 1349697;;; +NGC7587;G;23:17:59.13;+09:40:48.7;Peg;1.12;0.27;124;13.35;12.06;11.14;10.43;10.11;23.12;SBab;;;;;;;;2MASX J23175912+0940488,MCG +01-59-037,PGC 070984,UGC 12484;;; +NGC7588;G;23:17:57.81;+18:45:07.8;Peg;0.46;0.21;101;15.70;;12.60;11.90;11.51;23.00;S0-a;;;;;;;;2MASX J23175783+1845075,MCG +03-59-031,PGC 070983;;; +NGC7589;G;23:18:15.67;+00:15:40.2;Psc;0.96;0.57;91;15.01;17.01;11.96;11.20;11.08;23.58;SABa;;;;;;;;2MASX J23181570+0015403,MCG +00-59-019,PGC 070995,SDSS J231815.66+001540.1,SDSS J231815.66+001540.2,SDSS J231815.67+001540.2;;; +NGC7590;G;23:18:54.81;-42:14:20.6;Gru;3.03;1.23;34;12.12;13.76;9.31;8.69;8.41;22.53;Sbc;;;;;;;;2MASX J23185483-4214206,ESO 347-033,ESO-LV 347-0330,IRAS 23161-4230,MCG -07-47-030,PGC 071031;;Confused and extended HIPASS source; +NGC7591;G;23:18:16.28;+06:35:08.9;Psc;1.61;0.72;147;13.80;;10.65;9.94;9.60;23.05;SBbc;;;;;;;;2MASX J23181627+0635087,IRAS 23157+0618,MCG +01-59-038,PGC 070996,UGC 12486;;; +NGC7592;GTrpl;23:18:22.20;-04:25:01.0;Aqr;1.20;;;;;;;;;;;;;;;;;MCG -01-59-017;;;Diameter of the group inferred by the author. +NGC7592A;G;23:18:21.80;-04:24:56.7;Aqr;0.56;0.24;25;;15.00;;;;;;;;;;7592W;;;MCG -01-59-017 NED01,PGC 3325384;;;Diameters and position angle taken from Simbad. +NGC7592B;G;23:18:22.59;-04:24:58.1;Aqr;0.87;0.35;90;14.16;13.56;11.37;10.71;10.75;;Sb;;;;;7592E;;;2MASX J23182261-0424580,MCG -01-59-017 NED03,PGC 3325385;;;Diameters and position angle taken from Simbad. +NGC7592C;G;23:18:22.13;-04:25:08.0;Aqr;;;;;;;;;;;;;;;7592S;;;MCG -01-59-017 NED02,PGC 3325386;;;Diameters and position angle taken from Simbad. +NGC7593;G;23:17:56.99;+11:20:57.0;Peg;1.04;0.60;103;14.60;;11.81;11.23;11.02;22.57;Sb;;;;;;;;2MASX J23175698+1120568,IRAS 23154+1104,MCG +02-59-020,PGC 070981,UGC 12483;;; +NGC7594;G;23:18:13.92;+10:17:53.9;Peg;1.29;0.72;23;15.30;;11.60;10.89;10.61;23.48;Sb;;;;;;1478;;2MASX J23181391+1017537,MCG +02-59-023,PGC 070991,UGC 12485;;; +NGC7595;G;23:18:30.23;+09:55:56.7;Peg;0.70;0.60;125;;;11.88;11.30;10.81;;E;;;;;;;;2MASX J23183024+0955568,PGC 071004;;;Diameters and position angle taken from Simbad. +NGC7596;G;23:17:12.00;-06:54:43.2;Aqr;0.93;0.45;7;15.17;;11.62;10.91;10.65;23.67;S0;;;;;;1477;;2MASX J23171201-0654434,IRAS 23145-0711,MCG -01-59-011,PGC 070932;;; +NGC7597;Dup;23:18:30.26;+18:41:19.5;Peg;;;;;;;;;;;;;;;7571;;;;;; +NGC7598;G;23:18:33.27;+18:44:57.7;Peg;0.30;0.30;90;15.60;;12.22;11.50;10.93;22.02;E;;;;;;;;2MASX J23183322+1844588,MCG +03-59-033,PGC 071011;;; +NGC7599;G;23:19:21.14;-42:15:24.6;Gru;4.81;1.58;55;11.87;11.41;9.36;8.72;8.39;23.29;SBc;;;;;;5308;;2MASX J23192114-4215246,ESO 347-034,ESO-LV 347-0340,IRAS 23166-4231,MCG -07-47-033,PGC 071066;;Confused HIPASS source; +NGC7600;G;23:18:53.86;-07:34:49.6;Aqr;2.09;0.99;62;13.00;;9.82;9.11;8.91;23.20;E-S0;;;;;;;;2MASX J23185385-0734495,MCG -01-59-019,PGC 071029;;The APM position is 8 arcsec northeast of the nucleus.; +NGC7601;G;23:18:47.05;+09:14:01.0;Peg;1.01;0.75;91;14.70;;12.23;11.21;11.08;23.16;SABb;;;;;;;;2MASX J23184710+0914010,IRAS 23162+0857,MCG +01-59-039,PGC 071022,UGC 12487;;; +NGC7602;G;23:18:43.53;+18:41:54.1;Peg;0.62;0.49;142;15.50;;11.92;11.17;10.85;23.17;S0-a;;;;;;;;2MASX J23184350+1841538,MCG +03-59-034,PGC 071019;;; +NGC7603;G;23:18:56.62;+00:14:38.2;Psc;1.20;0.63;163;14.73;14.01;10.61;9.85;9.33;22.77;Sb;;;;;;;;2MASX J23185663+0014376,IRAS 23163-0001,MCG +00-59-021,PGC 071035,SDSS J231856.65+001437.9,UGC 12493;;; +NGC7604;G;23:17:51.90;+07:25:47.6;Psc;0.42;0.26;102;15.20;;;;;22.09;;;;;;;;;2MASX J23175190+0725478,MCG +01-59-033,PGC 070974;;Incorrectly called NGC 7583 in CGCG.; +NGC7605;Dup;23:17:52.77;+07:22:46.0;Psc;;;;;;;;;;;;;;;7583;;;;;; +NGC7606;G;23:19:04.78;-08:29:06.3;Aqr;5.26;4.47;145;11.50;;8.62;7.69;7.64;23.81;Sb;;;;;;;;2MASX J23190480-0829065,IRAS 23164-0845,MCG -02-59-012,PGC 071047,SDSS J231904.77-082906.3,SDSS J231904.78-082906.3;;; +NGC7607;**;23:18:59.24;+11:20:30.2;Peg;;;;;;;;;;;;;;;;1480;;;;; +NGC7608;G;23:19:15.33;+08:21:00.5;Peg;1.43;0.39;19;15.20;;11.69;10.97;10.73;23.57;Sbc;;;;;;;;2MASX J23191533+0821005,MCG +01-59-044,PGC 071055,UGC 12500;;; +NGC7609;GPair;23:19:30.50;+09:30:19.0;Peg;1.10;;;;;;;;;;;;;;;;;MCG +01-59-047;;;Diameter of the group inferred by the author. +NGC7609 NED01;G;23:19:30.05;+09:30:29.6;Peg;1.17;0.87;88;15.23;14.29;11.51;10.94;10.55;24.10;E;;;;;;;;2MASX J23193006+0930295,MCG +01-59-047 NED01,PGC 071076;;; +NGC7609 NED02;G;23:19:31.09;+09:30:10.7;Peg;0.74;0.34;26;17.23;16.14;13.03;12.47;11.84;23.61;Sm;;;;;;;;2MASX J23193107+0930105,MCG +01-59-047 NED02,PGC 071077,SDSS J231931.14+093009.7;;; +NGC7610;G;23:19:41.37;+10:11:06.0;Peg;2.17;0.90;79;14.90;;11.95;11.27;11.03;23.22;SABc;;;;;7616;;;2MASX J23194136+1011059,IRAS 23171+0954,MCG +02-59-025,PGC 071087,UGC 12511;;Identification as NGC 7616 is very doubtful.; +NGC7611;G;23:19:36.60;+08:03:47.7;Psc;1.70;0.79;139;14.00;;10.27;9.62;9.32;23.35;S0-a;;;;;;;;2MASX J23193662+0803475,MCG +01-59-049,PGC 071083,UGC 12509;;; +NGC7612;G;23:19:44.20;+08:34:35.0;Peg;1.63;0.72;3;14.30;;10.43;9.75;9.48;23.52;S0;;;;;;;;2MASX J23194420+0834349,MCG +01-59-050,PGC 071089,UGC 12512;;; +NGC7613;Other;23:19:51.76;+00:11:55.9;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7614;Other;23:19:51.76;+00:11:55.9;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7615;G;23:19:54.44;+08:23:57.9;Peg;0.83;0.29;143;15.30;;12.39;11.60;11.49;22.77;Sb;;;;;;;;2MASX J23195444+0823579,MCG +01-59-051,PGC 071097;;; +NGC7616;Dup;23:19:41.37;+10:11:06.0;Peg;;;;;;;;;;;;;;;7610;;;;;; +NGC7617;G;23:20:08.97;+08:09:56.8;Peg;0.94;0.63;20;15.10;;11.47;10.69;10.39;23.47;S0;;;;;;;;2MASX J23200893+0809566,MCG +01-59-051a,PGC 071113,UGC 12523 NOTES01;;; +NGC7618;G;23:19:47.22;+42:51:09.5;And;1.23;0.99;5;14.30;;10.11;9.34;9.04;23.57;E;;;;;;;;2MASX J23194721+4251096,MCG +07-47-013,PGC 071090,UGC 12516;;; +NGC7619;G;23:20:14.53;+08:12:22.5;Peg;2.53;1.97;30;12.70;;8.99;8.36;8.03;22.99;E;;;;;;;;2MASX J23201452+0812226,MCG +01-59-052,PGC 071121,SDSS J232014.51+081222.4,UGC 12523;;; +NGC7620;G;23:20:05.68;+24:13:16.1;Peg;0.94;0.91;105;13.50;;11.32;10.68;10.32;22.23;Sc;;;;;;;;2MASX J23200566+2413160,IRAS 23176+2356,PGC 071106,UGC 12520;;; +NGC7621;G;23:20:24.62;+08:21:58.7;Peg;0.68;0.18;175;15.50;;12.68;12.01;12.00;23.48;;;;;;;;;2MASX J23202463+0821586,MCG +01-59-055,PGC 071129;;; +NGC7622;G;23:21:38.53;-62:07:03.9;Tuc;1.35;0.43;61;14.46;;11.37;10.68;10.51;23.80;E-S0;;;;;;;;2MASX J23213853-6207040,ESO 148-008,ESO-LV 148-0080,PGC 071187;;; +NGC7623;G;23:20:30.02;+08:23:44.9;Peg;1.34;0.95;180;13.90;;10.45;9.75;9.46;23.22;S0;;;;;;;;2MASX J23202996+0823446,MCG +01-59-056,PGC 071132,UGC 12526;;; +NGC7624;G;23:20:22.61;+27:18:56.5;Peg;1.30;0.88;31;13.70;;10.86;10.17;9.88;22.79;SABc;;;;;;;;2MASX J23202263+2718566,IRAS 23179+2702,MCG +04-55-004,PGC 071126,SDSS J232022.60+271856.0,UGC 12527;;; +NGC7625;G;23:20:30.13;+17:13:32.0;Peg;1.48;1.43;35;13.23;11.98;9.90;9.20;8.87;22.51;Sa;;;;;;;;2MASX J23203013+1713321,IRAS 23179+1657,MCG +03-59-038,PGC 071133,UGC 12529;;; +NGC7626;G;23:20:42.55;+08:13:01.1;Peg;2.50;2.10;21;12.80;;9.00;8.27;8.03;23.04;E;;;;;;;;2MASX J23204252+0813014,MCG +01-59-057,PGC 071140,UGC 12531;;One of two 6cm sources associated with [WB92] 2318+0756; +NGC7627;G;23:22:30.93;+11:53:33.2;Peg;1.47;0.46;138;15.20;;11.25;10.41;10.09;24.14;Sa;;;;;7641;;;2MASX J23223093+1153332,2MASX J23223215+1153235,MCG +02-59-029,PGC 071241,UGC 12556;;; +NGC7628;G;23:20:54.88;+25:53:54.8;Peg;1.36;1.09;123;13.80;;10.69;10.04;9.76;23.38;E;;;;;;;;2MASX J23205486+2553548,MCG +04-55-005,PGC 071153,UGC 12534;;; +NGC7629;G;23:21:19.37;+01:24:11.3;Psc;0.94;0.61;179;15.20;;11.59;10.85;10.57;23.60;S0;;;;;;;;2MASX J23211938+0124109,MCG +00-59-031,PGC 071175;;; +NGC7630;G;23:21:16.31;+11:23:50.4;Peg;0.89;0.33;163;15.20;;12.04;11.35;11.07;23.27;Sb;;;;;;;;2MASX J23211630+1123504,MCG +02-59-027,PGC 071176,UGC 12540;;; +NGC7631;G;23:21:26.67;+08:13:03.5;Peg;1.86;0.83;78;13.80;;10.82;10.23;9.92;23.42;Sb;;;;;;;;2MASX J23212667+0813034,MCG +01-59-060,PGC 071181,UGC 12539;;; +NGC7632;G;23:22:00.90;-42:28:49.8;Gru;2.56;1.29;96;13.14;;10.09;9.38;9.16;23.76;S0;;;;;;5313;;2MASX J23220089-4228496,ESO 291-021,ESO-LV 291-0210,IRAS 23192-4245,MCG -07-47-035,PGC 071213;;; +NGC7633;G;23:23:03.30;-67:39:13.4;Ind;2.20;1.34;85;13.43;;10.17;9.45;9.29;23.98;S0-a;;;;;;;;2MASX J23230326-6739135,ESO 077-015,ESO-LV 77-0150,PGC 071274;;; +NGC7634;G;23:21:41.76;+08:53:12.9;Peg;1.21;0.88;97;13.70;;10.59;9.92;9.61;22.75;S0;;;;;;;;2MASX J23214177+0853129,MCG +01-59-062,PGC 071192,SDSS J232141.75+085312.7,UGC 12542;;; +NGC7635;HII;23:20:45.60;+61:12:44.5;Cas;15.00;8.00;;11.00;;;;;;;;;;;;;;C 011,LBN 548;Bubble Nebula;;B-Mag taken from LEDA +NGC7636;G;23:22:32.96;-29:16:50.5;Scl;1.03;0.42;31;14.70;;11.59;10.87;10.67;23.61;S0;;;;;;;;2MASX J23223294-2916507,ESO 470-002,ESO-LV 470-0020,MCG -05-55-005,PGC 071245;;; +NGC7637;G;23:26:27.66;-81:54:41.7;Oct;2.08;1.83;5;13.24;;10.59;9.91;9.67;23.42;Sc;;;;;;;;2MASX J23262765-8154417,ESO 012-001,ESO-LV 12-0010,IRAS 23226-8211,PGC 071440;;; +NGC7638;GPair;23:22:33.12;+11:19:43.7;Peg;0.65;0.46;175;15.50;;;;;23.39;;;;;;;1483;;IRAS 23200+1103,MCG +02-59-030,PGC 071242;;; +NGC7639;G;23:22:48.23;+11:22:22.3;Peg;0.74;0.55;141;15.60;;11.93;10.92;10.47;24.05;E;;;;;;1485;;2MASX J23224821+1122225,PGC 071256;;; +NGC7640;G;23:22:06.58;+40:50:43.5;And;8.09;1.67;167;11.60;;9.48;8.83;8.60;23.61;Sc;;;;;;;;2MASX J23220658+4050435,IRAS 23197+4034,MCG +07-48-002,PGC 071220,UGC 12554;;; +NGC7641;Dup;23:22:30.93;+11:53:33.2;Peg;;;;;;;;;;;;;;;7627;;;;;; +NGC7642;G;23:22:53.40;+01:26:34.0;Psc;0.49;0.45;65;14.50;;12.80;12.18;11.95;22.04;Sa;;;;;;;;2MASX J23225340+0126338,MCG +00-59-035,PGC 071264,UGC 12560;;; +NGC7643;G;23:22:50.40;+11:59:19.8;Peg;1.47;0.81;44;14.80;;11.02;10.31;10.04;23.33;Sab;;;;;7644;;;2MASX J23225040+1159195,MCG +02-59-033,PGC 071261,UGC 12563;;"Identification as NGC 7644 is doubtful; N7644 may be NGC 7651."; +NGC7644;Dup;23:22:50.40;+11:59:19.8;Peg;;;;;;;;;;;;;;;7643;;;;;; +NGC7645;G;23:23:47.29;-29:23:16.9;Scl;1.58;1.08;1;13.80;;11.24;10.54;10.25;23.20;SBc;;;;;;;;2MASX J23234727-2923170,ESO 470-003,ESO-LV 470-0030,MCG -05-55-007,PGC 071314;;; +NGC7646;G;23:24:06.96;-11:51:38.5;Aqr;0.97;0.54;135;13.93;;11.28;10.64;10.36;22.19;SBc;;;;;;5318;;2MASX J23240695-1151386,IRAS 23215-1208,MCG -02-59-015,PGC 071338;;Identification as NGC 7646 is not certain.; +NGC7647;G;23:23:57.43;+16:46:38.2;Peg;1.81;0.91;176;14.61;14.45;10.97;10.25;10.00;24.10;E;;;;;;;;2MASX J23235741+1646379,MCG +03-59-055,PGC 071325,PGC 071335,SDSS J232357.43+164638.0,UGC 12576;;; +NGC7648;G;23:23:54.02;+09:40:02.9;Peg;1.56;0.98;84;13.50;;10.72;10.01;9.70;23.44;S0;;;;;;1486;;2MASX J23235403+0940028,IRAS 23213+0923,MCG +01-59-072,PGC 071321,UGC 12575;;; +NGC7649;G;23:24:20.09;+14:38:49.7;Peg;1.63;1.03;76;15.65;;11.06;10.33;10.02;25.25;E;;;;;;1487;;2MASX J23242006+1438492,MCG +02-59-035,PGC 071343,SDSS J232420.08+143849.6,UGC 12579;;; +NGC7650;G;23:25:21.45;-57:47:28.9;Tuc;1.44;0.58;149;13.44;;11.32;10.81;10.59;21.93;SBc;;;;;;;;2MASX J23252146-5747287,ESO 148-010,ESO-LV 148-0100,IRAS 23225-5803,PGC 071394,TYC 8838-275-1;;; +NGC7651;GPair;23:24:25.80;+13:58:12.0;Peg;1.10;;;;;;;;;;;;;;;;;MCG +02-59-036;;;Diameter of the group inferred by the author. +NGC7651 NED01;G;23:24:25.97;+13:58:20.2;Peg;1.26;1.12;120;15.00;;11.25;10.49;10.18;23.87;E;;;;;;;;2MASX J23242598+1358202,MCG +02-59-036 NED01,PGC 071353,SDSS J232425.97+135820.1,SDSS J232425.97+135820.2;;; +NGC7651 NED02;G;23:24:25.67;+13:58:01.6;Peg;0.48;0.41;50;15.83;;;;;23.32;;;;;;;;;MCG +02-59-036 NED02,PGC 3085862,SDSS J232425.66+135801.5;;;B-Mag taken from LEDA +NGC7652;G;23:25:37.43;-57:53:14.6;Tuc;1.20;0.77;92;14.52;;11.49;10.80;10.61;23.45;Sa;;;;;;;;2MASX J23253759-5753148,ESO 148-011,ESO-LV 148-0110,PGC 071402;;; +NGC7653;G;23:24:49.36;+15:16:32.1;Peg;1.62;1.40;172;12.06;11.91;10.71;10.03;9.75;23.11;Sb;;;;;;;;2MASX J23244935+1516321,IRAS 23223+1500,MCG +02-59-038,PGC 071370,SDSS J232449.35+151632.1,TYC 1713-1515-1,UGC 12586;;; +NGC7654;OCl;23:24:48.40;+61:35:35.4;Cas;9.90;;;;6.90;;;;;;;;;052;;;;MWSC 3725;;;V-mag taken from LEDA +NGC7655;G;23:26:45.94;-68:01:39.1;Tuc;0.76;0.66;78;14.20;;11.00;10.31;10.18;22.36;S0;;;;;;;;2MASX J23264591-6801387,ESO 077-018,ESO-LV 77-0180,PGC 071452;;; +NGC7656;G;23:24:31.41;-19:03:32.6;Aqr;0.97;0.33;34;14.36;;11.46;10.69;10.67;23.20;S0;;;;;;;;2MASX J23243143-1903329,ESO 605-005,ESO-LV 605-0050,MCG -03-59-008,PGC 071357;;; +NGC7657;G;23:26:47.51;-57:48:20.7;Phe;1.46;0.37;110;14.74;;13.29;13.08;12.68;23.32;Sd;;;;;;;;2MASX J23264751-5748209,ESO 148-012,ESO-LV 148-0120,PGC 071456;;Confused HIPASS source; +NGC7658A;G;23:26:24.67;-39:12:57.5;Scl;0.67;0.36;136;15.27;;12.48;11.76;11.39;23.18;S0;;;;;;;;2MASX J23262466-3912576,ESO 347-015,ESO-LV 347-0150,MCG -07-48-003,PGC 071433;;; +NGC7658B;G;23:26:24.85;-39:13:35.8;Scl;1.00;0.38;128;14.95;14.52;11.90;11.24;10.97;23.58;S0-a;;;;;;;;2MASX J23262482-3913357,ESO 347-016,ESO-LV 347-0160,MCG -07-48-002,PGC 071432;;; +NGC7659;G;23:25:55.68;+14:12:35.4;Peg;0.99;0.37;109;15.10;;11.00;10.32;10.13;23.17;S0-a;;;;;;;;2MASX J23255568+1412352,HD ,MCG +02-59-040,PGC 071417,SDSS J232555.68+141235.3,UGC 12595;;; +NGC7660;G;23:25:48.66;+27:01:47.6;Peg;1.94;0.66;26;13.90;;10.43;9.69;9.45;23.98;E;;;;;;;;2MASX J23254867+2701478,MCG +04-55-012,PGC 071413,UGC 12594;;; +NGC7661;G;23:27:14.29;-65:16:13.5;Tuc;1.84;1.18;26;14.11;;;;;23.76;SBc;;;;;;;;ESO 110-011,ESO-LV 110-0110,PGC 071473;;; +NGC7662;PN;23:25:53.90;+42:32:05.8;And;0.28;;;9.20;8.30;;;;;;;13.60;13.20;;;;BD +41 4773,HD 220733;2MASX J23255415+4232111,C 022,IRAS 23234+4215,PN G106.5-17.6;Copeland's Blue Snowball;; +NGC7663;G;23:26:45.22;-04:58:00.0;Aqr;0.39;0.27;2;15.40;;;;;23.75;I;;;;;;;;MCG -01-59-023,PGC 071455,SDSS J232645.16-045758.2;;"Identification as NGC 7663 is doubtful; N7663 may be MCG -01-59-022."; +NGC7664;G;23:26:39.76;+25:04:48.5;Peg;1.52;0.95;88;13.30;;10.70;9.98;9.69;22.68;Sc;;;;;;;;2MASX J23263974+2504483,IRAS 23241+2448,MCG +04-55-013,PGC 071450,UGC 12598;;; +NGC7665;G;23:27:14.80;-09:23:13.2;Aqr;0.76;0.72;15;13.00;;11.97;11.33;11.15;22.32;SBm;;;;;;;;2MASX J23271483-0923129,IRAS 23246-0939,MCG -02-59-019,PGC 071474,SDSS J232714.80-092313.0,SDSS J232714.80-092313.1,SDSS J232714.80-092313.2,SDSS J232714.81-092313.2;;; +NGC7666;Other;23:27:24.51;-04:11:10.7;Aqr;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7667;Other;23:27:22.82;-00:11:10.7;Psc;;;;;;;;;;;;;;;;;;;;Nothing at NGC position. Often misidentified with UGC 12578.; +NGC7668;Other;23:27:21.82;-00:11:28.7;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7669;Other;23:27:21.82;-00:11:28.7;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7670;Other;23:27:21.82;-00:11:28.7;Psc;;;;;;;;;;;;;;;;;;;;Nothing at this position.; +NGC7671;G;23:27:19.34;+12:28:02.7;Peg;1.39;0.74;137;14.30;;10.30;9.53;9.30;23.22;S0;;;;;;;;2MASX J23271932+1228025,MCG +02-59-044,PGC 071478,UGC 12602;;; +NGC7672;G;23:27:31.44;+12:23:06.7;Peg;0.85;0.64;60;15.05;14.21;11.87;11.16;10.93;22.92;Sb;;;;;;;;2MASX J23273143+1223065,IRAS 23249+1206,MCG +02-59-045,PGC 071485;;; +NGC7673;G;23:27:41.02;+23:35:20.5;Peg;1.04;0.43;123;13.17;12.76;11.51;10.90;10.73;21.31;Sc;;;;;;;;2MASX J23274105+2335201,IRAS 23252+2318,MCG +04-55-014,PGC 071493,UGC 12607;;The position in 1993AJ....106..390W refers to a knot or superposed star.; +NGC7674;G;23:27:56.72;+08:46:44.5;Peg;1.12;1.01;165;13.92;13.23;10.92;10.22;9.79;22.88;SBbc;;;;;;;;2MASX J23275670+0846443,IRAS 23254+0830,MCG +01-59-080,PGC 071504,UGC 12608;;Called 'NGC 7675'in MCG.; +NGC7675;G;23:28:05.92;+08:46:06.9;Peg;0.75;0.48;43;14.80;;11.41;10.53;10.39;23.89;E-S0;;;;;;;;2MASX J23280594+0846073,MCG +01-59-083,PGC 071518,UGC 12608 NOTES02;;Called 'NGC 7674' in MCG.; +NGC7676;G;23:29:01.72;-59:43:00.0;Tuc;2.07;0.65;86;13.37;;10.32;9.65;9.40;23.78;E-S0;;;;;;;;2MASX J23290173-5943001,ESO 148-016,ESO-LV 148-0160,PGC 071564;;; +NGC7677;G;23:28:06.12;+23:31:53.0;Peg;1.13;0.61;29;13.93;13.19;11.32;10.62;10.26;22.46;SABb;;;;;;;;2MASX J23280624+2331531,IRAS 23256+2315,MCG +04-55-015,PGC 071517,UGC 12610;;; +NGC7678;G;23:28:27.90;+22:25:16.3;Peg;2.00;1.47;17;15.30;;9.94;9.56;9.13;22.49;Sc;;;;;;;;2MASX J23282789+2225162,IRAS 23259+2208,MCG +04-55-017,PGC 071534,SDSS J232827.87+222516.4,UGC 12614;;Position given in 1990PNAOJ...1..181T refers to the southern arm.; +NGC7679;G;23:28:46.70;+03:30:41.3;Psc;1.23;0.78;86;13.20;;10.98;10.33;10.02;22.53;S0-a;;;;;;;;2MASX J23284666+0330409,IRAS 23262+0314,MCG +00-59-046,PGC 071554,UGC 12618;;; +NGC7680;G;23:28:35.10;+32:24:56.6;Peg;1.67;1.67;45;13.50;;10.11;9.35;9.09;23.53;E-S0;;;;;;;;2MASX J23283508+3224565,MCG +05-55-023,PGC 071541,UGC 12616;;; +NGC7681;G;23:28:54.89;+17:18:34.7;Peg;1.44;0.67;63;14.20;;10.17;9.49;9.22;25.07;S0;;;;;;;;2MASX J23285489+1718351,MCG +03-59-063,PGC 071558,UGC 12620;;; +NGC7682;G;23:29:03.93;+03:32:00.0;Psc;1.15;1.07;160;14.30;;11.14;10.48;10.20;23.00;Sab;;;;;;;;2MASX J23290389+0332000,MCG +00-59-047,PGC 071566,UGC 12622;;; +NGC7683;G;23:29:03.82;+11:26:42.6;Peg;1.97;0.94;140;14.60;;10.15;9.47;9.20;23.78;S0;;;;;;;;2MASX J23290380+1126423,MCG +02-59-048,PGC 071565,UGC 12623;;; +NGC7684;G;23:30:32.04;+00:04:51.8;Psc;1.58;0.46;18;14.57;;10.72;10.04;9.82;23.86;S0-a;;;;;;;;2MASX J23303202+0004520,MCG +00-59-050,PGC 071625,SDSS J233032.03+000451.7,SDSS J233032.03+000451.8,SDSS J233032.04+000451.8,UGC 12637;;; +NGC7685;G;23:30:33.50;+03:54:05.7;Psc;1.67;1.21;174;15.00;;11.48;10.63;10.27;23.54;SABc;;;;;;;;2MASX J23303350+0354057,IRAS 23279+0337,MCG +01-59-087,PGC 071628,UGC 12638;;; +NGC7686;OCl;23:30:07.38;+49:08:02.8;And;3.60;;;6.79;5.60;;;;;;;;;;;;;MWSC 3734;;; +NGC7687;G;23:30:54.45;+03:32:47.8;Psc;1.09;0.94;88;14.90;;11.02;10.30;10.00;23.78;S0;;;;;;;;2MASX J23305444+0332473,MCG +00-59-051,PGC 071635;;; +NGC7688;G;23:31:05.50;+21:24:41.5;Peg;0.94;0.67;95;15.40;;11.57;10.86;10.58;23.89;S0;;;;;;;;2MASX J23310424+2124232,2MASX J23310547+2124412,PGC 071648;;; +NGC7689;G;23:33:16.73;-54:05:40.1;Phe;3.10;1.97;141;12.14;;10.20;9.41;9.06;22.95;SABc;;;;;;;;2MASX J23331672-5405401,ESO 192-007,ESO-LV 192-0070,IRAS 23305-5422,PGC 071729;;; +NGC7690;G;23:33:02.56;-51:41:54.1;Phe;2.16;0.85;130;12.93;12.01;10.34;9.67;9.49;22.70;Sb;;;;;;;;2MASX J23330254-5141541,ESO 240-006,ESO-LV 240-0060,IRAS 23303-5158,PGC 071716;;; +NGC7691;G;23:32:24.42;+15:50:52.2;Peg;1.67;1.35;161;14.20;;11.20;10.62;10.24;23.70;Sbc;;;;;;;;2MASX J23322441+1550520,IRAS 23299+1534,MCG +03-60-001,PGC 071699,SDSS J233224.41+155052.2,SDSS J233224.42+155052.2,UGC 12654;;; +NGC7692;G;23:32:46.76;-05:35:48.8;Aqr;0.50;0.42;77;15.00;;;;;22.32;I;;;;;;;;2MASX J23324675-0535489,IRAS 23302-0552,MCG -01-60-003,PGC 071712;;; +NGC7693;G;23:33:10.51;-01:17:30.7;Psc;0.82;0.51;171;14.70;;11.97;11.34;11.18;22.96;S0-a;;;;;;;;2MASX J23331048-0117312,MCG +00-60-003,PGC 071720;;; +NGC7694;G;23:33:15.77;-02:42:10.4;Psc;1.37;0.75;92;14.00;;11.69;11.17;10.79;22.87;I;;;;;;;;2MASX J23331576-0242102,IRAS 23306-0259,MCG -01-60-004,PGC 071728;;; +NGC7695;G;23:33:15.00;-02:43:12.7;Psc;0.56;0.33;68;16.50;;13.45;13.17;12.37;23.18;S?;;;;;;;;2MASX J23331502-0243122,PGC 071726;;; +NGC7696;G;23:33:50.11;+04:52:14.9;Psc;0.76;0.42;100;14.80;;11.84;11.14;10.88;22.74;S0-a;;;;;;;;2MASX J23335010+0452150,IRAS 23312+0435,MCG +01-60-004,PGC 071757;;; +NGC7697;G;23:34:52.98;-65:23:45.7;Tuc;1.68;0.37;86;14.33;;11.79;11.10;10.77;23.16;Sb;;;;;;5333;;2MASX J23345299-6523454,ESO 110-012,ESO-LV 110-0120,IRAS 23320-6540,PGC 071800;;The APMUKS position is east of the nucleus.; +NGC7698;G;23:34:01.58;+24:56:40.6;Peg;1.05;0.84;171;14.50;;11.19;10.46;10.11;23.50;S0;;;;;;;;2MASX J23340153+2456403,MCG +04-55-029,PGC 071762,UGC 12668;;; +NGC7699;G;23:34:27.03;-02:53:58.0;Psc;0.69;0.39;97;15.73;;12.86;12.27;11.93;23.34;Sa;;;;;;;;2MASX J23342701-0253582,PGC 071782;;; +NGC7700;G;23:34:30.29;-02:57:13.2;Psc;2.04;0.38;155;14.50;;11.39;10.68;10.35;24.97;S0-a;;;;;;;;2MASX J23343029-0257132,MCG -01-60-006,PGC 071777;;; +NGC7701;G;23:34:31.50;-02:51:15.4;Psc;1.24;0.83;8;14.00;;10.82;10.12;9.84;23.50;S0-a;;;;;;;;2MASX J23343148-0251152,MCG -01-60-007,PGC 071779;;; +NGC7702;G;23:35:28.88;-56:00:44.2;Phe;2.15;1.05;118;12.97;12.22;9.92;9.23;9.00;23.41;S0-a;;;;;;;;2MASX J23352887-5600439,ESO 192-009,ESO-LV 192-0090,PGC 071829;;; +NGC7703;G;23:34:46.87;+16:04:32.8;Peg;2.24;0.42;145;14.80;;10.98;10.27;9.98;24.97;S0;;;;;;;;2MASX J23344687+1604330,MCG +03-60-004,PGC 071797,UGC 12676;;; +NGC7704;G;23:35:01.03;+04:53:51.1;Psc;1.10;0.84;71;14.80;;11.07;10.35;10.03;23.90;E-S0;;;;;;;;2MASX J23350103+0453520,MCG +01-60-005,PGC 071810,SDSS J233501.05+045351.5,UGC 12684;;; +NGC7705;G;23:35:02.52;+04:48:13.7;Psc;0.58;0.42;105;15.40;;12.24;11.57;11.07;23.05;S0;;;;;;;;2MASX J23350250+0448130,PGC 071811;;; +NGC7706;G;23:35:10.45;+04:57:51.1;Psc;1.13;0.89;123;14.60;;11.29;10.43;10.29;23.55;S0;;;;;;;;2MASX J23351046+0457511,MCG +01-60-006,PGC 071817,UGC 12686;;; +NGC7707;G;23:34:51.40;+44:18:14.6;And;1.35;1.01;20;14.80;;10.68;10.01;9.77;23.94;E-S0;;;;;;;;2MASX J23345141+4418141,MCG +07-48-012,PGC 071798,UGC 12683;;; +NGC7708;OCl;23:35:01.46;+72:49:59.4;Cep;5.10;;;;;;;;;;;;;;;;;MWSC 3745;;; +NGC7709;G;23:35:27.47;-16:42:18.3;Aqr;2.22;0.37;69;13.90;;11.51;10.73;10.67;23.94;S0;;;;;;;;2MASX J23352748-1642183,IRAS 23328-1658,MCG -03-60-002,PGC 071828;;; +NGC7710;G;23:35:46.14;-02:52:51.3;Psc;1.18;0.52;134;15.00;;11.54;10.86;10.68;23.80;S0;;;;;;;;2MASX J23354614-0252513,MCG -01-60-010,PGC 071844;;; +NGC7711;G;23:35:39.37;+15:18:07.1;Peg;2.43;0.94;93;14.00;;10.00;8.89;8.91;23.70;S0;;;;;;;;2MASX J23353940+1518077,MCG +02-60-004,PGC 071836,SDSS J233539.37+151807.1,UGC 12691;;; +NGC7712;G;23:35:51.64;+23:37:07.5;Peg;0.90;0.71;109;13.70;;11.44;10.82;10.49;22.28;Sc;;;;;;;;2MASX J23355164+2337075,IRAS 23333+2320,MCG +04-55-030,PGC 071850,UGC 12694;;; +NGC7713;G;23:36:14.99;-37:56:17.1;Scl;4.91;2.13;170;11.63;;9.99;9.22;9.20;22.97;Scd;;;;;;;;2MASX J23361515-3756221,ESO 347-028,ESO-LV 347-0280,MCG -06-51-013,PGC 071866;;; +NGC7713A;G;23:37:08.29;-37:42:50.9;Scl;1.59;1.26;81;13.30;;11.22;10.94;10.55;22.73;Sc;;;;;;;;2MASX J23370828-3742509,ESO 347-030,ESO-LV 347-0300,MCG -06-51-014,PGC 071910,PGC 071912;;; +NGC7714;G;23:36:14.10;+02:09:18.6;Psc;2.18;1.58;8;14.91;14.36;10.77;10.15;9.76;23.18;Sb;;;;;;;;2MASX J23361409+0209180,IRAS 23336+0152,MCG +00-60-017,PGC 071868,UGC 12699;;; +NGC7715;G;23:36:22.14;+02:09:23.5;Psc;2.06;0.39;79;11.81;12.14;12.98;12.54;12.44;23.55;I;;;;;;;;2MASX J23362176+0209252,2MASX J23362210+0209240,MCG +00-60-018,PGC 071878,UGC 12700;;; +NGC7716;G;23:36:31.45;+00:17:50.2;Psc;1.83;1.27;34;12.90;;10.24;9.59;9.31;22.75;Sb;;;;;;;;2MASX J23363145+0017503,IRAS 23339+0001,MCG +00-60-019,PGC 071883,SDSS J233631.45+001750.1,SDSS J233631.49+001749.9,UGC 12702;;; +NGC7717;G;23:37:43.67;-15:07:06.6;Aqr;1.71;1.33;5;13.00;;10.67;10.09;9.79;23.72;S0-a;;;;;;;;2MASX J23374368-1507065,MCG -03-60-008,PGC 071941;;; +NGC7718;G;23:38:05.01;+25:43:11.0;Peg;1.03;0.75;153;15.20;;11.76;11.08;10.69;23.72;Sab;;;;;;;;2MASX J23380501+2543108,MCG +04-55-034,PGC 071959,UGC 12712;;; +NGC7719;G;23:38:02.57;-22:58:27.9;Aqr;0.90;0.51;51;15.12;;12.34;11.77;11.52;23.24;Sab;;;;;;;;2MASX J23380256-2258280,ESO 536-012,IRAS 23354-2315,PGC 071961;;; +NGC7720;GPair;23:38:29.39;+27:01:53.2;Peg;1.20;;;;;;;;;;;;;;;;;MCG +04-55-036,UGC 12716;;;Diameter of the group inferred by the author. +NGC7720 NED01;G;23:38:29.40;+27:01:53.3;Peg;1.51;1.26;25;13.90;13.30;10.29;9.57;9.28;23.21;E;;;;;;;;2MASX J23382938+2701526,MCG +04-55-036 NED01,PGC 071985,UGC 12716 NED01;;; +NGC7720A;G;23:38:29.54;+27:02:05.1;Peg;0.68;0.66;;13.90;;;;;;E;;;;;;;;MCG +04-55-036 NED02,PGC 085570,UGC 12716 NED02;;; +NGC7721;G;23:38:48.65;-06:31:04.3;Aqr;3.08;0.77;16;12.40;;9.53;8.88;8.68;22.33;Sc;;;;;;;;2MASX J23384864-0631043,IRAS 23362-0647,MCG -01-60-017,PGC 072001,SDSS J233848.66-063103.9;;HOLM 812B is a star.; +NGC7722;G;23:38:41.20;+15:57:16.7;Peg;2.11;1.60;148;13.70;;9.88;9.13;8.83;23.70;S0-a;;;;;;;;2MASX J23384119+1557174,IRAS 23361+1540,MCG +03-60-017,PGC 071993,SDSS J233841.20+155716.6,SDSS J233841.21+155716.7,UGC 12718;;; +NGC7723;G;23:38:57.08;-12:57:39.9;Aqr;3.29;2.32;55;11.00;;9.17;8.61;8.28;23.00;SBb;;;;;;;;2MASX J23385709-1257396,IRAS 23363-1314,MCG -02-60-005,PGC 072009;;; +NGC7724;G;23:39:07.16;-12:13:26.6;Aqr;1.47;1.00;45;13.00;;11.15;10.72;10.12;23.02;SBb;;;;;;;;2MASX J23390716-1213266,MCG -02-60-006,PGC 072015;;; +NGC7725;G;23:39:14.78;-04:32:21.8;Aqr;0.86;0.74;96;15.00;;11.67;11.02;10.70;23.16;S0;;;;;;;;2MASX J23391478-0432219,IRAS 23367-0448,MCG -01-60-018,PGC 072025;;; +NGC7726;G;23:39:11.91;+27:06:55.2;Peg;1.36;0.56;64;15.00;;12.03;11.23;10.96;23.83;Sb;;;;;;;;2MASX J23391190+2706550,MCG +04-55-040,PGC 072024,UGC 12721;;NGC identification is not certain.; +NGC7727;G;23:39:53.72;-12:17:34.0;Aqr;3.61;2.75;27;11.00;;8.55;7.97;7.69;22.97;SABa;;;;;;;;2MASX J23395386-1217348,MCG -02-60-008,PGC 072060;;; +NGC7728;G;23:40:00.84;+27:08:01.4;Peg;1.42;1.14;78;14.30;;10.51;9.77;9.45;23.69;E;;;;;;;;2MASX J23400080+2708014,MCG +04-55-041,PGC 072064,UGC 12727;;; +NGC7729;G;23:40:33.65;+29:11:17.4;Peg;1.69;0.57;7;14.60;;10.78;10.00;9.78;23.83;SABa;;;;;;;;2MASX J23403364+2911172,MCG +05-55-046,PGC 072083,UGC 12730;;; +NGC7730;G;23:40:45.95;-20:30:31.7;Aqr;0.76;0.29;135;14.82;14.42;12.35;11.61;11.26;22.53;SBbc;;;;;;;;2MASX J23404596-2030315,ESO 606-002,ESO-LV 606-0020,IRAS 23381-2047,MCG -04-55-022,PGC 072094;;Identification as NGC 7730 is not certain.; +NGC7731;G;23:41:29.07;+03:44:24.1;Psc;1.05;0.77;79;14.30;;11.55;10.77;10.64;22.97;SBa;;;;;;;;2MASX J23412911+0344238,MCG +00-60-034,PGC 072128,UGC 12737;;; +NGC7732;G;23:41:33.87;+03:43:29.8;Psc;1.49;0.47;92;14.50;;12.35;11.02;10.79;22.96;Scd;;;;;;;;2MASX J23413385+0343298,IRAS 23390+0326,MCG +00-60-035,PGC 072131,UGC 12738;;; +NGC7733;G;23:42:32.95;-65:57:23.4;Tuc;1.26;0.60;104;14.49;;11.95;11.26;10.93;23.01;SBb;;;;;;;;2MASX J23423294-6557234,ESO 078-001,ESO 110-022,ESO-LV 110-0220,PGC 072177;;; +NGC7734;G;23:42:42.93;-65:56:40.7;Tuc;1.40;1.00;144;13.95;;11.04;10.43;10.05;23.10;SBb;;;;;;;;2MASX J23424291-6556405,ESO 078-002,ESO 110-023,ESO-LV 110-0230,PGC 072183;;; +NGC7735;G;23:42:17.31;+26:13:54.3;Peg;1.39;1.09;86;14.56;;10.85;10.20;9.85;24.30;E;;;;;;;;2MASX J23421730+2613544,MCG +04-55-046,PGC 072165,UGC 12744;;The 2MASS position is 8 arcsec south of the nucleus.; +NGC7736;G;23:42:25.78;-19:27:08.3;Aqr;1.66;1.50;77;13.65;;10.64;10.02;9.64;23.71;S0;;;;;;;;2MASX J23422578-1927079,ESO 606-005,ESO-LV 606-0050,MCG -03-60-010,PGC 072173;;; +NGC7737;G;23:42:46.41;+27:03:10.6;Peg;1.09;0.46;146;14.80;;11.20;10.47;10.18;23.50;S0-a;;;;;;;;2MASX J23424642+2703107,MCG +04-55-048,PGC 072182,UGC 12745;;; +NGC7738;G;23:44:02.06;+00:30:59.9;Psc;1.19;0.59;55;14.40;;11.07;10.21;9.89;22.95;Sb;;;;;;;;2MASX J23440204+0031003,IRAS 23414+0014,MCG +00-60-038,PGC 072247,SDSS J234402.05+003059.8,SDSS J234402.06+003059.8,UGC 12757;;The NGC identification is very uncertain.; +NGC7739;G;23:44:30.08;+00:19:13.7;Psc;0.76;0.66;92;14.40;;11.07;10.21;9.89;23.33;E;;;;;;;;2MASX J23443008+0019135,PGC 072272,SDSS J234430.07+001913.6,SDSS J234430.08+001913.6,SDSS J234430.08+001913.7;;The NGC identification is very uncertain.; +NGC7740;G;23:43:32.28;+27:18:42.8;Peg;1.08;0.68;140;14.90;;11.49;10.77;10.43;23.79;S0;;;;;;;;2MASX J23433227+2718426,PGC 072216;;; +NGC7741;G;23:43:54.37;+26:04:32.2;Peg;3.63;2.38;158;11.84;11.31;10.34;9.98;9.63;23.00;SBc;;;;;;;;2MASX J23435437+2604320,IRAS 23413+2547,MCG +04-55-050,PGC 072237,UGC 12754;;The 2MASS position is 5 arcsec west of the bar's optical peak.; +NGC7742;G;23:44:15.73;+10:46:01.5;Peg;1.71;1.64;15;12.50;;9.60;8.92;8.63;22.16;Sb;;;;;;;;2MASX J23441571+1046015,IRAS 23417+1029,MCG +02-60-010,PGC 072260,SDSS J234415.75+104601.5,UGC 12760;;; +NGC7743;G;23:44:21.14;+09:56:02.7;Peg;2.61;2.18;86;14.19;13.28;9.33;8.66;8.42;23.22;S0-a;;;;;;;;2MASX J23442113+0956025,IRAS 23417+0939,MCG +02-60-011,PGC 072263,UGC 12759;;; +NGC7744;G;23:44:59.24;-42:54:39.3;Phe;2.48;2.11;109;12.50;11.35;9.23;8.56;8.32;23.52;E-S0;;;;;;5348;;2MASX J23445923-4254391,ESO 292-017,ESO-LV 292-0170,MCG -07-48-017,PGC 072300;;; +NGC7745;G;23:44:45.79;+25:54:32.3;Peg;0.68;0.68;170;;;12.19;11.42;11.04;24.55;;;;;;;;;2MASX J23444576+2554324,MCG +04-56-004,PGC 072299;;; +NGC7746;G;23:45:20.00;-01:41:05.6;Psc;1.16;0.84;164;14.50;;11.10;10.46;10.16;23.49;S0;;;;;;;;2MASX J23452001-0141056,MCG +00-60-043,PGC 072319,UGC 12768;;; +NGC7747;G;23:45:32.25;+27:21:39.4;Peg;1.41;0.54;38;14.50;;11.22;10.55;10.15;23.33;SBb;;;;;;;;2MASX J23453226+2721393,MCG +04-56-005,PGC 072328,UGC 12772;;; +NGC7748;*;23:44:56.67;+69:45:17.5;Cep;;;;7.18;7.15;7.00;7.11;7.07;;;;;;;;;;BD +68 1393,HD 222958,HIP 117146,TYC 4483-1248-1;;; +NGC7749;G;23:45:47.55;-29:31:04.1;Scl;1.75;1.17;33;13.85;;11.05;10.43;9.98;23.99;S0;;;;;;;;2MASX J23454755-2931041,ESO 471-009,ESO-LV 471-0090,MCG -05-56-003,PGC 072338;;; +NGC7750;G;23:46:37.84;+03:47:59.3;Psc;1.50;0.73;175;13.80;;10.97;10.37;10.06;22.51;SBc;;;;;;;;2MASX J23463785+0347591,IRAS 23440+0331,MCG +01-60-034,PGC 072367,UGC 12777;;; +NGC7751;G;23:46:58.34;+06:51:42.5;Psc;1.48;1.45;115;13.90;;10.68;10.00;9.66;23.60;E;;;;;;;;2MASX J23465833+0651424,IRAS 23444+0635,MCG +01-60-035,PGC 072381,UGC 12778;;; +NGC7752;G;23:46:58.56;+29:27:32.1;Peg;0.92;0.46;106;14.30;;12.10;11.51;11.19;22.99;S?;;;;;;;;2MASX J23465855+2927321,MCG +05-56-004,PGC 072382,UGC 12779;;; +NGC7753;G;23:47:04.83;+29:29:00.4;Peg;2.01;0.54;61;13.20;;9.67;8.95;8.61;22.64;SABb;;;;;;;;2MASX J23470483+2929001,MCG +05-56-005,PGC 072387,SDSS J234704.82+292900.4,UGC 12780;;; +NGC7754;G;23:49:11.21;-16:36:02.1;Aqr;0.65;0.32;132;15.00;;;;;;Sa;;;;;;;;2MASX J23491118-1636022,IRAS 23466-1652,MCG -03-60-021,PGC 072511;;; +NGC7755;G;23:47:51.76;-30:31:19.3;Scl;3.70;2.27;27;12.10;11.36;9.92;9.29;8.97;23.63;Sc;;;;;;;;2MASX J23475176-3031195,ESO 471-020,ESO-LV 471-0200,IRAS 23452-3048,MCG -05-56-014,PGC 072444,UGCA 443;;; +NGC7756;*;23:48:28.60;+04:07:30.6;Psc;;;;;;;;;;;;;;;;;;;;Identification as NGC 7756 is not certain.; +NGC7757;G;23:48:45.52;+04:10:16.1;Psc;1.83;1.34;108;13.90;;11.84;11.12;10.91;23.06;SABc;;;;;;;;2MASX J23484552+0410159,IRAS 23461+0353,MCG +01-60-037,PGC 072491,UGC 12788;;HOLM 817B is a double star.; +NGC7758;G;23:48:55.18;-22:01:27.1;Aqr;0.77;0.52;108;15.42;;12.11;11.38;11.16;23.61;E-S0;;;;;;;;2MASX J23485515-2201269,ESO 606-010,ESO-LV 606-0100,PGC 072497;;; +NGC7759;G;23:48:54.70;-16:32:28.2;Aqr;1.53;1.11;103;14.00;;10.70;9.80;9.60;23.61;S0;;;;;;;;2MASX J23485471-1632282,MCG -03-60-018,PGC 072496;;; +NGC7760;G;23:49:11.94;+30:58:59.3;Peg;1.14;1.05;0;14.80;;10.86;10.17;9.89;23.80;E;;;;;;;;2MASX J23491191+3058590,MCG +05-56-008,PGC 072512,UGC 12794;;; +NGC7761;G;23:51:28.89;-13:22:53.7;Aqr;1.23;1.08;68;11.70;;10.65;9.94;9.67;23.27;S0;;;;;;5361;;2MASX J23512890-1322535,IRAS 23488-1339,MCG -02-60-020,PGC 072641;;; +NGC7762;OCl;23:50:01.75;+68:02:16.7;Cep;6.50;;;;;;;;;;;;;;;;;MWSC 3784;;; +NGC7763;G;23:50:15.70;-16:35:24.0;Aqr;0.73;0.39;161;15.41;;11.85;11.22;11.00;23.26;E-S0;;;;;;;;2MASX J23501567-1635236,PGC 072565;;; +NGC7764;G;23:50:53.98;-40:43:41.6;Phe;1.95;1.45;146;12.97;12.30;11.08;10.56;10.31;22.56;SBm;;;;;;;;2MASX J23505397-4043414,ESO 293-004,ESO-LV 293-0040,MCG -07-48-027,PGC 072597;;; +NGC7764A;G;23:53:22.5;-40:48:37;Phe;0.74;0.46;77;15.35;13.19;11.98;11.30;10.86;23.04;Sc;;;;;;;;MCG -07-01-001,PGC 072762;;; +NGC7765;G;23:50:52.16;+27:09:58.6;Peg;0.69;0.54;113;15.70;;12.49;12.02;11.55;23.63;;;;;;;;;2MASX J23505214+2709587,MCG +04-56-015,PGC 072596;;; +NGC7766;G;23:50:55.91;+27:07:34.7;Peg;0.87;0.24;31;15.70;;12.78;12.12;11.77;24.70;;;;;;;;;2MASX J23505589+2707347,MCG +04-56-017,PGC 072611;;; +NGC7767;G;23:50:56.35;+27:05:13.7;Peg;1.10;0.25;141;14.20;;11.66;10.94;10.68;23.17;S0-a;;;;;;;;2MASX J23505634+2705137,MCG +04-56-016,PGC 072601,UGC 12805;;; +NGC7768;G;23:50:58.58;+27:08:50.6;Peg;1.48;0.95;57;14.00;14.23;10.32;9.62;9.34;22.98;E;;;;;;;;2MASX J23505859+2708507,MCG +04-56-018,PGC 072605,SDSS J235058.55+270850.4,UGC 12806;;; +NGC7769;G;23:51:03.97;+20:09:01.5;Peg;1.75;0.67;85;12.77;;9.90;9.21;8.93;21.79;Sb;;;;;7771W;;;2MASX J23510396+2009014,IRAS 23485+1952,MCG +03-60-030,PGC 072615,UGC 12808;;; +NGC7770;G;23:51:22.54;+20:05:47.5;Peg;0.97;0.85;105;14.50;;11.75;11.11;10.75;23.06;S0-a;;;;;7771S;;;2MASX J23512260+2005485,MCG +03-60-034,PGC 072635,UGC 12813;;"Incorrectly noted as a ""double system"" in CGCG."; +NGC7771;G;23:51:24.81;+20:06:42.3;Peg;2.51;1.24;68;13.08;12.25;9.47;8.72;8.35;23.34;Sa;;;;;7771N;;;2MASX J23512488+2006425,IRAS 23488+1949,MCG +03-60-035,PGC 072638,SDSS J235125.02+200641.9,UGC 12815;;; +NGC7772;Other;23:51:45.96;+16:14:53.3;Peg;13.20;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC7773;G;23:52:09.89;+31:16:35.8;Peg;1.10;0.99;50;14.50;;11.37;10.59;10.29;23.33;Sbc;;;;;;;;2MASX J23520987+3116356,IRAS 23496+3059,MCG +05-56-015,PGC 072681,UGC 12820;;; +NGC7774;GPair;23:52:11.20;+11:28:12.0;Peg;1.20;;;;;;;;;;;;;;;;;MCG +02-60-022,UGC 12819;;;Diameter of the group inferred by the author. +NGC7774 NED01;G;23:52:10.69;+11:28:13.1;Peg;1.32;1.20;105;14.60;;10.59;9.92;9.59;23.93;E;;;;;;;;2MASX J23521071+1128132,MCG +02-60-022 NED01,PGC 072679,UGC 12819 NED01;;; +NGC7774 NED02;G;23:52:11.69;+11:28:11.0;Peg;0.91;0.74;;14.60;;;;;;E-S0;;;;;;;;MCG +02-60-022 NED02,PGC 093142,UGC 12819 NED02;;; +NGC7775;G;23:52:24.45;+28:46:21.6;Peg;0.99;0.83;28;13.90;;11.80;11.02;10.77;22.64;SABc;;;;;;;;2MASX J23522445+2846214,IRAS 23498+2829,MCG +05-56-016,PGC 072696,UGC 12821;;Noted in MCG as possibly interacting.; +NGC7776;G;23:54:16.56;-13:35:11.2;Aqr;1.00;0.43;154;15.00;;11.47;10.71;10.42;23.21;Sa;;;;;;1514;;2MASX J23541656-1335110,MCG -02-60-022,PGC 072812;;; +NGC7777;G;23:53:12.50;+28:17:00.4;Peg;1.26;0.66;48;14.50;;10.67;9.97;9.70;23.68;S0;;;;;;;;2MASX J23531248+2817001,MCG +05-56-018,PGC 072744,UGC 12829;;; +NGC7778;G;23:53:19.67;+07:52:15.3;Psc;1.02;0.98;55;13.80;;10.60;9.87;9.63;22.65;E;;;;;;;;2MASX J23531967+0752152,MCG +01-60-043,PGC 072756,UGC 12827;;; +NGC7779;G;23:53:26.79;+07:52:32.4;Psc;1.49;1.07;5;13.60;;10.39;9.70;9.42;23.17;S0-a;;;;;;;;2MASX J23532680+0752322,MCG +01-60-045,PGC 072770,UGC 12831;;; +NGC7780;G;23:53:32.17;+08:07:05.3;Peg;0.99;0.54;0;14.80;;11.48;10.89;10.51;23.17;SABa;;;;;;;;2MASX J23533218+0807052,IRAS 23509+0750,MCG +01-60-046,PGC 072775,SDSS J235332.15+080705.0,UGC 12833;;; +NGC7781;G;23:53:45.98;+07:51:37.7;Psc;1.07;0.25;10;15.20;;11.67;11.01;10.71;23.59;S0-a;;;;;;;;2MASX J23534595+0751377,MCG +01-60-047,PGC 072785;;; +NGC7782;G;23:53:53.89;+07:58:14.0;Psc;2.43;1.41;175;13.20;;10.02;9.32;9.04;23.37;Sb;;;;;;;;2MASX J23535389+0758138,IRAS 23513+0741,MCG +01-60-048,PGC 072788,SDSS J235353.88+075814.1,UGC 12834;;; +NGC7783;GPair;23:54:11.06;+00:22:47.8;Psc;1.90;;;;;;;;;;;;;;;;;UGC 12837;;VV misprints dec as -00d24'.;Diameter of the group inferred by the author. +NGC7783 NED01;G;23:54:10.08;+00:22:58.3;Psc;1.55;0.72;109;14.14;;10.40;9.67;9.73;23.67;S0;;;;;;;;2MASX J23541007+0022587,MCG +00-60-058,PGC 072803,SDSS J235410.07+002258.2,SDSS J235410.07+002258.3,SDSS J235410.08+002258.2,SDSS J235410.08+002258.3,SDSS J235410.09+002258.3,UGC 12837 NED01;;Called 'NGC 7783a'in MCG. Component 'a)' in UGC notes.; +NGC7783 NED02;G;23:54:12.08;+00:22:37.3;Psc;0.83;0.51;153;15.16;;;;;23.33;E-S0;;;;;;;;MCG +00-60-059,PGC 072808,SDSS J235412.07+002237.3,UGC 12837 NED02;;Called 'NGC 7783b'in MCG. Component 'b)' in UGC notes.; +NGC7784;G;23:55:13.67;+21:45:43.8;Peg;0.73;0.58;114;15.50;;11.72;11.07;10.81;23.65;E;;;;;;;;2MASX J23551365+2145438,MCG +04-01-001,PGC 072862;;; +NGC7785;G;23:55:19.03;+05:54:57.0;Psc;1.95;1.09;142;13.00;;9.46;8.77;8.45;22.93;E;;;;;;;;2MASX J23551903+0554571,MCG +01-60-049,PGC 072867,UGC 12841;;; +NGC7786;G;23:55:21.54;+21:35:17.0;Peg;0.56;0.35;7;13.90;;11.59;11.00;10.68;21.49;E;;;;;;;;2MASX J23552154+2135168,IRAS 23528+2118,MCG +03-60-038,PGC 072870,UGC 12842;;; +NGC7787;G;23:56:07.82;+00:32:58.1;Psc;1.09;0.43;95;15.70;;11.95;11.33;11.13;23.99;S0-a;;;;;;;;2MASX J23560780+0032578,IRAS 23535+0016,MCG +00-01-005,PGC 072930,SDSS J235607.81+003258.1,SDSS J235607.82+003258.1,SDSS J235607.82+003258.2,UGC 12849;;; +NGC7788;OCl;23:56:45.58;+61:23:59.7;Cas;2.40;;;;9.40;;;;;;;;;;;;;MWSC 3777;;; +NGC7789;OCl;23:57:24.06;+56:42:29.8;Cas;14.40;;;7.68;6.70;;;;;;;;;;;;;MWSC 3779;;; +NGC7790;OCl;23:58:24.26;+61:12:29.9;Cas;3.60;;;9.18;8.50;;;;;;;;;;;;;MWSC 3781;;; +NGC7791;**;23:57:57.30;+10:45:56.6;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7792;G;23:58:03.57;+16:30:05.1;Peg;0.77;0.77;95;15.00;;11.46;10.74;10.50;23.03;S0-a;;;;;;;;2MASX J23580358+1630051,MCG +03-01-006,PGC 073066;;; +NGC7793;G;23:57:49.83;-32:35:27.7;Scl;10.42;6.05;89;9.74;9.28;7.56;7.02;6.86;23.05;Scd;;;;;;;;2MASX J23574982-3235277,ESO 349-012,ESO-LV 349-0120,IRAS 23552-3252,MCG -06-01-009,PGC 073049;;Extended HIPASS source; +NGC7794;G;23:58:34.12;+10:43:41.3;Peg;1.17;0.72;10;13.80;;11.03;10.29;10.03;22.51;Sc;;;;;;;;2MASX J23583407+1043417,IRAS 23560+1026,MCG +02-01-004,PGC 073103,SDSS J235834.10+104341.8,UGC 12872;;; +NGC7795;OCl;23:58:37.44;+60:02:05.9;Cas;2.22;;;;;;;;;;;;;;;;;MWSC 3782;;; +NGC7796;G;23:58:59.77;-55:27:29.9;Phe;2.73;2.38;178;12.36;11.30;9.22;8.55;8.27;23.49;E;;;;;;;;2MASX J23585980-5527301,ESO 149-007,ESO-LV 149-0070,PGC 073126;;The APM position is northwest of the nucleus.; +NGC7797;G;23:58:58.87;+03:38:04.7;Psc;0.90;0.84;35;14.80;;11.62;10.97;10.71;23.29;Sbc;;;;;;;;2MASX J23585887+0338045,MCG +00-01-011,PGC 073125,UGC 12877;;; +NGC7798;G;23:59:25.50;+20:44:59.5;Peg;1.45;1.33;100;12.97;12.37;10.35;9.66;9.37;22.42;SBc;;;;;;;;2MASX J23592550+2044595,IRAS 23568+2028,MCG +03-01-010,PGC 073163,UGC 12884;;; +NGC7799;*;23:59:31.55;+31:17:44.2;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7800;G;23:59:36.32;+14:48:20.1;Peg;1.74;0.72;45;13.40;;12.14;11.58;11.27;22.65;IB;;;;;;;;2MASX J23593630+1448200,IRAS 23570+1431,MCG +02-01-007,PGC 073177,UGC 12885;;; +NGC7801;OCl;00:00:21.44;+50:44:42.0;Cas;4.20;;;;;;;;;;;;;;;;;MWSC 0002;;; +NGC7802;G;00:01:00.42;+06:14:31.4;Psc;1.18;0.80;53;14.70;;10.97;10.23;9.96;23.77;S0;;;;;;;;2MASX J00010043+0614312,MCG +01-01-008,PGC 000081,UGC 12902;;; +NGC7803;G;00:01:19.97;+13:06:40.5;Peg;0.86;0.51;80;13.80;;10.88;10.18;9.84;22.35;S0-a;;;;;;;;2MASX J00011996+1306406,IRAS 23587+1249,MCG +02-01-011,PGC 000101,SDSS J000119.97+130640.6,UGC 12906;;; +NGC7804;**;00:01:18.80;+07:44:58.9;Psc;;;;;;;;;;;;;;;;;;;;; +NGC7805;G;00:01:26.77;+31:26:01.5;Peg;1.42;0.69;47;14.30;;11.16;10.40;10.13;23.65;S0;;;;;;;;2MASX J00012677+3126016,MCG +05-01-024,PGC 000109,UGC 12908;;; +NGC7806;G;00:01:30.05;+31:26:30.7;Peg;1.21;0.65;20;14.40;;11.30;10.63;10.35;22.99;SABb;;;;;;;;2MASX J00013005+3126306,MCG +05-01-025,PGC 000112,UGC 12911;;; +NGC7807;G;00:00:26.58;-18:50:30.8;Cet;0.73;0.60;35;15.60;;12.84;12.27;11.84;23.51;SBab;;;;;;;;2MASX J00002656-1850308,ESO 538-015,ESO-LV 538-0150,PGC 000033;;ESO RA of 23h57m5s incorrect. Corrected in ESO-LV.; +NGC7808;G;00:03:32.13;-10:44:40.8;Cet;1.08;1.00;60;14.33;13.48;11.29;10.65;10.32;23.41;S0;;;;;;;;2MASX J00033214-1044403,MCG -02-01-013,PGC 000243,SDSS J000332.12-104440.7,SDSS J000332.12-104440.8,SDSS J000332.13-104440.8;;; +NGC7809;G;00:02:09.45;+02:56:27.8;Psc;0.45;0.38;65;15.10;;12.76;12.02;11.51;21.96;I;;;;;;;;2MASX J00020944+0256279,IRAS 23596+0239,MCG +00-01-019,PGC 000158;;; +NGC7810;G;00:02:19.16;+12:58:17.9;Peg;0.96;0.64;78;14.30;;10.99;10.23;9.88;22.91;S0;;;;;;;;2MASX J00021916+1258176,IRAS 23597+1241,MCG +02-01-015,PGC 000163,UGC 12919;;; +NGC7811;G;00:02:26.47;+03:21:06.9;Psc;0.39;0.37;130;15.33;14.68;12.02;11.32;10.92;21.53;I;;;;;;;;2MASX J00022640+0321070,MCG +00-01-020,PGC 000168;;Position in 1996A&AS..120..201L is 6 arcsec northwest of optical center.; +NGC7812;G;00:02:54.47;-34:14:08.3;Scl;1.10;0.73;112;13.94;;11.72;11.02;10.75;22.65;SABb;;;;;;;;2MASX J00025446-3414084,ESO 349-021,ESO-LV 349-0210,IRAS 00003-3431,MCG -06-01-016,PGC 000195;;; +NGC7813;G;00:04:09.12;-11:59:02.0;Cet;0.81;0.26;158;14.50;;12.32;11.63;11.38;22.52;Sb;;;;;;5384;;2MASX J00040911-1159020,IRAS 00015-1215,MCG -02-01-016,PGC 000287;;; +NGC7814;G;00:03:14.89;+16:08:43.5;Peg;4.37;1.88;135;12.00;;8.09;7.36;7.08;23.03;Sab;;;;;;;;2MASX J00031494+1608428,C 043,MCG +03-01-020,PGC 000218,SDSS J000315.04+160844.7,SDSS J000315.04+160844.8,UGC 00008;;Multiple SDSS entries describe this object.; +NGC7815;*;00:03:24.83;+20:42:15.0;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7816;G;00:03:48.86;+07:28:43.1;Psc;1.64;1.53;105;14.00;;10.56;9.86;9.53;23.69;Sbc;;;;;;;;2MASX J00034885+0728429,IRAS 00012+0712,MCG +01-01-018,PGC 000263,UGC 00016;;; +NGC7817;G;00:03:58.91;+20:45:08.4;Peg;3.29;0.73;46;12.86;11.94;9.49;8.73;8.42;23.00;Sbc;;;;;;;;2MASX J00035889+2045084,IRAS 00014+2028,MCG +03-01-021,PGC 000279,UGC 00019;;; +NGC7818;G;00:04:08.85;+07:22:45.8;Psc;0.93;0.80;162;15.10;;12.12;11.50;11.08;23.56;Sc;;;;;;;;2MASX J00040883+0722458,MCG +01-01-019,PGC 000288,UGC 00021;;; +NGC7819;G;00:04:24.54;+31:28:19.4;Peg;1.44;0.79;97;14.30;;11.72;11.26;10.66;23.37;Sb;;;;;;;;2MASX J00042449+3128193,IRAS 00018+3111,MCG +05-01-029,PGC 000303,UGC 00026;;; +NGC7820;G;00:04:30.79;+05:12:01.0;Psc;1.54;0.60;167;13.90;;10.54;9.87;9.61;23.27;S0-a;;;;;;;;2MASX J00043079+0512009,MCG +01-01-022,PGC 000307,UGC 00028;;; +NGC7821;G;00:05:16.72;-16:28:36.9;Cet;1.14;0.38;116;14.00;;11.20;10.46;10.14;22.62;SABc;;;;;;;;2MASX J00051672-1628368,IRAS 00027-1645,MCG -03-01-019,PGC 000367;;; +NGC7822;HII;00:03:35.35;+67:09:41.9;Cep;20.00;4.00;;;;;;;;;;;;;;;;LBN 589;;NGC identification is not certain.; +NGC7823;G;00:04:45.59;-62:03:41.6;Tuc;1.13;0.70;30;13.42;;10.99;10.28;10.01;22.30;SBbc;;;;;;;;2MASX J00044559-6203414,ESO 111-012,ESO-LV 111-0120,IRAS 00022-6220,PGC 000328;;; +NGC7824;G;00:05:06.23;+06:55:12.4;Psc;1.59;1.04;151;14.50;;10.56;9.81;9.53;23.86;Sab;;;;;;;;2MASX J00050624+0655122,MCG +01-01-025,PGC 000354,UGC 00034;;; +NGC7825;G;00:05:06.60;+05:12:13.2;Psc;0.95;0.37;134;15.50;;11.98;11.28;10.97;23.76;Sa;;;;;;;;2MASX J00050662+0512125,PGC 1279700;;; +NGC7826;Other;00:05:19.32;-20:41:17.8;Cet;;;;;;;;;;;;;;;;;;;;Group of Galactic stars.; +NGC7827;G;00:05:27.66;+05:13:20.4;Psc;1.29;1.18;40;14.60;;10.95;10.33;9.97;23.84;S0;;;;;;;;2MASX J00052766+0513204,MCG +01-01-027,PGC 000378,UGC 00038;;; +NGC7828;G;00:06:27.07;-13:24:58.0;Cet;2.07;0.82;137;14.00;;11.55;10.88;10.58;23.89;Sd;;;;;;;;2MASX J00062708-1324580,IRAS 00038-1341,MCG -02-01-025 NED01,PGC 000483;;; +NGC7829;G;00:06:28.98;-13:25:14.2;Cet;2.07;0.82;110;15.07;;12.10;11.77;10.94;24.82;S0-a;;;;;;;;2MASX J00062900-1325140,MCG -02-01-025 NED02,PGC 000488;;; +NGC7830;*;00:06:01.86;+08:20:34.0;Psc;;;;;;;;;;;;;;;;;;;;; +NGC7831;G;00:07:19.53;+32:36:33.3;And;1.80;0.39;40;13.40;;10.95;10.16;9.88;22.59;Sb;;;;;;1530;;2MASX J00071951+3236334,IRAS 00047+3219,MCG +05-01-032,PGC 000569,UGC 00060;;; +NGC7832;G;00:06:28.46;-03:42:58.1;Psc;1.68;0.38;23;13.00;;10.35;9.69;9.45;23.68;E;;;;;;5386;;2MASX J00062844-0342581,MCG -01-01-033,PGC 000485;;; +NGC7833;Other;00:06:31.46;+27:38:22.8;Peg;;;;;;;;;;;;;;;;;;;;Five Galactic stars.; +NGC7834;G;00:06:37.82;+08:22:04.4;Psc;0.93;0.83;16;15.40;;12.74;12.24;11.85;23.94;Sc;;;;;;;;2MASX J00063780+0822045,MCG +01-01-030,PGC 000504,UGC 00049;;; +NGC7835;G;00:06:46.77;+08:25:33.4;Psc;0.56;0.24;150;15.50;;12.28;11.50;11.21;;Sb;;;;;;;;2MASX J00064677+0825335,MCG +01-01-031,PGC 000505;;; +NGC7836;G;00:08:01.64;+33:04:14.8;And;0.90;0.39;133;13.80;;11.32;10.64;10.28;22.80;E?;;;;;;;;2MASX J00080163+3304148,IRAS 00054+3247,PGC 000608,UGC 00065;;; +NGC7837;G;00:06:51.39;+08:21:05.0;Psc;0.67;0.38;169;16.00;;12.39;11.89;11.46;24.01;Sb;;;;;;;;2MASX J00065141+0821045,MCG +01-01-035,PGC 000516;;; +NGC7838;G;00:06:53.95;+08:21:03.1;Psc;1.30;0.57;93;15.30;;11.48;10.81;10.48;24.37;S0-a;;;;;;;;2MASX J00065396+0821027,MCG +01-01-036,PGC 000525;;; +NGC7839;**;00:07:00.63;+27:38:06.8;Peg;;;;;;;;;;;;;;;;;;;;; +NGC7840;G;00:07:08.80;+08:23:00.6;Psc;0.68;0.46;127;16.47;;;;;24.36;;;;;;;;;2MASX J00070878+0822598,PGC 1345780;;; diff --git a/leigh-astro/src/main/resources/leigh/astro/iraf/starfind.vm b/leigh-astro/src/main/resources/leigh/astro/iraf/starfind.vm new file mode 100644 index 0000000000000000000000000000000000000000..6d83bfb25382286c4e0c2633b4815e8dd92644c9 --- /dev/null +++ b/leigh-astro/src/main/resources/leigh/astro/iraf/starfind.vm @@ -0,0 +1,4 @@ +set clobber=yes +cd $task.getWorkDir() +starfind image="$task.getImageUUID()" output="$task.getTmpFile().getAbsolutePath()" hwhmpsf=1 threshold=1200 +logout diff --git a/leigh-astro/src/main/resources/leigh/astro/scheduler/ekos/schedule.vm b/leigh-astro/src/main/resources/leigh/astro/scheduler/ekos/schedule.vm new file mode 100644 index 0000000000000000000000000000000000000000..3fa7997594b89c52dfd60f48e587df82c9999cd5 --- /dev/null +++ b/leigh-astro/src/main/resources/leigh/astro/scheduler/ekos/schedule.vm @@ -0,0 +1,39 @@ + + + ED80 + + #foreach( $task in $taskings ) + + $task.getCatalogObject().getName() + 10 + + $task.getCatalogObject().getJ2000Coordinate().getXhours() + $task.getCatalogObject().getJ2000Coordinate().getY() + + $controller.buildFilename($task.getId()) + + ASAP + + + + + Sequence + + + Track + Align + Guide + Focus + + + #end + + + 0 + + + + + ParkMount + + \ No newline at end of file diff --git a/leigh-astro/src/main/resources/leigh/astro/scheduler/ekos/sequence.vm b/leigh-astro/src/main/resources/leigh/astro/scheduler/ekos/sequence.vm new file mode 100644 index 0000000000000000000000000000000000000000..adf6deaee348b3def16289b0404112736575376e --- /dev/null +++ b/leigh-astro/src/main/resources/leigh/astro/scheduler/ekos/sequence.vm @@ -0,0 +1,54 @@ + + + ZWO CCD ASI1600MM Pro + ASI EFW + 2 + 0 + 1 + 60 + + #foreach ($exposure in $tasking.getExposures().entrySet()) + + $exposure.key.getLength() + + 1 + 1 + + + 0 + 0 + 4656 + 3520 + + -20 + $exposure.key.getFilter() + Light + + + 0 + 0 + 0 + + $exposure.value + 0 + /home/aleigh/astro/ + 0 + 0 + + + $exposure.key.getGain() + + + + + Manual + + + Manual + + False + False + + + #end + \ No newline at end of file diff --git a/leigh-astro/src/main/scripts/ekos.py b/leigh-astro/src/main/scripts/ekos.py new file mode 100755 index 0000000000000000000000000000000000000000..ef369feacffe69bd2b8e06730708e6de08cca9a3 --- /dev/null +++ b/leigh-astro/src/main/scripts/ekos.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import argparse +import sys +import time + +# https://dbus.freedesktop.org/doc/dbus-python/index.html +import dbus + + +class EkosDbus(): + def __init__(self): + # user login session + self.session_bus = dbus.SessionBus() + self.start_ekos_proxy = None + self.start_ekos_iface = None + self.ekos_proxy = None + self.ekos_iface = None + self.scheduler_proxy = None + self.scheduler_iface = None + + def setup_start_ekos_iface(self): + try: + # proxy object + self.start_ekos_proxy = self.session_bus.get_object("org.kde.kstars", # bus name + "/kstars/MainWindow_1/actions/ekos" # object path + ) + # interface object + self.start_ekos_iface = dbus.Interface(self.start_ekos_proxy, 'org.qtproject.Qt.QAction') + except dbus.DBusException as dbe: + print(dbe) + sys.exit(1) + + def setup_ekos_iface(self, verbose=True): + # if self.start_ekos_iface is None: + # self.setup_start_ekos_iface() + try: + self.ekos_proxy = self.session_bus.get_object("org.kde.kstars", + "/KStars/Ekos" + ) + # ekos interface + self.ekos_iface = dbus.Interface(self.ekos_proxy, 'org.kde.kstars.Ekos') + except dbus.DBusException as dbe: + if verbose: + print(dbe) + sys.exit(1) + + def setup_scheduler_iface(self, verbose=True): + try: + # https://api.kde.org/extragear-api/edu-apidocs/kstars/html/classEkos_1_1Scheduler.html + self.scheduler_proxy = self.session_bus.get_object("org.kde.kstars", + "/KStars/Ekos/Scheduler" + ) + self.scheduler_iface = dbus.Interface(self.scheduler_proxy, "org.kde.kstars.Ekos.Scheduler") + except dbus.DBusException as dbe: + if verbose: + print(dbe) + sys.exit(1) + + def start_ekos(self): + print("Start Ekos") + if self.start_ekos_iface is None: + self.setup_start_ekos_iface() + self.start_ekos_iface.trigger() + + def stop_ekos(self): + print("Stop Ekos") + if self.ekos_iface is None: + self.setup_ekos_iface() + self.ekos_iface.stop() + + def load_and_start_profile(self, profile): + print("Load {} profile".format(profile)) + if self.ekos_iface is None: + self.setup_ekos_iface() + self.ekos_iface.setProfile(profile) + print("Start {} profile".format(profile)) + self.ekos_iface.start() + self.ekos_iface.connectDevices() + print("TODO Waiting for INDI devices...") + time.sleep(5) + + def load_schedule(self, schedule): + print("Load {} schedule".format(schedule)) + if self.scheduler_iface is None: + self.setup_scheduler_iface() + self.scheduler_iface.loadScheduler(schedule) + + def start_scheduler(self): + print("Start scheduler") + if self.scheduler_iface is None: + self.setup_scheduler_iface() + self.scheduler_iface.start() + + def stop_scheduler(self): + print("Stop scheduler") + if self.scheduler_iface is None: + self.setup_scheduler_iface() + self.scheduler_iface.stop() + + def reset_scheduler(self): + print("Reset all jobs in the scheduler") + if self.scheduler_iface is None: + self.setup_scheduler_iface() + self.scheduler_iface.resetAllJobs() + +def main(): + parser = argparse.ArgumentParser(description='Ekos cli') + parser.add_argument('--start_ekos', action='store_true', help='start ekos') + parser.add_argument('--stop_ekos', action='store_true', help='stop ekos') + parser.add_argument('--profile', required=False, type=str, help='equipment profile name, fi Simulators') + parser.add_argument('--load_schedule', required=False, type=str, + help='schedule .esl file path. Note: this replaces the entire observation list with this single entry.') + parser.add_argument('--start_scheduler', action='store_true', help='start the scheduler') + parser.add_argument('--stop_scheduler', action='store_true', help='stop the scheduler') + parser.add_argument('--reset_scheduler', action='store_true', help='reset all jobs in the scheduler') + args = parser.parse_args() + + ekos_dbus = EkosDbus() + if args.start_ekos: + ekos_dbus.start_ekos() + if args.stop_ekos: + ekos_dbus.stop_ekos() + if args.profile: + ekos_dbus.load_and_start_profile(args.profile) + if args.load_schedule: + ekos_dbus.load_schedule(args.load_schedule) + if args.start_scheduler: + ekos_dbus.start_scheduler() + if args.stop_scheduler: + ekos_dbus.stop_scheduler() + if args.reset_scheduler: + ekos_dbus.reset_scheduler() + +if __name__ == "__main__": + main() diff --git a/leigh-astro/src/main/scripts/status.sh b/leigh-astro/src/main/scripts/status.sh new file mode 100644 index 0000000000000000000000000000000000000000..da3cc64f86c145ff6df1e18fe38b79ba2e3d94d5 --- /dev/null +++ b/leigh-astro/src/main/scripts/status.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# Copyright (c) 2020, C. Alexander Leigh + +dbus-send --print-reply=literal --dest=org.kde.kstars --print-reply /KStars/Ekos/Scheduler org.freedesktop.DBus.Properties.Get string:"org.kde.kstars.Ekos.Scheduler" string:"status" | grep int32 | awk '{print $2}' \ No newline at end of file diff --git a/leigh-astro/src/test/java/leigh/astro/astrometrics/AirMassTest.java b/leigh-astro/src/test/java/leigh/astro/astrometrics/AirMassTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d12d17dacf0ed31a70563987a558dd1c587bf0dd --- /dev/null +++ b/leigh-astro/src/test/java/leigh/astro/astrometrics/AirMassTest.java @@ -0,0 +1,14 @@ +package leigh.astro.astrometrics; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class AirMassTest { + @Test + public void testAirMass() { + assertEquals(0.9997119918558381, AirMass.airMass(90), 0); + assertEquals(1.9988274711067535, AirMass.airMass(30), 0); + assertEquals(5.749001358743562, AirMass.airMass(10), 0); + } +} diff --git a/leigh-astro/src/test/java/leigh/astro/astrometrics/AstrometricsTest.java b/leigh-astro/src/test/java/leigh/astro/astrometrics/AstrometricsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fe38894deded50cddd5b02696a1e8d940ea0a205 --- /dev/null +++ b/leigh-astro/src/test/java/leigh/astro/astrometrics/AstrometricsTest.java @@ -0,0 +1,16 @@ +package leigh.astro.astrometrics; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.junit.Test; + +public class AstrometricsTest { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(AstrometricsTest.class); + + @Test + public void testHms() { + // NGC3711 + double x = Astrometrics.hmsToDeg(11, 30, 27.87); + logger.info("degs: {}", x); + } +} diff --git a/leigh-astro/src/test/java/leigh/astro/unit/DegreesMinutesSecondsTest.java b/leigh-astro/src/test/java/leigh/astro/unit/DegreesMinutesSecondsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..cef6315de9a741fa55de6ffadf95ec89f58d5c7c --- /dev/null +++ b/leigh-astro/src/test/java/leigh/astro/unit/DegreesMinutesSecondsTest.java @@ -0,0 +1,21 @@ +package leigh.astro.unit; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.junit.Test; + +import static junit.framework.TestCase.assertEquals; + +public class DegreesMinutesSecondsTest { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DegreesMinutesSecondsTest.class); + + @Test + public void testDms() { + DegreesMinutesSeconds dms = new DegreesMinutesSeconds(180); + assertEquals(180.0, dms.getDegrees()); + assertEquals(0.0, dms.getMinutes()); + assertEquals(0.0, dms.getSeconds()); + + logger.info("dms: {}", dms); + } +} diff --git a/leigh-astro/src/test/java/leigh/astro/unit/HoursMinutessSecondsTest.java b/leigh-astro/src/test/java/leigh/astro/unit/HoursMinutessSecondsTest.java new file mode 100644 index 0000000000000000000000000000000000000000..dab4433d2df97a0d57dbfd6895a517ac0917bb92 --- /dev/null +++ b/leigh-astro/src/test/java/leigh/astro/unit/HoursMinutessSecondsTest.java @@ -0,0 +1,28 @@ +package leigh.astro.unit; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.junit.Test; + +import static junit.framework.TestCase.assertEquals; + + +/** + * JUnit test-cases for the {@link HoursMinutessSecondsTest} class. + * + * @author C. Alexander Leigh + */ +public class HoursMinutessSecondsTest { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(HoursMinutessSecondsTest.class); + + @Test + public void testHms() { + HoursMinutesSeconds hms = new HoursMinutesSeconds(180); + assertEquals(12.0, hms.getHours()); + assertEquals(0.0, hms.getMinutes()); + assertEquals(0.0, hms.getSeconds()); + + logger.info("hms: {}", hms); + } + +} diff --git a/leigh-audio/.gitignore b/leigh-audio/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-audio/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-audio/LICENSE b/leigh-audio/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-audio/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-audio/build.gradle b/leigh-audio/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..6423025e2bb870708bdf80137662bec49d259442 --- /dev/null +++ b/leigh-audio/build.gradle @@ -0,0 +1,19 @@ +plugins { + id 'java' +} + +group 'leigh' +version '15.0' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-build/.gitignore b/leigh-build/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-build/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-build/LICENSE b/leigh-build/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-build/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-build/README.txt b/leigh-build/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..88eb84df3d4a9f5749e14061cc1d27fdad011abc --- /dev/null +++ b/leigh-build/README.txt @@ -0,0 +1 @@ +This module contains tools for managing development builds, working with versions, etc. \ No newline at end of file diff --git a/leigh-build/build.gradle b/leigh-build/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..eb157bcb1a5ba7963983d129c17acf5f06b8c654 --- /dev/null +++ b/leigh-build/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version leigh_build_ver + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + api 'com.vdurmont:semver4j:3.1.0' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} diff --git a/leigh-build/src/main/java/leigh/build/ReleaseApp.java b/leigh-build/src/main/java/leigh/build/ReleaseApp.java new file mode 100644 index 0000000000000000000000000000000000000000..85e3e8d149b540ffc32251785abac0cf83ec0bb0 --- /dev/null +++ b/leigh-build/src/main/java/leigh/build/ReleaseApp.java @@ -0,0 +1,32 @@ +package leigh.build; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; + +import java.io.*; +import java.util.Properties; + +/** + * Iterate through the provided path, find all build.gradle files containing a semantic version, and if any versions + * contain suffixes, modify them to drop the suffixes and then re-write the property file back to disk. + * + * @author C. Alexander Leigh + */ +public class ReleaseApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ReleaseApp.class); + + public static void main(String[] args) throws IOException { + if (args.length != 1) { + logger.info("Usage: ReleaseApp properties"); + System.exit(UniversalJob.RET_BADARGS); + } + + File propFile = new File(args[0]); + Properties p = new Properties(); + p.load(new BufferedInputStream(new FileInputStream(propFile))); + if (VersionUtil.release(p, "_ver")) { + p.store(new FileOutputStream(propFile), "Updated with ReleaseApp"); + } + } +} diff --git a/leigh-build/src/main/java/leigh/build/VersionUtil.java b/leigh-build/src/main/java/leigh/build/VersionUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..f6149bcc282603da1654ede26edd4facf3dd7178 --- /dev/null +++ b/leigh-build/src/main/java/leigh/build/VersionUtil.java @@ -0,0 +1,41 @@ +package leigh.build; + +import com.vdurmont.semver4j.Semver; + +import java.util.Map; +import java.util.Properties; + +/** + * This class provides utility methods for working with versions and version strings. + * + * @author C. Alexander Leigh + */ +public class VersionUtil { + /** + * Given a properties file containing versions with keys ending in keySuffix, strip the pre-release tag + * if any from the version and update the properties file. + *

+ * Returns true if any entry was modified, otherwise returns false. + *

+ * Limitations: The parser has difficulty with versions that do not include all 3 version numbers, + * so 1.1-SNAPSHOT may not parse properly, but 1.1.0-SNAPSHOT will. Strictly speaking this is not a + * limitation as all three numbers are required for a legal Semmantic Version. cite: https://semver.org/ + */ + public static boolean release(Properties p, String keySuffix) { + boolean didWork = false; + + for (Map.Entry entry : p.entrySet()) { + String key = (String) entry.getKey(); + String value = (String) entry.getValue(); + + if (key.endsWith(keySuffix)) { + Semver v = new Semver(value); + if (v.getSuffixTokens() != null) { + p.setProperty(key, v.withClearedSuffix().toString()); + didWork = true; + } + } + } + return didWork; + } +} \ No newline at end of file diff --git a/leigh-build/src/test/java/leigh/build/VersionUtilTest.java b/leigh-build/src/test/java/leigh/build/VersionUtilTest.java new file mode 100644 index 0000000000000000000000000000000000000000..103233f128b216315dfc785490a8904cd4c92470 --- /dev/null +++ b/leigh-build/src/test/java/leigh/build/VersionUtilTest.java @@ -0,0 +1,17 @@ +package leigh.build; + +import org.junit.Test; + +import java.util.Properties; + +import static org.junit.Assert.assertEquals; + +public class VersionUtilTest { + @Test + public void testStrip() { + Properties p = new Properties(); + p.setProperty("test-ver", "1.2.3-SNAPSHOT"); + VersionUtil.release(p, "-ver"); + assertEquals("1.2.3", p.getProperty("test-ver")); + } +} diff --git a/leigh-cloudbox/.gitignore b/leigh-cloudbox/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-cloudbox/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-cloudbox/LICENSE b/leigh-cloudbox/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-cloudbox/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-cloudbox/build.gradle b/leigh-cloudbox/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..3676a18356db54a4f7a853d604c67a28540569a1 --- /dev/null +++ b/leigh-cloudbox/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha-exec') + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-cloudbox/src/main/java/leigh/cloudbox/cisco/CiscoController.java b/leigh-cloudbox/src/main/java/leigh/cloudbox/cisco/CiscoController.java new file mode 100644 index 0000000000000000000000000000000000000000..4a7447489508e8b53659c87520e0c418b11dec29 --- /dev/null +++ b/leigh-cloudbox/src/main/java/leigh/cloudbox/cisco/CiscoController.java @@ -0,0 +1,24 @@ +package leigh.cloudbox.cisco; + +import leigh.mecha.cred.Credential; + +/** + * A simple class for storing the login information required to generate {@link CiscoSession} objects. + * + * @author C. Alexander Leigh + */ +public class CiscoController { + private final String hostname; + private final Credential loginCred; + private final String enablePw; + + public CiscoController(String hostname, Credential loginCred, String enablePw) { + this.hostname = hostname; + this.loginCred = loginCred; + this.enablePw = enablePw; + } + + public CiscoSession getSession() throws Exception { + return new CiscoSession(hostname, loginCred, enablePw); + } +} diff --git a/leigh-cloudbox/src/main/java/leigh/cloudbox/cisco/CiscoSession.java b/leigh-cloudbox/src/main/java/leigh/cloudbox/cisco/CiscoSession.java new file mode 100644 index 0000000000000000000000000000000000000000..c20f353cced7a565341e69749cc6f1a4b57b0939 --- /dev/null +++ b/leigh-cloudbox/src/main/java/leigh/cloudbox/cisco/CiscoSession.java @@ -0,0 +1,163 @@ +package leigh.cloudbox.cisco; + +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import leigh.mecha.cred.Credential; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import net.sf.expectit.Expect; +import net.sf.expectit.ExpectBuilder; + +import java.io.IOException; +import java.util.Properties; + +import static net.sf.expectit.matcher.Matchers.contains; + +/** + * This class provides support for remote execution and configuration of Cisco series routers. + * + * @author C. Alexander Leigh + */ +public class CiscoSession implements AutoCloseable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(CiscoSession.class); + private final JSch jSch = new JSch(); + private final Session session; + private final Channel channel; + private final String enablePw; + private final Expect expect; + private String hostname; + private boolean isEnabled = false; + private boolean isConfig = false; + + public void setTunnelDestination(String iface, String dest) throws IOException { + enable(); + config(); + expect.sendLine("int " + iface); + expect.expect(contains("(config-if)#")); + expect.sendLine("tunnel destination " + dest); + expect.expect(contains("#")); + // TODO Exit & wr mem + } + + /** + * Create a new controller. This will immediately connect to the router, so the caller should not delay in + * calling the accessory methods in order to operate on the router. close() should be called in + * call cases when the caller is done with this object. + */ + public CiscoSession(String host, Credential cred, String enablePw) throws Exception { + session = jSch.getSession(cred.getUsername(), host); + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); + session.setPassword(cred.getPassword()); + session.connect(); + channel = session.openChannel("shell"); + this.enablePw = enablePw; + + expect = new ExpectBuilder() + .withOutput(channel.getOutputStream()) + .withInputs(channel.getInputStream(), channel.getExtInputStream()) + .withEchoOutput(System.out) + .withEchoInput(System.err) + .withExceptionOnFailure() + .build(); + channel.connect(); + + loginAndHostname(); + } + + /** + * Given a raw response, determine the hostname of the router. This will be used to more accurately parse + * further responses from it. + */ + public String hostname(String prompt) { + String clean = prompt.strip(); + return clean.replace(">", ""); + } + + /** + * Login to the router and setup the initial conditions. This also gets the routers hostname, which will be + * used later to build expectation. + */ + private void loginAndHostname() throws IOException { + String prompt = expect.expect(contains(">")).getInput(); + hostname = hostname(prompt); + expect.sendLine("terminal length 0"); + expect.expect(contains(expectedPrompt())); + } + + /** + * Raise the session enable level. This requires that loginAndHostname() has previously been + * called. If the session is already enabled, this method does nothing. Once enabled, there is no support + * for leaving the enable condition. Sending the command to exit will leave the isEnabled + * flag in the wrong state. + */ + private void enable() throws IOException { + if (isEnabled) return; + + expect.sendLine("enable"); + expect.expect(contains("Password:")); + expect.sendLine(enablePw); + expect.expect(contains(hostname + "#")); + isEnabled = true; + } + + /** + * Enter configure mode on the remote router. If the router is already in configure mode, this method + * does nothing. + */ + private void config() throws IOException { + expect.sendLine("conf t"); + // We have to manually work it out here, because we don't want to set the config flag in the event of an + // error condition on the remote router. + String p = isEnabled ? "#" : ">"; + expect.expect(contains(hostname + "(config)" + p)); + isConfig = true; + } + + private void endConfigure() throws IOException { + expect.sendLine("exit"); + String p = isEnabled ? "#" : ">"; + expect.expect(contains(hostname + p)); + isConfig = false; + } + + /** + * Return the current expected prompt given the state of the remote router - enabled or not, configured + * or not. This method works better if the hostname is known from a previous call to + * loginAndHostname(), but if the hostanme is not know, simple prompts will be returned, + * such as > and #. + */ + public String expectedPrompt() { + // tbh I don't even know if you can config outside of enable, but I don't want to be the guy who + // wrote the bug when turns out one ark night that it is possible. + + String h = hostname; + if (h == null) { + h = ""; + } + + if (!isConfig) { + if (!isEnabled) { + return h + ">"; + } else { + return h + "#"; + } + } else { + if (!isEnabled) { + return h + "(config)>"; + } else { + return h + "(config)#"; + } + } + } + + @Override + public void close() throws Exception { + logger.info("close() called."); + expect.close(); + session.disconnect(); + channel.disconnect(); + } +} diff --git a/leigh-conflux/.gitignore b/leigh-conflux/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-conflux/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-conflux/LICENSE b/leigh-conflux/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-conflux/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-conflux/build.gradle b/leigh-conflux/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..76703d5a78469e1525a3768ca24a88f1b4a77922 --- /dev/null +++ b/leigh-conflux/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' + id 'java-library' +} + +version leigh_conflux_ver + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + api project(':leigh-mecha-nodegraph') + api project(':leigh-eo') + api project(':leigh-eo-schema') + api group: 'org.graalvm.js', name: 'js', version: '20.3.0' + api group: 'org.graalvm.js', name: 'js-scriptengine', version: '20.3.0' + api group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} \ No newline at end of file diff --git a/leigh-conflux/src/main/java/leigh/conflux/Conflux.java b/leigh-conflux/src/main/java/leigh/conflux/Conflux.java new file mode 100644 index 0000000000000000000000000000000000000000..b39fbeb5be2e15056ebe1aa2bb918af5709bfa1f --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/Conflux.java @@ -0,0 +1,27 @@ +package leigh.conflux; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author C. Alexander Leigh + */ +public class Conflux { + private final HashMap datasources = new HashMap<>(); + private final Model model; + + public Conflux(Model model) { + this.model = model; + } + + public Map getDataSources() { + return datasources; + } + + @Override + public String toString() { + return "Conflux{" + + "datasources=" + datasources + + '}'; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/DataFrame.java b/leigh-conflux/src/main/java/leigh/conflux/DataFrame.java new file mode 100644 index 0000000000000000000000000000000000000000..a82c7a19c46f8900201266ccf454095c16301f4a --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/DataFrame.java @@ -0,0 +1,99 @@ +package leigh.conflux; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.math.IntIntervals; +import leigh.mecha.sort.SortPolicy; + +import java.util.List; +import java.util.Locale; + +/** + * Classes implementing this interface provide a Conflux DataFrame, a specialized data structure designed for + * interactive data exploration. + *

+ * As a design note, there is zero requirement that the object stored within the DataFrame be homogeneous. + * + * @author C. Alexander Leigh + */ +public interface DataFrame { + int size(); + + EO get(int idx); + + void replaceData(EOLoop data); + + void clearFilters(); + + + /** + * Set the sort policy for this frame. To remove sorting and return to the natural order of the data, + * pass null. This will not actually sort the view. + *

+ * Once the sort policy has been set into the dataframe, do not modify it. The policy will be used in the + * future by the frame when certain operations are performed (like re-filtering or updating the underlying + * data). Additionally, if the policy is modified outside of the class at a later time, it will not trigger + * a sort within the frame. To re-sort the frame, call this method with a new policy. + * + * @param policy The policy or null + */ + void setSortPolicy(SortPolicy policy); + + /** + * Set a quick filter for the given key. Setting the filter does not apply it to the data, so the view remains + * unchanged after this method is called. To apply the filters, call applyFilters(). + */ + void setQuickFilter(String key, String filter); + + EOLoop applyFilters(EOLoop secondary); + + /** + * Apply all outstanding filters and sort the frame. This produces an updated version of the view. + */ + void process() throws Exception; + + /** + * Get the current selection, if any. This method will always return a {@link IntIntervals} object, it may simply + * be empty. There is no guarantee that the resulting object has been compacted. To change the selection the + * caller may modify the returned object. + */ + IntIntervals getSelection(); + + /** + * Return the current state of the view in the form of a read-only list. + * + * @return The view. + */ + List getView(); + + /** + * Create a new empty EO in the frame. This implicitly adds it to the end of the view regardless of the current + * filter parameters. + * + * @return + */ + EO create(String type); + + void add(EO obj); + + /** + * Remove an object from the frame, given its view index. An object of the given index must exist in the + * frame. + * + * @param viewIdx The view index of the object to remove. + */ + void delete(int viewIdx); + + /** + * Return the objects in the view which are currently selected. If no objects are selected, an empty list is + * returned. + */ + List getSelected(); + + /** + * Return the {@link Locale} associated with this dataframe. + */ + Locale getLocale(); + + void deleteSelected(); +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/DataFrameImpl.java b/leigh-conflux/src/main/java/leigh/conflux/DataFrameImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..b9ef549534c1aa4f6e4aa2b96067a810f62f90ec --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/DataFrameImpl.java @@ -0,0 +1,292 @@ +package leigh.conflux; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.math.IntIntervals; +import leigh.mecha.sort.SortPolicy; + +import java.util.*; + +/** + * A DataFrame provides a filterable, sortable view into a originalData graph. + * + * @author C. Alexander Leigh + * @since mk14 mod10 (CRYSTAL) + */ +public class DataFrameImpl implements DataFrame { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DataFrameImpl.class); + private final IntIntervals selection = new IntIntervals(); + private final HashMap filters = new HashMap<>(); + private List view; + private EOLoop data; + private Locale locale = Locale.ENGLISH; + private SortPolicy sortPolicy; + + public DataFrameImpl() { + this(new EOLoop()); + } + + /** + * Create a new frame which wraps the provided {@link EOLoop}. + */ + public DataFrameImpl(EOLoop data) { + assert (data != null); + view = new ArrayList<>(); + this.data = data; + // By default, the view is everything in no particular order. + for (EO eo : data) { + view.add(eo); + } + } + + /** + * Return the {@link Locale} associated with this dataframe. + */ + public Locale getLocale() { + return locale; + } + + @Override + public void deleteSelected() { + logger.debug("deleteSelected() called. [selected]: {}", selection); + + HashSet toRemove = new HashSet<>(); + for (Integer i : selection.getIntegers()) { + toRemove.add(view.get(i)); + } + + logger.info("Found objects to delete: {}", toRemove); + + data.remove(toRemove); + view.remove(toRemove); + selection.clear(); + } + + public void setLocale(Locale locale) { + this.locale = locale; + } + + /** + * Return the size of the frame in rows. If rows have been filtered or otherwise manipulated, this is the + * number of rows visible in the view, not the total number of rows in the underlying originalData. + */ + @Override + public int size() { + return view.size(); + } + + public List getView() { + return Collections.unmodifiableList(view); + } + + @Override + public EO create(String type) { + logger.debug("Creating... [data: {}]", data.hashCode()); + EO obj = new EO(type); + add(obj); + return obj; + } + + public void add(EO obj) { + data.add(obj); + // We hot-wire the object into the view, because as a new object it may not match the previous sort or + // filter operations, but we want it to appear to the user anyways. + view.add(obj); + } + + /** + * logger.debug the object at the given view position. Note that this will side-effect the view indicies of any + * objects after this object from changing. For example, given 1 2 3, if you remove 2, 3 will become the new + * 2. + */ + @Override + public void delete(int viewIdx) { + logger.debug("Attempting to remove object. [idx: {}] [viewSz: {}] [dataSz: {}]", viewIdx, + view.size(), data.size()); + + EO old = view.remove(viewIdx); + + try { + data.remove(data.indexOf(old)); + } catch (IndexOutOfBoundsException e) { + logger.warn("delete(): {}", e); + } + + logger.debug("Frame size now: {}", data.size()); + } + + @Override + public List getSelected() { + // TODO: Performance sucks. + ArrayList selected = new ArrayList<>(); + for (int i = 0; i < view.size(); i++) { + if (selection.contains(i)) { + selected.add(view.get(i)); + } + } + + logger.debug("Returning selected objects. [selection: {}] [found: {}]", selection, selected); + + return selected; + } + + /** + * Return the row at the given index, or null if there is no such row. + */ + @Override + public EO get(int idx) { + return view.get(idx); + } + + @Override + public IntIntervals getSelection() { + // TODO: Return a read-only copy + return selection; + } + + /** + * Replace the originalData contained in this frame with the provided loop. This does not reset the filters + * or selections. This implementation retains the provided {@link EOLoop} object, releasing the previously + * assigned loop. + */ + @Override + public void replaceData(EOLoop data) { + this.data = data; + this.process(); + } + + /** + * Add the provided objects to the current selection, if they happen to be present. Note that this does not + * reset the existing selection state. the given objects in the view, if they happen to be present. + * + * @param selected The objects to select. + */ + private void select(List selected) { + logger.debug("select() called. [old: {}] [new: {}]", selection, selected); + // TODO: Performance sucks + for (EO obj : selected) { + int idx = view.indexOf(obj); + if (idx == -1) { + continue; + } + selection.add(idx, idx); + } + selection.compact(); + } + + + private void sort() { + logger.debug("sort() called. [policy: {}] [view: {}]", sortPolicy, view); + + if (sortPolicy == null || sortPolicy.getFields().size() == 0) return; + + List oldSelected = getSelected(); + Comparator comp = sortPolicy.buildComparator(); + view.sort(comp); + logger.debug("Sorted. [view: {}]", view); + + selection.clear(); + select(oldSelected); + } + + @Override + public void setSortPolicy(SortPolicy policy) { + this.sortPolicy = policy; + } + + /** + * Set a filter string for one of the frame fields. Setting the filter does not apply it, to do that, + * call applyFilters(). The filter consists of a series of terms, all of which must be present + * in the originalData row value in order for the filter to match. The matching is case-insensitive. + *

+ * To remove a filter, call setFilter() with a null filter. + */ + @Override + public void setQuickFilter(String key, String filter) { + logger.debug("Setting filters. [key: {}] [filter: {}]", key, filter); + + if (filter == null) { + filters.remove(key); + } else { + filters.put(key, filter.toLowerCase(locale)); + } + } + + public void clearFilters() { + filters.clear(); + } + + /** + * Apply the filters (if any) which have been set with the setFilter() method. This will produce + * the view from the underlying data. If a sort policy has been set via the setSortPolicy() + * method, the view will be sorted according to that policy. + *

+ * If there was a selection prior to calling applyFilters(), the selection will be updated to + * contain any objects remaining in the view, in their new locations. + */ + @Override + public EOLoop applyFilters(EOLoop secondary) { + // TODO This method contains a legacy for when the view could be foreign - simplify + List oldSelected = getSelected(); + + EOLoop filtered = new EOLoop(); + EOLoop secondaryFiltered = null; + if (secondary != null) { + secondaryFiltered = new EOLoop(); + } + + int viewIdx = 0; + for (int dataIdx = 0; dataIdx < data.size(); dataIdx++) { + boolean retain = true; + EO row = data.get(dataIdx); + + for (Map.Entry filter : filters.entrySet()) { + String value = row.getValueString(filter.getKey()); + if (value == null) { + retain = false; + break; + } + + value = value.toLowerCase(); + + String term = filter.getValue(); + // Term is already lower-case + if (!value.toLowerCase(locale).contains(term)) { + retain = false; + break; + } + if (!retain) + break; + } + + if (retain) { + filtered.add(row); + viewIdx++; + if (secondaryFiltered != null) { + secondaryFiltered.add(secondary.get(dataIdx)); + } + } + } + + // We do this because we may have been passed a foreign list implementation, and we need to preserve it + view.clear(); + for (EO eo : filtered) { + view.add(eo); + } + + // Performing the sort() would try to fix the selections, but there is no need here, so we are sure to + // clear the selection before the call. + selection.clear(); + sort(); + select(oldSelected); + + return secondaryFiltered; + } + + @Override + public void process() { + applyFilters(null); + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/DataSource.java b/leigh-conflux/src/main/java/leigh/conflux/DataSource.java new file mode 100644 index 0000000000000000000000000000000000000000..93badd25d41a50f805ecec138bd147c76ac2330a --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/DataSource.java @@ -0,0 +1,26 @@ +package leigh.conflux; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +import java.io.IOException; +import java.util.UUID; + +/** + * Classes implementing this interface provide access to low-level data stored outside of Conflux. This is the + * primary way that data is brought into the environment for processing. + * + * @author C. Alexander Leigh + */ +public interface DataSource { + /** + * Return the underlying data associated with this datasource. + * + * @return The data. + * @throws IOException + * @throws ClassNotFoundException + */ + EOLoop getData() throws IOException, ClassNotFoundException; + + EO getObject(UUID dstRecordId); +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/DataSourceBinder.java b/leigh-conflux/src/main/java/leigh/conflux/DataSourceBinder.java new file mode 100644 index 0000000000000000000000000000000000000000..1d1a819e9a2e17663b728ab71465582ed17f3f9a --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/DataSourceBinder.java @@ -0,0 +1,18 @@ +package leigh.conflux; + +import java.io.IOException; + +/** + * Classes implementing this interface store named {@link DataSource} objects. + * + * @author C. Alexander Leigh + */ +public interface DataSourceBinder { + /** + * Return the {@link DataSource} of the given name to the caller, or null if no such + * DataSource is registered. name must not be null. + * + * @param name The {@link DataSource}. + */ + DataSource getDataSource(String name) throws IOException, ClassNotFoundException; +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/Model.java b/leigh-conflux/src/main/java/leigh/conflux/Model.java new file mode 100644 index 0000000000000000000000000000000000000000..990a2c22994a5fa58676d0fd7e0bd858b0f1379c --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/Model.java @@ -0,0 +1,48 @@ +package leigh.conflux; + +import leigh.mecha.nodegraph.Node; + +import java.util.ArrayList; +import java.util.List; + +public class Model { + private final ArrayList nodes = new ArrayList<>(); + + /** + * Return an array of all the nodes contained within this model. Returns an empty list if there are no + * nodes in the model. + */ + public List getNodes() { + return nodes; + } + + /** + * Return a {@link List} of all the nodes in this model matching the supplied class. Returns an empty list + * if there are no matching nodes. + */ + public List getNodes(Class clazz) { + ArrayList classNodes = new ArrayList<>(); + for (Node n : nodes) { + if (clazz.equals(n.getClass())) classNodes.add(n); + } + return classNodes; + } + + /** + * Return the first {@link Node} matching the given class. If multiple nodes match the given class, it is not + * specified which is returned. Returns null if there is no matching node. + */ + public Node getNode(Class clazz) { + for (Node n : nodes) { + if (clazz.equals(n.getClass())) return n; + } + return null; + } + + public Node getNode(String id) { + for (Node node : nodes) { + if (id.equals(node.getId())) return node; + } + return null; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/RamDataSource.java b/leigh-conflux/src/main/java/leigh/conflux/RamDataSource.java new file mode 100644 index 0000000000000000000000000000000000000000..5b3b4c4dbced9f333d76d796306ddb39543a4bd0 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/RamDataSource.java @@ -0,0 +1,46 @@ +package leigh.conflux; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.eo.EditEventGenerator; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; +import java.util.UUID; + +/** + * A simple implementation of the {@link DataSource} interface provided by heap storage. + * + * @author C. Alexander Leigh + */ +public class RamDataSource implements DataSource, Serializable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(RamDataSource.class); + private static final long serialVersionUID = 1L; + private final EOLoop data; + + + public RamDataSource() { + data = new EOLoop(); + data.setEditTracker(new EditEventGenerator()); + } + + public RamDataSource(EOLoop data) { + // For debugging + assert (data != null); + this.data = data; + } + + @Override + public EOLoop getData() { + return data; + } + + public EO getObject(UUID id) { + for (EO eo : data) { + UUID objId = eo.getValueUUID("_id"); + if (id.equals(objId)) return eo; + } + return null; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/RecordPointer.java b/leigh-conflux/src/main/java/leigh/conflux/RecordPointer.java new file mode 100644 index 0000000000000000000000000000000000000000..c1ac9ebcf8586cad15fc50f117e7ae312ed542dd --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/RecordPointer.java @@ -0,0 +1,56 @@ +package leigh.conflux; + +import java.io.Serializable; +import java.util.Objects; +import java.util.UUID; + +/** + * This class implements a record pointer. The pointer stores a reference from a source record to a destination record, + * such that the destination record can be modified over time. The pointer is said to have a source, for the purpose + * that the pointer may be deleted when that source record is deleted. + * + * @author C. Alexander Leigh + */ +public class RecordPointer implements Serializable { + private static final long serialVersionUID = 1L; + private final UUID srcRecordId; + private UUID dstRecordId; + + public RecordPointer(UUID srcRecordId, UUID dstRecordId) { + this.srcRecordId = srcRecordId; + this.dstRecordId = dstRecordId; + } + + public UUID getSrcRecordId() { + return srcRecordId; + } + + public UUID getDstRecordId() { + return dstRecordId; + } + + public void setDstRecordId(UUID dstRecordId) { + this.dstRecordId = dstRecordId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RecordPointer that = (RecordPointer) o; + return Objects.equals(srcRecordId, that.srcRecordId) && Objects.equals(dstRecordId, that.dstRecordId); + } + + @Override + public int hashCode() { + return Objects.hash(srcRecordId, dstRecordId); + } + + @Override + public String toString() { + return "RecordPointer{" + + "srcRecordId=" + srcRecordId + + ", dstRecordId=" + dstRecordId + + '}'; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/RecordPointerSet.java b/leigh-conflux/src/main/java/leigh/conflux/RecordPointerSet.java new file mode 100644 index 0000000000000000000000000000000000000000..9346fea4ef595dbaffb77a47b7ac8fe81e42bd62 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/RecordPointerSet.java @@ -0,0 +1,9 @@ +package leigh.conflux; + +import java.util.UUID; + +public interface RecordPointerSet { + RecordPointer getRecordPointer(UUID id); + + UUID addRecordPointer(RecordPointer ptr); +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AggregateNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AggregateNode.java new file mode 100644 index 0000000000000000000000000000000000000000..9ef481af2e00d8b3c00cfb9dac5191ead52b6fe2 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AggregateNode.java @@ -0,0 +1,62 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.Node; +import leigh.mecha.nodegraph.ProcessorState; +import leigh.mecha.nodegraph.UselessAttribute; + +import java.io.Serializable; + +/** + * A {@link Node} which provides aggregate row operations. + * + * @author C. Alexander Leigh + */ +public abstract class AggregateNode extends Node { + public static final String NODE_NAME = "leigh.conflux.v1.Aggregate"; + public static final String KEY_INPUT_OBJECTS = "objs"; + public static final String KEY_OUTPUT_VALUE = "value"; + private static final MechaLogger logger = MechaLoggerFactory.getLogger(AggregateNode.class); + + public static AggregateNode build(String type, String id) { + switch (type) { + case "sum": + return new SumNode(id); + case MinNode.TYPE: + return new MinNode(id); + case MaxNode.TYPE: + return new MaxNode(id); + case CountNode.TYPE: + return new CountNode(id); + case AverageNode.TYPE: + return new AverageNode(id); + } + throw new IllegalStateException("Unknown aggregate type: " + type); + } + + public AggregateNode(String id) { + super(id); + addOutput(KEY_OUTPUT_VALUE, new UselessAttribute() { + public Serializable getSingleValue(ProcessorState state) throws Exception { + start(state); + logger.info("KEY_OUTPUT_VALUE read..."); + EOLoop rows = getInputObjects(KEY_INPUT_OBJECTS, state); + logger.info("Located rows: {}", rows); + String key = getInputStaticString(KEY_INPUT_OBJECTS, state); + for (EO eo : rows) { + processRow(eo, key, state); + } + return finish(state); + } + }); + } + + public abstract void start(ProcessorState state); + + public abstract void processRow(EO row, String key, ProcessorState state) throws Exception; + + public abstract Serializable finish(ProcessorState state); +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AttributeValueNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AttributeValueNode.java new file mode 100644 index 0000000000000000000000000000000000000000..7311890c02ada4b1ad097f67a9037fa771935b4a --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AttributeValueNode.java @@ -0,0 +1,51 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.Node; +import leigh.mecha.nodegraph.ProcessorState; +import leigh.mecha.nodegraph.UselessAttribute; + +import java.io.Serializable; + +/** + * A Singleton node converts an anonymous value into a named value. + * + * @author C. Alexander Leigh + */ +public class AttributeValueNode extends Node { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(AttributeValueNode.class); + public static final String NODE_NAME = "leigh.conflux.v1.AttributeValue"; + public static final String KEY_OUTPUT_VALUE = "obj"; + public static final String KEY_INPUT_VALUE = "value"; + public static final String KEY_INPUT_NAME = "name"; + public static final String KEY_INPUT_DISPLAY_VALUE = "displayValue"; + public static final String KEY_INPUT_COLOR = "color"; + public static final String KEY_INPUT_FONTWEIGHT = "fontWeight"; + + public AttributeValueNode(String id) { + super(id); + addOutput(KEY_OUTPUT_VALUE, new UselessAttribute() { + public EO getObjectValue(ProcessorState state) throws Exception { + String key = getInputSingleString(KEY_INPUT_NAME, state); + Serializable value = getInputSingle(KEY_INPUT_VALUE, state); + Serializable displayValue = getInputSingle(KEY_INPUT_DISPLAY_VALUE, state); + Serializable color = getInputSingle(KEY_INPUT_COLOR, state); + Serializable fontWeight = getInputSingle(KEY_INPUT_FONTWEIGHT, state); + + logger.debug("KEY_OUTPUT_VALUE: [k: {}] [v: {}] [d: {}] [c: {}]", key, value, displayValue, color); + EO result = new EO(); + result.setValue(key, value); + + if (displayValue != null) result.setMetaValue(key, KEY_INPUT_DISPLAY_VALUE, displayValue, true); + if (color != null) result.setMetaValue(key, KEY_INPUT_COLOR, color, true); + if (fontWeight != null) result.setMetaValue(key, KEY_INPUT_FONTWEIGHT, fontWeight, true); + + logger.debug("Post processed object: {}", result); + + return result; + } + }); + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AverageNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AverageNode.java new file mode 100644 index 0000000000000000000000000000000000000000..45b09c1bc64ab2745e0d43095f761eb47612977b --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/AverageNode.java @@ -0,0 +1,37 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.mecha.nodegraph.ProcessorState; + +import java.io.Serializable; +import java.math.BigDecimal; + +public class AverageNode extends AggregateNode { + public static final String TYPE = "avg"; + BigDecimal value; + int count; + + public AverageNode(String id) { + super(id); + } + + @Override + public void start(ProcessorState state) { + count = 0; + value = BigDecimal.ZERO; + } + + @Override + public void processRow(EO row, String key, ProcessorState state) throws Exception { + BigDecimal x = row.getValueBigDecimal(key); + count++; + if (x != null) + value = value.add(x); + } + + @Override + public Serializable finish(ProcessorState state) { + if (count == 0) return null; + return value.divide(BigDecimal.valueOf(count)); + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/CommandNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/CommandNode.java new file mode 100644 index 0000000000000000000000000000000000000000..a6c3662f5aaa5d924f7f8fe7fa2eb50910ca4d54 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/CommandNode.java @@ -0,0 +1,15 @@ +package leigh.conflux.nodegraph; + +import leigh.mecha.nodegraph.Node; + +public class CommandNode extends Node { + public static final String NODE_NAME = "leigh.conflux.v1.CommandNode"; + public static final String KEY_IN_FUNC = "func"; + public static final String KEY_IN_API = "api"; + public static final String KEY_IN_ICON = "icon"; + public static final String KEY_OUT_ACTION = "action"; + + public CommandNode(String id) { + super(id); + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/CountNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/CountNode.java new file mode 100644 index 0000000000000000000000000000000000000000..8a93e0a0fd7d8428ac5796596f4bcbbcb06966d8 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/CountNode.java @@ -0,0 +1,35 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.ProcessorState; + +import java.io.Serializable; + +public class CountNode extends AggregateNode { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(CountNode.class); + public static final String TYPE = "count"; + int value; + + public CountNode(String id) { + super(id); + } + + @Override + public void start(ProcessorState state) { + value = 0; + logger.info("Count starting..."); + } + + @Override + public void processRow(EO row, String key, ProcessorState state) { + value++; + logger.info("Counted row"); + } + + @Override + public Serializable finish(ProcessorState state) { + return value; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/ExpressionNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/ExpressionNode.java new file mode 100644 index 0000000000000000000000000000000000000000..d2995093391d1d07ffd79fee23d893679fd4cdce --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/ExpressionNode.java @@ -0,0 +1,97 @@ +package leigh.conflux.nodegraph; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.Node; +import leigh.mecha.nodegraph.ProcessorState; +import leigh.mecha.nodegraph.UselessAttribute; +import leigh.mecha.util.Snavig; +import org.apache.commons.lang.math.NumberUtils; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import java.io.Serializable; + +/** + * Process a Graal expression. + * + * @author C. Alexander Leigh + */ +public class ExpressionNode extends Node { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ExpressionNode.class); + public static final String NODE_NAME = "leigh.conflux.v1.Expression"; + public static final String KEY_IN_EXPR = "expr"; + public static final String KEY_IN_A = "a"; + public static final String KEY_IN_B = "b"; + public static final String KEY_IN_C = "c"; + public static final String KEY_IN_D = "d"; + public static final String KEY_VAR_A = "a"; + public static final String KEY_VAR_B = "b"; + public static final String KEY_VAR_C = "c"; + public static final String KEY_VAR_D = "d"; + + public static final String KEY_OUT_VALUE = "value"; + private final ScriptEngine scriptEngine; + + public ExpressionNode(String id) { + super(id); + ScriptEngineManager mgr = new ScriptEngineManager(); + scriptEngine = mgr.getEngineByName("graal.js"); + + assert (scriptEngine != null); + + addOutput(KEY_OUT_VALUE, new UselessAttribute() { + public Serializable getSingleValue(ProcessorState state) throws Exception { + Serializable aVal = getValue(KEY_IN_A, state); + Serializable bVal = getValue(KEY_IN_B, state); + Serializable cVal = getValue(KEY_IN_C, state); + Serializable dVal = getValue(KEY_IN_D, state); + + logger.debug("Read values. [a: {}] [b: {}] [c: {}] [d: {}]", aVal, bVal, cVal, dVal); + + scriptEngine.put(KEY_VAR_A, aVal); + scriptEngine.put(KEY_VAR_B, bVal); + scriptEngine.put(KEY_VAR_C, cVal); + scriptEngine.put(KEY_VAR_D, dVal); + + Object o = scriptEngine.eval(String.valueOf(getInputSingle(KEY_IN_EXPR, state))); + String v = String.valueOf(o); + if (o != null && v.equals("null")) return null; + return v; + } + }); + } + + /** + * Return a String value given different sorts of inputs that this node might experience. + */ + private Serializable getValue(String key, ProcessorState state) throws Exception { + Serializable x = getInputSingle(key, state); + /* + if (x == null) { + EO obj = getInputObject(key, state); + logger.debug("Object input case. [obj: {}]", obj); + if(obj!=null) { + x = obj.getValue(key); + } + } + */ + + if (x == null) return null; + + String s = Snavig.convertToString(x); + + if (NumberUtils.isNumber(s)) { + return NumberUtils.createNumber(s); + } + + // FIXME: This will lose precision for integers + try { + return Double.parseDouble(s); + } catch (NumberFormatException e) { + // Intentionally Blank + } + + return x; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/LookupAttributeNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/LookupAttributeNode.java new file mode 100644 index 0000000000000000000000000000000000000000..fa8e79ae81d75cf5dfe41d16707ce2120a81ea0b --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/LookupAttributeNode.java @@ -0,0 +1,18 @@ +package leigh.conflux.nodegraph; + +import leigh.mecha.nodegraph.Node; + +public class LookupAttributeNode extends Node { + public static final String NODE_NAME = "leigh.conflux.v1.LookupAttributeNode"; + public static final String KEY_INPUT_SRCATTR = "srcAttr"; + public static final String KEY_INPUT_DSTATTR = "dstAttr"; + public static final String KEY_INPUT_LABEL = "label"; + public static final String KEY_INPUT_ISOUTPUT = "isOutput"; + public static final String KEY_INPUT_ISLOOKUP = "isLookup"; + public static final String KEY_INPUT_UI_INDEX = "uiIndex"; + public static final String KEY_OUTPUT_CFG = "lookupAttrCfg"; + + public LookupAttributeNode(String id) { + super(id); + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/LoopNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/LoopNode.java new file mode 100644 index 0000000000000000000000000000000000000000..5f63356461dec0b8fc4dbccdf8de8cf2ea8c77f0 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/LoopNode.java @@ -0,0 +1,152 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.Attribute; +import leigh.mecha.nodegraph.Node; +import leigh.mecha.nodegraph.ProcessorState; +import leigh.mecha.nodegraph.UselessAttribute; +import org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; + +/** + * This node loops through an input set, applying transformations to each object in that set, outputting a new set + * of computed values. + *

+ * The Loop operates on the input object set KEY_INPUT_OBJS. For every object in that set, it will read the + * values from every node connected to KEY_INPUT_PROC. So for example, if there are 256 objects in + * the input set, it will read the process nodes 256 times. When the process nodes are read, + * KEY_OUTPUT_CURSOR contains all the objects from the attribute of the current + * object in KEY_INPUT_OBJS. For example, if the attribute is "nums", the 1st time process is read, + * KEY_OUTPUT_CURSOR will contain the contents of the 1st object's "nums" attribute. + *

+ * The values produced by the process nodes are gathered together into a new synthetic object, and that synthetic + * object is added to a synthetic record set which is made available at KEY_OUTPUT_OBJS. + * When the loop has finished processing, the number of objects in the synthetic output set will be equal to the + * number of objects in the input set, and the order will be the same. Therefore, the 5th synthetic object contains + * the product of the 5th input object, etc. + * + * @author C. Alexander Leigh + */ +public class LoopNode extends Node { + public static final String NODE_NAME = "leigh.conflux.v1.Loop"; + public static final String KEY_INPUT_OBJS = "objs"; + public static final String KEY_IN_PATH = "path"; + public static final String KEY_INPUT_ATTR = "objAttr"; + public static final String KEY_OUTPUT_OBJS = "objs"; + public static final String KEY_OUTPUT_CURSOR = "cursor"; + public static final String KEY_INPUT_PROC = "process"; + private static final MechaLogger logger = MechaLoggerFactory.getLogger(LoopNode.class); + private EOLoop outputSet; + private EOLoop currentRows; + private EOLoop filteredSet; + + public LoopNode(String id) { + super(id); + addOutput(KEY_OUTPUT_OBJS, new UselessAttribute() { + public EOLoop getObjectsValue(ProcessorState state) throws Exception { + logger.debug("KEY_OUTPUT_OBJS read."); + process(state); + return outputSet; + } + }); + + addOutput(KEY_OUTPUT_CURSOR, new UselessAttribute() { + public EOLoop getObjectsValue(ProcessorState state) { + logger.debug("KEY_OUTPUT_CURSOR attribute read. Returning {}", currentRows); + return currentRows; + } + + public EO getObjectValue(ProcessorState state) { + if (currentRows != null && currentRows.size() > 0) return currentRows.get(0); + return null; + } + }); + } + + + /** + * Attempt to filter the input set, if a filter has been set. If this is the case, then the output set will + * be synthetic. If no filter has been set, then the output set will be the same as the input set. + */ + private void filter(ProcessorState state) throws Exception { + filteredSet = getInputObjects(KEY_INPUT_OBJS, state); + } + + public void process(ProcessorState state) throws Exception { + filter(state); + + String childKey = getInputStaticString(KEY_INPUT_ATTR, state); + String path = getInputStaticString(KEY_IN_PATH, state); + + if (StringUtils.isBlank(path)) { + logger.debug("Direct case."); + outputSet = filteredSet; + } else { + outputSet = new EOLoop(); + for (EO obj : filteredSet) { + logger.debug("Recursive case."); + obj.recurse(outputSet, path); + } + } + + logger.debug("Loop processing. [objSz: {}] [procSz: {}] [key: {}] [me: {}]", + filteredSet.size(), outputSet.size(), childKey, this.hashCode()); + + if (!StringUtils.isBlank(childKey)) { + processChildren(childKey, state); + return; + } + + ArrayList inputs = getInputs(KEY_INPUT_PROC); + + // Not children, so we are going to process "parents". + for (EO inputRow : outputSet) { + currentRows = new EOLoop().add(inputRow); + + logger.debug("Firing loop. [sz: {}] [k: {}] [obj: {}] {}", currentRows.size(), childKey, + inputRow, currentRows); + + // Read all the input nodes, and copy their produced value into the data object + + if (inputs != null) { + for (Attribute input : inputs) { + EO ieo = input.getObjectValue(state); + logger.debug("Process input: [ieo: {} {}] [input: {}]", ieo, ieo.hashCode(), input); + if (ieo != null) { + inputRow.merge(ieo); + } + } + } + } + } + + private void processChildren(String childKey, ProcessorState state) throws Exception { + for (EO inputRow : outputSet) { + // Set the current row output to this row. + logger.debug("Input row: {}", inputRow); + + if (!inputRow.containsKey(childKey)) { + logger.warn("Input object does not contain child key. Results will be null."); + } + currentRows = inputRow.getValueLoop(childKey); + + logger.debug("Current rows. [sz: {}] [k: {}] [obj: {}] {}", currentRows.size(), childKey, + inputRow, currentRows); + + // Read all the input graphs + ArrayList inputs = getInputs(KEY_INPUT_PROC); + if (inputs != null) { + for (Attribute input : inputs) { + logger.debug("Process input: {}", input); + EO ieo = input.getObjectValue(state); + if (ieo != null) + inputRow.setAll(ieo); + } + } + } + } +} \ No newline at end of file diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MaxNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MaxNode.java new file mode 100644 index 0000000000000000000000000000000000000000..03ec86bbbe88a98d692eb6d50c9f7d7397e46418 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MaxNode.java @@ -0,0 +1,39 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.mecha.nodegraph.ProcessorState; + +import java.io.Serializable; +import java.math.BigDecimal; + +public class MaxNode extends AggregateNode { + public static final String TYPE = "max"; + + BigDecimal value; + + public MaxNode(String id) { + super(id); + } + + @Override + public void start(ProcessorState state) { + value = null; + } + + @Override + public void processRow(EO row, String key, ProcessorState state) throws Exception { + BigDecimal x = row.getValueBigDecimal(key); + + if (x != null) { + if (value == null) + value = x; + else if (value.compareTo(x) < 0) + value = x; + } + } + + @Override + public Serializable finish(ProcessorState state) { + return value; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MergeNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MergeNode.java new file mode 100644 index 0000000000000000000000000000000000000000..3b83311a16721933ebfa32cb790404634de25441 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MergeNode.java @@ -0,0 +1,53 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.nodegraph.Attribute; +import leigh.mecha.nodegraph.Node; +import leigh.mecha.nodegraph.ProcessorState; +import leigh.mecha.nodegraph.UselessAttribute; + +import java.util.ArrayList; + +/** + * This node produces a new rowset from a n rowsets, by combining objects in each set. The new set contains + * new EOs. + * + * @author C. Alexander Leigh + */ +public class MergeNode extends Node { + public static final String KEY_INPUT_ROWS = "rows"; + public static final String KEY_OUTPUT_ROWS = "rows"; + + public MergeNode(String id) { + super(id); + addOutput(KEY_OUTPUT_ROWS, new UselessAttribute() { + public EOLoop getObjectsValue(ProcessorState state) throws Exception { + ArrayList loops = new ArrayList<>(); + for (Attribute a : getInputs(KEY_INPUT_ROWS)) { + EOLoop loop = a.getObjectsValue(state); + if (loop != null) loops.add(loop); + } + + EOLoop newLoop = new EOLoop(); + + for (int i = 0; i < loops.get(0).size(); i++) { + newLoop.add(merge(loops, i)); + } + + return newLoop; + } + }); + } + + private EO merge(ArrayList loops, int idx) { + EO merged = new EO(); + + for (EOLoop loop : loops) { + EO obj = loop.get(idx); + merged.setAll(obj); + } + + return merged; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MinNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MinNode.java new file mode 100644 index 0000000000000000000000000000000000000000..690ca59e00f15fb8b7eaf0b8e19856454451155f --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/MinNode.java @@ -0,0 +1,39 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.mecha.nodegraph.ProcessorState; + +import java.io.Serializable; +import java.math.BigDecimal; + +public class MinNode extends AggregateNode { + public static final String TYPE = "min"; + + BigDecimal value; + + public MinNode(String id) { + super(id); + } + + @Override + public void start(ProcessorState state) { + value = null; + } + + @Override + public void processRow(EO row, String key, ProcessorState state) throws Exception { + BigDecimal x = row.getValueBigDecimal(key); + + if (x != null) { + if (value == null) + value = x; + else if (value.compareTo(x) > 0) + value = x; + } + } + + @Override + public Serializable finish(ProcessorState state) { + return value; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/RecordSetNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/RecordSetNode.java new file mode 100644 index 0000000000000000000000000000000000000000..ceeb8d56889514f19528551386e5289332fd3fd7 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/RecordSetNode.java @@ -0,0 +1,53 @@ +package leigh.conflux.nodegraph; + +import leigh.conflux.DataSource; +import leigh.conflux.DataSourceBinder; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.Node; +import leigh.mecha.nodegraph.ProcessorState; +import leigh.mecha.nodegraph.UselessAttribute; + +/** + * A graph node for loading object data into a Conflux graph from a foreign system via a {@link DataSource} object. + * It is up to the individual implementation to provide the mechanics for getting rows into this node for the + * purposes of processing the model. + *

+ * The node provides the KEY_IN_NAME attribute, which when read should provide the name of the + * datasource to be read by the node. + * + * @author C. Alexander Leigh + */ +public class RecordSetNode extends Node { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(RecordSetNode.class); + public final static String KEY_OUT_OBJS = "objs"; + public final static String KEY_IN_NAME = "name"; + // FIXME: This is the wrong namespace + public static final String NODE_NAME = "qody.vision.v1.RecordSet"; + + /** + * Create a new DataSourceCode which wraps the provided {@link DataSource}. The DataSource.getData() + * method will be called whenever this nodes KEY_OUT_ROWS property is read, so this node returns + * the actual datasource (not a copy). + */ + public RecordSetNode(String id, DataSourceBinder binder) { + super(id); + addOutput(KEY_OUT_OBJS, new UselessAttribute() { + public EOLoop getObjectsValue(ProcessorState state) throws Exception { + String dsName = getInputSingleString(KEY_IN_NAME, state); + logger.debug("Reading objs. [name: {}]", dsName); + if (dsName != null) { + DataSource ds = binder.getDataSource(dsName); + logger.debug("Located datasource: {}", ds); + if (ds != null) { + // logger.debug("Read node from instance. {}", ds.getData().hashCode()); + return ds.getData(); + } + } + logger.warn("Unable to obtain a rowset."); + return null; + } + }); + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/SumNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/SumNode.java new file mode 100644 index 0000000000000000000000000000000000000000..d161f80310bfdcb3d77054df724a94cf78b09586 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/SumNode.java @@ -0,0 +1,39 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.ProcessorState; + +import java.math.BigDecimal; + +/** + * Implementation of a sum aggregation. + * + * @author C. Alexander Leigh + */ +public class SumNode extends AggregateNode { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SumNode.class); + private BigDecimal value = BigDecimal.ZERO; + + public SumNode(String id) { + super(id); + } + + @Override + public void start(ProcessorState state) { + value = BigDecimal.ZERO; + } + + public void processRow(EO row, String key, ProcessorState state) throws Exception { + BigDecimal x = row.getValueBigDecimal(key); + logger.debug("Processing row: [key: {}] [x: {}] {}", key, x, row); + if (x != null) + value = value.add(x); + } + + @Override + public BigDecimal finish(ProcessorState state) { + return value; + } +} diff --git a/leigh-conflux/src/main/java/leigh/conflux/nodegraph/UpdateNode.java b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/UpdateNode.java new file mode 100644 index 0000000000000000000000000000000000000000..cc8c3759ece96b80e7ccdd8bb2c83bd4e92b72c9 --- /dev/null +++ b/leigh-conflux/src/main/java/leigh/conflux/nodegraph/UpdateNode.java @@ -0,0 +1,30 @@ +package leigh.conflux.nodegraph; + +import leigh.eo.EO; +import leigh.mecha.nodegraph.Node; +import leigh.mecha.nodegraph.ProcessorState; +import leigh.mecha.util.Snavig; + +import java.io.Serializable; + +public class UpdateNode extends Node { + public static final String KEY_INPUT_OBJ = "obj"; + public static final String KEY_INPUT_KEY = "key"; + public static final String KEY_INPUT_VALUE = "value"; + + public UpdateNode(String id) { + super(id); + } + + /** + * Perform the update operation by reading a key/value pair from upstream and writing that into the provided + * object. + */ + public void process(ProcessorState state) throws Exception { + EO input = getInputObject(KEY_INPUT_OBJ, state); + String key = Snavig.convertToString(getInputSingle(KEY_INPUT_KEY, state)); + Serializable value = getInputSingle(KEY_INPUT_VALUE, state); + + input.setValue(key, value); + } +} diff --git a/leigh-conflux/src/test/java/leigh/conflux/DataFrameTest.java b/leigh-conflux/src/test/java/leigh/conflux/DataFrameTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1f827fcb70c35522946924de00c7c6595d35928b --- /dev/null +++ b/leigh-conflux/src/test/java/leigh/conflux/DataFrameTest.java @@ -0,0 +1,92 @@ +package leigh.conflux; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.eo.sort.EOSortPolicy; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.sort.FieldSort; +import leigh.mecha.sort.SortCardinality; +import org.junit.Test; + +import java.util.List; +import java.util.Locale; + +import static org.junit.Assert.assertEquals; + +/** + * JUnit test for the {@link DataFrame} class and related functionality. + * + * @author C. Alexander Leigh + */ +public class DataFrameTest { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DataFrameTest.class); + + @Test + public void testFilter() throws Exception { + EOLoop data = new EOLoop(); + data.add(new EO("person").setValue("firstName", "C. Alexander") + .setValue("lastName", "Leigh")); + data.add(new EO("person").setValue("firstName", "Nikki") + .setValue("lastName", "Windon")); + + DataFrame df = new DataFrameImpl(data); + assertEquals(2, df.size()); + + df.setQuickFilter("firstName", "Alex"); + assertEquals(2, df.size()); + + df.process(); + assertEquals(1, df.size()); + EO first = df.getView().get(0); + assertEquals("Leigh", first.getValue("lastName")); + } + + @Test + public void testAscendingSort() throws Exception { + EOLoop data = new EOLoop(); + data.add(new EO("person").setValue("firstName", "Nikki") + .setValue("lastName", "Windon")); + data.add(new EO("person").setValue("firstName", "C. Alexander") + .setValue("lastName", "Leigh")); + DataFrame df = new DataFrameImpl(data); + + // Select Nikki + df.getSelection().add(0, 0); + + EOSortPolicy sort = new EOSortPolicy(Locale.US); + sort.addField(new FieldSort("lastName", SortCardinality.ASCENDING)); + df.setSortPolicy(sort); + df.process(); + + // Check that Leigh is now first + EO first = df.getView().get(0); + assertEquals("Leigh", first.get("lastName")); + + // Verify that Nikki is still selected + List selected = df.getSelected(); + assertEquals(1, selected.size()); + EO firstSelected = selected.get(0); + + assertEquals("Windon", firstSelected.getValue("lastName")); + } + + @Test + public void testDescendingSort() throws Exception { + EOLoop data = new EOLoop(); + data.add(new EO("person").setValue("firstName", "C. Alexander") + .setValue("lastName", "Leigh")); + data.add(new EO("person").setValue("firstName", "Nikki") + .setValue("lastName", "Windon")); + DataFrame df = new DataFrameImpl(data); + + EOSortPolicy sort = new EOSortPolicy(Locale.US); + sort.addField(new FieldSort("lastName", SortCardinality.DESCENDING)); + df.setSortPolicy(sort); + df.process(); + + EO first = df.getView().get(0); + df.process(); + assertEquals("Windon", first.get("lastName")); + } +} diff --git a/leigh-continuity/.gitignore b/leigh-continuity/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-continuity/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-continuity/LICENSE b/leigh-continuity/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-continuity/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-continuity/build.gradle b/leigh-continuity/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..f9f4288430d56e9550a25e2b653c4416668a20e6 --- /dev/null +++ b/leigh-continuity/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version '15.0' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-continuity/src/main/java/leigh/continuity/cmd/BasicCommandProcessor.java b/leigh-continuity/src/main/java/leigh/continuity/cmd/BasicCommandProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..2e63f3463c7e892a4cdab24567c473541cd60adb --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/cmd/BasicCommandProcessor.java @@ -0,0 +1,110 @@ +package leigh.continuity.cmd; + +import leigh.continuity.line.BasicLineHandler; +import leigh.mecha.cli.CommandRoute; +import leigh.mecha.cli.CommandRouter; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.StringAccumulator; +import org.apache.commons.lang.WordUtils; + +import java.io.IOException; +import java.util.Map; + +/** + * Reference implementation of a generic line processor. + * + * @author C. Alexander Leigh + */ +public class BasicCommandProcessor implements CommandProcessor { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(BasicCommandProcessor.class); + private final CommandRouter router = new CommandRouter<>(); + private int consoleWidth = -1; + private String unknownResponse = "Unknown entry."; + private final BasicLineHandler lineHandler; + + public BasicCommandProcessor(BasicLineHandler lineHandler) { + this.lineHandler = lineHandler; + } + + public String getUnknownResponse() { + return unknownResponse; + } + + public void setUnknownResponse(String unknownResponse) { + this.unknownResponse = unknownResponse; + } + + public String clean(String s) { + return s.trim().toUpperCase(); + } + + /** + * Set the width of the remote console. Messages wider than this size will be wrapped at word boundaries. + */ + public void setConsoleWidth(int consoleWidth) { + this.consoleWidth = consoleWidth; + } + + public CommandRouter getHandlers() { + return router; + } + + public void addCommandHandler(String cmd, CommandHandler handler) { + router.putCommand(clean(cmd), handler); + } + + @Override + public String handleCommand(String[] cmd) throws Exception { + CommandRoute route = router.route(clean(cmd[0])); + if (route == null) return getUnknownResponse(); + Map handlers = route.getCommands(); + logger.info("Command: {}", cmd); + + if (handlers == null) return getUnknownResponse(); + + CommandHandler handler = null; + + if (handlers.size() > 1) { + return buildAmbigResponse(route); + } + + if (handlers.size() > 0) handler = (CommandHandler) handlers.values().toArray()[0]; + + String response; + + if (handler == null) { + // TODO We can think of a better generic response than this + response = getUnknownResponse(); + } else { + response = handler.handle(cmd); + } + + if (consoleWidth > 0) { + // Note - this does not take control characters like colors into account + + // FIXME: This does not take \r\n into account + response = WordUtils.wrap(response, consoleWidth); + } + + return response; + } + + public String buildAmbigResponse(CommandRoute route) throws IOException { + StringAccumulator sa = new StringAccumulator(","); + for (String name : route.getCommands().keySet()) { + sa.append(name); + } + + return "Ambiguous command. Matches: " + sa.toString(); + } + + public void write(String str) throws IOException { + logger.info("Want to write: {}", this.lineHandler); + lineHandler.write(str, false); + } + + public void close() { + lineHandler.close(); + } +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandHandler.java b/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..9127f67bbac6f72875217fe2be080c014bf9c5ba --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandHandler.java @@ -0,0 +1,5 @@ +package leigh.continuity.cmd; + +public interface CommandHandler { + String handle(String[] cmd) throws Exception; +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandProcessor.java b/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..94cfd637ad3f188f5dbfc7ce723502ff626682cc --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandProcessor.java @@ -0,0 +1,9 @@ +package leigh.continuity.cmd; + +import java.io.IOException; + +public interface CommandProcessor { + String handleCommand(String[] cmd) throws Exception; + + void write(String str) throws IOException; +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandProcessorFactory.java b/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandProcessorFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..ede7eca512eba7a7855f931edd9b47a84bf02949 --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/cmd/CommandProcessorFactory.java @@ -0,0 +1,7 @@ +package leigh.continuity.cmd; + +import java.io.IOException; + +public interface CommandProcessorFactory { + CommandProcessor build() throws IOException; +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/line/BasicLineHandler.java b/leigh-continuity/src/main/java/leigh/continuity/line/BasicLineHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..3559acce20d409f0fb62a5eb71436354eeefb3fe --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/line/BasicLineHandler.java @@ -0,0 +1,89 @@ +package leigh.continuity.line; + +import leigh.mecha.lang.DangerousRunnable; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.Socket; + +/** + * This class implements the skeleton for a line handler. The remote is expected to send lines of text, + * which are processed, with results returned to the caller. An asynchronous output mechanism is provided + * so that text can be sent to the caller without a correlating command having been received. + * + * @author C. Alexander Leigh + */ +public class BasicLineHandler implements DangerousRunnable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(BasicLineHandler.class); + private final Socket s; + private BufferedOutputStream os; + private String prompt = ">"; + private LineProcessor lineProcessor; + + public BasicLineHandler(Socket s) { + this.s = s; + } + + public void setLineProcessor(LineProcessor lineProcessor) { + this.lineProcessor = lineProcessor; + } + + /** + * Write a string to the client. We check for null & blank here, so it's OK to call this with sketchy arguments. + */ + public void write(String s, boolean doPrompt) throws IOException { + if (s != null && !s.isBlank()) { + os.write(s.getBytes()); + os.write("\r\n".getBytes()); + } + if (doPrompt) { + os.write("\r\n".getBytes()); + os.write(prompt.getBytes()); + os.write(" ".getBytes()); + } + os.flush(); + } + + @Override + public void runDangerously() throws Exception { + os = new BufferedOutputStream(s.getOutputStream()); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()))) { + while (true) { + String input = reader.readLine(); + + if (input == null) { + logger.warn("Shutting down. [s: {}]", s); + return; + } + + String response = lineProcessor.handleLine(input); + if (response == null) { + response = ""; + } + write(response, true); + } + } + } + + public void close() { + try { + s.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void run() { + try { + runDangerously(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/line/BasicLineHandlerFactory.java b/leigh-continuity/src/main/java/leigh/continuity/line/BasicLineHandlerFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..c3a8470763ded283c6dc9fb3a9e29457c6022c16 --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/line/BasicLineHandlerFactory.java @@ -0,0 +1,29 @@ +package leigh.continuity.line; + +import leigh.continuity.net.SocketHandler; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.IOException; +import java.net.Socket; + +/** + * This class processes an incoming socket connection on a new thread served by a {@link BasicLineHandler}. + * + * @author C. Alexander Leigh + */ +public class BasicLineHandlerFactory implements SocketHandler { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(BasicLineHandlerFactory.class); + private final LineProcessorFactory factory; + + public BasicLineHandlerFactory(LineProcessorFactory factory) { + this.factory = factory; + } + + @Override + public void handle(Socket s) throws IOException { + BasicLineHandler lineHandler = new BasicLineHandler(s); + lineHandler.setLineProcessor(factory.build(lineHandler)); + new Thread(lineHandler).start(); + } +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/line/CommandLineProcessor.java b/leigh-continuity/src/main/java/leigh/continuity/line/CommandLineProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..1a5e5577fd403f8572448181bd1b60c6655b42a0 --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/line/CommandLineProcessor.java @@ -0,0 +1,36 @@ +package leigh.continuity.line; + +import leigh.continuity.cmd.CommandProcessor; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +public class CommandLineProcessor implements LineProcessor { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(CommandLineProcessor.class); + private final CommandProcessor proc; + + public CommandLineProcessor(CommandProcessor proc) { + this.proc = proc; + } + + public String buildMessage(String s) { + StringBuilder buf = new StringBuilder(); + if (s != null && !s.isBlank()) { + buf.append(s); + } + return buf.toString(); + } + + @Override + public String handleLine(String input) throws Exception { + if (input.isBlank()) { + return buildMessage(""); + } + + String[] inArr = input.split(" "); + String response = proc.handleCommand(inArr); + if (response == null) { + response = ""; + } + return buildMessage(response); + } +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/line/LineProcessor.java b/leigh-continuity/src/main/java/leigh/continuity/line/LineProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..42908ba874df9bdce6580251cd28a794f6bc0d7d --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/line/LineProcessor.java @@ -0,0 +1,5 @@ +package leigh.continuity.line; + +public interface LineProcessor { + String handleLine(String line) throws Exception; +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/line/LineProcessorFactory.java b/leigh-continuity/src/main/java/leigh/continuity/line/LineProcessorFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..bf77de2ebff1f995ee1b6f1a740df0e9c55a46c8 --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/line/LineProcessorFactory.java @@ -0,0 +1,7 @@ +package leigh.continuity.line; + +import java.io.IOException; + +public interface LineProcessorFactory { + LineProcessor build(BasicLineHandler lineHandler) throws IOException; +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/net/SocketHandler.java b/leigh-continuity/src/main/java/leigh/continuity/net/SocketHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..f144a649b1b922d22e496321baf13a08e7a293b2 --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/net/SocketHandler.java @@ -0,0 +1,12 @@ +package leigh.continuity.net; + +import java.net.Socket; + +/** + * Classes implementing this interface handle inbound sockets on a network server. + * + * @author C. Alexander Leigh + */ +public interface SocketHandler { + void handle(Socket s) throws Exception; +} diff --git a/leigh-continuity/src/main/java/leigh/continuity/net/TcpListener.java b/leigh-continuity/src/main/java/leigh/continuity/net/TcpListener.java new file mode 100644 index 0000000000000000000000000000000000000000..9679679ea782366164899ec75689e4d2509df249 --- /dev/null +++ b/leigh-continuity/src/main/java/leigh/continuity/net/TcpListener.java @@ -0,0 +1,45 @@ +package leigh.continuity.net; + +import leigh.mecha.lang.DangerousRunnable; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.net.ServerSocket; +import java.net.Socket; + +/** + * This class implements a very basic TCP listener. Incoming connections are passed off to a + * {@link SocketHandler}. + * + * @author C. Alexander Leigh + */ +public class TcpListener implements DangerousRunnable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(TcpListener.class); + private final int port; + private final SocketHandler socketHandler; + + public TcpListener(SocketHandler socketHandler, int port) { + this.port = port; + this.socketHandler = socketHandler; + } + + @Override + public void runDangerously() throws Exception { + ServerSocket serverSocket = new ServerSocket(port); + + while (true) { + Socket s = serverSocket.accept(); + logger.info("Connection rev'd. [socket: {}]", s); + socketHandler.handle(s); + } + } + + @Override + public void run() { + try { + runDangerously(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/leigh-dsp/.gitignore b/leigh-dsp/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-dsp/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-dsp/LICENSE b/leigh-dsp/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-dsp/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-dsp/README.txt b/leigh-dsp/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..6b267187e49b252d2d1b89343788f1a72bfd3082 --- /dev/null +++ b/leigh-dsp/README.txt @@ -0,0 +1 @@ +leigh-dsp, for digital signal processing. \ No newline at end of file diff --git a/leigh-dsp/build.gradle b/leigh-dsp/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..315d4ff3b8d728642286d45779a38e04b229eaa3 --- /dev/null +++ b/leigh-dsp/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version leigh_dsp_ver + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + api group: 'com.github.wendykierp', name: 'JTransforms', version: '3.1' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} diff --git a/leigh-dsp/src/main/java/leigh/dsp/ADC.java b/leigh-dsp/src/main/java/leigh/dsp/ADC.java new file mode 100644 index 0000000000000000000000000000000000000000..16d8bf941438c4412eab66ba3506224bbaa03562 --- /dev/null +++ b/leigh-dsp/src/main/java/leigh/dsp/ADC.java @@ -0,0 +1,11 @@ +package leigh.dsp; + +/** + * Classes implementing this interface represent ADC hardware which can be used to record analog signals into + * a digital form. + * + * @author C. Alexander Leigh + */ +public interface ADC { + // Intentionally Blank +} diff --git a/leigh-elements-javafx/.gitignore b/leigh-elements-javafx/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-elements-javafx/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-elements-javafx/LICENSE b/leigh-elements-javafx/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-elements-javafx/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-elements-javafx/build.gradle b/leigh-elements-javafx/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..a9841f567b90322ee80bc4a47bb75ce7d2910149 --- /dev/null +++ b/leigh-elements-javafx/build.gradle @@ -0,0 +1,33 @@ +plugins { + id 'java' + id 'java-library' +} + +repositories { + mavenCentral() +} + +version leigh_elements_javafx + +def currentOS = org.gradle.internal.os.OperatingSystem.current() +def platform +if (currentOS.isWindows()) { + platform = 'win' +} else if (currentOS.isLinux()) { + platform = 'linux' +} else if (currentOS.isMacOsX()) { + platform = 'mac' +} + +dependencies { + testImplementation group: 'junit', name: 'junit', version: '4.12' + api 'eu.hansolo:tilesfx:11.41' + api project(':leigh-elements') + api project(':leigh-mecha-javafx') + api "org.openjfx:javafx-base:16:${platform}" + api "org.openjfx:javafx-graphics:16:${platform}" + api "org.openjfx:javafx-controls:16:${platform}" + api "org.openjfx:javafx-web:16:${platform}" + api "org.openjfx:javafx-media:16:${platform}" + api 'org.apache.tika:tika-core:1.4' +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/CustomImage.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/CustomImage.java new file mode 100644 index 0000000000000000000000000000000000000000..0eb9cc5e9235b620f098f67e4be13d10062e7aac --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/CustomImage.java @@ -0,0 +1,20 @@ +package leigh.elements.javafx; + +import javafx.scene.image.ImageView; + +public class CustomImage { + + private ImageView image; + + CustomImage(ImageView img) { + this.image = img; + } + + public void setImage(ImageView value) { + image = value; + } + + public ImageView getImage() { + return image; + } +} \ No newline at end of file diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/ThemeJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/ThemeJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..229c35d13ca16daf4b25b9f75204d46b0dc12570 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/ThemeJFX.java @@ -0,0 +1,38 @@ +package leigh.elements.javafx; + +import leigh.elements.sdk.Theme; +import leigh.mecha.javafx.ImageBinder; + +import java.util.Objects; + +public class ThemeJFX extends Theme { + private final ImageBinder icons; + + public ThemeJFX(ImageBinder icons) { + this.icons = icons; + } + + public ImageBinder getIcons() { + return icons; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ThemeJFX skin = (ThemeJFX) o; + return Objects.equals(icons, skin.icons); + } + + @Override + public int hashCode() { + return Objects.hash(icons); + } + + @Override + public String toString() { + return "Skin{" + + "icons=" + icons + + '}'; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ButtonElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ButtonElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..63a802e35de88b139a0a858227b49fe64898e70a --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ButtonElementJFX.java @@ -0,0 +1,60 @@ +package leigh.elements.javafx.type1; + +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Node; +import javafx.scene.control.Button; +import leigh.elements.ElementBase; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.actions.ScreenAction; +import leigh.elements.sdk.type1.ButtonElement; +import leigh.elements.sdk.type1.TextFieldElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.mecha.lang.FutureResult; +import leigh.mecha.lang.FutureResultListener; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; + +public class ButtonElementJFX extends ElementBase implements ElementJFX, EOListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ButtonElementJFX.class); + private final AppScreenInstance screen; + + protected ButtonElementJFX(EO cfg, AppScreenInstance screen) { + super(cfg); + this.screen = screen; + } + + @Override + public Node getJavaFXNode() { + Button btn = new Button(getCfg().getValueString(ButtonElement.KEY_LABEL)); + btn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + EO actions = getCfg().getValueLoop(ButtonElement.KEY_ACTIONS).get(0); + logger.info("Button clicked. [actions: {}]", actions); + if (actions != null) { + String cmdFunc = actions.getValueString(TextFieldElement.KEY_ACTION_FUNC); + String cmdTarget = actions.getValueString(TextFieldElement.KEY_ACTION_FUNC_TARGET); + FutureResult future = screen.call(cmdTarget, cmdFunc); + future.addListener(new FutureResultListener() { + @Override + public void receiveResult(Object result) { + screen.processAction((ScreenAction) result); + } + }); + } else { + logger.warn("Button action was null."); + } + } + }); + return btn; + } + + @Override + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) throws Exception { + + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementFactoryJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementFactoryJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..c0197b93e535591cc30b456130965a065181d6d6 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementFactoryJFX.java @@ -0,0 +1,66 @@ +package leigh.elements.javafx.type1; + +import leigh.elements.ElementsFactoryBase; +import leigh.elements.javafx.ThemeJFX; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.*; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.NodeConfig; + +import java.util.List; + +/** + * This class implements a factory for elements implementation. + * + * @author C. Alexander Leigh + */ +public class ElementFactoryJFX extends ElementsFactoryBase { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ElementFactoryJFX.class); + + // TODO Get rid of this + private final List nodeConfigs; + + public ElementFactoryJFX(List nodeConfigs) { + this.nodeConfigs = nodeConfigs; + } + + public Element newNode(EO cfg, AppScreenInstance screen) { + logger.debug("Instancing. [type: {}]", cfg.getApiType()); + switch (cfg.getApiType()) { + case ScreenElement.EO_TYPE: + return new ScreenElementJFX(cfg, screen); + case PanelGroupElement.EO_TYPE: + return new PanelGroupElementJFX(cfg, screen); + case PanelElement.EO_TYPE: + return new PanelElementJFX(cfg, screen); + case TextElement.EO_TYPE: + return new TextElementJFX(cfg); + case TextFieldElement.EO_TYPE: + return new FieldElementJFX(cfg, screen); + case FormLayout.EO_TYPE: + return new FormLayoutJFX(cfg, screen); + case TableElement.EO_TYPE: + return new TableElementJFX(cfg, screen, (ThemeJFX) screen.getTheme()); + case NodeGraphElement.EO_TYPE: + return new GraphElementJFX(cfg, nodeConfigs); + case ButtonElement.EO_TYPE: + return new ButtonElementJFX(cfg, screen); + case GridElement.EO_TYPE: + return new GridElementJFX(cfg, screen); + case TextTileElement.EO_TYPE: + return new TextTileElementJFX(cfg); + case GaugeTileElement.EO_TYPE: + return new GaugeTileElementJFX(cfg); + case FileFieldElement.EO_TYPE: + return new FilePanelJFX(cfg, screen); + case HorizontalLayoutElement.EO_TYPE: + return new HorizontalLayoutElementJFX(cfg, screen); + case FlowLayoutElement.EO_TYPE: + return new FlowLayoutElementJFX(cfg, screen); + } + + throw new IllegalStateException("Unknown Element type: " + cfg.getApiType()); + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..44b9b54d4b1b38d1e9d77acee55de3d4aa05996f --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementJFX.java @@ -0,0 +1,7 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; + +public interface ElementJFX { + Node getJavaFXNode(); +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementsTableView.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementsTableView.java new file mode 100644 index 0000000000000000000000000000000000000000..03133723b29046fef31d239cb72d8159cf9b6ab0 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ElementsTableView.java @@ -0,0 +1,75 @@ +package leigh.elements.javafx.type1; + +import javafx.collections.ObservableList; +import javafx.scene.control.SelectionMode; +import javafx.scene.control.TableRow; +import javafx.scene.input.MouseEvent; +import javafx.util.Callback; +import leigh.elements.sdk.AppDataFrame; +import leigh.eo.sort.EOSortPolicy; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.sort.FieldSort; +import leigh.mecha.sort.SortCardinality; + +import java.util.Locale; + +/** + * Implementation of the {@link javafx.scene.control.TableView} class with an overridden sort() mechanic + * suitable for use with Elements applications. Additionally this implementation provides a native de-selection + * mechanic on the rows, so that the end-user can second-click a row to de-select it. + * + * @author C. Alexander Leigh + */ +public class ElementsTableView extends javafx.scene.control.TableView { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ElementsTableView.class); + private final AppDataFrame frame; + + public ElementsTableView(AppDataFrame frame) { + this.frame = frame; + + getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + setRowFactory((Callback) param -> { + TableRow row = new TableRow(); + row.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> { + // Do Nothing + }); + return row; + }); + } + + /** + * This implementation of the sort() method works by using the sort functionality present in the + * {@link leigh.conflux.DataFrame} instead of that which {@link javafx.scene.control.TableView} provides. This method requires that the + * {@link javafx.scene.control.TableColumn} objects previously setup in the {@link javafx.scene.control.TableView} are {@link VisionTableColumn} + * instances. + */ + @Override + public void sort() { + logger.info("sort() called."); + + // getSortOrder list will be empty if we're expected to have the natural order. + + // TODO: Copy rather than retain the sortPolicy + ObservableList sortOrder = this.getSortOrder(); + logger.info("Existing sort order: {}", sortOrder); + + // FIXME Get the Locale properly + EOSortPolicy policy = new EOSortPolicy(Locale.US); + for (javafx.scene.control.TableColumn gridCol : sortOrder) { + VisionTableColumn col = (VisionTableColumn) gridCol; + javafx.scene.control.TableColumn.SortType type = gridCol.getSortType(); + SortCardinality card = (type == javafx.scene.control.TableColumn.SortType.ASCENDING ? SortCardinality.ASCENDING : SortCardinality.DESCENDING); + policy.addField(new FieldSort(col.getName(), card)); + } + + try { + logger.info("Calling frame.sort()"); + frame.sort(policy); + this.refresh(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FieldElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FieldElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..53f60301aea5a9b3b349a9aa9fa3f02c8c9dcd8e --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FieldElementJFX.java @@ -0,0 +1,85 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; +import javafx.scene.layout.HBox; +import leigh.elements.ElementBase; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.actions.ScreenAction; +import leigh.elements.sdk.type1.TextFieldElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EOLoop; +import leigh.eo.EditEventGenerator; +import leigh.mecha.lang.FutureResult; +import leigh.mecha.lang.FutureResultListener; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.Snavig; + +import java.io.Serializable; + +/** + * Implementation of the Field element for JavaFX. Note that this implementation only provides the input field + * itself, not a label. It is meant to be used with another element which will retrieve its label and other + * information and decorate the field appropriately, for example, by including a label. + *

+ * This class will update the FieldElement.KEY_VALUE attribute in the configuration whenever + * the end-user changes the value in the field. + * + * @author C. Alexander Leigh + */ +public class FieldElementJFX extends ElementBase implements ElementJFX, EOListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FieldElementJFX.class); + private HBox hbox = new HBox(); + private TextField input = new TextField(); + // Whether we should ignore the next change event. We do this to avoid a loop. + + protected FieldElementJFX(EO cfg, AppScreenInstance screen) { + super(cfg); + + ((EditEventGenerator) cfg.getEditTracker()).addListener(cfg, this); + + String value = cfg.getValueString(TextFieldElement.KEY_VALUE); + if (value != null) input.setText(value); + input.textProperty().addListener((observable, oldValue, newValue) -> { + logger.debug("Field value is changing. [oldValue: {}] [newValue: {}]", oldValue, newValue); + if (!newValue.equals(cfg.getValueString(TextFieldElement.KEY_VALUE))) { + cfg.setValue(TextFieldElement.KEY_VALUE, newValue); + } + }); + + hbox.getChildren().add(input); + + EOLoop actions = cfg.getValueLoop(TextFieldElement.KEY_ACTIONS); + for (EO action : actions) { + String cmdFunc = action.getValueString(TextFieldElement.KEY_ACTION_FUNC); + String cmdTarget = action.getValueString(TextFieldElement.KEY_ACTION_FUNC_TARGET); + Button funcBtn = new Button("(f)"); + funcBtn.setOnAction(event -> { + FutureResult future = screen.call(cmdTarget, cmdFunc); + future.addListener(new FutureResultListener() { + @Override + public void receiveResult(Object result) { + screen.processAction((ScreenAction) result); + } + }); + }); + hbox.getChildren().add(funcBtn); + } + } + + @Override + public Node getJavaFXNode() { + return hbox; + } + + @Override + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) { + logger.debug("Inbound value event. [newValue: {}]", newValue); + if (TextFieldElement.KEY_VALUE.equals(key) && !input.getText().equals(newValue)) { + input.setText(Snavig.convertToString(newValue)); + } + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FilePanelEntry.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FilePanelEntry.java new file mode 100644 index 0000000000000000000000000000000000000000..a5c9e3d671c739ab15adeeefede2152b42952f36 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FilePanelEntry.java @@ -0,0 +1,92 @@ +package leigh.elements.javafx.type1; + +import javafx.beans.property.SimpleStringProperty; +import javafx.concurrent.Task; +import javafx.scene.control.ProgressIndicator; + +import java.io.File; +import java.util.Objects; +import java.util.Random; +import java.util.UUID; + +public class FilePanelEntry extends Task { + private static final Random rng = new Random(); + private final int pauseTime = rng.nextInt(30) + 20; + public static final int NUM_ITERATIONS = 100; + private long fileSize; + private String fileType; + private File file; + private UUID id; + + private SimpleStringProperty filename = new SimpleStringProperty(); + + public String getFilename() { + return filename.get(); + } + + public void setFilename(String filename) { + this.filename.set(filename); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FilePanelEntry that = (FilePanelEntry) o; + return Objects.equals(filename, that.filename); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + + public String getFileType() { + return fileType; + } + + public String getFileKind() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + @Override + public int hashCode() { + return Objects.hash(filename); + } + + @Override + protected Void call() throws Exception { + this.updateProgress(ProgressIndicator.INDETERMINATE_PROGRESS, 1); + this.updateMessage("Running..."); + for (int i = 0; i < NUM_ITERATIONS; i++) { + updateProgress((1.0 * i) / NUM_ITERATIONS, 1); + Thread.sleep(pauseTime); + } + this.updateMessage("Done"); + this.updateProgress(1, 1); + return null; + } + + public long getFileSize() { + return fileSize; + } + + public void setFileSize(long fileSize) { + this.fileSize = fileSize; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FilePanelJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FilePanelJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..ee85b2d03ff445dbe6323ebbec5601bab02f2f50 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FilePanelJFX.java @@ -0,0 +1,272 @@ +package leigh.elements.javafx.type1; + +import javafx.beans.property.ReadOnlyStringWrapper; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.TableView; +import javafx.scene.control.*; +import javafx.scene.control.cell.ProgressBarTableCell; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.DragEvent; +import javafx.scene.input.Dragboard; +import javafx.scene.input.MouseEvent; +import javafx.scene.input.TransferMode; +import javafx.scene.layout.VBox; +import javafx.util.Callback; +import leigh.elements.ElementBase; +import leigh.elements.sdk.AppScreenInstance; +import leigh.eo.EO; +import leigh.mecha.file.FileStat; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.io.FileUtils; + +import java.awt.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; + +/** + * This class provides an implementation of a drag&drop file upload/download panel. + *

+ * This control maintains a list of the files in the files loop. Each file is presented + * as a file entry EO. + * + * @author C. Alexader Leigh + */ +public class FilePanelJFX extends ElementBase implements ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FilePanelJFX.class); + private final ObservableList data = FXCollections.observableArrayList(); + private final int parallelUploads = 2; + private VBox root = new VBox(); + private ToolBar tb = new ToolBar(); + private TableView fileTable; + + public FilePanelJFX(EO cfg, AppScreenInstance screen) { + super(cfg); + + fileTable = new TableView(); + // To avoid bugs in TableView, set this right away. + fileTable.setItems(data); + TableColumn filenameCol = new TableColumn("Filename"); + filenameCol.setCellValueFactory(new PropertyValueFactory("filename")); + filenameCol.setPrefWidth(300); + fileTable.setMinHeight(200); + fileTable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + Button galleryBtn = new Button("Gallery"); + tb.getItems().add(galleryBtn); + Button deleteBtn = new Button("Delete"); + tb.getItems().add(deleteBtn); + deleteBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + ObservableList selectedRows = fileTable.getSelectionModel().getSelectedItems(); + // we don't want to iterate on same collection on with we remove items + ArrayList rows = new ArrayList<>(selectedRows); + rows.forEach(row -> fileTable.getItems().remove(row)); + } + }); + + TableColumn kindCol = new TableColumn("Kind"); + kindCol.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures param) { + return new ReadOnlyStringWrapper(param.getValue().getFileKind()); + } + }); + kindCol.setPrefWidth(250); + + TableColumn progressCol = new TableColumn("Size"); + progressCol.setCellValueFactory(new PropertyValueFactory("progress")); + progressCol.setCellFactory(forTableColumn()); + + fileTable.setRowFactory(new Callback, TableRow>() { + @Override + public TableRow call(TableView param) { + TableRow row = new TableRow<>(); + row.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent event) { + if (event.getClickCount() == 2 && (!row.isEmpty())) { + FilePanelEntry rowData = row.getItem(); + try { + Desktop.getDesktop().open(rowData.getFile()); + } catch (IOException e) { + e.printStackTrace(); + } + // System.out.println(rowData); + } + } + }); + return row; + } + }); + + fileTable.getColumns().addAll(filenameCol, kindCol, progressCol); + root.getChildren().addAll(tb, fileTable); + final ObservableList data = FXCollections.observableArrayList(); + + ExecutorService executor = Executors.newFixedThreadPool(parallelUploads, new ThreadFactory() { + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(r); + t.setDaemon(true); + return t; + } + }); + + for (FilePanelEntry task : fileTable.getItems()) { + executor.execute(task); + } + + root.setOnDragOver(new EventHandler() { + @Override + public void handle(DragEvent event) { + if (event.getGestureSource() != root + && event.getDragboard().hasFiles()) { + /* we only allow for copying into the app */ + event.acceptTransferModes(TransferMode.COPY); + } + event.consume(); + } + }); + + root.setOnDragDropped(new EventHandler() { + @Override + public void handle(DragEvent event) { + Dragboard db = event.getDragboard(); + boolean success = false; + if (db.hasFiles()) { + for (File uploadFile : db.getFiles()) { + // Is the file a directory? + if (uploadFile.isDirectory()) { + try { + Files.walkFileTree(uploadFile.toPath(), new SimpleFileVisitor() { + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) + throws IOException { + if (dir.equals(root)) return FileVisitResult.CONTINUE; + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + // Note: This block is only called if we were iterating a directory + logger.info("visitFile() called..."); + + FilePanelEntry entry = new FilePanelEntry(); + File ul = file.toFile(); + + UUID fileId = screen.getAppInstance().putBlob(new FileInputStream(uploadFile), + new FileStat(uploadFile.getName(), null, uploadFile.length())); + logger.info("Uploaded file. [id: {}]", fileId); + + entry.setId(fileId); + entry.setFileSize(ul.length()); + entry.setFileType(Files.probeContentType(file)); + entry.setFilename(ul.getName()); + entry.setFile(ul); + fileTable.getItems().add(entry); + executor.execute(entry); + + return FileVisitResult.CONTINUE; + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + // Note: This block is called for single file entries + FilePanelEntry entry = new FilePanelEntry(); + UUID fileId = null; + try { + fileId = screen.getAppInstance().putBlob(new FileInputStream(uploadFile), + new FileStat(uploadFile.getName(), null, uploadFile.length())); + logger.info("Uploaded file. [id: {}]", fileId); + entry.setId(fileId); + entry.setFileSize(uploadFile.length()); + entry.setFile(uploadFile); + try { + entry.setFileType(Files.probeContentType(uploadFile.toPath())); + } catch (IOException e) { + e.printStackTrace(); + } + entry.setFilename(uploadFile.getName()); + fileTable.getItems().add(entry); + executor.execute(entry); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + success = true; + } + /* let the source know whether the string was successfully + * transferred and used */ + event.setDropCompleted(success); + + event.consume(); + } + }); + } + + public Callback, + TableCell> forTableColumn() { + return new Callback, TableCell>() { + @Override + public TableCell call(TableColumn param) { + logger.info("callback called"); + return new ProgressBarTableCell() { + public void updateItem(Double val, boolean empty) { + TableRow row = getTableRow(); + FilePanelEntry entry = row.getItem(); + + if (entry == null) { + logger.warn("Event handler called, but row entry was null."); + return; + } + + if (val != null && val == 1) { + EO fileEntry = new EO(); + fileEntry.setValue("filename", entry.getFile()); + fileEntry.setValue("kind", entry.getFileKind()); + fileEntry.setValue("size", entry.getFileSize()); + fileEntry.setValue("type", entry.getFileType()); + logger.info("Cell is done. [cfg: {}] [entry: {}]", entry); + getCfg().getValueLoop("files").add(fileEntry); + logger.info("CFG: {}", getCfg()); + + // TODO Update this to the uploaded size + super.setGraphic(null); + setText(FileUtils.byteCountToDisplaySize(entry.getFileSize())); + } else { + super.updateItem(val, empty); + } + } + }; + } + }; + } + + @Override + public Node getJavaFXNode() { + return root; + } +} \ No newline at end of file diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FlowLayoutElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FlowLayoutElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..0bd1f8028f507d0ab5376e86a052f1164f4aa0d0 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FlowLayoutElementJFX.java @@ -0,0 +1,24 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.Pane; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.HorizontalLayoutElement; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +public class FlowLayoutElementJFX extends LayoutElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(HorizontalLayoutElementJFX.class); + + protected FlowLayoutElementJFX(EO cfg, AppScreenInstance screen) { + super(cfg, screen); + buildChildren(HorizontalLayoutElement.KEY_CONTENT); + } + + @Override + public Pane getPane() { + return new FlowPane(); + } + +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FormLayoutJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FormLayoutJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..ea394af1e6e78519c4f21c557ee0e3e987f8a787 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/FormLayoutJFX.java @@ -0,0 +1,60 @@ +package leigh.elements.javafx.type1; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.layout.GridPane; +import leigh.elements.ElementsSort; +import leigh.elements.ParentElement; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.FormLayout; +import leigh.elements.sdk.type1.TextFieldElement; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.Locale; + +/** + * Implementation of a FormLayoutElement for JavaFX. + * + * @author C. Alexander Leigh + */ +public class FormLayoutJFX extends ParentElement implements ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FormLayoutJFX.class); + GridPane grid = new GridPane(); + + protected FormLayoutJFX(EO cfg, AppScreenInstance controller) { + super(cfg, controller); + grid.setAlignment(Pos.CENTER); + grid.setHgap(10); + grid.setVgap(10); + grid.setPadding(new Insets(25, 25, 25, 25)); + + buildChildren(FormLayout.KEY_FIELDS); + + int row = 0; + + logger.debug("Found fields: {}", getChildren()); + + ArrayList children = ElementsSort.sort( + getChildren().get(FormLayout.KEY_FIELDS), + "uiIndex", Locale.ENGLISH); + + for (Element field : children) { + String label = field.getCfg().getValueString(TextFieldElement.KEY_LABEL); + Label l = new Label(label + ":"); + grid.add(l, 0, row); + grid.add(((ElementJFX) field).getJavaFXNode(), 1, row); + row++; + } + } + + @Override + public Node getJavaFXNode() { + return grid; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GaugeTileElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GaugeTileElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..0bfd1edeff08d63ecfc7ab86a110925d083ae36f --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GaugeTileElementJFX.java @@ -0,0 +1,49 @@ +package leigh.elements.javafx.type1; + +import eu.hansolo.tilesfx.Tile; +import eu.hansolo.tilesfx.TileBuilder; +import javafx.scene.Node; +import javafx.scene.paint.Color; +import leigh.elements.ElementBase; +import leigh.elements.sdk.type1.GaugeTileElement; +import leigh.eo.EO; + +public class GaugeTileElementJFX extends ElementBase implements ElementJFX { + private final Tile tile; + + protected GaugeTileElementJFX(EO cfg) { + super(cfg); + + String title = cfg.getValueString(GaugeTileElement.KEY_TITLE); + Double value = cfg.getValueDouble(GaugeTileElement.KEY_VALUE); + String units = cfg.getValueString(GaugeTileElement.KEY_UNITS); + Double max = cfg.getValueDouble(GaugeTileElement.KEY_MAX_VALUE); + Double min = cfg.getValueDouble(GaugeTileElement.KEY_MIN_VALUE); + + + TileBuilder tb = TileBuilder.create() + .skinType(Tile.SkinType.GAUGE) + .prefSize(150, 150) + .backgroundColor(Color.web("#505050")); + + if (title != null) { + tb.title(title); + } + + if (units != null) { + tb.unit(units); + } + + if (min != null) tb.minValue(min); + if (max != null) tb.maxValue(max); + + tile = tb.build(); + + if (value != null) tile.setValue(value); + } + + @Override + public Node getJavaFXNode() { + return tile; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GraphElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GraphElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..c938cfb5902dc42725d28ba3ec403af5d0f6ff7b --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GraphElementJFX.java @@ -0,0 +1,81 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; +import javafx.scene.control.ScrollPane; +import javafx.scene.layout.Pane; +import javafx.scene.layout.VBox; +import leigh.elements.ElementBase; +import leigh.elements.sdk.type1.NodeGraphElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EOLoop; +import leigh.eo.EditEventGenerator; +import leigh.mecha.javafx.JavaFXConstants; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.GraphSerializer; +import leigh.mecha.nodegraph.NodeConfig; +import leigh.mecha.nodegraph.javafx.NodeGraphJFX; + +import java.io.Serializable; +import java.util.List; + +/** + * Implementation of the node graph editor for JavaFX. + * + * @author C. Alexander Leigh + */ +public class GraphElementJFX extends ElementBase implements ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(GraphElementJFX.class); + private final VBox base = new VBox(); + private final ScrollPane scrollPane = new ScrollPane(); + private boolean eventArmed = true; + + public GraphElementJFX(EO elementCfg, List configs) { + super(elementCfg); + + Pane root = new Pane(); + scrollPane.setContent(root); + scrollPane.setPannable(true); + + GraphSerializer gs = new GraphSerializer(); + NodeGraphJFX g = new NodeGraphJFX(root, configs); + + // When the contents of the node change, we update our cfg object. + g.getListeners().add(() -> { + EOLoop graphState = gs.save(g); + eventArmed = false; + elementCfg.setValue(NodeGraphElement.KEY_GRAPH, graphState); + eventArmed = true; + logger.debug("Serialized graph: {}", graphState); + }); + + EditEventGenerator et = (EditEventGenerator) elementCfg.getEditTracker(); + et.addListener(elementCfg, new EOListener() { + @Override + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) throws Exception { + // If the value changes in the cfg, and we are armed, we load. + if (eventArmed) { + if (key.equals(NodeGraphElement.KEY_GRAPH)) { + g.clear(); + gs.load(g, (EOLoop) newValue, configs); + } + } + } + }); + + // If we have an initial state, load it now. + EOLoop graphState = elementCfg.getValueLoop(NodeGraphElement.KEY_GRAPH); + if (graphState.size() > 0) { + gs.load(g, graphState, configs); + } + + scrollPane.setPrefHeight(JavaFXConstants.REALLY_TALL_HEIGHT); + base.getChildren().add(scrollPane); + } + + @Override + public Node getJavaFXNode() { + return base; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GridElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GridElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..c0899bf2a4e4ce87ee27c83bf7b6ce4252d6ce4d --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/GridElementJFX.java @@ -0,0 +1,72 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; +import javafx.scene.layout.FlowPane; +import leigh.elements.ElementsSort; +import leigh.elements.ParentElement; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.GridElement; +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.eo.EOLoopListener; +import leigh.eo.EditEventGenerator; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.Locale; + +/** + * This class provides the JavaFX implementation for the {@link GridElement}. + * + * @author C. Alexander Leigh + */ +public class GridElementJFX extends ParentElement implements ElementJFX, EOLoopListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(GridElementJFX.class); + private FlowPane grid = new FlowPane(); + + protected GridElementJFX(EO cfg, AppScreenInstance screen) { + super(cfg, screen); + + EOLoop content = cfg.getValueLoop(GridElement.KEY_CONTENT); + ((EditEventGenerator) cfg.getEditTracker()).addLoopListener(content, this); + grid.getStyleClass().add("leigh-elements-grid"); + update(); + } + + @Override + public Node getJavaFXNode() { + return grid; + } + + private void update() { + // Build the configs for our children - stored in KEY_CONTENT + grid.getChildren().clear(); + + logger.debug("Child size: {}", getChildren().size()); + buildChildren(GridElement.KEY_CONTENT); + + logger.debug("Found fields: {}", getChildren()); + + // Sort our children based on their uiIndex + ArrayList children = ElementsSort.sort( + getChildren().get(GridElement.KEY_CONTENT), + "uiIndex", Locale.ENGLISH); + + for (Element field : children) { + logger.debug("child: {}", field); + grid.getChildren().add(((ElementJFX) field).getJavaFXNode()); + } + } + + @Override + public void removed(EOLoop loop, EO obj, int index) { + update(); + } + + @Override + public void added(EOLoop loop, EO obj) { + update(); + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/HorizontalLayoutElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/HorizontalLayoutElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..8d44c9573faefe86d2accb22bb02fbd1480bbba0 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/HorizontalLayoutElementJFX.java @@ -0,0 +1,23 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.layout.HBox; +import javafx.scene.layout.Pane; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.HorizontalLayoutElement; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +public class HorizontalLayoutElementJFX extends LayoutElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(HorizontalLayoutElementJFX.class); + + protected HorizontalLayoutElementJFX(EO cfg, AppScreenInstance screen) { + super(cfg, screen); + buildChildren(HorizontalLayoutElement.KEY_CONTENT); + } + + @Override + public Pane getPane() { + return new HBox(); + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/LayoutElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/LayoutElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..72efa860e2f5ea7a1eafbc9c6238bd0966b2b4d4 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/LayoutElementJFX.java @@ -0,0 +1,47 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; +import javafx.scene.layout.Pane; +import leigh.elements.ElementsSort; +import leigh.elements.ParentElement; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.HorizontalLayoutElement; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.Locale; + +public abstract class LayoutElementJFX extends ParentElement implements ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(HorizontalLayoutElementJFX.class); + public static final String KEY_CONTENT = "content"; + + protected LayoutElementJFX(EO cfg, AppScreenInstance screen) { + super(cfg, screen); + buildChildren(HorizontalLayoutElement.KEY_CONTENT); + } + + public abstract Pane getPane(); + + @Override + public Node getJavaFXNode() { + Pane root = getPane(); + + logger.info("Children: {}", getChildren()); + + ArrayList children = ElementsSort.sort( + getChildren().get(KEY_CONTENT), + "uiIndex", Locale.ENGLISH); + + for (Element child : children) { + if (child instanceof ElementJFX) { + logger.info("Adding child node: [idx: {}] [node: {}]", child.getCfg().get("uiIndex"), child); + root.getChildren().add(((ElementJFX) child).getJavaFXNode()); + } + } + + return root; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/PanelElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/PanelElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..69483294cae76c7930a5da7b96440c5f4667e643 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/PanelElementJFX.java @@ -0,0 +1,56 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; +import javafx.scene.control.TitledPane; +import javafx.scene.layout.VBox; +import leigh.elements.ElementsSort; +import leigh.elements.ParentElement; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.PanelElement; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.Locale; + +/** + * Implementation of the {@link PanelElement} for JavaFX. + *

+ * Limitations: This implementation does not track changes to its configuration, and so will not mutate if that + * configuration changes, including the PanelElement.KEY_CONTENT. + * + * @author C. Alexander Leigh + */ +public class PanelElementJFX extends ParentElement implements ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(PanelElementJFX.class); + private TitledPane root; + + protected PanelElementJFX(EO cfg, AppScreenInstance controller) { + super(cfg, controller); + buildChildren(PanelElement.KEY_CONTENT); + } + + @Override + public Node getJavaFXNode() { + root = new TitledPane(); + root.setText(getCfg().getValueString(PanelElement.KEY_LABEL)); + VBox content = new VBox(); + root.setContent(content); + + // FIXME: Set Locale properly + ArrayList children = ElementsSort.sort( + getChildren().get(PanelElement.KEY_CONTENT), + "uiIndex", Locale.ENGLISH); + + for (Element child : children) { + if (child instanceof ElementJFX) { + logger.debug("Adding child node: [idx: {}] [node: {}]", child.getCfg().get("uiIndex"), child); + content.getChildren().add(((ElementJFX) child).getJavaFXNode()); + } + } + + return root; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/PanelGroupElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/PanelGroupElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..f9617471ae511843dad9650eff0c26fc3efb78b4 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/PanelGroupElementJFX.java @@ -0,0 +1,51 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; +import javafx.scene.layout.VBox; +import leigh.elements.ElementsSort; +import leigh.elements.ParentElement; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.PanelGroupElement; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.Locale; + +public class PanelGroupElementJFX extends ParentElement implements ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(PanelGroupElementJFX.class); + private VBox root; + + protected PanelGroupElementJFX(EO cfg, AppScreenInstance controller) { + super(cfg, controller); + buildChildren(PanelGroupElement.KEY_CONTENT); + } + + @Override + public String toString() { + return "PanelGroupElementJFX{" + + "root=" + root + + "} " + super.toString(); + } + + @Override + public Node getJavaFXNode() { + root = new VBox(); + + // FIXME: Set Locale properly + ArrayList children = ElementsSort.sort( + getChildren().get(PanelGroupElement.KEY_CONTENT), + "index", Locale.ENGLISH); + + for (Element child : children) { + if (child instanceof ElementJFX) { + logger.debug("Adding child node: {}", child); + root.getChildren().add(((ElementJFX) child).getJavaFXNode()); + } + } + + return root; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ScreenElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ScreenElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..5d85167fa077caad2b050cf990fa0737e0995976 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/ScreenElementJFX.java @@ -0,0 +1,200 @@ +package leigh.elements.javafx.type1; + +import javafx.collections.ObservableList; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.control.SplitPane; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.Pane; +import javafx.scene.layout.VBox; +import leigh.elements.ElementsSort; +import leigh.elements.ParentElement; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.ScreenElement; +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.eo.EOLoopListener; +import leigh.eo.EditEventGenerator; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; + +/** + * Implementation of {@ScreenElement} for JavaFX. + *

+ * Limitations: The content for this element is expected to consist entirely of + * {@link leigh.elements.sdk.type1.PanelGroupElement}. + * + * @author C. Alexander Leigh + */ +public class ScreenElementJFX extends ParentElement implements ScreenElement, ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ScreenElementJFX.class); + private final EOLoop contentCfg; + private final HashMap> widths = new HashMap<>(); + private final SplitPane splitPane; + private BorderPane root; + private String imageUrl = "file:qody-vision-app/vsimg/brand_logo.png"; + private Image image; + + protected ScreenElementJFX(EO cfg, AppScreenInstance factory) { + super(cfg, factory); + contentCfg = cfg.getValueLoop(ScreenElement.KEY_CONTENT); + + buildChildren(ScreenElement.KEY_CONTENT); + + root = new BorderPane(); + + // This is JavaFX-specific, so we can't push it up to a parent. + logger.info("Logo is {}", imageUrl); + if (imageUrl != null) { + image = new Image(imageUrl); + } + + // Our superclass should have populated the panes from the configuration, so by this point in the + // constructor, we can iterate them. + + splitPane = new SplitPane(); + + ArrayList children = ElementsSort.sort( + getChildren().get(ScreenElement.KEY_CONTENT), + "uiIndex", Locale.ENGLISH); + + for (Element group : children) { + logger.info("Adding panel group to content: {}", group.getCfg()); + VBox westNode = (VBox) ((PanelGroupElementJFX) group).getJavaFXNode(); + westNode.setMinWidth(200); + + splitPane.getItems().add(westNode); + SplitPane.setResizableWithParent(splitPane.getItems().get(0), false); + } + + // Setup the initial JFX state. + root.setTop(buildHeader()); + root.setCenter(splitPane); + + EditEventGenerator peg = (EditEventGenerator) contentCfg.getEditTracker(); + + // FIXME: Splitpane positions should be retained + + peg.addLoopListener(contentCfg, new EOLoopListener() { + @Override + public void removed(EOLoop loop, EO obj, int index) { + logger.info("Panel content removing. [index: {}] [paneSz: {}] [obj: {}]", + index, splitPane.getItems().size(), obj); + + // obj has been removed from the content. Remove the corresponding JavaFX. + + savePositions(); + ObservableList panes = splitPane.getItems(); + // FIXME - This sometimes calls with index=2 to=1 which throws a IAE + panes.subList(index, panes.size()).clear(); + restorePositions(); + } + + @Override + public void added(EOLoop loop, EO obj) { + logger.info("Panel content adding: {}", obj); + + // Index of the panel being added + int idx = loop.indexOf(obj); + ObservableList panes = splitPane.getItems(); + panes.subList(idx, panes.size()).clear(); + Element group = factory.getFactory().build(obj, factory); + VBox child = (VBox) ((PanelGroupElementJFX) group).getJavaFXNode(); + child.setMinWidth(200); + // child.setMinWidth(Region.USE_PREF_SIZE); + // child.setMinWidth(400); + SplitPane.setResizableWithParent(child, false); + savePositions(); + + logger.info("New child. [minSize: {}]", child.getMinWidth()); + + panes.add(child); + + restorePositions(); + } + }); + + } + + /** + * Save the current positions in the splitPane into the positions list. If there were more positions in the stored + * list than there are dividers presently, the old positions are retained. This allows the user preference + * to survive times when the split pane has fewer dividers. + */ + private void savePositions() { + List nodes = splitPane.getItems(); + int sz = nodes.size(); + + ArrayList w = widths.get(sz); + if (w == null) { + w = new ArrayList<>(); + widths.put(sz, w); + } else { + w.clear(); + } + + // TODO Why is Collections.addAll() not working here? + for (Double d : splitPane.getDividerPositions()) { + w.add(d); + } + } + + public void restorePositions() { + List nodes = splitPane.getItems(); + int sz = nodes.size(); + ArrayList w = widths.get(sz); + logger.info("restorePositions() called. [w: {}]", w); + + if (w != null) { + logger.info("Restoring positions. [sz: {}]", sz); + double pos[] = new double[w.size()]; + for (int i = 0; i < w.size(); i++) { + pos[i] = w.get(i); + } + splitPane.setDividerPositions(pos); + } else { + ObservableList dividers = splitPane.getDividers(); + double each = 1.0 / (dividers.size() + 1); + for (int i = 0; i < dividers.size(); i++) { + double myPos = (i + 1) * each; + dividers.get(i).setPosition(myPos); + } + } + } + + private Pane buildHeader() { + BorderPane header = new BorderPane(); + header.getStyleClass().add("leigh-elements-screen-header"); + + if (image != null) { + ImageView logoView = new ImageView(image); + logoView.setPreserveRatio(true); + logoView.setFitHeight(35); + header.setRight(logoView); + } + + Label title = new Label(getCfg().getValueString(ScreenElement.KEY_LABEL)); + title.getStyleClass().add("leigh-elements-screen-title"); + header.setLeft(title); + BorderPane.setAlignment(title, Pos.CENTER); + + return header; + } + + public String getImageUrl() { + return imageUrl; + } + + public Node getJavaFXNode() { + return root; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TableElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TableElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..654f735e1886edeacc74fc27192799655083a4c3 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TableElementJFX.java @@ -0,0 +1,586 @@ +package leigh.elements.javafx.type1; + +import javafx.animation.PauseTransition; +import javafx.application.Platform; +import javafx.beans.property.ReadOnlyStringWrapper; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.Event; +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.VBox; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javafx.util.Callback; +import javafx.util.Duration; +import leigh.conflux.nodegraph.AttributeValueNode; +import leigh.elements.ParentElement; +import leigh.elements.javafx.ThemeJFX; +import leigh.elements.sdk.AppDataFrame; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.ElementsColumnConfig; +import leigh.elements.sdk.type1.FormLayout; +import leigh.elements.sdk.type1.TableElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EOLoop; +import leigh.eo.EditEventGenerator; +import leigh.mecha.javafx.JavaFXConstants; +import leigh.mecha.javafx.NodeRuler; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.math.IntInterval; +import leigh.mecha.math.IntIntervals; +import leigh.mecha.util.Snavig; +import org.apache.commons.lang.StringUtils; + +import java.io.Serializable; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +/** + * Implementation of the Elements {@link TableElement} for JavaFX. This implementation provides an interactive + * UI. + *

+ * This implementation no longer requires that the {@link AppDataFrame} getView() method return + * an {@link ObservableList}, and in fact the practice is to be avoided. + *

+ * The grid will monitor the GridElement.KEY_TIMESTAMP value and if this changes will refresh its view + * of the data. + *

+ * The grid will set its selection state into GridElement.KEY_SELECTION. Right now it only supports + * single-selections, although that will change in the future. The value of the selection attribute will be the + * numeric index which is currently selected, and corresponds to getView() on the dataframe. + *

+ * The TableElementJFX currently supports sorting through the natural support provided in the underlying + * {@link javafx.scene.control.TableView} implementation. Therefore, it does not call sort mechanics on the + * {@link leigh.conflux.DataFrame} objects at this time. It is possible to preload a sort configuration + * by specifying the SORT_COL and SORT_ORDER parameters in the configuration. Currently, only sorting a single + * column at a time is supported. For the relevant values, see {@link TableElement}. + * + * @author C. Alexander Leigh + */ + +public class TableElementJFX extends ParentElement implements ElementJFX, EOListener { + public final static String ICON_ROW_GREY = "row_grey"; + private static final MechaLogger logger = MechaLoggerFactory.getLogger(TableElementJFX.class); + private static final String LABEL_ADD = ""; + private static final String LABEL_DELETE = ""; + private static final String LABEL_FILTER = ""; + private static final String LABEL_CLEARFILTER = ""; + private final static String ICON_CREATE = "grid_create"; + private final static String ICON_DELETE = "grid_delete"; + private final static String ICON_FILTER = "grid_filter"; + private final static String ICON_CLEAR_FILTER = "grid_filter_clear"; + // This stores the objects which the grid is actually showing on the screen. + private final ObservableList obsList = FXCollections.observableArrayList(); + private final VBox root = new VBox(); + private final javafx.scene.control.TableView tableView = new ElementsTableView(getFrame()); + private final ThemeJFX theme; + private boolean eventsArmed = true; + private boolean selectionEventArmed = true; + + protected TableElementJFX(EO cfg, AppScreenInstance screen, ThemeJFX theme) { + super(cfg, screen); + this.theme = theme; + + logger.debug("Instancing new Table. [cfg: {}]", cfg); + boolean isReadOnly = cfg.getValueBoolean(TableElement.KEY_ISREADONLY); + + // TODO Shouldn't this be based on the above? + tableView.setEditable(true); + + // We set this really high to cause it to generally fill its container. + tableView.setPrefHeight(JavaFXConstants.REALLY_TALL_HEIGHT); + tableView.setColumnResizePolicy(javafx.scene.control.TableView.UNCONSTRAINED_RESIZE_POLICY); + + // Get the frame from the screen. This presumes that it already exists, but it should at this point. + UUID dataFrameId = cfg.getValueUUID(TableElement.KEY_DATASOURCE); + AppDataFrame frame = screen.getDataFrame(dataFrameId); + assert (frame != null); + obsList.addAll(frame.getView()); + + logger.debug("Found dataframe: [id: {}] [frame: {}]", dataFrameId, frame); + ToolBar tb = new ToolBar(); + if (!isReadOnly) { + // CREATE mechanic + Button create = new Button(LABEL_ADD); + create.setGraphic(new ImageView(theme.getIcons().getImage(ICON_CREATE))); + create.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + // We do it this way to ensure an ID is generated. + Platform.runLater(() -> { + EO foreignObject = screen.createNewRecord(); + frame.add(foreignObject); + logger.debug("Created new object. [viewSize: {}]", frame.getView().size()); + try { + screen.update(); + } catch (Exception e) { + e.printStackTrace(); + } + tableView.getSelectionModel().select(foreignObject); + }); + } + }); + tb.getItems().add(create); + + // DELETE mechanic + Button delete = new Button(LABEL_DELETE); + delete.setGraphic(new ImageView(theme.getIcons().getImage(ICON_DELETE))); + delete.setOnAction(event -> { + logger.info("DELETE button clicked. [sel: {}]", getFrame().getSelected()); + frame.deleteSelected(); + + try { + screen.update(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + tb.getItems().add(delete); + } + + // FILTER mechanic + Button filter = new Button(LABEL_FILTER); + filter.setGraphic(new ImageView(theme.getIcons().getImage(ICON_FILTER))); + filter.setOnAction(event -> { + final Stage dialog = new Stage(); + dialog.initModality(Modality.APPLICATION_MODAL); + VBox dialogVbox = new VBox(20); + + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.CENTER); + gridPane.setHgap(10); + gridPane.setVgap(10); + gridPane.setPadding(new Insets(25, 25, 25, 25)); + + buildChildren(FormLayout.KEY_FIELDS); + + int row = 0; + + for (ElementsColumnConfig col : frame.getColumnConfigs()) { + String label = col.getLabel(); + Label l = new Label(label + ":"); + TextField tf = new TextField(); + + PauseTransition pause = new PauseTransition(Duration.seconds(1)); + tf.textProperty().addListener((observable, oldValue, newValue) -> { + pause.setOnFinished(new EventHandler() { + @Override + public void handle(ActionEvent event) { + logger.debug("Filter value changing. [old: {}] [new: {}]", oldValue, newValue); + if (StringUtils.isNotEmpty(newValue)) { + frame.setQuickFilter(col.getName(), newValue); + } else { + frame.setQuickFilter(col.getName(), null); + } + try { + frame.applyFilters(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + pause.playFromStart(); + }); + + gridPane.add(l, 0, row); + gridPane.add(tf, 1, row); + + row++; + } + + dialogVbox.getChildren().add(gridPane); + + Button ok = new Button("OK"); + ok.setOnAction(event1 -> dialog.close()); + + gridPane.add(ok, 0, row); + + Scene dialogScene = new Scene(dialogVbox, 300, 200); + dialog.setScene(dialogScene); + dialog.show(); + }); + tb.getItems().add(filter); + Button clearFilter = new Button(LABEL_CLEARFILTER); + clearFilter.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + try { + frame.clearFilters(); + frame.applyFilters(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + clearFilter.setGraphic(new ImageView(theme.getIcons().getImage(ICON_CLEAR_FILTER))); + tb.getItems().add(clearFilter); + + root.getChildren().add(tb); + + // We have to set the list into the TableView before we fiddle with sorting, or the sort cfg will + // be reset in the object. + tableView.setItems(obsList); + + logger.debug("Initial load of items. [sz: {}]", obsList.size()); + + List colCfgs = frame.getColumnConfigs(); + + // TODO: Raise an error if the column configuration was null + + tableView.getColumns().add(makeEditStatusColumn()); + + String sortCol = cfg.getValueString(TableElement.KEY_SORT_COL); + String sortOrder = cfg.getValueString(TableElement.KEY_SORT_ORDER); + + logger.debug("Sort configuration: [col: {}] [order: {}]", sortCol, sortOrder); + + if (colCfgs != null) { + for (ElementsColumnConfig col : colCfgs) { + logger.debug("Adding column: {}", col); + TableColumn tableCol = makeDataColumn(col.getName(), col.getLabel(), + col.getWidth(), col.getAlignment(), col.isReadOnly()); + + tableView.getColumns().add(tableCol); + + if (Objects.equals(sortCol, col.getName())) { + logger.debug("Matched sort: [col: {}]", sortCol); + switch (sortOrder) { + case TableElement.VALUE_SORT_DESCENDING: + tableCol.setSortType(TableColumn.SortType.DESCENDING); + break; + default: + tableCol.setSortType(TableColumn.SortType.ASCENDING); + } + + // This is okay because we already added the column to the TableView + tableView.getSortOrder().setAll(tableCol); + logger.debug("New sort order: {}", tableView.getSortOrder()); + } + } + + // We have to sort it the first time. We assume that we setup a sort configuration. If not, this + // should just NOP. + if (sortCol != null) { + logger.debug("Forcing sort on tableview"); + /* + * This is basically a hack. Simply calling tableView.sort() on the TV is not, in fact, sorting + * it even though the data is already present at this point. + */ + frameChangeEventHandler(); + } + } + + /* + * Event listener for when the end-user changes the selection by clicking in the table. The TableView will + * have already updated its internal selection model, so all we have to do is take its current state + * and write that into the cfg object. + */ + tableView.getSelectionModel().getSelectedIndices().addListener((ListChangeListener) c -> { + syncSelectionToFrame(); + }); + + TableElementJFX me = this; + + // We register this event handler so that if the end-user clicks back into the table, but re-selects a row + // that was already selected, that we recognize that focus has been gained, and redraw the screen. This + // results in the correct east panel being drawn in this edge-case. + tableView.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler() { + @Override + public void handle(Event event) { + logger.debug("Click event."); + screen.activateElement(me); + } + }); + + root.getChildren().add(tableView); + + EditEventGenerator tracker = (EditEventGenerator) cfg.getEditTracker(); + if (tracker != null) { + tracker.addListener(cfg, this); + } + } + + /** + * Return the {@link AppDataFrame} associated with this object. + */ + public AppDataFrame getFrame() { + UUID dataFrameId = getCfg().getValueUUID(TableElement.KEY_DATASOURCE); + return getScreen().getDataFrame(dataFrameId); + } + + /** + * Call this method when the data frame has mutated in some way. This includes changes to the data contents, + * the sorting, the selection, or the filtering, etc. + */ + private void frameChangeEventHandler() { + if (eventsArmed) { + eventsArmed = false; + selectionEventArmed = false; + + logger.debug("frameChangeEventHandler() called. Current sort order: {}", tableView.getSortOrder()); + + Platform.runLater(() -> { + logger.debug("Update thread started"); + UUID dataFrameId = getCfg().getValueUUID(TableElement.KEY_DATASOURCE); + AppDataFrame frame = getScreen().getDataFrame(dataFrameId); + + // 3 cases: lists are the same size, smaller, bigger + List view = frame.getView(); + + logger.debug("refreshData() called. [obsList: {}]", obsList.getClass()); + + if (obsList.size() > view.size()) { + // Do we have extra objects because the view got smaller? + // We cannot use a normal technique here because we must avoid replacing the list / calling clear() + logger.debug("obsList was larger than view... Removing extra entries."); + int vsz = view.size(); + int cnt = obsList.size() - vsz; + + for (int i = 0; i < cnt; i++) { + obsList.remove(vsz); + } + } else if (view.size() > obsList.size()) { + logger.debug("obsList was smaller than view... Adding extra entries."); + for (int i = obsList.size(); i < view.size(); i++) { + obsList.add(view.get(i)); + } + } + + // Now that obsList.size() == view.size(), see if they are the same objects. + + // In some cases, tampering with the list will drop the selection on the table. This is a problem + // for us. + for (int i = 0; i < obsList.size(); i++) { + EO vo = view.get(i); + EO go = obsList.get(i); + + // Only replace the object if the reference actually changed. We therefore don't care about the + // contents. + if (vo != go) { + logger.debug( + "Replacing object in view because eo reference changed... [idx: {}] [obsList: {}]", + i, obsList); + obsList.set(i, view.get(i)); + } else { + logger.debug("Not replacing object because EO reference did not change. [idx: {}]", i); + } + } + + logger.debug("refreshData() [view_cnt: {}] [obs_cnt: {}]", frame.getView().size(), obsList.size()); + + tableView.refresh(); + selectionEventArmed = true; + eventsArmed = true; + syncSelectionFromFrame(); + }); + } + } + + @Override + public Node getJavaFXNode() { + return root; + } + + /** + * Return the current selection on the TableView in the format of a {@link IntIntervals} object. + */ + public IntIntervals getCurrentSelection() { + List lst = tableView.getSelectionModel().getSelectedIndices(); + + IntIntervals sel = new IntIntervals(); + for (Integer x : lst) { + sel.add(x, x); + } + sel.compact(); + return sel; + } + + /** + * Return a callback to the caller which reads the given parameter from an EO. This will return a simple + * callback which provides a {@link ReadOnlyStringWrapper} for the value stored in the EO provided to the + * callback, e.g., the EO from the dataframe view. + * + * @param propertyName The key in the EO. + * @return The callback. + */ + public Callback, ObservableValue> + makeCallback(String propertyName) { + return param -> { + // TODO: The performance of indexOf() here is likely terrible + EO obj = param.getValue(); + String displayValue = Snavig.convertToString(obj.getMetaValue(propertyName, + AttributeValueNode.KEY_INPUT_DISPLAY_VALUE)); + if (displayValue != null) return new ReadOnlyStringWrapper(displayValue); + + // QV-35 It is always possible that this is a loop, and we do not want to display loops as values since we + // will get the toString() implementation + Serializable val = obj.getValue(propertyName); + if (val instanceof EOLoop) { + logger.warn("Value was unexpectedly a loop. [key: {}]", propertyName); + return new ReadOnlyStringWrapper(null); + } + return new ReadOnlyStringWrapper(Snavig.convertToString(val)); + }; + } + + /** + * Make a new {@link javafx.scene.control.TableColumn} object for accessing the dataframe. + * The underlying implementation for this mechanic is the {@link VisionTableColumn}. + */ + private javafx.scene.control.TableColumn makeDataColumn(String propertyName, String label, int widthChars, + String alignment, boolean isReadOnly) { + VisionTableColumn col = new VisionTableColumn(label, propertyName); + logger.debug("Col width: {} {}", propertyName, widthChars); + if (widthChars != 0) { + col.setPrefWidth(NodeRuler.measureTextWidth(widthChars)); + } + + if (alignment != null) { + switch (alignment) { + case "left": + col.getStyleClass().add("vds-table-col-align-left"); + break; + case "centre": + case "center": + col.getStyleClass().add("vds-table-col-align-center"); + break; + case "right": + col.getStyleClass().add("vds-table-col-align-right"); + break; + default: + logger.warn("Unknown table col alignment: {}", alignment); + } + } + + if (isReadOnly) { + col.setEditable(false); + } + + col.setOnEditCommit(event -> { + event.getTableView().getItems().get( + event.getTablePosition().getRow()).setValue(propertyName, event.getNewValue()); + logger.debug("EDIT COMMIT"); + try { + getScreen().update(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + + Callback, TableCell> cell = TextFieldTableCell.forTableColumn(); + col.setCellFactory(cell); + col.setCellValueFactory(makeCallback(propertyName)); + return col; + } + + /** + * Generate the column configuration for the edit status column. We include this for obvious benefits, + * not least of which is newly created rows would otherwise be entirely empty, causing rendering and human + * factor problems. + */ + private javafx.scene.control.TableColumn makeEditStatusColumn() { + javafx.scene.control.TableColumn tableColumnType = new javafx.scene.control.TableColumn(); + tableColumnType.setCellFactory(param -> { + //Set up the ImageView + final ImageView imageview = new ImageView(); + imageview.setFitHeight(10); + imageview.setFitWidth(10); + ///imageview.setImage(imageComputer); //uncommenting this places the image on all cells, even empty ones + //Set up the Table + TableCell cell = new TableCell() { + @Override + public void updateItem(Image item, boolean empty) { + // logger.debug("updateItem() called. [item: {}] [empty: {}]", item, empty); + if (!empty) { // choice of image is based on values from item, but it doesn't matter now + imageview.setImage(theme.getIcons().getImage(ICON_ROW_GREY)); + } + } + }; + + // Attach the imageview to the cell + cell.setGraphic(imageview); + + return cell; + }); + return tableColumnType; + } + + /** + * Synchronize the selection state from the data frame into the internal representation of the table. Call this + * method when the selection in the frame has changed due to a foreign actor. + */ + private void syncSelectionFromFrame() { + IntIntervals newSelect = getFrame().getSelectedIntervals(); + IntIntervals oldSelection = getCurrentSelection(); + logger.debug("syncSelectionFromFrame() called: [new: {}] [old: {}]", newSelect, oldSelection); + + // Only update the selection if we actually have a change. + if (!IntIntervals.equals(oldSelection, newSelect)) { + logger.debug("===== NEW SELECTION - WOULD UPDATE"); + if (newSelect == null) { + // NOP + } else { + TableView.TableViewSelectionModel selectionModel = tableView.getSelectionModel(); + selectionModel.clearSelection(); + for (IntInterval ivl : newSelect.getIntervals()) { + for (int i = ivl.getStartIndex(); i <= ivl.getStopIndex(); i++) { + logger.debug("********* Selecting: [index: {}]", i); + selectionModel.select(i); + } + } + } + } else { + logger.debug("syncSelectionFromFrame() - CALLED, BUT NO CHANGE"); + } + } + + /** + * Synchronize the current TableView selection state to the associated frame. + *

+ * MT-Safety: Safe. + */ + private void syncSelectionToFrame() { + if (selectionEventArmed) { + IntIntervals sel = getCurrentSelection(); + AppDataFrame frame = getFrame(); + frame.clearAndSelect(sel); + logger.info("=syncSelectionToFrame() [tableSelection: {}] [frameSelection: {}]", sel, frame.getSelected()); + } else { + logger.debug("syncSelectionToFrame() called, but selection events disarmed."); + } + } + + @Override + /** + * If the frame is updated outside of our control, the KEY_TIMESTAMP in the configuration will be updated. This + * is our cue to execute the frameChangeEventHandler() method to update our representation of the + * frame. + */ + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) { + logger.debug("=============== valueUpdated() called. [key: {}] [oldValue: {}] [newValue: {}]", + key, oldValue, newValue); + if (key.equals(TableElement.KEY_TIMESTAMP)) { + // This event indicates that the frame changed somehow (filtering, add/delete object, sorting). + // The implication is that our view state is no longer valid and needs to be refreshed. + frameChangeEventHandler(); + } + } + + +} \ No newline at end of file diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TableView.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TableView.java new file mode 100644 index 0000000000000000000000000000000000000000..d46bb3376bd17c400156f151a58be914759c7f32 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TableView.java @@ -0,0 +1,72 @@ +package leigh.elements.javafx.type1; + +import javafx.collections.ObservableList; +import javafx.scene.control.SelectionMode; +import javafx.scene.control.TableRow; +import javafx.scene.input.MouseEvent; +import javafx.util.Callback; +import leigh.elements.sdk.AppDataFrame; +import leigh.eo.sort.EOSortPolicy; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.sort.FieldSort; +import leigh.mecha.sort.SortCardinality; + +import java.util.Locale; + +/** + * Implementation of the {@link javafx.scene.control.TableView} class with an overridden sort() mechanic suitable for use with + * Elements applications. Additionally this implementation provides a native de-selection mechanic on the rows, so + * that the end-user can second-click a row to de-select it. + * + * @author C. Alexander Leigh + */ +public class TableView extends javafx.scene.control.TableView { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(TableView.class); + private final AppDataFrame frame; + + public TableView(AppDataFrame frame) { + this.frame = frame; + + getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + setRowFactory((Callback) param -> { + TableRow row = new TableRow(); + row.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> { + // Do Nothing + }); + return row; + }); + } + + /** + * This implementation of the sort() method works by using the sort functionality present in the + * {@link leigh.conflux.DataFrame} instead of that which {@link javafx.scene.control.TableView} provides. + * This method requires that the {@link javafx.scene.control.TableColumn} objects previously setup in the + * {@link javafx.scene.control.TableView} are {@link VisionTableColumn} + * instances. + */ + @Override + public void sort() { + // getSortOrder list will be empty if we're expected to have the natural order. + + // TODO: Copy rather than retain the sortPolicy + ObservableList sortOrder = this.getSortOrder(); + + // FIXME Get the Locale properly + EOSortPolicy policy = new EOSortPolicy(Locale.US); + for (javafx.scene.control.TableColumn gridCol : sortOrder) { + VisionTableColumn col = (VisionTableColumn) gridCol; + javafx.scene.control.TableColumn.SortType type = gridCol.getSortType(); + SortCardinality card = (type == javafx.scene.control.TableColumn.SortType.ASCENDING + ? SortCardinality.ASCENDING : SortCardinality.DESCENDING); + policy.addField(new FieldSort(col.getName(), card)); + } + + try { + frame.sort(policy); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TextElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TextElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..20c566bbd1a773e2e2e1007173bf32ff7cf4dceb --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TextElementJFX.java @@ -0,0 +1,41 @@ +package leigh.elements.javafx.type1; + +import javafx.scene.Node; +import javafx.scene.text.Text; +import leigh.elements.ElementBase; +import leigh.elements.sdk.type1.TextElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EditEventGenerator; +import leigh.mecha.util.Snavig; + +import java.io.Serializable; + +public class TextElementJFX extends ElementBase implements ElementJFX, EOListener { + private Text textNode = new Text(); + + protected TextElementJFX(EO cfg) { + super(cfg); + ((EditEventGenerator) cfg.getEditTracker()).addListener(cfg, this); + } + + @Override + public Node getJavaFXNode() { + textNode.setText(getCfg().getValueString(TextElement.KEY_VALUE)); + return textNode; + } + + @Override + public String toString() { + return "TextElementJFX{" + + "textNode=" + textNode + + "} " + super.toString(); + } + + @Override + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) { + if (TextElement.KEY_VALUE.equals(key)) { + textNode.setText(Snavig.convertToString(newValue)); + } + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TextTileElementJFX.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TextTileElementJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..86bae419953bde6815a9059f9c71f3d413269d25 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/TextTileElementJFX.java @@ -0,0 +1,41 @@ +package leigh.elements.javafx.type1; + +import eu.hansolo.tilesfx.Tile; +import eu.hansolo.tilesfx.TileBuilder; +import javafx.scene.Node; +import javafx.scene.paint.Color; +import leigh.elements.ElementBase; +import leigh.elements.sdk.type1.TextTileElement; +import leigh.eo.EO; + +public class TextTileElementJFX extends ElementBase implements ElementJFX { + private final Tile tile; + + protected TextTileElementJFX(EO cfg) { + super(cfg); + + String title = cfg.getValueString(TextTileElement.KEY_TITLE); + String text = cfg.getValueString(TextTileElement.KEY_TEXT); + + TileBuilder tb = TileBuilder.create() + .skinType(Tile.SkinType.TEXT) + .prefSize(150, 150) + .textVisible(true) + .backgroundColor(Color.web("#808080")); + + if (title != null) { + tb.title(title); + } + + if (text != null) { + tb.description(text); + } + + tile = tb.build(); + } + + @Override + public Node getJavaFXNode() { + return tile; + } +} diff --git a/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/VisionTableColumn.java b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/VisionTableColumn.java new file mode 100644 index 0000000000000000000000000000000000000000..a35161e06c471af0fc561b69009cfa2bf2333817 --- /dev/null +++ b/leigh-elements-javafx/src/main/java/leigh/elements/javafx/type1/VisionTableColumn.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2001,2020 C. Alexander Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ALEX LEIGH The copyright + * notice above does not evidence any actual or intended publication of such + * source code. + * + * Use, disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ + +package leigh.elements.javafx.type1; + +import javafx.scene.control.TableColumn; +import leigh.eo.EO; + +/** + * This class extends the {@link javafx.scene.control.TableColumn} to add functionality to store the data property name that the column + * represents. + * + * @author C. Alexander Leigh + */ +public class VisionTableColumn extends TableColumn { + private final String name; + + public VisionTableColumn(String label, String name) { + super(label); + this.name = name; + } + + public String getName() { + return name; + } + + @Override + public String toString() { + return "GridTableColumn{" + + "attrName='" + name + '\'' + + "} " + super.toString(); + } +} diff --git a/leigh-elements-javafx/src/test/java/leigh/elements/javafx/JavaFXTest.java b/leigh-elements-javafx/src/test/java/leigh/elements/javafx/JavaFXTest.java new file mode 100644 index 0000000000000000000000000000000000000000..43b713b4629c4cc42d6f0210be4252117e0a3b24 --- /dev/null +++ b/leigh-elements-javafx/src/test/java/leigh/elements/javafx/JavaFXTest.java @@ -0,0 +1,18 @@ +package leigh.elements.javafx; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import leigh.eo.EO; +import org.junit.Test; + +public class JavaFXTest { + /** + * Proves that set(i,E) works on an {@link ObservableList}. + */ + @Test + public void testSetCase() { + ObservableList obsList = FXCollections.observableArrayList(); + obsList.add(new EO()); + obsList.set(0, new EO()); + } +} diff --git a/leigh-elements-jfoenix/.gitignore b/leigh-elements-jfoenix/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-elements-jfoenix/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-elements-jfoenix/LICENSE b/leigh-elements-jfoenix/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-elements-jfoenix/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-elements-jfoenix/build.gradle b/leigh-elements-jfoenix/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..f832ee8d229881a643be5906205f094ab9e8beed --- /dev/null +++ b/leigh-elements-jfoenix/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version '15.0' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-elements-javafx') + api group: 'com.jfoenix', name: 'jfoenix', version: '9.0.10' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/ColorFieldJFoenix.java b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/ColorFieldJFoenix.java new file mode 100644 index 0000000000000000000000000000000000000000..f02ca26a7a784d87ed8268963afe3fd11295353f --- /dev/null +++ b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/ColorFieldJFoenix.java @@ -0,0 +1,75 @@ +package leigh.elements.jfoenix.type1; + +import com.jfoenix.controls.JFXColorPicker; +import javafx.scene.Node; +import javafx.scene.control.Tooltip; +import javafx.scene.layout.HBox; +import javafx.scene.paint.Color; +import leigh.elements.ElementBase; +import leigh.elements.javafx.type1.ElementJFX; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.ColorFieldElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EditEventGenerator; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; + +public class ColorFieldJFoenix extends ElementBase implements ElementJFX, EOListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DateFieldElementJFoenix.class); + private HBox hbox = new HBox(); + private JFXColorPicker cp = new JFXColorPicker(); + // Whether we should ignore the next change event. We do this to avoid a loop. + + protected ColorFieldJFoenix(EO cfg, AppScreenInstance screen) { + super(cfg); + + cp.setPromptText(cfg.getValueString(ColorFieldElement.KEY_LABEL)); + + cp.getStyleClass().add("vds-field-color"); + + String tooltip = cfg.getValueString(ColorFieldElement.KEY_TOOLTIP); + if (tooltip != null) { + Tooltip tt = new Tooltip(); + tt.setText(tooltip); + cp.setTooltip(tt); + } + + ((EditEventGenerator) cfg.getEditTracker()).addListener(cfg, this); + + String value = cfg.getValueString(ColorFieldElement.KEY_VALUE); + if (value != null) cp.setValue(convertToColor(value)); + cp.valueProperty().addListener((observable, oldValue, newValue) -> { + logger.debug("Field value is changing. [oldValue: {}] [newValue: {}]", oldValue, newValue); + if (!newValue.equals(cfg.getValueString(ColorFieldElement.KEY_VALUE))) { + cfg.setValue(ColorFieldElement.KEY_VALUE, newValue.toString()); + } + }); + + hbox.getChildren().add(cp); + + } + + @Override + public Node getJavaFXNode() { + return hbox; + } + + @Override + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) { + logger.info("Inbound value event. [newValue: {}]", newValue); + if (ColorFieldElement.KEY_VALUE.equals(key) && !cp.getValue().equals(newValue)) { + cp.setValue(convertToColor(newValue)); + } + } + + public static Color convertToColor(Object value) { + if (value == null) return null; + String s = String.valueOf(value); + if (s == null || s.isEmpty()) return null; + return Color.web(s, 1.0); + } + +} diff --git a/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/DateFieldElementJFoenix.java b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/DateFieldElementJFoenix.java new file mode 100644 index 0000000000000000000000000000000000000000..e3e2361250046f43b3d719120f3ccc8e77b5003e --- /dev/null +++ b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/DateFieldElementJFoenix.java @@ -0,0 +1,73 @@ +package leigh.elements.jfoenix.type1; + +import com.jfoenix.controls.JFXDatePicker; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.control.Tooltip; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import leigh.elements.ElementBase; +import leigh.elements.javafx.type1.ElementJFX; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.DateFieldElement; +import leigh.elements.sdk.type1.TextAreaElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EditEventGenerator; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; +import java.time.LocalDate; + +public class DateFieldElementJFoenix extends ElementBase implements ElementJFX, EOListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DateFieldElementJFoenix.class); + private HBox hbox = new HBox(); + private JFXDatePicker datePicker = new JFXDatePicker(); + private VBox vbox = new VBox(); + // Whether we should ignore the next change event. We do this to avoid a loop. + + protected DateFieldElementJFoenix(EO cfg, AppScreenInstance screen) { + super(cfg); + + Label label = new Label(cfg.getValueString(TextAreaElement.KEY_LABEL)); + + datePicker.getStyleClass().add("vds-field-date"); + + + String tooltip = cfg.getValueString(DateFieldElement.KEY_TOOLTIP); + if (tooltip != null) { + Tooltip tt = new Tooltip(); + tt.setText(tooltip); + datePicker.setTooltip(tt); + } + + ((EditEventGenerator) cfg.getEditTracker()).addListener(cfg, this); + + String value = cfg.getValueString(DateFieldElement.KEY_VALUE); + if (value != null) datePicker.setValue(LocalDate.parse(value)); + datePicker.valueProperty().addListener((observable, oldValue, newValue) -> { + logger.debug("Field value is changing. [oldValue: {}] [newValue: {}]", oldValue, newValue); + if (!newValue.equals(cfg.getValueString(DateFieldElement.KEY_VALUE))) { + cfg.setValue(DateFieldElement.KEY_VALUE, newValue.toString()); + } + }); + + vbox.getChildren().addAll(label, datePicker); + hbox.getChildren().add(vbox); + + } + + @Override + public Node getJavaFXNode() { + return hbox; + } + + @Override + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) { + logger.debug("Inbound value event. [newValue: {}]", newValue); + if (DateFieldElement.KEY_VALUE.equals(key) && !datePicker.getValue().equals(newValue)) { + datePicker.setValue(LocalDate.parse(String.valueOf(newValue))); + } + } +} diff --git a/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/ElementsFactoryJFoenix.java b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/ElementsFactoryJFoenix.java new file mode 100644 index 0000000000000000000000000000000000000000..076ede8043678f0f4a6968e10cc20e4d3670805f --- /dev/null +++ b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/ElementsFactoryJFoenix.java @@ -0,0 +1,30 @@ +package leigh.elements.jfoenix.type1; + +import leigh.elements.javafx.type1.ElementFactoryJFX; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.*; +import leigh.eo.EO; +import leigh.mecha.nodegraph.NodeConfig; + +import java.util.List; + +public class ElementsFactoryJFoenix extends ElementFactoryJFX { + public ElementsFactoryJFoenix(List nodeConfigs) { + super(nodeConfigs); + } + + /** + * Impementation which overrides ElementFactoryJFX.newNode() to provide the JFoenix + * replacements. If a replacement is not available, the parent implementation is called. + */ + public Element newNode(EO cfg, AppScreenInstance screen) { + return switch (cfg.getApiType()) { + case TextFieldElement.EO_TYPE -> new FieldElementJFoenix(cfg, screen); + case FormLayout.EO_TYPE -> new FormLayoutJFoenix(cfg, screen); + case DateFieldElement.EO_TYPE -> new DateFieldElementJFoenix(cfg, screen); + case TextAreaElement.EO_TYPE -> new TextAreaJFoenix(cfg, screen); + case ColorFieldElement.EO_TYPE -> new ColorFieldJFoenix(cfg, screen); + default -> super.newNode(cfg, screen); + }; + } +} diff --git a/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/FieldElementJFoenix.java b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/FieldElementJFoenix.java new file mode 100644 index 0000000000000000000000000000000000000000..654952e2dfdccc603a25502e10b66478521f10c6 --- /dev/null +++ b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/FieldElementJFoenix.java @@ -0,0 +1,227 @@ +package leigh.elements.jfoenix.type1; + +import com.jfoenix.controls.JFXTextField; +import javafx.application.Platform; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.Tooltip; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import leigh.elements.ElementBase; +import leigh.elements.javafx.ThemeJFX; +import leigh.elements.javafx.type1.ElementJFX; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.actions.ScreenAction; +import leigh.elements.sdk.type1.TextFieldElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EOLoop; +import leigh.eo.EditEventGenerator; +import leigh.mecha.lang.FutureResult; +import leigh.mecha.lang.FutureResultListener; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.Snavig; + +import java.io.Serializable; + +/** + * Implementation of the Field element for JavaFX. Note that this implementation only provides the input field + * itself, not a label. It is meant to be used with another element which will retrieve its label and other + * information and decorate the field appropriately, for example, by including a label. + *

+ * This class will update the FieldElement.KEY_VALUE attribute in the configuration whenever + * the end-user changes the value in the field. + * + * @author C. Alexander Leigh + */ +public class FieldElementJFoenix extends ElementBase implements ElementJFX, EOListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FieldElementJFoenix.class); + private static final String ICON_SEQUENCE = "sequence"; + private HBox hbox = new HBox(); + private JFXTextField input = new JFXTextField(); + private boolean eventsArmed = true; + private boolean localFocus = false; + + // Whether we should ignore the next change event. We do this to avoid a loop. + + protected FieldElementJFoenix(EO cfg, AppScreenInstance screen) { + super(cfg); + + input.getStyleClass().add("vds-field-text"); + + input.setLabelFloat(true); + input.setPromptText(cfg.getValueString(TextFieldElement.KEY_LABEL)); + + boolean isReadOnly = cfg.getValueBoolean(TextFieldElement.KEY_IS_READONLY); + if (isReadOnly) { + logger.debug("Disabling edit status."); + input.setEditable(false); + } else { + logger.debug("Field is read/write"); + } + + String tooltip = cfg.getValueString(TextFieldElement.KEY_TOOLTIP); + if (tooltip != null) { + Tooltip tt = new Tooltip(); + tt.setText(tooltip); + input.setTooltip(tt); + } + + ((EditEventGenerator) cfg.getEditTracker()).addListener(cfg, this); + + // By definition we do not have focus, so we self-update to set the bare value. + valueUpdated(getCfg(), TextFieldElement.KEY_VALUE, null, cfg.getValue(TextFieldElement.KEY_VALUE)); + setupCss(); + + input.focusedProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + // For this to work, the model and cfg object must already have been updated. + String dataValue = cfg.getValueString(TextFieldElement.KEY_VALUE); + String displayValue = cfg.getValueString(TextFieldElement.KEY_DISPLAY_VALUE); + + if (newValue) { + logger.debug("Gained focus. Setting data value"); + input.setText(dataValue); + } else { + logger.debug("Lost focus. Setting display value. [display: {}] [value: {}] [cfg: {}]", + displayValue, dataValue, getCfg()); + if (displayValue != null) { + input.setText(displayValue); + } + } + + setupCss(); + } + }); + + input.textProperty().addListener((observable, oldValue, newValue) -> { + logger.debug("textProperty() change event fire. [oldValue: {}] [newValue: {}]", oldValue, newValue); + if (input.isFocused()) { + cfg.setValue(TextFieldElement.KEY_VALUE, newValue); + } + }); + + hbox.getChildren().add(input); + + String sequence = cfg.getValueString(TextFieldElement.KEY_SEQUENCE); + if (sequence != null) { + Button seqBtn = new Button(); + seqBtn.setTooltip(new Tooltip("Generate Sequence Value")); + seqBtn.setGraphic(new ImageView(((ThemeJFX) screen.getTheme()).getIcons().getImage(ICON_SEQUENCE))); + seqBtn.getStyleClass().add("vds-field-button"); + seqBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + Integer seq = screen.sequenceNextVal(sequence); + if (seq != null) { + logger.debug("Setting input to new value: {}", seq.toString()); + input.setText(seq.toString()); + // We have to do this because setText() will not, since the field does not have focus + cfg.setValue(TextFieldElement.KEY_VALUE, seq.toString()); + } else { + logger.warn("Sequence not found. [key: {}] [screen: {}]", sequence, screen); + } + } + }); + hbox.getChildren().add(seqBtn); + } + + EOLoop actions = cfg.getValueLoop(TextFieldElement.KEY_ACTIONS); + for (EO action : actions) { + String cmdFunc = action.getValueString(TextFieldElement.KEY_ACTION_FUNC); + String cmdTarget = action.getValueString(TextFieldElement.KEY_ACTION_FUNC_TARGET); + String icon = action.getValueString(TextFieldElement.KEY_ACTION_ICON); + Button funcBtn = new Button(); + funcBtn.getStyleClass().add("vds-field-button"); + + if (icon != null) { + funcBtn.setGraphic(new ImageView(((ThemeJFX) screen.getTheme()).getIcons().getImage(icon))); + } else { + logger.warn("Icon configuration missing for text field action."); + funcBtn.setText("(f)"); + } + + funcBtn.setOnAction(event -> { + FutureResult future = screen.call(cmdTarget, cmdFunc); + future.addListener(new FutureResultListener() { + @Override + public void receiveResult(Object result) { + screen.processAction((ScreenAction) result); + } + }); + }); + hbox.getChildren().add(funcBtn); + } + } + + public void setupCss() { + String color = Snavig.convertToString(getCfg().getValueString(TextFieldElement.KEY_COLOR)); + String fontWeight = Snavig.convertToString(getCfg().getValueString(TextFieldElement.KEY_FONT_WEIGHT)); + + StringBuffer sb = new StringBuffer(); + + if (color != null) { + String css = "-fx-text-inner-color: " + color + ";" + "-jfx-focus-color: " + + color + ";" + "-jfx-unfocused-color: " + color + ";"; + sb.append(css); + } else { + // TODO Unset the style? + } + + if (fontWeight != null) { + String css = "-fx-font-weight: " + fontWeight + ";"; + sb.append(css); + } else { + // TODO Unset the weight? + } + + if (sb.length() > 0) { + input.setStyle(sb.toString()); + } + } + + @Override + public Node getJavaFXNode() { + return hbox; + } + + @Override + /** + * Called by the EO change controller to indicate that a monitored object has a value which is changing. + */ + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) { + logger.debug("Inbound value event. [key: {}] [newValue: {}] [obj: {}]", key, newValue, eo); + + if (eventsArmed) { + Platform.runLater(() -> { + eventsArmed = false; + if (input.isFocused()) { + // When focused, we always use the bare value. + if (key.equals(TextFieldElement.KEY_VALUE)) { + if (!newValue.equals(input.getText())) { + logger.debug("update: focus value"); + input.setText(Snavig.convertToString(newValue)); + } + } + } else { + // FIXME: We are running this for ANY key value + String dv = eo.getValueString(TextFieldElement.KEY_DISPLAY_VALUE); + if (dv != null) { + logger.debug("!focused with dv: {}", dv); + input.setText(dv); + } else { + logger.debug("!focused without dv"); + input.setText(Snavig.convertToString(newValue)); + } + } + eventsArmed = true; + }); + } + } +} diff --git a/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/FormLayoutJFoenix.java b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/FormLayoutJFoenix.java new file mode 100644 index 0000000000000000000000000000000000000000..f88ea04d97ba3097806e5eeb3d82358b44347a11 --- /dev/null +++ b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/FormLayoutJFoenix.java @@ -0,0 +1,56 @@ +package leigh.elements.jfoenix.type1; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.layout.GridPane; +import leigh.elements.ElementsSort; +import leigh.elements.ParentElement; +import leigh.elements.javafx.type1.ElementJFX; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.FormLayout; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.Locale; + +/** + * Implementation of a FormLayoutElement for JavaFX. This is the JFoenix equivalent of the + * {@link leigh.elements.javafx.type1.FormLayoutJFX} JFX implementation. + * + * @author C. Alexander Leigh + */ +public class FormLayoutJFoenix extends ParentElement implements ElementJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FormLayoutJFoenix.class); + GridPane grid = new GridPane(); + + protected FormLayoutJFoenix(EO cfg, AppScreenInstance controller) { + super(cfg, controller); + grid.setAlignment(Pos.CENTER); + grid.setHgap(10); + grid.setVgap(30); + grid.setPadding(new Insets(30, 30, 30, 30)); + buildChildren(FormLayout.KEY_FIELDS); + + int row = 0; + + logger.debug("Found fields: {}", getChildren()); + + ArrayList children = ElementsSort.sort( + getChildren().get(FormLayout.KEY_FIELDS), + "uiIndex", Locale.ENGLISH); + + for (Element field : children) { + grid.add(((ElementJFX) field).getJavaFXNode(), 0, row); + row++; + } + } + + @Override + public Node getJavaFXNode() { + return grid; + } +} diff --git a/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/TextAreaJFoenix.java b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/TextAreaJFoenix.java new file mode 100644 index 0000000000000000000000000000000000000000..5c267c0f7f27d13344db5c9fa5fc725914402e08 --- /dev/null +++ b/leigh-elements-jfoenix/src/main/java/leigh/elements/jfoenix/type1/TextAreaJFoenix.java @@ -0,0 +1,72 @@ +package leigh.elements.jfoenix.type1; + +import com.jfoenix.controls.JFXTextArea; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.control.Tooltip; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import leigh.elements.ElementBase; +import leigh.elements.javafx.type1.ElementJFX; +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.TextAreaElement; +import leigh.eo.EO; +import leigh.eo.EOListener; +import leigh.eo.EditEventGenerator; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.Snavig; + +import java.io.Serializable; + +public class TextAreaJFoenix extends ElementBase implements ElementJFX, EOListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DateFieldElementJFoenix.class); + private HBox hbox = new HBox(); + private JFXTextArea textArea = new JFXTextArea(); + private VBox vbox = new VBox(); + + // Whether we should ignore the next change event. We do this to avoid a loop. + + protected TextAreaJFoenix(EO cfg, AppScreenInstance screen) { + super(cfg); + + textArea.getStyleClass().add("vds-field-textarea"); + + Label label = new Label(cfg.getValueString(TextAreaElement.KEY_LABEL)); + + String tooltip = cfg.getValueString(TextAreaElement.KEY_TOOLTIP); + if (tooltip != null) { + Tooltip tt = new Tooltip(); + tt.setText(tooltip); + textArea.setTooltip(tt); + } + + ((EditEventGenerator) cfg.getEditTracker()).addListener(cfg, this); + + String value = cfg.getValueString(TextAreaElement.KEY_VALUE); + if (value != null) textArea.setText(value); + textArea.textProperty().addListener((observable, oldValue, newValue) -> { + logger.debug("Field value is changing. [oldValue: {}] [newValue: {}]", oldValue, newValue); + if (!newValue.equals(cfg.getValueString(TextAreaElement.KEY_VALUE))) { + cfg.setValue(TextAreaElement.KEY_VALUE, newValue); + } + }); + + vbox.getChildren().addAll(label, textArea); + hbox.getChildren().add(vbox); + + } + + @Override + public Node getJavaFXNode() { + return hbox; + } + + @Override + public void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) { + logger.debug("Inbound value event. [newValue: {}]", newValue); + if (TextAreaElement.KEY_VALUE.equals(key) && !textArea.getText().equals(newValue)) { + textArea.setText(Snavig.convertToString(newValue)); + } + } +} diff --git a/leigh-elements-sdk/.gitignore b/leigh-elements-sdk/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-elements-sdk/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-elements-sdk/LICENSE b/leigh-elements-sdk/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-elements-sdk/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-elements-sdk/build.gradle b/leigh-elements-sdk/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..dc27a7159ac26528377cb4c742975ad84a882ce7 --- /dev/null +++ b/leigh-elements-sdk/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'java-library' +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation group: 'junit', name: 'junit', version: '4.12' + api project (':leigh-mecha') + api project (':leigh-eo') +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/App.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/App.java new file mode 100644 index 0000000000000000000000000000000000000000..4a0b176492232de9fb6106f9f6f690b0d74e1682 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/App.java @@ -0,0 +1,29 @@ +package leigh.elements.sdk; + +import java.util.UUID; + +/** + * An elements application. This class provides all of the meta-information about an application which is common + * to all instances of the application. For instance-specific information, see the {@link AppInstance} class. + * + * @author C. Alexander Leigh + */ +public interface App { + /** + * Return a new app instance for the given app. + */ + AppInstance createNewAppInstance(UUID appInstanceId); + + /** + * Return the main screen friendly-name for this app. Every app has a main screen, which is typically but + * not necessarily a main menu. + */ + UUID getMainScreenId(); + + /** + * Search for a screen of the given name in the App, and if found, return its ID to the caller. This is the ID + * that would be used to create a new instance of the screen, or null if no screen with that + * name is found. + */ + UUID getScreenId(String name); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppContext.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppContext.java new file mode 100644 index 0000000000000000000000000000000000000000..f103cbe4f2843c4ca1f0989715587a82fb1b0a49 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppContext.java @@ -0,0 +1,25 @@ +package leigh.elements.sdk; + +import java.util.UUID; + +/** + * Classes implementing this interface represent as single processing context for an elements application. The context + * is owned by a specific user, and can generally be thought of in terms of a session. A user can have multiple + * contexts at any one time. A context is related to a single application, so a client dealing with multiple + * applications at one time will have multiple contexts. + *

+ * In terms of client/server operation, all of the operations that a remote client can perform are encompassed + * by this interface. Therefore, implementing remoting is a matter of providing a network transport for + * these methods. + * + * @author C. Alexander Leigh + */ +public interface AppContext { + /** + * Open a new screen with the given id. If no such screen exists within the application, + * null is returned. This method returns the screen graph for the initial screen state. + */ + AppScreenInstance createNewScreen(UUID id) throws Exception; + + AppInstance getInstance(); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppDataFrame.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppDataFrame.java new file mode 100644 index 0000000000000000000000000000000000000000..53acd8b51a95bf1d08b25d969cea4c96625cbe0a --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppDataFrame.java @@ -0,0 +1,73 @@ +package leigh.elements.sdk; + +import leigh.elements.sdk.type1.TableElement; +import leigh.eo.EO; +import leigh.mecha.lang.IdentifiedObject; +import leigh.mecha.math.IntIntervals; +import leigh.mecha.sort.SortPolicy; + +import java.util.List; + +/** + * Implementation of an Elements DataFrame. This DataFrame implementation should not be confused with a Conflux + * DataFrame, which provides analytical processing capabilities. The purpose of the Elements DataFrame is to store + * data ultimately for use in various Element components, such as the {@link TableElement}. + * + * @author C. Alexander Leigh + */ +public interface AppDataFrame extends IdentifiedObject { + /** + * Return the column configurations for this frame. + */ + List getColumnConfigs(); + + /** + * Return the current representation of the view of this frame. The view represents the view after all other + * processing has occurred, such as sorting. + */ + List getView(); + + /** + * Create a new object of the given type in this frame. + */ + EO create(String type); + + void add(EO obj); + + /** + * Remove the object at the given viewIdx in this frame. + */ + void remove(Integer viewIdx); + + /** + * Sort the frame based on the provided policy. After being provided to the frame, the policy should not be + * modified or undefined results will occur. + */ + void sort(SortPolicy policy) throws Exception; + + /** + * Return a list of objects in this frame which are selected, if any. If no objects are selected, an empty list + * is returned. + */ + List getSelected(); + + IntIntervals getSelectedIntervals(); + + /** + * Replace the selection (if any) existing on the frame with the selection provided. + */ + void clearAndSelect(IntIntervals ranges); + + void setQuickFilter(String key, String filter); + + void applyFilters() throws Exception; + + void clearFilters() throws Exception; + + void setSelectionListener(SelectionListener listener); + + /** + * Remove all the objects which are currently selected. + */ + void deleteSelected(); +} \ No newline at end of file diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppInstance.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppInstance.java new file mode 100644 index 0000000000000000000000000000000000000000..61b9064626e3d881784fe8ac0a0eac9ba65fb1b5 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppInstance.java @@ -0,0 +1,35 @@ +package leigh.elements.sdk; + +import leigh.mecha.file.FileStat; + +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; + +/** + * A specific instance / deployment of a given elements application. Only one of these objects should exist + * per-instance per-engine. + * + * @author C. Alexander Leigh + */ +public interface AppInstance { + /** + * Create a new context within the given application instance. + */ + AppContext newContext(); + + App getApp(); + + /** + * Return a previously stored file from the application instance, or null if the file does not + * exist in the application instance. + * + * @return + */ + byte[] getBlob(UUID id); + + /** + * Store a new file in the application instance, and return the UUID of the newly-created file to the caller. + */ + UUID putBlob(InputStream is, FileStat stat) throws IOException; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppScreenInstance.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppScreenInstance.java new file mode 100644 index 0000000000000000000000000000000000000000..9277a25896db356305ac782800356f76f535f28c --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/AppScreenInstance.java @@ -0,0 +1,92 @@ +package leigh.elements.sdk; + +import leigh.elements.sdk.actions.*; +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.ScreenElement; +import leigh.eo.EO; +import leigh.mecha.lang.FutureResult; + +import java.util.UUID; + +/** + * Classes implementing this interface provide mechanics for processing an Elements screen. + * + * @author C. Alexander Leigh + */ +public interface AppScreenInstance { + /** + * Return a data frame to the caller which has previously been stored for this screen. + */ + AppDataFrame getDataFrame(UUID id); + + /** + * Put a data frame into this screen. If a data frame with the given ID already exists, it will be replaced + * with the provided frame. The frame is identified via the getId() method. + */ + void putDataFrame(AppDataFrame frame); + + /** + * Return the next sequence value for the given sequence name. + */ + Integer sequenceNextVal(String key); + + /** + * Build the screen-graph from scratch. This builds the entire screen, and so returns a + * {@link ScreenElement}. The screen that is returned reflects the current + * state of the model at the time it is called. + */ + Element build(); + + /** + * Return the element factory associated with this screen. This is required when an element needs to know + * how to conditionally produce more elements (and therefore needs the factory associated with the screen). + */ + ElementFactory getFactory(); + + /** + * Synchronously call a function on this screen. The result is returned. + */ + FutureResult call(String cmdTarget, String cmdName); + + void setMessageListener(MessageActionListener listener); + + /** + * Register a popup screen listener with this screen instance. If a popup should be shown to the user, this + * method will be called. + */ + + void setModalScreenListener(ModalScreenActionListener listener); + + void processAction(ScreenAction result); + + void setScreenCloseListener(ScreenCloseActionListener screenCloseListener); + + void setScreenOpenListener(ScreenOpenListener screenOpenListener); + + /** + * Something, somewhere, has changed, and now the screen should update. Such changes could include changes + * to the contents of any of the datasources, changes to the elements screen graph, etc. All visual elements should + * re-process themselves to ensure they are displaying the current, correct values. This method could + * be called by UI elements on the screen, or other, outside factors. + *

+ * Calling this method is potentially expensive, so if there are many updates made, it is best of the caller + * batches the updates and then calls the update method only one time. + */ + void update() throws Exception; + + /** + * Return the {@link AppInstance} object to which this screen belongs. + */ + AppInstance getAppInstance(); + + Theme getTheme(); + + /** + * Elements should call this method when they are activated (focused), and that event is going to have some + * impact on the screen. It is expected that this method may be called to activate an element which is + * already active. + */ + void activateElement(Object obj); + + EO createNewRecord(); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/ElementFactory.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/ElementFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..4a7230711bb4cc56ac983495faf18609816465d0 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/ElementFactory.java @@ -0,0 +1,8 @@ +package leigh.elements.sdk; + +import leigh.elements.sdk.type1.Element; +import leigh.eo.EO; + +public interface ElementFactory { + Element build(EO cfg, AppScreenInstance screen); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/ElementsColumnConfig.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/ElementsColumnConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..c86cccf34cf2ea9f58edd93cd4895220ae8529cc --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/ElementsColumnConfig.java @@ -0,0 +1,32 @@ +package leigh.elements.sdk; + +/** + * Define an elements column. + * + * @author C. Alexander Leigh + */ +public interface ElementsColumnConfig { + /** + * Return the label associated with this column configuration. This is the value that should be displayed + * to an end-user in a UI. + * + * @return The label. + */ + String getLabel(); + + /** + * Return the name associated with this column configuration. This is the value that is used internally with the + * data. + * + * @return The name. + */ + String getName(); + + int getColIndex(); + + int getWidth(); + + String getAlignment(); + + boolean isReadOnly(); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/SelectionListener.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/SelectionListener.java new file mode 100644 index 0000000000000000000000000000000000000000..b104dba72063975ba66de83c8cc0151f57b19b5a --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/SelectionListener.java @@ -0,0 +1,11 @@ +package leigh.elements.sdk; + +import leigh.mecha.math.IntIntervals; + +public interface SelectionListener { + /** + * Indicates that the selection has just changed for the given frame. The newly selected values are returned, + * and will equal frame.getSelected(). The intervals have already been compacted when this method is called. + */ + void selectionChanged(AppDataFrame frame, IntIntervals selected); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/Theme.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/Theme.java new file mode 100644 index 0000000000000000000000000000000000000000..26b0a910a2abf885cee73993205998cd927c0ed5 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/Theme.java @@ -0,0 +1,5 @@ +package leigh.elements.sdk; + +public class Theme { + // Intentionally Blank +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/TransactionProcessor.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/TransactionProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..0183e534abb49ae24f3cd91e7875af5c5746697f --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/TransactionProcessor.java @@ -0,0 +1,10 @@ +package leigh.elements.sdk; + +/** + * Classes implementing this interface provide transaction processing mechanics for elements screens. + * + * @author C. Alexander Leigh + */ +public interface TransactionProcessor { + // Intentionally Blank +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/MessageAction.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/MessageAction.java new file mode 100644 index 0000000000000000000000000000000000000000..c2bb97e3b5b724a0d5484757c9a094ac35c2a7cb --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/MessageAction.java @@ -0,0 +1,40 @@ +package leigh.elements.sdk.actions; + +import java.util.Objects; + +/** + * This action indicates that a message should be displayed to the enduser on the client. + * + * @author C. Alexander Leigh + */ +public class MessageAction implements ScreenAction { + private final String msg; + + public MessageAction(String msg) { + this.msg = msg; + } + + public String getMsg() { + return msg; + } + + @Override + public String toString() { + return "MessageAction{" + + "msg='" + msg + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MessageAction that = (MessageAction) o; + return Objects.equals(msg, that.msg); + } + + @Override + public int hashCode() { + return Objects.hash(msg); + } +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/MessageActionListener.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/MessageActionListener.java new file mode 100644 index 0000000000000000000000000000000000000000..159c9d854968b42deb5ffb61e8c7ea07fe47f896 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/MessageActionListener.java @@ -0,0 +1,5 @@ +package leigh.elements.sdk.actions; + +public interface MessageActionListener { + void actionMessage(String msg); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ModalScreenActionListener.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ModalScreenActionListener.java new file mode 100644 index 0000000000000000000000000000000000000000..92267eece4ca4f6b2f8f11dce9dd3de3b256884b --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ModalScreenActionListener.java @@ -0,0 +1,5 @@ +package leigh.elements.sdk.actions; + +public interface ModalScreenActionListener { + void actionModalScreen(ModalScreenOpenAction screenInstance); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ModalScreenOpenAction.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ModalScreenOpenAction.java new file mode 100644 index 0000000000000000000000000000000000000000..6bfa9db6c734160187a493d81abe2e443ebab249 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ModalScreenOpenAction.java @@ -0,0 +1,37 @@ +package leigh.elements.sdk.actions; + +import leigh.elements.sdk.AppScreenInstance; + +import java.util.Objects; + +public class ModalScreenOpenAction implements ScreenAction { + private final AppScreenInstance screenInstance; + + public ModalScreenOpenAction(AppScreenInstance popupScreen) { + screenInstance = popupScreen; + } + + public AppScreenInstance getScreenInstance() { + return screenInstance; + } + + @Override + public String toString() { + return "ModalScreenOpenAction{" + + "screenInstance=" + screenInstance + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ModalScreenOpenAction that = (ModalScreenOpenAction) o; + return Objects.equals(screenInstance, that.screenInstance); + } + + @Override + public int hashCode() { + return Objects.hash(screenInstance); + } +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenAction.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenAction.java new file mode 100644 index 0000000000000000000000000000000000000000..471047e06fe2fa0cea28031d9c5625b45f7cbc79 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenAction.java @@ -0,0 +1,10 @@ +package leigh.elements.sdk.actions; + +/** + * Classes implementing this interface are the result of a command executed on a screen. + * + * @author C. Alexander Leigh + */ +public interface ScreenAction { + +} \ No newline at end of file diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenCloseAction.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenCloseAction.java new file mode 100644 index 0000000000000000000000000000000000000000..fe107592d9db1dd403a527940a7033b593515316 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenCloseAction.java @@ -0,0 +1,10 @@ +package leigh.elements.sdk.actions; + +/** + * This action indicates that a screen should be closed in the client. + * + * @author C. Alexander Leigh + */ +public class ScreenCloseAction implements ScreenAction { + // Intentionally Blank +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenCloseActionListener.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenCloseActionListener.java new file mode 100644 index 0000000000000000000000000000000000000000..ab4b62eb5913cb1f6639bb5fea20f5cb2018da78 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenCloseActionListener.java @@ -0,0 +1,5 @@ +package leigh.elements.sdk.actions; + +public interface ScreenCloseActionListener { + void actionScreenClose(); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenOpenAction.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenOpenAction.java new file mode 100644 index 0000000000000000000000000000000000000000..8bcd75ec13f78a9287add2d675f7d955c7a1150f --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenOpenAction.java @@ -0,0 +1,56 @@ +package leigh.elements.sdk.actions; + +import leigh.elements.sdk.AppScreenInstance; + +import java.util.Objects; + +/** + * This action indicates that a screen should be opened on the client. + * + * @author C. Alexander Leigh + */ +public class ScreenOpenAction implements ScreenAction { + private final AppScreenInstance screenInstance; + private final boolean closeOriginatingScreen; + + public ScreenOpenAction(AppScreenInstance screenInstance) { + this(screenInstance, false); + } + + public ScreenOpenAction(AppScreenInstance screenInstance, boolean closeOriginatingScreen) { + this.screenInstance = screenInstance; + this.closeOriginatingScreen = closeOriginatingScreen; + } + + public AppScreenInstance getScreenInstance() { + return screenInstance; + } + + /** + * true if the recipient should also close the originating screen of this event. + */ + public boolean isCloseOriginatingScreen() { + return closeOriginatingScreen; + } + + @Override + public String toString() { + return "ScreenOpenAction{" + + "screenInstance=" + screenInstance + + ", closeOriginatingScreen=" + closeOriginatingScreen + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ScreenOpenAction that = (ScreenOpenAction) o; + return Objects.equals(screenInstance, that.screenInstance); + } + + @Override + public int hashCode() { + return Objects.hash(screenInstance); + } +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenOpenListener.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenOpenListener.java new file mode 100644 index 0000000000000000000000000000000000000000..430826c6531791edf88b5b4645474467e4969ee5 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/actions/ScreenOpenListener.java @@ -0,0 +1,5 @@ +package leigh.elements.sdk.actions; + +public interface ScreenOpenListener { + void actionScreenOpen(ScreenOpenAction screenOpenAction); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ActionElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ActionElement.java new file mode 100644 index 0000000000000000000000000000000000000000..e72c2eb11152cb1dc90491eedcb7a17b4dbb0262 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ActionElement.java @@ -0,0 +1,8 @@ +package leigh.elements.sdk.type1; + +public interface ActionElement extends Element { + String EO_TYPE = "leigh.elements.type1.ActionElement"; + String KEY_ID = "id"; + String KEY_TYPE = "type"; + String TYPE_LOOKUP = "lookup"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ButtonElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ButtonElement.java new file mode 100644 index 0000000000000000000000000000000000000000..986357ea4d4dcaecb26ee06285166fdda953ad80 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ButtonElement.java @@ -0,0 +1,10 @@ +package leigh.elements.sdk.type1; + +public interface ButtonElement { + String EO_TYPE = "leigh.elements.type1.Button"; + String KEY_LABEL = "label"; + String KEY_ACTIONS = "actions"; + String KEY_ACTION_FUNC = "func"; + String KEY_ACTION_FUNC_TARGET = "funcTarget"; + +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ColorFieldElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ColorFieldElement.java new file mode 100644 index 0000000000000000000000000000000000000000..eef9f56913f2ab81a50637166e38844e32156df4 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ColorFieldElement.java @@ -0,0 +1,13 @@ +package leigh.elements.sdk.type1; + +public interface ColorFieldElement extends Element { + String EO_TYPE = "leigh.elements.type1.ColorField"; + String KEY_LABEL = "label"; + String KEY_VALUE = "value"; + String KEY_UI_INDEX = "uiIndex"; + String KEY_ACTIONS = "actions"; + String KEY_ACTION_FUNC = "func"; + String KEY_SEQUENCE = "sequence"; + String KEY_TOOLTIP = "tooltip"; + String KEY_ACTION_FUNC_TARGET = "funcTarget"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/CommonKeys.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/CommonKeys.java new file mode 100644 index 0000000000000000000000000000000000000000..90d4d8fc834f9bdad9827786c9ccc99d9a025811 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/CommonKeys.java @@ -0,0 +1,12 @@ +package leigh.elements.sdk.type1; + +/** + * Common keys which are shared across multiple elements. The purpose of centralizing these keys is to allow + * implementations the freedom to design their own inheritance graphs for elements which have a common key + * structure, which many do. + * + * @author C. Alexander Leigh + */ +public interface CommonKeys { + String KEY_CONTENT = "content"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/DateFieldElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/DateFieldElement.java new file mode 100644 index 0000000000000000000000000000000000000000..bb8affd94e69933b163507e2ca1acd6dd9e9fabc --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/DateFieldElement.java @@ -0,0 +1,9 @@ +package leigh.elements.sdk.type1; + +public interface DateFieldElement extends Element { + String EO_TYPE = "leigh.elements.type1.DateField"; + String KEY_LABEL = "label"; + String KEY_VALUE = "value"; + String KEY_UI_INDEX = "uiIndex"; + String KEY_TOOLTIP = "tooltip"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/Element.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/Element.java new file mode 100644 index 0000000000000000000000000000000000000000..8367d2ed48b4127dd971353d7633d0ad99e894c3 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/Element.java @@ -0,0 +1,14 @@ +package leigh.elements.sdk.type1; + +import leigh.eo.EO; +import leigh.mecha.lang.IdentifiedObject; + +public interface Element extends IdentifiedObject { + String KEY_ID = "id"; + + /** + * Indicates that the configuration properties for this Element have updated, and that the node should + * now perform any required processing, and re-draw itself if required. + */ + EO getCfg(); +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ElementComparator.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ElementComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..8376c00f186fd46c0c3f6ae1bcb58c24bc349315 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ElementComparator.java @@ -0,0 +1,23 @@ +package leigh.elements.sdk.type1; + +import leigh.eo.sort.EOComparator; + +import java.util.Comparator; + +/** + * An adapter to allow {@link EOComparator} to be used against a {@link Element}. + * + * @author C. Alexander Leigh + */ +public class ElementComparator implements Comparator { + private final EOComparator cfgComparator; + + public ElementComparator(EOComparator cfgComparator) { + this.cfgComparator = cfgComparator; + } + + @Override + public int compare(Element o1, Element o2) { + return cfgComparator.compare(o1.getCfg(), o2.getCfg()); + } +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FileFieldElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FileFieldElement.java new file mode 100644 index 0000000000000000000000000000000000000000..d6441bd16a39bae27eb60ad67165657221bca835 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FileFieldElement.java @@ -0,0 +1,9 @@ +package leigh.elements.sdk.type1; + +public interface FileFieldElement extends Element { + String EO_TYPE = "leigh.elements.type1.FileField"; + String KEY_LABEL = "label"; + String KEY_UI_INDEX = "uiIndex"; + String KEY_TOOLTIP = "tooltip"; + String KEY_VALUE = "value"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FlowLayoutElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FlowLayoutElement.java new file mode 100644 index 0000000000000000000000000000000000000000..121124e0fc7a8544be202ef0a03cb4882d38a043 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FlowLayoutElement.java @@ -0,0 +1,7 @@ +package leigh.elements.sdk.type1; + +public interface FlowLayoutElement { + String EO_TYPE = "leigh.elements.type1.FlowLayoutElement"; + String KEY_CONTENT = CommonKeys.KEY_CONTENT; + String KEY_UI_INDEX = "uiIndex"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FormLayout.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FormLayout.java new file mode 100644 index 0000000000000000000000000000000000000000..a14bbebc821bcb7a73d9f9c5aca0f41f36c6f5c0 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FormLayout.java @@ -0,0 +1,7 @@ +package leigh.elements.sdk.type1; + +public interface FormLayout extends Element { + String EO_TYPE = "leigh.elements.type1.FormLayout"; + String KEY_FIELDS = "fields"; + String KEY_UI_INDEX = "uiIndex"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FramedElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FramedElement.java new file mode 100644 index 0000000000000000000000000000000000000000..efc8a97bc409c0d8e914d4076f1f89cc3fe6ee69 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/FramedElement.java @@ -0,0 +1,5 @@ +package leigh.elements.sdk.type1; + +public interface FramedElement { + String KEY_DATASOURCE = "datasource"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GaugeTileElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GaugeTileElement.java new file mode 100644 index 0000000000000000000000000000000000000000..2cc5568fbf2b487a8d79a4c69416e6a8ebf21afc --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GaugeTileElement.java @@ -0,0 +1,10 @@ +package leigh.elements.sdk.type1; + +public interface GaugeTileElement { + String EO_TYPE = "leigh.elements.type1.GaugeTileElement"; + String KEY_TITLE = "title"; + String KEY_VALUE = "value"; + String KEY_UNITS = "units"; + String KEY_MAX_VALUE = "maxValue"; + String KEY_MIN_VALUE = "minValue"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GlobalCommandListener.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GlobalCommandListener.java new file mode 100644 index 0000000000000000000000000000000000000000..e8bf80c9243ae09ccbdb53e85fb6906421af3c30 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GlobalCommandListener.java @@ -0,0 +1,7 @@ +package leigh.elements.sdk.type1; + +import leigh.elements.sdk.actions.ScreenAction; + +public interface GlobalCommandListener { + ScreenAction call(String funcName) throws Exception; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GridElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GridElement.java new file mode 100644 index 0000000000000000000000000000000000000000..3a6c178c3510ff2c39acf1568b7db494efbf9380 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/GridElement.java @@ -0,0 +1,6 @@ +package leigh.elements.sdk.type1; + +public interface GridElement extends Element { + String EO_TYPE = "leigh.elements.type1.GridElement"; + String KEY_CONTENT = "content"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/HorizontalLayoutElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/HorizontalLayoutElement.java new file mode 100644 index 0000000000000000000000000000000000000000..9c252cf5c9f1f386a32aab740d8b5cbf0c71439a --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/HorizontalLayoutElement.java @@ -0,0 +1,7 @@ +package leigh.elements.sdk.type1; + +public interface HorizontalLayoutElement extends Element { + String EO_TYPE = "leigh.elements.type1.HorizontalLayout"; + String KEY_CONTENT = CommonKeys.KEY_CONTENT; + String KEY_UI_INDEX = "uiIndex"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/NodeGraphElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/NodeGraphElement.java new file mode 100644 index 0000000000000000000000000000000000000000..f408b1a0df5d084aa0985a56ca9d491adf14b790 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/NodeGraphElement.java @@ -0,0 +1,12 @@ +package leigh.elements.sdk.type1; + +public interface NodeGraphElement { + // FIXME: Graph, not GraphElement + String EO_TYPE = "leigh.elements.type1.GraphElement"; + // Holds a serialization of the graph. + String KEY_GRAPH = "graph"; + String KEY_UIINDEX = "uiIndex"; + + // Node configuration. + String KEY_NODES = "nodes"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/PanelElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/PanelElement.java new file mode 100644 index 0000000000000000000000000000000000000000..d4f560df9e11cc910250d15b91eac6de2e42e02e --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/PanelElement.java @@ -0,0 +1,8 @@ +package leigh.elements.sdk.type1; + +public interface PanelElement extends Element { + String EO_TYPE = "leigh.elements.type1.Panel"; + String KEY_CONTENT = "content"; + String KEY_LABEL = "label"; + String KEY_UI_INDEX = "uiIndex"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/PanelGroupElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/PanelGroupElement.java new file mode 100644 index 0000000000000000000000000000000000000000..e1a73ece9104d800d3f01a5532d0c332d0fa3ac7 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/PanelGroupElement.java @@ -0,0 +1,13 @@ +package leigh.elements.sdk.type1; + +/** + * A parent container for {@link PanelElement} objects. Panels are always contained within a panel group, which + * provides an opportunity for a parent/manager element to control the UI parent experience (with the understanding + * that each {@link PanelElement} is therefore a child. + * + * @author C. Alexander Leigh + */ +public interface PanelGroupElement extends Element { + String EO_TYPE = "leigh.elements.type1.PanelGroup"; + String KEY_CONTENT = "content"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ScreenElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ScreenElement.java new file mode 100644 index 0000000000000000000000000000000000000000..83006af6f4a574ac137372dbeccc5a337daf93e6 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/ScreenElement.java @@ -0,0 +1,8 @@ +package leigh.elements.sdk.type1; + +public interface ScreenElement extends Element { + String EO_TYPE = "leigh.elements.type1.Screen"; + String KEY_LABEL = "label"; + String KEY_CONTENT = "content"; + String NODE_NAME = "screen"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TableElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TableElement.java new file mode 100644 index 0000000000000000000000000000000000000000..122dd2a05ea09f504bba5dbadb352443530e6cdd --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TableElement.java @@ -0,0 +1,14 @@ +package leigh.elements.sdk.type1; + +public interface TableElement extends FramedElement { + String EO_TYPE = "leigh.elements.type1.TableElement"; + String KEY_CREATE_TYPE = "createType"; + String KEY_SELECTION = "selection"; + String KEY_TIMESTAMP = "timestamp"; + String KEY_UI_INDEX = "uiIndex"; + String KEY_ISREADONLY = "isReadOnly"; + String KEY_SORT_COL = "sortColumn"; + String KEY_SORT_ORDER = "sortOrder"; + String VALUE_SORT_ASCENDING = "asc"; + String VALUE_SORT_DESCENDING = "desc"; +} \ No newline at end of file diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextAreaElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextAreaElement.java new file mode 100644 index 0000000000000000000000000000000000000000..76ac7b2945fa86c90fcd6772f19e66f8d4755ea7 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextAreaElement.java @@ -0,0 +1,13 @@ +package leigh.elements.sdk.type1; + +public interface TextAreaElement extends FramedElement { + String EO_TYPE = "leigh.elements.type1.TextArea"; + String KEY_LABEL = "label"; + String KEY_VALUE = "value"; + String KEY_UI_INDEX = "uiIndex"; + String KEY_ACTIONS = "actions"; + String KEY_ACTION_FUNC = "func"; + String KEY_SEQUENCE = "sequence"; + String KEY_TOOLTIP = "tooltip"; + String KEY_ACTION_FUNC_TARGET = "funcTarget"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextElement.java new file mode 100644 index 0000000000000000000000000000000000000000..04daa6e720daeb36e5b78bb92cf4a60e122f2c4e --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextElement.java @@ -0,0 +1,6 @@ +package leigh.elements.sdk.type1; + +public interface TextElement extends Element { + String EO_TYPE = "leigh.elements.type1.Text"; + String KEY_VALUE = "value"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextFieldElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextFieldElement.java new file mode 100644 index 0000000000000000000000000000000000000000..d2a40bb738786323fc0ef8e5e29bad88ddd5ea98 --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextFieldElement.java @@ -0,0 +1,18 @@ +package leigh.elements.sdk.type1; + +public interface TextFieldElement extends Element { + String EO_TYPE = "leigh.elements.type1.Field"; + String KEY_LABEL = "label"; + String KEY_VALUE = "value"; + String KEY_DISPLAY_VALUE = "displayValue"; + String KEY_COLOR = "color"; + String KEY_FONT_WEIGHT = "fontWeight"; + String KEY_UI_INDEX = "uiIndex"; + String KEY_ACTIONS = "actions"; + String KEY_ACTION_FUNC = "func"; + String KEY_SEQUENCE = "sequence"; + String KEY_TOOLTIP = "tooltip"; + String KEY_ACTION_FUNC_TARGET = "funcTarget"; + String KEY_ACTION_ICON = "icon"; + String KEY_IS_READONLY = "isReadOnly"; +} diff --git a/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextTileElement.java b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextTileElement.java new file mode 100644 index 0000000000000000000000000000000000000000..8c6202f4e7f6f9b619e32f32e1d9e76582d7717f --- /dev/null +++ b/leigh-elements-sdk/src/main/java/leigh/elements/sdk/type1/TextTileElement.java @@ -0,0 +1,7 @@ +package leigh.elements.sdk.type1; + +public interface TextTileElement { + String EO_TYPE = "leigh.elements.type1.TextTileElement"; + String KEY_TITLE = "title"; + String KEY_TEXT = "text"; +} diff --git a/leigh-elements/.gitignore b/leigh-elements/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-elements/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-elements/LICENSE b/leigh-elements/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-elements/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-elements/build.gradle b/leigh-elements/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..746e191282cfc7f73212751ba0f679fefcdfaa3c --- /dev/null +++ b/leigh-elements/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'java' + id 'java-library' +} + +version leigh_elements + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-eo') + api project(':leigh-elements-sdk') + api project(':leigh-conflux') + testImplementation group: 'junit', name: 'junit', version: '4.12' +} diff --git a/leigh-elements/src/main/java/leigh/elements/AppFactory.java b/leigh-elements/src/main/java/leigh/elements/AppFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..a2b0b99986482f3d06a514e038e2e61581f593f0 --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/AppFactory.java @@ -0,0 +1,17 @@ +package leigh.elements; + +import leigh.elements.sdk.App; +import leigh.elements.sdk.Theme; + +import java.io.IOException; +import java.util.UUID; + +/** + * Classes implementing this interface are capable of creating elements application instances, typically by loading + * them from storage. + * + * @author C. Alexander Leigh + */ +public interface AppFactory { + App loadApplication(UUID id, Theme theme) throws IOException, ClassNotFoundException; +} diff --git a/leigh-elements/src/main/java/leigh/elements/ElementBase.java b/leigh-elements/src/main/java/leigh/elements/ElementBase.java new file mode 100644 index 0000000000000000000000000000000000000000..2a17b8075f29d9737f2012f1bfed2f7353410206 --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ElementBase.java @@ -0,0 +1,23 @@ +package leigh.elements; + +import leigh.elements.sdk.type1.Element; +import leigh.eo.EO; + +import java.util.UUID; + +public abstract class ElementBase implements Element { + public final static String KEY_ID = "id"; + private final EO cfg; + + protected ElementBase(EO cfg) { + this.cfg = cfg; + } + + public EO getCfg() { + return cfg; + } + + public UUID getId() { + return cfg.getValueUUID(KEY_ID); + } +} diff --git a/leigh-elements/src/main/java/leigh/elements/ElementsColumnCfgComparator.java b/leigh-elements/src/main/java/leigh/elements/ElementsColumnCfgComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..d221d63c94c921771250ca5433683950590a5295 --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ElementsColumnCfgComparator.java @@ -0,0 +1,15 @@ +package leigh.elements; + +import leigh.elements.sdk.ElementsColumnConfig; + +import java.util.Comparator; + +public class ElementsColumnCfgComparator implements Comparator { + @Override + public int compare(ElementsColumnConfig o1, ElementsColumnConfig o2) { + int i1 = o1.getColIndex(); + int i2 = o2.getColIndex(); + + return Integer.compare(i1, i2); + } +} diff --git a/leigh-elements/src/main/java/leigh/elements/ElementsColumnConfigBase.java b/leigh-elements/src/main/java/leigh/elements/ElementsColumnConfigBase.java new file mode 100644 index 0000000000000000000000000000000000000000..b8f59ab787b78b6767c1d3e054bad6dec01dc902 --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ElementsColumnConfigBase.java @@ -0,0 +1,80 @@ +package leigh.elements; + +import leigh.elements.sdk.ElementsColumnConfig; + +import java.util.Objects; + +public class ElementsColumnConfigBase implements ElementsColumnConfig { + private final String name; + private final String label; + private final int index; + private final int width; + private final String alignment; + private final boolean isReadOnly; + + public ElementsColumnConfigBase(String name, String label, int index, int width, String alignment, boolean isReadOnly) { + this.name = name; + this.label = label; + this.index = index; + this.width = width; + this.alignment = alignment; + this.isReadOnly = isReadOnly; + } + + public String getAlignment() { + return alignment; + } + + @Override + public String getName() { + return name; + } + + @Override + public int getColIndex() { + return index; + } + + @Override + public String toString() { + return "ElementsColumnConfigBase{" + + "name='" + name + '\'' + + ", label='" + label + '\'' + + ", index=" + index + + ", width=" + width + + ", alignment='" + alignment + '\'' + + ", isReadOnly=" + isReadOnly + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ElementsColumnConfigBase that = (ElementsColumnConfigBase) o; + return index == that.index && width == that.width && isReadOnly == that.isReadOnly && Objects.equals(name, that.name) && Objects.equals(label, that.label) && Objects.equals(alignment, that.alignment); + } + + @Override + public int hashCode() { + return Objects.hash(name, label, index, width, alignment, isReadOnly); + } + + public boolean isReadOnly() { + return isReadOnly; + } + + public int getIndex() { + return index; + } + + public int getWidth() { + return width; + } + + @Override + public String getLabel() { + return label; + } + +} diff --git a/leigh-elements/src/main/java/leigh/elements/ElementsEngine.java b/leigh-elements/src/main/java/leigh/elements/ElementsEngine.java new file mode 100644 index 0000000000000000000000000000000000000000..c1e9a00377da6924da123c56d8843331301bdffc --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ElementsEngine.java @@ -0,0 +1,37 @@ +package leigh.elements; + +import leigh.elements.sdk.App; +import leigh.elements.sdk.Theme; + +import java.io.IOException; +import java.util.HashMap; +import java.util.UUID; + +/** + * The central Elements class, which is responsible for managing one or more elements applications. + * + * @author C. Alexander Leigh + */ +public class ElementsEngine { + private final HashMap apps = new HashMap<>(); + private final AppFactory factory; + + /** + * Create a new elements engine with the given app factory. + */ + public ElementsEngine(AppFactory factory) { + this.factory = factory; + } + + /** + * Return the {@link App} associated with this ID, or null if there is no such app. + */ + public App getApp(UUID appId, Theme theme) throws IOException, ClassNotFoundException { + App app = apps.get(appId); + if (app == null) { + app = factory.loadApplication(appId, theme); + apps.put(appId, app); + } + return apps.get(appId); + } +} diff --git a/leigh-elements/src/main/java/leigh/elements/ElementsFactoryBase.java b/leigh-elements/src/main/java/leigh/elements/ElementsFactoryBase.java new file mode 100644 index 0000000000000000000000000000000000000000..5fa7ef0d1cfc497596f191bca4b11c62a943b45d --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ElementsFactoryBase.java @@ -0,0 +1,32 @@ +package leigh.elements; + +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.ElementFactory; +import leigh.elements.sdk.type1.Element; +import leigh.eo.EO; + +import java.util.UUID; +import java.util.WeakHashMap; + +public abstract class ElementsFactoryBase implements ElementFactory { + private final WeakHashMap elements = new WeakHashMap<>(); + + @Override + public Element build(EO cfg, AppScreenInstance screen) { + Element element = newNode(cfg, screen); + UUID id = cfg.getValueUUID(Element.KEY_ID); + + assert (element != null); + // assert (id != null); + + elements.put(id, element); + + return element; + } + + public abstract Element newNode(EO cfg, AppScreenInstance screen); + + public Element getElement(UUID id) { + return elements.get(id); + } +} diff --git a/leigh-elements/src/main/java/leigh/elements/ElementsProcessorState.java b/leigh-elements/src/main/java/leigh/elements/ElementsProcessorState.java new file mode 100644 index 0000000000000000000000000000000000000000..7ef26a28fa2feecd06384436d5e7f8a3d5f7517e --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ElementsProcessorState.java @@ -0,0 +1,26 @@ +package leigh.elements; + +import leigh.conflux.DataFrame; +import leigh.mecha.nodegraph.ProcessorState; + +import java.util.HashMap; +import java.util.UUID; + +/** + * Implementation of {@link ProcessorState} which is peculiar to Elements. + * + * @author C. Alexander Leigh + */ +public class ElementsProcessorState extends ProcessorState { + private final HashMap frames; + + + public ElementsProcessorState(HashMap frames) { + this.frames = frames; + } + + public HashMap getFrames() { + return frames; + } + +} diff --git a/leigh-elements/src/main/java/leigh/elements/ElementsSort.java b/leigh-elements/src/main/java/leigh/elements/ElementsSort.java new file mode 100644 index 0000000000000000000000000000000000000000..10dea33c03726bde3cefc6763d2eaf5f5c4b0d6f --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ElementsSort.java @@ -0,0 +1,20 @@ +package leigh.elements; + +import leigh.elements.sdk.type1.Element; +import leigh.elements.sdk.type1.ElementComparator; +import leigh.eo.sort.EONumericComparator; +import leigh.mecha.sort.SortCardinality; + +import java.util.ArrayList; +import java.util.Locale; + +public class ElementsSort { + public static final String KEY_UI_INDEX = "uiIndex"; + + public static ArrayList sort(ArrayList src, String key, Locale locale) { + ArrayList children = new ArrayList(src); + children.sort(new ElementComparator( + new EONumericComparator(KEY_UI_INDEX, SortCardinality.ASCENDING, locale))); + return children; + } +} diff --git a/leigh-elements/src/main/java/leigh/elements/ParentElement.java b/leigh-elements/src/main/java/leigh/elements/ParentElement.java new file mode 100644 index 0000000000000000000000000000000000000000..e2222d15c2d8cc2938facc2660588370450b8d5b --- /dev/null +++ b/leigh-elements/src/main/java/leigh/elements/ParentElement.java @@ -0,0 +1,48 @@ +package leigh.elements; + +import leigh.elements.sdk.AppScreenInstance; +import leigh.elements.sdk.type1.Element; +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Base implementation for a {@link Element} which contains children in one of its attributes. + * + * @author C. Alexander Leigh + */ +public class ParentElement extends ElementBase { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ParentElement.class); + private HashMap> children = new HashMap<>(); + private final AppScreenInstance screen; + + protected ParentElement(EO cfg, AppScreenInstance screen) { + super(cfg); + this.screen = screen; + } + + /** + * For each child found in the attribute, factory it and add it to our children list to be available + * via the getChildren() method. + */ + public void buildChildren(String childrenKey) { + ArrayList kids = new ArrayList<>(); + for (EO paneCfg : getCfg().getValueLoop(childrenKey)) { + logger.debug("Building child: {}", paneCfg); + Element newChild = screen.getFactory().build(paneCfg, screen); + kids.add(newChild); + } + children.put(childrenKey, kids); + } + + public AppScreenInstance getScreen() { + return screen; + } + + public HashMap> getChildren() { + return children; + } +} diff --git a/leigh-elements/src/test/java/leigh/elements/ElementsContextImplTest.java b/leigh-elements/src/test/java/leigh/elements/ElementsContextImplTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6db1247814e6ddc0dc35a2bb89556aa014058143 --- /dev/null +++ b/leigh-elements/src/test/java/leigh/elements/ElementsContextImplTest.java @@ -0,0 +1,5 @@ +package leigh.elements; + +public class ElementsContextImplTest { + +} diff --git a/leigh-eo-mime/.gitignore b/leigh-eo-mime/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-eo-mime/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-eo-mime/LICENSE b/leigh-eo-mime/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-eo-mime/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-eo-mime/build.gradle b/leigh-eo-mime/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..4ec9607e4c8062c3e13f08cd4b3b575ba725ef77 --- /dev/null +++ b/leigh-eo-mime/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'java-library' + id 'maven-publish' +} + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-eo') + api 'javax.mail:mail:1.4.7' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} \ No newline at end of file diff --git a/leigh-eo-mime/src/main/java/leigh/eo/mime/EOMimeMessage.java b/leigh-eo-mime/src/main/java/leigh/eo/mime/EOMimeMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..b16f25654708a982c48743947aeb972db5d71d42 --- /dev/null +++ b/leigh-eo-mime/src/main/java/leigh/eo/mime/EOMimeMessage.java @@ -0,0 +1,174 @@ +package leigh.eo.mime; + +import leigh.eo.EO; +import leigh.eo.EOJsonSerializer; +import leigh.eo.io.EOInputChannel; +import leigh.eo.io.EOInputStream; +import leigh.eo.io.EOOutputChannel; +import leigh.eo.io.EOOutputStream; +import leigh.mecha.json.JSONArray; +import leigh.mecha.json.JSONObject; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.IOUtil; +import leigh.mecha.util.MimeType; + +import javax.activation.DataSource; +import javax.mail.BodyPart; +import javax.mail.MessagingException; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMultipart; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collection; + +/** + * This class contains an EO message array, with optinal blob data, as an Multipurpose Internet Mail Extension + * (MIME) message, as specified in RFC2045, RFC2046, RFC2047, RFC4288, RFC4289, RFC2049. The message + * may be written to and from various formats. + * + * @author C. Alexander Leigh + * @since mk11 (ZERO CONTRAST) + */ +public class EOMimeMessage { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOMimeMessage.class); + private final MimeMultipart msg; + private final Charset charset; + + @Override + public String toString() { + return "EOMimeMessage{" + + "msg=" + msg + + ", charset=" + charset + + '}'; + } + + /** + * Create a new EOMimeMessage by reading it from the provided InputStream. + * + * @param is The input stream to read the message from. + * @throws MessagingException + */ + public EOMimeMessage(InputStream is, Charset charset) throws MessagingException, IOException { + this.charset = charset; + DataSource ds = new DataSource() { + @Override + public String toString() { + return "$classname{}"; + } + + @Override + public InputStream getInputStream() throws IOException { + return is; + } + + @Override + public OutputStream getOutputStream() throws IOException { + return null; + } + + @Override + public String getContentType() { + return MimeType.MIME_MULTIPART; + } + + @Override + public String getName() { + return null; + } + }; + + msg = new MimeMultipart(ds); + } + + public EOMimeMessage(EOInputChannel channel, Charset charset) + throws IOException, ClassNotFoundException, MessagingException { + this.charset = charset; + msg = new MimeMultipart(); + ArrayList eos = new ArrayList<>(); + EOInputStream is = channel.getInputStream(); + while (true) { + EO obj = is.readObject(); + if (obj == null) break; + eos.add(obj); + } + + read(eos); + } + + /** + * Return the Content-Type for the overall message in HTTP/1.1 format. This will include the boundary. + * + * @return The Content-Type + */ + public String getContentType() { + return msg.getContentType().replaceAll("\\r|\\n", ""); + } + + /** + * Create a new EO MIME message containing the given set of EOs and any blobs stored in the + * provided blob store. The blob store may be set to null. + * + * @param eos + * @throws MessagingException + * @throws IOException + */ + public EOMimeMessage(Collection eos, Charset charset) + throws MessagingException, IOException { + this.charset = charset; + msg = new MimeMultipart(); + read(eos); + } + + private void read(Collection eos) throws MessagingException, IOException { + MimeBodyPart body = new MimeBodyPart(); + JSONArray jsonObjs = new JSONArray(); + for (EO eo : eos) { + jsonObjs.put(EOJsonSerializer.toJsonObject(eo)); + } + body.setText(jsonObjs.toString(), charset.name()); + msg.addBodyPart(body); + } + + /** + * Write the data part of the message to the provided collection. Note that each time this method is called, + * the contents of the message is parsed and a new set of EO objects is created. + * + * @param dst + * @throws MessagingException + * @throws IOException + */ + public void write(Collection dst) throws MessagingException, IOException { + BodyPart eoPart = msg.getBodyPart(0); + String txt = IOUtil.readAll(eoPart.getInputStream(), charset); + JSONArray array = new JSONArray(txt); + for (int i = 0; i < array.length(); i++) { + dst.add(EOJsonSerializer.deserialize((JSONObject) array.get(i))); + } + } + + public void write(EOOutputChannel out) throws IOException, MessagingException { + BodyPart eoPart = msg.getBodyPart(0); + String txt = IOUtil.readAll(eoPart.getInputStream(), charset); + JSONArray array = new JSONArray(txt); + + EOOutputStream os = out.getOutputStream(); + for (int i = 0; i < array.length(); i++) { + os.writeEO(EOJsonSerializer.deserialize((JSONObject) array.get(i))); + } + } + + /** + * Write the contents of the message to the given output stream in MIME format. + * + * @param out + * @throws IOException + * @throws MessagingException + */ + public void write(OutputStream out) throws IOException, MessagingException { + msg.writeTo(out); + } +} diff --git a/leigh-eo-schema/.gitignore b/leigh-eo-schema/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-eo-schema/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-eo-schema/LICENSE b/leigh-eo-schema/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-eo-schema/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-eo-schema/build.gradle b/leigh-eo-schema/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..1e2090e516882070bab8bfa32b2edede163b5328 --- /dev/null +++ b/leigh-eo-schema/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'java-library' + id 'maven-publish' +} + +repositories { + mavenCentral() +} + +dependencies { + api 'org.apache.velocity:velocity:1.7' + api project(':leigh-eo') + testImplementation group: 'junit', name: 'junit', version: '4.12' +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/DAOGenerator.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/DAOGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..19e315fcccad514acbc44df5017690a39e62b9c2 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/DAOGenerator.java @@ -0,0 +1,166 @@ +package leigh.eo.schema; + +import leigh.eo.EO; +import leigh.eo.EODataType; +import leigh.eo.schema.dao.ElementElementDAO; +import leigh.eo.schema.dao.FieldElementDAO; +import leigh.eo.schema.dao.LoopElementDAO; +import leigh.eo.schema.dao.SchemaElementDAO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.StringUtil; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.runtime.RuntimeConstants; +import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.util.Properties; + +/** + * This tool generates the source-code for DAO objects based on their ESP based + * schema. This is handy for developing Java tooling that interacts with ESP records. + * + * @author C. Alexander Leigh + */ +public final class DAOGenerator { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DAOGenerator.class); + // The name for the DAO class + private final static String KEY_JAVACLASS = "javaClass"; + // The package for the DAO class + private final static String KEY_JAVAPKG = "javaPackage"; + // The element EO + private final static String KEY_ELEMENT = "element"; + private final static String KEY_FIELDS = "fields"; + private final static String KEY_GENERATOR = "generator"; + private final static String KEY_ECMAPKG = "ecmaPackage"; + private final File baseDirectory; + private final VelocityEngine velocity; + + public DAOGenerator(final File baseDirectory) { + this.baseDirectory = baseDirectory; + velocity = new VelocityEngine(); + final Properties props = new Properties(); + props.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); + props.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); + velocity.init(props); + } + + /** + * Capitalize the first letter in the provided string. This method is provided for the benefit of the + * template so that we do not need to involve other classes in the template execution context. + * + * @param str The string to capitalize + * @return The capitalized String + */ + @SuppressWarnings("unused") + public String capitalize(final String str) { + return org.apache.velocity.util.StringUtils.capitalizeFirstLetter(str); + } + + /** + * This method is provided for the benefit of the template. + * + * @param str + * @return + */ + @SuppressWarnings("unused") + public String toUpperCase(final String str) { + return str.toUpperCase(); + } + + @SuppressWarnings("unused") + public String inferType(final EO field) { + if (field.getApiType().equals(LoopElementDAO.API_TYPE)) + return "EOLoop"; + + logger.debug("Inferring type on {}", field); + + String typ = EODataType.getType(EODataType.valueOf(FieldElementDAO.getType(field))).getCanonicalName(); + + //logger.info("inferred type: {} {}", field, typ); + + return typ; + } + + @SuppressWarnings("unused") + public String inferAccessor(final EO field) { + if (field.getApiType().equals(LoopElementDAO.API_TYPE)) + return "getValueLoop"; + + return EODataType.getAccessor(EODataType.valueOf(FieldElementDAO.getType(field))); + } + + /** + * Used by the template; returns a java class name for the given element name. This is + * the KEY_NAME of the element with a capitalized first letter. + * + * @param element The element to return the name for. + * @return The name + */ + public String elementClassName(final EO element) { + return org.apache.velocity.util.StringUtils.capitalizeFirstLetter(StringUtil.last(ElementElementDAO.getApiName(element) + "ElementDAO", "\\.")); + } + + /** + * Generate a set of DAO classes from the provided schema. The classes will be generated into the + * provided package name - specify in . format e.g. "com.foo.bar". If files already exist, they will + * be silently overwritten. + * + * @param basePkg + * @param schema + * @throws FileNotFoundException + */ + public void generateJava(final String basePkg, final EO schema) throws FileNotFoundException { + final Template javaTemplate = velocity.getTemplate("leigh/eo/schema/JavaDAO.vm"); + + final String pkgBase = basePkg.replace('.', '/'); + + logger.info("Creating new DAO source-code file: {}", pkgBase); + + final File classPkg = new File(baseDirectory, pkgBase); + classPkg.mkdirs(); + + for (final EO element : SchemaElementDAO.getElements(schema)) { + final VelocityContext vc = new VelocityContext(); + vc.put(KEY_JAVACLASS, elementClassName(element)); + vc.put(KEY_JAVAPKG, basePkg); + vc.put(KEY_ELEMENT, element); + vc.put(KEY_FIELDS, ElementElementDAO.getFields(element)); + vc.put(KEY_GENERATOR, this); + + final File javaClassFile = new File(classPkg, elementClassName(element) + ".java"); + + logger.info("Writing class: {}", javaClassFile); + + final PrintWriter javaPw = new PrintWriter(javaClassFile); + javaTemplate.merge(vc, javaPw); + javaPw.close(); + } + } + + /** + * Write the DAOs to a the provided output writer. Providing the same writer to successive calls + * of this method allows the output ECMAScript v5 classes to be accumulated into a single file for + * ease of use. + * + * @since mk12 mod0 (RETROGRADE) + */ + public void generateEcma5(final PrintWriter output, final String ecmaPkg, final EO schema) throws FileNotFoundException { + final Template jsTemplate = velocity.getTemplate("leigh/eo/schema/ECMA5.vm"); + + for (final EO element : SchemaElementDAO.getElements(schema)) { + final VelocityContext vc = new VelocityContext(); + vc.put(KEY_JAVACLASS, elementClassName(element)); + vc.put(KEY_ECMAPKG, ecmaPkg); + vc.put(KEY_ELEMENT, element); + vc.put(KEY_FIELDS, ElementElementDAO.getFields(element)); + vc.put(KEY_GENERATOR, this); + + jsTemplate.merge(vc, output); + } + } +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/SchemaUtil.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/SchemaUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..e18d88487e8282a2f9e33430bc204d9741f478f6 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/SchemaUtil.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema; + +import leigh.eo.EO; +import leigh.eo.EODataType; +import leigh.eo.EOLoop; +import leigh.eo.schema.dao.*; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.lang.StringUtils; + +import java.util.Iterator; +import java.util.Locale; +import java.util.Map; + +/** + * This class provides utility functionality for working with EO instances. + * + * @author C. Alexander Leigh + */ +public final class SchemaUtil { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SchemaUtil.class); + + /** + * Set all the default values from the schema into the given EO. If replace is true then + * existing values in the eo will be replaced with the default value. + *

+ * If the EO contains loops, the method will recurse through the loops, setting default values in all + * the children. + * + * @param eo + * @param schema + */ + public static void setDefaults(final EO eo, final EO schema, final boolean replace) { + final EO elementSchema = leigh.eo.schema.dao.SchemaUtil.getElement(schema, eo.getApiType()); + + logger.debug("Validating against schema: {}", schema); + + if (elementSchema == null) { + throw new IllegalArgumentException("Element not found in schema: " + eo.getApiType()); + } + + Iterator it = ElementElementDAO.getFields(elementSchema).iterator(FieldElementDAO.API_TYPE); + while (it.hasNext()) { + EO field = it.next(); + String defaultValue = FieldElementDAO.getDefaultValue(field); + if (defaultValue == null) continue; + + // If we are not replacing, and we have the value, iterate + if (!replace) { + if (eo.contains(FieldElementDAO.getApiName(field))) continue; + } + + // Set the default value into the target eo + eo.setValue(FieldElementDAO.getApiName(field), defaultValue); + } + + it = ElementElementDAO.getFields(elementSchema).iterator(LoopElementDAO.API_TYPE); + while (it.hasNext()) { + EO loopSchema = it.next(); + EOLoop loop = eo.getValueLoop(LoopElementDAO.getApiName(loopSchema)); + if (loop == null) continue; + for (EO loopObject : loop) { + setDefaults(loopObject, schema, replace); + } + } + } + + /** + * Validate the contents of the EO based on the provided schema. Any errors will be written into + * the errors section of the EO. + *

+ * The method does not recurse into EOLoops. + * + * @param eo + * @param schema + */ + public static void validate(final EO eo, final EO schema) { + final EO elementSchema = leigh.eo.schema.dao.SchemaUtil.getRootElement(schema); + + logger.debug("Validating against schema: {}", schema); + + if (elementSchema == null) { + throw new IllegalArgumentException("Element not found in schema: " + eo.getApiType()); + } + + for (final EO field : ElementElementDAO.getFields(elementSchema)) { + logger.debug("Validating field: {}", field); + + logger.debug("Validators: {}", FieldElementDAO.getValidators(field)); + for (final EO validator : FieldElementDAO.getValidators(field)) { + logger.debug("Found validator {} for {}", validator, field); + switch (validator.getApiType()) { + case ValidatorNotEmptyElementDAO.API_TYPE: + logger.debug("Checking empty..."); + if (eo.isEmpty(FieldElementDAO.getApiName(field))) { + logger.debug("VAL FAIL"); + eo.putError(FieldElementDAO.getApiName(field), "Value must not be empty."); + } + } + } + } + } + + /** + * Ensures that all strings in the object for fields which are marked as being case insensitive are in + * upper-case format. The routine does not make any attempt to assess or correct fields which are not + * denoted as being a string type, even if they are marked as being case-insensitive. + *

+ * The method does not recurse into EOLoops. + */ + public static void fixCase(final EO eo, final EO schema, final Locale locale) { + logger.debug("fixCase() called against: {}", schema); + + final EO elementSchema = leigh.eo.schema.dao.SchemaUtil.getRootElement(schema); + + if (elementSchema == null) { + throw new IllegalArgumentException("Element not found in schema: " + eo.getApiType()); + } + + for (final EO field : ElementElementDAO.getFields(elementSchema)) { + if (!FieldElementDAO.assertType(field)) { + logger.debug("Field was not a field"); + continue; + } + if (!FieldElementDAO.getIsCaseInsensitive(field)) { + logger.debug("Field was not set as case insensitive"); + continue; + } + if (field.getValueEspType(FieldElementDAO.KEY_TYPE) != EODataType.string) { + logger.debug("Field was not a string: {}", FieldElementDAO.getType(field)); + continue; + } + + logger.debug("Asserting case for: {}", field); + final String apiName = FieldElementDAO.getApiName(field); + logger.debug("apiName: {}", apiName); + + final String value = eo.getValueString(apiName); + logger.debug("value: {}", value); + if (value == null) continue; + + if (!StringUtils.isAllUpperCase(value)) + eo.setValue(apiName, value.toUpperCase(locale)); + } + } + + /** + * Add the given EO, which is a schema, to the given map. The key for the map will be the name for the schema. + * + * @param dst + * @param src + */ + public static void addSchemaMap(Map dst, EO src) { + dst.put(SchemaElementDAO.getApiName(src), src); + } + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/AcceptTypeElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/AcceptTypeElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..2216746c391c619a632c041007c940f098980fb8 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/AcceptTypeElementDAO.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class AcceptTypeElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.AcceptType"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_ELEMENTAPINAME = "elementApiName"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + public static java.lang.String getElementApiName(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_ELEMENTAPINAME); + + } + + public static void setElementApiName(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_ELEMENTAPINAME, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/Apotheosis.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/Apotheosis.java new file mode 100644 index 0000000000000000000000000000000000000000..3af8da3d245ff2b638fb90e8c521b0d02f0d0952 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/Apotheosis.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EODataType; +import leigh.eo.schema.DAOGenerator; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; + +import java.io.File; +import java.io.FileNotFoundException; + +/** + * This class generates the schema^2 (that is, the schema for the schema). In turn this schema can be used to generateJava + * the DAO objects for the schema components (Element, Loop, Field, etc). These schema DAOs are used throughout + * the ESP codebase. + * + * @author C. Alexander Leigh + */ +public final class Apotheosis { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Apotheosis.class); + + // Observe the procedures of a general alert + + public static EO generate() { + final EO schema = SchemaUtil.create(SchemaUtil.API_KEY); + + final EO labelField = SchemaUtil.createLabelField(); + final EO apiNameField = FieldUtil.create("apiName", "API Name", EODataType.string); + + SchemaElementDAO.appendLabel(schema, TextUtil.defaultLabel("Record Schema")); + + // The Makers of the Makers fall before the child + + // Label + final EO label = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(label); + ElementElementDAO.setApiName(label, TextElementDAO.API_TYPE); + ElementElementDAO.getFields(label).add(FieldUtil.create("locale", "Locale", EODataType.locale)); + ElementElementDAO.getFields(label).add(FieldUtil.create("text", "Text")); + + // Progress reports are arriving. + + // Element + final EO element = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(element); + ElementElementDAO.setApiName(element, ElementUtil.API_NAME); + ElementElementDAO.getFields(element).add(apiNameField); + ElementElementDAO.getFields(element).add(LoopUtil.create("fields", "Fields")); + + // Field + final EO field = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(field); + ElementElementDAO.setApiName(field, FieldUtil.API_NAME); + ElementElementDAO.getFields(field).add(apiNameField); + ElementElementDAO.getFields(field).add(labelField); + ElementElementDAO.getFields(field).add(FieldUtil.create("type", "Type")); + ElementElementDAO.getFields(field).add(FieldUtil.create("isCaseInsensitive", "Case Insensitive", + EODataType.bool)); + // Hidden fields will not display in standard forms + ElementElementDAO.getFields(field).add(FieldUtil.create("isHidden", "Hidden", EODataType.bool)); + ElementElementDAO.getFields(field).add(FieldUtil.create("isProtected", "Protected", EODataType.bool)); + ElementElementDAO.getFields(field).add(LoopUtil.create("fixedChoices", "Fixed Choices")); + ElementElementDAO.getFields(field).add(LoopUtil.create("validators", "Validators")); + ElementElementDAO.getFields(field).add(FieldUtil.create("help", "Help Text")); + ElementElementDAO.getFields(field).add(FieldUtil.create("defaultValue", "Default Value")); + + // Loop + final EO loop = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(loop); + ElementElementDAO.setApiName(loop, LoopUtil.API_NAME); + ElementElementDAO.getFields(loop).add(apiNameField); + ElementElementDAO.getFields(loop).add(labelField); + ElementElementDAO.getFields(loop).add(LoopUtil.create("acceptTypes", "Accept Types", + new String[]{AcceptTypeElementDAO.API_TYPE})); + + // FixedChoice + final EO acceptType = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(acceptType); + ElementElementDAO.setApiName(acceptType, AcceptTypeElementDAO.API_TYPE); + ElementElementDAO.getFields(acceptType).add(FieldUtil.createNotNull("elementApiName", "Element API Name")); + + // FixedChoice + final EO fixedChoice = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(fixedChoice); + ElementElementDAO.setApiName(fixedChoice, FixedChoiceElementDAO.API_TYPE); + ElementElementDAO.getFields(fixedChoice).add(FieldUtil.create(FixedChoiceElementDAO.KEY_VALUE, "Value", + EODataType.string)); + ElementElementDAO.getFields(fixedChoice).add(labelField); + + // Custom Proc + final EO customProc = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(customProc); + ElementElementDAO.setApiName(customProc, "Procedure"); + ElementElementDAO.getFields(customProc).add(apiNameField); + ElementElementDAO.getFields(customProc).add(labelField); + ElementElementDAO.getFields(customProc).add(FieldUtil.createNotNull("engine", "Script Engine")); + ElementElementDAO.getFields(customProc).add(FieldUtil.createNotNull("script", "Code")); + + // Schema + final EO schemaElement = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(schemaElement); + ElementElementDAO.setApiName(schemaElement, SchemaUtil.API_KEY); + ElementElementDAO.getFields(schemaElement).add(apiNameField); + ElementElementDAO.getFields(schemaElement).add(labelField); + ElementElementDAO.getFields(schemaElement).add(LoopUtil.create("elements", "Elements")); + ElementElementDAO.getFields(schemaElement).add(LoopUtil.create("procedures", "Custom Procedures")); + + final EO notEmptyValidator = ElementElementDAO.create(); + SchemaElementDAO.getElements(schema).add(notEmptyValidator); + ElementElementDAO.setApiName(notEmptyValidator, "org.a6v.esp.eo.schema.ValidatorNotEmpty"); + + return schema; + } + + public static void main(final String... args) throws FileNotFoundException { + UniversalJob.banner(logger, "Apotheosis mk3", "2014 C. Alexander Leigh"); + final EO schema = generate(); + final DAOGenerator gen = new DAOGenerator(new File("a6v-eo-schema/src/main/java")); + gen.generateJava("org.a6v.eo.schema", schema); + + logger.info("Generated schema: {}", schema); + } +} diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ElementElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ElementElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..7f592c0ca80d0508578a7c45485a9db683730eee --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ElementElementDAO.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class ElementElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.Element"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_APINAME = "apiName"; + public static final String KEY_FIELDS = "fields"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=apiName, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=API Name, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@134dd9f0]} org.a6v.esp.eo.EOLoop@134dda0f, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@33b498 */ + + + public static java.lang.String getApiName(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_APINAME); + + } + + public static void setApiName(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_APINAME, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=null} org.a6v.esp.eo.EOLoop@0, apiName=fields, label=Fields}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@f573d82a */ + + public static void appendFields(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_FIELDS); + loop.add(label); + } + + public static EOLoop getFields(EO eo) { + EOLoop o = eo.getValueLoop(KEY_FIELDS); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_FIELDS, o); + } + return o; + + } + + public static void setFields(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_FIELDS, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ElementUtil.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ElementUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..3435ba44a0d9fee78f36ee874e2f91893da5fd77 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ElementUtil.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * Utility class for interacting with Elements. + * + * @author C. Alexander Leigh + */ +public final class ElementUtil { + public static String API_NAME = ElementElementDAO.API_TYPE; + public static String KEY_API_NAME = "apiName"; + public static String KEY_FIELDS = "fields"; + + public static EO create(final String apiName) { + final EO eo = ElementElementDAO.create(); + ElementElementDAO.setApiName(eo, apiName); + return eo; + } + + /** + * Set the protected status of all fields in element to true. + * + * @param element + */ + public static void protectAll(final EO element) { + for (final EO field : ElementElementDAO.getFields(element)) { + if (!FieldElementDAO.assertType(field)) + continue; + FieldElementDAO.setIsProtected(field, true); + } + } + + public static void addField(final EO eo, final EO field) { + ElementElementDAO.getFields(eo).add(field); + } + + /** + * Returns true if this element only contains fields, otherwise, returns false. + * + * @param element + * @return + */ + public static boolean containsOnlyFields(final EO element) { + final EOLoop fields = ElementElementDAO.getFields(element); + return fields.onlyContains(FieldUtil.API_NAME); + } + + /** + * Return field/loop of the given API name from the given element. If the element does not + * contain any fields, or a field by that API name is not found, null is returned. + * + * @param element + * @param apiName + * @return + */ + public static EO getField(final EO element, final String apiName) { + final EOLoop fields = ElementElementDAO.getFields(element); + if (fields == null) return null; + + // Try the fields first + Iterator it = fields.iterator(FieldElementDAO.API_TYPE); + while (it.hasNext()) { + final EO field = it.next(); + if (FieldElementDAO.getApiName(field).equals(apiName)) + return field; + } + + // Then try the loops + it = fields.iterator(LoopElementDAO.API_TYPE); + while (it.hasNext()) { + final EO field = it.next(); + if (LoopElementDAO.getApiName(field).equals(apiName)) + return field; + } + + // Nothing found? Too bad, so sad. + + return null; + } + + /** + * Returns a Set containing the API names for every field within + * the given element. Only API names for Fields are returns, not Loops or any + * other kinds of constructs. + * + * @param element + * @return + */ + public static Map getFieldKeys(final EO element) { + + final HashMap names = new HashMap<>(); + + for (final EO field : ElementElementDAO.getFields(element)) { + if (!FieldElementDAO.assertType(field)) + continue; + final Class c = FieldUtil.getTypeClass(field); + names.put(FieldElementDAO.getApiName(field), c); + } + + return names; + } + + /** + * Return the first field in the element. Loops and other types are ignored. + * + * @param element + * @return + */ + public static EO getFirstField(final EO element) { + final EOLoop fields = ElementElementDAO.getFields(element); + if (fields == null) return null; + + // Try the fields first + Iterator it = fields.iterator(FieldElementDAO.API_TYPE); + if (it.hasNext()) { + return it.next(); + } + + return null; + } +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FieldElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FieldElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..8b7e3d89b3982feb520cb42e2ac914b879898ac8 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FieldElementDAO.java @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class FieldElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.Field"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_APINAME = "apiName"; + public static final String KEY_LABEL = "label"; + public static final String KEY_TYPE = "type"; + public static final String KEY_ISCASEINSENSITIVE = "isCaseInsensitive"; + public static final String KEY_ISHIDDEN = "isHidden"; + public static final String KEY_ISPROTECTED = "isProtected"; + public static final String KEY_FIXEDCHOICES = "fixedChoices"; + public static final String KEY_VALIDATORS = "validators"; + public static final String KEY_HELP = "help"; + public static final String KEY_DEFAULTVALUE = "defaultValue"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=apiName, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=API Name, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@134dd9f0]} org.a6v.esp.eo.EOLoop@134dda0f, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@33b498 */ + + public static java.lang.String getApiName(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_APINAME); + + } + + public static void setApiName(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_APINAME, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.AcceptType', data={elementApiName=org.a6v.esp.eo.schema.Text}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@d962a4a2]} org.a6v.esp.eo.EOLoop@d962a4c1, apiName=label, label=Label}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@c6fa5811 */ + + public static void appendLabel(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_LABEL); + loop.add(label); + } + + public static EOLoop getLabel(EO eo) { + EOLoop o = eo.getValueLoop(KEY_LABEL); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_LABEL, o); + } + return o; + + } + + public static void setLabel(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_LABEL, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=type, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Type, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@acbd582b]} org.a6v.esp.eo.EOLoop@acbd584a, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@65f47b5a */ + + + public static java.lang.String getType(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_TYPE); + + } + + public static void setType(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_TYPE, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=isCaseInsensitive, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Case Insensitive, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@d10c54c0]} org.a6v.esp.eo.EOLoop@d10c54df, type=bool}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@e183315f */ + + + public static java.lang.Boolean getIsCaseInsensitive(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueBoolean(KEY_ISCASEINSENSITIVE); + + } + + public static void setIsCaseInsensitive(final EO eo, java.lang.Boolean value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_ISCASEINSENSITIVE, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=isHidden, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Hidden, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@2d84de9b]} org.a6v.esp.eo.EOLoop@2d84deba, type=bool}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@5b8dbb41 */ + + + public static java.lang.Boolean getIsHidden(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueBoolean(KEY_ISHIDDEN); + + } + + public static void setIsHidden(final EO eo, java.lang.Boolean value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_ISHIDDEN, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=isProtected, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Protected, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@ffb9e057]} org.a6v.esp.eo.EOLoop@ffb9e076, type=bool}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@b6cdb25 */ + + + public static java.lang.Boolean getIsProtected(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueBoolean(KEY_ISPROTECTED); + + } + + public static void setIsProtected(final EO eo, java.lang.Boolean value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_ISPROTECTED, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=null} org.a6v.esp.eo.EOLoop@0, apiName=fixedChoices, label=Fixed Choices}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@b250568e */ + + public static void appendFixedChoices(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_FIXEDCHOICES); + loop.add(label); + } + + public static EOLoop getFixedChoices(EO eo) { + EOLoop o = eo.getValueLoop(KEY_FIXEDCHOICES); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_FIXEDCHOICES, o); + } + return o; + + } + + public static void setFixedChoices(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_FIXEDCHOICES, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=null} org.a6v.esp.eo.EOLoop@0, apiName=validators, label=Validators}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@b502e89a */ + + public static void appendValidators(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_VALIDATORS); + loop.add(label); + } + + public static EOLoop getValidators(EO eo) { + EOLoop o = eo.getValueLoop(KEY_VALIDATORS); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_VALIDATORS, o); + } + return o; + + } + + public static void setValidators(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_VALIDATORS, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=help, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Help Text, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@6e153135]} org.a6v.esp.eo.EOLoop@6e153154, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@236263c1 */ + + + public static java.lang.String getHelp(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_HELP); + + } + + public static void setHelp(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_HELP, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=defaultValue, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Default Value, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@bd611573]} org.a6v.esp.eo.EOLoop@bd611592, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@af50bb78 */ + + + public static java.lang.String getDefaultValue(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_DEFAULTVALUE); + + } + + public static void setDefaultValue(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_DEFAULTVALUE, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FieldUtil.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FieldUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..4a3c0cf6e5e532d26bdbcd5a32a898be596f608b --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FieldUtil.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EODataType; + +/** + * Utility class for interacting with field elements. + * + * @author C. Alexander Leigh + */ +public final class FieldUtil { + public static String API_NAME = FieldElementDAO.API_TYPE; + public static String KEY_API_NAME = "apiName"; + public static String KEY_LABEL = "label"; + public static String KEY_TYPE = "type"; + public static String KEY_FIXED_CHOICES = "fixedChoices"; + + public static EO help(EO field, String help) { + FieldElementDAO.setHelp(field, help); + return field; + } + + public static EO create(final String apiName, final String label) { + return create(apiName, label, EODataType.string); + } + + public static EO createNotNull(final String apiName, final String label) { + return createNotNull(apiName, label, EODataType.string); + } + + public static EO createNotNull(final String apiName, final String label, final EODataType type) { + final EO field = create(apiName, label); + FieldElementDAO.getValidators(field).add(ValidatorNotEmptyElementDAO.create()); + FieldElementDAO.setType(field, type.toString()); + return field; + } + + + public static EO create(final String apiName, final String label, final EODataType type) { + final EO field = FieldElementDAO.create(); + FieldElementDAO.setApiName(field, apiName); + FieldElementDAO.appendLabel(field, TextUtil.defaultLabel(label)); + FieldElementDAO.setType(field, type.toString()); + + return field; + } + + public static EO createCaseInsensitive(final String apiName, final String label) { + final EO field = create(apiName, label); + FieldElementDAO.setIsCaseInsensitive(field, true); + return field; + } + + + public static EO createProtectedCaseInsensitive(final String apiName, final String label) { + final EO field = create(apiName, label); + FieldElementDAO.setIsCaseInsensitive(field, true); + FieldElementDAO.setIsProtected(field, true); + return field; + } + + public static EO createProtectedCaseInsensitiveNotNull(final String apiName, final String label) { + final EO field = createNotNull(apiName, label); + FieldElementDAO.setIsCaseInsensitive(field, true); + FieldElementDAO.setIsProtected(field, true); + return field; + } + + + public static EO createNotNullCaseInsensitive(final String apiName, final String label) { + final EO field = createNotNull(apiName, label); + FieldElementDAO.setIsCaseInsensitive(field, true); + return field; + } + + /** + * Given a field element, returns the Java Class as denoted by EODataType + * for the field. This is useful if you need to know what sort of a class the field + * is expected to provide. + * + * @param field + * @return + */ + public static Class getTypeClass(final EO field) { + return EODataType.getType(EODataType.valueOf(FieldElementDAO.getType(field))); + } + + public static EO addNotNullValidator(final EO field) { + FieldElementDAO.getValidators(field).add(ValidatorNotEmptyElementDAO.create()); + return field; + } +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FixedChoiceElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FixedChoiceElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..c8bd2f344b1ba04b01a6683c9c91afafa17687ce --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FixedChoiceElementDAO.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class FixedChoiceElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.FixedChoice"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_VALUE = "value"; + public static final String KEY_LABEL = "label"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=value, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Value, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@b17ef630]} org.a6v.esp.eo.EOLoop@b17ef64f, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@792df30c */ + + + public static java.lang.String getValue(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_VALUE); + + } + + public static void setValue(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_VALUE, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.AcceptType', data={elementApiName=org.a6v.esp.eo.schema.Text}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@d962a4a2]} org.a6v.esp.eo.EOLoop@d962a4c1, apiName=label, label=Label}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@c6fa5811 */ + + public static void appendLabel(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_LABEL); + loop.add(label); + } + + public static EOLoop getLabel(EO eo) { + EOLoop o = eo.getValueLoop(KEY_LABEL); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_LABEL, o); + } + return o; + + } + + public static void setLabel(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_LABEL, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FixedChoiceUtil.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FixedChoiceUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..852d5b62f6c870d1cc45100a4fde6a54a096eed3 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/FixedChoiceUtil.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; + +/** + * Utility class for interacting with Fixed Choice elements. + * + * @author C. Alexander Leigh + */ +public final class FixedChoiceUtil { + public static EO create(final String value, final String label) { + final EO eo = FixedChoiceElementDAO.create(); + FixedChoiceElementDAO.setValue(eo, value); + FieldElementDAO.appendLabel(eo, TextUtil.defaultLabel(label)); + return eo; + } +} diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/LoopElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/LoopElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..2cdfc18a8a4f3a2416a1c2bdbd0c834d3e0edbad --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/LoopElementDAO.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class LoopElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.Loop"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_APINAME = "apiName"; + public static final String KEY_LABEL = "label"; + public static final String KEY_ACCEPTTYPES = "acceptTypes"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=apiName, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=API Name, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@134dd9f0]} org.a6v.esp.eo.EOLoop@134dda0f, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@33b498 */ + + + public static java.lang.String getApiName(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_APINAME); + + } + + public static void setApiName(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_APINAME, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.AcceptType', data={elementApiName=org.a6v.esp.eo.schema.Text}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@d962a4a2]} org.a6v.esp.eo.EOLoop@d962a4c1, apiName=label, label=Label}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@c6fa5811 */ + + public static void appendLabel(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_LABEL); + loop.add(label); + } + + public static EOLoop getLabel(EO eo) { + EOLoop o = eo.getValueLoop(KEY_LABEL); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_LABEL, o); + } + return o; + + } + + public static void setLabel(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_LABEL, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.AcceptType', data={elementApiName=org.a6v.esp.eo.schema.AcceptType}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@11fa82d9]} org.a6v.esp.eo.EOLoop@11fa82f8, apiName=acceptTypes, label=Accept Types}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@3ac0c602 */ + + public static void appendAcceptTypes(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_ACCEPTTYPES); + loop.add(label); + } + + public static EOLoop getAcceptTypes(EO eo) { + EOLoop o = eo.getValueLoop(KEY_ACCEPTTYPES); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_ACCEPTTYPES, o); + } + return o; + + } + + public static void setAcceptTypes(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_ACCEPTTYPES, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/LoopUtil.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/LoopUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..bb1c851b384112556d350ac9b8a5ed129e3c072d --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/LoopUtil.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +/** + * Utility class for interacting with loop elements. + * + * @author C. Alexander Leigh + */ +public final class LoopUtil { + public static String API_NAME = LoopElementDAO.API_TYPE; + public static String KEY_API_NAME = "apiName"; + public static String KEY_LABEL = "label"; + + public static EO create(final String apiName, final String label, final String[] acceptTypes) { + final EO eo = new EO(API_NAME); + eo.setValue(KEY_API_NAME, apiName); + eo.setValue(KEY_LABEL, label); + + final EOLoop ats = LoopElementDAO.getAcceptTypes(eo); + + for (final String s : acceptTypes) { + final EO accept = AcceptTypeElementDAO.create(); + AcceptTypeElementDAO.setElementApiName(accept, s); + ats.add(accept); + } + return eo; + } + + public static EO create(final String apiName, final String label) { + return create(apiName, label, new String[]{}); + } + + /** + * Returns the first acceptable type for this loop. + * + * @param loopSchema + * @return + */ + public static String getFirstAcceptType(EO loopSchema) { + EOLoop acceptTypes = LoopElementDAO.getAcceptTypes(loopSchema); + return AcceptTypeElementDAO.getElementApiName(acceptTypes.get(0)); + } + +} diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ProcedureElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ProcedureElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..49580a68861ca33c861ab558f8bd029cfa5e8511 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ProcedureElementDAO.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class ProcedureElementDAO { + public static final String API_TYPE = "Procedure"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_APINAME = "apiName"; + public static final String KEY_LABEL = "label"; + public static final String KEY_ENGINE = "engine"; + public static final String KEY_SCRIPT = "script"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=apiName, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=API Name, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@134dd9f0]} org.a6v.esp.eo.EOLoop@134dda0f, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@33b498 */ + + + public static java.lang.String getApiName(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_APINAME); + + } + + public static void setApiName(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_APINAME, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.AcceptType', data={elementApiName=org.a6v.esp.eo.schema.Text}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@d962a4a2]} org.a6v.esp.eo.EOLoop@d962a4c1, apiName=label, label=Label}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@c6fa5811 */ + + public static void appendLabel(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_LABEL); + loop.add(label); + } + + public static EOLoop getLabel(EO eo) { + EOLoop o = eo.getValueLoop(KEY_LABEL); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_LABEL, o); + } + return o; + + } + + public static void setLabel(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_LABEL, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=engine, validators=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.ValidatorNotEmpty', data={}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@64a48200]} org.a6v.esp.eo.EOLoop@64a4821f, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Script Engine, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@837317ce]} org.a6v.esp.eo.EOLoop@837317ed, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@6ce187bb */ + + + public static java.lang.String getEngine(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_ENGINE); + + } + + public static void setEngine(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_ENGINE, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=script, validators=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.ValidatorNotEmpty', data={}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@64a48200]} org.a6v.esp.eo.EOLoop@64a4821f, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Code, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@acb578d4]} org.a6v.esp.eo.EOLoop@acb578f3, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@48f10e30 */ + + + public static java.lang.String getScript(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_SCRIPT); + + } + + public static void setScript(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_SCRIPT, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/SchemaElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/SchemaElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..4823883da16c3772700f4f3d7b8086f242a4560d --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/SchemaElementDAO.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class SchemaElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.Schema"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_APINAME = "apiName"; + public static final String KEY_LABEL = "label"; + public static final String KEY_ELEMENTS = "elements"; + public static final String KEY_PROCEDURES = "procedures"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=apiName, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=API Name, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@134dd9f0]} org.a6v.esp.eo.EOLoop@134dda0f, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@33b498 */ + + + public static java.lang.String getApiName(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_APINAME); + + } + + public static void setApiName(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_APINAME, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.AcceptType', data={elementApiName=org.a6v.esp.eo.schema.Text}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@d962a4a2]} org.a6v.esp.eo.EOLoop@d962a4c1, apiName=label, label=Label}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@c6fa5811 */ + + public static void appendLabel(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_LABEL); + loop.add(label); + } + + public static EOLoop getLabel(EO eo) { + EOLoop o = eo.getValueLoop(KEY_LABEL); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_LABEL, o); + } + return o; + + } + + public static void setLabel(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_LABEL, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=null} org.a6v.esp.eo.EOLoop@0, apiName=elements, label=Elements}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@4ac77596 */ + + public static void appendElements(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_ELEMENTS); + loop.add(label); + } + + public static EOLoop getElements(EO eo) { + EOLoop o = eo.getValueLoop(KEY_ELEMENTS); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_ELEMENTS, o); + } + return o; + + } + + public static void setElements(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_ELEMENTS, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Loop', data={acceptTypes=EOLoop{array=null} org.a6v.esp.eo.EOLoop@0, apiName=procedures, label=Custom Procedures}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@9f49c141 */ + + public static void appendProcedures(EO eo, EO label) { + EOLoop loop = eo.getValueLoop(KEY_PROCEDURES); + loop.add(label); + } + + public static EOLoop getProcedures(EO eo) { + EOLoop o = eo.getValueLoop(KEY_PROCEDURES); + if (o == null) { + o = new EOLoop(); + eo.setValue(KEY_PROCEDURES, o); + } + return o; + + } + + public static void setProcedures(final EO eo, EOLoop value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_PROCEDURES, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/SchemaUtil.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/SchemaUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6dc241aafa67f763a1373bca1c99057ee798f905 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/SchemaUtil.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.UUID; + +/** + * Previously the schema contained a pointer to the root element. In the modern incarnation the root element + * always has the same API name as the schema itself, and therefore can always be inferred. This came about because there + * was seldom/never a practical situation where they needed to be different. + * + * @author C. Alexander Leigh + */ +public final class SchemaUtil { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SchemaUtil.class); + public static String API_KEY = SchemaElementDAO.API_TYPE; + public static String KEY_ELEMENTS = "elements"; + public static String KEY_API_NAME = "apiName"; + // The magical schema ID. This is a global constant. + public static UUID SCHEMA_ID = UUID.fromString("0684fb60-16a9-11e4-8c21-0800200c9a66"); + + public static EO createLabelField(String fieldName, String fieldDesc) { + return LoopUtil.create(fieldName, fieldDesc, new String[]{TextElementDAO.API_TYPE}); + } + + public static EO createLabelField() { + return createLabelField("label", "Label"); + } + + @Deprecated + public static EO create() { + final EO eo = new EO(API_KEY); + eo.setValue(KEY_ELEMENTS, new EOLoop()); + return eo; + } + + public static EO getRootElement(final EO schema) { + logger.debug("Searching for root element in: {}", schema); + return getElement(schema, SchemaElementDAO.getApiName(schema)); + } + + public static EO getElement(final EO schema, final String apiName) { + for (final EO element : SchemaElementDAO.getElements(schema)) { + if (ElementElementDAO.getApiName(element).equals(apiName)) + return element; + } + return null; + } + + public static EO create(final String apiName) { + final EO eo = SchemaElementDAO.create(); + SchemaElementDAO.setApiName(eo, apiName); + return eo; + } + + + public static void addElement(final EO eo, final EO element) { + EOLoop loop = (EOLoop) eo.getValue(KEY_ELEMENTS); + if (loop == null) { + loop = new EOLoop(); + eo.setValue(KEY_ELEMENTS, loop); + } + loop.add(element); + } +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/TextElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/TextElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..d64ef09b38d4accf02aecc55ac497c2dada2949e --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/TextElementDAO.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class TextElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.Text"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + public static final String KEY_LOCALE = "locale"; + public static final String KEY_TEXT = "text"; + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=locale, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Locale, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@346bd10b]} org.a6v.esp.eo.EOLoop@346bd12a, type=locale}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@7fe4174f */ + + + public static java.util.Locale getLocale(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueLocale(KEY_LOCALE); + + } + + public static void setLocale(final EO eo, java.util.Locale value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_LOCALE, value); + } + + + /* EO{typeName='org.a6v.esp.eo.schema.Field', data={apiName=text, label=EOLoop{array=[EO{typeName='org.a6v.esp.eo.schema.Text', data={text=Text, locale=en}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@acb10e14]} org.a6v.esp.eo.EOLoop@acb10e33, type=string}, errors={}, globalErrors=[]} org.a6v.esp.eo.EO@66010f4c */ + + + public static java.lang.String getText(EO eo) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + return eo.getValueString(KEY_TEXT); + + } + + public static void setText(final EO eo, java.lang.String value) { + if (!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: " + eo.getApiType()); + eo.setValue(KEY_TEXT, value); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/TextUtil.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/TextUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..3a5f0918119cdce18741afb8eefe0347b816c413 --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/TextUtil.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +import java.util.Locale; + +/** + * Utility class for interacting with Text elements. + * + * @author C. Alexander Leigh + */ +public class TextUtil { + public static final Locale defaultLocale = Locale.ENGLISH; + + public static String getDefaultText(EOLoop loop) { + return getText(loop, defaultLocale); + } + + + public static EO defaultLabel(final String text) { + final EO label = TextElementDAO.create(); + TextElementDAO.setText(label, text); + TextElementDAO.setLocale(label, defaultLocale); + return label; + } + + /** + * Given a loop of TextElement EOs, return the one that matches the given locale. + * + * @param loop + * @return + */ + public static String getText(EOLoop loop, Locale locale) { + for (EO text : loop) { + if (!TextElementDAO.assertType(text)) + continue; + if (locale.equals(TextElementDAO.getLocale(text))) + return TextElementDAO.getText(text); + } + + for (EO text : loop) { + if (!TextElementDAO.assertType(text)) + continue; + if (defaultLocale.equals(TextElementDAO.getLocale(text))) + return TextElementDAO.getText(text); + } + + return null; + } + + public static Locale getDefaultLocale() { + return defaultLocale; + } + + public static String getLabelValueString(EO src, String key, Locale locale) { + EOLoop loop = src.getValueLoop(key); + if (loop != null) { + return getText(loop, locale); + } + return null; + } +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ValidatorNotEmptyElementDAO.java b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ValidatorNotEmptyElementDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..171f990167ca2b891eae8538534b9266d6154f1e --- /dev/null +++ b/leigh-eo-schema/src/main/java/leigh/eo/schema/dao/ValidatorNotEmptyElementDAO.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.schema.dao; + +import leigh.eo.EO; + +/** + * This is a dynamically generated DAO class for accessing objects within an ESP graph. This class + * has been generated by DAOGenerator and should not be modified. + * + * @author DAOGenerator (synthetically generated class) + */ +public final class ValidatorNotEmptyElementDAO { + public static final String API_TYPE = "org.a6v.esp.eo.schema.ValidatorNotEmpty"; + + public static EO create() { + EO eo = new EO(API_TYPE); + return eo; + } + + public static boolean assertType(final EO eo) { + return eo.getApiType().equals(API_TYPE); + } + + + public static String apiType(final EO eo) { + return eo.getApiType(); + } + + +} \ No newline at end of file diff --git a/leigh-eo-schema/src/main/resources/leigh/eo/schema/ECMA5.vm b/leigh-eo-schema/src/main/resources/leigh/eo/schema/ECMA5.vm new file mode 100644 index 0000000000000000000000000000000000000000..6df051ad9bcfbe867d5f0368fea47f4e79f648c0 --- /dev/null +++ b/leigh-eo-schema/src/main/resources/leigh/eo/schema/ECMA5.vm @@ -0,0 +1,54 @@ +esp.mkpath('${ecmaPackage}'); +${ecmaPackage}.${javaClass} = {}; + +${ecmaPackage}.${javaClass}.APIapiName = "${element.getValue("apiName")}"; + +#foreach($i in ${fields}) + ${ecmaPackage}.${javaClass}.KEY_${generator.toUpperCase(${i.getValue("apiName")})} = "${i.getValue("apiName")}"; +#end + +${ecmaPackage}.${javaClass}.create = function() { +return {apiName: ${ecmaPackage}.${javaClass}.APIapiName, data:{}}; +}; + +${ecmaPackage}.${javaClass}.assertType = function(eo) { +return this.APIapiName === eo['apiName']; +}; + + + +#foreach($i in ${fields}) + +/* $i */ + + #if(${generator.inferType($i)} == "EOLoop") + ${ecmaPackage}.${javaClass}.append${generator.capitalize(${i.getValue( + "apiName")})} = function(eo, label) { + var loop = eo['data'][(this.KEY_${generator.toUpperCase(${i.getValue("apiName")})})]; + loop.add(label); + }; + #end + + ${ecmaPackage}.${javaClass}.get${generator.capitalize(${i.getValue("apiName")})} = function(eo) { + #if(${generator.inferType($i)} == "EOLoop") + var o = eo['data'][(${ecmaPackage}.${javaClass}.KEY_${generator.toUpperCase(${i.getValue( + "apiName")})})]; + if(o==null) { + o = new EOLoop(); + eo['data'][(KEY_${generator.toUpperCase(${i.getValue("apiName")})}]=o; + } + return o; + #else + if(!this.assertType(eo)) throw "Mismatched EO type: [found: " + eo['apiName'] + "] [expected: " + this.APIapiName + "]"; + return eo['data'][(this.KEY_${generator.toUpperCase(${i.getValue("apiName")})})]; + #end + +}; + + ${ecmaPackage}.${javaClass}.set${generator.capitalize(${i.getValue("apiName")})} = function(eo, value) { +if(!this.assertType(eo)) throw "Mismatched EO type: [found: " + eo['apiName'] + "] [expected: " + this.APIapiName + "]"; + +eo['data'][this.KEY_${generator.toUpperCase(${i.getValue("apiName")})}]=value; +}; + +#end \ No newline at end of file diff --git a/leigh-eo-schema/src/main/resources/leigh/eo/schema/JavaDAO.vm b/leigh-eo-schema/src/main/resources/leigh/eo/schema/JavaDAO.vm new file mode 100644 index 0000000000000000000000000000000000000000..e114e3926efc78c98c243d6879a860f80d4fbbbc --- /dev/null +++ b/leigh-eo-schema/src/main/resources/leigh/eo/schema/JavaDAO.vm @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2014-2015, by C. Alexander Leigh. +* All rights reserved. +* +* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE +* The copyright notice above does not evidence any +* actual or intended publication of such source code. +*/ + +package $javaPackage; + +import org.a6v.eo.EO; +import org.a6v.eo.EOLoop; +import java.io.Serializable; +import java.time.Instant; +import java.util.UUID; + +/** +* This is a dynamically generated DAO class for accessing objects within an ESP graph. This class +* has been generated by DAOGenerator and should not be modified. +* +* @author DAOGenerator (synthetically generated class) +*/ +public final class ${javaClass} { +public static final String API_TYPE = "${element.getValue("apiName")}"; + +public static EO create() { +EO eo = new EO(API_TYPE); +return eo; +} + +public static boolean assertType(final EO eo) { +return eo.getApiType().equals(API_TYPE); +} + +#foreach($i in ${fields}) +public static final String KEY_${generator.toUpperCase(${i.getValue("apiName")})} = "${i.getValue("apiName")}"; +#end + +public static String apiType(final EO eo) { +return eo.getApiType(); +} + +#foreach($i in ${fields}) + +/* $i */ + +#if(${generator.inferType($i)} == "EOLoop") + public static void append${generator.capitalize(${i.getValue("apiName")})}(EO eo, EO label) { + EOLoop loop = eo.${generator.inferAccessor($i)}(KEY_${generator.toUpperCase(${i.getValue("apiName")})}); + loop.add(label); + } +#end + + #if(${generator.inferType($i)} == "java.math.BigDecimal") + public static void set${generator.capitalize(${i.getValue("apiName")})}(final EO eo, int value) { + if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); + eo.setValue(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, value); + } + + public static void set${generator.capitalize(${i.getValue("apiName")})}(final EO eo, float value) { + if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); + eo.setValue(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, value); + } + + public static void set${generator.capitalize(${i.getValue("apiName")})}(final EO eo, double value) { + if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); + eo.setValue(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, value); + } + + public static void set${generator.capitalize(${i.getValue("apiName")})}(final EO eo, long value) { + if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); + eo.setValue(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, value); + } + + public static void set${generator.capitalize(${i.getValue("apiName")})}(final EO eo, short value) { + if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); + eo.setValue(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, value); + } + #end + +public static ${generator.inferType($i)} get${generator.capitalize(${i.getValue("apiName")})}(EO eo) { + #if(${generator.inferType($i)} == "EOLoop") + EOLoop o = eo.${generator.inferAccessor($i)}(KEY_${generator.toUpperCase(${i.getValue("apiName")})}); + if(o==null) { + o = new EOLoop(); + eo.setValue(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, o); + } + return o; + #else + if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); + return eo.${generator.inferAccessor($i)}(KEY_${generator.toUpperCase(${i.getValue("apiName")})}); + #end + +} + +public static void set${generator.capitalize(${i.getValue("apiName")})}(final EO eo, ${generator.inferType($i)} value) { +if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); +eo.setValue(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, value); +} + +public static void setIfUnset${generator.capitalize(${i.getValue( + "apiName")})}(final EO eo, ${generator.inferType($i)} value) { +if(!assertType(eo)) throw new IllegalArgumentException("Mismatched EO type: [found: " + eo.getApiType() + "] [expected: " + API_TYPE + "]"); +eo.setValueIfUnset(KEY_${generator.toUpperCase(${i.getValue("apiName")})}, value); +} + + +#end + +} \ No newline at end of file diff --git a/leigh-eo/.gitignore b/leigh-eo/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-eo/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-eo/LICENSE b/leigh-eo/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-eo/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-eo/build.gradle b/leigh-eo/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..e93425e503d9c3eff838a53441f3cfb9e5fb1154 --- /dev/null +++ b/leigh-eo/build.gradle @@ -0,0 +1,63 @@ + +plugins { + id 'java' + id 'java-library' + id 'maven-publish' +} + +version leigh_eo_ver + +repositories { + mavenCentral() +} + +java { + withJavadocJar() +} + +dependencies { + api project(':leigh-mecha') + api 'commons-lang:commons-lang:2.6' + api 'de.ruedigermoeller:fst:2.52' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} + +publishing { + publications { + mavenJava(MavenPublication) { + artifactId = 'leigh-eo' + from components.java + versionMapping { + usage('java-api') { + fromResolutionOf('runtimeClasspath') + } + usage('java-runtime') { + fromResolutionResult() + } + } + pom { + name = 'LEIGH Enterprise Objects' + description = 'Enterprise Objects' + url = 'http://leigh-co.com' + licenses { + license { + name = 'COMMERCIAL' + url = 'http://leigh-co.com' + } + } + developers { + developer { + id = 'aleigh' + name = 'C. Alexander Leigh' + email = 'a@leigh-co.com' + } + } + } + } + } + repositories { + maven { + url = "$buildDir/repos/dist" + } + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/EO.java b/leigh-eo/src/main/java/leigh/eo/EO.java new file mode 100644 index 0000000000000000000000000000000000000000..bfb1f4e44e32a1ea728df31977604aafc8641c2e --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EO.java @@ -0,0 +1,651 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo; + +import leigh.mecha.lang.NotImplementedException; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.math.IntIntervals; +import leigh.mecha.util.Snavig; +import org.apache.commons.lang.StringUtils; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.time.Duration; +import java.time.Instant; +import java.util.*; +import java.util.regex.Pattern; + +/** + * Design Considerations: + *

+ * An important philosophy of the EO is that the internal data-type (returned from getValue()) should + * not be relied on. For example, serializing an EO to a store and then retrieving it may change the internal + * data-types. Code that requires a given data-type should always call the type-specific getter so that (if necessary) + * type conversion can automatically be performed. For example, getValueInstant() instead of + * getValue(). + *

+ * When a String representation of a value is required, call getValueString() instead of + * getValue().toString() as the EO implementation has specific string conversion mechanics to ensure + * the returned string can be properly type-converted by the EO class in the future. + *

+ * The EO intentionally has no understanding of the meaning of the data it stores, and this extends to the content-types + * of that data. For example, if a given attribute contains a UUID, there is no intrinsic way to know whether that UUID + * refers, to a UUID or a binary reference of that ID, or to a value that should have been a string but the caller + * provided a UUID anyways. + *

+ * It is an exercise for the caller to keep track of their business data meaning; this can either be done through + * schemas (as provided by ESP) or through other techniques such as encoding data-types or flags into the EO itself. + * + * We took from our environment and made from it something more. + *

+ * It is a requirement that hashCode() and equals() be the same regardless of the contents. + * + * @author C. Alexander Leigh + */ + +// TODO: Use loss of precision calculations from TypeConverter to improve class mechanics +public class EO implements Serializable, Cloneable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EO.class); + private static final long serialVersionUID = 1; + private static final String WEAK_META_PREFIX = "_"; + private static final String STRONG_META_PREFIX = "#"; + private static String pathPattern = Pattern.quote("/"); + private final String typeName; + private final HashMap data = new HashMap<>(); + private transient EditTracker editTracker; + private HashMap> meta; + + /** + * Initialize a new element map with the given type name. The type name has no particular + * meaning to the EO implementation itself, but, maps the definition of the EO to an external + * schema. + */ + public EO(final String apiType) { + this.typeName = apiType; + } + + public EO() { + typeName = null; + } + + public EditTracker getEditTracker() { + return editTracker; + } + + /** + * Set the edit tracker for this EO. This will have the side-effect of setting the edit tracker for any + * loops contained within the EO. + */ + public EO setEditTracker(EditTracker editTracker) { + this.editTracker = editTracker; + for (Map.Entry val : data.entrySet()) { + if (val instanceof EOLoop) { + ((EOLoop) val).setEditTracker(editTracker); + } + } + return this; + } + + /** + * Return the meta map for the given apiName, if it exists, otherwise, return null>. + * If create is specified as true then the meta map will be created + * if it does not already exist. + */ + private HashMap getMetaMap(String key, boolean create) { + if (meta == null) { + if (create == true) { + meta = new HashMap<>(); + } else { + return null; + } + } + + HashMap attrMeta = meta.get(key); + if (attrMeta != null) { + return attrMeta; + } + + if (create) { + attrMeta = new HashMap<>(); + meta.put(key, attrMeta); + return attrMeta; + } + + return null; + } + + private HashMap getMetaMap(String key) { + return getMetaMap(key, false); + } + + /** + * Set a meta value for the given attribute. If the given attribute is removed from the EO, then all meta + * values for that attribute are also removed. + *

+ * If the isWeak flag is set to true, then the meta value has special properties. If the attribute to which this + * meta value belongs is changed, the weak value will be removed. + */ + public void setMetaValue(String apiName, String metaKey, Serializable value, boolean isWeak) { + if (meta == null) meta = new HashMap<>(); + HashMap attMeta = meta.get(apiName); + if (attMeta == null) { + attMeta = new HashMap<>(); + meta.put(apiName, attMeta); + } + + if (isWeak) { + attMeta.remove(STRONG_META_PREFIX + metaKey); + attMeta.put(WEAK_META_PREFIX + metaKey, value); + } else { + attMeta.remove(WEAK_META_PREFIX + metaKey); + attMeta.put(STRONG_META_PREFIX + metaKey, value); + } + } + + public Map> getMeta() { + return meta; + } + + /** + * Return the meta value, if any, for the given attribute. Returns null if there is no such + * meta value. + */ + public Serializable getMetaValue(String apiName, String metaKey) { + HashMap attMeta = getMetaMap(apiName); + if (attMeta == null) return null; + Serializable s = attMeta.get(STRONG_META_PREFIX + metaKey); + if (s != null) return s; + return attMeta.get(WEAK_META_PREFIX + metaKey); + } + + /** + * Remove all meta values for the given attribute. + */ + public void removeAllMeta(String apiName) { + if (meta != null) { + meta.remove(apiName); + } + } + + /** + * Add all the provides metaValues values to the meta values already stored + * in this EO for the given attribute. The keys for the provided meta values are expected + * to have already been prefixed for weak status. + */ + public void setAllMeta(String apiName, Map metaValues) { + HashMap attrMeta = getMetaMap(apiName, true); + attrMeta.putAll(metaValues); + } + + /** + * Remove all weak meta values for the given attribute. + */ + public void removeWeakMeta(String apiName) { + HashMap attMeta = getMetaMap(apiName); + if (attMeta == null) return; + + // We want to remove every key that begins with the weak prefix + ArrayList toRemove = new ArrayList<>(); + for (String metaKey : attMeta.keySet()) { + if (metaKey.startsWith(WEAK_META_PREFIX)) toRemove.add(metaKey); + } + attMeta.keySet().removeAll(toRemove); + } + + public boolean containsKey(String key) { + return data.containsKey(key); + } + + /** + * Returns true if this EO is - or is compatible with - the provided type. + */ + public boolean isType(String apiName) { + return StringUtils.equals(typeName, apiName); + } + + /** + * Provides a deep-copy of the given EO. + * + * @return + */ + public Object clone() { + throw new NotImplementedException(); + } + + /** + * Return a value from the EO while attempting to match the type of another object. This performs necessary + * type-conversions on the object stored internally to the EO. + *

+ * If obj is null, the natural value from the EO will be returned. + */ + public Serializable getMatchingType(final String key, final Serializable obj) { + final Serializable v = getValue(key); + + // If we don't have a value, we can't type-convert it + if (v == null) + return null; + + // If they did not provide a value, we can't type-convert ours + if (obj == null) + return v; + + // Maybe they already match. + if (v.getClass().isAssignableFrom(obj.getClass())) { + return v; + } + + if (obj instanceof String) { + return getValueString(key); + } + + if (obj instanceof UUID) { + return getValueUUID(key); + } + + if (obj instanceof Instant) { + return getValueInstant(key); + } + + if (obj instanceof Date) { + return getValueDate(key); + } + + throw new IllegalArgumentException("Unable to match types. " + v.getClass() + " -> " + obj.getClass()); + } + + /** + * Returns true if the EO is multi-dimensional. The EO is considered multi-dimensional if it contains + * a loop. + * + * @return + */ + public boolean isMultiDimensional() { + for (final Map.Entry entry : data.entrySet()) { + final Object v = entry.getValue(); + if (v instanceof EOLoop) return true; + } + + return false; + } + + /** + * Clear all the values stored in this EO, including errors and global errors. The schema type + * for the EO will be preserved. + */ + public void clear() { + data.clear(); + if (meta != null) meta.clear(); + clearErrors(); + } + + public void clearErrors() { + // TODO: Implement in the EO context + throw new NotImplementedException(); + } + + public String getValueString(final String key, final String def) { + String x = getValueString(key); + if (StringUtils.isEmpty(x)) return def; + return x; + } + + /** + * Return the value in string form. + *

+ * If the value is null, null is returned. + *

+ * If the value is a Date, the time is returned in ISO format (rather than Date format). + */ + public String getValueString(final String key) { + return Snavig.convertToString(data.get(key)); + } + + public String getValueStringLowercase(final String key) { + return Snavig.convertToLowercaseString(data.get(key)); + } + + public Pattern getValuePattern(final String key) { + return Snavig.convertToPattern(data.get(key)); + } + + /** + * Identical to getValue() and provided for compatibility with 3rd party libraries, such as Velocity. + */ + public Serializable get(String key) { + return getValue(key); + } + + /** + * Returns null if there are no global errors. + * + * @return + */ + public List getGlobalErrors() { + // TODO: Implement + throw new NotImplementedException(); + } + + protected HashMap getData() { + return data; + } + + public Serializable remove(final String key) { + if (meta != null) meta.remove(key); + return data.remove(key); + } + + /** + * Returns true if the property exists and contains a positive boolean. Otherwise, + * returns negative, including when the property is unset in the object. + */ + public boolean getValueBoolean(final String key) { + return Snavig.convertToBoolean(data.get(key)); + } + + public Integer getValueInteger(final String key) { + return Snavig.convertToInteger(data.get(key)); + } + + + public Double getValueDouble(final String key) { + return Snavig.convertToDouble(data.get(key)); + } + + public Instant getValueInstant(final String key) { + return Snavig.convertToInstant(data.get(key)); + } + + public BigDecimal getNumber(final String key) { + return Snavig.convertToBigDecimal(data.get(key)); + } + + public Duration getValueDuration(final String key) { + return Snavig.convertToDuration(data.get(key)); + } + + public UUID getValueUUID(final String key) { + return Snavig.convertToUUID(data.get(key)); + } + + public IntIntervals getValueIntIntervals(final String key) { + return Snavig.convertToIntIntervals(data.get(key)); + } + + + public Date getValueDate(final String key) { + return Snavig.convertToDate(data.get(key)); + } + + public EODataType getValueEspType(final String key) { + final Object value = data.get(key); + if (value == null) return null; + if (value instanceof EODataType) return (EODataType) value; + return EODataType.valueOf(String.valueOf(value)); + } + + // Be a wolf + + public void recurse(EOLoop dst, final String path) { + recurse(dst, path.split(pathPattern), 0); + } + + private void recurse(EOLoop dst, final String[] path, final int index) { + final Object value = data.get(path[index]); + + logger.debug("recurse(). [idx: {}] [path: {}] [value: {}]", index, path, value); + + if (!(value instanceof EOLoop)) return; + + int next = index + 1; + + if (next == path.length) { + dst.addAll((EOLoop) value); + return; + } + + for (EO eo : (EOLoop) value) { + eo.recurse(dst, path, next); + } + } + + /** + * Returns the value as a loop. If the value is null, a new loop will be created. If a value is set, + * but is not a loop, a {@link ClassCastException} will be thrown. + */ + public EOLoop getValueLoop(final String key) { + Serializable debug = data.get(key); + if (debug != null && !(debug instanceof EOLoop)) { + logger.warn("found bad value. [key: {}] [data: {}]", key, debug); + } + + EOLoop value = (EOLoop) data.get(key); + if (value == null) { + value = new EOLoop(); + value.setEditTracker(editTracker); + data.put(key, value); + } + return value; + } + + public EO addAll(EO src) { + for (String key : src.getKeys()) { + setValue(key, src.getValue(key)); + } + return this; + } + + public void addGlobalError(final String msg) { + throw new NotImplementedException(); + } + + /** + * Set an error message into the EO for the given key. The error message is presumed to be locale-specific. + * The same EO is returned, allowing chaining of put operations. + */ + public EO putError(final String apiName, final String text) { + throw new NotImplementedException(); + } + + /** + * Indicate that this value is changing to the newly provided value. This method will only call the event + * listener if the value actually changes. + */ + private void dirty(String key, Serializable oldValue, Serializable newValue, EOListener listener) { + if (editTracker != null) { + // We only dirty the attribute if it is actually changing here. + if (!Objects.equals(oldValue, newValue)) { + editTracker.dirty(this, key, oldValue, newValue, listener); + } + } + } + + public EO setValue(final String apiName, final Serializable value, EOListener listener) { + if (value instanceof EO) + throw new IllegalArgumentException("EO cannot be set as a value in an EO"); + + Serializable oldValue = data.get(apiName); + + if (value == null) { + data.remove(apiName); + dirty(apiName, oldValue, value, listener); + return this; + } + + if (value instanceof String) { + data.put(apiName, value); + dirty(apiName, oldValue, value, listener); + return this; + } + + if (value instanceof EOLoop) { + ((EOLoop) value).setEditTracker(editTracker); + } + + data.put(apiName, value); + removeWeakMeta(apiName); + dirty(apiName, oldValue, value, listener); + + return this; + } + + /** + * Set a value into the EO for the given key. The same EO is returned allowing changing of put operations. + *

+ * It is illegal to set an EO into an EO as a value, and attempting to do so will result in an + * IllegalArgumentException being thrown. Only other serializable classes and + * the EOLoop class are legal. + *

+ * If a String is provided, and the string is empty, then this method will not add the + * value to the EO. If the value is null, then the value will be removed from the EO. Empty could include + * a string "" or a string consisting entirely of whitespace characters. + */ + public EO setValue(final String apiName, final Serializable value) { + return setValue(apiName, value, null); + } + + /** + * Set all the data elements in the provided object into this object. Returns this EO to the caller + * for the purpose of method chaining. This method does not copy the meta vvalues from the provided + * EO, to do that, use merge() instead. + */ + public EO setAll(EO obj) { + for (String key : obj.getKeys()) { + data.put(key, obj.get(key)); + } + return this; + } + + /** + * merge() works similarly to setAll() with the added mechanic that it copies + * the metadata from the provided obj as well. Returns this EO to the caller for the + * purpose of method chaining. + */ + public EO merge(EO obj) { + for (String key : obj.getKeys()) { + data.put(key, obj.get(key)); + HashMap metaAttr = obj.getMetaMap(key); + if (metaAttr != null) setAllMeta(key, metaAttr); + } + + logger.info("Merge: {} -> {}", obj, this); + return this; + } + + /** + * Set the provided value only if the key did not already exist in the EO. This is useful for fixing up + * default values. + */ + public boolean setValueIfUnset(final String apiName, final Serializable value) { + if (data.containsKey(apiName)) return false; + setValue(apiName, value); + return true; + + } + + /** + * Returns true if the given key is set in this EO and has a non-null value. + */ + public boolean contains(final String key) { + final Serializable o = data.get(key); + return o != null; + } + + /** + * Return the error string (if any is set) for the given key, or null if no error + * string has been set. + */ + public String getError(final String apiName) { + throw new NotImplementedException(); + } + + /** + * Return the value (if any is set) for the given key, or null if no value has been set. + */ + public Serializable getValue(final String apiName) { + return data.get(apiName); + } + + public boolean isEmpty(final String apiName) { + final Object o = data.get(apiName); + if (o == null) return true; + if (o instanceof String) { + return StringUtils.isEmpty((String) o); + } + return false; + } + + /** + * Return the value in the form of a Locale. If the value is provided as a String + * it should be in IETF BCP 47 format. Parsing the string is in accordance with the specification of + * Locale.forLanguageTag(). + */ + public Locale getValueLocale(final String apiName) { + return Snavig.convertToLocale(data.get(apiName)); + } + + public Inet4Address getInet4Address(final String apiName) { + return Snavig.convertToInet4Address(data.get(apiName)); + } + + public Inet6Address getInet6Address(final String apiName) { + return Snavig.convertToInet6Address(data.get(apiName)); + } + + public BigDecimal getValueBigDecimal(final String apiName) { + return Snavig.convertToBigDecimal(data.get(apiName)); + } + + /** + * Return the value in floating point format. If the value is not already a float, it will be converted + * using Float.parseFloat(). + */ + public Serializable getFloat(final String apiName) { + return Snavig.convertToFloat(apiName); + } + + /** + * Return the type name associated with this EO. + */ + + public String getApiType() { + return typeName; + } + + @Override + public String toString() { + return "EO{" + + "typeName='" + typeName + '\'' + + ", data=" + data + + ", editTracker=" + editTracker + + ", meta=" + meta + + '}'; + } + + public Set getKeys() { + return data.keySet(); + } + + public int size() { + return data.size(); + } + + public boolean isValueLoop(String apiName) { + Serializable s = data.get(apiName); + if (s != null && s instanceof EOLoop) return true; + return false; + } + + public String getMetaValueString(String key, String keyDisplayValue) { + return Snavig.convertToString(getMetaValue(key, keyDisplayValue)); + } +} \ No newline at end of file diff --git a/leigh-eo/src/main/java/leigh/eo/EODataType.java b/leigh-eo/src/main/java/leigh/eo/EODataType.java new file mode 100644 index 0000000000000000000000000000000000000000..e357c3c64b43d5aa93d5e5c5107705684e176b51 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EODataType.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.time.Instant; +import java.util.Locale; +import java.util.UUID; + +/** + * Field datatypes which are primarily used to hint to end-user interfaces as to the best + * way to display the field. They should not be confused with the actual data-type of a given + * field. For example, UUID fields typically would use the string field type. + * + * @author C. Alexander Leigh + */ +public enum EODataType { + string, password, instant, hyperlink, loop, bool, object, uuid, locale, + ipv4, ipv6, number; + + private static final Logger logger = LoggerFactory.getLogger(EODataType.class); + + /** + * Return the name of the method which would be used on a DAO to access a field of the given type. + * + * @param type + * @return + */ + public static String getAccessor(final EODataType type) { + if (type == null) { + logger.error("getAccessor(): null type provided. Defaulting to getValueString()"); + return "getValueString"; + } + + logger.debug("Type matching for: {}", type); + + switch (type) { + case string: + case password: + case hyperlink: + return "getValueString"; + case instant: + return "getValueInstant"; + case loop: + return "getValueLoop"; + case bool: + return "getValueBoolean"; + case object: + return "getValue"; + case uuid: + return "getValueUUID"; + case locale: + return "getValueLocale"; + case ipv4: + return "getInet4Address"; + case ipv6: + return "getInet6Address"; + case number: + return "getNumber"; + } + throw new IllegalArgumentException("Unrecognized type"); + } + + /** + * Return the Java type which can be used to store the given value from the EO. This type is the same + * as would be assigned to a getter() for the value in a DAO. + */ + public static Class getType(EODataType type) { + if (type == null) { + logger.error("getType(): null type provided. Defaulting to string."); + type = EODataType.string; + } + + logger.debug("Type matching for: {}", type); + + switch (type) { + case string: + case password: + case hyperlink: + return String.class; + case instant: + return Instant.class; + case loop: + return EOLoop.class; + case bool: + return Boolean.class; + case object: + return Serializable.class; + case uuid: + return UUID.class; + case locale: + return Locale.class; + case ipv4: + return Inet4Address.class; + case ipv6: + return Inet6Address.class; + case number: + return BigDecimal.class; + } + throw new IllegalArgumentException("Unrecognized type"); + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/EOJsonSerializer.java b/leigh-eo/src/main/java/leigh/eo/EOJsonSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..662f2cb9faf6d1a24988d1e2d7f0918247a528fd --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EOJsonSerializer.java @@ -0,0 +1,91 @@ +package leigh.eo; + +import leigh.mecha.json.JSONArray; +import leigh.mecha.json.JSONException; +import leigh.mecha.json.JSONObject; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; +import java.util.Map; + +/** + * Support for serializing & deserializing {@link EO} graphcs into JSON. + *

+ * In ESP16 and later, the EO and EOLoop objects are naturally serialized without much in the way of processing. + * Meta values (such as the type, id, etc) are stored in the JSON object by being prepended with the + * underscore character. Data attribute keys are stored unmodified. Both data and meta attribute keys + * are case-insensitive. + *

+ * In versions prior to ESP16, the serialization of EOs to JSON was handled differently. Meta keys were stored + * at the base of the object and the data keys were stored in another data object. Keys were + * considered case-sensitive. + * + * @author C. Alexander Leigh + */ +public class EOJsonSerializer { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOJsonSerializer.class); + public static final String TYPE_KEY = "_type"; + public static final String UNDERSCORE = "_"; + + /** + * Deserialize a JSON object into an {@link EO}. + */ + public static EO deserialize(JSONObject object) { + // Believe it or not - his implementation is so terrible it will throw if + // the key is not found in the object. + EO eo; + try { + eo = new EO(object.getString(TYPE_KEY)); + } catch (JSONException e) { + eo = new EO(); + } + + for (final String key : object.keySet()) { + // JSONObject will provide strings as such, and booleans as Boolean + if (!key.startsWith(UNDERSCORE) && !object.isNull(key)) { + final Object val = object.opt(key); + if (val instanceof JSONArray) { + EOLoop loop = new EOLoop((JSONArray) val); + eo.setValue(key, loop); + // goodness + } else { + // We do this in case it actually comes out as a JSONObject due to a bad serialization + Object o = object.opt(key); + if (o instanceof Serializable) { + eo.setValue(key, (Serializable) object.opt(key)); + } else { + logger.warn("Could not deserialize JSON value. Dropping that value. [val: {}]", o); + } + } + } + } + return eo; + } + + /** + * Returns this EO in the form of a JSON graph. The graph is compatible with the JSONObject + * constructor. + */ + public static JSONObject toJsonObject(EO eo) throws JSONException { + final JSONObject obj = new JSONObject(); + // Store the data keys in JSON. + if (eo.getKeys().size() > 0) { + for (final Map.Entry entry : eo.getData().entrySet()) { + if (entry.getKey().startsWith(UNDERSCORE)) continue; + if (entry.getValue() instanceof EOLoop) { + final JSONArray array = new JSONArray(); + obj.put(entry.getKey(), array); + for (final EO value : (EOLoop) entry.getValue()) { + array.put(EOJsonSerializer.toJsonObject(value)); + } + } else { + obj.put(entry.getKey(), entry.getValue()); + } + } + } + + obj.put(TYPE_KEY, eo.getApiType()); + return obj; + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/EOListener.java b/leigh-eo/src/main/java/leigh/eo/EOListener.java new file mode 100644 index 0000000000000000000000000000000000000000..1cad8c1860be0eb6aa1e0b01f035565ae58a7b79 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EOListener.java @@ -0,0 +1,7 @@ +package leigh.eo; + +import java.io.Serializable; + +public interface EOListener { + void valueUpdated(EO eo, String key, Serializable oldValue, Serializable newValue) throws Exception; +} diff --git a/leigh-eo/src/main/java/leigh/eo/EOLoop.java b/leigh-eo/src/main/java/leigh/eo/EOLoop.java new file mode 100644 index 0000000000000000000000000000000000000000..8fa9a2a37946cb386922f91de73abd2100283622 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EOLoop.java @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo; + +import leigh.eo.util.EOFilteringIterator; +import leigh.mecha.json.JSONArray; +import leigh.mecha.json.JSONException; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; +import java.util.*; + +/** + * EOLoop acts as an ordered array containing EO objects. + * + * @author C. Alexander Leigh + */ +public class EOLoop implements Serializable, Iterable { + private static final long serialVersionUID = 1960993024123977523L; + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOLoop.class); + private ArrayList array; + private transient EditTracker editTracker; + + + public EOLoop(List eos) { + allocateStorage(); + array.addAll(eos); + } + + public EOLoop(final JSONArray val) throws JSONException { + for (int i = 0; i < val.length(); i++) { + try { + add(EOJsonSerializer.deserialize(val.getJSONObject(i))); + } catch (JSONException e) { + logger.warn("JSON was illegal. {}", e); + } + } + } + + public EOLoop() { + // Intentionally Blank + } + + public static MechaLogger getLogger() { + return logger; + } + + public EOLoop clear() { + if (array != null) array.clear(); + return this; + } + + public EditTracker getEditTracker() { + return editTracker; + } + + /** + * Set the edit tracker for this loop. This will have the side-effect of also setting the edit tracker + * for all EOs contained within the loop. + */ + public void setEditTracker(EditTracker editTracker) { + this.editTracker = editTracker; + + // We may not have storage yet, no big deal. + if (array != null) { + for (EO eo : array) { + eo.setEditTracker(editTracker); + } + } + } + + /** + * Find the first EO from this loop which contains a key matching value. + * + * @since mk14 mod10 (CRYSTAL) + */ + public EO findFirst(String key, Serializable value) { + if (array != null) { + for (EO eo : array) { + Serializable s = eo.getValue(key); + if (s != null && s.equals(value)) return eo; + } + } + return null; + } + + public EOLoop clone() { + EOLoop l = new EOLoop(); + l.setEditTracker(editTracker); + l.addAll(array); + return l; + } + + /** + * Sort the loop using the given comparator. + */ + public void sort(Comparator comparator) { + array.sort(comparator); + } + + private void allocateStorage() { + if (array == null) array = new ArrayList<>(); + } + + /** + * Return the index of the given object in this loop, or -1 if it does not exist. + */ + public int indexOf(Object o) { + return array.indexOf(o); + } + + /** + * Returns true if the loop only contains EOs of the given type, otherwise, returns + * false. If the loop is empty, true is returned. + */ + public boolean onlyContains(String apiName) { + for (EO eo : array) { + if (!eo.isType(apiName)) return false; + } + return true; + } + + /** + * Return an iterator which will only return EOs compatible with the given type. + * + * @param apiType + * @return + */ + public Iterator iterator(String apiType) { + return new EOFilteringIterator(array.iterator(), apiType); + } + + public EOLoop add(final EO value) { + allocateStorage(); + array.add(value); + if (editTracker != null) { + value.setEditTracker(editTracker); + editTracker.objAdded(this, value); + } + + return this; + } + + public void addAll(final Collection values) { + allocateStorage(); + // We do this instead of addAll() to ensure that the event receiver is called + for (EO eo : values) { + add(eo); + } + } + + public void addAll(EOLoop loop) { + for (EO eo : loop) add(eo); + } + + public void set(int idx, EO eo) { + array.set(idx, eo); + } + + public EO remove(final int index) { + if (array == null) return null; + EO child = array.remove(index); + if (editTracker != null) editTracker.objRemoved(this, child, index); + return child; + } + + public void remove(Collection toRemove) { + for (EO eo : toRemove) { + remove(array.indexOf(eo)); + } + } + + public void remove(EO eo) { + remove(array.indexOf(eo)); + } + + // It's 2145h. She probably thinks I'm looking at midget porn instead of working. + + public int size() { + if (array == null) return 0; + return array.size(); + } + + public EO get(final int idx) { + if (array == null) return null; + return array.get(idx); + } + + public ArrayList getArray() { + return array; + } + + public void setArray(ArrayList array) { + this.array = array; + } + + @Override + public String toString() { + return "EOLoop{" + + "array=" + array + + "} "; + } + + @Override + public Iterator iterator() { + allocateStorage(); + return array.iterator(); + } + + /** + * Remove all the objects from this loop after the given index position. For example, given 0,1,2,3 calling + * with 1 will result in 2,3 being removed. + */ + public void removeAfter(int idx) { + if (idx >= array.size()) return; + + for (int i = array.size() - 1; i > idx; i--) { + remove(i); + } + } + + /** + * Move the given EO up in the list position. If the EO is already at the top of the list, no change will occur. + * If the EO is not in the list, a runtime exception is thrown. + * + * @param obj + */ + public void moveUp(EO obj) { + int i = array.indexOf(obj); + if (i == -1) throw new RuntimeException("EO not found in loop."); + if (i == 0) return; + Collections.swap(array, i, i - 1); + } + + /** + * Move the given EO down in the list position. If the EO is already at the bottom of the list, no change will + * occur. + *

+ * If the EO is not in the list, a runtime exception is thrown. + * + * @param obj + */ + public void moveDown(EO obj) { + int i = array.indexOf(obj); + if (i == -1) throw new RuntimeException("EO not found in loop."); + if (i == array.size() - 1) return; + Collections.swap(array, i, i + 1); + } + +} diff --git a/leigh-eo/src/main/java/leigh/eo/EOLoopListener.java b/leigh-eo/src/main/java/leigh/eo/EOLoopListener.java new file mode 100644 index 0000000000000000000000000000000000000000..2126993cdd889cfa983f595cfe6e13b41c5e8d3f --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EOLoopListener.java @@ -0,0 +1,7 @@ +package leigh.eo; + +public interface EOLoopListener { + void removed(EOLoop loop, EO obj, int index); + + void added(EOLoop loop, EO obj); +} diff --git a/leigh-eo/src/main/java/leigh/eo/EditEventGenerator.java b/leigh-eo/src/main/java/leigh/eo/EditEventGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..de77705e74df29c7a7d5ace201a3b95cbb6643e3 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EditEventGenerator.java @@ -0,0 +1,94 @@ +package leigh.eo; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.WeakHashMap; + +/** + * Implementation of {@link EditTracker} which provides notification to listeners when values in an EO change. + * The references to the EOs are weak, allowing them to be garbage collected. + *

+ * This class makes no attempt at event suppression, and does not correlate the generation of an event with any + * particular listener. Therefore, a software agent A creating a change to an EO should expect to receive the + * update for it. The software agent A is responsible for understanding whether this is a "duplicate" update, + * typically by comparing its internal state to the update provided by the event, and determining if processing + * needs to be occur. + * + * @author C. Alexaxnder Leigh + * @since mk14 mod10 (CRYSTAL) + */ +public class EditEventGenerator implements EditTracker { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EditEventGenerator.class); + private final WeakHashMap> listeners = new WeakHashMap<>(); + private final WeakHashMap> loopListeners = new WeakHashMap<>(); + + @Override + public void dirty(EO eo, String key, Serializable oldValue, Serializable newValue, EOListener parent) { + logger.debug("Value has mutated. [eo: {}] [key: {}] [old: {}] [new: {}]", eo, key, oldValue, newValue); + // We only want to fire the change event listeners if the value is actually changing. + + ArrayList l = listeners.get(eo); + + if (l == null) { + logger.debug("No listeners for this EO."); + return; + } + + logger.debug("Listeners found: {}", l); + + for (EOListener listener : l) { + if (l.equals(parent)) continue; + try { + listener.valueUpdated(eo, key, oldValue, newValue); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + public void objRemoved(EOLoop loop, EO eo, int index) { + if (loopListeners.containsKey(loop)) + for (EOLoopListener listener : loopListeners.get(loop)) { + logger.debug("Calling removal event handler: {} {} {} {}", listener, loop, eo, index); + listener.removed(loop, eo, index); + } + } + + @Override + public void objAdded(EOLoop loop, EO eo) { + logger.debug("objAdded() called. Listeners: {} {}", loopListeners.containsKey(loop), loopListeners); + + if (loopListeners.containsKey(loop)) + for (EOLoopListener listener : loopListeners.get(loop)) { + listener.added(loop, eo); + } + } + + public void addLoopListener(EOLoop loop, EOLoopListener listener) { + logger.debug("addLoopListener() called."); + ArrayList l = loopListeners.get(loop); + if (l == null) { + l = new ArrayList<>(); + loopListeners.put(loop, l); + } + l.add(listener); + } + + /** + * Add a listener for the given object. Note that if the value stored in the key is a loop, then this listener + * WILL NOT fire. Instead you must register an event handler in this case with addLoopListener(). + */ + public void addListener(EO eo, EOListener listener) { + logger.debug("addListener() called."); + ArrayList l = listeners.get(eo); + if (l == null) { + l = new ArrayList<>(); + listeners.put(eo, l); + } + l.add(listener); + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/EditTracker.java b/leigh-eo/src/main/java/leigh/eo/EditTracker.java new file mode 100644 index 0000000000000000000000000000000000000000..cf76d16fc77f9bdbfaebea250f3fa1bb8b3974a1 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/EditTracker.java @@ -0,0 +1,17 @@ +package leigh.eo; + +import java.io.Serializable; + +/** + * Implements edit tracking functionality. + * + * @author C. Alexander Leigh + * @since mk10 mod14 (CRYSTAL) + */ +public interface EditTracker { + void dirty(EO eo, String key, Serializable oldValue, Serializable newValue, EOListener listener); + + void objRemoved(EOLoop loop, EO eo, int index); + + void objAdded(EOLoop loop, EO eo); +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/EOInputChannel.java b/leigh-eo/src/main/java/leigh/eo/io/EOInputChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..3ba7090acc19601609f28f819554d05ee86ee420 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/EOInputChannel.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import java.io.IOException; + +/** + * This class currently encapsulates an {@link EOInputStream}. It is designed to be a place to add supporting data + * access, such as to blob content which is not serialized within the EO stream itself. That feature existed + * in an earlier version of ESP and has since been removed. + * + * @author C. Alexander Leigh + */ +public interface EOInputChannel { + EOInputStream getInputStream() throws IOException; +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/EOInputStream.java b/leigh-eo/src/main/java/leigh/eo/io/EOInputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..0cf83936ac905e68cce8b437d0cd75e9caf853a3 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/EOInputStream.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import leigh.eo.EO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.EOFException; +import java.io.IOException; +import java.io.ObjectInputStream; + +/** + * An input stream which works with EO. + * + * @author C. Alexander Leigh + */ +public class EOInputStream implements AutoCloseable { + private static final Logger logger = LoggerFactory.getLogger(EOInputStream.class); + private final ObjectInputStream ois; + + /** + * Wrap the given ObjectInputStream. + * + * @param ois + */ + public EOInputStream(ObjectInputStream ois) { + this.ois = ois; + } + + /** + * Attempt to read an EO from the stream. Unlike the JDK InputStream API, this method consumes + * the EOFException om the underlying I/O channel and will return null if the last + * object has already been read. + */ + public EO readObject() throws IOException, ClassNotFoundException { + try { + return (EO) ois.readObject(); + } catch (EOFException e) { + return null; + } + } + + /** + * Close the underlying input stream. If an error occurs it will be logged. + */ + public void close() { + try { + ois.close(); + } catch (IOException e) { + logger.error("Failed to close input stream: {}", e); + } + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/EOOutputChannel.java b/leigh-eo/src/main/java/leigh/eo/io/EOOutputChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..840caf6f907b3b3f6e77b35cac679ce30dcbc1f8 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/EOOutputChannel.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import java.io.IOException; + +/** + * Created by aleigh on 7/28/16. + */ +public interface EOOutputChannel { + EOOutputStream getOutputStream() throws IOException; +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/EOOutputStream.java b/leigh-eo/src/main/java/leigh/eo/io/EOOutputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..e7eaa206274fa794ccbddbbd983112baa1f327e0 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/EOOutputStream.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.IOException; +import java.io.ObjectOutputStream; + +public class EOOutputStream implements AutoCloseable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOOutputStream.class); + + private final ObjectOutputStream oos; + + public EOOutputStream(ObjectOutputStream oos) { + this.oos = oos; + } + + public void writeEO(EO eo) throws IOException { + oos.writeObject(eo); + } + + public void writeAll(EOLoop loop) throws IOException { + for (EO eo : loop) { + writeEO(eo); + } + } + + public void flush() throws IOException { + oos.flush(); + } + + public void close() { + try { + oos.close(); + } catch (IOException e) { + logger.error("OutputStream close() failed: {}", e); + } + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/EORamChannel.java b/leigh-eo/src/main/java/leigh/eo/io/EORamChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..1ee5e8d68a1bf978b5a35bb5fa0013938c0bf333 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/EORamChannel.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import java.io.IOException; +import java.util.Objects; + +/** + * Implements an in-memory version of the input / output channel mechanics. + * + * @author C. Alexander Leigh + */ +public class EORamChannel implements EOInputChannel, EOOutputChannel { + private final EOStreamSimulator stream = new EOStreamSimulator(); + + + @Override + public EOInputStream getInputStream() throws IOException { + return stream.getInput(); + } + + @Override + public EOOutputStream getOutputStream() throws IOException { + return stream.getOutput(); + } + + public EOStreamSimulator getStream() { + return stream; + } + + @Override + public String toString() { + return "EORamChannel{" + + "stream=" + stream + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EORamChannel that = (EORamChannel) o; + return Objects.equals(stream, that.stream); + } + + @Override + public int hashCode() { + + return Objects.hash(stream); + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/EOSimpleFilestore.java b/leigh-eo/src/main/java/leigh/eo/io/EOSimpleFilestore.java new file mode 100644 index 0000000000000000000000000000000000000000..74223ea3085dc9a33b1c25b96aa14aa4ef6e95b6 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/EOSimpleFilestore.java @@ -0,0 +1,56 @@ +package leigh.eo.io; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.VelocityWatch; + +import java.io.*; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +/** + * A dead-simple storage mechanism for EOs. + * + * @author C. Alexander Leigh + */ +public class EOSimpleFilestore { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOSimpleFilestore.class); + private final File file; + + public EOSimpleFilestore(File file) { + this.file = file; + } + + public void write(EOLoop loop) throws IOException { + VelocityWatch vw = new VelocityWatch(logger); + + try (EOOutputStream oos = new EOOutputStream(new ObjectOutputStream(new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(file)))))) { + for (EO eo : loop) { + vw.event("output"); + oos.writeEO(eo); + } + oos.writeEO(null); + vw.status(); + } + } + + public void read(EOLoop dst) throws IOException, ClassNotFoundException { + VelocityWatch vw = new VelocityWatch(logger); + try (EOInputStream iis = new EOInputStream(new ObjectInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream(file)))))) { + EO eo; + while ((eo = iis.readObject()) != null) { + vw.event("input"); + dst.add(eo); + } + vw.status(); + } + } + + public EOLoop read() throws IOException, ClassNotFoundException { + EOLoop loop = new EOLoop(); + read(loop); + return loop; + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/EOStreamSimulator.java b/leigh-eo/src/main/java/leigh/eo/io/EOStreamSimulator.java new file mode 100644 index 0000000000000000000000000000000000000000..0af551971da18da1d9a9e7e7215792e03078b09c --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/EOStreamSimulator.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import leigh.eo.EO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.util.Collection; + +/** + * This class implements a facility for simulating object streams using RAM. It is useful for bridging + * the gap between actual streams and in-memory arrays. This particular implementation is specialized for + * EO objects. + * + * @author C. Alexander Leigh + */ +public final class EOStreamSimulator { + private static final Logger logger = LoggerFactory.getLogger(EOStreamSimulator.class); + final ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + + /** + * Return the number of bytes which have been written into the stream. + * + * @return + */ + public long getByteCount() { + return 0; + } + + /** + * Write the given objects into the stream. They will then be available on the stream provided + * by getInput(). + * + * @param objects + * @throws IOException + */ + public void writeObjects(final EO... objects) throws IOException { + final EOOutputStream oos = getOutput(); + for (final EO obj : objects) { + oos.writeEO(obj); + } + oos.writeEO(null); + oos.close(); + } + + public void writeObjects(Collection objs) throws IOException { + final EOOutputStream oos = getOutput(); + for (EO obj : objs) { + oos.writeEO(obj); + } + oos.writeEO(null); + oos.close(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + EOStreamSimulator that = (EOStreamSimulator) o; + + return byteStream != null ? byteStream.equals(that.byteStream) : that.byteStream == null; + + } + + @Override + public String toString() { + return "EOStreamSimulator{" + + "byteStream=" + byteStream + + '}'; + } + + @Override + public int hashCode() { + return byteStream != null ? byteStream.hashCode() : 0; + } + + /** + * Return an input stream representing the contents of the stream simulator. If objects have previously + * been written either using a stream from getOutput() or via the writeObjects() + * method they will be available here. + *

+ * This method is repeatable. + * + * @return + * @throws IOException + */ + public EOInputStream getInput() throws IOException { + return new EOInputStream(new ObjectInputStream(new ByteArrayInputStream(byteStream.toByteArray()))); + } + + /** + * Return an output stream which writes into this stream simulator. + *

+ * The caller should write a null object to the stream before closing it. + * + * @return + * @throws IOException + */ + public EOOutputStream getOutput() throws IOException { + return new EOOutputStream(new ObjectOutputStream(byteStream)); + } + +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/OnetimeInputChannel.java b/leigh-eo/src/main/java/leigh/eo/io/OnetimeInputChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..60fab1d01b0c4f5922db19ae69fae27234e2d273 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/OnetimeInputChannel.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import java.util.Objects; + +/** + * Created by aleigh on 8/2/16. + */ +public class OnetimeInputChannel implements EOInputChannel { + private final EOInputStream inputStream; + + public OnetimeInputChannel(EOInputStream inputStream) { + this.inputStream = inputStream; + } + + @Override + public EOInputStream getInputStream() { + return inputStream; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + OnetimeInputChannel that = (OnetimeInputChannel) o; + return Objects.equals(inputStream, that.inputStream); + } + + @Override + public int hashCode() { + + return Objects.hash(inputStream); + } + + @Override + public String toString() { + return "OnetimeInputChannel{" + + "inputStream=" + inputStream + + '}'; + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/io/OnetimeOutputChannel.java b/leigh-eo/src/main/java/leigh/eo/io/OnetimeOutputChannel.java new file mode 100644 index 0000000000000000000000000000000000000000..3a20946e88a3954053db76fb66364602633983da --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/io/OnetimeOutputChannel.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.io; + +import java.util.Objects; + +/** + * Created by aleigh on 8/2/16. + */ +public class OnetimeOutputChannel implements EOOutputChannel { + private final EOOutputStream outputStream; + + public OnetimeOutputChannel(EOOutputStream outputStream) { + this.outputStream = outputStream; + } + + @Override + public EOOutputStream getOutputStream() { + return outputStream; + } + + @Override + public String toString() { + return "OnetimeOutputChannel{" + + "outputStream=" + outputStream + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + OnetimeOutputChannel that = (OnetimeOutputChannel) o; + return Objects.equals(outputStream, that.outputStream); + } + + @Override + public int hashCode() { + + return Objects.hash(outputStream); + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/sort/EOAlphaNumericComparator.java b/leigh-eo/src/main/java/leigh/eo/sort/EOAlphaNumericComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..3d60879bcfff9707f3b7590adaf2036d597b111b --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/sort/EOAlphaNumericComparator.java @@ -0,0 +1,35 @@ +package leigh.eo.sort; + +import com.davekoelle.AlphanumComparator; +import leigh.eo.EO; +import leigh.mecha.sort.SortCardinality; +import leigh.mecha.util.StringUtil; + +import java.util.Locale; + +public class EOAlphaNumericComparator extends EOComparator { + // Implementation must be threadsafe + private final static AlphanumComparator comp = new AlphanumComparator(); + + protected EOAlphaNumericComparator(String key, SortCardinality cardinality, Locale locale) { + super(key, cardinality, locale); + } + + @Override + public int compare(EO o1, EO o2) { + String v1 = StringUtil.safeString(o1.getValueString(getKey())); + String v2 = StringUtil.safeString(o2.getValueString(getKey())); + + int result = comp.compare(v1, v2); + + switch (getCardinality()) { + case ASCENDING: + return result; + case DESCENDING: + if (result == 0) return 0; + return -result; + } + + return 0; + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/sort/EOComparator.java b/leigh-eo/src/main/java/leigh/eo/sort/EOComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..1d38d33c9d67fe197f60e5248c8ca57405eff42f --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/sort/EOComparator.java @@ -0,0 +1,34 @@ +package leigh.eo.sort; + +import leigh.eo.EO; +import leigh.mecha.sort.SortCardinality; + +import java.text.Collator; +import java.util.Comparator; +import java.util.Locale; + +public abstract class EOComparator implements Comparator { + private final String key; + private final Collator collator; + private final SortCardinality cardinality; + + protected EOComparator(String key, SortCardinality cardinality, Locale locale) { + this.key = key; + this.collator = Collator.getInstance(locale); + this.cardinality = cardinality; + } + + public String getKey() { + return key; + } + + public Collator getCollator() { + return collator; + } + + public SortCardinality getCardinality() { + return cardinality; + } + + public abstract int compare(EO o1, EO o2); +} diff --git a/leigh-eo/src/main/java/leigh/eo/sort/EONumericComparator.java b/leigh-eo/src/main/java/leigh/eo/sort/EONumericComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..8ed8cda25a208d15f6ef62e5804c93ad99cb828d --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/sort/EONumericComparator.java @@ -0,0 +1,38 @@ +package leigh.eo.sort; + +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.sort.SortCardinality; + +import java.util.Locale; + +public class EONumericComparator extends EOComparator { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EONumericComparator.class); + + public EONumericComparator(String key, SortCardinality cardinality, Locale locale) { + super(key, cardinality, locale); + } + + @Override + public int compare(EO o1, EO o2) { + Double v1 = o1.getValueDouble(getKey()); + Double v2 = o2.getValueDouble(getKey()); + + logger.debug("compare(). [key: {}] [v1: {}] [v2: {}]", getKey(), v1, v2); + + int result = Double.compare(v1, v2); + + switch (getCardinality()) { + case ASCENDING: + return result; + case DESCENDING: + if (result == 0) return 0; + logger.debug("Descending case. [ret: {}] [orig: {}]", -result, result); + return -result; + } + + // Should never reach... + throw new UnsupportedOperationException("Unknown cardinality."); + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/sort/EOSortPolicy.java b/leigh-eo/src/main/java/leigh/eo/sort/EOSortPolicy.java new file mode 100644 index 0000000000000000000000000000000000000000..aa0a8ce42e1b4d9bf57fd1b8dfb3b1cc78560945 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/sort/EOSortPolicy.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2001,2020 C. Alexander Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ALEX LEIGH The copyright + * notice above does not evidence any actual or intended publication of such + * source code. + * + * Use, disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ + +package leigh.eo.sort; + +import leigh.eo.EO; +import leigh.mecha.lang.MultiComparator; +import leigh.mecha.sort.FieldSort; +import leigh.mecha.sort.SortPolicy; + +import java.util.Comparator; +import java.util.Locale; + +/** + * This implementation of {@link SortPolicy} provides additional functionality for building + * {@link java.util.Comparator} stacks for performing the sort stated in the policy. + * + * @author C. Alexander Leigh + * @since 15.1 + */ +public class EOSortPolicy extends SortPolicy { + public EOSortPolicy(Locale locale) { + super(locale); + } + + /** + * Build a comparator based on the current sort policy. + * + * @return The new comparator. + */ + public Comparator buildComparator() { + MultiComparator mc = new MultiComparator<>(); + for (FieldSort field : getFields()) { + EOAlphaNumericComparator eoc = new EOAlphaNumericComparator(field.getKey(), + field.getCardinality(), getLocale()); + mc.add(eoc); + } + return mc; + } +} \ No newline at end of file diff --git a/leigh-eo/src/main/java/leigh/eo/sort/EOStringComparator.java b/leigh-eo/src/main/java/leigh/eo/sort/EOStringComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..daeeb44e4e04c7ff021ffc54ca7edaa3ba3fd982 --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/sort/EOStringComparator.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2001,2020 C. Alexander Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ALEX LEIGH The copyright + * notice above does not evidence any actual or intended publication of such + * source code. + * + * Use, disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ + +package leigh.eo.sort; + +import leigh.eo.EO; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.sort.SortCardinality; +import leigh.mecha.util.StringUtil; + +import java.util.Comparator; +import java.util.Locale; + +/** + * Implementation of a {@link Comparator} for {@link EO} which performs a {@link Locale}-specific standard + * alphabetic sort. + * + * @author C. Alexander Leigh + */ +public class EOStringComparator extends EOComparator { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOStringComparator.class); + + public EOStringComparator(String key, SortCardinality cardinality, Locale locale) { + super(key, cardinality, locale); + } + + @Override + public int compare(EO o1, EO o2) { + String v1 = StringUtil.safeString(o1.getValueString(getKey())); + String v2 = StringUtil.safeString(o2.getValueString(getKey())); + + // Step 1, compare as if we are ascending. + int result = getCollator().compare(v1, v2); + + switch (getCardinality()) { + case ASCENDING: + return result; + case DESCENDING: + if (result == 0) return 0; + logger.debug("Descending case. [ret: {}] [orig: {}]", -result, result); + return -result; + } + + // Should never reach... + throw new UnsupportedOperationException("Unknown cardinality."); + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/util/EOFilteringIterator.java b/leigh-eo/src/main/java/leigh/eo/util/EOFilteringIterator.java new file mode 100644 index 0000000000000000000000000000000000000000..510ddc828f021011dba0fe8b429ee4479ee1b7ac --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/util/EOFilteringIterator.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.eo.util; + +import leigh.eo.EO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Iterator; + +/** + * Iterator for EOs which provides a filtering mechanic. + * + * @author C. Alexander Leigh + */ +public class EOFilteringIterator implements Iterator { + private static final Logger logger = LoggerFactory.getLogger(EOFilteringIterator.class); + private final Iterator parent; + private final String apiType; + private EO current = null; + + /** + * Create a new EOFilteringIterator based on the given iterator. This iterator will + * only return EOs from the loop which claim to be compatible with the given type according to + * each EO's isType() method. + *

+ * The EOFilteringIterator will not recurse into children which might be found within the + * EOs. + * + * @param parent + * @param apiType + */ + public EOFilteringIterator(Iterator parent, String apiType) { + logger.debug("Filtering iterator created: {}", apiType); + this.parent = parent; + this.apiType = apiType; + feed(); + } + + @Override + public boolean hasNext() { + return current != null; + } + + @Override + public EO next() { + EO eo = current; + feed(); + return eo; + } + + private void feed() { + while (true) { + if (!parent.hasNext()) { + logger.debug("Parent has no next()."); + current = null; + return; + } + + current = parent.next(); + logger.debug("Loaded current: {}", current); + if (current.isType(apiType)) return; + } + } +} diff --git a/leigh-eo/src/main/java/leigh/eo/util/EOJoinKeyDeterminer.java b/leigh-eo/src/main/java/leigh/eo/util/EOJoinKeyDeterminer.java new file mode 100644 index 0000000000000000000000000000000000000000..971885dc4ab96962343d3cd4546c44c3a2c8f71f --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/util/EOJoinKeyDeterminer.java @@ -0,0 +1,10 @@ +package leigh.eo.util; + +import leigh.eo.EO; + +public interface EOJoinKeyDeterminer { + /** + * Returns the key for the loop in the parent that this child should sort into. + */ + String getChildLoopGet(EO parent, EO child); +} diff --git a/leigh-eo/src/main/java/leigh/eo/util/EOUtil.java b/leigh-eo/src/main/java/leigh/eo/util/EOUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..cb0114a0d8dfc3c0729c5cc1bd68c181df030e6d --- /dev/null +++ b/leigh-eo/src/main/java/leigh/eo/util/EOUtil.java @@ -0,0 +1,91 @@ +package leigh.eo.util; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Set; +import java.util.TreeSet; +import java.util.UUID; + +/** + * Utility methods for working with EOs. + * + * @author C. Alexander Leigh + */ +public class EOUtil { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOUtil.class); + + /** + * Set the id attribute of the provided EO to a randomly generated UUID. + */ + public static EO makeId(EO eo) { + eo.setValue("id", UUID.randomUUID()); + return eo; + } + + /** + * Iterates all the EOs contained within eo, visiting each only once, and adds them to the set + * dst. If add is true then eo itself will be added to dst. + * + * @since mk11 (ZERO CONTRAST) + */ + public static void scan(Set dst, EO eo, boolean add) { + if (dst.contains(eo)) return; + + if (add) dst.add(eo); + + for (String key : eo.getKeys()) { + Object o = eo.get(key); + if (o instanceof EOLoop) { + for (EO child : ((EOLoop) o)) { + scan(dst, child, true); + } + } + } + } + + /** + * Perform a join between two loop sets. + */ + public static void join(EOLoop parentLoop, EOLoop childLoop, String parentJoinKey, String childJoinKey, + EOJoinKeyDeterminer determiner) { + HashMap index = new HashMap<>(); + for (EO parent : parentLoop) { + Serializable keyVal = parent.get(parentJoinKey); + if (keyVal == null) { + logger.info("Parent was missing the join key. [eo: parent]", parentJoinKey); + continue; + } + + index.put(keyVal, parent); + } + + for (EO child : childLoop) { + Serializable keyVal = child.get(childJoinKey); + if (keyVal == null) { + logger.warn("Child EO missing join key. [eo: {}]", child); + continue; + } + + EO parent = index.get(keyVal); + if (parent == null) { + logger.warn("Parent EO not found for child EO. [key: {}]", keyVal); + continue; + } + + parent.getValueLoop(determiner.getChildLoopGet(parent, child)).add(child); + } + } + + public static Set findAllKeys(EOLoop loop) { + TreeSet keys = new TreeSet<>(); + for (EO eo : loop) { + keys.addAll(eo.getKeys()); + } + return keys; + } +} diff --git a/leigh-eo/src/test/java/leigh/eo/EOLoopTest.java b/leigh-eo/src/test/java/leigh/eo/EOLoopTest.java new file mode 100644 index 0000000000000000000000000000000000000000..84944859a5865c113ea66767e0f70d9a33cc8d85 --- /dev/null +++ b/leigh-eo/src/test/java/leigh/eo/EOLoopTest.java @@ -0,0 +1,27 @@ +package leigh.eo; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class EOLoopTest { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOLoopTest.class); + + @Test + public void testRemoveAfter() { + EOLoop loop = new EOLoop(); + loop.add(new EO("0")); + loop.add(new EO("1")); + loop.add(new EO("2")); + loop.add(new EO("3")); + loop.add(new EO("4")); + + loop.removeAfter(2); + + assertEquals(3, loop.size()); + + logger.info("Loop state: {}", loop); + } +} diff --git a/leigh-eo/src/test/java/leigh/eo/EOUtilTest.java b/leigh-eo/src/test/java/leigh/eo/EOUtilTest.java new file mode 100644 index 0000000000000000000000000000000000000000..906eb86932ce9c5daead78a3f2fcef4574436f36 --- /dev/null +++ b/leigh-eo/src/test/java/leigh/eo/EOUtilTest.java @@ -0,0 +1,33 @@ +package leigh.eo; + +import leigh.eo.util.EOUtil; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.junit.Test; + +import java.util.HashSet; + +public class EOUtilTest { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EOUtilTest.class); + + @Test + public void scannerTest() { + EO person = new EO("person"); + EOLoop emails = person.getValueLoop("emails"); + emails.add(new EO("email").setValue("addr", "foo@bar.com")); + emails.add(new EO("email").setValue("addr", "bar@foo.com")); + + HashSet scan = new HashSet<>(); + EOUtil.scan(scan, person, false); + + logger.info("Scan result: {}", scan); + + assert (scan.size() == 2); + + scan.clear(); + + EOUtil.scan(scan, person, true); + + assert (scan.size() == 3); + } +} diff --git a/leigh-esp-client-www/.gitignore b/leigh-esp-client-www/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-esp-client-www/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-esp-client-www/LICENSE b/leigh-esp-client-www/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-esp-client-www/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-esp-client-www/esp.js b/leigh-esp-client-www/esp.js new file mode 100644 index 0000000000000000000000000000000000000000..84a07c27275cc8451f882fc9c3e4f6845714ffc0 --- /dev/null +++ b/leigh-esp-client-www/esp.js @@ -0,0 +1,7 @@ +console.log('ESP Client'); + +var ws = new WebSocket('ws://localhost:8123/wsapi', 'esplink16'); + +ws.onopen = function () { + ws.send('Hello from client!'); +} diff --git a/leigh-esp-client-www/index.html b/leigh-esp-client-www/index.html new file mode 100644 index 0000000000000000000000000000000000000000..49aa3e38431b11f5dad56ebc7e52292a8c590e48 --- /dev/null +++ b/leigh-esp-client-www/index.html @@ -0,0 +1,6 @@ + + + +Hello World + + \ No newline at end of file diff --git a/leigh-esp-engine/.gitignore b/leigh-esp-engine/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-esp-engine/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-esp-engine/LICENSE b/leigh-esp-engine/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-esp-engine/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-esp-engine/build.gradle b/leigh-esp-engine/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..5a4bcc83d2c74daadc64eb281c587cf5d554fdfa --- /dev/null +++ b/leigh-esp-engine/build.gradle @@ -0,0 +1,32 @@ +plugins { + id 'java' + id 'java-library' + id 'application' +} + +group 'leigh' +version '16.0' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + api project(':leigh-mecha-http-server') + api project(':leigh-eo') + api project(':leigh-cloudbox') + api project(':leigh-esp-sdk') + api project (':leigh-reactor') + api 'org.apache.httpcomponents:httpclient:4.5' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' +} + +test { + useJUnitPlatform() +} + +application { + mainClass = 'leigh.esp.conflux.ConfluxServer' +} \ No newline at end of file diff --git a/leigh-esp-engine/dist.sh b/leigh-esp-engine/dist.sh new file mode 100755 index 0000000000000000000000000000000000000000..99adc7d80c9a31a656f250eff9214f534e5f2aee --- /dev/null +++ b/leigh-esp-engine/dist.sh @@ -0,0 +1,3 @@ +#!/bin/sh -x + +scp build/distributions/leigh-esp-conflux-16.0.tar esp0: diff --git a/leigh-esp-engine/src/main/java/leigh/esp/kabe/ClientRequest.java b/leigh-esp-engine/src/main/java/leigh/esp/kabe/ClientRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..195778cce0f93c4e168ff509fdb557ed8ea11d90 --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/kabe/ClientRequest.java @@ -0,0 +1,17 @@ +package leigh.esp.kabe; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public interface ClientRequest { + String getPath(); + + OutputStream getOutputStream() throws IOException; + + InputStream getInputStream() throws IOException; + + void setStatus(int status); + + void setContentType(String mimeType); +} diff --git a/leigh-esp-engine/src/main/java/leigh/esp/kabe/KabeServer.java b/leigh-esp-engine/src/main/java/leigh/esp/kabe/KabeServer.java new file mode 100644 index 0000000000000000000000000000000000000000..6b77c67102a8b67ab1960d86cbed6e410f2e8402 --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/kabe/KabeServer.java @@ -0,0 +1,95 @@ +package leigh.esp.kabe; + +import leigh.BuildVersion; +import leigh.esp.kabe.http.HttpServiceBus; +import leigh.mecha.lang.DangerousRunnable; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.NumberUtil; +import leigh.mecha.util.RuntimeMonitor; +import leigh.mecha.util.UniversalJob; +import nl.basjes.collections.prefixmap.ASCIIPrefixMap; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; + +import java.io.IOException; +import java.util.ArrayList; + +public class KabeServer implements DangerousRunnable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(KabeServer.class); + private final ArrayList serviceBuses = new ArrayList<>(); + private final ASCIIPrefixMap services = new ASCIIPrefixMap<>(false); + private final CloseableHttpClient egressClient; + + public KabeServer() { + PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); + cm.setMaxTotal(10000); + cm.setDefaultMaxPerRoute(128); + egressClient = HttpClientBuilder.create().setConnectionManager(cm).build(); + serviceBuses.add(new HttpServiceBus(this, 8123)); + } + + public static void main(String[] args) throws Exception { + KabeServer kabe = new KabeServer(); + + Thread t = new Thread(kabe); + t.join(); + t.start(); + } + + @Override + public void runDangerously() throws Exception { + logger.info("\n _ _ _ \n" + + " /\\ \\ / /\\ /\\ \\ \n" + + " / \\ \\ / / \\ / \\ \\ \n" + + " / /\\ \\ \\ / / /\\ \\__ / /\\ \\ \\ \n" + + " / / /\\ \\_\\ / / /\\ \\___\\ / / /\\ \\_\\ \n" + + " / /_/_ \\/_/ \\ \\ \\ \\/___// / /_/ / / \n" + + " / /____/\\ \\ \\ \\ / / /__\\/ / \n" + + " / /\\____\\/ _ \\ \\ \\ / / /_____/ \n" + + " / / /______ /_/\\__/ / / / / / \n" + + "/ / /_______\\\\ \\/___/ / / / / \n" + + "\\/__________/ \\_____\\/ \\/_/ \n" + + " "); + + UniversalJob.banner(logger, BuildVersion.ESP_PROD_STR); + + logger.info("Hardware Configuration: [CPU cores: {}] [RAM max: {}]", + Runtime.getRuntime().availableProcessors(), + NumberUtil.humanByteSize(Runtime.getRuntime().maxMemory())); + + Thread t = new Thread(new RuntimeMonitor()); + t.start(); + + services.put("/sys/time", new Service(egressClient, "http://localhost:8123/svc/time", "/sys/time")); + services.put("/sys/leighco", new Service(egressClient, "http://leigh-co.com/", "/sys/leighco")); + services.put("/dynmap/neweden", new Service(egressClient, "http://world.leigh-co.com:8123", "/dynmap/neweden")); + services.put("/dynmap/moon", new Service(egressClient, "http://moon.leigh-co.com:8123", "/dynmap/moon")); + services.put("/dynmap/dream", new Service(egressClient, "http://dream.leigh-co.com:8123", "/dynmap/dream")); + services.put("/dynmap/ghibli", new Service(egressClient, "http://ghibli.leigh-co.com:8123", "/dynmap/ghibli")); + + for (ServiceBus sb : serviceBuses) { + sb.start(); + } + } + + public Service getService(String path) { + return services.getLongestMatch(path); + } + + public void handle(ClientRequest request) throws IOException, InterruptedException { + Service svc = getService(request.getPath()); + if (svc == null) throw new IOException("Could not find service: " + request.getPath()); + svc.handleClientRequest(request); + } + + @Override + public void run() { + try { + runDangerously(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/leigh-esp-engine/src/main/java/leigh/esp/kabe/Service.java b/leigh-esp-engine/src/main/java/leigh/esp/kabe/Service.java new file mode 100644 index 0000000000000000000000000000000000000000..82d35a4628790c2bdf11350865daa0afc9876aa9 --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/kabe/Service.java @@ -0,0 +1,38 @@ +package leigh.esp.kabe; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; + +import java.io.IOException; + +public class Service { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Service.class); + private final CloseableHttpClient httpClient; + private final String remoteBaseUrl; + private final int prefixLength; + + public Service(CloseableHttpClient httpClient, String remoteBaseUrl, String gridPrefix) { + this.httpClient = httpClient; + this.remoteBaseUrl = remoteBaseUrl; + prefixLength = gridPrefix.length(); + } + + public void handleClientRequest(ClientRequest clientRequest) throws IOException { + String requestPath = clientRequest.getPath().substring(prefixLength); + HttpGet get = new HttpGet(remoteBaseUrl + requestPath); + + try (CloseableHttpResponse response = httpClient.execute(get)) { + clientRequest.setStatus(response.getStatusLine().getStatusCode()); + + HttpEntity entity = response.getEntity(); + IOUtils.copy(entity.getContent(), clientRequest.getOutputStream()); + entity.getContent().close(); + clientRequest.getOutputStream().close(); + } + } +} diff --git a/leigh-esp-engine/src/main/java/leigh/esp/kabe/ServiceBus.java b/leigh-esp-engine/src/main/java/leigh/esp/kabe/ServiceBus.java new file mode 100644 index 0000000000000000000000000000000000000000..af9644a4bfe1b6a2c41354a74ce01fd3eb6a2200 --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/kabe/ServiceBus.java @@ -0,0 +1,5 @@ +package leigh.esp.kabe; + +public interface ServiceBus { + void start() throws Exception; +} diff --git a/leigh-esp-engine/src/main/java/leigh/esp/kabe/http/HttpServiceBus.java b/leigh-esp-engine/src/main/java/leigh/esp/kabe/http/HttpServiceBus.java new file mode 100644 index 0000000000000000000000000000000000000000..1c936533b30a61203df88c5e986e9879cd95d31d --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/kabe/http/HttpServiceBus.java @@ -0,0 +1,54 @@ +package leigh.esp.kabe.http; + +import leigh.esp.kabe.KabeServer; +import leigh.esp.kabe.ServiceBus; +import leigh.esp.kabe.service.TimeService; +import leigh.esp.keikai.KeiKaiService; +import leigh.mecha.fabric.LiteralMessageSubscription; +import leigh.mecha.http.server.WebPipeline; +import leigh.mecha.http.server.WebServer; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.HashSet; + +public class HttpServiceBus implements ServiceBus { + private final static MechaLogger logger = MechaLoggerFactory.getLogger(HttpServiceBus.class); + private final WebServer webserver; + + public HttpServiceBus(KabeServer kabe, int port) { + webserver = new WebServer(port, 128); + setupLink23Door(kabe, webserver); + setupTimeService(webserver); + setKeikaiService(webserver); + } + + private void setupTimeService(WebServer ws) { + HashSet prefixes = new HashSet<>(); + prefixes.add("/svc/time"); + TimeService door = new TimeService(prefixes); + webserver.getWebPipeline().getServicePipeline().getSubscriptionBase().subscribe( + new LiteralMessageSubscription<>(door, WebPipeline.KEY_SERVICE)); + } + + private void setupLink23Door(KabeServer kabe, WebServer webserver) { + HashSet prefixes = new HashSet<>(); + prefixes.add("/esp"); + Link23Door door = new Link23Door(prefixes, kabe); + webserver.getWebPipeline().getServicePipeline().getSubscriptionBase().subscribe( + new LiteralMessageSubscription<>(door, WebPipeline.KEY_SERVICE)); + } + + private void setKeikaiService(WebServer ws) { + HashSet prefixes = new HashSet<>(); + prefixes.add("/keikai"); + KeiKaiService door = new KeiKaiService(prefixes); + webserver.getWebPipeline().getServicePipeline().getSubscriptionBase().subscribe( + new LiteralMessageSubscription<>(door, WebPipeline.KEY_SERVICE)); + } + + @Override + public void start() throws Exception { + webserver.start(); + } +} diff --git a/leigh-esp-engine/src/main/java/leigh/esp/kabe/http/Link23Door.java b/leigh-esp-engine/src/main/java/leigh/esp/kabe/http/Link23Door.java new file mode 100644 index 0000000000000000000000000000000000000000..d4c35fce1907f0bb78c6d8741d6b3d839b1cbd95 --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/kabe/http/Link23Door.java @@ -0,0 +1,80 @@ +package leigh.esp.kabe.http; + +import leigh.esp.kabe.ClientRequest; +import leigh.esp.kabe.KabeServer; +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.http.server.PrefixedHandler; +import leigh.mecha.http.server.WebTransaction; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.VelocityWatch; +import org.apache.commons.lang.StringUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Set; + +public class Link23Door extends PrefixedHandler { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Link23Door.class); + private final KabeServer engine; + private final VelocityWatch vw = new VelocityWatch(logger); + + public Link23Door(Set pathPrefixes, KabeServer kabe) { + super(pathPrefixes); + this.engine = kabe; + } + + @Override + public HandlerStatus handlePrefixedWebRequest(WebTransaction request) throws Throwable { + vw.event("link32_txn"); + + /* + final InputStream is; + + if (request.httpServletRequest.getMethod().equals("GET")) { + EO obj = new EO(); + Map params = request.httpServletRequest.getParameterMap(); + for (Map.Entry entry : params.entrySet()) { + // FIXME Deal with string arrays properly, they are legal + obj.setValue(entry.getKey(), entry.getValue()[0]); + } + FSTConfiguration conf = FSTConfiguration.getDefaultConfiguration(); + is = new ByteArrayInputStream(conf.asByteArray(obj)); + } else { + is = request.httpServletRequest.getInputStream(); + } + */ + + engine.handle(new ClientRequest() { + final String gridPath = StringUtils.substring(request.httpServletRequest.getRequestURI(), "/esp".length()); + + @Override + public String getPath() { + return gridPath; + } + + @Override + public OutputStream getOutputStream() throws IOException { + return request.httpServletResponse.getOutputStream(); + } + + @Override + public InputStream getInputStream() throws IOException { + return request.httpServletRequest.getInputStream(); + } + + @Override + public void setStatus(int status) { + request.httpServletResponse.setStatus(status); + } + + @Override + public void setContentType(String mimeType) { + request.httpServletResponse.setContentType(mimeType); + } + }); + + return HandlerStatus.BREAK; + } +} diff --git a/leigh-esp-engine/src/main/java/leigh/esp/kabe/service/TimeService.java b/leigh-esp-engine/src/main/java/leigh/esp/kabe/service/TimeService.java new file mode 100644 index 0000000000000000000000000000000000000000..a830f03c4a0d7020d8e19de692c33664a02785be --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/kabe/service/TimeService.java @@ -0,0 +1,27 @@ +package leigh.esp.kabe.service; + +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.http.server.PrefixedHandler; +import leigh.mecha.http.server.WebTransaction; + +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.Set; + +public class TimeService extends PrefixedHandler { + public TimeService(Set pathPrefixes) { + super(pathPrefixes); + } + + @Override + public HandlerStatus handlePrefixedWebRequest(WebTransaction request) throws Throwable { + // We don't actually care what the request is, we always reply with the time. + + String time = Instant.now().toString(); + request.httpServletResponse.setContentType("text/plain"); + request.httpServletResponse.getOutputStream().write(time.getBytes(StandardCharsets.UTF_8)); + request.httpServletResponse.getOutputStream().close(); + + return HandlerStatus.BREAK; + } +} diff --git a/leigh-esp-engine/src/main/java/leigh/esp/keikai/KeiKaiService.java b/leigh-esp-engine/src/main/java/leigh/esp/keikai/KeiKaiService.java new file mode 100644 index 0000000000000000000000000000000000000000..18ba143b756f2b77a55fff79b51196222954862c --- /dev/null +++ b/leigh-esp-engine/src/main/java/leigh/esp/keikai/KeiKaiService.java @@ -0,0 +1,35 @@ +package leigh.esp.keikai; + +import leigh.eo.EO; +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.http.server.PrefixedHandler; +import leigh.mecha.http.server.WebTransaction; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.nustaq.serialization.FSTObjectInput; + +import java.util.Set; + +public class KeiKaiService extends PrefixedHandler { + private final static MechaLogger logger = MechaLoggerFactory.getLogger(KeiKaiService.class); + + public KeiKaiService(Set pathPrefixes) { + super(pathPrefixes); + } + + @Override + public HandlerStatus handlePrefixedWebRequest(WebTransaction request) throws Throwable { + try { + FSTObjectInput in = new FSTObjectInput(request.httpServletRequest.getInputStream()); + EO req = (EO) in.readObject(); + + String serviceName = req.getValueString("serviceId"); + + logger.info("Received service registration. [id: {}]", serviceName); + } catch (Exception e) { + request.httpServletResponse.setStatus(400); + } + + return HandlerStatus.BREAK; + } +} diff --git a/leigh-esp-sdk-example/.gitignore b/leigh-esp-sdk-example/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-esp-sdk-example/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-esp-sdk-example/LICENSE b/leigh-esp-sdk-example/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-esp-sdk-example/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-esp-sdk-example/build.gradle b/leigh-esp-sdk-example/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..69af96581cd955b70b634d8ff542caa70e7a81ee --- /dev/null +++ b/leigh-esp-sdk-example/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version '16.0' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-esp-sdk') + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-esp-sdk-example/src/main/java/leigh/esp/sdk/example/GreetingService.java b/leigh-esp-sdk-example/src/main/java/leigh/esp/sdk/example/GreetingService.java new file mode 100644 index 0000000000000000000000000000000000000000..42b1fbf744c4da85f2ce23cfe7f7ad30bf65c25c --- /dev/null +++ b/leigh-esp-sdk-example/src/main/java/leigh/esp/sdk/example/GreetingService.java @@ -0,0 +1,37 @@ +package leigh.esp.sdk.example; + +import leigh.eo.EO; +import leigh.esp.sdk.Context; +import leigh.esp.sdk.MessageListener; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.net.URISyntaxException; + +/** + * The greeting service is a simple example service which listens on a subscription for request messages, + * and returns a personalized response. + * + * @author C. Alexander Leigh + */ +public class GreetingService { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(GreetingService.class); + + public static void main(String[] args) throws Exception { + try { + Context agent = new Context(); + agent.setListener("/leigh/example/greeting", new MessageListener() { + @Override + public void onMessage(EO msg) throws Exception { + logger.info("Received message. [msg: {}]", msg); + } + }); + + while (true) { + Thread.sleep(5000); + } + } catch (URISyntaxException ex) { + System.err.println("URISyntaxException exception: " + ex.getMessage()); + } + } +} diff --git a/leigh-esp-sdk/.gitignore b/leigh-esp-sdk/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-esp-sdk/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-esp-sdk/LICENSE b/leigh-esp-sdk/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-esp-sdk/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-esp-sdk/build.gradle b/leigh-esp-sdk/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..556aa54767d3caead05831fe79786db7f32dc9f9 --- /dev/null +++ b/leigh-esp-sdk/build.gradle @@ -0,0 +1,24 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version '16.0' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-eo') + api project(':leigh-mecha') + api 'de.ruedigermoeller:fst:3.0.1' + api 'org.apache.httpcomponents:httpclient:4.5' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-esp-sdk/src/main/java/leigh/esp/sdk/ClientContext.java b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/ClientContext.java new file mode 100644 index 0000000000000000000000000000000000000000..36de5473f3fd471e1bdc465f80c1d5a3257b7ff8 --- /dev/null +++ b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/ClientContext.java @@ -0,0 +1,34 @@ +package leigh.esp.sdk; + + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; + +import java.io.IOException; + +public class ClientContext { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ClientContext.class); + private final String doorUrl = "http://localhost:8123/esp"; + private final CloseableHttpClient httpClient; + + public ClientContext() { + PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); + cm.setMaxTotal(200); + cm.setDefaultMaxPerRoute(20); + httpClient = HttpClientBuilder.create().setConnectionManager(cm).build(); + } + + public void request(String path) throws IOException, InterruptedException { + HttpGet get = new HttpGet(doorUrl + path); + try (CloseableHttpResponse response = httpClient.execute(get)) { + if (response.getStatusLine().getStatusCode() != 200) { + throw new IOException("ESP returned other than 200."); + } + } + } +} diff --git a/leigh-esp-sdk/src/main/java/leigh/esp/sdk/Link23Constants.java b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/Link23Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..7c0764c5580cee2cf088a206aa8dd5ddfbbf3621 --- /dev/null +++ b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/Link23Constants.java @@ -0,0 +1,8 @@ +package leigh.esp.sdk; + +public class Link23Constants { + public static String TYPE_BIND = "leigh.link16.bind"; + public static String TYPE_KEEPALIVE = "leigh.link16.keepalive"; + public static String SRC = "src"; + public static String DST = "dst"; +} diff --git a/leigh-esp-sdk/src/main/java/leigh/esp/sdk/MessageReceiver.java b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/MessageReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..0f62c249c4426680ece7e3806e7c855dfc888218 --- /dev/null +++ b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/MessageReceiver.java @@ -0,0 +1,9 @@ +package leigh.esp.sdk; + +import leigh.eo.EO; + +import java.io.IOException; + +public interface MessageReceiver { + void handle(EO msg) throws IOException, InterruptedException; +} diff --git a/leigh-esp-sdk/src/main/java/leigh/esp/sdk/WellKnownServices.java b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/WellKnownServices.java new file mode 100644 index 0000000000000000000000000000000000000000..4b879f10d1beaddbdb38835b5f30bd79fdbceed1 --- /dev/null +++ b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/WellKnownServices.java @@ -0,0 +1,5 @@ +package leigh.esp.sdk; + +public class WellKnownServices { + public static String CLOCK_TYPE = "leigh.esp.service.time"; +} diff --git a/leigh-esp-sdk/src/main/java/leigh/esp/sdk/example/EspClientExample.java b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/example/EspClientExample.java new file mode 100644 index 0000000000000000000000000000000000000000..1020783572ff39e8a52b9223df601e137c4880a9 --- /dev/null +++ b/leigh-esp-sdk/src/main/java/leigh/esp/sdk/example/EspClientExample.java @@ -0,0 +1,22 @@ +package leigh.esp.sdk.example; + +import leigh.esp.sdk.ClientContext; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.VelocityWatch; + +import java.io.IOException; + +public class EspClientExample { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EspClientExample.class); + + public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { + VelocityWatch vw = new VelocityWatch(logger); + ClientContext ctx = new ClientContext(); + + while (true) { + ctx.request("/sys/time"); + vw.event("/sys/time"); + } + } +} \ No newline at end of file diff --git a/leigh-gis/build.gradle b/leigh-gis/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..70dad2af099dc3a103f2ef180e2afeafed47e718 --- /dev/null +++ b/leigh-gis/build.gradle @@ -0,0 +1,29 @@ +plugins { + id 'java' + id 'java-library' +} + +repositories { + maven { + url "https://repo.osgeo.org/repository/release/" + } +} + +group 'leigh' +version '16.0' + +repositories { + mavenCentral() +} + +dependencies { + api 'io.jenetics:jpx:2.2.0' + api project(':leigh-mecha') + api 'org.geotools:gt-geojson:25.1' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-gis/src/main/java/leigh/gis/geojson/GeoJsonExtractor.java b/leigh-gis/src/main/java/leigh/gis/geojson/GeoJsonExtractor.java new file mode 100644 index 0000000000000000000000000000000000000000..aacf85c2e3baab20f9e4651a5d58d23717527e9f --- /dev/null +++ b/leigh-gis/src/main/java/leigh/gis/geojson/GeoJsonExtractor.java @@ -0,0 +1,28 @@ +package leigh.gis.geojson; + +import org.geotools.geojson.geom.GeometryJSON; +import org.locationtech.jts.geom.GeometryCollection; +import org.locationtech.jts.geom.Polygon; + +import java.io.Reader; +import java.io.StringReader; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class GeoJsonExtractor { + public static void main(String[] args) throws Exception { + String content = new String(Files.readAllBytes(Paths.get("/users/aleigh/proj/jlee/wc_ar_taxparcel.geojson")), "UTF-8"); + GeometryJSON gjson = new GeometryJSON(); + Reader reader = new StringReader(content); + + + GeometryCollection gc = gjson.readGeometryCollection(reader); + + + while (true) { + Polygon p = gjson.readPolygon(reader); + if (p == null) break; + System.out.println("polygon: " + p); + } + } +} diff --git a/leigh-gis/src/main/java/leigh/gis/gpx/TrackExtractor.java b/leigh-gis/src/main/java/leigh/gis/gpx/TrackExtractor.java new file mode 100644 index 0000000000000000000000000000000000000000..498a29aaf81a7388106e63998d3317438110ff85 --- /dev/null +++ b/leigh-gis/src/main/java/leigh/gis/gpx/TrackExtractor.java @@ -0,0 +1,39 @@ +package leigh.gis.gpx; + +import io.jenetics.jpx.GPX; +import io.jenetics.jpx.Track; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; + +import java.io.IOException; +import java.nio.file.Paths; + +/** + * Utility to extract tracks from a monolithic GPX file into multiple GPX files. + * + * @author C. Alexander Leigh + */ +public class TrackExtractor { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(TrackExtractor.class); + + public static void main(String[] args) throws IOException { + UniversalJob.banner(logger, "TrackExtractor"); + + if (args.length != 1) { + logger.error("Usage: TrackExtractor file.gpx"); + System.exit(UniversalJob.RET_BADARGS); + } + + GPX gpx = GPX.read(args[0]); + + logger.info("Loaded GPX file."); + + for (Track track : gpx.getTracks()) { + GPX trackGpx = GPX.builder().addTrack(track).build(); + String filename = track.getName() + ".gpx"; + logger.info("Writing track: [name: {}]", track.getName()); + GPX.write(trackGpx, Paths.get(filename)); + } + } +} diff --git a/leigh-gnusto/.gitignore b/leigh-gnusto/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-gnusto/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-gnusto/LICENSE b/leigh-gnusto/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-gnusto/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-gnusto/build.gradle b/leigh-gnusto/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..0896765397b5c3ac9e418eab020c191ed53fca95 --- /dev/null +++ b/leigh-gnusto/build.gradle @@ -0,0 +1,67 @@ +plugins { + id 'java' + id 'java-library' + id 'distribution' + id 'maven-publish' + id 'application' +} + +version leigh_gnusto_ver + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + api group: 'c3p0', name: 'c3p0', version: '0.9.1.2' + api group: 'mysql', name: 'mysql-connector-java', version: '8.0.22' + api group: 'org.mybatis', name: 'mybatis', version: '3.5.6' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} + +jar { + manifest { + attributes('Implementation-Title': 'LEIGH Gnusto', 'Implementation-Version': archiveVersion) + } +} + +publishing { + publications { + mavenJava(MavenPublication) { + artifactId = 'leigh-gnusto' + from components.java + versionMapping { + usage('java-api') { + fromResolutionOf('runtimeClasspath') + } + usage('java-runtime') { + fromResolutionResult() + } + } + pom { + name = 'LEIGH Gnusto' + description = 'SQL Schema Management' + url = 'http://leigh-co.com' + licenses { + license { + name = 'COMMERCIAL' + url = 'http://leigh-co.com' + } + } + developers { + developer { + id = 'aleigh' + name = 'C. Alexander Leigh' + email = 'a@leigh-co.com' + } + } + } + } + } + repositories { + maven { + url = "$buildDir/repos/dist" + } + } +} \ No newline at end of file diff --git a/leigh-gnusto/src/main/java/leigh/gnusto/Gnusto.java b/leigh-gnusto/src/main/java/leigh/gnusto/Gnusto.java new file mode 100644 index 0000000000000000000000000000000000000000..6176f88e5cd82ff11f11fa576282482160ae552d --- /dev/null +++ b/leigh-gnusto/src/main/java/leigh/gnusto/Gnusto.java @@ -0,0 +1,116 @@ +package leigh.gnusto; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.io.FilenameUtils; +import org.apache.ibatis.jdbc.ScriptRunner; + +import java.io.*; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * Gnusto provides a simple framework for performing SQL schema migrations on a MySQL database. + * + * @author C. Alexander Leigh + */ +public class Gnusto { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Gnusto.class); + + /** + * Prepare a database for use by Gnusto. This installs the Gnusto dictionary table(s) as required. If + * a Gnusto catalog is already installed in the database, it will be overwritten by this method. + */ + public void prepare(Connection con) throws SQLException, IOException { + SqlMigration migration = new SqlMigration("gnusto", 1) { + @Override + InputStream getInputStream() { + return Gnusto.class.getResourceAsStream("/leigh/gnusto/mysql/schema-1.sql"); + } + }; + migrate(con, migration); + } + + /** + * Returns the stepping for the given schema, or -1 if this schema is not already installed + * in the database. This method requires that the gnu_schema_t table already be installed + * in the database, or a SQL exception is likely to be thrown. + */ + public int getSchemaStep(Connection con, String schemaName) throws SQLException { + try (PreparedStatement ps = con.prepareStatement("SELECT MAX(step) FROM gnu_schema_t WHERE nm=?")) { + ps.setString(1, schemaName); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } + return -1; + } + + /** + * Attempt to run the given migration against the given connection. If the script successfully runs, + * the gnusto schema table will be updated to reflect that the new schema was installed. + */ + public void migrate(Connection con, SqlMigration migration) throws SQLException, FileNotFoundException { + logger.info("Running migration: {}", migration); + ScriptRunner sr = new ScriptRunner(con); + Reader reader = new InputStreamReader(new BufferedInputStream(migration.getInputStream())); + sr.runScript(reader); + try (PreparedStatement ps = con.prepareStatement("INSERT INTO gnu_schema_t (nm,step) VALUES (?,?)")) { + ps.setString(1, migration.getName()); + ps.setInt(2, migration.getStep()); + logger.info("Updating catalog. [nm: {}] [step: {}]", migration.getName(), migration.getStep()); + ps.execute(); + } + } + + /** + * Attempt to run the given migrations against the given connection. Loading multiple schemas at the same + * time is supported, but for a given step, the order in which the different schemas will be migrated is + * undefined. + */ + public void migrate(Connection con, List migrations) throws SQLException, FileNotFoundException { + ArrayList sorted = new ArrayList<>(migrations); + sorted.sort((o1, o2) -> ((Integer) o1.getStep()).compareTo(o2.getStep())); + + for (SqlMigration migration : migrations) { + int dbStep = getSchemaStep(con, migration.getName()); + if (dbStep < migration.getStep()) { + migrate(con, migration); + } + } + } + + public void migrate(Connection con, Path base) throws IOException, SQLException { + ArrayList migrations = new ArrayList<>(); + + Files.walkFileTree(base, new SimpleFileVisitor<>() { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + if (file.toString().endsWith(".sql")) { + String basename = FilenameUtils.removeExtension(file.getFileName().toString()); + logger.info("Found migration. [basename: {}]", basename); + String[] fn = basename.split("-"); + migrations.add(new SqlMigration(fn[0], Integer.parseInt(fn[1])) { + @Override + InputStream getInputStream() throws FileNotFoundException { + return new FileInputStream(file.toFile()); + } + }); + } + return FileVisitResult.CONTINUE; + } + }); + + migrate(con, migrations); + } +} diff --git a/leigh-gnusto/src/main/java/leigh/gnusto/GnustoApp.java b/leigh-gnusto/src/main/java/leigh/gnusto/GnustoApp.java new file mode 100644 index 0000000000000000000000000000000000000000..c009a74494dd24e1c2af7c8d7be001222d5a2634 --- /dev/null +++ b/leigh-gnusto/src/main/java/leigh/gnusto/GnustoApp.java @@ -0,0 +1,48 @@ +package leigh.gnusto; + +import com.mchange.v2.c3p0.ComboPooledDataSource; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; + +import java.beans.PropertyVetoException; +import java.io.IOException; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.SQLException; + +/** + * The GnustoApp applies migrations (if needed) to load a schema into a SQL database. + *

+ * Limitations: For development purposes this is currently hard-coded to load into the leigh-astro development + * database. + * + * @author C. Alexander Leigh + */ +public class GnustoApp { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(GnustoApp.class); + + public static void main(String args[]) throws PropertyVetoException, SQLException, IOException { + // TODO: Add a switch to prepare the database + // TODO: Make datasource configurable + if (args.length != 1) { + logger.info("Usage: GnustoApp sqldir"); + System.exit(UniversalJob.RET_BADARGS); + } + + ComboPooledDataSource cpds = new ComboPooledDataSource(); + cpds.setDriverClass("com.mysql.cj.jdbc.Driver"); + cpds.setJdbcUrl("jdbc:mysql://db1.leigh-co.com/music"); + cpds.setUser("music"); + cpds.setPassword(System.getenv("MUSIC_PW")); + + Gnusto g = new Gnusto(); + Path base = Path.of(args[0]); + try (Connection con = cpds.getConnection()) { + con.setAutoCommit(false); + // g.prepare(con); + g.migrate(con, base); + con.commit(); + } + } +} diff --git a/leigh-gnusto/src/main/java/leigh/gnusto/SqlMigration.java b/leigh-gnusto/src/main/java/leigh/gnusto/SqlMigration.java new file mode 100644 index 0000000000000000000000000000000000000000..99e360d863ad9d065f40ca19a2fccdb1d7d683cf --- /dev/null +++ b/leigh-gnusto/src/main/java/leigh/gnusto/SqlMigration.java @@ -0,0 +1,56 @@ +package leigh.gnusto; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.Objects; + +/** + * This class holds a single specific SQL migration. The migration is associated with a schema by name, as + * well as the version of that schema. + * + * @author C. Alexander Leigh + */ +public abstract class SqlMigration { + private final String name; + private final int step; + + public SqlMigration(String name, int ver) { + this.name = name; + this.step = ver; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SqlMigration that = (SqlMigration) o; + return step == that.step && Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, step); + } + + public String getName() { + return name; + } + + public int getStep() { + return step; + } + + /** + * Return an input stream representing the script for this migration to the caller. It is not necessary to buffer + * the stream. + */ + abstract InputStream getInputStream() throws FileNotFoundException; + + @Override + public String toString() { + return "SqlMigration{" + + "name='" + name + '\'' + + ", step=" + step + + '}'; + } +} diff --git a/leigh-gnusto/src/main/resources/leigh/gnusto/mysql/schema-1.sql b/leigh-gnusto/src/main/resources/leigh/gnusto/mysql/schema-1.sql new file mode 100644 index 0000000000000000000000000000000000000000..1ab3284b4d5021f576b9c004357a3f64cbc6cfbc --- /dev/null +++ b/leigh-gnusto/src/main/resources/leigh/gnusto/mysql/schema-1.sql @@ -0,0 +1,9 @@ +DROP TABLE IF EXISTS gnu_schema_t; +CREATE TABLE gnu_schema_t +( + nm VARCHAR(32) NOT NULL, + step INT NOT NULL, + ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +ALTER TABLE gnu_schema_t + ADD CONSTRAINT gnu_schema_uc UNIQUE (nm, step); \ No newline at end of file diff --git a/leigh-historian/.gitignore b/leigh-historian/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-historian/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-historian/LICENSE b/leigh-historian/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-historian/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-historian/build.gradle b/leigh-historian/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..351abff9634a59da9d06b5445da2cfeefdaf179b --- /dev/null +++ b/leigh-historian/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version '15.0' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + api group: 'org.scream3r', name: 'jssc', version: '2.8.0' + api group: 'net.opentsdb', name: 'opentsdb', version: '2.4.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-historian/src/main/java/ModbusRTU/ModbusRTU.java b/leigh-historian/src/main/java/ModbusRTU/ModbusRTU.java new file mode 100644 index 0000000000000000000000000000000000000000..c8905c1803943e28ca10213f34fe692e340cb3b2 --- /dev/null +++ b/leigh-historian/src/main/java/ModbusRTU/ModbusRTU.java @@ -0,0 +1,72 @@ +/* + * (c) Stefan Rossmann + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package ModbusRTU; + +import de.re.easymodbus.exceptions.ModbusException; +import de.re.easymodbus.modbusclient.ModbusClient; +import jssc.SerialPortException; +import jssc.SerialPortTimeoutException; + +import java.io.IOException; + +/** + * @author SR555 + */ +public class ModbusRTU { + public static void main(String args[]) throws IOException, SerialPortException, ModbusException, SerialPortTimeoutException, InterruptedException { + boolean success = false; + ModbusClient modbusClient = new ModbusClient("127.0.0.1", 502); + System.out.println(modbusClient.Available(500)); + modbusClient.Connect(); + while (true) { + System.out.println(modbusClient.ReadInputRegisters(0, 10)[5]); + //Thread.sleep(200); + } + //modbusClient.WriteMultipleCoils(0, new boolean[] {true,true,true}); + //modbusClient.Disconnect(); + /* + while (success == false) + { + try + { + modbusClient.Connect("127.0.0.1",502); + boolean[] response = modbusClient.ReadCoils(2, 20); + int[] responseint = modbusClient.ReadHoldingRegisters(0, 20); + modbusClient.WriteSingleCoil(0, true); + modbusClient.WriteSingleRegister(200, 456); + modbusClient.WriteMultipleCoils(200, new boolean[]{true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true}); + modbusClient.WriteMultipleRegisters(300, new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}); + for (int i = 0; i < response.length; i++) + { + System.out.println(response[i]); + System.out.println(responseint[i]); + } + success = true; + Thread.sleep(1000); + } + catch (Exception e) + { + e.printStackTrace(); + } + finally + { + modbusClient.Disconnect(); + } + + } + */ + } +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/datatypes/Parity.java b/leigh-historian/src/main/java/de/re/easymodbus/datatypes/Parity.java new file mode 100644 index 0000000000000000000000000000000000000000..441dd4c5cb6e22ced825d18ba18a42af955a7cc7 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/datatypes/Parity.java @@ -0,0 +1,17 @@ +package de.re.easymodbus.datatypes; + +public enum Parity { + None(0), + Even(2), + Odd(1); + + private int value; + + private Parity(int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/datatypes/RegisterOrder.java b/leigh-historian/src/main/java/de/re/easymodbus/datatypes/RegisterOrder.java new file mode 100644 index 0000000000000000000000000000000000000000..c637d853fbca47eb78ab2869610ef4e686d60ad3 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/datatypes/RegisterOrder.java @@ -0,0 +1,4 @@ +package de.re.easymodbus.datatypes; + +public enum RegisterOrder {LowHigh, HighLow}; + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/datatypes/StopBits.java b/leigh-historian/src/main/java/de/re/easymodbus/datatypes/StopBits.java new file mode 100644 index 0000000000000000000000000000000000000000..8df17e6fca0ccf6c5182c38113cb2eae85af5fe6 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/datatypes/StopBits.java @@ -0,0 +1,17 @@ +package de.re.easymodbus.datatypes; + +public enum StopBits { + One(1), + OnePointFive(3), + Two(2); + + private int value; + + private StopBits(int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/exceptions/CRCCheckFailedException.java b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/CRCCheckFailedException.java new file mode 100644 index 0000000000000000000000000000000000000000..9fbbbf96b435d7bb6aeb42681c1b000fcd8e8c60 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/CRCCheckFailedException.java @@ -0,0 +1,38 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package de.re.easymodbus.exceptions; + +/** + * @author Stefan Roßmann + */ +@SuppressWarnings("serial") +public class CRCCheckFailedException extends ModbusException { + public CRCCheckFailedException() { + } + + public CRCCheckFailedException(String s) { + super(s); + } +} + + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/exceptions/ConnectionException.java b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/ConnectionException.java new file mode 100644 index 0000000000000000000000000000000000000000..eac04f6e0fd369d792f888f624fe6ff84dae99ec --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/ConnectionException.java @@ -0,0 +1,38 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package de.re.easymodbus.exceptions; + +/** + * @author Stefan Roßmann + */ +@SuppressWarnings("serial") +public class ConnectionException extends ModbusException { + public ConnectionException() { + } + + public ConnectionException(String s) { + super(s); + } +} + + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/exceptions/FunctionCodeNotSupportedException.java b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/FunctionCodeNotSupportedException.java new file mode 100644 index 0000000000000000000000000000000000000000..bcb0165f4470549c5276245d7a8a57db96e7abfe --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/FunctionCodeNotSupportedException.java @@ -0,0 +1,38 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package de.re.easymodbus.exceptions; + +/** + * @author Stefan Roßmann + */ +@SuppressWarnings("serial") +public class FunctionCodeNotSupportedException extends ModbusException { + public FunctionCodeNotSupportedException() { + } + + public FunctionCodeNotSupportedException(String s) { + super(s); + } +} + + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/exceptions/ModbusException.java b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/ModbusException.java new file mode 100644 index 0000000000000000000000000000000000000000..b272186a74091a9b88cec7e5049556266dcd508c --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/ModbusException.java @@ -0,0 +1,38 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package de.re.easymodbus.exceptions; + +/** + * @author Stefan Rossmann + */ +@SuppressWarnings("serial") +public class ModbusException extends Exception { + public ModbusException() { + } + + public ModbusException(String s) { + super(s); + } +} + + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/exceptions/QuantityInvalidException.java b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/QuantityInvalidException.java new file mode 100644 index 0000000000000000000000000000000000000000..f1f463d23f40e4cbb28c798f5d8d272e91c1338e --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/QuantityInvalidException.java @@ -0,0 +1,38 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package de.re.easymodbus.exceptions; + +/** + * @author Stefan Roßmann + */ +@SuppressWarnings("serial") +public class QuantityInvalidException extends ModbusException { + public QuantityInvalidException() { + } + + public QuantityInvalidException(String s) { + super(s); + } +} + + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/exceptions/SerialPortException.java b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/SerialPortException.java new file mode 100644 index 0000000000000000000000000000000000000000..4675b4006de467f957cac319686ace71edabfddc --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/SerialPortException.java @@ -0,0 +1,38 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package de.re.easymodbus.exceptions; + +/** + * @author Stefan Roßmann + */ +@SuppressWarnings("serial") +public class SerialPortException extends ModbusException { + public SerialPortException() { + } + + public SerialPortException(String s) { + super(s); + } +} + + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/exceptions/StartingAddressInvalidException.java b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/StartingAddressInvalidException.java new file mode 100644 index 0000000000000000000000000000000000000000..e5ef34ac41c94c168525183326c234fc8b5206ca --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/exceptions/StartingAddressInvalidException.java @@ -0,0 +1,38 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package de.re.easymodbus.exceptions; + +/** + * @author Stefan Roßmann + */ +@SuppressWarnings("serial") +public class StartingAddressInvalidException extends ModbusException { + public StartingAddressInvalidException() { + } + + public StartingAddressInvalidException(String s) { + super(s); + } +} + + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/DateTime.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/DateTime.java new file mode 100644 index 0000000000000000000000000000000000000000..3d3cbd492ea8ab1d85a50b20d98b76782415d853 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/DateTime.java @@ -0,0 +1,57 @@ +package de.re.easymodbus.modbusclient; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +/** + * Returns the Current Date and Time in different Formats. + * + * @author Stefan Rossmann + */ +public class DateTime { + /** + * Returns the current DateTime in Ticks (one ms = 10000ticks) + * + * @return Current Date and Time in Ticks + */ + public static long getDateTimeTicks() { + long TICKS_AT_EPOCH = 621355968000000000L; + long tick = System.currentTimeMillis() * 10000 + TICKS_AT_EPOCH; + return tick; + } + + /** + * Returns the current DateTme in String Format yyyy/MM/dd HH:mm:ss + * + * @return current DateTme in String Format yyyy/MM/dd HH:mm:ss + */ + public static String getDateTimeString() { + DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + Calendar cal = Calendar.getInstance(); + return (dateFormat.format(cal.getTime())); + } + + /** + * Returns the current DateTme in String Format yyyy/MM/dd HH:mm:ss + * + * @return current DateTme in String Format yyyy/MM/dd HH:mm:ss + */ + public static String getDateTimeStringMilliseconds() { + DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); + Calendar cal = Calendar.getInstance(); + return (dateFormat.format(cal.getTime())); + } + + /** + * Returns the current Date in String Format yyyyMMdd + * + * @return current DateTme in String Format yyyyMMdd + */ + public static String getDateString() { + DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + Calendar cal = Calendar.getInstance(); + return (dateFormat.format(cal.getTime())); + } + +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/ModbusClient.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/ModbusClient.java new file mode 100644 index 0000000000000000000000000000000000000000..7e2d75df4adab37a3c7e4f62b2abf11a915a0fa4 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/ModbusClient.java @@ -0,0 +1,2135 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusclient; + +import de.re.easymodbus.datatypes.Parity; +import de.re.easymodbus.datatypes.RegisterOrder; +import de.re.easymodbus.datatypes.StopBits; +import de.re.easymodbus.exceptions.ModbusException; +import jssc.SerialPort; +import jssc.SerialPortException; +import jssc.SerialPortTimeoutException; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.*; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + + +/** + * @author Stefan Roßmann + */ +public class ModbusClient { + private Socket tcpClientSocket = new Socket(); + protected String ipAddress = "190.201.100.100"; + protected int port = 502; + private byte[] transactionIdentifier = new byte[2]; + private byte[] protocolIdentifier = new byte[2]; + private byte[] length = new byte[2]; + private byte[] crc = new byte[2]; + private byte unitIdentifier = 1; + private byte functionCode; + private byte[] startingAddress = new byte[2]; + private byte[] quantity = new byte[2]; + private boolean udpFlag = false; + private boolean serialflag = false; + private int connectTimeout = 1000; + private InputStream inStream; + private DataOutputStream outStream; + public byte[] receiveData; + public byte[] sendData; + private List receiveDataChangedListener = new ArrayList(); + private List sendDataChangedListener = new ArrayList(); + private SerialPort serialPort; + + private String comPort; + private int numberOfRetries = 3; //Number of retries in case of serial connection + private int baudrate = 9600; + private Parity parity = Parity.Even; + private StopBits stopBits = StopBits.One; + private boolean debug = false; + + public ModbusClient(String ipAddress, int port) { + System.out.println("EasyModbus Client Library"); + System.out.println("Copyright (c) Stefan Rossmann Engineering Solutions"); + System.out.println("www.rossmann-engineering.de"); + System.out.println(""); + if (debug) + StoreLogData.getInstance().Store("EasyModbus library initialized for Modbus-TCP, IPAddress: " + ipAddress + ", Port: " + port); + this.ipAddress = ipAddress; + this.port = port; + } + + public ModbusClient() { + System.out.println("EasyModbus Client Library"); + System.out.println("Copyright (c) Stefan Rossmann Engineering Solutions"); + System.out.println("www.rossmann-engineering.de"); + System.out.println(""); + if (debug) StoreLogData.getInstance().Store("EasyModbus library initialized for Modbus-TCP"); + } + + public ModbusClient(String serialPort) { + System.out.println("EasyModbus Client Library"); + System.out.println("Copyright (c) Stefan Rossmann Engineering Solutions"); + System.out.println("www.rossmann-engineering.de"); + System.out.println(""); + if (debug) + StoreLogData.getInstance().Store("EasyModbus library initialized for Modbus-RTU, COM-Port: " + serialPort); + this.comPort = serialPort; + this.serialflag = true; + if (debug) StoreLogData.getInstance().Store("Open Serial Port: " + comPort); + } + + /** + * Connects to ModbusServer + * + * @throws UnknownHostException + * @throws IOException + */ + public void Connect() throws UnknownHostException, IOException { + if (!udpFlag && !this.serialflag) { + + tcpClientSocket = new Socket(ipAddress, port); + tcpClientSocket.setSoTimeout(connectTimeout); + outStream = new DataOutputStream(tcpClientSocket.getOutputStream()); + inStream = tcpClientSocket.getInputStream(); + if (debug) + StoreLogData.getInstance().Store("Open TCP-Socket, IP-Address: " + ipAddress + ", Port: " + port); + } + if (this.serialflag) { + serialPort = new SerialPort(comPort); + + try { + serialPort.openPort(); + + + serialPort.setParams(this.baudrate, + 8, + this.stopBits.getValue(), + this.parity.getValue()); + + serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); + } catch (SerialPortException e) { + + e.printStackTrace(); + } + if (debug) StoreLogData.getInstance().Store("Open Serial Port: " + comPort); + + } + } + + /** + * Connects to ModbusServer + * + * @param ipAddress IP Address of Modbus Server to connect to + * @param port Port Modbus Server listenning (standard 502) + * @throws UnknownHostException + * @throws IOException + */ + public void Connect(String ipAddress, int port) throws UnknownHostException, IOException { + this.ipAddress = ipAddress; + this.port = port; + + tcpClientSocket = new Socket(ipAddress, port); + tcpClientSocket.setSoTimeout(connectTimeout); + outStream = new DataOutputStream(tcpClientSocket.getOutputStream()); + inStream = tcpClientSocket.getInputStream(); + if (debug) StoreLogData.getInstance().Store("Open TCP-Socket, IP-Address: " + ipAddress + ", Port: " + port); + } + + /** + * Connects to ModbusServer with serial connection + * + * @param comPort used Com-Port + * @throws UnknownHostException + * @throws IOException + */ + public void Connect(String comPort) throws SerialPortException { + this.serialflag = true; + serialPort = new SerialPort(comPort); + + serialPort.openPort(); + + serialPort.setParams(this.baudrate, + 8, + this.stopBits.getValue(), + this.parity.getValue()); + + serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); + } + + /** + * Convert two 16 Bit Registers to 32 Bit real value + * + * @param registers 16 Bit Registers + * @return 32 bit real value + */ + public static float ConvertRegistersToFloat(int[] registers) throws IllegalArgumentException { + if (registers.length != 2) + throw new IllegalArgumentException("Input Array length invalid"); + int highRegister = registers[1]; + int lowRegister = registers[0]; + byte[] highRegisterBytes = toByteArray(highRegister); + byte[] lowRegisterBytes = toByteArray(lowRegister); + byte[] floatBytes = { + highRegisterBytes[1], + highRegisterBytes[0], + lowRegisterBytes[1], + lowRegisterBytes[0] + }; + return ByteBuffer.wrap(floatBytes).getFloat(); + } + + /** + * Convert two 16 Bit Registers to 64 Bit double value Reg0: Low Word.....Reg3: High Word + * + * @param registers 16 Bit Registers + * @return 64 bit double value + */ + public static double ConvertRegistersToDouble(int[] registers) throws IllegalArgumentException { + if (registers.length != 4) + throw new IllegalArgumentException("Input Array length invalid"); + byte[] highRegisterBytes = toByteArray(registers[3]); + byte[] highLowRegisterBytes = toByteArray(registers[2]); + byte[] lowHighRegisterBytes = toByteArray(registers[1]); + byte[] lowRegisterBytes = toByteArray(registers[0]); + byte[] doubleBytes = { + highRegisterBytes[1], + highRegisterBytes[0], + highLowRegisterBytes[1], + highLowRegisterBytes[0], + lowHighRegisterBytes[1], + lowHighRegisterBytes[0], + lowRegisterBytes[1], + lowRegisterBytes[0] + }; + return ByteBuffer.wrap(doubleBytes).getDouble(); + } + + /** + * Convert two 16 Bit Registers to 64 Bit double value Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + * + * @param registers 16 Bit Registers + * @param registerOrder High Register first or low Register first + * @return 64 bit double value + */ + public static double ConvertRegistersToDouble(int[] registers, RegisterOrder registerOrder) throws IllegalArgumentException { + if (registers.length != 4) + throw new IllegalArgumentException("Input Array length invalid"); + int[] swappedRegisters = {registers[0], registers[1], registers[2], registers[3]}; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[]{registers[3], registers[2], registers[1], registers[0]}; + return ConvertRegistersToDouble(swappedRegisters); + } + + /** + * Convert two 16 Bit Registers to 32 Bit real value + * + * @param registers 16 Bit Registers + * @param registerOrder High Register first or low Register first + * @return 32 bit real value + */ + public static float ConvertRegistersToFloat(int[] registers, RegisterOrder registerOrder) throws IllegalArgumentException { + int[] swappedRegisters = {registers[0], registers[1]}; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[]{registers[1], registers[0]}; + return ConvertRegistersToFloat(swappedRegisters); + } + + + /** + * Convert four 16 Bit Registers to 64 Bit long value Reg0: Low Word.....Reg3: High Word + * + * @param registers 16 Bit Registers + * @return 64 bit value + */ + public static long ConvertRegistersToLong(int[] registers) throws IllegalArgumentException { + if (registers.length != 4) + throw new IllegalArgumentException("Input Array length invalid"); + byte[] highRegisterBytes = toByteArray(registers[3]); + byte[] highLowRegisterBytes = toByteArray(registers[2]); + byte[] lowHighRegisterBytes = toByteArray(registers[1]); + byte[] lowRegisterBytes = toByteArray(registers[0]); + byte[] longBytes = { + highRegisterBytes[1], + highRegisterBytes[0], + highLowRegisterBytes[1], + highLowRegisterBytes[0], + lowHighRegisterBytes[1], + lowHighRegisterBytes[0], + lowRegisterBytes[1], + lowRegisterBytes[0] + }; + return ByteBuffer.wrap(longBytes).getLong(); + } + + /** + * Convert four 16 Bit Registers to 64 Bit long value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + * + * @param registers 16 Bit Registers + * @return 64 bit value + */ + public static long ConvertRegistersToLong(int[] registers, RegisterOrder registerOrder) throws IllegalArgumentException { + if (registers.length != 4) + throw new IllegalArgumentException("Input Array length invalid"); + int[] swappedRegisters = {registers[0], registers[1], registers[2], registers[3]}; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[]{registers[3], registers[2], registers[1], registers[0]}; + return ConvertRegistersToLong(swappedRegisters); + } + + /** + * Convert two 16 Bit Registers to 32 Bit long value + * + * @param registers 16 Bit Registers + * @return 32 bit value + */ + public static int ConvertRegistersToInt(int[] registers) throws IllegalArgumentException { + if (registers.length != 2) + throw new IllegalArgumentException("Input Array length invalid"); + int highRegister = registers[1]; + int lowRegister = registers[0]; + byte[] highRegisterBytes = toByteArray(highRegister); + byte[] lowRegisterBytes = toByteArray(lowRegister); + byte[] doubleBytes = { + highRegisterBytes[1], + highRegisterBytes[0], + lowRegisterBytes[1], + lowRegisterBytes[0] + }; + return ByteBuffer.wrap(doubleBytes).getInt(); + } + + /** + * Convert two 16 Bit Registers to 32 Bit long value + * + * @param registers 16 Bit Registers + * @param registerOrder High Register first or low Register first + * @return 32 bit value + */ + public static int ConvertRegistersToInt(int[] registers, RegisterOrder registerOrder) throws IllegalArgumentException { + int[] swappedRegisters = {registers[0], registers[1]}; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[]{registers[1], registers[0]}; + return ConvertRegistersToInt(swappedRegisters); + } + + /** + * Convert 32 Bit real Value to two 16 Bit Value to send as Modbus Registers + * + * @param floatValue real to be converted + * @return 16 Bit Register values + */ + public static int[] ConvertFloatToRegisters(float floatValue) { + byte[] floatBytes = toByteArray(floatValue); + byte[] highRegisterBytes = + { + 0, 0, + floatBytes[0], + floatBytes[1], + + }; + byte[] lowRegisterBytes = + { + 0, 0, + floatBytes[2], + floatBytes[3], + + }; + int[] returnValue = + { + ByteBuffer.wrap(lowRegisterBytes).getInt(), + ByteBuffer.wrap(highRegisterBytes).getInt() + }; + return returnValue; + } + + /** + * Convert 32 Bit real Value to two 16 Bit Value to send as Modbus Registers + * + * @param floatValue real to be converted + * @param registerOrder High Register first or low Register first + * @return 16 Bit Register values + */ + public static int[] ConvertFloatToRegisters(float floatValue, RegisterOrder registerOrder) { + int[] registerValues = ConvertFloatToRegisters(floatValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new int[]{registerValues[1], registerValues[0]}; + return returnValue; + } + + /** + * Convert 32 Bit Value to two 16 Bit Value to send as Modbus Registers + * + * @param intValue Value to be converted + * @return 16 Bit Register values + */ + public static int[] ConvertIntToRegisters(int intValue) { + byte[] doubleBytes = toByteArrayInt(intValue); + byte[] highRegisterBytes = + { + 0, 0, + doubleBytes[0], + doubleBytes[1], + + }; + byte[] lowRegisterBytes = + { + 0, 0, + doubleBytes[2], + doubleBytes[3], + + }; + int[] returnValue = + { + ByteBuffer.wrap(lowRegisterBytes).getInt(), + ByteBuffer.wrap(highRegisterBytes).getInt() + }; + return returnValue; + } + + /** + * Convert 32 Bit Value to two 16 Bit Value to send as Modbus Registers + * + * @param intValue Value to be converted + * @param registerOrder High Register first or low Register first + * @return 16 Bit Register values + */ + public static int[] ConvertIntToRegisters(int intValue, RegisterOrder registerOrder) { + int[] registerValues = ConvertIntToRegisters(intValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new int[]{registerValues[1], registerValues[0]}; + return returnValue; + } + + /** + * Convert 64 Bit Value to four 16 Bit Value to send as Modbus Registers + * + * @param longValue Value to be converted + * @return 16 Bit Register values + */ + public static int[] ConvertLongToRegisters(long longValue) { + byte[] doubleBytes = toByteArrayLong(longValue); + byte[] highhighRegisterBytes = + { + 0, 0, + doubleBytes[0], + doubleBytes[1], + + }; + byte[] highlowRegisterBytes = + { + 0, 0, + doubleBytes[2], + doubleBytes[3], + + }; + byte[] lowHighRegisterBytes = + { + 0, 0, + doubleBytes[4], + doubleBytes[5], + }; + byte[] lowlowRegisterBytes = + { + 0, 0, + doubleBytes[6], + doubleBytes[7], + + }; + int[] returnValue = + { + ByteBuffer.wrap(lowlowRegisterBytes).getInt(), + ByteBuffer.wrap(lowHighRegisterBytes).getInt(), + ByteBuffer.wrap(highlowRegisterBytes).getInt(), + ByteBuffer.wrap(highhighRegisterBytes).getInt(), + }; + return returnValue; + } + + /** + * Convert 64 Bit Value to two 16 Bit Value to send as Modbus Registers + * + * @param longValue Value to be converted + * @param registerOrder High Register first or low Register first + * @return 16 Bit Register values + */ + public static int[] ConvertLongToRegisters(int longValue, RegisterOrder registerOrder) { + int[] registerValues = ConvertLongToRegisters(longValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new int[]{registerValues[3], registerValues[2], registerValues[1], registerValues[0]}; + return returnValue; + } + + /** + * Convert 64 Bit Value to four 16 Bit Value to send as Modbus Registers + * + * @param doubleValue Value to be converted + * @return 16 Bit Register values + */ + public static int[] ConvertDoubleToRegisters(double doubleValue) { + byte[] doubleBytes = toByteArrayDouble(doubleValue); + byte[] highhighRegisterBytes = + { + 0, 0, + doubleBytes[0], + doubleBytes[1], + + }; + byte[] highlowRegisterBytes = + { + 0, 0, + doubleBytes[2], + doubleBytes[3], + + }; + byte[] lowHighRegisterBytes = + { + 0, 0, + doubleBytes[4], + doubleBytes[5], + }; + byte[] lowlowRegisterBytes = + { + 0, 0, + doubleBytes[6], + doubleBytes[7], + + }; + int[] returnValue = + { + ByteBuffer.wrap(lowlowRegisterBytes).getInt(), + ByteBuffer.wrap(lowHighRegisterBytes).getInt(), + ByteBuffer.wrap(highlowRegisterBytes).getInt(), + ByteBuffer.wrap(highhighRegisterBytes).getInt(), + }; + return returnValue; + } + + + /** + * Convert 64 Bit Value to two 16 Bit Value to send as Modbus Registers + * + * @param doubleValue Value to be converted + * @param registerOrder High Register first or low Register first + * @return 16 Bit Register values + */ + public static int[] ConvertDoubleToRegisters(double doubleValue, RegisterOrder registerOrder) { + int[] registerValues = ConvertDoubleToRegisters(doubleValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new int[]{registerValues[3], registerValues[2], registerValues[1], registerValues[0]}; + return returnValue; + } + + /** + * Converts 16 - Bit Register values to String + * + * @param registers Register array received via Modbus + * @param offset First Register containing the String to convert + * @param stringLength number of characters in String (must be even) + * @return Converted String + */ + public static String ConvertRegistersToString(int[] registers, int offset, int stringLength) { + byte[] result = new byte[stringLength]; + byte[] registerResult = new byte[2]; + + for (int i = 0; i < stringLength / 2; i++) { + registerResult = toByteArray(registers[offset + i]); + result[i * 2] = registerResult[0]; + result[i * 2 + 1] = registerResult[1]; + } + return new String(result); + } + + /** + * Converts a String to 16 - Bit Registers + * + * @param stringToConvert String to Convert< + * @return Converted String + */ + public static int[] ConvertStringToRegisters(String stringToConvert) { + byte[] array = stringToConvert.getBytes(); + int[] returnarray = new int[stringToConvert.length() / 2 + stringToConvert.length() % 2]; + for (int i = 0; i < returnarray.length; i++) { + returnarray[i] = array[i * 2]; + if (i * 2 + 1 < array.length) { + returnarray[i] = returnarray[i] | ((int) array[i * 2 + 1] << 8); + } + } + return returnarray; + } + + + public static byte[] calculateCRC(byte[] data, int numberOfBytes, int startByte) { + byte[] auchCRCHi = { + (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, + (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, + (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, + (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, + (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, + (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, + (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, + (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, + (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, + (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, + (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, + (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, + (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, + (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, + (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, + (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, + (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, + (byte) 0x40 + }; + + byte[] auchCRCLo = { + (byte) 0x00, (byte) 0xC0, (byte) 0xC1, (byte) 0x01, (byte) 0xC3, (byte) 0x03, (byte) 0x02, (byte) 0xC2, (byte) 0xC6, (byte) 0x06, (byte) 0x07, (byte) 0xC7, (byte) 0x05, (byte) 0xC5, (byte) 0xC4, + (byte) 0x04, (byte) 0xCC, (byte) 0x0C, (byte) 0x0D, (byte) 0xCD, (byte) 0x0F, (byte) 0xCF, (byte) 0xCE, (byte) 0x0E, (byte) 0x0A, (byte) 0xCA, (byte) 0xCB, (byte) 0x0B, (byte) 0xC9, (byte) 0x09, + (byte) 0x08, (byte) 0xC8, (byte) 0xD8, (byte) 0x18, (byte) 0x19, (byte) 0xD9, (byte) 0x1B, (byte) 0xDB, (byte) 0xDA, (byte) 0x1A, (byte) 0x1E, (byte) 0xDE, (byte) 0xDF, (byte) 0x1F, (byte) 0xDD, + (byte) 0x1D, (byte) 0x1C, (byte) 0xDC, (byte) 0x14, (byte) 0xD4, (byte) 0xD5, (byte) 0x15, (byte) 0xD7, (byte) 0x17, (byte) 0x16, (byte) 0xD6, (byte) 0xD2, (byte) 0x12, (byte) 0x13, (byte) 0xD3, + (byte) 0x11, (byte) 0xD1, (byte) 0xD0, (byte) 0x10, (byte) 0xF0, (byte) 0x30, (byte) 0x31, (byte) 0xF1, (byte) 0x33, (byte) 0xF3, (byte) 0xF2, (byte) 0x32, (byte) 0x36, (byte) 0xF6, (byte) 0xF7, + (byte) 0x37, (byte) 0xF5, (byte) 0x35, (byte) 0x34, (byte) 0xF4, (byte) 0x3C, (byte) 0xFC, (byte) 0xFD, (byte) 0x3D, (byte) 0xFF, (byte) 0x3F, (byte) 0x3E, (byte) 0xFE, (byte) 0xFA, (byte) 0x3A, + (byte) 0x3B, (byte) 0xFB, (byte) 0x39, (byte) 0xF9, (byte) 0xF8, (byte) 0x38, (byte) 0x28, (byte) 0xE8, (byte) 0xE9, (byte) 0x29, (byte) 0xEB, (byte) 0x2B, (byte) 0x2A, (byte) 0xEA, (byte) 0xEE, + (byte) 0x2E, (byte) 0x2F, (byte) 0xEF, (byte) 0x2D, (byte) 0xED, (byte) 0xEC, (byte) 0x2C, (byte) 0xE4, (byte) 0x24, (byte) 0x25, (byte) 0xE5, (byte) 0x27, (byte) 0xE7, (byte) 0xE6, (byte) 0x26, + (byte) 0x22, (byte) 0xE2, (byte) 0xE3, (byte) 0x23, (byte) 0xE1, (byte) 0x21, (byte) 0x20, (byte) 0xE0, (byte) 0xA0, (byte) 0x60, (byte) 0x61, (byte) 0xA1, (byte) 0x63, (byte) 0xA3, (byte) 0xA2, + (byte) 0x62, (byte) 0x66, (byte) 0xA6, (byte) 0xA7, (byte) 0x67, (byte) 0xA5, (byte) 0x65, (byte) 0x64, (byte) 0xA4, (byte) 0x6C, (byte) 0xAC, (byte) 0xAD, (byte) 0x6D, (byte) 0xAF, (byte) 0x6F, + (byte) 0x6E, (byte) 0xAE, (byte) 0xAA, (byte) 0x6A, (byte) 0x6B, (byte) 0xAB, (byte) 0x69, (byte) 0xA9, (byte) 0xA8, (byte) 0x68, (byte) 0x78, (byte) 0xB8, (byte) 0xB9, (byte) 0x79, (byte) 0xBB, + (byte) 0x7B, (byte) 0x7A, (byte) 0xBA, (byte) 0xBE, (byte) 0x7E, (byte) 0x7F, (byte) 0xBF, (byte) 0x7D, (byte) 0xBD, (byte) 0xBC, (byte) 0x7C, (byte) 0xB4, (byte) 0x74, (byte) 0x75, (byte) 0xB5, + (byte) 0x77, (byte) 0xB7, (byte) 0xB6, (byte) 0x76, (byte) 0x72, (byte) 0xB2, (byte) 0xB3, (byte) 0x73, (byte) 0xB1, (byte) 0x71, (byte) 0x70, (byte) 0xB0, (byte) 0x50, (byte) 0x90, (byte) 0x91, + (byte) 0x51, (byte) 0x93, (byte) 0x53, (byte) 0x52, (byte) 0x92, (byte) 0x96, (byte) 0x56, (byte) 0x57, (byte) 0x97, (byte) 0x55, (byte) 0x95, (byte) 0x94, (byte) 0x54, (byte) 0x9C, (byte) 0x5C, + (byte) 0x5D, (byte) 0x9D, (byte) 0x5F, (byte) 0x9F, (byte) 0x9E, (byte) 0x5E, (byte) 0x5A, (byte) 0x9A, (byte) 0x9B, (byte) 0x5B, (byte) 0x99, (byte) 0x59, (byte) 0x58, (byte) 0x98, (byte) 0x88, + (byte) 0x48, (byte) 0x49, (byte) 0x89, (byte) 0x4B, (byte) 0x8B, (byte) 0x8A, (byte) 0x4A, (byte) 0x4E, (byte) 0x8E, (byte) 0x8F, (byte) 0x4F, (byte) 0x8D, (byte) 0x4D, (byte) 0x4C, (byte) 0x8C, + (byte) 0x44, (byte) 0x84, (byte) 0x85, (byte) 0x45, (byte) 0x87, (byte) 0x47, (byte) 0x46, (byte) 0x86, (byte) 0x82, (byte) 0x42, (byte) 0x43, (byte) 0x83, (byte) 0x41, (byte) 0x81, (byte) 0x80, + (byte) 0x40 + }; + short usDataLen = (short) numberOfBytes; + byte uchCRCHi = (byte) 0xFF; + byte uchCRCLo = (byte) 0xFF; + int i = 0; + int uIndex; + while (usDataLen > 0) { + usDataLen--; + uIndex = (int) (uchCRCLo ^ (int) data[i + startByte]); + if (uIndex < 0) + uIndex = 256 + uIndex; + uchCRCLo = (byte) (uchCRCHi ^ auchCRCHi[uIndex]); + uchCRCHi = (byte) auchCRCLo[uIndex]; + i++; + } + byte[] returnValue = {uchCRCLo, uchCRCHi}; + return returnValue; + } + + /** + * Read Discrete Inputs from Server + * + * @param startingAddress Fist Address to read; Shifted by -1 + * @param quantity Number of Inputs to read + * @return Discrete Inputs from Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public boolean[] ReadDiscreteInputs(int startingAddress, int quantity) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + if (tcpClientSocket == null) + throw new de.re.easymodbus.exceptions.ConnectionException("connection Error"); + if (startingAddress > 65535 | quantity > 2000) + throw new IllegalArgumentException("Starting adress must be 0 - 65535; quantity must be 0 - 2000"); + boolean[] response = null; + this.transactionIdentifier = toByteArray(0x0001); + this.protocolIdentifier = toByteArray(0x0000); + this.length = toByteArray(0x0006); + this.functionCode = 0x02; + this.startingAddress = toByteArray(startingAddress); + this.quantity = toByteArray(quantity); + byte[] data = new byte[] + { + this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + if (this.serialflag) { + crc = calculateCRC(data, 6, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[8]; + System.arraycopy(data, 6, serialdata, 0, 8); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 5 + quantity / 8 + 1; + if (quantity % 8 == 0) + expectedlength = 5 + quantity / 8; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + serialdata = new byte[256]; + } + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length - 2, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + + } + } + } + if (((int) (data[7] & 0xff)) == 0x82 & ((int) data[8]) == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x82 & ((int) data[8]) == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x82 & ((int) data[8]) == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x82 & ((int) data[8]) == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + response = new boolean[quantity]; + for (int i = 0; i < quantity; i++) { + int intData = data[9 + i / 8]; + int mask = (int) Math.pow(2, (i % 8)); + intData = ((intData & mask) / mask); + if (intData > 0) + response[i] = true; + else + response[i] = false; + } + + + return (response); + } + + + /** + * Read Coils from Server + * + * @param startingAddress Fist Address to read; Shifted by -1 + * @param quantity Number of Inputs to read + * @return coils from Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public boolean[] ReadCoils(int startingAddress, int quantity) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + if (tcpClientSocket == null) + throw new de.re.easymodbus.exceptions.ConnectionException("connection Error"); + if (startingAddress > 65535 | quantity > 2000) + throw new IllegalArgumentException("Starting adress must be 0 - 65535; quantity must be 0 - 2000"); + boolean[] response = new boolean[quantity]; + this.transactionIdentifier = toByteArray(0x0001); + this.protocolIdentifier = toByteArray(0x0000); + this.length = toByteArray(0x0006); + //this.unitIdentifier = 0x00; + this.functionCode = 0x01; + this.startingAddress = toByteArray(startingAddress); + this.quantity = toByteArray(quantity); + byte[] data = new byte[] + { + this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + if (this.serialflag) { + crc = calculateCRC(data, 6, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[8]; + System.arraycopy(data, 6, serialdata, 0, 8); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 5 + quantity / 8 + 1; + if (quantity % 8 == 0) + expectedlength = 5 + quantity / 8; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + serialdata = new byte[256]; + } + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + } + if (((int) (data[7] & 0xff)) == 0x81 & ((int) data[8]) == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x81 & ((int) data[8]) == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x81 & ((int) data[8]) == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x81 & ((int) data[8]) == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + for (int i = 0; i < quantity; i++) { + int intData = (int) data[9 + i / 8]; + int mask = (int) Math.pow(2, (i % 8)); + intData = ((intData & mask) / mask); + if (intData > 0) + response[i] = true; + else + response[i] = false; + } + + + return (response); + } + + + /** + * Read Holding Registers from Server + * + * @param startingAddress Fist Address to read; Shifted by -1 + * @param quantity Number of Inputs to read + * @return Holding Registers from Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public int[] ReadHoldingRegisters(int startingAddress, int quantity) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + if (tcpClientSocket == null) + throw new de.re.easymodbus.exceptions.ConnectionException("connection Error"); + if (startingAddress > 65535 | quantity > 125) + throw new IllegalArgumentException("Starting adress must be 0 - 65535; quantity must be 0 - 125"); + int[] response = new int[quantity]; + this.transactionIdentifier = toByteArray(0x0001); + this.protocolIdentifier = toByteArray(0x0000); + this.length = toByteArray(0x0006); + //serialdata = this.unitIdentifier; + this.functionCode = 0x03; + this.startingAddress = toByteArray(startingAddress); + this.quantity = toByteArray(quantity); + + byte[] data = new byte[] + { + this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + + if (this.serialflag) { + crc = calculateCRC(data, 6, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[8]; + System.arraycopy(data, 6, serialdata, 0, 8); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 5 + 2 * quantity; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + data = new byte[256]; + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + for (int i = 0; i < quantity; i++) { + byte[] bytes = new byte[2]; + bytes[0] = data[3 + i * 2]; + bytes[1] = data[3 + i * 2 + 1]; + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + response[i] = byteBuffer.getShort(); + } + } + + + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + } + if (((int) data[7]) == 0x83 & ((int) data[8]) == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) data[7]) == 0x83 & ((int) data[8]) == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) data[7]) == 0x83 & ((int) data[8]) == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) data[7]) == 0x83 & ((int) data[8]) == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + for (int i = 0; i < quantity; i++) { + byte[] bytes = new byte[2]; + bytes[0] = data[9 + i * 2]; + bytes[1] = data[9 + i * 2 + 1]; + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + + response[i] = byteBuffer.getShort(); + } + + + return (response); + } + + + /** + * Read Input Registers from Server + * + * @param startingAddress Fist Address to read; Shifted by -1 + * @param quantity Number of Inputs to read + * @return Input Registers from Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public int[] ReadInputRegisters(int startingAddress, int quantity) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + if (tcpClientSocket == null) + throw new de.re.easymodbus.exceptions.ConnectionException("connection Error"); + if (startingAddress > 65535 | quantity > 125) + throw new IllegalArgumentException("Starting adress must be 0 - 65535; quantity must be 0 - 125"); + int[] response = new int[quantity]; + this.transactionIdentifier = toByteArray(0x0001); + this.protocolIdentifier = toByteArray(0x0000); + this.length = toByteArray(0x0006); + //this.unitIdentifier = 0x00; + this.functionCode = 0x04; + this.startingAddress = toByteArray(startingAddress); + this.quantity = toByteArray(quantity); + byte[] data = new byte[] + { + this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + if (this.serialflag) { + crc = calculateCRC(data, 6, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[8]; + System.arraycopy(data, 6, serialdata, 0, 8); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 5 + 2 * quantity; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + data = new byte[256]; + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + for (int i = 0; i < quantity; i++) { + byte[] bytes = new byte[2]; + bytes[0] = data[3 + i * 2]; + bytes[1] = data[3 + i * 2 + 1]; + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + response[i] = byteBuffer.getShort(); + } + } + + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + if (((int) (data[7] & 0xff)) == 0x84 & ((int) data[8]) == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x84 & ((int) data[8]) == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x84 & ((int) data[8]) == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x84 & ((int) data[8]) == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + } + for (int i = 0; i < quantity; i++) { + byte[] bytes = new byte[2]; + bytes[0] = (byte) data[9 + i * 2]; + bytes[1] = (byte) data[9 + i * 2 + 1]; + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + response[i] = byteBuffer.getShort(); + } + + + return (response); + } + + /** + * Write Single Coil to Server + * + * @param startingAddress Address to write; Shifted by -1 + * @param value Value to write to Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public void WriteSingleCoil(int startingAddress, boolean value) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + if (tcpClientSocket == null & !udpFlag) + throw new de.re.easymodbus.exceptions.ConnectionException("connection error"); + byte[] coilValue = new byte[2]; + this.transactionIdentifier = toByteArray(0x0001); + this.protocolIdentifier = toByteArray(0x0000); + this.length = toByteArray(0x0006); + //this.unitIdentifier = 0; + this.functionCode = 0x05; + this.startingAddress = toByteArray(startingAddress); + if (value == true) { + coilValue = toByteArray((int) 0xFF00); + } else { + coilValue = toByteArray((int) 0x0000); + } + byte[] data = new byte[]{this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + coilValue[1], + coilValue[0], + this.crc[0], + this.crc[1] + }; + if (this.serialflag) { + crc = calculateCRC(data, 6, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[8]; + System.arraycopy(data, 6, serialdata, 0, 8); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 8; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + data = new byte[256]; + } + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + } + if (((int) (data[7] & 0xff)) == 0x85 & data[8] == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x85 & data[8] == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x85 & data[8] == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x85 & data[8] == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + } + + /** + * Write Single Register to Server + * + * @param startingAddress Address to write; Shifted by -1 + * @param value Value to write to Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public void WriteSingleRegister(int startingAddress, int value) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + if (tcpClientSocket == null & !udpFlag) + throw new de.re.easymodbus.exceptions.ConnectionException("connection error"); + byte[] registerValue = new byte[2]; + this.transactionIdentifier = toByteArray((int) 0x0001); + this.protocolIdentifier = toByteArray((int) 0x0000); + this.length = toByteArray((int) 0x0006); + this.functionCode = 0x06; + this.startingAddress = toByteArray(startingAddress); + registerValue = toByteArray((short) value); + + byte[] data = new byte[]{this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + registerValue[1], + registerValue[0], + this.crc[0], + this.crc[1] + }; + if (this.serialflag) { + crc = calculateCRC(data, 6, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[8]; + System.arraycopy(data, 6, serialdata, 0, 8); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 8; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + data = new byte[256]; + } + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + } + if (((int) (data[7] & 0xff)) == 0x86 & data[8] == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x86 & data[8] == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x86 & data[8] == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x86 & data[8] == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + } + + /** + * Write Multiple Coils to Server + * + * @param startingAddress Firts Address to write; Shifted by -1 + * @param values Values to write to Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public void WriteMultipleCoils(int startingAddress, boolean[] values) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + byte byteCount = (byte) (values.length / 8 + 1); + if (values.length % 8 == 0) + byteCount = (byte) (byteCount - 1); + byte[] quantityOfOutputs = toByteArray((int) values.length); + byte singleCoilValue = 0; + if (tcpClientSocket == null & !udpFlag) + throw new de.re.easymodbus.exceptions.ConnectionException("connection error"); + this.transactionIdentifier = toByteArray((int) 0x0001); + this.protocolIdentifier = toByteArray((int) 0x0000); + this.length = toByteArray((int) (7 + (values.length / 8 + 1))); + this.functionCode = 0x0F; + this.startingAddress = toByteArray(startingAddress); + + byte[] data = new byte[16 + byteCount - 1]; + data[0] = this.transactionIdentifier[1]; + data[1] = this.transactionIdentifier[0]; + data[2] = this.protocolIdentifier[1]; + data[3] = this.protocolIdentifier[0]; + data[4] = this.length[1]; + data[5] = this.length[0]; + data[6] = this.unitIdentifier; + data[7] = this.functionCode; + data[8] = this.startingAddress[1]; + data[9] = this.startingAddress[0]; + data[10] = quantityOfOutputs[1]; + data[11] = quantityOfOutputs[0]; + data[12] = byteCount; + for (int i = 0; i < values.length; i++) { + if ((i % 8) == 0) + singleCoilValue = 0; + byte CoilValue; + if (values[i] == true) + CoilValue = 1; + else + CoilValue = 0; + + + singleCoilValue = (byte) ((int) CoilValue << (i % 8) | (int) singleCoilValue); + + data[13 + (i / 8)] = singleCoilValue; + } + if (this.serialflag) { + crc = calculateCRC(data, data.length - 8, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[9 + byteCount]; + System.arraycopy(data, 6, serialdata, 0, 9 + byteCount); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 8; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + data = new byte[256]; + } + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + } + if (((int) (data[7] & 0xff)) == 0x8F & data[8] == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x8F & data[8] == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x8F & data[8] == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x8F & data[8] == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + } + + /** + * Write Multiple Registers to Server + * + * @param startingAddress Firts Address to write; Shifted by -1 + * @param values Values to write to Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public void WriteMultipleRegisters(int startingAddress, int[] values) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + byte byteCount = (byte) (values.length * 2); + byte[] quantityOfOutputs = toByteArray((int) values.length); + if (tcpClientSocket == null & !udpFlag) + throw new de.re.easymodbus.exceptions.ConnectionException("connection error"); + this.transactionIdentifier = toByteArray((int) 0x0001); + this.protocolIdentifier = toByteArray((int) 0x0000); + this.length = toByteArray((int) (7 + values.length * 2)); + this.functionCode = 0x10; + this.startingAddress = toByteArray(startingAddress); + + byte[] data = new byte[15 + values.length * 2]; + data[0] = this.transactionIdentifier[1]; + data[1] = this.transactionIdentifier[0]; + data[2] = this.protocolIdentifier[1]; + data[3] = this.protocolIdentifier[0]; + data[4] = this.length[1]; + data[5] = this.length[0]; + data[6] = this.unitIdentifier; + data[7] = this.functionCode; + data[8] = this.startingAddress[1]; + data[9] = this.startingAddress[0]; + data[10] = quantityOfOutputs[1]; + data[11] = quantityOfOutputs[0]; + data[12] = byteCount; + for (int i = 0; i < values.length; i++) { + byte[] singleRegisterValue = toByteArray((int) values[i]); + data[13 + i * 2] = singleRegisterValue[1]; + data[14 + i * 2] = singleRegisterValue[0]; + } + if (this.serialflag) { + crc = calculateCRC(data, data.length - 8, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[9 + byteCount]; + System.arraycopy(data, 6, serialdata, 0, 9 + byteCount); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 8; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + data = new byte[256]; + } + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + } + if (((int) (data[7] & 0xff)) == 0x90 & data[8] == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x90 & data[8] == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x90 & data[8] == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x90 & data[8] == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + } + + /** + * Read and Write Multiple Registers to Server + * + * @param startingAddressRead Firts Address to Read; Shifted by -1 + * @param quantityRead Number of Values to Read + * @param startingAddressWrite Firts Address to write; Shifted by -1 + * @param values Values to write to Server + * @return Register Values from Server + * @throws ModbusException + * @throws UnknownHostException + * @throws SocketException + * @throws SerialPortTimeoutException + * @throws SerialPortException + */ + public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRead, int startingAddressWrite, int[] values) throws ModbusException, + UnknownHostException, SocketException, IOException, SerialPortException, SerialPortTimeoutException { + byte[] startingAddressReadLocal = new byte[2]; + byte[] quantityReadLocal = new byte[2]; + byte[] startingAddressWriteLocal = new byte[2]; + byte[] quantityWriteLocal = new byte[2]; + byte writeByteCountLocal = 0; + if (tcpClientSocket == null & !udpFlag) + throw new de.re.easymodbus.exceptions.ConnectionException("connection error"); + if (startingAddressRead > 65535 | quantityRead > 125 | startingAddressWrite > 65535 | values.length > 121) + throw new IllegalArgumentException("Starting address must be 0 - 65535; quantity must be 0 - 125"); + int[] response; + this.transactionIdentifier = toByteArray((int) 0x0001); + this.protocolIdentifier = toByteArray((int) 0x0000); + this.length = toByteArray((int) 0x0006); + this.functionCode = 0x17; + startingAddressReadLocal = toByteArray(startingAddressRead); + quantityReadLocal = toByteArray(quantityRead); + startingAddressWriteLocal = toByteArray(startingAddressWrite); + quantityWriteLocal = toByteArray(values.length); + writeByteCountLocal = (byte) (values.length * 2); + byte[] data = new byte[19 + values.length * 2]; + data[0] = this.transactionIdentifier[1]; + data[1] = this.transactionIdentifier[0]; + data[2] = this.protocolIdentifier[1]; + data[3] = this.protocolIdentifier[0]; + data[4] = this.length[1]; + data[5] = this.length[0]; + data[6] = this.unitIdentifier; + data[7] = this.functionCode; + data[8] = startingAddressReadLocal[1]; + data[9] = startingAddressReadLocal[0]; + data[10] = quantityReadLocal[1]; + data[11] = quantityReadLocal[0]; + data[12] = startingAddressWriteLocal[1]; + data[13] = startingAddressWriteLocal[0]; + data[14] = quantityWriteLocal[1]; + data[15] = quantityWriteLocal[0]; + data[16] = writeByteCountLocal; + + for (int i = 0; i < values.length; i++) { + byte[] singleRegisterValue = toByteArray((int) values[i]); + data[17 + i * 2] = singleRegisterValue[1]; + data[18 + i * 2] = singleRegisterValue[0]; + } + if (this.serialflag) { + crc = calculateCRC(data, data.length - 8, 6); + data[data.length - 2] = crc[0]; + data[data.length - 1] = crc[1]; + } + byte[] serialdata = null; + if (serialflag) { + serialdata = new byte[13 + writeByteCountLocal]; + System.arraycopy(data, 6, serialdata, 0, 13 + writeByteCountLocal); + serialPort.purgePort(SerialPort.PURGE_RXCLEAR); + serialPort.writeBytes(serialdata); + if (debug) StoreLogData.getInstance().Store("Send Serial-Data: " + Arrays.toString(serialdata)); + long dateTimeSend = DateTime.getDateTimeTicks(); + byte receivedUnitIdentifier = (byte) 0xFF; + serialdata = new byte[256]; + int expectedlength = 5 + quantityRead; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.getDateTimeTicks() - dateTimeSend) > 10000 * this.connectTimeout)) { + serialdata = serialPort.readBytes(expectedlength, this.connectTimeout); + + receivedUnitIdentifier = serialdata[0]; + } + if (receivedUnitIdentifier != this.unitIdentifier) { + data = new byte[256]; + } + } + if (serialdata != null) { + data = new byte[262]; + System.arraycopy(serialdata, 0, data, 6, serialdata.length); + if (debug) StoreLogData.getInstance().Store("Receive ModbusRTU-Data: " + Arrays.toString(data)); + } + if (tcpClientSocket.isConnected() | udpFlag) { + if (udpFlag) { + InetAddress ipAddress = InetAddress.getByName(this.ipAddress); + DatagramPacket sendPacket = new DatagramPacket(data, data.length, ipAddress, this.port); + DatagramSocket clientSocket = new DatagramSocket(); + clientSocket.setSoTimeout(500); + clientSocket.send(sendPacket); + data = new byte[2100]; + DatagramPacket receivePacket = new DatagramPacket(data, data.length); + clientSocket.receive(receivePacket); + clientSocket.close(); + data = receivePacket.getData(); + } else { + outStream.write(data, 0, data.length - 2); + if (debug) StoreLogData.getInstance().Store("Send ModbusTCP-Data: " + Arrays.toString(data)); + if (sendDataChangedListener.size() > 0) { + sendData = new byte[data.length - 2]; + System.arraycopy(data, 0, sendData, 0, data.length - 2); + for (SendDataChangedListener hl : sendDataChangedListener) + hl.SendDataChanged(); + } + data = new byte[2100]; + int numberOfBytes = inStream.read(data, 0, data.length); + if (receiveDataChangedListener.size() > 0) { + receiveData = new byte[numberOfBytes]; + System.arraycopy(data, 0, receiveData, 0, numberOfBytes); + for (ReceiveDataChangedListener hl : receiveDataChangedListener) + hl.ReceiveDataChanged(); + if (debug) StoreLogData.getInstance().Store("Receive ModbusTCP-Data: " + Arrays.toString(data)); + } + } + } + if (((int) (data[7] & 0xff)) == 0x97 & data[8] == 0x01) { + if (debug) StoreLogData.getInstance().Store("FunctionCodeNotSupportedException Throwed"); + throw new de.re.easymodbus.exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (((int) (data[7] & 0xff)) == 0x97 & data[8] == 0x02) { + if (debug) + StoreLogData.getInstance().Store("Starting adress invalid or starting adress + quantity invalid"); + throw new de.re.easymodbus.exceptions.StartingAddressInvalidException("Starting adress invalid or starting adress + quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x97 & data[8] == 0x03) { + if (debug) StoreLogData.getInstance().Store("Quantity invalid"); + throw new de.re.easymodbus.exceptions.QuantityInvalidException("Quantity invalid"); + } + if (((int) (data[7] & 0xff)) == 0x97 & data[8] == 0x04) { + if (debug) StoreLogData.getInstance().Store("Error reading"); + throw new ModbusException("Error reading"); + } + response = new int[quantityRead]; + for (int i = 0; i < quantityRead; i++) { + byte lowByte; + byte highByte; + highByte = data[9 + i * 2]; + lowByte = data[9 + i * 2 + 1]; + + byte[] bytes = new byte[]{highByte, lowByte}; + + + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); + response[i] = byteBuffer.getShort(); + } + return (response); + } + + /** + * Close connection to Server + * + * @throws IOException + * @throws SerialPortException + */ + public void Disconnect() throws IOException, SerialPortException { + if (!serialflag) { + if (inStream != null) + inStream.close(); + if (outStream != null) + outStream.close(); + if (tcpClientSocket != null) + tcpClientSocket.close(); + tcpClientSocket = null; + + } else { + if (serialPort != null) { + serialPort.closePort(); + } + + } + } + + + public static byte[] toByteArray(int value) { + byte[] result = new byte[2]; + result[1] = (byte) (value >> 8); + result[0] = (byte) (value); + return result; + } + + public static byte[] toByteArrayInt(int value) { + return ByteBuffer.allocate(4).putInt(value).array(); + } + + public static byte[] toByteArrayLong(long value) { + return ByteBuffer.allocate(8).putLong(value).array(); + } + + public static byte[] toByteArrayDouble(double value) { + return ByteBuffer.allocate(8).putDouble(value).array(); + } + + public static byte[] toByteArray(float value) { + return ByteBuffer.allocate(4).putFloat(value).array(); + } + + /** + * client connected to Server + * + * @return if Client is connected to Server + */ + public boolean isConnected() { + if (serialflag) { + if (serialPort == null) + return false; + if (serialPort.isOpened()) + return true; + else + return false; + } + + boolean returnValue = false; + if (tcpClientSocket == null) + returnValue = false; + else { + if (tcpClientSocket.isConnected()) + returnValue = true; + else + returnValue = false; + } + return returnValue; + } + + public boolean Available(int timeout) { + InetAddress address; + try { + address = InetAddress.getByName(this.ipAddress); + boolean reachable = address.isReachable(timeout); + return reachable; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + + } + + + /** + * Returns ip Address of Server + * + * @return ip address of server + */ + public String getipAddress() { + return ipAddress; + } + + /** + * sets IP-Address of server + * + * @param ipAddress ipAddress of Server + */ + public void setipAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + /** + * Returns port of Server listening + * + * @return port of Server listening + */ + public int getPort() { + return port; + } + + /** + * sets Portof server + * + * @param port Port of Server + */ + public void setPort(int port) { + this.port = port; + } + + /** + * Returns UDP-Flag which enables Modbus UDP and disabled Modbus TCP + * + * @return UDP Flag + */ + public boolean getUDPFlag() { + return udpFlag; + } + + /** + * sets UDP-Flag which enables Modbus UDP and disables Mopdbus TCP + * + * @param udpFlag UDP Flag + */ + public void setUDPFlag(boolean udpFlag) { + this.udpFlag = udpFlag; + } + + public int getConnectionTimeout() { + return connectTimeout; + } + + public void setConnectionTimeout(int connectionTimeout) { + this.connectTimeout = connectionTimeout; + } + + public void setSerialFlag(boolean serialflag) { + this.serialflag = serialflag; + } + + public boolean getSerialFlag() { + return this.serialflag; + } + + public void setUnitIdentifier(short unitIdentifier) { + this.unitIdentifier = (byte) unitIdentifier; + } + + public short getUnitIdentifier() { + return this.unitIdentifier; + } + + + /** + * Sets and enables the Logfilename which writes information about received and send messages to File + * + * @param logFileName File name to log files + */ + public void setLogFileName(String logFileName) { + StoreLogData.getInstance().setFilename(logFileName); + debug = true; + } + + /** + * Sets the Name of the serial port + * + * @param serialPort Name of the Serial port + */ + public void setSerialPort(String serialPort) { + this.serialflag = true; + this.comPort = serialPort; + } + + /** + * @return the Name of the Serial port + */ + public String getSerialPort() { + return this.comPort; + } + + /** + * Sets the Baudrate for Serial connection (Modbus RTU) + * + * @param baudrate Sets the Baudrate for Serial connection (Modbus RTU) + */ + public void setBaudrate(int baudrate) { + this.baudrate = baudrate; + } + + /** + * returns the Baudrate for Serial connection (Modbus RTU) + * + * @return returns the Baudrate for Serial connection (Modbus RTU) + */ + public int getBaudrate() { + return this.baudrate; + } + + /** + * sets the Parity for Serial connection (Modbus RTU) + * + * @param parity sets the Parity for Serial connection (Modbus RTU) + */ + public void setParity(Parity parity) { + this.parity = parity; + } + + /** + * returns the Parity for Serial connection (Modbus RTU) + * + * @return returns the Parity for Serial connection (Modbus RTU) + */ + public Parity getParity() { + return this.parity; + } + + /** + * sets the stopbots for serial connection (Modbus RTU) + * + * @param stopBits sets the Stopbits for serial connection (Modbus RTU) + */ + public void setStopBits(StopBits stopBits) { + this.stopBits = stopBits; + } + + /** + * returns the Stopbits for serial connection (Modbus RTU) + * + * @return returns the Stopbits for serial connection (Modbus RTU) + */ + public StopBits getStopBits() { + return this.stopBits; + } + + public void addReveiveDataChangedListener(ReceiveDataChangedListener toAdd) { + receiveDataChangedListener.add(toAdd); + } + + public void addSendDataChangedListener(SendDataChangedListener toAdd) { + sendDataChangedListener.add(toAdd); + } + +} \ No newline at end of file diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/ReceiveDataChangedListener.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/ReceiveDataChangedListener.java new file mode 100644 index 0000000000000000000000000000000000000000..fa7bf3a66929931f77b5874a272ea5449a37bf62 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/ReceiveDataChangedListener.java @@ -0,0 +1,27 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusclient; + +public interface ReceiveDataChangedListener { + void ReceiveDataChanged(); + +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/SendDataChangedListener.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/SendDataChangedListener.java new file mode 100644 index 0000000000000000000000000000000000000000..3aa91e3ee4f849d06d4b7167b1d9a84a8b508a1d --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/SendDataChangedListener.java @@ -0,0 +1,26 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusclient; + +public interface SendDataChangedListener { + void SendDataChanged(); +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/StoreLogData.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/StoreLogData.java new file mode 100644 index 0000000000000000000000000000000000000000..be2ad073232009ddf5e66148e2ac8d1c885c5112 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/StoreLogData.java @@ -0,0 +1,102 @@ +package de.re.easymodbus.modbusclient; + +import java.io.*; + +/** + * Stores Log Data is a File. The Data will be stored in the File logDataYYYYMMDD.txt + * Example: logData20170403.txt + * + * @author Stefan Rossmann + */ + +public class StoreLogData { + + FileWriter fileWriter = null; + private String filename = null; + + private static StoreLogData instance; + + /** + * Default constructor + * + * @throws IOException + */ + private StoreLogData() { + + } + + /** + * Store into LogData into File + * + * @param message Message to write into LogFile + */ + public synchronized void Store(String message) { + try { + fileWriter = new FileWriter(filename, true); + while (!new File(filename).canWrite()) ; + fileWriter.append(DateTime.getDateTimeStringMilliseconds() + " " + message + System.lineSeparator()); + + } catch (IOException e) { + + e.printStackTrace(); + } finally { + + if (fileWriter != null) + try { + fileWriter.close(); + ; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + + /** + * Store into Exception into File + * + * @param message Message to write into LogFile + * @param e Stack Trace of Exception will be stored + */ + public void Store(String message, Exception e) { + e.printStackTrace(); + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw)); + String exceptionAsString = sw.toString(); + FileWriter fileWriter = null; + try { + fileWriter = new FileWriter(filename, true); + fileWriter.append(DateTime.getDateTimeStringMilliseconds() + " " + message + " " + exceptionAsString + System.lineSeparator()); + + } catch (IOException exc) { + exc.printStackTrace(); + } finally { + if (fileWriter != null) + try { + fileWriter.close(); + } catch (IOException exc) { + // TODO Auto-generated catch block + exc.printStackTrace(); + } + } + } + + public void setFilename(String filename) { + this.filename = filename; + } + + + /** + * Returns the instance of the class (Singleton) + */ + public static synchronized StoreLogData getInstance() { + if (StoreLogData.instance == null) { + StoreLogData.instance = new StoreLogData(); + + } + return StoreLogData.instance; + } + + +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTCPClientExampleGUI.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTCPClientExampleGUI.java new file mode 100644 index 0000000000000000000000000000000000000000..9c809c5d887ea4df0ea79145088c374fd11a3148 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTCPClientExampleGUI.java @@ -0,0 +1,579 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusclient.gui; + +import de.re.easymodbus.modbusclient.ModbusClient; +import de.re.easymodbus.modbusclient.ReceiveDataChangedListener; +import de.re.easymodbus.modbusclient.SendDataChangedListener; + +import javax.swing.*; +import javax.swing.GroupLayout.Alignment; +import javax.swing.LayoutStyle.ComponentPlacement; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +/** + * @author Stefan Ro�mann + */ +@SuppressWarnings("serial") +public class EasyModbusTCPClientExampleGUI extends JFrame + implements ReceiveDataChangedListener, SendDataChangedListener { + JComboBox comboBox; + /** + * Creates new form EasyModbusTCPClientExampleGUI + */ + private ModbusClient modbusClient; + + public EasyModbusTCPClientExampleGUI() { + + + initComponents(); + modbusClient = new ModbusClient(); + modbusClient.addReveiveDataChangedListener(this); + modbusClient.addSendDataChangedListener(this); + } + + public void ReceiveDataChanged() { + jTextArea1.append("Rx:"); + for (int i = 0; i < modbusClient.receiveData.length; i++) { + jTextArea1.append(" "); + if (modbusClient.receiveData[i] < 16) + jTextArea1.append("0"); + jTextArea1.append(Integer.toHexString(modbusClient.receiveData[i])); + + } + jTextArea1.append("\n"); + } + + public void SendDataChanged() { + jTextArea1.append("Tx:"); + for (int i = 0; i < modbusClient.sendData.length; i++) { + jTextArea1.append(" "); + if (modbusClient.sendData[i] < 16) + jTextArea1.append("0"); + jTextArea1.append(Integer.toHexString(modbusClient.sendData[i])); + } + jTextArea1.append("\n"); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + jLabel1 = new JLabel(); + jButton1 = new JButton(); + jButton1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + } + }); + jButton2 = new JButton(); + jButton3 = new JButton(); + jButton4 = new JButton(); + jPanel1 = new JPanel(); + jLabel5 = new JLabel(); + jTextFieldStartingAddress = new JTextField(); + jLabel6 = new JLabel(); + jTextFieldNumberOfValues = new JTextField(); + jScrollPane1 = new JScrollPane(); + jList1 = new JList(); + jLabel2 = new JLabel(); + jScrollPane2 = new JScrollPane(); + + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + jLabel1.setToolTipText(""); + jLabel1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jLabel1MouseClicked(evt); + } + }); + + jButton1.setText("Read Coils - FC1"); + jButton1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton1MouseClicked(evt); + } + }); + + jButton2.setText("Read Discrete Inputs - FC2"); + jButton2.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton2MouseClicked(evt); + } + }); + + jButton3.setText("Read Holding Registers - FC3"); + jButton3.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton3MouseClicked(evt); + } + }); + + jButton4.setText("Read Input Registers - FC4"); + jButton4.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton4MouseClicked(evt); + } + }); + + jLabel5.setText("Starting Address"); + + jTextFieldStartingAddress.setText("1"); + + jLabel6.setText("Number of Values"); + + jTextFieldNumberOfValues.setText("1"); + + jScrollPane1.setViewportView(jList1); + + jLabel2.setForeground(new java.awt.Color(0, 0, 204)); + jLabel2.setText("http://www.EasyModbusTCP.net"); + GroupLayout jPanel1Layout = new GroupLayout(jPanel1); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(Alignment.TRAILING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addComponent(jLabel5) + .addComponent(jLabel6) + .addComponent(jTextFieldStartingAddress, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextFieldNumberOfValues, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE)) + .addGap(10) + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(jLabel2) + .addGap(73))) + .addContainerGap()) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel2) + .addGap(56) + .addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel5) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jTextFieldStartingAddress, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(jLabel6) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jTextFieldNumberOfValues, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 155, GroupLayout.PREFERRED_SIZE)) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel1.setLayout(jPanel1Layout); + + comboBox = new JComboBox(); + comboBox.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent arg0) { + if ((String) (arg0.getItem()) == "Modbus TCP") { + modbusClient = new ModbusClient(); + jpModbusTCP.setVisible(true); + jpModbusRTU.setVisible(false); + } else { + modbusClient = new ModbusClient(); + jpModbusRTU.setVisible(true); + jpModbusTCP.setVisible(false); + } + } + }); + comboBox.setModel(new DefaultComboBoxModel(new String[]{"Modbus TCP", "Modbus RTU"})); + + jpModbusTCP = new JPanel(); + + jpModbusRTU = new JPanel(); + jpModbusRTU.setVisible(false); + + lblComport = new JLabel(); + lblComport.setText("COM-Port"); + + txtCom = new JTextField(); + txtCom.setToolTipText(""); + txtCom.setText("COM1"); + + textField_1 = new JTextField(); + textField_1.setText("1"); + + lblSlaveid = new JLabel(); + lblSlaveid.setText("Slave-ID"); + GroupLayout gl_jpModbusRTU = new GroupLayout(jpModbusRTU); + gl_jpModbusRTU.setHorizontalGroup( + gl_jpModbusRTU.createParallelGroup(Alignment.LEADING) + .addGap(0, 174, Short.MAX_VALUE) + .addGroup(Alignment.TRAILING, gl_jpModbusRTU.createSequentialGroup() + .addContainerGap() + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.LEADING) + .addComponent(lblComport) + .addComponent(txtCom, GroupLayout.PREFERRED_SIZE, 108, GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.TRAILING) + .addGroup(gl_jpModbusRTU.createSequentialGroup() + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(lblSlaveid, GroupLayout.DEFAULT_SIZE, 46, Short.MAX_VALUE)) + .addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 46, GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + gl_jpModbusRTU.setVerticalGroup( + gl_jpModbusRTU.createParallelGroup(Alignment.LEADING) + .addGap(0, 51, Short.MAX_VALUE) + .addGroup(gl_jpModbusRTU.createSequentialGroup() + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.BASELINE) + .addComponent(lblComport) + .addComponent(lblSlaveid)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.BASELINE) + .addComponent(textField_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(txtCom, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + jpModbusRTU.setLayout(gl_jpModbusRTU); + jTextArea1 = new JTextArea(); + + jTextArea1.setEditable(false); + jTextArea1.setBackground(new java.awt.Color(204, 204, 204)); + jTextArea1.setColumns(20); + jTextArea1.setRows(5); + GroupLayout groupLayout = new GroupLayout(getContentPane()); + groupLayout.setHorizontalGroup( + groupLayout.createParallelGroup(Alignment.LEADING) + .addGroup(groupLayout.createSequentialGroup() + .addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false) + .addComponent(jLabel1) + .addGroup(groupLayout.createSequentialGroup() + .addGap(10) + .addComponent(comboBox, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE)) + .addGroup(groupLayout.createSequentialGroup() + .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) + .addGroup(groupLayout.createSequentialGroup() + .addGap(10) + .addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false) + .addGroup(groupLayout.createSequentialGroup() + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jButton1, GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE)) + .addComponent(jButton2, GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE) + .addComponent(jButton3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jButton4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(groupLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jpModbusRTU, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE)) + .addGroup(groupLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jpModbusTCP, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jPanel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addGroup(groupLayout.createSequentialGroup() + .addGap(10) + .addComponent(jScrollPane2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jTextArea1, GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE))) + .addContainerGap()) + ); + groupLayout.setVerticalGroup( + groupLayout.createParallelGroup(Alignment.LEADING) + .addGroup(groupLayout.createSequentialGroup() + .addComponent(jLabel1) + .addGap(11) + .addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGap(7) + .addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false) + .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(groupLayout.createSequentialGroup() + .addComponent(jpModbusTCP, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGap(2) + .addComponent(jpModbusRTU, GroupLayout.PREFERRED_SIZE, 51, GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(jButton1) + .addGap(11) + .addComponent(jButton2) + .addGap(11) + .addComponent(jButton3) + .addGap(11) + .addComponent(jButton4))) + .addGap(6) + .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) + .addComponent(jScrollPane2, GroupLayout.PREFERRED_SIZE, 103, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextArea1, GroupLayout.PREFERRED_SIZE, 101, GroupLayout.PREFERRED_SIZE))) + ); + jLabel3 = new JLabel(); + + jLabel3.setText("IP-Address"); + jLabel4 = new JLabel(); + + jLabel4.setText("Port"); + jTextFieldIPAddress = new JTextField(); + + jTextFieldIPAddress.setText("127.0.0.1"); + jTextFieldIPAddress.setToolTipText(""); + jTextFieldPort = new JTextField(); + + jTextFieldPort.setText("502"); + GroupLayout gl_jpModbusTCP = new GroupLayout(jpModbusTCP); + gl_jpModbusTCP.setHorizontalGroup( + gl_jpModbusTCP.createParallelGroup(Alignment.LEADING) + .addGroup(gl_jpModbusTCP.createSequentialGroup() + .addContainerGap() + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.LEADING) + .addComponent(jTextFieldIPAddress, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel3)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.LEADING) + .addComponent(jLabel4) + .addComponent(jTextFieldPort, GroupLayout.PREFERRED_SIZE, 46, GroupLayout.PREFERRED_SIZE)) + .addGap(2)) + ); + gl_jpModbusTCP.setVerticalGroup( + gl_jpModbusTCP.createParallelGroup(Alignment.LEADING) + .addGroup(gl_jpModbusTCP.createSequentialGroup() + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(jLabel4)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.BASELINE) + .addComponent(jTextFieldIPAddress, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextFieldPort, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + jpModbusTCP.setLayout(gl_jpModbusTCP); + getContentPane().setLayout(groupLayout); + + pack(); + }// //GEN-END:initComponents + + private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseClicked + if (java.awt.Desktop.isDesktopSupported()) { + java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); + if (desktop.isSupported(java.awt.Desktop.Action.BROWSE)) { + try { + desktop.browse(new java.net.URI("www.easymodbustcp.net")); + } catch (java.io.IOException e) { + e.printStackTrace(); + } catch (java.net.URISyntaxException e) { + e.printStackTrace(); + } + } + } + }//GEN-LAST:event_jLabel1MouseClicked + + private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.setUnitIdentifier(Short.valueOf(textField_1.getText())); + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + boolean[] serverResponse = modbusClient.ReadCoils(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton1MouseClicked + + private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.setUnitIdentifier(Short.valueOf(textField_1.getText())); + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + boolean[] serverResponse = modbusClient.ReadDiscreteInputs(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error ", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton2MouseClicked + + private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton3MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.setUnitIdentifier(Short.valueOf(textField_1.getText())); + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + int[] serverResponse = modbusClient.ReadHoldingRegisters(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton3MouseClicked + + private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton4MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.setUnitIdentifier(Short.valueOf(textField_1.getText())); + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + int[] serverResponse = modbusClient.ReadInputRegisters(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton4MouseClicked + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(EasyModbusTCPClientExampleGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(EasyModbusTCPClientExampleGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(EasyModbusTCPClientExampleGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(EasyModbusTCPClientExampleGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new EasyModbusTCPClientExampleGUI().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private JButton jButton1; + private JButton jButton2; + private JButton jButton3; + private JButton jButton4; + private JLabel jLabel1; + private JLabel jLabel2; + private JLabel jLabel3; + private JLabel jLabel4; + private JLabel jLabel5; + private JLabel jLabel6; + private JList jList1; + private JPanel jPanel1; + private JScrollPane jScrollPane1; + private JScrollPane jScrollPane2; + private JTextArea jTextArea1; + private JTextField jTextFieldIPAddress; + private JTextField jTextFieldNumberOfValues; + private JTextField jTextFieldPort; + private JTextField jTextFieldStartingAddress; + private JPanel jpModbusTCP; + private JPanel jpModbusRTU; + private JLabel lblComport; + private JTextField txtCom; + private JTextField textField_1; + private JLabel lblSlaveid; +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTCPClientExampleJava.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTCPClientExampleJava.java new file mode 100644 index 0000000000000000000000000000000000000000..414442cacb3f2a8c8a9a2e9ef48bbdb3d421a6d8 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTCPClientExampleJava.java @@ -0,0 +1,37 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusclient.gui; + +/** + * @author srossmann + */ +public class EasyModbusTCPClientExampleJava { + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + EasyModbusTCPClientExampleGUI _easyModbusTCPClientExampleGUI = new EasyModbusTCPClientExampleGUI(); + _easyModbusTCPClientExampleGUI.setVisible(true); + } + +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTcpClient.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTcpClient.java new file mode 100644 index 0000000000000000000000000000000000000000..786e615c141ad9ee57631eeefd259a6328d3d411 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/EasyModbusTcpClient.java @@ -0,0 +1,566 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusclient.gui; + +import de.re.easymodbus.modbusclient.ModbusClient; +import de.re.easymodbus.modbusclient.ReceiveDataChangedListener; +import de.re.easymodbus.modbusclient.SendDataChangedListener; + +import javax.swing.*; +import javax.swing.GroupLayout.Alignment; +import javax.swing.LayoutStyle.ComponentPlacement; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +/** + * @author Stefan Ro�mann + */ +@SuppressWarnings("serial") +public class EasyModbusTcpClient extends JFrame + implements ReceiveDataChangedListener, SendDataChangedListener { + JComboBox comboBox; + /** + * Creates new form EasyModbusTCPClientExampleGUI + */ + private ModbusClient modbusClient; + + public EasyModbusTcpClient() { + initComponents(); + modbusClient = new ModbusClient(); + modbusClient.addReveiveDataChangedListener(this); + modbusClient.addSendDataChangedListener(this); + } + + public void ReceiveDataChanged() { + jTextArea1.append("Rx:"); + for (int i = 0; i < modbusClient.receiveData.length; i++) { + jTextArea1.append(" "); + if (modbusClient.receiveData[i] < 16) + jTextArea1.append("0"); + jTextArea1.append(Integer.toHexString(modbusClient.receiveData[i])); + + } + jTextArea1.append("\n"); + } + + public void SendDataChanged() { + jTextArea1.append("Tx:"); + for (int i = 0; i < modbusClient.sendData.length; i++) { + jTextArea1.append(" "); + if (modbusClient.sendData[i] < 16) + jTextArea1.append("0"); + jTextArea1.append(Integer.toHexString(modbusClient.sendData[i])); + } + jTextArea1.append("\n"); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + jLabel1 = new JLabel(); + jButton1 = new JButton(); + jButton2 = new JButton(); + jButton3 = new JButton(); + jButton4 = new JButton(); + jPanel1 = new JPanel(); + jLabel5 = new JLabel(); + jTextFieldStartingAddress = new JTextField(); + jLabel6 = new JLabel(); + jTextFieldNumberOfValues = new JTextField(); + jScrollPane1 = new JScrollPane(); + jList1 = new JList(); + jLabel2 = new JLabel(); + jScrollPane2 = new JScrollPane(); + + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + jLabel1.setToolTipText(""); + jLabel1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jLabel1MouseClicked(evt); + } + }); + + jButton1.setText("Read Coils - FC1"); + jButton1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton1MouseClicked(evt); + } + }); + + jButton2.setText("Read Discrete Inputs - FC2"); + jButton2.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton2MouseClicked(evt); + } + }); + + jButton3.setText("Read Holding Registers - FC3"); + jButton3.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton3MouseClicked(evt); + } + }); + + jButton4.setText("Read Input Registers - FC4"); + jButton4.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton4MouseClicked(evt); + } + }); + + jLabel5.setText("Starting Address"); + + jTextFieldStartingAddress.setText("1"); + + jLabel6.setText("Number of Values"); + + jTextFieldNumberOfValues.setText("1"); + + jScrollPane1.setViewportView(jList1); + + jLabel2.setForeground(new java.awt.Color(0, 0, 204)); + jLabel2.setText("http://www.EasyModbusTCP.net"); + GroupLayout jPanel1Layout = new GroupLayout(jPanel1); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addComponent(jLabel5) + .addComponent(jLabel6) + .addComponent(jTextFieldStartingAddress, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextFieldNumberOfValues, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE)) + .addGap(10) + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) + .addComponent(jLabel2)) + .addContainerGap()) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(21) + .addComponent(jLabel2) + .addGap(46) + .addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel5) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jTextFieldStartingAddress, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(jLabel6) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jTextFieldNumberOfValues, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 155, GroupLayout.PREFERRED_SIZE)) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel1.setLayout(jPanel1Layout); + + comboBox = new JComboBox(); + comboBox.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent arg0) { + if ((String) (arg0.getItem()) == "Modbus TCP") { + modbusClient = new ModbusClient(); + jpModbusTCP.setVisible(true); + jpModbusRTU.setVisible(false); + } else { + modbusClient = new ModbusClient(); + jpModbusRTU.setVisible(true); + jpModbusTCP.setVisible(false); + } + } + }); + comboBox.setModel(new DefaultComboBoxModel(new String[]{"Modbus TCP", "Modbus RTU"})); + + jpModbusTCP = new JPanel(); + + jpModbusRTU = new JPanel(); + jpModbusRTU.setVisible(false); + + lblComport = new JLabel(); + lblComport.setText("COM-Port"); + + txtCom = new JTextField(); + txtCom.setToolTipText(""); + txtCom.setText("COM1"); + + textField_1 = new JTextField(); + textField_1.setText("1"); + + lblSlaveid = new JLabel(); + lblSlaveid.setText("Slave-ID"); + GroupLayout gl_jpModbusRTU = new GroupLayout(jpModbusRTU); + gl_jpModbusRTU.setHorizontalGroup( + gl_jpModbusRTU.createParallelGroup(Alignment.LEADING) + .addGap(0, 174, Short.MAX_VALUE) + .addGroup(Alignment.TRAILING, gl_jpModbusRTU.createSequentialGroup() + .addContainerGap() + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.LEADING) + .addComponent(lblComport) + .addComponent(txtCom, GroupLayout.PREFERRED_SIZE, 108, GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.TRAILING) + .addGroup(gl_jpModbusRTU.createSequentialGroup() + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(lblSlaveid, GroupLayout.DEFAULT_SIZE, 46, Short.MAX_VALUE)) + .addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 46, GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + gl_jpModbusRTU.setVerticalGroup( + gl_jpModbusRTU.createParallelGroup(Alignment.LEADING) + .addGap(0, 51, Short.MAX_VALUE) + .addGroup(gl_jpModbusRTU.createSequentialGroup() + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.BASELINE) + .addComponent(lblComport) + .addComponent(lblSlaveid)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_jpModbusRTU.createParallelGroup(Alignment.BASELINE) + .addComponent(textField_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(txtCom, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + jpModbusRTU.setLayout(gl_jpModbusRTU); + jTextArea1 = new JTextArea(); + + jTextArea1.setEditable(false); + jTextArea1.setBackground(new java.awt.Color(204, 204, 204)); + jTextArea1.setColumns(20); + jTextArea1.setRows(5); + GroupLayout groupLayout = new GroupLayout(getContentPane()); + groupLayout.setHorizontalGroup( + groupLayout.createParallelGroup(Alignment.LEADING) + .addGroup(groupLayout.createSequentialGroup() + .addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false) + .addComponent(jLabel1) + .addGroup(groupLayout.createSequentialGroup() + .addGap(10) + .addComponent(comboBox, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE)) + .addGroup(groupLayout.createSequentialGroup() + .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) + .addGroup(groupLayout.createSequentialGroup() + .addGap(10) + .addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false) + .addGroup(groupLayout.createSequentialGroup() + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jButton1, GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE)) + .addComponent(jButton2, GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE) + .addComponent(jButton3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jButton4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(groupLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jpModbusTCP, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE)) + .addGroup(groupLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jpModbusRTU, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jPanel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addGroup(groupLayout.createSequentialGroup() + .addGap(10) + .addComponent(jScrollPane2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jTextArea1))) + .addContainerGap()) + ); + groupLayout.setVerticalGroup( + groupLayout.createParallelGroup(Alignment.LEADING) + .addGroup(groupLayout.createSequentialGroup() + .addComponent(jLabel1) + .addGap(11) + .addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGap(7) + .addGroup(groupLayout.createParallelGroup(Alignment.TRAILING, false) + .addComponent(jPanel1, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(Alignment.LEADING, groupLayout.createSequentialGroup() + .addComponent(jpModbusTCP, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGap(2) + .addComponent(jpModbusRTU, GroupLayout.PREFERRED_SIZE, 51, GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(jButton1) + .addGap(11) + .addComponent(jButton2) + .addGap(11) + .addComponent(jButton3) + .addGap(11) + .addComponent(jButton4))) + .addGap(6) + .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) + .addComponent(jScrollPane2, GroupLayout.PREFERRED_SIZE, 103, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextArea1, GroupLayout.PREFERRED_SIZE, 101, GroupLayout.PREFERRED_SIZE))) + ); + jLabel3 = new JLabel(); + + jLabel3.setText("IP-Address"); + jLabel4 = new JLabel(); + + jLabel4.setText("Port"); + jTextFieldIPAddress = new JTextField(); + + jTextFieldIPAddress.setText("127.0.0.1"); + jTextFieldIPAddress.setToolTipText(""); + jTextFieldPort = new JTextField(); + + jTextFieldPort.setText("502"); + GroupLayout gl_jpModbusTCP = new GroupLayout(jpModbusTCP); + gl_jpModbusTCP.setHorizontalGroup( + gl_jpModbusTCP.createParallelGroup(Alignment.LEADING) + .addGroup(gl_jpModbusTCP.createSequentialGroup() + .addContainerGap() + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.TRAILING) + .addGroup(gl_jpModbusTCP.createSequentialGroup() + .addComponent(jLabel3) + .addGap(75)) + .addGroup(gl_jpModbusTCP.createSequentialGroup() + .addComponent(jTextFieldIPAddress, GroupLayout.PREFERRED_SIZE, 122, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED))) + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.LEADING) + .addComponent(jTextFieldPort, GroupLayout.PREFERRED_SIZE, 46, GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addContainerGap()) + ); + gl_jpModbusTCP.setVerticalGroup( + gl_jpModbusTCP.createParallelGroup(Alignment.LEADING) + .addGroup(gl_jpModbusTCP.createSequentialGroup() + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(jLabel4)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_jpModbusTCP.createParallelGroup(Alignment.BASELINE) + .addComponent(jTextFieldPort, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextFieldIPAddress, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + jpModbusTCP.setLayout(gl_jpModbusTCP); + getContentPane().setLayout(groupLayout); + + pack(); + }// //GEN-END:initComponents + + private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseClicked + if (java.awt.Desktop.isDesktopSupported()) { + java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); + if (desktop.isSupported(java.awt.Desktop.Action.BROWSE)) { + try { + desktop.browse(new java.net.URI("www.easymodbustcp.net")); + } catch (java.io.IOException e) { + e.printStackTrace(); + } catch (java.net.URISyntaxException e) { + e.printStackTrace(); + } + } + } + }//GEN-LAST:event_jLabel1MouseClicked + + private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.setUnitIdentifier((byte) 1); + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + boolean[] serverResponse = modbusClient.ReadCoils(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton1MouseClicked + + private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + modbusClient.setUnitIdentifier((byte) 1); + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + boolean[] serverResponse = modbusClient.ReadDiscreteInputs(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error ", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton2MouseClicked + + private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton3MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + int[] serverResponse = modbusClient.ReadHoldingRegisters(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton3MouseClicked + + private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton4MouseClicked + if (!modbusClient.isConnected()) { + if (this.comboBox.getSelectedItem() == "Modbus TCP") { + modbusClient.setipAddress(jTextFieldIPAddress.getText()); + modbusClient.setPort(Integer.valueOf(jTextFieldPort.getText())); + try { + modbusClient.Connect(); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } else { + try { + modbusClient.Connect(txtCom.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Connection failed", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + } + } + DefaultListModel listModel = new DefaultListModel(); + int startingAddress = Integer.valueOf(jTextFieldStartingAddress.getText()) - 1; + int numberOfValues = Integer.valueOf(jTextFieldNumberOfValues.getText()); + try { + int[] serverResponse = modbusClient.ReadInputRegisters(startingAddress, numberOfValues); + for (int i = 0; i < serverResponse.length; i++) + listModel.addElement(serverResponse[i]); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Server response error", "Connection failed", JOptionPane.OK_CANCEL_OPTION); + } + jList1.setModel(listModel); + }//GEN-LAST:event_jButton4MouseClicked + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(EasyModbusTcpClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(EasyModbusTcpClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(EasyModbusTcpClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(EasyModbusTcpClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new EasyModbusTcpClient().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private JButton jButton1; + private JButton jButton2; + private JButton jButton3; + private JButton jButton4; + private JLabel jLabel1; + private JLabel jLabel2; + private JLabel jLabel3; + private JLabel jLabel4; + private JLabel jLabel5; + private JLabel jLabel6; + private JList jList1; + private JPanel jPanel1; + private JScrollPane jScrollPane1; + private JScrollPane jScrollPane2; + private JTextArea jTextArea1; + private JTextField jTextFieldIPAddress; + private JTextField jTextFieldNumberOfValues; + private JTextField jTextFieldPort; + private JTextField jTextFieldStartingAddress; + private JPanel jpModbusTCP; + private JPanel jpModbusRTU; + private JLabel lblComport; + private JTextField txtCom; + private JTextField textField_1; + private JLabel lblSlaveid; +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/Rossmann-Engineering_Logo_klein.png b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/Rossmann-Engineering_Logo_klein.png new file mode 100644 index 0000000000000000000000000000000000000000..8a76f791657784d25966a263c4b35ac2f386c729 Binary files /dev/null and b/leigh-historian/src/main/java/de/re/easymodbus/modbusclient/gui/Rossmann-Engineering_Logo_klein.png differ diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ClientConnectionThread.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ClientConnectionThread.java new file mode 100644 index 0000000000000000000000000000000000000000..832696731f424e881eec824fd6470fd75bbbd0e3 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ClientConnectionThread.java @@ -0,0 +1,61 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +class ClientConnectionThread extends Thread { + ModbusServer easyModbusTCPServer; + private java.net.Socket socket; + private byte[] inBuffer = new byte[1024]; + + public ClientConnectionThread(java.net.Socket socket, ModbusServer easyModbusTCPServer) { + this.easyModbusTCPServer = easyModbusTCPServer; + this.socket = socket; + } + + public void run() { + this.easyModbusTCPServer.setNumberOfConnectedClients(this.easyModbusTCPServer.getNumberOfConnectedClients() + 1); + + try { + socket.setSoTimeout(easyModbusTCPServer.getClientConnectionTimeout()); + java.io.InputStream inputStream; + inputStream = socket.getInputStream(); + while (socket.isConnected() & !socket.isClosed() & !socket.isClosed() & easyModbusTCPServer.getServerRunning()) { + + int numberOfBytes = (inputStream.read(inBuffer)); + if (numberOfBytes == -1) + break; + if (numberOfBytes > 4) + (new ProcessReceivedDataThread(inBuffer, easyModbusTCPServer, socket)).start(); + Thread.sleep(5); + } + this.easyModbusTCPServer.setNumberOfConnectedClients(this.easyModbusTCPServer.getNumberOfConnectedClients() - 1); + socket.close(); + } catch (Exception e) { + this.easyModbusTCPServer.setNumberOfConnectedClients(this.easyModbusTCPServer.getNumberOfConnectedClients() - 1); + try { + socket.close(); + } catch (Exception exc) { + } + e.printStackTrace(); + } + } +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/DataModel.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/DataModel.java new file mode 100644 index 0000000000000000000000000000000000000000..053377a2d8a4689a06ecd879aa36f62c23c8fb57 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/DataModel.java @@ -0,0 +1,51 @@ +package de.re.easymodbus.modbusserver; + + +class DataModel { + private int[] holdingRegisters = new int[65535]; + private int[] inputRegisters = new int[65535]; + private boolean[] coils = new boolean[65535]; + private boolean[] discreteInputs = new boolean[65535]; + + private int[] mqttHoldingRegistersOldValues = new int[65535]; + private int[] mqttInputRegistersOldValues = new int[65535]; + private boolean[] mqttCoilsOldValues = new boolean[65535]; + private boolean[] mqttDiscreteInputsOldValues = new boolean[65535]; + + public void setHoldingRegister(int i, int value) { + holdingRegisters[i] = value; + + } + + public void setInputRegister(int i, int value) { + inputRegisters[i] = value; + + } + + public void setCoil(int i, boolean value) { + coils[i] = value; + + } + + public void setDiscreteInput(int i, boolean value) { + discreteInputs[i] = value; + + } + + public int getHoldingRegister(int i) { + return holdingRegisters[i]; + } + + public int getInputRegister(int i) { + return inputRegisters[i]; + } + + public boolean getCoil(int i) { + return coils[i]; + } + + public boolean getDiscreteInput(int i) { + return discreteInputs[i]; + } + +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ICoilsChangedDelegator.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ICoilsChangedDelegator.java new file mode 100644 index 0000000000000000000000000000000000000000..bef835863111cb6daf2a48feb217c72d59ece250 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ICoilsChangedDelegator.java @@ -0,0 +1,29 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +/** + * @author Stefan Roßmann + */ +public interface ICoilsChangedDelegator { + public void coilsChangedEvent(); +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/IHoldingRegistersChangedDelegator.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/IHoldingRegistersChangedDelegator.java new file mode 100644 index 0000000000000000000000000000000000000000..e2d6dda812486e338e72c596368bc7d86aa1eac9 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/IHoldingRegistersChangedDelegator.java @@ -0,0 +1,29 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +/** + * @author Stefan Roßmann + */ +public interface IHoldingRegistersChangedDelegator { + public void holdingRegistersChangedEvent(); +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ILogDataChangedDelegator.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ILogDataChangedDelegator.java new file mode 100644 index 0000000000000000000000000000000000000000..ace95a74e5566d0db2833432f96701b816b13e37 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ILogDataChangedDelegator.java @@ -0,0 +1,29 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +/** + * @author Stefan Rossmann + */ +public interface ILogDataChangedDelegator { + public void logDataChangedEvent(); +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/INumberOfConnectedClientsChangedDelegator.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/INumberOfConnectedClientsChangedDelegator.java new file mode 100644 index 0000000000000000000000000000000000000000..614e3502f5a1260c1ac976e02f621ff83369b782 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/INumberOfConnectedClientsChangedDelegator.java @@ -0,0 +1,29 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +/** + * @author Stefan Rossmann + */ +public interface INumberOfConnectedClientsChangedDelegator { + public void NumberOfConnectedClientsChanged(); +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ListenerThread.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ListenerThread.java new file mode 100644 index 0000000000000000000000000000000000000000..a5d4a667983641db46b3f8b82d42ed146b75bdc8 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ListenerThread.java @@ -0,0 +1,58 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +import java.io.IOException; + +class ListenerThread extends Thread { + ModbusServer easyModbusTCPServer; + + public ListenerThread(ModbusServer easyModbusTCPServer) { + this.easyModbusTCPServer = easyModbusTCPServer; + } + + public void run() { + java.net.ServerSocket serverSocket = null; + try { + serverSocket = new java.net.ServerSocket(easyModbusTCPServer.getPort()); + + + while (easyModbusTCPServer.getServerRunning() & !this.isInterrupted()) { + java.net.Socket socket = serverSocket.accept(); + (new ClientConnectionThread(socket, easyModbusTCPServer)).start(); + } + } catch (IOException e) { + System.out.println(e.getMessage()); + // TODO Auto-generated catch block + e.printStackTrace(); + + } + if (serverSocket != null) + try { + serverSocket.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ModbusProtocoll.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ModbusProtocoll.java new file mode 100644 index 0000000000000000000000000000000000000000..f07db8d6c001c3a782aabcf921a583925514b638 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ModbusProtocoll.java @@ -0,0 +1,43 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +public class ModbusProtocoll { + public java.util.Calendar timeStamp; + public boolean request; + public boolean response; + public int transactionIdentifier; + public int protocolIdentifier; + public int length; + public byte unitIdentifier; + public byte functionCode; + public int startingAdress; + public int quantity; + public short byteCount; + public byte exceptionCode; + public byte errorCode; + public short[] receiveCoilValues; + public int[] receiveRegisterValues; + public int[] sendRegisterValues; + public boolean[] sendCoilValues; +} + diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ModbusServer.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ModbusServer.java new file mode 100644 index 0000000000000000000000000000000000000000..8d63fe63ec853913ee632d715e4ddb548261fcb4 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ModbusServer.java @@ -0,0 +1,1219 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +import java.io.IOException; +import java.util.Calendar; + + +/** + * @author Stefan Roßmann + */ +public class ModbusServer extends Thread { + private int port = 502; + protected ModbusProtocoll receiveData; + protected ModbusProtocoll sendData = new ModbusProtocoll(); + @Deprecated + public int[] holdingRegisters = new int[65535]; + @Deprecated + public int[] inputRegisters = new int[65535]; + @Deprecated + public boolean[] coils = new boolean[65535]; + @Deprecated + public boolean[] discreteInputs = new boolean[65535]; + private DataModel dataModel = new DataModel(); + private int numberOfConnections = 0; + public boolean udpFlag; + private int clientConnectionTimeout = 10000; + + + private ModbusProtocoll[] modbusLogData = new ModbusProtocoll[100]; + private boolean functionCode1Disabled; + private boolean functionCode2Disabled; + private boolean functionCode3Disabled; + private boolean functionCode4Disabled; + private boolean functionCode5Disabled; + private boolean functionCode6Disabled; + private boolean functionCode15Disabled; + private boolean functionCode16Disabled; + private boolean serverRunning; + private ListenerThread listenerThread; + + + //******************************************************** + //*** Events *** + //******************************************************** + protected ICoilsChangedDelegator notifyCoilsChanged; + protected IHoldingRegistersChangedDelegator notifyHoldingRegistersChanged; + protected INumberOfConnectedClientsChangedDelegator notifyNumberOfConnectedClientsChanged; + protected ILogDataChangedDelegator notifyLogDataChanged; + + public ModbusServer() { + System.out.println("EasyModbus Server Library"); + System.out.println("Copyright (c) Stefan Rossmann Engineering Solutions"); + System.out.println("www.rossmann-engineering.de"); + System.out.println(""); + } + + @SuppressWarnings("deprecation") + protected void finalize() { + serverRunning = false; + listenerThread.stop(); + } + + + /** + * Method opens port and starts listening for incomming requests from client. + * + * @throws IOException + */ + public void Listen() throws IOException { + /* + coils[1] = true; + coils[10] = true; + coils[8] = true; + holdingRegisters[0] = 500; + holdingRegisters[1] = 500; + holdingRegisters[2] = 5000; + holdingRegisters[3] = 5005; + holdingRegisters[4] = 500; + holdingRegisters[5] = 500; + holdingRegisters[6] = 500; + holdingRegisters[7] = 500;*/ + + serverRunning = true; + listenerThread = new ListenerThread(this); + listenerThread.start(); + } + + /** + * Stops the Modbus Server + */ + @SuppressWarnings("deprecation") + public void StopListening() { + serverRunning = false; + listenerThread.stop(); + } + + protected void CreateAnswer(java.net.Socket socket) { + + switch (receiveData.functionCode) { + // Read Coils + case 1: + if (!functionCode1Disabled) + this.ReadCoils(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + break; + // Read Input Registers + case 2: + if (!functionCode2Disabled) + this.ReadDiscreteInputs(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + + break; + // Read Holding Registers + case 3: + if (!functionCode3Disabled) + this.ReadHoldingRegisters(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + + break; + // Read Input Registers + case 4: + if (!functionCode4Disabled) + this.ReadInputRegisters(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + + break; + // Write single coil + case 5: + if (!functionCode5Disabled) + this.WriteSingleCoil(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + + break; + // Write single register + case 6: + if (!functionCode6Disabled) + this.WriteSingleRegister(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + + break; + // Write Multiple coils + case 15: + if (!functionCode15Disabled) + this.WriteMultipleCoils(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + + break; + // Write Multiple registers + case 16: + if (!functionCode16Disabled) + this.WriteMultipleRegisters(socket); + else { + sendData.errorCode = (byte) (receiveData.functionCode + 0x90); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + } + + break; + // Error: Function Code not supported + default: + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, socket); + break; + + } + sendData.timeStamp = Calendar.getInstance(); + } + + private void ReadCoils(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x07D0)) //Invalid quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if ((receiveData.quantity % 8) == 0) + sendData.byteCount = (byte) (receiveData.quantity / 8); + else + sendData.byteCount = (byte) (receiveData.quantity / 8 + 1); + + sendData.sendCoilValues = new boolean[receiveData.quantity]; + + System.arraycopy(coils, receiveData.startingAdress + 1, sendData.sendCoilValues, 0, sendData.sendCoilValues.length); + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[9 + sendData.byteCount]; + byte[] byteData = new byte[2]; + + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = (byte) (sendData.byteCount & 0xff); + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendCoilValues = null; + } + + if (sendData.sendCoilValues != null) + for (int i = 0; i < (sendData.byteCount); i++) { + byteData = new byte[2]; + for (int j = 0; j < 8; j++) { + + byte boolValue; + if (sendData.sendCoilValues[i * 8 + j] == true) + boolValue = 1; + else + boolValue = 0; + byteData[1] = (byte) ((byteData[1]) | (boolValue << j)); + if ((i * 8 + j + 1) >= sendData.sendCoilValues.length) + break; + } + data[9 + i] = byteData[1]; + } + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + } + + private void ReadDiscreteInputs(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x07D0)) //Invalid quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if ((receiveData.quantity % 8) == 0) + sendData.byteCount = (byte) (receiveData.quantity / 8); + else + sendData.byteCount = (byte) (receiveData.quantity / 8 + 1); + + sendData.sendCoilValues = new boolean[receiveData.quantity]; + System.arraycopy(discreteInputs, receiveData.startingAdress + 1, sendData.sendCoilValues, 0, receiveData.quantity); + + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[9 + sendData.byteCount]; + byte[] byteData = new byte[2]; + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = (byte) (sendData.byteCount & 0xff); + + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendCoilValues = null; + } + + if (sendData.sendCoilValues != null) + for (int i = 0; i < (sendData.byteCount); i++) { + byteData = new byte[2]; + for (int j = 0; j < 8; j++) { + byte boolValue; + if (sendData.sendCoilValues[i * 8 + j] == true) + boolValue = 1; + else + boolValue = 0; + byteData[1] = (byte) ((byteData[1]) | (boolValue << j)); + if ((i * 8 + j + 1) >= sendData.sendCoilValues.length) + break; + } + data[9 + i] = byteData[1]; + } + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + } + + private void ReadHoldingRegisters(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x007D)) //Invalid quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + sendData.byteCount = + (short) (2 * receiveData.quantity); + sendData.sendRegisterValues = new int[receiveData.quantity]; + System.arraycopy(holdingRegisters, receiveData.startingAdress + 1, sendData.sendRegisterValues, 0, receiveData.quantity); + + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = (short) (0x03 + sendData.byteCount); + + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[9 + sendData.byteCount]; + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = (byte) (sendData.byteCount & 0xff); + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + + + if (sendData.sendRegisterValues != null) + for (int i = 0; i < (sendData.byteCount / 2); i++) { + data[9 + i * 2] = (byte) ((sendData.sendRegisterValues[i] & 0xff00) >> 8); + data[10 + i * 2] = (byte) (sendData.sendRegisterValues[i] & 0xff); + } + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + } + + private void ReadInputRegisters(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x007D)) //Invalid quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + sendData.byteCount = (short) (2 * receiveData.quantity); + sendData.sendRegisterValues = new int[receiveData.quantity]; + System.arraycopy(inputRegisters, receiveData.startingAdress + 1, sendData.sendRegisterValues, 0, receiveData.quantity); + + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = (short) (0x03 + sendData.byteCount); + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[9 + sendData.byteCount]; + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = (byte) (sendData.byteCount & 0xff); + + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + + + if (sendData.sendRegisterValues != null) + for (int i = 0; i < (sendData.byteCount / 2); i++) { + data[9 + i * 2] = (byte) ((sendData.sendRegisterValues[i] & 0xff00) >> 8); + data[10 + i * 2] = (byte) (sendData.sendRegisterValues[i] & 0xff); + } + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + } + + private void WriteSingleCoil(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.receiveCoilValues = receiveData.receiveCoilValues; + if ((receiveData.receiveCoilValues[0] != 0x0000) & (receiveData.receiveCoilValues[0] != 0xFF)) //Invalid Value + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((receiveData.startingAdress + 1) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if ((receiveData.receiveCoilValues[0]) > 0) { + this.setCoil(true, receiveData.startingAdress + 1); + } + if (receiveData.receiveCoilValues[0] == 0x0000) { + this.setCoil(false, receiveData.startingAdress + 1); + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[12]; + + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } else { + data[8] = (byte) ((receiveData.startingAdress & 0xff00) >> 8); + data[9] = (byte) (receiveData.startingAdress & 0xff); + + data[10] = (byte) ((receiveData.receiveCoilValues[0])); + data[11] = 0; + } + + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + if (this.notifyCoilsChanged != null) + notifyCoilsChanged.coilsChangedEvent(); + } + + private void WriteSingleRegister(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.receiveRegisterValues = receiveData.receiveRegisterValues; + + if ((receiveData.receiveRegisterValues[0] < 0x0000) | (receiveData.receiveRegisterValues[0] > 0xFFFF)) //Invalid Value + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((receiveData.startingAdress + 1) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + this.setHoldingRegister(((int) receiveData.receiveRegisterValues[0]), receiveData.startingAdress + 1); + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[12]; + + sendData.length = (byte) (data.length - 6); + + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } else { + data[8] = (byte) ((receiveData.startingAdress & 0xff00) >> 8); + data[9] = (byte) (receiveData.startingAdress & 0xff); + + data[10] = (byte) ((receiveData.receiveRegisterValues[0] & 0xff00) >> 8); + data[11] = (byte) (receiveData.receiveRegisterValues[0] & 0xff); + } + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + if (this.notifyHoldingRegistersChanged != null) + notifyHoldingRegistersChanged.holdingRegistersChangedEvent(); + } + + private void WriteMultipleCoils(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.quantity = receiveData.quantity; + + if ((receiveData.quantity == 0x0000) | (receiveData.quantity > 0x07B0)) //Invalid Quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if (((int) receiveData.startingAdress + 1 + (int) receiveData.quantity) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + for (int i = 0; i < receiveData.quantity; i++) { + int shift = i % 16; + /* + if ((i == receiveData.quantity - 1) & (receiveData.quantity % 2 != 0)) + { + if (shift < 8) + shift = shift + 8; + else + shift = shift - 8; + } + */ + int mask = 0x1; + mask = mask << (shift); + if ((receiveData.receiveCoilValues[i / 16] & mask) == 0) + this.setCoil(false, receiveData.startingAdress + i + 1); + else + this.setCoil(true, receiveData.startingAdress + i + 1); + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[12]; + + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } else { + data[8] = (byte) ((receiveData.startingAdress & 0xff00) >> 8); + data[9] = (byte) (receiveData.startingAdress & 0xff); + + data[10] = (byte) ((receiveData.quantity & 0xff00) >> 8); + data[11] = (byte) (receiveData.quantity & 0xff); + } + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (Exception e) { + + + e.printStackTrace(); + } + if (this.notifyCoilsChanged != null) + notifyCoilsChanged.coilsChangedEvent(); + } + + private void WriteMultipleRegisters(java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.quantity = receiveData.quantity; + + if ((receiveData.quantity == 0x0000) | (receiveData.quantity > 0x07B0)) //Invalid Quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x90); + sendData.exceptionCode = 3; + } + if (((int) receiveData.startingAdress + 1 + (int) receiveData.quantity) > 65535) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte) (receiveData.functionCode + 0x90); + sendData.exceptionCode = 2; + } + for (int i = 0; i < receiveData.quantity; i++) { + this.setHoldingRegister((receiveData.receiveRegisterValues[i]), receiveData.startingAdress + i + 1); + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[12]; + + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + if (sendData.exceptionCode > 0) { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } else { + data[8] = (byte) ((receiveData.startingAdress & 0xff00) >> 8); + data[9] = (byte) (receiveData.startingAdress & 0xff); + + data[10] = (byte) ((receiveData.quantity & 0xff00) >> 8); + data[11] = (byte) (receiveData.quantity & 0xff); + } + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + if (this.notifyHoldingRegistersChanged != null) + notifyHoldingRegistersChanged.holdingRegistersChangedEvent(); + } + + + private void sendException(int errorCode, int exceptionCode, java.net.Socket socket) { + sendData = new ModbusProtocoll(); + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.errorCode = (byte) errorCode; + sendData.exceptionCode = (byte) exceptionCode; + + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = (short) (0x03 + sendData.byteCount); + + + byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9]; + else + data = new byte[9 + sendData.byteCount]; + sendData.length = (byte) (data.length - 6); + + //Send Transaction identifier + data[0] = (byte) ((sendData.transactionIdentifier & 0xff00) >> 8); + data[1] = (byte) (sendData.transactionIdentifier & 0xff); + + //Send Protocol identifier + data[2] = (byte) ((sendData.protocolIdentifier & 0xff00) >> 8); + data[3] = (byte) (sendData.protocolIdentifier & 0xff); + + //Send length + data[4] = (byte) ((sendData.length & 0xff00) >> 8); + data[5] = (byte) (sendData.length & 0xff); + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + java.io.OutputStream outputStream; + if (socket.isConnected() & !socket.isClosed()) + try { + outputStream = socket.getOutputStream(); + outputStream.write(data); + } catch (IOException e) { + + e.printStackTrace(); + } + } + + protected void CreateLogData() { + for (int i = 0; i < 98; i++) { + modbusLogData[99 - i] = modbusLogData[99 - i - 2]; + } + modbusLogData[0] = receiveData; + modbusLogData[1] = sendData; + if (this.notifyLogDataChanged != null) + this.notifyLogDataChanged.logDataChangedEvent(); + } + + /** + * Sets the Port for the ModbusServer + * + * @param port port for Server + */ + public void setPort(int port) { + this.port = port; + } + + /** + * Disables or Enables Modbus Function code 1 + * + * @param functionCode1Disabled true disables Function code 1 + * false enables Function code 1 + */ + public void setFunctionCode1Disabled(boolean functionCode1Disabled) { + this.functionCode1Disabled = functionCode1Disabled; + } + + /** + * Disables or Enables Modbus Function code 2 + * + * @param functionCode2Disabled true disables Function code 2 + * false enables Function code 2 + */ + public void setFunctionCode2Disabled(boolean functionCode2Disabled) { + this.functionCode2Disabled = functionCode2Disabled; + } + + /** + * Disables or Enables Modbus Function code 3 + * + * @param functionCode3Disabled true disables Function code 3 + * false enables Function code 3 + */ + public void setFunctionCode3Disabled(boolean functionCode3Disabled) { + this.functionCode3Disabled = functionCode3Disabled; + } + + /** + * Disables or Enables Modbus Function code 4 + * + * @param functionCode4Disabled true disables Function code 4 + * false enables Function code 4 + */ + public void setFunctionCode4Disabled(boolean functionCode4Disabled) { + this.functionCode4Disabled = functionCode4Disabled; + } + + /** + * Disables or Enables Modbus Function code 5 + * + * @param functionCode5Disabled true disables Function code 5 + * false enables Function code 5 + */ + public void setFunctionCode5Disabled(boolean functionCode5Disabled) { + this.functionCode5Disabled = functionCode5Disabled; + } + + /** + * Disables or Enables Modbus Function code 6 + * + * @param functionCode6Disabled true disables Function code 6 + * false enables Function code 6 + */ + public void setFunctionCode6Disabled(boolean functionCode6Disabled) { + this.functionCode6Disabled = functionCode6Disabled; + } + + /** + * Disables or Enables Modbus Function code 15 + * + * @param functionCode15Disabled true disables Function code 15 + * false enables Function code 15 + */ + public void setFunctionCode15Disabled(boolean functionCode15Disabled) { + this.functionCode15Disabled = functionCode15Disabled; + } + + /** + * Disables or Enables Modbus Function code 16 + * + * @param functionCode16Disabled true disables Function code 16 + * false enables Function code 16 + */ + public void setFunctionCode16Disabled(boolean functionCode16Disabled) { + this.functionCode16Disabled = functionCode16Disabled; + } + + public void setNumberOfConnectedClients(int value) { + this.numberOfConnections = value; + if (this.notifyNumberOfConnectedClientsChanged != null) + this.notifyNumberOfConnectedClientsChanged.NumberOfConnectedClientsChanged(); + } + + + /** + * Gets the Port for the ModbusServer + * + * @return Current Port Server is listening to + */ + public int getPort() { + return this.port; + } + + public boolean getFunctionCode1Disabled() { + return this.functionCode1Disabled; + } + + public boolean getFunctionCode2Disabled() { + return this.functionCode2Disabled; + } + + public boolean getFunctionCode3Disabled() { + return this.functionCode3Disabled; + } + + public boolean getFunctionCode4Disabled() { + return this.functionCode4Disabled; + } + + public boolean getFunctionCode5Disabled() { + return this.functionCode5Disabled; + } + + public boolean getFunctionCode6Disabled() { + return this.functionCode6Disabled; + } + + public boolean getFunctionCode15Disabled() { + return this.functionCode15Disabled; + } + + public boolean getFunctionCode16Disabled() { + return this.functionCode16Disabled; + } + + /** + * Returns number of connected clients + * + * @return number of connected clients + */ + public int getNumberOfConnectedClients() { + return this.numberOfConnections; + } + + /** + * Gets Server runnig flag + * + * @return TRUE if server active + */ + public boolean getServerRunning() { + return this.serverRunning; + } + + /** + * Gets logged Modbus data + * + * @return logged Modbus data + */ + public ModbusProtocoll[] getLogData() { + return this.modbusLogData; + } + + /** + * Get notified if number if Coils has changed + * + * @param value Implementation of Interface ICoilsChangedDelegator + */ + public void setNotifyCoilsChanged(ICoilsChangedDelegator value) { + this.notifyCoilsChanged = value; + } + + /** + * Get notified if number if Holding Registers has changed + * + * @param value Implementation of Interface IHoldingRegistersChangedDelegator + */ + public void setNotifyHoldingRegistersChanged(IHoldingRegistersChangedDelegator value) { + this.notifyHoldingRegistersChanged = value; + } + + /** + * Get notified if number of connected clients has changed + * + * @param value Implementation of Interface INumberOfConnectedClientsChangedDelegator + */ + public void setNotifyNumberOfConnectedClientsChanged(INumberOfConnectedClientsChangedDelegator value) { + this.notifyNumberOfConnectedClientsChanged = value; + } + + /** + * Get notified if Log Data has changed + * + * @param value Implementation of Interface ILogDataChangedDelegator + */ + public void setNotifyLogDataChanged(ILogDataChangedDelegator value) { + this.notifyLogDataChanged = value; + } + + /** + * Gets the Client connection timeout, which disconnects a connection to a client + * + * @return clientConnectionTimout + */ + public int getClientConnectionTimeout() { + return clientConnectionTimeout; + } + + /*Sets the Client connection timeout, which disconnects a connection to a client + * @param value ClientConnectionTimeout + */ + public void setClientConnectionTimeout(int value) { + clientConnectionTimeout = value; + } + + + public int getHoldingRegister(int address) { + return dataModel.getHoldingRegister(address); + } + + public void setHoldingRegister(int holdingRegisterValue, int address) { + this.dataModel.setHoldingRegister(address, holdingRegisterValue); + this.holdingRegisters[address] = holdingRegisterValue; + + } + + public int getInputRegister(int address) { + return dataModel.getInputRegister(address); + } + + public void setInputRegister(int inputRegisterValue, int address) { + this.dataModel.setInputRegister(address, inputRegisterValue); + this.inputRegisters[address] = inputRegisterValue; + } + + public boolean getCoil(int address) { + return dataModel.getCoil(address); + } + + public void setCoil(boolean coilValue, int address) { + this.dataModel.setCoil(address, coilValue); + this.coils[address] = coilValue; + } + + public boolean getDiscreteInput(int address) { + return dataModel.getDiscreteInput(address); + } + + public void setDiscreteInput(boolean discreteInputValue, int address) { + this.dataModel.setDiscreteInput(address, discreteInputValue); + this.discreteInputs[address] = discreteInputValue; + } +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ProcessReceivedDataThread.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ProcessReceivedDataThread.java new file mode 100644 index 0000000000000000000000000000000000000000..572a3046b19baac5c0e09a27822b01e074bfa2ec --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/ProcessReceivedDataThread.java @@ -0,0 +1,151 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package de.re.easymodbus.modbusserver; + +import java.util.Calendar; + +class ProcessReceivedDataThread extends Thread { + short[] inBuffer; + ModbusServer easyModbusTCPServer; + java.net.Socket socket; + + public ProcessReceivedDataThread(byte[] inBuffer, ModbusServer easyModbusTCPServer, java.net.Socket socket) { + this.socket = socket; + this.inBuffer = new short[inBuffer.length]; + for (int i = 0; i < inBuffer.length; i++) { + + this.inBuffer[i] = (short) ((short) inBuffer[i] & 0xff); + } + this.easyModbusTCPServer = easyModbusTCPServer; + } + + public void run() { + + synchronized (easyModbusTCPServer) { + short[] wordData = new short[1]; + short[] byteData = new short[2]; + easyModbusTCPServer.receiveData = new ModbusProtocoll(); + easyModbusTCPServer.receiveData.timeStamp = Calendar.getInstance(); + easyModbusTCPServer.receiveData.request = true; + + //Lese Transaction identifier + byteData[1] = inBuffer[0]; + byteData[0] = inBuffer[1]; + wordData[0] = (short) byteArrayToInt(byteData); + easyModbusTCPServer.receiveData.transactionIdentifier = wordData[0]; + + //Lese Protocol identifier + byteData[1] = inBuffer[2]; + byteData[0] = inBuffer[3]; + wordData[0] = (short) byteArrayToInt(byteData); + easyModbusTCPServer.receiveData.protocolIdentifier = wordData[0]; + + //Lese length + byteData[1] = inBuffer[4]; + byteData[0] = inBuffer[5]; + wordData[0] = (short) byteArrayToInt(byteData); + easyModbusTCPServer.receiveData.length = wordData[0]; + + //Lese unit identifier + easyModbusTCPServer.receiveData.unitIdentifier = (byte) inBuffer[6]; + + // Lese function code + easyModbusTCPServer.receiveData.functionCode = (byte) inBuffer[7]; + + // Lese starting address + byteData[1] = inBuffer[8]; + byteData[0] = inBuffer[9]; + wordData[0] = (short) byteArrayToInt(byteData); + easyModbusTCPServer.receiveData.startingAdress = wordData[0]; + + if (easyModbusTCPServer.receiveData.functionCode <= 4) { + // Lese quantity + byteData[1] = inBuffer[10]; + byteData[0] = inBuffer[11]; + wordData[0] = (short) byteArrayToInt(byteData); + easyModbusTCPServer.receiveData.quantity = wordData[0]; + } + if (easyModbusTCPServer.receiveData.functionCode == 5) { + easyModbusTCPServer.receiveData.receiveCoilValues = new short[1]; + // Lese Value + byteData[0] = inBuffer[10]; + byteData[1] = inBuffer[11]; + easyModbusTCPServer.receiveData.receiveCoilValues[0] = (short) byteArrayToInt(byteData); + } + if (easyModbusTCPServer.receiveData.functionCode == 6) { + easyModbusTCPServer.receiveData.receiveRegisterValues = new int[1]; + // Lese Value + byteData[1] = inBuffer[10]; + byteData[0] = inBuffer[11]; + easyModbusTCPServer.receiveData.receiveRegisterValues[0] = byteArrayToInt(byteData); + } + if (easyModbusTCPServer.receiveData.functionCode == 15) { + // Lese quantity + byteData[1] = inBuffer[10]; + byteData[0] = inBuffer[11]; + wordData[0] = (short) byteArrayToInt(byteData); + easyModbusTCPServer.receiveData.quantity = wordData[0]; + + easyModbusTCPServer.receiveData.byteCount = (byte) inBuffer[12]; + + if ((easyModbusTCPServer.receiveData.byteCount % 2) != 0) + easyModbusTCPServer.receiveData.receiveCoilValues = new short[easyModbusTCPServer.receiveData.byteCount / 2 + 1]; + else + easyModbusTCPServer.receiveData.receiveCoilValues = new short[easyModbusTCPServer.receiveData.byteCount / 2]; + // Lese Value + for (int i = 0; i < easyModbusTCPServer.receiveData.byteCount; i++) { + if ((i % 2) == 1) + easyModbusTCPServer.receiveData.receiveCoilValues[i / 2] = (short) (easyModbusTCPServer.receiveData.receiveCoilValues[i / 2] + 256 * inBuffer[13 + i]); + else + easyModbusTCPServer.receiveData.receiveCoilValues[i / 2] = inBuffer[13 + i]; + } + } + if (easyModbusTCPServer.receiveData.functionCode == 16) { + // Lese quantity + byteData[1] = inBuffer[10]; + byteData[0] = inBuffer[11]; + wordData[0] = (short) byteArrayToInt(byteData); + easyModbusTCPServer.receiveData.quantity = wordData[0]; + + easyModbusTCPServer.receiveData.byteCount = (byte) inBuffer[12]; + easyModbusTCPServer.receiveData.receiveRegisterValues = new int[easyModbusTCPServer.receiveData.quantity]; + for (int i = 0; i < easyModbusTCPServer.receiveData.quantity; i++) { + // Lese Value + byteData[1] = inBuffer[13 + i * 2]; + byteData[0] = inBuffer[14 + i * 2]; + easyModbusTCPServer.receiveData.receiveRegisterValues[i] = byteData[0]; + easyModbusTCPServer.receiveData.receiveRegisterValues[i] = (int) (easyModbusTCPServer.receiveData.receiveRegisterValues[i] + (byteData[1] << 8)); + } + } + easyModbusTCPServer.CreateAnswer(socket); + easyModbusTCPServer.CreateLogData(); + } + } + + public int byteArrayToInt(short[] byteArray) { + int returnValue; + returnValue = byteArray[0]; + returnValue = (int) (returnValue + 256 * byteArray[1]); + return returnValue; + } + +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/NewJFrame.form b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/NewJFrame.form new file mode 100644 index 0000000000000000000000000000000000000000..a5dc2a5cbc1204b8ccc6c6cfbfb0cf618560fa5e --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/NewJFrame.form @@ -0,0 +1,592 @@ + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + + + + + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/NewJFrame.java b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/NewJFrame.java new file mode 100644 index 0000000000000000000000000000000000000000..7b6754ee1bcba1825c589dedd4011e1236023fa0 --- /dev/null +++ b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/NewJFrame.java @@ -0,0 +1,948 @@ +package de.re.easymodbus.modbusserver.gui; + +import javax.swing.*; +import javax.swing.GroupLayout.Alignment; +import javax.swing.LayoutStyle.ComponentPlacement; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Random; + + +/** + * @author Stefan Roßmann + */ +public class NewJFrame extends javax.swing.JFrame implements de.re.easymodbus.modbusserver.ICoilsChangedDelegator, de.re.easymodbus.modbusserver.IHoldingRegistersChangedDelegator, de.re.easymodbus.modbusserver.INumberOfConnectedClientsChangedDelegator, de.re.easymodbus.modbusserver.ILogDataChangedDelegator { + + public de.re.easymodbus.modbusserver.ModbusServer modbusServer = new de.re.easymodbus.modbusserver.ModbusServer(); + + /** + * Creates new form NewJFrame + */ + public NewJFrame() { + + super("EasyModbusTCP Server Simulator"); + initComponents(); + modbusServer.setNotifyCoilsChanged(this); + modbusServer.setNotifyHoldingRegistersChanged(this); + modbusServer.setNotifyNumberOfConnectedClientsChanged(this); + modbusServer.setNotifyLogDataChanged(this); + modbusServer.setClientConnectionTimeout(10000); + try { + modbusServer.Listen(); + } catch (Exception e) { + } + jList1.setModel(model); + + + } + + private void initTables() { + javax.swing.table.DefaultTableModel model1 = (javax.swing.table.DefaultTableModel) jTable1.getModel(); + javax.swing.table.DefaultTableModel model2 = (javax.swing.table.DefaultTableModel) jTable2.getModel(); + javax.swing.table.DefaultTableModel model3 = (javax.swing.table.DefaultTableModel) jTable3.getModel(); + javax.swing.table.DefaultTableModel model4 = (javax.swing.table.DefaultTableModel) jTable4.getModel(); + for (int i = 0; i < 25; i++) { + model1.addRow(new Object[]{String.valueOf(i + 1), String.valueOf(false)}); + } + for (int i = 0; i < 25; i++) { + model2.addRow(new Object[]{String.valueOf(i + 1), String.valueOf(false)}); + } + for (int i = 0; i < 25; i++) { + model3.addRow(new Object[]{String.valueOf(i + 1), String.valueOf(0)}); + } + for (int i = 0; i < 25; i++) { + model4.addRow(new Object[]{String.valueOf(i + 1), String.valueOf(0)}); + } + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jTabbedPane1 = new javax.swing.JTabbedPane(); + jPanel1 = new javax.swing.JPanel(); + jScrollPane1 = new JScrollPane(); + jTable1 = new javax.swing.JTable(); + jScrollBar1 = new JScrollBar(); + jPanel2 = new javax.swing.JPanel(); + jScrollPane2 = new JScrollPane(); + jTable2 = new javax.swing.JTable(); + jScrollBar2 = new JScrollBar(); + jPanel3 = new javax.swing.JPanel(); + jScrollPane3 = new JScrollPane(); + jTable3 = new javax.swing.JTable(); + jScrollBar3 = new JScrollBar(); + jPanel4 = new javax.swing.JPanel(); + jScrollPane4 = new JScrollPane(); + jTable4 = new javax.swing.JTable(); + jScrollBar4 = new JScrollBar(); + jLabel1 = new JLabel(); + jLabel2 = new JLabel(); + jLabel3 = new JLabel(); + jPanel5 = new javax.swing.JPanel(); + jPanel5.setAlignmentX(Component.LEFT_ALIGNMENT); + jPanel5.setAlignmentY(Component.TOP_ALIGNMENT); + jLabel4 = new JLabel(); + jCheckBox1 = new JCheckBox(); + jCheckBox2 = new JCheckBox(); + jCheckBox3 = new JCheckBox(); + jCheckBox4 = new JCheckBox(); + jCheckBox5 = new JCheckBox(); + jCheckBox6 = new JCheckBox(); + jCheckBox7 = new JCheckBox(); + jCheckBox8 = new JCheckBox(); + jLabel5 = new JLabel(); + jLabel6 = new JLabel(); + jLabel7 = new JLabel(); + jCheckBox9 = new JCheckBox(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setResizable(false); + setSize(new Dimension(888, 640)); + addWindowListener(new java.awt.event.WindowAdapter() { + public void windowClosing(java.awt.event.WindowEvent evt) { + formWindowClosing(evt); + } + }); + + jTabbedPane1.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent evt) { + jTabbedPane1MouseClicked(evt); + } + }); + + jTable1.setModel(new javax.swing.table.DefaultTableModel( + new Object[][]{ + + }, + new String[]{ + "Address", "Value" + } + )); + jTable1.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent evt) { + jTable1MouseClicked(evt); + } + }); + jTable1.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + jTable1PropertyChange(evt); + } + }); + jScrollPane1.setViewportView(jTable1); + + jScrollBar1.setBlockIncrement(1); + jScrollBar1.setMaximum(65534); + jScrollBar1.addAdjustmentListener(new java.awt.event.AdjustmentListener() { + public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { + jScrollBar1AdjustmentValueChanged(evt); + } + }); + + GroupLayout jPanel1Layout = new GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jScrollBar1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(Alignment.LEADING) + .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 456, Short.MAX_VALUE) + .addComponent(jScrollBar1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("Discrete Inputs", jPanel1); + + jTable2.setModel(new javax.swing.table.DefaultTableModel( + new Object[][]{ + + }, + new String[]{ + "Address", "Value" + } + )); + jTable2.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent evt) { + jTable2MouseClicked(evt); + } + }); + jTable2.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + jTable2PropertyChange(evt); + } + }); + jScrollPane2.setViewportView(jTable2); + + jScrollBar2.setBlockIncrement(1); + jScrollBar2.setMaximum(65534); + jScrollBar2.addAdjustmentListener(new java.awt.event.AdjustmentListener() { + public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { + jScrollBar2AdjustmentValueChanged(evt); + } + }); + + GroupLayout jPanel2Layout = new GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane2, GroupLayout.PREFERRED_SIZE, 228, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jScrollBar2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(Alignment.LEADING) + .addComponent(jScrollPane2, GroupLayout.DEFAULT_SIZE, 456, Short.MAX_VALUE) + .addComponent(jScrollBar2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("Coils", jPanel2); + + jTable3.setModel(new javax.swing.table.DefaultTableModel( + new Object[][]{ + + }, + new String[]{ + "Address", "Value" + } + )); + jTable3.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + jTable3PropertyChange(evt); + } + }); + jScrollPane3.setViewportView(jTable3); + + jScrollBar3.setBlockIncrement(1); + jScrollBar3.setMaximum(65534); + jScrollBar3.addAdjustmentListener(new java.awt.event.AdjustmentListener() { + public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { + jScrollBar3AdjustmentValueChanged(evt); + } + }); + + GroupLayout jPanel3Layout = new GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane3, GroupLayout.PREFERRED_SIZE, 227, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jScrollBar3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(Alignment.LEADING) + .addComponent(jScrollPane3, GroupLayout.DEFAULT_SIZE, 456, Short.MAX_VALUE) + .addComponent(jScrollBar3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("Input Registers", jPanel3); + + jPanel4.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + jPanel4PropertyChange(evt); + } + }); + + jTable4.setModel(new javax.swing.table.DefaultTableModel( + new Object[][]{ + + }, + new String[]{ + "Address", "Value" + } + )); + jTable4.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + jTable4PropertyChange(evt); + } + }); + jScrollPane4.setViewportView(jTable4); + + jScrollBar4.setBlockIncrement(1); + jScrollBar4.setMaximum(65534); + jScrollBar4.addAdjustmentListener(new java.awt.event.AdjustmentListener() { + public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { + jScrollBar4AdjustmentValueChanged(evt); + } + }); + + GroupLayout jPanel4Layout = new GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel4Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane4, GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jScrollBar4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + jPanel4Layout.setVerticalGroup( + jPanel4Layout.createParallelGroup(Alignment.LEADING) + .addComponent(jScrollPane4, GroupLayout.DEFAULT_SIZE, 456, Short.MAX_VALUE) + .addComponent(jScrollBar4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("Holding Registers", jPanel4); + + jLabel1.setFont(new Font("Microsoft Sans Serif", 1, 18)); // NOI18N + jLabel1.setForeground(new java.awt.Color(102, 204, 0)); + jLabel1.setText("...Modbus-TCP Server Listening (Port 502)..."); + + + jLabel3.setText("Version 2.5"); + jLabel3.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + + jPanel5.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); + + jLabel4.setText("Supported Function codes:"); + + jCheckBox1.setSelected(true); + jCheckBox1.setText("FC 01 (Read Coils)"); + jCheckBox1.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox1StateChanged(evt); + } + }); + + jCheckBox2.setSelected(true); + jCheckBox2.setText("FC 02 (Read Discrete Inputs)"); + jCheckBox2.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox2StateChanged(evt); + } + }); + + jCheckBox3.setSelected(true); + jCheckBox3.setText("FC 03 (Read Holding Registers)"); + jCheckBox3.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox3StateChanged(evt); + } + }); + + jCheckBox4.setSelected(true); + jCheckBox4.setText("FC 04 (Read Input Registers)"); + jCheckBox4.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox4StateChanged(evt); + } + }); + + jCheckBox5.setSelected(true); + jCheckBox5.setText("FC 05 (Write Single Coil)"); + jCheckBox5.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox5StateChanged(evt); + } + }); + + jCheckBox6.setSelected(true); + jCheckBox6.setText("FC 06 (Write Single Register)"); + jCheckBox6.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox6StateChanged(evt); + } + }); + + jCheckBox7.setSelected(true); + jCheckBox7.setText("FC 15 (Write Multiple Coils)"); + jCheckBox7.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox7StateChanged(evt); + } + }); + + jCheckBox8.setSelected(true); + jCheckBox8.setText("FC 16 (Write Multiple Registers)"); + jCheckBox8.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent evt) { + jCheckBox8StateChanged(evt); + } + }); + + GroupLayout jPanel5Layout = new GroupLayout(jPanel5); + jPanel5Layout.setHorizontalGroup( + jPanel5Layout.createParallelGroup(Alignment.LEADING) + .addGroup(Alignment.TRAILING, jPanel5Layout.createSequentialGroup() + .addContainerGap(29, Short.MAX_VALUE) + .addGroup(jPanel5Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel5Layout.createSequentialGroup() + .addGap(21) + .addComponent(jLabel4)) + .addGroup(jPanel5Layout.createParallelGroup(Alignment.LEADING) + .addComponent(jCheckBox2) + .addComponent(jCheckBox1) + .addComponent(jCheckBox3) + .addComponent(jCheckBox4) + .addComponent(jCheckBox5) + .addComponent(jCheckBox6) + .addComponent(jCheckBox7) + .addComponent(jCheckBox8))) + .addGap(22)) + ); + jPanel5Layout.setVerticalGroup( + jPanel5Layout.createParallelGroup(Alignment.LEADING) + .addGroup(jPanel5Layout.createSequentialGroup() + .addComponent(jLabel4) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox1) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox2) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox3) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox4) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox5) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox6) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox7) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jCheckBox8) + .addContainerGap(11, Short.MAX_VALUE)) + ); + jPanel5.setLayout(jPanel5Layout); + + jLabel5.setText("http://www.EasyModbusTCP.net"); + jLabel5.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent evt) { + jLabel5MousePressed(evt); + } + }); + + jLabel6.setText("Number of connected clients: "); + + jLabel7.setText("0"); + + jCheckBox9.setSelected(true); + jCheckBox9.setText("Show Protocol Informations"); + jList1 = new javax.swing.JList(); + jList1.setAutoscrolls(false); + jList1.setAlignmentY(Component.BOTTOM_ALIGNMENT); + jList1.setAlignmentX(Component.LEFT_ALIGNMENT); + jList1.setFont(new Font("Tahoma", Font.PLAIN, 9)); + + chckbxEnableWebview = new JCheckBox("Enable Web View"); + chckbxEnableWebview.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + WebViewStateChanged(e); + + } + }); + + lblWebViewAddress = new JLabel("Webview-address:"); + lblWebViewAddress.setVisible(false); + + lblLink = new JLabel("link"); + lblLink.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent arg0) { + linkClicked(); + } + }); + lblLink.setVisible(false); + + GroupLayout layout = new GroupLayout(getContentPane()); + layout.setHorizontalGroup( + layout.createParallelGroup(Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel2) + .addGap(6) + .addGroup(layout.createParallelGroup(Alignment.TRAILING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel5) + .addGap(624)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel6) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jLabel7) + .addGap(59) + .addComponent(jLabel3)) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGap(6) + .addComponent(chckbxEnableWebview)) + .addGroup(layout.createSequentialGroup() + .addGap(430) + .addComponent(jCheckBox9)) + .addComponent(jList1, GroupLayout.PREFERRED_SIZE, 583, GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addComponent(lblWebViewAddress) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(lblLink))) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jTabbedPane1, GroupLayout.PREFERRED_SIZE, 279, GroupLayout.PREFERRED_SIZE)))) + .addGroup(layout.createSequentialGroup() + .addGap(293) + .addComponent(jLabel1))) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(ComponentPlacement.RELATED, 6, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(jCheckBox9) + .addPreferredGap(ComponentPlacement.UNRELATED)) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(16) + .addComponent(jLabel2)) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(jLabel5) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(Alignment.BASELINE) + .addComponent(jLabel6) + .addComponent(jLabel7) + .addComponent(jLabel3))))) + .addGap(8) + .addGroup(layout.createParallelGroup(Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(jList1, GroupLayout.PREFERRED_SIZE, 259, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(chckbxEnableWebview) + .addComponent(jPanel5, GroupLayout.PREFERRED_SIZE, 207, GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(Alignment.BASELINE) + .addComponent(lblWebViewAddress) + .addComponent(lblLink)) + .addGap(19)) + .addGroup(layout.createSequentialGroup() + .addComponent(jTabbedPane1, GroupLayout.PREFERRED_SIZE, 502, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED))) + .addGap(2)) + ); + getContentPane().setLayout(layout); + + jLabel5.getAccessibleContext().setAccessibleName("http://www.EasyModbusTCP.net"); + jLabel5.getAccessibleContext().setAccessibleDescription(""); + + pack(); + }// //GEN-END:initComponents + + private void jLabel5MousePressed(MouseEvent evt) {//GEN-FIRST:event_jLabel5MousePressed + try { + Desktop.getDesktop().browse(new URI("http://www.EasyModbusTCP.net")); + } catch (Exception ex) { + } + }//GEN-LAST:event_jLabel5MousePressed + + private void jCheckBox1StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox1StateChanged + if (modbusServer.getFunctionCode1Disabled()) + modbusServer.setFunctionCode1Disabled(false); + else + modbusServer.setFunctionCode1Disabled(true); + }//GEN-LAST:event_jCheckBox1StateChanged + + private void jCheckBox2StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox2StateChanged + if (modbusServer.getFunctionCode2Disabled()) + modbusServer.setFunctionCode2Disabled(false); + else + modbusServer.setFunctionCode2Disabled(true); + }//GEN-LAST:event_jCheckBox2StateChanged + + private void jCheckBox3StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox3StateChanged + if (modbusServer.getFunctionCode3Disabled()) + modbusServer.setFunctionCode3Disabled(false); + else + modbusServer.setFunctionCode3Disabled(true); + }//GEN-LAST:event_jCheckBox3StateChanged + + private void jCheckBox4StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox4StateChanged + if (modbusServer.getFunctionCode4Disabled()) + modbusServer.setFunctionCode4Disabled(false); + else + modbusServer.setFunctionCode4Disabled(true); + }//GEN-LAST:event_jCheckBox4StateChanged + + private void jCheckBox5StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox5StateChanged + if (modbusServer.getFunctionCode5Disabled()) + modbusServer.setFunctionCode5Disabled(false); + else + modbusServer.setFunctionCode5Disabled(true); + }//GEN-LAST:event_jCheckBox5StateChanged + + private void jCheckBox6StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox6StateChanged + if (modbusServer.getFunctionCode6Disabled()) + modbusServer.setFunctionCode6Disabled(false); + else + modbusServer.setFunctionCode6Disabled(true); + }//GEN-LAST:event_jCheckBox6StateChanged + + private void jCheckBox7StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox7StateChanged + if (modbusServer.getFunctionCode15Disabled()) + modbusServer.setFunctionCode15Disabled(false); + else + modbusServer.setFunctionCode15Disabled(true); + }//GEN-LAST:event_jCheckBox7StateChanged + + private void jCheckBox8StateChanged(ChangeEvent evt) {//GEN-FIRST:event_jCheckBox8StateChanged + if (modbusServer.getFunctionCode16Disabled()) + modbusServer.setFunctionCode16Disabled(false); + else + modbusServer.setFunctionCode16Disabled(true); + }//GEN-LAST:event_jCheckBox8StateChanged + + private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing + this.modbusServer.StopListening(); + }//GEN-LAST:event_formWindowClosing + + private void jScrollBar2AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {//GEN-FIRST:event_jScrollBar2AdjustmentValueChanged + javax.swing.table.DefaultTableModel model2 = (javax.swing.table.DefaultTableModel) jTable2.getModel(); + model2.setNumRows(0); + for (int i = 0; i < 25; i++) { + if ((i + this.jScrollBar2.getValue() + 1) < 65535) + model2.addRow(new Object[]{String.valueOf(i + this.jScrollBar2.getValue() + 1), String.valueOf(modbusServer.coils[i + this.jScrollBar2.getValue() + 1])}); + } + }//GEN-LAST:event_jScrollBar2AdjustmentValueChanged + + private void jScrollBar3AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {//GEN-FIRST:event_jScrollBar3AdjustmentValueChanged + javax.swing.table.DefaultTableModel model3 = (javax.swing.table.DefaultTableModel) jTable3.getModel(); + model3.setNumRows(0); + for (int i = 0; i < 25; i++) { + if ((i + this.jScrollBar3.getValue() + 1) < 65535) + model3.addRow(new Object[]{String.valueOf(i + this.jScrollBar3.getValue() + 1), String.valueOf(modbusServer.inputRegisters[i + this.jScrollBar3.getValue() + 1])}); + } + }//GEN-LAST:event_jScrollBar3AdjustmentValueChanged + + private void jScrollBar4AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {//GEN-FIRST:event_jScrollBar4AdjustmentValueChanged + this.holdingRegistersChangedEvent(); + }//GEN-LAST:event_jScrollBar4AdjustmentValueChanged + + private void jScrollBar1AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {//GEN-FIRST:event_jScrollBar1AdjustmentValueChanged + javax.swing.table.DefaultTableModel model1 = (javax.swing.table.DefaultTableModel) jTable1.getModel(); + model1.setNumRows(0); + for (int i = 0; i < 25; i++) { + if ((i + this.jScrollBar1.getValue() + 1) < 65535) + model1.addRow(new Object[]{String.valueOf(i + this.jScrollBar1.getValue() + 1), String.valueOf(modbusServer.discreteInputs[i + this.jScrollBar1.getValue() + 1])}); + + } + }//GEN-LAST:event_jScrollBar1AdjustmentValueChanged + + private void jTable1PropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jTable1PropertyChange + for (int i = 0; i < jTable1.getRowCount(); i++) { + this.modbusServer.setDiscreteInput(Boolean.valueOf((String) this.jTable1.getValueAt(i, 1)), i + this.jScrollBar1.getValue() + 1); + } + jScrollBar1AdjustmentValueChanged(null); + }//GEN-LAST:event_jTable1PropertyChange + + private void jTable2PropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jTable2PropertyChange + for (int i = 0; i < jTable2.getRowCount(); i++) { + this.modbusServer.setCoil(Boolean.valueOf((String) this.jTable2.getValueAt(i, 1)), i + this.jScrollBar2.getValue() + 1); + + } + jScrollBar2AdjustmentValueChanged(null); + }//GEN-LAST:event_jTable2PropertyChange + + private void jTable3PropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jTable3PropertyChange + for (int i = 0; i < jTable3.getRowCount(); i++) { + this.modbusServer.setInputRegister(Integer.valueOf((String) this.jTable3.getValueAt(i, 1)), i + this.jScrollBar3.getValue() + 1); + + } + jScrollBar3AdjustmentValueChanged(null); + }//GEN-LAST:event_jTable3PropertyChange + + private void jPanel4PropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jPanel4PropertyChange + + }//GEN-LAST:event_jPanel4PropertyChange + + private void jTable4PropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jTable4PropertyChange + for (int i = 0; i < jTable4.getRowCount(); i++) { + this.modbusServer.setHoldingRegister(Integer.valueOf((String) this.jTable4.getValueAt(i, 1)), i + this.jScrollBar4.getValue() + 1); + + } + jScrollBar4AdjustmentValueChanged(null); + }//GEN-LAST:event_jTable4PropertyChange + + private void jTable1MouseClicked(MouseEvent evt) {//GEN-FIRST:event_jTable1MouseClicked + + this.modbusServer.setDiscreteInput((!this.modbusServer.getDiscreteInput(jTable1.getSelectedRow() + this.jScrollBar1.getValue() + 1)), (jTable1.getSelectedRow() + this.jScrollBar1.getValue() + 1)); + + jScrollBar1AdjustmentValueChanged(null); + }//GEN-LAST:event_jTable1MouseClicked + + private void jTabbedPane1MouseClicked(MouseEvent evt) {//GEN-FIRST:event_jTabbedPane1MouseClicked + + }//GEN-LAST:event_jTabbedPane1MouseClicked + + private void jTable2MouseClicked(MouseEvent evt) {//GEN-FIRST:event_jTable2MouseClicked + this.modbusServer.setCoil((!this.modbusServer.getCoil(jTable2.getSelectedRow() + this.jScrollBar2.getValue() + 1)), (jTable2.getSelectedRow() + this.jScrollBar2.getValue() + 1)); + jScrollBar2AdjustmentValueChanged(null); + }//GEN-LAST:event_jTable2MouseClicked + + public void coilsChangedEvent() { + javax.swing.table.DefaultTableModel model2 = (javax.swing.table.DefaultTableModel) jTable2.getModel(); + model2.setNumRows(0); + for (int i = 0; i < 25; i++) { + if ((i + this.jScrollBar2.getValue() + 1) < 65535) + model2.addRow(new Object[]{String.valueOf(i + this.jScrollBar2.getValue() + 1), String.valueOf(modbusServer.coils[i + this.jScrollBar2.getValue() + 1])}); + } + } + + public void holdingRegistersChangedEvent() { + javax.swing.table.DefaultTableModel model4 = (javax.swing.table.DefaultTableModel) jTable4.getModel(); + model4.setNumRows(0); + for (int i = 0; i < 25; i++) { + if ((i + this.jScrollBar4.getValue() + 1) < 65535) + model4.addRow(new Object[]{String.valueOf(i + this.jScrollBar4.getValue() + 1), String.valueOf(modbusServer.holdingRegisters[i + this.jScrollBar4.getValue() + 1])}); + } + } + + public void NumberOfConnectedClientsChanged() { + this.jLabel7.setText(String.valueOf(modbusServer.getNumberOfConnectedClients())); + } + + javax.swing.DefaultListModel model = new javax.swing.DefaultListModel(); + + public void logDataChangedEvent() { + if (jCheckBox9.getSelectedObjects() == null) + return; + + + //model.removeAllElements(); + + String listBoxData; + for (int i = 0; i < 2; i++) { + + if (modbusServer.getLogData()[i] == null) + break; + if (modbusServer.getLogData()[i].request) { + listBoxData = modbusServer.getLogData()[i].timeStamp.getTime() + " Request from Client - Functioncode: " + String.valueOf(modbusServer.getLogData()[i].functionCode); + if (modbusServer.getLogData()[i].functionCode <= 4) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Quantity: " + String.valueOf(modbusServer.getLogData()[i].quantity); + } + if (modbusServer.getLogData()[i].functionCode == 5) { + listBoxData = listBoxData + " Output Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Output Value: "; + if (modbusServer.getLogData()[i].receiveCoilValues[0] == 0) + listBoxData = listBoxData + "False"; + if (modbusServer.getLogData()[i].receiveCoilValues[0] == 0xFF00) + listBoxData = listBoxData + "True"; + } + if (modbusServer.getLogData()[i].functionCode == 6) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Register Value: " + String.valueOf(modbusServer.getLogData()[i].receiveRegisterValues[0]); + } + if (modbusServer.getLogData()[i].functionCode == 15) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Quantity: " + String.valueOf(modbusServer.getLogData()[i].quantity) + " Byte Count: " + String.valueOf(modbusServer.getLogData()[i].byteCount) + " Values Received: "; + for (int j = 0; j < modbusServer.getLogData()[i].quantity; j++) { + int shift = j % 16; + if ((i == modbusServer.getLogData()[i].quantity - 1) & (modbusServer.getLogData()[i].quantity % 2 != 0)) { + if (shift < 8) + shift = shift + 8; + else + shift = shift - 8; + } + int mask = 0x1; + mask = mask << (shift); + if ((modbusServer.getLogData()[i].receiveCoilValues[j / 16] & mask) == 0) + listBoxData = listBoxData + " False"; + else + listBoxData = listBoxData + " True"; + } + } + if (modbusServer.getLogData()[i].functionCode == 16) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Quantity: " + String.valueOf(modbusServer.getLogData()[i].quantity) + " Byte Count: " + String.valueOf(modbusServer.getLogData()[i].byteCount) + " Values Received: "; + for (int j = 0; j < modbusServer.getLogData()[i].quantity; j++) { + listBoxData = listBoxData + " " + modbusServer.getLogData()[i].receiveRegisterValues[j]; + } + } + model.add(0, listBoxData); + + + } + if (modbusServer.getLogData()[i].response) { + if (modbusServer.getLogData()[i].exceptionCode > 0) { + listBoxData = ("Response To Client - Error code: " + String.valueOf(modbusServer.getLogData()[i].errorCode)); + listBoxData = listBoxData + " Exception Code: " + String.valueOf(modbusServer.getLogData()[i].exceptionCode); + model.add(0, listBoxData); + + + } else { + listBoxData = (modbusServer.getLogData()[i].timeStamp.getTime() + " Response To Client - Functioncode: " + String.valueOf(modbusServer.getLogData()[i].functionCode)); + + if (modbusServer.getLogData()[i].functionCode <= 4) { + + listBoxData = listBoxData + " Bytecount: " + String.valueOf((int) modbusServer.getLogData()[i].byteCount) + " Values sent: "; + } + if (modbusServer.getLogData()[i].functionCode == 5) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Output Value: "; + if (modbusServer.getLogData()[i].receiveCoilValues[0] == 0) + listBoxData = listBoxData + "False"; + if (modbusServer.getLogData()[i].receiveCoilValues[0] == 0xFF00) + listBoxData = listBoxData + "True"; + } + if (modbusServer.getLogData()[i].functionCode == 6) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Register Value: " + String.valueOf(modbusServer.getLogData()[i].receiveRegisterValues[0]); + } + if (modbusServer.getLogData()[i].functionCode == 15) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Quantity: " + String.valueOf(modbusServer.getLogData()[i].quantity); + } + if (modbusServer.getLogData()[i].functionCode == 16) { + listBoxData = listBoxData + " Starting Address: " + String.valueOf(modbusServer.getLogData()[i].startingAdress) + " Quantity: " + String.valueOf(modbusServer.getLogData()[i].quantity); + } + if (modbusServer.getLogData()[i].sendCoilValues != null) { + for (int j = 0; j < modbusServer.getLogData()[i].sendCoilValues.length; j++) { + listBoxData = listBoxData + String.valueOf(modbusServer.getLogData()[i].sendCoilValues[j]) + " "; + } + } + if (modbusServer.getLogData()[i].sendRegisterValues != null) { + for (int j = 0; j < modbusServer.getLogData()[i].sendRegisterValues.length; j++) { + listBoxData = listBoxData + String.valueOf(modbusServer.getLogData()[i].sendRegisterValues[j]) + " "; + } + } + model.add(0, listBoxData); + } + } + } + } + + int topic; + String link; + + private void WebViewStateChanged(ChangeEvent evt) { + topic = new Random().nextInt(99999); + if (chckbxEnableWebview.isSelected()) { + + link = "http://www.easymodbustcp.net/webview/easymodbuswebview.html?topic=" + topic; + lblLink.setText("" + link + ""); + lblWebViewAddress.setVisible(true); + lblLink.setVisible(true); + + + } else { + + lblWebViewAddress.setVisible(false); + lblLink.setVisible(false); + + } + + } + + private void linkClicked() { + if (Desktop.isDesktopSupported()) { + Desktop desktop = Desktop.getDesktop(); + try { + desktop.browse(new URI(link)); + } catch (IOException | URISyntaxException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + Runtime runtime = Runtime.getRuntime(); + try { + runtime.exec("xdg-open " + link); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new NewJFrame().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private JCheckBox jCheckBox1; + private JCheckBox jCheckBox2; + private JCheckBox jCheckBox3; + private JCheckBox jCheckBox4; + private JCheckBox jCheckBox5; + private JCheckBox jCheckBox6; + private JCheckBox jCheckBox7; + private JCheckBox jCheckBox8; + private JCheckBox jCheckBox9; + private JLabel jLabel1; + private JLabel jLabel2; + private JLabel jLabel3; + private JLabel jLabel4; + private JLabel jLabel5; + private JLabel jLabel6; + private JLabel jLabel7; + private javax.swing.JList jList1; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel3; + private javax.swing.JPanel jPanel4; + private javax.swing.JPanel jPanel5; + private JScrollBar jScrollBar1; + private JScrollBar jScrollBar2; + private JScrollBar jScrollBar3; + private JScrollBar jScrollBar4; + private JScrollPane jScrollPane1; + private JScrollPane jScrollPane2; + private JScrollPane jScrollPane3; + private JScrollPane jScrollPane4; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JTable jTable1; + private javax.swing.JTable jTable2; + private javax.swing.JTable jTable3; + private javax.swing.JTable jTable4; + private JCheckBox chckbxEnableWebview; + private JLabel lblWebViewAddress; + private JLabel lblLink; +} diff --git a/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/PLCLoggerCompact.jpg b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/PLCLoggerCompact.jpg new file mode 100644 index 0000000000000000000000000000000000000000..48d8d884fb80eea3ae142a5f6ef32afdf33ba900 Binary files /dev/null and b/leigh-historian/src/main/java/de/re/easymodbus/modbusserver/gui/PLCLoggerCompact.jpg differ diff --git a/leigh-historian/src/main/java/leigh/historian/Historian.java b/leigh-historian/src/main/java/leigh/historian/Historian.java new file mode 100644 index 0000000000000000000000000000000000000000..b375fa68c83fba74f4a8521d3a56f7068b6ad925 --- /dev/null +++ b/leigh-historian/src/main/java/leigh/historian/Historian.java @@ -0,0 +1,155 @@ +package leigh.historian; + +import com.stumbleupon.async.Callback; +import com.stumbleupon.async.Deferred; +import de.re.easymodbus.modbusclient.ModbusClient; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import net.opentsdb.core.TSDB; +import net.opentsdb.uid.NoSuchUniqueName; +import net.opentsdb.uid.UniqueId.UniqueIdType; +import net.opentsdb.utils.Config; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + + +public class Historian { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(Historian.class); + + public static void othermain(String[] args) { + ModbusClient modbusClient = new ModbusClient("10.52.0.150", 502); + try { + modbusClient.Connect(); + // modbusClient.WriteSingleCoil(0, true); + // modbusClient.WriteSingleRegister(0, 1234); + // modbusClient.WriteMultipleRegisters(11, ModbusClient.ConvertFloatToRegisters((float) 123.56)); + + logger.info("Reading... [register: {}] [value: {}]", 3, + modbusClient.ReadHoldingRegisters(3, 4)[0]); + + //System.out.println(modbusClient.ReadCoils(0, 1)[0]); + // System.out.println(modbusClient.ReadHoldingRegisters(0, 1)[0]); + // System.out.println(ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(11, 2))); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static String pathToConfigFile; + + public static void processArgs(final String[] args) { + // Set these as arguments so you don't have to keep path information in + // source files + if (args != null && args.length > 0) { + pathToConfigFile = args[0]; + } + } + + public static void main(final String[] args) throws Exception { + processArgs(args); + + // Create a config object with a path to the file for parsing. Or manually + // override settings. + // e.g. config.overrideConfig("tsd.storage.hbase.zk_quorum", "localhost"); + final Config config; + if (pathToConfigFile != null && !pathToConfigFile.isEmpty()) { + config = new Config(pathToConfigFile); + } else { + // Search for a default config from /etc/opentsdb/opentsdb.conf, etc. + config = new Config(true); + } + + // Dev/Test Server + config.overrideConfig("tsd.storage.hbase.zk_quorum", "pod-db2.leigh-co.com"); + + final TSDB tsdb = new TSDB(config); + + // Declare new metric + String metricName = "my.tsdb.test.metric"; + // First check to see it doesn't already exist + byte[] byteMetricUID; // we don't actually need this for the first + // .addPoint() call below. + // TODO: Ideally we could just call a not-yet-implemented tsdb.uIdExists() + // function. + // Note, however, that this is optional. If auto metric is enabled + // (tsd.core.auto_create_metrics), the UID will be assigned in call to + // addPoint(). + try { + byteMetricUID = tsdb.getUID(UniqueIdType.METRIC, metricName); + } catch (IllegalArgumentException iae) { + System.out.println("Metric name not valid."); + iae.printStackTrace(); + System.exit(1); + } catch (NoSuchUniqueName nsune) { + // If not, great. Create it. + byteMetricUID = tsdb.assignUid("metric", metricName); + } + + // Make a single datum + long timestamp = System.currentTimeMillis() / 1000; + long value = 314159; + // Make key-val + Map tags = new HashMap(1); + tags.put("script", "example1"); + + // Start timer + long startTime1 = System.currentTimeMillis(); + + // Write a number of data points at 30 second intervals. Each write will + // return a deferred (similar to a Java Future or JS Promise) that will + // be called on completion with either a "null" value on success or an + // exception. + int n = 100; + ArrayList> deferreds = new ArrayList>(n); + for (int i = 0; i < n; i++) { + Deferred deferred = tsdb.addPoint(metricName, timestamp, value + i, tags); + deferreds.add(deferred); + timestamp += 30; + } + + // Add the callbacks to the deferred object. (They might have already + // returned, btw) + // This will cause the calling thread to wait until the add has completed. + System.out.println("Waiting for deferred result to return..."); + Deferred.groupInOrder(deferreds) + .addErrback(new Historian().new errBack()) + .addCallback(new Historian().new succBack()) + // Block the thread until the deferred returns it's result. + .join(); + // Alternatively you can add another callback here or use a join with a + // timeout argument. + + // End timer. + long elapsedTime1 = System.currentTimeMillis() - startTime1; + System.out.println("\nAdding " + n + " points took: " + elapsedTime1 + + " milliseconds.\n"); + + // Gracefully shutdown connection to TSDB. This is CRITICAL as it will + // flush any pending operations to HBase. + tsdb.shutdown().join(); + } + + // This is an optional errorback to handle when there is a failure. + class errBack implements Callback { + public String call(final Exception e) throws Exception { + String message = ">>>>>>>>>>>Failure!>>>>>>>>>>>"; + System.err.println(message + " " + e.getMessage()); + e.printStackTrace(); + return message; + } + } + + ; + + // This is an optional success callback to handle when there is a success. + class succBack implements Callback> { + public Object call(final ArrayList results) { + System.out.println("Successfully wrote " + results.size() + " data points"); + return null; + } + } + + ; +} diff --git a/leigh-inventory/.gitignore b/leigh-inventory/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-inventory/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-inventory/LICENSE b/leigh-inventory/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-inventory/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-inventory/build.gradle b/leigh-inventory/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..4ce0c92a3150cab71e966951ec144d8afea5277e --- /dev/null +++ b/leigh-inventory/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + testImplementation group: 'junit', name: 'junit', version: '4.12' +} diff --git a/leigh-inventory/src/main/java/leigh/inventory/NumberGenerator.java b/leigh-inventory/src/main/java/leigh/inventory/NumberGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..fb779f439762176a9d5e9ed76b3854ccabf39703 --- /dev/null +++ b/leigh-inventory/src/main/java/leigh/inventory/NumberGenerator.java @@ -0,0 +1,17 @@ +package leigh.inventory; + +import leigh.mecha.math.RadixConverter; +import leigh.mecha.util.StringAccumulatorV2; + +public class NumberGenerator { + public static void main(String args[]) { + RadixConverter r = new RadixConverter(RadixConverter.RADIX36); + + for (int i = 2000; i < 2100; i++) { + StringAccumulatorV2 sa = new StringAccumulatorV2(","); + // sa.add(Integer.toString(i)); + sa.add(r.encode(i)); + System.out.println(sa.asString()); + } + } +} diff --git a/leigh-mecha-audio/.gitignore b/leigh-mecha-audio/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-audio/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-audio/LICENSE b/leigh-mecha-audio/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-audio/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-audio/build.gradle b/leigh-mecha-audio/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..606388ea03c478d268a9e19270f871d32ae4d7cd --- /dev/null +++ b/leigh-mecha-audio/build.gradle @@ -0,0 +1,34 @@ +plugins { + id 'java' + id 'java-library' +} + +group 'leigh' +version '15.0' + +apply plugin: 'application' + +repositories { + mavenCentral() +} + +ext.moduleName = 'Project.main' + +dependencies { + api project(':leigh-mecha') + api 'org:jaudiotagger:2.0.3' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' +} + +jar { + inputs.property("moduleName", moduleName) + manifest { + attributes('Automatic-Module-Name': moduleName, + 'Main-Class': 'leigh.mecha.audio.AudioScanner') + } +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/leigh-mecha-audio/src/main/java/leigh/mecha/audio/AudioFileProcessor.java b/leigh-mecha-audio/src/main/java/leigh/mecha/audio/AudioFileProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..694cdaa96110898063fef8b98b01e26beb58aecc --- /dev/null +++ b/leigh-mecha-audio/src/main/java/leigh/mecha/audio/AudioFileProcessor.java @@ -0,0 +1,7 @@ +package leigh.mecha.audio; + +import java.nio.file.Path; + +public interface AudioFileProcessor { + void process(Path file, String artist, String album, String title, int length, long bitrate); +} diff --git a/leigh-mecha-audio/src/main/java/leigh/mecha/audio/AudioScanner.java b/leigh-mecha-audio/src/main/java/leigh/mecha/audio/AudioScanner.java new file mode 100644 index 0000000000000000000000000000000000000000..00c2ac0d029d836b8a4516389b937573a985a51c --- /dev/null +++ b/leigh-mecha-audio/src/main/java/leigh/mecha/audio/AudioScanner.java @@ -0,0 +1,155 @@ +package leigh.mecha.audio; + +import leigh.mecha.lang.CountingList; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; +import leigh.mecha.util.VelocityWatch; +import org.apache.commons.io.FilenameUtils; +import org.jaudiotagger.audio.AudioFile; +import org.jaudiotagger.audio.AudioFileIO; +import org.jaudiotagger.audio.AudioHeader; +import org.jaudiotagger.audio.exceptions.CannotReadException; +import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; +import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; +import org.jaudiotagger.tag.FieldKey; +import org.jaudiotagger.tag.TagException; + +import java.io.IOException; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.time.Duration; +import java.util.HashSet; +import java.util.Locale; + +/** + * Scan a media path to build a database of audio files present within the path. + * + * @author C. Alexander Leigh + */ +public class AudioScanner { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(AudioScanner.class); + private final CountingList extensions = new CountingList<>(); + private final CountingList rejectedExtensions = new CountingList<>(); + private final HashSet corruptFiles = new HashSet<>(); + private final HashSet supported = new HashSet<>(); + private long totalTime; + + public static void main(String[] args) throws Exception { + if (args.length == 0) { + logger.info("AudioScanner: dir ..."); + System.exit(UniversalJob.RET_BADARGS); + } + + AudioScanner scanner = new AudioScanner(); + + scanner.defaultSupported(); + for (String arg : args) { + scanner.scan(Paths.get(arg), null); + } + + logger.info("Rejected files: [total: {}] {}", scanner.getRejectedExtensions().total(), + scanner.getRejectedExtensions()); + logger.info("Accepted files: [total: {}] {}", scanner.getExtensions().total(), + scanner.getExtensions()); + logger.info("Corrupted files: [cnt: {}]", scanner.getCorruptFiles().size()); + logger.info("Total duration: {}", scanner.totalTime()); + } + + public CountingList getExtensions() { + return extensions; + } + + public HashSet getCorruptFiles() { + return corruptFiles; + } + + public Duration totalTime() { + synchronized (this) { + return Duration.ofSeconds(totalTime); + } + } + + public void defaultSupported() { + supported.add("mp3"); + supported.add("mp4"); + supported.add("m4p"); + supported.add("m4a"); + supported.add("wav"); + supported.add("m4v"); + supported.add("aif"); + supported.add("aiff"); + supported.add("mpga"); + supported.add("mp2"); + } + + public CountingList getRejectedExtensions() { + return rejectedExtensions; + } + + public HashSet getSupported() { + return supported; + } + + /** + * Scan the given path recursively looking for audio files. + */ + public void scan(Path root, AudioFileProcessor processor) throws Exception { + VelocityWatch watch = new VelocityWatch(logger); + + Files.walkFileTree(root, new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + logger.debug("Visiting file. [file: {}]", file); + if (!Files.exists(file)) { + logger.warn("File exists, but could not open: {}", file); + return FileVisitResult.CONTINUE; + } + + String extension = FilenameUtils.getExtension(file.toString()); + if (extension != null) extension = extension.toLowerCase(Locale.US); + + watch.event(extension); + + if (extension == null || !supported.contains(extension)) { + logger.warn("Skipping file. [fn: {}]", file); + rejectedExtensions.increment(extension, 1); + return FileVisitResult.CONTINUE; + } + + extensions.increment(extension, 1); + + try { + processAudio(file, processor); + } catch (Exception e) { + e.printStackTrace(); + corruptFiles.add(file); + } + + return FileVisitResult.CONTINUE; + } + }); + } + + /** + * Import the audio file metadata into the scanner. + */ + public void processAudio(Path file, AudioFileProcessor processor) throws TagException, ReadOnlyFileException, + CannotReadException, InvalidAudioFrameException, IOException { + AudioFile audio = AudioFileIO.read(file.toFile()); + AudioHeader hdr = audio.getAudioHeader(); + int seconds = hdr.getTrackLength(); + long bitrate = hdr.getBitRateAsNumber(); + + synchronized (this) { + totalTime += seconds; + } + + String artist = audio.getTag().getFirst(FieldKey.ARTIST); + String title = audio.getTag().getFirst(FieldKey.TITLE); + String album = audio.getTag().getFirst(FieldKey.ALBUM); + + if (processor != null) + processor.process(file, artist, album, title, seconds, bitrate); + } +} diff --git a/leigh-mecha-db-derby/.gitignore b/leigh-mecha-db-derby/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-db-derby/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-db-derby/LICENSE b/leigh-mecha-db-derby/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-db-derby/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-db-derby/build.gradle b/leigh-mecha-db-derby/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..ea7d102dc11e94bdb207a1ef462b64bcacdc962d --- /dev/null +++ b/leigh-mecha-db-derby/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java' + id 'java-library' +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation group: 'junit', name: 'junit', version: '4.12' + api group: 'org.apache.derby', name: 'derby', version: '10.14.2.0' + api project(':leigh-mecha') +} diff --git a/leigh-mecha-db-derby/src/main/java/org/a6v/mecha/db/derby/EmbeddedDerby.java b/leigh-mecha-db-derby/src/main/java/org/a6v/mecha/db/derby/EmbeddedDerby.java new file mode 100644 index 0000000000000000000000000000000000000000..1188c6c341bfc8f91977167ce931b5c887483eec --- /dev/null +++ b/leigh-mecha-db-derby/src/main/java/org/a6v/mecha/db/derby/EmbeddedDerby.java @@ -0,0 +1,35 @@ +package org.a6v.mecha.db.derby; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.derby.jdbc.EmbeddedDriver; + +import java.io.Closeable; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class EmbeddedDerby implements Closeable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(EmbeddedDerby.class); + private final String databaseName; + private final String databaseURL; + + public EmbeddedDerby(String databaseName) throws SQLException { + DriverManager.registerDriver(new EmbeddedDriver()); + this.databaseName = databaseName; + databaseURL = "jdbc:derby:" + databaseName + ";create=true"; + } + + public Connection getConnection() throws SQLException { + return DriverManager.getConnection(databaseURL); + } + + public void close() { + logger.info("Attempting to shut down derby database. [name: {}]", databaseName); + try { + DriverManager.getConnection("jdbc:derby:;shutdown=true"); + } catch (SQLException e) { + // Do nothing + } + } +} diff --git a/leigh-mecha-db-mysql/.gitignore b/leigh-mecha-db-mysql/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-db-mysql/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-db-mysql/LICENSE b/leigh-mecha-db-mysql/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-db-mysql/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-db-mysql/build.gradle b/leigh-mecha-db-mysql/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..5d0f4f1b83b7822b63e23dce4f2e267fbd9d7bf1 --- /dev/null +++ b/leigh-mecha-db-mysql/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'java-library' +} + +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha-db') + api group: 'com.mchange', name: 'c3p0', version: '0.9.5.2' + api group: 'mysql', name: 'mysql-connector-java', version: '8.0.18' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} diff --git a/leigh-mecha-db-mysql/src/main/java/org/a6v/mecha/db/mysql/JdbcUtil.java b/leigh-mecha-db-mysql/src/main/java/org/a6v/mecha/db/mysql/JdbcUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6675f5623813b2e2e6294b3009c3e7e1e0607973 --- /dev/null +++ b/leigh-mecha-db-mysql/src/main/java/org/a6v/mecha/db/mysql/JdbcUtil.java @@ -0,0 +1,21 @@ +package org.a6v.mecha.db.mysql; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class JdbcUtil { + /** + * Return the first generated key in the provided statement as an integer, or, null if the statement + * does not contain generated keys. + * + * @since mk14 mod0 (CRYSTAL) + */ + public static Integer getFirstGeneratedKey(Statement st) throws SQLException { + ResultSet generatedKeys = st.getGeneratedKeys(); + if (generatedKeys.next()) { + return generatedKeys.getInt(1); + } + return null; + } +} diff --git a/leigh-mecha-db-mysql/src/main/java/org/a6v/mecha/db/mysql/MysqlSymbolDictionary.java b/leigh-mecha-db-mysql/src/main/java/org/a6v/mecha/db/mysql/MysqlSymbolDictionary.java new file mode 100644 index 0000000000000000000000000000000000000000..4d9430a61f2baf8f056f2f15ff9fcfc79aa9ea74 --- /dev/null +++ b/leigh-mecha-db-mysql/src/main/java/org/a6v/mecha/db/mysql/MysqlSymbolDictionary.java @@ -0,0 +1,56 @@ +package org.a6v.mecha.db.mysql; + +import com.mchange.v2.c3p0.PooledDataSource; +import leigh.db.SymbolDictionary; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * A symbol dictionary implementation for MySQL. This dictionary drives off a single table. The dictionary is + * case-sensitive. + * + * @author C. Alexander Leigh + * @since mk14 mod0 (CRYSTAL) + */ +public class MysqlSymbolDictionary implements SymbolDictionary { + private final String tableName; + private final PooledDataSource ds; + + public MysqlSymbolDictionary(PooledDataSource ds, String tableName) throws SQLException { + this.tableName = tableName; + this.ds = ds; + } + + /** + * Return the id for the given symbol. If the symbol did not previously exist in the dictionary, it will + * be added. + */ + public synchronized int read(String symbol) throws SQLException { + try (Connection con = ds.getConnection()) { + try (PreparedStatement lookupQuery = con.prepareStatement("SELECT id FROM " + tableName + " WHERE symbol = ?")) { + lookupQuery.setString(1, symbol); + try (ResultSet rs = lookupQuery.executeQuery()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } + + try (PreparedStatement insertQuery = con.prepareStatement("INSERT INTO " + tableName + " (symbol) VALUES (?)", + PreparedStatement.RETURN_GENERATED_KEYS)) { + insertQuery.setString(1, symbol); + insertQuery.execute(); + + return JdbcUtil.getFirstGeneratedKey(insertQuery); + } + } + } + + @Override + public void close() { + + } +} diff --git a/leigh-mecha-db/.gitignore b/leigh-mecha-db/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-db/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-db/LICENSE b/leigh-mecha-db/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-db/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-db/build.gradle b/leigh-mecha-db/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..85e33a163277dc0d54a25ac1ff4c0d4beb65795e --- /dev/null +++ b/leigh-mecha-db/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation group: 'junit', name: 'junit', version: '4.12' +} diff --git a/leigh-mecha-db/src/main/java/leigh/db/SymbolDictionary.java b/leigh-mecha-db/src/main/java/leigh/db/SymbolDictionary.java new file mode 100644 index 0000000000000000000000000000000000000000..122bed81324e6665c78f7671af83df9baae021c0 --- /dev/null +++ b/leigh-mecha-db/src/main/java/leigh/db/SymbolDictionary.java @@ -0,0 +1,7 @@ +package leigh.db; + +import java.io.Closeable; + +public interface SymbolDictionary extends Closeable { + int read(String symbol) throws Exception; +} diff --git a/leigh-mecha-exec/.gitignore b/leigh-mecha-exec/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-exec/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-exec/LICENSE b/leigh-mecha-exec/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-exec/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-exec/build.gradle b/leigh-mecha-exec/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..31bda7099b927e190662bbda4c9de93ef000665a --- /dev/null +++ b/leigh-mecha-exec/build.gradle @@ -0,0 +1,64 @@ +plugins { + id 'java' + id 'java-library' + id 'maven-publish' +} + +version leigh_mecha_exec_ver + +repositories { + mavenCentral() +} + +dependencies { + api 'com.jcraft:jsch:0.1.54' + api 'org.apache.commons:commons-exec:1.3' + api 'org.apache.velocity:velocity:1.7' + api 'net.sf.expectit:expectit-core:0.9.0' + api project(':leigh-mecha') + testImplementation group: 'junit', name: 'junit', version: '4.12' +} + +java { + withJavadocJar() +} + +publishing { + publications { + mavenJava(MavenPublication) { + artifactId = 'leigh-mecha-exec' + from components.java + versionMapping { + usage('java-api') { + fromResolutionOf('runtimeClasspath') + } + usage('java-runtime') { + fromResolutionResult() + } + } + pom { + name = 'LEIGH libmecha-exec' + description = 'LEIGH Execution Support' + url = 'http://leigh-co.com' + licenses { + license { + name = 'COMMERCIAL' + url = 'http://leigh-co.com' + } + } + developers { + developer { + id = 'aleigh' + name = 'C. Alexander Leigh' + email = 'a@leigh-co.com' + } + } + } + } + } + repositories { + maven { + url = "$buildDir/repos/dist" + } + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/BatchExecutor.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/BatchExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..3d4c497e41142cec6e666432573fdb5762dfd676 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/BatchExecutor.java @@ -0,0 +1,32 @@ +package leigh.mecha.exec; + +/** + * This class provides a reference implementation for running an external process to process a batch script. The + * actual process is undefined, and this class is widely applicable for automating tools. + * + * @author C. Alexander Leigh + */ +public class BatchExecutor { + private final LocalExecutor le = new LocalExecutor(); + private final String cmd; + private final String[] args; + + /** + * Create a new batch executor for the given command and arguments. + */ + public BatchExecutor(String cmd, String[] args) { + this.cmd = cmd; + this.args = args; + } + + /** + * Attempt to synchronously execute the given task and return the result to the caller. + */ + public void exec(BatchTask task) throws Exception { + try (ProcessExecution pe = le.execute(cmd, args)) { + task.writeScript(pe.getOutputStream()); + pe.getOutputStream().flush(); + task.finished(pe.drainInput()); + } + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/BatchTask.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/BatchTask.java new file mode 100644 index 0000000000000000000000000000000000000000..4e761ff314e714dac0f41d7acbf9ddd367b94014 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/BatchTask.java @@ -0,0 +1,23 @@ +package leigh.mecha.exec; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Classes implementing this interface represent a batch script which can be applied to some kind of + * {@link BatchExecutor}. + * + * @author C. Alexander Leigh + */ +public interface BatchTask { + /** + * Write the script to the given output stream. It is not necessary to close() or + * flush() the stream. + */ + void writeScript(OutputStream os) throws IOException; + + /** + * Called when the script is finished. + */ + void finished(String result) throws IOException; +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/JavaRuntime.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/JavaRuntime.java new file mode 100644 index 0000000000000000000000000000000000000000..d52555427d23238e4922ff582f19b60d2a75f07c --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/JavaRuntime.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.exec; + +import java.io.File; + +/** + * Contains utility methods useful for invoking another copy of the Java VM. Within the constraints of this + * class, it is presumed that no input/output will be exchange, and the "forking" process will not monitor + * the new process. + *

+ * This class was initially created to facilitate running jobs from ESP/ENGINE. + * + * @author C. Alexander Leigh + */ +public final class JavaRuntime { + /** + * Return the full path to the java executable for this execution. This is the executable + * which will be invoked by this class for any future instances. + * + * @return + */ + public static String buildExecPath() { + return System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; + } +} \ No newline at end of file diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/LocalExecutor.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/LocalExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..9d0a9a75250e2e8848ea00b406d99061728d7606 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/LocalExecutor.java @@ -0,0 +1,24 @@ +package leigh.mecha.exec; + +import org.apache.commons.lang.ArrayUtils; + +import java.util.List; + +public class LocalExecutor implements ProcessExecutor { + @Override + public ProcessExecution execute(String cmd, List args) throws Exception { + return execute(cmd, args.stream().toArray(String[]::new)); + } + + @Override + public ProcessExecution execute(String cmd, String[] args) throws Exception { + Runtime rt = Runtime.getRuntime(); + Process proc = rt.exec((String[]) ArrayUtils.addAll(new String[]{cmd}, args)); + return new ProcessExecutionImpl(proc.getInputStream(), proc.getOutputStream(), proc.getErrorStream()); + } + + @Override + public void close() throws Exception { + // Intentionally Blank + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/LocalPowerShell.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/LocalPowerShell.java new file mode 100644 index 0000000000000000000000000000000000000000..32f8b82835f094ad74ae9d1a2875d88dd2e7328c --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/LocalPowerShell.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.exec; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.exec.CommandLine; +import org.apache.commons.exec.DefaultExecutor; +import org.apache.commons.exec.ExecuteWatchdog; +import org.apache.commons.exec.PumpStreamHandler; + +import java.io.*; + +/** + * Executes a PowerShell command on the local Windows system. This mechanism is also capable of executing commands on remote + * systems via the PowerShell remoting facility (or any other RMI facility installed on the system). + * + * @author C. Alexander Leigh + */ +public class LocalPowerShell { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(LocalPowerShell.class); + private final File script; + private final File output; + private final int timeoutMs = 60 * 1000; + private ByteArrayOutputStream stdout; + + + public LocalPowerShell() throws IOException { + script = File.createTempFile(getClass().getCanonicalName(), ".ps1"); + output = File.createTempFile(getClass().getCanonicalName(), ".output"); + } + + /** + * Return a new buffered output stream referring to the script associated with this + * instance. Write to the stream and then close it before calling execute(). + * + * @return + * @throws FileNotFoundException + */ + public OutputStream getScriptStream() throws FileNotFoundException { + return new BufferedOutputStream(new FileOutputStream(script)); + } + + /** + * Execute the script represented by this instance. The output of the script will be buffered + * to a file (on the off chance the result is large enough to overwhelm RAM). + * + * @throws IOException + */ + public void execute() throws IOException { + final String line = "PowerShell -F " + script.getAbsolutePath(); + + stdout = new ByteArrayOutputStream(); + final PumpStreamHandler psh = new PumpStreamHandler(stdout); + + final CommandLine cmdLine = CommandLine.parse(line); + final DefaultExecutor executor = new DefaultExecutor(); + executor.setStreamHandler(psh); + + final ExecuteWatchdog watchdog = new ExecuteWatchdog(timeoutMs); + executor.setWatchdog(watchdog); + executor.execute(cmdLine); + + return; + } + + public InputStream getStdout() { + return new ByteArrayInputStream(stdout.toByteArray()); + } + + public String getStdoutString() { + return stdout.toString(); + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/PowerShell.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/PowerShell.java new file mode 100644 index 0000000000000000000000000000000000000000..e373666534821d3bd0015306c58cb780cdc34ba3 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/PowerShell.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.exec; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.exec.CommandLine; +import org.apache.commons.exec.DefaultExecutor; +import org.apache.commons.exec.ExecuteWatchdog; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class PowerShell { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(PowerShell.class); + private final File script; + private final long timeoutMs = 60 * 1000; + + public PowerShell() throws IOException { + script = File.createTempFile(getClass().getCanonicalName(), ".ps1"); + } + + public static void main(final String... args) throws IOException { + final PowerShell ps = new PowerShell(); + ps.thing(); + } + + public void thing() throws IOException { + logger.info("Created script file: {}", script); + script.createNewFile(); + + final FileOutputStream fos = new FileOutputStream(script); + + fos.write("$pwd = ConvertTo-SecureString '' -asPlaintext -force\r\n".getBytes()); + fos.write("$cred = New-Object System.Management.Automation.PSCredential(\"PSTGC\\aleigh\",$pwd)\r\n".getBytes()); + fos.write("$ses = New-PSSession -ComputerName sef-db1.pstgc.com -Credential $cred\r\n".getBytes()); + fos.write("Invoke-Command -credential $cred -computerName sef-db1.pstgc.com -scriptBlock {$tmpfile = [IO.Path]::GetTempFileName();(get-WmiObject win32_logicaldisk | ConvertTo-Xml).save($tmpfile);Get-Content $tmpfile;Remove-Item $tmpfile}\r\n".getBytes()); + fos.write("Remove-PSSession $ses\r\n".getBytes()); + + fos.close(); + + final String line = "PowerShell -F " + script.getAbsolutePath(); + final CommandLine cmdLine = CommandLine.parse(line); + final DefaultExecutor executor = new DefaultExecutor(); + + final ExecuteWatchdog watchdog = new ExecuteWatchdog(timeoutMs); + executor.setWatchdog(watchdog); + + final int exitValue = executor.execute(cmdLine); + + logger.info("Return value {}", Integer.valueOf(exitValue)); + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecution.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecution.java new file mode 100644 index 0000000000000000000000000000000000000000..35803442b43c47cb2b4e1cb752c36e908b251ede --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecution.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.exec; + +import leigh.mecha.lang.Handle; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; + +/** + * Classes implementing this interface provide future results for a process execution and access to the stdin + * stream for the executed process (whether local or remote). + * + * @author C. Alexander Leigh + */ +public interface ProcessExecution extends Handle, AutoCloseable { + /** + * Return an InputStream which corresponds to stdout on the process. + * + * @return + * @throws IOException + */ + InputStream getInputStream() throws IOException; + + /** + * Return an OutputStream which corresponds to stdin on the process. + * + * @return + * @throws IOException + */ + OutputStream getOutputStream() throws IOException; + + /** + * Return an InputStream which corresponds to stderr on the process. + * + * @return + * @throws IOException + */ + InputStream getErrorStream() throws IOException; + + String drainInput(Charset set) throws IOException; + + String drainInput() throws IOException; + + int getReturnCode(); +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecutionImpl.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecutionImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a4c2356ddfd92165239edc374d1a74664835496d --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecutionImpl.java @@ -0,0 +1,78 @@ +package leigh.mecha.exec; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.IOUtil; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; + +/** + * A straightforward implementation of the {@link ProcessExecution} interface. This implementation is currently + * used by {@link LocalExecutor}. + * + * @author C. Alexander Leigh + */ +public class ProcessExecutionImpl implements ProcessExecution{ + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ProcessExecutionImpl.class); + private final InputStream input; + private final OutputStream output; + private final InputStream error; + + public ProcessExecutionImpl(InputStream input, OutputStream output, InputStream error) { + this.input = input; + this.output = output; + this.error = error; + } + + @Override + public InputStream getInputStream() throws IOException { + return input; + } + + @Override + public OutputStream getOutputStream() throws IOException { + return output; + } + + @Override + public InputStream getErrorStream() throws IOException { + return error; + } + + @Override + public String drainInput(Charset set) throws IOException { + return IOUtil.readAll(input, set); + } + + @Override + public String drainInput() throws IOException { + return drainInput(Charset.defaultCharset()); + } + + @Override + public int getReturnCode() { + return 0; + } + + @Override + public void close() { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + output.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + error.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecutor.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..ee8763abb660a8216dcc6f0e88bba5101e968089 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ProcessExecutor.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.exec; + +import java.util.List; + +/** + * Classes implementing this interface are capable of running processes on local or remote systems and capturing + * their results. + * + * @author C. Alexander Leigh + */ +public interface ProcessExecutor extends AutoCloseable { + /** + * Asynchronously start a new process and return a results object to the caller. + */ + ProcessExecution execute(String cmd, List args) throws Exception; + + /** + * Asynchronously start a new process and return a results object to the caller. + */ + ProcessExecution execute(String cmd, String args[]) throws Exception; +} \ No newline at end of file diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ScriptTask.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ScriptTask.java new file mode 100644 index 0000000000000000000000000000000000000000..847c0fc742ce3c9c91a7fa61eef57c6da241daed --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/ScriptTask.java @@ -0,0 +1,31 @@ +package leigh.mecha.exec; + +import java.io.IOException; +import java.io.OutputStream; + + +public class ScriptTask implements BatchTask { + private final String script; + private String result; + + public ScriptTask(String script) { + this.script = script; + } + + /** + * Write the script representing this task to the given output stream. + */ + @Override + public void writeScript(OutputStream os) throws IOException { + os.write(script.getBytes()); + } + + @Override + public void finished(String result) { + this.result = result; + } + + public String getResult() { + return result; + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/SshExecution.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/SshExecution.java new file mode 100644 index 0000000000000000000000000000000000000000..869f89cf7d2568601934162368629dadf1c97137 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/SshExecution.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.exec; + +import com.jcraft.jsch.ChannelExec; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.IOUtil; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; + +public class SshExecution implements ProcessExecution { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SshExecution.class); + private final ChannelExec channel; + + public SshExecution(ChannelExec channel) { + this.channel = channel; + } + + @Override + public InputStream getInputStream() throws IOException { + return channel.getInputStream(); + } + + @Override + public OutputStream getOutputStream() throws IOException { + return channel.getOutputStream(); + } + + @Override + public InputStream getErrorStream() throws IOException { + return channel.getErrStream(); + } + + @Override + public String drainInput(Charset set) throws IOException { + return IOUtil.readAll(channel.getInputStream(), set); + } + + @Override + public String drainInput() throws IOException { + return drainInput(Charset.defaultCharset()); + } + + /** + * Close the handle and release any associated resources. Close always succeeds even if the underlying + * resource is in an error condition. + */ + @Override + public void close() { + logger.info("Closing execution channel."); + channel.disconnect(); + } + + public int getReturnCode() { + return channel.getExitStatus(); + } +} diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/SshExecutor.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/SshExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..1306aa2baeaa5c258323866fb16baef952ecd619 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/SshExecutor.java @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.exec; + +import com.jcraft.jsch.*; +import leigh.mecha.cred.Credential; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.IOUtil; +import leigh.mecha.util.StringAccumulatorV2; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.List; +import java.util.Properties; + +/** + * This class provides an executor service facade for SSH. The class is limited in that it will only function with + * remote commands which do not require input. + *

+ * Implementation notes: + *

+ * For the duration this object is active, a SSH session will be maintained with the remote endpoint. If the session + * fails, the class will not attempt to auto-connect and subsequent requests will fail. + *

+ * Calling exec() multiple times gives reasonable performance since a new session does not have to be + * created each time, only a channel. However, whatever state on the remote endpoint is maintained between + * executions (for example, if a previous remote command has changed the remote execution environment or caused + * an error). + *

+ * Many remote endpoints have idle-timeouts. If this object is created and a session established, if an idle-timeout + * occurs on the remote, the session will be in a disconnected state. As a result, further executions will fail, + * as this class does not re-establish the connection automatically. + * + * @author C. Alexander Leigh + */ +// TODO: Add retry mechanic +// TODO: Lazy initialize the JSSH channel +public class SshExecutor implements ProcessExecutor, AutoCloseable { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SshExecutor.class); + private JSch jsch = new JSch(); + private Session session; + private final String host; + private final int port; + private final String username; + private final String password; + + public SshExecutor(String host, int port, Credential cred) throws Exception { + this(host, port, cred.getUsername(), cred.getPassword()); + } + + public SshExecutor(String host, int port, String username, String password) throws Exception { + this.host = host; + this.port = port; + this.username = username; + this.password = password; + openSession(); + } + + /** + * Open a session to the configured peer. If a session is already open, it will be closed and a new one + * will be created. + * + * @throws JSchException + */ + private void openSession() throws JSchException { + if (session != null) { + session.disconnect(); + } + + session = jsch.getSession(username, host, port); + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); + session.setPassword(password); + session.connect(); + } + + /** + * Transmit the given input stream to the SSH peer as a file. + *

+ * Note: This method will not close() the data stream. If an exception is thrown, + * some data may have been read from the stream. + * + * @param filename + * @param data + */ + public void upload(String filename, InputStream data, long length) throws Exception { + // exec 'scp -t rfile' remotely + + boolean ptimestamp = false; + + String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + filename; + Channel channel = session.openChannel("exec"); + try { + ((ChannelExec) channel).setCommand(command); + + // get I/O streams for remote scp + OutputStream out = channel.getOutputStream(); + InputStream in = channel.getInputStream(); + channel.connect(); + + if (checkAck(in) != 0) { + throw new Exception("ACK failed"); + } + + long now = System.currentTimeMillis() / 1000; + if (ptimestamp) { + command = "T " + (now) + " 0"; + command += (" " + (now) + " 0\n"); + out.write(command.getBytes()); + out.flush(); + if (checkAck(in) != 0) { + System.exit(0); + } + } + + long filesize = length; + command = "C0644 " + filesize + " "; + if (filename.lastIndexOf('/') > 0) { + command += filename.substring(filename.lastIndexOf('/') + 1); + } else { + command += filename; + } + command += "\n"; + out.write(command.getBytes()); + out.flush(); + if (checkAck(in) != 0) { + System.exit(0); + } + + IOUtil.copy(data, out); + out.close(); + in.close(); + } finally { + channel.disconnect(); + } + } + + /** + * Disconnect the SSH session and release any associated resources. + */ + public void close() { + session.disconnect(); + } + + private static int checkAck(InputStream in) throws IOException { + int b = in.read(); + + logger.debug("checkAck(): read {}", b); + // b may be 0 for success, + // 1 for error, + // 2 for fatal error, + // -1 + if (b == 0) return b; + if (b == -1) return b; + + if (b == 1 || b == 2) { + StringBuffer sb = new StringBuffer(); + int c; + do { + c = in.read(); + sb.append((char) c); + } + while (c != '\n'); + if (b == 1) { // error + System.out.print(sb.toString()); + } + if (b == 2) { // fatal error + System.out.print(sb.toString()); + } + } + return b; + } + + @Override + public ProcessExecution execute(String cmd, List args) throws Exception { + return execute(cmd, args.stream().toArray(String[]::new)); + } + + public ProcessExecution execute(String cmd) throws Exception { + return execute(cmd, new String[]{}); + } + + @Override + /** + * Execute the given process on the remote machine. args may be null. + * + * If arguments are provided, each argument is surrounded by a double-quote character. Additional processing is + * done to remove double quotes provided by the caller to prevent malicious arguments from ending the command + * string prematurely with a dangling quote. This behavior can cause problems on Windows systems with + * Powershell if one of the arguments needs to contain double quotes. + * + * No such processing is done on cmd however, so a full string with spaces and quotes may be + * passed along with null arguments to result in the desired behavior. In this case, the caller + * is responsible for determining if cmd is safe to execute on the remote system. + */ + public ProcessExecution execute(String cmd, String[] args) throws Exception { + if (!session.isConnected()) { + throw new IllegalStateException("Session was found unexpectedly closed."); + } + + ChannelExec channelExec = (ChannelExec) session.openChannel("exec"); + StringAccumulatorV2 c = new StringAccumulatorV2(" "); + + c.add(cmd); + if (args != null) { + for (String s : args) { + // Prevent the caller from ending the string run early + c.add("\"" + s.replace("\"", "\\\\") + "\""); + } + } + + String fulLCmd = c.asString(); + logger.debug("Executing command: {}", fulLCmd); + channelExec.setCommand(fulLCmd); + channelExec.connect(); + return new SshExecution(channelExec); + } + + public long download(String filename, OutputStream data) throws Exception { + long l = -1L; + // exec 'scp -f rfile' remotely + + String command = "scp -f " + filename; + Channel channel = session.openChannel("exec"); + try { + ((ChannelExec) channel).setCommand(command); + + // get I/O streams for remote scp + OutputStream out = channel.getOutputStream(); + InputStream in = channel.getInputStream(); + channel.connect(); + + byte[] buf = new byte[1024]; + + // send '\0' + buf[0] = 0; + out.write(buf, 0, 1); + out.flush(); + + while (true) { + int c = checkAck(in); + if (c != 'C') { + break; + } + + // read '0644 ' + in.read(buf, 0, 5); + + long filesize = 0L; + while (true) { + if (in.read(buf, 0, 1) < 0) { + // error + break; + } + if (buf[0] == ' ') break; + filesize = filesize * 10L + (long) (buf[0] - '0'); + } + + String file = null; + for (int i = 0; ; i++) { + in.read(buf, i, 1); + if (buf[i] == (byte) 0x0a) { + file = new String(buf, 0, i); + break; + } + } + + l = filesize; + logger.info("filesize=" + filesize + ", file=" + file); + + // send '\0' + buf[0] = 0; + out.write(buf, 0, 1); + out.flush(); + + // read a content of lfile + int foo; + while (true) { + if (buf.length < filesize) foo = buf.length; + else foo = (int) filesize; + foo = in.read(buf, 0, foo); + if (foo < 0) { + // error + break; + } + data.write(buf, 0, foo); + filesize -= foo; + if (filesize == 0L) break; + } + + if (checkAck(in) != 0) { + System.exit(0); + } + + // send '\0' + buf[0] = 0; + out.write(buf, 0, 1); + out.flush(); + } + + out.close(); + in.close(); + } finally { + channel.disconnect(); + } + + return l; + } +} \ No newline at end of file diff --git a/leigh-mecha-exec/src/main/java/leigh/mecha/exec/VelocityTask.java b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/VelocityTask.java new file mode 100644 index 0000000000000000000000000000000000000000..5d86649f5d9556502a29f69bc12f690cfe74c489 --- /dev/null +++ b/leigh-mecha-exec/src/main/java/leigh/mecha/exec/VelocityTask.java @@ -0,0 +1,56 @@ +package leigh.mecha.exec; + +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.runtime.RuntimeConstants; +import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; + +/** + * Implements a {@link BatchTask} for the Velocity template engine. + *

+ * Limitations: This task is unaware of any application-requirements, so take care that your Velocity template + * is proper for your application. For example, ensure the line-endings are correct, and the last command has + * a line ending, if required by the application. + * + * @author C. Alexander Leigh + */ +public class VelocityTask implements BatchTask { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(VelocityTask.class); + private final static String KEY_TASK = "task"; + private final String templatePath; + + // TODO Do we really have to? + static { + Velocity.init(); + } + + public VelocityTask(String templatePath) { + this.templatePath = templatePath; + } + + @Override + public void writeScript(OutputStream os) throws IOException { + VelocityEngine ve = new VelocityEngine(); + ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); + ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); + Template sequenceTemplate = ve.getTemplate(templatePath); + VelocityContext ctx = new VelocityContext(); + ctx.put(KEY_TASK, this); + OutputStreamWriter ow = new OutputStreamWriter(os); + sequenceTemplate.merge(ctx, ow); + ow.close(); + } + + @Override + public void finished(String result) throws IOException { + // Intentionally Blank + } +} \ No newline at end of file diff --git a/leigh-mecha-fabric/.gitignore b/leigh-mecha-fabric/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-fabric/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-fabric/LICENSE b/leigh-mecha-fabric/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-fabric/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-fabric/build.gradle b/leigh-mecha-fabric/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..049563b61409be7a80a88cfb57fd4324ad8002b6 --- /dev/null +++ b/leigh-mecha-fabric/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'java-library' + id 'maven-publish' +} +repositories { + mavenCentral() +} + +dependencies { + api project(':leigh-mecha') + testImplementation group: 'junit', name: 'junit', version: '4.12' +} \ No newline at end of file diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/HandlerStatus.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/HandlerStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..6347c4b28cc2cb9ecddbd8f6bb2025631d1db3fe --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/HandlerStatus.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +/** + * CONTINUE indicates that the pipeline should stop executing and proceed to the next phase. CONTINUE + * indicates that while the request may have been mutated, the pipeline should continue on this phase. + */ +public enum HandlerStatus { + CONTINUE, BREAK +} diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/LiteralMessageSubscription.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/LiteralMessageSubscription.java new file mode 100644 index 0000000000000000000000000000000000000000..ae8ce787c8d6ee1549392e0d009456dec4c59f3f --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/LiteralMessageSubscription.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +/** + * This implementation of the MessageSubscription works on literal matches for the symbol and does + * not support wildcard or other patterns. This is the best choice for single-symbol subscriptions. + *

+ * MTS: Safe + * + * @param + * @author C. Alexander Leigh + */ +public class LiteralMessageSubscription implements MessageSubscription { + private final MessageReceiver subscriber; + private final String selector; + + public LiteralMessageSubscription(final MessageReceiver subscriber, final String selector) { + this.subscriber = subscriber; + this.selector = selector; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + LiteralMessageSubscription that = (LiteralMessageSubscription) o; + + if (selector != null ? !selector.equals(that.selector) : that.selector != null) return false; + return subscriber != null ? subscriber.equals(that.subscriber) : that.subscriber == null; + + } + + @Override + public int hashCode() { + int result = subscriber != null ? subscriber.hashCode() : 0; + result = 31 * result + (selector != null ? selector.hashCode() : 0); + return result; + } + + @Override + public boolean matches(final String symbol) { + return selector.equals(symbol); + } + + @Override + public MessageReceiver getSubscriber() { + return subscriber; + } + + @Override + public String toString() { + return "LiteralMessageSubscription{" + + "selector='" + selector + '\'' + + '}'; + } + +} diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MatchingIterator.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MatchingIterator.java new file mode 100644 index 0000000000000000000000000000000000000000..157d57066c89bfd427c63a085ca5ba4f7b517950 --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MatchingIterator.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +import java.util.Iterator; + +/** + * Iterator which can perform subscription key matching. + *

+ * MTS: Unsafe + * + * @author C. Alexander Leigh + */ +public class MatchingIterator implements Iterator> { + private final Iterator> it; + private final String symbol; + private MessageSubscription nextValue; + + public MatchingIterator(final Iterator> rawIterator, final String symbol) { + this.it = rawIterator; + this.symbol = symbol; + advance(); + } + + + @Override + public boolean hasNext() { + return nextValue != null; + } + + @Override + public MessageSubscription next() { + final MessageSubscription ret = nextValue; + advance(); + return ret; + } + + /** + * Advance the iterator until the next matching value is discovered. + */ + private void advance() { + while (true) { + if (!it.hasNext()) { + nextValue = null; + return; + } + + nextValue = it.next(); + if (nextValue == null || nextValue.matches(symbol)) { + return; + } + } + } +} \ No newline at end of file diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageFabric.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageFabric.java new file mode 100644 index 0000000000000000000000000000000000000000..6f7364e9dcd413f1864a4e2eb0446705125ba2e2 --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageFabric.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +public interface MessageFabric { + /** + * Send the given message to the given symbol. The transmission mechanics (async / sync, error consuming, etc) + * will depend on the individual fabric implementation. + * + * @param symbol + * @param msg + */ + void send(String symbol, E msg) throws Throwable; + + /** + * Returns the SubscriptionBase associated with this fabric. + * + * @return + */ + SubscriptionBase getSubscriptionBase(); +} \ No newline at end of file diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageReceiver.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..6a794f6d0aa383d15a4f433a877e514c2d3ca209 --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageReceiver.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +public interface MessageReceiver { + HandlerStatus receive(E msg) throws Throwable; +} diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageSubscription.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageSubscription.java new file mode 100644 index 0000000000000000000000000000000000000000..1fb594f0accd6ee640e873ec5dce8e81c15b234d --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/MessageSubscription.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +public interface MessageSubscription { + boolean matches(String symbol); + + MessageReceiver getSubscriber(); +} diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/PatternMessageSubscription.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/PatternMessageSubscription.java new file mode 100644 index 0000000000000000000000000000000000000000..7169cc35d17af0d5a098bae5cd992d4b01f45d84 --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/PatternMessageSubscription.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +import java.util.regex.Pattern; + +/** + * Represents a subscription to a message channel which is interested in any symbols matching an internal + * Pattern. + *

+ * MTS: Safe. + * + * @author C. Alexander Leigh + */ +public class PatternMessageSubscription implements MessageSubscription { + private final Pattern pattern; + private final MessageReceiver subscriber; + + /** + * Create a new subscription. If the subscription is to be for all symbols, null may be provided + * for the pattern. + * + * @param symbolPattern + * @param subscriber + */ + + public PatternMessageSubscription(final Pattern symbolPattern, final MessageReceiver subscriber) { + this.pattern = symbolPattern; + this.subscriber = subscriber; + } + + public Pattern getPattern() { + return pattern; + } + + public MessageReceiver getSubscriber() { + return subscriber; + } + + /** + * Returns true if this subscription matches the provided symbol. + * + * @param symbol + * @return + */ + @Override + public boolean matches(final String symbol) { + return pattern.matcher(symbol).matches(); + } + + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final PatternMessageSubscription that = (PatternMessageSubscription) o; + + if (pattern != null ? !pattern.equals(that.pattern) : that.pattern != null) return false; + return subscriber != null ? subscriber.equals(that.subscriber) : that.subscriber == null; + + } + + @Override + public int hashCode() { + int result = pattern != null ? pattern.hashCode() : 0; + result = 31 * result + (subscriber != null ? subscriber.hashCode() : 0); + return result; + } +} \ No newline at end of file diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/SubscriptionBase.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/SubscriptionBase.java new file mode 100644 index 0000000000000000000000000000000000000000..d091f0f10e58a4c88c5fe180d5c418aea7e304d3 --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/SubscriptionBase.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +/** + * Classes implementing SubscriptionBase store a series of subscriptions to a given series of + * keys (symbols). + * + * @author C. Alexander Leigh + */ +public interface SubscriptionBase { + void subscribe(MessageSubscription subscription); + + /** + * Remove a subscription from this fabric. + * + * @param subscription + */ + void unsubscribe(MessageSubscription subscription); + + Iterable> matching(String symbol); +} diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/SynchronousFabric.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/SynchronousFabric.java new file mode 100644 index 0000000000000000000000000000000000000000..d5f2e246157e03a816d3a09a1ac57a0d2321fb09 --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/SynchronousFabric.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +public class SynchronousFabric implements MessageFabric { + private final TopicSubscriptionBase subBase = new TopicSubscriptionBase<>(); + + @Override + public void send(final String symbol, final E msg) throws Throwable { + for (final MessageSubscription sub : subBase.matching(symbol)) { + // FIXME: This needs some understanding of when to stop processing + HandlerStatus hs = sub.getSubscriber().receive(msg); + + switch (hs) { + case CONTINUE: + continue; + case BREAK: + return; + } + } + } + + /** + * Returns the SubscriptionBase associated with this fabric. + * + * @return + */ + @Override + public SubscriptionBase getSubscriptionBase() { + return subBase; + } +} \ No newline at end of file diff --git a/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/TopicSubscriptionBase.java b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/TopicSubscriptionBase.java new file mode 100644 index 0000000000000000000000000000000000000000..959fe9ff45040a5bb11f89b9c640278bf3b832bb --- /dev/null +++ b/leigh-mecha-fabric/src/main/java/leigh/mecha/fabric/TopicSubscriptionBase.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.fabric; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.LinkedList; + +/** + * Implements a subscription base where all subscribers to a symbol will receive all messages for a symbol. The order + * in which subscriptions will receive messages is not guaranteed. + *

+ * MTS: Limited. + * + * @param The message class. + * @author C. Alexander Leigh + */ +public class TopicSubscriptionBase implements SubscriptionBase { + private static final Logger logger = LoggerFactory.getLogger(TopicSubscriptionBase.class); + private final LinkedList> subs = new LinkedList<>(); + + @Override + public void subscribe(final MessageSubscription subscription) { + logger.debug("subscribe(): {}", subscription); + if (subs.contains(subscription)) { + logger.error("subscribe() called but subscription already exists: {}", subscription); + return; + } + subs.add(subscription); + } + + @Override + public String toString() { + return "TopicSubscriptionBase{" + + "subs=" + subs + + '}'; + } + + /** + * Remove a subscription from this fabric. + * + * @param subscription + */ + @Override + public void unsubscribe(final MessageSubscription subscription) { + subs.remove(subscription); + } + + @Override + /** + * Return an iterator for all the subscriptions found within this subscription base who are interested + * in the given symbol. The order is not guaranteed. + */ + public Iterable> matching(final String symbol) { + return () -> new MatchingIterator<>(subs.iterator(), symbol); + } +} \ No newline at end of file diff --git a/leigh-mecha-http-client/.gitignore b/leigh-mecha-http-client/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-http-client/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-http-client/LICENSE b/leigh-mecha-http-client/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-http-client/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-http-client/build.gradle b/leigh-mecha-http-client/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..6a9def0d79d3c63b399b1799336a265ff61e5c12 --- /dev/null +++ b/leigh-mecha-http-client/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'java' + id 'java-library' + id 'maven-publish' +} + +repositories { + mavenCentral() +} + +dependencies { + api 'org.apache.httpcomponents:httpclient:4.5.3' + api project(':leigh-mecha') + testImplementation group: 'junit', name: 'junit', version: '4.12' +} \ No newline at end of file diff --git a/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/AllowAnySocketFactory.java b/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/AllowAnySocketFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..641db16a2f760d912a48215679fde1a24200ef88 --- /dev/null +++ b/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/AllowAnySocketFactory.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.client; + +import org.apache.http.conn.ssl.SSLSocketFactory; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.IOException; +import java.net.Socket; +import java.net.UnknownHostException; +import java.security.*; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + + +public class AllowAnySocketFactory extends SSLSocketFactory { + SSLContext sslContext = SSLContext.getInstance("TLS"); + + public AllowAnySocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { + super(truststore); + + TrustManager tm = new X509TrustManager() { + public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + } + + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + } + + public X509Certificate[] getAcceptedIssuers() { + return null; + } + }; + + sslContext.init(null, new TrustManager[]{tm}, null); + } + + @Override + public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { + return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); + } + + @Override + public Socket createSocket() throws IOException { + return sslContext.getSocketFactory().createSocket(); + } + +} diff --git a/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/HttpClientRig.java b/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/HttpClientRig.java new file mode 100644 index 0000000000000000000000000000000000000000..cf0086926e9efcfb2213b3050ba51fd0bde4ef4d --- /dev/null +++ b/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/HttpClientRig.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.client; + +import org.apache.http.Header; +import org.apache.http.HttpHeaders; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.conn.ssl.TrustSelfSignedStrategy; +import org.apache.http.impl.client.BasicCookieStore; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.cookie.BasicClientCookie; +import org.apache.http.message.BasicHeader; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; + +/** + * This class standardizes creation of HttpClient instances, and works around some peculiar limitations + * in the API. + * + * @author C. Alexander Leigh + */ +public class HttpClientRig { + private final static String userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3)"; + private final CloseableHttpClient client; + private final BasicCookieStore cookieStore; + + public HttpClientRig() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + this(false); + } + + // TODO: There are actually two variations on the SSL issue, one is self-signed and the other is allow any. They + // TODO: should probably be different levels of checks. + public HttpClientRig(boolean ignoreSslCertErrors) throws NoSuchAlgorithmException, KeyStoreException, + KeyManagementException { + cookieStore = new BasicCookieStore(); + Header header = new BasicHeader(HttpHeaders.USER_AGENT, userAgent); + List

headers = new ArrayList<>(); + headers.add(header); + + if (ignoreSslCertErrors) { + SSLContextBuilder builder = new SSLContextBuilder(); + builder.loadTrustMaterial(null, new TrustSelfSignedStrategy()); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( + builder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + client = HttpClients.custom().setSSLSocketFactory( + sslsf).setDefaultHeaders(headers).setDefaultCookieStore(cookieStore).build(); + } else { + client = HttpClients.custom().setDefaultHeaders(headers).setDefaultCookieStore(cookieStore).build(); + } + } + + /** + * Return the HttpClient associated with this rig. + * + * @return + */ + public CloseableHttpClient getClient() { + return client; + } + + /** + * Return the CookieStore associated with this rig. + * + * @return + */ + + public BasicCookieStore getCookieStore() { + return cookieStore; + } + + /** + * Set the given cookie into the cookie store for this setup. + * + * @param name + * @param value + */ + public void setCookie(String name, String value) { + BasicClientCookie cookie = new BasicClientCookie(name, value); + cookieStore.addCookie(cookie); + } +} \ No newline at end of file diff --git a/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/HttpUtil.java b/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/HttpUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..0e2fb435c2dbe4faa419885e8c20a93e74b0db77 --- /dev/null +++ b/leigh-mecha-http-client/src/main/java/leigh/mecha/http/client/HttpUtil.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.client; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.HttpResponse; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.Credentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpHead; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.conn.ssl.X509HostnameVerifier; +import org.apache.http.entity.FileEntity; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.SSLContext; +import java.io.File; +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; + +/** + * Client-side utility functions for interacting with remote HTTP servers. + * + * @author C. Alexander Leigh + */ +// TODO: Determine if we really have to consume the responses here. May waste performance. +public class HttpUtil { + private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class); + public static String HEADER_CONTENTTYPE = "Content-Type"; + public static String HEADER_SOAPACTION = "SOAPAction"; + + public static HttpClient makeOverlyTrustingClient(CredentialsProvider credsProvider) throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + HttpClientBuilder b = HttpClientBuilder.create(); + + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (arg0, arg1) -> true).build(); + b.setSslcontext(sslContext); + + X509HostnameVerifier hostnameVerifier = SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; + + SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); + Registry socketFactoryRegistry = RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", sslSocketFactory) + .build(); + + /* Allows the client to be used in multi-threaded situations */ + PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry); + b.setConnectionManager(connMgr); + + HttpClient client = b.setDefaultCredentialsProvider(credsProvider).build(); + return client; + } + + // TODO: dstPath be URL encoded + + /** + * Put the given file to the remote server using the HTTP PUT command. Note that the source must be contained + * within a file. The reason for this is that the client may have to retry the request (in situations where + * authentication such as NTLM is used). An input stream would not be repeatable. + * + * @param target + * @param srcFile + * @param dstPath + * @throws Exception + */ + public static void putFile(HttpHost target, File srcFile, String dsthost, String dstPath, Credentials proxyUser) + throws Exception { + logger.debug("Sending file: {} {} {}", target, srcFile, dstPath); + + final CredentialsProvider credsProvider = new BasicCredentialsProvider(); + + // FIXME: Must not be hard-coded!! + credsProvider.setCredentials(AuthScope.ANY, proxyUser); + + HttpClient client = makeOverlyTrustingClient(credsProvider); + + HttpPut putRequest = new HttpPut(dstPath.replace(" ", "%20")); + logger.debug("Request: {}", putRequest); + + putRequest.setHeader("host", dsthost); + putRequest.setEntity(new FileEntity(srcFile)); + HttpResponse putResponse; + + putResponse = client.execute(target, putRequest); + //EntityUtils.consume(putResponse.getEntity()); + logger.debug("put response: {}", EntityUtils.toString(putResponse.getEntity())); + + } + + public static void deleteFile(HttpHost target, String dstHost, String dstPath, Credentials proxyUser) throws + Exception { + logger.debug("Deleting file: {} {}", target, dstPath); + + final CredentialsProvider credsProvider = new BasicCredentialsProvider(); + + // FIXME: Must not be hard-coded!! + credsProvider.setCredentials(AuthScope.ANY, proxyUser); + + HttpClient client = makeOverlyTrustingClient(credsProvider); + + HttpDelete putRequest = new HttpDelete(dstPath.replace(" ", "%20")); + logger.debug("Request: {}", putRequest); + + putRequest.setHeader("host", dstHost); + HttpResponse putResponse; + + putResponse = client.execute(target, putRequest); + EntityUtils.consume(putResponse.getEntity()); + } + + /** + * Returns true if the given file exists on the remote HTTP server, otherwise, returns false. + * + * @param target + * @param dstHost + * @param dstPath + * @return + * @throws Exception + */ + public static boolean checkExists(HttpHost target, String dstHost, String dstPath, Credentials proxyUser) throws + Exception { + logger.info("HEADING'ing file. [target: {}] [dstPath: {}] [dstHost: {}]", target, dstPath, dstHost); + + final CredentialsProvider credsProvider = new BasicCredentialsProvider(); + + // FIXME: Must not be hard-coded!! + credsProvider.setCredentials(AuthScope.ANY, proxyUser); + + HttpClient client = makeOverlyTrustingClient(credsProvider); + + HttpHead req = new HttpHead(dstPath.replace(" ", "%20")); + logger.debug("Request: {}", req); + + req.setHeader("host", dstHost); + + HttpResponse res = client.execute(target, req); + EntityUtils.consume(res.getEntity()); + + return res.getStatusLine().getStatusCode() == 200; + + } + + /** + * Log a HttpResponse object to the default logger for HttpUtil. This method is + * primarily intended for debugging and should be avoided in production code. + * + * @param response + * @throws IOException + */ + public static void printResponse(HttpResponse response) throws IOException { + logger.info("printResponse() ---------------------------"); + HttpEntity entity = response.getEntity(); + if (entity != null) { + logger.info("{}", EntityUtils.toString(entity)); + EntityUtils.consume(entity); + } + } +} + diff --git a/leigh-mecha-http-server/.gitignore b/leigh-mecha-http-server/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-http-server/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-http-server/LICENSE b/leigh-mecha-http-server/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-http-server/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-http-server/build.gradle b/leigh-mecha-http-server/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..5624bd8bd01753e8df5e00ea4a21c562207788a6 --- /dev/null +++ b/leigh-mecha-http-server/build.gradle @@ -0,0 +1,24 @@ +plugins { + id 'java' + id 'java-library' + id 'maven-publish' +} + +repositories { + mavenCentral() +} + +dependencies { + api group: 'javax.activation', name: 'javax.activation-api', version: '1.2.0' + api 'org.eclipse.jetty:jetty-server:11.0.2' + api 'org.eclipse.jetty:jetty-servlet:11.0.2' + api 'org.eclipse.jetty:jetty-annotations:11.0.2' + api 'org.eclipse.jetty.websocket:websocket-jetty-server:11.0.2' + api 'org.eclipse.jetty.websocket:websocket-jetty-client:11.0.2' + api 'commons-fileupload:commons-fileupload:1.3.3' + api 'javax.websocket:javax.websocket-api:1.1' + api 'javax.servlet:javax.servlet-api:4.0.1' + api project(':leigh-mecha') + api project(':leigh-mecha-fabric') + testImplementation group: 'junit', name: 'junit', version: '4.12' +} \ No newline at end of file diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ErrorHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ErrorHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..466422d57345b4b8ecd7d3d6798ef650ed4cf5e9 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ErrorHandler.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.servlet.ErrorPageErrorHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Custom Jetty error handler. This allows overriding the factory-default error page to replace it with an + * ESP-specific page, which includes the system banner. + * + * @author C. Alexander Leigh + */ +public class ErrorHandler extends ErrorPageErrorHandler { + private final String banner; + + public ErrorHandler(String banner) { + this.banner = banner; + } + + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException { + StringBuilder sb = new StringBuilder(); + sb.append("Error

Error "); + sb.append(String.valueOf(response.getStatus())); + sb.append("

"); + sb.append(banner); + sb.append(""); + + response.getWriter().append(sb.toString()); + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/FileServer.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/FileServer.java new file mode 100644 index 0000000000000000000000000000000000000000..a0fe9e745d13e57764c0f084b92b003eb0f7e4a6 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/FileServer.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.io.IOUtils; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.net.URI; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Set; + +/** + * FileServer provides a static file server for an ESP WebServer. The + * files may be stored either internally (on the classpath) or externally (on the host file-system). + *

+ * This version of the FileServer does not provide any "real" web-server features such + * as index.html re-direction or authentication. The requests are interpreted literally and either + * served, or not. If these features are desired, they should be provided by other handlers which + * have been registered in the pipeline chain. + *

+ * Example: + * WebServer ws = ... + * FileServer fs = new FileServer("com.foo.webroot","/static"); + * ws.getHandlerPack().registerHandler("/static",fs); + * + */ +public abstract class FileServer extends PrefixedHandler { + private final static MechaLogger logger = MechaLoggerFactory.getLogger(FileServer.class); + private final MimetypesFileTypeMap mimeMap = MimeUtil.defaultMapper(); + private final String uriBase; + private final boolean internalContent; + private final long lastModified = System.currentTimeMillis(); + + public FileServer(final Set pathPrefix) { + this(pathPrefix, true); + mimeMap.addMimeTypes("text/css css"); + mimeMap.addMimeTypes("text/html html"); + mimeMap.addMimeTypes("application/json json"); + mimeMap.addMimeTypes("text/javascript js"); + mimeMap.addMimeTypes("image/png png"); + } + + public MimetypesFileTypeMap getMimeMap() { + return mimeMap; + } + + /** + * For the given web request, return the associated content root. The content root is currently + * specified as a classpath base (as the file server loads files via the class-loader). + * + * @param request + * @return + */ + public abstract String getContentRoot(WebTransaction request); + + /** + * Create a new FileServer using the provided class path base (the package base) + * and the provided URI base (the root). The URI base should match up with the prefix that is + * assigned when this FileServer is registered with the WebServer or + * improper operation will result. + *

+ * The file server can locate web content either internally (on the classpath) or externally + * (on the filesystem). If the content is located internally, set internalContent + * to true in which case contentSource should prefer to the package + * base. If the content is located externally, set contentSource to the filesystem + * root. + *

+ * WARNING: The FileServer must be installed in the same prefix passed into the constructor, or string handling + * exceptions will result. For example, do not register the handler for "/foo" but specify the prefix as "/bar". + * + * @param uriBase The URI base to strip from the request. + * @param internalContent true if the files are on the classpath. + */ + private FileServer(final Set uriBase, final boolean internalContent) { + super(uriBase); + // FIXME: This assumes the first pathPrefix is the one the request arrived on + this.uriBase = uriBase.iterator().next(); + this.internalContent = internalContent; + } + + public long getLastModified() { + return lastModified; + } + + /** + * If the path contains a trailing slash, /index.html will be appended + * to the path and returned. Otherwise, the original path will be returned. + * + * @param path + * @return + */ + // TODO: Should actually check a list of extensions for existence + private String indexIfDirectory(final String path) { + if (path.endsWith("/")) return path + "index.html"; + return path; + } + + @Override + public HandlerStatus handlePrefixedWebRequest(final WebTransaction request) throws Throwable { + if (request.httpServletRequest.getMethod().equals("GET")) { + if (ServletUtil.isCached(request.httpServletRequest, getLastModified())) { + request.httpServletResponse.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + return HandlerStatus.BREAK; + } + } + + final URI uri = new URI(request.httpServletRequest.getRequestURI()); + logger.debug("handlePrefixedWebRequest(): Parsed URL: {}", uri); + + String path = uri.getPath(); + + // Strip uriBase from request + path = request.request.getRequestURI().substring(uriBase.length(), path.length()); + logger.trace("Path: {}", path); + + // Security collapse path + Path p = Paths.get(path); + + path = p.normalize().toString(); + logger.trace("Path: {}", path); + + path = indexIfDirectory(path); + logger.trace("Indexed: {}", path); + + // Append to classPathBase + path = getContentRoot(request) + path; + logger.info("Finalized path: {}", path); + + InputStream is; + + if (internalContent) + is = FileServer.class.getClassLoader().getResourceAsStream(path); + else + try { + is = new FileInputStream(path); + } catch (FileNotFoundException e) { + logger.warn("handlePrefixedWebRequest(): File not found.", e); + is = null; + } + + try { + logger.trace("handlePrefixedWebRequest(): Input Stream: {}", is); + + if (is == null) { + logger.debug("handlePrefixedWebRequest(): Sending 404 response"); + request.httpServletResponse.setStatus(404); + request.httpServletResponse.getOutputStream().write("404: File Not Found.".getBytes()); + return HandlerStatus.BREAK; + } + + logger.trace("handlePrefixedWebRequest(): InputStream found is: {}", is); + + request.httpServletResponse.setContentType(mimeMap.getContentType(path)); + request.httpServletResponse.setDateHeader("Last-Modified", getLastModified()); + + logger.debug("handlePrefixedWebRequest(): Content-type returning is: {}", mimeMap.getContentType(path)); + IOUtils.copy(is, request.httpServletResponse.getOutputStream()); + } finally { + if (is != null) + is.close(); + } + + return HandlerStatus.BREAK; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/HelloWorldHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/HelloWorldHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..44f074d2411ad43a7b8e72af527e5e5892eb900b --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/HelloWorldHandler.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; + +import java.util.Set; + +/** + * This example handler implements a simple fixed "Hello World!" response. It's useful + * for performance benchmarking and testing. + * + * @author C. Alexander Leigh + */ +public final class HelloWorldHandler extends PrefixedHandler { + public HelloWorldHandler(final Set pathPrefix) { + super(pathPrefix); + } + + @Override + public HandlerStatus handlePrefixedWebRequest(final WebTransaction request) throws Throwable { + request.httpServletResponse.setContentType("text/plain"); + request.httpServletResponse.getOutputStream().write("Hello World!".getBytes()); + return HandlerStatus.BREAK; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MimeUtil.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MimeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..d288c2472b1611dedce1e4c88cb47ba9990df334 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MimeUtil.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import javax.activation.MimetypesFileTypeMap; + +/** + * Utility methods for interacting with MIME types. + * + * @author C. Alexander Leigh + */ +public class MimeUtil { + public static MimetypesFileTypeMap defaultMapper() { + final MimetypesFileTypeMap mimeMap = new MimetypesFileTypeMap(); + mimeMap.addMimeTypes("text/css css"); + mimeMap.addMimeTypes("text/html html"); + mimeMap.addMimeTypes("application/json json"); + mimeMap.addMimeTypes("text/javascript js"); + mimeMap.addMimeTypes("image/png png"); + mimeMap.addMimeTypes("application/vnd.ms-excel xls xlt xla"); + mimeMap.addMimeTypes("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx"); + return mimeMap; + } + +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ModifiedSinceHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ModifiedSinceHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..dd746129a6a8978c85d89318b51ba7a9d90c7f15 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ModifiedSinceHandler.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.Date; +import java.util.Set; + +public final class ModifiedSinceHandler extends PrefixedHandler { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ModifiedSinceHandler.class); + private final String modifyDate = new Date().toString(); + + public ModifiedSinceHandler(final Set pathPrefix) { + super(pathPrefix); + } + + @Override + public HandlerStatus handlePrefixedWebRequest(final WebTransaction request) throws Throwable { + if (request.httpServletRequest.getHeader("If-Modified-Since") != null) { + request.httpServletResponse.setStatus(304); + logger.debug("Indicating 304"); + return HandlerStatus.BREAK; + } + + request.httpServletResponse.setHeader("Last-Modified", modifyDate); + + logger.debug("Indicating CONTINUE"); + return HandlerStatus.CONTINUE; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MultiMethodHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MultiMethodHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..4d07001cae96811e1ab654645cb229d6aadf0ebf --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MultiMethodHandler.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; + +import java.util.Set; + +/** + * A handy version of the PrefixedHandler that breaks out the methods based + * on the HTTP method used in the request. If the method does not match GET, POST, PUT or + * DELETE, an error 500 is thrown using the default error interface. + * + * @author C. Alexander Leigh + */ +public abstract class MultiMethodHandler extends PrefixedHandler { + public MultiMethodHandler(final Set pathPrefix) { + super(pathPrefix); + } + + public HandlerStatus handlePrefixedWebRequest(final WebTransaction request) throws Throwable { + switch (request.httpServletRequest.getMethod()) { + case "GET": + return handleGetRequest(request); + case "POST": + return handlePostRequest(request); + case "PUT": + return handlePutRequest(request); + case "DELETE": + return handleDeleteRequest(request); + } + + request.httpServletResponse.sendError(500); + return HandlerStatus.BREAK; + } + + /** + * Default implementation which throws a 405 error. Replace with a useful implementation. + * + * @param request + * @return + * @throws Throwable + */ + public HandlerStatus handleGetRequest(final WebTransaction request) throws Throwable { + request.httpServletResponse.sendError(405); + return HandlerStatus.BREAK; + } + + /** + * Default implementation which throws a 405 error. Replace with a useful implementation. + * + * @param request + * @return + * @throws Throwable + */ + public HandlerStatus handlePostRequest(final WebTransaction request) throws Throwable { + request.httpServletResponse.sendError(405); + return HandlerStatus.BREAK; + } + + /** + * Default implementation which throws a 405 error. Replace with a useful implementation. + * + * @param request + * @return + * @throws Throwable + */ + public HandlerStatus handlePutRequest(final WebTransaction request) throws Throwable { + request.httpServletResponse.sendError(405); + return HandlerStatus.BREAK; + } + + /** + * Default implementation which throws a 405 error. Replace with a useful implementation. + * + * @param request + * @return + * @throws Throwable + */ + public HandlerStatus handleDeleteRequest(final WebTransaction request) throws Throwable { + request.httpServletResponse.sendError(405); + return HandlerStatus.BREAK; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MultipartResponse.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MultipartResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..aa131e31c5cad5be705dd2323eed9da6ea291bce --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/MultipartResponse.java @@ -0,0 +1,63 @@ +package leigh.mecha.http.server; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; + +public final class MultipartResponse { + HttpServletResponse res; + ServletOutputStream out; + boolean endedLastResponse = true; + + public MultipartResponse(HttpServletResponse response) throws IOException { + // Save the response object and output stream + res = response; + out = res.getOutputStream(); + + // Set things up + res.setContentType("multipart/x-mixed-replace;boundary=End"); + out.println(); + out.println("--End"); + } + + public void startResponse(String contentType) throws IOException { + // End the last response if necessary + if (!endedLastResponse) { + endResponse(); + } + // Start the next one + out.println("Content-Type: " + contentType); + out.println(); + endedLastResponse = false; + } + + public void endResponse() throws IOException { + // End the last response, and flush so the client sees the content + out.println(); + out.println("--End"); + out.flush(); + endedLastResponse = true; + } + + public void finish() throws IOException { + out.println("--End--"); + out.flush(); + } + + public void write(byte[] b) throws IOException { + out.write(b); + } + + public OutputStream getOutputStream() { + return out; + } + + public void close() { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/NotFoundHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/NotFoundHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..97ca85665a9befc564f43fc36a53739f771601ad --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/NotFoundHandler.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.fabric.MessageReceiver; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +public class NotFoundHandler implements MessageReceiver { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(NotFoundHandler.class); + + @Override + public HandlerStatus receive(WebTransaction msg) throws Throwable { + // Note this doesn't work due to bugs in WebServer improperly configuring jetty + msg.httpServletResponse.setStatus(404); + msg.httpServletResponse.setContentType("text/plain"); + msg.httpServletResponse.getOutputStream().print("Not Found"); + + return HandlerStatus.BREAK; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/PathHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/PathHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..c9259a89498af34513dd8b2b9e825df0afba6a59 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/PathHandler.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.fabric.MessageReceiver; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created by cal on 10/17/16. + */ +public abstract class PathHandler implements MessageReceiver { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(PathHandler.class); + private final Set pathPrefix = new HashSet<>(); + + public PathHandler(final Set pathPrefixes) { + logger.debug("PrefixHandler(): Creating new handler. [prefix: {}] [obj: {}]", pathPrefixes, this); + this.pathPrefix.addAll(pathPrefixes); + } + + public Set getPathPrefix() { + return pathPrefix; + } + + @Override + public HandlerStatus receive(final WebTransaction request) throws Throwable { + if (request.request.isHandled()) { + logger.trace("Request already served. Bypassing."); + return HandlerStatus.CONTINUE; + } + + for (String path : pathPrefix) { + logger.trace("Matching: {} to {}", path, request.httpServletRequest.getPathInfo()); + if (request.httpServletRequest.getPathInfo().equals(path)) { + final HandlerStatus status = handlePrefixedWebRequest(request); + if (status == HandlerStatus.BREAK) + request.request.setHandled(true); + return status; + } + } + + logger.debug("Paths did not match, returning. [pathPrefix: {}] [pathInfo: {}]", pathPrefix, + request.httpServletRequest.getPathInfo()); + + return HandlerStatus.CONTINUE; + } + + /** + * Implement this method to handle the provided request. If any sort of error returns, + * throw an exception and an error response will automatically be generated. + * + * @param request + * @return + * @throws Throwable + */ + public abstract HandlerStatus handlePrefixedWebRequest(WebTransaction request) throws Throwable; +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/PrefixedHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/PrefixedHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..db213b301602dac0476ec972ce063ca396e49442 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/PrefixedHandler.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.fabric.MessageReceiver; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.HashSet; +import java.util.Set; + +/** + * This handler implements a WebHandler that will only execute + * if the requested path starts with the associated prefix path. + *

+ * Note: It is not particularly well performing to use a lot of these; in the case where you need + * more than 20 or 30 in a single WebServer it may be better to implement + * some sort of multi-handler which works on a Map-based association instead. + * + * @author C. Alexander Leigh + */ +public abstract class PrefixedHandler implements MessageReceiver { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(PrefixedHandler.class); + private final Set pathPrefix = new HashSet<>(); + + public PrefixedHandler(final Set pathPrefixes) { + logger.debug("PrefixHandler(): Creating new handler. [prefix: {}] [obj: {}]", pathPrefixes, this); + this.pathPrefix.addAll(pathPrefixes); + } + + public Set getPathPrefix() { + return pathPrefix; + } + + @Override + public HandlerStatus receive(final WebTransaction request) throws Throwable { + if (request.request.isHandled()) { + logger.trace("Request already served. Bypassing."); + return HandlerStatus.CONTINUE; + } + + for (String prefix : pathPrefix) { + logger.trace("Matching: {} to {}", prefix, request.httpServletRequest.getPathInfo()); + if (request.httpServletRequest.getPathInfo().startsWith(prefix)) { + final HandlerStatus status = handlePrefixedWebRequest(request); + if (status == HandlerStatus.BREAK) + request.request.setHandled(true); + return status; + } + } + + logger.debug("Paths did not match, returning. [pathPrefix: {}] [pathInfo: {}]", pathPrefix, + request.httpServletRequest.getPathInfo()); + + return HandlerStatus.CONTINUE; + } + + /** + * Implement this method to handle the provided request. If any sort of error returns, + * throw an exception and an error response will automatically be generated. + * + * @param request + * @return + * @throws Throwable + */ + public abstract HandlerStatus handlePrefixedWebRequest(WebTransaction request) throws Throwable; +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/RedirectHandler.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/RedirectHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..984c293deb59dea163ec10c57b5c49f182b4d618 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/RedirectHandler.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import leigh.mecha.fabric.HandlerStatus; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.Set; + +/** + * Created with IntelliJ IDEA. + * User: aleigh + * Date: 5/22/14 + * Time: 12:24 AM + * To change this template use File | Settings | File Templates. + */ +public class RedirectHandler extends PathHandler { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(RedirectHandler.class); + + private final String target; + + public RedirectHandler(final Set pathPrefix, final String target) { + super(pathPrefix); + this.target = target; + } + + @Override + public HandlerStatus handlePrefixedWebRequest(final WebTransaction request) throws Throwable { + logger.debug("Redirecting request: {}", request); + request.httpServletResponse.setHeader("Location", target); + request.httpServletResponse.setStatus(302); + return HandlerStatus.BREAK; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ServletUtil.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ServletUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..2ae93cf78b6b9a96f92c177c28ccdc6f7b1f363c --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/ServletUtil.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.apache.commons.fileupload.FileItem; + +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.util.Enumeration; +import java.util.List; + +public final class ServletUtil { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(ServletUtil.class); + + /** + * Returns true if the version provides in the request is equal or greater + * than the given lastModifiedDate, indicating that the servlet should not + * serve the request. + * + * @param request + * @param lastModifiedDate + * @return + */ + public static boolean isCached(final HttpServletRequest request, final long lastModifiedDate) { + return (lastModifiedDate / 1000 * 1000) <= + request.getDateHeader("If-Modified-Since"); + } + + /** + * Write a standard-formatted HTTP error out to the response, and close the output stream. + * + * @param response + * @param httpCode + * @param msg + * @throws IOException + */ + public static void writeError(final HttpServletResponse response, final int httpCode, final String msg) throws IOException { + + response.setContentType("text/plain"); + response.setStatus(httpCode); + final OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream()); + writer.write("ERROR: "); + writer.write(msg); + writer.write("\n"); + writer.close(); + } + + public static void printRequest(final HttpServletRequest request) { + logger.info("Request: {}", request.getMethod()); + + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String headerName = (String) headerNames.nextElement(); + logger.info("Header Name - " + headerName + ", Value - " + request.getHeader(headerName)); + } + + Enumeration params = request.getParameterNames(); + while (params.hasMoreElements()) { + String paramName = (String) params.nextElement(); + logger.info("Parameter Name - " + paramName + ", Value - " + request.getParameter(paramName)); + } + + } + + public static FileItem getItemByName(final List items, String name) { + for (FileItem item : items) { + if (item.getFieldName().equals(name)) return item; + } + return null; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebPipeline.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebPipeline.java new file mode 100644 index 0000000000000000000000000000000000000000..f04b8cac01e6ab75f4794a7c7052e33e87af4258 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebPipeline.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import leigh.mecha.fabric.MessageFabric; +import leigh.mecha.fabric.SynchronousFabric; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.AbstractHandler; + +import java.io.IOException; + +/** + * Implements a web processing pipeline. + * + * @author C. Alexander Leigh + */ +public final class WebPipeline extends AbstractHandler { + public final static String KEY_SERVICE = "service"; + private static final MechaLogger logger = MechaLoggerFactory.getLogger(WebPipeline.class); + private final MessageFabric servicePipeline = new SynchronousFabric<>(); + + public MessageFabric getServicePipeline() { + return servicePipeline; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final WebPipeline that = (WebPipeline) o; + + return servicePipeline != null ? servicePipeline.equals(that.servicePipeline) : that.servicePipeline == null; + + } + + @Override + public int hashCode() { + return servicePipeline != null ? servicePipeline.hashCode() : 0; + } + + @Override + public String toString() { + return "WebPipeline{" + + "servicePipeline=" + servicePipeline + + '}'; + } + + @Override + public void handle(String target, Request baseRequest, HttpServletRequest + httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException { + final WebTransaction wr = new WebTransaction(baseRequest, httpServletRequest, httpServletResponse); + logger.debug("handle(): Received web request: {}", wr); + try { + servicePipeline.send(KEY_SERVICE, wr); + } catch (Throwable e) { + logger.error("Handler threw", e); + try { + httpServletResponse.sendError(500); + } catch (IOException e1) { + logger.warn("Attempted to return an error 500 page, but failed: {}", e1); + } + } + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebServer.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebServer.java new file mode 100644 index 0000000000000000000000000000000000000000..f53811aab7741a3d8fa86f52522c7c1378d3d77d --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebServer.java @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import jakarta.servlet.Servlet; +import leigh.BuildVersion; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.util.UniversalJob; +import org.eclipse.jetty.server.*; +import org.eclipse.jetty.server.handler.ContextHandlerCollection; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.util.thread.QueuedThreadPool; +import org.eclipse.jetty.websocket.server.JettyWebSocketServlet; +import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory; +import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; + +import java.util.HashMap; +import java.util.Map; + +/** + * WebServer implements provides a simple API to embed + * a Jetty HTTP engine into a running VM. Used in conjunction with + * HandlerPack, end-developers can instantiate HTTP servers + * and provide processing code without having to use a servlet engine + * along with it's associated complexities and costs. + * + * @author C. Alexander Leigh + */ + +public class WebServer { + private final static MechaLogger logger = MechaLoggerFactory.getLogger(WebServer.class); + private final WebPipeline handlerPack = new WebPipeline(); + private final int port; + private final int maxThreads; + private Server server = null; + private boolean running = false; + private String banner = "HttpServer " + BuildVersion.MASSIVE_VERSION; + private final HashMap socketHandlers = new HashMap<>(); + + /** + * Create a new webserver, which will listen on the provided port number. The + * port is not reserved during construction, so no error will present if the port + * is already in use. + * + * @param plaintextListenPort The port to listen on. + */ + public WebServer(final int plaintextListenPort, final int maxThreads) { + this.port = plaintextListenPort; + this.maxThreads = maxThreads; + } + + /** + * Add a {@link WebSocketConnection} to this webserver. For the change to take effect, the call must be made before + * the server is started. + */ + public void addSocketHandler(WebSocketConnectionFactory handler, String path) { + socketHandlers.put(path, handler); + } + + public String getBanner() { + return banner; + } + + public void setBanner(String banner) { + this.banner = banner; + } + + /** + * Return the HandlerPack associated with this + * http server instance. + * + * @return + */ + public WebPipeline getWebPipeline() { + return handlerPack; + } + + /** + * Attempt to start the instance. + */ + public void start() { + if (running) + return; + + server = new Server(new QueuedThreadPool(this.maxThreads, 32)); + // This results in an error from jetty in the log, but works regardless. + // server.addBean(new ErrorHandler(banner)); + server.addConnector(makeConnector()); + + ContextHandlerCollection handlers = new ContextHandlerCollection(); + + for (Map.Entry entry : socketHandlers.entrySet()) { + logger.info("Adding WebSocket handler. [path: {}] [handler: {}]", entry.getKey(), entry.getValue()); + ServletContextHandler servletContextHandler = new ServletContextHandler(); + JettyWebSocketServletContainerInitializer.configure(servletContextHandler, null); + + Servlet websocketServlet = new JettyWebSocketServlet() { + @Override + protected void configure(JettyWebSocketServletFactory factory) { + //factory.addMapping("/", (req, res) -> entry.getValue()); + factory.setCreator(entry.getValue()); + } + }; + servletContextHandler.addServlet(new ServletHolder(websocketServlet), entry.getKey()); + handlers.addHandler(servletContextHandler); + } + + handlers.addHandler(handlerPack); + server.setHandler(handlers); + + logger.info("Starting web server. [port: {}] [maxThreads: {}]", new Object[]{port, + maxThreads}); + try { + server.start(); + final Connector[] c = server.getConnectors(); + for (final Connector a : c) { + logger.info("Connector2: {}", a); + } + } catch (Exception e) { + logger.warn("Failure to start Jetty", e); + System.exit(UniversalJob.RET_ERROR); + } + } + + private Connector makeConnector() { + logger.info("Setting up HTTP listen port: [port: {}]", port); + final HttpConfiguration http_config = new HttpConfiguration(); + http_config.setSendServerVersion(false); + http_config.setSendXPoweredBy(false); + + final ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config)); + + http.setPort(port); + http.setIdleTimeout(30000); + + return http; + } + + @Override + public String toString() { + return "WebServer{" + + "handlerPack=" + handlerPack + + ", port=" + port + + ", maxThreads=" + maxThreads + + ", server=" + server + + ", running=" + running + + '}'; + } + + /** + * Stop the running instance. This will block until Jetty claims + * it has successfully shutdown; after such time, the port should + * be released and be available for use. + * + * @throws Exception + */ + public void stop() throws Exception { + logger.info("Stopping server..."); + if (!running) + return; + + server.stop(); + + while (server.isStopping()) { + try { + Thread.sleep(250); + } catch (InterruptedException e) { + logger.warn("Timer failed: {}", e); + } + } + + running = false; + + logger.info("Server stopped."); + + System.exit(0); + } + +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebSocketConnection.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebSocketConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..967b3c343c45330992583a53e360f5c79de51e70 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebSocketConnection.java @@ -0,0 +1,12 @@ +package leigh.mecha.http.server; + +import org.eclipse.jetty.websocket.api.WebSocketListener; + +/** + * Classes implementing this interface can handle WebSocket based connections. + * + * @author C. Alexander Leigh + */ +public interface WebSocketConnection extends WebSocketListener { +// Intentionally Blank +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebSocketConnectionFactory.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebSocketConnectionFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..4141bd332c21eef3f6a9818dc8fa4a603ef5de33 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebSocketConnectionFactory.java @@ -0,0 +1,12 @@ +package leigh.mecha.http.server; + +import org.eclipse.jetty.websocket.server.JettyWebSocketCreator; + +/** + * A factory for creating WebSocket connections. + * + * @author C. Alexander Leigh + */ +public interface WebSocketConnectionFactory extends JettyWebSocketCreator { + +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebTransaction.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebTransaction.java new file mode 100644 index 0000000000000000000000000000000000000000..59423046cbd24e328dcd8af1e36a12dad5638b35 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebTransaction.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2004-2017, by C. Alexander Leigh. + * All rights reserved. + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE + * The copyright notice above does not evidence any + * actual or intended publication of such source code. + */ + +package leigh.mecha.http.server; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.eclipse.jetty.server.Request; + + +/** + * This class represents a request from a HTTP server. It contains the HTTP servlet request and response + * objects and is useful for situations where only a single object can be passed through an API (such as is + * the case with the message fabric API). + *

+ * Although the http servlet & response are available in this class out of a prevailing sense of pragmatism over + * correctness, their use should as a matter of course be avoided as a leaky abstraction. Instead, it is better + * to implement the required functionality in this class in order to provide a neutral API. + * + * @author C. Alexander Leigh + */ +public final class WebTransaction { + public final Request request; + public final HttpServletRequest httpServletRequest; + public final HttpServletResponse httpServletResponse; + + public WebTransaction(final Request request, HttpServletRequest httpServletRequest, + final HttpServletResponse httpServletResponse) { + this.request = request; + this.httpServletRequest = httpServletRequest; + this.httpServletResponse = httpServletResponse; + } + + @Override + public String toString() { + return "WebRequest{" + + "request=" + request + + ", httpServletRequest=" + httpServletRequest + + ", httpServletResponse=" + httpServletResponse + + "} " + super.toString(); + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final WebTransaction that = (WebTransaction) o; + + if (httpServletRequest != null ? !httpServletRequest.equals(that.httpServletRequest) : that.httpServletRequest != null) + return false; + if (httpServletResponse != null ? !httpServletResponse.equals(that.httpServletResponse) : that.httpServletResponse != null) + return false; + return request != null ? request.equals(that.request) : that.request == null; + + } + + @Override + public int hashCode() { + int result = request != null ? request.hashCode() : 0; + result = 31 * result + (httpServletRequest != null ? httpServletRequest.hashCode() : 0); + result = 31 * result + (httpServletResponse != null ? httpServletResponse.hashCode() : 0); + return result; + } +} diff --git a/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebsocketThing.java b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebsocketThing.java new file mode 100644 index 0000000000000000000000000000000000000000..918e65252ff0e5dec9b8426899cf075d0b7b3905 --- /dev/null +++ b/leigh-mecha-http-server/src/main/java/leigh/mecha/http/server/WebsocketThing.java @@ -0,0 +1,62 @@ +package leigh.mecha.http.server; + +import jakarta.servlet.Servlet; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.ContextHandler; +import org.eclipse.jetty.server.handler.ContextHandlerCollection; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.websocket.api.WebSocketListener; +import org.eclipse.jetty.websocket.server.JettyWebSocketServlet; +import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory; +import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; + +/** + * Dev/test implementation of a WebSocket. + * + * @author C. Alexander Leigh + */ +public class WebsocketThing implements WebSocketListener { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(WebsocketThing.class); + + public static void main(String[] args) throws Exception { + int serverPort = Integer.getInteger("server.port", 8123); + + Server server = new Server(serverPort); + ContextHandlerCollection handlers = new ContextHandlerCollection(); + // ResourceHandler rh = new ResourceHandler(); + // rh.setDirectoriesListed(false); + // rh.setBaseResource(Resource.newClassPathResource("/WEB-STATIC/")); + // handlers.addHandler(createContextHandler("/", rh)); + + Servlet websocketServlet = new JettyWebSocketServlet() { + @Override + protected void configure(JettyWebSocketServletFactory factory) { + factory.addMapping("/", (req, res) -> new WebsocketThing()); + } + }; + + ServletContextHandler servletContextHandler = new ServletContextHandler(); + servletContextHandler.addServlet(new ServletHolder(websocketServlet), "/ws"); + JettyWebSocketServletContainerInitializer.configure(servletContextHandler, null); + handlers.addHandler(servletContextHandler); + server.setHandler(handlers); + server.start(); + server.join(); + } + + private static ContextHandler createContextHandler(String contextPath, Handler wrappedHandler) { + ContextHandler ch = new ContextHandler(contextPath); + ch.setHandler(wrappedHandler); + ch.clearAliasChecks(); + ch.setAllowNullPathInfo(true); + return ch; + } + + public void onWebSocketText(String message) { + logger.info("Received text. [str: {}]", message); + } +} diff --git a/leigh-mecha-javafx/.gitignore b/leigh-mecha-javafx/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ede7310f5aa22a8bb16f7393dedac5d9b0cba2c9 --- /dev/null +++ b/leigh-mecha-javafx/.gitignore @@ -0,0 +1,25 @@ +kabe.log +velocity.log +.DS_Store +statistic.xml +.gradle +/*/build/ +/build/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml +out/ +.cache +node_modules +/*/.idea +.vi +/*/graph.eo +.vai +graph.bak +.idea +tests.vai +vds.log +hosts.json +tests.vai.old \ No newline at end of file diff --git a/leigh-mecha-javafx/LICENSE b/leigh-mecha-javafx/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..af8f13b0ceddd0331b8285898fc09a1e3f327a65 --- /dev/null +++ b/leigh-mecha-javafx/LICENSE @@ -0,0 +1,10 @@ +/* + * Copyright (c) 1994, 2021 Alex Leigh, All Rights Reserved + * + * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF C. ALEXANDER LEIGH + * The copyright notice above does not evidence any actual or intended + * publication of such source code. + * + * Disclosure, copying, distribution, or transmission of this code without + * express permission is prohibited. + */ diff --git a/leigh-mecha-javafx/LICENSE_PDFJS.txt b/leigh-mecha-javafx/LICENSE_PDFJS.txt new file mode 100644 index 0000000000000000000000000000000000000000..f433b1a53f5b830a205fd2df78e2b34974656c7b --- /dev/null +++ b/leigh-mecha-javafx/LICENSE_PDFJS.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/leigh-mecha-javafx/build.gradle b/leigh-mecha-javafx/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..69f62dfa8b75cc2df80e88fb9e5437616ebb3b63 --- /dev/null +++ b/leigh-mecha-javafx/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'java' + id 'org.openjfx.javafxplugin' version '0.0.9' + id 'java-library' +} + +apply plugin: 'application' +apply plugin: 'org.openjfx.javafxplugin' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation group: 'junit', name: 'junit', version: '4.12' + api project(':leigh-mecha') + api project(':leigh-eo') +} + +javafx { + modules = [ 'javafx.controls', 'javafx.fxml' ] +} \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/java/de/michaelhoffer/DraggableNodePane.java b/leigh-mecha-javafx/src/main/java/de/michaelhoffer/DraggableNodePane.java new file mode 100644 index 0000000000000000000000000000000000000000..627812b62133d4bd6cae0f13aae9b02b4d3c90cd --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/de/michaelhoffer/DraggableNodePane.java @@ -0,0 +1,109 @@ +package de.michaelhoffer; + +import javafx.scene.Node; +import javafx.scene.layout.Pane; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +/** + * Implementation of a pane which is mouse-click draggable around its parent. + * + * @author Michael Hoffer, C. Alexander Leigh + */ +public class DraggableNodePane extends Pane { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(DraggableNodePane.class); + // node position + private double x = 0; + private double y = 0; + // mouse position + private double mousex = 0; + private double mousey = 0; + private Node view; + private boolean dragging = false; + private boolean moveToFront = true; + + public DraggableNodePane() { + init(); + } + + public DraggableNodePane(Node view) { + this.view = view; + + getChildren().add(view); + init(); + } + + private void init() { + onMousePressedProperty().set(event -> { + // record the current mouse X and Y position on Node + mousex = event.getSceneX(); + mousey = event.getSceneY(); + + x = getLayoutX(); + y = getLayoutY(); + + if (isMoveToFront()) { + toFront(); + } + }); + + //Event Listener for MouseDragged + onMouseDraggedProperty().set(event -> { + // Get the exact moved X and Y + + double offsetX = event.getSceneX() - mousex; + double offsetY = event.getSceneY() - mousey; + + x += offsetX; + y += offsetY; + + double scaledX = x; + double scaledY = y; + + setLayoutX(scaledX); + setLayoutY(scaledY); + + dragging = true; + + // again set current Mouse x AND y position + mousex = event.getSceneX(); + mousey = event.getSceneY(); + + event.consume(); + }); + + onMouseClickedProperty().set(event -> dragging = false); + } + + /** + * @return the dragging + */ + protected boolean isDragging() { + return dragging; + } + + /** + * @return the view + */ + public Node getView() { + return view; + } + + /** + * @param moveToFront the moveToFront to set + */ + public void setMoveToFront(boolean moveToFront) { + this.moveToFront = moveToFront; + } + + /** + * @return the moveToFront + */ + public boolean isMoveToFront() { + return moveToFront; + } + + public void removeNode(Node n) { + getChildren().remove(n); + } +} \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/FileImageBinder.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/FileImageBinder.java new file mode 100644 index 0000000000000000000000000000000000000000..f49fd3d2c8a517e74a462e3aeaa18972501b1763 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/FileImageBinder.java @@ -0,0 +1,70 @@ +package leigh.mecha.javafx; + +import javafx.scene.image.Image; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; + +import java.util.Objects; + +/** + * Implementation of {@link RamImageBinder} which loads its images from the local file system (not the resource + * loader). + *

+ * MTS-safety: Unsafe. + * + * @author C. Alexander Leigh + */ +public class FileImageBinder extends RamImageBinder { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(FileImageBinder.class); + private final String prefix; + private final String suffix; + + /** + * Create a new FileImageBinder, that will build file paths using the given prefix and suffixes. The prefix + * must include "file:", or another valid method for the {@link Image} class. + */ + public FileImageBinder(String prefix, String suffix) { + this.prefix = prefix; + this.suffix = suffix; + } + + public Image getImage(String name) { + Image img = super.getImage(name); + if (img == null) { + try { + String fn = prefix + name + suffix; + logger.debug("Attempting to load icon. [fn: {}]", fn); + img = new Image(fn); + } catch (Exception e) { + e.printStackTrace(); + } + + // Can it actually be null? The contract is vague. + if (img != null) { + putImage(name, img); + } + } + return img; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FileImageBinder that = (FileImageBinder) o; + return Objects.equals(prefix, that.prefix) && Objects.equals(suffix, that.suffix); + } + + @Override + public int hashCode() { + return Objects.hash(prefix, suffix); + } + + @Override + public String toString() { + return "FileImageBinder{" + + "prefix='" + prefix + '\'' + + ", suffix='" + suffix + '\'' + + "} " + super.toString(); + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/ImageBinder.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/ImageBinder.java new file mode 100644 index 0000000000000000000000000000000000000000..f45719d1b908aac5a3b329d3b4e711967e8c24e6 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/ImageBinder.java @@ -0,0 +1,7 @@ +package leigh.mecha.javafx; + +import javafx.scene.image.Image; + +public interface ImageBinder { + Image getImage(String name); +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/JavaFXConstants.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/JavaFXConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..ec9f595ff11806f47c7e3a5833127d206725e80c --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/JavaFXConstants.java @@ -0,0 +1,6 @@ +package leigh.mecha.javafx; + +public interface JavaFXConstants { + int REALLY_TALL_HEIGHT = 10000; + int REALLY_BIG_WIDTH = 10000; +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/NodeRuler.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/NodeRuler.java new file mode 100644 index 0000000000000000000000000000000000000000..699da4baf3a9674e7dda0254a224b6d77f403cc5 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/NodeRuler.java @@ -0,0 +1,47 @@ +package leigh.mecha.javafx; + +import javafx.geometry.Bounds; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.text.Text; +import org.apache.commons.lang.StringUtils; + +/** + * This class provides the ability to measure JFX nodes before they are visible on the screen. This is useful for + * implementing layout managers which must know the render size of the node prior to rendering the node onto the + * screen. + * + * @author C. Alexander Leigh + * @since mk14 mod19 (CRYSTAL) + */ +public class NodeRuler { + private static final String WIDE_CHAR = "w"; + /** + * Attempt to measure the given JFX node. The bounds that is returned will contain a width and height for the + * element. This method should not be called on nodes which are already part of a {@link Scene}. + */ + public static Bounds measure(Node node) { + Group root = new Group(); + + // Even though this appears unused, it is magical. Do not remove it. + Scene s = new Scene(root); + root.getChildren().add(node); + + root.applyCss(); + root.layout(); + + return node.getLayoutBounds(); + } + + public static double measureTextWidth(String str) { + final Text text = new Text(str); + new Scene(new Group(text)); + text.applyCss(); + return text.getLayoutBounds().getWidth(); + } + + public static double measureTextWidth(int chars) { + return measureTextWidth(StringUtils.repeat(WIDE_CHAR, chars)); + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/RamImageBinder.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/RamImageBinder.java new file mode 100644 index 0000000000000000000000000000000000000000..9daac7c7d644436fcdf392ba1bc3b3d8f250ed04 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/RamImageBinder.java @@ -0,0 +1,44 @@ +package leigh.mecha.javafx; + +import javafx.scene.image.Image; + +import java.util.HashMap; +import java.util.Objects; + +/** + * Relatively simple implementation of the {@link ImageBinder} specification. + */ +public class RamImageBinder implements ImageBinder { + // TODO: How about a LRU cache here instead + private final HashMap images = new HashMap<>(); + + @Override + public Image getImage(String name) { + return images.get(name); + } + + public void putImage(String name, Image image) { + if (image == null) images.remove(name); + images.put(name, image); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RamImageBinder that = (RamImageBinder) o; + return Objects.equals(images, that.images); + } + + @Override + public int hashCode() { + return Objects.hash(images); + } + + @Override + public String toString() { + return "RamImageBinder{" + + "images=" + images + + '}'; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/TableViewImage.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/TableViewImage.java new file mode 100644 index 0000000000000000000000000000000000000000..2837bd4cd295bdd0adeb39e69e471c43e3e7c258 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/javafx/TableViewImage.java @@ -0,0 +1,24 @@ +package leigh.mecha.javafx; + +import javafx.scene.image.ImageView; + +/** + * A helper class for inserting images into {@link javafx.scene.control.TableView} widgets. + * + * @author C. Alexander Leigh + */ +public class TableViewImage { + private ImageView image; + + TableViewImage(ImageView img) { + this.image = img; + } + + public void setImage(ImageView value) { + image = value; + } + + public ImageView getImage() { + return image; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/GraphSerializer.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/GraphSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..b79182a277e22e8b539487a160588a38ea95a9e3 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/GraphSerializer.java @@ -0,0 +1,161 @@ +package leigh.mecha.nodegraph; + +import leigh.eo.EO; +import leigh.eo.EOLoop; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.javafx.NodeGraphJFX; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Companion class to {@link NodeGraphJFX} which provides serialization functionality. This allows graph states to be + * loaded/saved. + * + * @author C. Alexander Leigh + */ +public class GraphSerializer { + public static final String TYPE_NODE = "leigh.mecha.nodegraph.Node"; + public static final String TYPE_VALUE = "leigh.mecha.nodegraph.Value"; + public static final String TYPE_CONNECTION = "leigh.mecha.nodegraph.Connection"; + public static final String KEY_ID = "id"; + public static final String KEY_XPOS = "xPos"; + public static final String KEY_YPOS = "yPos"; + public static final String KEY_TYPE = "type"; + public static final String KEY_VALUES = "values"; + public static final String KEY_NAME = "name"; + public static final String KEY_VALUE = "value"; + public static final String KEY_SRCID = "srcId"; + public static final String KEY_SRCNAME = "srcName"; + public static final String KEY_DSTID = "dstId"; + public static final String KEY_DSTNAME = "dstName"; + public static final String KEY_CONNECTIONS = "connections"; + private static final MechaLogger logger = MechaLoggerFactory.getLogger(GraphSerializer.class); + + /** + * Convert the graph state from the {@link NodeGraphJFX} control into an {@link EOLoop} of node objects. + */ + public EOLoop save(NodeGraphJFX graph) { + logger.debug("save() called."); + EOLoop nodes = new EOLoop(); + + List objects = graph.getObjects(); + + for (NodeObject obj : objects) { + EO nodeState = new EO(TYPE_NODE); + nodeState.setValue(KEY_ID, obj.getId()); + nodeState.setValue(KEY_XPOS, obj.getPosX()); + nodeState.setValue(KEY_YPOS, obj.getPosY()); + nodeState.setValue(KEY_TYPE, obj.getNodeConfig().getName()); + EOLoop valueStates = nodeState.getValueLoop(KEY_VALUES); + + for (Map.Entry value : obj.getValues().entrySet()) { + EO valueState = new EO(TYPE_VALUE); + valueState.setValue(KEY_NAME, value.getKey()); + valueState.setValue(KEY_VALUE, value.getValue()); + valueStates.add(valueState); + } + + EOLoop conStates = nodeState.getValueLoop(KEY_CONNECTIONS); + for (NodeConnection connection : obj.getConnections()) { + // We allow this to fail for development purposes, to allow for changes between editions + try { + EO conState = new EO(TYPE_CONNECTION); + + conState.setValue(KEY_SRCID, connection.getSrcNode().getId()); + conState.setValue(KEY_SRCNAME, connection.getSrcAttribute().getName()); + conState.setValue(KEY_DSTID, connection.getDstNode().getId()); + conState.setValue(KEY_DSTNAME, connection.getDstAttribute().getName()); + + conStates.add(conState); + } catch (Exception e) { + e.printStackTrace(); + } + } + + logger.debug("node: {}", obj); + for (NodeConnection con : obj.getConnections()) { + logger.debug("-> connection [remoteId: {}] [srcAttr: {}] [dstAttr: {}]", + con.getDstNode().getId(), con.getSrcAttribute(), con.getDstAttribute()); + } + + nodes.add(nodeState); + } + + return nodes; + } + + public NodeConfig getConfig(List configs, String name) { + for (NodeConfig config : configs) { + if (name.equals(config.getName())) return config; + } + return null; + } + + public void load(NodeGraphJFX graph, EOLoop nodes, List configs) { + HashMap nodeObjects = new HashMap<>(); + + // First we build the nodes + for (EO node : nodes) { + logger.debug("Deserializing node..."); + + int id = node.getValueInteger(KEY_ID); + NodeConfig cfg = getConfig(configs, node.getValueString(KEY_TYPE)); + NodeObject obj = new NodeObject(id, cfg); + obj.setPosX(node.getValueDouble(KEY_XPOS)); + obj.setPosY(node.getValueDouble(KEY_YPOS)); + nodeObjects.put(obj.getId(), obj); + + EOLoop values = node.getValueLoop(KEY_VALUES); + for (EO value : values) { + logger.debug("Node value found: {}", value); + obj.getValues().put(value.getValueString(KEY_NAME), value.getValueString(KEY_VALUE)); + } + + logger.debug("Regenerated node: {}", obj); + } + + for (NodeObject x : nodeObjects.values()) { + logger.debug("Loaded. [obj: {}]", x); + } + + // Then we build the connections + for (EO node : nodes) { + EOLoop connections = node.getValueLoop(KEY_CONNECTIONS); + for (EO connection : connections) { + logger.debug("Building connection: {}", connection); + if (connection.size() == 0) { + logger.error("Illegal State"); + continue; + } + Integer srcId = connection.getValueInteger(KEY_SRCID); + Integer dstId = connection.getValueInteger(KEY_DSTID); + String srcName = connection.getValueString(KEY_SRCNAME); + String dstName = connection.getValueString(KEY_DSTNAME); + NodeObject srcObj = nodeObjects.get(srcId); + NodeObject dstObj = nodeObjects.get(dstId); + + if (srcObj == null || dstObj == null) { + logger.error("State corrupted. [flow: {}]", connection); + } + + NodeConfig srcNodeConfig = srcObj.getNodeConfig(); + NodeConfig dstNodeConfig = dstObj.getNodeConfig(); + + // Can happen if we have a missing node. We tolerate this. + if (srcNodeConfig == null || dstNodeConfig == null) continue; + + NodeAttribute srcAttr = srcNodeConfig.getAttr(srcName); + NodeAttribute dstAttr = dstNodeConfig.getAttr(dstName); + + NodeConnection nodeConnection = new NodeConnection(nodeObjects.get(srcId), srcAttr, + nodeObjects.get(dstId), dstAttr); + srcObj.getConnections().add(nodeConnection); + } + } + graph.load(new ArrayList<>(nodeObjects.values())); + } +} \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/GraphUtil.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/GraphUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..5fe93eb6e1aa2ac79114c0d4b620fa6c38f41373 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/GraphUtil.java @@ -0,0 +1,20 @@ +package leigh.mecha.nodegraph; + +import leigh.eo.EO; +import leigh.eo.EOLoop; + +import java.io.Serializable; +import java.util.Objects; + +public class GraphUtil { + public static Serializable getValue(EO node, String key) { + EOLoop values = node.getValueLoop(GraphSerializer.KEY_VALUES); + for (EO value : values) { + String valueKey = value.getValueString(GraphSerializer.KEY_NAME); + if (Objects.equals(key, valueKey)) { + return value.get(GraphSerializer.KEY_VALUE); + } + } + return null; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeAttribute.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeAttribute.java new file mode 100644 index 0000000000000000000000000000000000000000..7e3185745465c16ea2567ec0b527deb2bd11b010 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeAttribute.java @@ -0,0 +1,58 @@ +package leigh.mecha.nodegraph; + +public class NodeAttribute { + private boolean hasInputSocket; + private boolean hasOutputSocket; + private String label; + private String name; + + public NodeAttribute(String name, String label) { + this.name = name; + this.label = label; + } + + public NodeAttribute(String name) { + this(name, name); + } + + public boolean isHasInputSocket() { + return hasInputSocket; + } + + @Override + public String toString() { + return "NodeAttribute{" + + "hasInputSocket=" + hasInputSocket + + ", hasOutputSocket=" + hasOutputSocket + + ", label='" + label + '\'' + + ", name='" + name + '\'' + + '}'; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public NodeAttribute setHasInputSocket(boolean hasInputSocket) { + this.hasInputSocket = hasInputSocket; + return this; + } + + public boolean isHasOutputSocket() { + return hasOutputSocket; + } + + public NodeAttribute setHasOutputSocket(boolean hasOutputSocket) { + this.hasOutputSocket = hasOutputSocket; + return this; + } + + public String getLabel() { + return label; + } + +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeConfig.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..821a846645570aafc5afd722f650279a12e36f6b --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeConfig.java @@ -0,0 +1,71 @@ +package leigh.mecha.nodegraph; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * The configuration for a graph node. This class only contains the schema (meta-information) for the node. The + * actual values are stored in the node itself. + * + * @author C. Alexander Leigh + */ +public class NodeConfig { + private final String label; + private final String name; + + private final ArrayList attrs = new ArrayList<>(); + + public NodeConfig(String name, String label) { + this.label = label; + this.name = name; + } + + public String getName() { + return name; + } + + public String getLabel() { + return label; + } + + public void addAttr(NodeAttribute attr) { + attrs.add(attr); + } + + public List getAttrs() { + return Collections.unmodifiableList(attrs); + } + + public NodeAttribute getAttr(String name) { + for (NodeAttribute attr : attrs) { + if (name.equals(attr.getName())) return attr; + } + return null; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NodeConfig that = (NodeConfig) o; + return Objects.equals(label, that.label) && + Objects.equals(name, that.name) && + Objects.equals(attrs, that.attrs); + } + + @Override + public int hashCode() { + return Objects.hash(label, name, attrs); + } + + @Override + public String toString() { + return "NodeConfig{" + + "label='" + label + '\'' + + ", name='" + name + '\'' + + ", attrs=" + attrs + + '}'; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeConnection.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..c06a9a947a84242ea863c9b1e5614b5b7fa0f7cd --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeConnection.java @@ -0,0 +1,65 @@ +package leigh.mecha.nodegraph; + +import java.util.Objects; + +/** + * POJO containing information about a connection between two nodes. + * + * @author C. Alexander Leigh + */ +public class NodeConnection { + private final NodeObject srcNode; + private final NodeObject dstNode; + private final NodeAttribute srcAttribute; + private final NodeAttribute dstAttribute; + + public NodeConnection(NodeObject srcNode, NodeAttribute srcAttribute, + NodeObject dstNode, NodeAttribute dstAttribute) { + this.srcNode = srcNode; + this.dstNode = dstNode; + this.srcAttribute = srcAttribute; + this.dstAttribute = dstAttribute; + } + + public NodeObject getSrcNode() { + return srcNode; + } + + public NodeObject getDstNode() { + return dstNode; + } + + public NodeAttribute getSrcAttribute() { + return srcAttribute; + } + + public NodeAttribute getDstAttribute() { + return dstAttribute; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NodeConnection that = (NodeConnection) o; + return Objects.equals(srcNode, that.srcNode) && + Objects.equals(dstNode, that.dstNode) && + Objects.equals(srcAttribute, that.srcAttribute) && + Objects.equals(dstAttribute, that.dstAttribute); + } + + @Override + public int hashCode() { + return Objects.hash(srcNode, dstNode, srcAttribute, dstAttribute); + } + + @Override + public String toString() { + return "NodeConnection{" + + "srcNode=" + srcNode.getId() + + ", dstNode=" + dstNode.getId() + + ", srcAttribute=" + srcAttribute + + ", dstAttribute=" + dstAttribute + + '}'; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeGraph.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeGraph.java new file mode 100644 index 0000000000000000000000000000000000000000..93f87db09e85b318ff3ca7e062efc36c85cea135 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeGraph.java @@ -0,0 +1,26 @@ +package leigh.mecha.nodegraph; + +import java.util.List; + +/** + * This class represents a node graph. Currently the graph is stored internally as a list of + * {@link NodeObject}s, which describe each of the nodes on the graph and together comprise the + * entire graph. + *

+ * The NodeGraph stores connections "backwards", so for the purposes of a connection, the src is the receiving + * node and the dst is the sending node. This allows the graph to easily be transversed from child through + * its parental lineage, which is its typical use-case for Conflux. + * + * @author C. Alexander Leigh + */ +public class NodeGraph { + private final List nodes; + + public NodeGraph(List nodes) { + this.nodes = nodes; + } + + public List getNodes() { + return nodes; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeObject.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeObject.java new file mode 100644 index 0000000000000000000000000000000000000000..c6dd4554264184dafb2c75120dd1f6b41a856771 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/NodeObject.java @@ -0,0 +1,95 @@ +package leigh.mecha.nodegraph; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * This class represents an individual node on a {@link NodeGraph}. The node has a visual position on the graph + * denoted by x,y coordinates, as well as optionally attributes and connections of those attributes to other + * nodes. + * + * @author C. Alexander Leigh + */ +public class NodeObject { + private final int id; + private double posX; + private double posY; + private final NodeConfig nodeConfig; + private final ArrayList connections = new ArrayList<>(); + private final HashMap values = new HashMap<>(); + + public HashMap getValues() { + return values; + } + + public NodeObject(int id, NodeConfig nodeConfig) { + this.id = id; + this.nodeConfig = nodeConfig; + } + + @Override + public String toString() { + return "NodeObject{" + + "id=" + id + + ", posX=" + posX + + ", posY=" + posY + + ", nodeConfig=" + nodeConfig + + ", connections=" + connections + + ", values=" + values + + '}'; + } + + public double getPosX() { + return posX; + } + + public void setPosX(double posX) { + this.posX = posX; + } + + public double getPosY() { + return posY; + } + + public void setPosY(double posY) { + this.posY = posY; + } + + /** + * Return the meta-configuration for the node. This is the configuration which is common to all instances + * of the node in a graph. + */ + public NodeConfig getNodeConfig() { + return nodeConfig; + } + + /** + * Return the integer id for the node. The id is unique within a given nodegraph and carries no other meaning. + * The id can change from one serialization to another, so it should not be relied on. + */ + public int getId() { + return id; + } + + /** + * Return a value for the given key if it has been set in the node. + */ + public String getValue(String key) { + return values.get(key); + } + + /** + * Set a value for the given key in the node. + */ + public void setValue(String key, String value) { + values.put(key, value); + } + + /** + * Return the connections for this node. Connections are stored on the outbound node (the origination node), + * so to find connections that connect to this node, you must search the other nodes in the graph. + */ + public ArrayList getConnections() { + return connections; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/GraphListener.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/GraphListener.java new file mode 100644 index 0000000000000000000000000000000000000000..1e3d0760a44c5ca48ea26ea9468e5d9d6ff14e8e --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/GraphListener.java @@ -0,0 +1,5 @@ +package leigh.mecha.nodegraph.javafx; + +public interface GraphListener { + void updated(); +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/NodeGraphJFX.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/NodeGraphJFX.java new file mode 100644 index 0000000000000000000000000000000000000000..feb781371b65ec57c25faff84bf51aff8c82b1fc --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/NodeGraphJFX.java @@ -0,0 +1,587 @@ +package leigh.mecha.nodegraph.javafx; + +import de.michaelhoffer.DraggableNodePane; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Bounds; +import javafx.geometry.Point2D; +import javafx.scene.Node; +import javafx.scene.control.*; +import javafx.scene.effect.DropShadow; +import javafx.scene.input.ContextMenuEvent; +import javafx.scene.input.InputEvent; +import javafx.scene.input.MouseDragEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.Pane; +import javafx.scene.layout.VBox; +import javafx.scene.shape.Circle; +import javafx.scene.shape.Line; +import leigh.mecha.javafx.JavaFXConstants; +import leigh.mecha.javafx.NodeRuler; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.NodeAttribute; +import leigh.mecha.nodegraph.NodeConfig; +import leigh.mecha.nodegraph.NodeConnection; +import leigh.mecha.nodegraph.NodeObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * JavaFX implementation of a Node Graph editor. + *

+ * The implementation consists of a root {@link Pane} which contains the canvas. The connection lines are drawn + * directly onto the root pane. Within the pane, each Node (but not its connections) are represented by another child + * {@link Pane}, which is draggable. The mechanics for drawing the connections are located within the + * {@link SocketFlow} class. + * + * @author C. Alexander Leigh + * @since mk14 mod19 (CRYSTAL) + */ + +// TODO Extract a useful interface which is not JavaFX-specific +// FIXME A bug exists where nulling a field should remove its local attribute and does not +// FIXME A bug exists where editing the nodegraph can leave dangling remote attributes (connections) +public class NodeGraphJFX { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(NodeGraphJFX.class); + public final Pane root; + private final EventHandler startHandler; + private final ArrayList connections = new ArrayList<>(); + private final ArrayList objects = new ArrayList<>(); + private final HashMap> sockets = new HashMap<>(); + private final int socketRadius = 7; + private final int nodeObjectPrefWidth = 170; + private final int nodeObjectPrefHeight = 80; + private final List nodesConfigs; + private final ArrayList listeners = new ArrayList<>(); + public Line line; + private int idSequence = 0; + // We stash the click location for the canvas here, since it gets lost in the event chain. + private double canvasClickX; + private double canvasClickY; + + /** + * Create a new NodegraphGenerator. The root pane (the pane the connection lines will be created in) is passed + * here. + */ + public NodeGraphJFX(Pane root, List nodesConfigs) { + this.nodesConfigs = nodesConfigs; + class DragStartHandler implements EventHandler { + @Override + public void handle(MouseEvent event) { + if (line == null) { + Node sourceNode = (Node) event.getSource(); + line = new Line(); + + // We have to go up here to get to the NodePane. + Bounds bounds = socketRootBounds(sourceNode); + + // start line at center of node + line.setStartX((bounds.getMinX() + bounds.getMaxX()) / 2); + line.setStartY((bounds.getMinY() + bounds.getMaxY()) / 2); + line.setEndX(line.getStartX()); + line.setEndY(line.getStartY()); + + setupLine(line); + + sourceNode.startFullDrag(); + root.getChildren().add(0, line); + } + } + } + startHandler = new DragStartHandler(); + + ContextMenu canvasMenu = buildCanvasMenu(); + + root.setOnContextMenuRequested(new EventHandler() { + @Override + public void handle(ContextMenuEvent evt) { + logger.debug("Canvas context menu requested."); + canvasClickX = evt.getScreenX(); + canvasClickY = evt.getScreenY(); + canvasMenu.show(root.getScene().getWindow(), evt.getScreenX(), evt.getScreenY()); + } + }); + + // This is a hack to ensure there is something to click on when the canvas first renders. + root.setPrefHeight(JavaFXConstants.REALLY_TALL_HEIGHT); + root.setPrefWidth(JavaFXConstants.REALLY_BIG_WIDTH); + + this.root = root; + } + + /** + * Set the line configuration for a draggable line. + * + * @param line + */ + public static void setupLine(Line line) { + line.setStrokeWidth(5); + } + + /** + * Given a node, return its root bounds (the bounds of its parent node). + */ + public static Bounds socketRootBounds(Node socketCircle) { + return socketCircle.getParent().localToParent(socketCircle.getBoundsInParent()); + } + + /** + * Given a list of sockets, find the one which matches the given attribute name and input/output type. + */ + public Circle findSocket(ArrayList sockets, String attrName, boolean isInput) { + logger.debug("findSocket: Called [attr: {}] [isInput: {}]", attrName, isInput); + for (Circle socket : sockets) { + SocketUserData ud = (SocketUserData) socket.getUserData(); + NodeAttribute attr = ud.getAttrCfg(); + + logger.debug("findSocket: Searching for ud: {}", attr); + + if (attrName.equals(attr.getName())) { + if (!isInput == ud.isOutput()) { + logger.debug("findSocket: Match!"); + return socket; + } + } + } + + logger.debug("findSocket: No match"); + return null; + } + + /** + * Given a set of node objects, load them into the editor. + */ + public void load(List nodes) { + // Generate first so they all exist when we go to make the connections + int hwm = 0; + + for (NodeObject node : nodes) { + generate(node); + int id = node.getId(); + if (id > hwm) hwm = id; + } + + logger.debug("load(): Sockets count: {}", sockets.size()); + + // The above did not create the connections, so we attempt to do that now. + + for (NodeObject node : nodes) { + ArrayList srcSockets = sockets.get(node.getId()); + + logger.debug("Found node sockets: {}", srcSockets); + + for (NodeConnection connection : node.getConnections()) { + try { + ArrayList dstSockets = sockets.get(connection.getDstNode().getId()); + logger.debug("Would have created connections: {}", connection); + + Circle srcSocket = findSocket(srcSockets, connection.getSrcAttribute().getName(), true); + Circle dstSocket = findSocket(dstSockets, connection.getDstAttribute().getName(), false); + + logger.debug("Located sockets for restored connection. [src: {}] [dst: {}]", srcSocket, dstSocket); + + SocketFlow flow = new SocketFlow(this, srcSocket, dstSocket); + flow.setObj(node); + flow.setObjConnection(connection); + connections.add(flow); + flow.drawConnection(root); + } catch (Exception e) { + // Intentionally blank. + } + } + } + + idSequence = hwm + 1; + } + + public ArrayList getListeners() { + return listeners; + } + + protected void notifyUpdate() { + for (GraphListener l : listeners) { + l.updated(); + } + } + + /** + * Clear the UI contents of the graph, including the associated state. + */ + public void clear() { + connections.clear(); + objects.clear(); + root.getChildren().clear(); + sockets.clear(); + notifyUpdate(); + } + + /** + * Return all the connections currently in this graph. Connections flow from source to destination. + */ + public ArrayList getConnections() { + return connections; + } + + public int getNodeObjectPrefWidth() { + return nodeObjectPrefWidth; + } + + private ContextMenu buildCanvasMenu() { + // Create ContextMenu + ContextMenu menu = new ContextMenu(); + + Menu newItem = new Menu("New"); + for (NodeConfig nodeConfig : nodesConfigs) { + MenuItem nodeItem = new MenuItem(nodeConfig.getLabel()); + nodeItem.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + // We previously stashed the contextmenu location + Point2D coords = root.screenToLocal(canvasClickX, canvasClickY); + generate(nodeConfig, coords.getX(), coords.getY()); + } + }); + newItem.getItems().add(nodeItem); + } + menu.getItems().add(newItem); + + MenuItem dumpItem = new MenuItem("Dump"); + dumpItem.setOnAction(event -> { + for (NodeObject obj : objects) { + logger.debug("[obj: {}]", obj); + } + }); + menu.getItems().add(dumpItem); + + + return menu; + } + + /** + * Remove the current drag line. + */ + private void removeDragLine() { + if (line != null) { + root.getChildren().remove(line); + line = null; + } + } + + public ArrayList getObjects() { + return objects; + } + + /** + * Given the provided node Configuration, return a JFX {@link Pane} containing the GUI for the object. The Pane will + * not have been added to the root node (this is the responsibility of the caller). This is done to allow + * layout operations to occur elsewhere. + *

+ * The userdata for the Pane will contain a {@link NodeObject}. + *

+ * If the node already has attribute values, they will be populated into the UI. If the node has connections, + * they will NOT be populated. This is because connections cannot be present until all the nodes are present + * in the graph, as the destination may not yet have been created. Consequently, the connections must be created + * as a separate tep. + */ + + public Pane generate(NodeObject obj) { + DraggableNodePane node = new DraggableNodePane(); + objects.add(obj); + node.setUserData(obj); + node.setTranslateX(obj.getPosX()); + node.setTranslateY(obj.getPosY()); + + DropShadow shadow = new DropShadow(); + node.setEffect(shadow); + + ContextMenu nodeContextMenu = new ContextMenu(); + MenuItem menuItem = new MenuItem("Delete"); + menuItem.setOnAction(event -> { + ArrayList pending = new ArrayList<>(); + + for (SocketFlow flow : connections) { + NodeObject srcObj = (NodeObject) flow.getSrc().getParent().getUserData(); + NodeObject dstObj = (NodeObject) flow.getDst().getParent().getUserData(); + + if (flow.getDst().getParent() == node || flow.getSrc().getParent() == node) { + logger.debug("Found remote connection to remove. [src: {}] [dst: {}]", + srcObj.getNodeConfig().getName(), dstObj.getNodeConfig().getName()); + + // FIXME: This is sort of uselessly side-effecting a call to notifyUpdate() which we call later + flow.removeConnection(root); + pending.add(flow); + + ArrayList toRemove = new ArrayList<>(); + for (NodeConnection con : srcObj.getConnections()) { + if (con.getDstNode() == obj) { + toRemove.add(con); + } + } + logger.debug("Removing from obj. [sz: {}]", toRemove.size()); + srcObj.getConnections().removeAll(toRemove); + } + } + + logger.debug("Removing connections. [sz: {}] [pending: {}]", pending.size(), pending); + root.getChildren().remove(node); + objects.remove(obj); + sockets.remove(obj.getId()); + + for (SocketFlow flow : pending) { + removeConnection(flow); + } + + // TODO: Redundant + notifyUpdate(); + }); + + nodeContextMenu.getItems().add(menuItem); + + node.setOnContextMenuRequested(evt -> { + // We do this so the context menu vanishes when we click outside of it. + nodeContextMenu.show(node.getScene().getWindow(), evt.getScreenX(), evt.getScreenY()); + evt.consume(); + }); + + EventHandler nde = evt -> { + // We moved - so re-draw all our connections at the new location. + for (SocketFlow flow : connections) { + flow.drawConnection(root); + } + }; + + node.addEventHandler(MouseEvent.MOUSE_DRAGGED, nde); + node.setPrefSize(nodeObjectPrefWidth, nodeObjectPrefHeight); + VBox vbox = new VBox(); + + // FIXME: We do not want to hard-code the font settings here, move to CSS / classes instead + + //vbox.setStyle("-fx-background-color: #a0a0a0;-fx-padding:5;"); + vbox.getStyleClass().add("leigh-mecha-ng-node"); + + Label title = new Label(obj.getNodeConfig().getLabel()); + //title.setStyle("-fx-font-weight: bold;"); + //title.setFont(Font.font("Verdana", FontWeight.BOLD, 12)); + + title.getStyleClass().add("leigh-mecha-ng-node-title"); + + double runningHeight = NodeRuler.measure(title).getHeight(); + + vbox.getChildren().add(title); + + // A list of all the circles (sockets) for this node. The userdata for the circle will contain the + // attribute configuration. + ArrayList sockets = new ArrayList<>(); + + for (NodeAttribute attr : obj.getNodeConfig().getAttrs()) { + VBox fieldGroup = new VBox(); + Label label = new Label(attr.getLabel()); + TextField tf = new TextField(); + + // We may already have a value from saved state, so populate it if so. + String inputValue = obj.getValue(attr.getName()); + if (inputValue != null) { + tf.setText(inputValue); + } + + tf.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + logger.debug("Attribute textfield change listener called..."); + obj.setValue(attr.getName(), newValue); + notifyUpdate(); + } + }); + + fieldGroup.getChildren().addAll(label, tf); + + Bounds b = NodeRuler.measure(fieldGroup); + // For some reason - this is calculating too high + + double adjustedHeight = b.getHeight() - 5.25; + + vbox.getChildren().add(fieldGroup); + + if (attr.isHasInputSocket()) { + Circle inputCircle = new Circle(socketRadius); + inputCircle.getStyleClass().add("leigh-mecha-ng-input-socket"); + + inputCircle.relocate(-socketRadius, runningHeight + (adjustedHeight / 2)); + inputCircle.setUserData(new SocketUserData(attr, false)); + sockets.add(inputCircle); + } + + if (attr.isHasOutputSocket()) { + Circle outputCircle = new Circle(socketRadius); + outputCircle.getStyleClass().add("leigh-mecha-ng-output-socket"); + + outputCircle.relocate(b.getWidth() + socketRadius - 3, runningHeight + (adjustedHeight / 2)); + outputCircle.setUserData(new SocketUserData(attr, true)); + sockets.add(outputCircle); + } + + runningHeight += adjustedHeight; + } + + // We store these for later. + this.sockets.put(obj.getId(), sockets); + + // This is for the connections, not the node. + EventHandler dragReleaseHandler = evt -> { + // Prevent circular references + if (evt.getGestureSource() == evt.getSource()) { + logger.debug("drag source & target are identical"); + evt.consume(); + return; + } + + // We remove the line we were drawing, and replace it with a new line managed by this class. + SocketFlow flow = new SocketFlow(this); + + if (flow.isValid(evt)) { + for (SocketFlow f : connections) { + if (f.getSrc() == flow.getSrc() && f.getDst() == flow.getDst()) { + // This is a duplicate of a flow we already have + logger.warn("Attempt to create duplicate connection."); + evt.consume(); + return; + } + } + + logger.debug("Valid flow: {}", flow); + connections.add(flow); + + NodeObject srcObj = (NodeObject) flow.getSrc().getParent().getUserData(); + NodeObject dstObj = (NodeObject) flow.getDst().getParent().getUserData(); + SocketUserData srcSocket = (SocketUserData) flow.getSrc().getUserData(); + SocketUserData dstSocket = (SocketUserData) flow.getDst().getUserData(); + + NodeConnection connection = new NodeConnection(srcObj, srcSocket.getAttrCfg(), + dstObj, dstSocket.getAttrCfg()); + + // This must be undone if the flow is removed + obj.getConnections().add(connection); + flow.setObj(obj); + flow.setObjConnection(connection); + + logger.debug("Built connection: [src: {}] [dst:{}]", srcObj, dstObj); + notifyUpdate(); + + flow.drawConnection(root); + } else { + // We have an invalid flow, do nothing + } + + evt.consume(); + }; + + EventHandler socketDragEnteredHandler = evt -> { + if (line != null) { + // snap line end to node center + Node nd = (Node) evt.getSource(); + Bounds bounds = nd.getBoundsInParent(); + line.setEndX((bounds.getMinX() + bounds.getMaxX()) / 2); + line.setEndY((bounds.getMinY() + bounds.getMaxY()) / 2); + } + evt.consume(); + }; + + EventHandler socketMouseDraggedHandler = evt -> { + // This exists to prevent the event from bubbling up to the NodePane + if (line != null) { + // X & Y in the event are going to be relative to the circle + Node nd = (Node) evt.getSource(); + Bounds bounds = nd.getParent().localToParent(nd.getBoundsInParent()); + + line.setEndX(bounds.getCenterX() + evt.getX()); + line.setEndY(bounds.getCenterY() + evt.getY()); + } + evt.consume(); + }; + + for (Node n : sockets) { + // register handlers + n.setOnDragDetected(startHandler); + n.setOnMouseDragReleased(dragReleaseHandler); + n.setOnMouseDragEntered(socketDragEnteredHandler); + n.setOnMouseDragged(socketMouseDraggedHandler); + } + + root.setOnMouseReleased(evt -> { + // TODO: This is getting called regardless of dragReleaseHandler + // mouse released outside of a target -> remove line + removeDragLine(); + }); + + root.setOnMouseDragged(evt -> { + if (line != null) { + // If we are dragging - keep dragging. + line.setEndX(evt.getX()); + line.setEndY(evt.getY()); + evt.consume(); + } + // We don't consume so we can bubble up to maybe a ScrollPane if we are not currently dragging a connection + }); + + EventHandler paneDragExited = new EventHandler() { + @Override + public void handle(MouseEvent event) { + updateNodePosition(node); + notifyUpdate(); + } + }; + node.addEventHandler(MouseEvent.MOUSE_DRAGGED, paneDragExited); + + node.getChildren().add(vbox); + // We add the sockets (the circles) last so they have the highest z-order. + // We add them to the node pane so that they drag with the pane. + node.getChildren().addAll(sockets); + + root.getChildren().add(node); + + notifyUpdate(); + + return node; + } + + /** + * Generate a new node based on the provided configuration and the desired x/y position. The x/y position + * is relative to the graph. + */ + public Pane generate(NodeConfig nodeCfg, double xPos, double yPos) { + NodeObject obj = new NodeObject(idSequence++, nodeCfg); + obj.setPosX(xPos); + obj.setPosY(yPos); + return generate(obj); + } + + /** + * Update the stored x/y position for the given node, based on its movement in the nodegraph, typically as the + * result of user interaction. The x/y position is relative to the graph. + */ + public void updateNodePosition(Node node) { + Bounds newBounds = node.getBoundsInParent(); + NodeObject obj = (NodeObject) node.getUserData(); + obj.setPosX((int) newBounds.getMinX()); + obj.setPosY((int) newBounds.getMinY()); + } + + /** + * Indicate that the given connection is being removed from the nodegraph. + */ + public void removeConnection(SocketFlow flow) { + connections.remove(flow); + + // The object that is being removed. + + NodeObject removedObj = flow.getObj(); + removedObj.getConnections().remove(flow.getObjConnection()); + + notifyUpdate(); + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/SocketFlow.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/SocketFlow.java new file mode 100644 index 0000000000000000000000000000000000000000..80a311ee941f199639342211b15b11e048f333d7 --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/SocketFlow.java @@ -0,0 +1,160 @@ +package leigh.mecha.nodegraph.javafx; + +import javafx.geometry.Bounds; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.MenuItem; +import javafx.scene.input.MouseDragEvent; +import javafx.scene.layout.Pane; +import javafx.scene.shape.Circle; +import javafx.scene.shape.Line; +import leigh.mecha.log.MechaLogger; +import leigh.mecha.log.MechaLoggerFactory; +import leigh.mecha.nodegraph.NodeConnection; +import leigh.mecha.nodegraph.NodeObject; + +/** + * This class manages a JavaFX connection between two NodeGraph objects. The implementation draws {@link Line} between + * a pair of provided {@link Circle} nodes representing the sockets on the edges of the node. + * + * @author C. Alexander Leigh + * @since mk14 mod19 (CRYSTAL) + */ +public class SocketFlow { + private static final MechaLogger logger = MechaLoggerFactory.getLogger(SocketFlow.class); + private Circle src; + private Circle dst; + private Line line; + private final NodeGraphJFX nodegraph; + private NodeObject obj; + private NodeConnection objConnection; + + public SocketFlow(NodeGraphJFX nodegraph) { + this.nodegraph = nodegraph; + } + + /** + * Create a new socket flow when the src and destination are already known. This is useful when loading a + * previously saved state. Once created, drawConnection() should be called to actually draw the connection + * between the nodes. + */ + public SocketFlow(NodeGraphJFX nodegraph, Circle src, Circle dst) { + this(nodegraph); + this.src = src; + this.dst = dst; + } + + /** + * Remove the socket flow from the given pane. This removes it from the UI and calls + * notifyUpdate() on the {@link leigh.mecha.nodegraph.NodeGraph}. + * + * @param root + */ + public void removeConnection(Pane root) { + root.getChildren().remove(line); + line = null; + nodegraph.notifyUpdate(); + } + + public NodeObject getObj() { + return obj; + } + + public void setObj(NodeObject obj) { + this.obj = obj; + } + + public NodeConnection getObjConnection() { + return objConnection; + } + + public void setObjConnection(NodeConnection objConnection) { + this.objConnection = objConnection; + } + + /** + * Either create or update a connection JavaFX line between the given socket circles in the given pane. + *

+ * If the connection has already been drawn into a pane, calling this method with a different pane will still + * update the old pane. + */ + public void drawConnection(Pane root) { + if (line == null) { + line = new Line(); + NodeGraphJFX.setupLine(line); + root.getChildren().add(line); + line.toBack(); + + ContextMenu contextMenu = new ContextMenu(); + MenuItem menuItem = new MenuItem("Delete"); + menuItem.setOnAction(event -> { + root.getChildren().remove(line); + line = null; + nodegraph.removeConnection(this); + event.consume(); + }); + contextMenu.getItems().add(menuItem); + + line.setOnContextMenuRequested(event -> { + contextMenu.show(line, event.getScreenX(), event.getScreenY()); + event.consume(); + }); + } + + Bounds srcBounds = NodeGraphJFX.socketRootBounds(src); + Bounds dstBounds = NodeGraphJFX.socketRootBounds(dst); + + // start line at center of node + line.setStartX((srcBounds.getMinX() + srcBounds.getMaxX()) / 2); + line.setStartY((srcBounds.getMinY() + srcBounds.getMaxY()) / 2); + line.setEndX((dstBounds.getMinX() + dstBounds.getMaxX()) / 2); + line.setEndY((dstBounds.getMinY() + dstBounds.getMaxY()) / 2); + } + + /** + * Determine if the mouse event for a drag operation results in a valid connection. Disqualifying conditions + * include the src and destination socket being identical, attempting to connect same-cardinality sockets, + * and having a missing src or destination. + *

+ * Calling this method also sets up getSrc() and getDst() based on the cardinality + * of the sockets. In other words, getSrc() will always return the output socket. + */ + public boolean isValid(MouseDragEvent evt) { + Circle a = (Circle) evt.getGestureSource(); + Circle b = (Circle) evt.getSource(); + + if (a == null || b == null) return false; + + SocketUserData au = (SocketUserData) a.getUserData(); + SocketUserData bu = (SocketUserData) b.getUserData(); + + if (au == null || bu == null) return false; + if (au.isOutput() == bu.isOutput()) return false; + + // Determine cardinality here of the circles. + if (!au.isOutput()) { + src = a; + dst = b; + } else { + src = b; + dst = a; + } + + return true; + } + + public Circle getSrc() { + return src; + } + + public Circle getDst() { + return dst; + } + + @Override + public String toString() { + return "SocketFlow{" + + "src=" + src + + ", dst=" + dst + + '}'; + } +} diff --git a/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/SocketUserData.java b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/SocketUserData.java new file mode 100644 index 0000000000000000000000000000000000000000..97a6dd2085ce4b354db0bcfaa4f5368c2423e3ac --- /dev/null +++ b/leigh-mecha-javafx/src/main/java/leigh/mecha/nodegraph/javafx/SocketUserData.java @@ -0,0 +1,38 @@ +package leigh.mecha.nodegraph.javafx; + +import leigh.mecha.nodegraph.NodeAttribute; + +/** + * User-data meant to be associated with a socket circle on a node object. + *

+ * This class exists since it is insufficient to store the {@link NodeAttribute} configuration, since that does not + * indicate whether the socket is the input or the output side. + * + * @author C. Alexander Leigh + * @since mk14 mod19 (CRYSTAL) + */ +public class SocketUserData { + private final NodeAttribute attrCfg; + private final boolean isOutput; + + public SocketUserData(NodeAttribute attrCfg, boolean isOutput) { + this.attrCfg = attrCfg; + this.isOutput = isOutput; + } + + public NodeAttribute getAttrCfg() { + return attrCfg; + } + + public boolean isOutput() { + return isOutput; + } + + @Override + public String toString() { + return "SocketUserData{" + + "name='" + attrCfg + '\'' + + ", isOutput=" + isOutput + + '}'; + } +} diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2655fc70ae706c7ba52a5d647cbfdfad6072c697 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f1ed8538287499647d923d7d8f517a00cdac4e3a Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..39e89d3339c74cbe06e7e4f76d60bf3556b0d4b6 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e4167cb51f66c60ef7d9500b450303b5da175574 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..50b1646e94bba61b3242a680fe3023337e191123 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d7af99b5e2ae9a21d534f1965c35a2b572143322 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..37077d01e26f9ee2427592f6deebb145d628e731 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..acf23231aea22e1a95761f7eafd35f1d42ea6b84 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2359bc529d160857cce4c1d1bfca1322290205c1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..af8293829c90ce63cc4c5eda0318003785ffcba1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..780549de19de05b6cbea4ccd4737351bc9ff6104 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..bfd3119c62d9976dde9b1e59c572c678cf5811a0 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..25ef14ab4af42f4b70ccac76cddac8f3b22d8813 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..02f713bb838a8cd46f5b262c934d0edc8c6e8fe9 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d08e0cc5d98b2d933ab848c69dd6c504fbf1787d Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..59442acafb613b0c090314379f9f4c2fa134a1a1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a3065e441a0e1f1a65e9109ec9bc4f826fccac24 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..040014cfc0880371c20a89212942727c5dc30a78 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2f816d320f08b8671498299c4d00e4564d2ece6c Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Add-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..88ec04af49d1e8ab6038e3b36dd28daf4dcf0119 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..03a501477c91d8156723f0c274a37d397ed65bad Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2aa95141f9f5802818e34b0aa626e34e7cfee805 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..86d8b8c79cfa3907281aa3f25a46f178b87aedfa Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f50fc6c14e67a228c4ba9a61b1357c16410e8228 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6caf4a83146a60a2db652647b9cfed5fb71bd97c Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b77fb0705c28d647d0bf7b25246af566a791b2ec Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..69d79a2c2c2b00207ab27b68ebf4404aa17c6f2c Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-0.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-0.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..36101083fa8fd22399728ccf533c48e830781de0 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-0.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-1.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..707bb1065c76d69551c287141cb258519132ef8e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-1.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f7648cc3ff02c44e9594ccbd71deec742e253c2f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-3.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-3.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..852145890ede3dc04339de284993da270d62311d Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-3.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-4.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-4.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e40c63ab1e5c240841f3b465ade920d60be6328f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-4.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-5.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-5.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d7623b500232b6e62f29c2c232e6c2469a527314 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-5.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7586525936cc5398b86d3752a4eb45b15825b25c Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f0e94ec196757e8660b567d8ece7f99869927913 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..dad42c5ad7dad57954fc9a051ee7e222e83bee45 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..090819a064533f20aa68f562275556397683ae81 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..087dfc155860e65d2dc828dd432ffe88239fde23 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..46aa9bffe576e9a8b714646aed7f9e1a4e99dfe2 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..5b4b65cc6292a5ba7d89e976565bf08814bb88b6 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e77d699ab6a1bfd1e3eab6db428222e108342aec Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..128a14107750da2939d920c3e0802798c36f2e18 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..cef1a9985191f53c4a8a35811d1caeecdd1a1820 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..11ffa36df8404ab970df2a24b2d80b1dc6348436 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3172308c79d57147cdbe05930228043faa48ca54 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f3371c0cbd14c89a7d2b5a72e4e4f9cdc6d6017e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..beb4d228104cd985130e6eed7ccabdb63e94ce27 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2d4f87d5035f03485616d4986b6373fa0820d0af Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5pc-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5pc-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ce0013167f852a873b639e301088c094d468a750 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5pc-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5pc-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5pc-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..73b99ff2fbca40e7ca5501f61e3f2f29c1fc1af6 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/B5pc-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..61d1d0cb001dd484630e52eb7e47eaabbdee62cd Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1a393a51e079d1b5e7898423463fac5e87170da2 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS1-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS1-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f738e218ae2b4e9c33a1833a49fe20027e869aa1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS1-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS1-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS1-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..9c3169f0d9a083b462427bf4e46a25296ebbd862 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS1-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS2-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c89b3527fe57ad3b32061f36b73c756ead3fb071 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS2-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS2-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7588cec83e271feb04e3c7f3a6ee3a4c153f2052 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/CNS2-V.bcmap @@ -0,0 +1,3 @@ +àRCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSEáCNS2-H \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETHK-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETHK-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..cb29415de4f5a669c1b47e34ab889b5fdee6e428 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETHK-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETHK-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETHK-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f09aec6318dbec88491e3e488526882eaa930f37 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETHK-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETen-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETen-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c2d77462d298cdb261f5e2eed5218fcba35cbe4e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETen-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETen-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETen-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..89bff159ec62cc86b7c4a3258ee0455cab10b76a Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETen-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETenms-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETenms-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a7d69db5e32646c3fecf51bd03dc1a61c8189fae --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/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/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETenms-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETenms-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..adc5d618d6912cb3a67e4745b63764120f93d17f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/ETenms-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e92ea5b3b99b1f20d31c9760481de0472e72685b Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7a7c183228dfdc5c236b7914ca68298520ac60a1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3b5cde44dbaf7f78c716c3705590ae28e9bed265 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ea4d2d97b8bc1df2abebce0d4f8c58789f723eb1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3457c2770913963731993654c838df133deabbb3 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..4999ca40412b66e87c56870c80cff32212483ee8 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Ext-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e39908b9844939a3c6d6baccced5771b8c1b1b2d Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d5be5446aa40898742183202ce0624b8acee5234 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..39189c54e363ebe2ea542addd6b629bdacd0e8e9 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-H.bcmap @@ -0,0 +1,4 @@ +àRCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSE!!º]aX!!]`21> p z$]‚"R‚d-Uƒ7*„ 4„%+ „Z „{/…%…<9K…b1]†."‡ ‰`]‡,"]ˆ +"]ˆ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/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..310834512ffe49cbb7ca903abc2dc1aaa934e6f4 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GB-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..05fff7e8254c995031783fb3b4892d58a6b176ac Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..0cdf6bed6d450473f92e691e9015e4028113607e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK2K-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK2K-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..46f6ba5967cdfb381f001eb1193f17b43d943962 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK2K-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK2K-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK2K-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d9a9479843eda25fb0a8fd69fb302740813d925f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBK2K-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBKp-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBKp-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..5cb0af687ee20a10ecc367892ae49d7b1e74acd1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBKp-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBKp-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBKp-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..bca93b8efbb18a13e15025ad41d23db8267d2577 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBKp-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..4b4e2d32294538b5093ed3870bb9de37abf21599 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..38f706699f395dcdad5c6ad93d1a9b6fe9f66c78 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..8437ac33771536813228e3f9c1cb6c35af3acc72 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..697ab4a8e756204de9d089c8c136579973c9c0c6 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBT-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f6e50e89363483070b25106b94f729ae38587d28 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6c0d71a2d04473870c60dc59342400fe1b4ccc48 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBpc-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBpc-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c9edf67cf6d640607080ad2775c14760df77dd96 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBpc-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBpc-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBpc-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..31450c97f640ff40bd79677cd3e97f4485453d9b Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/GBpc-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7b24ea4629d0d4cc9f0cd5852edde324156ef0b1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdla-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdla-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7d30c0500520d563d0e5891c8f4781c61ddcca5e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdla-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdla-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdla-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..78946940d68cdd2ea1bec1230b1eb0b19b8d5deb Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdla-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdlb-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdlb-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d829a231015161e107123e211d4a78110daab6bf Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdlb-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdlb-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdlb-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2b572b50a47f09a51c777efabcaf6a9e3faa26c2 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKdlb-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKgccs-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKgccs-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..971a4f23f791f75d4e604ad717735ee55529eda5 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKgccs-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKgccs-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKgccs-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d353ca256b54236a4acefafdbc08e5b719892014 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKgccs-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm314-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm314-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..576dc01112bd7f28c30804661f546ece203c53d8 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm314-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm314-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm314-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..0e96d0e228e0608f77f035655140c6a235d4ea56 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm314-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm471-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm471-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..11d170c75ed8696f0705f9fb9f5afcf3b0aff4c9 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm471-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm471-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm471-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..54959bf9e776c990460f2582adee80d317062d20 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKm471-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKscs-B5-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKscs-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6ef7857ad17cefc4ab714d209716002317c23baa Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKscs-B5-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKscs-B5-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKscs-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1fb2fa2a2ecdf5abd6b7cbf2cb5f2ee4f0b11fe2 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/HKscs-B5-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Hankaku.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Hankaku.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..4b8ec7fcef466bc4090dc13c8edb354cb94d0b67 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Hankaku.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Hiragana.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Hiragana.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..17e983e77264c62ee149d1c8ec576a23e8f90eda Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Hiragana.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a45c65f008e7d6ff34edaf53af15ea471d4f6d90 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..0e7b21f0a612b1acc41c1b23ad0060da539eaf2b Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b9b22b67879d4043c75b617a24f96b0bd47cf4ca Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-Johab-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-Johab-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2531ffcf41acc01338f781c845c7f50f62fcc84a Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-Johab-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-Johab-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-Johab-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..367ceb226ab1e33624b30512716a3b65feb5a100 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-Johab-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6ae2f0b6b7238adc67bd9231668d9853ea3c8e1e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a8d4240e6adb3ac1db859085b769a0715be03c72 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..8b4ae18fd3efdbe020e4e1407d2f65125085a71a Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b655dbcfb123ed06c7eeb87dfc96ecf6759363dd Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..21f97f65b4a61adfa13f55d5a096ceab45eb485b Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCms-UHC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e06f361eb6d429290806b9f9cd7a0aebce22be4d Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f3c9113fcf0b02e1deea8246bfd27408becc8401 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Katakana.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Katakana.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..524303c4f0c20e6cd19aa1d35805e98c2c05cb7c Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Katakana.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/LICENSE b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..b1ad168ad0dd09b578cafec31d2666049b4d8718 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/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/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/NWP-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/NWP-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..afc5e4b05ee6f4be4f17eb616742b59aee4c5ac1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/NWP-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/NWP-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/NWP-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..bb5785e3278ab7a24b3080cf22ea0f609aab4595 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/NWP-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/RKSJ-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..fb8d298e9bb8e090139bbc5e958f11a237672825 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/RKSJ-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/RKSJ-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a2555a6c048de98d68f534fbba18baf4b4311e50 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/RKSJ-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Roman.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Roman.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f896dcf1c7fb118fc491094edd6244e16856d586 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/Roman.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d5db27c5cf1f5b0e66e16f6314d042a4ef707222 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1dc9b7a21bc59b6540d55b3d8933e5a6ba9f8947 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..961afefb66cb70ea2f10784029572e5f68ae4740 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..df0cffe86b5e9f154c5ef6207120d6bd43706631 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1ab18a14367cf31113eddf5ae15d9fb3549f39ab Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ad14662e25e7a4e3bd7f543c126ac24417bc3665 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..83c6bd7c4ff0abf4634765312b8a3026942d2b35 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..22a27e4ddbe26664c57f778a864b6872f6c2ba03 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..5bd6228ce62ec10f00316b136663ed6b60ebf9e5 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..53c534b7fecfd84e465c8943fe3adf500a4444f4 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b95045b400a77419292cab245f9f66f6298dbb5d Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..51f023e0d609798e72d46bf41309e092d72ccb07 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f0dbd14f3795a40b23cbe5b826f776f4ea7cba4c Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ce9c30a98541e23244876fef9dc67c2639fdd746 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..982ca462b1b047c945d3b7b0123eb42dfd8d48cd Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f78020dd4028d56497c44b7afa94985f0d18f8ce Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7daf56afabf65a4707d7bb06d829f56b247c9e80 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ac9975c585ede6958758980ade161f687d40d58b Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3da0a1c62f19f720590b54fc1de7b027af100945 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c50b9ddfde9da7ebb2f67eba68d58fa2cdee902a Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6761344639bcde069cf7133d52e127536dcdd037 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..70bf90c0efb66da2a7aa19a820d766cfe3ef3183 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7a83d53ae70ca3d81cda827cc224ec8c5efa4f17 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7a8713539491f51c52ba3a1525d181efd32c1f0f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..9f0334cac7f3852b4d06dc9e5cf0f9646ba21a5e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..808a94f0fd9c3b3cb0267e5cfe4dced2e65ecb1c Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d768bf811ffeb0d794b732a82940fa1442af499f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3d5bf6fb4ef94b452ed1ef0df926fc2bee55e973 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..09eee10d4fb4b9fe1e70a1ee56825a207ae8034a Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6c546001331cf4f2f68563229f994b55730dfdb1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1b1a64f50d204b03ef0c5575233687830a1b053a Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..994aa9ef9f50495a3ac558630b0234680be23c2f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..643f921b65819c9e8c80a97c51fc68a89053bd51 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c148f67f5e9fe4a108519eeaace89e708a51f8f5 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1849d809a679e56414f4e18dce8ca3c41109e84e Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a83a677c56df6f1ac395d2ba71e60a08b0985e97 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f527248ad547015ad8af1181e646da3b235de08f Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e1a988dc9e80be9a0803e22d021b1e81fdcc5b94 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..47e054a961adb3d97caaa31c854d9b8ef4555bf9 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b5b94852a57b19bcb357a6cae2cae2e7910e05a1 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..026adcaad4c56cb1989bd31cbcf3ad21f3965a17 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..fd4e66e81f3507b190fb2986a26a45c1c380e302 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..075efb7054901b1022af68e723647769cbe1d556 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..769d2142c03b10680800b3b6ae883e27fe04c5a2 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..bdab208b69d287128195eccbd084c8cf4ca658c3 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6ff8674af772af896d7d33c7addc37c57822f8a2 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..8dfa76a58eb720dd1992c2cc9abf1dd4b39c5a66 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/V.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..fdec9906621904180f42bd5c91f377397fd6cf95 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/V.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/WP-Symbol.bcmap b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/WP-Symbol.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..46729bbf30f3b2f176492d907fb8ca3f6a1e3026 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/cmaps/WP-Symbol.bcmap differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/debugger.js b/leigh-mecha-javafx/src/main/resources/pdfjs/web/debugger.js new file mode 100644 index 0000000000000000000000000000000000000000..daa64805ed26c0fd3490187e85d12991c360851e --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/debugger.js @@ -0,0 +1,625 @@ +/* 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. + */ +/* eslint-disable no-var */ + +"use strict"; + +var FontInspector = (function FontInspectorClosure() { + var fonts; + var active = false; + var fontAttribute = "data-font-name"; + + function removeSelection() { + const divs = document.querySelectorAll(`span[${fontAttribute}]`); + for (const div of divs) { + div.className = ""; + } + } + + function resetSelection() { + const divs = document.querySelectorAll(`span[${fontAttribute}]`); + for (const div of divs) { + div.className = "debuggerHideText"; + } + } + + function selectFont(fontName, show) { + const divs = document.querySelectorAll( + `span[${fontAttribute}=${fontName}]` + ); + for (const div of divs) { + div.className = show ? "debuggerShowText" : "debuggerHideText"; + } + } + + function textLayerClick(e) { + if ( + !e.target.dataset.fontName || + e.target.tagName.toUpperCase() !== "SPAN" + ) { + return; + } + var fontName = e.target.dataset.fontName; + var selects = document.getElementsByTagName("input"); + for (var i = 0; i < selects.length; ++i) { + var select = selects[i]; + if (select.dataset.fontName !== fontName) { + continue; + } + select.checked = !select.checked; + selectFont(fontName, select.checked); + select.scrollIntoView(); + } + } + + return { + // Properties/functions needed by PDFBug. + id: "FontInspector", + name: "Font Inspector", + panel: null, + manager: null, + init: function init(pdfjsLib) { + var panel = this.panel; + var tmp = document.createElement("button"); + tmp.addEventListener("click", resetSelection); + tmp.textContent = "Refresh"; + panel.appendChild(tmp); + + fonts = document.createElement("div"); + panel.appendChild(fonts); + }, + cleanup: function cleanup() { + fonts.textContent = ""; + }, + enabled: false, + get active() { + return active; + }, + set active(value) { + active = value; + if (active) { + document.body.addEventListener("click", textLayerClick, true); + resetSelection(); + } else { + document.body.removeEventListener("click", textLayerClick, true); + removeSelection(); + } + }, + // FontInspector specific functions. + fontAdded: function fontAdded(fontObj, url) { + function properties(obj, list) { + var moreInfo = document.createElement("table"); + for (var i = 0; i < list.length; i++) { + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = list[i]; + tr.appendChild(td1); + var td2 = document.createElement("td"); + td2.textContent = obj[list[i]].toString(); + tr.appendChild(td2); + moreInfo.appendChild(tr); + } + return moreInfo; + } + + var moreInfo = properties(fontObj, ["name", "type"]); + const fontName = fontObj.loadedName; + var font = document.createElement("div"); + var name = document.createElement("span"); + name.textContent = fontName; + var download = document.createElement("a"); + if (url) { + url = /url\(['"]?([^)"']+)/.exec(url); + download.href = url[1]; + } else if (fontObj.data) { + download.href = URL.createObjectURL( + new Blob([fontObj.data], {type: fontObj.mimeType}) + ); + } + download.textContent = "Download"; + var logIt = document.createElement("a"); + logIt.href = ""; + logIt.textContent = "Log"; + logIt.addEventListener("click", function (event) { + event.preventDefault(); + console.log(fontObj); + }); + const select = document.createElement("input"); + select.setAttribute("type", "checkbox"); + select.dataset.fontName = fontName; + select.addEventListener("click", function () { + selectFont(fontName, select.checked); + }); + font.appendChild(select); + font.appendChild(name); + font.appendChild(document.createTextNode(" ")); + font.appendChild(download); + font.appendChild(document.createTextNode(" ")); + font.appendChild(logIt); + font.appendChild(moreInfo); + fonts.appendChild(font); + // Somewhat of a hack, should probably add a hook for when the text layer + // is done rendering. + setTimeout(() => { + if (this.active) { + resetSelection(); + } + }, 2000); + }, + }; +})(); + +var opMap; + +// Manages all the page steppers. +var StepperManager = (function StepperManagerClosure() { + var steppers = []; + var stepperDiv = null; + var stepperControls = null; + var stepperChooser = null; + var breakPoints = Object.create(null); + return { + // Properties/functions needed by PDFBug. + id: "Stepper", + name: "Stepper", + panel: null, + manager: null, + init: function init(pdfjsLib) { + var self = this; + stepperControls = document.createElement("div"); + stepperChooser = document.createElement("select"); + stepperChooser.addEventListener("change", function (event) { + self.selectStepper(this.value); + }); + stepperControls.appendChild(stepperChooser); + stepperDiv = document.createElement("div"); + this.panel.appendChild(stepperControls); + this.panel.appendChild(stepperDiv); + if (sessionStorage.getItem("pdfjsBreakPoints")) { + breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints")); + } + + opMap = Object.create(null); + for (var key in pdfjsLib.OPS) { + opMap[pdfjsLib.OPS[key]] = key; + } + }, + cleanup: function cleanup() { + stepperChooser.textContent = ""; + stepperDiv.textContent = ""; + steppers = []; + }, + enabled: false, + active: false, + // Stepper specific functions. + create: function create(pageIndex) { + var debug = document.createElement("div"); + debug.id = "stepper" + pageIndex; + debug.hidden = true; + debug.className = "stepper"; + stepperDiv.appendChild(debug); + var b = document.createElement("option"); + b.textContent = "Page " + (pageIndex + 1); + b.value = pageIndex; + stepperChooser.appendChild(b); + var initBreakPoints = breakPoints[pageIndex] || []; + var stepper = new Stepper(debug, pageIndex, initBreakPoints); + steppers.push(stepper); + if (steppers.length === 1) { + this.selectStepper(pageIndex, false); + } + return stepper; + }, + selectStepper: function selectStepper(pageIndex, selectPanel) { + var i; + pageIndex = pageIndex | 0; + if (selectPanel) { + this.manager.selectPanel(this); + } + for (i = 0; i < steppers.length; ++i) { + var stepper = steppers[i]; + stepper.panel.hidden = stepper.pageIndex !== pageIndex; + } + var options = stepperChooser.options; + for (i = 0; i < options.length; ++i) { + var option = options[i]; + option.selected = (option.value | 0) === pageIndex; + } + }, + saveBreakPoints: function saveBreakPoints(pageIndex, bps) { + breakPoints[pageIndex] = bps; + sessionStorage.setItem("pdfjsBreakPoints", JSON.stringify(breakPoints)); + }, + }; +})(); + +// The stepper for each page's IRQueue. +var Stepper = (function StepperClosure() { + // Shorter way to create element and optionally set textContent. + function c(tag, textContent) { + var d = document.createElement(tag); + if (textContent) { + d.textContent = textContent; + } + return d; + } + + function simplifyArgs(args) { + if (typeof args === "string") { + var MAX_STRING_LENGTH = 75; + return args.length <= MAX_STRING_LENGTH + ? args + : args.substring(0, MAX_STRING_LENGTH) + "..."; + } + if (typeof args !== "object" || args === null) { + return args; + } + if ("length" in args) { + // array + var simpleArgs = [], + i, + ii; + var MAX_ITEMS = 10; + for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) { + simpleArgs.push(simplifyArgs(args[i])); + } + if (i < args.length) { + simpleArgs.push("..."); + } + return simpleArgs; + } + var simpleObj = {}; + for (var key in args) { + simpleObj[key] = simplifyArgs(args[key]); + } + return simpleObj; + } + + // eslint-disable-next-line no-shadow + function Stepper(panel, pageIndex, initialBreakPoints) { + this.panel = panel; + this.breakPoint = 0; + this.nextBreakPoint = null; + this.pageIndex = pageIndex; + this.breakPoints = initialBreakPoints; + this.currentIdx = -1; + this.operatorListIdx = 0; + } + + Stepper.prototype = { + init: function init(operatorList) { + var panel = this.panel; + var content = c("div", "c=continue, s=step"); + var table = c("table"); + content.appendChild(table); + table.cellSpacing = 0; + var headerRow = c("tr"); + table.appendChild(headerRow); + headerRow.appendChild(c("th", "Break")); + headerRow.appendChild(c("th", "Idx")); + headerRow.appendChild(c("th", "fn")); + headerRow.appendChild(c("th", "args")); + panel.appendChild(content); + this.table = table; + this.updateOperatorList(operatorList); + }, + updateOperatorList: function updateOperatorList(operatorList) { + var self = this; + + function cboxOnClick() { + var x = +this.dataset.idx; + if (this.checked) { + self.breakPoints.push(x); + } else { + self.breakPoints.splice(self.breakPoints.indexOf(x), 1); + } + StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints); + } + + var MAX_OPERATORS_COUNT = 15000; + if (this.operatorListIdx > MAX_OPERATORS_COUNT) { + return; + } + + var chunk = document.createDocumentFragment(); + var operatorsToDisplay = Math.min( + MAX_OPERATORS_COUNT, + operatorList.fnArray.length + ); + for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) { + var line = c("tr"); + line.className = "line"; + line.dataset.idx = i; + chunk.appendChild(line); + var checked = this.breakPoints.includes(i); + var args = operatorList.argsArray[i] || []; + + var breakCell = c("td"); + var cbox = c("input"); + cbox.type = "checkbox"; + cbox.className = "points"; + cbox.checked = checked; + cbox.dataset.idx = i; + cbox.onclick = cboxOnClick; + + breakCell.appendChild(cbox); + line.appendChild(breakCell); + line.appendChild(c("td", i.toString())); + var fn = opMap[operatorList.fnArray[i]]; + var decArgs = args; + if (fn === "showText") { + var glyphs = args[0]; + var newArgs = []; + var str = []; + for (var j = 0; j < glyphs.length; j++) { + var glyph = glyphs[j]; + if (typeof glyph === "object" && glyph !== null) { + str.push(glyph.fontChar); + } else { + if (str.length > 0) { + newArgs.push(str.join("")); + str = []; + } + newArgs.push(glyph); // null or number + } + } + if (str.length > 0) { + newArgs.push(str.join("")); + } + decArgs = [newArgs]; + } + line.appendChild(c("td", fn)); + line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs)))); + } + if (operatorsToDisplay < operatorList.fnArray.length) { + var lastCell = c("td", "..."); + lastCell.colspan = 4; + chunk.appendChild(lastCell); + } + this.operatorListIdx = operatorList.fnArray.length; + this.table.appendChild(chunk); + }, + getNextBreakPoint: function getNextBreakPoint() { + this.breakPoints.sort(function (a, b) { + return a - b; + }); + for (var i = 0; i < this.breakPoints.length; i++) { + if (this.breakPoints[i] > this.currentIdx) { + return this.breakPoints[i]; + } + } + return null; + }, + breakIt: function breakIt(idx, callback) { + StepperManager.selectStepper(this.pageIndex, true); + var self = this; + var dom = document; + self.currentIdx = idx; + var listener = function (e) { + switch (e.keyCode) { + case 83: // step + dom.removeEventListener("keydown", listener); + self.nextBreakPoint = self.currentIdx + 1; + self.goTo(-1); + callback(); + break; + case 67: // continue + dom.removeEventListener("keydown", listener); + var breakPoint = self.getNextBreakPoint(); + self.nextBreakPoint = breakPoint; + self.goTo(-1); + callback(); + break; + } + }; + dom.addEventListener("keydown", listener); + self.goTo(idx); + }, + goTo: function goTo(idx) { + var allRows = this.panel.getElementsByClassName("line"); + for (var x = 0, xx = allRows.length; x < xx; ++x) { + var row = allRows[x]; + if ((row.dataset.idx | 0) === idx) { + row.style.backgroundColor = "rgb(251,250,207)"; + row.scrollIntoView(); + } else { + row.style.backgroundColor = null; + } + } + }, + }; + return Stepper; +})(); + +var Stats = (function Stats() { + var stats = []; + + function clear(node) { + while (node.hasChildNodes()) { + node.removeChild(node.lastChild); + } + } + + function getStatIndex(pageNumber) { + for (var i = 0, ii = stats.length; i < ii; ++i) { + if (stats[i].pageNumber === pageNumber) { + return i; + } + } + return false; + } + + return { + // Properties/functions needed by PDFBug. + id: "Stats", + name: "Stats", + panel: null, + manager: null, + init(pdfjsLib) { + }, + enabled: false, + active: false, + // Stats specific functions. + add(pageNumber, stat) { + if (!stat) { + return; + } + var statsIndex = getStatIndex(pageNumber); + if (statsIndex !== false) { + const b = stats[statsIndex]; + this.panel.removeChild(b.div); + stats.splice(statsIndex, 1); + } + var wrapper = document.createElement("div"); + wrapper.className = "stats"; + var title = document.createElement("div"); + title.className = "title"; + title.textContent = "Page: " + pageNumber; + var statsDiv = document.createElement("div"); + statsDiv.textContent = stat.toString(); + wrapper.appendChild(title); + wrapper.appendChild(statsDiv); + stats.push({pageNumber, div: wrapper}); + stats.sort(function (a, b) { + return a.pageNumber - b.pageNumber; + }); + clear(this.panel); + for (var i = 0, ii = stats.length; i < ii; ++i) { + this.panel.appendChild(stats[i].div); + } + }, + cleanup() { + stats = []; + clear(this.panel); + }, + }; +})(); + +// Manages all the debugging tools. +window.PDFBug = (function PDFBugClosure() { + var panelWidth = 300; + var buttons = []; + var activePanel = null; + + return { + tools: [FontInspector, StepperManager, Stats], + enable(ids) { + var all = false, + tools = this.tools; + if (ids.length === 1 && ids[0] === "all") { + all = true; + } + for (var i = 0; i < tools.length; ++i) { + var tool = tools[i]; + if (all || ids.includes(tool.id)) { + tool.enabled = true; + } + } + if (!all) { + // Sort the tools by the order they are enabled. + tools.sort(function (a, b) { + var indexA = ids.indexOf(a.id); + indexA = indexA < 0 ? tools.length : indexA; + var indexB = ids.indexOf(b.id); + indexB = indexB < 0 ? tools.length : indexB; + return indexA - indexB; + }); + } + }, + init(pdfjsLib, container) { + /* + * Basic Layout: + * PDFBug + * Controls + * Panels + * Panel + * Panel + * ... + */ + var ui = document.createElement("div"); + ui.id = "PDFBug"; + + var controls = document.createElement("div"); + controls.setAttribute("class", "controls"); + ui.appendChild(controls); + + var panels = document.createElement("div"); + panels.setAttribute("class", "panels"); + ui.appendChild(panels); + + container.appendChild(ui); + container.style.right = panelWidth + "px"; + + // Initialize all the debugging tools. + var tools = this.tools; + var self = this; + for (var i = 0; i < tools.length; ++i) { + var tool = tools[i]; + var panel = document.createElement("div"); + var panelButton = document.createElement("button"); + panelButton.textContent = tool.name; + panelButton.addEventListener( + "click", + (function (selected) { + return function (event) { + event.preventDefault(); + self.selectPanel(selected); + }; + })(i) + ); + controls.appendChild(panelButton); + panels.appendChild(panel); + tool.panel = panel; + tool.manager = this; + if (tool.enabled) { + tool.init(pdfjsLib); + } else { + panel.textContent = + tool.name + + " is disabled. To enable add " + + ' "' + + tool.id + + '" to the pdfBug parameter ' + + "and refresh (separate multiple by commas)."; + } + buttons.push(panelButton); + } + this.selectPanel(0); + }, + cleanup() { + for (var i = 0, ii = this.tools.length; i < ii; i++) { + if (this.tools[i].enabled) { + this.tools[i].cleanup(); + } + } + }, + selectPanel(index) { + if (typeof index !== "number") { + index = this.tools.indexOf(index); + } + if (index === activePanel) { + return; + } + activePanel = index; + var tools = this.tools; + for (var j = 0; j < tools.length; ++j) { + var isActive = j === index; + buttons[j].classList.toggle("active", isActive); + tools[j].active = isActive; + tools[j].panel.hidden = !isActive; + } + }, + }; +})(); diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-check.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-check.svg new file mode 100644 index 0000000000000000000000000000000000000000..d22f3e52b4f7fb8037970fb63f447c046895fe8d --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-check.svg @@ -0,0 +1,11 @@ + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-comment.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-comment.svg new file mode 100644 index 0000000000000000000000000000000000000000..4a7a21e62df1e141193e6e584d380d833cb86b36 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-comment.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-help.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-help.svg new file mode 100644 index 0000000000000000000000000000000000000000..81a00ac16f2981f466da676fb3684ac6f1df4ac4 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-help.svg @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-insert.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-insert.svg new file mode 100644 index 0000000000000000000000000000000000000000..ca9e9e20e66f70cbf864ddbc009ef4830fbcc5e9 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-insert.svg @@ -0,0 +1,10 @@ + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-key.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-key.svg new file mode 100644 index 0000000000000000000000000000000000000000..733edc0b81cc1216910c8f1235de19dfaf658f8c --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-key.svg @@ -0,0 +1,11 @@ + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-newparagraph.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-newparagraph.svg new file mode 100644 index 0000000000000000000000000000000000000000..e75f98077e54342533050da133897eb5bc1cb77f --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-newparagraph.svg @@ -0,0 +1,11 @@ + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-noicon.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-noicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..21423057a4b8c76c3a09bf712575ddd2d846c585 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-noicon.svg @@ -0,0 +1,7 @@ + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-note.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-note.svg new file mode 100644 index 0000000000000000000000000000000000000000..f5f2c16a5fd24bfc47195f4e83b8ed158a607e03 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-note.svg @@ -0,0 +1,42 @@ + + + + + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-paragraph.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-paragraph.svg new file mode 100644 index 0000000000000000000000000000000000000000..be06ce9b3e675461e9499a3b09d50d7ab4a3d099 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/annotation-paragraph.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/findbarButton-next.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/findbarButton-next.svg new file mode 100644 index 0000000000000000000000000000000000000000..8416c5a3116ebe28b9cd365dbfc0d61fa0d50d12 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/findbarButton-next.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/findbarButton-previous.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/findbarButton-previous.svg new file mode 100644 index 0000000000000000000000000000000000000000..a1db1acfd1928834f609a905d0af4c8a04943ad6 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/findbarButton-previous.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/grab.cur b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/grab.cur new file mode 100644 index 0000000000000000000000000000000000000000..db7ad5aed3ef958aa13903afa769386382a87ad3 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/grab.cur differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/grabbing.cur b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/grabbing.cur new file mode 100644 index 0000000000000000000000000000000000000000..e0dfd04e4d3fcbaa6588c8cbb9e9065609bcb862 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/grabbing.cur differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading-dark.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading-dark.svg new file mode 100644 index 0000000000000000000000000000000000000000..cec39a8771381349c0fde03efc0123b6c951d71d --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading-dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading-icon.gif b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading-icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c72ebb554be018511ae972c3f2361dff02dce02 Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading-icon.gif differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading.svg new file mode 100644 index 0000000000000000000000000000000000000000..d63eaf01d67f635a3084f69e03033f01ed2f1ade --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/loading.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2a2afcedf9fda3c9ffe46cc6e12a5e4de5b946c --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-firstPage.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-firstPage.svg new file mode 100644 index 0000000000000000000000000000000000000000..bfe093468b3bdb29dad888e11bb1e8d644b078cf --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-firstPage.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-handTool.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-handTool.svg new file mode 100644 index 0000000000000000000000000000000000000000..5990cb835a6afa713080fafec1b43154b90716b6 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-handTool.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-lastPage.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-lastPage.svg new file mode 100644 index 0000000000000000000000000000000000000000..bc18c004742c201f23c6d395c1c66c1bd9d6876e --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-lastPage.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg new file mode 100644 index 0000000000000000000000000000000000000000..b8348e8b91d847bc74954fdb7e80ffbcd6fb3699 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg new file mode 100644 index 0000000000000000000000000000000000000000..f1adc001e5405a1de5a58b153889e1224cb0fd49 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg new file mode 100644 index 0000000000000000000000000000000000000000..fa757c79ac2797eb2ea07860642d0d5f64121586 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg new file mode 100644 index 0000000000000000000000000000000000000000..06ac818f756cc2d3428089173b1206fb0ce0fd36 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg new file mode 100644 index 0000000000000000000000000000000000000000..0b6b80c7a6345f8e43f3f1cb5cea1fa571daa21a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-selectTool.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-selectTool.svg new file mode 100644 index 0000000000000000000000000000000000000000..0d1b88612924dab47a0192f2cdeee2debdeded51 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-selectTool.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg new file mode 100644 index 0000000000000000000000000000000000000000..5d964e3d55074fc654a9e97236012b1d4071ded7 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg new file mode 100644 index 0000000000000000000000000000000000000000..cb8b92a92f9d6e37a0a196cfdb77232c591e9668 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg new file mode 100644 index 0000000000000000000000000000000000000000..4b89d9b227f1b1fbbd03450e575e8bd5df011ed1 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/shadow.png b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..a00061ac7e12e1f24f955351c732f5884ed94e6d Binary files /dev/null and b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/shadow.png differ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-bookmark.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-bookmark.svg new file mode 100644 index 0000000000000000000000000000000000000000..a19c5658c046dc7d06ad0b7db481a91993da80f8 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-bookmark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-currentOutlineItem.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-currentOutlineItem.svg new file mode 100644 index 0000000000000000000000000000000000000000..d064a2a817b56f3702fe3768953f25a77dc59c0d --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-currentOutlineItem.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-download.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-download.svg new file mode 100644 index 0000000000000000000000000000000000000000..f251143a4ca8b7b5c0b04b203e009b2898d968d9 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-download.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-menuArrow.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-menuArrow.svg new file mode 100644 index 0000000000000000000000000000000000000000..dc8aa9753af4c3dc0074b963e1ee929ddcb40d4d --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-menuArrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-openFile.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-openFile.svg new file mode 100644 index 0000000000000000000000000000000000000000..2a4035ca32973c1ac52e06a090afcc2aa91c6b30 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-openFile.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-pageDown.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-pageDown.svg new file mode 100644 index 0000000000000000000000000000000000000000..a5fd02736eaad5435b6a55de393e724ac41c3f8b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-pageDown.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-pageUp.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-pageUp.svg new file mode 100644 index 0000000000000000000000000000000000000000..798b5735fe382e3f43bc26f86c90e42eb490b3e2 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-pageUp.svg @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-presentationMode.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-presentationMode.svg new file mode 100644 index 0000000000000000000000000000000000000000..f752f2325b5744180bdbb93d35ee59dc6daf2d13 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-presentationMode.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-print.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-print.svg new file mode 100644 index 0000000000000000000000000000000000000000..69be1cd47a8018f6d25c8090c0979b2a52015dbc --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-print.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-search.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-search.svg new file mode 100644 index 0000000000000000000000000000000000000000..8b4c0ba60ffa2e03c6e1098e84b8fbc36845a4b0 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-search.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg new file mode 100644 index 0000000000000000000000000000000000000000..56c12d986a69f397d1ab40eab217ca1514bc8a22 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-sidebarToggle.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-sidebarToggle.svg new file mode 100644 index 0000000000000000000000000000000000000000..0e5a97a28038e4028811e35c52bc001d0e77433a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-sidebarToggle.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewAttachments.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewAttachments.svg new file mode 100644 index 0000000000000000000000000000000000000000..1aeb022bd0fb22864f4ce3976f527c22ef57d054 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewAttachments.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewLayers.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewLayers.svg new file mode 100644 index 0000000000000000000000000000000000000000..e22d2de2bbea19a9b9ee9265fa4d56fcb1153b04 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewLayers.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewOutline.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewOutline.svg new file mode 100644 index 0000000000000000000000000000000000000000..d12c340c2fa76cde1f4a629af924dc85196dc866 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewOutline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewThumbnail.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewThumbnail.svg new file mode 100644 index 0000000000000000000000000000000000000000..2d6e58644375a4a08945a3e68778029490bff251 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-viewThumbnail.svg @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-zoomIn.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-zoomIn.svg new file mode 100644 index 0000000000000000000000000000000000000000..cfd30d0959dc821736cdb1c4b49a31d378362a2d --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-zoomIn.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-zoomOut.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-zoomOut.svg new file mode 100644 index 0000000000000000000000000000000000000000..64a2e54807a1aff0684cc17f6143fa8a04f815ec --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/toolbarButton-zoomOut.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/treeitem-collapsed.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/treeitem-collapsed.svg new file mode 100644 index 0000000000000000000000000000000000000000..084d133f692a06ee1e050d241aa24af17bcd3325 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/treeitem-collapsed.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/treeitem-expanded.svg b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/treeitem-expanded.svg new file mode 100644 index 0000000000000000000000000000000000000000..ca2dba2f6fa04389a3c6550d450a8e93d3366ba3 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/images/treeitem-expanded.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ach/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ach/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..3eff44c9ab8b8840a171ba92f6a20baedec77990 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ach/viewer.properties @@ -0,0 +1,188 @@ +# 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 +first_page_label=Cit i pot buk mukwongo +last_page.title=Cit i pot buk magiko +last_page.label=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_cw_label=Wire i tung lacuc +page_rotate_ccw.title=Wire i tung lacam +page_rotate_ccw.label=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_notification.title=Lok lanyut me nget (wiyewiye tye i gin acoya/attachments) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/af/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/af/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..17c0745e5b6dbfdb1b58dbc662cca613a4b2dea8 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/af/viewer.properties @@ -0,0 +1,167 @@ +# 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 +first_page_label=Gaan na eerste bladsy +last_page.title=Gaan na laaste bladsy +last_page.label=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_cw_label=Roteer kloksgewys +page_rotate_ccw.title=Roteer anti-kloksgewys +page_rotate_ccw.label=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_notification.title=Sypaneel aan/af (dokument bevat skema/aanhegsels) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/an/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/an/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f8610bd7437fdc837b8cf726cd4a36ad9ddddd74 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/an/viewer.properties @@ -0,0 +1,232 @@ +# 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 +first_page_label=Ir ta la primer pachina +last_page.title=Ir ta la zaguer pachina +last_page.label=Ir ta la zaguera pachina +last_page_label=Ir ta la zaguer pachina +page_rotate_cw.title=Chirar enta la dreita +page_rotate_cw.label=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 en sentiu antihorario +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_notification.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos) +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 +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Pachina {{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=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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ar/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ar/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..0f1e0dd2fe47310d13dfec3dab0f69942ed76715 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ar/viewer.properties @@ -0,0 +1,232 @@ +# 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=انتقل إلى Ø§Ù„ØµÙØ­Ø© الأولى +first_page_label=انتقل إلى Ø§Ù„ØµÙØ­Ø© الأولى +last_page.title=انتقل إلى Ø§Ù„ØµÙØ­Ø© الأخيرة +last_page.label=انتقل إلى Ø§Ù„ØµÙØ­Ø© الأخيرة +last_page_label=انتقل إلى Ø§Ù„ØµÙØ­Ø© الأخيرة +page_rotate_cw.title=أدر باتجاه عقارب الساعة +page_rotate_cw.label=أدر باتجاه عقارب الساعة +page_rotate_cw_label=أدر باتجاه عقارب الساعة +page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة +page_rotate_ccw.label=أدر بعكس اتجاه عقارب الساعة +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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=ØµÙØ­Ø© {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ast/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ast/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..0be68d5a21a3e14f3be6728cb0790a9edb74e9e1 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ast/viewer.properties @@ -0,0 +1,123 @@ +# 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}}) +bookmark_label=Vista actual +# Secondary toolbar and context menu +tools.title=Ferramientes +tools_label=Ferramientes +scroll_vertical_label=Desplazamientu vertical +scroll_horizontal_label=Desplazamientu horizontal +scroll_wrapped_label=Desplazamientu continuu +# 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. +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) +# 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_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_yes=Sí +document_properties_linearized_no=Non +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +# 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. +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +# Find panel button title and messages +find_entire_word_label=Pallabres completes +# 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]=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. +# 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_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 + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/az/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/az/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..48bc9a23aa5f48eed59f2c42e5ca6551f8d37d6b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/az/viewer.properties @@ -0,0 +1,232 @@ +# 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 +first_page_label=İlk SÉ™hifÉ™yÉ™ get +last_page.title=Son SÉ™hifÉ™yÉ™ get +last_page.label=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_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 +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_notification.title=Yan paneli çevir (sÉ™nÉ™ddÉ™ icmal/baÄŸlama var) +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 +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=SÉ™hifÉ™ {{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É™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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/be/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/be/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..8755d41a37fd678cf72a4f8ddcb0622a392dffa2 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/be/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=ПерайÑці на першую Ñтаронку +first_page_label=ПерайÑці на першую Ñтаронку +last_page.title=ПерайÑці на апошнюю Ñтаронку +last_page.label=ПерайÑці на апошнюю Ñтаронку +last_page_label=ПерайÑці на апошнюю Ñтаронку +page_rotate_cw.title=ПавÑрнуць па Ñонцу +page_rotate_cw.label=ПавÑрнуць па Ñонцу +page_rotate_cw_label=ПавÑрнуць па Ñонцу +page_rotate_ccw.title=ПавÑрнуць Ñупраць Ñонца +page_rotate_ccw.label=ПавÑрнуць Ñупраць Ñонца +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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Старонка {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bg/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bg/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..fdcfe34f14461f2c53afbb0f3a275ee1f6656e33 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bg/viewer.properties @@ -0,0 +1,223 @@ +# 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=Към първата Ñтраница +first_page_label=Към първата Ñтраница +last_page.title=Към поÑледната Ñтраница +last_page.label=Към поÑледната Ñтраница +last_page_label=Към поÑледната Ñтраница +page_rotate_cw.title=Завъртане по чаÑ. Ñтрелка +page_rotate_cw.label=Завъртане по чаÑовниковата Ñтрелка +page_rotate_cw_label=Завъртане по чаÑовниковата Ñтрелка +page_rotate_ccw.title=Завъртане обратно на чаÑ. Ñтрелка +page_rotate_ccw.label=Завъртане обратно на чаÑовниковата Ñтрелка +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_notification.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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bn/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bn/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..ec192a917670c7d4c3aa01ad9245a8b2500f72af --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bn/viewer.properties @@ -0,0 +1,226 @@ +# 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=পà§à¦°à¦¥à¦® পাতায় যাও +first_page_label=পà§à¦°à¦¥à¦® পাতায় যাও +last_page.title=শেষ পাতায় যাও +last_page.label=শেষ পাতায় যাও +last_page_label=শেষ পাতায় যাও +page_rotate_cw.title=ঘড়ির কাà¦à¦Ÿà¦¾à¦° দিকে ঘোরাও +page_rotate_cw.label=ঘড়ির কাà¦à¦Ÿà¦¾à¦° দিকে ঘোরাও +page_rotate_cw_label=ঘড়ির কাà¦à¦Ÿà¦¾à¦° দিকে ঘোরাও +page_rotate_ccw.title=ঘড়ির কাà¦à¦Ÿà¦¾à¦° বিপরীতে ঘোরাও +page_rotate_ccw.label=ঘড়ির কাà¦à¦Ÿà¦¾à¦° বিপরীতে ঘোরাও +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_notification.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. +page_canvas=পাতা {{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: {{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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bo/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bo/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..7f76e78e0e87997d54321daf161d3c5f0f25a246 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bo/viewer.properties @@ -0,0 +1,225 @@ +# 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 +first_page_label=Go to First Page +last_page.title=Go to Last Page +last_page.label=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_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Counterclockwise +page_rotate_ccw.label=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_notification.title=Toggle Sidebar (document contains outline/attachments) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/br/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/br/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..66c7a2c923275c943b60864ac5f06913bc605f86 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/br/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=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ñ +first_page_label=Mont d'ar bajenn gentañ +last_page.title=Mont d'ar bajenn diwezhañ +last_page.label=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_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 +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_notification.title=Trec'haoliñ ar verrenn-gostez (ur steuñv pe stagadennoù a zo en teul) +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_label=Gwiskadoù +thumbs.title=Diskouez ar melvennoù +thumbs_label=Melvennoù +findbar.title=Klask e-barzh an teuliad +findbar_label=Klask +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/brx/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/brx/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..c731f6b9d9a87948112507af5be71c065f9af4d9 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/brx/viewer.properties @@ -0,0 +1,191 @@ +# 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=गिबि बिलाइआव थां +first_page_label=गिबि बिलाइआव थां +last_page.title=जोबथा बिलाइआव थां +last_page.label=जोबथा बिलाइआव थां +last_page_label=जोबथा बिलाइआव थां +page_rotate_cw.title=घरि गिदिंनाय फारà¥à¤¸à¥‡ फिदिं +page_rotate_cw.label=घरि गिदिंनाय फारà¥à¤¸à¥‡ फिदिं +page_rotate_cw_label=घरि गिदिंनाय फारà¥à¤¸à¥‡ फिदिं +page_rotate_ccw.title=घरि गिदिंनाय उलà¥à¤¥à¤¾ फारà¥à¤¸à¥‡ फिदिं +page_rotate_ccw.label=घरि गिदिंनाय उलà¥à¤¥à¤¾ फारà¥à¤¸à¥‡ फिदिं +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 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=OK +password_cancel=नेवसि +printing_not_supported=सांगà¥à¤°à¤¾à¤‚थि: साफायनाया बे बà¥à¤°à¤¾à¤‰à¤œà¤¾à¤°à¤œà¥‹à¤‚ आबà¥à¤™à¥ˆ हेफाजाब होजाया। +printing_not_ready=सांगà¥à¤°à¤¾à¤‚थि: PDF खौ साफायनायनि थाखाय फà¥à¤°à¤¾à¤¯à¥ˆ ल'ड खालामाखै। +web_fonts_disabled=वेब फनà¥à¤Ÿà¤–ौ लोरबां खालामबाय: अरजाबहोनाय PDF फनà¥à¤Ÿà¤–ौ बाहायनो हायाखै। diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bs/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bs/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..1f6117f0929924fc53306930be2882cb3b4163af --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/bs/viewer.properties @@ -0,0 +1,184 @@ +# 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 +first_page_label=Idi na prvu stranu +last_page.title=Idi na zadnju stranu +last_page.label=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_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 +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_notification.title=UkljuÄi/iskljuÄi sidebar (dokument sadrži outline/priloge) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ca/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ca/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..7e22060f87658f7d2cbc2ebec627da7eb13bbbda --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ca/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=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 +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 +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_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 +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_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_notification.title=Mostra/amaga la barra lateral (el document conté un esquema o adjuncions) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cak/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cak/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..d4ef21fff9cb48dfd2f55c3c410ec1fdf0d43120 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cak/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=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 +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 +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_cw_label=Tisutïx pan ajkiq'a' +page_rotate_ccw.title=Tisutïx pan ajxokon +page_rotate_ccw.label=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_notification.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqoj taq yakb'äl) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ckb/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ckb/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..905b5b4c6b5e0120114ab7628568d5750ff31a4b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ckb/viewer.properties @@ -0,0 +1,222 @@ +# 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=بڕۆ بۆ یەکەم Ù¾Û•Ú•Û• +first_page_label=بڕۆ بۆ یەکەم Ù¾Û•Ú•Û• +last_page.title=بڕۆ بۆ کۆتا Ù¾Û•Ú•Û• +last_page.label=بڕۆ بۆ کۆتا Ù¾Û•Ú•Û• +last_page_label=بڕۆ بۆ کۆتا Ù¾Û•Ú•Û• +page_rotate_cw.title=ئاڕاستەی میلی کاتژمێر +page_rotate_cw.label=ئاڕاستەی میلی کاتژمێر +page_rotate_cw_label=ئاڕاستەی میلی کاتژمێر +page_rotate_ccw.title=پێچەوانەی میلی کاتژمێر +page_rotate_ccw.label=پێچەوانەی میلی کاتژمێر +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=چینی زیاتر +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Ù¾Û•Ú•Û•ÛŒ {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cs/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cs/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..a2e0612f179cb6e24a700c8cd8401840679f8c06 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cs/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=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 +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 +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_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 +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_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_notification.title=PÅ™epne postranní liÅ¡tu (dokument obsahuje osnovu/přílohy) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cy/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cy/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..c1d7e99f92857c2abc8a4c8b65acb7155fcb3537 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/cy/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=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 +first_page_label=Mynd i'r Dudalen Gyntaf +last_page.title=Mynd i'r Dudalen Olaf +last_page.label=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_cw_label=Cylchdroi Clocwedd +page_rotate_ccw.title=Cylchdroi Gwrthglocwedd +page_rotate_ccw.label=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_vertical.title=Defnyddio Sgrolio Fertigol +scroll_vertical_label=Sgrolio Fertigol +scroll_horizontal.title=Defnyddio Sgrolio Fertigol +scroll_horizontal_label=Sgrolio Fertigol +scroll_wrapped.title=Defnyddio Sgrolio Amlapio +scroll_wrapped_label=Sgrolio Amlapio +spread_none.title=Peidio uno taeniadau canol +spread_none_label=Dim Taeniadau +spread_odd.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau odrif +spread_odd_label=Taeniadau Odrifau +spread_even.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau eilrif +spread_even_label=Taeniadau 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_notification.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys outline/attachments) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/da/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/da/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..7863d1968a46f04813eebcd2c3ea0df8efd8dd68 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/da/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=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 +first_page_label=GÃ¥ til første side +last_page.title=GÃ¥ til sidste side +last_page.label=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_cw_label=Roter med uret +page_rotate_ccw.title=Roter mod uret +page_rotate_ccw.label=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_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_notification.title=SlÃ¥ sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/de/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/de/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..bd198e2ddff1f91aebe699b980137380ad827700 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/de/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=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 +first_page_label=Erste Seite anzeigen +last_page.title=Letzte Seite anzeigen +last_page.label=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_cw_label=Im Uhrzeigersinn drehen +page_rotate_ccw.title=Gegen Uhrzeigersinn drehen +page_rotate_ccw.label=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_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, anhä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_notification.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/dsb/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/dsb/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..6029516a126fee6bb4f6415d905cb01f51c89090 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/dsb/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=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 +first_page_label=K prÄ›dnemu bokoju +last_page.title=K slÄ›dnemu bokoju +last_page.label=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_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 +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_vertical.title=Wertikalne suwanje wužywaÅ› +scroll_vertical_label=Wertikalnje 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_notification.title=Bocnicu pÅ›eÅ¡altowaÅ› (dokument wopÅ›imujo pÅ›eglÄ›d/pÅ›ipiski) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/el/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/el/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..8ce5d9d600d3a1f17f7d13b4ca275483c2dfc61d --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/el/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=Μετάβαση στην Ï€Ïώτη σελίδα +first_page_label=Μετάβαση στην Ï€Ïώτη σελίδα +last_page.title=Μετάβαση στην τελευταία σελίδα +last_page.label=Μετάβαση στην τελευταία σελίδα +last_page_label=Μετάβαση στην τελευταία σελίδα +page_rotate_cw.title=ΔεξιόστÏοφη πεÏιστÏοφή +page_rotate_cw.label=ΔεξιόστÏοφη πεÏιστÏοφή +page_rotate_cw_label=ΔεξιόστÏοφη πεÏιστÏοφή +page_rotate_ccw.title=ΑÏιστεÏόστÏοφη πεÏιστÏοφή +page_rotate_ccw.label=ΑÏιστεÏόστÏοφη πεÏιστÏοφή +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}} 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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Σελίδα {{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_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=Οι γÏαμματοσειÏές Web απενεÏγοποιημένες: αδυναμία χÏήσης των ενσωματωμένων γÏαμματοσειÏών PDF. diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-CA/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-CA/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..ccd8a14c15772784fa7dd6315c5096cca27b8be0 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-CA/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 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 +first_page_label=Go to First Page +last_page.title=Go to Last Page +last_page.label=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_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Counterclockwise +page_rotate_ccw.label=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_notification.title=Toggle Sidebar (document contains outline/attachments) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-GB/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-GB/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f162d324af21079ae92087dd6aed18fc0349df59 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-GB/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 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 +first_page_label=Go to First Page +last_page.title=Go to Last Page +last_page.label=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_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Anti-Clockwise +page_rotate_ccw.label=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_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_notification.title=Toggle Sidebar (document contains outline/attachments) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-US/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-US/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..e83b33920fe0e6c816bf2a8d00ab11c9e9e21813 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/en-US/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 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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/eo/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/eo/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..bd16be6b5be98e1fdc68e1f547657cfe233a3589 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/eo/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=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 +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 +last_page_label=Iri al la lasta paÄo +page_rotate_cw.title=Rotaciigi dekstrume +page_rotate_cw.label=Rotaciigi dekstrume +page_rotate_cw_label=Rotaciigi dekstrume +page_rotate_ccw.title=Rotaciigi maldekstrume +page_rotate_ccw.label=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_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_notification.title=Montri/kaÅi flankan strion (la dokumento enhavas konturon/aneksaĵojn) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-AR/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-AR/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..af5fb3b588d375154e0c2dd86cefd0a4b87b5b17 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-AR/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=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 +first_page_label=Ir a primera página +last_page.title=Ir a última página +last_page.label=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_cw_label=Rotar horario +page_rotate_ccw.title=Rotar antihorario +page_rotate_ccw.label=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_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_notification.title=Intercambiar barra lateral (el documento contiene esquema/adjuntos) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-CL/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-CL/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..bccd95ea29c49877973c70f71aa90a094d1bfc38 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-CL/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=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 +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 +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_cw_label=Girar a la derecha +page_rotate_ccw.title=Girar a la izquierda +page_rotate_ccw.label=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_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_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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]={{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}} (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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-ES/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-ES/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..b974da710949d53df072ff766dd5617845d16c3d --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-ES/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=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 +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 +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_cw_label=Rotar en sentido horario +page_rotate_ccw.title=Rotar en sentido antihorario +page_rotate_ccw.label=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_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_notification.title=Alternar panel lateral (el documento contiene un esquema o adjuntos) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-MX/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-MX/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..4ce355f013c8af857cd00d8fda6369be6bb0738a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/es-MX/viewer.properties @@ -0,0 +1,232 @@ +# 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 +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 +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_cw_label=Girar a la derecha +page_rotate_ccw.title=Girar a la izquierda +page_rotate_ccw.label=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_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_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos) +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 +findbar.title=Buscar en el documento +findbar_label=Buscar +additional_layers=Capas adicionales +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/et/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/et/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..775ac72f3e9f1f27957affd01c74579278ef1e8a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/et/viewer.properties @@ -0,0 +1,226 @@ +# 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 +first_page_label=Mine esimesele leheküljele +last_page.title=Mine viimasele leheküljele +last_page.label=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_cw_label=Pööra päripäeva +page_rotate_ccw.title=Pööra vastupäeva +page_rotate_ccw.label=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_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_notification.title=Näita külgriba (dokument sisaldab sisukorda/manuseid) +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 +thumbs.title=Näita pisipilte +thumbs_label=Pisipildid +findbar.title=Otsi dokumendist +findbar_label=Otsi +# 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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/eu/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/eu/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..1e57fae507b97e7a0705643b951013fd3fda7a8b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/eu/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=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 +first_page_label=Joan lehen orrira +last_page.title=Joan azken orrira +last_page.label=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_cw_label=Biratu erlojuaren norantzan +page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan +page_rotate_ccw.label=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_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_notification.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak ditu) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas={{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fa/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fa/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..ac0a253d10886847d984d4aab09b3a03a1f0d36e --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fa/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=({{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=برو یه اولین ØµÙØ­Ù‡ +first_page_label=برو به اولین ØµÙØ­Ù‡ +last_page.title=برو به آخرین ØµÙØ­Ù‡ +last_page.label=برو به آخرین ØµÙØ­Ù‡ +last_page_label=برو به آخرین ØµÙØ­Ù‡ +page_rotate_cw.title=چرخش ساعتگرد +page_rotate_cw.label=چرخش ساعتگرد +page_rotate_cw_label=چرخش ساعتگرد +page_rotate_ccw.title=چرخش پاد ساعتگرد +page_rotate_ccw.label=چرخش پاد ساعتگرد +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_notification.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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ff/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ff/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..fb388d41c727e05a5074336769ae1553da1ad423 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ff/viewer.properties @@ -0,0 +1,223 @@ +# 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 +first_page_label=Yah to hello adanngo +last_page.title=Yah to hello wattindiingo +last_page.label=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_cw_label=Yiiltu Faya Ñaamo +page_rotate_ccw.title=Yiiltu Faya Nano +page_rotate_ccw.label=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_notification.title=Palal sawndo (dokimaa oo ina waÉ—i taarngo/cinnde) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fi/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fi/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..0585ed761522d1c7a4e2cd08af2cc585e246d560 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fi/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=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 +first_page_label=Siirry ensimmäiselle sivulle +last_page.title=Siirry viimeiselle sivulle +last_page.label=Siirry viimeiselle sivulle +last_page_label=Siirry viimeiselle sivulle +page_rotate_cw.title=Kierrä oikealle +page_rotate_cw.label=Kierrä oikealle +page_rotate_cw_label=Kierrä oikealle +page_rotate_ccw.title=Kierrä vasemmalle +page_rotate_ccw.label=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_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_notification.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys tai liitteitä) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fr/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fr/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..6038811b6c2a0a776fd3f1489c336816baea89b5 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fr/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=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 +first_page_label=Aller à la première page +last_page.title=Aller à la dernière page +last_page.label=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_cw_label=Rotation horaire +page_rotate_ccw.title=Rotation antihoraire +page_rotate_ccw.label=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_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_notification.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fy-NL/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fy-NL/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..580958362941a5c16dcb83c29c0ef12f2aaf276a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/fy-NL/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=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=Nei earste side gean +first_page_label=Gean nei earste side +last_page.title=Gean nei lêste side +last_page.label=Nei lêste side gean +last_page_label=Gean nei lêste side +page_rotate_cw.title=Rjochtsom draaie +page_rotate_cw.label=Rjochtsom draaie +page_rotate_cw_label=Rjochtsom draaie +page_rotate_ccw.title=Loftsom draaie +page_rotate_ccw.label=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_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_notification.title=Sidebalke yn-/útskeakelje (dokumint befettet outline/bylagen) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ga-IE/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ga-IE/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..8114f1131dacda1048f846d8f5c98f6c85ed64a2 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ga-IE/viewer.properties @@ -0,0 +1,167 @@ +# 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 +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 +last_page_label=Go dtí an leathanach deiridh +page_rotate_cw.title=Rothlaigh ar deiseal +page_rotate_cw.label=Rothlaigh ar deiseal +page_rotate_cw_label=Rothlaigh ar deiseal +page_rotate_ccw.title=Rothlaigh ar tuathal +page_rotate_ccw.label=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: +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_notification.title=Scoránaigh an Barra Taoibh (achoimre/iatáin sa cháipéis) +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 +# 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_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 +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 (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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gd/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gd/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f00893200247af744925108ba9a90a7f38b1d9e6 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gd/viewer.properties @@ -0,0 +1,226 @@ +# 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 +first_page_label=Rach gun chiad duilleag +last_page.title=Rach gun duilleag mu dheireadh +last_page.label=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_cw_label=Cuairtich gu deiseil +page_rotate_ccw.title=Cuairtich gu tuathail +page_rotate_ccw.label=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_notification.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain 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 +thumbs.title=Seall na dealbhagan +thumbs_label=Dealbhagan +findbar.title=Lorg san sgrìobhainn +findbar_label=Lorg +# 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=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_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. +# 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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gl/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gl/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..9c14fc28990919af990436a5c1df0f84e0552c25 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gl/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=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 +first_page_label=Ir á primeira páxina +last_page.title=Ir á última páxina +last_page.label=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_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 +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_notification.title=Amosar/agochar a barra lateral (o documento contén un esquema ou anexos) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gn/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gn/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..d4bc8468194dd0021cc38cb580dd0ea12dbb0fb5 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gn/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=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 +first_page_label=Kuatiarogue ñepyrÅ©me jeho +last_page.title=Kuatiarogue pahápe jeho +last_page.label=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_cw_label=Aravóicha mbojere +page_rotate_ccw.title=Aravo rapykue gotyo mbojere +page_rotate_ccw.label=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_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_notification.title=Embojopyru tenda ykegua (kuatia oguereko kora/marandurenda moirÅ©ha) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gu-IN/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gu-IN/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f7743bfe2acad8930253a3a8b6a0a0f5c38f5beb --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/gu-IN/viewer.properties @@ -0,0 +1,223 @@ +# 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=પહેલાં પાનામાં જાવ +first_page_label=પà«àª°àª¥àª® પાનાં પર જાવ +last_page.title=છેલà«àª²àª¾ પાનાં પર જાવ +last_page.label=છેલà«àª²àª¾ પાનામાં જાવ +last_page_label=છેલà«àª²àª¾ પાનાં પર જાવ +page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો +page_rotate_cw.label=ઘડિયાળનાં કાંટાની જેમ ફેરવો +page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો +page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો +page_rotate_ccw.label=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો +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_notification.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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/he/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/he/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..6bbfa9c773b5cd6d8918d990d5a9007bce9544cd --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/he/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=מעבר לעמוד הר×שון +first_page_label=מעבר לעמוד הר×שון +last_page.title=מעבר לעמוד ×”×חרון +last_page.label=מעבר לעמוד ×”×חרון +last_page_label=מעבר לעמוד ×”×חרון +page_rotate_cw.title=הטיה ×¢× ×›×™×•×•×Ÿ השעון +page_rotate_cw.label=הטיה ×¢× ×›×™×•×•×Ÿ השעון +page_rotate_cw_label=הטיה ×¢× ×›×™×•×•×Ÿ השעון +page_rotate_ccw.title=הטיה כנגד כיוון השעון +page_rotate_ccw.label=הטיה כנגד כיוון השעון +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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=עמוד {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hi-IN/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hi-IN/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..bcab4881851002a2f10303430b2a40fba10b8969 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hi-IN/viewer.properties @@ -0,0 +1,224 @@ +# 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=\u0020पà¥à¤°à¤¥à¤® पृषà¥à¤  पर जाà¤à¤ +first_page_label=पà¥à¤°à¤¥à¤® पृषà¥à¤  पर जाà¤à¤ +last_page.title=अंतिम पृषà¥à¤  पर जाà¤à¤ +last_page.label=\u0020अंतिम पृषà¥à¤  पर जाà¤à¤ +last_page_label=\u0020अंतिम पृषà¥à¤  पर जाà¤à¤ +page_rotate_cw.title=घड़ी की दिशा में घà¥à¤®à¤¾à¤à¤ +page_rotate_cw.label=घड़ी की दिशा में घà¥à¤®à¤¾à¤à¤ +page_rotate_cw_label=घड़ी की दिशा में घà¥à¤®à¤¾à¤à¤ +page_rotate_ccw.title=घड़ी की दिशा से उलà¥à¤Ÿà¤¾ घà¥à¤®à¤¾à¤à¤ +page_rotate_ccw.label=घड़ी की दिशा से उलà¥à¤Ÿà¤¾ घà¥à¤®à¤¾à¤à¤ +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_notification.title=साइडबार टॉगल करें (दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ में रूपरेखा शामिल है/attachments) +toggle_sidebar_label=सà¥à¤²à¤¾à¤‡à¤¡à¤° टॉगल करें +document_outline.title=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ की रूपरेखा दिखाइठ(सारी वसà¥à¤¤à¥à¤“ं को फलने अथवा समेटने के लिठदो बार कà¥à¤²à¤¿à¤• करें) +document_outline_label=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ आउटलाइन +attachments.title=संलगà¥à¤¨à¤• दिखायें +attachments_label=संलगà¥à¤¨à¤• +thumbs.title=लघà¥à¤›à¤µà¤¿à¤¯à¤¾à¤ दिखाà¤à¤ +thumbs_label=लघॠछवि +findbar.title=\u0020दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ में ढूà¤à¤¢à¤¼à¥‡à¤‚ +findbar_label=ढूà¤à¤¢à¥‡à¤‚ +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=पृषà¥à¤  {{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=\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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hr/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hr/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..57d06b9c8f1a24b44f4152775a68d5daeed86343 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hr/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=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 +first_page_label=Idi na prvu stranicu +last_page.title=Idi na posljednju stranicu +last_page.label=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_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 +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_notification.title=Prikazivanje i sklanjanje boÄne trake (dokument sadrži strukturu/privitke) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Stranica br. {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hsb/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hsb/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f801af70856d964f7112ca4a0a92b5fd9859b39b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hsb/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=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 +first_page_label=K prÄ›njej stronje +last_page.title=K poslednjej stronje +last_page.label=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_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ć +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_vertical.title=Wertikalne suwanje wužiwać +scroll_vertical_label=Wertikalnje 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_notification.title=BóÄnicu pÅ™epinać (dokument wobsahuje wobrys/pÅ™iwěški) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hu/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hu/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..4318774326b389c429e9e2807658d3d9cf75dbf0 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hu/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=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 +first_page_label=Ugrás az elsÅ‘ oldalra +last_page.title=Ugrás az utolsó oldalra +last_page.label=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_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 +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_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_notification.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket tartalmaz) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas={{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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hy-AM/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hy-AM/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..8580141fbd9f149bbffef2d2016669def76c500c --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hy-AM/viewer.properties @@ -0,0 +1,228 @@ +# 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=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶ +first_page_label=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶ +last_page.title=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶ +last_page.label=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶ +last_page_label=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶ +page_rotate_cw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ¨Õ½Õ¿ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« +page_rotate_cw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ¨Õ½Õ¿ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« +page_rotate_cw_label=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ¨Õ½Õ¿ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« +page_rotate_ccw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« +page_rotate_ccw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« +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_notification.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. +page_canvas=Ô·Õ» {{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={[ Õ°Õ¸Õ£Õ¶Õ¡Õ¯Õ«(Õ¨Õ¶Õ¤Õ°Õ¡Õ¶Õ¸Ö‚Ö€) ]} +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 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 Õ¿Õ¡Õ¼Õ¡Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¨: diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hye/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hye/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..cb2379da65c52b97bf4ad0641cf2a114ee02fb7f --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/hye/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}}-Õ«Ö\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=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ» +first_page_label=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ» +last_page.title=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ» +last_page.label=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ» +last_page_label=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ» +page_rotate_cw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢ +page_rotate_cw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢ +page_rotate_cw_label=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢ +page_rotate_ccw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢ +page_rotate_ccw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢ +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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Ô·Õ» {{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={[ Õ°Õ¸Õ£Õ¶Õ¡Õ¯Õ«(Õ¨Õ¶Õ¤Õ°Õ¡Õ¶Õ¸Ö‚Ö€) ]} +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 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 Õ¿Õ¡Õ¼Õ¡Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¨Ö‰ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ia/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ia/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..b802e1cdff6d09514837742053d160d64f84ac8a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ia/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 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 +first_page_label=Ir al prime pagina +last_page.title=Ir al prime pagina +last_page.label=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_cw_label=Rotar in senso horari +page_rotate_ccw.title=Rotar in senso antihorari +page_rotate_ccw.label=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_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_notification.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/id/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/id/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..9a4ad999c68df011304110d812377295af546579 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/id/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=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=Ke Halaman Pertama +first_page_label=Buka Halaman Pertama +last_page.title=Buka Halaman Terakhir +last_page.label=Ke 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_cw_label=Putar Searah Jarum Jam +page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam +page_rotate_ccw.label=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_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_notification.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Laman {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/is/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/is/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..1c6c84c142a53d2003d7fd3966765b916c48f94b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/is/viewer.properties @@ -0,0 +1,220 @@ +# 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 +zoom_out_label=Minnka +zoom_in.title=Stækka +zoom_in_label=Stækka +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 +first_page_label=Fara á fyrstu síðu +last_page.title=Fara á síðustu síðu +last_page.label=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_cw_label=Snúa réttsælis +page_rotate_ccw.title=Snúa rangsælis +page_rotate_ccw.label=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_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 +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_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ðslá +toggle_sidebar_notification.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi) +toggle_sidebar_label=Víxla hliðslá +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 +thumbs.title=Sýna smámyndir +thumbs_label=Smámyndir +findbar.title=Leita í skjali +findbar_label=Leita +# 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_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_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 (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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/it/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/it/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..3a3347fb1ece8e4814bcf2348ba17af5382c3e13 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/it/viewer.properties @@ -0,0 +1,177 @@ +# 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 +first_page_label=Vai alla prima pagina +last_page.title=Vai all’ultima pagina +last_page.label=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_cw_label=Ruota in senso orario +page_rotate_ccw.title=Ruota in senso antiorario +page_rotate_ccw.label=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_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_notification.title=Attiva/disattiva barra laterale (il documento contiene struttura/allegati) +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_canvas=Pagina {{page}} +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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ja/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ja/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..892751991f43df04200d0d361ea87519667ccbcb --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ja/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=ç¾åœ¨ã®ãƒ“ュー㮠URL ã§ã™ (コピーã¾ãŸã¯æ–°ã—ã„ウィンドウã«é–‹ã) +bookmark_label=ç¾åœ¨ã®ãƒ“ュー +# Secondary toolbar and context menu +tools.title=ツール +tools_label=ツール +first_page.title=最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•ã—ã¾ã™ +first_page.label=最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹• +first_page_label=最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹• +last_page.title=最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•ã—ã¾ã™ +last_page.label=最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹• +last_page_label=最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹• +page_rotate_cw.title=ページをå³ã¸å›žè»¢ã—ã¾ã™ +page_rotate_cw.label=å³å›žè»¢ +page_rotate_cw_label=å³å›žè»¢ +page_rotate_ccw.title=ページを左ã¸å›žè»¢ã—ã¾ã™ +page_rotate_ccw.label=左回転 +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}} 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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas={{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ka/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ka/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f7e6ee977a292ff401c5c9b41f4dd47df5e679c2 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ka/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=პირველ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლრ+first_page_label=პირველ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლრ+last_page.title=ბáƒáƒšáƒ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლრ+last_page.label=ბáƒáƒšáƒ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლრ+last_page_label=ბáƒáƒšáƒ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლრ+page_rotate_cw.title=სáƒáƒáƒ—ის ისრის მიმáƒáƒ áƒ—ულებით შებრუნებრ+page_rotate_cw.label=მáƒáƒ áƒ¯áƒ•ნივ გáƒáƒ“áƒáƒ‘რუნებრ+page_rotate_cw_label=მáƒáƒ áƒ¯áƒ•ნივ გáƒáƒ“áƒáƒ‘რუნებრ+page_rotate_ccw.title=სáƒáƒáƒ—ის ისრის სáƒáƒžáƒ˜áƒ áƒ˜áƒ¡áƒžáƒ˜áƒ áƒáƒ“ შებრუნებრ+page_rotate_ccw.label=მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• გáƒáƒ“áƒáƒ‘რუნებრ+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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=გვერდი {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kab/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kab/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..ed70b0f98ccc480e8e9733fcadf6791818f89d63 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kab/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=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 +first_page_label=Ddu É£er usebter amezwaru +last_page.title=Ddu É£er usebter aneggaru +last_page.label=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_cw_label=Tuzzya tusrigt +page_rotate_ccw.title=Tuzzya amgal-usrig +page_rotate_ccw.label=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_notification.title=Ffer/Sken agalis adisan (isemli yegber aÉ£awas/imeddayen) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kk/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kk/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..39d9654ccdc502af8394e4e851668c1fe99568e3 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kk/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=Ðлғашқы параққа өту +first_page_label=Ðлғашқы параққа өту +last_page.title=Соңғы параққа өту +last_page.label=Соңғы параққа өту +last_page_label=Соңғы параққа өту +page_rotate_cw.title=Сағат тілі бағытымен айналдыру +page_rotate_cw.label=Сағат тілі бағытымен бұру +page_rotate_cw_label=Сағат тілі бағытымен бұру +page_rotate_ccw.title=Сағат тілі бағытына қарÑÑ‹ бұру +page_rotate_ccw.label=Сағат тілі бағытына қарÑÑ‹ бұру +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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Бет {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/km/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/km/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..e47ce48b2d86181329126286ae228025ab0a7944 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/km/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=ទៅកាន់​ទំពáŸážšâ€‹ážŠáŸ†áž”ូង​ +first_page_label=ទៅកាន់​ទំពáŸážšâ€‹ážŠáŸ†áž”ូង​ +last_page.title=ទៅកាន់​ទំពáŸážšâ€‹áž…ុងក្រោយ​ +last_page.label=ទៅកាន់​ទំពáŸážšâ€‹áž…ុងក្រោយ​ +last_page_label=ទៅកាន់​ទំពáŸážšâ€‹áž…ុងក្រោយ +page_rotate_cw.title=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា +page_rotate_cw.label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា +page_rotate_cw_label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា +page_rotate_ccw.title=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ +page_rotate_ccw.label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ +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_notification.title=បិទ/បើក​របារ​ចំហៀង (ឯកសារ​មាន​មាážáž·áž€áž¶â€‹áž“ៅ​ក្រៅ/attachments) +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 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}} ចំណារ​ពន្យល់] +password_label=បញ្ចូល​ពាក្យសម្ងាážáŸ‹â€‹ážŠáž¾áž˜áŸ’បី​បើក​ឯកសារ PDF áž“áŸáŸ‡áŸ” +password_invalid=ពាក្យសម្ងាážáŸ‹â€‹áž˜áž·áž“​ážáŸ’រឹមážáŸ’រូវ។ សូម​ព្យាយាម​ម្ដងទៀážáŸ” +password_ok=យល់​ព្រម +password_cancel=បោះបង់ +printing_not_supported=ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ážáŸ’រូវ​បាន​គាំទ្រ​ពáŸáž‰áž›áŸáž‰â€‹ážŠáŸ„យ​កម្មវិធី​រុករក​នáŸáŸ‡â€‹áž‘áŸÂ áŸ” +printing_not_ready=ព្រមាន៖ PDF មិន​ážáŸ’រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទáŸáŸ” +web_fonts_disabled=បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទáŸÂ áŸ” diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kn/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kn/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..aba871eda42d40c449f6d050a86afb9ba2bf3232 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/kn/viewer.properties @@ -0,0 +1,174 @@ +# 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=ಮೊದಲ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳೠ+first_page_label=ಮೊದಲ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳೠ+last_page.title=ಕೊನೆಯ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳೠ+last_page.label=ಕೊನೆಯ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳೠ+last_page_label=ಕೊನೆಯ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳೠ+page_rotate_cw.title=ಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸೠ+page_rotate_cw.label=ಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸೠ+page_rotate_cw_label=ಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸೠ+page_rotate_ccw.title=ಅಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸೠ+page_rotate_ccw.label=ಅಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸೠ+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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ko/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ko/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..142b9e1122d8448ae7a5c621e3167a14425355a5 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ko/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=첫 페ì´ì§€ë¡œ ì´ë™ +first_page_label=첫 페ì´ì§€ë¡œ ì´ë™ +last_page.title=마지막 페ì´ì§€ë¡œ ì´ë™ +last_page.label=마지막 페ì´ì§€ë¡œ ì´ë™ +last_page_label=마지막 페ì´ì§€ë¡œ ì´ë™ +page_rotate_cw.title=시계방향으로 회전 +page_rotate_cw.label=시계방향으로 회전 +page_rotate_cw_label=시계방향으로 회전 +page_rotate_ccw.title=시계 반대방향으로 회전 +page_rotate_ccw.label=시계 반대방향으로 회전 +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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas={{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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lij/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lij/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..205d8e26f86f9f12ef63c952fd39ed5a05358fab --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lij/viewer.properties @@ -0,0 +1,223 @@ +# 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 +first_page_label=Vanni a-a primma pagina +last_page.title=Vanni a l'urtima pagina +last_page.label=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 in senso do releuio +page_rotate_cw_label=Gia into verso oraio +page_rotate_ccw.title=Gia into verso antioraio +page_rotate_ccw.label=Gia in senso do releuio a-a reversa +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_notification.title=Cangia bara de löo (o documento o contegne di alegæ) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lo/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lo/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..81a20e6048c5e69c5596a275553b8a26565c2608 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lo/viewer.properties @@ -0,0 +1,135 @@ +# 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=ໄປທີ່ຫນ້າທຳອິດ +first_page_label=ໄປທີ່ຫນ້າທຳອິດ +last_page.title=ໄປທີ່ຫນ້າສຸດທ້າຠ+last_page.label=ໄປທີ່ຫນ້າສຸດທ້າຠ+last_page_label=ໄປທີ່ຫນ້າສຸດທ້າຠ+page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ +page_rotate_cw.label=ຫມູນຕາມເຂັມໂມງ +page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ +page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ +page_rotate_ccw.label=ຫມູນທວນເຂັມໂມງ +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_notification.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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/locale.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/locale.properties new file mode 100644 index 0000000000000000000000000000000000000000..d8588cf2764defa91ebae008918d45880add3951 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/locale.properties @@ -0,0 +1,211 @@ +[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) +[scn] +@import url(scn/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) +[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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lt/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lt/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..3fef52a51fb2a017ef12e9f5cfe374cc53717a65 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lt/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=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į +first_page_label=Eiti į pirmÄ… puslapį +last_page.title=Eiti į paskutinį puslapį +last_page.label=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_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Ä™ +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_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_notification.title=ParankinÄ— (dokumentas turi struktÅ«rÄ… / priedų) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas={{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ltg/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ltg/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..185ca91c8f8393f5fdf3d9da22c203ea33660346 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ltg/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=Ī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 +first_page_label=Īt iz pyrmÅ« lopu +last_page.title=Īt iz piedejÅ« lopu +last_page.label=Ī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_cw_label=PagrÄ«zt pa pulksteni +page_rotate_ccw.title=PagrÄ«zt pret pulksteni +page_rotate_ccw.label=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_notification.title=Toggle Sidebar (document contains outline/attachments) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lv/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lv/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..ed76f74fa696805caa4caa37f85acb3f3fdf5002 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/lv/viewer.properties @@ -0,0 +1,223 @@ +# 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 +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 +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_cw_label=Pagriezt pa pulksteni +page_rotate_ccw.title=Pagriezt pret pulksteni +page_rotate_ccw.label=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_notification.title=PÄrslÄ“gt sÄnu joslu (dokumenta saturu un pielikumus) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/meh/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/meh/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..383aecf99b27697531e546ef0ee2648990ab8bed --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/meh/viewer.properties @@ -0,0 +1,94 @@ +# 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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/mk/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/mk/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f2f9ef2770d2e77db330eccc5f125f7fc2939020 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/mk/viewer.properties @@ -0,0 +1,126 @@ +# 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=Ðлатки +first_page.label=Оди до првата Ñтраница +last_page.label=Оди до поÑледната Ñтраница +page_rotate_cw.label=Ротирај по Ñтрелките на чаÑовникот +page_rotate_ccw.label=Ротирај Ñпротивно од Ñтрелките на чаÑовникот +# 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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/mr/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/mr/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f608b00c5b15dc3f8853422ff2121d3c9bfa00c9 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/mr/viewer.properties @@ -0,0 +1,218 @@ +# 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=पहिलà¥à¤¯à¤¾ पृषà¥à¤ à¤¾à¤µà¤° जा +first_page_label=पहिलà¥à¤¯à¤¾ पृषà¥à¤ à¤¾à¤µà¤° जा +last_page.title=शेवटचà¥à¤¯à¤¾ पृषà¥à¤ à¤¾à¤µà¤° जा +last_page.label=शेवटचà¥à¤¯à¤¾ पृषà¥à¤ à¤¾à¤µà¤° जा +last_page_label=शेवटचà¥à¤¯à¤¾ पृषà¥à¤ à¤¾à¤µà¤° जा +page_rotate_cw.title=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ दिशेने फिरवा +page_rotate_cw.label=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ दिशेने फिरवा +page_rotate_cw_label=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ दिशेने फिरवा +page_rotate_ccw.title=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ उलट दिशेने फिरवा +page_rotate_ccw.label=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ उलट दिशेने फिरवा +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_notification.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 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 टंक वापर अशकà¥à¤¯. diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ms/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ms/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..5f943317c122080b43f08909448ff60e5bdae25c --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ms/viewer.properties @@ -0,0 +1,223 @@ +# 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 +first_page_label=Pergi ke Halaman Pertama +last_page.title=Pergi ke Halaman Terakhir +last_page.label=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_cw_label=Berputar ikut arah Jam +page_rotate_ccw.title=Pusing berlawan arah jam +page_rotate_ccw.label=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_notification.title=Togol Sidebar (dokumen mengandungi rangka/attachments) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/my/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/my/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..abbbd22c544ad038bb48a174744b6dfe75508c39 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/my/viewer.properties @@ -0,0 +1,179 @@ +# 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=ပထမ စာမျက်နှာသို့ +first_page_label=ပထမ စာမျက်နှာသို့ +last_page.title=နောက်ဆုံး စာမျက်နှာသို့ +last_page.label=နောက်ဆုံး စာမျက်နှာသို့ +last_page_label=နောက်ဆုံး စာမျက်နှာသို့ +page_rotate_cw.title=နာရီလက်á€á€¶ အá€á€­á€¯á€„်း +page_rotate_cw.label=နာရီလက်á€á€¶ အá€á€­á€¯á€„်း +page_rotate_cw_label=နာရီလက်á€á€¶ အá€á€­á€¯á€„်း +page_rotate_ccw.title=နာရီလက်á€á€¶ ပြောင်းပြန် +page_rotate_ccw.label=နာရီလက်á€á€¶ ပြောင်းပြန် +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_notification.title=ဘေးဘားá€á€”်းကို အဖွင့်/အပိá€á€º လုပ်ရန် (စာá€á€™á€ºá€¸á€á€½á€„် outline/attachments ပါá€á€„်နိုင်သည်) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nb-NO/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nb-NO/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..b313c8c63b7e6ecd762b2162da0263a9d0dcf294 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nb-NO/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=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 +first_page_label=GÃ¥ til første side +last_page.title=GÃ¥ til siste side +last_page.label=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_cw_label=Roter med klokken +page_rotate_ccw.title=Roter mot klokken +page_rotate_ccw.label=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_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_notification.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ne-NP/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ne-NP/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..9d707f26ccec1c6ecc4743fb39853b1654520c08 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ne-NP/viewer.properties @@ -0,0 +1,167 @@ +# 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=पहिलो पृषà¥à¤ à¤®à¤¾ जानà¥à¤¹à¥‹à¤¸à¥ +first_page_label=पहिलो पृषà¥à¤ à¤®à¤¾ जानà¥à¤¹à¥‹à¤¸à¥ +last_page.title=पछिलà¥à¤²à¥‹ पृषà¥à¤ à¤®à¤¾ जानà¥à¤¹à¥‹à¤¸à¥ +last_page.label=पछिलà¥à¤²à¥‹ पृषà¥à¤ à¤®à¤¾ जानà¥à¤¹à¥‹à¤¸à¥ +last_page_label=पछिलà¥à¤²à¥‹ पृषà¥à¤ à¤®à¤¾ जानà¥à¤¹à¥‹à¤¸à¥ +page_rotate_cw.title=घडीको दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ +page_rotate_cw.label=घडीको दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ +page_rotate_cw_label=घडीको दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ +page_rotate_ccw.title=घडीको विपरित दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ +page_rotate_ccw.label=घडीको विपरित दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ +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}} 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_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_notification.title=साइडबार टगल गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ (कागजातमा समावेश भà¤à¤•ो कà¥à¤°à¤¾à¤¹à¤°à¥‚ रूपरेखा/attachments) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nl/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nl/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..1b05dab9ea53b3276b3ce387a5175b1f816dcfee --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nl/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=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 +first_page_label=Naar eerste pagina gaan +last_page.title=Naar laatste pagina gaan +last_page.label=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_cw_label=Rechtsom draaien +page_rotate_ccw.title=Linksom draaien +page_rotate_ccw.label=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_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=Trefwoorden: +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_notification.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nn-NO/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nn-NO/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..62be743d3085d618d3cea9222607452e45244bfc --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/nn-NO/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=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 +first_page_label=GÃ¥ til første side +last_page.title=GÃ¥ til siste side +last_page.label=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_cw_label=Roter med klokka +page_rotate_ccw.title=Roter mot klokka +page_rotate_ccw.label=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_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_notification.title=Vis/gøym sidestolpen (dokumentet inneheld oversikt/vedlegg) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/oc/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/oc/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..f8f858b819d2107995ef60d796c57b18baf13084 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/oc/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 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}} sus {{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 +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 +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_cw_label=Rotacion orària +page_rotate_ccw.title=Rotacion antiorària +page_rotate_ccw.label=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_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_notification.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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]=Occuréncia {{current}} sus {{total}} +find_match_count[two]=Occuréncia {{current}} sus {{total}} +find_match_count[few]=Occuréncia {{current}} sus {{total}} +find_match_count[many]=Occuréncia {{current}} sus {{total}} +find_match_count[other]=Occuré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}} occuréncias +find_match_count_limit[one]=Mai de {{limit}} occuréncia +find_match_count_limit[two]=Mai de {{limit}} occuréncias +find_match_count_limit[few]=Mai de {{limit}} occuréncias +find_match_count_limit[many]=Mai de {{limit}} occuréncias +find_match_count_limit[other]=Mai de {{limit}} occuré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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pa-IN/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pa-IN/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..913262eaa0b2708aafbc11f31b6bd3b40638636a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pa-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={{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=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +last_page.label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨“ +page_rotate_cw.label=ਸੱਜੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨‰ +page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨“ +page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨“ +page_rotate_ccw.label=ਖੱਬੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨‰ +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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=ਸਫ਼ਾ {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pl/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pl/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..a920a20af3b8452b81d193932523f39ff8c841cd --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pl/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=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 +first_page_label=Przejdź do pierwszej strony +last_page.title=Przejdź do ostatniej strony +last_page.label=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_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 +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_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_notification.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas={{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pt-BR/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pt-BR/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..c0cf110b51eecc5ad0a3ad5a0bf0113a5c857cd8 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pt-BR/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=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 +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 +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_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 +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_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_notification.title=Exibir/ocultar painel lateral (documento contém estrutura/anexos) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pt-PT/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pt-PT/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..a879004d9a1af9c153f20169d85a073397e14cd0 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/pt-PT/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=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 +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 +last_page_label=Ir para a última página +page_rotate_cw.title=Rodar à direita +page_rotate_cw.label=Rodar à direita +page_rotate_cw_label=Rodar à direita +page_rotate_ccw.title=Rodar à esquerda +page_rotate_ccw.label=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_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_notification.title=Alternar barra lateral (documento contém contorno/anexos) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/rm/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/rm/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..95167b9ace280d436c93279502fc8c679ff14e27 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/rm/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 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 +first_page_label=Siglir a l'emprima pagina +last_page.title=Siglir a la davosa pagina +last_page.label=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_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 +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_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_notification.title=Activar/deactivar la trav laterala (structura dal document/agiuntas) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ro/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ro/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..75560064cf40635a26f683df7fa063900805384f --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ro/viewer.properties @@ -0,0 +1,228 @@ +# 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ă +first_page_label=Mergi la prima pagină +last_page.title=Mergi la ultima pagină +last_page.label=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_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 +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_notification.title=Comută bara laterală (documentul conÈ›ine schiÈ›e/ataÈ™amente) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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 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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ru/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ru/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..40353e40f21468aadfef4df2d793ae2d6fae3bf3 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ru/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=Перейти на первую Ñтраницу +first_page_label=Перейти на первую Ñтраницу +last_page.title=Перейти на поÑледнюю Ñтраницу +last_page.label=Перейти на поÑледнюю Ñтраницу +last_page_label=Перейти на поÑледнюю Ñтраницу +page_rotate_cw.title=Повернуть по чаÑовой Ñтрелке +page_rotate_cw.label=Повернуть по чаÑовой Ñтрелке +page_rotate_cw_label=Повернуть по чаÑовой Ñтрелке +page_rotate_ccw.title=Повернуть против чаÑовой Ñтрелки +page_rotate_ccw.label=Повернуть против чаÑовой Ñтрелки +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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Страница {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/scn/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/scn/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..8d7eb897cd7fbe66dc58796bf63962d498df8d1b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/scn/viewer.properties @@ -0,0 +1,84 @@ +# 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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/si/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/si/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..06476e37996a819c09c3256d111c64e79084b88a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/si/viewer.properties @@ -0,0 +1,189 @@ +# 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=මුල් පිටුවට යන්න +first_page_label=මුල් පිටුවට යන්න +last_page.title=අවසන් පිටුවට යන්න +last_page.label=අවසන් පිටුවට යන්න +last_page_label=අවසන් පිටුවට යන්න +page_rotate_cw.title=දක්à·à·’à¶«à·à·€à¶»à·Šà¶­à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º +page_rotate_cw.label=දක්à·à·’à¶«à·à·€à¶»à·Šà¶­à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º +page_rotate_cw_label=දක්à·à·’à¶«à·à·€à¶»à·Šà¶­à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º +page_rotate_ccw.title=à·€à·à¶¸à·à·€à¶»à·Šà¶­à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º +page_rotate_ccw.label=à·€à·à¶¸à·à·€à¶»à·Šà¶­à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sk/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sk/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..74b1136965af1f3d55948458b2fc883b61436dd6 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sk/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=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=PrevziaÅ¥ +download_label=PrevziaÅ¥ +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 +first_page_label=PrejsÅ¥ na prvú stranu +last_page.title=PrejsÅ¥ na poslednú stranu +last_page.label=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_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 +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_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_notification.title=Prepnúť boÄný panel (dokument obsahuje osnovu/prílohy) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sl/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sl/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..73a63106c2eb0d5a9a2dbff9feeea98ef4d9fdd7 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sl/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=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 +first_page_label=Pojdi na prvo stran +last_page.title=Pojdi na zadnjo stran +last_page.label=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_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 +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_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_notification.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/son/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/son/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..819af5816dc1476e047b522be368ac3353217c5e --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/son/viewer.properties @@ -0,0 +1,163 @@ +# 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 +first_page_label=Koy moo jinaa ga +last_page.title=Koy moo koraa ga +last_page.label=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_cw_label=Kuubi kanbe guma here +page_rotate_ccw.title=Kuubi kanbe wowa here +page_rotate_ccw.label=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_notification.title=Kanjari ceraw-zuu (takaddaa goo nda filla-boÅ‹/hangandiyaÅ‹) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sq/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sq/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..b589847c11717ef080974824f3bf96d03230a92e --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sq/viewer.properties @@ -0,0 +1,225 @@ +# 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ë +first_page_label=Kaloni te Faqja e Parë +last_page.title=Kaloni te Faqja e Fundit +last_page.label=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_cw_label=Rrotulloje Në Kahun Orar +page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar +page_rotate_ccw.label=Rrotulloje 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_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_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_notification.title=Shfaqni Anështyllën (dokumenti përmban përvijim/bashkëngjitje) +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 +findbar.title=Gjeni në Dokument +findbar_label=Gjej +additional_layers=Shtresa Shtesë +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sr/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sr/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..232151c1f434fc74b05e193e430d4a8c6953b8f8 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sr/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=Иди на прву Ñтраницу +first_page_label=Иди на прву Ñтраницу +last_page.title=Иди на поÑледњу Ñтраницу +last_page.label=Иди на поÑледњу Ñтраницу +last_page_label=Иди на поÑледњу Ñтраницу +page_rotate_cw.title=Ротирај у Ñмеру казаљке на Ñату +page_rotate_cw.label=Ротирај у Ñмеру казаљке на Ñату +page_rotate_cw_label=Ротирај у Ñмеру казаљке на Ñату +page_rotate_ccw.title=Ротирај у Ñмеру Ñупротном од казаљке на Ñату +page_rotate_ccw.label=Ротирај у Ñмеру Ñупротном од казаљке на Ñату +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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Страница {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sv-SE/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sv-SE/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..17025591b0c058951bfb6ff3bf1977414ab07e2a --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/sv-SE/viewer.properties @@ -0,0 +1,235 @@ +# 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 +first_page_label=GÃ¥ till första sidan +last_page.title=GÃ¥ till sista sidan +last_page.label=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_cw_label=Rotera medurs +page_rotate_ccw.title=Rotera moturs +page_rotate_ccw.label=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_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_notification.title=Visa/dölj sidofält (dokument innehÃ¥ller översikt/bilagor) +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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/szl/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/szl/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..4015744f70f02821aade25f2f65c6d7681abae31 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/szl/viewer.properties @@ -0,0 +1,232 @@ +# 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 +first_page_label=Idź ku piyrszyj strÅnie +last_page.title=Idź ku ôstatnij strÅnie +last_page.label=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_cw_label=Zwyrtnij w prawo +page_rotate_ccw.title=Zwyrtnij w lewo +page_rotate_ccw.label=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_notification.title=PrzeÅ‚Åncz posek na rancie (dokumynt mo struktura/przidowki) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=StrÅna {{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=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=Ôbznocz 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 ma znodniynto +# 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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ta/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ta/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..c19cc142320b7304c693505b828c31438c2c4298 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ta/viewer.properties @@ -0,0 +1,184 @@ +# 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=à®®à¯à®¤à®²à¯ பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯ +first_page_label=à®®à¯à®¤à®²à¯ பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯ +last_page.title=கடைசி பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯ +last_page.label=கடைசி பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯ +last_page_label=கடைசி பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯ +page_rotate_cw.title=வலஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯ +page_rotate_cw.label=வலஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯ +page_rotate_cw_label=வலஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯ +page_rotate_ccw.title=இடஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯ +page_rotate_ccw.label=இடஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯ +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_notification.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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/te/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/te/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..47d4f7a91add35c31c7d16ac9345cc0124cf73af --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/te/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=à°®à±à°¨à±à°ªà°Ÿà°¿ పేజీ +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=మొదటి పేజీకి వెళà±à°³à± +first_page_label=మొదటి పేజీకి వెళà±à°³à± +last_page.title=చివరి పేజీకి వెళà±à°³à± +last_page.label=చివరి పేజీకి వెళà±à°³à± +last_page_label=చివరి పేజీకి వెళà±à°³à± +page_rotate_cw.title=సవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà± +page_rotate_cw.label=సవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà± +page_rotate_cw_label=సవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà± +page_rotate_ccw.title=అపసవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà± +page_rotate_ccw.label=అపసవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà± +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=అదనపౠపొరలౠ+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=పేజి {{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) ]} +# 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 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 ఫాంటà±à°²à± ఉపయోగించలేక పోయింది. diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/th/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/th/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..c8eea38e50afd21e789e7b43ca5c8b9ab393c7e4 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/th/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=ไปยังหน้าà¹à¸£à¸ +first_page_label=ไปยังหน้าà¹à¸£à¸ +last_page.title=ไปยังหน้าสุดท้าย +last_page.label=ไปยังหน้าสุดท้าย +last_page_label=ไปยังหน้าสุดท้าย +page_rotate_cw.title=หมุนตามเข็มนาฬิà¸à¸² +page_rotate_cw.label=หมุนตามเข็มนาฬิà¸à¸² +page_rotate_cw_label=หมุนตามเข็มนาฬิà¸à¸² +page_rotate_ccw.title=หมุนทวนเข็มนาฬิà¸à¸² +page_rotate_ccw.label=หมุนทวนเข็มนาฬิà¸à¸² +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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=หน้า {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/tl/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/tl/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..8bc83e14079badaf3561e66c42bbe242266f1619 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/tl/viewer.properties @@ -0,0 +1,232 @@ +# 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 +first_page_label=Pumunta sa Unang Pahina +last_page.title=Pumunta sa Huling Pahina +last_page.label=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_cw_label=Paikutin Pakanan +page_rotate_ccw.title=Paikutin Pakaliwa +page_rotate_ccw.label=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_notification.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment) +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 +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Pahina {{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=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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/tr/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/tr/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..fc279df66b4212d8994f6c2ef3dfd07f24598eb0 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/tr/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=Ö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 +first_page_label=İlk sayfaya git +last_page.title=Son sayfaya git +last_page.label=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_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 +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_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_notification.title=Kenar çubuÄŸunu aç/kapat (Belge ana hat/ekler içeriyor) +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/trs/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/trs/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..ccaa00dc6731c7365c8f7c536c4ba701dc82a204 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/trs/viewer.properties @@ -0,0 +1,195 @@ +# 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 +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 +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_cw_label=Tanikaj ne' huat +page_rotate_ccw.title=Tanikaj ne' chînt' +page_rotate_ccw.label=Tanikaj ne' chint +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}}% +# 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_ok=Ga'ue +password_cancel=Duyichin' + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/uk/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/uk/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..555098f23796772e1d419ec79eceeb3ced9dfc83 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/uk/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=Ðа першу Ñторінку +first_page_label=Ðа першу Ñторінку +last_page.title=Ðа оÑтанню Ñторінку +last_page.label=Ðа оÑтанню Ñторінку +last_page_label=Ðа оÑтанню Ñторінку +page_rotate_cw.title=Повернути за годинниковою Ñтрілкою +page_rotate_cw.label=Повернути за годинниковою Ñтрілкою +page_rotate_cw_label=Повернути за годинниковою Ñтрілкою +page_rotate_ccw.title=Повернути проти годинникової Ñтрілки +page_rotate_ccw.label=Повернути проти годинникової Ñтрілки +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}} 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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=Сторінка {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ur/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ur/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..7fa60d7c2ca46cb3a76b754a413b40dca7899d65 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/ur/viewer.properties @@ -0,0 +1,222 @@ +# 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=Ù¾ÛÙ„Û’ ØµÙØ­Û پر جائیں +first_page_label=Ù¾ÛÙ„Û’ ØµÙØ­Û پر جائیں +last_page.title=آخری ØµÙØ­Û پر جائیں +last_page.label=آخری ØµÙØ­Û پر جائیں +last_page_label=آخری ØµÙØ­Û پر جائیں +page_rotate_cw.title=Ú¯Ú¾Ú‘ÛŒ وار گھمائیں +page_rotate_cw.label=Ú¯Ú¾Ú‘ÛŒ وار گھمائیں +page_rotate_cw_label=Ú¯Ú¾Ú‘ÛŒ وار گھمائیں +page_rotate_ccw.title=ضد Ú¯Ú¾Ú‘ÛŒ وار گھمائیں +page_rotate_ccw.label=ضد Ú¯Ú¾Ú‘ÛŒ وار گھمائیں +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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=ØµÙØ­Û {{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 ÙØ§Ù†Ù¹ استعمال کرنے میں ناکام۔ diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/uz/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/uz/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..a3ad61d0ea7525be635d7fc139dd479d653893e8 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/uz/viewer.properties @@ -0,0 +1,152 @@ +# 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 +first_page_label=Birinchi sahifaga oÊ»tish +last_page.title=SoÊ»nggi sahifaga oÊ»tish +last_page.label=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_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 +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/vi/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/vi/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..b0a29d81621a4be1f3d84d57c6f44205d610c3df --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/vi/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=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 +first_page_label=Vá» trang đầu +last_page.title=Äến trang cuối +last_page.label=Äế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_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ồ +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_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_notification.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) +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 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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/wo/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/wo/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..c1771e2e4153c04fa07326b5af899c4e96dd3972 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/wo/viewer.properties @@ -0,0 +1,108 @@ +# 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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/xh/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/xh/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..8a0e6dcacf76036e6a67877f2d0d30bc6c3897ea --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/xh/viewer.properties @@ -0,0 +1,167 @@ +# 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 +first_page_label=Yiya kwiphepha lokuqala +last_page.title=Yiya kwiphepha lokugqibela +last_page.label=Yiya kwiphepha lokugqibela +last_page_label=Yiya kwiphepha lokugqibela +page_rotate_cw.title=Jikelisa ngasekunene +page_rotate_cw.label=Jikelisa ngasekunene +page_rotate_cw_label=Jikelisa ngasekunene +page_rotate_ccw.title=Jikelisa ngasekhohlo +page_rotate_ccw.label=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_notification.title=ISidebar yeQhosha (uxwebhu lunolwandlalo/iziqhotyoshelwa) +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 indicator messages +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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/zh-CN/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/zh-CN/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..89bab61382fec9fd50a61267ff4cd0fe8a1f04ff --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/zh-CN/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=转到第一页 +first_page_label=转到第一页 +last_page.title=转到最åŽä¸€é¡µ +last_page.label=转到最åŽä¸€é¡µ +last_page_label=转到最åŽä¸€é¡µ +page_rotate_cw.title=顺时针旋转 +page_rotate_cw.label=顺时针旋转 +page_rotate_cw_label=顺时针旋转 +page_rotate_ccw.title=逆时针旋转 +page_rotate_ccw.label=逆时针旋转 +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=快速 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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=é¡µç  {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/zh-TW/viewer.properties b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/zh-TW/viewer.properties new file mode 100644 index 0000000000000000000000000000000000000000..a78530ae302f052cf99931bd351b43845e13b83b --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/locale/zh-TW/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=è·³åˆ°ç¬¬ä¸€é  +first_page_label=è·³åˆ°ç¬¬ä¸€é  +last_page.title=è·³åˆ°æœ€å¾Œä¸€é  +last_page.label=è·³åˆ°æœ€å¾Œä¸€é  +last_page_label=è·³åˆ°æœ€å¾Œä¸€é  +page_rotate_cw.title=é †æ™‚é‡æ—‹è½‰ +page_rotate_cw.label=é †æ™‚é‡æ—‹è½‰ +page_rotate_cw_label=é †æ™‚é‡æ—‹è½‰ +page_rotate_ccw.title=é€†æ™‚é‡æ—‹è½‰ +page_rotate_ccw.label=é€†æ™‚é‡æ—‹è½‰ +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=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_notification.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_canvas): "{{page}}" will be replaced by the page number. +page_canvas=第 {{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_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/leigh-mecha-javafx/src/main/resources/pdfjs/web/pdf.js b/leigh-mecha-javafx/src/main/resources/pdfjs/web/pdf.js new file mode 100644 index 0000000000000000000000000000000000000000..6316bcd5c7b7cc73abf27c00d0499a0bb03a3861 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/pdf.js @@ -0,0 +1,26955 @@ +/** + * @licstart The following is the entire license notice for the + * Javascript code in this page + * + * Copyright 2021 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"; + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.addLinkAttributes = addLinkAttributes; + exports.deprecated = deprecated; + exports.getFilenameFromUrl = getFilenameFromUrl; + exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; + exports.isDataScheme = isDataScheme; + exports.isFetchSupported = isFetchSupported; + exports.isPdfFile = isPdfFile; + exports.isValidFetchUrl = isValidFetchUrl; + exports.loadScript = loadScript; + exports.StatTimer = exports.RenderingCancelledException = exports.PDFDateString = exports.PageViewport = exports.LinkTarget = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.BaseCMapReaderFactory = exports.BaseCanvasFactory = void 0; + + var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); + + var _util = __w_pdfjs_require__(4); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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 + } + }); + 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; + } + 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); + return Constructor; + } + + var DEFAULT_LINK_REL = "noopener noreferrer nofollow"; + exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; + var SVG_NS = "http://www.w3.org/2000/svg"; + + 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) { + (0, _util.unreachable)("Abstract method `create` called."); + } + }, { + 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; + } + }]); + + return BaseCanvasFactory; + }(); + + exports.BaseCanvasFactory = BaseCanvasFactory; + + 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: "create", + value: function create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + + var canvas = this._document.createElement("canvas"); + + var context = canvas.getContext("2d"); + canvas.width = width; + canvas.height = height; + return { + canvas: canvas, + context: context + }; + } + }]); + + return DOMCanvasFactory; + }(BaseCanvasFactory); + + exports.DOMCanvasFactory = DOMCanvasFactory; + + var BaseCMapReaderFactory = /*#__PURE__*/function () { + function BaseCMapReaderFactory(_ref2) { + var _ref2$baseUrl = _ref2.baseUrl, + baseUrl = _ref2$baseUrl === void 0 ? null : _ref2$baseUrl, + _ref2$isCompressed = _ref2.isCompressed, + isCompressed = _ref2$isCompressed === void 0 ? false : _ref2$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(_ref3) { + var _this2 = this; + + var name, url, compressionType; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + name = _ref3.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(_this2.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 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) { + var _this3 = this; + + if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) { + return fetch(url).then( /*#__PURE__*/function () { + var _ref4 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(response) { + var cMapData; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + if (response.ok) { + _context2.next = 2; + break; + } + + throw new Error(response.statusText); + + case 2: + if (!_this3.isCompressed) { + _context2.next = 10; + break; + } + + _context2.t0 = Uint8Array; + _context2.next = 6; + return response.arrayBuffer(); + + case 6: + _context2.t1 = _context2.sent; + cMapData = new _context2.t0(_context2.t1); + _context2.next = 15; + break; + + case 10: + _context2.t2 = _util.stringToBytes; + _context2.next = 13; + return response.text(); + + case 13: + _context2.t3 = _context2.sent; + cMapData = (0, _context2.t2)(_context2.t3); + + case 15: + return _context2.abrupt("return", { + cMapData: cMapData, + compressionType: compressionType + }); + + case 16: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + + return function (_x2) { + return _ref4.apply(this, arguments); + }; + }()); + } + + return new Promise(function (resolve, reject) { + var request = new XMLHttpRequest(); + request.open("GET", url, true); + + if (_this3.isCompressed) { + request.responseType = "arraybuffer"; + } + + request.onreadystatechange = function () { + if (request.readyState !== XMLHttpRequest.DONE) { + return; + } + + if (request.status === 200 || request.status === 0) { + var cMapData; + + if (_this3.isCompressed && request.response) { + cMapData = new Uint8Array(request.response); + } else if (!_this3.isCompressed && request.responseText) { + cMapData = (0, _util.stringToBytes)(request.responseText); + } + + if (cMapData) { + resolve({ + cMapData: cMapData, + compressionType: compressionType + }); + return; + } + } + + reject(new Error(request.statusText)); + }; + + request.send(null); + }); + } + }]); + + return DOMCMapReaderFactory; + }(BaseCMapReaderFactory); + + exports.DOMCMapReaderFactory = DOMCMapReaderFactory; + + var DOMSVGFactory = /*#__PURE__*/function () { + function DOMSVGFactory() { + _classCallCheck(this, DOMSVGFactory); + } + + _createClass(DOMSVGFactory, [{ + key: "create", + value: function create(width, height) { + (0, _util.assert)(width > 0 && height > 0, "Invalid SVG dimensions"); + var svg = document.createElementNS(SVG_NS, "svg:svg"); + svg.setAttribute("version", "1.1"); + svg.setAttribute("width", width + "px"); + svg.setAttribute("height", height + "px"); + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", "0 0 " + width + " " + height); + return svg; + } + }, { + key: "createElement", + value: function createElement(type) { + (0, _util.assert)(typeof type === "string", "Invalid SVG element type"); + return document.createElementNS(SVG_NS, type); + } + }]); + + return DOMSVGFactory; + }(); + + exports.DOMSVGFactory = DOMSVGFactory; + + var PageViewport = /*#__PURE__*/function () { + function PageViewport(_ref5) { + var viewBox = _ref5.viewBox, + scale = _ref5.scale, + rotation = _ref5.rotation, + _ref5$offsetX = _ref5.offsetX, + offsetX = _ref5$offsetX === void 0 ? 0 : _ref5$offsetX, + _ref5$offsetY = _ref5.offsetY, + offsetY = _ref5$offsetY === void 0 ? 0 : _ref5$offsetY, + _ref5$dontFlip = _ref5.dontFlip, + dontFlip = _ref5$dontFlip === void 0 ? false : _ref5$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 _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref6$scale = _ref6.scale, + scale = _ref6$scale === void 0 ? this.scale : _ref6$scale, + _ref6$rotation = _ref6.rotation, + rotation = _ref6$rotation === void 0 ? this.rotation : _ref6$rotation, + _ref6$offsetX = _ref6.offsetX, + offsetX = _ref6$offsetX === void 0 ? this.offsetX : _ref6$offsetX, + _ref6$offsetY = _ref6.offsetY, + offsetY = _ref6$offsetY === void 0 ? this.offsetY : _ref6$offsetY, + _ref6$dontFlip = _ref6.dontFlip, + dontFlip = _ref6$dontFlip === void 0 ? false : _ref6$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 _super3 = _createSuper(RenderingCancelledException); + + function RenderingCancelledException(msg, type) { + var _this4; + + _classCallCheck(this, RenderingCancelledException); + + _this4 = _super3.call(this, msg); + _this4.type = type; + return _this4; + } + + return RenderingCancelledException; + }(_util.BaseException); + + exports.RenderingCancelledException = RenderingCancelledException; + var LinkTarget = { + NONE: 0, + SELF: 1, + BLANK: 2, + PARENT: 3, + TOP: 4 + }; + exports.LinkTarget = LinkTarget; + + function addLinkAttributes(link) { + var _ref7 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + url = _ref7.url, + target = _ref7.target, + rel = _ref7.rel, + _ref7$enabled = _ref7.enabled, + enabled = _ref7$enabled === void 0 ? true : _ref7$enabled; + + (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.'); + var urlNullRemoved = (0, _util.removeNullCharacters)(url); + + if (enabled) { + link.href = link.title = urlNullRemoved; + } else { + link.href = ""; + link.title = "Disabled: ".concat(urlNullRemoved); + + link.onclick = function () { + return false; + }; + } + + var targetStr = ""; + + switch (target) { + case LinkTarget.NONE: + break; + + case LinkTarget.SELF: + targetStr = "_self"; + break; + + case LinkTarget.BLANK: + targetStr = "_blank"; + break; + + case LinkTarget.PARENT: + targetStr = "_parent"; + break; + + case LinkTarget.TOP: + targetStr = "_top"; + break; + } + + link.target = targetStr; + link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; + } + + 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 isFetchSupported() { + return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined"; + } + + function isValidFetchUrl(url, baseUrl) { + try { + var _ref8 = baseUrl ? new URL(url, baseUrl) : new URL(url), + protocol = _ref8.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 || !(0, _util.isString)(input)) { + 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; + + /***/ + }), + /* 2 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + + module.exports = __w_pdfjs_require__(3); + + /***/ + }), + /* 3 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + /* module decorator */ + module = __w_pdfjs_require__.nmd(module); + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _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 = {}; + + 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 = Gp.constructor = GeneratorFunctionPrototype; + 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); + + 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"); + + Gp[iteratorSymbol] = function () { + return this; + }; + + 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) { + Function("r", "regeneratorRuntime = r")(runtime); + } + + /***/ + }), + /* 4 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.arrayByteLength = arrayByteLength; + exports.arraysToBytes = arraysToBytes; + exports.assert = assert; + exports.bytesToString = bytesToString; + exports.createObjectURL = createObjectURL; + 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.isBool = isBool; + exports.isNum = isNum; + exports.isSameOrigin = isSameOrigin; + exports.isString = isString; + exports.objectFromMap = objectFromMap; + exports.objectSize = objectSize; + exports.removeNullCharacters = removeNullCharacters; + 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; + exports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = 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.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; + + __w_pdfjs_require__(5); + + 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); + return Constructor; + } + + 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" && Symbol.iterator in Object(iter)) 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + 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 + } + }); + 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; + } + 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 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", + 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", + 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", + errorFontGetPath: "errorFontGetPath", + errorMarkedContent: "errorMarkedContent" + }; + 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, baseUrl) { + if (!url) { + return null; + } + + try { + 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) { + if (this.constructor === BaseException) { + unreachable("Cannot initialize BaseException."); + } + + this.message = message; + this.name = this.constructor.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); + _this.code = code; + return _this; + } + + return 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); + _this2.details = details; + return _this2; + } + + return UnknownErrorException; + }(BaseException); + + exports.UnknownErrorException = UnknownErrorException; + + var InvalidPDFException = /*#__PURE__*/function (_BaseException3) { + _inherits(InvalidPDFException, _BaseException3); + + var _super3 = _createSuper(InvalidPDFException); + + function InvalidPDFException() { + _classCallCheck(this, InvalidPDFException); + + return _super3.apply(this, arguments); + } + + return InvalidPDFException; + }(BaseException); + + exports.InvalidPDFException = InvalidPDFException; + + var MissingPDFException = /*#__PURE__*/function (_BaseException4) { + _inherits(MissingPDFException, _BaseException4); + + var _super4 = _createSuper(MissingPDFException); + + function MissingPDFException() { + _classCallCheck(this, MissingPDFException); + + return _super4.apply(this, arguments); + } + + return 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); + _this3.status = status; + return _this3; + } + + return UnexpectedResponseException; + }(BaseException); + + exports.UnexpectedResponseException = UnexpectedResponseException; + + var FormatError = /*#__PURE__*/function (_BaseException6) { + _inherits(FormatError, _BaseException6); + + var _super6 = _createSuper(FormatError); + + function FormatError() { + _classCallCheck(this, FormatError); + + return _super6.apply(this, arguments); + } + + return FormatError; + }(BaseException); + + exports.FormatError = FormatError; + + var AbortException = /*#__PURE__*/function (_BaseException7) { + _inherits(AbortException, _BaseException7); + + var _super7 = _createSuper(AbortException); + + function AbortException() { + _classCallCheck(this, AbortException); + + return _super7.apply(this, arguments); + } + + return AbortException; + }(BaseException); + + exports.AbortException = AbortException; + var NullCharactersRegExp = /\x00/g; + + function removeNullCharacters(str) { + if (typeof str !== "string") { + warn("The argument for removeNullCharacters must be a string."); + return str; + } + + return str.replace(NullCharactersRegExp, ""); + } + + function bytesToString(bytes) { + assert(bytes !== null && _typeof(bytes) === "object" && bytes.length !== undefined, "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) { + assert(typeof str === "string", "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; + } + + assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); + return arr.byteLength; + } + + 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; + } + }]); + + 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) { + var length = str.length, + strBuf = []; + + if (str[0] === "\xFE" && str[1] === "\xFF") { + for (var i = 2; i < length; i += 2) { + strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); + } + } else if (str[0] === "\xFF" && str[1] === "\xFE") { + for (var _i2 = 2; _i2 < length; _i2 += 2) { + strBuf.push(String.fromCharCode(str.charCodeAt(_i2 + 1) << 8 | str.charCodeAt(_i2))); + } + } else { + for (var _i3 = 0; _i3 < length; ++_i3) { + var code = PDFStringTranslateTable[str.charCodeAt(_i3)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(_i3)); + } + } + + 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)); + buf.push(String.fromCharCode(_char & 0xff)); + } + + return buf.join(""); + } + + function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); + } + + function utf8StringToString(str) { + return unescape(encodeURIComponent(str)); + } + + function isBool(v) { + return typeof v === "boolean"; + } + + function isNum(v) { + return typeof v === "number"; + } + + function isString(v) { + return typeof v === "string"; + } + + 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; + } + + 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 && !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; + } + + /***/ + }), + /* 5 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + + var _is_node = __w_pdfjs_require__(6); + + if (typeof globalThis === "undefined" || !globalThis._pdfjsCompatibilityChecked) { + if (typeof globalThis === "undefined" || globalThis.Math !== Math) { + globalThis = __w_pdfjs_require__(7); + } + + 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 checkObjectFromEntries() { + if (Object.fromEntries) { + return; + } + + __w_pdfjs_require__(52); + })(); + + (function checkPromise() { + if (globalThis.Promise.allSettled) { + return; + } + + globalThis.Promise = __w_pdfjs_require__(85); + })(); + + (function checkReadableStream() { + var isReadableStreamSupported = false; + + if (typeof ReadableStream !== "undefined") { + try { + new ReadableStream({ + start: function start(controller) { + controller.close(); + } + }); + isReadableStreamSupported = true; + } catch (e) { + } + } + + if (isReadableStreamSupported) { + return; + } + + globalThis.ReadableStream = __w_pdfjs_require__(111).ReadableStream; + })(); + + (function checkStringPadStart() { + if (String.prototype.padStart) { + return; + } + + __w_pdfjs_require__(112); + })(); + + (function checkStringPadEnd() { + if (String.prototype.padEnd) { + return; + } + + __w_pdfjs_require__(118); + })(); + + (function checkObjectValues() { + if (Object.values) { + return; + } + + Object.values = __w_pdfjs_require__(120); + })(); + + (function checkObjectEntries() { + if (Object.entries) { + return; + } + + Object.entries = __w_pdfjs_require__(123); + })(); + } + + /***/ + }), + /* 6 */ + /***/ ((__unused_webpack_module, exports) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.isNodeJS = void 0; + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _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; + + /***/ + }), + /* 7 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + __w_pdfjs_require__(8); + module.exports = __w_pdfjs_require__(10); + + /***/ + }), + /* 8 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var $ = __w_pdfjs_require__(9); + var global = __w_pdfjs_require__(10); + $({global: true}, {globalThis: global}); + + /***/ + }), + /* 9 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var getOwnPropertyDescriptor = __w_pdfjs_require__(11).f; + var createNonEnumerableProperty = __w_pdfjs_require__(25); + var redefine = __w_pdfjs_require__(28); + var setGlobal = __w_pdfjs_require__(29); + var copyConstructorProperties = __w_pdfjs_require__(39); + var isForced = __w_pdfjs_require__(51); + 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); + } + }; + + /***/ + }), + /* 10 */ + /***/ ((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')(); + + /***/ + }), + /* 11 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + var DESCRIPTORS = __w_pdfjs_require__(12); + var propertyIsEnumerableModule = __w_pdfjs_require__(14); + var createPropertyDescriptor = __w_pdfjs_require__(15); + var toIndexedObject = __w_pdfjs_require__(16); + var toPrimitive = __w_pdfjs_require__(20); + var has = __w_pdfjs_require__(22); + var IE8_DOM_DEFINE = __w_pdfjs_require__(23); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (has(O, P)) + return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); + }; + + /***/ + }), + /* 12 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var fails = __w_pdfjs_require__(13); + module.exports = !fails(function () { + return Object.defineProperty({}, 1, { + get: function () { + return 7; + } + })[1] != 7; + }); + + /***/ + }), + /* 13 */ + /***/ ((module) => { + + module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + /***/ + }), + /* 14 */ + /***/ ((__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; + + /***/ + }), + /* 15 */ + /***/ ((module) => { + + module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + /***/ + }), + /* 16 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var IndexedObject = __w_pdfjs_require__(17); + var requireObjectCoercible = __w_pdfjs_require__(19); + module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); + }; + + /***/ + }), + /* 17 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var fails = __w_pdfjs_require__(13); + var classof = __w_pdfjs_require__(18); + var split = ''.split; + module.exports = fails(function () { + return !Object('z').propertyIsEnumerable(0); + }) ? function (it) { + return classof(it) == 'String' ? split.call(it, '') : Object(it); + } : Object; + + /***/ + }), + /* 18 */ + /***/ ((module) => { + + var toString = {}.toString; + module.exports = function (it) { + return toString.call(it).slice(8, -1); + }; + + /***/ + }), + /* 19 */ + /***/ ((module) => { + + 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 isObject = __w_pdfjs_require__(21); + module.exports = function (input, PREFERRED_STRING) { + if (!isObject(input)) + return input; + var fn, val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) + return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) + return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) + return val; + throw TypeError("Can't convert object to primitive value"); + }; + + /***/ + }), + /* 21 */ + /***/ ((module) => { + + module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + + /***/ + }), + /* 22 */ + /***/ ((module) => { + + var hasOwnProperty = {}.hasOwnProperty; + module.exports = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + /***/ + }), + /* 23 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var DESCRIPTORS = __w_pdfjs_require__(12); + var fails = __w_pdfjs_require__(13); + var createElement = __w_pdfjs_require__(24); + module.exports = !DESCRIPTORS && !fails(function () { + return Object.defineProperty(createElement('div'), 'a', { + get: function () { + return 7; + } + }).a != 7; + }); + + /***/ + }), + /* 24 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var isObject = __w_pdfjs_require__(21); + var document = global.document; + var EXISTS = isObject(document) && isObject(document.createElement); + module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; + }; + + /***/ + }), + /* 25 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var DESCRIPTORS = __w_pdfjs_require__(12); + var definePropertyModule = __w_pdfjs_require__(26); + var createPropertyDescriptor = __w_pdfjs_require__(15); + module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + /***/ + }), + /* 26 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + var DESCRIPTORS = __w_pdfjs_require__(12); + var IE8_DOM_DEFINE = __w_pdfjs_require__(23); + var anObject = __w_pdfjs_require__(27); + var toPrimitive = __w_pdfjs_require__(20); + var $defineProperty = Object.defineProperty; + exports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + 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; + }; + + /***/ + }), + /* 27 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var isObject = __w_pdfjs_require__(21); + module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + ' is not an object'); + } + return it; + }; + + /***/ + }), + /* 28 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var createNonEnumerableProperty = __w_pdfjs_require__(25); + var has = __w_pdfjs_require__(22); + var setGlobal = __w_pdfjs_require__(29); + var inspectSource = __w_pdfjs_require__(30); + var InternalStateModule = __w_pdfjs_require__(32); + 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 state; + if (typeof value == 'function') { + if (typeof key == 'string' && !has(value, 'name')) { + createNonEnumerableProperty(value, 'name', key); + } + state = enforceInternalState(value); + if (!state.source) { + state.source = TEMPLATE.join(typeof key == 'string' ? key : ''); + } + } + 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 typeof this == 'function' && getInternalState(this).source || inspectSource(this); + }); + + /***/ + }), + /* 29 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var createNonEnumerableProperty = __w_pdfjs_require__(25); + module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } + return value; + }; + + /***/ + }), + /* 30 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var store = __w_pdfjs_require__(31); + var functionToString = Function.toString; + if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; + } + module.exports = store.inspectSource; + + /***/ + }), + /* 31 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var setGlobal = __w_pdfjs_require__(29); + var SHARED = '__core-js_shared__'; + var store = global[SHARED] || setGlobal(SHARED, {}); + module.exports = store; + + /***/ + }), + /* 32 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var NATIVE_WEAK_MAP = __w_pdfjs_require__(33); + var global = __w_pdfjs_require__(10); + var isObject = __w_pdfjs_require__(21); + var createNonEnumerableProperty = __w_pdfjs_require__(25); + var objectHas = __w_pdfjs_require__(22); + var shared = __w_pdfjs_require__(31); + var sharedKey = __w_pdfjs_require__(34); + var hiddenKeys = __w_pdfjs_require__(38); + 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) { + var store = shared.state || (shared.state = new WeakMap()); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + metadata.facade = it; + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; + } else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; + } + module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + + /***/ + }), + /* 33 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var inspectSource = __w_pdfjs_require__(30); + var WeakMap = global.WeakMap; + module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); + + /***/ + }), + /* 34 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var shared = __w_pdfjs_require__(35); + var uid = __w_pdfjs_require__(37); + var keys = shared('keys'); + module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); + }; + + /***/ + }), + /* 35 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var IS_PURE = __w_pdfjs_require__(36); + var store = __w_pdfjs_require__(31); + (module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: '3.10.0', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)' + }); + + /***/ + }), + /* 36 */ + /***/ ((module) => { + + module.exports = false; + + /***/ + }), + /* 37 */ + /***/ ((module) => { + + var id = 0; + var postfix = Math.random(); + module.exports = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); + }; + + /***/ + }), + /* 38 */ + /***/ ((module) => { + + module.exports = {}; + + /***/ + }), + /* 39 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var has = __w_pdfjs_require__(22); + var ownKeys = __w_pdfjs_require__(40); + var getOwnPropertyDescriptorModule = __w_pdfjs_require__(11); + var definePropertyModule = __w_pdfjs_require__(26); + module.exports = function (target, source) { + 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 (!has(target, key)) + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + }; + + /***/ + }), + /* 40 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var getBuiltIn = __w_pdfjs_require__(41); + var getOwnPropertyNamesModule = __w_pdfjs_require__(43); + var getOwnPropertySymbolsModule = __w_pdfjs_require__(50); + var anObject = __w_pdfjs_require__(27); + module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; + }; + + /***/ + }), + /* 41 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var path = __w_pdfjs_require__(42); + var global = __w_pdfjs_require__(10); + var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; + }; + module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; + }; + + /***/ + }), + /* 42 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + module.exports = global; + + /***/ + }), + /* 43 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + var internalObjectKeys = __w_pdfjs_require__(44); + var enumBugKeys = __w_pdfjs_require__(49); + var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + + /***/ + }), + /* 44 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var has = __w_pdfjs_require__(22); + var toIndexedObject = __w_pdfjs_require__(16); + var indexOf = __w_pdfjs_require__(45).indexOf; + var hiddenKeys = __w_pdfjs_require__(38); + module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !has(hiddenKeys, key) && has(O, key) && result.push(key); + while (names.length > i) + if (has(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + return result; + }; + + /***/ + }), + /* 45 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var toIndexedObject = __w_pdfjs_require__(16); + var toLength = __w_pdfjs_require__(46); + var toAbsoluteIndex = __w_pdfjs_require__(48); + var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + 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) + }; + + /***/ + }), + /* 46 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var toInteger = __w_pdfjs_require__(47); + var min = Math.min; + module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; + }; + + /***/ + }), + /* 47 */ + /***/ ((module) => { + + var ceil = Math.ceil; + var floor = Math.floor; + module.exports = function (argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); + }; + + /***/ + }), + /* 48 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var toInteger = __w_pdfjs_require__(47); + var max = Math.max; + var min = Math.min; + module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + + /***/ + }), + /* 49 */ + /***/ ((module) => { + + module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' + ]; + + /***/ + }), + /* 50 */ + /***/ ((__unused_webpack_module, exports) => { + + exports.f = Object.getOwnPropertySymbols; + + /***/ + }), + /* 51 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var fails = __w_pdfjs_require__(13); + var replacement = /#|\.prototype\./; + var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == 'function' ? 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; + + /***/ + }), + /* 52 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + __w_pdfjs_require__(53); + __w_pdfjs_require__(75); + var path = __w_pdfjs_require__(42); + module.exports = path.Object.fromEntries; + + /***/ + }), + /* 53 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var toIndexedObject = __w_pdfjs_require__(16); + var addToUnscopables = __w_pdfjs_require__(54); + var Iterators = __w_pdfjs_require__(65); + var InternalStateModule = __w_pdfjs_require__(32); + var defineIterator = __w_pdfjs_require__(66); + 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'); + Iterators.Arguments = Iterators.Array; + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + + /***/ + }), + /* 54 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var wellKnownSymbol = __w_pdfjs_require__(55); + var create = __w_pdfjs_require__(61); + var definePropertyModule = __w_pdfjs_require__(26); + 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; + }; + + /***/ + }), + /* 55 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var shared = __w_pdfjs_require__(35); + var has = __w_pdfjs_require__(22); + var uid = __w_pdfjs_require__(37); + var NATIVE_SYMBOL = __w_pdfjs_require__(56); + var USE_SYMBOL_AS_UID = __w_pdfjs_require__(60); + var WellKnownSymbolsStore = shared('wks'); + var Symbol = global.Symbol; + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) { + if (NATIVE_SYMBOL && has(Symbol, name)) { + WellKnownSymbolsStore[name] = Symbol[name]; + } else { + WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } + } + return WellKnownSymbolsStore[name]; + }; + + /***/ + }), + /* 56 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var IS_NODE = __w_pdfjs_require__(57); + var V8_VERSION = __w_pdfjs_require__(58); + var fails = __w_pdfjs_require__(13); + module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + return !Symbol.sham && (IS_NODE ? V8_VERSION === 38 : V8_VERSION > 37 && V8_VERSION < 41); + }); + + /***/ + }), + /* 57 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var classof = __w_pdfjs_require__(18); + var global = __w_pdfjs_require__(10); + module.exports = classof(global.process) == 'process'; + + /***/ + }), + /* 58 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var userAgent = __w_pdfjs_require__(59); + var process = global.process; + var versions = process && process.versions; + var v8 = versions && versions.v8; + var match, version; + if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; + } else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = match[1]; + } + } + module.exports = version && +version; + + /***/ + }), + /* 59 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var getBuiltIn = __w_pdfjs_require__(41); + module.exports = getBuiltIn('navigator', 'userAgent') || ''; + + /***/ + }), + /* 60 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var NATIVE_SYMBOL = __w_pdfjs_require__(56); + module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol'; + + /***/ + }), + /* 61 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var anObject = __w_pdfjs_require__(27); + var defineProperties = __w_pdfjs_require__(62); + var enumBugKeys = __w_pdfjs_require__(49); + var hiddenKeys = __w_pdfjs_require__(38); + var html = __w_pdfjs_require__(64); + var documentCreateElement = __w_pdfjs_require__(24); + var sharedKey = __w_pdfjs_require__(34); + 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 = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { + } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + 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 : defineProperties(result, Properties); + }; + + /***/ + }), + /* 62 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var DESCRIPTORS = __w_pdfjs_require__(12); + var definePropertyModule = __w_pdfjs_require__(26); + var anObject = __w_pdfjs_require__(27); + var objectKeys = __w_pdfjs_require__(63); + module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], Properties[key]); + return O; + }; + + /***/ + }), + /* 63 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var internalObjectKeys = __w_pdfjs_require__(44); + var enumBugKeys = __w_pdfjs_require__(49); + module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + + /***/ + }), + /* 64 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var getBuiltIn = __w_pdfjs_require__(41); + module.exports = getBuiltIn('document', 'documentElement'); + + /***/ + }), + /* 65 */ + /***/ ((module) => { + + module.exports = {}; + + /***/ + }), + /* 66 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var createIteratorConstructor = __w_pdfjs_require__(67); + var getPrototypeOf = __w_pdfjs_require__(69); + var setPrototypeOf = __w_pdfjs_require__(73); + var setToStringTag = __w_pdfjs_require__(72); + var createNonEnumerableProperty = __w_pdfjs_require__(25); + var redefine = __w_pdfjs_require__(28); + var wellKnownSymbol = __w_pdfjs_require__(55); + var IS_PURE = __w_pdfjs_require__(36); + var Iterators = __w_pdfjs_require__(65); + var IteratorsCore = __w_pdfjs_require__(68); + 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 (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return nativeIterator.call(this); + }; + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); + } + Iterators[NAME] = defaultIterator; + 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); + } + return methods; + }; + + /***/ + }), + /* 67 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var IteratorPrototype = __w_pdfjs_require__(68).IteratorPrototype; + var create = __w_pdfjs_require__(61); + var createPropertyDescriptor = __w_pdfjs_require__(15); + var setToStringTag = __w_pdfjs_require__(72); + var Iterators = __w_pdfjs_require__(65); + var returnThis = function () { + return this; + }; + module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, {next: createPropertyDescriptor(1, next)}); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + + /***/ + }), + /* 68 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var fails = __w_pdfjs_require__(13); + var getPrototypeOf = __w_pdfjs_require__(69); + var createNonEnumerableProperty = __w_pdfjs_require__(25); + var has = __w_pdfjs_require__(22); + var wellKnownSymbol = __w_pdfjs_require__(55); + var IS_PURE = __w_pdfjs_require__(36); + var ITERATOR = wellKnownSymbol('iterator'); + var BUGGY_SAFARI_ITERATORS = false; + var returnThis = function () { + return this; + }; + 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 = {}; + if ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); + } + module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + + /***/ + }), + /* 69 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var has = __w_pdfjs_require__(22); + var toObject = __w_pdfjs_require__(70); + var sharedKey = __w_pdfjs_require__(34); + var CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(71); + var IE_PROTO = sharedKey('IE_PROTO'); + var ObjectPrototype = Object.prototype; + module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) + return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } + return O instanceof Object ? ObjectPrototype : null; + }; + + /***/ + }), + /* 70 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var requireObjectCoercible = __w_pdfjs_require__(19); + module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); + }; + + /***/ + }), + /* 71 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var fails = __w_pdfjs_require__(13); + module.exports = !fails(function () { + function F() { + } + + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + /***/ + }), + /* 72 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var defineProperty = __w_pdfjs_require__(26).f; + var has = __w_pdfjs_require__(22); + var wellKnownSymbol = __w_pdfjs_require__(55); + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + module.exports = function (it, TAG, STATIC) { + if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { + configurable: true, + value: TAG + }); + } + }; + + /***/ + }), + /* 73 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var anObject = __w_pdfjs_require__(27); + var aPossiblePrototype = __w_pdfjs_require__(74); + module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter.call(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : undefined); + + /***/ + }), + /* 74 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var isObject = __w_pdfjs_require__(21); + module.exports = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + ' as a prototype'); + } + return it; + }; + + /***/ + }), + /* 75 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var $ = __w_pdfjs_require__(9); + var iterate = __w_pdfjs_require__(76); + var createProperty = __w_pdfjs_require__(84); + $({ + target: 'Object', + stat: true + }, { + fromEntries: function fromEntries(iterable) { + var obj = {}; + iterate(iterable, function (k, v) { + createProperty(obj, k, v); + }, {AS_ENTRIES: true}); + return obj; + } + }); + + /***/ + }), + /* 76 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var anObject = __w_pdfjs_require__(27); + var isArrayIteratorMethod = __w_pdfjs_require__(77); + var toLength = __w_pdfjs_require__(46); + var bind = __w_pdfjs_require__(78); + var getIteratorMethod = __w_pdfjs_require__(80); + var iteratorClose = __w_pdfjs_require__(83); + var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; + }; + 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, 1 + AS_ENTRIES + INTERRUPTED); + var iterator, iterFn, index, length, result, next, step; + var stop = function (condition) { + if (iterator) + iteratorClose(iterator); + 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 (typeof iterFn != 'function') + throw TypeError('Target is not iterable'); + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = toLength(iterable.length); length > index; index++) { + result = callFn(iterable[index]); + if (result && result instanceof Result) + return result; + } + return new Result(false); + } + iterator = iterFn.call(iterable); + } + next = iterator.next; + while (!(step = next.call(iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator); + throw error; + } + if (typeof result == 'object' && result && result instanceof Result) + return result; + } + return new Result(false); + }; + + /***/ + }), + /* 77 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var wellKnownSymbol = __w_pdfjs_require__(55); + var Iterators = __w_pdfjs_require__(65); + var ITERATOR = wellKnownSymbol('iterator'); + var ArrayPrototype = Array.prototype; + module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + + /***/ + }), + /* 78 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var aFunction = __w_pdfjs_require__(79); + module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) + return fn; + switch (length) { + case 0: + return function () { + return fn.call(that); + }; + case 1: + return function (a) { + return fn.call(that, a); + }; + case 2: + return function (a, b) { + return fn.call(that, a, b); + }; + case 3: + return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function () { + return fn.apply(that, arguments); + }; + }; + + /***/ + }), + /* 79 */ + /***/ ((module) => { + + module.exports = function (it) { + if (typeof it != 'function') { + throw TypeError(String(it) + ' is not a function'); + } + return it; + }; + + /***/ + }), + /* 80 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var classof = __w_pdfjs_require__(81); + var Iterators = __w_pdfjs_require__(65); + var wellKnownSymbol = __w_pdfjs_require__(55); + var ITERATOR = wellKnownSymbol('iterator'); + module.exports = function (it) { + if (it != undefined) + return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; + }; + + /***/ + }), + /* 81 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(82); + var classofRaw = __w_pdfjs_require__(18); + var wellKnownSymbol = __w_pdfjs_require__(55); + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + 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' && typeof O.callee == 'function' ? 'Arguments' : result; + }; + + /***/ + }), + /* 82 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var wellKnownSymbol = __w_pdfjs_require__(55); + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var test = {}; + test[TO_STRING_TAG] = 'z'; + module.exports = String(test) === '[object z]'; + + /***/ + }), + /* 83 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var anObject = __w_pdfjs_require__(27); + module.exports = function (iterator) { + var returnMethod = iterator['return']; + if (returnMethod !== undefined) { + return anObject(returnMethod.call(iterator)).value; + } + }; + + /***/ + }), + /* 84 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var toPrimitive = __w_pdfjs_require__(20); + var definePropertyModule = __w_pdfjs_require__(26); + var createPropertyDescriptor = __w_pdfjs_require__(15); + module.exports = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) + definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else + object[propertyKey] = value; + }; + + /***/ + }), + /* 85 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + __w_pdfjs_require__(86); + __w_pdfjs_require__(87); + __w_pdfjs_require__(89); + __w_pdfjs_require__(104); + __w_pdfjs_require__(105); + __w_pdfjs_require__(106); + __w_pdfjs_require__(107); + __w_pdfjs_require__(109); + var path = __w_pdfjs_require__(42); + module.exports = path.Promise; + + /***/ + }), + /* 86 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var getPrototypeOf = __w_pdfjs_require__(69); + var setPrototypeOf = __w_pdfjs_require__(73); + var create = __w_pdfjs_require__(61); + var createNonEnumerableProperty = __w_pdfjs_require__(25); + var createPropertyDescriptor = __w_pdfjs_require__(15); + var iterate = __w_pdfjs_require__(76); + var $AggregateError = function AggregateError(errors, message) { + var that = this; + if (!(that instanceof $AggregateError)) + return new $AggregateError(errors, message); + if (setPrototypeOf) { + that = setPrototypeOf(new Error(undefined), getPrototypeOf(that)); + } + if (message !== undefined) + createNonEnumerableProperty(that, 'message', String(message)); + var errorsArray = []; + iterate(errors, errorsArray.push, {that: errorsArray}); + createNonEnumerableProperty(that, 'errors', errorsArray); + return that; + }; + $AggregateError.prototype = create(Error.prototype, { + constructor: createPropertyDescriptor(5, $AggregateError), + message: createPropertyDescriptor(5, ''), + name: createPropertyDescriptor(5, 'AggregateError') + }); + $({global: true}, {AggregateError: $AggregateError}); + + /***/ + }), + /* 87 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(82); + var redefine = __w_pdfjs_require__(28); + var toString = __w_pdfjs_require__(88); + if (!TO_STRING_TAG_SUPPORT) { + redefine(Object.prototype, 'toString', toString, {unsafe: true}); + } + + /***/ + }), + /* 88 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(82); + var classof = __w_pdfjs_require__(81); + module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; + }; + + /***/ + }), + /* 89 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var IS_PURE = __w_pdfjs_require__(36); + var global = __w_pdfjs_require__(10); + var getBuiltIn = __w_pdfjs_require__(41); + var NativePromise = __w_pdfjs_require__(90); + var redefine = __w_pdfjs_require__(28); + var redefineAll = __w_pdfjs_require__(91); + var setToStringTag = __w_pdfjs_require__(72); + var setSpecies = __w_pdfjs_require__(92); + var isObject = __w_pdfjs_require__(21); + var aFunction = __w_pdfjs_require__(79); + var anInstance = __w_pdfjs_require__(93); + var inspectSource = __w_pdfjs_require__(30); + var iterate = __w_pdfjs_require__(76); + var checkCorrectnessOfIteration = __w_pdfjs_require__(94); + var speciesConstructor = __w_pdfjs_require__(95); + var task = __w_pdfjs_require__(96).set; + var microtask = __w_pdfjs_require__(98); + var promiseResolve = __w_pdfjs_require__(100); + var hostReportErrors = __w_pdfjs_require__(102); + var newPromiseCapabilityModule = __w_pdfjs_require__(101); + var perform = __w_pdfjs_require__(103); + var InternalStateModule = __w_pdfjs_require__(32); + var isForced = __w_pdfjs_require__(51); + var wellKnownSymbol = __w_pdfjs_require__(55); + var IS_NODE = __w_pdfjs_require__(57); + var V8_VERSION = __w_pdfjs_require__(58); + var SPECIES = wellKnownSymbol('species'); + var PROMISE = 'Promise'; + var getInternalState = InternalStateModule.get; + var setInternalState = InternalStateModule.set; + var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); + var PromiseConstructor = NativePromise; + var TypeError = global.TypeError; + var document = global.document; + var process = global.process; + var $fetch = getBuiltIn('fetch'); + var newPromiseCapability = newPromiseCapabilityModule.f; + var newGenericPromiseCapability = newPromiseCapability; + var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); + var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function'; + var UNHANDLED_REJECTION = 'unhandledrejection'; + var REJECTION_HANDLED = 'rejectionhandled'; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + var FORCED = isForced(PROMISE, function () { + var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE) { + if (V8_VERSION === 66) + return true; + if (!IS_NODE && !NATIVE_REJECTION_EVENT) + return true; + } + if (IS_PURE && !PromiseConstructor.prototype['finally']) + return true; + if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) + return false; + var promise = PromiseConstructor.resolve(1); + var FakePromise = function (exec) { + exec(function () { + }, function () { + }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + return !(promise.then(function () { + }) instanceof FakePromise); + }); + var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { + }); + }); + var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; + }; + var notify = function (state, isReject) { + if (state.notified) + return; + state.notified = true; + var chain = state.reactions; + microtask(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; + while (chain.length > index) { + var reaction = chain[index++]; + 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)) { + then.call(result, resolve, reject); + } else + resolve(result); + } else + reject(value); + } catch (error) { + if (domain && !exited) + domain.exit(); + reject(error); + } + } + state.reactions = []; + 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) { + task.call(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) { + task.call(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 { + then.call(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, PromiseConstructor, PROMISE); + aFunction(executor); + Internal.call(this); + var state = getInternalState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromiseConstructor.prototype, { + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + state.parent = true; + state.reactions.push(reaction); + if (state.state != PENDING) + notify(state, false); + 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 && typeof NativePromise == 'function') { + nativeThen = NativePromise.prototype.then; + redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); + }, {unsafe: true}); + if (typeof $fetch == 'function') + $({ + global: true, + enumerable: true, + forced: true + }, { + fetch: function fetch(input) { + return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); + } + }); + } + } + $({ + 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); + capability.reject.call(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 = aFunction(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + $promiseResolve.call(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 = aFunction(C.resolve); + iterate(iterable, function (promise) { + $promiseResolve.call(C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) + reject(result.value); + return capability.promise; + } + }); + + /***/ + }), + /* 90 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + module.exports = global.Promise; + + /***/ + }), + /* 91 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var redefine = __w_pdfjs_require__(28); + module.exports = function (target, src, options) { + for (var key in src) + redefine(target, key, src[key], options); + return target; + }; + + /***/ + }), + /* 92 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var getBuiltIn = __w_pdfjs_require__(41); + var definePropertyModule = __w_pdfjs_require__(26); + var wellKnownSymbol = __w_pdfjs_require__(55); + var DESCRIPTORS = __w_pdfjs_require__(12); + 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; + } + }); + } + }; + + /***/ + }), + /* 93 */ + /***/ ((module) => { + + module.exports = function (it, Constructor, name) { + if (!(it instanceof Constructor)) { + throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); + } + return it; + }; + + /***/ + }), + /* 94 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var wellKnownSymbol = __w_pdfjs_require__(55); + 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; + }; + + /***/ + }), + /* 95 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var anObject = __w_pdfjs_require__(27); + var aFunction = __w_pdfjs_require__(79); + var wellKnownSymbol = __w_pdfjs_require__(55); + 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 : aFunction(S); + }; + + /***/ + }), + /* 96 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var fails = __w_pdfjs_require__(13); + var bind = __w_pdfjs_require__(78); + var html = __w_pdfjs_require__(64); + var createElement = __w_pdfjs_require__(24); + var IS_IOS = __w_pdfjs_require__(97); + var IS_NODE = __w_pdfjs_require__(57); + var location = global.location; + var set = global.setImmediate; + var clear = global.clearImmediate; + var process = global.process; + var MessageChannel = global.MessageChannel; + var Dispatch = global.Dispatch; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = 'onreadystatechange'; + var defer, channel, port; + var run = function (id) { + if (queue.hasOwnProperty(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(id + '', location.protocol + '//' + location.host); + }; + if (!set || !clear) { + set = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) + args.push(arguments[i++]); + queue[++counter] = function () { + (typeof fn == 'function' ? fn : Function(fn)).apply(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, 1); + } else if (global.addEventListener && typeof postMessage == 'function' && !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 + }; + + /***/ + }), + /* 97 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var userAgent = __w_pdfjs_require__(59); + module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); + + /***/ + }), + /* 98 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var getOwnPropertyDescriptor = __w_pdfjs_require__(11).f; + var macrotask = __w_pdfjs_require__(96).set; + var IS_IOS = __w_pdfjs_require__(97); + var IS_WEBOS_WEBKIT = __w_pdfjs_require__(99); + var IS_NODE = __w_pdfjs_require__(57); + 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 (Promise && Promise.resolve) { + promise = Promise.resolve(undefined); + then = promise.then; + notify = function () { + then.call(promise, flush); + }; + } else if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + } else { + notify = function () { + macrotask.call(global, flush); + }; + } + } + module.exports = queueMicrotask || function (fn) { + var task = { + fn: fn, + next: undefined + }; + if (last) + last.next = task; + if (!head) { + head = task; + notify(); + } + last = task; + }; + + /***/ + }), + /* 99 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var userAgent = __w_pdfjs_require__(59); + module.exports = /web0s(?!.*chrome)/i.test(userAgent); + + /***/ + }), + /* 100 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var anObject = __w_pdfjs_require__(27); + var isObject = __w_pdfjs_require__(21); + var newPromiseCapability = __w_pdfjs_require__(101); + 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; + }; + + /***/ + }), + /* 101 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var aFunction = __w_pdfjs_require__(79); + 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 = aFunction(resolve); + this.reject = aFunction(reject); + }; + module.exports.f = function (C) { + return new PromiseCapability(C); + }; + + /***/ + }), + /* 102 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + module.exports = function (a, b) { + var console = global.console; + if (console && console.error) { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } + }; + + /***/ + }), + /* 103 */ + /***/ ((module) => { + + module.exports = function (exec) { + try { + return { + error: false, + value: exec() + }; + } catch (error) { + return { + error: true, + value: error + }; + } + }; + + /***/ + }), + /* 104 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var aFunction = __w_pdfjs_require__(79); + var newPromiseCapabilityModule = __w_pdfjs_require__(101); + var perform = __w_pdfjs_require__(103); + var iterate = __w_pdfjs_require__(76); + $({ + 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 = aFunction(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + promiseResolve.call(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; + } + }); + + /***/ + }), + /* 105 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var aFunction = __w_pdfjs_require__(79); + var getBuiltIn = __w_pdfjs_require__(41); + var newPromiseCapabilityModule = __w_pdfjs_require__(101); + var perform = __w_pdfjs_require__(103); + var iterate = __w_pdfjs_require__(76); + var PROMISE_ANY_ERROR = 'No one promise resolved'; + $({ + target: 'Promise', + stat: true + }, { + any: function any(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aFunction(C.resolve); + var errors = []; + var counter = 0; + var remaining = 1; + var alreadyResolved = false; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyRejected = false; + errors.push(undefined); + remaining++; + promiseResolve.call(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 (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); + }); + }); + --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); + }); + if (result.error) + reject(result.value); + return capability.promise; + } + }); + + /***/ + }), + /* 106 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var IS_PURE = __w_pdfjs_require__(36); + var NativePromise = __w_pdfjs_require__(90); + var fails = __w_pdfjs_require__(13); + var getBuiltIn = __w_pdfjs_require__(41); + var speciesConstructor = __w_pdfjs_require__(95); + var promiseResolve = __w_pdfjs_require__(100); + var redefine = __w_pdfjs_require__(28); + 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 = typeof onFinally == 'function'; + 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 && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) { + redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']); + } + + /***/ + }), + /* 107 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var charAt = __w_pdfjs_require__(108).charAt; + var InternalStateModule = __w_pdfjs_require__(32); + var defineIterator = __w_pdfjs_require__(66); + 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: String(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 + }; + }); + + /***/ + }), + /* 108 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var toInteger = __w_pdfjs_require__(47); + var requireObjectCoercible = __w_pdfjs_require__(19); + var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; + }; + module.exports = { + codeAt: createMethod(false), + charAt: createMethod(true) + }; + + /***/ + }), + /* 109 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var DOMIterables = __w_pdfjs_require__(110); + var ArrayIteratorMethods = __w_pdfjs_require__(53); + var createNonEnumerableProperty = __w_pdfjs_require__(25); + var wellKnownSymbol = __w_pdfjs_require__(55); + var ITERATOR = wellKnownSymbol('iterator'); + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var ArrayValues = ArrayIteratorMethods.values; + for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype) { + if (CollectionPrototype[ITERATOR] !== ArrayValues) + try { + createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues); + } catch (error) { + CollectionPrototype[ITERATOR] = ArrayValues; + } + if (!CollectionPrototype[TO_STRING_TAG]) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + if (DOMIterables[COLLECTION_NAME]) + for (var METHOD_NAME in ArrayIteratorMethods) { + if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) + try { + createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); + } catch (error) { + CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; + } + } + } + } + + /***/ + }), + /* 110 */ + /***/ ((module) => { + + module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + /***/ + }), + /* 111 */ + /***/ (function (__unused_webpack_module, exports) { + + (function (global, factory) { + true ? factory(exports) : 0; + }(this, function (exports) { + 'use strict'; + var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol : function (description) { + return "Symbol(" + description + ")"; + }; + + function noop() { + } + + function getGlobals() { + if (typeof self !== 'undefined') { + return self; + } else if (typeof window !== 'undefined') { + return window; + } else if (typeof global !== 'undefined') { + return global; + } + return undefined; + } + + var globals = getGlobals(); + + function typeIsObject(x) { + return typeof x === 'object' && x !== null || typeof x === 'function'; + } + + var rethrowAssertionErrorRejection = noop; + var originalPromise = Promise; + var originalPromiseThen = Promise.prototype.then; + var originalPromiseResolve = Promise.resolve.bind(originalPromise); + var originalPromiseReject = Promise.reject.bind(originalPromise); + + function newPromise(executor) { + return new originalPromise(executor); + } + + function promiseResolvedWith(value) { + return originalPromiseResolve(value); + } + + function promiseRejectedWith(reason) { + return originalPromiseReject(reason); + } + + function PerformPromiseThen(promise, onFulfilled, onRejected) { + return originalPromiseThen.call(promise, onFulfilled, onRejected); + } + + function uponPromise(promise, onFulfilled, onRejected) { + PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection); + } + + function uponFulfillment(promise, onFulfilled) { + uponPromise(promise, onFulfilled); + } + + function uponRejection(promise, onRejected) { + uponPromise(promise, undefined, onRejected); + } + + function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) { + return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler); + } + + function setPromiseIsHandledToTrue(promise) { + PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection); + } + + var queueMicrotask = function () { + var globalQueueMicrotask = globals && globals.queueMicrotask; + if (typeof globalQueueMicrotask === 'function') { + return globalQueueMicrotask; + } + var resolvedPromise = promiseResolvedWith(undefined); + return function (fn) { + return PerformPromiseThen(resolvedPromise, fn); + }; + }(); + + function reflectCall(F, V, args) { + if (typeof F !== 'function') { + throw new TypeError('Argument is not a function'); + } + return Function.prototype.apply.call(F, V, args); + } + + function promiseCall(F, V, args) { + try { + return promiseResolvedWith(reflectCall(F, V, args)); + } catch (value) { + return promiseRejectedWith(value); + } + } + + var QUEUE_MAX_ARRAY_SIZE = 16384; + var SimpleQueue = function () { + function SimpleQueue() { + this._cursor = 0; + this._size = 0; + this._front = { + _elements: [], + _next: undefined + }; + this._back = this._front; + this._cursor = 0; + this._size = 0; + } + + Object.defineProperty(SimpleQueue.prototype, "length", { + get: function () { + return this._size; + }, + enumerable: false, + configurable: true + }); + SimpleQueue.prototype.push = function (element) { + var oldBack = this._back; + var newBack = oldBack; + if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) { + newBack = { + _elements: [], + _next: undefined + }; + } + oldBack._elements.push(element); + if (newBack !== oldBack) { + this._back = newBack; + oldBack._next = newBack; + } + ++this._size; + }; + SimpleQueue.prototype.shift = function () { + var oldFront = this._front; + var newFront = oldFront; + var oldCursor = this._cursor; + var newCursor = oldCursor + 1; + var elements = oldFront._elements; + var element = elements[oldCursor]; + if (newCursor === QUEUE_MAX_ARRAY_SIZE) { + newFront = oldFront._next; + newCursor = 0; + } + --this._size; + this._cursor = newCursor; + if (oldFront !== newFront) { + this._front = newFront; + } + elements[oldCursor] = undefined; + return element; + }; + SimpleQueue.prototype.forEach = function (callback) { + var i = this._cursor; + var node = this._front; + var elements = node._elements; + while (i !== elements.length || node._next !== undefined) { + if (i === elements.length) { + node = node._next; + elements = node._elements; + i = 0; + if (elements.length === 0) { + break; + } + } + callback(elements[i]); + ++i; + } + }; + SimpleQueue.prototype.peek = function () { + var front = this._front; + var cursor = this._cursor; + return front._elements[cursor]; + }; + return SimpleQueue; + }(); + + function ReadableStreamReaderGenericInitialize(reader, stream) { + reader._ownerReadableStream = stream; + stream._reader = reader; + if (stream._state === 'readable') { + defaultReaderClosedPromiseInitialize(reader); + } else if (stream._state === 'closed') { + defaultReaderClosedPromiseInitializeAsResolved(reader); + } else { + defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError); + } + } + + function ReadableStreamReaderGenericCancel(reader, reason) { + var stream = reader._ownerReadableStream; + return ReadableStreamCancel(stream, reason); + } + + function ReadableStreamReaderGenericRelease(reader) { + if (reader._ownerReadableStream._state === 'readable') { + defaultReaderClosedPromiseReject(reader, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")); + } else { + defaultReaderClosedPromiseResetToRejected(reader, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")); + } + reader._ownerReadableStream._reader = undefined; + reader._ownerReadableStream = undefined; + } + + function readerLockException(name) { + return new TypeError('Cannot ' + name + ' a stream using a released reader'); + } + + function defaultReaderClosedPromiseInitialize(reader) { + reader._closedPromise = newPromise(function (resolve, reject) { + reader._closedPromise_resolve = resolve; + reader._closedPromise_reject = reject; + }); + } + + function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) { + defaultReaderClosedPromiseInitialize(reader); + defaultReaderClosedPromiseReject(reader, reason); + } + + function defaultReaderClosedPromiseInitializeAsResolved(reader) { + defaultReaderClosedPromiseInitialize(reader); + defaultReaderClosedPromiseResolve(reader); + } + + function defaultReaderClosedPromiseReject(reader, reason) { + if (reader._closedPromise_reject === undefined) { + return; + } + setPromiseIsHandledToTrue(reader._closedPromise); + reader._closedPromise_reject(reason); + reader._closedPromise_resolve = undefined; + reader._closedPromise_reject = undefined; + } + + function defaultReaderClosedPromiseResetToRejected(reader, reason) { + defaultReaderClosedPromiseInitializeAsRejected(reader, reason); + } + + function defaultReaderClosedPromiseResolve(reader) { + if (reader._closedPromise_resolve === undefined) { + return; + } + reader._closedPromise_resolve(undefined); + reader._closedPromise_resolve = undefined; + reader._closedPromise_reject = undefined; + } + + var AbortSteps = SymbolPolyfill('[[AbortSteps]]'); + var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]'); + var CancelSteps = SymbolPolyfill('[[CancelSteps]]'); + var PullSteps = SymbolPolyfill('[[PullSteps]]'); + var NumberIsFinite = Number.isFinite || function (x) { + return typeof x === 'number' && isFinite(x); + }; + var MathTrunc = Math.trunc || function (v) { + return v < 0 ? Math.ceil(v) : Math.floor(v); + }; + + function isDictionary(x) { + return typeof x === 'object' || typeof x === 'function'; + } + + function assertDictionary(obj, context) { + if (obj !== undefined && !isDictionary(obj)) { + throw new TypeError(context + " is not an object."); + } + } + + function assertFunction(x, context) { + if (typeof x !== 'function') { + throw new TypeError(context + " is not a function."); + } + } + + function isObject(x) { + return typeof x === 'object' && x !== null || typeof x === 'function'; + } + + function assertObject(x, context) { + if (!isObject(x)) { + throw new TypeError(context + " is not an object."); + } + } + + function assertRequiredArgument(x, position, context) { + if (x === undefined) { + throw new TypeError("Parameter " + position + " is required in '" + context + "'."); + } + } + + function assertRequiredField(x, field, context) { + if (x === undefined) { + throw new TypeError(field + " is required in '" + context + "'."); + } + } + + function convertUnrestrictedDouble(value) { + return Number(value); + } + + function censorNegativeZero(x) { + return x === 0 ? 0 : x; + } + + function integerPart(x) { + return censorNegativeZero(MathTrunc(x)); + } + + function convertUnsignedLongLongWithEnforceRange(value, context) { + var lowerBound = 0; + var upperBound = Number.MAX_SAFE_INTEGER; + var x = Number(value); + x = censorNegativeZero(x); + if (!NumberIsFinite(x)) { + throw new TypeError(context + " is not a finite number"); + } + x = integerPart(x); + if (x < lowerBound || x > upperBound) { + throw new TypeError(context + " is outside the accepted range of " + lowerBound + " to " + upperBound + ", inclusive"); + } + if (!NumberIsFinite(x) || x === 0) { + return 0; + } + return x; + } + + function assertReadableStream(x, context) { + if (!IsReadableStream(x)) { + throw new TypeError(context + " is not a ReadableStream."); + } + } + + function AcquireReadableStreamDefaultReader(stream) { + return new ReadableStreamDefaultReader(stream); + } + + function ReadableStreamAddReadRequest(stream, readRequest) { + stream._reader._readRequests.push(readRequest); + } + + function ReadableStreamFulfillReadRequest(stream, chunk, done) { + var reader = stream._reader; + var readRequest = reader._readRequests.shift(); + if (done) { + readRequest._closeSteps(); + } else { + readRequest._chunkSteps(chunk); + } + } + + function ReadableStreamGetNumReadRequests(stream) { + return stream._reader._readRequests.length; + } + + function ReadableStreamHasDefaultReader(stream) { + var reader = stream._reader; + if (reader === undefined) { + return false; + } + if (!IsReadableStreamDefaultReader(reader)) { + return false; + } + return true; + } + + var ReadableStreamDefaultReader = function () { + function ReadableStreamDefaultReader(stream) { + assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader'); + assertReadableStream(stream, 'First parameter'); + if (IsReadableStreamLocked(stream)) { + throw new TypeError('This stream has already been locked for exclusive reading by another reader'); + } + ReadableStreamReaderGenericInitialize(this, stream); + this._readRequests = new SimpleQueue(); + } + + Object.defineProperty(ReadableStreamDefaultReader.prototype, "closed", { + get: function () { + if (!IsReadableStreamDefaultReader(this)) { + return promiseRejectedWith(defaultReaderBrandCheckException('closed')); + } + return this._closedPromise; + }, + enumerable: false, + configurable: true + }); + ReadableStreamDefaultReader.prototype.cancel = function (reason) { + if (reason === void 0) { + reason = undefined; + } + if (!IsReadableStreamDefaultReader(this)) { + return promiseRejectedWith(defaultReaderBrandCheckException('cancel')); + } + if (this._ownerReadableStream === undefined) { + return promiseRejectedWith(readerLockException('cancel')); + } + return ReadableStreamReaderGenericCancel(this, reason); + }; + ReadableStreamDefaultReader.prototype.read = function () { + if (!IsReadableStreamDefaultReader(this)) { + return promiseRejectedWith(defaultReaderBrandCheckException('read')); + } + if (this._ownerReadableStream === undefined) { + return promiseRejectedWith(readerLockException('read from')); + } + var resolvePromise; + var rejectPromise; + var promise = newPromise(function (resolve, reject) { + resolvePromise = resolve; + rejectPromise = reject; + }); + var readRequest = { + _chunkSteps: function (chunk) { + return resolvePromise({ + value: chunk, + done: false + }); + }, + _closeSteps: function () { + return resolvePromise({ + value: undefined, + done: true + }); + }, + _errorSteps: function (e) { + return rejectPromise(e); + } + }; + ReadableStreamDefaultReaderRead(this, readRequest); + return promise; + }; + ReadableStreamDefaultReader.prototype.releaseLock = function () { + if (!IsReadableStreamDefaultReader(this)) { + throw defaultReaderBrandCheckException('releaseLock'); + } + if (this._ownerReadableStream === undefined) { + return; + } + if (this._readRequests.length > 0) { + throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); + } + ReadableStreamReaderGenericRelease(this); + }; + return ReadableStreamDefaultReader; + }(); + Object.defineProperties(ReadableStreamDefaultReader.prototype, { + cancel: {enumerable: true}, + read: {enumerable: true}, + releaseLock: {enumerable: true}, + closed: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, { + value: 'ReadableStreamDefaultReader', + configurable: true + }); + } + + function IsReadableStreamDefaultReader(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) { + return false; + } + return true; + } + + function ReadableStreamDefaultReaderRead(reader, readRequest) { + var stream = reader._ownerReadableStream; + stream._disturbed = true; + if (stream._state === 'closed') { + readRequest._closeSteps(); + } else if (stream._state === 'errored') { + readRequest._errorSteps(stream._storedError); + } else { + stream._readableStreamController[PullSteps](readRequest); + } + } + + function defaultReaderBrandCheckException(name) { + return new TypeError("ReadableStreamDefaultReader.prototype." + name + " can only be used on a ReadableStreamDefaultReader"); + } + + var _a; + var AsyncIteratorPrototype; + if (typeof SymbolPolyfill.asyncIterator === 'symbol') { + AsyncIteratorPrototype = (_a = {}, _a[SymbolPolyfill.asyncIterator] = function () { + return this; + }, _a); + Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, {enumerable: false}); + } + var ReadableStreamAsyncIteratorImpl = function () { + function ReadableStreamAsyncIteratorImpl(reader, preventCancel) { + this._ongoingPromise = undefined; + this._isFinished = false; + this._reader = reader; + this._preventCancel = preventCancel; + } + + ReadableStreamAsyncIteratorImpl.prototype.next = function () { + var _this = this; + var nextSteps = function () { + return _this._nextSteps(); + }; + this._ongoingPromise = this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) : nextSteps(); + return this._ongoingPromise; + }; + ReadableStreamAsyncIteratorImpl.prototype.return = function (value) { + var _this = this; + var returnSteps = function () { + return _this._returnSteps(value); + }; + return this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) : returnSteps(); + }; + ReadableStreamAsyncIteratorImpl.prototype._nextSteps = function () { + var _this = this; + if (this._isFinished) { + return Promise.resolve({ + value: undefined, + done: true + }); + } + var reader = this._reader; + if (reader._ownerReadableStream === undefined) { + return promiseRejectedWith(readerLockException('iterate')); + } + var resolvePromise; + var rejectPromise; + var promise = newPromise(function (resolve, reject) { + resolvePromise = resolve; + rejectPromise = reject; + }); + var readRequest = { + _chunkSteps: function (chunk) { + _this._ongoingPromise = undefined; + queueMicrotask(function () { + return resolvePromise({ + value: chunk, + done: false + }); + }); + }, + _closeSteps: function () { + _this._ongoingPromise = undefined; + _this._isFinished = true; + ReadableStreamReaderGenericRelease(reader); + resolvePromise({ + value: undefined, + done: true + }); + }, + _errorSteps: function (reason) { + _this._ongoingPromise = undefined; + _this._isFinished = true; + ReadableStreamReaderGenericRelease(reader); + rejectPromise(reason); + } + }; + ReadableStreamDefaultReaderRead(reader, readRequest); + return promise; + }; + ReadableStreamAsyncIteratorImpl.prototype._returnSteps = function (value) { + if (this._isFinished) { + return Promise.resolve({ + value: value, + done: true + }); + } + this._isFinished = true; + var reader = this._reader; + if (reader._ownerReadableStream === undefined) { + return promiseRejectedWith(readerLockException('finish iterating')); + } + if (!this._preventCancel) { + var result = ReadableStreamReaderGenericCancel(reader, value); + ReadableStreamReaderGenericRelease(reader); + return transformPromiseWith(result, function () { + return { + value: value, + done: true + }; + }); + } + ReadableStreamReaderGenericRelease(reader); + return promiseResolvedWith({ + value: value, + done: true + }); + }; + return ReadableStreamAsyncIteratorImpl; + }(); + var ReadableStreamAsyncIteratorPrototype = { + next: function () { + if (!IsReadableStreamAsyncIterator(this)) { + return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next')); + } + return this._asyncIteratorImpl.next(); + }, + return: function (value) { + if (!IsReadableStreamAsyncIterator(this)) { + return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return')); + } + return this._asyncIteratorImpl.return(value); + } + }; + if (AsyncIteratorPrototype !== undefined) { + Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype); + } + + function AcquireReadableStreamAsyncIterator(stream, preventCancel) { + var reader = AcquireReadableStreamDefaultReader(stream); + var impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel); + var iterator = Object.create(ReadableStreamAsyncIteratorPrototype); + iterator._asyncIteratorImpl = impl; + return iterator; + } + + function IsReadableStreamAsyncIterator(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) { + return false; + } + return true; + } + + function streamAsyncIteratorBrandCheckException(name) { + return new TypeError("ReadableStreamAsyncIterator." + name + " can only be used on a ReadableSteamAsyncIterator"); + } + + var NumberIsNaN = Number.isNaN || function (x) { + return x !== x; + }; + + function IsFiniteNonNegativeNumber(v) { + if (!IsNonNegativeNumber(v)) { + return false; + } + if (v === Infinity) { + return false; + } + return true; + } + + function IsNonNegativeNumber(v) { + if (typeof v !== 'number') { + return false; + } + if (NumberIsNaN(v)) { + return false; + } + if (v < 0) { + return false; + } + return true; + } + + function DequeueValue(container) { + var pair = container._queue.shift(); + container._queueTotalSize -= pair.size; + if (container._queueTotalSize < 0) { + container._queueTotalSize = 0; + } + return pair.value; + } + + function EnqueueValueWithSize(container, value, size) { + size = Number(size); + if (!IsFiniteNonNegativeNumber(size)) { + throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); + } + container._queue.push({ + value: value, + size: size + }); + container._queueTotalSize += size; + } + + function PeekQueueValue(container) { + var pair = container._queue.peek(); + return pair.value; + } + + function ResetQueue(container) { + container._queue = new SimpleQueue(); + container._queueTotalSize = 0; + } + + function CreateArrayFromList(elements) { + return elements.slice(); + } + + function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) { + new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset); + } + + function TransferArrayBuffer(O) { + return O; + } + + function IsDetachedBuffer(O) { + return false; + } + + var ReadableStreamBYOBRequest = function () { + function ReadableStreamBYOBRequest() { + throw new TypeError('Illegal constructor'); + } + + Object.defineProperty(ReadableStreamBYOBRequest.prototype, "view", { + get: function () { + if (!IsReadableStreamBYOBRequest(this)) { + throw byobRequestBrandCheckException('view'); + } + return this._view; + }, + enumerable: false, + configurable: true + }); + ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) { + if (!IsReadableStreamBYOBRequest(this)) { + throw byobRequestBrandCheckException('respond'); + } + assertRequiredArgument(bytesWritten, 1, 'respond'); + bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter'); + if (this._associatedReadableByteStreamController === undefined) { + throw new TypeError('This BYOB request has been invalidated'); + } + if (IsDetachedBuffer(this._view.buffer)) ; + ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten); + }; + ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) { + if (!IsReadableStreamBYOBRequest(this)) { + throw byobRequestBrandCheckException('respondWithNewView'); + } + assertRequiredArgument(view, 1, 'respondWithNewView'); + if (!ArrayBuffer.isView(view)) { + throw new TypeError('You can only respond with array buffer views'); + } + if (view.byteLength === 0) { + throw new TypeError('chunk must have non-zero byteLength'); + } + if (view.buffer.byteLength === 0) { + throw new TypeError("chunk's buffer must have non-zero byteLength"); + } + if (this._associatedReadableByteStreamController === undefined) { + throw new TypeError('This BYOB request has been invalidated'); + } + ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view); + }; + return ReadableStreamBYOBRequest; + }(); + Object.defineProperties(ReadableStreamBYOBRequest.prototype, { + respond: {enumerable: true}, + respondWithNewView: {enumerable: true}, + view: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, { + value: 'ReadableStreamBYOBRequest', + configurable: true + }); + } + var ReadableByteStreamController = function () { + function ReadableByteStreamController() { + throw new TypeError('Illegal constructor'); + } + + Object.defineProperty(ReadableByteStreamController.prototype, "byobRequest", { + get: function () { + if (!IsReadableByteStreamController(this)) { + throw byteStreamControllerBrandCheckException('byobRequest'); + } + if (this._byobRequest === null && this._pendingPullIntos.length > 0) { + var firstDescriptor = this._pendingPullIntos.peek(); + var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled); + var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype); + SetUpReadableStreamBYOBRequest(byobRequest, this, view); + this._byobRequest = byobRequest; + } + return this._byobRequest; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ReadableByteStreamController.prototype, "desiredSize", { + get: function () { + if (!IsReadableByteStreamController(this)) { + throw byteStreamControllerBrandCheckException('desiredSize'); + } + return ReadableByteStreamControllerGetDesiredSize(this); + }, + enumerable: false, + configurable: true + }); + ReadableByteStreamController.prototype.close = function () { + if (!IsReadableByteStreamController(this)) { + throw byteStreamControllerBrandCheckException('close'); + } + if (this._closeRequested) { + throw new TypeError('The stream has already been closed; do not close it again!'); + } + var state = this._controlledReadableByteStream._state; + if (state !== 'readable') { + throw new TypeError("The stream (in " + state + " state) is not in the readable state and cannot be closed"); + } + ReadableByteStreamControllerClose(this); + }; + ReadableByteStreamController.prototype.enqueue = function (chunk) { + if (!IsReadableByteStreamController(this)) { + throw byteStreamControllerBrandCheckException('enqueue'); + } + assertRequiredArgument(chunk, 1, 'enqueue'); + if (!ArrayBuffer.isView(chunk)) { + throw new TypeError('chunk must be an array buffer view'); + } + if (chunk.byteLength === 0) { + throw new TypeError('chunk must have non-zero byteLength'); + } + if (chunk.buffer.byteLength === 0) { + throw new TypeError("chunk's buffer must have non-zero byteLength"); + } + if (this._closeRequested) { + throw new TypeError('stream is closed or draining'); + } + var state = this._controlledReadableByteStream._state; + if (state !== 'readable') { + throw new TypeError("The stream (in " + state + " state) is not in the readable state and cannot be enqueued to"); + } + ReadableByteStreamControllerEnqueue(this, chunk); + }; + ReadableByteStreamController.prototype.error = function (e) { + if (e === void 0) { + e = undefined; + } + if (!IsReadableByteStreamController(this)) { + throw byteStreamControllerBrandCheckException('error'); + } + ReadableByteStreamControllerError(this, e); + }; + ReadableByteStreamController.prototype[CancelSteps] = function (reason) { + if (this._pendingPullIntos.length > 0) { + var firstDescriptor = this._pendingPullIntos.peek(); + firstDescriptor.bytesFilled = 0; + } + ResetQueue(this); + var result = this._cancelAlgorithm(reason); + ReadableByteStreamControllerClearAlgorithms(this); + return result; + }; + ReadableByteStreamController.prototype[PullSteps] = function (readRequest) { + var stream = this._controlledReadableByteStream; + if (this._queueTotalSize > 0) { + var entry = this._queue.shift(); + this._queueTotalSize -= entry.byteLength; + ReadableByteStreamControllerHandleQueueDrain(this); + var view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength); + readRequest._chunkSteps(view); + return; + } + var autoAllocateChunkSize = this._autoAllocateChunkSize; + if (autoAllocateChunkSize !== undefined) { + var buffer = void 0; + try { + buffer = new ArrayBuffer(autoAllocateChunkSize); + } catch (bufferE) { + readRequest._errorSteps(bufferE); + return; + } + var pullIntoDescriptor = { + buffer: buffer, + byteOffset: 0, + byteLength: autoAllocateChunkSize, + bytesFilled: 0, + elementSize: 1, + viewConstructor: Uint8Array, + readerType: 'default' + }; + this._pendingPullIntos.push(pullIntoDescriptor); + } + ReadableStreamAddReadRequest(stream, readRequest); + ReadableByteStreamControllerCallPullIfNeeded(this); + }; + return ReadableByteStreamController; + }(); + Object.defineProperties(ReadableByteStreamController.prototype, { + close: {enumerable: true}, + enqueue: {enumerable: true}, + error: {enumerable: true}, + byobRequest: {enumerable: true}, + desiredSize: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, { + value: 'ReadableByteStreamController', + configurable: true + }); + } + + function IsReadableByteStreamController(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) { + return false; + } + return true; + } + + function IsReadableStreamBYOBRequest(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) { + return false; + } + return true; + } + + function ReadableByteStreamControllerCallPullIfNeeded(controller) { + var shouldPull = ReadableByteStreamControllerShouldCallPull(controller); + if (!shouldPull) { + return; + } + if (controller._pulling) { + controller._pullAgain = true; + return; + } + controller._pulling = true; + var pullPromise = controller._pullAlgorithm(); + uponPromise(pullPromise, function () { + controller._pulling = false; + if (controller._pullAgain) { + controller._pullAgain = false; + ReadableByteStreamControllerCallPullIfNeeded(controller); + } + }, function (e) { + ReadableByteStreamControllerError(controller, e); + }); + } + + function ReadableByteStreamControllerClearPendingPullIntos(controller) { + ReadableByteStreamControllerInvalidateBYOBRequest(controller); + controller._pendingPullIntos = new SimpleQueue(); + } + + function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) { + var done = false; + if (stream._state === 'closed') { + done = true; + } + var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); + if (pullIntoDescriptor.readerType === 'default') { + ReadableStreamFulfillReadRequest(stream, filledView, done); + } else { + ReadableStreamFulfillReadIntoRequest(stream, filledView, done); + } + } + + function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) { + var bytesFilled = pullIntoDescriptor.bytesFilled; + var elementSize = pullIntoDescriptor.elementSize; + return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize); + } + + function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) { + controller._queue.push({ + buffer: buffer, + byteOffset: byteOffset, + byteLength: byteLength + }); + controller._queueTotalSize += byteLength; + } + + function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) { + var elementSize = pullIntoDescriptor.elementSize; + var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize; + var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled); + var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; + var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize; + var totalBytesToCopyRemaining = maxBytesToCopy; + var ready = false; + if (maxAlignedBytes > currentAlignedBytes) { + totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled; + ready = true; + } + var queue = controller._queue; + while (totalBytesToCopyRemaining > 0) { + var headOfQueue = queue.peek(); + var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength); + var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; + CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy); + if (headOfQueue.byteLength === bytesToCopy) { + queue.shift(); + } else { + headOfQueue.byteOffset += bytesToCopy; + headOfQueue.byteLength -= bytesToCopy; + } + controller._queueTotalSize -= bytesToCopy; + ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor); + totalBytesToCopyRemaining -= bytesToCopy; + } + return ready; + } + + function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) { + ReadableByteStreamControllerInvalidateBYOBRequest(controller); + pullIntoDescriptor.bytesFilled += size; + } + + function ReadableByteStreamControllerHandleQueueDrain(controller) { + if (controller._queueTotalSize === 0 && controller._closeRequested) { + ReadableByteStreamControllerClearAlgorithms(controller); + ReadableStreamClose(controller._controlledReadableByteStream); + } else { + ReadableByteStreamControllerCallPullIfNeeded(controller); + } + } + + function ReadableByteStreamControllerInvalidateBYOBRequest(controller) { + if (controller._byobRequest === null) { + return; + } + controller._byobRequest._associatedReadableByteStreamController = undefined; + controller._byobRequest._view = null; + controller._byobRequest = null; + } + + function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) { + while (controller._pendingPullIntos.length > 0) { + if (controller._queueTotalSize === 0) { + return; + } + var pullIntoDescriptor = controller._pendingPullIntos.peek(); + if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) { + ReadableByteStreamControllerShiftPendingPullInto(controller); + ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor); + } + } + } + + function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) { + var stream = controller._controlledReadableByteStream; + var elementSize = 1; + if (view.constructor !== DataView) { + elementSize = view.constructor.BYTES_PER_ELEMENT; + } + var ctor = view.constructor; + var buffer = TransferArrayBuffer(view.buffer); + var pullIntoDescriptor = { + buffer: buffer, + byteOffset: view.byteOffset, + byteLength: view.byteLength, + bytesFilled: 0, + elementSize: elementSize, + viewConstructor: ctor, + readerType: 'byob' + }; + if (controller._pendingPullIntos.length > 0) { + controller._pendingPullIntos.push(pullIntoDescriptor); + ReadableStreamAddReadIntoRequest(stream, readIntoRequest); + return; + } + if (stream._state === 'closed') { + var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); + readIntoRequest._closeSteps(emptyView); + return; + } + if (controller._queueTotalSize > 0) { + if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) { + var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); + ReadableByteStreamControllerHandleQueueDrain(controller); + readIntoRequest._chunkSteps(filledView); + return; + } + if (controller._closeRequested) { + var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); + ReadableByteStreamControllerError(controller, e); + readIntoRequest._errorSteps(e); + return; + } + } + controller._pendingPullIntos.push(pullIntoDescriptor); + ReadableStreamAddReadIntoRequest(stream, readIntoRequest); + ReadableByteStreamControllerCallPullIfNeeded(controller); + } + + function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) { + firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer); + var stream = controller._controlledReadableByteStream; + if (ReadableStreamHasBYOBReader(stream)) { + while (ReadableStreamGetNumReadIntoRequests(stream) > 0) { + var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller); + ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor); + } + } + } + + function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) { + if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) { + throw new RangeError('bytesWritten out of range'); + } + ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor); + if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) { + return; + } + ReadableByteStreamControllerShiftPendingPullInto(controller); + var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize; + if (remainderSize > 0) { + var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; + var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end); + ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength); + } + pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); + pullIntoDescriptor.bytesFilled -= remainderSize; + ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor); + ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); + } + + function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) { + var firstDescriptor = controller._pendingPullIntos.peek(); + var state = controller._controlledReadableByteStream._state; + if (state === 'closed') { + if (bytesWritten !== 0) { + throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream'); + } + ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor); + } else { + ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); + } + ReadableByteStreamControllerCallPullIfNeeded(controller); + } + + function ReadableByteStreamControllerShiftPendingPullInto(controller) { + var descriptor = controller._pendingPullIntos.shift(); + ReadableByteStreamControllerInvalidateBYOBRequest(controller); + return descriptor; + } + + function ReadableByteStreamControllerShouldCallPull(controller) { + var stream = controller._controlledReadableByteStream; + if (stream._state !== 'readable') { + return false; + } + if (controller._closeRequested) { + return false; + } + if (!controller._started) { + return false; + } + if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { + return true; + } + if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) { + return true; + } + var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller); + if (desiredSize > 0) { + return true; + } + return false; + } + + function ReadableByteStreamControllerClearAlgorithms(controller) { + controller._pullAlgorithm = undefined; + controller._cancelAlgorithm = undefined; + } + + function ReadableByteStreamControllerClose(controller) { + var stream = controller._controlledReadableByteStream; + if (controller._closeRequested || stream._state !== 'readable') { + return; + } + if (controller._queueTotalSize > 0) { + controller._closeRequested = true; + return; + } + if (controller._pendingPullIntos.length > 0) { + var firstPendingPullInto = controller._pendingPullIntos.peek(); + if (firstPendingPullInto.bytesFilled > 0) { + var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); + ReadableByteStreamControllerError(controller, e); + throw e; + } + } + ReadableByteStreamControllerClearAlgorithms(controller); + ReadableStreamClose(stream); + } + + function ReadableByteStreamControllerEnqueue(controller, chunk) { + var stream = controller._controlledReadableByteStream; + if (controller._closeRequested || stream._state !== 'readable') { + return; + } + var buffer = chunk.buffer; + var byteOffset = chunk.byteOffset; + var byteLength = chunk.byteLength; + var transferredBuffer = TransferArrayBuffer(buffer); + if (ReadableStreamHasDefaultReader(stream)) { + if (ReadableStreamGetNumReadRequests(stream) === 0) { + ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); + } else { + var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength); + ReadableStreamFulfillReadRequest(stream, transferredView, false); + } + } else if (ReadableStreamHasBYOBReader(stream)) { + ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); + ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); + } else { + ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); + } + ReadableByteStreamControllerCallPullIfNeeded(controller); + } + + function ReadableByteStreamControllerError(controller, e) { + var stream = controller._controlledReadableByteStream; + if (stream._state !== 'readable') { + return; + } + ReadableByteStreamControllerClearPendingPullIntos(controller); + ResetQueue(controller); + ReadableByteStreamControllerClearAlgorithms(controller); + ReadableStreamError(stream, e); + } + + function ReadableByteStreamControllerGetDesiredSize(controller) { + var state = controller._controlledReadableByteStream._state; + if (state === 'errored') { + return null; + } + if (state === 'closed') { + return 0; + } + return controller._strategyHWM - controller._queueTotalSize; + } + + function ReadableByteStreamControllerRespond(controller, bytesWritten) { + bytesWritten = Number(bytesWritten); + if (!IsFiniteNonNegativeNumber(bytesWritten)) { + throw new RangeError('bytesWritten must be a finite'); + } + ReadableByteStreamControllerRespondInternal(controller, bytesWritten); + } + + function ReadableByteStreamControllerRespondWithNewView(controller, view) { + var firstDescriptor = controller._pendingPullIntos.peek(); + if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) { + throw new RangeError('The region specified by view does not match byobRequest'); + } + if (firstDescriptor.byteLength !== view.byteLength) { + throw new RangeError('The buffer of view has different capacity than byobRequest'); + } + firstDescriptor.buffer = view.buffer; + ReadableByteStreamControllerRespondInternal(controller, view.byteLength); + } + + function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) { + controller._controlledReadableByteStream = stream; + controller._pullAgain = false; + controller._pulling = false; + controller._byobRequest = null; + controller._queue = controller._queueTotalSize = undefined; + ResetQueue(controller); + controller._closeRequested = false; + controller._started = false; + controller._strategyHWM = highWaterMark; + controller._pullAlgorithm = pullAlgorithm; + controller._cancelAlgorithm = cancelAlgorithm; + controller._autoAllocateChunkSize = autoAllocateChunkSize; + controller._pendingPullIntos = new SimpleQueue(); + stream._readableStreamController = controller; + var startResult = startAlgorithm(); + uponPromise(promiseResolvedWith(startResult), function () { + controller._started = true; + ReadableByteStreamControllerCallPullIfNeeded(controller); + }, function (r) { + ReadableByteStreamControllerError(controller, r); + }); + } + + function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) { + var controller = Object.create(ReadableByteStreamController.prototype); + var startAlgorithm = function () { + return undefined; + }; + var pullAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + var cancelAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + if (underlyingByteSource.start !== undefined) { + startAlgorithm = function () { + return underlyingByteSource.start(controller); + }; + } + if (underlyingByteSource.pull !== undefined) { + pullAlgorithm = function () { + return underlyingByteSource.pull(controller); + }; + } + if (underlyingByteSource.cancel !== undefined) { + cancelAlgorithm = function (reason) { + return underlyingByteSource.cancel(reason); + }; + } + var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; + if (autoAllocateChunkSize === 0) { + throw new TypeError('autoAllocateChunkSize must be greater than 0'); + } + SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize); + } + + function SetUpReadableStreamBYOBRequest(request, controller, view) { + request._associatedReadableByteStreamController = controller; + request._view = view; + } + + function byobRequestBrandCheckException(name) { + return new TypeError("ReadableStreamBYOBRequest.prototype." + name + " can only be used on a ReadableStreamBYOBRequest"); + } + + function byteStreamControllerBrandCheckException(name) { + return new TypeError("ReadableByteStreamController.prototype." + name + " can only be used on a ReadableByteStreamController"); + } + + function AcquireReadableStreamBYOBReader(stream) { + return new ReadableStreamBYOBReader(stream); + } + + function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) { + stream._reader._readIntoRequests.push(readIntoRequest); + } + + function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) { + var reader = stream._reader; + var readIntoRequest = reader._readIntoRequests.shift(); + if (done) { + readIntoRequest._closeSteps(chunk); + } else { + readIntoRequest._chunkSteps(chunk); + } + } + + function ReadableStreamGetNumReadIntoRequests(stream) { + return stream._reader._readIntoRequests.length; + } + + function ReadableStreamHasBYOBReader(stream) { + var reader = stream._reader; + if (reader === undefined) { + return false; + } + if (!IsReadableStreamBYOBReader(reader)) { + return false; + } + return true; + } + + var ReadableStreamBYOBReader = function () { + function ReadableStreamBYOBReader(stream) { + assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader'); + assertReadableStream(stream, 'First parameter'); + if (IsReadableStreamLocked(stream)) { + throw new TypeError('This stream has already been locked for exclusive reading by another reader'); + } + if (!IsReadableByteStreamController(stream._readableStreamController)) { + throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source'); + } + ReadableStreamReaderGenericInitialize(this, stream); + this._readIntoRequests = new SimpleQueue(); + } + + Object.defineProperty(ReadableStreamBYOBReader.prototype, "closed", { + get: function () { + if (!IsReadableStreamBYOBReader(this)) { + return promiseRejectedWith(byobReaderBrandCheckException('closed')); + } + return this._closedPromise; + }, + enumerable: false, + configurable: true + }); + ReadableStreamBYOBReader.prototype.cancel = function (reason) { + if (reason === void 0) { + reason = undefined; + } + if (!IsReadableStreamBYOBReader(this)) { + return promiseRejectedWith(byobReaderBrandCheckException('cancel')); + } + if (this._ownerReadableStream === undefined) { + return promiseRejectedWith(readerLockException('cancel')); + } + return ReadableStreamReaderGenericCancel(this, reason); + }; + ReadableStreamBYOBReader.prototype.read = function (view) { + if (!IsReadableStreamBYOBReader(this)) { + return promiseRejectedWith(byobReaderBrandCheckException('read')); + } + if (!ArrayBuffer.isView(view)) { + return promiseRejectedWith(new TypeError('view must be an array buffer view')); + } + if (view.byteLength === 0) { + return promiseRejectedWith(new TypeError('view must have non-zero byteLength')); + } + if (view.buffer.byteLength === 0) { + return promiseRejectedWith(new TypeError("view's buffer must have non-zero byteLength")); + } + if (this._ownerReadableStream === undefined) { + return promiseRejectedWith(readerLockException('read from')); + } + var resolvePromise; + var rejectPromise; + var promise = newPromise(function (resolve, reject) { + resolvePromise = resolve; + rejectPromise = reject; + }); + var readIntoRequest = { + _chunkSteps: function (chunk) { + return resolvePromise({ + value: chunk, + done: false + }); + }, + _closeSteps: function (chunk) { + return resolvePromise({ + value: chunk, + done: true + }); + }, + _errorSteps: function (e) { + return rejectPromise(e); + } + }; + ReadableStreamBYOBReaderRead(this, view, readIntoRequest); + return promise; + }; + ReadableStreamBYOBReader.prototype.releaseLock = function () { + if (!IsReadableStreamBYOBReader(this)) { + throw byobReaderBrandCheckException('releaseLock'); + } + if (this._ownerReadableStream === undefined) { + return; + } + if (this._readIntoRequests.length > 0) { + throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); + } + ReadableStreamReaderGenericRelease(this); + }; + return ReadableStreamBYOBReader; + }(); + Object.defineProperties(ReadableStreamBYOBReader.prototype, { + cancel: {enumerable: true}, + read: {enumerable: true}, + releaseLock: {enumerable: true}, + closed: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, { + value: 'ReadableStreamBYOBReader', + configurable: true + }); + } + + function IsReadableStreamBYOBReader(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) { + return false; + } + return true; + } + + function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) { + var stream = reader._ownerReadableStream; + stream._disturbed = true; + if (stream._state === 'errored') { + readIntoRequest._errorSteps(stream._storedError); + } else { + ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest); + } + } + + function byobReaderBrandCheckException(name) { + return new TypeError("ReadableStreamBYOBReader.prototype." + name + " can only be used on a ReadableStreamBYOBReader"); + } + + function ExtractHighWaterMark(strategy, defaultHWM) { + var highWaterMark = strategy.highWaterMark; + if (highWaterMark === undefined) { + return defaultHWM; + } + if (NumberIsNaN(highWaterMark) || highWaterMark < 0) { + throw new RangeError('Invalid highWaterMark'); + } + return highWaterMark; + } + + function ExtractSizeAlgorithm(strategy) { + var size = strategy.size; + if (!size) { + return function () { + return 1; + }; + } + return size; + } + + function convertQueuingStrategy(init, context) { + assertDictionary(init, context); + var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark; + var size = init === null || init === void 0 ? void 0 : init.size; + return { + highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark), + size: size === undefined ? undefined : convertQueuingStrategySize(size, context + " has member 'size' that") + }; + } + + function convertQueuingStrategySize(fn, context) { + assertFunction(fn, context); + return function (chunk) { + return convertUnrestrictedDouble(fn(chunk)); + }; + } + + function convertUnderlyingSink(original, context) { + assertDictionary(original, context); + var abort = original === null || original === void 0 ? void 0 : original.abort; + var close = original === null || original === void 0 ? void 0 : original.close; + var start = original === null || original === void 0 ? void 0 : original.start; + var type = original === null || original === void 0 ? void 0 : original.type; + var write = original === null || original === void 0 ? void 0 : original.write; + return { + abort: abort === undefined ? undefined : convertUnderlyingSinkAbortCallback(abort, original, context + " has member 'abort' that"), + close: close === undefined ? undefined : convertUnderlyingSinkCloseCallback(close, original, context + " has member 'close' that"), + start: start === undefined ? undefined : convertUnderlyingSinkStartCallback(start, original, context + " has member 'start' that"), + write: write === undefined ? undefined : convertUnderlyingSinkWriteCallback(write, original, context + " has member 'write' that"), + type: type + }; + } + + function convertUnderlyingSinkAbortCallback(fn, original, context) { + assertFunction(fn, context); + return function (reason) { + return promiseCall(fn, original, [reason]); + }; + } + + function convertUnderlyingSinkCloseCallback(fn, original, context) { + assertFunction(fn, context); + return function () { + return promiseCall(fn, original, []); + }; + } + + function convertUnderlyingSinkStartCallback(fn, original, context) { + assertFunction(fn, context); + return function (controller) { + return reflectCall(fn, original, [controller]); + }; + } + + function convertUnderlyingSinkWriteCallback(fn, original, context) { + assertFunction(fn, context); + return function (chunk, controller) { + return promiseCall(fn, original, [ + chunk, + controller + ]); + }; + } + + function assertWritableStream(x, context) { + if (!IsWritableStream(x)) { + throw new TypeError(context + " is not a WritableStream."); + } + } + + var WritableStream = function () { + function WritableStream(rawUnderlyingSink, rawStrategy) { + if (rawUnderlyingSink === void 0) { + rawUnderlyingSink = {}; + } + if (rawStrategy === void 0) { + rawStrategy = {}; + } + if (rawUnderlyingSink === undefined) { + rawUnderlyingSink = null; + } else { + assertObject(rawUnderlyingSink, 'First parameter'); + } + var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter'); + var underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter'); + InitializeWritableStream(this); + var type = underlyingSink.type; + if (type !== undefined) { + throw new RangeError('Invalid type is specified'); + } + var sizeAlgorithm = ExtractSizeAlgorithm(strategy); + var highWaterMark = ExtractHighWaterMark(strategy, 1); + SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm); + } + + Object.defineProperty(WritableStream.prototype, "locked", { + get: function () { + if (!IsWritableStream(this)) { + throw streamBrandCheckException('locked'); + } + return IsWritableStreamLocked(this); + }, + enumerable: false, + configurable: true + }); + WritableStream.prototype.abort = function (reason) { + if (reason === void 0) { + reason = undefined; + } + if (!IsWritableStream(this)) { + return promiseRejectedWith(streamBrandCheckException('abort')); + } + if (IsWritableStreamLocked(this)) { + return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer')); + } + return WritableStreamAbort(this, reason); + }; + WritableStream.prototype.close = function () { + if (!IsWritableStream(this)) { + return promiseRejectedWith(streamBrandCheckException('close')); + } + if (IsWritableStreamLocked(this)) { + return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer')); + } + if (WritableStreamCloseQueuedOrInFlight(this)) { + return promiseRejectedWith(new TypeError('Cannot close an already-closing stream')); + } + return WritableStreamClose(this); + }; + WritableStream.prototype.getWriter = function () { + if (!IsWritableStream(this)) { + throw streamBrandCheckException('getWriter'); + } + return AcquireWritableStreamDefaultWriter(this); + }; + return WritableStream; + }(); + Object.defineProperties(WritableStream.prototype, { + abort: {enumerable: true}, + close: {enumerable: true}, + getWriter: {enumerable: true}, + locked: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, { + value: 'WritableStream', + configurable: true + }); + } + + function AcquireWritableStreamDefaultWriter(stream) { + return new WritableStreamDefaultWriter(stream); + } + + function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) { + if (highWaterMark === void 0) { + highWaterMark = 1; + } + if (sizeAlgorithm === void 0) { + sizeAlgorithm = function () { + return 1; + }; + } + var stream = Object.create(WritableStream.prototype); + InitializeWritableStream(stream); + var controller = Object.create(WritableStreamDefaultController.prototype); + SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm); + return stream; + } + + function InitializeWritableStream(stream) { + stream._state = 'writable'; + stream._storedError = undefined; + stream._writer = undefined; + stream._writableStreamController = undefined; + stream._writeRequests = new SimpleQueue(); + stream._inFlightWriteRequest = undefined; + stream._closeRequest = undefined; + stream._inFlightCloseRequest = undefined; + stream._pendingAbortRequest = undefined; + stream._backpressure = false; + } + + function IsWritableStream(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) { + return false; + } + return true; + } + + function IsWritableStreamLocked(stream) { + if (stream._writer === undefined) { + return false; + } + return true; + } + + function WritableStreamAbort(stream, reason) { + var state = stream._state; + if (state === 'closed' || state === 'errored') { + return promiseResolvedWith(undefined); + } + if (stream._pendingAbortRequest !== undefined) { + return stream._pendingAbortRequest._promise; + } + var wasAlreadyErroring = false; + if (state === 'erroring') { + wasAlreadyErroring = true; + reason = undefined; + } + var promise = newPromise(function (resolve, reject) { + stream._pendingAbortRequest = { + _promise: undefined, + _resolve: resolve, + _reject: reject, + _reason: reason, + _wasAlreadyErroring: wasAlreadyErroring + }; + }); + stream._pendingAbortRequest._promise = promise; + if (!wasAlreadyErroring) { + WritableStreamStartErroring(stream, reason); + } + return promise; + } + + function WritableStreamClose(stream) { + var state = stream._state; + if (state === 'closed' || state === 'errored') { + return promiseRejectedWith(new TypeError("The stream (in " + state + " state) is not in the writable state and cannot be closed")); + } + var promise = newPromise(function (resolve, reject) { + var closeRequest = { + _resolve: resolve, + _reject: reject + }; + stream._closeRequest = closeRequest; + }); + var writer = stream._writer; + if (writer !== undefined && stream._backpressure && state === 'writable') { + defaultWriterReadyPromiseResolve(writer); + } + WritableStreamDefaultControllerClose(stream._writableStreamController); + return promise; + } + + function WritableStreamAddWriteRequest(stream) { + var promise = newPromise(function (resolve, reject) { + var writeRequest = { + _resolve: resolve, + _reject: reject + }; + stream._writeRequests.push(writeRequest); + }); + return promise; + } + + function WritableStreamDealWithRejection(stream, error) { + var state = stream._state; + if (state === 'writable') { + WritableStreamStartErroring(stream, error); + return; + } + WritableStreamFinishErroring(stream); + } + + function WritableStreamStartErroring(stream, reason) { + var controller = stream._writableStreamController; + stream._state = 'erroring'; + stream._storedError = reason; + var writer = stream._writer; + if (writer !== undefined) { + WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); + } + if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) { + WritableStreamFinishErroring(stream); + } + } + + function WritableStreamFinishErroring(stream) { + stream._state = 'errored'; + stream._writableStreamController[ErrorSteps](); + var storedError = stream._storedError; + stream._writeRequests.forEach(function (writeRequest) { + writeRequest._reject(storedError); + }); + stream._writeRequests = new SimpleQueue(); + if (stream._pendingAbortRequest === undefined) { + WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); + return; + } + var abortRequest = stream._pendingAbortRequest; + stream._pendingAbortRequest = undefined; + if (abortRequest._wasAlreadyErroring) { + abortRequest._reject(storedError); + WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); + return; + } + var promise = stream._writableStreamController[AbortSteps](abortRequest._reason); + uponPromise(promise, function () { + abortRequest._resolve(); + WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); + }, function (reason) { + abortRequest._reject(reason); + WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); + }); + } + + function WritableStreamFinishInFlightWrite(stream) { + stream._inFlightWriteRequest._resolve(undefined); + stream._inFlightWriteRequest = undefined; + } + + function WritableStreamFinishInFlightWriteWithError(stream, error) { + stream._inFlightWriteRequest._reject(error); + stream._inFlightWriteRequest = undefined; + WritableStreamDealWithRejection(stream, error); + } + + function WritableStreamFinishInFlightClose(stream) { + stream._inFlightCloseRequest._resolve(undefined); + stream._inFlightCloseRequest = undefined; + var state = stream._state; + if (state === 'erroring') { + stream._storedError = undefined; + if (stream._pendingAbortRequest !== undefined) { + stream._pendingAbortRequest._resolve(); + stream._pendingAbortRequest = undefined; + } + } + stream._state = 'closed'; + var writer = stream._writer; + if (writer !== undefined) { + defaultWriterClosedPromiseResolve(writer); + } + } + + function WritableStreamFinishInFlightCloseWithError(stream, error) { + stream._inFlightCloseRequest._reject(error); + stream._inFlightCloseRequest = undefined; + if (stream._pendingAbortRequest !== undefined) { + stream._pendingAbortRequest._reject(error); + stream._pendingAbortRequest = undefined; + } + WritableStreamDealWithRejection(stream, error); + } + + function WritableStreamCloseQueuedOrInFlight(stream) { + if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { + return false; + } + return true; + } + + function WritableStreamHasOperationMarkedInFlight(stream) { + if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { + return false; + } + return true; + } + + function WritableStreamMarkCloseRequestInFlight(stream) { + stream._inFlightCloseRequest = stream._closeRequest; + stream._closeRequest = undefined; + } + + function WritableStreamMarkFirstWriteRequestInFlight(stream) { + stream._inFlightWriteRequest = stream._writeRequests.shift(); + } + + function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { + if (stream._closeRequest !== undefined) { + stream._closeRequest._reject(stream._storedError); + stream._closeRequest = undefined; + } + var writer = stream._writer; + if (writer !== undefined) { + defaultWriterClosedPromiseReject(writer, stream._storedError); + } + } + + function WritableStreamUpdateBackpressure(stream, backpressure) { + var writer = stream._writer; + if (writer !== undefined && backpressure !== stream._backpressure) { + if (backpressure) { + defaultWriterReadyPromiseReset(writer); + } else { + defaultWriterReadyPromiseResolve(writer); + } + } + stream._backpressure = backpressure; + } + + var WritableStreamDefaultWriter = function () { + function WritableStreamDefaultWriter(stream) { + assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter'); + assertWritableStream(stream, 'First parameter'); + if (IsWritableStreamLocked(stream)) { + throw new TypeError('This stream has already been locked for exclusive writing by another writer'); + } + this._ownerWritableStream = stream; + stream._writer = this; + var state = stream._state; + if (state === 'writable') { + if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) { + defaultWriterReadyPromiseInitialize(this); + } else { + defaultWriterReadyPromiseInitializeAsResolved(this); + } + defaultWriterClosedPromiseInitialize(this); + } else if (state === 'erroring') { + defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); + defaultWriterClosedPromiseInitialize(this); + } else if (state === 'closed') { + defaultWriterReadyPromiseInitializeAsResolved(this); + defaultWriterClosedPromiseInitializeAsResolved(this); + } else { + var storedError = stream._storedError; + defaultWriterReadyPromiseInitializeAsRejected(this, storedError); + defaultWriterClosedPromiseInitializeAsRejected(this, storedError); + } + } + + Object.defineProperty(WritableStreamDefaultWriter.prototype, "closed", { + get: function () { + if (!IsWritableStreamDefaultWriter(this)) { + return promiseRejectedWith(defaultWriterBrandCheckException('closed')); + } + return this._closedPromise; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WritableStreamDefaultWriter.prototype, "desiredSize", { + get: function () { + if (!IsWritableStreamDefaultWriter(this)) { + throw defaultWriterBrandCheckException('desiredSize'); + } + if (this._ownerWritableStream === undefined) { + throw defaultWriterLockException('desiredSize'); + } + return WritableStreamDefaultWriterGetDesiredSize(this); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(WritableStreamDefaultWriter.prototype, "ready", { + get: function () { + if (!IsWritableStreamDefaultWriter(this)) { + return promiseRejectedWith(defaultWriterBrandCheckException('ready')); + } + return this._readyPromise; + }, + enumerable: false, + configurable: true + }); + WritableStreamDefaultWriter.prototype.abort = function (reason) { + if (reason === void 0) { + reason = undefined; + } + if (!IsWritableStreamDefaultWriter(this)) { + return promiseRejectedWith(defaultWriterBrandCheckException('abort')); + } + if (this._ownerWritableStream === undefined) { + return promiseRejectedWith(defaultWriterLockException('abort')); + } + return WritableStreamDefaultWriterAbort(this, reason); + }; + WritableStreamDefaultWriter.prototype.close = function () { + if (!IsWritableStreamDefaultWriter(this)) { + return promiseRejectedWith(defaultWriterBrandCheckException('close')); + } + var stream = this._ownerWritableStream; + if (stream === undefined) { + return promiseRejectedWith(defaultWriterLockException('close')); + } + if (WritableStreamCloseQueuedOrInFlight(stream)) { + return promiseRejectedWith(new TypeError('Cannot close an already-closing stream')); + } + return WritableStreamDefaultWriterClose(this); + }; + WritableStreamDefaultWriter.prototype.releaseLock = function () { + if (!IsWritableStreamDefaultWriter(this)) { + throw defaultWriterBrandCheckException('releaseLock'); + } + var stream = this._ownerWritableStream; + if (stream === undefined) { + return; + } + WritableStreamDefaultWriterRelease(this); + }; + WritableStreamDefaultWriter.prototype.write = function (chunk) { + if (chunk === void 0) { + chunk = undefined; + } + if (!IsWritableStreamDefaultWriter(this)) { + return promiseRejectedWith(defaultWriterBrandCheckException('write')); + } + if (this._ownerWritableStream === undefined) { + return promiseRejectedWith(defaultWriterLockException('write to')); + } + return WritableStreamDefaultWriterWrite(this, chunk); + }; + return WritableStreamDefaultWriter; + }(); + Object.defineProperties(WritableStreamDefaultWriter.prototype, { + abort: {enumerable: true}, + close: {enumerable: true}, + releaseLock: {enumerable: true}, + write: {enumerable: true}, + closed: {enumerable: true}, + desiredSize: {enumerable: true}, + ready: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, { + value: 'WritableStreamDefaultWriter', + configurable: true + }); + } + + function IsWritableStreamDefaultWriter(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) { + return false; + } + return true; + } + + function WritableStreamDefaultWriterAbort(writer, reason) { + var stream = writer._ownerWritableStream; + return WritableStreamAbort(stream, reason); + } + + function WritableStreamDefaultWriterClose(writer) { + var stream = writer._ownerWritableStream; + return WritableStreamClose(stream); + } + + function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { + var stream = writer._ownerWritableStream; + var state = stream._state; + if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') { + return promiseResolvedWith(undefined); + } + if (state === 'errored') { + return promiseRejectedWith(stream._storedError); + } + return WritableStreamDefaultWriterClose(writer); + } + + function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { + if (writer._closedPromiseState === 'pending') { + defaultWriterClosedPromiseReject(writer, error); + } else { + defaultWriterClosedPromiseResetToRejected(writer, error); + } + } + + function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { + if (writer._readyPromiseState === 'pending') { + defaultWriterReadyPromiseReject(writer, error); + } else { + defaultWriterReadyPromiseResetToRejected(writer, error); + } + } + + function WritableStreamDefaultWriterGetDesiredSize(writer) { + var stream = writer._ownerWritableStream; + var state = stream._state; + if (state === 'errored' || state === 'erroring') { + return null; + } + if (state === 'closed') { + return 0; + } + return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController); + } + + function WritableStreamDefaultWriterRelease(writer) { + var stream = writer._ownerWritableStream; + var releasedError = new TypeError("Writer was released and can no longer be used to monitor the stream's closedness"); + WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); + WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); + stream._writer = undefined; + writer._ownerWritableStream = undefined; + } + + function WritableStreamDefaultWriterWrite(writer, chunk) { + var stream = writer._ownerWritableStream; + var controller = stream._writableStreamController; + var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); + if (stream !== writer._ownerWritableStream) { + return promiseRejectedWith(defaultWriterLockException('write to')); + } + var state = stream._state; + if (state === 'errored') { + return promiseRejectedWith(stream._storedError); + } + if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') { + return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to')); + } + if (state === 'erroring') { + return promiseRejectedWith(stream._storedError); + } + var promise = WritableStreamAddWriteRequest(stream); + WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); + return promise; + } + + var closeSentinel = {}; + var WritableStreamDefaultController = function () { + function WritableStreamDefaultController() { + throw new TypeError('Illegal constructor'); + } + + WritableStreamDefaultController.prototype.error = function (e) { + if (e === void 0) { + e = undefined; + } + if (!IsWritableStreamDefaultController(this)) { + throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController'); + } + var state = this._controlledWritableStream._state; + if (state !== 'writable') { + return; + } + WritableStreamDefaultControllerError(this, e); + }; + WritableStreamDefaultController.prototype[AbortSteps] = function (reason) { + var result = this._abortAlgorithm(reason); + WritableStreamDefaultControllerClearAlgorithms(this); + return result; + }; + WritableStreamDefaultController.prototype[ErrorSteps] = function () { + ResetQueue(this); + }; + return WritableStreamDefaultController; + }(); + Object.defineProperties(WritableStreamDefaultController.prototype, {error: {enumerable: true}}); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { + value: 'WritableStreamDefaultController', + configurable: true + }); + } + + function IsWritableStreamDefaultController(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) { + return false; + } + return true; + } + + function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) { + controller._controlledWritableStream = stream; + stream._writableStreamController = controller; + controller._queue = undefined; + controller._queueTotalSize = undefined; + ResetQueue(controller); + controller._started = false; + controller._strategySizeAlgorithm = sizeAlgorithm; + controller._strategyHWM = highWaterMark; + controller._writeAlgorithm = writeAlgorithm; + controller._closeAlgorithm = closeAlgorithm; + controller._abortAlgorithm = abortAlgorithm; + var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); + WritableStreamUpdateBackpressure(stream, backpressure); + var startResult = startAlgorithm(); + var startPromise = promiseResolvedWith(startResult); + uponPromise(startPromise, function () { + controller._started = true; + WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); + }, function (r) { + controller._started = true; + WritableStreamDealWithRejection(stream, r); + }); + } + + function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) { + var controller = Object.create(WritableStreamDefaultController.prototype); + var startAlgorithm = function () { + return undefined; + }; + var writeAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + var closeAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + var abortAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + if (underlyingSink.start !== undefined) { + startAlgorithm = function () { + return underlyingSink.start(controller); + }; + } + if (underlyingSink.write !== undefined) { + writeAlgorithm = function (chunk) { + return underlyingSink.write(chunk, controller); + }; + } + if (underlyingSink.close !== undefined) { + closeAlgorithm = function () { + return underlyingSink.close(); + }; + } + if (underlyingSink.abort !== undefined) { + abortAlgorithm = function (reason) { + return underlyingSink.abort(reason); + }; + } + SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm); + } + + function WritableStreamDefaultControllerClearAlgorithms(controller) { + controller._writeAlgorithm = undefined; + controller._closeAlgorithm = undefined; + controller._abortAlgorithm = undefined; + controller._strategySizeAlgorithm = undefined; + } + + function WritableStreamDefaultControllerClose(controller) { + EnqueueValueWithSize(controller, closeSentinel, 0); + WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); + } + + function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { + try { + return controller._strategySizeAlgorithm(chunk); + } catch (chunkSizeE) { + WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); + return 1; + } + } + + function WritableStreamDefaultControllerGetDesiredSize(controller) { + return controller._strategyHWM - controller._queueTotalSize; + } + + function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { + try { + EnqueueValueWithSize(controller, chunk, chunkSize); + } catch (enqueueE) { + WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); + return; + } + var stream = controller._controlledWritableStream; + if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') { + var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); + WritableStreamUpdateBackpressure(stream, backpressure); + } + WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); + } + + function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { + var stream = controller._controlledWritableStream; + if (!controller._started) { + return; + } + if (stream._inFlightWriteRequest !== undefined) { + return; + } + var state = stream._state; + if (state === 'erroring') { + WritableStreamFinishErroring(stream); + return; + } + if (controller._queue.length === 0) { + return; + } + var value = PeekQueueValue(controller); + if (value === closeSentinel) { + WritableStreamDefaultControllerProcessClose(controller); + } else { + WritableStreamDefaultControllerProcessWrite(controller, value); + } + } + + function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { + if (controller._controlledWritableStream._state === 'writable') { + WritableStreamDefaultControllerError(controller, error); + } + } + + function WritableStreamDefaultControllerProcessClose(controller) { + var stream = controller._controlledWritableStream; + WritableStreamMarkCloseRequestInFlight(stream); + DequeueValue(controller); + var sinkClosePromise = controller._closeAlgorithm(); + WritableStreamDefaultControllerClearAlgorithms(controller); + uponPromise(sinkClosePromise, function () { + WritableStreamFinishInFlightClose(stream); + }, function (reason) { + WritableStreamFinishInFlightCloseWithError(stream, reason); + }); + } + + function WritableStreamDefaultControllerProcessWrite(controller, chunk) { + var stream = controller._controlledWritableStream; + WritableStreamMarkFirstWriteRequestInFlight(stream); + var sinkWritePromise = controller._writeAlgorithm(chunk); + uponPromise(sinkWritePromise, function () { + WritableStreamFinishInFlightWrite(stream); + var state = stream._state; + DequeueValue(controller); + if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') { + var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); + WritableStreamUpdateBackpressure(stream, backpressure); + } + WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); + }, function (reason) { + if (stream._state === 'writable') { + WritableStreamDefaultControllerClearAlgorithms(controller); + } + WritableStreamFinishInFlightWriteWithError(stream, reason); + }); + } + + function WritableStreamDefaultControllerGetBackpressure(controller) { + var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); + return desiredSize <= 0; + } + + function WritableStreamDefaultControllerError(controller, error) { + var stream = controller._controlledWritableStream; + WritableStreamDefaultControllerClearAlgorithms(controller); + WritableStreamStartErroring(stream, error); + } + + function streamBrandCheckException(name) { + return new TypeError("WritableStream.prototype." + name + " can only be used on a WritableStream"); + } + + function defaultWriterBrandCheckException(name) { + return new TypeError("WritableStreamDefaultWriter.prototype." + name + " can only be used on a WritableStreamDefaultWriter"); + } + + function defaultWriterLockException(name) { + return new TypeError('Cannot ' + name + ' a stream using a released writer'); + } + + function defaultWriterClosedPromiseInitialize(writer) { + writer._closedPromise = newPromise(function (resolve, reject) { + writer._closedPromise_resolve = resolve; + writer._closedPromise_reject = reject; + writer._closedPromiseState = 'pending'; + }); + } + + function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { + defaultWriterClosedPromiseInitialize(writer); + defaultWriterClosedPromiseReject(writer, reason); + } + + function defaultWriterClosedPromiseInitializeAsResolved(writer) { + defaultWriterClosedPromiseInitialize(writer); + defaultWriterClosedPromiseResolve(writer); + } + + function defaultWriterClosedPromiseReject(writer, reason) { + if (writer._closedPromise_reject === undefined) { + return; + } + setPromiseIsHandledToTrue(writer._closedPromise); + writer._closedPromise_reject(reason); + writer._closedPromise_resolve = undefined; + writer._closedPromise_reject = undefined; + writer._closedPromiseState = 'rejected'; + } + + function defaultWriterClosedPromiseResetToRejected(writer, reason) { + defaultWriterClosedPromiseInitializeAsRejected(writer, reason); + } + + function defaultWriterClosedPromiseResolve(writer) { + if (writer._closedPromise_resolve === undefined) { + return; + } + writer._closedPromise_resolve(undefined); + writer._closedPromise_resolve = undefined; + writer._closedPromise_reject = undefined; + writer._closedPromiseState = 'resolved'; + } + + function defaultWriterReadyPromiseInitialize(writer) { + writer._readyPromise = newPromise(function (resolve, reject) { + writer._readyPromise_resolve = resolve; + writer._readyPromise_reject = reject; + }); + writer._readyPromiseState = 'pending'; + } + + function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { + defaultWriterReadyPromiseInitialize(writer); + defaultWriterReadyPromiseReject(writer, reason); + } + + function defaultWriterReadyPromiseInitializeAsResolved(writer) { + defaultWriterReadyPromiseInitialize(writer); + defaultWriterReadyPromiseResolve(writer); + } + + function defaultWriterReadyPromiseReject(writer, reason) { + if (writer._readyPromise_reject === undefined) { + return; + } + setPromiseIsHandledToTrue(writer._readyPromise); + writer._readyPromise_reject(reason); + writer._readyPromise_resolve = undefined; + writer._readyPromise_reject = undefined; + writer._readyPromiseState = 'rejected'; + } + + function defaultWriterReadyPromiseReset(writer) { + defaultWriterReadyPromiseInitialize(writer); + } + + function defaultWriterReadyPromiseResetToRejected(writer, reason) { + defaultWriterReadyPromiseInitializeAsRejected(writer, reason); + } + + function defaultWriterReadyPromiseResolve(writer) { + if (writer._readyPromise_resolve === undefined) { + return; + } + writer._readyPromise_resolve(undefined); + writer._readyPromise_resolve = undefined; + writer._readyPromise_reject = undefined; + writer._readyPromiseState = 'fulfilled'; + } + + function isAbortSignal(value) { + if (typeof value !== 'object' || value === null) { + return false; + } + try { + return typeof value.aborted === 'boolean'; + } catch (_a) { + return false; + } + } + + var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined; + + function isDOMExceptionConstructor(ctor) { + if (!(typeof ctor === 'function' || typeof ctor === 'object')) { + return false; + } + try { + new ctor(); + return true; + } catch (_a) { + return false; + } + } + + function createDOMExceptionPolyfill() { + var ctor = function DOMException(message, name) { + this.message = message || ''; + this.name = name || 'Error'; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + }; + ctor.prototype = Object.create(Error.prototype); + Object.defineProperty(ctor.prototype, 'constructor', { + value: ctor, + writable: true, + configurable: true + }); + return ctor; + } + + var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill(); + + function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) { + var reader = AcquireReadableStreamDefaultReader(source); + var writer = AcquireWritableStreamDefaultWriter(dest); + source._disturbed = true; + var shuttingDown = false; + var currentWrite = promiseResolvedWith(undefined); + return newPromise(function (resolve, reject) { + var abortAlgorithm; + if (signal !== undefined) { + abortAlgorithm = function () { + var error = new DOMException$1('Aborted', 'AbortError'); + var actions = []; + if (!preventAbort) { + actions.push(function () { + if (dest._state === 'writable') { + return WritableStreamAbort(dest, error); + } + return promiseResolvedWith(undefined); + }); + } + if (!preventCancel) { + actions.push(function () { + if (source._state === 'readable') { + return ReadableStreamCancel(source, error); + } + return promiseResolvedWith(undefined); + }); + } + shutdownWithAction(function () { + return Promise.all(actions.map(function (action) { + return action(); + })); + }, true, error); + }; + if (signal.aborted) { + abortAlgorithm(); + return; + } + signal.addEventListener('abort', abortAlgorithm); + } + + function pipeLoop() { + return newPromise(function (resolveLoop, rejectLoop) { + function next(done) { + if (done) { + resolveLoop(); + } else { + PerformPromiseThen(pipeStep(), next, rejectLoop); + } + } + + next(false); + }); + } + + function pipeStep() { + if (shuttingDown) { + return promiseResolvedWith(true); + } + return PerformPromiseThen(writer._readyPromise, function () { + return newPromise(function (resolveRead, rejectRead) { + ReadableStreamDefaultReaderRead(reader, { + _chunkSteps: function (chunk) { + currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop); + resolveRead(false); + }, + _closeSteps: function () { + return resolveRead(true); + }, + _errorSteps: rejectRead + }); + }); + }); + } + + isOrBecomesErrored(source, reader._closedPromise, function (storedError) { + if (!preventAbort) { + shutdownWithAction(function () { + return WritableStreamAbort(dest, storedError); + }, true, storedError); + } else { + shutdown(true, storedError); + } + }); + isOrBecomesErrored(dest, writer._closedPromise, function (storedError) { + if (!preventCancel) { + shutdownWithAction(function () { + return ReadableStreamCancel(source, storedError); + }, true, storedError); + } else { + shutdown(true, storedError); + } + }); + isOrBecomesClosed(source, reader._closedPromise, function () { + if (!preventClose) { + shutdownWithAction(function () { + return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); + }); + } else { + shutdown(); + } + }); + if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') { + var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it'); + if (!preventCancel) { + shutdownWithAction(function () { + return ReadableStreamCancel(source, destClosed_1); + }, true, destClosed_1); + } else { + shutdown(true, destClosed_1); + } + } + setPromiseIsHandledToTrue(pipeLoop()); + + function waitForWritesToFinish() { + var oldCurrentWrite = currentWrite; + return PerformPromiseThen(currentWrite, function () { + return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; + }); + } + + function isOrBecomesErrored(stream, promise, action) { + if (stream._state === 'errored') { + action(stream._storedError); + } else { + uponRejection(promise, action); + } + } + + function isOrBecomesClosed(stream, promise, action) { + if (stream._state === 'closed') { + action(); + } else { + uponFulfillment(promise, action); + } + } + + function shutdownWithAction(action, originalIsError, originalError) { + if (shuttingDown) { + return; + } + shuttingDown = true; + if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) { + uponFulfillment(waitForWritesToFinish(), doTheRest); + } else { + doTheRest(); + } + + function doTheRest() { + uponPromise(action(), function () { + return finalize(originalIsError, originalError); + }, function (newError) { + return finalize(true, newError); + }); + } + } + + function shutdown(isError, error) { + if (shuttingDown) { + return; + } + shuttingDown = true; + if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) { + uponFulfillment(waitForWritesToFinish(), function () { + return finalize(isError, error); + }); + } else { + finalize(isError, error); + } + } + + function finalize(isError, error) { + WritableStreamDefaultWriterRelease(writer); + ReadableStreamReaderGenericRelease(reader); + if (signal !== undefined) { + signal.removeEventListener('abort', abortAlgorithm); + } + if (isError) { + reject(error); + } else { + resolve(undefined); + } + } + }); + } + + var ReadableStreamDefaultController = function () { + function ReadableStreamDefaultController() { + throw new TypeError('Illegal constructor'); + } + + Object.defineProperty(ReadableStreamDefaultController.prototype, "desiredSize", { + get: function () { + if (!IsReadableStreamDefaultController(this)) { + throw defaultControllerBrandCheckException('desiredSize'); + } + return ReadableStreamDefaultControllerGetDesiredSize(this); + }, + enumerable: false, + configurable: true + }); + ReadableStreamDefaultController.prototype.close = function () { + if (!IsReadableStreamDefaultController(this)) { + throw defaultControllerBrandCheckException('close'); + } + if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) { + throw new TypeError('The stream is not in a state that permits close'); + } + ReadableStreamDefaultControllerClose(this); + }; + ReadableStreamDefaultController.prototype.enqueue = function (chunk) { + if (chunk === void 0) { + chunk = undefined; + } + if (!IsReadableStreamDefaultController(this)) { + throw defaultControllerBrandCheckException('enqueue'); + } + if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) { + throw new TypeError('The stream is not in a state that permits enqueue'); + } + return ReadableStreamDefaultControllerEnqueue(this, chunk); + }; + ReadableStreamDefaultController.prototype.error = function (e) { + if (e === void 0) { + e = undefined; + } + if (!IsReadableStreamDefaultController(this)) { + throw defaultControllerBrandCheckException('error'); + } + ReadableStreamDefaultControllerError(this, e); + }; + ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) { + ResetQueue(this); + var result = this._cancelAlgorithm(reason); + ReadableStreamDefaultControllerClearAlgorithms(this); + return result; + }; + ReadableStreamDefaultController.prototype[PullSteps] = function (readRequest) { + var stream = this._controlledReadableStream; + if (this._queue.length > 0) { + var chunk = DequeueValue(this); + if (this._closeRequested && this._queue.length === 0) { + ReadableStreamDefaultControllerClearAlgorithms(this); + ReadableStreamClose(stream); + } else { + ReadableStreamDefaultControllerCallPullIfNeeded(this); + } + readRequest._chunkSteps(chunk); + } else { + ReadableStreamAddReadRequest(stream, readRequest); + ReadableStreamDefaultControllerCallPullIfNeeded(this); + } + }; + return ReadableStreamDefaultController; + }(); + Object.defineProperties(ReadableStreamDefaultController.prototype, { + close: {enumerable: true}, + enqueue: {enumerable: true}, + error: {enumerable: true}, + desiredSize: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { + value: 'ReadableStreamDefaultController', + configurable: true + }); + } + + function IsReadableStreamDefaultController(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) { + return false; + } + return true; + } + + function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { + var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); + if (!shouldPull) { + return; + } + if (controller._pulling) { + controller._pullAgain = true; + return; + } + controller._pulling = true; + var pullPromise = controller._pullAlgorithm(); + uponPromise(pullPromise, function () { + controller._pulling = false; + if (controller._pullAgain) { + controller._pullAgain = false; + ReadableStreamDefaultControllerCallPullIfNeeded(controller); + } + }, function (e) { + ReadableStreamDefaultControllerError(controller, e); + }); + } + + function ReadableStreamDefaultControllerShouldCallPull(controller) { + var stream = controller._controlledReadableStream; + if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { + return false; + } + if (!controller._started) { + return false; + } + if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { + return true; + } + var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); + if (desiredSize > 0) { + return true; + } + return false; + } + + function ReadableStreamDefaultControllerClearAlgorithms(controller) { + controller._pullAlgorithm = undefined; + controller._cancelAlgorithm = undefined; + controller._strategySizeAlgorithm = undefined; + } + + function ReadableStreamDefaultControllerClose(controller) { + if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { + return; + } + var stream = controller._controlledReadableStream; + controller._closeRequested = true; + if (controller._queue.length === 0) { + ReadableStreamDefaultControllerClearAlgorithms(controller); + ReadableStreamClose(stream); + } + } + + function ReadableStreamDefaultControllerEnqueue(controller, chunk) { + if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { + return; + } + var stream = controller._controlledReadableStream; + if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { + ReadableStreamFulfillReadRequest(stream, chunk, false); + } else { + var chunkSize = void 0; + try { + chunkSize = controller._strategySizeAlgorithm(chunk); + } catch (chunkSizeE) { + ReadableStreamDefaultControllerError(controller, chunkSizeE); + throw chunkSizeE; + } + try { + EnqueueValueWithSize(controller, chunk, chunkSize); + } catch (enqueueE) { + ReadableStreamDefaultControllerError(controller, enqueueE); + throw enqueueE; + } + } + ReadableStreamDefaultControllerCallPullIfNeeded(controller); + } + + function ReadableStreamDefaultControllerError(controller, e) { + var stream = controller._controlledReadableStream; + if (stream._state !== 'readable') { + return; + } + ResetQueue(controller); + ReadableStreamDefaultControllerClearAlgorithms(controller); + ReadableStreamError(stream, e); + } + + function ReadableStreamDefaultControllerGetDesiredSize(controller) { + var state = controller._controlledReadableStream._state; + if (state === 'errored') { + return null; + } + if (state === 'closed') { + return 0; + } + return controller._strategyHWM - controller._queueTotalSize; + } + + function ReadableStreamDefaultControllerHasBackpressure(controller) { + if (ReadableStreamDefaultControllerShouldCallPull(controller)) { + return false; + } + return true; + } + + function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) { + var state = controller._controlledReadableStream._state; + if (!controller._closeRequested && state === 'readable') { + return true; + } + return false; + } + + function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) { + controller._controlledReadableStream = stream; + controller._queue = undefined; + controller._queueTotalSize = undefined; + ResetQueue(controller); + controller._started = false; + controller._closeRequested = false; + controller._pullAgain = false; + controller._pulling = false; + controller._strategySizeAlgorithm = sizeAlgorithm; + controller._strategyHWM = highWaterMark; + controller._pullAlgorithm = pullAlgorithm; + controller._cancelAlgorithm = cancelAlgorithm; + stream._readableStreamController = controller; + var startResult = startAlgorithm(); + uponPromise(promiseResolvedWith(startResult), function () { + controller._started = true; + ReadableStreamDefaultControllerCallPullIfNeeded(controller); + }, function (r) { + ReadableStreamDefaultControllerError(controller, r); + }); + } + + function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) { + var controller = Object.create(ReadableStreamDefaultController.prototype); + var startAlgorithm = function () { + return undefined; + }; + var pullAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + var cancelAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + if (underlyingSource.start !== undefined) { + startAlgorithm = function () { + return underlyingSource.start(controller); + }; + } + if (underlyingSource.pull !== undefined) { + pullAlgorithm = function () { + return underlyingSource.pull(controller); + }; + } + if (underlyingSource.cancel !== undefined) { + cancelAlgorithm = function (reason) { + return underlyingSource.cancel(reason); + }; + } + SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm); + } + + function defaultControllerBrandCheckException(name) { + return new TypeError("ReadableStreamDefaultController.prototype." + name + " can only be used on a ReadableStreamDefaultController"); + } + + function ReadableStreamTee(stream, cloneForBranch2) { + var reader = AcquireReadableStreamDefaultReader(stream); + var reading = false; + var canceled1 = false; + var canceled2 = false; + var reason1; + var reason2; + var branch1; + var branch2; + var resolveCancelPromise; + var cancelPromise = newPromise(function (resolve) { + resolveCancelPromise = resolve; + }); + + function pullAlgorithm() { + if (reading) { + return promiseResolvedWith(undefined); + } + reading = true; + var readRequest = { + _chunkSteps: function (value) { + queueMicrotask(function () { + reading = false; + var value1 = value; + var value2 = value; + if (!canceled1) { + ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1); + } + if (!canceled2) { + ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2); + } + resolveCancelPromise(undefined); + }); + }, + _closeSteps: function () { + reading = false; + if (!canceled1) { + ReadableStreamDefaultControllerClose(branch1._readableStreamController); + } + if (!canceled2) { + ReadableStreamDefaultControllerClose(branch2._readableStreamController); + } + }, + _errorSteps: function () { + reading = false; + } + }; + ReadableStreamDefaultReaderRead(reader, readRequest); + return promiseResolvedWith(undefined); + } + + function cancel1Algorithm(reason) { + canceled1 = true; + reason1 = reason; + if (canceled2) { + var compositeReason = CreateArrayFromList([ + reason1, + reason2 + ]); + var cancelResult = ReadableStreamCancel(stream, compositeReason); + resolveCancelPromise(cancelResult); + } + return cancelPromise; + } + + function cancel2Algorithm(reason) { + canceled2 = true; + reason2 = reason; + if (canceled1) { + var compositeReason = CreateArrayFromList([ + reason1, + reason2 + ]); + var cancelResult = ReadableStreamCancel(stream, compositeReason); + resolveCancelPromise(cancelResult); + } + return cancelPromise; + } + + function startAlgorithm() { + } + + branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm); + branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm); + uponRejection(reader._closedPromise, function (r) { + ReadableStreamDefaultControllerError(branch1._readableStreamController, r); + ReadableStreamDefaultControllerError(branch2._readableStreamController, r); + resolveCancelPromise(undefined); + }); + return [ + branch1, + branch2 + ]; + } + + function convertUnderlyingDefaultOrByteSource(source, context) { + assertDictionary(source, context); + var original = source; + var autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize; + var cancel = original === null || original === void 0 ? void 0 : original.cancel; + var pull = original === null || original === void 0 ? void 0 : original.pull; + var start = original === null || original === void 0 ? void 0 : original.start; + var type = original === null || original === void 0 ? void 0 : original.type; + return { + autoAllocateChunkSize: autoAllocateChunkSize === undefined ? undefined : convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, context + " has member 'autoAllocateChunkSize' that"), + cancel: cancel === undefined ? undefined : convertUnderlyingSourceCancelCallback(cancel, original, context + " has member 'cancel' that"), + pull: pull === undefined ? undefined : convertUnderlyingSourcePullCallback(pull, original, context + " has member 'pull' that"), + start: start === undefined ? undefined : convertUnderlyingSourceStartCallback(start, original, context + " has member 'start' that"), + type: type === undefined ? undefined : convertReadableStreamType(type, context + " has member 'type' that") + }; + } + + function convertUnderlyingSourceCancelCallback(fn, original, context) { + assertFunction(fn, context); + return function (reason) { + return promiseCall(fn, original, [reason]); + }; + } + + function convertUnderlyingSourcePullCallback(fn, original, context) { + assertFunction(fn, context); + return function (controller) { + return promiseCall(fn, original, [controller]); + }; + } + + function convertUnderlyingSourceStartCallback(fn, original, context) { + assertFunction(fn, context); + return function (controller) { + return reflectCall(fn, original, [controller]); + }; + } + + function convertReadableStreamType(type, context) { + type = "" + type; + if (type !== 'bytes') { + throw new TypeError(context + " '" + type + "' is not a valid enumeration value for ReadableStreamType"); + } + return type; + } + + function convertReaderOptions(options, context) { + assertDictionary(options, context); + var mode = options === null || options === void 0 ? void 0 : options.mode; + return {mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, context + " has member 'mode' that")}; + } + + function convertReadableStreamReaderMode(mode, context) { + mode = "" + mode; + if (mode !== 'byob') { + throw new TypeError(context + " '" + mode + "' is not a valid enumeration value for ReadableStreamReaderMode"); + } + return mode; + } + + function convertIteratorOptions(options, context) { + assertDictionary(options, context); + var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel; + return {preventCancel: Boolean(preventCancel)}; + } + + function convertPipeOptions(options, context) { + assertDictionary(options, context); + var preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort; + var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel; + var preventClose = options === null || options === void 0 ? void 0 : options.preventClose; + var signal = options === null || options === void 0 ? void 0 : options.signal; + if (signal !== undefined) { + assertAbortSignal(signal, context + " has member 'signal' that"); + } + return { + preventAbort: Boolean(preventAbort), + preventCancel: Boolean(preventCancel), + preventClose: Boolean(preventClose), + signal: signal + }; + } + + function assertAbortSignal(signal, context) { + if (!isAbortSignal(signal)) { + throw new TypeError(context + " is not an AbortSignal."); + } + } + + function convertReadableWritablePair(pair, context) { + assertDictionary(pair, context); + var readable = pair === null || pair === void 0 ? void 0 : pair.readable; + assertRequiredField(readable, 'readable', 'ReadableWritablePair'); + assertReadableStream(readable, context + " has member 'readable' that"); + var writable = pair === null || pair === void 0 ? void 0 : pair.writable; + assertRequiredField(writable, 'writable', 'ReadableWritablePair'); + assertWritableStream(writable, context + " has member 'writable' that"); + return { + readable: readable, + writable: writable + }; + } + + var ReadableStream = function () { + function ReadableStream(rawUnderlyingSource, rawStrategy) { + if (rawUnderlyingSource === void 0) { + rawUnderlyingSource = {}; + } + if (rawStrategy === void 0) { + rawStrategy = {}; + } + if (rawUnderlyingSource === undefined) { + rawUnderlyingSource = null; + } else { + assertObject(rawUnderlyingSource, 'First parameter'); + } + var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter'); + var underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter'); + InitializeReadableStream(this); + if (underlyingSource.type === 'bytes') { + if (strategy.size !== undefined) { + throw new RangeError('The strategy for a byte stream cannot have a size function'); + } + var highWaterMark = ExtractHighWaterMark(strategy, 0); + SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark); + } else { + var sizeAlgorithm = ExtractSizeAlgorithm(strategy); + var highWaterMark = ExtractHighWaterMark(strategy, 1); + SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm); + } + } + + Object.defineProperty(ReadableStream.prototype, "locked", { + get: function () { + if (!IsReadableStream(this)) { + throw streamBrandCheckException$1('locked'); + } + return IsReadableStreamLocked(this); + }, + enumerable: false, + configurable: true + }); + ReadableStream.prototype.cancel = function (reason) { + if (reason === void 0) { + reason = undefined; + } + if (!IsReadableStream(this)) { + return promiseRejectedWith(streamBrandCheckException$1('cancel')); + } + if (IsReadableStreamLocked(this)) { + return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader')); + } + return ReadableStreamCancel(this, reason); + }; + ReadableStream.prototype.getReader = function (rawOptions) { + if (rawOptions === void 0) { + rawOptions = undefined; + } + if (!IsReadableStream(this)) { + throw streamBrandCheckException$1('getReader'); + } + var options = convertReaderOptions(rawOptions, 'First parameter'); + if (options.mode === undefined) { + return AcquireReadableStreamDefaultReader(this); + } + return AcquireReadableStreamBYOBReader(this); + }; + ReadableStream.prototype.pipeThrough = function (rawTransform, rawOptions) { + if (rawOptions === void 0) { + rawOptions = {}; + } + if (!IsReadableStream(this)) { + throw streamBrandCheckException$1('pipeThrough'); + } + assertRequiredArgument(rawTransform, 1, 'pipeThrough'); + var transform = convertReadableWritablePair(rawTransform, 'First parameter'); + var options = convertPipeOptions(rawOptions, 'Second parameter'); + if (IsReadableStreamLocked(this)) { + throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream'); + } + if (IsWritableStreamLocked(transform.writable)) { + throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream'); + } + var promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal); + setPromiseIsHandledToTrue(promise); + return transform.readable; + }; + ReadableStream.prototype.pipeTo = function (destination, rawOptions) { + if (rawOptions === void 0) { + rawOptions = {}; + } + if (!IsReadableStream(this)) { + return promiseRejectedWith(streamBrandCheckException$1('pipeTo')); + } + if (destination === undefined) { + return promiseRejectedWith("Parameter 1 is required in 'pipeTo'."); + } + if (!IsWritableStream(destination)) { + return promiseRejectedWith(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream")); + } + var options; + try { + options = convertPipeOptions(rawOptions, 'Second parameter'); + } catch (e) { + return promiseRejectedWith(e); + } + if (IsReadableStreamLocked(this)) { + return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')); + } + if (IsWritableStreamLocked(destination)) { + return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')); + } + return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal); + }; + ReadableStream.prototype.tee = function () { + if (!IsReadableStream(this)) { + throw streamBrandCheckException$1('tee'); + } + var branches = ReadableStreamTee(this); + return CreateArrayFromList(branches); + }; + ReadableStream.prototype.values = function (rawOptions) { + if (rawOptions === void 0) { + rawOptions = undefined; + } + if (!IsReadableStream(this)) { + throw streamBrandCheckException$1('values'); + } + var options = convertIteratorOptions(rawOptions, 'First parameter'); + return AcquireReadableStreamAsyncIterator(this, options.preventCancel); + }; + return ReadableStream; + }(); + Object.defineProperties(ReadableStream.prototype, { + cancel: {enumerable: true}, + getReader: {enumerable: true}, + pipeThrough: {enumerable: true}, + pipeTo: {enumerable: true}, + tee: {enumerable: true}, + values: {enumerable: true}, + locked: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, { + value: 'ReadableStream', + configurable: true + }); + } + if (typeof SymbolPolyfill.asyncIterator === 'symbol') { + Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, { + value: ReadableStream.prototype.values, + writable: true, + configurable: true + }); + } + + function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) { + if (highWaterMark === void 0) { + highWaterMark = 1; + } + if (sizeAlgorithm === void 0) { + sizeAlgorithm = function () { + return 1; + }; + } + var stream = Object.create(ReadableStream.prototype); + InitializeReadableStream(stream); + var controller = Object.create(ReadableStreamDefaultController.prototype); + SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm); + return stream; + } + + function InitializeReadableStream(stream) { + stream._state = 'readable'; + stream._reader = undefined; + stream._storedError = undefined; + stream._disturbed = false; + } + + function IsReadableStream(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) { + return false; + } + return true; + } + + function IsReadableStreamLocked(stream) { + if (stream._reader === undefined) { + return false; + } + return true; + } + + function ReadableStreamCancel(stream, reason) { + stream._disturbed = true; + if (stream._state === 'closed') { + return promiseResolvedWith(undefined); + } + if (stream._state === 'errored') { + return promiseRejectedWith(stream._storedError); + } + ReadableStreamClose(stream); + var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason); + return transformPromiseWith(sourceCancelPromise, noop); + } + + function ReadableStreamClose(stream) { + stream._state = 'closed'; + var reader = stream._reader; + if (reader === undefined) { + return; + } + defaultReaderClosedPromiseResolve(reader); + if (IsReadableStreamDefaultReader(reader)) { + reader._readRequests.forEach(function (readRequest) { + readRequest._closeSteps(); + }); + reader._readRequests = new SimpleQueue(); + } + } + + function ReadableStreamError(stream, e) { + stream._state = 'errored'; + stream._storedError = e; + var reader = stream._reader; + if (reader === undefined) { + return; + } + defaultReaderClosedPromiseReject(reader, e); + if (IsReadableStreamDefaultReader(reader)) { + reader._readRequests.forEach(function (readRequest) { + readRequest._errorSteps(e); + }); + reader._readRequests = new SimpleQueue(); + } else { + reader._readIntoRequests.forEach(function (readIntoRequest) { + readIntoRequest._errorSteps(e); + }); + reader._readIntoRequests = new SimpleQueue(); + } + } + + function streamBrandCheckException$1(name) { + return new TypeError("ReadableStream.prototype." + name + " can only be used on a ReadableStream"); + } + + function convertQueuingStrategyInit(init, context) { + assertDictionary(init, context); + var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark; + assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit'); + return {highWaterMark: convertUnrestrictedDouble(highWaterMark)}; + } + + var byteLengthSizeFunction = function size(chunk) { + return chunk.byteLength; + }; + var ByteLengthQueuingStrategy = function () { + function ByteLengthQueuingStrategy(options) { + assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy'); + options = convertQueuingStrategyInit(options, 'First parameter'); + this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark; + } + + Object.defineProperty(ByteLengthQueuingStrategy.prototype, "highWaterMark", { + get: function () { + if (!IsByteLengthQueuingStrategy(this)) { + throw byteLengthBrandCheckException('highWaterMark'); + } + return this._byteLengthQueuingStrategyHighWaterMark; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ByteLengthQueuingStrategy.prototype, "size", { + get: function () { + if (!IsByteLengthQueuingStrategy(this)) { + throw byteLengthBrandCheckException('size'); + } + return byteLengthSizeFunction; + }, + enumerable: false, + configurable: true + }); + return ByteLengthQueuingStrategy; + }(); + Object.defineProperties(ByteLengthQueuingStrategy.prototype, { + highWaterMark: {enumerable: true}, + size: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, { + value: 'ByteLengthQueuingStrategy', + configurable: true + }); + } + + function byteLengthBrandCheckException(name) { + return new TypeError("ByteLengthQueuingStrategy.prototype." + name + " can only be used on a ByteLengthQueuingStrategy"); + } + + function IsByteLengthQueuingStrategy(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) { + return false; + } + return true; + } + + var countSizeFunction = function size() { + return 1; + }; + var CountQueuingStrategy = function () { + function CountQueuingStrategy(options) { + assertRequiredArgument(options, 1, 'CountQueuingStrategy'); + options = convertQueuingStrategyInit(options, 'First parameter'); + this._countQueuingStrategyHighWaterMark = options.highWaterMark; + } + + Object.defineProperty(CountQueuingStrategy.prototype, "highWaterMark", { + get: function () { + if (!IsCountQueuingStrategy(this)) { + throw countBrandCheckException('highWaterMark'); + } + return this._countQueuingStrategyHighWaterMark; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CountQueuingStrategy.prototype, "size", { + get: function () { + if (!IsCountQueuingStrategy(this)) { + throw countBrandCheckException('size'); + } + return countSizeFunction; + }, + enumerable: false, + configurable: true + }); + return CountQueuingStrategy; + }(); + Object.defineProperties(CountQueuingStrategy.prototype, { + highWaterMark: {enumerable: true}, + size: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, { + value: 'CountQueuingStrategy', + configurable: true + }); + } + + function countBrandCheckException(name) { + return new TypeError("CountQueuingStrategy.prototype." + name + " can only be used on a CountQueuingStrategy"); + } + + function IsCountQueuingStrategy(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) { + return false; + } + return true; + } + + function convertTransformer(original, context) { + assertDictionary(original, context); + var flush = original === null || original === void 0 ? void 0 : original.flush; + var readableType = original === null || original === void 0 ? void 0 : original.readableType; + var start = original === null || original === void 0 ? void 0 : original.start; + var transform = original === null || original === void 0 ? void 0 : original.transform; + var writableType = original === null || original === void 0 ? void 0 : original.writableType; + return { + flush: flush === undefined ? undefined : convertTransformerFlushCallback(flush, original, context + " has member 'flush' that"), + readableType: readableType, + start: start === undefined ? undefined : convertTransformerStartCallback(start, original, context + " has member 'start' that"), + transform: transform === undefined ? undefined : convertTransformerTransformCallback(transform, original, context + " has member 'transform' that"), + writableType: writableType + }; + } + + function convertTransformerFlushCallback(fn, original, context) { + assertFunction(fn, context); + return function (controller) { + return promiseCall(fn, original, [controller]); + }; + } + + function convertTransformerStartCallback(fn, original, context) { + assertFunction(fn, context); + return function (controller) { + return reflectCall(fn, original, [controller]); + }; + } + + function convertTransformerTransformCallback(fn, original, context) { + assertFunction(fn, context); + return function (chunk, controller) { + return promiseCall(fn, original, [ + chunk, + controller + ]); + }; + } + + var TransformStream = function () { + function TransformStream(rawTransformer, rawWritableStrategy, rawReadableStrategy) { + if (rawTransformer === void 0) { + rawTransformer = {}; + } + if (rawWritableStrategy === void 0) { + rawWritableStrategy = {}; + } + if (rawReadableStrategy === void 0) { + rawReadableStrategy = {}; + } + if (rawTransformer === undefined) { + rawTransformer = null; + } + var writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter'); + var readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter'); + var transformer = convertTransformer(rawTransformer, 'First parameter'); + if (transformer.readableType !== undefined) { + throw new RangeError('Invalid readableType specified'); + } + if (transformer.writableType !== undefined) { + throw new RangeError('Invalid writableType specified'); + } + var readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0); + var readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy); + var writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1); + var writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy); + var startPromise_resolve; + var startPromise = newPromise(function (resolve) { + startPromise_resolve = resolve; + }); + InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm); + SetUpTransformStreamDefaultControllerFromTransformer(this, transformer); + if (transformer.start !== undefined) { + startPromise_resolve(transformer.start(this._transformStreamController)); + } else { + startPromise_resolve(undefined); + } + } + + Object.defineProperty(TransformStream.prototype, "readable", { + get: function () { + if (!IsTransformStream(this)) { + throw streamBrandCheckException$2('readable'); + } + return this._readable; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TransformStream.prototype, "writable", { + get: function () { + if (!IsTransformStream(this)) { + throw streamBrandCheckException$2('writable'); + } + return this._writable; + }, + enumerable: false, + configurable: true + }); + return TransformStream; + }(); + Object.defineProperties(TransformStream.prototype, { + readable: {enumerable: true}, + writable: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, { + value: 'TransformStream', + configurable: true + }); + } + + function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) { + function startAlgorithm() { + return startPromise; + } + + function writeAlgorithm(chunk) { + return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk); + } + + function abortAlgorithm(reason) { + return TransformStreamDefaultSinkAbortAlgorithm(stream, reason); + } + + function closeAlgorithm() { + return TransformStreamDefaultSinkCloseAlgorithm(stream); + } + + stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm); + + function pullAlgorithm() { + return TransformStreamDefaultSourcePullAlgorithm(stream); + } + + function cancelAlgorithm(reason) { + TransformStreamErrorWritableAndUnblockWrite(stream, reason); + return promiseResolvedWith(undefined); + } + + stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm); + stream._backpressure = undefined; + stream._backpressureChangePromise = undefined; + stream._backpressureChangePromise_resolve = undefined; + TransformStreamSetBackpressure(stream, true); + stream._transformStreamController = undefined; + } + + function IsTransformStream(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) { + return false; + } + return true; + } + + function TransformStreamError(stream, e) { + ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e); + TransformStreamErrorWritableAndUnblockWrite(stream, e); + } + + function TransformStreamErrorWritableAndUnblockWrite(stream, e) { + TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController); + WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e); + if (stream._backpressure) { + TransformStreamSetBackpressure(stream, false); + } + } + + function TransformStreamSetBackpressure(stream, backpressure) { + if (stream._backpressureChangePromise !== undefined) { + stream._backpressureChangePromise_resolve(); + } + stream._backpressureChangePromise = newPromise(function (resolve) { + stream._backpressureChangePromise_resolve = resolve; + }); + stream._backpressure = backpressure; + } + + var TransformStreamDefaultController = function () { + function TransformStreamDefaultController() { + throw new TypeError('Illegal constructor'); + } + + Object.defineProperty(TransformStreamDefaultController.prototype, "desiredSize", { + get: function () { + if (!IsTransformStreamDefaultController(this)) { + throw defaultControllerBrandCheckException$1('desiredSize'); + } + var readableController = this._controlledTransformStream._readable._readableStreamController; + return ReadableStreamDefaultControllerGetDesiredSize(readableController); + }, + enumerable: false, + configurable: true + }); + TransformStreamDefaultController.prototype.enqueue = function (chunk) { + if (chunk === void 0) { + chunk = undefined; + } + if (!IsTransformStreamDefaultController(this)) { + throw defaultControllerBrandCheckException$1('enqueue'); + } + TransformStreamDefaultControllerEnqueue(this, chunk); + }; + TransformStreamDefaultController.prototype.error = function (reason) { + if (reason === void 0) { + reason = undefined; + } + if (!IsTransformStreamDefaultController(this)) { + throw defaultControllerBrandCheckException$1('error'); + } + TransformStreamDefaultControllerError(this, reason); + }; + TransformStreamDefaultController.prototype.terminate = function () { + if (!IsTransformStreamDefaultController(this)) { + throw defaultControllerBrandCheckException$1('terminate'); + } + TransformStreamDefaultControllerTerminate(this); + }; + return TransformStreamDefaultController; + }(); + Object.defineProperties(TransformStreamDefaultController.prototype, { + enqueue: {enumerable: true}, + error: {enumerable: true}, + terminate: {enumerable: true}, + desiredSize: {enumerable: true} + }); + if (typeof SymbolPolyfill.toStringTag === 'symbol') { + Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { + value: 'TransformStreamDefaultController', + configurable: true + }); + } + + function IsTransformStreamDefaultController(x) { + if (!typeIsObject(x)) { + return false; + } + if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) { + return false; + } + return true; + } + + function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) { + controller._controlledTransformStream = stream; + stream._transformStreamController = controller; + controller._transformAlgorithm = transformAlgorithm; + controller._flushAlgorithm = flushAlgorithm; + } + + function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) { + var controller = Object.create(TransformStreamDefaultController.prototype); + var transformAlgorithm = function (chunk) { + try { + TransformStreamDefaultControllerEnqueue(controller, chunk); + return promiseResolvedWith(undefined); + } catch (transformResultE) { + return promiseRejectedWith(transformResultE); + } + }; + var flushAlgorithm = function () { + return promiseResolvedWith(undefined); + }; + if (transformer.transform !== undefined) { + transformAlgorithm = function (chunk) { + return transformer.transform(chunk, controller); + }; + } + if (transformer.flush !== undefined) { + flushAlgorithm = function () { + return transformer.flush(controller); + }; + } + SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm); + } + + function TransformStreamDefaultControllerClearAlgorithms(controller) { + controller._transformAlgorithm = undefined; + controller._flushAlgorithm = undefined; + } + + function TransformStreamDefaultControllerEnqueue(controller, chunk) { + var stream = controller._controlledTransformStream; + var readableController = stream._readable._readableStreamController; + if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) { + throw new TypeError('Readable side is not in a state that permits enqueue'); + } + try { + ReadableStreamDefaultControllerEnqueue(readableController, chunk); + } catch (e) { + TransformStreamErrorWritableAndUnblockWrite(stream, e); + throw stream._readable._storedError; + } + var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController); + if (backpressure !== stream._backpressure) { + TransformStreamSetBackpressure(stream, true); + } + } + + function TransformStreamDefaultControllerError(controller, e) { + TransformStreamError(controller._controlledTransformStream, e); + } + + function TransformStreamDefaultControllerPerformTransform(controller, chunk) { + var transformPromise = controller._transformAlgorithm(chunk); + return transformPromiseWith(transformPromise, undefined, function (r) { + TransformStreamError(controller._controlledTransformStream, r); + throw r; + }); + } + + function TransformStreamDefaultControllerTerminate(controller) { + var stream = controller._controlledTransformStream; + var readableController = stream._readable._readableStreamController; + ReadableStreamDefaultControllerClose(readableController); + var error = new TypeError('TransformStream terminated'); + TransformStreamErrorWritableAndUnblockWrite(stream, error); + } + + function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) { + var controller = stream._transformStreamController; + if (stream._backpressure) { + var backpressureChangePromise = stream._backpressureChangePromise; + return transformPromiseWith(backpressureChangePromise, function () { + var writable = stream._writable; + var state = writable._state; + if (state === 'erroring') { + throw writable._storedError; + } + return TransformStreamDefaultControllerPerformTransform(controller, chunk); + }); + } + return TransformStreamDefaultControllerPerformTransform(controller, chunk); + } + + function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) { + TransformStreamError(stream, reason); + return promiseResolvedWith(undefined); + } + + function TransformStreamDefaultSinkCloseAlgorithm(stream) { + var readable = stream._readable; + var controller = stream._transformStreamController; + var flushPromise = controller._flushAlgorithm(); + TransformStreamDefaultControllerClearAlgorithms(controller); + return transformPromiseWith(flushPromise, function () { + if (readable._state === 'errored') { + throw readable._storedError; + } + ReadableStreamDefaultControllerClose(readable._readableStreamController); + }, function (r) { + TransformStreamError(stream, r); + throw readable._storedError; + }); + } + + function TransformStreamDefaultSourcePullAlgorithm(stream) { + TransformStreamSetBackpressure(stream, false); + return stream._backpressureChangePromise; + } + + function defaultControllerBrandCheckException$1(name) { + return new TypeError("TransformStreamDefaultController.prototype." + name + " can only be used on a TransformStreamDefaultController"); + } + + function streamBrandCheckException$2(name) { + return new TypeError("TransformStream.prototype." + name + " can only be used on a TransformStream"); + } + + exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy; + exports.CountQueuingStrategy = CountQueuingStrategy; + exports.ReadableByteStreamController = ReadableByteStreamController; + exports.ReadableStream = ReadableStream; + exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader; + exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest; + exports.ReadableStreamDefaultController = ReadableStreamDefaultController; + exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader; + exports.TransformStream = TransformStream; + exports.TransformStreamDefaultController = TransformStreamDefaultController; + exports.WritableStream = WritableStream; + exports.WritableStreamDefaultController = WritableStreamDefaultController; + exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter; + Object.defineProperty(exports, '__esModule', {value: true}); + })); + + /***/ + }), + /* 112 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + __w_pdfjs_require__(113); + var entryUnbind = __w_pdfjs_require__(117); + module.exports = entryUnbind('String', 'padStart'); + + /***/ + }), + /* 113 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var $padStart = __w_pdfjs_require__(114).start; + var WEBKIT_BUG = __w_pdfjs_require__(116); + $({ + target: 'String', + proto: true, + forced: WEBKIT_BUG + }, { + padStart: function padStart(maxLength) { + return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + /***/ + }), + /* 114 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var toLength = __w_pdfjs_require__(46); + var repeat = __w_pdfjs_require__(115); + var requireObjectCoercible = __w_pdfjs_require__(19); + var ceil = Math.ceil; + var createMethod = function (IS_END) { + return function ($this, maxLength, fillString) { + var S = String(requireObjectCoercible($this)); + var stringLength = S.length; + var fillStr = fillString === undefined ? ' ' : String(fillString); + var intMaxLength = toLength(maxLength); + var fillLen, stringFiller; + if (intMaxLength <= stringLength || fillStr == '') + return S; + fillLen = intMaxLength - stringLength; + stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length)); + if (stringFiller.length > fillLen) + stringFiller = stringFiller.slice(0, fillLen); + return IS_END ? S + stringFiller : stringFiller + S; + }; + }; + module.exports = { + start: createMethod(false), + end: createMethod(true) + }; + + /***/ + }), + /* 115 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var toInteger = __w_pdfjs_require__(47); + var requireObjectCoercible = __w_pdfjs_require__(19); + module.exports = function repeat(count) { + var str = String(requireObjectCoercible(this)); + var result = ''; + var n = toInteger(count); + if (n < 0 || n == Infinity) + throw RangeError('Wrong number of repetitions'); + for (; n > 0; (n >>>= 1) && (str += str)) + if (n & 1) + result += str; + return result; + }; + + /***/ + }), + /* 116 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var userAgent = __w_pdfjs_require__(59); + module.exports = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent); + + /***/ + }), + /* 117 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var global = __w_pdfjs_require__(10); + var bind = __w_pdfjs_require__(78); + var call = Function.call; + module.exports = function (CONSTRUCTOR, METHOD, length) { + return bind(call, global[CONSTRUCTOR].prototype[METHOD], length); + }; + + /***/ + }), + /* 118 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + __w_pdfjs_require__(119); + var entryUnbind = __w_pdfjs_require__(117); + module.exports = entryUnbind('String', 'padEnd'); + + /***/ + }), + /* 119 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + "use strict"; + + var $ = __w_pdfjs_require__(9); + var $padEnd = __w_pdfjs_require__(114).end; + var WEBKIT_BUG = __w_pdfjs_require__(116); + $({ + target: 'String', + proto: true, + forced: WEBKIT_BUG + }, { + padEnd: function padEnd(maxLength) { + return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + /***/ + }), + /* 120 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + __w_pdfjs_require__(121); + var path = __w_pdfjs_require__(42); + module.exports = path.Object.values; + + /***/ + }), + /* 121 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var $ = __w_pdfjs_require__(9); + var $values = __w_pdfjs_require__(122).values; + $({ + target: 'Object', + stat: true + }, { + values: function values(O) { + return $values(O); + } + }); + + /***/ + }), + /* 122 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var DESCRIPTORS = __w_pdfjs_require__(12); + var objectKeys = __w_pdfjs_require__(63); + var toIndexedObject = __w_pdfjs_require__(16); + var propertyIsEnumerable = __w_pdfjs_require__(14).f; + var createMethod = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [ + key, + O[key] + ] : O[key]); + } + } + return result; + }; + }; + module.exports = { + entries: createMethod(true), + values: createMethod(false) + }; + + /***/ + }), + /* 123 */ + /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + + __w_pdfjs_require__(124); + var path = __w_pdfjs_require__(42); + module.exports = path.Object.entries; + + /***/ + }), + /* 124 */ + /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + var $ = __w_pdfjs_require__(9); + var $entries = __w_pdfjs_require__(122).entries; + $({ + target: 'Object', + stat: true + }, { + entries: function entries(O) { + return $entries(O); + } + }); + + /***/ + }), + /* 125 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.getDocument = getDocument; + exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; + exports.version = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultCMapReaderFactory = exports.DefaultCanvasFactory = exports.build = void 0; + + var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); + + var _util = __w_pdfjs_require__(4); + + var _display_utils = __w_pdfjs_require__(1); + + var _font_loader = __w_pdfjs_require__(126); + + var _node_utils = __w_pdfjs_require__(127); + + var _annotation_storage = __w_pdfjs_require__(128); + + var _api_compatibility = __w_pdfjs_require__(129); + + var _canvas = __w_pdfjs_require__(130); + + var _worker_options = __w_pdfjs_require__(132); + + var _is_node = __w_pdfjs_require__(6); + + var _message_handler = __w_pdfjs_require__(133); + + var _metadata = __w_pdfjs_require__(134); + + var _optional_content_config = __w_pdfjs_require__(135); + + var _transport_stream = __w_pdfjs_require__(136); + + var _webgl = __w_pdfjs_require__(137); + + 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 _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" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _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 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.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.isEvalSupported !== "boolean") { + params.isEvalSupported = true; + } + + if (typeof params.disableFontFace !== "boolean") { + params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false; + } + + 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); + messageHandler.postMessageTransfers = worker.postMessageTransfers; + var transport = new WorkerTransport(messageHandler, task, networkStream, params); + task._transport = transport; + messageHandler.send("Ready", null); + }); + })["catch"](task._capability.reject); + return task; + } + + function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { + if (worker.destroyed) { + return Promise.reject(new Error("Worker was destroyed")); + } + + if (pdfDataRangeTransport) { + source.length = pdfDataRangeTransport.length; + source.initialData = pdfDataRangeTransport.initialData; + source.progressiveDone = pdfDataRangeTransport.progressiveDone; + source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename; + } + + return worker.messageHandler.sendWithPromise("GetDocRequest", { + docId: docId, + apiVersion: '2.8.335', + 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, + postMessageTransfers: worker.postMessageTransfers, + docBaseUrl: source.docBaseUrl, + ignoreErrors: source.ignoreErrors, + isEvalSupported: source.isEvalSupported, + fontExtraProperties: source.fontExtraProperties, + enableXfa: source.enableXfa + }).then(function (workerId) { + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + + return workerId; + }); + } + + var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { + var nextDocumentId = 0; + + var PDFDocumentLoadingTask = /*#__PURE__*/function () { + function PDFDocumentLoadingTask() { + _classCallCheck(this, PDFDocumentLoadingTask); + + this._capability = (0, _util.createPromiseCapability)(); + this._transport = null; + this._worker = null; + this.docId = "d" + nextDocumentId++; + 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 destroy() { + var _this = this; + + this.destroyed = true; + var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); + return transportDestroyed.then(function () { + _this._transport = null; + + if (_this._worker) { + _this._worker.destroy(); + + _this._worker = null; + } + }); + } + }]); + + return PDFDocumentLoadingTask; + }(); + + return 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 _this2 = this; + + this._readyCapability.promise.then(function () { + var _iterator2 = _createForOfIteratorHelper(_this2._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 _this3 = this; + + this._readyCapability.promise.then(function () { + var _iterator3 = _createForOfIteratorHelper(_this3._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 _this4 = this; + + this._readyCapability.promise.then(function () { + var _iterator4 = _createForOfIteratorHelper(_this4._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) { + _classCallCheck(this, PDFDocumentProxy); + + this._pdfInfo = pdfInfo; + this._transport = transport; + } + + _createClass(PDFDocumentProxy, [{ + key: "annotationStorage", + get: function get() { + return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); + } + }, { + key: "numPages", + get: function get() { + return this._pdfInfo.numPages; + } + }, { + key: "fingerprint", + get: function get() { + return this._pdfInfo.fingerprint; + } + }, { + key: "isPureXfa", + get: function get() { + return this._pdfInfo.isPureXfa; + } + }, { + 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: "getStats", + value: function getStats() { + return this._transport.getStats(); + } + }, { + 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(annotationStorage) { + return this._transport.saveDocument(annotationStorage); + } + }, { + 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.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 ? null : _ref4$intent; + + if (!this._annotationsPromise || this._annotationsIntent !== intent) { + this._annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent); + this._annotationsIntent = intent; + } + + return this._annotationsPromise; + } + }, { + key: "getJSActions", + value: function getJSActions() { + return this._jsActionsPromise || (this._jsActionsPromise = this._transport.getPageJSActions(this._pageIndex)); + } + }, { + key: "getXfa", + value: function getXfa() { + return this._xfaPromise || (this._xfaPromise = this._transport.getPageXfa(this._pageIndex)); + } + }, { + key: "render", + value: function render(_ref5) { + var _this5 = this, + _intentState; + + var canvasContext = _ref5.canvasContext, + viewport = _ref5.viewport, + _ref5$intent = _ref5.intent, + intent = _ref5$intent === void 0 ? "display" : _ref5$intent, + _ref5$enableWebGL = _ref5.enableWebGL, + enableWebGL = _ref5$enableWebGL === void 0 ? false : _ref5$enableWebGL, + _ref5$renderInteracti = _ref5.renderInteractiveForms, + renderInteractiveForms = _ref5$renderInteracti === void 0 ? false : _ref5$renderInteracti, + _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$annotationStora = _ref5.annotationStorage, + annotationStorage = _ref5$annotationStora === void 0 ? null : _ref5$annotationStora, + _ref5$optionalContent = _ref5.optionalContentConfigPromise, + optionalContentConfigPromise = _ref5$optionalContent === void 0 ? null : _ref5$optionalContent; + + if (this._stats) { + this._stats.time("Overall"); + } + + var renderingIntent = intent === "print" ? "print" : "display"; + this.pendingCleanup = false; + + if (!optionalContentConfigPromise) { + optionalContentConfigPromise = this._transport.getOptionalContentConfig(); + } + + var intentState = this._intentStates.get(renderingIntent); + + if (!intentState) { + intentState = Object.create(null); + + this._intentStates.set(renderingIntent, intentState); + } + + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + + var canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ + ownerDocument: this._ownerDocument + }); + var webGLContext = new _webgl.WebGLContext({ + enable: enableWebGL + }); + + if (!intentState.displayReadyCapability) { + intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + }; + + if (this._stats) { + this._stats.time("Page Request"); + } + + this._pumpOperatorList({ + pageIndex: this._pageIndex, + intent: renderingIntent, + renderInteractiveForms: renderInteractiveForms === true, + annotationStorage: (annotationStorage === null || annotationStorage === void 0 ? void 0 : annotationStorage.serializable) || null + }); + } + + var complete = function complete(error) { + intentState.renderTasks["delete"](internalRenderTask); + + if (_this5.cleanupAfterRender || renderingIntent === "print") { + _this5.pendingCleanup = true; + } + + _this5._tryCleanup(); + + if (error) { + internalRenderTask.capability.reject(error); + + _this5._abortOperatorList({ + intentState: intentState, + reason: 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, + operatorList: intentState.operatorList, + pageIndex: this._pageIndex, + canvasFactory: canvasFactoryInstance, + webGLContext: webGLContext, + useRequestAnimationFrame: renderingIntent !== "print", + 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() { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + intentState.renderTasks["delete"](opListTask); + } + } + + var renderingIntent = "oplist"; + + var intentState = this._intentStates.get(renderingIntent); + + if (!intentState) { + intentState = Object.create(null); + + this._intentStates.set(renderingIntent, 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({ + pageIndex: this._pageIndex, + intent: renderingIntent + }); + } + + return intentState.opListReadCapability.promise; + } + }, { + key: "streamTextContent", + value: function streamTextContent() { + var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref8$normalizeWhites = _ref8.normalizeWhitespace, + normalizeWhitespace = _ref8$normalizeWhites === void 0 ? false : _ref8$normalizeWhites, + _ref8$disableCombineT = _ref8.disableCombineTextItems, + disableCombineTextItems = _ref8$disableCombineT === void 0 ? false : _ref8$disableCombineT; + + var TEXT_CONTENT_CHUNK_SIZE = 100; + return this._transport.messageHandler.sendWithStream("GetTextContent", { + pageIndex: this._pageIndex, + normalizeWhitespace: normalizeWhitespace === true, + combineTextItems: disableCombineTextItems !== 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] : {}; + var readableStream = this.streamTextContent(params); + return new Promise(function (resolve, reject) { + function pump() { + reader.read().then(function (_ref9) { + var _textContent$items; + + var value = _ref9.value, + done = _ref9.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: "_destroy", + value: function _destroy() { + this.destroyed = true; + this._transport.pageCache[this._pageIndex] = null; + var waitOn = []; + + var _iterator5 = _createForOfIteratorHelper(this._intentStates), + _step5; + + try { + for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { + var _step5$value = _slicedToArray(_step5.value, 2), + intent = _step5$value[0], + intentState = _step5$value[1]; + + this._abortOperatorList({ + intentState: intentState, + reason: new Error("Page was destroyed."), + force: true + }); + + if (intent === "oplist") { + continue; + } + + var _iterator6 = _createForOfIteratorHelper(intentState.renderTasks), + _step6; + + try { + for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { + var internalRenderTask = _step6.value; + waitOn.push(internalRenderTask.completed); + internalRenderTask.cancel(); + } + } catch (err) { + _iterator6.e(err); + } finally { + _iterator6.f(); + } + } + } catch (err) { + _iterator5.e(err); + } finally { + _iterator5.f(); + } + + this.objs.clear(); + this._annotationsPromise = null; + this._jsActionsPromise = null; + this._xfaPromise = 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 _iterator7 = _createForOfIteratorHelper(this._intentStates.values()), + _step7; + + try { + for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { + var _step7$value = _step7.value, + renderTasks = _step7$value.renderTasks, + operatorList = _step7$value.operatorList; + + if (renderTasks.size > 0 || !operatorList.lastChunk) { + return false; + } + } + } catch (err) { + _iterator7.e(err); + } finally { + _iterator7.f(); + } + + this._intentStates.clear(); + + this.objs.clear(); + this._annotationsPromise = null; + this._jsActionsPromise = null; + this._xfaPromise = null; + + if (resetStats && this._stats) { + this._stats = new _display_utils.StatTimer(); + } + + this.pendingCleanup = false; + return true; + } + }, { + key: "_startRenderPage", + value: function _startRenderPage(transparency, intent) { + var intentState = this._intentStates.get(intent); + + 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 _iterator8 = _createForOfIteratorHelper(intentState.renderTasks), + _step8; + + try { + for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { + var internalRenderTask = _step8.value; + internalRenderTask.operatorListChanged(); + } + } catch (err) { + _iterator8.e(err); + } finally { + _iterator8.f(); + } + + if (operatorListChunk.lastChunk) { + this._tryCleanup(); + } + } + }, { + key: "_pumpOperatorList", + value: function _pumpOperatorList(args) { + var _this6 = this; + + (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.'); + + var readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args); + + var reader = readableStream.getReader(); + + var intentState = this._intentStates.get(args.intent); + + intentState.streamReader = reader; + + var pump = function pump() { + reader.read().then(function (_ref10) { + var value = _ref10.value, + done = _ref10.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 _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(); + } + + _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(_ref11) { + var _this7 = this; + + var intentState = _ref11.intentState, + reason = _ref11.reason, + _ref11$force = _ref11.force, + force = _ref11$force === void 0 ? false : _ref11$force; + (0, _util.assert)(reason instanceof Error || _typeof(reason) === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.'); + + 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 === null || reason === void 0 ? void 0 : reason.message)); + intentState.streamReader = null; + + if (this._transport.destroyed) { + return; + } + + var _iterator10 = _createForOfIteratorHelper(this._intentStates), + _step10; + + try { + for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) { + var _step10$value = _slicedToArray(_step10.value, 2), + intent = _step10$value[0], + curIntentState = _step10$value[1]; + + if (curIntentState === intentState) { + this._intentStates["delete"](intent); + + break; + } + } + } catch (err) { + _iterator10.e(err); + } finally { + _iterator10.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(undefined); + } + + _createClass(LoopbackPort, [{ + key: "postMessage", + value: function postMessage(obj, transfers) { + var _this8 = this; + + function cloneValue(value) { + if (_typeof(value) !== "object" || value === null) { + return value; + } + + if (cloned.has(value)) { + return cloned.get(value); + } + + var buffer, result; + + if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { + if (transfers !== null && transfers !== void 0 && transfers.includes(buffer)) { + result = new value.constructor(buffer, value.byteOffset, value.byteLength); + } else { + result = new value.constructor(value); + } + + cloned.set(value, result); + return result; + } + + if (value instanceof Map) { + result = new Map(); + cloned.set(value, result); + + var _iterator11 = _createForOfIteratorHelper(value), + _step11; + + try { + for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) { + var _step11$value = _slicedToArray(_step11.value, 2), + key = _step11$value[0], + val = _step11$value[1]; + + result.set(key, cloneValue(val)); + } + } catch (err) { + _iterator11.e(err); + } finally { + _iterator11.f(); + } + + return result; + } + + if (value instanceof Set) { + result = new Set(); + cloned.set(value, result); + + var _iterator12 = _createForOfIteratorHelper(value), + _step12; + + try { + for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) { + var _val = _step12.value; + result.add(cloneValue(_val)); + } + } catch (err) { + _iterator12.e(err); + } finally { + _iterator12.f(); + } + + return result; + } + + result = Array.isArray(value) ? [] : {}; + cloned.set(value, result); + + for (var i in value) { + var desc = void 0, + p = value; + + while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { + p = Object.getPrototypeOf(p); + } + + if (typeof desc.value === "undefined") { + continue; + } + + if (typeof desc.value === "function") { + var _value$hasOwnProperty; + + if ((_value$hasOwnProperty = value.hasOwnProperty) !== null && _value$hasOwnProperty !== void 0 && _value$hasOwnProperty.call(value, i)) { + throw new Error("LoopbackPort.postMessage - cannot clone: ".concat(value[i])); + } + + continue; + } + + result[i] = cloneValue(desc.value); + } + + return result; + } + + var cloned = new WeakMap(); + var event = { + data: cloneValue(obj) + }; + + this._deferred.then(function () { + var _iterator13 = _createForOfIteratorHelper(_this8._listeners), + _step13; + + try { + for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) { + var listener = _step13.value; + listener.call(_this8, event); + } + } catch (err) { + _iterator13.e(err); + } finally { + _iterator13.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 PDFWorker = function PDFWorkerClosure() { + var pdfWorkerPorts = new WeakMap(); + var isWorkerDisabled = false; + var fallbackWorkerSrc; + var nextFakeWorkerId = 0; + var fakeWorkerCapability; + + if (_is_node.isNodeJS && typeof require === "function") { + isWorkerDisabled = true; + fallbackWorkerSrc = "./pdf.worker.js"; + } else if ((typeof document === "undefined" ? "undefined" : _typeof(document)) === "object" && "currentScript" in document) { + var _document$currentScri; + + var pdfjsFilePath = (_document$currentScri = document.currentScript) === null || _document$currentScri === void 0 ? void 0 : _document$currentScri.src; + + if (pdfjsFilePath) { + fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); + } + } + + function _getWorkerSrc() { + if (_worker_options.GlobalWorkerOptions.workerSrc) { + return _worker_options.GlobalWorkerOptions.workerSrc; + } + + if (typeof fallbackWorkerSrc !== "undefined") { + if (!_is_node.isNodeJS) { + (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); + } + + return fallbackWorkerSrc; + } + + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + + function getMainThreadWorkerMessageHandler() { + var mainWorkerMessageHandler; + + try { + var _globalThis$pdfjsWork; + + mainWorkerMessageHandler = (_globalThis$pdfjsWork = globalThis.pdfjsWorker) === null || _globalThis$pdfjsWork === void 0 ? void 0 : _globalThis$pdfjsWork.WorkerMessageHandler; + } catch (ex) { + } + + return mainWorkerMessageHandler || null; + } + + function setupFakeWorkerGlobal() { + if (fakeWorkerCapability) { + return fakeWorkerCapability.promise; + } + + fakeWorkerCapability = (0, _util.createPromiseCapability)(); + + var loader = /*#__PURE__*/function () { + var _ref12 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var mainWorkerMessageHandler, worker; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); + + if (!mainWorkerMessageHandler) { + _context.next = 3; + break; + } + + return _context.abrupt("return", mainWorkerMessageHandler); + + case 3: + if (!(_is_node.isNodeJS && typeof require === "function")) { + _context.next = 6; + break; + } + + worker = eval("require")(_getWorkerSrc()); + return _context.abrupt("return", worker.WorkerMessageHandler); + + case 6: + _context.next = 8; + return (0, _display_utils.loadScript)(_getWorkerSrc()); + + case 8: + return _context.abrupt("return", window.pdfjsWorker.WorkerMessageHandler); + + case 9: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + return function loader() { + return _ref12.apply(this, arguments); + }; + }(); + + loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject); + return fakeWorkerCapability.promise; + } + + function createCDNWrapper(url) { + var wrapper = "importScripts('" + url + "');"; + return URL.createObjectURL(new Blob([wrapper])); + } + + var PDFWorker = /*#__PURE__*/function () { + function PDFWorker() { + var _ref13 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref13$name = _ref13.name, + name = _ref13$name === void 0 ? null : _ref13$name, + _ref13$port = _ref13.port, + port = _ref13$port === void 0 ? null : _ref13$port, + _ref13$verbosity = _ref13.verbosity, + verbosity = _ref13$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref13$verbosity; + + _classCallCheck(this, PDFWorker); + + if (port && pdfWorkerPorts.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port"); + } + + this.name = name; + this.destroyed = false; + this.postMessageTransfers = true; + this.verbosity = verbosity; + this._readyCapability = (0, _util.createPromiseCapability)(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + + if (port) { + pdfWorkerPorts.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" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { + var workerSrc = _getWorkerSrc(); + + try { + if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { + workerSrc = 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; + + if (!data.supportTransfers) { + _this9.postMessageTransfers = false; + } + + _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([_this9.postMessageTransfers ? 255 : 0]); + + 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 (!isWorkerDisabled) { + (0, _util.warn)("Setting up fake worker."); + isWorkerDisabled = true; + } + + 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" + nextFakeWorkerId++; + 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; + } + + pdfWorkerPorts["delete"](this._port); + this._port = null; + + if (this._messageHandler) { + this._messageHandler.destroy(); + + this._messageHandler = null; + } + } + }], [{ + key: "fromPort", + value: function fromPort(params) { + if (!params || !params.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + + if (pdfWorkerPorts.has(params.port)) { + return pdfWorkerPorts.get(params.port); + } + + return new PDFWorker(params); + } + }, { + key: "getWorkerSrc", + value: function getWorkerSrc() { + return _getWorkerSrc(); + } + }]); + + return PDFWorker; + }(); + + return PDFWorker; + }(); + + exports.PDFWorker = PDFWorker; + + var WorkerTransport = /*#__PURE__*/function () { + function WorkerTransport(messageHandler, loadingTask, networkStream, params) { + _classCallCheck(this, WorkerTransport); + + 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 + }); + this._params = params; + this.CMapReaderFactory = new params.CMapReaderFactory({ + baseUrl: params.cMapUrl, + isCompressed: params.cMapPacked + }); + this.destroyed = false; + this.destroyCapability = null; + this._passwordCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.pageCache = []; + this.pagePromises = []; + this.downloadInfoCapability = (0, _util.createPromiseCapability)(); + this.setupMessageHandler(); + } + + _createClass(WorkerTransport, [{ + key: "loadingTaskSettled", + get: function get() { + return this.loadingTask._capability.settled; + } + }, { + key: "destroy", + value: function destroy() { + var _this11 = 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 = []; + this.pageCache.forEach(function (page) { + if (page) { + waitOn.push(page._destroy()); + } + }); + this.pageCache.length = 0; + this.pagePromises.length = 0; + var terminated = this.messageHandler.sendWithPromise("Terminate", null); + waitOn.push(terminated); + + if (this.loadingTaskSettled) { + var annotationStorageResetModified = this.loadingTask.promise.then(function (pdfDocument) { + if (pdfDocument.hasOwnProperty("annotationStorage")) { + pdfDocument.annotationStorage.resetModified(); + } + })["catch"](function () { + }); + waitOn.push(annotationStorageResetModified); + } + + Promise.all(waitOn).then(function () { + _this11.commonObjs.clear(); + + _this11.fontLoader.clear(); + + _this11._hasJSActionsPromise = null; + + if (_this11._networkStream) { + _this11._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); + } + + if (_this11.messageHandler) { + _this11.messageHandler.destroy(); + + _this11.messageHandler = null; + } + + _this11.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + } + }, { + key: "setupMessageHandler", + value: function setupMessageHandler() { + var _this12 = this; + + var messageHandler = this.messageHandler, + loadingTask = this.loadingTask; + messageHandler.on("GetReader", function (data, sink) { + (0, _util.assert)(_this12._networkStream, "GetReader - no `IPDFStream` instance available."); + _this12._fullReader = _this12._networkStream.getFullReader(); + + _this12._fullReader.onProgress = function (evt) { + _this12._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; + }; + + sink.onPull = function () { + _this12._fullReader.read().then(function (_ref14) { + var value = _ref14.value, + done = _ref14.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) { + _this12._fullReader.cancel(reason); + + sink.ready["catch"](function (readyReason) { + if (_this12.destroyed) { + return; + } + + throw readyReason; + }); + }; + }); + messageHandler.on("ReaderHeadersReady", function (data) { + var headersCapability = (0, _util.createPromiseCapability)(); + var fullReader = _this12._fullReader; + fullReader.headersReady.then(function () { + if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { + if (_this12._lastProgress && loadingTask.onProgress) { + loadingTask.onProgress(_this12._lastProgress); + } + + fullReader.onProgress = function (evt) { + if (loadingTask.onProgress) { + loadingTask.onProgress({ + 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)(_this12._networkStream, "GetRangeReader - no `IPDFStream` instance available."); + + var rangeReader = _this12._networkStream.getRangeReader(data.begin, data.end); + + if (!rangeReader) { + sink.close(); + return; + } + + sink.onPull = function () { + rangeReader.read().then(function (_ref15) { + var value = _ref15.value, + done = _ref15.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 (_this12.destroyed) { + return; + } + + throw readyReason; + }); + }; + }); + messageHandler.on("GetDoc", function (_ref16) { + var pdfInfo = _ref16.pdfInfo; + _this12._numPages = pdfInfo.numPages; + + loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, _this12)); + }); + 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; + } + + if (!(reason instanceof Error)) { + var msg = "DocException - expected a valid Error."; + (0, _util.warn)(msg); + } + + loadingTask._capability.reject(reason); + }); + messageHandler.on("PasswordRequest", function (exception) { + _this12._passwordCapability = (0, _util.createPromiseCapability)(); + + if (loadingTask.onPassword) { + var updatePassword = function updatePassword(password) { + _this12._passwordCapability.resolve({ + password: password + }); + }; + + try { + loadingTask.onPassword(updatePassword, exception.code); + } catch (ex) { + _this12._passwordCapability.reject(ex); + } + } else { + _this12._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); + } + + return _this12._passwordCapability.promise; + }); + messageHandler.on("DataLoaded", function (data) { + if (loadingTask.onProgress) { + loadingTask.onProgress({ + loaded: data.length, + total: data.length + }); + } + + _this12.downloadInfoCapability.resolve(data); + }); + messageHandler.on("StartRenderPage", function (data) { + if (_this12.destroyed) { + return; + } + + var page = _this12.pageCache[data.pageIndex]; + + page._startRenderPage(data.transparency, data.intent); + }); + messageHandler.on("commonobj", function (data) { + var _globalThis$FontInspe; + + if (_this12.destroyed) { + return; + } + + var _data = _slicedToArray(data, 3), + id = _data[0], + type = _data[1], + exportedData = _data[2]; + + if (_this12.commonObjs.has(id)) { + return; + } + + switch (type) { + case "Font": + var params = _this12._params; + + if ("error" in exportedData) { + var exportedError = exportedData.error; + (0, _util.warn)("Error during font loading: ".concat(exportedError)); + + _this12.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: _this12._onUnsupportedFeature.bind(_this12), + fontRegistry: fontRegistry + }); + + _this12.fontLoader.bind(font)["catch"](function (reason) { + return messageHandler.sendWithPromise("FontFallback", { + id: id + }); + })["finally"](function () { + if (!params.fontExtraProperties && font.data) { + font.data = null; + } + + _this12.commonObjs.resolve(id, font); + }); + + break; + + case "FontPath": + case "Image": + _this12.commonObjs.resolve(id, exportedData); + + break; + + default: + throw new Error("Got unknown common object type ".concat(type)); + } + }); + messageHandler.on("obj", function (data) { + var _imageData$data; + + if (_this12.destroyed) { + return undefined; + } + + var _data2 = _slicedToArray(data, 4), + id = _data2[0], + pageIndex = _data2[1], + type = _data2[2], + imageData = _data2[3]; + + var pageProxy = _this12.pageCache[pageIndex]; + + if (pageProxy.objs.has(id)) { + return undefined; + } + + 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; + + default: + throw new Error("Got unknown object type ".concat(type)); + } + + return undefined; + }); + messageHandler.on("DocProgress", function (data) { + if (_this12.destroyed) { + return; + } + + if (loadingTask.onProgress) { + loadingTask.onProgress({ + loaded: data.loaded, + total: data.total + }); + } + }); + messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); + messageHandler.on("FetchBuiltInCMap", function (data, sink) { + if (_this12.destroyed) { + sink.error(new Error("Worker was destroyed")); + return; + } + + var fetched = false; + + sink.onPull = function () { + if (fetched) { + sink.close(); + return; + } + + fetched = true; + + _this12.CMapReaderFactory.fetch(data).then(function (builtInCMap) { + sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]); + })["catch"](function (reason) { + sink.error(reason); + }); + }; + }); + } + }, { + key: "_onUnsupportedFeature", + value: function _onUnsupportedFeature(_ref17) { + var featureId = _ref17.featureId; + + if (this.destroyed) { + return; + } + + if (this.loadingTask.onUnsupportedFeature) { + this.loadingTask.onUnsupportedFeature(featureId); + } + } + }, { + key: "getData", + value: function getData() { + return this.messageHandler.sendWithPromise("GetData", null); + } + }, { + key: "getPage", + value: function getPage(pageNumber) { + var _this13 = this; + + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { + return Promise.reject(new Error("Invalid page request")); + } + + var pageIndex = pageNumber - 1; + + if (pageIndex in this.pagePromises) { + return this.pagePromises[pageIndex]; + } + + var promise = this.messageHandler.sendWithPromise("GetPage", { + pageIndex: pageIndex + }).then(function (pageInfo) { + if (_this13.destroyed) { + throw new Error("Transport destroyed"); + } + + var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.ownerDocument, _this13._params.pdfBug); + _this13.pageCache[pageIndex] = page; + return page; + }); + this.pagePromises[pageIndex] = promise; + return promise; + } + }, { + key: "getPageIndex", + value: function getPageIndex(ref) { + return this.messageHandler.sendWithPromise("GetPageIndex", { + ref: ref + })["catch"](function (reason) { + return Promise.reject(new Error(reason)); + }); + } + }, { + key: "getAnnotations", + value: function getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise("GetAnnotations", { + pageIndex: pageIndex, + intent: intent + }); + } + }, { + key: "saveDocument", + value: function saveDocument(annotationStorage) { + var _this$_fullReader$fil, _this$_fullReader; + + return this.messageHandler.sendWithPromise("SaveDocument", { + numPages: this._numPages, + annotationStorage: (annotationStorage === null || annotationStorage === void 0 ? void 0 : annotationStorage.serializable) || null, + 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 () { + if (annotationStorage) { + annotationStorage.resetModified(); + } + }); + } + }, { + key: "getFieldObjects", + value: function getFieldObjects() { + return 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: "getPageXfa", + value: function getPageXfa(pageIndex) { + return this.messageHandler.sendWithPromise("GetPageXfa", { + 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 _this14 = this; + + return this.messageHandler.sendWithPromise("GetMetadata", null).then(function (results) { + var _this14$_fullReader$f, _this14$_fullReader, _this14$_fullReader$c, + _this14$_fullReader2; + + return { + info: results[0], + metadata: results[1] ? new _metadata.Metadata(results[1]) : null, + contentDispositionFilename: (_this14$_fullReader$f = (_this14$_fullReader = _this14._fullReader) === null || _this14$_fullReader === void 0 ? void 0 : _this14$_fullReader.filename) !== null && _this14$_fullReader$f !== void 0 ? _this14$_fullReader$f : null, + contentLength: (_this14$_fullReader$c = (_this14$_fullReader2 = _this14._fullReader) === null || _this14$_fullReader2 === void 0 ? void 0 : _this14$_fullReader2.contentLength) !== null && _this14$_fullReader$c !== void 0 ? _this14$_fullReader$c : null + }; + }); + } + }, { + key: "getMarkInfo", + value: function getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + } + }, { + key: "getStats", + value: function getStats() { + return this.messageHandler.sendWithPromise("GetStats", null); + } + }, { + key: "startCleanup", + value: function () { + var _startCleanup = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + var keepLoadedFonts, + i, + ii, + page, + cleanupSuccessful, + _args2 = arguments; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + keepLoadedFonts = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false; + _context2.next = 3; + return this.messageHandler.sendWithPromise("Cleanup", null); + + case 3: + if (!this.destroyed) { + _context2.next = 5; + break; + } + + return _context2.abrupt("return"); + + case 5: + i = 0, ii = this.pageCache.length; + + case 6: + if (!(i < ii)) { + _context2.next = 16; + break; + } + + page = this.pageCache[i]; + + if (page) { + _context2.next = 10; + break; + } + + return _context2.abrupt("continue", 13); + + case 10: + cleanupSuccessful = page.cleanup(); + + if (cleanupSuccessful) { + _context2.next = 13; + break; + } + + throw new Error("startCleanup: Page ".concat(i + 1, " is currently rendering.")); + + case 13: + i++; + _context2.next = 6; + break; + + case 16: + this.commonObjs.clear(); + + if (!keepLoadedFonts) { + this.fontLoader.clear(); + } + + this._hasJSActionsPromise = null; + + case 19: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + 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, + disableFontFace: params.disableFontFace + }); + } + }]); + + return WorkerTransport; + }(); + + var PDFObjects = /*#__PURE__*/function () { + function PDFObjects() { + _classCallCheck(this, PDFObjects); + + this._objs = Object.create(null); + } + + _createClass(PDFObjects, [{ + key: "_ensureObj", + value: function _ensureObj(objId) { + if (this._objs[objId]) { + return this._objs[objId]; + } + + return this._objs[objId] = { + capability: (0, _util.createPromiseCapability)(), + data: null, + resolved: false + }; + } + }, { + key: "get", + value: function get(objId) { + var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + if (callback) { + this._ensureObj(objId).capability.promise.then(callback); + + return null; + } + + var obj = this._objs[objId]; + + if (!obj || !obj.resolved) { + throw new Error("Requesting object that isn't resolved yet ".concat(objId, ".")); + } + + return obj.data; + } + }, { + key: "has", + value: function has(objId) { + var obj = this._objs[objId]; + return (obj === null || obj === void 0 ? void 0 : obj.resolved) || false; + } + }, { + key: "resolve", + value: function resolve(objId, data) { + var obj = this._ensureObj(objId); + + obj.resolved = true; + obj.data = data; + obj.capability.resolve(data); + } + }, { + key: "clear", + value: function clear() { + this._objs = Object.create(null); + } + }]); + + return PDFObjects; + }(); + + 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; + }(); + + var InternalRenderTask = function InternalRenderTaskClosure() { + var canvasInRendering = new WeakSet(); + + var InternalRenderTask = /*#__PURE__*/function () { + function InternalRenderTask(_ref18) { + var callback = _ref18.callback, + params = _ref18.params, + objs = _ref18.objs, + commonObjs = _ref18.commonObjs, + operatorList = _ref18.operatorList, + pageIndex = _ref18.pageIndex, + canvasFactory = _ref18.canvasFactory, + webGLContext = _ref18.webGLContext, + _ref18$useRequestAnim = _ref18.useRequestAnimationFrame, + useRequestAnimationFrame = _ref18$useRequestAnim === void 0 ? false : _ref18$useRequestAnim, + _ref18$pdfBug = _ref18.pdfBug, + pdfBug = _ref18$pdfBug === void 0 ? false : _ref18$pdfBug; + + _classCallCheck(this, InternalRenderTask); + + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this.webGLContext = webGLContext; + 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(_ref19) { + var _globalThis$StepperMa; + + var _ref19$transparency = _ref19.transparency, + transparency = _ref19$transparency === void 0 ? false : _ref19$transparency, + optionalContentConfig = _ref19.optionalContentConfig; + + if (this.cancelled) { + return; + } + + if (this._canvas) { + if (canvasInRendering.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."); + } + + canvasInRendering.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, this.webGLContext, imageLayer, optionalContentConfig); + 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) { + canvasInRendering["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 _this15 = this; + + if (this._useRequestAnimationFrame) { + window.requestAnimationFrame(function () { + _this15._nextBound()["catch"](_this15._cancelBound); + }); + } else { + Promise.resolve().then(this._nextBound)["catch"](this._cancelBound); + } + } + }, { + key: "_next", + value: function () { + var _next2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + if (!this.cancelled) { + _context3.next = 2; + break; + } + + return _context3.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) { + canvasInRendering["delete"](this._canvas); + } + + this.callback(); + } + } + + case 4: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function _next() { + return _next2.apply(this, arguments); + } + + return _next; + }() + }]); + + return InternalRenderTask; + }(); + + return InternalRenderTask; + }(); + + var version = '2.8.335'; + exports.version = version; + var build = '228adbf67'; + exports.build = build; + + /***/ + }), + /* 126 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.FontLoader = exports.FontFaceObject = void 0; + + var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); + + var _util = __w_pdfjs_require__(4); + + 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 + } + }); + 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; + } + 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 _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); + 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; + + _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 _this = this; + + this.nativeFontFaces.forEach(function (nativeFontFace) { + _this._document.fonts["delete"](nativeFontFace); + }); + 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 _this2 = 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 = _this2._queueLoadingCallback(resolve); + + _this2._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; + + return (0, _util.shadow)(this, "isFontLoadingAPISupported", !!((_this$_document = this._document) !== null && _this$_document !== void 0 && _this$_document.fonts)); + } + }, { + 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 _this3; + + _classCallCheck(this, GenericFontLoader); + + _this3 = _super.call(this, params); + _this3.loadingContext = { + requests: [], + nextRequestId: 0 + }; + _this3.loadTestFontId = 0; + return _this3; + } + + _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) { + var _this4 = this; + + 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 = "30px " + 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 = []; + + for (i = 0, ii = fonts.length; i < ii; i++) { + names.push(fonts[i].loadedName); + } + + 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 (i = 0, ii = names.length; i < ii; ++i) { + var span = this._document.createElement("span"); + + span.textContent = "Hi"; + span.style.fontFamily = names[i]; + div.appendChild(span); + } + + this._document.body.appendChild(div); + + isFontReady(loadTestFontId, function () { + _this4._document.body.removeChild(div); + + 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 = new FontFace(this.loadedName, this.data, {}); + + 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)(new Uint8Array(this.data)); + var url = "url(data:".concat(this.mimetype, ";base64,").concat(btoa(data), ");"); + var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";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, current; + + 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 args, + js = ""; + + for (var i = 0, ii = cmds.length; i < ii; i++) { + current = cmds[i]; + + if (current.args !== undefined) { + args = current.args.join(","); + } else { + args = ""; + } + + js += "c." + current.cmd + "(" + args + ");\n"; + } + + return this.compiledGlyphs[character] = new Function("c", "size", js); + } + + return this.compiledGlyphs[character] = function (c, size) { + for (var _i = 0, _ii = cmds.length; _i < _ii; _i++) { + current = cmds[_i]; + + if (current.cmd === "scale") { + current.args = [size, -size]; + } + + c[current.cmd].apply(c, current.args); + } + }; + } + }]); + + return FontFaceObject; + }(); + + exports.FontFaceObject = FontFaceObject; + + /***/ + }), + /* 127 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.NodeCMapReaderFactory = exports.NodeCanvasFactory = void 0; + + var _display_utils = __w_pdfjs_require__(1); + + var _is_node = __w_pdfjs_require__(6); + + var _util = __w_pdfjs_require__(4); + + 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); + return Constructor; + } + + 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 + } + }); + 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; + } + 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"); + } + } + + var NodeCanvasFactory = function NodeCanvasFactory() { + _classCallCheck(this, NodeCanvasFactory); + + (0, _util.unreachable)("Not implemented: NodeCanvasFactory"); + }; + + exports.NodeCanvasFactory = NodeCanvasFactory; + + var NodeCMapReaderFactory = function NodeCMapReaderFactory() { + _classCallCheck(this, NodeCMapReaderFactory); + + (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory"); + }; + + exports.NodeCMapReaderFactory = NodeCMapReaderFactory; + + if (_is_node.isNodeJS) { + 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: "create", + value: function create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + + var Canvas = require("canvas"); + + var canvas = Canvas.createCanvas(width, height); + return { + canvas: canvas, + context: canvas.getContext("2d") + }; + } + }]); + + return NodeCanvasFactory; + }(_display_utils.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 new Promise(function (resolve, reject) { + var fs = require("fs"); + + fs.readFile(url, function (error, data) { + if (error || !data) { + reject(new Error(error)); + return; + } + + resolve({ + cMapData: new Uint8Array(data), + compressionType: compressionType + }); + }); + }); + } + }]); + + return NodeCMapReaderFactory; + }(_display_utils.BaseCMapReaderFactory); + } + + /***/ + }), + /* 128 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.AnnotationStorage = void 0; + + var _display_utils = __w_pdfjs_require__(1); + + var _util = __w_pdfjs_require__(4); + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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); + return Constructor; + } + + var AnnotationStorage = /*#__PURE__*/function () { + function AnnotationStorage() { + _classCallCheck(this, AnnotationStorage); + + this._storage = new Map(); + this._modified = false; + this.onSetModified = null; + this.onResetModified = null; + } + + _createClass(AnnotationStorage, [{ + key: "getValue", + value: function getValue(key, defaultValue) { + var obj = this._storage.get(key); + + return obj !== undefined ? obj : defaultValue; + } + }, { + key: "getOrCreateValue", + value: function getOrCreateValue(key, defaultValue) { + (0, _display_utils.deprecated)("Use getValue instead."); + + if (this._storage.has(key)) { + return this._storage.get(key); + } + + this._storage.set(key, defaultValue); + + return defaultValue; + } + }, { + 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 { + this._storage.set(key, value); + + modified = true; + } + + if (modified) { + 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; + } + }]); + + return AnnotationStorage; + }(); + + exports.AnnotationStorage = AnnotationStorage; + + /***/ + }), + /* 129 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.apiCompatibilityParams = void 0; + + var _is_node = __w_pdfjs_require__(6); + + var compatibilityParams = Object.create(null); + { + (function checkFontFace() { + if (_is_node.isNodeJS) { + compatibilityParams.disableFontFace = true; + } + })(); + } + var apiCompatibilityParams = Object.freeze(compatibilityParams); + exports.apiCompatibilityParams = apiCompatibilityParams; + + /***/ + }), + /* 130 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.CanvasGraphics = void 0; + + var _util = __w_pdfjs_require__(4); + + var _pattern_helper = __w_pdfjs_require__(131); + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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 MIN_FONT_SIZE = 16; + var MAX_FONT_SIZE = 100; + var MAX_GROUP_SIZE = 4096; + var COMPILE_TYPE3_GLYPHS = true; + var MAX_SIZE_TO_COMPILE = 1000; + var FULL_CHUNK_HEIGHT = 16; + var LINEWIDTH_SCALE_FACTOR = 1.000001; + + function addContextCurrentTransform(ctx) { + if (!ctx.mozCurrentTransform) { + 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 m = this._transformMatrix; + var a = m[0], + b = m[1], + c = m[2], + d = m[3], + e = m[4], + f = m[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() { + 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] = m[0] * x; + m[1] = m[1] * x; + m[2] = m[2] * y; + m[3] = 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 = function CachedCanvasesClosure() { + function CachedCanvases(canvasFactory) { + this.canvasFactory = canvasFactory; + this.cache = Object.create(null); + } + + CachedCanvases.prototype = { + getCanvas: function CachedCanvases_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; + }, + clear: 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 width = imgData.width, + height = imgData.height, + width1 = width + 1; + var i, ii, j, j0; + var points = new Uint8Array(width1 * (height + 1)); + var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); + 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); + coords.push(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 = function CanvasExtraStateClosure() { + function 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.resumeSMaskCtx = null; + this.transferMaps = null; + } + + CanvasExtraState.prototype = { + clone: function CanvasExtraState_clone() { + return Object.create(this); + }, + setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + }; + return CanvasExtraState; + }(); + + var CanvasGraphics = function CanvasGraphicsClosure() { + var EXECUTION_TIME = 15; + var EXECUTION_STEPS = 10; + + function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer, optionalContentConfig) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.webGLContext = webGLContext; + 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.contentVisible = true; + this.markedContentStack = []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + + if (canvasCtx) { + addContextCurrentTransform(canvasCtx); + } + + this._cachedGetSinglePixelWidth = null; + } + + 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 = "10px 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) { + 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(0, row, width, chunkHeight); + var layerData = layerCtx.getImageData(0, row, width, chunkHeight); + + if (hasBackdrop) { + composeSMaskBackdrop(maskData.data, r0, g0, b0); + } + + composeFn(maskData.data, layerData.data, transferMap); + maskCtx.putImageData(layerData, 0, row); + } + } + + function composeSMask(ctx, smask, layerCtx, webGLContext) { + var mask = smask.canvas; + var maskCtx = smask.context; + ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY); + var backdrop = smask.backdrop || null; + + if (!smask.transferMap && webGLContext.isEnabled) { + var composed = webGLContext.composeSMask({ + layer: layerCtx.canvas, + mask: mask, + properties: { + subtype: smask.subtype, + backdrop: backdrop + } + }); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(composed, smask.offsetX, smask.offsetY); + return; + } + + genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap); + ctx.drawImage(mask, 0, 0); + } + + var LINE_CAP_STYLES = ["butt", "round", "square"]; + var LINE_JOIN_STYLES = ["miter", "round", "bevel"]; + var NORMAL_CLIP = {}; + var EO_CLIP = {}; + CanvasGraphics.prototype = { + beginDrawing: 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.ctx.transform.apply(this.ctx, viewport.transform); + this.baseTransform = this.ctx.mozCurrentTransform.slice(); + this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]); + + if (this.imageLayer) { + this.imageLayer.beginLayout(); + } + }, + executeOperatorList: function CanvasGraphics_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; + } + } + }, + endDrawing: function CanvasGraphics_endDrawing() { + while (this.stateStack.length || this.current.activeSMask !== null) { + 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.webGLContext.clear(); + + if (this.imageLayer) { + this.imageLayer.endLayout(); + } + }, + setLineWidth: function CanvasGraphics_setLineWidth(width) { + this.current.lineWidth = width; + this.ctx.lineWidth = width; + }, + setLineCap: function CanvasGraphics_setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + }, + setLineJoin: function CanvasGraphics_setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + }, + setMiterLimit: function CanvasGraphics_setMiterLimit(limit) { + this.ctx.miterLimit = limit; + }, + setDash: function CanvasGraphics_setDash(dashArray, dashPhase) { + var ctx = this.ctx; + + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + }, + setRenderingIntent: function setRenderingIntent(intent) { + }, + setFlatness: function setFlatness(flatness) { + }, + setGState: function CanvasGraphics_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": + if (this.current.activeSMask) { + if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) { + this.suspendSMaskGroup(); + } else { + this.endSMaskGroup(); + } + } + + this.current.activeSMask = value ? this.tempSMask : null; + + if (this.current.activeSMask) { + this.beginSMaskGroup(); + } + + this.tempSMask = null; + break; + + case "TR": + this.current.transferMaps = value; + } + } + }, + beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() { + var activeSMask = this.current.activeSMask; + var drawnWidth = activeSMask.canvas.width; + var drawnHeight = activeSMask.canvas.height; + var cacheId = "smaskGroupAt" + this.groupLevel; + var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); + var currentCtx = this.ctx; + var currentTransform = currentCtx.mozCurrentTransform; + this.ctx.save(); + var groupCtx = scratchCanvas.context; + groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); + groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); + groupCtx.transform.apply(groupCtx, currentTransform); + activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse; + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + }, + suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() { + var groupCtx = this.ctx; + this.groupLevel--; + this.ctx = this.groupStack.pop(); + composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); + this.ctx.restore(); + this.ctx.save(); + copyCtxState(groupCtx, this.ctx); + this.current.resumeSMaskCtx = groupCtx; + + var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); + + this.ctx.transform.apply(this.ctx, deltaTransform); + groupCtx.save(); + groupCtx.setTransform(1, 0, 0, 1, 0, 0); + groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height); + groupCtx.restore(); + }, + resumeSMaskGroup: function CanvasGraphics_resumeSMaskGroup() { + var groupCtx = this.current.resumeSMaskCtx; + var currentCtx = this.ctx; + this.ctx = groupCtx; + this.groupStack.push(currentCtx); + this.groupLevel++; + }, + endSMaskGroup: function CanvasGraphics_endSMaskGroup() { + var groupCtx = this.ctx; + this.groupLevel--; + this.ctx = this.groupStack.pop(); + composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); + this.ctx.restore(); + copyCtxState(groupCtx, this.ctx); + + var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); + + this.ctx.transform.apply(this.ctx, deltaTransform); + }, + save: function CanvasGraphics_save() { + this.ctx.save(); + var old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + this.current.resumeSMaskCtx = null; + }, + restore: function CanvasGraphics_restore() { + if (this.current.resumeSMaskCtx) { + this.resumeSMaskGroup(); + } + + if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) { + this.endSMaskGroup(); + } + + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + this.ctx.restore(); + this.pendingClip = null; + this._cachedGetSinglePixelWidth = null; + } else { + this.current.activeSMask = null; + } + }, + transform: function CanvasGraphics_transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this._cachedGetSinglePixelWidth = null; + }, + constructPath: function CanvasGraphics_constructPath(ops, args) { + var ctx = this.ctx; + var current = this.current; + var x = current.x, + y = current.y; + + 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); + } + + ctx.closePath(); + break; + + case _util.OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + break; + + case _util.OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + break; + + case _util.OPS.curveTo: + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + j += 6; + break; + + case _util.OPS.curveTo2: + ctx.bezierCurveTo(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: + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + j += 4; + break; + + case _util.OPS.closePath: + ctx.closePath(); + break; + } + } + + current.setCurrentPoint(x, y); + }, + closePath: function CanvasGraphics_closePath() { + this.ctx.closePath(); + }, + stroke: function CanvasGraphics_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(); + var transform = ctx.mozCurrentTransform; + + var scale = _util.Util.singularValueDecompose2dScale(transform)[0]; + + ctx.strokeStyle = strokeColor.getPattern(ctx, this); + var lineWidth = this.getSinglePixelWidth(); + var scaledLineWidth = this.current.lineWidth * scale; + + if (lineWidth < 0 && -lineWidth >= scaledLineWidth) { + ctx.resetTransform(); + ctx.lineWidth = Math.round(this._combinedScaleFactor); + } else { + ctx.lineWidth = Math.max(lineWidth, scaledLineWidth); + } + + ctx.stroke(); + ctx.restore(); + } else { + var _lineWidth = this.getSinglePixelWidth(); + + if (_lineWidth < 0 && -_lineWidth >= this.current.lineWidth) { + ctx.save(); + ctx.resetTransform(); + ctx.lineWidth = Math.round(this._combinedScaleFactor); + ctx.stroke(); + ctx.restore(); + } else { + ctx.lineWidth = Math.max(_lineWidth, this.current.lineWidth); + ctx.stroke(); + } + } + } + + if (consumePath) { + this.consumePath(); + } + + ctx.globalAlpha = this.current.fillAlpha; + }, + closeStroke: function CanvasGraphics_closeStroke() { + this.closePath(); + this.stroke(); + }, + fill: function CanvasGraphics_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(); + + if (this.baseTransform) { + ctx.setTransform.apply(ctx, this.baseTransform); + } + + ctx.fillStyle = fillColor.getPattern(ctx, this); + needRestore = true; + } + + if (this.contentVisible) { + if (this.pendingEOFill) { + ctx.fill("evenodd"); + this.pendingEOFill = false; + } else { + ctx.fill(); + } + } + + if (needRestore) { + ctx.restore(); + } + + if (consumePath) { + this.consumePath(); + } + }, + eoFill: function CanvasGraphics_eoFill() { + this.pendingEOFill = true; + this.fill(); + }, + fillStroke: function CanvasGraphics_fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + }, + eoFillStroke: function CanvasGraphics_eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + }, + closeFillStroke: function CanvasGraphics_closeFillStroke() { + this.closePath(); + this.fillStroke(); + }, + closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + }, + endPath: function CanvasGraphics_endPath() { + this.consumePath(); + }, + clip: function CanvasGraphics_clip() { + this.pendingClip = NORMAL_CLIP; + }, + eoClip: function CanvasGraphics_eoClip() { + this.pendingClip = EO_CLIP; + }, + beginText: function CanvasGraphics_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; + }, + endText: function CanvasGraphics_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; + }, + setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) { + this.current.charSpacing = spacing; + }, + setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + }, + setHScale: function CanvasGraphics_setHScale(scale) { + this.current.textHScale = scale / 100; + }, + setLeading: function CanvasGraphics_setLeading(leading) { + this.current.leading = -leading; + }, + setFont: function CanvasGraphics_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 = "".concat(italic, " ").concat(bold, " ").concat(browserFontSize, "px ").concat(typeface); + }, + setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + }, + setTextRise: function CanvasGraphics_setTextRise(rise) { + this.current.textRise = rise; + }, + moveText: function CanvasGraphics_moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + }, + setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + }, + setTextMatrix: function CanvasGraphics_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; + }, + nextLine: function CanvasGraphics_nextLine() { + this.moveText(0, this.current.leading); + }, + paintChar: function paintChar(character, x, y, patternTransform, resetLineWidthToOne) { + 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) { + if (resetLineWidthToOne) { + ctx.resetTransform(); + ctx.lineWidth = Math.round(this._combinedScaleFactor); + } + + 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) { + if (resetLineWidthToOne) { + ctx.save(); + ctx.moveTo(x, y); + ctx.resetTransform(); + ctx.lineWidth = Math.round(this._combinedScaleFactor); + ctx.strokeText(character, 0, 0); + ctx.restore(); + } else { + 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 + }); + } + }, + + get isFontSubpixelAAEnabled() { + 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); + }, + + showText: function CanvasGraphics_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(); + var patternTransform; + + if (current.patternFill) { + ctx.save(); + var pattern = current.fillColor.getPattern(ctx, this); + patternTransform = ctx.mozCurrentTransform; + ctx.restore(); + ctx.fillStyle = pattern; + } + + 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 lineWidth = current.lineWidth; + var resetLineWidthToOne = false; + 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) { + this._cachedGetSinglePixelWidth = null; + lineWidth = this.getSinglePixelWidth(); + resetLineWidthToOne = lineWidth < 0; + } + } 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 ((0, _util.isNum)(glyph)) { + 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, resetLineWidthToOne); + + 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, resetLineWidthToOne); + } + } + } + + 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(); + }, + showType3Text: function CanvasGraphics_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._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 ((0, _util.isNum)(glyph)) { + 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; + }, + setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) { + }, + setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.clip(); + this.endPath(); + }, + getColorN_Pattern: function CanvasGraphics_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, _this.webGLContext); + } + }; + pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR); + } + + return pattern; + }, + setStrokeColorN: function CanvasGraphics_setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + }, + setFillColorN: function CanvasGraphics_setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + }, + setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) { + var color = _util.Util.makeHexColor(r, g, b); + + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + }, + setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) { + var color = _util.Util.makeHexColor(r, g, b); + + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + }, + shadingFill: function CanvasGraphics_shadingFill(patternIR) { + if (!this.contentVisible) { + return; + } + + var ctx = this.ctx; + this.save(); + var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR); + ctx.fillStyle = pattern.getPattern(ctx, this, true); + 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.restore(); + }, + beginInlineImage: function CanvasGraphics_beginInlineImage() { + (0, _util.unreachable)("Should not call beginInlineImage"); + }, + beginImageData: function CanvasGraphics_beginImageData() { + (0, _util.unreachable)("Should not call beginImageData"); + }, + paintFormXObjectBegin: function CanvasGraphics_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.clip(); + this.endPath(); + } + }, + paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { + if (!this.contentVisible) { + return; + } + + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + }, + beginGroup: function CanvasGraphics_beginGroup(group) { + if (!this.contentVisible) { + return; + } + + this.save(); + 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; + } + + 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); + } + + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + this.current.activeSMask = null; + }, + endGroup: function CanvasGraphics_endGroup(group) { + if (!this.contentVisible) { + return; + } + + this.groupLevel--; + var groupCtx = this.ctx; + this.ctx = this.groupStack.pop(); + + if (this.ctx.imageSmoothingEnabled !== undefined) { + this.ctx.imageSmoothingEnabled = false; + } else { + this.ctx.mozImageSmoothingEnabled = false; + } + + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + } else { + this.ctx.drawImage(groupCtx.canvas, 0, 0); + } + + this.restore(); + }, + beginAnnotations: function CanvasGraphics_beginAnnotations() { + this.save(); + + if (this.baseTransform) { + this.ctx.setTransform.apply(this.ctx, this.baseTransform); + } + }, + endAnnotations: function CanvasGraphics_endAnnotations() { + this.restore(); + }, + beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) { + this.save(); + resetCtxToDefault(this.ctx); + this.current = new CanvasExtraState(); + + if (Array.isArray(rect) && rect.length === 4) { + var width = rect[2] - rect[0]; + var height = rect[3] - rect[1]; + this.ctx.rect(rect[0], rect[1], width, height); + this.clip(); + this.endPath(); + } + + this.transform.apply(this, transform); + this.transform.apply(this, matrix); + }, + endAnnotation: function CanvasGraphics_endAnnotation() { + this.restore(); + }, + paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) { + if (!this.contentVisible) { + return; + } + + var ctx = this.ctx; + var width = img.width, + height = img.height; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + 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 maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + this.paintInlineImageXObject(maskCanvas.canvas); + }, + paintImageMaskXObjectRepeat: 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 width = imgData.width; + var height = imgData.height; + var fillColor = this.current.fillColor; + var isPatternFill = this.current.patternFill; + var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + var maskCtx = maskCanvas.context; + maskCtx.save(); + putBinaryImageMask(maskCtx, imgData); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + var ctx = this.ctx; + + for (var i = 0, ii = positions.length; i < ii; i += 2) { + ctx.save(); + ctx.transform(scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]); + ctx.scale(1, -1); + ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + }, + paintImageMaskXObjectGroup: function CanvasGraphics_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) : 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(); + } + }, + paintImageXObject: function CanvasGraphics_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); + }, + paintImageXObjectRepeat: function CanvasGraphics_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); + }, + paintInlineImageXObject: function CanvasGraphics_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 currentTransform = ctx.mozCurrentTransformInverse; + var widthScale = Math.max(Math.hypot(currentTransform[0], currentTransform[1]), 1); + var heightScale = Math.max(Math.hypot(currentTransform[2], currentTransform[3]), 1); + var imgToPaint, tmpCanvas, tmpCtx; + + if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); + imgToPaint = tmpCanvas.canvas; + } + + var paintWidth = width, + paintHeight = height; + var tmpCanvasId = "prescale1"; + + 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(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + imgToPaint = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + + ctx.drawImage(imgToPaint, 0, 0, paintWidth, 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 / currentTransform[0], + height: height / currentTransform[3] + }); + } + + this.restore(); + }, + paintInlineImageXObjectGroup: function CanvasGraphics_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(); + } + }, + paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() { + if (!this.contentVisible) { + return; + } + + this.ctx.fillRect(0, 0, 1, 1); + }, + markPoint: function CanvasGraphics_markPoint(tag) { + }, + markPointProps: function CanvasGraphics_markPointProps(tag, properties) { + }, + beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) { + this.markedContentStack.push({ + visible: true + }); + }, + beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) { + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { + this.markedContentStack.push({ + visible: true + }); + } + + this.contentVisible = this.isContentVisible(); + }, + endMarkedContent: function CanvasGraphics_endMarkedContent() { + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + }, + beginCompat: function CanvasGraphics_beginCompat() { + }, + endCompat: function CanvasGraphics_endCompat() { + }, + consumePath: function CanvasGraphics_consumePath() { + var ctx = this.ctx; + + if (this.pendingClip) { + if (this.pendingClip === EO_CLIP) { + ctx.clip("evenodd"); + } else { + ctx.clip(); + } + + this.pendingClip = null; + } + + ctx.beginPath(); + }, + getSinglePixelWidth: function getSinglePixelWidth() { + if (this._cachedGetSinglePixelWidth === null) { + var m = this.ctx.mozCurrentTransform; + var absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + var sqNorm1 = Math.pow(m[0], 2) + Math.pow(m[2], 2); + var sqNorm2 = Math.pow(m[1], 2) + Math.pow(m[3], 2); + var pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet; + + if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) { + this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight); + } else if (absDet > Number.EPSILON) { + this._cachedGetSinglePixelWidth = pixelHeight; + } else { + this._cachedGetSinglePixelWidth = 1; + } + } + + return this._cachedGetSinglePixelWidth; + }, + getCanvasPosition: function CanvasGraphics_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]]; + }, + isContentVisible: function CanvasGraphics_isContentVisible() { + for (var i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + + return true; + } + }; + + for (var op in _util.OPS) { + CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; + } + + return CanvasGraphics; + }(); + + exports.CanvasGraphics = CanvasGraphics; + + /***/ + }), + /* 131 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.getShadingPatternFromIR = getShadingPatternFromIR; + exports.TilingPattern = void 0; + + var _util = __w_pdfjs_require__(4); + + var ShadingIRs = {}; + + 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); + } + + ShadingIRs.RadialAxial = { + fromIR: function RadialAxial_fromIR(raw) { + var type = raw[1]; + var bbox = raw[2]; + var colorStops = raw[3]; + var p0 = raw[4]; + var p1 = raw[5]; + var r0 = raw[6]; + var r1 = raw[7]; + return { + getPattern: function RadialAxial_getPattern(ctx) { + applyBoundingBox(ctx, bbox); + var grad; + + if (type === "axial") { + grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); + } else if (type === "radial") { + grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); + } + + for (var i = 0, ii = colorStops.length; i < ii; ++i) { + var c = colorStops[i]; + grad.addColorStop(c[0], c[1]); + } + + return grad; + } + }; + } + }; + + var createMeshCanvas = function createMeshCanvasClosure() { + 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 if (y1 === y2) { + _k = 1; + } 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"); + } + } + + function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) { + var EXPECTED_SCALE = 1.1; + var MAX_PATTERN_SIZE = 3000; + var BORDER_SIZE = 2; + var offsetX = Math.floor(bounds[0]); + var offsetY = Math.floor(bounds[1]); + var boundsWidth = Math.ceil(bounds[2]) - offsetX; + var boundsHeight = Math.ceil(bounds[3]) - offsetY; + var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + var scaleX = boundsWidth / width; + var scaleY = boundsHeight / height; + var context = { + coords: coords, + colors: colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + var paddedWidth = width + BORDER_SIZE * 2; + var paddedHeight = height + BORDER_SIZE * 2; + var canvas, tmpCanvas, i, ii; + + if (webGLContext.isEnabled) { + canvas = webGLContext.drawFigures({ + width: width, + height: height, + backgroundColor: backgroundColor, + figures: figures, + context: context + }); + tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); + tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE); + canvas = tmpCanvas.canvas; + } else { + tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); + var tmpCtx = tmpCanvas.context; + var data = tmpCtx.createImageData(width, height); + + if (backgroundColor) { + var bytes = data.data; + + for (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; + } + } + + for (i = 0; i < figures.length; i++) { + drawFigure(data, figures[i], context); + } + + tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); + canvas = tmpCanvas.canvas; + } + + return { + canvas: canvas, + offsetX: offsetX - BORDER_SIZE * scaleX, + offsetY: offsetY - BORDER_SIZE * scaleY, + scaleX: scaleX, + scaleY: scaleY + }; + } + + return createMeshCanvas; + }(); + + ShadingIRs.Mesh = { + fromIR: function Mesh_fromIR(raw) { + var coords = raw[2]; + var colors = raw[3]; + var figures = raw[4]; + var bounds = raw[5]; + var matrix = raw[6]; + var bbox = raw[7]; + var background = raw[8]; + return { + getPattern: function Mesh_getPattern(ctx, owner, shadingFill) { + applyBoundingBox(ctx, bbox); + var scale; + + if (shadingFill) { + scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); + } else { + scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); + + if (matrix) { + var matrixScale = _util.Util.singularValueDecompose2dScale(matrix); + + scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; + } + } + + var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext); + + if (!shadingFill) { + ctx.setTransform.apply(ctx, owner.baseTransform); + + if (matrix) { + ctx.transform.apply(ctx, matrix); + } + } + + ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); + return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); + } + }; + } + }; + ShadingIRs.Dummy = { + fromIR: function Dummy_fromIR() { + return { + getPattern: function Dummy_fromIR_getPattern() { + return "hotpink"; + } + }; + } + }; + + function getShadingPatternFromIR(raw) { + var shadingIR = ShadingIRs[raw[0]]; + + if (!shadingIR) { + throw new Error("Unknown IR type: ".concat(raw[0])); + } + + return shadingIR.fromIR(raw); + } + + var TilingPattern = function TilingPatternClosure() { + var PaintType = { + COLORED: 1, + UNCOLORED: 2 + }; + var MAX_PATTERN_SIZE = 3000; + + function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) { + 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.canvasGraphicsFactory = canvasGraphicsFactory; + this.baseTransform = baseTransform; + this.ctx = ctx; + } + + TilingPattern.prototype = { + createPatternCanvas: function TilinPattern_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); + graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); + graphics.transform(1, 0, 0, 1, -x0, -y0); + this.clipBbox(graphics, bbox, x0, y0, x1, y1); + graphics.executeOperatorList(operatorList); + this.ctx.transform(1, 0, 0, 1, x0, y0); + this.ctx.scale(1 / dimx.scale, 1 / dimy.scale); + return tmpCanvas.canvas; + }, + getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) { + step = Math.abs(step); + var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize); + var size = Math.ceil(step * scale); + + if (size >= maxSize) { + size = maxSize; + } else { + scale = size / step; + } + + return { + scale: scale, + size: size + }; + }, + clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) { + if (Array.isArray(bbox) && bbox.length === 4) { + var bboxWidth = x1 - x0; + var bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.clip(); + graphics.endPath(); + } + }, + setFillAndStrokeStyleToContext: 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)); + } + }, + getPattern: function TilingPattern_getPattern(ctx, owner) { + ctx = this.ctx; + ctx.setTransform.apply(ctx, this.baseTransform); + ctx.transform.apply(ctx, this.matrix); + var temporaryPatternCanvas = this.createPatternCanvas(owner); + return ctx.createPattern(temporaryPatternCanvas, "repeat"); + } + }; + return TilingPattern; + }(); + + exports.TilingPattern = TilingPattern; + + /***/ + }), + /* 132 */ + /***/ ((__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; + + /***/ + }), + /* 133 */ + /***/ ((__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__(2)); + + var _util = __w_pdfjs_require__(4); + + 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); + return Constructor; + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _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 (_typeof(reason) !== "object" || reason === null) { + return reason; + } + + switch (reason.name) { + case "AbortException": + return new _util.AbortException(reason.message); + + case "MissingPDFException": + return new _util.MissingPDFException(reason.message); + + 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.postMessageTransfers = true; + 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._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._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++; + var sourceName = this.sourceName; + var targetName = this.targetName; + var 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 + }; + + _this2._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 self = this; + var action = this.actionHandler[data.action]; + var streamId = data.streamId; + var sourceName = this.sourceName; + var targetName = data.sourceName; + var comObj = this.comObj; + 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; + } + + self._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; + var sourceName = this.sourceName; + var targetName = data.sourceName; + var comObj = this.comObj; + + switch (data.stream) { + case StreamKind.START_COMPLETE: + if (data.success) { + this.streamControllers[streamId].startCall.resolve(); + } else { + this.streamControllers[streamId].startCall.reject(wrapReason(data.reason)); + } + + break; + + case StreamKind.PULL_COMPLETE: + if (data.success) { + this.streamControllers[streamId].pullCall.resolve(); + } else { + this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason)); + } + + break; + + case StreamKind.PULL: + if (!this.streamSinks[streamId]) { + comObj.postMessage({ + sourceName: sourceName, + targetName: targetName, + stream: StreamKind.PULL_COMPLETE, + streamId: streamId, + success: true + }); + break; + } + + if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) { + this.streamSinks[streamId].sinkCapability.resolve(); + } + + this.streamSinks[streamId].desiredSize = data.desiredSize; + var onPull = this.streamSinks[data.streamId].onPull; + new Promise(function (resolve) { + resolve(onPull && 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)(this.streamControllers[streamId], "enqueue should have stream controller"); + + if (this.streamControllers[streamId].isClosed) { + break; + } + + this.streamControllers[streamId].controller.enqueue(data.chunk); + break; + + case StreamKind.CLOSE: + (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller"); + + if (this.streamControllers[streamId].isClosed) { + break; + } + + this.streamControllers[streamId].isClosed = true; + this.streamControllers[streamId].controller.close(); + + this._deleteStreamController(streamId); + + break; + + case StreamKind.ERROR: + (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller"); + this.streamControllers[streamId].controller.error(wrapReason(data.reason)); + + this._deleteStreamController(streamId); + + break; + + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + this.streamControllers[streamId].cancelCall.resolve(); + } else { + this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason)); + } + + this._deleteStreamController(streamId); + + break; + + case StreamKind.CANCEL: + if (!this.streamSinks[streamId]) { + break; + } + + var onCancel = this.streamSinks[data.streamId].onCancel; + new Promise(function (resolve) { + resolve(onCancel && 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) + }); + }); + this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason)); + this.streamSinks[streamId].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(streamId) { + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) { + return capability && capability.promise; + })); + + case 2: + delete this.streamControllers[streamId]; + + case 3: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function _deleteStreamController(_x) { + return _deleteStreamController2.apply(this, arguments); + } + + return _deleteStreamController; + }() + }, { + key: "_postMessage", + value: function _postMessage(message, transfers) { + if (transfers && this.postMessageTransfers) { + this.comObj.postMessage(message, transfers); + } else { + this.comObj.postMessage(message); + } + } + }, { + key: "destroy", + value: function destroy() { + this.comObj.removeEventListener("message", this._onComObjOnMessage); + } + }]); + + return MessageHandler; + }(); + + exports.MessageHandler = MessageHandler; + + /***/ + }), + /* 134 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.Metadata = void 0; + + var _util = __w_pdfjs_require__(4); + + 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); + return Constructor; + } + + var Metadata = /*#__PURE__*/function () { + function Metadata(_ref) { + var parsedData = _ref.parsedData, + rawData = _ref.rawData; + + _classCallCheck(this, Metadata); + + this._metadataMap = parsedData; + this._data = rawData; + } + + _createClass(Metadata, [{ + key: "getRaw", + value: function getRaw() { + return this._data; + } + }, { + key: "get", + value: function get(name) { + var _this$_metadataMap$ge; + + return (_this$_metadataMap$ge = this._metadataMap.get(name)) !== null && _this$_metadataMap$ge !== void 0 ? _this$_metadataMap$ge : null; + } + }, { + key: "getAll", + value: function getAll() { + return (0, _util.objectFromMap)(this._metadataMap); + } + }, { + key: "has", + value: function has(name) { + return this._metadataMap.has(name); + } + }]); + + return Metadata; + }(); + + exports.Metadata = Metadata; + + /***/ + }), + /* 135 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.OptionalContentConfig = void 0; + + var _util = __w_pdfjs_require__(4); + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + var OptionalContentGroup = 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: "isVisible", + value: function isVisible(group) { + 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) { + (0, _util.warn)("Visibility expression not supported yet."); + } + + 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; + + /***/ + }), + /* 136 */ + /***/ ((__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__(2)); + + var _util = __w_pdfjs_require__(4); + + var _display_utils = __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 _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + 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 readers = this._rangeReaders.slice(0); + + readers.forEach(function (rangeReader) { + rangeReader.cancel(reason); + }); + + 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 _iterator = _createForOfIteratorHelper(this._queuedChunks), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var chunk = _step.value; + this._loaded += chunk.byteLength; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.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; + + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + + this._requests = []; + } + }, { + 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 + }); + + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + + this._requests = []; + } + + 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; + + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + + this._requests = []; + + this._stream._removeRangeReader(this); + } + }]); + + return PDFDataTransportStreamRangeReader; + }(); + + /***/ + }), + /* 137 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.WebGLContext = void 0; + + var _util = __w_pdfjs_require__(4); + + 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); + return Constructor; + } + + var WebGLContext = /*#__PURE__*/function () { + function WebGLContext(_ref) { + var _ref$enable = _ref.enable, + enable = _ref$enable === void 0 ? false : _ref$enable; + + _classCallCheck(this, WebGLContext); + + this._enabled = enable === true; + } + + _createClass(WebGLContext, [{ + key: "isEnabled", + get: function get() { + var enabled = this._enabled; + + if (enabled) { + enabled = WebGLUtils.tryInitGL(); + } + + return (0, _util.shadow)(this, "isEnabled", enabled); + } + }, { + key: "composeSMask", + value: function composeSMask(_ref2) { + var layer = _ref2.layer, + mask = _ref2.mask, + properties = _ref2.properties; + return WebGLUtils.composeSMask(layer, mask, properties); + } + }, { + key: "drawFigures", + value: function drawFigures(_ref3) { + var width = _ref3.width, + height = _ref3.height, + backgroundColor = _ref3.backgroundColor, + figures = _ref3.figures, + context = _ref3.context; + return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context); + } + }, { + key: "clear", + value: function clear() { + WebGLUtils.cleanup(); + } + }]); + + return WebGLContext; + }(); + + exports.WebGLContext = WebGLContext; + + var WebGLUtils = function WebGLUtilsClosure() { + function loadShader(gl, code, shaderType) { + var shader = gl.createShader(shaderType); + gl.shaderSource(shader, code); + gl.compileShader(shader); + var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + + if (!compiled) { + var errorMsg = gl.getShaderInfoLog(shader); + throw new Error("Error during shader compilation: " + errorMsg); + } + + return shader; + } + + function createVertexShader(gl, code) { + return loadShader(gl, code, gl.VERTEX_SHADER); + } + + function createFragmentShader(gl, code) { + return loadShader(gl, code, gl.FRAGMENT_SHADER); + } + + function createProgram(gl, shaders) { + var program = gl.createProgram(); + + for (var i = 0, ii = shaders.length; i < ii; ++i) { + gl.attachShader(program, shaders[i]); + } + + gl.linkProgram(program); + var linked = gl.getProgramParameter(program, gl.LINK_STATUS); + + if (!linked) { + var errorMsg = gl.getProgramInfoLog(program); + throw new Error("Error during program linking: " + errorMsg); + } + + return program; + } + + function createTexture(gl, image, textureId) { + gl.activeTexture(textureId); + var texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); + return texture; + } + + var currentGL, currentCanvas; + + function generateGL() { + if (currentGL) { + return; + } + + currentCanvas = document.createElement("canvas"); + currentGL = currentCanvas.getContext("webgl", { + premultipliedalpha: false + }); + } + + var smaskVertexShaderCode = "\ + attribute vec2 a_position; \ + attribute vec2 a_texCoord; \ + \ + uniform vec2 u_resolution; \ + \ + varying vec2 v_texCoord; \ + \ + void main() { \ + vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \ + gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ + \ + v_texCoord = a_texCoord; \ + } "; + var smaskFragmentShaderCode = "\ + precision mediump float; \ + \ + uniform vec4 u_backdrop; \ + uniform int u_subtype; \ + uniform sampler2D u_image; \ + uniform sampler2D u_mask; \ + \ + varying vec2 v_texCoord; \ + \ + void main() { \ + vec4 imageColor = texture2D(u_image, v_texCoord); \ + vec4 maskColor = texture2D(u_mask, v_texCoord); \ + if (u_backdrop.a > 0.0) { \ + maskColor.rgb = maskColor.rgb * maskColor.a + \ + u_backdrop.rgb * (1.0 - maskColor.a); \ + } \ + float lum; \ + if (u_subtype == 0) { \ + lum = maskColor.a; \ + } else { \ + lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \ + maskColor.b * 0.11; \ + } \ + imageColor.a *= lum; \ + imageColor.rgb *= imageColor.a; \ + gl_FragColor = imageColor; \ + } "; + var smaskCache = null; + + function initSmaskGL() { + generateGL(); + var canvas = currentCanvas; + currentCanvas = null; + var gl = currentGL; + currentGL = null; + var vertexShader = createVertexShader(gl, smaskVertexShaderCode); + var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode); + var program = createProgram(gl, [vertexShader, fragmentShader]); + gl.useProgram(program); + var cache = {}; + cache.gl = gl; + cache.canvas = canvas; + cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution"); + cache.positionLocation = gl.getAttribLocation(program, "a_position"); + cache.backdropLocation = gl.getUniformLocation(program, "u_backdrop"); + cache.subtypeLocation = gl.getUniformLocation(program, "u_subtype"); + var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); + var texLayerLocation = gl.getUniformLocation(program, "u_image"); + var texMaskLocation = gl.getUniformLocation(program, "u_mask"); + var texCoordBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW); + gl.enableVertexAttribArray(texCoordLocation); + gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); + gl.uniform1i(texLayerLocation, 0); + gl.uniform1i(texMaskLocation, 1); + smaskCache = cache; + } + + function composeSMask(layer, mask, properties) { + var width = layer.width, + height = layer.height; + + if (!smaskCache) { + initSmaskGL(); + } + + var cache = smaskCache, + canvas = cache.canvas, + gl = cache.gl; + canvas.width = width; + canvas.height = height; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.uniform2f(cache.resolutionLocation, width, height); + + if (properties.backdrop) { + gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1); + } else { + gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0); + } + + gl.uniform1i(cache.subtypeLocation, properties.subtype === "Luminosity" ? 1 : 0); + var texture = createTexture(gl, layer, gl.TEXTURE0); + var maskTexture = createTexture(gl, mask, gl.TEXTURE1); + var buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.positionLocation); + gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); + gl.clearColor(0, 0, 0, 0); + gl.enable(gl.BLEND); + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + gl.clear(gl.COLOR_BUFFER_BIT); + gl.drawArrays(gl.TRIANGLES, 0, 6); + gl.flush(); + gl.deleteTexture(texture); + gl.deleteTexture(maskTexture); + gl.deleteBuffer(buffer); + return canvas; + } + + var figuresVertexShaderCode = "\ + attribute vec2 a_position; \ + attribute vec3 a_color; \ + \ + uniform vec2 u_resolution; \ + uniform vec2 u_scale; \ + uniform vec2 u_offset; \ + \ + varying vec4 v_color; \ + \ + void main() { \ + vec2 position = (a_position + u_offset) * u_scale; \ + vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \ + gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ + \ + v_color = vec4(a_color / 255.0, 1.0); \ + } "; + var figuresFragmentShaderCode = "\ + precision mediump float; \ + \ + varying vec4 v_color; \ + \ + void main() { \ + gl_FragColor = v_color; \ + } "; + var figuresCache = null; + + function initFiguresGL() { + generateGL(); + var canvas = currentCanvas; + currentCanvas = null; + var gl = currentGL; + currentGL = null; + var vertexShader = createVertexShader(gl, figuresVertexShaderCode); + var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode); + var program = createProgram(gl, [vertexShader, fragmentShader]); + gl.useProgram(program); + var cache = {}; + cache.gl = gl; + cache.canvas = canvas; + cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution"); + cache.scaleLocation = gl.getUniformLocation(program, "u_scale"); + cache.offsetLocation = gl.getUniformLocation(program, "u_offset"); + cache.positionLocation = gl.getAttribLocation(program, "a_position"); + cache.colorLocation = gl.getAttribLocation(program, "a_color"); + figuresCache = cache; + } + + function drawFigures(width, height, backgroundColor, figures, context) { + if (!figuresCache) { + initFiguresGL(); + } + + var cache = figuresCache, + canvas = cache.canvas, + gl = cache.gl; + canvas.width = width; + canvas.height = height; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.uniform2f(cache.resolutionLocation, width, height); + var count = 0; + + for (var i = 0, ii = figures.length; i < ii; i++) { + switch (figures[i].type) { + case "lattice": + var rows = figures[i].coords.length / figures[i].verticesPerRow | 0; + count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6; + break; + + case "triangles": + count += figures[i].coords.length; + break; + } + } + + var coords = new Float32Array(count * 2); + var colors = new Uint8Array(count * 3); + var coordsMap = context.coords, + colorsMap = context.colors; + var pIndex = 0, + cIndex = 0; + + for (var _i = 0, _ii = figures.length; _i < _ii; _i++) { + var figure = figures[_i], + ps = figure.coords, + cs = figure.colors; + + switch (figure.type) { + case "lattice": + var cols = figure.verticesPerRow; + + var _rows = ps.length / cols | 0; + + for (var row = 1; row < _rows; row++) { + var offset = row * cols + 1; + + for (var col = 1; col < cols; col++, offset++) { + coords[pIndex] = coordsMap[ps[offset - cols - 1]]; + coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1]; + coords[pIndex + 2] = coordsMap[ps[offset - cols]]; + coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1]; + coords[pIndex + 4] = coordsMap[ps[offset - 1]]; + coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1]; + colors[cIndex] = colorsMap[cs[offset - cols - 1]]; + colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1]; + colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2]; + colors[cIndex + 3] = colorsMap[cs[offset - cols]]; + colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1]; + colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2]; + colors[cIndex + 6] = colorsMap[cs[offset - 1]]; + colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1]; + colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2]; + coords[pIndex + 6] = coords[pIndex + 2]; + coords[pIndex + 7] = coords[pIndex + 3]; + coords[pIndex + 8] = coords[pIndex + 4]; + coords[pIndex + 9] = coords[pIndex + 5]; + coords[pIndex + 10] = coordsMap[ps[offset]]; + coords[pIndex + 11] = coordsMap[ps[offset] + 1]; + colors[cIndex + 9] = colors[cIndex + 3]; + colors[cIndex + 10] = colors[cIndex + 4]; + colors[cIndex + 11] = colors[cIndex + 5]; + colors[cIndex + 12] = colors[cIndex + 6]; + colors[cIndex + 13] = colors[cIndex + 7]; + colors[cIndex + 14] = colors[cIndex + 8]; + colors[cIndex + 15] = colorsMap[cs[offset]]; + colors[cIndex + 16] = colorsMap[cs[offset] + 1]; + colors[cIndex + 17] = colorsMap[cs[offset] + 2]; + pIndex += 12; + cIndex += 18; + } + } + + break; + + case "triangles": + for (var j = 0, jj = ps.length; j < jj; j++) { + coords[pIndex] = coordsMap[ps[j]]; + coords[pIndex + 1] = coordsMap[ps[j] + 1]; + colors[cIndex] = colorsMap[cs[j]]; + colors[cIndex + 1] = colorsMap[cs[j] + 1]; + colors[cIndex + 2] = colorsMap[cs[j] + 2]; + pIndex += 2; + cIndex += 3; + } + + break; + } + } + + if (backgroundColor) { + gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0); + } else { + gl.clearColor(0, 0, 0, 0); + } + + gl.clear(gl.COLOR_BUFFER_BIT); + var coordsBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer); + gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.positionLocation); + gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); + var colorsBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer); + gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW); + gl.enableVertexAttribArray(cache.colorLocation); + gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0); + gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY); + gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY); + gl.drawArrays(gl.TRIANGLES, 0, count); + gl.flush(); + gl.deleteBuffer(coordsBuffer); + gl.deleteBuffer(colorsBuffer); + return canvas; + } + + return { + tryInitGL: function tryInitGL() { + try { + generateGL(); + return !!currentGL; + } catch (ex) { + } + + return false; + }, + composeSMask: composeSMask, + drawFigures: drawFigures, + cleanup: function cleanup() { + var _smaskCache, _figuresCache; + + if ((_smaskCache = smaskCache) !== null && _smaskCache !== void 0 && _smaskCache.canvas) { + smaskCache.canvas.width = 0; + smaskCache.canvas.height = 0; + } + + if ((_figuresCache = figuresCache) !== null && _figuresCache !== void 0 && _figuresCache.canvas) { + figuresCache.canvas.width = 0; + figuresCache.canvas.height = 0; + } + + smaskCache = null; + figuresCache = null; + } + }; + }(); + + /***/ + }), + /* 138 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.AnnotationLayer = void 0; + + var _display_utils = __w_pdfjs_require__(1); + + var _util = __w_pdfjs_require__(4); + + var _annotation_storage = __w_pdfjs_require__(128); + + var _scripting_utils = __w_pdfjs_require__(139); + + function _get(target, property, receiver) { + 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(receiver); + } + return desc.value; + }; + } + return _get(target, property, receiver || target); + } + + function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + return object; + } + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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 _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 + } + }); + 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; + } + 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; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + 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.renderInteractiveForms = parameters.renderInteractiveForms; + this.svgFactory = parameters.svgFactory; + this.annotationStorage = parameters.annotationStorage; + this.enableScripting = parameters.enableScripting; + this.hasJSActions = parameters.hasJSActions; + 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 width = data.rect[2] - data.rect[0]; + var height = data.rect[3] - data.rect[1]; + 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]]); + + 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 = width - 2 * data.borderStyle.width; + height = 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; + } + + if (data.color) { + 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"); + 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, + title: data.title, + modificationDate: data.modificationDate, + contents: data.contents, + hideWrapper: true + }); + var popup = popupElement.render(); + popup.style.left = container.style.width; + container.appendChild(popup); + } + }, { + key: "_renderQuadrilaterals", + value: function _renderQuadrilaterals(className) { + this.quadrilaterals.forEach(function (quadrilateral) { + quadrilateral.className = className; + }); + return this.quadrilaterals; + } + }, { + key: "render", + value: function render() { + (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); + } + }]); + + return AnnotationElement; + }(); + + var LinkAnnotationElement = /*#__PURE__*/function (_AnnotationElement) { + _inherits(LinkAnnotationElement, _AnnotationElement); + + var _super = _createSuper(LinkAnnotationElement); + + function LinkAnnotationElement(parameters) { + _classCallCheck(this, LinkAnnotationElement); + + var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"])); + return _super.call(this, parameters, { + isRenderable: isRenderable, + createQuadrilaterals: true + }); + } + + _createClass(LinkAnnotationElement, [{ + key: "render", + value: function render() { + var data = this.data, + linkService = this.linkService; + var link = document.createElement("a"); + + if (data.url) { + (0, _display_utils.addLinkAttributes)(link, { + url: data.url, + target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget, + rel: linkService.externalLinkRel, + enabled: linkService.externalLinkEnabled + }); + } else if (data.action) { + this._bindNamedAction(link, data.action); + } else if (data.dest) { + this._bindLink(link, data.dest); + } else if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { + this._bindJSAction(link, data); + } else { + 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"; + 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"; + } + } + }, { + 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"; + } + }, { + 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[_i]; + 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 _i = 0, _Object$keys = Object.keys(data.actions); _i < _Object$keys.length; _i++) { + var _ret = _loop(); + + if (_ret === "continue") continue; + } + + link.className = "internalLink"; + } + }]); + + return LinkAnnotationElement; + }(AnnotationElement); + + var TextAnnotationElement = /*#__PURE__*/function (_AnnotationElement2) { + _inherits(TextAnnotationElement, _AnnotationElement2); + + var _super2 = _createSuper(TextAnnotationElement); + + function TextAnnotationElement(parameters) { + _classCallCheck(this, TextAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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) { + return navigator.platform.includes("Win") && event.ctrlKey || navigator.platform.includes("Mac") && event.metaKey; + } + }, { + key: "_setEventListener", + value: function _setEventListener(element, baseName, eventName, valueGetter) { + var _this4 = this; + + if (baseName.includes("mouse")) { + element.addEventListener(baseName, function (event) { + 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: _this4.data.id, + name: eventName, + value: valueGetter(event), + shift: event.shiftKey, + modifier: _this4._getKeyModifier(event) + } + }); + }); + } else { + element.addEventListener(baseName, function (event) { + var _this4$linkService$ev2; + + (_this4$linkService$ev2 = _this4.linkService.eventBus) === null || _this4$linkService$ev2 === void 0 ? void 0 : _this4$linkService$ev2.dispatch("dispatcheventinsandbox", { + source: _this4, + detail: { + id: _this4.data.id, + name: eventName, + value: event.target.checked + } + }); + }); + } + } + }, { + key: "_setEventListeners", + value: function _setEventListeners(element, names, getter) { + var _iterator2 = _createForOfIteratorHelper(names), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var _this$data$actions; + + var _step2$value = _slicedToArray(_step2.value, 2), + baseName = _step2$value[0], + eventName = _step2$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) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + }, { + key: "_setColor", + value: function _setColor(event) { + var detail = event.detail, + target = event.target; + var style = target.style; + + for (var _i2 = 0, _arr2 = ["bgColor", "fillColor", "fgColor", "textColor", "borderColor", "strokeColor"]; _i2 < _arr2.length; _i2++) { + var name = _arr2[_i2]; + var color = detail[name]; + + if (!color) { + continue; + } + + color = _scripting_utils.ColorConverters["".concat(color[0], "_HTML")](color.slice(1)); + + switch (name) { + case "bgColor": + case "fillColor": + style.backgroundColor = color; + break; + + case "fgColor": + case "textColor": + style.color = color; + break; + + case "borderColor": + case "strokeColor": + style.borderColor = color; + break; + } + } + } + }]); + + return WidgetAnnotationElement; + }(AnnotationElement); + + var TextWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem) { + _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem); + + var _super4 = _createSuper(TextWidgetAnnotationElement); + + function TextWidgetAnnotationElement(parameters) { + _classCallCheck(this, TextWidgetAnnotationElement); + + var isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + return _super4.call(this, parameters, { + isRenderable: isRenderable + }); + } + + _createClass(TextWidgetAnnotationElement, [{ + key: "render", + value: function render() { + var _this5 = this; + + var storage = this.annotationStorage; + var id = this.data.id; + this.container.className = "textWidgetAnnotation"; + var element = null; + + if (this.renderInteractiveForms) { + 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, + beforeInputSelectionRange: null, + beforeInputValue: null + }; + + if (this.data.multiLine) { + element = document.createElement("textarea"); + element.textContent = textContent; + } else { + element = document.createElement("input"); + element.type = "text"; + element.setAttribute("value", textContent); + } + + elementData.userValue = textContent; + element.setAttribute("id", id); + element.addEventListener("input", function (event) { + storage.setValue(id, { + value: event.target.value + }); + }); + + var blurListener = function blurListener(event) { + if (elementData.formattedValue) { + event.target.value = elementData.formattedValue; + } + + event.target.setSelectionRange(0, 0); + elementData.beforeInputSelectionRange = null; + }; + + 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 (event) { + var detail = event.detail; + var actions = { + value: function value() { + elementData.userValue = detail.value || ""; + storage.setValue(id, { + value: elementData.userValue.toString() + }); + + if (!elementData.formattedValue) { + event.target.value = elementData.userValue; + } + }, + valueAsString: function valueAsString() { + elementData.formattedValue = detail.valueAsString || ""; + + if (event.target !== document.activeElement) { + event.target.value = elementData.formattedValue; + } + + storage.setValue(id, { + formattedValue: elementData.formattedValue + }); + }, + focus: function focus() { + setTimeout(function () { + return event.target.focus({ + preventScroll: false + }); + }, 0); + }, + userName: function userName() { + event.target.title = detail.userName; + }, + hidden: function hidden() { + event.target.style.visibility = detail.hidden ? "hidden" : "visible"; + storage.setValue(id, { + hidden: detail.hidden + }); + }, + editable: function editable() { + event.target.disabled = !detail.editable; + }, + selRange: function selRange() { + var _detail$selRange = _slicedToArray(detail.selRange, 2), + selStart = _detail$selRange[0], + selEnd = _detail$selRange[1]; + + if (selStart >= 0 && selEnd < event.target.value.length) { + event.target.setSelectionRange(selStart, selEnd); + } + } + }; + Object.keys(detail).filter(function (name) { + return name in actions; + }).forEach(function (name) { + return actions[name](); + }); + + _this5._setColor(event); + }); + element.addEventListener("keydown", function (event) { + var _this5$linkService$ev; + + elementData.beforeInputValue = event.target.value; + 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; + (_this5$linkService$ev = _this5.linkService.eventBus) === null || _this5$linkService$ev === void 0 ? void 0 : _this5$linkService$ev.dispatch("dispatcheventinsandbox", { + source: _this5, + 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) { + if (_this5._mouseState.isDown) { + var _this5$linkService$ev2; + + elementData.userValue = event.target.value; + (_this5$linkService$ev2 = _this5.linkService.eventBus) === null || _this5$linkService$ev2 === void 0 ? void 0 : _this5$linkService$ev2.dispatch("dispatcheventinsandbox", { + source: _this5, + detail: { + id: id, + name: "Keystroke", + value: event.target.value, + willCommit: true, + commitKey: 1, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + } + + _blurListener(event); + }); + element.addEventListener("mousedown", function (event) { + elementData.beforeInputValue = event.target.value; + elementData.beforeInputSelectionRange = null; + }); + element.addEventListener("keyup", function (event) { + if (event.target.selectionStart === event.target.selectionEnd) { + elementData.beforeInputSelectionRange = null; + } + }); + element.addEventListener("select", function (event) { + elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd]; + }); + + if ((_this$data$actions2 = this.data.actions) !== null && _this$data$actions2 !== void 0 && _this$data$actions2.Keystroke) { + element.addEventListener("input", function (event) { + var _this5$linkService$ev3; + + var selStart = -1; + var selEnd = -1; + + if (elementData.beforeInputSelectionRange) { + var _elementData$beforeIn = _slicedToArray(elementData.beforeInputSelectionRange, 2); + + selStart = _elementData$beforeIn[0]; + selEnd = _elementData$beforeIn[1]; + } + + (_this5$linkService$ev3 = _this5.linkService.eventBus) === null || _this5$linkService$ev3 === void 0 ? void 0 : _this5$linkService$ev3.dispatch("dispatcheventinsandbox", { + source: _this5, + detail: { + id: id, + name: "Keystroke", + value: elementData.beforeInputValue, + change: event.data, + willCommit: false, + selStart: selStart, + selEnd: selEnd + } + }); + }); + } + + 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); + } + + element.disabled = this.data.readOnly; + element.name = this.data.fieldName; + + 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.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, "px"); + } + + 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.renderInteractiveForms + }); + } + + _createClass(CheckboxWidgetAnnotationElement, [{ + key: "render", + value: function render() { + var _this6 = this; + + var storage = this.annotationStorage; + var data = this.data; + var id = data.id; + var value = storage.getValue(id, { + value: data.fieldValue && (data.exportValue && data.exportValue === data.fieldValue || !data.exportValue && data.fieldValue !== "Off") + }).value; + this.container.className = "buttonWidgetAnnotation checkBox"; + var element = document.createElement("input"); + element.disabled = data.readOnly; + element.type = "checkbox"; + element.name = this.data.fieldName; + + if (value) { + element.setAttribute("checked", true); + } + + element.setAttribute("id", id); + element.addEventListener("change", function (event) { + var name = event.target.name; + + var _iterator3 = _createForOfIteratorHelper(document.getElementsByName(name)), + _step3; + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var checkbox = _step3.value; + + if (checkbox !== event.target) { + checkbox.checked = false; + storage.setValue(checkbox.parentNode.getAttribute("data-annotation-id"), { + value: false + }); + } + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + + storage.setValue(id, { + value: event.target.checked + }); + }); + + if (this.enableScripting && this.hasJSActions) { + element.addEventListener("updatefromsandbox", function (event) { + var detail = event.detail; + var actions = { + value: function value() { + event.target.checked = detail.value !== "Off"; + storage.setValue(id, { + value: event.target.checked + }); + }, + focus: function focus() { + setTimeout(function () { + return event.target.focus({ + preventScroll: false + }); + }, 0); + }, + hidden: function hidden() { + event.target.style.visibility = detail.hidden ? "hidden" : "visible"; + storage.setValue(id, { + hidden: detail.hidden + }); + }, + editable: function editable() { + event.target.disabled = !detail.editable; + } + }; + Object.keys(detail).filter(function (name) { + return name in actions; + }).forEach(function (name) { + return actions[name](); + }); + + _this6._setColor(event); + }); + + 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.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.renderInteractiveForms + }); + } + + _createClass(RadioButtonWidgetAnnotationElement, [{ + key: "render", + value: function render() { + var _this7 = 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; + var element = document.createElement("input"); + element.disabled = data.readOnly; + element.type = "radio"; + element.name = data.fieldName; + + if (value) { + element.setAttribute("checked", true); + } + + element.setAttribute("id", id); + element.addEventListener("change", function (event) { + var target = event.target; + + var _iterator4 = _createForOfIteratorHelper(document.getElementsByName(target.name)), + _step4; + + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + var radio = _step4.value; + + if (radio !== target) { + storage.setValue(radio.getAttribute("id"), { + value: false + }); + } + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + + storage.setValue(id, { + value: target.checked + }); + }); + + if (this.enableScripting && this.hasJSActions) { + var pdfButtonValue = data.buttonValue; + element.addEventListener("updatefromsandbox", function (event) { + var detail = event.detail; + var actions = { + value: function value() { + var checked = pdfButtonValue === detail.value; + + var _iterator5 = _createForOfIteratorHelper(document.getElementsByName(event.target.name)), + _step5; + + try { + for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { + var radio = _step5.value; + var radioId = radio.getAttribute("id"); + radio.checked = radioId === id && checked; + storage.setValue(radioId, { + value: radio.checked + }); + } + } catch (err) { + _iterator5.e(err); + } finally { + _iterator5.f(); + } + }, + focus: function focus() { + setTimeout(function () { + return event.target.focus({ + preventScroll: false + }); + }, 0); + }, + hidden: function hidden() { + event.target.style.visibility = detail.hidden ? "hidden" : "visible"; + storage.setValue(id, { + hidden: detail.hidden + }); + }, + editable: function editable() { + event.target.disabled = !detail.editable; + } + }; + Object.keys(detail).filter(function (name) { + return name in actions; + }).forEach(function (name) { + return actions[name](); + }); + + _this7._setColor(event); + }); + + 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.container.appendChild(element); + return this.container; + } + }]); + + return RadioButtonWidgetAnnotationElement; + }(WidgetAnnotationElement); + + var PushButtonWidgetAnnotationElement = /*#__PURE__*/function (_LinkAnnotationElemen) { + _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen); + + var _super7 = _createSuper(PushButtonWidgetAnnotationElement); + + function PushButtonWidgetAnnotationElement() { + _classCallCheck(this, PushButtonWidgetAnnotationElement); + + return _super7.apply(this, arguments); + } + + _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.renderInteractiveForms + }); + } + + _createClass(ChoiceWidgetAnnotationElement, [{ + key: "render", + value: function render() { + var _this8 = 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 selectElement = document.createElement("select"); + selectElement.disabled = this.data.readOnly; + selectElement.name = this.data.fieldName; + selectElement.setAttribute("id", id); + + if (!this.data.combo) { + selectElement.size = this.data.options.length; + + if (this.data.multiSelect) { + selectElement.multiple = true; + } + } + + var _iterator6 = _createForOfIteratorHelper(this.data.options), + _step6; + + try { + for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { + var option = _step6.value; + var optionElement = document.createElement("option"); + optionElement.textContent = option.displayValue; + optionElement.value = option.exportValue; + + if (this.data.fieldValue.includes(option.exportValue)) { + optionElement.setAttribute("selected", true); + } + + selectElement.appendChild(optionElement); + } + } catch (err) { + _iterator6.e(err); + } finally { + _iterator6.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 (event) { + var detail = event.detail; + var actions = { + value: function value() { + var options = selectElement.options; + var value = detail.value; + var values = new Set(Array.isArray(value) ? value : [value]); + Array.prototype.forEach.call(options, function (option) { + option.selected = values.has(option.value); + }); + storage.setValue(id, { + value: getValue(event, true) + }); + }, + multipleSelection: function multipleSelection() { + selectElement.multiple = true; + }, + remove: function remove() { + var options = selectElement.options; + var index = 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() { + while (selectElement.length !== 0) { + selectElement.remove(0); + } + + storage.setValue(id, { + value: null, + items: [] + }); + }, + insert: function insert() { + var _detail$insert = detail.insert, + index = _detail$insert.index, + displayValue = _detail$insert.displayValue, + exportValue = _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() { + var items = detail.items; + + while (selectElement.length !== 0) { + selectElement.remove(0); + } + + var _iterator7 = _createForOfIteratorHelper(items), + _step7; + + try { + for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { + var item = _step7.value; + var displayValue = item.displayValue, + exportValue = item.exportValue; + var optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + selectElement.appendChild(optionElement); + } + } catch (err) { + _iterator7.e(err); + } finally { + _iterator7.f(); + } + + if (selectElement.options.length > 0) { + selectElement.options[0].selected = true; + } + + storage.setValue(id, { + value: getValue(event, true), + items: getItems(event) + }); + }, + indices: function indices() { + var indices = new Set(detail.indices); + var options = event.target.options; + Array.prototype.forEach.call(options, function (option, i) { + option.selected = indices.has(i); + }); + storage.setValue(id, { + value: getValue(event, true) + }); + }, + focus: function focus() { + setTimeout(function () { + return event.target.focus({ + preventScroll: false + }); + }, 0); + }, + hidden: function hidden() { + event.target.style.visibility = detail.hidden ? "hidden" : "visible"; + storage.setValue(id, { + hidden: detail.hidden + }); + }, + editable: function editable() { + event.target.disabled = !detail.editable; + } + }; + Object.keys(detail).filter(function (name) { + return name in actions; + }).forEach(function (name) { + return actions[name](); + }); + + _this8._setColor(event); + }); + selectElement.addEventListener("input", function (event) { + var _this8$linkService$ev; + + var exportValue = getValue(event, true); + var value = getValue(event, false); + storage.setValue(id, { + value: exportValue + }); + (_this8$linkService$ev = _this8.linkService.eventBus) === null || _this8$linkService$ev === void 0 ? void 0 : _this8$linkService$ev.dispatch("dispatcheventinsandbox", { + source: _this8, + 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.container.appendChild(selectElement); + return this.container; + } + }]); + + return ChoiceWidgetAnnotationElement; + }(WidgetAnnotationElement); + + var PopupAnnotationElement = /*#__PURE__*/function (_AnnotationElement4) { + _inherits(PopupAnnotationElement, _AnnotationElement4); + + var _super9 = _createSuper(PopupAnnotationElement); + + function PopupAnnotationElement(parameters) { + _classCallCheck(this, PopupAnnotationElement); + + var isRenderable = !!(parameters.data.title || parameters.data.contents); + 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, + title: this.data.title, + modificationDate: this.data.modificationDate, + contents: this.data.contents + }); + 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.title = parameters.title; + this.modificationDate = parameters.modificationDate; + this.contents = parameters.contents; + this.hideWrapper = parameters.hideWrapper || false; + this.pinned = false; + } + + _createClass(PopupElement, [{ + key: "render", + value: function render() { + var _this9 = this; + + 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.textContent = this.title; + popup.appendChild(title); + + var dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate); + + if (dateObject) { + var modificationDate = document.createElement("span"); + modificationDate.textContent = "{{date}}, {{time}}"; + modificationDate.dataset.l10nId = "annotation_date_string"; + modificationDate.dataset.l10nArgs = JSON.stringify({ + date: dateObject.toLocaleDateString(), + time: dateObject.toLocaleTimeString() + }); + popup.appendChild(modificationDate); + } + + var contents = this._formatContents(this.contents); + + popup.appendChild(contents); + + if (!Array.isArray(this.trigger)) { + this.trigger = [this.trigger]; + } + + this.trigger.forEach(function (element) { + element.addEventListener("click", _this9._toggle.bind(_this9)); + element.addEventListener("mouseover", _this9._show.bind(_this9, false)); + element.addEventListener("mouseout", _this9._hide.bind(_this9, false)); + }); + popup.addEventListener("click", this._hide.bind(this, true)); + wrapper.appendChild(popup); + return wrapper; + } + }, { + key: "_formatContents", + value: function _formatContents(contents) { + var p = document.createElement("p"); + var lines = contents.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) { + _classCallCheck(this, FreeTextAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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) { + _classCallCheck(this, LineAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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 width = data.rect[2] - data.rect[0]; + var height = data.rect[3] - data.rect[1]; + 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"); + 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) { + _classCallCheck(this, SquareAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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 width = data.rect[2] - data.rect[0]; + var height = data.rect[3] - data.rect[1]; + 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", "none"); + 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) { + _classCallCheck(this, CircleAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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 width = data.rect[2] - data.rect[0]; + var height = data.rect[3] - data.rect[1]; + 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", "none"); + 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 _this10; + + _classCallCheck(this, PolylineAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + _this10 = _super14.call(this, parameters, { + isRenderable: isRenderable, + ignoreBorder: true + }); + _this10.containerClassName = "polylineAnnotation"; + _this10.svgElementName = "svg:polyline"; + return _this10; + } + + _createClass(PolylineAnnotationElement, [{ + key: "render", + value: function render() { + this.container.className = this.containerClassName; + var data = this.data; + var width = data.rect[2] - data.rect[0]; + var height = data.rect[3] - data.rect[1]; + var svg = this.svgFactory.create(width, height); + var points = []; + + var _iterator8 = _createForOfIteratorHelper(data.vertices), + _step8; + + try { + for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { + var coordinate = _step8.value; + var x = coordinate.x - data.rect[0]; + var y = data.rect[3] - coordinate.y; + points.push(x + "," + y); + } + } catch (err) { + _iterator8.e(err); + } finally { + _iterator8.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", "none"); + 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 _this11; + + _classCallCheck(this, PolygonAnnotationElement); + + _this11 = _super15.call(this, parameters); + _this11.containerClassName = "polygonAnnotation"; + _this11.svgElementName = "svg:polygon"; + return _this11; + } + + return PolygonAnnotationElement; + }(PolylineAnnotationElement); + + var CaretAnnotationElement = /*#__PURE__*/function (_AnnotationElement10) { + _inherits(CaretAnnotationElement, _AnnotationElement10); + + var _super16 = _createSuper(CaretAnnotationElement); + + function CaretAnnotationElement(parameters) { + _classCallCheck(this, CaretAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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 _this12; + + _classCallCheck(this, InkAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + _this12 = _super17.call(this, parameters, { + isRenderable: isRenderable, + ignoreBorder: true + }); + _this12.containerClassName = "inkAnnotation"; + _this12.svgElementName = "svg:polyline"; + return _this12; + } + + _createClass(InkAnnotationElement, [{ + key: "render", + value: function render() { + this.container.className = this.containerClassName; + var data = this.data; + var width = data.rect[2] - data.rect[0]; + var height = data.rect[3] - data.rect[1]; + var svg = this.svgFactory.create(width, height); + + var _iterator9 = _createForOfIteratorHelper(data.inkLists), + _step9; + + try { + for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { + var inkList = _step9.value; + var points = []; + + var _iterator10 = _createForOfIteratorHelper(inkList), + _step10; + + try { + for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) { + var coordinate = _step10.value; + var x = coordinate.x - data.rect[0]; + var y = data.rect[3] - coordinate.y; + points.push("".concat(x, ",").concat(y)); + } + } catch (err) { + _iterator10.e(err); + } finally { + _iterator10.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", "none"); + + this._createPopup(polyline, data); + + svg.appendChild(polyline); + } + } catch (err) { + _iterator9.e(err); + } finally { + _iterator9.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) { + _classCallCheck(this, HighlightAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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) { + _classCallCheck(this, UnderlineAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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) { + _classCallCheck(this, SquigglyAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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) { + _classCallCheck(this, StrikeOutAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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) { + _classCallCheck(this, StampAnnotationElement); + + var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + 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 _this13$linkService$e; + + var _this13; + + _classCallCheck(this, FileAttachmentAnnotationElement); + + _this13 = _super23.call(this, parameters, { + isRenderable: true + }); + var _this13$data$file = _this13.data.file, + filename = _this13$data$file.filename, + content = _this13$data$file.content; + _this13.filename = (0, _display_utils.getFilenameFromUrl)(filename); + _this13.content = content; + (_this13$linkService$e = _this13.linkService.eventBus) === null || _this13$linkService$e === void 0 ? void 0 : _this13$linkService$e.dispatch("fileattachmentannotation", { + source: _assertThisInitialized(_this13), + id: (0, _util.stringToPDFString)(filename), + filename: filename, + content: content + }); + return _this13; + } + + _createClass(FileAttachmentAnnotationElement, [{ + key: "render", + value: function render() { + 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.title || this.data.contents)) { + 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 _iterator11 = _createForOfIteratorHelper(parameters.annotations), + _step11; + + try { + for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) { + var _data = _step11.value; + + if (!_data) { + continue; + } + + if (_data.annotationType === _util.AnnotationType.POPUP) { + popupAnnotations.push(_data); + continue; + } + + sortedAnnotations.push(_data); + } + } catch (err) { + _iterator11.e(err); + } finally { + _iterator11.f(); + } + + if (popupAnnotations.length) { + sortedAnnotations.push.apply(sortedAnnotations, popupAnnotations); + } + + for (var _i3 = 0, _sortedAnnotations = sortedAnnotations; _i3 < _sortedAnnotations.length; _i3++) { + var data = _sortedAnnotations[_i3]; + var element = AnnotationElementFactory.create({ + data: data, + layer: parameters.div, + page: parameters.page, + viewport: parameters.viewport, + linkService: parameters.linkService, + downloadManager: parameters.downloadManager, + imageResourcesPath: parameters.imageResourcesPath || "", + renderInteractiveForms: parameters.renderInteractiveForms !== false, + svgFactory: new _display_utils.DOMSVGFactory(), + annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(), + enableScripting: parameters.enableScripting, + hasJSActions: parameters.hasJSActions, + mouseState: parameters.mouseState || { + isDown: false + } + }); + + if (element.isRenderable) { + var rendered = element.render(); + + if (data.hidden) { + rendered.style.visibility = "hidden"; + } + + if (Array.isArray(rendered)) { + var _iterator12 = _createForOfIteratorHelper(rendered), + _step12; + + try { + for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) { + var renderedElement = _step12.value; + parameters.div.appendChild(renderedElement); + } + } catch (err) { + _iterator12.e(err); + } finally { + _iterator12.f(); + } + } else { + if (element instanceof PopupAnnotationElement) { + parameters.div.prepend(rendered); + } else { + parameters.div.appendChild(rendered); + } + } + } + } + } + }, { + key: "update", + value: function update(parameters) { + var transform = "matrix(".concat(parameters.viewport.transform.join(","), ")"); + + var _iterator13 = _createForOfIteratorHelper(parameters.annotations), + _step13; + + try { + for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) { + var data = _step13.value; + var elements = parameters.div.querySelectorAll("[data-annotation-id=\"".concat(data.id, "\"]")); + + if (elements) { + elements.forEach(function (element) { + element.style.transform = transform; + }); + } + } + } catch (err) { + _iterator13.e(err); + } finally { + _iterator13.f(); + } + + parameters.div.hidden = false; + } + }]); + + return AnnotationLayer; + }(); + + exports.AnnotationLayer = AnnotationLayer; + + /***/ + }), + /* 139 */ + /***/ ((__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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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); + 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; + + /***/ + }), + /* 140 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.renderTextLayer = void 0; + + var _util = __w_pdfjs_require__(4); + + var renderTextLayer = function renderTextLayerClosure() { + var MAX_TEXT_DIVS_TO_RENDER = 100000; + var DEFAULT_FONT_SIZE = 30; + var DEFAULT_FONT_ASCENT = 0.8; + var ascentCache = new Map(); + var NonWhitespaceRegexp = /\S/; + + function isAllWhitespace(str) { + return !NonWhitespaceRegexp.test(str); + } + + 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 = { + angle: 0, + canvasWidth: 0, + isWhitespace: false, + originalTransform: null, + paddingBottom: 0, + paddingLeft: 0, + paddingRight: 0, + paddingTop: 0, + scale: 1 + }; + + task._textDivs.push(textDiv); + + if (isAllWhitespace(geom.str)) { + textDivProperties.isWhitespace = true; + + task._textDivProperties.set(textDiv, textDivProperties); + + return; + } + + 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, "px"); + textDiv.style.fontFamily = style.fontFamily; + 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) { + shouldScaleText = true; + } else if (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) { + 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); + + var _loop = function _loop(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); + + return "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); + points.forEach(function (p, j) { + var t = _util.Util.applyTransform(p, 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); + }; + + for (var i = 0; i < expanded.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + } + + 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); + bounds.forEach(function (b) { + var i = b.index; + expanded[i] = { + left: b.x1New, + top: 0, + right: b.x2New, + bottom: 0 + }; + }); + 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); + bounds.forEach(function (b) { + var i = b.index; + expanded[i].top = b.x1New; + expanded[i].bottom = b.x2New; + }); + 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 + }]; + bounds.forEach(function (boundary) { + 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, affectedBoundary; + var q, + k, + 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)); + }); + horizon.forEach(function (horizonPart) { + var affectedBoundary = horizonPart.boundary; + + if (affectedBoundary.x2New === undefined) { + affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); + } + }); + } + + 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; + 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._layoutTextCtx) { + _this._layoutTextCtx.canvas.width = 0; + _this._layoutTextCtx.canvas.height = 0; + _this._layoutTextCtx = null; + } + })["catch"](function () { + }); + } + + TextLayerRenderTask.prototype = { + get promise() { + return this._capability.promise; + }, + + cancel: function TextLayer_cancel() { + this._canceled = true; + + if (this._reader) { + this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")); + + this._reader = null; + } + + if (this._renderTimer !== null) { + clearTimeout(this._renderTimer); + this._renderTimer = null; + } + + this._capability.reject(new Error("TextLayer task cancelled.")); + }, + _processItems: function _processItems(items, styleCache) { + for (var i = 0, len = items.length; i < len; i++) { + this._textContentItemsStr.push(items[i].str); + + appendText(this, items[i], styleCache, this._layoutTextCtx); + } + }, + _layoutText: function _layoutText(textDiv) { + var textDivProperties = this._textDivProperties.get(textDiv); + + if (textDivProperties.isWhitespace) { + return; + } + + var transform = ""; + + if (textDivProperties.canvasWidth !== 0) { + 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) { + textDivProperties.scale = textDivProperties.canvasWidth / width; + transform = "scaleX(".concat(textDivProperties.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; + } + + this._textDivProperties.set(textDiv, textDivProperties); + + this._container.appendChild(textDiv); + }, + _render: function TextLayer_render(timeout) { + var _this2 = this; + + 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); + }, + expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { + 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.isWhitespace) { + 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; + } + } + } + }; + + 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; + } + + return renderTextLayer; + }(); + + exports.renderTextLayer = renderTextLayer; + + /***/ + }), + /* 141 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.SVGGraphics = void 0; + + var _util = __w_pdfjs_require__(4); + + var _display_utils = __w_pdfjs_require__(1); + + var _is_node = __w_pdfjs_require__(6); + + 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" && Symbol.iterator in Object(iter)) 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + var SVGGraphics = function SVGGraphics() { + throw new Error("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 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 (0, _util.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), "px")); + 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), "px")); + 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 ((0, _util.isNum)(glyph)) { + 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), "px")); + + 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 = (0, _util.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$applyTransform = _util.Util.applyTransform([x0, y0], matrix), + _Util$applyTransform2 = _slicedToArray(_Util$applyTransform, 2), + tx0 = _Util$applyTransform2[0], + ty0 = _Util$applyTransform2[1]; + + var _Util$applyTransform3 = _util.Util.applyTransform([x1, y1], matrix), + _Util$applyTransform4 = _slicedToArray(_Util$applyTransform3, 2), + tx1 = _Util$applyTransform4[0], + ty1 = _Util$applyTransform4[1]; + + 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) { + 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; + this.extraStack.forEach(function (prev) { + prev.clipGroup = null; + }); + 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 _iterator7 = _createForOfIteratorHelper(states), + _step7; + + try { + for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { + var _step7$value = _slicedToArray(_step7.value, 2), + key = _step7$value[0], + value = _step7$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) { + _iterator7.e(err); + } finally { + _iterator7.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; + }(); + } + + /***/ + }), + /* 142 */ + /***/ ((__unused_webpack_module, exports) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.XfaLayer = 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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); + return Constructor; + } + + var XfaLayer = /*#__PURE__*/function () { + function XfaLayer() { + _classCallCheck(this, XfaLayer); + } + + _createClass(XfaLayer, null, [{ + key: "setAttributes", + value: function setAttributes(html, attrs) { + for (var _i = 0, _Object$entries = Object.entries(attrs); _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) { + continue; + } + + if (key !== "style") { + html.setAttribute(key, value); + } else { + Object.assign(html.style, value); + } + } + } + }, { + key: "render", + value: function render(parameters) { + var root = parameters.xfa; + var rootHtml = document.createElement(root.name); + + if (root.attributes) { + XfaLayer.setAttributes(rootHtml, root.attributes); + } + + var stack = [[root, -1, rootHtml]]; + var rootDiv = parameters.div; + rootDiv.appendChild(rootHtml); + var coeffs = parameters.viewport.transform.join(","); + rootDiv.style.transform = "matrix(".concat(coeffs, ")"); + rootDiv.setAttribute("class", "xfaLayer xfaFont"); + + while (stack.length > 0) { + 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") { + html.appendChild(document.createTextNode(child.value)); + continue; + } + + var childHtml = document.createElement(name); + html.appendChild(childHtml); + + if (child.attributes) { + XfaLayer.setAttributes(childHtml, child.attributes); + } + + if (child.children && child.children.length > 0) { + stack.push([child, -1, childHtml]); + } else if (child.value) { + childHtml.appendChild(document.createTextNode(child.value)); + } + } + } + }, { + 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; + + /***/ + }), + /* 143 */ + /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + "use strict"; + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFNodeStream = void 0; + + var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); + + var _util = __w_pdfjs_require__(4); + + var _network_utils = __w_pdfjs_require__(144); + + 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 + } + }); + 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; + } + 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 _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); + 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 readers = this._rangeRequestReaders.slice(0); + + readers.forEach(function (reader) { + reader.cancel(reason); + }); + } + }]); + + 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 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 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 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 PDFNodeStreamFsRangeReader; + }(BaseRangeReader); + + /***/ + }), + /* 144 */ + /***/ ((__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__(4); + + var _content_disposition = __w_pdfjs_require__(145); + + var _display_utils = __w_pdfjs_require__(1); + + 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; + } + + /***/ + }), + /* 145 */ + /***/ ((__unused_webpack_module, exports) => { + + "use strict"; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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 bytes = Array.from(value, function (ch) { + return ch.charCodeAt(0) & 0xff; + }); + value = decoder.decode(new Uint8Array(bytes)); + needsEncodingFixup = false; + } catch (e) { + if (/^utf-?8$/i.test(encoding)) { + try { + value = decodeURIComponent(escape(value)); + needsEncodingFixup = false; + } catch (err) { + } + } + } + } + + 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 ""; + } + + /***/ + }), + /* 146 */ + /***/ ((__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__(2)); + + var _util = __w_pdfjs_require__(4); + + var _network_utils = __w_pdfjs_require__(144); + + 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); + 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, args) { + _classCallCheck(this, NetworkManager); + + this.url = url; + args = args || {}; + this.isHttp = /^https?:/i.test(url); + this.httpHeaders = this.isHttp && args.httpHeaders || {}; + 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 = this.pendingRequests[xhrId]; + + if (!pendingRequest) { + return; + } + + if (pendingRequest.onProgress) { + pendingRequest.onProgress(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) { + if (pendingRequest.onError) { + pendingRequest.onError(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) { + if (pendingRequest.onError) { + pendingRequest.onError(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 if (pendingRequest.onError) { + pendingRequest.onError(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) { + if (this._fullRequestReader) { + this._fullRequestReader.cancel(reason); + } + + var readers = this._rangeRequestReaders.slice(0); + + readers.forEach(function (reader) { + reader.cancel(reason); + }); + } + }]); + + 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(args) { + if (args) { + if (this._requests.length > 0) { + var requestCapability = this._requests.shift(); + + requestCapability.resolve({ + value: args.chunk, + done: false + }); + } else { + this._cachedChunks.push(args.chunk); + } + } + + this._done = true; + + if (this._cachedChunks.length > 0) { + return; + } + + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + + this._requests = []; + } + }, { + key: "_onError", + value: function _onError(status) { + var url = this._url; + var exception = (0, _network_utils.createResponseStatusError)(status, url); + this._storedError = exception; + + this._headersReceivedCapability.reject(exception); + + this._requests.forEach(function (requestCapability) { + requestCapability.reject(exception); + }); + + this._requests = []; + this._cachedChunks = []; + } + }, { + key: "_onProgress", + value: function _onProgress(data) { + if (this.onProgress) { + this.onProgress({ + loaded: data.loaded, + total: data.lengthComputable ? data.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); + + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + + this._requests = []; + + 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), + onProgress: this._onProgress.bind(this) + }; + this._requestId = manager.requestRange(begin, end, args); + this._requests = []; + this._queuedChunk = null; + this._done = false; + this.onProgress = null; + this.onClosed = null; + } + + _createClass(PDFNetworkStreamRangeRequestReader, [{ + key: "_close", + value: function _close() { + if (this.onClosed) { + this.onClosed(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; + + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + + this._requests = []; + + this._close(); + } + }, { + key: "_onProgress", + value: function _onProgress(evt) { + if (!this.isStreamingSupported && this.onProgress) { + this.onProgress({ + 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._queuedChunk !== null)) { + _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; + + this._requests.forEach(function (requestCapability) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }); + + this._requests = []; + + if (this._manager.isPendingRequest(this._requestId)) { + this._manager.abortRequest(this._requestId); + } + + this._close(); + } + }]); + + return PDFNetworkStreamRangeRequestReader; + }(); + + /***/ + }), + /* 147 */ + /***/ ((__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__(2)); + + var _util = __w_pdfjs_require__(4); + + var _network_utils = __w_pdfjs_require__(144); + + 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); + 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 readers = this._rangeRequestReaders.slice(0); + + readers.forEach(function (reader) { + reader.cancel(reason); + }); + } + }]); + + 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"](function (reason) { + if ((reason === null || reason === void 0 ? void 0 : reason.name) === "AbortError") { + return; + } + + throw reason; + }); + 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].call(module.exports, 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, "addLinkAttributes", ({ + enumerable: true, + get: function get() { + return _display_utils.addLinkAttributes; + } + })); + 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, "isPdfFile", ({ + enumerable: true, + get: function get() { + return _display_utils.isPdfFile; + } + })); + Object.defineProperty(exports, "LinkTarget", ({ + enumerable: true, + get: function get() { + return _display_utils.LinkTarget; + } + })); + Object.defineProperty(exports, "loadScript", ({ + enumerable: true, + get: function get() { + return _display_utils.loadScript; + } + })); + Object.defineProperty(exports, "PDFDateString", ({ + enumerable: true, + get: function get() { + return _display_utils.PDFDateString; + } + })); + Object.defineProperty(exports, "RenderingCancelledException", ({ + enumerable: true, + get: function get() { + return _display_utils.RenderingCancelledException; + } + })); + Object.defineProperty(exports, "build", ({ + enumerable: true, + get: function get() { + return _api.build; + } + })); + Object.defineProperty(exports, "getDocument", ({ + enumerable: true, + get: function get() { + return _api.getDocument; + } + })); + Object.defineProperty(exports, "LoopbackPort", ({ + enumerable: true, + get: function get() { + return _api.LoopbackPort; + } + })); + Object.defineProperty(exports, "PDFDataRangeTransport", ({ + enumerable: true, + get: function get() { + return _api.PDFDataRangeTransport; + } + })); + Object.defineProperty(exports, "PDFWorker", ({ + enumerable: true, + get: function get() { + return _api.PDFWorker; + } + })); + Object.defineProperty(exports, "version", ({ + enumerable: true, + get: function get() { + return _api.version; + } + })); + Object.defineProperty(exports, "CMapCompressionType", ({ + enumerable: true, + get: function get() { + return _util.CMapCompressionType; + } + })); + Object.defineProperty(exports, "createObjectURL", ({ + enumerable: true, + get: function get() { + return _util.createObjectURL; + } + })); + 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, "InvalidPDFException", ({ + enumerable: true, + get: function get() { + return _util.InvalidPDFException; + } + })); + 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, "PasswordResponses", ({ + enumerable: true, + get: function get() { + return _util.PasswordResponses; + } + })); + Object.defineProperty(exports, "PermissionFlag", ({ + enumerable: true, + get: function get() { + return _util.PermissionFlag; + } + })); + Object.defineProperty(exports, "removeNullCharacters", ({ + enumerable: true, + get: function get() { + return _util.removeNullCharacters; + } + })); + Object.defineProperty(exports, "shadow", ({ + enumerable: true, + get: function get() { + return _util.shadow; + } + })); + Object.defineProperty(exports, "UnexpectedResponseException", ({ + enumerable: true, + get: function get() { + return _util.UnexpectedResponseException; + } + })); + Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({ + enumerable: true, + get: function get() { + return _util.UNSUPPORTED_FEATURES; + } + })); + 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, "AnnotationLayer", ({ + enumerable: true, + get: function get() { + return _annotation_layer.AnnotationLayer; + } + })); + Object.defineProperty(exports, "apiCompatibilityParams", ({ + enumerable: true, + get: function get() { + return _api_compatibility.apiCompatibilityParams; + } + })); + Object.defineProperty(exports, "GlobalWorkerOptions", ({ + enumerable: true, + get: function get() { + return _worker_options.GlobalWorkerOptions; + } + })); + Object.defineProperty(exports, "renderTextLayer", ({ + enumerable: true, + get: function get() { + return _text_layer.renderTextLayer; + } + })); + Object.defineProperty(exports, "SVGGraphics", ({ + enumerable: true, + get: function get() { + return _svg.SVGGraphics; + } + })); + Object.defineProperty(exports, "XfaLayer", ({ + enumerable: true, + get: function get() { + return _xfa_layer.XfaLayer; + } + })); + + var _display_utils = __w_pdfjs_require__(1); + + var _api = __w_pdfjs_require__(125); + + var _util = __w_pdfjs_require__(4); + + var _annotation_layer = __w_pdfjs_require__(138); + + var _api_compatibility = __w_pdfjs_require__(129); + + var _worker_options = __w_pdfjs_require__(132); + + var _text_layer = __w_pdfjs_require__(140); + + var _svg = __w_pdfjs_require__(141); + + var _xfa_layer = __w_pdfjs_require__(142); + + var pdfjsVersion = '2.8.335'; + var pdfjsBuild = '228adbf67'; + { + var _require = __w_pdfjs_require__(6), + isNodeJS = _require.isNodeJS; + + if (isNodeJS) { + var PDFNodeStream = __w_pdfjs_require__(143).PDFNodeStream; + + (0, _api.setPDFNetworkStreamFactory)(function (params) { + return new PDFNodeStream(params); + }); + } else { + var PDFNetworkStream = __w_pdfjs_require__(146).PDFNetworkStream; + + var PDFFetchStream; + + if ((0, _display_utils.isFetchSupported)()) { + PDFFetchStream = __w_pdfjs_require__(147).PDFFetchStream; + } + + (0, _api.setPDFNetworkStreamFactory)(function (params) { + if (PDFFetchStream && (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/leigh-mecha-javafx/src/main/resources/pdfjs/web/pdf.js.map b/leigh-mecha-javafx/src/main/resources/pdfjs/web/pdf.js.map new file mode 100644 index 0000000000000000000000000000000000000000..bf3e8e5dea6d5b2452ce9bee41dba4cddde95f22 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/pdf.js.map @@ -0,0 +1,2992 @@ +{ + "version": 3, + "sources": [ + "webpack://pdfjs-dist/build/pdf/webpack/universalModuleDefinition", + "webpack://pdfjs-dist/build/pdf/src/display/display_utils.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/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/global-this.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.global-this.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/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/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-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/has.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/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/set-global.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/inspect-source.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/shared-store.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/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/uid.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/hidden-keys.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/get-built-in.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/path.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-length.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-integer.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/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/es/object/from-entries.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/well-known-symbol.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-is-node.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/use-symbol-as-uid.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/iterators.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/object-get-prototype-of.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/to-object.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/set-to-string-tag.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/modules/es.object.from-entries.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/iterate.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/function-bind-context.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/a-function.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/create-property.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/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/task.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/microtask.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/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/modules/web.dom-collections.iterator.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/dom-iterables.js", + "webpack://pdfjs-dist/build/pdf/node_modules/web-streams-polyfill/dist/ponyfill.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/pad-start.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.pad-start.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-pad.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-repeat.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/string-pad-webkit-bug.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/entry-unbind.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/string/pad-end.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.string.pad-end.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/object/values.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.values.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/internals/object-to-array.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/es/object/entries.js", + "webpack://pdfjs-dist/build/pdf/node_modules/core-js/modules/es.object.entries.js", + "webpack://pdfjs-dist/build/pdf/src/display/api.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/api_compatibility.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/webgl.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/text_layer.js", + "webpack://pdfjs-dist/build/pdf/src/display/svg.js", + "webpack://pdfjs-dist/build/pdf/src/display/xfa_layer.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" + ], + "names": [ + "DEFAULT_LINK_REL", + "SVG_NS", + "constructor", + "unreachable", + "create", + "reset", + "canvasAndContext", + "width", + "height", + "destroy", + "ownerDocument", + "globalThis", + "canvas", + "context", + "baseUrl", + "isCompressed", + "url", + "compressionType", + "CMapCompressionType", + "reason", + "_fetchData", + "isFetchSupported", + "isValidFetchUrl", + "document", + "response", + "cMapData", + "stringToBytes", + "request", + "XMLHttpRequest", + "resolve", + "reject", + "assert", + "svg", + "createElement", + "offsetX", + "offsetY", + "dontFlip", + "centerX", + "viewBox", + "centerY", + "rotation", + "rotateA", + "rotateB", + "rotateC", + "rotateD", + "offsetCanvasX", + "Math", + "offsetCanvasY", + "clone", + "scale", + "convertToViewportPoint", + "convertToViewportRectangle", + "topLeft", + "rect", + "bottomRight", + "convertToPdfPoint", + "LinkTarget", + "NONE", + "SELF", + "BLANK", + "PARENT", + "TOP", + "enabled", + "urlNullRemoved", + "removeNullCharacters", + "link", + "targetStr", + "ii", + "i", + "anchor", + "query", + "end", + "defaultFilename", + "isDataScheme", + "warn", + "reURI", + "reFilename", + "splitURI", + "suggestedFilename", + "decodeURIComponent", + "Object", + "time", + "name", + "Date", + "timeEnd", + "start", + "toString", + "outBuf", + "longest", + "duration", + "Response", + "protocol", + "removeScriptElement", + "script", + "console", + "isString", + "pdfDateStringRegex", + "matches", + "year", + "parseInt", + "month", + "day", + "hour", + "minute", + "second", + "universalTimeRelation", + "offsetHour", + "offsetMinute", + "module", + "runtime", + "Op", + "hasOwn", + "$Symbol", + "iteratorSymbol", + "asyncIteratorSymbol", + "toStringTagSymbol", + "value", + "enumerable", + "configurable", + "writable", + "obj", + "define", + "protoGenerator", + "outerFn", + "generator", + "tryLocsList", + "makeInvokeMethod", + "exports", + "type", + "arg", + "fn", + "GenStateSuspendedStart", + "GenStateSuspendedYield", + "GenStateExecuting", + "GenStateCompleted", + "ContinueSentinel", + "IteratorPrototype", + "getProto", + "NativeIteratorPrototype", + "values", + "Gp", + "GeneratorFunctionPrototype", + "Generator", + "GeneratorFunction", + "ctor", + "genFun", + "__await", + "record", + "tryCatch", + "result", + "invoke", + "previousPromise", + "callInvokeWithMethodAndArg", + "defineIteratorMethods", + "AsyncIterator", + "PromiseImpl", + "iter", + "wrap", + "state", + "method", + "doneResult", + "delegate", + "delegateResult", + "maybeInvokeDelegate", + "done", + "info", + "entry", + "tryLoc", + "locs", + "keys", + "key", + "next", + "iteratorMethod", + "iterable", + "isNaN", + "Context", + "stop", + "rootEntry", + "rootRecord", + "dispatchException", + "handle", + "hasCatch", + "hasFinally", + "abrupt", + "finallyEntry", + "complete", + "finish", + "resetTryEntry", + "thrown", + "delegateYield", + "iterator", + "resultName", + "nextLoc", + "regeneratorRuntime", + "Function", + "IDENTITY_MATRIX", + "FONT_IDENTITY_MATRIX", + "PermissionFlag", + "PRINT", + "MODIFY_CONTENTS", + "COPY", + "MODIFY_ANNOTATIONS", + "FILL_INTERACTIVE_FORMS", + "COPY_FOR_ACCESSIBILITY", + "ASSEMBLE", + "PRINT_HIGH_QUALITY", + "TextRenderingMode", + "FILL", + "STROKE", + "FILL_STROKE", + "INVISIBLE", + "FILL_ADD_TO_PATH", + "STROKE_ADD_TO_PATH", + "FILL_STROKE_ADD_TO_PATH", + "ADD_TO_PATH", + "FILL_STROKE_MASK", + "ADD_TO_PATH_FLAG", + "ImageKind", + "GRAYSCALE_1BPP", + "RGB_24BPP", + "RGBA_32BPP", + "AnnotationType", + "TEXT", + "LINK", + "FREETEXT", + "LINE", + "SQUARE", + "CIRCLE", + "POLYGON", + "POLYLINE", + "HIGHLIGHT", + "UNDERLINE", + "SQUIGGLY", + "STRIKEOUT", + "STAMP", + "CARET", + "INK", + "POPUP", + "FILEATTACHMENT", + "SOUND", + "MOVIE", + "WIDGET", + "SCREEN", + "PRINTERMARK", + "TRAPNET", + "WATERMARK", + "THREED", + "REDACT", + "AnnotationStateModelType", + "MARKED", + "REVIEW", + "AnnotationMarkedState", + "UNMARKED", + "AnnotationReviewState", + "ACCEPTED", + "REJECTED", + "CANCELLED", + "COMPLETED", + "AnnotationReplyType", + "GROUP", + "REPLY", + "AnnotationFlag", + "HIDDEN", + "NOZOOM", + "NOROTATE", + "NOVIEW", + "READONLY", + "LOCKED", + "TOGGLENOVIEW", + "LOCKEDCONTENTS", + "AnnotationFieldFlag", + "REQUIRED", + "NOEXPORT", + "MULTILINE", + "PASSWORD", + "NOTOGGLETOOFF", + "RADIO", + "PUSHBUTTON", + "COMBO", + "EDIT", + "SORT", + "FILESELECT", + "MULTISELECT", + "DONOTSPELLCHECK", + "DONOTSCROLL", + "COMB", + "RICHTEXT", + "RADIOSINUNISON", + "COMMITONSELCHANGE", + "AnnotationBorderStyleType", + "SOLID", + "DASHED", + "BEVELED", + "INSET", + "AnnotationActionEventType", + "E", + "X", + "D", + "U", + "Fo", + "Bl", + "PO", + "PC", + "PV", + "PI", + "K", + "F", + "V", + "C", + "DocumentActionEventType", + "WC", + "WS", + "DS", + "WP", + "DP", + "PageActionEventType", + "O", + "StreamType", + "UNKNOWN", + "FLATE", + "LZW", + "DCT", + "JPX", + "JBIG", + "A85", + "AHX", + "CCF", + "RLX", + "FontType", + "TYPE1", + "TYPE1C", + "CIDFONTTYPE0", + "CIDFONTTYPE0C", + "TRUETYPE", + "CIDFONTTYPE2", + "TYPE3", + "OPENTYPE", + "TYPE0", + "MMTYPE1", + "VerbosityLevel", + "ERRORS", + "WARNINGS", + "INFOS", + "BINARY", + "STREAM", + "OPS", + "dependency", + "setLineWidth", + "setLineCap", + "setLineJoin", + "setMiterLimit", + "setDash", + "setRenderingIntent", + "setFlatness", + "setGState", + "save", + "restore", + "transform", + "moveTo", + "lineTo", + "curveTo", + "curveTo2", + "curveTo3", + "closePath", + "rectangle", + "stroke", + "closeStroke", + "fill", + "eoFill", + "fillStroke", + "eoFillStroke", + "closeFillStroke", + "closeEOFillStroke", + "endPath", + "clip", + "eoClip", + "beginText", + "endText", + "setCharSpacing", + "setWordSpacing", + "setHScale", + "setLeading", + "setFont", + "setTextRenderingMode", + "setTextRise", + "moveText", + "setLeadingMoveText", + "setTextMatrix", + "nextLine", + "showText", + "showSpacedText", + "nextLineShowText", + "nextLineSetSpacingShowText", + "setCharWidth", + "setCharWidthAndBounds", + "setStrokeColorSpace", + "setFillColorSpace", + "setStrokeColor", + "setStrokeColorN", + "setFillColor", + "setFillColorN", + "setStrokeGray", + "setFillGray", + "setStrokeRGBColor", + "setFillRGBColor", + "setStrokeCMYKColor", + "setFillCMYKColor", + "shadingFill", + "beginInlineImage", + "beginImageData", + "endInlineImage", + "paintXObject", + "markPoint", + "markPointProps", + "beginMarkedContent", + "beginMarkedContentProps", + "endMarkedContent", + "beginCompat", + "endCompat", + "paintFormXObjectBegin", + "paintFormXObjectEnd", + "beginGroup", + "endGroup", + "beginAnnotations", + "endAnnotations", + "beginAnnotation", + "endAnnotation", + "paintJpegXObject", + "paintImageMaskXObject", + "paintImageMaskXObjectGroup", + "paintImageXObject", + "paintInlineImageXObject", + "paintInlineImageXObjectGroup", + "paintImageXObjectRepeat", + "paintImageMaskXObjectRepeat", + "paintSolidColorImageMask", + "constructPath", + "UNSUPPORTED_FEATURES", + "unknown", + "forms", + "javaScript", + "smask", + "shadingPattern", + "font", + "errorTilingPattern", + "errorExtGState", + "errorXObject", + "errorFontLoadType3", + "errorFontState", + "errorFontMissing", + "errorFontTranslate", + "errorColorSpace", + "errorOperatorList", + "errorFontToUnicode", + "errorFontLoadNative", + "errorFontGetPath", + "errorMarkedContent", + "PasswordResponses", + "NEED_PASSWORD", + "INCORRECT_PASSWORD", + "verbosity", + "Number", + "base", + "other", + "absoluteUrl", + "_isValidProtocol", + "BaseException", + "NullCharactersRegExp", + "str", + "bytes", + "length", + "MAX_ARGUMENT_COUNT", + "String", + "strBuf", + "chunkEnd", + "chunk", + "arr", + "resultLength", + "arrayByteLength", + "pos", + "data", + "item", + "itemLength", + "buffer8", + "view32", + "IsLittleEndianCached", + "shadow", + "isLittleEndian", + "IsEvalSupportedCached", + "isEvalSupported", + "hexNumbers", + "Array", + "n", + "m1", + "m2", + "xt", + "p", + "m", + "yt", + "d", + "p1", + "Util", + "p2", + "r", + "p3", + "p4", + "v", + "transpose", + "a", + "b", + "c", + "first", + "sx", + "sy", + "orderedX", + "rect1", + "rect2", + "orderedY", + "PDFStringTranslateTable", + "code", + "match", + "buf", + "char", + "escape", + "unescape", + "encodeURIComponent", + "arr1", + "arr2", + "date", + "buffer", + "capability", + "isSettled", + "get", + "contentType", + "forceDataSchema", + "URL", + "digits", + "b1", + "b2", + "b3", + "d1", + "d2", + "d3", + "d4", + "require", + "Buffer", + "isReadableStreamSupported", + "controller", + "isNodeJS", + "process", + "$", + "global", + "getOwnPropertyDescriptor", + "createNonEnumerableProperty", + "redefine", + "setGlobal", + "copyConstructorProperties", + "isForced", + "options", + "source", + "TARGET", + "target", + "GLOBAL", + "STATIC", + "stat", + "FORCED", + "targetProperty", + "sourceProperty", + "descriptor", + "prototype", + "noTargetGet", + "forced", + "undefined", + "sham", + "check", + "it", + "window", + "self", + "DESCRIPTORS", + "propertyIsEnumerableModule", + "createPropertyDescriptor", + "toIndexedObject", + "toPrimitive", + "has", + "IE8_DOM_DEFINE", + "$getOwnPropertyDescriptor", + "P", + "error", + "f", + "call", + "fails", + "defineProperty", + "exec", + "$propertyIsEnumerable", + "propertyIsEnumerable", + "NASHORN_BUG", + "bitmap", + "IndexedObject", + "requireObjectCoercible", + "classof", + "split", + "slice", + "TypeError", + "isObject", + "input", + "PREFERRED_STRING", + "val", + "valueOf", + "hasOwnProperty", + "EXISTS", + "definePropertyModule", + "object", + "anObject", + "$defineProperty", + "Attributes", + "inspectSource", + "InternalStateModule", + "getInternalState", + "enforceInternalState", + "enforce", + "TEMPLATE", + "unsafe", + "simple", + "join", + "store", + "functionToString", + "SHARED", + "NATIVE_WEAK_MAP", + "objectHas", + "shared", + "sharedKey", + "hiddenKeys", + "WeakMap", + "set", + "getterFor", + "TYPE", + "wmget", + "wmhas", + "wmset", + "metadata", + "facade", + "STATE", + "test", + "uid", + "IS_PURE", + "push", + "version", + "mode", + "copyright", + "id", + "postfix", + "random", + "ownKeys", + "getOwnPropertyDescriptorModule", + "getBuiltIn", + "getOwnPropertyNamesModule", + "getOwnPropertySymbolsModule", + "getOwnPropertySymbols", + "concat", + "path", + "aFunction", + "variable", + "namespace", + "arguments", + "internalObjectKeys", + "enumBugKeys", + "getOwnPropertyNames", + "indexOf", + "names", + "toLength", + "toAbsoluteIndex", + "createMethod", + "IS_INCLUDES", + "$this", + "el", + "fromIndex", + "index", + "includes", + "toInteger", + "min", + "argument", + "ceil", + "floor", + "max", + "integer", + "replacement", + "feature", + "detection", + "normalize", + "POLYFILL", + "NATIVE", + "string", + "replace", + "toLowerCase", + "fromEntries", + "addToUnscopables", + "Iterators", + "defineIterator", + "ARRAY_ITERATOR", + "setInternalState", + "iterated", + "kind", + "Arguments", + "wellKnownSymbol", + "UNSCOPABLES", + "ArrayPrototype", + "NATIVE_SYMBOL", + "USE_SYMBOL_AS_UID", + "WellKnownSymbolsStore", + "Symbol", + "createWellKnownSymbol", + "withoutSetter", + "IS_NODE", + "V8_VERSION", + "userAgent", + "versions", + "v8", + "defineProperties", + "html", + "documentCreateElement", + "GT", + "LT", + "PROTOTYPE", + "SCRIPT", + "IE_PROTO", + "EmptyConstructor", + "scriptTag", + "content", + "NullProtoObjectViaActiveX", + "activeXDocument", + "write", + "close", + "temp", + "parentWindow", + "NullProtoObjectViaIFrame", + "iframe", + "JS", + "iframeDocument", + "style", + "display", + "appendChild", + "src", + "contentWindow", + "open", + "NullProtoObject", + "domain", + "ActiveXObject", + "Properties", + "objectKeys", + "createIteratorConstructor", + "getPrototypeOf", + "setPrototypeOf", + "setToStringTag", + "IteratorsCore", + "BUGGY_SAFARI_ITERATORS", + "ITERATOR", + "KEYS", + "VALUES", + "ENTRIES", + "returnThis", + "Iterable", + "NAME", + "IteratorConstructor", + "DEFAULT", + "IS_SET", + "getIterationMethod", + "KIND", + "defaultIterator", + "IterablePrototype", + "entries", + "TO_STRING_TAG", + "INCORRECT_VALUES_NAME", + "nativeIterator", + "anyNativeIterator", + "CurrentIteratorPrototype", + "methods", + "KEY", + "proto", + "PrototypeOfArrayIteratorPrototype", + "arrayIterator", + "NEW_ITERATOR_PROTOTYPE", + "toObject", + "CORRECT_PROTOTYPE_GETTER", + "ObjectPrototype", + "TAG", + "aPossiblePrototype", + "CORRECT_SETTER", + "setter", + "__proto__", + "iterate", + "createProperty", + "k", + "AS_ENTRIES", + "isArrayIteratorMethod", + "bind", + "getIteratorMethod", + "iteratorClose", + "Result", + "stopped", + "unboundFunction", + "that", + "IS_ITERATOR", + "INTERRUPTED", + "iterFn", + "step", + "condition", + "callFn", + "apply", + "TO_STRING_TAG_SUPPORT", + "classofRaw", + "CORRECT_ARGUMENTS", + "tryGet", + "tag", + "callee", + "returnMethod", + "propertyKey", + "Promise", + "$AggregateError", + "AggregateError", + "errors", + "message", + "Error", + "errorsArray", + "NativePromise", + "redefineAll", + "setSpecies", + "anInstance", + "checkCorrectnessOfIteration", + "speciesConstructor", + "task", + "microtask", + "promiseResolve", + "hostReportErrors", + "newPromiseCapabilityModule", + "perform", + "SPECIES", + "PROMISE", + "getInternalPromiseState", + "PromiseConstructor", + "$fetch", + "newPromiseCapability", + "newGenericPromiseCapability", + "DISPATCH_EVENT", + "createEvent", + "dispatchEvent", + "NATIVE_REJECTION_EVENT", + "PromiseRejectionEvent", + "UNHANDLED_REJECTION", + "REJECTION_HANDLED", + "PENDING", + "FULFILLED", + "HANDLED", + "UNHANDLED", + "Internal", + "OwnPromiseCapability", + "PromiseWrapper", + "nativeThen", + "GLOBAL_CORE_JS_PROMISE", + "promise", + "FakePromise", + "then", + "INCORRECT_ITERATION", + "all", + "isThenable", + "notify", + "isReject", + "notified", + "chain", + "reactions", + "ok", + "reaction", + "handler", + "fail", + "exited", + "rejection", + "onHandleUnhandled", + "enter", + "exit", + "onUnhandled", + "event", + "initEvent", + "IS_UNHANDLED", + "isUnhandled", + "emit", + "parent", + "unwrap", + "internalReject", + "internalResolve", + "wrapper", + "executor", + "onFulfilled", + "onRejected", + "fetch", + "x", + "$promiseResolve", + "counter", + "remaining", + "alreadyCalled", + "race", + "CONSTRUCTOR_NAME", + "Constructor", + "SAFE_CLOSING", + "called", + "iteratorWithReturn", + "from", + "SKIP_CLOSING", + "ITERATION_SUPPORT", + "defaultConstructor", + "S", + "IS_IOS", + "location", + "setImmediate", + "clear", + "clearImmediate", + "MessageChannel", + "Dispatch", + "queue", + "ONREADYSTATECHANGE", + "defer", + "channel", + "port", + "run", + "runner", + "listener", + "post", + "postMessage", + "host", + "args", + "nextTick", + "now", + "port2", + "port1", + "onmessage", + "addEventListener", + "importScripts", + "removeChild", + "setTimeout", + "macrotask", + "IS_WEBOS_WEBKIT", + "MutationObserver", + "WebKitMutationObserver", + "queueMicrotaskDescriptor", + "queueMicrotask", + "flush", + "head", + "last", + "toggle", + "node", + "createTextNode", + "observe", + "characterData", + "promiseCapability", + "PromiseCapability", + "$$resolve", + "$$reject", + "allSettled", + "status", + "PROMISE_ANY_ERROR", + "any", + "alreadyResolved", + "alreadyRejected", + "NON_GENERIC", + "real", + "onFinally", + "isFunction", + "e", + "charAt", + "STRING_ITERATOR", + "point", + "CONVERT_TO_STRING", + "position", + "size", + "charCodeAt", + "codeAt", + "DOMIterables", + "ArrayIteratorMethods", + "ArrayValues", + "COLLECTION_NAME", + "Collection", + "CollectionPrototype", + "METHOD_NAME", + "CSSRuleList", + "CSSStyleDeclaration", + "CSSValueList", + "ClientRectList", + "DOMRectList", + "DOMStringList", + "DOMTokenList", + "DataTransferItemList", + "FileList", + "HTMLAllCollection", + "HTMLCollection", + "HTMLFormElement", + "HTMLSelectElement", + "MediaList", + "MimeTypeArray", + "NamedNodeMap", + "NodeList", + "PaintRequestList", + "Plugin", + "PluginArray", + "SVGLengthList", + "SVGNumberList", + "SVGPathSegList", + "SVGPointList", + "SVGStringList", + "SVGTransformList", + "SourceBufferList", + "StyleSheetList", + "TextTrackCueList", + "TextTrackList", + "TouchList", + "factory", + "SymbolPolyfill", + "description", + "noop", + "getGlobals", + "globals", + "typeIsObject", + "rethrowAssertionErrorRejection", + "originalPromise", + "originalPromiseThen", + "originalPromiseResolve", + "originalPromiseReject", + "newPromise", + "promiseResolvedWith", + "promiseRejectedWith", + "PerformPromiseThen", + "uponPromise", + "uponFulfillment", + "uponRejection", + "transformPromiseWith", + "fulfillmentHandler", + "rejectionHandler", + "setPromiseIsHandledToTrue", + "globalQueueMicrotask", + "resolvedPromise", + "reflectCall", + "promiseCall", + "QUEUE_MAX_ARRAY_SIZE", + "SimpleQueue", + "_cursor", + "_size", + "_front", + "_elements", + "_next", + "_back", + "element", + "oldBack", + "newBack", + "shift", + "oldFront", + "newFront", + "oldCursor", + "newCursor", + "elements", + "forEach", + "callback", + "peek", + "front", + "cursor", + "ReadableStreamReaderGenericInitialize", + "reader", + "stream", + "_ownerReadableStream", + "_reader", + "_state", + "defaultReaderClosedPromiseInitialize", + "defaultReaderClosedPromiseInitializeAsResolved", + "defaultReaderClosedPromiseInitializeAsRejected", + "_storedError", + "ReadableStreamReaderGenericCancel", + "ReadableStreamCancel", + "ReadableStreamReaderGenericRelease", + "defaultReaderClosedPromiseReject", + "defaultReaderClosedPromiseResetToRejected", + "readerLockException", + "_closedPromise", + "_closedPromise_resolve", + "_closedPromise_reject", + "defaultReaderClosedPromiseResolve", + "AbortSteps", + "ErrorSteps", + "CancelSteps", + "PullSteps", + "NumberIsFinite", + "isFinite", + "MathTrunc", + "trunc", + "isDictionary", + "assertDictionary", + "assertFunction", + "assertObject", + "assertRequiredArgument", + "assertRequiredField", + "field", + "convertUnrestrictedDouble", + "censorNegativeZero", + "integerPart", + "convertUnsignedLongLongWithEnforceRange", + "lowerBound", + "upperBound", + "MAX_SAFE_INTEGER", + "assertReadableStream", + "IsReadableStream", + "AcquireReadableStreamDefaultReader", + "ReadableStreamDefaultReader", + "ReadableStreamAddReadRequest", + "readRequest", + "_readRequests", + "ReadableStreamFulfillReadRequest", + "_closeSteps", + "_chunkSteps", + "ReadableStreamGetNumReadRequests", + "ReadableStreamHasDefaultReader", + "IsReadableStreamDefaultReader", + "IsReadableStreamLocked", + "defaultReaderBrandCheckException", + "cancel", + "read", + "resolvePromise", + "rejectPromise", + "_errorSteps", + "ReadableStreamDefaultReaderRead", + "releaseLock", + "closed", + "toStringTag", + "_disturbed", + "_readableStreamController", + "_a", + "AsyncIteratorPrototype", + "asyncIterator", + "ReadableStreamAsyncIteratorImpl", + "preventCancel", + "_ongoingPromise", + "_isFinished", + "_preventCancel", + "_this", + "nextSteps", + "_nextSteps", + "return", + "returnSteps", + "_returnSteps", + "ReadableStreamAsyncIteratorPrototype", + "IsReadableStreamAsyncIterator", + "streamAsyncIteratorBrandCheckException", + "_asyncIteratorImpl", + "AcquireReadableStreamAsyncIterator", + "impl", + "NumberIsNaN", + "IsFiniteNonNegativeNumber", + "IsNonNegativeNumber", + "Infinity", + "DequeueValue", + "container", + "pair", + "_queue", + "_queueTotalSize", + "EnqueueValueWithSize", + "RangeError", + "PeekQueueValue", + "ResetQueue", + "CreateArrayFromList", + "CopyDataBlockBytes", + "dest", + "destOffset", + "srcOffset", + "Uint8Array", + "TransferArrayBuffer", + "IsDetachedBuffer", + "ReadableStreamBYOBRequest", + "IsReadableStreamBYOBRequest", + "byobRequestBrandCheckException", + "_view", + "respond", + "bytesWritten", + "_associatedReadableByteStreamController", + "ReadableByteStreamControllerRespond", + "respondWithNewView", + "view", + "ArrayBuffer", + "isView", + "byteLength", + "ReadableByteStreamControllerRespondWithNewView", + "ReadableByteStreamController", + "IsReadableByteStreamController", + "byteStreamControllerBrandCheckException", + "_byobRequest", + "_pendingPullIntos", + "firstDescriptor", + "byteOffset", + "bytesFilled", + "byobRequest", + "SetUpReadableStreamBYOBRequest", + "ReadableByteStreamControllerGetDesiredSize", + "_closeRequested", + "_controlledReadableByteStream", + "ReadableByteStreamControllerClose", + "enqueue", + "ReadableByteStreamControllerEnqueue", + "ReadableByteStreamControllerError", + "_cancelAlgorithm", + "ReadableByteStreamControllerClearAlgorithms", + "ReadableByteStreamControllerHandleQueueDrain", + "autoAllocateChunkSize", + "_autoAllocateChunkSize", + "bufferE", + "pullIntoDescriptor", + "elementSize", + "viewConstructor", + "readerType", + "ReadableByteStreamControllerCallPullIfNeeded", + "desiredSize", + "shouldPull", + "ReadableByteStreamControllerShouldCallPull", + "_pulling", + "_pullAgain", + "pullPromise", + "_pullAlgorithm", + "ReadableByteStreamControllerClearPendingPullIntos", + "ReadableByteStreamControllerInvalidateBYOBRequest", + "ReadableByteStreamControllerCommitPullIntoDescriptor", + "filledView", + "ReadableByteStreamControllerConvertPullIntoDescriptor", + "ReadableStreamFulfillReadIntoRequest", + "ReadableByteStreamControllerEnqueueChunkToQueue", + "ReadableByteStreamControllerFillPullIntoDescriptorFromQueue", + "currentAlignedBytes", + "maxBytesToCopy", + "maxBytesFilled", + "maxAlignedBytes", + "totalBytesToCopyRemaining", + "ready", + "headOfQueue", + "bytesToCopy", + "destStart", + "ReadableByteStreamControllerFillHeadPullIntoDescriptor", + "ReadableStreamClose", + "ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue", + "ReadableByteStreamControllerShiftPendingPullInto", + "ReadableByteStreamControllerPullInto", + "readIntoRequest", + "DataView", + "BYTES_PER_ELEMENT", + "ReadableStreamAddReadIntoRequest", + "emptyView", + "ReadableByteStreamControllerRespondInClosedState", + "ReadableStreamHasBYOBReader", + "ReadableStreamGetNumReadIntoRequests", + "ReadableByteStreamControllerRespondInReadableState", + "remainderSize", + "remainder", + "ReadableByteStreamControllerRespondInternal", + "_started", + "firstPendingPullInto", + "transferredBuffer", + "transferredView", + "ReadableStreamError", + "_strategyHWM", + "SetUpReadableByteStreamController", + "startAlgorithm", + "pullAlgorithm", + "cancelAlgorithm", + "highWaterMark", + "startResult", + "SetUpReadableByteStreamControllerFromUnderlyingSource", + "underlyingByteSource", + "pull", + "AcquireReadableStreamBYOBReader", + "ReadableStreamBYOBReader", + "_readIntoRequests", + "IsReadableStreamBYOBReader", + "byobReaderBrandCheckException", + "ReadableStreamBYOBReaderRead", + "ExtractHighWaterMark", + "strategy", + "defaultHWM", + "ExtractSizeAlgorithm", + "convertQueuingStrategy", + "init", + "convertQueuingStrategySize", + "convertUnderlyingSink", + "original", + "abort", + "convertUnderlyingSinkAbortCallback", + "convertUnderlyingSinkCloseCallback", + "convertUnderlyingSinkStartCallback", + "convertUnderlyingSinkWriteCallback", + "assertWritableStream", + "IsWritableStream", + "WritableStream", + "rawUnderlyingSink", + "rawStrategy", + "underlyingSink", + "InitializeWritableStream", + "sizeAlgorithm", + "SetUpWritableStreamDefaultControllerFromUnderlyingSink", + "streamBrandCheckException", + "IsWritableStreamLocked", + "WritableStreamAbort", + "WritableStreamCloseQueuedOrInFlight", + "WritableStreamClose", + "getWriter", + "AcquireWritableStreamDefaultWriter", + "locked", + "WritableStreamDefaultWriter", + "CreateWritableStream", + "writeAlgorithm", + "closeAlgorithm", + "abortAlgorithm", + "WritableStreamDefaultController", + "SetUpWritableStreamDefaultController", + "_writer", + "_writableStreamController", + "_writeRequests", + "_inFlightWriteRequest", + "_closeRequest", + "_inFlightCloseRequest", + "_pendingAbortRequest", + "_backpressure", + "_promise", + "wasAlreadyErroring", + "_resolve", + "_reject", + "_reason", + "_wasAlreadyErroring", + "WritableStreamStartErroring", + "closeRequest", + "writer", + "defaultWriterReadyPromiseResolve", + "WritableStreamDefaultControllerClose", + "WritableStreamAddWriteRequest", + "writeRequest", + "WritableStreamDealWithRejection", + "WritableStreamFinishErroring", + "WritableStreamDefaultWriterEnsureReadyPromiseRejected", + "WritableStreamHasOperationMarkedInFlight", + "storedError", + "WritableStreamRejectCloseAndClosedPromiseIfNeeded", + "abortRequest", + "WritableStreamFinishInFlightWrite", + "WritableStreamFinishInFlightWriteWithError", + "WritableStreamFinishInFlightClose", + "defaultWriterClosedPromiseResolve", + "WritableStreamFinishInFlightCloseWithError", + "WritableStreamMarkCloseRequestInFlight", + "WritableStreamMarkFirstWriteRequestInFlight", + "defaultWriterClosedPromiseReject", + "WritableStreamUpdateBackpressure", + "backpressure", + "defaultWriterReadyPromiseReset", + "_ownerWritableStream", + "defaultWriterReadyPromiseInitialize", + "defaultWriterReadyPromiseInitializeAsResolved", + "defaultWriterClosedPromiseInitialize", + "defaultWriterReadyPromiseInitializeAsRejected", + "defaultWriterClosedPromiseInitializeAsResolved", + "defaultWriterClosedPromiseInitializeAsRejected", + "IsWritableStreamDefaultWriter", + "defaultWriterBrandCheckException", + "defaultWriterLockException", + "WritableStreamDefaultWriterGetDesiredSize", + "_readyPromise", + "WritableStreamDefaultWriterAbort", + "WritableStreamDefaultWriterClose", + "WritableStreamDefaultWriterRelease", + "WritableStreamDefaultWriterWrite", + "WritableStreamDefaultWriterCloseWithErrorPropagation", + "WritableStreamDefaultWriterEnsureClosedPromiseRejected", + "_closedPromiseState", + "defaultWriterClosedPromiseResetToRejected", + "_readyPromiseState", + "defaultWriterReadyPromiseReject", + "defaultWriterReadyPromiseResetToRejected", + "WritableStreamDefaultControllerGetDesiredSize", + "releasedError", + "chunkSize", + "WritableStreamDefaultControllerGetChunkSize", + "WritableStreamDefaultControllerWrite", + "closeSentinel", + "IsWritableStreamDefaultController", + "_controlledWritableStream", + "WritableStreamDefaultControllerError", + "_abortAlgorithm", + "WritableStreamDefaultControllerClearAlgorithms", + "_strategySizeAlgorithm", + "_writeAlgorithm", + "_closeAlgorithm", + "WritableStreamDefaultControllerGetBackpressure", + "startPromise", + "WritableStreamDefaultControllerAdvanceQueueIfNeeded", + "chunkSizeE", + "WritableStreamDefaultControllerErrorIfNeeded", + "enqueueE", + "WritableStreamDefaultControllerProcessClose", + "WritableStreamDefaultControllerProcessWrite", + "sinkClosePromise", + "sinkWritePromise", + "_readyPromise_resolve", + "_readyPromise_reject", + "isAbortSignal", + "aborted", + "NativeDOMException", + "DOMException", + "isDOMExceptionConstructor", + "createDOMExceptionPolyfill", + "captureStackTrace", + "DOMException$1", + "ReadableStreamPipeTo", + "preventClose", + "preventAbort", + "signal", + "shuttingDown", + "currentWrite", + "actions", + "shutdownWithAction", + "map", + "action", + "pipeLoop", + "resolveLoop", + "rejectLoop", + "pipeStep", + "resolveRead", + "rejectRead", + "isOrBecomesErrored", + "shutdown", + "isOrBecomesClosed", + "destClosed_1", + "waitForWritesToFinish", + "oldCurrentWrite", + "originalIsError", + "originalError", + "doTheRest", + "finalize", + "newError", + "isError", + "removeEventListener", + "ReadableStreamDefaultController", + "IsReadableStreamDefaultController", + "defaultControllerBrandCheckException", + "ReadableStreamDefaultControllerGetDesiredSize", + "ReadableStreamDefaultControllerCanCloseOrEnqueue", + "ReadableStreamDefaultControllerClose", + "ReadableStreamDefaultControllerEnqueue", + "ReadableStreamDefaultControllerError", + "ReadableStreamDefaultControllerClearAlgorithms", + "_controlledReadableStream", + "ReadableStreamDefaultControllerCallPullIfNeeded", + "ReadableStreamDefaultControllerShouldCallPull", + "ReadableStreamDefaultControllerHasBackpressure", + "SetUpReadableStreamDefaultController", + "SetUpReadableStreamDefaultControllerFromUnderlyingSource", + "underlyingSource", + "ReadableStreamTee", + "cloneForBranch2", + "reading", + "canceled1", + "canceled2", + "reason1", + "reason2", + "branch1", + "branch2", + "resolveCancelPromise", + "cancelPromise", + "value1", + "value2", + "cancel1Algorithm", + "compositeReason", + "cancelResult", + "cancel2Algorithm", + "CreateReadableStream", + "convertUnderlyingDefaultOrByteSource", + "convertUnderlyingSourceCancelCallback", + "convertUnderlyingSourcePullCallback", + "convertUnderlyingSourceStartCallback", + "convertReadableStreamType", + "convertReaderOptions", + "convertReadableStreamReaderMode", + "convertIteratorOptions", + "Boolean", + "convertPipeOptions", + "assertAbortSignal", + "convertReadableWritablePair", + "readable", + "ReadableStream", + "rawUnderlyingSource", + "InitializeReadableStream", + "streamBrandCheckException$1", + "getReader", + "rawOptions", + "pipeThrough", + "rawTransform", + "pipeTo", + "destination", + "tee", + "branches", + "sourceCancelPromise", + "convertQueuingStrategyInit", + "byteLengthSizeFunction", + "ByteLengthQueuingStrategy", + "_byteLengthQueuingStrategyHighWaterMark", + "IsByteLengthQueuingStrategy", + "byteLengthBrandCheckException", + "countSizeFunction", + "CountQueuingStrategy", + "_countQueuingStrategyHighWaterMark", + "IsCountQueuingStrategy", + "countBrandCheckException", + "convertTransformer", + "readableType", + "writableType", + "convertTransformerFlushCallback", + "convertTransformerStartCallback", + "convertTransformerTransformCallback", + "TransformStream", + "rawTransformer", + "rawWritableStrategy", + "rawReadableStrategy", + "writableStrategy", + "readableStrategy", + "transformer", + "readableHighWaterMark", + "readableSizeAlgorithm", + "writableHighWaterMark", + "writableSizeAlgorithm", + "startPromise_resolve", + "InitializeTransformStream", + "SetUpTransformStreamDefaultControllerFromTransformer", + "_transformStreamController", + "IsTransformStream", + "streamBrandCheckException$2", + "_readable", + "_writable", + "TransformStreamDefaultSinkWriteAlgorithm", + "TransformStreamDefaultSinkAbortAlgorithm", + "TransformStreamDefaultSinkCloseAlgorithm", + "TransformStreamDefaultSourcePullAlgorithm", + "TransformStreamErrorWritableAndUnblockWrite", + "_backpressureChangePromise", + "_backpressureChangePromise_resolve", + "TransformStreamSetBackpressure", + "TransformStreamError", + "TransformStreamDefaultControllerClearAlgorithms", + "TransformStreamDefaultController", + "IsTransformStreamDefaultController", + "defaultControllerBrandCheckException$1", + "readableController", + "_controlledTransformStream", + "TransformStreamDefaultControllerEnqueue", + "TransformStreamDefaultControllerError", + "terminate", + "TransformStreamDefaultControllerTerminate", + "SetUpTransformStreamDefaultController", + "transformAlgorithm", + "flushAlgorithm", + "_transformAlgorithm", + "_flushAlgorithm", + "transformResultE", + "TransformStreamDefaultControllerPerformTransform", + "transformPromise", + "backpressureChangePromise", + "flushPromise", + "entryUnbind", + "$padStart", + "WEBKIT_BUG", + "padStart", + "maxLength", + "repeat", + "IS_END", + "fillString", + "stringLength", + "fillStr", + "intMaxLength", + "fillLen", + "stringFiller", + "count", + "CONSTRUCTOR", + "METHOD", + "$padEnd", + "padEnd", + "$values", + "TO_ENTRIES", + "$entries", + "DEFAULT_RANGE_CHUNK_SIZE", + "RENDERING_CANCELLED_TIMEOUT", + "DefaultCanvasFactory", + "DefaultCMapReaderFactory", + "createPDFNetworkStream", + "isArrayBuffer", + "range", + "params", + "rangeTransport", + "worker", + "apiCompatibilityParams", + "setVerbosityLevel", + "workerParams", + "GlobalWorkerOptions", + "PDFWorker", + "docId", + "workerIdPromise", + "_fetchDocument", + "networkStreamPromise", + "networkStream", + "initialData", + "progressiveDone", + "contentDispositionFilename", + "disableRange", + "disableStream", + "httpHeaders", + "withCredentials", + "rangeChunkSize", + "messageHandler", + "transport", + "pdfDataRangeTransport", + "apiVersion", + "password", + "disableAutoFetch", + "maxImageSize", + "disableFontFace", + "postMessageTransfers", + "docBaseUrl", + "ignoreErrors", + "fontExtraProperties", + "enableXfa", + "PDFDocumentLoadingTask", + "nextDocumentId", + "transportDestroyed", + "addRangeListener", + "addProgressListener", + "addProgressiveReadListener", + "addProgressiveDoneListener", + "onDataRange", + "onDataProgress", + "onDataProgressiveRead", + "onDataProgressiveDone", + "transportReady", + "requestDataRange", + "getPage", + "getPageIndex", + "getDestinations", + "getDestination", + "getPageLabels", + "getPageLayout", + "getPageMode", + "getViewerPreferences", + "getOpenAction", + "getAttachments", + "getJavaScript", + "getJSActions", + "getOutline", + "getOptionalContentConfig", + "getPermissions", + "getMetadata", + "getMarkInfo", + "getData", + "getDownloadInfo", + "getStats", + "cleanup", + "keepLoadedFonts", + "saveDocument", + "getFieldObjects", + "hasJSActions", + "getCalculationOrderIds", + "pdfBug", + "getViewport", + "getAnnotations", + "intent", + "getXfa", + "render", + "enableWebGL", + "renderInteractiveForms", + "imageLayer", + "canvasFactory", + "background", + "annotationStorage", + "optionalContentConfigPromise", + "renderingIntent", + "intentState", + "clearTimeout", + "canvasFactoryInstance", + "webGLContext", + "enable", + "fnArray", + "argsArray", + "lastChunk", + "pageIndex", + "internalRenderTask", + "canvasContext", + "viewport", + "objs", + "commonObjs", + "operatorList", + "useRequestAnimationFrame", + "renderTask", + "transparency", + "optionalContentConfig", + "getOperatorList", + "opListTask", + "streamTextContent", + "normalizeWhitespace", + "disableCombineTextItems", + "TEXT_CONTENT_CHUNK_SIZE", + "combineTextItems", + "textContent", + "getTextContent", + "readableStream", + "pump", + "items", + "styles", + "_destroy", + "waitOn", + "force", + "resetStats", + "_tryCleanup", + "renderTasks", + "_startRenderPage", + "_renderPageChunk", + "operatorListChunk", + "_pumpOperatorList", + "_abortOperatorList", + "curIntentState", + "cloned", + "transfers", + "cloneValue", + "desc", + "pdfWorkerPorts", + "isWorkerDisabled", + "nextFakeWorkerId", + "fallbackWorkerSrc", + "pdfjsFilePath", + "deprecated", + "mainWorkerMessageHandler", + "fakeWorkerCapability", + "loader", + "getMainThreadWorkerMessageHandler", + "eval", + "getWorkerSrc", + "loadScript", + "_initializeFromPort", + "_initialize", + "workerSrc", + "isSameOrigin", + "createCDNWrapper", + "terminateEarly", + "onWorkerError", + "sendTest", + "testObj", + "_setupFakeWorker", + "setupFakeWorkerGlobal", + "WorkerMessageHandler", + "workerHandler", + "loadingTask", + "onUnsupportedFeature", + "page", + "terminated", + "annotationStorageResetModified", + "pdfDocument", + "setupMessageHandler", + "evt", + "loaded", + "total", + "sink", + "readyReason", + "headersCapability", + "fullReader", + "isStreamingSupported", + "isRangeSupported", + "contentLength", + "rangeReader", + "pdfInfo", + "ex", + "msg", + "exception", + "updatePassword", + "exportedError", + "exportedData", + "fontRegistry", + "registerFont", + "pageProxy", + "MAX_IMAGE_SIZE_TO_STORE", + "imageData", + "fetched", + "builtInCMap", + "_onUnsupportedFeature", + "pageNumber", + "pageInfo", + "ref", + "numPages", + "filename", + "getDocJSActions", + "getPageJSActions", + "getPageXfa", + "results", + "cleanupSuccessful", + "_ensureObj", + "resolved", + "InternalRenderTask", + "canvasInRendering", + "initializeGraphics", + "operatorListChanged", + "_continue", + "_scheduleNext", + "build", + "addNativeFontFace", + "insertRule", + "styleElement", + "styleSheet", + "nativeFontFace", + "featureId", + "rule", + "_queueLoadingCallback", + "_prepareFontLoadEvent", + "FontLoader", + "requests", + "nextRequestId", + "supported", + "navigator", + "otherRequest", + "getLoadTestFont", + "atob", + "offset", + "chunk1", + "s", + "chunk2", + "ctx", + "isFontReady", + "loadTestFontId", + "COMMENT_OFFSET", + "spliceString", + "CFF_CHECKSUM_OFFSET", + "XXXX_VALUE", + "checksum", + "int32", + "string32", + "btoa", + "fonts", + "div", + "span", + "translatedData", + "createNativeFontFace", + "createFontFaceRule", + "bytesToString", + "getPathGenerator", + "cmds", + "js", + "current", + "NodeCanvasFactory", + "NodeCMapReaderFactory", + "Canvas", + "__non_webpack_require__", + "fs", + "getValue", + "getOrCreateValue", + "setValue", + "modified", + "getAll", + "objectFromMap", + "_setModified", + "resetModified", + "compatibilityParams", + "MIN_FONT_SIZE", + "MAX_FONT_SIZE", + "MAX_GROUP_SIZE", + "COMPILE_TYPE3_GLYPHS", + "MAX_SIZE_TO_COMPILE", + "FULL_CHUNK_HEIGHT", + "LINEWIDTH_SCALE_FACTOR", + "ad_bc", + "bc_ad", + "old", + "prev", + "cosValue", + "sinValue", + "CachedCanvases", + "getCanvas", + "canvasEntry", + "addContextCurrentTransform", + "POINT_TO_PROCESS_LIMIT", + "imgData", + "width1", + "points", + "POINT_TYPES", + "lineSize", + "data0", + "elem", + "mask", + "j", + "j0", + "sum", + "steps", + "outlines", + "coords", + "p0", + "pp", + "drawOutline", + "kk", + "o", + "l", + "ll", + "CanvasExtraState", + "setCurrentPoint", + "CanvasGraphics", + "EXECUTION_TIME", + "EXECUTION_STEPS", + "transferMaps", + "partialChunkHeight", + "fullChunks", + "totalChunks", + "chunkImgData", + "srcPos", + "transferMapRed", + "transferMapGreen", + "transferMapBlue", + "transferMapGray", + "srcLength", + "dest32", + "dest32DataLength", + "fullSrcDiff", + "white", + "black", + "thisChunkHeight", + "destPos", + "srcDiff", + "kEnd", + "kEndUnrolled", + "srcByte", + "hasTransferMaps", + "elemsInThisChunk", + "properties", + "property", + "sourceCtx", + "destCtx", + "alpha", + "alpha_", + "r0", + "g0", + "b0", + "maskData", + "transferMap", + "layerData", + "y", + "hasBackdrop", + "backdrop", + "subtype", + "composeFn", + "PIXELS_TO_PROCESS", + "row", + "chunkHeight", + "maskCtx", + "layerCtx", + "composeSMaskBackdrop", + "composed", + "layer", + "genericComposeSMask", + "LINE_CAP_STYLES", + "LINE_JOIN_STYLES", + "NORMAL_CLIP", + "EO_CLIP", + "beginDrawing", + "transparentCanvas", + "resetCtxToDefault", + "executeOperatorList", + "executionStartIdx", + "argsArrayLen", + "chunkOperations", + "endTime", + "stepper", + "fnId", + "objsPool", + "depObjId", + "continueCallback", + "endDrawing", + "states", + "beginSMaskGroup", + "activeSMask", + "drawnWidth", + "drawnHeight", + "cacheId", + "scratchCanvas", + "currentCtx", + "currentTransform", + "groupCtx", + "copyCtxState", + "suspendSMaskGroup", + "composeSMask", + "deltaTransform", + "resumeSMaskGroup", + "endSMaskGroup", + "ops", + "xw", + "yh", + "consumePath", + "strokeColor", + "lineWidth", + "scaledLineWidth", + "fillColor", + "isPatternFill", + "needRestore", + "paths", + "fontObj", + "bold", + "italic", + "typeface", + "browserFontSize", + "paintChar", + "textRenderingMode", + "fontSize", + "fillStrokeMode", + "isAddToPathSet", + "patternFill", + "addToPath", + "fontSizeScale", + "charSpacing", + "wordSpacing", + "fontDirection", + "textHScale", + "glyphsLength", + "glyphs", + "vertical", + "spacingDir", + "defaultVMetrics", + "widthAdvanceScale", + "simpleFillText", + "pattern", + "patternTransform", + "resetLineWidthToOne", + "glyph", + "isNum", + "restoreNeeded", + "spacing", + "character", + "accent", + "scaledX", + "scaledY", + "vmetric", + "vx", + "vy", + "measuredWidth", + "characterScaleX", + "scaledAccentX", + "scaledAccentY", + "charWidth", + "showType3Text", + "fontMatrix", + "isTextInvisible", + "spacingLength", + "transformed", + "urx", + "ury", + "getColorN_Pattern", + "IR", + "color", + "baseTransform", + "canvasGraphicsFactory", + "createCanvasGraphics", + "getShadingPatternFromIR", + "inv", + "bl", + "br", + "ul", + "ur", + "x0", + "y0", + "x1", + "y1", + "matrix", + "bbox", + "group", + "bounds", + "canvasBounds", + "scaleX", + "scaleY", + "startTransformInverse", + "img", + "maskCanvas", + "putBinaryImageMask", + "skewX", + "skewY", + "positions", + "images", + "image", + "objId", + "w", + "h", + "widthScale", + "heightScale", + "imgToPaint", + "tmpCanvas", + "tmpCtx", + "putBinaryImageData", + "paintWidth", + "paintHeight", + "tmpCanvasId", + "newWidth", + "newHeight", + "left", + "top", + "visible", + "getSinglePixelWidth", + "absDet", + "sqNorm1", + "sqNorm2", + "pixelHeight", + "getCanvasPosition", + "isContentVisible", + "ShadingIRs", + "region", + "fromIR", + "raw", + "colorStops", + "r1", + "getPattern", + "applyBoundingBox", + "grad", + "createMeshCanvas", + "colors", + "rowSize", + "tmp", + "c1", + "c2", + "c3", + "x2", + "y2", + "x3", + "y3", + "c1r", + "c1g", + "c1b", + "c2r", + "c2g", + "c2b", + "c3r", + "c3g", + "c3b", + "minY", + "maxY", + "xa", + "car", + "cag", + "cab", + "xb", + "cbr", + "cbg", + "cbb", + "x1_", + "x2_", + "ps", + "figure", + "cs", + "verticesPerRow", + "rows", + "cols", + "q", + "drawTriangle", + "EXPECTED_SCALE", + "MAX_PATTERN_SIZE", + "BORDER_SIZE", + "boundsWidth", + "boundsHeight", + "combinesScale", + "paddedWidth", + "paddedHeight", + "backgroundColor", + "figures", + "cachedCanvases", + "drawFigure", + "owner", + "matrixScale", + "temporaryPatternCanvas", + "shadingIR", + "TilingPattern", + "PaintType", + "COLORED", + "UNCOLORED", + "createPatternCanvas", + "xstep", + "ystep", + "paintType", + "tilingType", + "curMatrixScale", + "combinedScale", + "dimx", + "dimy", + "graphics", + "getSizeAndScale", + "maxSize", + "clipBbox", + "bboxWidth", + "bboxHeight", + "setFillAndStrokeStyleToContext", + "cssColor", + "CallbackKind", + "DATA", + "ERROR", + "StreamKind", + "CANCEL", + "CANCEL_COMPLETE", + "CLOSE", + "ENQUEUE", + "PULL", + "PULL_COMPLETE", + "START_COMPLETE", + "callbackId", + "wrapReason", + "cbSourceName", + "cbTargetName", + "comObj", + "sourceName", + "targetName", + "on", + "ah", + "send", + "sendWithPromise", + "sendWithStream", + "streamId", + "startCapability", + "startCall", + "pullCall", + "cancelCall", + "isClosed", + "pullCapability", + "cancelCapability", + "_createStreamSink", + "streamSink", + "lastDesiredSize", + "sinkCapability", + "onPull", + "onCancel", + "isCancelled", + "success", + "_processStreamMessage", + "_postMessage", + "getRaw", + "isVisible", + "setVisibility", + "getOrder", + "getGroups", + "getGroup", + "begin", + "_onReceiveData", + "found", + "_onProgress", + "firstReader", + "_onProgressiveDone", + "_removeRangeReader", + "getFullReader", + "queuedChunks", + "getRangeReader", + "cancelAllRequests", + "readers", + "isPdfFile", + "_enqueue", + "requestCapability", + "requestsCapability", + "WebGLUtils", + "drawFigures", + "shader", + "gl", + "compiled", + "errorMsg", + "loadShader", + "program", + "shaders", + "linked", + "texture", + "currentCanvas", + "currentGL", + "premultipliedalpha", + "smaskVertexShaderCode", + "smaskFragmentShaderCode", + "smaskCache", + "generateGL", + "vertexShader", + "createVertexShader", + "fragmentShader", + "createFragmentShader", + "cache", + "texCoordLocation", + "texLayerLocation", + "texMaskLocation", + "texCoordBuffer", + "initSmaskGL", + "createTexture", + "maskTexture", + "figuresVertexShaderCode", + "figuresFragmentShaderCode", + "figuresCache", + "initFiguresGL", + "coordsMap", + "colorsMap", + "pIndex", + "cIndex", + "col", + "jj", + "coordsBuffer", + "colorsBuffer", + "tryInitGL", + "parameters", + "fieldType", + "isRenderable", + "ignoreBorder", + "createQuadrilaterals", + "_createContainer", + "horizontalRadius", + "verticalRadius", + "radius", + "_createQuadrilaterals", + "quadrilaterals", + "savedRect", + "quadPoint", + "_createPopup", + "trigger", + "popupElement", + "title", + "modificationDate", + "contents", + "hideWrapper", + "popup", + "_renderQuadrilaterals", + "quadrilateral", + "addLinkAttributes", + "linkService", + "rel", + "linkElement", + "_bindLink", + "_bindNamedAction", + "_bindJSAction", + "jsName", + "detail", + "JSON", + "_getKeyModifier", + "_setEventListener", + "baseName", + "valueGetter", + "modifier", + "_setEventListeners", + "eventName", + "_setColor", + "ColorConverters", + "storage", + "storedData", + "valueAsString", + "elementData", + "userValue", + "formattedValue", + "beforeInputSelectionRange", + "beforeInputValue", + "blurListener", + "focus", + "preventScroll", + "userName", + "hidden", + "editable", + "selRange", + "selStart", + "selEnd", + "commitKey", + "willCommit", + "_blurListener", + "change", + "fieldWidth", + "combWidth", + "_setTextStyle", + "TEXT_ALIGNMENT", + "fontColor", + "checkbox", + "radio", + "pdfButtonValue", + "checked", + "radioId", + "selectElement", + "optionElement", + "option", + "isExport", + "getItems", + "displayValue", + "exportValue", + "multipleSelection", + "remove", + "insert", + "indices", + "changeEx", + "keyDown", + "IGNORE_TYPES", + "selector", + "parentElements", + "popupLeft", + "popupTop", + "BACKGROUND_ENLIGHT", + "g", + "dateObject", + "PDFDateString", + "_formatContents", + "lines", + "line", + "_toggle", + "_show", + "pin", + "_hide", + "unpin", + "borderWidth", + "square", + "circle", + "coordinate", + "polyline", + "getFilenameFromUrl", + "stringToPDFString", + "_download", + "sortedAnnotations", + "popupAnnotations", + "downloadManager", + "imageResourcesPath", + "svgFactory", + "enableScripting", + "mouseState", + "isDown", + "rendered", + "G", + "makeColorComp", + "R", + "B", + "renderTextLayer", + "MAX_TEXT_DIVS_TO_RENDER", + "DEFAULT_FONT_SIZE", + "DEFAULT_FONT_ASCENT", + "ascentCache", + "NonWhitespaceRegexp", + "cachedAscent", + "metrics", + "ascent", + "descent", + "ratio", + "pixels", + "textDiv", + "textDivProperties", + "angle", + "canvasWidth", + "isWhitespace", + "originalTransform", + "paddingBottom", + "paddingLeft", + "paddingRight", + "paddingTop", + "isAllWhitespace", + "geom", + "tx", + "fontHeight", + "fontAscent", + "getAscent", + "shouldScaleText", + "absScaleX", + "absScaleY", + "angleCos", + "angleSin", + "divWidth", + "divHeight", + "right", + "bottom", + "textDivs", + "textDivsLength", + "t", + "ts", + "expanded", + "expandBounds", + "divProperties", + "boxScale", + "findPositiveMin", + "box", + "x1New", + "x2New", + "expandBoundsLTR", + "boxes", + "fakeBoundary", + "horizon", + "boundary", + "maxXNew", + "horizonPart", + "affectedBoundary", + "xNew", + "changedHorizon", + "lastBoundary", + "useBoundary", + "used", + "textContentItemsStr", + "TextLayerRenderTask", + "_processItems", + "len", + "appendText", + "_layoutText", + "fontFamily", + "_render", + "styleCache", + "textItems", + "textStyles", + "expandTextDivs", + "expand", + "transformBuf", + "paddingBuf", + "divProps", + "renderParameters", + "textContentStream", + "enhanceTextSelection", + "SVGGraphics", + "opTree", + "opListElement", + "pf", + "SVG_DEFAULTS", + "fontStyle", + "fontWeight", + "XML_NS", + "XLINK_NS", + "convertImgDataToPng", + "PNG_HEADER", + "CHUNK_WRAPPER_SIZE", + "crcTable", + "crc", + "body", + "crc32", + "deflateSyncUncompressed", + "output", + "level", + "literals", + "maxBlockLength", + "deflateBlocks", + "idat", + "pi", + "adler", + "adler32", + "colorType", + "bitDepth", + "offsetLiterals", + "offsetBytes", + "ihdr", + "deflateSync", + "pngLength", + "writePngChunk", + "createObjectURL", + "encode", + "clipCount", + "maskCount", + "shadingCount", + "loadDependencies", + "transformMatrix", + "getSVG", + "svgElement", + "convertOpList", + "operatorIdMapping", + "opList", + "opListToTree", + "executeOpTree", + "opTreeElement", + "lineWidthScale", + "textMatrix", + "pm", + "addFontStyle", + "details", + "setStrokeAlpha", + "setFillAlpha", + "_makeColorN_Pattern", + "_makeTilingPattern", + "tilingId", + "txstep", + "tystep", + "tiling", + "tx1", + "ty1", + "_makeShadingPattern", + "shadingId", + "point0", + "point1", + "gradient", + "focalPoint", + "circlePoint", + "focalRadius", + "circleRadius", + "colorStop", + "op", + "clipId", + "clipPath", + "clipElement", + "_setStrokeAttributes", + "dashArray", + "imgSrc", + "cliprect", + "imgEl", + "definitions", + "rootGroup", + "_ensureClipGroup", + "clipGroup", + "_ensureTransformGroup", + "root", + "rootHtml", + "XfaLayer", + "stack", + "rootDiv", + "coeffs", + "child", + "childHtml", + "http", + "https", + "fileUriRegex", + "parsedUrl", + "parseUrl", + "_error", + "_setReadableStream", + "auth", + "headers", + "handleResponse", + "getResponseHeader", + "isHttp", + "suggestedLength", + "extractFilenameFromHeader", + "createRequestOptions", + "returnValues", + "allowRangeRequests", + "contentEncoding", + "contentDisposition", + "getFilenameFromContentDispositionHeader", + "needsEncodingFixup", + "toParamRegExp", + "rfc2616unquote", + "rfc5987decode", + "rfc2047decode", + "fixupEncoding", + "rfc2231getparam", + "decoder", + "fatal", + "ch", + "textdecode", + "parts", + "part", + "quotindex", + "encodingend", + "extvalue", + "encoding", + "langvalue", + "text", + "OK_RESPONSE", + "PARTIAL_CONTENT_RESPONSE", + "xhr", + "array", + "requestRange", + "listeners", + "requestFull", + "xhrId", + "pendingRequest", + "onProgress", + "onStateChange", + "xhrStatus", + "ok_response_on_range_request", + "getArrayBuffer", + "rangeHeader", + "getRequestXhr", + "isPendingRequest", + "_onRangeRequestReaderClosed", + "onHeadersReceived", + "onDone", + "onError", + "manager", + "_onHeadersReceived", + "fullRequestXhrId", + "fullRequestXhr", + "_onDone", + "_onError", + "createResponseStatusError", + "_close", + "abortController", + "credentials", + "redirect", + "createHeaders", + "createFetchOptions", + "validateResponseStatus", + "pdfjsVersion", + "pdfjsBuild", + "PDFNodeStream", + "setPDFNetworkStreamFactory", + "PDFNetworkStream", + "PDFFetchStream" + ], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;;;;;;;;;;ACKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAMA,mBA3BN,8BA2BA;;AACA,IAAMC,SA5BN,4BA4BA;;IAEA,iB;AACEC,+BAAc;AAAA;;AACZ,QAAI,qBAAJ,mBAA4C;AAC1CC,6BAD0C,sCAC1CA;AAFU;AADQ;;;;WAOtBC,+BAAsB;AACpBD,6BADoB,kCACpBA;AARoB;;;WAWtBE,gDAAuC;AACrC,UAAI,CAACC,iBAAL,QAA8B;AAC5B,cAAM,UADsB,yBACtB,CAAN;AAFmC;;AAIrC,UAAIC,cAAcC,UAAlB,GAA+B;AAC7B,cAAM,UADuB,qBACvB,CAAN;AALmC;;AAOrCF,sCAPqC,KAOrCA;AACAA,uCARqC,MAQrCA;AAnBoB;;;WAsBtBG,mCAA0B;AACxB,UAAI,CAACH,iBAAL,QAA8B;AAC5B,cAAM,UADsB,yBACtB,CAAN;AAFsB;;AAMxBA,sCANwB,CAMxBA;AACAA,uCAPwB,CAOxBA;AACAA,gCARwB,IAQxBA;AACAA,iCATwB,IASxBA;AA/BoB;;;;;;;;IAmCxB,gB;;;;;AACEJ,8BAA0D;AAAA;;AAAA,mFAA1DA,EAA0D;AAAA,kCAA5CQ,aAA4C;AAAA,QAA5CA,aAA4C,mCAA5BC,WAAlB,QAA8C;;AAAA;;AAAA;AAExD,sBAFwD,aAExD;AAFwD;AADX;;;;WAM/CP,+BAAsB;AACpB,UAAIG,cAAcC,UAAlB,GAA+B;AAC7B,cAAM,UADuB,qBACvB,CAAN;AAFkB;;AAIpB,UAAMI,SAAS,6BAJK,QAIL,CAAf;;AACA,UAAMC,UAAUD,kBALI,IAKJA,CAAhB;AACAA,qBANoB,KAMpBA;AACAA,sBAPoB,MAOpBA;AACA,aAAO;AACLA,cADK,EACLA,MADK;AAELC,eAFK,EAELA;AAFK,OAAP;AAd6C;;;;EAAjD,iB;;;;IAqBA,qB;AACEX,wCAAsD;AAAA,8BAAxCY,OAAwC;AAAA,QAAxCA,OAAwC,8BAA1C,IAA0C;AAAA,mCAAxBC,YAAwB;AAAA,QAAxBA,YAAwB,mCAAtDb,KAAsD;;AAAA;;AACpD,QAAI,qBAAJ,uBAAgD;AAC9CC,6BAD8C,0CAC9CA;AAFkD;;AAIpD,mBAJoD,OAIpD;AACA,wBALoD,YAKpD;AANwB;;;;;gFAS1B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,oBACO,KAAL,OADF;AAAA;AAAA;AAAA;;AAAA,sBAEU,UACJ,iEAFe,6DACX,CAFV;;AAAA;AAAA,oBAOE,IAPF;AAAA;AAAA;AAAA;;AAAA,sBAQU,UADG,8BACH,CARV;;AAAA;AAUQa,mBAVR,GAUc,uBAAuB,+BAVf,EAUR,CAVd;AAWQC,+BAXR,GAW0B,oBACpBC,0BADoB,SAEpBA,0BAbgB,IAAtB;AAAA,iDAeS,+CAA4CC,kBAAU;AAC3D,wBAAM,mCACc,kCAAlB,EADI,sBADqD,GACrD,EAAN;AAhBkB,iBAeb,CAfT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAyBAC,0CAAiC;AAC/BjB,6BAD+B,sCAC/BA;AAnCwB;;;;;;;;IAuC5B,oB;;;;;;;;;;;;;WACEiB,0CAAiC;AAAA;;AAC/B,UAEGC,sBAAsBC,qBAAqBC,SAF9C,OAEyBD,CAFzB,EAGE;AACA,eAAO;AAAA,mFAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAChBE,SAAL,EADqB;AAAA;AAAA;AAAA;;AAAA,0BAEb,UAAUA,SADA,UACV,CAFa;;AAAA;AAAA,yBAKjB,OAAJ,YALqB;AAAA;AAAA;AAAA;;AAAA,mCAMR,UANQ;AAAA;AAAA,2BAMaA,SADX,WACWA,EANb;;AAAA;AAAA;AAMnBC,4BANmB;AAAA;AAAA;;AAAA;AAAA,mCAQRC,mBARQ;AAAA;AAAA,2BAQYF,SAD1B,IAC0BA,EARZ;;AAAA;AAAA;AAQnBC,4BARmB;;AAAA;AAAA,sDAUd;AAAEA,8BAAF,EAAEA,QAAF;AAAYR,qCAAZ,EAAYA;AAAZ,qBAVc;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAhB;;AAAA;AAAA;AAAA;AAAA,YAAP;AAL6B;;AAoB/B,aAAO,YAAY,2BAAqB;AACtC,YAAMU,UAAU,IADsB,cACtB,EAAhB;AACAA,iCAFsC,IAEtCA;;AAEA,YAAI,OAAJ,cAAuB;AACrBA,iCADqB,aACrBA;AALoC;;AAOtCA,qCAA6B,YAAM;AACjC,cAAIA,uBAAuBC,eAA3B,MAAgD;AAAA;AADf;;AAIjC,cAAID,0BAA0BA,mBAA9B,GAAoD;AAClD,gBADkD,QAClD;;AACA,gBAAI,uBAAqBA,QAAzB,UAA2C;AACzCF,yBAAW,eAAeE,QADe,QAC9B,CAAXF;AADF,mBAEO,IAAI,CAAC,OAAD,gBAAsBE,QAA1B,cAAgD;AACrDF,yBAAWC,yBAAcC,QAD4B,YAC1CD,CAAXD;AALgD;;AAOlD,0BAAc;AACZI,sBAAQ;AAAEJ,wBAAF,EAAEA,QAAF;AAAYR,+BAAZ,EAAYA;AAAZ,eAARY;AADY;AAPoC;AAJnB;;AAgBjCC,iBAAO,UAAUH,QAhBgB,UAgB1B,CAAPG;AAvBoC,SAOtCH;;AAmBAA,qBA1BsC,IA0BtCA;AA9C6B,OAoBxB,CAAP;AArBqD;;;;EAAzD,qB;;;;IAoDA,a;;;;;;;WACEvB,+BAAsB;AACpB2B,wBAAOxB,aAAaC,SAApBuB,GADoB,wBACpBA;AAEA,UAAMC,MAAMT,iCAHQ,SAGRA,CAAZ;AACAS,kCAJoB,KAIpBA;AACAA,gCAA0BzB,QALN,IAKpByB;AACAA,iCAA2BxB,SANP,IAMpBwB;AACAA,8CAPoB,MAOpBA;AACAA,kCAA4B,uBARR,MAQpBA;AAEA,aAVoB,GAUpB;AAXgB;;;WAclBC,6BAAoB;AAClBF,wBAAO,gBAAPA,UADkB,0BAClBA;AAEA,aAAOR,iCAHW,IAGXA,CAAP;AAjBgB;;;;;;;;IAoDpB,Y;AAIErB,+BAOG;AAAA,QAPS,OAOT,SAPS,OAOT;AAAA,QAPS,KAOT,SAPS,KAOT;AAAA,QAPS,QAOT,SAPS,QAOT;AAAA,8BAHDgC,OAGC;AAAA,QAHDA,OAGC,8BAPS,CAOT;AAAA,8BAFDC,OAEC;AAAA,QAFDA,OAEC,8BAPS,CAOT;AAAA,+BADDC,QACC;AAAA,QADDA,QACC,+BAPHlC,KAOG;;AAAA;;AACD,mBADC,OACD;AACA,iBAFC,KAED;AACA,oBAHC,QAGD;AACA,mBAJC,OAID;AACA,mBALC,OAKD;AAIA,QAAMmC,UAAW,cAAaC,QAAd,CAAcA,CAAb,IAThB,CASD;AACA,QAAMC,UAAW,cAAaD,QAAd,CAAcA,CAAb,IAVhB,CAUD;AACA,mCAXC,OAWD;AAEAE,gBAbC,GAaDA;;AACA,QAAIA,WAAJ,GAAkB;AAChBA,kBADgB,GAChBA;AAfD;;AAiBD;AACE;AACEC,kBAAU,CADZ,CACEA;AACAC,kBAFF,CAEEA;AACAC,kBAHF,CAGEA;AACAC,kBAJF,CAIEA;AALJ;;AAOE;AACEH,kBADF,CACEA;AACAC,kBAFF,CAEEA;AACAC,kBAHF,CAGEA;AACAC,kBAJF,CAIEA;AAXJ;;AAaE;AACEH,kBADF,CACEA;AACAC,kBAAU,CAFZ,CAEEA;AACAC,kBAAU,CAHZ,CAGEA;AACAC,kBAJF,CAIEA;AAjBJ;;AAmBE;AACEH,kBADF,CACEA;AACAC,kBAFF,CAEEA;AACAC,kBAHF,CAGEA;AACAC,kBAAU,CAJZ,CAIEA;AAvBJ;;AAyBE;AACE,cAAM,UA1BV,mEA0BU,CAAN;AA1BJ;;AA+BA,kBAAc;AACZD,gBAAU,CADE,OACZA;AACAC,gBAAU,CAFE,OAEZA;AAlDD;;AAqDD,uBArDC,aAqDD;AACA,eAtDC,MAsDD;;AACA,QAAIH,YAAJ,GAAmB;AACjBI,sBAAgBC,SAASP,UAAUD,QAAnBQ,CAAmBR,CAAnBQ,YADC,OACjBD;AACAE,sBAAgBD,SAAST,UAAUC,QAAnBQ,CAAmBR,CAAnBQ,YAFC,OAEjBC;AACAxC,cAAQuC,SAASR,aAAaA,QAAtBQ,CAAsBR,CAAtBQ,IAHS,KAGjBvC;AACAC,eAASsC,SAASR,aAAaA,QAAtBQ,CAAsBR,CAAtBQ,IAJQ,KAIjBtC;AAJF,WAKO;AACLqC,sBAAgBC,SAAST,UAAUC,QAAnBQ,CAAmBR,CAAnBQ,YADX,OACLD;AACAE,sBAAgBD,SAASP,UAAUD,QAAnBQ,CAAmBR,CAAnBQ,YAFX,OAELC;AACAxC,cAAQuC,SAASR,aAAaA,QAAtBQ,CAAsBR,CAAtBQ,IAHH,KAGLvC;AACAC,eAASsC,SAASR,aAAaA,QAAtBQ,CAAsBR,CAAtBQ,IAJJ,KAILtC;AAhED;;AAqED,qBAAiB,CACfiC,UADe,OAEfC,UAFe,OAGfC,UAHe,OAIfC,UAJe,OAKfC,gBAAgBJ,kBAAhBI,UAA4CF,kBAL7B,SAMfI,gBAAgBL,kBAAhBK,UAA4CH,kBAN7B,QAAjB;AASA,iBA9EC,KA8ED;AACA,kBA/EC,MA+ED;AA1Fe;;;;WAkGjBI,iBAMQ;AAAA,sFANRA,EAMQ;AAAA,8BALNC,KAKM;AAAA,UALNA,KAKM,4BALE,KADJ,KAME;AAAA,iCAJNT,QAIM;AAAA,UAJNA,QAIM,+BAJK,KAFP,QAME;AAAA,gCAHNN,OAGM;AAAA,UAHNA,OAGM,8BAHI,KAHN,OAME;AAAA,gCAFNC,OAEM;AAAA,UAFNA,OAEM,8BAFI,KAJN,OAME;AAAA,iCADNC,QACM;AAAA,UADNA,QACM,+BANF,KAME;;AACN,aAAO,iBAAiB;AACtBE,iBAAS,aADa,KACb,EADa;AAEtBW,aAFsB,EAEtBA,KAFsB;AAGtBT,gBAHsB,EAGtBA,QAHsB;AAItBN,eAJsB,EAItBA,OAJsB;AAKtBC,eALsB,EAKtBA,OALsB;AAMtBC,gBANsB,EAMtBA;AANsB,OAAjB,CAAP;AAzGe;;;WA6HjBc,sCAA6B;AAC3B,aAAO,0BAAoB,MAApB,EAA4B,KADR,SACpB,CAAP;AA9He;;;WAwIjBC,0CAAiC;AAC/B,UAAMC,UAAU,0BAAoB,CAACC,KAAD,CAACA,CAAD,EAAUA,KAAV,CAAUA,CAAV,CAApB,EAAwC,KADzB,SACf,CAAhB;;AACA,UAAMC,cAAc,0BAAoB,CAACD,KAAD,CAACA,CAAD,EAAUA,KAAV,CAAUA,CAAV,CAApB,EAAwC,KAF7B,SAEX,CAApB;;AACA,aAAO,CAACD,QAAD,CAACA,CAAD,EAAaA,QAAb,CAAaA,CAAb,EAAyBE,YAAzB,CAAyBA,CAAzB,EAAyCA,YAAzC,CAAyCA,CAAzC,CAAP;AA3Ie;;;WAuJjBC,iCAAwB;AACtB,aAAO,iCAA2B,MAA3B,EAAmC,KADpB,SACf,CAAP;AAxJe;;;;;;;;IA4JnB,2B;;;;;AACErD,kDAAuB;AAAA;;AAAA;;AACrB,gCADqB,GACrB;AACA,kBAFqB,IAErB;AAFqB;AAD+B;;;EAAxD,mB;;;AAOA,IAAMsD,aAAa;AACjBC,QADiB;AAEjBC,QAFiB;AAGjBC,SAHiB;AAIjBC,UAJiB;AAKjBC,OALiB;AAAA,CAAnB;;;AAyBA,iCAA4E;AAAA,kFAA5E,EAA4E;AAAA,MAA3C,GAA2C,SAA3C,GAA2C;AAAA,MAA3C,MAA2C,SAA3C,MAA2C;AAAA,MAA3C,GAA2C,SAA3C,GAA2C;AAAA,4BAAvBC,OAAuB;AAAA,MAAvBA,OAAuB,8BAA3C,IAA2C;;AAC1E/B,oBACEf,OAAO,eADTe,UAD0E,2DAC1EA;AAKA,MAAMgC,iBAAiBC,gCANmD,GAMnDA,CAAvB;;AACA,eAAa;AACXC,gBAAYA,aADD,cACXA;AADF,SAEO;AACLA,gBADK,EACLA;AACAA,qCAFK,cAELA;;AACAA,mBAAe,YAAM;AACnB,aADmB,KACnB;AAJG,KAGLA;AAZwE;;AAiB1E,MAAIC,YAjBsE,EAiB1E;;AACA;AACE,SAAKV,WAAL;AADF;;AAGE,SAAKA,WAAL;AACEU,kBADF,OACEA;AAJJ;;AAME,SAAKV,WAAL;AACEU,kBADF,QACEA;AAPJ;;AASE,SAAKV,WAAL;AACEU,kBADF,SACEA;AAVJ;;AAYE,SAAKV,WAAL;AACEU,kBADF,MACEA;AAbJ;AAAA;;AAgBAD,gBAlC0E,SAkC1EA;AAEAA,aAAW,gCApC+D,gBAoC1EA;AArcF;;AAwcA,2BAA2B;AACzB,MAAME,KAAKnD,IADc,MACzB;AACA,MAAIoD,IAFqB,CAEzB;;AACA,SAAOA,UAAUpD,kBAAjB,IAAuC;AACrCoD,KADqC;AAHd;;AAMzB,SAAOpD,iBAAiBoD,IAAjBpD,qBANkB,OAMzB;AA9cF;;AAidA,6BAA6B;AAC3B,SAAO,gCAAgC,eADZ,QACY,CAAvC;AAldF;;AA0dA,iCAAiC;AAC/B,MAAMqD,SAASrD,YADgB,GAChBA,CAAf;AACA,MAAMsD,QAAQtD,YAFiB,GAEjBA,CAAd;AACA,MAAMuD,MAAMzB,SACVuB,sBAAsBrD,IADZ8B,QAEVwB,oBAAoBtD,IALS,MAGnB8B,CAAZ;AAIA,SAAO9B,cAAcA,4BAAdA,GAPwB,GAOxBA,CAAP;AAjeF;;AA2eA,oCAAsE;AAAA,MAAlCwD,eAAkC,uEAAtE,cAAsE;;AACpE,MAAI,eAAJ,UAA6B;AAC3B,WAD2B,eAC3B;AAFkE;;AAIpE,MAAIC,aAAJ,GAAIA,CAAJ,EAAuB;AACrBC,oBADqB,oEACrBA;AACA,WAFqB,eAErB;AANkE;;AAQpE,MAAMC,QAR8D,qDAQpE;AAGA,MAAMC,aAX8D,+BAWpE;AACA,MAAMC,WAAWF,WAZmD,GAYnDA,CAAjB;AACA,MAAIG,oBACFF,gBAAgBC,SAAhBD,CAAgBC,CAAhBD,KACAA,gBAAgBC,SADhBD,CACgBC,CAAhBD,CADAA,IAEAA,gBAAgBC,SAhBkD,CAgBlDA,CAAhBD,CAHF;;AAIA,yBAAuB;AACrBE,wBAAoBA,kBADC,CACDA,CAApBA;;AACA,QAAIA,2BAAJ,GAAIA,CAAJ,EAAqC;AAEnC,UAAI;AACFA,4BAAoBF,gBAClBG,mBADkBH,iBAClBG,CADkBH,EADlB,CACkBA,CAApBE;AADF,QAIE,WAAW,CANsB;AAFhB;AAjB6C;;AAgCpE,SAAOA,qBAhC6D,eAgCpE;AA3gBF;;IA8gBA,S;AACE5E,uBAAc;AAAA;;AACZ,mBAAe8E,cADH,IACGA,CAAf;AACA,iBAFY,EAEZ;AAHY;;;;WAMdC,oBAAW;AACT,UAAIC,QAAQ,KAAZ,SAA0B;AACxBR,+DADwB,IACxBA;AAFO;;AAIT,2BAAqBS,KAJZ,GAIYA,EAArB;AAVY;;;WAadC,uBAAc;AACZ,UAAI,EAAE,QAAQ,KAAd,OAAI,CAAJ,EAA6B;AAC3BV,iEAD2B,IAC3BA;AAFU;;AAIZ,sBAAgB;AACdQ,YADc,EACdA,IADc;AAEdG,eAAO,aAFO,IAEP,CAFO;AAGdd,aAAKY,KAHS,GAGTA;AAHS,OAAhB;AAMA,aAAO,aAVK,IAUL,CAAP;AAvBY;;;WA0BdG,oBAAW;AAET,UAAMC,SAFG,EAET;AACA,UAAIC,UAHK,CAGT;;AAHS,iDAIU,KAAnB,KAJS;AAAA;;AAAA;AAIT,4DAA+B;AAAA,cAA/B,IAA+B;AAC7B,cAAMN,OAAOD,KADgB,IAC7B;;AACA,cAAIC,cAAJ,SAA2B;AACzBM,sBAAUN,KADe,MACzBM;AAH2B;AAJtB;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAUU,KAAnB,KAVS;AAAA;;AAAA;AAUT,+DAA+B;AAAA,cAA/B,KAA+B;AAC7B,cAAMC,WAAWR,YAAWA,MADC,KAC7B;AACAM,gCAAeN,kBAAH,OAAGA,CAAfM,cAF6B,QAE7BA;AAZO;AAAA;AAAA;AAAA;AAAA;AAAA;;AAcT,aAAOA,YAdE,EAcFA,CAAP;AAxCY;;;;;;;;AA4ChB,4BAA4B;AAC1B,SACE,gCACA,oBADA,eAEA,UAAUG,SAFV,aAGA,0BALwB,WAC1B;AA3jBF;;AAmkBA,uCAAuC;AACrC,MAAI;AAAA,gBACmB5E,UAAU,aAAVA,OAAU,CAAVA,GAAkC,QADrD,GACqD,CADrD;AAAA,QACI,QADJ,SACI,QADJ;;AAGF,WAAO6E,wBAAwBA,aAH7B,QAGF;AAHF,IAIE,WAAW;AACX,WADW,KACX;AANmC;AAnkBvC;;AAklBA,yBAAsD;AAAA,MAA7BC,mBAA6B,uEAAtD,KAAsD;AACpD,SAAO,YAAY,2BAAqB;AACtC,QAAMC,SAAStE,uBADuB,QACvBA,CAAf;AACAsE,iBAFsC,GAEtCA;;AAEAA,oBAAgB,eAAe;AAC7B,+BAAyB;AACvBA,eADuB,MACvBA;AAF2B;;AAI7BhE,cAJ6B,GAI7BA;AARoC,KAItCgE;;AAMAA,qBAAiB,YAAY;AAC3B/D,aAAO,2CAAoC+D,OADhB,GACpB,EAAP/D;AAXoC,KAUtC+D;;AAGC,sBAAiBtE,SAAlB,eAAC,EAAD,WAAC,CAbqC,MAarC;AAdiD,GAC7C,CAAP;AAnlBF;;AAqmBA,6BAA6B;AAC3BuE,cAAY,2BADe,OAC3BA;AAtmBF;;AAymBA,IAzmBA,kBAymBA;;IAEA,a;;;;;;;WAiBE,6BAA2B;AACzB,UAAI,UAAU,CAACC,oBAAf,KAAeA,CAAf,EAAgC;AAC9B,eAD8B,IAC9B;AAFuB;;AAMzB,UAAI,CAAJ,oBAAyB;AACvBC,6BAAqB,WACnB,6IAFqB,IACF,CAArBA;AAPuB;;AA0BzB,UAAMC,UAAUD,wBA1BS,KA0BTA,CAAhB;;AACA,UAAI,CAAJ,SAAc;AACZ,eADY,IACZ;AA5BuB;;AAiCzB,UAAME,OAAOC,SAASF,QAATE,CAASF,CAATE,EAjCY,EAiCZA,CAAb;AACA,UAAIC,QAAQD,SAASF,QAATE,CAASF,CAATE,EAlCa,EAkCbA,CAAZ;AACAC,cAAQA,cAAcA,SAAdA,KAA4BA,QAA5BA,IAnCiB,CAmCzBA;AACA,UAAIC,MAAMF,SAASF,QAATE,CAASF,CAATE,EApCe,EAoCfA,CAAV;AACAE,YAAMA,YAAYA,OAAZA,WArCmB,CAqCzBA;AACA,UAAIC,OAAOH,SAASF,QAATE,CAASF,CAATE,EAtCc,EAsCdA,CAAX;AACAG,aAAOA,aAAaA,QAAbA,YAvCkB,CAuCzBA;AACA,UAAIC,SAASJ,SAASF,QAATE,CAASF,CAATE,EAxCY,EAwCZA,CAAb;AACAI,eAASA,eAAeA,UAAfA,cAzCgB,CAyCzBA;AACA,UAAIC,SAASL,SAASF,QAATE,CAASF,CAATE,EA1CY,EA0CZA,CAAb;AACAK,eAASA,eAAeA,UAAfA,cA3CgB,CA2CzBA;AACA,UAAMC,wBAAwBR,cA5CL,GA4CzB;AACA,UAAIS,aAAaP,SAASF,QAATE,CAASF,CAATE,EA7CQ,EA6CRA,CAAjB;AACAO,mBAAaA,mBAAmBA,cAAnBA,kBA9CY,CA8CzBA;AACA,UAAIC,eAAeR,SAASF,QAATE,CAASF,CAATE,SA/CM,CA+CzB;AACAQ,qBAAeA,qBAAqBA,gBAArBA,oBAhDU,CAgDzBA;;AAMA,UAAIF,0BAAJ,KAAmC;AACjCH,gBADiC,UACjCA;AACAC,kBAFiC,YAEjCA;AAFF,aAGO,IAAIE,0BAAJ,KAAmC;AACxCH,gBADwC,UACxCA;AACAC,kBAFwC,YAExCA;AA3DuB;;AA8DzB,aAAO,SAASpB,yCA9DS,MA8DTA,CAAT,CAAP;AA/EgB;;;;;;;;;;;;;;;AC3mBpByB,wC;;;;;;;;;;;;ACOA,IAAIC,UAAW,mBAAmB;AAAA;;AAGhC,MAAIC,KAAK9B,OAHuB,SAGhC;AACA,MAAI+B,SAASD,GAJmB,cAIhC;AACA,MALgC,SAKhC;AACA,MAAIE,UAAU,wCANkB,EAMhC;AACA,MAAIC,iBAAiBD,oBAPW,YAOhC;AACA,MAAIE,sBAAsBF,yBARM,iBAQhC;AACA,MAAIG,oBAAoBH,uBATQ,eAShC;;AAEA,mCAAiC;AAC/BhC,oCAAgC;AAC9BoC,aAD8B;AAE9BC,kBAF8B;AAG9BC,oBAH8B;AAI9BC,gBAJ8B;AAAA,KAAhCvC;AAMA,WAAOwC,IAPwB,GAOxBA,CAAP;AAlB8B;;AAoBhC,MAAI;AAEFC,eAFE,EAEFA;AAFF,IAGE,YAAY;AACZA,aAAS,iCAA0B;AACjC,aAAOD,WAD0B,KACjC;AAFU,KACZC;AAxB8B;;AA6BhC,qDAAmD;AAEjD,QAAIC,iBAAiBC,WAAWA,6BAAXA,sBAF4B,SAEjD;AACA,QAAIC,YAAY5C,cAAc0C,eAHmB,SAGjC1C,CAAhB;AACA,QAAInE,UAAU,YAAYgH,eAJuB,EAInC,CAAd;AAIAD,wBAAoBE,gCAR6B,OAQ7BA,CAApBF;AAEA,WAViD,SAUjD;AAvC8B;;AAyChCG,iBAzCgC,IAyChCA;;AAYA,kCAAgC;AAC9B,QAAI;AACF,aAAO;AAAEC,cAAF;AAAkBC,aAAKC,aAAvB,GAAuBA;AAAvB,OAAP;AADF,MAEE,YAAY;AACZ,aAAO;AAAEF,cAAF;AAAiBC,aAAjB;AAAA,OAAP;AAJ4B;AArDA;;AA6DhC,MAAIE,yBA7D4B,gBA6DhC;AACA,MAAIC,yBA9D4B,gBA8DhC;AACA,MAAIC,oBA/D4B,WA+DhC;AACA,MAAIC,oBAhE4B,WAgEhC;AAIA,MAAIC,mBApE4B,EAoEhC;;AAMA,uBAAqB,CA1EW;;AA2EhC,+BAA6B,CA3EG;;AA4EhC,wCAAsC,CA5EN;;AAgFhC,MAAIC,oBAhF4B,EAgFhC;;AACAA,sCAAoC,YAAY;AAC9C,WAD8C,IAC9C;AAlF8B,GAiFhCA;;AAIA,MAAIC,WAAWzD,OArFiB,cAqFhC;AACA,MAAI0D,0BAA0BD,YAAYA,SAASA,SAASE,OAtF5B,EAsF4BA,CAATF,CAATA,CAA1C;;AACA,MAAIC,2BACAA,4BADAA,MAEA3B,qCAFJ,cAEIA,CAFJ,EAE0D;AAGxDyB,wBAHwD,uBAGxDA;AA5F8B;;AA+FhC,MAAII,KAAKC,uCACPC,sBAAsB9D,cAhGQ,iBAgGRA,CADxB;AAEA+D,gCAA8BH,iBAjGE,0BAiGhCG;AACAF,2CAlGgC,iBAkGhCA;AACAE,kCAAgCtB,sDAnGA,mBAmGAA,CAAhCsB;;AAQA,4CAA0C;AACxC,wCAAoC,kBAAiB;AACnDtB,gCAA0B,eAAc;AACtC,eAAO,qBAD+B,GAC/B,CAAP;AAFiD,OACnDA;AAFsC,KACxC;AA5G8B;;AAmHhCM,gCAA8B,kBAAiB;AAC7C,QAAIiB,OAAO,gCAAgCC,OADE,WAC7C;AACA,WAAOD,OACHA,8BAGC,qBAAoBA,KAArB,IAAC,MAJEA,sBAFsC,KAE7C;AArH8B,GAmHhCjB;;AAUAA,iBAAe,kBAAiB;AAC9B,QAAI/C,OAAJ,gBAA2B;AACzBA,oCADyB,0BACzBA;AADF,WAEO;AACLiE,yBADK,0BACLA;AACAxB,wCAFK,mBAELA;AAL4B;;AAO9BwB,uBAAmBjE,cAPW,EAOXA,CAAnBiE;AACA,WAR8B,MAQ9B;AArI8B,GA6HhClB;;AAeAA,kBAAgB,eAAc;AAC5B,WAAO;AAAEmB,eADmB;AACrB,KAAP;AA7I8B,GA4IhCnB;;AAIA,iDAA+C;AAC7C,kDAA8C;AAC5C,UAAIoB,SAASC,SAASxB,UAATwB,MAASxB,CAATwB,aAD+B,GAC/BA,CAAb;;AACA,UAAID,gBAAJ,SAA6B;AAC3BrH,eAAOqH,OADoB,GAC3BrH;AADF,aAEO;AACL,YAAIuH,SAASF,OADR,GACL;AACA,YAAI/B,QAAQiC,OAFP,KAEL;;AACA,YAAIjC,SACA,mBADAA,YAEAL,mBAFJ,SAEIA,CAFJ,EAEmC;AACjC,iBAAO,oBAAoBK,MAApB,cAAwC,iBAAgB;AAC7DkC,2CAD6D,MAC7DA;AADK,aAEJ,eAAc;AACfA,0CADe,MACfA;AAJ+B,WAC1B,CAAP;AANG;;AAaL,eAAO,gCAAgC,qBAAoB;AAIzDD,yBAJyD,SAIzDA;AACAxH,kBALyD,MAKzDA;AALK,WAMJ,iBAAgB;AAGjB,iBAAOyH,gCAHU,MAGVA,CAAP;AAtBG,SAaE,CAAP;AAjB0C;AADD;;AAgC7C,QAhC6C,eAgC7C;;AAEA,kCAA8B;AAC5B,4CAAsC;AACpC,eAAO,gBAAgB,2BAA0B;AAC/CA,uCAD+C,MAC/CA;AAFkC,SAC7B,CAAP;AAF0B;;AAO5B,aAAOC,kBAaLA,kBAAkBA,iDAAlBA,0BAAkBA,CAAlBA,GAKIC,0BAzBsB,EAO5B;AAzC2C;;AAgE7C,mBAhE6C,OAgE7C;AAhN8B;;AAmNhCC,wBAAsBC,cAnNU,SAmNhCD;;AACAC,iDAA+C,YAAY;AACzD,WADyD,IACzD;AArN8B,GAoNhCA;;AAGA3B,0BAvNgC,aAuNhCA;;AAKAA,kBAAgB,4DAA2D;AACzE,QAAI4B,gBAAgB,KAApB,GAA4BA,cAD6C,OAC7CA;AAE5B,QAAIC,OAAO,kBACTC,6BADS,WACTA,CADS,EAH8D,WAG9D,CAAX;AAKA,WAAO9B,8CAEH,iBAAiB,kBAAiB;AAChC,aAAOsB,cAAcA,OAAdA,QAA6BO,KADJ,IACIA,EAApC;AAXmE,KAUrE,CAFJ;AApO8B,GA4NhC7B;;AAeA,oDAAkD;AAChD,QAAI+B,QAD4C,sBAChD;AAEA,WAAO,6BAA6B;AAClC,UAAIA,UAAJ,mBAAiC;AAC/B,cAAM,UADyB,8BACzB,CAAN;AAFgC;;AAKlC,UAAIA,UAAJ,mBAAiC;AAC/B,YAAIC,WAAJ,SAAwB;AACtB,gBADsB,GACtB;AAF6B;;AAO/B,eAAOC,UAPwB,EAO/B;AAZgC;;AAelCnJ,uBAfkC,MAelCA;AACAA,oBAhBkC,GAgBlCA;;AAEA,mBAAa;AACX,YAAIoJ,WAAWpJ,QADJ,QACX;;AACA,sBAAc;AACZ,cAAIqJ,iBAAiBC,8BADT,OACSA,CAArB;;AACA,8BAAoB;AAClB,gBAAID,mBAAJ,kBADkB;AAElB,mBAFkB,cAElB;AAJU;AAFH;;AAUX,YAAIrJ,mBAAJ,QAA+B;AAG7BA,yBAAeA,gBAAgBA,QAHF,GAG7BA;AAHF,eAKO,IAAIA,mBAAJ,SAAgC;AACrC,cAAIiJ,UAAJ,wBAAsC;AACpCA,oBADoC,iBACpCA;AACA,kBAAMjJ,QAF8B,GAEpC;AAHmC;;AAMrCA,oCAA0BA,QANW,GAMrCA;AANK,eAQA,IAAIA,mBAAJ,UAAiC;AACtCA,mCAAyBA,QADa,GACtCA;AAxBS;;AA2BXiJ,gBA3BW,iBA2BXA;AAEA,YAAIX,SAASC,wBA7BF,OA6BEA,CAAb;;AACA,YAAID,gBAAJ,UAA8B;AAG5BW,kBAAQjJ,mCAHoB,sBAG5BiJ;;AAIA,cAAIX,eAAJ,kBAAqC;AAAA;AAPT;;AAW5B,iBAAO;AACL/B,mBAAO+B,OADF;AAELiB,kBAAMvJ,QAFD;AAAA,WAAP;AAXF,eAgBO,IAAIsI,gBAAJ,SAA6B;AAClCW,kBADkC,iBAClCA;AAGAjJ,2BAJkC,OAIlCA;AACAA,wBAAcsI,OALoB,GAKlCtI;AAnDS;AAlBqB;AAHY,KAGhD;AA9O8B;;AA6ThC,kDAAgD;AAC9C,QAAIkJ,SAASE,kBAAkBpJ,QADe,MACjCoJ,CAAb;;AACA,QAAIF,WAAJ,WAA0B;AAGxBlJ,yBAHwB,IAGxBA;;AAEA,UAAIA,mBAAJ,SAAgC;AAE9B,YAAIoJ,kBAAJ,QAAIA,CAAJ,EAAiC;AAG/BpJ,2BAH+B,QAG/BA;AACAA,wBAJ+B,SAI/BA;AACAsJ,wCAL+B,OAK/BA;;AAEA,cAAItJ,mBAAJ,SAAgC;AAG9B,mBAH8B,gBAG9B;AAV6B;AAFH;;AAgB9BA,yBAhB8B,OAgB9BA;AACAA,sBAAc,cAjBgB,gDAiBhB,CAAdA;AAtBsB;;AA0BxB,aA1BwB,gBA0BxB;AA5B4C;;AA+B9C,QAAIsI,SAASC,iBAAiBa,SAAjBb,UAAoCvI,QA/BH,GA+BjCuI,CAAb;;AAEA,QAAID,gBAAJ,SAA6B;AAC3BtI,uBAD2B,OAC3BA;AACAA,oBAAcsI,OAFa,GAE3BtI;AACAA,yBAH2B,IAG3BA;AACA,aAJ2B,gBAI3B;AArC4C;;AAwC9C,QAAIwJ,OAAOlB,OAxCmC,GAwC9C;;AAEA,QAAI,CAAJ,MAAY;AACVtI,uBADU,OACVA;AACAA,oBAAc,cAFJ,kCAEI,CAAdA;AACAA,yBAHU,IAGVA;AACA,aAJU,gBAIV;AA9C4C;;AAiD9C,QAAIwJ,KAAJ,MAAe;AAGbxJ,cAAQoJ,SAARpJ,cAA+BwJ,KAHlB,KAGbxJ;AAGAA,qBAAeoJ,SANF,OAMbpJ;;AAQA,UAAIA,mBAAJ,UAAiC;AAC/BA,yBAD+B,MAC/BA;AACAA,sBAF+B,SAE/BA;AAhBW;AAAf,WAmBO;AAEL,aAFK,IAEL;AAtE4C;;AA2E9CA,uBA3E8C,IA2E9CA;AACA,WA5E8C,gBA4E9C;AAzY8B;;AA8YhC4I,wBA9YgC,EA8YhCA;AAEAhC,gCAhZgC,WAgZhCA;;AAOAmB,uBAAqB,YAAW;AAC9B,WAD8B,IAC9B;AAxZ8B,GAuZhCA;;AAIAA,gBAAc,YAAW;AACvB,WADuB,oBACvB;AA5Z8B,GA2ZhCA;;AAIA,8BAA4B;AAC1B,QAAI0B,QAAQ;AAAEC,cAAQC,KADI,CACJA;AAAV,KAAZ;;AAEA,QAAI,KAAJ,MAAe;AACbF,uBAAiBE,KADJ,CACIA,CAAjBF;AAJwB;;AAO1B,QAAI,KAAJ,MAAe;AACbA,yBAAmBE,KADN,CACMA,CAAnBF;AACAA,uBAAiBE,KAFJ,CAEIA,CAAjBF;AATwB;;AAY1B,yBAZ0B,KAY1B;AA3a8B;;AA8ahC,gCAA8B;AAC5B,QAAInB,SAASmB,oBADe,EAC5B;AACAnB,kBAF4B,QAE5BA;AACA,WAAOA,OAHqB,GAG5B;AACAmB,uBAJ4B,MAI5BA;AAlb8B;;AAqbhC,gCAA8B;AAI5B,sBAAkB,CAAC;AAAEC,cAJO;AAIT,KAAD,CAAlB;AACA1C,sCAL4B,IAK5BA;AACA,eAN4B,IAM5B;AA3b8B;;AA8bhCE,iBAAe,kBAAiB;AAC9B,QAAI0C,OAD0B,EAC9B;;AACA,4BAAwB;AACtBA,gBADsB,GACtBA;AAH4B;;AAK9BA,SAL8B,OAK9BA;AAIA,WAAO,gBAAgB;AACrB,aAAOA,KAAP,QAAoB;AAClB,YAAIC,MAAMD,KADQ,GACRA,EAAV;;AACA,YAAIC,OAAJ,QAAmB;AACjBC,uBADiB,GACjBA;AACAA,sBAFiB,KAEjBA;AACA,iBAHiB,IAGjB;AALgB;AADC;;AAarBA,kBAbqB,IAarBA;AACA,aAdqB,IAcrB;AAvB4B,KAS9B;AAvc8B,GA8bhC5C;;AA2BA,4BAA0B;AACxB,kBAAc;AACZ,UAAI6C,iBAAiBC,SADT,cACSA,CAArB;;AACA,0BAAoB;AAClB,eAAOD,oBADW,QACXA,CAAP;AAHU;;AAMZ,UAAI,OAAOC,SAAP,SAAJ,YAAyC;AACvC,eADuC,QACvC;AAPU;;AAUZ,UAAI,CAACC,MAAMD,SAAX,MAAKC,CAAL,EAA6B;AAC3B,YAAI1G,IAAI,CAAR;AAAA,YAAYuG,OAAO,gBAAgB;AACjC,iBAAO,MAAME,SAAb,QAA8B;AAC5B,gBAAI9D,sBAAJ,CAAIA,CAAJ,EAA8B;AAC5B4D,2BAAaE,SADe,CACfA,CAAbF;AACAA,0BAF4B,KAE5BA;AACA,qBAH4B,IAG5B;AAJ0B;AADG;;AASjCA,uBATiC,SASjCA;AACAA,sBAViC,IAUjCA;AAEA,iBAZiC,IAYjC;AAbyB,SAC3B;;AAeA,eAAOA,YAhBoB,IAgB3B;AA1BU;AADU;;AAgCxB,WAAO;AAAEA,YAhCe;AAgCjB,KAAP;AAzf8B;;AA2fhC5C,mBA3fgC,MA2fhCA;;AAEA,wBAAsB;AACpB,WAAO;AAAEX,aAAF;AAAoBgD,YAApB;AAAA,KAAP;AA9f8B;;AAigBhCW,sBAAoB;AAClB7K,iBADkB;AAGlBG,WAAO,8BAAwB;AAC7B,kBAD6B,CAC7B;AACA,kBAF6B,CAE7B;AAGA,kBAAY,aALiB,SAK7B;AACA,kBAN6B,KAM7B;AACA,sBAP6B,IAO7B;AAEA,oBAT6B,MAS7B;AACA,iBAV6B,SAU7B;AAEA,8BAZ6B,aAY7B;;AAEA,UAAI,CAAJ,eAAoB;AAClB,+BAAuB;AAErB,cAAI6E,0BACA6B,kBADA7B,IACA6B,CADA7B,IAEA,CAAC4F,MAAM,CAAC5F,WAFZ,CAEYA,CAAP4F,CAFL,EAE4B;AAC1B,yBAD0B,SAC1B;AALmB;AADL;AAdS;AAHb;AA6BlBE,UAAM,gBAAW;AACf,kBADe,IACf;AAEA,UAAIC,YAAY,gBAHD,CAGC,CAAhB;AACA,UAAIC,aAAaD,UAJF,UAIf;;AACA,UAAIC,oBAAJ,SAAiC;AAC/B,cAAMA,WADyB,GAC/B;AANa;;AASf,aAAO,KATQ,IASf;AAtCgB;AAyClBC,uBAAmB,sCAAoB;AACrC,UAAI,KAAJ,MAAe;AACb,cADa,SACb;AAFmC;;AAKrC,UAAItK,UALiC,IAKrC;;AACA,mCAA6B;AAC3BsI,sBAD2B,OAC3BA;AACAA,qBAF2B,SAE3BA;AACAtI,uBAH2B,GAG3BA;;AAEA,oBAAY;AAGVA,2BAHU,MAGVA;AACAA,wBAJU,SAIVA;AATyB;;AAY3B,eAAO,CAAC,CAZmB,MAY3B;AAlBmC;;AAqBrC,WAAK,IAAIuD,IAAI,yBAAb,GAAyCA,KAAzC,GAAiD,EAAjD,GAAsD;AACpD,YAAIkG,QAAQ,gBADwC,CACxC,CAAZ;AACA,YAAInB,SAASmB,MAFuC,UAEpD;;AAEA,YAAIA,iBAAJ,QAA6B;AAI3B,iBAAOc,OAJoB,KAIpBA,CAAP;AARkD;;AAWpD,YAAId,gBAAgB,KAApB,MAA+B;AAC7B,cAAIe,WAAWtE,mBADc,UACdA,CAAf;AACA,cAAIuE,aAAavE,mBAFY,YAEZA,CAAjB;;AAEA,cAAIsE,YAAJ,YAA4B;AAC1B,gBAAI,YAAYf,MAAhB,UAAgC;AAC9B,qBAAOc,OAAOd,MAAPc,UADuB,IACvBA,CAAP;AADF,mBAEO,IAAI,YAAYd,MAAhB,YAAkC;AACvC,qBAAOc,OAAOd,MADyB,UAChCc,CAAP;AAJwB;AAA5B,iBAOO,cAAc;AACnB,gBAAI,YAAYd,MAAhB,UAAgC;AAC9B,qBAAOc,OAAOd,MAAPc,UADuB,IACvBA,CAAP;AAFiB;AAAd,iBAKA,gBAAgB;AACrB,gBAAI,YAAYd,MAAhB,YAAkC;AAChC,qBAAOc,OAAOd,MADkB,UACzBc,CAAP;AAFmB;AAAhB,iBAKA;AACL,kBAAM,UADD,wCACC,CAAN;AAtB2B;AAXqB;AArBjB;AAzCrB;AAqGlBG,YAAQ,2BAAoB;AAC1B,WAAK,IAAInH,IAAI,yBAAb,GAAyCA,KAAzC,GAAiD,EAAjD,GAAsD;AACpD,YAAIkG,QAAQ,gBADwC,CACxC,CAAZ;;AACA,YAAIA,gBAAgB,KAAhBA,QACAvD,mBADAuD,YACAvD,CADAuD,IAEA,YAAYA,MAFhB,YAEkC;AAChC,cAAIkB,eAD4B,KAChC;AADgC;AAJkB;AAD5B;;AAW1B,UAAIA,iBACC,oBACAxD,SAFDwD,eAGAA,uBAHAA,OAIAvD,OAAOuD,aAJX,YAIoC;AAGlCA,uBAHkC,IAGlCA;AAlBwB;;AAqB1B,UAAIrC,SAASqC,eAAeA,aAAfA,aArBa,EAqB1B;AACArC,oBAtB0B,IAsB1BA;AACAA,mBAvB0B,GAuB1BA;;AAEA,wBAAkB;AAChB,sBADgB,MAChB;AACA,oBAAYqC,aAFI,UAEhB;AACA,eAHgB,gBAGhB;AA5BwB;;AA+B1B,aAAO,cA/BmB,MA+BnB,CAAP;AApIgB;AAuIlBC,cAAU,oCAA2B;AACnC,UAAItC,gBAAJ,SAA6B;AAC3B,cAAMA,OADqB,GAC3B;AAFiC;;AAKnC,UAAIA,2BACAA,gBADJ,YACgC;AAC9B,oBAAYA,OADkB,GAC9B;AAFF,aAGO,IAAIA,gBAAJ,UAA8B;AACnC,oBAAY,WAAWA,OADY,GACnC;AACA,sBAFmC,QAEnC;AACA,oBAHmC,KAGnC;AAHK,aAIA,IAAIA,4BAAJ,UAA0C;AAC/C,oBAD+C,QAC/C;AAbiC;;AAgBnC,aAhBmC,gBAgBnC;AAvJgB;AA0JlBuC,YAAQ,4BAAqB;AAC3B,WAAK,IAAItH,IAAI,yBAAb,GAAyCA,KAAzC,GAAiD,EAAjD,GAAsD;AACpD,YAAIkG,QAAQ,gBADwC,CACxC,CAAZ;;AACA,YAAIA,qBAAJ,YAAqC;AACnC,wBAAcA,MAAd,YAAgCA,MADG,QACnC;AACAqB,wBAFmC,KAEnCA;AACA,iBAHmC,gBAGnC;AALkD;AAD3B;AA1JX;AAqKlB,aAAS,wBAAiB;AACxB,WAAK,IAAIvH,IAAI,yBAAb,GAAyCA,KAAzC,GAAiD,EAAjD,GAAsD;AACpD,YAAIkG,QAAQ,gBADwC,CACxC,CAAZ;;AACA,YAAIA,iBAAJ,QAA6B;AAC3B,cAAInB,SAASmB,MADc,UAC3B;;AACA,cAAInB,gBAAJ,SAA6B;AAC3B,gBAAIyC,SAASzC,OADc,GAC3B;AACAwC,0BAF2B,KAE3BA;AAJyB;;AAM3B,iBAN2B,MAM3B;AARkD;AAD9B;;AAexB,YAAM,UAfkB,uBAelB,CAAN;AApLgB;AAuLlBE,mBAAe,sDAAwC;AACrD,sBAAgB;AACdC,kBAAUnD,OADI,QACJA,CADI;AAEdoD,oBAFc;AAGdC,iBAHc;AAAA,OAAhB;;AAMA,UAAI,gBAAJ,QAA4B;AAG1B,mBAH0B,SAG1B;AAVmD;;AAarD,aAbqD,gBAarD;AApMgB;AAAA,GAApBjB;AA4MA,SA7sBgC,OA6sBhC;AA7sBa,EAotBb,8CAA6BnE,OAA7B,UA3tBF,EAOe,CAAf;;AAutBA,IAAI;AACFqF,uBADE,OACFA;AADF,EAEE,6BAA6B;AAU7BC,0CAV6B,OAU7BA;AAV6B,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChuB/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAMC,kBAAkB,kBAAxB;;AACA,IAAMC,uBAAuB,0BAA7B;;AAGA,IAAMC,iBAAiB;AACrBC,SADqB;AAErBC,mBAFqB;AAGrBC,QAHqB;AAIrBC,sBAJqB;AAKrBC,0BALqB;AAMrBC,0BANqB;AAOrBC,YAPqB;AAQrBC,sBARqB;AAAA,CAAvB;;AAWA,IAAMC,oBAAoB;AACxBC,QADwB;AAExBC,UAFwB;AAGxBC,eAHwB;AAIxBC,aAJwB;AAKxBC,oBALwB;AAMxBC,sBANwB;AAOxBC,2BAPwB;AAQxBC,eARwB;AASxBC,oBATwB;AAUxBC,oBAVwB;AAAA,CAA1B;;AAaA,IAAMC,YAAY;AAChBC,kBADgB;AAEhBC,aAFgB;AAGhBC,cAHgB;AAAA,CAAlB;;AAMA,IAAMC,iBAAiB;AACrBC,QADqB;AAErBC,QAFqB;AAGrBC,YAHqB;AAIrBC,QAJqB;AAKrBC,UALqB;AAMrBC,UANqB;AAOrBC,WAPqB;AAQrBC,YARqB;AASrBC,aATqB;AAUrBC,aAVqB;AAWrBC,YAXqB;AAYrBC,aAZqB;AAarBC,SAbqB;AAcrBC,SAdqB;AAerBC,OAfqB;AAgBrBC,SAhBqB;AAiBrBC,kBAjBqB;AAkBrBC,SAlBqB;AAmBrBC,SAnBqB;AAoBrBC,UApBqB;AAqBrBC,UArBqB;AAsBrBC,eAtBqB;AAuBrBC,WAvBqB;AAwBrBC,aAxBqB;AAyBrBC,UAzBqB;AA0BrBC,UA1BqB;AAAA,CAAvB;;AA6BA,IAAMC,2BAA2B;AAC/BC,UAD+B;AAE/BC,UAF+B;AAAA,CAAjC;;AAKA,IAAMC,wBAAwB;AAC5BF,UAD4B;AAE5BG,YAF4B;AAAA,CAA9B;;AAKA,IAAMC,wBAAwB;AAC5BC,YAD4B;AAE5BC,YAF4B;AAG5BC,aAH4B;AAI5BC,aAJ4B;AAK5BxM,QAL4B;AAAA,CAA9B;;AAQA,IAAMyM,sBAAsB;AAC1BC,SAD0B;AAE1BC,SAF0B;AAAA,CAA5B;;AAKA,IAAMC,iBAAiB;AACrBnD,aADqB;AAErBoD,UAFqB;AAGrBhE,SAHqB;AAIrBiE,UAJqB;AAKrBC,YALqB;AAMrBC,UANqB;AAOrBC,YAPqB;AAQrBC,UARqB;AASrBC,gBATqB;AAUrBC,kBAVqB;AAAA,CAAvB;;AAaA,IAAMC,sBAAsB;AAC1BJ,YAD0B;AAE1BK,YAF0B;AAG1BC,YAH0B;AAI1BC,aAJ0B;AAK1BC,YAL0B;AAM1BC,iBAN0B;AAO1BC,SAP0B;AAQ1BC,cAR0B;AAS1BC,SAT0B;AAU1BC,QAV0B;AAW1BC,QAX0B;AAY1BC,cAZ0B;AAa1BC,eAb0B;AAc1BC,mBAd0B;AAe1BC,eAf0B;AAgB1BC,QAhB0B;AAiB1BC,YAjB0B;AAkB1BC,kBAlB0B;AAmB1BC,qBAnB0B;AAAA,CAA5B;;AAsBA,IAAMC,4BAA4B;AAChCC,SADgC;AAEhCC,UAFgC;AAGhCC,WAHgC;AAIhCC,SAJgC;AAKhC9D,aALgC;AAAA,CAAlC;;AAQA,IAAM+D,4BAA4B;AAChCC,KADgC;AAEhCC,KAFgC;AAGhCC,KAHgC;AAIhCC,KAJgC;AAKhCC,MALgC;AAMhCC,MANgC;AAOhCC,MAPgC;AAQhCC,MARgC;AAShCC,MATgC;AAUhCC,MAVgC;AAWhCC,KAXgC;AAYhCC,KAZgC;AAahCC,KAbgC;AAchCC,KAdgC;AAAA,CAAlC;;AAiBA,IAAMC,0BAA0B;AAC9BC,MAD8B;AAE9BC,MAF8B;AAG9BC,MAH8B;AAI9BC,MAJ8B;AAK9BC,MAL8B;AAAA,CAAhC;;AAQA,IAAMC,sBAAsB;AAC1BC,KAD0B;AAE1BR,KAF0B;AAAA,CAA5B;;AAKA,IAAMS,aAAa;AACjBC,WADiB;AAEjBC,SAFiB;AAGjBC,OAHiB;AAIjBC,OAJiB;AAKjBC,OALiB;AAMjBC,QANiB;AAOjBC,OAPiB;AAQjBC,OARiB;AASjBC,OATiB;AAUjBC,OAViB;AAAA,CAAnB;;AAaA,IAAMC,WAAW;AACfV,WADe;AAEfW,SAFe;AAGfC,UAHe;AAIfC,gBAJe;AAKfC,iBALe;AAMfC,YANe;AAOfC,gBAPe;AAQfC,SARe;AASfC,YATe;AAUfC,SAVe;AAWfC,WAXe;AAAA,CAAjB;;AAcA,IAAMC,iBAAiB;AACrBC,UADqB;AAErBC,YAFqB;AAGrBC,SAHqB;AAAA,CAAvB;;AAMA,IAAMpU,sBAAsB;AAC1BuC,QAD0B;AAE1B8R,UAF0B;AAG1BC,UAH0B;AAAA,CAA5B;;AAOA,IAAMC,MAAM;AAGVC,cAHU;AAIVC,gBAJU;AAKVC,cALU;AAMVC,eANU;AAOVC,iBAPU;AAQVC,WARU;AASVC,sBATU;AAUVC,eAVU;AAWVC,aAXU;AAYVC,QAZU;AAaVC,WAbU;AAcVC,aAdU;AAeVC,UAfU;AAgBVC,UAhBU;AAiBVC,WAjBU;AAkBVC,YAlBU;AAmBVC,YAnBU;AAoBVC,aApBU;AAqBVC,aArBU;AAsBVC,UAtBU;AAuBVC,eAvBU;AAwBVC,QAxBU;AAyBVC,UAzBU;AA0BVC,cA1BU;AA2BVC,gBA3BU;AA4BVC,mBA5BU;AA6BVC,qBA7BU;AA8BVC,WA9BU;AA+BVC,QA/BU;AAgCVC,UAhCU;AAiCVC,aAjCU;AAkCVC,WAlCU;AAmCVC,kBAnCU;AAoCVC,kBApCU;AAqCVC,aArCU;AAsCVC,cAtCU;AAuCVC,WAvCU;AAwCVC,wBAxCU;AAyCVC,eAzCU;AA0CVC,YA1CU;AA2CVC,sBA3CU;AA4CVC,iBA5CU;AA6CVC,YA7CU;AA8CVC,YA9CU;AA+CVC,kBA/CU;AAgDVC,oBAhDU;AAiDVC,8BAjDU;AAkDVC,gBAlDU;AAmDVC,yBAnDU;AAoDVC,uBApDU;AAqDVC,qBArDU;AAsDVC,kBAtDU;AAuDVC,mBAvDU;AAwDVC,gBAxDU;AAyDVC,iBAzDU;AA0DVC,iBA1DU;AA2DVC,eA3DU;AA4DVC,qBA5DU;AA6DVC,mBA7DU;AA8DVC,sBA9DU;AA+DVC,oBA/DU;AAgEVC,eAhEU;AAiEVC,oBAjEU;AAkEVC,kBAlEU;AAmEVC,kBAnEU;AAoEVC,gBApEU;AAqEVC,aArEU;AAsEVC,kBAtEU;AAuEVC,sBAvEU;AAwEVC,2BAxEU;AAyEVC,oBAzEU;AA0EVC,eA1EU;AA2EVC,aA3EU;AA4EVC,yBA5EU;AA6EVC,uBA7EU;AA8EVC,cA9EU;AA+EVC,YA/EU;AAgFVC,oBAhFU;AAiFVC,kBAjFU;AAkFVC,mBAlFU;AAmFVC,iBAnFU;AAoFVC,oBApFU;AAqFVC,yBArFU;AAsFVC,8BAtFU;AAuFVC,qBAvFU;AAwFVC,2BAxFU;AAyFVC,gCAzFU;AA0FVC,2BA1FU;AA2FVC,+BA3FU;AA4FVC,4BA5FU;AA6FVC,iBA7FU;AAAA,CAAZ;;AAgGA,IAAMC,uBAAuB;AAE3BC,WAF2B;AAG3BC,SAH2B;AAI3BC,cAJ2B;AAK3BC,SAL2B;AAM3BC,kBAN2B;AAQ3BC,QAR2B;AAS3BC,sBAT2B;AAU3BC,kBAV2B;AAW3BC,gBAX2B;AAY3BC,sBAZ2B;AAa3BC,kBAb2B;AAc3BC,oBAd2B;AAe3BC,sBAf2B;AAgB3BC,mBAhB2B;AAiB3BC,qBAjB2B;AAkB3BC,sBAlB2B;AAmB3BC,uBAnB2B;AAoB3BC,oBApB2B;AAqB3BC,sBArB2B;AAAA,CAA7B;;AAwBA,IAAMC,oBAAoB;AACxBC,iBADwB;AAExBC,sBAFwB;AAAA,CAA1B;;AAKA,IAAIC,YAAYzH,eArVhB,QAqVA;;AAEA,kCAAkC;AAChC,MAAI0H,iBAAJ,KAAIA,CAAJ,EAA6B;AAC3BD,gBAD2B,KAC3BA;AAF8B;AAvVlC;;AA6VA,6BAA6B;AAC3B,SAD2B,SAC3B;AA9VF;;AAoWA,mBAAmB;AACjB,MAAIA,aAAazH,eAAjB,OAAuC;AACrCrP,gCADqC,GACrCA;AAFe;AApWnB;;AA2WA,mBAAmB;AACjB,MAAI8W,aAAazH,eAAjB,UAA0C;AACxCrP,mCADwC,GACxCA;AAFe;AA3WnB;;AAiXA,0BAA0B;AACxB,QAAM,UADkB,GAClB,CAAN;AAlXF;;AAqXA,2BAA2B;AACzB,MAAI,CAAJ,MAAW;AACT3F,gBADS,GACTA;AAFuB;AArX3B;;AA4XA,yCAAyC;AACvC,MADuC,IACvC;;AACA,MAAI;AACF2c,WAAO,QADL,OACK,CAAPA;;AACA,QAAI,CAACA,KAAD,UAAgBA,gBAApB,QAA4C;AAC1C,aAD0C,KAC1C;AAHA;AAAJ,IAKE,UAAU;AACV,WADU,KACV;AARqC;;AAWvC,MAAMC,QAAQ,kBAXyB,IAWzB,CAAd;AACA,SAAOD,gBAAgBC,MAZgB,MAYvC;AAxYF;;AA4YA,+BAA+B;AAC7B,MAAI,CAAJ,KAAU;AACR,WADQ,KACR;AAF2B;;AAI7B,UAAQ/b,IAAR;AACE,SADF,OACE;AACA,SAFF,QAEE;AACA,SAHF,MAGE;AACA,SAJF,SAIE;AACA;AACE,aANJ,IAMI;;AACF;AACE,aARJ,KAQI;AARJ;AAhZF;;AAmaA,8CAA8C;AAC5C,MAAI,CAAJ,KAAU;AACR,WADQ,IACR;AAF0C;;AAI5C,MAAI;AACF,QAAMgc,cAAclc,UAAU,aAAVA,OAAU,CAAVA,GAAkC,QADpD,GACoD,CAAtD;;AACA,QAAImc,iBAAJ,WAAIA,CAAJ,EAAmC;AACjC,aADiC,WACjC;AAHA;AAAJ,IAKE,WAAW,CAT+B;;AAY5C,SAZ4C,IAY5C;AA/aF;;AAkbA,kCAAkC;AAChCjY,mCAAiC;AAC/BoC,SAD+B,EAC/BA,KAD+B;AAE/BC,gBAF+B;AAG/BC,kBAH+B;AAI/BC,cAJ+B;AAAA,GAAjCvC;AAMA,SAPgC,KAOhC;AAzbF;;AA+bA,IAAMkY,gBAAiB,gCAAgC;AAErD,kCAAgC;AAC9B,QAAI,qBAAJ,eAAwC;AACtC/c,kBADsC,kCACtCA;AAF4B;;AAI9B,mBAJ8B,OAI9B;AACA,gBAAY,iBALkB,IAK9B;AAPmD;;AASrD+c,4BAA0B,IAT2B,KAS3B,EAA1BA;AACAA,8BAVqD,aAUrDA;AAEA,SAZqD,aAYrD;AA3cF,CA+buB,EAAvB;;;;IAeA,iB;;;;;AACEhd,wCAAuB;AAAA;;AAAA;;AACrB,8BADqB,GACrB;AACA,iBAFqB,IAErB;AAFqB;AADqB;;;EAA9C,a;;;;IAOA,qB;;;;;AACEA,+CAA0B;AAAA;;AAAA;;AACxB,gCADwB,GACxB;AACA,qBAFwB,OAExB;AAFwB;AADsB;;;EAAlD,a;;;;IAOA,mB;;;;;;;;;;;;EAAA,a;;;;IAEA,mB;;;;;;;;;;;;EAAA,a;;;;IAEA,2B;;;;;AACEA,oDAAyB;AAAA;;AAAA;;AACvB,gCADuB,GACvB;AACA,oBAFuB,MAEvB;AAFuB;AAD6B;;;EAAxD,a;;;;IAUA,W;;;;;;;;;;;;EAAA,a;;;;IAKA,c;;;;;;;;;;;;EAAA,a;;;AAEA,IAAMid,uBAjfN,OAifA;;AAKA,mCAAmC;AACjC,MAAI,eAAJ,UAA6B;AAC3BzY,SAD2B,yDAC3BA;AACA,WAF2B,GAE3B;AAH+B;;AAKjC,SAAO0Y,kCAL0B,EAK1BA,CAAP;AA3fF;;AA8fA,8BAA8B;AAC5Brb,SACEsb,kBAAkB,mBAAlBA,YAA+CA,iBADjDtb,WAD4B,oCAC5BA;AAIA,MAAMub,SAASD,MALa,MAK5B;AACA,MAAME,qBANsB,IAM5B;;AACA,MAAID,SAAJ,oBAAiC;AAC/B,WAAOE,gCADwB,KACxBA,CAAP;AAR0B;;AAU5B,MAAMC,SAVsB,EAU5B;;AACA,OAAK,IAAIrZ,IAAT,GAAgBA,IAAhB,QAA4BA,KAA5B,oBAAqD;AACnD,QAAMsZ,WAAW5a,SAASsB,IAATtB,oBADkC,MAClCA,CAAjB;AACA,QAAM6a,QAAQN,kBAFqC,QAErCA,CAAd;AACAI,gBAAYD,gCAHuC,KAGvCA,CAAZC;AAd0B;;AAgB5B,SAAOA,YAhBqB,EAgBrBA,CAAP;AA9gBF;;AAihBA,4BAA4B;AAC1B1b,SAAO,eAAPA,UAD0B,oCAC1BA;AACA,MAAMub,SAASF,IAFW,MAE1B;AACA,MAAMC,QAAQ,eAHY,MAGZ,CAAd;;AACA,OAAK,IAAIjZ,IAAT,GAAgBA,IAAhB,QAA4B,EAA5B,GAAiC;AAC/BiZ,eAAWD,oBADoB,IAC/BC;AALwB;;AAO1B,SAP0B,KAO1B;AAxhBF;;AAgiBA,8BAA8B;AAC5B,MAAIO,eAAJ,WAA8B;AAC5B,WAAOA,IADqB,MAC5B;AAF0B;;AAI5B7b,SAAO6b,mBAAP7b,WAJ4B,qCAI5BA;AACA,SAAO6b,IALqB,UAK5B;AAriBF;;AA8iBA,4BAA4B;AAC1B,MAAMN,SAASM,IADW,MAC1B;;AAEA,MAAIN,gBAAgBM,kBAApB,YAAkD;AAChD,WAAOA,IADyC,CACzCA,CAAP;AAJwB;;AAM1B,MAAIC,eANsB,CAM1B;;AACA,OAAK,IAAIzZ,IAAT,GAAgBA,IAAhB,QAA4BA,CAA5B,IAAiC;AAC/ByZ,oBAAgBC,gBAAgBF,IADD,CACCA,CAAhBE,CAAhBD;AARwB;;AAU1B,MAAIE,MAVsB,CAU1B;AACA,MAAMC,OAAO,eAXa,YAWb,CAAb;;AACA,OAAK,IAAI5Z,KAAT,GAAgBA,KAAhB,QAA4BA,EAA5B,IAAiC;AAC/B,QAAI6Z,OAAOL,IADoB,EACpBA,CAAX;;AACA,QAAI,EAAE,gBAAN,UAAI,CAAJ,EAAmC;AACjC,UAAI,gBAAJ,UAA8B;AAC5BK,eAAOvc,cADqB,IACrBA,CAAPuc;AADF,aAEO;AACLA,eAAO,eADF,IACE,CAAPA;AAJ+B;AAFJ;;AAS/B,QAAMC,aAAaD,KATY,UAS/B;AACAD,mBAV+B,GAU/BA;AACAD,WAX+B,UAW/BA;AAvBwB;;AAyB1B,SAzB0B,IAyB1B;AAvkBF;;AA0kBA,yBAAyB;AACvB,SAAOP,oBACJpW,SAAD,EAACA,GADIoW,MAEJpW,SAAD,EAACA,GAFIoW,MAGJpW,SAAD,CAACA,GAHIoW,MAILpW,QALqB,IAChBoW,CAAP;AA3kBF;;AAmlBA,yBAAyB;AACvB,SAAOxY,iBADgB,MACvB;AAplBF;;AAylBA,4BAA4B;AAC1B,MAAMwC,MAAMxC,cADc,IACdA,CAAZ;;AAD0B,6CAE1B,GAF0B;AAAA;;AAAA;AAE1B,wDAAgC;AAAA;AAAA,UAArB,GAAqB;AAAA,UAAhC,KAAgC;;AAC9BwC,iBAD8B,KAC9BA;AAHwB;AAAA;AAAA;AAAA;AAAA;AAAA;;AAK1B,SAL0B,GAK1B;AA9lBF;;AAkmBA,0BAA0B;AACxB,MAAM2W,UAAU,eADQ,CACR,CAAhB;AACAA,eAFwB,CAExBA;AACA,MAAMC,SAAS,gBAAgBD,QAAhB,WAHS,CAGT,CAAf;AACA,SAAOC,cAJiB,CAIxB;AAtmBF;;AAwmBA,IAAMC,uBAAuB;AAC3B,cAAY;AACV,WAAOC,sBAAsBC,cADnB,EACHD,CAAP;AAFyB;;AAAA,CAA7B;;;AAOA,2BAA2B;AACzB,MAAI;AACF,iBADE,EACF;AACA,WAFE,IAEF;AAFF,IAGE,UAAU;AACV,WADU,KACV;AALuB;AA/mB3B;;AAunBA,IAAME,wBAAwB;AAC5B,cAAY;AACV,WAAOF,sBAAsBG,eADnB,EACHH,CAAP;AAF0B;;AAAA,CAA9B;;;AAMA,IAAMI,aAAa,mBAAIC,WAAJ,IAAIA,EAAJ,MAA2BC;AAAAA,SAC5CA,2BA9nBF,GA8nBEA,CAD4CA;AAAAA,CAA3B,CAAnB;;IAIA,I;;;;;;;WACE,+BAA6B;AAC3B,wBAAWF,WAAJ,CAAIA,CAAX,SAA2BA,WAApB,CAAoBA,CAA3B,SAA2CA,WADhB,CACgBA,CAA3C;AAFO;;;WAMT,2BAAyB;AACvB,aAAO,CACLG,QAAQC,GAARD,CAAQC,CAARD,GAAgBA,QAAQC,GADnB,CACmBA,CADnB,EAELD,QAAQC,GAARD,CAAQC,CAARD,GAAgBA,QAAQC,GAFnB,CAEmBA,CAFnB,EAGLD,QAAQC,GAARD,CAAQC,CAARD,GAAgBA,QAAQC,GAHnB,CAGmBA,CAHnB,EAILD,QAAQC,GAARD,CAAQC,CAARD,GAAgBA,QAAQC,GAJnB,CAImBA,CAJnB,EAKLD,QAAQC,GAARD,CAAQC,CAARD,GAAgBA,QAAQC,GAAxBD,CAAwBC,CAAxBD,GAAgCA,GAL3B,CAK2BA,CAL3B,EAMLA,QAAQC,GAARD,CAAQC,CAARD,GAAgBA,QAAQC,GAAxBD,CAAwBC,CAAxBD,GAAgCA,GAN3B,CAM2BA,CAN3B,CAAP;AAPO;;;WAkBT,8BAA4B;AAC1B,UAAME,KAAKC,OAAOC,EAAPD,CAAOC,CAAPD,GAAcA,OAAOC,EAArBD,CAAqBC,CAArBD,GAA4BC,EADb,CACaA,CAAvC;AACA,UAAMC,KAAKF,OAAOC,EAAPD,CAAOC,CAAPD,GAAcA,OAAOC,EAArBD,CAAqBC,CAArBD,GAA4BC,EAFb,CAEaA,CAAvC;AACA,aAAO,QAAP;AArBO;;;WAwBT,qCAAmC;AACjC,UAAME,IAAIF,OAAOA,EAAPA,CAAOA,CAAPA,GAAcA,OAAOA,EADE,CACFA,CAA/B;AACA,UAAMF,KAAM,QAAOE,EAAP,CAAOA,CAAP,GAAcD,OAAOC,EAArB,CAAqBA,CAArB,GAA4BA,OAAOA,EAAnC,CAAmCA,CAAnC,GAA0CA,OAAOA,EAAlD,CAAkDA,CAAjD,IAFqB,CAEjC;AACA,UAAMC,KAAM,EAACF,EAAD,CAACA,CAAD,GAAQC,EAAR,CAAQA,CAAR,GAAeD,OAAOC,EAAtB,CAAsBA,CAAtB,GAA6BA,OAAOA,EAApC,CAAoCA,CAApC,GAA2CA,OAAOA,EAAnD,CAAmDA,CAAlD,IAHqB,CAGjC;AACA,aAAO,QAAP;AA5BO;;;WAiCT,0CAAwC;AACtC,UAAMG,KAAKC,uBAD2B,CAC3BA,CAAX;AACA,UAAMC,KAAKD,oBAAoBE,WAApBF,CAAoBE,CAApBF,EAF2B,CAE3BA,CAAX;AACA,UAAMG,KAAK,oBAAoB,CAACD,EAAD,CAACA,CAAD,EAAOA,EAAP,CAAOA,CAAP,CAApB,EAH2B,CAG3B,CAAX;AACA,UAAME,KAAK,oBAAoB,CAACF,EAAD,CAACA,CAAD,EAAOA,EAAP,CAAOA,CAAP,CAApB,EAJ2B,CAI3B,CAAX;AACA,aAAO,CACLzc,SAASsc,GAATtc,CAASsc,CAATtc,EAAgBwc,GAAhBxc,CAAgBwc,CAAhBxc,EAAuB0c,GAAvB1c,CAAuB0c,CAAvB1c,EAA8B2c,GADzB,CACyBA,CAA9B3c,CADK,EAELA,SAASsc,GAATtc,CAASsc,CAATtc,EAAgBwc,GAAhBxc,CAAgBwc,CAAhBxc,EAAuB0c,GAAvB1c,CAAuB0c,CAAvB1c,EAA8B2c,GAFzB,CAEyBA,CAA9B3c,CAFK,EAGLA,SAASsc,GAATtc,CAASsc,CAATtc,EAAgBwc,GAAhBxc,CAAgBwc,CAAhBxc,EAAuB0c,GAAvB1c,CAAuB0c,CAAvB1c,EAA8B2c,GAHzB,CAGyBA,CAA9B3c,CAHK,EAILA,SAASsc,GAATtc,CAASsc,CAATtc,EAAgBwc,GAAhBxc,CAAgBwc,CAAhBxc,EAAuB0c,GAAvB1c,CAAuB0c,CAAvB1c,EAA8B2c,GAJzB,CAIyBA,CAA9B3c,CAJK,CAAP;AAtCO;;;WA8CT,6BAA2B;AACzB,UAAMqc,IAAIF,OAAOA,EAAPA,CAAOA,CAAPA,GAAcA,OAAOA,EADN,CACMA,CAA/B;AACA,aAAO,CACLA,OADK,GAEL,CAACA,EAAD,CAACA,CAAD,GAFK,GAGL,CAACA,EAAD,CAACA,CAAD,GAHK,GAILA,OAJK,GAKJ,QAAOA,EAAP,CAAOA,CAAP,GAAcA,OAAOA,EAAtB,CAAsBA,CAArB,IALI,GAMJ,QAAOA,EAAP,CAAOA,CAAP,GAAcA,OAAOA,EAAtB,CAAsBA,CAArB,IANI,EAAP;AAhDO;;;WAgET,gCAA8B;AAC5B,aAAO,CACLA,OAAOS,EAAPT,CAAOS,CAAPT,GAAcA,OAAOS,EAArBT,CAAqBS,CAArBT,GAA4BA,OAAOS,EAD9B,CAC8BA,CAD9B,EAELT,OAAOS,EAAPT,CAAOS,CAAPT,GAAcA,OAAOS,EAArBT,CAAqBS,CAArBT,GAA4BA,OAAOS,EAF9B,CAE8BA,CAF9B,EAGLT,OAAOS,EAAPT,CAAOS,CAAPT,GAAcA,OAAOS,EAArBT,CAAqBS,CAArBT,GAA4BA,OAAOS,EAH9B,CAG8BA,CAH9B,CAAP;AAjEO;;;WA2ET,0CAAwC;AACtC,UAAMC,YAAY,CAACV,EAAD,CAACA,CAAD,EAAOA,EAAP,CAAOA,CAAP,EAAaA,EAAb,CAAaA,CAAb,EAAmBA,EAAnB,CAAmBA,CAAnB,CAAlB;AAGA,UAAMW,IAAIX,OAAOU,UAAPV,CAAOU,CAAPV,GAAsBA,OAAOU,UAJD,CAICA,CAAvC;AACA,UAAME,IAAIZ,OAAOU,UAAPV,CAAOU,CAAPV,GAAsBA,OAAOU,UALD,CAKCA,CAAvC;AACA,UAAMG,IAAIb,OAAOU,UAAPV,CAAOU,CAAPV,GAAsBA,OAAOU,UAND,CAMCA,CAAvC;AACA,UAAMR,IAAIF,OAAOU,UAAPV,CAAOU,CAAPV,GAAsBA,OAAOU,UAPD,CAOCA,CAAvC;AAGA,UAAMI,QAAS,KAAD,CAAC,IAVuB,CAUtC;AACA,UAAMvZ,SAAS1D,UAAW,aAAD,CAAC,EAAD,CAAC,IAAc,KAAK,QAAQgd,IAAtChd,CAAyB,CAAzBA,IAXuB,CAWtC;AACA,UAAMkd,KAAKD,kBAZ2B,CAYtC;AACA,UAAME,KAAKF,kBAb2B,CAatC;AAGA,aAAO,CAACjd,UAAD,EAACA,CAAD,EAAgBA,UAAhB,EAAgBA,CAAhB,CAAP;AA3FO;;;WAkGT,6BAA2B;AACzB,UAAMyc,IAAIlc,WADe,CACfA,CAAV;;AACA,UAAIA,UAAUA,KAAd,CAAcA,CAAd,EAAuB;AACrBkc,eAAOlc,KADc,CACdA,CAAPkc;AACAA,eAAOlc,KAFc,CAEdA,CAAPkc;AAJuB;;AAMzB,UAAIlc,UAAUA,KAAd,CAAcA,CAAd,EAAuB;AACrBkc,eAAOlc,KADc,CACdA,CAAPkc;AACAA,eAAOlc,KAFc,CAEdA,CAAPkc;AARuB;;AAUzB,aAVyB,CAUzB;AA5GO;;;WAkHT,iCAA+B;AAC7B,6BAAuB;AACrB,eAAOK,IADc,CACrB;AAF2B;;AAM7B,UAAMM,WAAW,CAACC,MAAD,CAACA,CAAD,EAAWA,MAAX,CAAWA,CAAX,EAAqBC,MAArB,CAAqBA,CAArB,EAA+BA,MAA/B,CAA+BA,CAA/B,OANY,OAMZ,CAAjB;AACA,UAAMC,WAAW,CAACF,MAAD,CAACA,CAAD,EAAWA,MAAX,CAAWA,CAAX,EAAqBC,MAArB,CAAqBA,CAArB,EAA+BA,MAA/B,CAA+BA,CAA/B,OAPY,OAOZ,CAAjB;AACA,UAAM/W,SARuB,EAQ7B;AAEA8W,cAAQd,mBAVqB,KAUrBA,CAARc;AACAC,cAAQf,mBAXqB,KAWrBA,CAARe;;AAGA,UACGF,gBAAgBC,MAAhBD,CAAgBC,CAAhBD,IAA4BA,gBAAgBE,MAA7C,CAA6CA,CAA5CF,IACAA,gBAAgBE,MAAhBF,CAAgBE,CAAhBF,IAA4BA,gBAAgBC,MAF/C,CAE+CA,CAF/C,EAGE;AAEA9W,oBAAY6W,SAFZ,CAEYA,CAAZ7W;AACAA,oBAAY6W,SAHZ,CAGYA,CAAZ7W;AANF,aAOO;AACL,eADK,IACL;AAtB2B;;AA0B7B,UACGgX,gBAAgBF,MAAhBE,CAAgBF,CAAhBE,IAA4BA,gBAAgBD,MAA7C,CAA6CA,CAA5CC,IACAA,gBAAgBD,MAAhBC,CAAgBD,CAAhBC,IAA4BA,gBAAgBF,MAF/C,CAE+CA,CAF/C,EAGE;AAEA9W,oBAAYgX,SAFZ,CAEYA,CAAZhX;AACAA,oBAAYgX,SAHZ,CAGYA,CAAZhX;AANF,aAOO;AACL,eADK,IACL;AAlC2B;;AAqC7B,aArC6B,MAqC7B;AAvJO;;;;;;;AA4JX,IAAMiX,0BAA0B,wpBAAhC;;AAYA,gCAAgC;AAC9B,MAAMhD,SAASF,IAAf;AAAA,MACEK,SAF4B,EAC9B;;AAEA,MAAIL,qBAAqBA,WAAzB,QAA4C;AAE1C,SAAK,IAAIhZ,IAAT,GAAgBA,IAAhB,QAA4BA,KAA5B,GAAoC;AAClCqZ,kBACED,oBAAqBJ,qBAAD,CAACA,GAA0BA,eAAehZ,IAF9B,CAEegZ,CAA/CI,CADFC;AAHwC;AAA5C,SAOO,IAAIL,qBAAqBA,WAAzB,QAA4C;AAEjD,SAAK,IAAIhZ,MAAT,GAAgBA,MAAhB,QAA4BA,OAA5B,GAAoC;AAClCqZ,kBACED,oBAAqBJ,eAAehZ,MAAfgZ,MAAD,CAACA,GAA8BA,eAFnB,GAEmBA,CAAnDI,CADFC;AAH+C;AAA5C,SAOA;AACL,SAAK,IAAIrZ,MAAT,GAAgBA,MAAhB,QAA4B,EAA5B,KAAiC;AAC/B,UAAMmc,OAAOD,wBAAwBlD,eADN,GACMA,CAAxBkD,CAAb;AACA7C,kBAAY8C,OAAO/C,oBAAP+C,IAAO/C,CAAP+C,GAAmCnD,WAFhB,GAEgBA,CAA/CK;AAHG;AAjBuB;;AAuB9B,SAAOA,YAvBuB,EAuBvBA,CAAP;AAh0BF;;AAm0BA,2BAA2B;AAIzB,SAAO,6BAA6B+C,iBAAS;AAC3C,QAAIA,UAAJ,MAAoB;AAClB,aADkB,KAClB;AADF,WAEO,IAAIA,UAAJ,MAAoB;AACzB,aADyB,KACzB;AAJyC;;AAM3C,uBAN2C,KAM3C;AAVuB,GAIlB,CAAP;AAv0BF;;AAi1BA,sBAAsB;AACpB,SAAO,sBADa,GACb,CAAP;AAl1BF;;AAq1BA,oCAAoC;AAClC,MAAMC,MAAM,CADsB,UACtB,CAAZ;;AACA,OAAK,IAAIrc,IAAJ,GAAWD,KAAKiZ,IAArB,QAAiChZ,IAAjC,IAAyCA,CAAzC,IAA8C;AAC5C,QAAMsc,QAAOtD,eAD+B,CAC/BA,CAAb;;AACAqD,aAASjD,oBAAqBkD,SAAD,CAACA,GAFc,IAEnClD,CAATiD;AACAA,aAASjD,oBAAoBkD,QAHe,IAGnClD,CAATiD;AALgC;;AAOlC,SAAOA,SAP2B,EAO3BA,CAAP;AA51BF;;AA+1BA,iCAAiC;AAC/B,SAAO1b,mBAAmB4b,OADK,GACLA,CAAnB5b,CAAP;AAh2BF;;AAm2BA,iCAAiC;AAC/B,SAAO6b,SAASC,mBADe,GACfA,CAATD,CAAP;AAp2BF;;AAu2BA,mBAAmB;AACjB,SAAO,aADU,SACjB;AAx2BF;;AA22BA,kBAAkB;AAChB,SAAO,aADS,QAChB;AA52BF;;AA+2BA,qBAAqB;AACnB,SAAO,aADY,QACnB;AAh3BF;;AAm3BA,0BAA0B;AACxB,SAAO,2BAAyBlB,MAAzB,QAAuCA,iBADtB,SACxB;AAp3BF;;AAu3BA,kCAAkC;AAChC,MAAIoB,gBAAgBC,KAApB,QAAiC;AAC/B,WAD+B,KAC/B;AAF8B;;AAIhC,OAAK,IAAI3c,IAAJ,GAAWD,KAAK2c,KAArB,QAAkC1c,IAAlC,IAA0CA,CAA1C,IAA+C;AAC7C,QAAI0c,YAAYC,KAAhB,CAAgBA,CAAhB,EAAyB;AACvB,aADuB,KACvB;AAF2C;AAJf;;AAShC,SATgC,IAShC;AAh4BF;;AAm4BA,+BAAgD;AAAA,MAAnBC,IAAmB,uEAAZ,IAApC,IAAoC,EAAY;AAC9C,MAAMC,SAAS,CACbD,sBADa,QACbA,EADa,EAEZ,sBAAD,CAAC,EAAD,QAAC,GAAD,QAAC,CAAD,CAAC,EAFY,GAEZ,CAFY,EAGbA,yCAHa,GAGbA,CAHa,EAIbA,0CAJa,GAIbA,CAJa,EAKbA,4CALa,GAKbA,CALa,EAMbA,4CANa,GAMbA,CANa,CAAf;AASA,SAAOC,YAVuC,EAUvCA,CAAP;AA74BF;;AAg6BA,mCAAmC;AACjC,MAAMC,aAAalc,cADc,IACdA,CAAnB;AACA,MAAImc,YAF6B,KAEjC;AAEAnc,+CAA6C;AAC3Coc,OAD2C,iBACrC;AACJ,aADI,SACJ;AAFyC;AAAA,GAA7Cpc;AAKAkc,uBAAqB,YAAY,2BAA2B;AAC1DA,yBAAqB,gBAAgB;AACnCC,kBADmC,IACnCA;AACAtf,cAFmC,IAEnCA;AAHwD,KAC1Dqf;;AAIAA,wBAAoB,kBAAkB;AACpCC,kBADoC,IACpCA;AACArf,aAFoC,MAEpCA;AAPwD,KAK1Dof;AAd+B,GASZ,CAArBA;AAUA,SAnBiC,UAmBjC;AAn7BF;;AAs7BA,+BAA0E;AAAA,MAA3CG,WAA2C,uEAA1E,EAA0E;AAAA,MAAzBC,eAAyB,uEAA1E,KAA0E;;AACxE,MAAIC,uBAAuB,CAA3B,iBAA6C;AAC3C,WAAOA,oBAAoB,SAAS,CAAT,IAAS,CAAT,EAAiB;AAAEvZ,YADH;AACC,KAAjB,CAApBuZ,CAAP;AAFsE;;AAKxE,MAAMC,SALkE,mEAKxE;AAGA,MAAIP,wBARoE,WAQpEA,aAAJ;;AACA,OAAK,IAAI7c,IAAJ,GAAWD,KAAK6Z,KAArB,QAAkC5Z,IAAlC,IAA0CA,KAA1C,GAAkD;AAChD,QAAMqd,KAAKzD,UADqC,IAChD;AACA,QAAM0D,KAAK1D,KAAK5Z,IAAL4Z,KAFqC,IAEhD;AACA,QAAM2D,KAAK3D,KAAK5Z,IAAL4Z,KAHqC,IAGhD;AACA,QAAM4D,KAAKH,MAAX;AAAA,QACEI,KAAO,MAAD,CAAC,KAAF,CAAE,GAAiBH,MALsB,CAIhD;AAEA,QAAMI,KAAK1d,aAAe,MAAD,GAAC,KAAF,CAAE,GAAmBud,MAAlCvd,IANqC,EAMhD;AACA,QAAM2d,KAAK3d,aAAaud,KAAbvd,OAPqC,EAOhD;AACA6c,cAAUO,aAAaA,OAAbA,EAAaA,CAAbA,GAA0BA,OAA1BA,EAA0BA,CAA1BA,GAAuCA,OARD,EAQCA,CAAjDP;AAjBsE;;AAmBxE,SAnBwE,MAmBxE;AAz8BF,C;;;;;;;;;ACAA;;AAkBA,IAEG,qCAAqC,CAACtgB,WAFzC,4BAGE;AAGA,MAAI,qCAAqCA,oBAAzC,MAAmE;AAEjEA,iBAAaqhB,oBAFoD,CAEpDA,CAAbrhB;AALF;;AAOAA,0CAPA,IAOAA;;AAGC,4BAAyB;AACxB,QAAIA,mBAAmB,CAAvB,mBAAkC;AAAA;AADV;;AAIxBA,sBAAkB,iBAAiB;AAEjC,aAAOshB,sCAF0B,QAE1BA,CAAP;AANsB,KAIxBthB;AAdF,GAUC,GAAD;;AAWC,4BAAyB;AACxB,QAAIA,mBAAmB,CAAvB,mBAAkC;AAAA;AADV;;AAIxBA,sBAAkB,iBAAiB;AAEjC,aAAOshB,sCAF0B,QAE1BA,CAAP;AANsB,KAIxBthB;AAzBF,GAqBC,GAAD;;AAYC,qCAAkC;AACjC,QAAIqE,OAAJ,aAAwB;AAAA;AADS;;AAIjCgd,wBAJiC,EAIjCA;AArCF,GAiCC,GAAD;;AAUC,2BAAwB;AAMvB,QAAIrhB,mBAAJ,YAAmC;AAAA;AANZ;;AASvBA,yBAAqBqhB,oBATE,EASFA,CAArBrhB;AApDF,GA2CC,GAAD;;AAaC,kCAA+B;AAM9B,QAAIuhB,4BAN0B,KAM9B;;AAEA,QAAI,0BAAJ,aAA2C;AAEzC,UAAI;AAEF,2BAAmB;AACjB7c,eADiB,iBACjBA,UADiB,EACC;AAChB8c,uBADgB,KAChBA;AAFe;AAAA,SAAnB;AAKAD,oCAPE,IAOFA;AAPF,QAQE,UAAU,CAV6B;AARb;;AAsB9B,mCAA+B;AAAA;AAtBD;;AAyB9BvhB,gCAA4BqhB,uCAA5BrhB;AAjFF,GAwDC,GAAD;;AA8BC,kCAA+B;AAC9B,QAAI6c,iBAAJ,UAA+B;AAAA;AADD;;AAI9BwE,wBAJ8B,GAI9BA;AA1FF,GAsFC,GAAD;;AASC,gCAA6B;AAC5B,QAAIxE,iBAAJ,QAA6B;AAAA;AADD;;AAI5BwE,wBAJ4B,GAI5BA;AAnGF,GA+FC,GAAD;;AASC,gCAA6B;AAC5B,QAAIhd,OAAJ,QAAmB;AAAA;AADS;;AAI5BA,oBAAgBgd,oBAJY,GAIZA,CAAhBhd;AA5GF,GAwGC,GAAD;;AASC,iCAA8B;AAC7B,QAAIA,OAAJ,SAAoB;AAAA;AADS;;AAI7BA,qBAAiBgd,oBAJY,GAIZA,CAAjBhd;AArHF,GAiHC,GAAD;AAjHA,C;;;;;;;;;;;;;;;;ACDF,IAAMod,WACJ,kFACAC,iBADA,sBAEA,CAACA,iBAFD,MAGA,EAAE,6BAA6BA,QAA7B,QAA6CA,iBAxBjD,SAwBE,CAJF;;;;;;;ACpBAL,mBAAA,CAAQ,CAAR;AAEApb,wCAAA,C;;;;;;ACFA,IAAI0b,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR;AACA,IAAIO,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb,CADA;AAKAM,CAAA,CAAE,EAAEC,MAAA,EAAQ,IAAV,EAAF,EAAoB,EAClB5hB,UAAA,EAAY4hB,MADM,EAApB,E;;;;;;ACLA,IAAIA,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAIQ,wBAAA,GAA2BR,yBAA/B,CADA;AAEA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CAFA;AAGA,IAAIU,QAAA,GAAWV,mBAAA,CAAQ,EAAR,CAAf,CAHA;AAIA,IAAIW,SAAA,GAAYX,mBAAA,CAAQ,EAAR,CAAhB,CAJA;AAKA,IAAIY,yBAAA,GAA4BZ,mBAAA,CAAQ,EAAR,CAAhC,CALA;AAMA,IAAIa,QAAA,GAAWb,mBAAA,CAAQ,EAAR,CAAf,CANA;AAsBApb,MAAA,CAAOmB,OAAP,GAAiB,UAAU+a,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,CAC1C,IAAIC,MAAA,GAASF,OAAA,CAAQG,MAArB,CAD0C;AAAA,CAE1C,IAAIC,MAAA,GAASJ,OAAA,CAAQP,MAArB,CAF0C;AAAA,CAG1C,IAAIY,MAAA,GAASL,OAAA,CAAQM,IAArB,CAH0C;AAAA,CAI1C,IAAIC,MAAJ,EAAYJ,MAAZ,EAAoBvY,GAApB,EAAyB4Y,cAAzB,EAAyCC,cAAzC,EAAyDC,UAAzD,CAJ0C;AAAA,CAK1C,IAAIN,MAAJ,EAAY;AAAA,EACVD,MAAA,GAASV,MAAT,CADU;AAAA,EAAZ,MAEO,IAAIY,MAAJ,EAAY;AAAA,EACjBF,MAAA,GAASV,MAAA,CAAOS,MAAP,KAAkBL,SAAA,CAAUK,MAAV,EAAkB,EAAlB,CAA3B,CADiB;AAAA,EAAZ,MAEA;AAAA,EACLC,MAAA,GAAU,CAAAV,MAAA,CAAOS,MAAP,KAAkB,EAAlB,CAAD,CAAuBS,SAAhC,CADK;AAAA,EATmC;AAAA,CAY1C,IAAIR,MAAJ;AAAA,EAAY,KAAKvY,GAAL,IAAYqY,MAAZ,EAAoB;AAAA,GAC9BQ,cAAA,GAAiBR,MAAA,CAAOrY,GAAP,CAAjB,CAD8B;AAAA,GAE9B,IAAIoY,OAAA,CAAQY,WAAZ,EAAyB;AAAA,IACvBF,UAAA,GAAahB,wBAAA,CAAyBS,MAAzB,EAAiCvY,GAAjC,CAAb,CADuB;AAAA,IAEvB4Y,cAAA,GAAiBE,UAAA,IAAcA,UAAA,CAAWpc,KAA1C,CAFuB;AAAA,IAAzB;AAAA,IAGOkc,cAAA,GAAiBL,MAAA,CAAOvY,GAAP,CAAjB,CALuB;AAAA,GAM9B2Y,MAAA,GAASR,QAAA,CAASK,MAAA,GAASxY,GAAT,GAAesY,MAAA,GAAU,CAAAG,MAAA,GAAS,GAAT,GAAe,GAAf,CAAV,GAAgCzY,GAAxD,EAA6DoY,OAAA,CAAQa,MAArE,CAAT,CAN8B;AAAA,GAQ9B,IAAI,CAACN,MAAD,IAAWC,cAAA,KAAmBM,SAAlC,EAA6C;AAAA,IAC3C,IAAI,OAAOL,cAAP,KAA0B,OAAOD,cAArC;AAAA,KAAqD,SADV;AAAA,IAE3CV,yBAAA,CAA0BW,cAA1B,EAA0CD,cAA1C,EAF2C;AAAA,IARf;AAAA,GAa9B,IAAIR,OAAA,CAAQe,IAAR,IAAiBP,cAAA,IAAkBA,cAAA,CAAeO,IAAtD,EAA6D;AAAA,IAC3DpB,2BAAA,CAA4Bc,cAA5B,EAA4C,MAA5C,EAAoD,IAApD,EAD2D;AAAA,IAb/B;AAAA,GAiB9Bb,QAAA,CAASO,MAAT,EAAiBvY,GAAjB,EAAsB6Y,cAAtB,EAAsCT,OAAtC,EAjB8B;AAAA,GAZU;AAAA,CAA5C,C;;;;;;ACtBA,IAAIgB,KAAA,GAAQ,UAAUC,EAAV,EAAc;AAAA,CACxB,OAAOA,EAAA,IAAMA,EAAA,CAAGjhB,IAAH,IAAWA,IAAjB,IAAyBihB,EAAhC,CADwB;AAAA,CAA1B;AAKAnd,MAAA,CAAOmB,OAAP,GAEE+b,KAAA,CAAM,OAAOnjB,UAAP,IAAqB,QAArB,IAAiCA,UAAvC,KACAmjB,KAAA,CAAM,OAAOE,MAAP,IAAiB,QAAjB,IAA6BA,MAAnC,CADA,IAGAF,KAAA,CAAM,OAAOG,IAAP,IAAe,QAAf,IAA2BA,IAAjC,CAHA,IAIAH,KAAA,CAAM,OAAOvB,MAAP,IAAiB,QAAjB,IAA6BA,MAAnC,CAJA,IAMC,YAAY;AAAA,CAAE,OAAO,IAAP,CAAF;AAAA,CAAb,EANA,IAMoCrW,QAAA,CAAS,aAAT,GARtC,C;;;;;;ACLA,IAAIgY,WAAA,GAAclC,mBAAA,CAAQ,EAAR,CAAlB;AACA,IAAImC,0BAAA,GAA6BnC,mBAAA,CAAQ,EAAR,CAAjC,CADA;AAEA,IAAIoC,wBAAA,GAA2BpC,mBAAA,CAAQ,EAAR,CAA/B,CAFA;AAGA,IAAIqC,eAAA,GAAkBrC,mBAAA,CAAQ,EAAR,CAAtB,CAHA;AAIA,IAAIsC,WAAA,GAActC,mBAAA,CAAQ,EAAR,CAAlB,CAJA;AAKA,IAAIuC,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV,CALA;AAMA,IAAIwC,cAAA,GAAiBxC,mBAAA,CAAQ,EAAR,CAArB,CANA;AASA,IAAIyC,yBAAA,GAA4Bzf,MAAA,CAAOwd,wBAAvC,CATA;AAaAza,SAAA,GAAYmc,WAAA,GAAcO,yBAAd,GAA0C,SAASjC,wBAAT,CAAkC5O,CAAlC,EAAqC8Q,CAArC,EAAwC;AAAA,CAC5F9Q,CAAA,GAAIyQ,eAAA,CAAgBzQ,CAAhB,CAAJ,CAD4F;AAAA,CAE5F8Q,CAAA,GAAIJ,WAAA,CAAYI,CAAZ,EAAe,IAAf,CAAJ,CAF4F;AAAA,CAG5F,IAAIF,cAAJ;AAAA,EAAoB,IAAI;AAAA,GACtB,OAAOC,yBAAA,CAA0B7Q,CAA1B,EAA6B8Q,CAA7B,CAAP,CADsB;AAAA,GAAJ,CAElB,OAAOC,KAAP,EAAc;AAAA,GAL4E;AAAA,CAM5F,IAAIJ,GAAA,CAAI3Q,CAAJ,EAAO8Q,CAAP,CAAJ;AAAA,EAAe,OAAON,wBAAA,CAAyB,CAACD,0BAAA,CAA2BS,CAA3B,CAA6BC,IAA7B,CAAkCjR,CAAlC,EAAqC8Q,CAArC,CAA1B,EAAmE9Q,CAAA,CAAE8Q,CAAF,CAAnE,CAAP,CAN6E;AAAA,CAA9F,C;;;;;;ACbA,IAAII,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ;AAGApb,MAAA,CAAOmB,OAAP,GAAiB,CAAC+c,KAAA,CAAM,YAAY;AAAA,CAElC,OAAO9f,MAAA,CAAO+f,cAAP,CAAsB,EAAtB,EAA0B,CAA1B,EAA6B;AAAA,EAAE3D,GAAA,EAAK,YAAY;AAAA,GAAE,OAAO,CAAP,CAAF;AAAA,GAAnB;AAAA,EAA7B,EAAiE,CAAjE,KAAuE,CAA9E,CAFkC;AAAA,CAAlB,CAAlB,C;;;;;;ACHAxa,MAAA,CAAOmB,OAAP,GAAiB,UAAUid,IAAV,EAAgB;AAAA,CAC/B,IAAI;AAAA,EACF,OAAO,CAAC,CAACA,IAAA,EAAT,CADE;AAAA,EAAJ,CAEE,OAAOL,KAAP,EAAc;AAAA,EACd,OAAO,IAAP,CADc;AAAA,EAHe;AAAA,CAAjC,C;;;;;;;ACAa;AACb,IAAIM,qBAAA,GAAwB,GAAGC,oBAA/B,CADA;AAGA,IAAI1C,wBAAA,GAA2Bxd,MAAA,CAAOwd,wBAAtC,CAHA;AAMA,IAAI2C,WAAA,GAAc3C,wBAAA,IAA4B,CAACyC,qBAAA,CAAsBJ,IAAtB,CAA2B,EAAE,GAAG,CAAL,EAA3B,EAAqC,CAArC,CAA/C,CANA;AAUA9c,SAAA,GAAYod,WAAA,GAAc,SAASD,oBAAT,CAA8B/R,CAA9B,EAAiC;AAAA,CACzD,IAAIqQ,UAAA,GAAahB,wBAAA,CAAyB,IAAzB,EAA+BrP,CAA/B,CAAjB,CADyD;AAAA,CAEzD,OAAO,CAAC,CAACqQ,UAAF,IAAgBA,UAAA,CAAWnc,UAAlC,CAFyD;AAAA,CAA/C,GAGR4d,qBAHJ,C;;;;;;ACVAre,MAAA,CAAOmB,OAAP,GAAiB,UAAUqd,MAAV,EAAkBhe,KAAlB,EAAyB;AAAA,CACxC,OAAO;AAAA,EACLC,UAAA,EAAY,CAAE,CAAA+d,MAAA,GAAS,CAAT,CADT;AAAA,EAEL9d,YAAA,EAAc,CAAE,CAAA8d,MAAA,GAAS,CAAT,CAFX;AAAA,EAGL7d,QAAA,EAAU,CAAE,CAAA6d,MAAA,GAAS,CAAT,CAHP;AAAA,EAILhe,KAAA,EAAOA,KAJF;AAAA,EAAP,CADwC;AAAA,CAA1C,C;;;;;;ACCA,IAAIie,aAAA,GAAgBrD,mBAAA,CAAQ,EAAR,CAApB,CADA;AAEA,IAAIsD,sBAAA,GAAyBtD,mBAAA,CAAQ,EAAR,CAA7B,CAFA;AAIApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,OAAOsB,aAAA,CAAcC,sBAAA,CAAuBvB,EAAvB,CAAd,CAAP,CAD6B;AAAA,CAA/B,C;;;;;;ACJA,IAAIe,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ;AACA,IAAIuD,OAAA,GAAUvD,mBAAA,CAAQ,EAAR,CAAd,CADA;AAGA,IAAIwD,KAAA,GAAQ,GAAGA,KAAf,CAHA;AAMA5e,MAAA,CAAOmB,OAAP,GAAiB+c,KAAA,CAAM,YAAY;AAAA,CAGjC,OAAO,CAAC9f,MAAA,CAAO,GAAP,EAAYkgB,oBAAZ,CAAiC,CAAjC,CAAR,CAHiC;AAAA,CAAlB,IAIZ,UAAUnB,EAAV,EAAc;AAAA,CACjB,OAAOwB,OAAA,CAAQxB,EAAR,KAAe,QAAf,GAA0ByB,KAAA,CAAMX,IAAN,CAAWd,EAAX,EAAe,EAAf,CAA1B,GAA+C/e,MAAA,CAAO+e,EAAP,CAAtD,CADiB;AAAA,CAJF,GAMb/e,MANJ,C;;;;;;ACNA,IAAIM,QAAA,GAAW,GAAGA,QAAlB;AAEAsB,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,OAAOze,QAAA,CAASuf,IAAT,CAAcd,EAAd,EAAkB0B,KAAlB,CAAwB,CAAxB,EAA2B,CAAC,CAA5B,CAAP,CAD6B;AAAA,CAA/B,C;;;;;;ACAA7e,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,IAAIA,EAAA,IAAMH,SAAV;AAAA,EAAqB,MAAM8B,SAAA,CAAU,0BAA0B3B,EAApC,CAAN,CADQ;AAAA,CAE7B,OAAOA,EAAP,CAF6B;AAAA,CAA/B,C;;;;;;ACFA,IAAI4B,QAAA,GAAW3D,mBAAA,CAAQ,EAAR,CAAf;AAMApb,MAAA,CAAOmB,OAAP,GAAiB,UAAU6d,KAAV,EAAiBC,gBAAjB,EAAmC;AAAA,CAClD,IAAI,CAACF,QAAA,CAASC,KAAT,CAAL;AAAA,EAAsB,OAAOA,KAAP,CAD4B;AAAA,CAElD,IAAI1d,EAAJ,EAAQ4d,GAAR,CAFkD;AAAA,CAGlD,IAAID,gBAAA,IAAoB,OAAQ,CAAA3d,EAAA,GAAK0d,KAAA,CAAMtgB,QAAX,CAAR,IAAgC,UAApD,IAAkE,CAACqgB,QAAA,CAASG,GAAA,GAAM5d,EAAA,CAAG2c,IAAH,CAAQe,KAAR,CAAf,CAAvE;AAAA,EAAuG,OAAOE,GAAP,CAHrD;AAAA,CAIlD,IAAI,OAAQ,CAAA5d,EAAA,GAAK0d,KAAA,CAAMG,OAAX,CAAR,IAA+B,UAA/B,IAA6C,CAACJ,QAAA,CAASG,GAAA,GAAM5d,EAAA,CAAG2c,IAAH,CAAQe,KAAR,CAAf,CAAlD;AAAA,EAAkF,OAAOE,GAAP,CAJhC;AAAA,CAKlD,IAAI,CAACD,gBAAD,IAAqB,OAAQ,CAAA3d,EAAA,GAAK0d,KAAA,CAAMtgB,QAAX,CAAR,IAAgC,UAArD,IAAmE,CAACqgB,QAAA,CAASG,GAAA,GAAM5d,EAAA,CAAG2c,IAAH,CAAQe,KAAR,CAAf,CAAxE;AAAA,EAAwG,OAAOE,GAAP,CALtD;AAAA,CAMlD,MAAMJ,SAAA,CAAU,yCAAV,CAAN,CANkD;AAAA,CAApD,C;;;;;;ACNA9e,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,OAAO,OAAOA,EAAP,KAAc,QAAd,GAAyBA,EAAA,KAAO,IAAhC,GAAuC,OAAOA,EAAP,KAAc,UAA5D,CAD6B;AAAA,CAA/B,C;;;;;;ACAA,IAAIiC,cAAA,GAAiB,GAAGA,cAAxB;AAEApf,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAcrZ,GAAd,EAAmB;AAAA,CAClC,OAAOsb,cAAA,CAAenB,IAAf,CAAoBd,EAApB,EAAwBrZ,GAAxB,CAAP,CADkC;AAAA,CAApC,C;;;;;;ACFA,IAAIwZ,WAAA,GAAclC,mBAAA,CAAQ,EAAR,CAAlB;AACA,IAAI8C,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ,CADA;AAEA,IAAI/f,aAAA,GAAgB+f,mBAAA,CAAQ,EAAR,CAApB,CAFA;AAKApb,MAAA,CAAOmB,OAAP,GAAiB,CAACmc,WAAD,IAAgB,CAACY,KAAA,CAAM,YAAY;AAAA,CAElD,OAAO9f,MAAA,CAAO+f,cAAP,CAAsB9iB,aAAA,CAAc,KAAd,CAAtB,EAA4C,GAA5C,EAAiD;AAAA,EACtDmf,GAAA,EAAK,YAAY;AAAA,GAAE,OAAO,CAAP,CAAF;AAAA,GADqC;AAAA,EAAjD,EAEJxB,CAFI,IAEC,CAFR,CAFkD;AAAA,CAAlB,CAAlC,C;;;;;;ACLA,IAAI2C,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAI2D,QAAA,GAAW3D,mBAAA,CAAQ,EAAR,CAAf,CADA;AAGA,IAAIzgB,QAAA,GAAWghB,MAAA,CAAOhhB,QAAtB,CAHA;AAKA,IAAI0kB,MAAA,GAASN,QAAA,CAASpkB,QAAT,KAAsBokB,QAAA,CAASpkB,QAAA,CAASU,aAAlB,CAAnC,CALA;AAOA2E,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,OAAOkC,MAAA,GAAS1kB,QAAA,CAASU,aAAT,CAAuB8hB,EAAvB,CAAT,GAAsC,EAA7C,CAD6B;AAAA,CAA/B,C;;;;;;ACPA,IAAIG,WAAA,GAAclC,mBAAA,CAAQ,EAAR,CAAlB;AACA,IAAIkE,oBAAA,GAAuBlE,mBAAA,CAAQ,EAAR,CAA3B,CADA;AAEA,IAAIoC,wBAAA,GAA2BpC,mBAAA,CAAQ,EAAR,CAA/B,CAFA;AAIApb,MAAA,CAAOmB,OAAP,GAAiBmc,WAAA,GAAc,UAAUiC,MAAV,EAAkBzb,GAAlB,EAAuBtD,KAAvB,EAA8B;AAAA,CAC3D,OAAO8e,oBAAA,CAAqBtB,CAArB,CAAuBuB,MAAvB,EAA+Bzb,GAA/B,EAAoC0Z,wBAAA,CAAyB,CAAzB,EAA4Bhd,KAA5B,CAApC,CAAP,CAD2D;AAAA,CAA5C,GAEb,UAAU+e,MAAV,EAAkBzb,GAAlB,EAAuBtD,KAAvB,EAA8B;AAAA,CAChC+e,MAAA,CAAOzb,GAAP,IAActD,KAAd,CADgC;AAAA,CAEhC,OAAO+e,MAAP,CAFgC;AAAA,CAFlC,C;;;;;;ACJA,IAAIjC,WAAA,GAAclC,mBAAA,CAAQ,EAAR,CAAlB;AACA,IAAIwC,cAAA,GAAiBxC,mBAAA,CAAQ,EAAR,CAArB,CADA;AAEA,IAAIoE,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf,CAFA;AAGA,IAAIsC,WAAA,GAActC,mBAAA,CAAQ,EAAR,CAAlB,CAHA;AAMA,IAAIqE,eAAA,GAAkBrhB,MAAA,CAAO+f,cAA7B,CANA;AAUAhd,SAAA,GAAYmc,WAAA,GAAcmC,eAAd,GAAgC,SAAStB,cAAT,CAAwBnR,CAAxB,EAA2B8Q,CAA3B,EAA8B4B,UAA9B,EAA0C;AAAA,CACpFF,QAAA,CAASxS,CAAT,EADoF;AAAA,CAEpF8Q,CAAA,GAAIJ,WAAA,CAAYI,CAAZ,EAAe,IAAf,CAAJ,CAFoF;AAAA,CAGpF0B,QAAA,CAASE,UAAT,EAHoF;AAAA,CAIpF,IAAI9B,cAAJ;AAAA,EAAoB,IAAI;AAAA,GACtB,OAAO6B,eAAA,CAAgBzS,CAAhB,EAAmB8Q,CAAnB,EAAsB4B,UAAtB,CAAP,CADsB;AAAA,GAAJ,CAElB,OAAO3B,KAAP,EAAc;AAAA,GANoE;AAAA,CAOpF,IAAI,SAAS2B,UAAT,IAAuB,SAASA,UAApC;AAAA,EAAgD,MAAMZ,SAAA,CAAU,yBAAV,CAAN,CAPoC;AAAA,CAQpF,IAAI,WAAWY,UAAf;AAAA,EAA2B1S,CAAA,CAAE8Q,CAAF,IAAO4B,UAAA,CAAWlf,KAAlB,CARyD;AAAA,CASpF,OAAOwM,CAAP,CAToF;AAAA,CAAtF,C;;;;;;ACVA,IAAI+R,QAAA,GAAW3D,mBAAA,CAAQ,EAAR,CAAf;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,IAAI,CAAC4B,QAAA,CAAS5B,EAAT,CAAL,EAAmB;AAAA,EACjB,MAAM2B,SAAA,CAAUlI,MAAA,CAAOuG,EAAP,IAAa,mBAAvB,CAAN,CADiB;AAAA,EADU;AAAA,CAG3B,OAAOA,EAAP,CAH2B;AAAA,CAA/B,C;;;;;;ACFA,IAAIxB,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CADA;AAEA,IAAIuC,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV,CAFA;AAGA,IAAIW,SAAA,GAAYX,mBAAA,CAAQ,EAAR,CAAhB,CAHA;AAIA,IAAIuE,aAAA,GAAgBvE,mBAAA,CAAQ,EAAR,CAApB,CAJA;AAKA,IAAIwE,mBAAA,GAAsBxE,mBAAA,CAAQ,EAAR,CAA1B,CALA;AAOA,IAAIyE,gBAAA,GAAmBD,mBAAA,CAAoBpF,GAA3C,CAPA;AAQA,IAAIsF,oBAAA,GAAuBF,mBAAA,CAAoBG,OAA/C,CARA;AASA,IAAIC,QAAA,GAAWpJ,MAAA,CAAOA,MAAP,EAAegI,KAAf,CAAqB,QAArB,CAAf,CATA;AAWC,CAAA5e,MAAA,CAAOmB,OAAP,GAAiB,UAAU6L,CAAV,EAAalJ,GAAb,EAAkBtD,KAAlB,EAAyB0b,OAAzB,EAAkC;AAAA,CAClD,IAAI+D,MAAA,GAAS/D,OAAA,GAAU,CAAC,CAACA,OAAA,CAAQ+D,MAApB,GAA6B,KAA1C,CADkD;AAAA,CAElD,IAAIC,MAAA,GAAShE,OAAA,GAAU,CAAC,CAACA,OAAA,CAAQzb,UAApB,GAAiC,KAA9C,CAFkD;AAAA,CAGlD,IAAIqc,WAAA,GAAcZ,OAAA,GAAU,CAAC,CAACA,OAAA,CAAQY,WAApB,GAAkC,KAApD,CAHkD;AAAA,CAIlD,IAAI5Z,KAAJ,CAJkD;AAAA,CAKlD,IAAI,OAAO1C,KAAP,IAAgB,UAApB,EAAgC;AAAA,EAC9B,IAAI,OAAOsD,GAAP,IAAc,QAAd,IAA0B,CAAC6Z,GAAA,CAAInd,KAAJ,EAAW,MAAX,CAA/B,EAAmD;AAAA,GACjDqb,2BAAA,CAA4Brb,KAA5B,EAAmC,MAAnC,EAA2CsD,GAA3C,EADiD;AAAA,GADrB;AAAA,EAI9BZ,KAAA,GAAQ4c,oBAAA,CAAqBtf,KAArB,CAAR,CAJ8B;AAAA,EAK9B,IAAI,CAAC0C,KAAA,CAAMiZ,MAAX,EAAmB;AAAA,GACjBjZ,KAAA,CAAMiZ,MAAN,GAAe6D,QAAA,CAASG,IAAT,CAAc,OAAOrc,GAAP,IAAc,QAAd,GAAyBA,GAAzB,GAA+B,EAA7C,CAAf,CADiB;AAAA,GALW;AAAA,EALkB;AAAA,CAclD,IAAIkJ,CAAA,KAAM2O,MAAV,EAAkB;AAAA,EAChB,IAAIuE,MAAJ;AAAA,GAAYlT,CAAA,CAAElJ,GAAF,IAAStD,KAAT,CAAZ;AAAA;AAAA,GACKub,SAAA,CAAUjY,GAAV,EAAetD,KAAf,EAFW;AAAA,EAGhB,OAHgB;AAAA,EAAlB,MAIO,IAAI,CAACyf,MAAL,EAAa;AAAA,EAClB,OAAOjT,CAAA,CAAElJ,GAAF,CAAP,CADkB;AAAA,EAAb,MAEA,IAAI,CAACgZ,WAAD,IAAgB9P,CAAA,CAAElJ,GAAF,CAApB,EAA4B;AAAA,EACjCoc,MAAA,GAAS,IAAT,CADiC;AAAA,EApBe;AAAA,CAuBlD,IAAIA,MAAJ;AAAA,EAAYlT,CAAA,CAAElJ,GAAF,IAAStD,KAAT,CAAZ;AAAA;AAAA,EACKqb,2BAAA,CAA4B7O,CAA5B,EAA+BlJ,GAA/B,EAAoCtD,KAApC,EAxB6C;AAAA,CAAnD,CAAD,CA0BG8E,QAAA,CAASuX,SA1BZ,EA0BuB,UA1BvB,EA0BmC,SAASne,QAAT,GAAoB;AAAA,CACrD,OAAO,OAAO,IAAP,IAAe,UAAf,IAA6BmhB,gBAAA,CAAiB,IAAjB,EAAuB1D,MAApD,IAA8DwD,aAAA,CAAc,IAAd,CAArE,CADqD;AAAA,CA1BvD,E;;;;;;ACXA,IAAIhE,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CADA;AAGApb,MAAA,CAAOmB,OAAP,GAAiB,UAAU2C,GAAV,EAAetD,KAAf,EAAsB;AAAA,CACrC,IAAI;AAAA,EACFqb,2BAAA,CAA4BF,MAA5B,EAAoC7X,GAApC,EAAyCtD,KAAzC,EADE;AAAA,EAAJ,CAEE,OAAOud,KAAP,EAAc;AAAA,EACdpC,MAAA,CAAO7X,GAAP,IAActD,KAAd,CADc;AAAA,EAHqB;AAAA,CAKnC,OAAOA,KAAP,CALmC;AAAA,CAAvC,C;;;;;;ACHA,IAAI4f,KAAA,GAAQhF,mBAAA,CAAQ,EAAR,CAAZ;AAEA,IAAIiF,gBAAA,GAAmB/a,QAAA,CAAS5G,QAAhC,CAFA;AAKA,IAAI,OAAO0hB,KAAA,CAAMT,aAAb,IAA8B,UAAlC,EAA8C;AAAA,CAC5CS,KAAA,CAAMT,aAAN,GAAsB,UAAUxC,EAAV,EAAc;AAAA,EAClC,OAAOkD,gBAAA,CAAiBpC,IAAjB,CAAsBd,EAAtB,CAAP,CADkC;AAAA,EAApC,CAD4C;AAAA,CAL9C;AAWAnd,MAAA,CAAOmB,OAAP,GAAiBif,KAAA,CAAMT,aAAvB,C;;;;;;ACXA,IAAIhE,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAIW,SAAA,GAAYX,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAGA,IAAIkF,MAAA,GAAS,oBAAb,CAHA;AAIA,IAAIF,KAAA,GAAQzE,MAAA,CAAO2E,MAAP,KAAkBvE,SAAA,CAAUuE,MAAV,EAAkB,EAAlB,CAA9B,CAJA;AAMAtgB,MAAA,CAAOmB,OAAP,GAAiBif,KAAjB,C;;;;;;ACNA,IAAIG,eAAA,GAAkBnF,mBAAA,CAAQ,EAAR,CAAtB;AACA,IAAIO,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb,CADA;AAEA,IAAI2D,QAAA,GAAW3D,mBAAA,CAAQ,EAAR,CAAf,CAFA;AAGA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CAHA;AAIA,IAAIoF,SAAA,GAAYpF,mBAAA,CAAQ,EAAR,CAAhB,CAJA;AAKA,IAAIqF,MAAA,GAASrF,mBAAA,CAAQ,EAAR,CAAb,CALA;AAMA,IAAIsF,SAAA,GAAYtF,mBAAA,CAAQ,EAAR,CAAhB,CANA;AAOA,IAAIuF,UAAA,GAAavF,mBAAA,CAAQ,EAAR,CAAjB,CAPA;AASA,IAAIwF,OAAA,GAAUjF,MAAA,CAAOiF,OAArB,CATA;AAUA,IAAIC,GAAJ,EAASrG,GAAT,EAAcmD,GAAd,CAVA;AAYA,IAAIoC,OAAA,GAAU,UAAU5C,EAAV,EAAc;AAAA,CAC1B,OAAOQ,GAAA,CAAIR,EAAJ,IAAU3C,GAAA,CAAI2C,EAAJ,CAAV,GAAoB0D,GAAA,CAAI1D,EAAJ,EAAQ,EAAR,CAA3B,CAD0B;AAAA,CAA5B,CAZA;AAgBA,IAAI2D,SAAA,GAAY,UAAUC,IAAV,EAAgB;AAAA,CAC9B,OAAO,UAAU5D,EAAV,EAAc;AAAA,EACnB,IAAIja,KAAJ,CADmB;AAAA,EAEnB,IAAI,CAAC6b,QAAA,CAAS5B,EAAT,CAAD,IAAkB,CAAAja,KAAA,GAAQsX,GAAA,CAAI2C,EAAJ,CAAR,CAAD,CAAkB/b,IAAlB,KAA2B2f,IAAhD,EAAsD;AAAA,GACpD,MAAMjC,SAAA,CAAU,4BAA4BiC,IAA5B,GAAmC,WAA7C,CAAN,CADoD;AAAA,GAFnC;AAAA,EAIjB,OAAO7d,KAAP,CAJiB;AAAA,EAArB,CAD8B;AAAA,CAAhC,CAhBA;AAyBA,IAAIqd,eAAJ,EAAqB;AAAA,CACnB,IAAIH,KAAA,GAAQK,MAAA,CAAOvd,KAAP,IAAiB,CAAAud,MAAA,CAAOvd,KAAP,GAAe,IAAI0d,OAAJ,EAAf,CAA7B,CADmB;AAAA,CAEnB,IAAII,KAAA,GAAQZ,KAAA,CAAM5F,GAAlB,CAFmB;AAAA,CAGnB,IAAIyG,KAAA,GAAQb,KAAA,CAAMzC,GAAlB,CAHmB;AAAA,CAInB,IAAIuD,KAAA,GAAQd,KAAA,CAAMS,GAAlB,CAJmB;AAAA,CAKnBA,GAAA,GAAM,UAAU1D,EAAV,EAAcgE,QAAd,EAAwB;AAAA,EAC5BA,QAAA,CAASC,MAAT,GAAkBjE,EAAlB,CAD4B;AAAA,EAE5B+D,KAAA,CAAMjD,IAAN,CAAWmC,KAAX,EAAkBjD,EAAlB,EAAsBgE,QAAtB,EAF4B;AAAA,EAG5B,OAAOA,QAAP,CAH4B;AAAA,EAA9B,CALmB;AAAA,CAUnB3G,GAAA,GAAM,UAAU2C,EAAV,EAAc;AAAA,EAClB,OAAO6D,KAAA,CAAM/C,IAAN,CAAWmC,KAAX,EAAkBjD,EAAlB,KAAyB,EAAhC,CADkB;AAAA,EAApB,CAVmB;AAAA,CAanBQ,GAAA,GAAM,UAAUR,EAAV,EAAc;AAAA,EAClB,OAAO8D,KAAA,CAAMhD,IAAN,CAAWmC,KAAX,EAAkBjD,EAAlB,CAAP,CADkB;AAAA,EAApB,CAbmB;AAAA,CAArB,MAgBO;AAAA,CACL,IAAIkE,KAAA,GAAQX,SAAA,CAAU,OAAV,CAAZ,CADK;AAAA,CAELC,UAAA,CAAWU,KAAX,IAAoB,IAApB,CAFK;AAAA,CAGLR,GAAA,GAAM,UAAU1D,EAAV,EAAcgE,QAAd,EAAwB;AAAA,EAC5BA,QAAA,CAASC,MAAT,GAAkBjE,EAAlB,CAD4B;AAAA,EAE5BtB,2BAAA,CAA4BsB,EAA5B,EAAgCkE,KAAhC,EAAuCF,QAAvC,EAF4B;AAAA,EAG5B,OAAOA,QAAP,CAH4B;AAAA,EAA9B,CAHK;AAAA,CAQL3G,GAAA,GAAM,UAAU2C,EAAV,EAAc;AAAA,EAClB,OAAOqD,SAAA,CAAUrD,EAAV,EAAckE,KAAd,IAAuBlE,EAAA,CAAGkE,KAAH,CAAvB,GAAmC,EAA1C,CADkB;AAAA,EAApB,CARK;AAAA,CAWL1D,GAAA,GAAM,UAAUR,EAAV,EAAc;AAAA,EAClB,OAAOqD,SAAA,CAAUrD,EAAV,EAAckE,KAAd,CAAP,CADkB;AAAA,EAApB,CAXK;AAAA,CAzCP;AAyDArhB,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CACf0f,GAAA,EAAKA,GADU;AAAA,CAEfrG,GAAA,EAAKA,GAFU;AAAA,CAGfmD,GAAA,EAAKA,GAHU;AAAA,CAIfoC,OAAA,EAASA,OAJM;AAAA,CAKfe,SAAA,EAAWA,SALI;AAAA,CAAjB,C;;;;;;ACzDA,IAAInF,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAIuE,aAAA,GAAgBvE,mBAAA,CAAQ,EAAR,CAApB,CADA;AAGA,IAAIwF,OAAA,GAAUjF,MAAA,CAAOiF,OAArB,CAHA;AAKA5gB,MAAA,CAAOmB,OAAP,GAAiB,OAAOyf,OAAP,KAAmB,UAAnB,IAAiC,cAAcU,IAAd,CAAmB3B,aAAA,CAAciB,OAAd,CAAnB,CAAlD,C;;;;;;ACLA,IAAIH,MAAA,GAASrF,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAImG,GAAA,GAAMnG,mBAAA,CAAQ,EAAR,CAAV,CADA;AAGA,IAAIvX,IAAA,GAAO4c,MAAA,CAAO,MAAP,CAAX,CAHA;AAKAzgB,MAAA,CAAOmB,OAAP,GAAiB,UAAU2C,GAAV,EAAe;AAAA,CAC9B,OAAOD,IAAA,CAAKC,GAAL,KAAc,CAAAD,IAAA,CAAKC,GAAL,IAAYyd,GAAA,CAAIzd,GAAJ,CAAZ,CAArB,CAD8B;AAAA,CAAhC,C;;;;;;ACLA,IAAI0d,OAAA,GAAUpG,mBAAA,CAAQ,EAAR,CAAd;AACA,IAAIgF,KAAA,GAAQhF,mBAAA,CAAQ,EAAR,CAAZ,CADA;AAGC,CAAApb,MAAA,CAAOmB,OAAP,GAAiB,UAAU2C,GAAV,EAAetD,KAAf,EAAsB;AAAA,CACtC,OAAO4f,KAAA,CAAMtc,GAAN,KAAe,CAAAsc,KAAA,CAAMtc,GAAN,IAAatD,KAAA,KAAUwc,SAAV,GAAsBxc,KAAtB,GAA8B,EAA3C,CAAtB,CADsC;AAAA,CAAvC,CAAD,CAEG,UAFH,EAEe,EAFf,EAEmBihB,IAFnB,CAEwB;AAAA,CACtBC,OAAA,EAAS,QADa;AAAA,CAEtBC,IAAA,EAAMH,OAAA,GAAU,MAAV,GAAmB,QAFH;AAAA,CAGtBI,SAAA,EAAW,sCAHW;AAAA,CAFxB,E;;;;;;ACHA5hB,MAAA,CAAOmB,OAAP,GAAiB,KAAjB,C;;;;;;ACAA,IAAI0gB,EAAA,GAAK,CAAT;AACA,IAAIC,OAAA,GAAU5lB,IAAA,CAAK6lB,MAAL,EAAd,CADA;AAGA/hB,MAAA,CAAOmB,OAAP,GAAiB,UAAU2C,GAAV,EAAe;AAAA,CAC9B,OAAO,YAAY8S,MAAA,CAAO9S,GAAA,KAAQkZ,SAAR,GAAoB,EAApB,GAAyBlZ,GAAhC,CAAZ,GAAmD,IAAnD,GAA2D,GAAE+d,EAAF,GAAOC,OAAP,CAAD,CAAiBpjB,QAAjB,CAA0B,EAA1B,CAAjE,CAD8B;AAAA,CAAhC,C;;;;;;ACHAsB,MAAA,CAAOmB,OAAP,GAAiB,EAAjB,C;;;;;;ACAA,IAAIwc,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV;AACA,IAAI4G,OAAA,GAAU5G,mBAAA,CAAQ,EAAR,CAAd,CADA;AAEA,IAAI6G,8BAAA,GAAiC7G,mBAAA,CAAQ,EAAR,CAArC,CAFA;AAGA,IAAIkE,oBAAA,GAAuBlE,mBAAA,CAAQ,EAAR,CAA3B,CAHA;AAKApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUkb,MAAV,EAAkBF,MAAlB,EAA0B;AAAA,CACzC,IAAItY,IAAA,GAAOme,OAAA,CAAQ7F,MAAR,CAAX,CADyC;AAAA,CAEzC,IAAIgC,cAAA,GAAiBmB,oBAAA,CAAqBtB,CAA1C,CAFyC;AAAA,CAGzC,IAAIpC,wBAAA,GAA2BqG,8BAAA,CAA+BjE,CAA9D,CAHyC;AAAA,CAIzC,KAAK,IAAIxgB,CAAA,GAAI,CAAR,CAAL,CAAgBA,CAAA,GAAIqG,IAAA,CAAK6S,MAAzB,EAAiClZ,CAAA,EAAjC,EAAsC;AAAA,EACpC,IAAIsG,GAAA,GAAMD,IAAA,CAAKrG,CAAL,CAAV,CADoC;AAAA,EAEpC,IAAI,CAACmgB,GAAA,CAAItB,MAAJ,EAAYvY,GAAZ,CAAL;AAAA,GAAuBqa,cAAA,CAAe9B,MAAf,EAAuBvY,GAAvB,EAA4B8X,wBAAA,CAAyBO,MAAzB,EAAiCrY,GAAjC,CAA5B,EAFa;AAAA,EAJG;AAAA,CAA3C,C;;;;;;ACLA,IAAIoe,UAAA,GAAa9G,mBAAA,CAAQ,EAAR,CAAjB;AACA,IAAI+G,yBAAA,GAA4B/G,mBAAA,CAAQ,EAAR,CAAhC,CADA;AAEA,IAAIgH,2BAAA,GAA8BhH,mBAAA,CAAQ,EAAR,CAAlC,CAFA;AAGA,IAAIoE,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf,CAHA;AAMApb,MAAA,CAAOmB,OAAP,GAAiB+gB,UAAA,CAAW,SAAX,EAAsB,SAAtB,KAAoC,SAASF,OAAT,CAAiB7E,EAAjB,EAAqB;AAAA,CACxE,IAAItZ,IAAA,GAAOse,yBAAA,CAA0BnE,CAA1B,CAA4BwB,QAAA,CAASrC,EAAT,CAA5B,CAAX,CADwE;AAAA,CAExE,IAAIkF,qBAAA,GAAwBD,2BAAA,CAA4BpE,CAAxD,CAFwE;AAAA,CAGxE,OAAOqE,qBAAA,GAAwBxe,IAAA,CAAKye,MAAL,CAAYD,qBAAA,CAAsBlF,EAAtB,CAAZ,CAAxB,GAAiEtZ,IAAxE,CAHwE;AAAA,CAA1E,C;;;;;;ACNA,IAAI0e,IAAA,GAAOnH,mBAAA,CAAQ,EAAR,CAAX;AACA,IAAIO,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb,CADA;AAGA,IAAIoH,SAAA,GAAY,UAAUC,QAAV,EAAoB;AAAA,CAClC,OAAO,OAAOA,QAAP,IAAmB,UAAnB,GAAgCA,QAAhC,GAA2CzF,SAAlD,CADkC;AAAA,CAApC,CAHA;AAOAhd,MAAA,CAAOmB,OAAP,GAAiB,UAAUuhB,SAAV,EAAqBvf,MAArB,EAA6B;AAAA,CAC5C,OAAOwf,SAAA,CAAUjM,MAAV,GAAmB,CAAnB,GAAuB8L,SAAA,CAAUD,IAAA,CAAKG,SAAL,CAAV,KAA8BF,SAAA,CAAU7G,MAAA,CAAO+G,SAAP,CAAV,CAArD,GACHH,IAAA,CAAKG,SAAL,KAAmBH,IAAA,CAAKG,SAAL,EAAgBvf,MAAhB,CAAnB,IAA8CwY,MAAA,CAAO+G,SAAP,KAAqB/G,MAAA,CAAO+G,SAAP,EAAkBvf,MAAlB,CADvE,CAD4C;AAAA,CAA9C,C;;;;;;ACPA,IAAIwY,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AAEApb,MAAA,CAAOmB,OAAP,GAAiBwa,MAAjB,C;;;;;;ACFA,IAAIiH,kBAAA,GAAqBxH,mBAAA,CAAQ,EAAR,CAAzB;AACA,IAAIyH,WAAA,GAAczH,mBAAA,CAAQ,EAAR,CAAlB,CADA;AAGA,IAAIuF,UAAA,GAAakC,WAAA,CAAYP,MAAZ,CAAmB,QAAnB,EAA6B,WAA7B,CAAjB,CAHA;AAQAnhB,SAAA,GAAY/C,MAAA,CAAO0kB,mBAAP,IAA8B,SAASA,mBAAT,CAA6B9V,CAA7B,EAAgC;AAAA,CACxE,OAAO4V,kBAAA,CAAmB5V,CAAnB,EAAsB2T,UAAtB,CAAP,CADwE;AAAA,CAA1E,C;;;;;;ACRA,IAAIhD,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV;AACA,IAAIqC,eAAA,GAAkBrC,mBAAA,CAAQ,EAAR,CAAtB,CADA;AAEA,IAAI2H,OAAA,GAAU3H,+BAAd,CAFA;AAGA,IAAIuF,UAAA,GAAavF,mBAAA,CAAQ,EAAR,CAAjB,CAHA;AAKApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUoe,MAAV,EAAkByD,KAAlB,EAAyB;AAAA,CACxC,IAAIhW,CAAA,GAAIyQ,eAAA,CAAgB8B,MAAhB,CAAR,CADwC;AAAA,CAExC,IAAI/hB,CAAA,GAAI,CAAR,CAFwC;AAAA,CAGxC,IAAIiF,MAAA,GAAS,EAAb,CAHwC;AAAA,CAIxC,IAAIqB,GAAJ,CAJwC;AAAA,CAKxC,KAAKA,GAAL,IAAYkJ,CAAZ;AAAA,EAAe,CAAC2Q,GAAA,CAAIgD,UAAJ,EAAgB7c,GAAhB,CAAD,IAAyB6Z,GAAA,CAAI3Q,CAAJ,EAAOlJ,GAAP,CAAzB,IAAwCrB,MAAA,CAAOgf,IAAP,CAAY3d,GAAZ,CAAxC,CALyB;AAAA,CAOxC,OAAOkf,KAAA,CAAMtM,MAAN,GAAelZ,CAAtB;AAAA,EAAyB,IAAImgB,GAAA,CAAI3Q,CAAJ,EAAOlJ,GAAA,GAAMkf,KAAA,CAAMxlB,CAAA,EAAN,CAAb,CAAJ,EAA8B;AAAA,GACrD,CAACulB,OAAA,CAAQtgB,MAAR,EAAgBqB,GAAhB,CAAD,IAAyBrB,MAAA,CAAOgf,IAAP,CAAY3d,GAAZ,CAAzB,CADqD;AAAA,GAPf;AAAA,CAUxC,OAAOrB,MAAP,CAVwC;AAAA,CAA1C,C;;;;;;ACLA,IAAIgb,eAAA,GAAkBrC,mBAAA,CAAQ,EAAR,CAAtB;AACA,IAAI6H,QAAA,GAAW7H,mBAAA,CAAQ,EAAR,CAAf,CADA;AAEA,IAAI8H,eAAA,GAAkB9H,mBAAA,CAAQ,EAAR,CAAtB,CAFA;AAKA,IAAI+H,YAAA,GAAe,UAAUC,WAAV,EAAuB;AAAA,CACxC,OAAO,UAAUC,KAAV,EAAiBC,EAAjB,EAAqBC,SAArB,EAAgC;AAAA,EACrC,IAAIvW,CAAA,GAAIyQ,eAAA,CAAgB4F,KAAhB,CAAR,CADqC;AAAA,EAErC,IAAI3M,MAAA,GAASuM,QAAA,CAASjW,CAAA,CAAE0J,MAAX,CAAb,CAFqC;AAAA,EAGrC,IAAI8M,KAAA,GAAQN,eAAA,CAAgBK,SAAhB,EAA2B7M,MAA3B,CAAZ,CAHqC;AAAA,EAIrC,IAAIlW,KAAJ,CAJqC;AAAA,EAOrC,IAAI4iB,WAAA,IAAeE,EAAA,IAAMA,EAAzB;AAAA,GAA6B,OAAO5M,MAAA,GAAS8M,KAAhB,EAAuB;AAAA,IAClDhjB,KAAA,GAAQwM,CAAA,CAAEwW,KAAA,EAAF,CAAR,CADkD;AAAA,IAGlD,IAAIhjB,KAAA,IAASA,KAAb;AAAA,KAAoB,OAAO,IAAP,CAH8B;AAAA,IAApD;AAAA;AAAA,GAKO,OAAMkW,MAAA,GAAS8M,KAAf,EAAsBA,KAAA,EAAtB,EAA+B;AAAA,IACpC,IAAK,CAAAJ,WAAA,IAAeI,KAAA,IAASxW,CAAxB,CAAD,IAA+BA,CAAA,CAAEwW,KAAF,MAAaF,EAAhD;AAAA,KAAoD,OAAOF,WAAA,IAAeI,KAAf,IAAwB,CAA/B,CADhB;AAAA,IAZD;AAAA,EAcnC,OAAO,CAACJ,WAAD,IAAgB,CAAC,CAAxB,CAdmC;AAAA,EAAvC,CADwC;AAAA,CAA1C,CALA;AAwBApjB,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CAGfsiB,QAAA,EAAUN,YAAA,CAAa,IAAb,CAHK;AAAA,CAMfJ,OAAA,EAASI,YAAA,CAAa,KAAb,CANM;AAAA,CAAjB,C;;;;;;ACxBA,IAAIO,SAAA,GAAYtI,mBAAA,CAAQ,EAAR,CAAhB;AAEA,IAAIuI,GAAA,GAAMznB,IAAA,CAAKynB,GAAf,CAFA;AAMA3jB,MAAA,CAAOmB,OAAP,GAAiB,UAAUyiB,QAAV,EAAoB;AAAA,CACnC,OAAOA,QAAA,GAAW,CAAX,GAAeD,GAAA,CAAID,SAAA,CAAUE,QAAV,CAAJ,EAAyB,gBAAzB,CAAf,GAA4D,CAAnE,CADmC;AAAA,CAArC,C;;;;;;ACNA,IAAIC,IAAA,GAAO3nB,IAAA,CAAK2nB,IAAhB;AACA,IAAIC,KAAA,GAAQ5nB,IAAA,CAAK4nB,KAAjB,CADA;AAKA9jB,MAAA,CAAOmB,OAAP,GAAiB,UAAUyiB,QAAV,EAAoB;AAAA,CACnC,OAAO1f,KAAA,CAAM0f,QAAA,GAAW,CAACA,QAAlB,IAA8B,CAA9B,GAAmC,CAAAA,QAAA,GAAW,CAAX,GAAeE,KAAf,GAAuBD,IAAvB,CAAD,CAA8BD,QAA9B,CAAzC,CADmC;AAAA,CAArC,C;;;;;;ACLA,IAAIF,SAAA,GAAYtI,mBAAA,CAAQ,EAAR,CAAhB;AAEA,IAAI2I,GAAA,GAAM7nB,IAAA,CAAK6nB,GAAf,CAFA;AAGA,IAAIJ,GAAA,GAAMznB,IAAA,CAAKynB,GAAf,CAHA;AAQA3jB,MAAA,CAAOmB,OAAP,GAAiB,UAAUqiB,KAAV,EAAiB9M,MAAjB,EAAyB;AAAA,CACxC,IAAIsN,OAAA,GAAUN,SAAA,CAAUF,KAAV,CAAd,CADwC;AAAA,CAExC,OAAOQ,OAAA,GAAU,CAAV,GAAcD,GAAA,CAAIC,OAAA,GAAUtN,MAAd,EAAsB,CAAtB,CAAd,GAAyCiN,GAAA,CAAIK,OAAJ,EAAatN,MAAb,CAAhD,CAFwC;AAAA,CAA1C,C;;;;;;ACPA1W,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CACf,aADe;AAAA,CAEf,gBAFe;AAAA,CAGf,eAHe;AAAA,CAIf,sBAJe;AAAA,CAKf,gBALe;AAAA,CAMf,UANe;AAAA,CAOf,SAPe;AAAA,CAAjB,C;;;;;;ACAAA,SAAA,GAAY/C,MAAA,CAAOikB,qBAAnB,C;;;;;;ACDA,IAAInE,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ;AAEA,IAAI6I,WAAA,GAAc,iBAAlB,CAFA;AAIA,IAAIhI,QAAA,GAAW,UAAUiI,OAAV,EAAmBC,SAAnB,EAA8B;AAAA,CAC3C,IAAI3jB,KAAA,GAAQ4W,IAAA,CAAKgN,SAAA,CAAUF,OAAV,CAAL,CAAZ,CAD2C;AAAA,CAE3C,OAAO1jB,KAAA,IAAS6jB,QAAT,GAAoB,IAApB,GACH7jB,KAAA,IAAS8jB,MAAT,GAAkB,KAAlB,GACA,OAAOH,SAAP,IAAoB,UAApB,GAAiCjG,KAAA,CAAMiG,SAAN,CAAjC,GACA,CAAC,CAACA,SAHN,CAF2C;AAAA,CAA7C,CAJA;AAYA,IAAIC,SAAA,GAAYnI,QAAA,CAASmI,SAAT,GAAqB,UAAUG,MAAV,EAAkB;AAAA,CACrD,OAAO3N,MAAA,CAAO2N,MAAP,EAAeC,OAAf,CAAuBP,WAAvB,EAAoC,GAApC,EAAyCQ,WAAzC,EAAP,CADqD;AAAA,CAAvD,CAZA;AAgBA,IAAIrN,IAAA,GAAO6E,QAAA,CAAS7E,IAAT,GAAgB,EAA3B,CAhBA;AAiBA,IAAIkN,MAAA,GAASrI,QAAA,CAASqI,MAAT,GAAkB,GAA/B,CAjBA;AAkBA,IAAID,QAAA,GAAWpI,QAAA,CAASoI,QAAT,GAAoB,GAAnC,CAlBA;AAoBArkB,MAAA,CAAOmB,OAAP,GAAiB8a,QAAjB,C;;;;;;ACpBAb,mBAAA,CAAQ,EAAR;AACAA,mBAAA,CAAQ,EAAR,EADA;AAEA,IAAImH,IAAA,GAAOnH,mBAAA,CAAQ,EAAR,CAAX,CAFA;AAIApb,MAAA,CAAOmB,OAAP,GAAiBohB,IAAA,CAAKnkB,MAAL,CAAYsmB,WAA7B,C;;;;;;;ACJa;AACb,IAAIjH,eAAA,GAAkBrC,mBAAA,CAAQ,EAAR,CAAtB,CADA;AAEA,IAAIuJ,gBAAA,GAAmBvJ,mBAAA,CAAQ,EAAR,CAAvB,CAFA;AAGA,IAAIwJ,SAAA,GAAYxJ,mBAAA,CAAQ,EAAR,CAAhB,CAHA;AAIA,IAAIwE,mBAAA,GAAsBxE,mBAAA,CAAQ,EAAR,CAA1B,CAJA;AAKA,IAAIyJ,cAAA,GAAiBzJ,mBAAA,CAAQ,EAAR,CAArB,CALA;AAOA,IAAI0J,cAAA,GAAiB,gBAArB,CAPA;AAQA,IAAIC,gBAAA,GAAmBnF,mBAAA,CAAoBiB,GAA3C,CARA;AASA,IAAIhB,gBAAA,GAAmBD,mBAAA,CAAoBkB,SAApB,CAA8BgE,cAA9B,CAAvB,CATA;AAqBA9kB,MAAA,CAAOmB,OAAP,GAAiB0jB,cAAA,CAAe9M,KAAf,EAAsB,OAAtB,EAA+B,UAAUiN,QAAV,EAAoBC,IAApB,EAA0B;AAAA,CACxEF,gBAAA,CAAiB,IAAjB,EAAuB;AAAA,EACrB3jB,IAAA,EAAM0jB,cADe;AAAA,EAErBzI,MAAA,EAAQoB,eAAA,CAAgBuH,QAAhB,CAFa;AAAA,EAGrBxB,KAAA,EAAO,CAHc;AAAA,EAIrByB,IAAA,EAAMA,IAJe;AAAA,EAAvB,EADwE;AAAA,CAAzD,EASd,YAAY;AAAA,CACb,IAAI/hB,KAAA,GAAQ2c,gBAAA,CAAiB,IAAjB,CAAZ,CADa;AAAA,CAEb,IAAIxD,MAAA,GAASnZ,KAAA,CAAMmZ,MAAnB,CAFa;AAAA,CAGb,IAAI4I,IAAA,GAAO/hB,KAAA,CAAM+hB,IAAjB,CAHa;AAAA,CAIb,IAAIzB,KAAA,GAAQtgB,KAAA,CAAMsgB,KAAN,EAAZ,CAJa;AAAA,CAKb,IAAI,CAACnH,MAAD,IAAWmH,KAAA,IAASnH,MAAA,CAAO3F,MAA/B,EAAuC;AAAA,EACrCxT,KAAA,CAAMmZ,MAAN,GAAeW,SAAf,CADqC;AAAA,EAErC,OAAO;AAAA,GAAExc,KAAA,EAAOwc,SAAT;AAAA,GAAoBxZ,IAAA,EAAM,IAA1B;AAAA,GAAP,CAFqC;AAAA,EAL1B;AAAA,CASb,IAAIyhB,IAAA,IAAQ,MAAZ;AAAA,EAAoB,OAAO;AAAA,GAAEzkB,KAAA,EAAOgjB,KAAT;AAAA,GAAgBhgB,IAAA,EAAM,KAAtB;AAAA,GAAP,CATP;AAAA,CAUb,IAAIyhB,IAAA,IAAQ,QAAZ;AAAA,EAAsB,OAAO;AAAA,GAAEzkB,KAAA,EAAO6b,MAAA,CAAOmH,KAAP,CAAT;AAAA,GAAwBhgB,IAAA,EAAM,KAA9B;AAAA,GAAP,CAVT;AAAA,CAWb,OAAO;AAAA,EAAEhD,KAAA,EAAO;AAAA,GAACgjB,KAAD;AAAA,GAAQnH,MAAA,CAAOmH,KAAP,CAAR;AAAA,GAAT;AAAA,EAAiChgB,IAAA,EAAM,KAAvC;AAAA,EAAP,CAXa;AAAA,CATE,EAqBd,QArBc,CAAjB,CArBA;AA+CAohB,SAAA,CAAUM,SAAV,GAAsBN,SAAA,CAAU7M,KAAhC,CA/CA;AAkDA4M,gBAAA,CAAiB,MAAjB,EAlDA;AAmDAA,gBAAA,CAAiB,QAAjB,EAnDA;AAoDAA,gBAAA,CAAiB,SAAjB,E;;;;;;ACpDA,IAAIQ,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB;AACA,IAAI5hB,MAAA,GAAS4hB,mBAAA,CAAQ,EAAR,CAAb,CADA;AAEA,IAAIkE,oBAAA,GAAuBlE,mBAAA,CAAQ,EAAR,CAA3B,CAFA;AAIA,IAAIgK,WAAA,GAAcD,eAAA,CAAgB,aAAhB,CAAlB,CAJA;AAKA,IAAIE,cAAA,GAAiBtN,KAAA,CAAM8E,SAA3B,CALA;AASA,IAAIwI,cAAA,CAAeD,WAAf,KAA+BpI,SAAnC,EAA8C;AAAA,CAC5CsC,oBAAA,CAAqBtB,CAArB,CAAuBqH,cAAvB,EAAuCD,WAAvC,EAAoD;AAAA,EAClD1kB,YAAA,EAAc,IADoC;AAAA,EAElDF,KAAA,EAAOhH,MAAA,CAAO,IAAP,CAF2C;AAAA,EAApD,EAD4C;AAAA,CAT9C;AAiBAwG,MAAA,CAAOmB,OAAP,GAAiB,UAAU2C,GAAV,EAAe;AAAA,CAC9BuhB,cAAA,CAAeD,WAAf,EAA4BthB,GAA5B,IAAmC,IAAnC,CAD8B;AAAA,CAAhC,C;;;;;;ACjBA,IAAI6X,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAIqF,MAAA,GAASrF,mBAAA,CAAQ,EAAR,CAAb,CADA;AAEA,IAAIuC,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV,CAFA;AAGA,IAAImG,GAAA,GAAMnG,mBAAA,CAAQ,EAAR,CAAV,CAHA;AAIA,IAAIkK,aAAA,GAAgBlK,mBAAA,CAAQ,EAAR,CAApB,CAJA;AAKA,IAAImK,iBAAA,GAAoBnK,mBAAA,CAAQ,EAAR,CAAxB,CALA;AAOA,IAAIoK,qBAAA,GAAwB/E,MAAA,CAAO,KAAP,CAA5B,CAPA;AAQA,IAAIgF,MAAA,GAAS9J,MAAA,CAAO8J,MAApB,CARA;AASA,IAAIC,qBAAA,GAAwBH,iBAAA,GAAoBE,MAApB,GAA6BA,MAAA,IAAUA,MAAA,CAAOE,aAAjB,IAAkCpE,GAA3F,CATA;AAWAvhB,MAAA,CAAOmB,OAAP,GAAiB,UAAU7C,IAAV,EAAgB;AAAA,CAC/B,IAAI,CAACqf,GAAA,CAAI6H,qBAAJ,EAA2BlnB,IAA3B,CAAD,IAAqC,CAAE,CAAAgnB,aAAA,IAAiB,OAAOE,qBAAA,CAAsBlnB,IAAtB,CAAP,IAAsC,QAAvD,CAA3C,EAA6G;AAAA,EAC3G,IAAIgnB,aAAA,IAAiB3H,GAAA,CAAI8H,MAAJ,EAAYnnB,IAAZ,CAArB,EAAwC;AAAA,GACtCknB,qBAAA,CAAsBlnB,IAAtB,IAA8BmnB,MAAA,CAAOnnB,IAAP,CAA9B,CADsC;AAAA,GAAxC,MAEO;AAAA,GACLknB,qBAAA,CAAsBlnB,IAAtB,IAA8BonB,qBAAA,CAAsB,YAAYpnB,IAAlC,CAA9B,CADK;AAAA,GAHoG;AAAA,EAD9E;AAAA,CAO7B,OAAOknB,qBAAA,CAAsBlnB,IAAtB,CAAP,CAP6B;AAAA,CAAjC,C;;;;;;ACXA,IAAIsnB,OAAA,GAAUxK,mBAAA,CAAQ,EAAR,CAAd;AACA,IAAIyK,UAAA,GAAazK,mBAAA,CAAQ,EAAR,CAAjB,CADA;AAEA,IAAI8C,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ,CAFA;AAKApb,MAAA,CAAOmB,OAAP,GAAiB,CAAC,CAAC/C,MAAA,CAAOikB,qBAAT,IAAkC,CAACnE,KAAA,CAAM,YAAY;AAAA,CAEpE,OAAO,CAACuH,MAAA,CAAOxI,IAAR,IAGJ,CAAA2I,OAAA,GAAUC,UAAA,KAAe,EAAzB,GAA8BA,UAAA,GAAa,EAAb,IAAmBA,UAAA,GAAa,EAA9D,CAHH,CAFoE;AAAA,CAAlB,CAApD,C;;;;;;ACLA,IAAIlH,OAAA,GAAUvD,mBAAA,CAAQ,EAAR,CAAd;AACA,IAAIO,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb,CADA;AAGApb,MAAA,CAAOmB,OAAP,GAAiBwd,OAAA,CAAQhD,MAAA,CAAOF,OAAf,KAA2B,SAA5C,C;;;;;;ACHA,IAAIE,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAI0K,SAAA,GAAY1K,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAGA,IAAIK,OAAA,GAAUE,MAAA,CAAOF,OAArB,CAHA;AAIA,IAAIsK,QAAA,GAAWtK,OAAA,IAAWA,OAAA,CAAQsK,QAAlC,CAJA;AAKA,IAAIC,EAAA,GAAKD,QAAA,IAAYA,QAAA,CAASC,EAA9B,CALA;AAMA,IAAIpM,KAAJ,EAAW8H,OAAX,CANA;AAQA,IAAIsE,EAAJ,EAAQ;AAAA,CACNpM,KAAA,GAAQoM,EAAA,CAAGpH,KAAH,CAAS,GAAT,CAAR,CADM;AAAA,CAEN8C,OAAA,GAAU9H,KAAA,CAAM,CAAN,IAAWA,KAAA,CAAM,CAAN,CAArB,CAFM;AAAA,CAAR,MAGO,IAAIkM,SAAJ,EAAe;AAAA,CACpBlM,KAAA,GAAQkM,SAAA,CAAUlM,KAAV,CAAgB,aAAhB,CAAR,CADoB;AAAA,CAEpB,IAAI,CAACA,KAAD,IAAUA,KAAA,CAAM,CAAN,KAAY,EAA1B,EAA8B;AAAA,EAC5BA,KAAA,GAAQkM,SAAA,CAAUlM,KAAV,CAAgB,eAAhB,CAAR,CAD4B;AAAA,EAE5B,IAAIA,KAAJ;AAAA,GAAW8H,OAAA,GAAU9H,KAAA,CAAM,CAAN,CAAV,CAFiB;AAAA,EAFV;AAAA,CAXtB;AAmBA5Z,MAAA,CAAOmB,OAAP,GAAiBugB,OAAA,IAAW,CAACA,OAA7B,C;;;;;;ACnBA,IAAIQ,UAAA,GAAa9G,mBAAA,CAAQ,EAAR,CAAjB;AAEApb,MAAA,CAAOmB,OAAP,GAAiB+gB,UAAA,CAAW,WAAX,EAAwB,WAAxB,KAAwC,EAAzD,C;;;;;;ACDA,IAAIoD,aAAA,GAAgBlK,mBAAA,CAAQ,EAAR,CAApB,CADA;AAGApb,MAAA,CAAOmB,OAAP,GAAiBmkB,aAAA,IACZ,CAACG,MAAA,CAAOxI,IADI,IAEZ,OAAOwI,MAAA,CAAOvgB,QAAd,IAA0B,QAF/B,C;;;;;;ACHA,IAAIsa,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf;AACA,IAAI6K,gBAAA,GAAmB7K,mBAAA,CAAQ,EAAR,CAAvB,CADA;AAEA,IAAIyH,WAAA,GAAczH,mBAAA,CAAQ,EAAR,CAAlB,CAFA;AAGA,IAAIuF,UAAA,GAAavF,mBAAA,CAAQ,EAAR,CAAjB,CAHA;AAIA,IAAI8K,IAAA,GAAO9K,mBAAA,CAAQ,EAAR,CAAX,CAJA;AAKA,IAAI+K,qBAAA,GAAwB/K,mBAAA,CAAQ,EAAR,CAA5B,CALA;AAMA,IAAIsF,SAAA,GAAYtF,mBAAA,CAAQ,EAAR,CAAhB,CANA;AAQA,IAAIgL,EAAA,GAAK,GAAT,CARA;AASA,IAAIC,EAAA,GAAK,GAAT,CATA;AAUA,IAAIC,SAAA,GAAY,WAAhB,CAVA;AAWA,IAAIC,MAAA,GAAS,QAAb,CAXA;AAYA,IAAIC,QAAA,GAAW9F,SAAA,CAAU,UAAV,CAAf,CAZA;AAcA,IAAI+F,gBAAA,GAAmB,YAAY;AAAA,CAAnC,CAdA;AAgBA,IAAIC,SAAA,GAAY,UAAUC,OAAV,EAAmB;AAAA,CACjC,OAAON,EAAA,GAAKE,MAAL,GAAcH,EAAd,GAAmBO,OAAnB,GAA6BN,EAA7B,GAAkC,GAAlC,GAAwCE,MAAxC,GAAiDH,EAAxD,CADiC;AAAA,CAAnC,CAhBA;AAqBA,IAAIQ,yBAAA,GAA4B,UAAUC,eAAV,EAA2B;AAAA,CACzDA,eAAA,CAAgBC,KAAhB,CAAsBJ,SAAA,CAAU,EAAV,CAAtB,EADyD;AAAA,CAEzDG,eAAA,CAAgBE,KAAhB,GAFyD;AAAA,CAGzD,IAAIC,IAAA,GAAOH,eAAA,CAAgBI,YAAhB,CAA6B7oB,MAAxC,CAHyD;AAAA,CAIzDyoB,eAAA,GAAkB,IAAlB,CAJyD;AAAA,CAKzD,OAAOG,IAAP,CALyD;AAAA,CAA3D,CArBA;AA8BA,IAAIE,wBAAA,GAA2B,YAAY;AAAA,CAEzC,IAAIC,MAAA,GAAShB,qBAAA,CAAsB,QAAtB,CAAb,CAFyC;AAAA,CAGzC,IAAIiB,EAAA,GAAK,SAASb,MAAT,GAAkB,GAA3B,CAHyC;AAAA,CAIzC,IAAIc,cAAJ,CAJyC;AAAA,CAKzCF,MAAA,CAAOG,KAAP,CAAaC,OAAb,GAAuB,MAAvB,CALyC;AAAA,CAMzCrB,IAAA,CAAKsB,WAAL,CAAiBL,MAAjB,EANyC;AAAA,CAQzCA,MAAA,CAAOM,GAAP,GAAa7Q,MAAA,CAAOwQ,EAAP,CAAb,CARyC;AAAA,CASzCC,cAAA,GAAiBF,MAAA,CAAOO,aAAP,CAAqB/sB,QAAtC,CATyC;AAAA,CAUzC0sB,cAAA,CAAeM,IAAf,GAVyC;AAAA,CAWzCN,cAAA,CAAeP,KAAf,CAAqBJ,SAAA,CAAU,mBAAV,CAArB,EAXyC;AAAA,CAYzCW,cAAA,CAAeN,KAAf,GAZyC;AAAA,CAazC,OAAOM,cAAA,CAAe/a,CAAtB,CAbyC;AAAA,CAA3C,CA9BA;AAmDA,IAAIua,eAAJ,CAnDA;AAoDA,IAAIe,eAAA,GAAkB,YAAY;AAAA,CAChC,IAAI;AAAA,EAEFf,eAAA,GAAkBlsB,QAAA,CAASktB,MAAT,IAAmB,IAAIC,aAAJ,CAAkB,UAAlB,CAArC,CAFE;AAAA,EAAJ,CAGE,OAAO/J,KAAP,EAAc;AAAA,EAJgB;AAAA,CAKhC6J,eAAA,GAAkBf,eAAA,GAAkBD,yBAAA,CAA0BC,eAA1B,CAAlB,GAA+DK,wBAAA,EAAjF,CALgC;AAAA,CAMhC,IAAIxQ,MAAA,GAASmM,WAAA,CAAYnM,MAAzB,CANgC;AAAA,CAOhC,OAAOA,MAAA,EAAP;AAAA,EAAiB,OAAOkR,eAAA,CAAgBtB,SAAhB,EAA2BzD,WAAA,CAAYnM,MAAZ,CAA3B,CAAP,CAPe;AAAA,CAQhC,OAAOkR,eAAA,EAAP,CARgC;AAAA,CAAlC,CApDA;AA+DAjH,UAAA,CAAW6F,QAAX,IAAuB,IAAvB,CA/DA;AAmEAxmB,MAAA,CAAOmB,OAAP,GAAiB/C,MAAA,CAAO5E,MAAP,IAAiB,SAASA,MAAT,CAAgBwT,CAAhB,EAAmB+a,UAAnB,EAA+B;AAAA,CAC/D,IAAItlB,MAAJ,CAD+D;AAAA,CAE/D,IAAIuK,CAAA,KAAM,IAAV,EAAgB;AAAA,EACdyZ,gBAAA,CAAiBH,SAAjB,IAA8B9G,QAAA,CAASxS,CAAT,CAA9B,CADc;AAAA,EAEdvK,MAAA,GAAS,IAAIgkB,gBAAJ,EAAT,CAFc;AAAA,EAGdA,gBAAA,CAAiBH,SAAjB,IAA8B,IAA9B,CAHc;AAAA,EAKd7jB,MAAA,CAAO+jB,QAAP,IAAmBxZ,CAAnB,CALc;AAAA,EAAhB;AAAA,EAMOvK,MAAA,GAASmlB,eAAA,EAAT,CARwD;AAAA,CAS/D,OAAOG,UAAA,KAAe/K,SAAf,GAA2Bva,MAA3B,GAAoCwjB,gBAAA,CAAiBxjB,MAAjB,EAAyBslB,UAAzB,CAA3C,CAT+D;AAAA,CAAjE,C;;;;;;ACnEA,IAAIzK,WAAA,GAAclC,mBAAA,CAAQ,EAAR,CAAlB;AACA,IAAIkE,oBAAA,GAAuBlE,mBAAA,CAAQ,EAAR,CAA3B,CADA;AAEA,IAAIoE,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf,CAFA;AAGA,IAAI4M,UAAA,GAAa5M,mBAAA,CAAQ,EAAR,CAAjB,CAHA;AAQApb,MAAA,CAAOmB,OAAP,GAAiBmc,WAAA,GAAclf,MAAA,CAAO6nB,gBAArB,GAAwC,SAASA,gBAAT,CAA0BjZ,CAA1B,EAA6B+a,UAA7B,EAAyC;AAAA,CAChGvI,QAAA,CAASxS,CAAT,EADgG;AAAA,CAEhG,IAAInJ,IAAA,GAAOmkB,UAAA,CAAWD,UAAX,CAAX,CAFgG;AAAA,CAGhG,IAAIrR,MAAA,GAAS7S,IAAA,CAAK6S,MAAlB,CAHgG;AAAA,CAIhG,IAAI8M,KAAA,GAAQ,CAAZ,CAJgG;AAAA,CAKhG,IAAI1f,GAAJ,CALgG;AAAA,CAMhG,OAAO4S,MAAA,GAAS8M,KAAhB;AAAA,EAAuBlE,oBAAA,CAAqBtB,CAArB,CAAuBhR,CAAvB,EAA0BlJ,GAAA,GAAMD,IAAA,CAAK2f,KAAA,EAAL,CAAhC,EAA+CuE,UAAA,CAAWjkB,GAAX,CAA/C,EANyE;AAAA,CAOhG,OAAOkJ,CAAP,CAPgG;AAAA,CAAlG,C;;;;;;ACRA,IAAI4V,kBAAA,GAAqBxH,mBAAA,CAAQ,EAAR,CAAzB;AACA,IAAIyH,WAAA,GAAczH,mBAAA,CAAQ,EAAR,CAAlB,CADA;AAMApb,MAAA,CAAOmB,OAAP,GAAiB/C,MAAA,CAAOyF,IAAP,IAAe,SAASA,IAAT,CAAcmJ,CAAd,EAAiB;AAAA,CAC/C,OAAO4V,kBAAA,CAAmB5V,CAAnB,EAAsB6V,WAAtB,CAAP,CAD+C;AAAA,CAAjD,C;;;;;;ACNA,IAAIX,UAAA,GAAa9G,mBAAA,CAAQ,EAAR,CAAjB;AAEApb,MAAA,CAAOmB,OAAP,GAAiB+gB,UAAA,CAAW,UAAX,EAAuB,iBAAvB,CAAjB,C;;;;;;ACFAliB,MAAA,CAAOmB,OAAP,GAAiB,EAAjB,C;;;;;;;ACAa;AACb,IAAIua,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAI6M,yBAAA,GAA4B7M,mBAAA,CAAQ,EAAR,CAAhC,CAFA;AAGA,IAAI8M,cAAA,GAAiB9M,mBAAA,CAAQ,EAAR,CAArB,CAHA;AAIA,IAAI+M,cAAA,GAAiB/M,mBAAA,CAAQ,EAAR,CAArB,CAJA;AAKA,IAAIgN,cAAA,GAAiBhN,mBAAA,CAAQ,EAAR,CAArB,CALA;AAMA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CANA;AAOA,IAAIU,QAAA,GAAWV,mBAAA,CAAQ,EAAR,CAAf,CAPA;AAQA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CARA;AASA,IAAIoG,OAAA,GAAUpG,mBAAA,CAAQ,EAAR,CAAd,CATA;AAUA,IAAIwJ,SAAA,GAAYxJ,mBAAA,CAAQ,EAAR,CAAhB,CAVA;AAWA,IAAIiN,aAAA,GAAgBjN,mBAAA,CAAQ,EAAR,CAApB,CAXA;AAaA,IAAIxZ,iBAAA,GAAoBymB,aAAA,CAAczmB,iBAAtC,CAbA;AAcA,IAAI0mB,sBAAA,GAAyBD,aAAA,CAAcC,sBAA3C,CAdA;AAeA,IAAIC,QAAA,GAAWpD,eAAA,CAAgB,UAAhB,CAAf,CAfA;AAgBA,IAAIqD,IAAA,GAAO,MAAX,CAhBA;AAiBA,IAAIC,MAAA,GAAS,QAAb,CAjBA;AAkBA,IAAIC,OAAA,GAAU,SAAd,CAlBA;AAoBA,IAAIC,UAAA,GAAa,YAAY;AAAA,CAAE,OAAO,IAAP,CAAF;AAAA,CAA7B,CApBA;AAsBA3oB,MAAA,CAAOmB,OAAP,GAAiB,UAAUynB,QAAV,EAAoBC,IAApB,EAA0BC,mBAA1B,EAA+C/kB,IAA/C,EAAqDglB,OAArD,EAA8DC,MAA9D,EAAsEvM,MAAtE,EAA8E;AAAA,CAC7FwL,yBAAA,CAA0Ba,mBAA1B,EAA+CD,IAA/C,EAAqD9kB,IAArD,EAD6F;AAAA,CAG7F,IAAIklB,kBAAA,GAAqB,UAAUC,IAAV,EAAgB;AAAA,EACvC,IAAIA,IAAA,KAASH,OAAT,IAAoBI,eAAxB;AAAA,GAAyC,OAAOA,eAAP,CADF;AAAA,EAEvC,IAAI,CAACb,sBAAD,IAA2BY,IAAA,IAAQE,iBAAvC;AAAA,GAA0D,OAAOA,iBAAA,CAAkBF,IAAlB,CAAP,CAFnB;AAAA,EAGvC,QAAQA,IAAR;AAAA,EACE,KAAKV,IAAL;AAAA,GAAW,OAAO,SAAS3kB,IAAT,GAAgB;AAAA,IAAE,OAAO,IAAIilB,mBAAJ,CAAwB,IAAxB,EAA8BI,IAA9B,CAAP,CAAF;AAAA,IAAvB,CADb;AAAA,EAEE,KAAKT,MAAL;AAAA,GAAa,OAAO,SAAS1mB,MAAT,GAAkB;AAAA,IAAE,OAAO,IAAI+mB,mBAAJ,CAAwB,IAAxB,EAA8BI,IAA9B,CAAP,CAAF;AAAA,IAAzB,CAFf;AAAA,EAGE,KAAKR,OAAL;AAAA,GAAc,OAAO,SAASW,OAAT,GAAmB;AAAA,IAAE,OAAO,IAAIP,mBAAJ,CAAwB,IAAxB,EAA8BI,IAA9B,CAAP,CAAF;AAAA,IAA1B,CAHhB;AAAA,GAHuC;AAAA,EAOrC,OAAO,YAAY;AAAA,GAAE,OAAO,IAAIJ,mBAAJ,CAAwB,IAAxB,CAAP,CAAF;AAAA,GAAnB,CAPqC;AAAA,EAAzC,CAH6F;AAAA,CAa7F,IAAIQ,aAAA,GAAgBT,IAAA,GAAO,WAA3B,CAb6F;AAAA,CAc7F,IAAIU,qBAAA,GAAwB,KAA5B,CAd6F;AAAA,CAe7F,IAAIH,iBAAA,GAAoBR,QAAA,CAAS/L,SAAjC,CAf6F;AAAA,CAgB7F,IAAI2M,cAAA,GAAiBJ,iBAAA,CAAkBb,QAAlB,KAChBa,iBAAA,CAAkB,YAAlB,CADgB,IAEhBL,OAAA,IAAWK,iBAAA,CAAkBL,OAAlB,CAFhB,CAhB6F;AAAA,CAmB7F,IAAII,eAAA,GAAkB,CAACb,sBAAD,IAA2BkB,cAA3B,IAA6CP,kBAAA,CAAmBF,OAAnB,CAAnE,CAnB6F;AAAA,CAoB7F,IAAIU,iBAAA,GAAoBZ,IAAA,IAAQ,OAAR,GAAkBO,iBAAA,CAAkBC,OAAlB,IAA6BG,cAA/C,GAAgEA,cAAxF,CApB6F;AAAA,CAqB7F,IAAIE,wBAAJ,EAA8BC,OAA9B,EAAuCC,GAAvC,CArB6F;AAAA,CAwB7F,IAAIH,iBAAJ,EAAuB;AAAA,EACrBC,wBAAA,GAA2BxB,cAAA,CAAeuB,iBAAA,CAAkBxL,IAAlB,CAAuB,IAAI2K,QAAJ,EAAvB,CAAf,CAA3B,CADqB;AAAA,EAErB,IAAIhnB,iBAAA,KAAsBxD,MAAA,CAAOye,SAA7B,IAA0C6M,wBAAA,CAAyB3lB,IAAvE,EAA6E;AAAA,GAC3E,IAAI,CAACyd,OAAD,IAAY0G,cAAA,CAAewB,wBAAf,MAA6C9nB,iBAA7D,EAAgF;AAAA,IAC9E,IAAIumB,cAAJ,EAAoB;AAAA,KAClBA,cAAA,CAAeuB,wBAAf,EAAyC9nB,iBAAzC,EADkB;AAAA,KAApB,MAEO,IAAI,OAAO8nB,wBAAA,CAAyBnB,QAAzB,CAAP,IAA6C,UAAjD,EAA6D;AAAA,KAClE1M,2BAAA,CAA4B6N,wBAA5B,EAAsDnB,QAAtD,EAAgEI,UAAhE,EADkE;AAAA,KAHU;AAAA,IADL;AAAA,GAS3EP,cAAA,CAAesB,wBAAf,EAAyCJ,aAAzC,EAAwD,IAAxD,EAA8D,IAA9D,EAT2E;AAAA,GAU3E,IAAI9H,OAAJ;AAAA,IAAaoD,SAAA,CAAU0E,aAAV,IAA2BX,UAA3B,CAV8D;AAAA,GAFxD;AAAA,EAxBsE;AAAA,CAyC7F,IAAII,OAAA,IAAWN,MAAX,IAAqBe,cAArB,IAAuCA,cAAA,CAAelrB,IAAf,KAAwBmqB,MAAnE,EAA2E;AAAA,EACzEc,qBAAA,GAAwB,IAAxB,CADyE;AAAA,EAEzEJ,eAAA,GAAkB,SAASpnB,MAAT,GAAkB;AAAA,GAAE,OAAOynB,cAAA,CAAevL,IAAf,CAAoB,IAApB,CAAP,CAAF;AAAA,GAApC,CAFyE;AAAA,EAzCkB;AAAA,CA+C7F,IAAK,EAACuD,OAAD,IAAY/E,MAAZ,CAAD,IAAwB2M,iBAAA,CAAkBb,QAAlB,MAAgCY,eAA5D,EAA6E;AAAA,EAC3EtN,2BAAA,CAA4BuN,iBAA5B,EAA+Cb,QAA/C,EAAyDY,eAAzD,EAD2E;AAAA,EA/CgB;AAAA,CAkD7FvE,SAAA,CAAUiE,IAAV,IAAkBM,eAAlB,CAlD6F;AAAA,CAqD7F,IAAIJ,OAAJ,EAAa;AAAA,EACXY,OAAA,GAAU;AAAA,GACR5nB,MAAA,EAAQknB,kBAAA,CAAmBR,MAAnB,CADA;AAAA,GAER5kB,IAAA,EAAMmlB,MAAA,GAASG,eAAT,GAA2BF,kBAAA,CAAmBT,IAAnB,CAFzB;AAAA,GAGRa,OAAA,EAASJ,kBAAA,CAAmBP,OAAnB,CAHD;AAAA,GAAV,CADW;AAAA,EAMX,IAAIjM,MAAJ;AAAA,GAAY,KAAKmN,GAAL,IAAYD,OAAZ,EAAqB;AAAA,IAC/B,IAAIrB,sBAAA,IAA0BiB,qBAA1B,IAAmD,CAAE,CAAAK,GAAA,IAAOR,iBAAP,CAAzD,EAAoF;AAAA,KAClFtN,QAAA,CAASsN,iBAAT,EAA4BQ,GAA5B,EAAiCD,OAAA,CAAQC,GAAR,CAAjC,EADkF;AAAA,KADrD;AAAA,IAAjC;AAAA;AAAA,GAIOlO,CAAA,CAAE;AAAA,IAAEW,MAAA,EAAQwM,IAAV;AAAA,IAAgBgB,KAAA,EAAO,IAAvB;AAAA,IAA6B9M,MAAA,EAAQuL,sBAAA,IAA0BiB,qBAA/D;AAAA,IAAF,EAA0FI,OAA1F,EAVI;AAAA,EArDgF;AAAA,CAkE7F,OAAOA,OAAP,CAlE6F;AAAA,CAA/F,C;;;;;;;ACtBa;AACb,IAAI/nB,iBAAA,GAAoBwZ,yCAAxB,CADA;AAEA,IAAI5hB,MAAA,GAAS4hB,mBAAA,CAAQ,EAAR,CAAb,CAFA;AAGA,IAAIoC,wBAAA,GAA2BpC,mBAAA,CAAQ,EAAR,CAA/B,CAHA;AAIA,IAAIgN,cAAA,GAAiBhN,mBAAA,CAAQ,EAAR,CAArB,CAJA;AAKA,IAAIwJ,SAAA,GAAYxJ,mBAAA,CAAQ,EAAR,CAAhB,CALA;AAOA,IAAIuN,UAAA,GAAa,YAAY;AAAA,CAAE,OAAO,IAAP,CAAF;AAAA,CAA7B,CAPA;AASA3oB,MAAA,CAAOmB,OAAP,GAAiB,UAAU2nB,mBAAV,EAA+BD,IAA/B,EAAqC9kB,IAArC,EAA2C;AAAA,CAC1D,IAAIulB,aAAA,GAAgBT,IAAA,GAAO,WAA3B,CAD0D;AAAA,CAE1DC,mBAAA,CAAoBjM,SAApB,GAAgCrjB,MAAA,CAAOoI,iBAAP,EAA0B,EAAEmC,IAAA,EAAMyZ,wBAAA,CAAyB,CAAzB,EAA4BzZ,IAA5B,CAAR,EAA1B,CAAhC,CAF0D;AAAA,CAG1DqkB,cAAA,CAAeU,mBAAf,EAAoCQ,aAApC,EAAmD,KAAnD,EAA0D,IAA1D,EAH0D;AAAA,CAI1D1E,SAAA,CAAU0E,aAAV,IAA2BX,UAA3B,CAJ0D;AAAA,CAK1D,OAAOG,mBAAP,CAL0D;AAAA,CAA5D,C;;;;;;;ACTa;AACb,IAAI5K,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ,CADA;AAEA,IAAI8M,cAAA,GAAiB9M,mBAAA,CAAQ,EAAR,CAArB,CAFA;AAGA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CAHA;AAIA,IAAIuC,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV,CAJA;AAKA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CALA;AAMA,IAAIoG,OAAA,GAAUpG,mBAAA,CAAQ,EAAR,CAAd,CANA;AAQA,IAAImN,QAAA,GAAWpD,eAAA,CAAgB,UAAhB,CAAf,CARA;AASA,IAAImD,sBAAA,GAAyB,KAA7B,CATA;AAWA,IAAIK,UAAA,GAAa,YAAY;AAAA,CAAE,OAAO,IAAP,CAAF;AAAA,CAA7B,CAXA;AAeA,IAAI/mB,iBAAJ,EAAuBkoB,iCAAvB,EAA0DC,aAA1D,CAfA;AAkBA,IAAI,GAAGlmB,IAAP,EAAa;AAAA,CACXkmB,aAAA,GAAgB,GAAGlmB,IAAH,EAAhB,CADW;AAAA,CAGX,IAAI,CAAE,WAAUkmB,aAAV,CAAN;AAAA,EAAgCzB,sBAAA,GAAyB,IAAzB,CAAhC;AAAA,MACK;AAAA,EACHwB,iCAAA,GAAoC5B,cAAA,CAAeA,cAAA,CAAe6B,aAAf,CAAf,CAApC,CADG;AAAA,EAEH,IAAID,iCAAA,KAAsC1rB,MAAA,CAAOye,SAAjD;AAAA,GAA4Djb,iBAAA,GAAoBkoB,iCAApB,CAFzD;AAAA,EAJM;AAAA,CAlBb;AA4BA,IAAIE,sBAAA,GAAyBpoB,iBAAA,IAAqBob,SAArB,IAAkCkB,KAAA,CAAM,YAAY;AAAA,CAC/E,IAAIoD,IAAA,GAAO,EAAX,CAD+E;AAAA,CAG/E,OAAO1f,iBAAA,CAAkB2mB,QAAlB,EAA4BtK,IAA5B,CAAiCqD,IAAjC,MAA2CA,IAAlD,CAH+E;AAAA,CAAlB,CAA/D,CA5BA;AAkCA,IAAI0I,sBAAJ;AAAA,CAA4BpoB,iBAAA,GAAoB,EAApB,CAlC5B;AAqCA,IAAK,EAAC4f,OAAD,IAAYwI,sBAAZ,CAAD,IAAwC,CAACrM,GAAA,CAAI/b,iBAAJ,EAAuB2mB,QAAvB,CAA7C,EAA+E;AAAA,CAC7E1M,2BAAA,CAA4Bja,iBAA5B,EAA+C2mB,QAA/C,EAAyDI,UAAzD,EAD6E;AAAA,CArC/E;AAyCA3oB,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CACfS,iBAAA,EAAmBA,iBADJ;AAAA,CAEf0mB,sBAAA,EAAwBA,sBAFT;AAAA,CAAjB,C;;;;;;ACzCA,IAAI3K,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV;AACA,IAAI6O,QAAA,GAAW7O,mBAAA,CAAQ,EAAR,CAAf,CADA;AAEA,IAAIsF,SAAA,GAAYtF,mBAAA,CAAQ,EAAR,CAAhB,CAFA;AAGA,IAAI8O,wBAAA,GAA2B9O,mBAAA,CAAQ,EAAR,CAA/B,CAHA;AAKA,IAAIoL,QAAA,GAAW9F,SAAA,CAAU,UAAV,CAAf,CALA;AAMA,IAAIyJ,eAAA,GAAkB/rB,MAAA,CAAOye,SAA7B,CANA;AAWA7c,MAAA,CAAOmB,OAAP,GAAiB+oB,wBAAA,GAA2B9rB,MAAA,CAAO8pB,cAAlC,GAAmD,UAAUlb,CAAV,EAAa;AAAA,CAC/EA,CAAA,GAAIid,QAAA,CAASjd,CAAT,CAAJ,CAD+E;AAAA,CAE/E,IAAI2Q,GAAA,CAAI3Q,CAAJ,EAAOwZ,QAAP,CAAJ;AAAA,EAAsB,OAAOxZ,CAAA,CAAEwZ,QAAF,CAAP,CAFyD;AAAA,CAG/E,IAAI,OAAOxZ,CAAA,CAAE1T,WAAT,IAAwB,UAAxB,IAAsC0T,CAAA,YAAaA,CAAA,CAAE1T,WAAzD,EAAsE;AAAA,EACpE,OAAO0T,CAAA,CAAE1T,WAAF,CAAcujB,SAArB,CADoE;AAAA,EAHS;AAAA,CAK7E,OAAO7P,CAAA,YAAa5O,MAAb,GAAsB+rB,eAAtB,GAAwC,IAA/C,CAL6E;AAAA,CAAjF,C;;;;;;ACXA,IAAIzL,sBAAA,GAAyBtD,mBAAA,CAAQ,EAAR,CAA7B;AAIApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUyiB,QAAV,EAAoB;AAAA,CACnC,OAAOxlB,MAAA,CAAOsgB,sBAAA,CAAuBkF,QAAvB,CAAP,CAAP,CADmC;AAAA,CAArC,C;;;;;;ACJA,IAAI1F,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,CAAC+c,KAAA,CAAM,YAAY;AAAA,CAClC,SAAS5R,CAAT,GAAa;AAAA,EADqB;AAAA,CAElCA,CAAA,CAAEuQ,SAAF,CAAYvjB,WAAZ,GAA0B,IAA1B,CAFkC;AAAA,CAIlC,OAAO8E,MAAA,CAAO8pB,cAAP,CAAsB,IAAI5b,CAAJ,EAAtB,MAAmCA,CAAA,CAAEuQ,SAA5C,CAJkC;AAAA,CAAlB,CAAlB,C;;;;;;ACFA,IAAIsB,cAAA,GAAiB/C,yBAArB;AACA,IAAIuC,GAAA,GAAMvC,mBAAA,CAAQ,EAAR,CAAV,CADA;AAEA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CAFA;AAIA,IAAIkO,aAAA,GAAgBnE,eAAA,CAAgB,aAAhB,CAApB,CAJA;AAMAnlB,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAciN,GAAd,EAAmB7N,MAAnB,EAA2B;AAAA,CAC1C,IAAIY,EAAA,IAAM,CAACQ,GAAA,CAAIR,EAAA,GAAKZ,MAAA,GAASY,EAAT,GAAcA,EAAA,CAAGN,SAA1B,EAAqCyM,aAArC,CAAX,EAAgE;AAAA,EAC9DnL,cAAA,CAAehB,EAAf,EAAmBmM,aAAnB,EAAkC;AAAA,GAAE5oB,YAAA,EAAc,IAAhB;AAAA,GAAsBF,KAAA,EAAO4pB,GAA7B;AAAA,GAAlC,EAD8D;AAAA,EADtB;AAAA,CAA5C,C;;;;;;ACLA,IAAI5K,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf,CADA;AAEA,IAAIiP,kBAAA,GAAqBjP,mBAAA,CAAQ,EAAR,CAAzB,CAFA;AAQApb,MAAA,CAAOmB,OAAP,GAAiB/C,MAAA,CAAO+pB,cAAP,IAA0B,gBAAe,EAAf,GAAoB,YAAY;AAAA,CACzE,IAAImC,cAAA,GAAiB,KAArB,CADyE;AAAA,CAEzE,IAAIhJ,IAAA,GAAO,EAAX,CAFyE;AAAA,CAGzE,IAAIiJ,MAAJ,CAHyE;AAAA,CAIzE,IAAI;AAAA,EAEFA,MAAA,GAASnsB,MAAA,CAAOwd,wBAAP,CAAgCxd,MAAA,CAAOye,SAAvC,EAAkD,WAAlD,EAA+DgE,GAAxE,CAFE;AAAA,EAGF0J,MAAA,CAAOtM,IAAP,CAAYqD,IAAZ,EAAkB,EAAlB,EAHE;AAAA,EAIFgJ,cAAA,GAAiBhJ,IAAA,YAAgBvJ,KAAjC,CAJE;AAAA,EAAJ,CAKE,OAAOgG,KAAP,EAAc;AAAA,EATyD;AAAA,CAUzE,OAAO,SAASoK,cAAT,CAAwBnb,CAAxB,EAA2B6c,KAA3B,EAAkC;AAAA,EACvCrK,QAAA,CAASxS,CAAT,EADuC;AAAA,EAEvCqd,kBAAA,CAAmBR,KAAnB,EAFuC;AAAA,EAGvC,IAAIS,cAAJ;AAAA,GAAoBC,MAAA,CAAOtM,IAAP,CAAYjR,CAAZ,EAAe6c,KAAf,EAApB;AAAA;AAAA,GACK7c,CAAA,CAAEwd,SAAF,GAAcX,KAAd,CAJkC;AAAA,EAKvC,OAAO7c,CAAP,CALuC;AAAA,EAAzC,CAVyE;AAAA,CAAZ,EAApB,GAiBrCgQ,SAjBqC,CAA3C,C;;;;;;ACRA,IAAI+B,QAAA,GAAW3D,mBAAA,CAAQ,EAAR,CAAf;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,IAAI,CAAC4B,QAAA,CAAS5B,EAAT,CAAD,IAAiBA,EAAA,KAAO,IAA5B,EAAkC;AAAA,EAChC,MAAM2B,SAAA,CAAU,eAAelI,MAAA,CAAOuG,EAAP,CAAf,GAA4B,iBAAtC,CAAN,CADgC;AAAA,EADL;AAAA,CAG3B,OAAOA,EAAP,CAH2B;AAAA,CAA/B,C;;;;;;ACFA,IAAIzB,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR;AACA,IAAIqP,OAAA,GAAUrP,mBAAA,CAAQ,EAAR,CAAd,CADA;AAEA,IAAIsP,cAAA,GAAiBtP,mBAAA,CAAQ,EAAR,CAArB,CAFA;AAMAM,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,QAAV;AAAA,CAAoBG,IAAA,EAAM,IAA1B;AAAA,CAAF,EAAoC;AAAA,CAClCkI,WAAA,EAAa,SAASA,WAAT,CAAqBzgB,QAArB,EAA+B;AAAA,EAC1C,IAAIrD,GAAA,GAAM,EAAV,CAD0C;AAAA,EAE1C6pB,OAAA,CAAQxmB,QAAR,EAAkB,UAAU0mB,CAAV,EAAa7R,CAAb,EAAgB;AAAA,GAChC4R,cAAA,CAAe9pB,GAAf,EAAoB+pB,CAApB,EAAuB7R,CAAvB,EADgC;AAAA,GAAlC,EAEG,EAAE8R,UAAA,EAAY,IAAd,EAFH,EAF0C;AAAA,EAK1C,OAAOhqB,GAAP,CAL0C;AAAA,EADV;AAAA,CAApC,E;;;;;;ACNA,IAAI4e,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf;AACA,IAAIyP,qBAAA,GAAwBzP,mBAAA,CAAQ,EAAR,CAA5B,CADA;AAEA,IAAI6H,QAAA,GAAW7H,mBAAA,CAAQ,EAAR,CAAf,CAFA;AAGA,IAAI0P,IAAA,GAAO1P,mBAAA,CAAQ,EAAR,CAAX,CAHA;AAIA,IAAI2P,iBAAA,GAAoB3P,mBAAA,CAAQ,EAAR,CAAxB,CAJA;AAKA,IAAI4P,aAAA,GAAgB5P,mBAAA,CAAQ,EAAR,CAApB,CALA;AAOA,IAAI6P,MAAA,GAAS,UAAUC,OAAV,EAAmBzoB,MAAnB,EAA2B;AAAA,CACtC,KAAKyoB,OAAL,GAAeA,OAAf,CADsC;AAAA,CAEtC,KAAKzoB,MAAL,GAAcA,MAAd,CAFsC;AAAA,CAAxC,CAPA;AAYAzC,MAAA,CAAOmB,OAAP,GAAiB,UAAU8C,QAAV,EAAoBknB,eAApB,EAAqCjP,OAArC,EAA8C;AAAA,CAC7D,IAAIkP,IAAA,GAAOlP,OAAA,IAAWA,OAAA,CAAQkP,IAA9B,CAD6D;AAAA,CAE7D,IAAIR,UAAA,GAAa,CAAC,CAAE,CAAA1O,OAAA,IAAWA,OAAA,CAAQ0O,UAAnB,CAApB,CAF6D;AAAA,CAG7D,IAAIS,WAAA,GAAc,CAAC,CAAE,CAAAnP,OAAA,IAAWA,OAAA,CAAQmP,WAAnB,CAArB,CAH6D;AAAA,CAI7D,IAAIC,WAAA,GAAc,CAAC,CAAE,CAAApP,OAAA,IAAWA,OAAA,CAAQoP,WAAnB,CAArB,CAJ6D;AAAA,CAK7D,IAAIhqB,EAAA,GAAKwpB,IAAA,CAAKK,eAAL,EAAsBC,IAAtB,EAA4B,IAAIR,UAAJ,GAAiBU,WAA7C,CAAT,CAL6D;AAAA,CAM7D,IAAIpmB,QAAJ,EAAcqmB,MAAd,EAAsB/H,KAAtB,EAA6B9M,MAA7B,EAAqCjU,MAArC,EAA6CsB,IAA7C,EAAmDynB,IAAnD,CAN6D;AAAA,CAQ7D,IAAIpnB,IAAA,GAAO,UAAUqnB,SAAV,EAAqB;AAAA,EAC9B,IAAIvmB,QAAJ;AAAA,GAAc8lB,aAAA,CAAc9lB,QAAd,EADgB;AAAA,EAE9B,OAAO,IAAI+lB,MAAJ,CAAW,IAAX,EAAiBQ,SAAjB,CAAP,CAF8B;AAAA,EAAhC,CAR6D;AAAA,CAa7D,IAAIC,MAAA,GAAS,UAAUlrB,KAAV,EAAiB;AAAA,EAC5B,IAAIoqB,UAAJ,EAAgB;AAAA,GACdpL,QAAA,CAAShf,KAAT,EADc;AAAA,GAEd,OAAO8qB,WAAA,GAAchqB,EAAA,CAAGd,KAAA,CAAM,CAAN,CAAH,EAAaA,KAAA,CAAM,CAAN,CAAb,EAAuB4D,IAAvB,CAAd,GAA6C9C,EAAA,CAAGd,KAAA,CAAM,CAAN,CAAH,EAAaA,KAAA,CAAM,CAAN,CAAb,CAApD,CAFc;AAAA,GADY;AAAA,EAI1B,OAAO8qB,WAAA,GAAchqB,EAAA,CAAGd,KAAH,EAAU4D,IAAV,CAAd,GAAgC9C,EAAA,CAAGd,KAAH,CAAvC,CAJ0B;AAAA,EAA9B,CAb6D;AAAA,CAoB7D,IAAI6qB,WAAJ,EAAiB;AAAA,EACfnmB,QAAA,GAAWjB,QAAX,CADe;AAAA,EAAjB,MAEO;AAAA,EACLsnB,MAAA,GAASR,iBAAA,CAAkB9mB,QAAlB,CAAT,CADK;AAAA,EAEL,IAAI,OAAOsnB,MAAP,IAAiB,UAArB;AAAA,GAAiC,MAAMzM,SAAA,CAAU,wBAAV,CAAN,CAF5B;AAAA,EAIL,IAAI+L,qBAAA,CAAsBU,MAAtB,CAAJ,EAAmC;AAAA,GACjC,KAAK/H,KAAA,GAAQ,CAAR,EAAW9M,MAAA,GAASuM,QAAA,CAAShf,QAAA,CAASyS,MAAlB,CAAzB,EAAoDA,MAAA,GAAS8M,KAA7D,EAAoEA,KAAA,EAApE,EAA6E;AAAA,IAC3E/gB,MAAA,GAASipB,MAAA,CAAOznB,QAAA,CAASuf,KAAT,CAAP,CAAT,CAD2E;AAAA,IAE3E,IAAI/gB,MAAA,IAAUA,MAAA,YAAkBwoB,MAAhC;AAAA,KAAwC,OAAOxoB,MAAP,CAFmC;AAAA,IAD5C;AAAA,GAI/B,OAAO,IAAIwoB,MAAJ,CAAW,KAAX,CAAP,CAJ+B;AAAA,GAJ9B;AAAA,EAUL/lB,QAAA,GAAWqmB,MAAA,CAAOtN,IAAP,CAAYha,QAAZ,CAAX,CAVK;AAAA,EAtBsD;AAAA,CAmC7DF,IAAA,GAAOmB,QAAA,CAASnB,IAAhB,CAnC6D;AAAA,CAoC7D,OAAO,CAAE,CAAAynB,IAAA,GAAOznB,IAAA,CAAKka,IAAL,CAAU/Y,QAAV,CAAP,CAAD,CAA6B1B,IAArC,EAA2C;AAAA,EACzC,IAAI;AAAA,GACFf,MAAA,GAASipB,MAAA,CAAOF,IAAA,CAAKhrB,KAAZ,CAAT,CADE;AAAA,GAAJ,CAEE,OAAOud,KAAP,EAAc;AAAA,GACdiN,aAAA,CAAc9lB,QAAd,EADc;AAAA,GAEd,MAAM6Y,KAAN,CAFc;AAAA,GAHyB;AAAA,EAOzC,IAAI,OAAOtb,MAAP,IAAiB,QAAjB,IAA6BA,MAA7B,IAAuCA,MAAA,YAAkBwoB,MAA7D;AAAA,GAAqE,OAAOxoB,MAAP,CAP5B;AAAA,EApCkB;AAAA,CA4C3D,OAAO,IAAIwoB,MAAJ,CAAW,KAAX,CAAP,CA5C2D;AAAA,CAA/D,C;;;;;;ACZA,IAAI9F,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB;AACA,IAAIwJ,SAAA,GAAYxJ,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAGA,IAAImN,QAAA,GAAWpD,eAAA,CAAgB,UAAhB,CAAf,CAHA;AAIA,IAAIE,cAAA,GAAiBtN,KAAA,CAAM8E,SAA3B,CAJA;AAOA7c,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,OAAOA,EAAA,KAAOH,SAAP,IAAqB,CAAA4H,SAAA,CAAU7M,KAAV,KAAoBoF,EAApB,IAA0BkI,cAAA,CAAekD,QAAf,MAA6BpL,EAAvD,CAA5B,CAD6B;AAAA,CAA/B,C;;;;;;ACPA,IAAIqF,SAAA,GAAYpH,mBAAA,CAAQ,EAAR,CAAhB;AAGApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUG,EAAV,EAAc8pB,IAAd,EAAoB1U,MAApB,EAA4B;AAAA,CAC3C8L,SAAA,CAAUlhB,EAAV,EAD2C;AAAA,CAE3C,IAAI8pB,IAAA,KAASpO,SAAb;AAAA,EAAwB,OAAO1b,EAAP,CAFmB;AAAA,CAG3C,QAAQoV,MAAR;AAAA,CACE,KAAK,CAAL;AAAA,EAAQ,OAAO,YAAY;AAAA,GACzB,OAAOpV,EAAA,CAAG2c,IAAH,CAAQmN,IAAR,CAAP,CADyB;AAAA,GAAnB,CADV;AAAA,CAIE,KAAK,CAAL;AAAA,EAAQ,OAAO,UAAUpS,CAAV,EAAa;AAAA,GAC1B,OAAO1X,EAAA,CAAG2c,IAAH,CAAQmN,IAAR,EAAcpS,CAAd,CAAP,CAD0B;AAAA,GAApB,CAJV;AAAA,CAOE,KAAK,CAAL;AAAA,EAAQ,OAAO,UAAUA,CAAV,EAAaC,CAAb,EAAgB;AAAA,GAC7B,OAAO3X,EAAA,CAAG2c,IAAH,CAAQmN,IAAR,EAAcpS,CAAd,EAAiBC,CAAjB,CAAP,CAD6B;AAAA,GAAvB,CAPV;AAAA,CAUE,KAAK,CAAL;AAAA,EAAQ,OAAO,UAAUD,CAAV,EAAaC,CAAb,EAAgBC,CAAhB,EAAmB;AAAA,GAChC,OAAO5X,EAAA,CAAG2c,IAAH,CAAQmN,IAAR,EAAcpS,CAAd,EAAiBC,CAAjB,EAAoBC,CAApB,CAAP,CADgC;AAAA,GAA1B,CAVV;AAAA,EAH2C;AAAA,CAiB3C,OAAO,YAAyB;AAAA,EAC9B,OAAO5X,EAAA,CAAGqqB,KAAH,CAASP,IAAT,EAAezI,SAAf,CAAP,CAD8B;AAAA,EAAhC,CAjB2C;AAAA,CAA7C,C;;;;;;ACHA3iB,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,IAAI,OAAOA,EAAP,IAAa,UAAjB,EAA6B;AAAA,EAC3B,MAAM2B,SAAA,CAAUlI,MAAA,CAAOuG,EAAP,IAAa,oBAAvB,CAAN,CAD2B;AAAA,EADA;AAAA,CAG3B,OAAOA,EAAP,CAH2B;AAAA,CAA/B,C;;;;;;ACAA,IAAIwB,OAAA,GAAUvD,mBAAA,CAAQ,EAAR,CAAd;AACA,IAAIwJ,SAAA,GAAYxJ,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAEA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CAFA;AAIA,IAAImN,QAAA,GAAWpD,eAAA,CAAgB,UAAhB,CAAf,CAJA;AAMAnlB,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAc;AAAA,CAC7B,IAAIA,EAAA,IAAMH,SAAV;AAAA,EAAqB,OAAOG,EAAA,CAAGoL,QAAH,KACvBpL,EAAA,CAAG,YAAH,CADuB,IAEvByH,SAAA,CAAUjG,OAAA,CAAQxB,EAAR,CAAV,CAFgB,CADQ;AAAA,CAA/B,C;;;;;;ACNA,IAAIyO,qBAAA,GAAwBxQ,mBAAA,CAAQ,EAAR,CAA5B;AACA,IAAIyQ,UAAA,GAAazQ,mBAAA,CAAQ,EAAR,CAAjB,CADA;AAEA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CAFA;AAIA,IAAIkO,aAAA,GAAgBnE,eAAA,CAAgB,aAAhB,CAApB,CAJA;AAMA,IAAI2G,iBAAA,GAAoBD,UAAA,CAAW,YAAY;AAAA,CAAE,OAAOlJ,SAAP,CAAF;AAAA,CAAZ,EAAX,KAAmD,WAA3E,CANA;AASA,IAAIoJ,MAAA,GAAS,UAAU5O,EAAV,EAAcrZ,GAAd,EAAmB;AAAA,CAC9B,IAAI;AAAA,EACF,OAAOqZ,EAAA,CAAGrZ,GAAH,CAAP,CADE;AAAA,EAAJ,CAEE,OAAOia,KAAP,EAAc;AAAA,EAHc;AAAA,CAAhC,CATA;AAgBA/d,MAAA,CAAOmB,OAAP,GAAiByqB,qBAAA,GAAwBC,UAAxB,GAAqC,UAAU1O,EAAV,EAAc;AAAA,CAClE,IAAInQ,CAAJ,EAAOgf,GAAP,EAAYvpB,MAAZ,CADkE;AAAA,CAElE,OAAO0a,EAAA,KAAOH,SAAP,GAAmB,WAAnB,GAAiCG,EAAA,KAAO,IAAP,GAAc,MAAd,GAEpC,OAAQ,CAAA6O,GAAA,GAAMD,MAAA,CAAO/e,CAAA,GAAI5O,MAAA,CAAO+e,EAAP,CAAX,EAAuBmM,aAAvB,CAAN,CAAR,IAAwD,QAAxD,GAAmE0C,GAAnE,GAEAF,iBAAA,GAAoBD,UAAA,CAAW7e,CAAX,CAApB,GAEC,CAAAvK,MAAA,GAASopB,UAAA,CAAW7e,CAAX,CAAT,CAAD,IAA4B,QAA5B,IAAwC,OAAOA,CAAA,CAAEif,MAAT,IAAmB,UAA3D,GAAwE,WAAxE,GAAsFxpB,MAN1F,CAFkE;AAAA,CAApE,C;;;;;;AChBA,IAAI0iB,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB;AAEA,IAAIkO,aAAA,GAAgBnE,eAAA,CAAgB,aAAhB,CAApB,CAFA;AAGA,IAAI7D,IAAA,GAAO,EAAX,CAHA;AAKAA,IAAA,CAAKgI,aAAL,IAAsB,GAAtB,CALA;AAOAtpB,MAAA,CAAOmB,OAAP,GAAiByV,MAAA,CAAO0K,IAAP,MAAiB,YAAlC,C;;;;;;ACPA,IAAI9B,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,UAAU+D,QAAV,EAAoB;AAAA,CACnC,IAAIgnB,YAAA,GAAehnB,QAAA,CAAS,QAAT,CAAnB,CADmC;AAAA,CAEnC,IAAIgnB,YAAA,KAAiBlP,SAArB,EAAgC;AAAA,EAC9B,OAAOwC,QAAA,CAAS0M,YAAA,CAAajO,IAAb,CAAkB/Y,QAAlB,CAAT,EAAsC1E,KAA7C,CAD8B;AAAA,EAFG;AAAA,CAArC,C;;;;;;;ACFa;AACb,IAAIkd,WAAA,GAActC,mBAAA,CAAQ,EAAR,CAAlB,CADA;AAEA,IAAIkE,oBAAA,GAAuBlE,mBAAA,CAAQ,EAAR,CAA3B,CAFA;AAGA,IAAIoC,wBAAA,GAA2BpC,mBAAA,CAAQ,EAAR,CAA/B,CAHA;AAKApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUoe,MAAV,EAAkBzb,GAAlB,EAAuBtD,KAAvB,EAA8B;AAAA,CAC7C,IAAI2rB,WAAA,GAAczO,WAAA,CAAY5Z,GAAZ,CAAlB,CAD6C;AAAA,CAE7C,IAAIqoB,WAAA,IAAe5M,MAAnB;AAAA,EAA2BD,oBAAA,CAAqBtB,CAArB,CAAuBuB,MAAvB,EAA+B4M,WAA/B,EAA4C3O,wBAAA,CAAyB,CAAzB,EAA4Bhd,KAA5B,CAA5C,EAA3B;AAAA;AAAA,EACK+e,MAAA,CAAO4M,WAAP,IAAsB3rB,KAAtB,CAHwC;AAAA,CAA/C,C;;;;;;ACLA4a,mBAAA,CAAQ,EAAR;AACAA,mBAAA,CAAQ,EAAR,EADA;AAEAA,mBAAA,CAAQ,EAAR,EAFA;AAGAA,mBAAA,CAAQ,GAAR,EAHA;AAIAA,mBAAA,CAAQ,GAAR,EAJA;AAKAA,mBAAA,CAAQ,GAAR,EALA;AAMAA,mBAAA,CAAQ,GAAR,EANA;AAOAA,mBAAA,CAAQ,GAAR,EAPA;AAQA,IAAImH,IAAA,GAAOnH,mBAAA,CAAQ,EAAR,CAAX,CARA;AAUApb,MAAA,CAAOmB,OAAP,GAAiBohB,IAAA,CAAK6J,OAAtB,C;;;;;;;ACVa;AACb,IAAI1Q,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAI8M,cAAA,GAAiB9M,mBAAA,CAAQ,EAAR,CAArB,CAFA;AAGA,IAAI+M,cAAA,GAAiB/M,mBAAA,CAAQ,EAAR,CAArB,CAHA;AAIA,IAAI5hB,MAAA,GAAS4hB,mBAAA,CAAQ,EAAR,CAAb,CAJA;AAKA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CALA;AAMA,IAAIoC,wBAAA,GAA2BpC,mBAAA,CAAQ,EAAR,CAA/B,CANA;AAOA,IAAIqP,OAAA,GAAUrP,mBAAA,CAAQ,EAAR,CAAd,CAPA;AASA,IAAIiR,eAAA,GAAkB,SAASC,cAAT,CAAwBC,MAAxB,EAAgCC,OAAhC,EAAyC;AAAA,CAC7D,IAAIpB,IAAA,GAAO,IAAX,CAD6D;AAAA,CAE7D,IAAI,CAAE,CAAAA,IAAA,YAAgBiB,eAAhB,CAAN;AAAA,EAAwC,OAAO,IAAIA,eAAJ,CAAoBE,MAApB,EAA4BC,OAA5B,CAAP,CAFqB;AAAA,CAG7D,IAAIrE,cAAJ,EAAoB;AAAA,EAElBiD,IAAA,GAAOjD,cAAA,CAAe,IAAIsE,KAAJ,CAAUzP,SAAV,CAAf,EAAqCkL,cAAA,CAAekD,IAAf,CAArC,CAAP,CAFkB;AAAA,EAHyC;AAAA,CAO7D,IAAIoB,OAAA,KAAYxP,SAAhB;AAAA,EAA2BnB,2BAAA,CAA4BuP,IAA5B,EAAkC,SAAlC,EAA6CxU,MAAA,CAAO4V,OAAP,CAA7C,EAPkC;AAAA,CAQ7D,IAAIE,WAAA,GAAc,EAAlB,CAR6D;AAAA,CAS7DjC,OAAA,CAAQ8B,MAAR,EAAgBG,WAAA,CAAYjL,IAA5B,EAAkC,EAAE2J,IAAA,EAAMsB,WAAR,EAAlC,EAT6D;AAAA,CAU7D7Q,2BAAA,CAA4BuP,IAA5B,EAAkC,QAAlC,EAA4CsB,WAA5C,EAV6D;AAAA,CAW7D,OAAOtB,IAAP,CAX6D;AAAA,CAA/D,CATA;AAuBAiB,eAAA,CAAgBxP,SAAhB,GAA4BrjB,MAAA,CAAOizB,KAAA,CAAM5P,SAAb,EAAwB;AAAA,CAClDvjB,WAAA,EAAakkB,wBAAA,CAAyB,CAAzB,EAA4B6O,eAA5B,CADqC;AAAA,CAElDG,OAAA,EAAShP,wBAAA,CAAyB,CAAzB,EAA4B,EAA5B,CAFyC;AAAA,CAGlDlf,IAAA,EAAMkf,wBAAA,CAAyB,CAAzB,EAA4B,gBAA5B,CAH4C;AAAA,CAAxB,CAA5B,CAvBA;AA+BA9B,CAAA,CAAE,EAAEC,MAAA,EAAQ,IAAV,EAAF,EAAoB,EAClB2Q,cAAA,EAAgBD,eADE,EAApB,E;;;;;;AC/BA,IAAIT,qBAAA,GAAwBxQ,mBAAA,CAAQ,EAAR,CAA5B;AACA,IAAIU,QAAA,GAAWV,mBAAA,CAAQ,EAAR,CAAf,CADA;AAEA,IAAI1c,QAAA,GAAW0c,mBAAA,CAAQ,EAAR,CAAf,CAFA;AAMA,IAAI,CAACwQ,qBAAL,EAA4B;AAAA,CAC1B9P,QAAA,CAAS1d,MAAA,CAAOye,SAAhB,EAA2B,UAA3B,EAAuCne,QAAvC,EAAiD,EAAEuhB,MAAA,EAAQ,IAAV,EAAjD,EAD0B;AAAA,C;;;;;;;ACNf;AACb,IAAI2L,qBAAA,GAAwBxQ,mBAAA,CAAQ,EAAR,CAA5B,CADA;AAEA,IAAIuD,OAAA,GAAUvD,mBAAA,CAAQ,EAAR,CAAd,CAFA;AAMApb,MAAA,CAAOmB,OAAP,GAAiByqB,qBAAA,GAAwB,GAAGltB,QAA3B,GAAsC,SAASA,QAAT,GAAoB;AAAA,CACzE,OAAO,aAAaigB,OAAA,CAAQ,IAAR,CAAb,GAA6B,GAApC,CADyE;AAAA,CAA3E,C;;;;;;;ACNa;AACb,IAAIjD,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAIoG,OAAA,GAAUpG,mBAAA,CAAQ,EAAR,CAAd,CAFA;AAGA,IAAIO,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb,CAHA;AAIA,IAAI8G,UAAA,GAAa9G,mBAAA,CAAQ,EAAR,CAAjB,CAJA;AAKA,IAAIuR,aAAA,GAAgBvR,mBAAA,CAAQ,EAAR,CAApB,CALA;AAMA,IAAIU,QAAA,GAAWV,mBAAA,CAAQ,EAAR,CAAf,CANA;AAOA,IAAIwR,WAAA,GAAcxR,mBAAA,CAAQ,EAAR,CAAlB,CAPA;AAQA,IAAIgN,cAAA,GAAiBhN,mBAAA,CAAQ,EAAR,CAArB,CARA;AASA,IAAIyR,UAAA,GAAazR,mBAAA,CAAQ,EAAR,CAAjB,CATA;AAUA,IAAI2D,QAAA,GAAW3D,mBAAA,CAAQ,EAAR,CAAf,CAVA;AAWA,IAAIoH,SAAA,GAAYpH,mBAAA,CAAQ,EAAR,CAAhB,CAXA;AAYA,IAAI0R,UAAA,GAAa1R,mBAAA,CAAQ,EAAR,CAAjB,CAZA;AAaA,IAAIuE,aAAA,GAAgBvE,mBAAA,CAAQ,EAAR,CAApB,CAbA;AAcA,IAAIqP,OAAA,GAAUrP,mBAAA,CAAQ,EAAR,CAAd,CAdA;AAeA,IAAI2R,2BAAA,GAA8B3R,mBAAA,CAAQ,EAAR,CAAlC,CAfA;AAgBA,IAAI4R,kBAAA,GAAqB5R,mBAAA,CAAQ,EAAR,CAAzB,CAhBA;AAiBA,IAAI6R,IAAA,GAAO7R,2BAAX,CAjBA;AAkBA,IAAI8R,SAAA,GAAY9R,mBAAA,CAAQ,EAAR,CAAhB,CAlBA;AAmBA,IAAI+R,cAAA,GAAiB/R,mBAAA,CAAQ,GAAR,CAArB,CAnBA;AAoBA,IAAIgS,gBAAA,GAAmBhS,mBAAA,CAAQ,GAAR,CAAvB,CApBA;AAqBA,IAAIiS,0BAAA,GAA6BjS,mBAAA,CAAQ,GAAR,CAAjC,CArBA;AAsBA,IAAIkS,OAAA,GAAUlS,mBAAA,CAAQ,GAAR,CAAd,CAtBA;AAuBA,IAAIwE,mBAAA,GAAsBxE,mBAAA,CAAQ,EAAR,CAA1B,CAvBA;AAwBA,IAAIa,QAAA,GAAWb,mBAAA,CAAQ,EAAR,CAAf,CAxBA;AAyBA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CAzBA;AA0BA,IAAIwK,OAAA,GAAUxK,mBAAA,CAAQ,EAAR,CAAd,CA1BA;AA2BA,IAAIyK,UAAA,GAAazK,mBAAA,CAAQ,EAAR,CAAjB,CA3BA;AA6BA,IAAImS,OAAA,GAAUpI,eAAA,CAAgB,SAAhB,CAAd,CA7BA;AA8BA,IAAIqI,OAAA,GAAU,SAAd,CA9BA;AA+BA,IAAI3N,gBAAA,GAAmBD,mBAAA,CAAoBpF,GAA3C,CA/BA;AAgCA,IAAIuK,gBAAA,GAAmBnF,mBAAA,CAAoBiB,GAA3C,CAhCA;AAiCA,IAAI4M,uBAAA,GAA0B7N,mBAAA,CAAoBkB,SAApB,CAA8B0M,OAA9B,CAA9B,CAjCA;AAkCA,IAAIE,kBAAA,GAAqBf,aAAzB,CAlCA;AAmCA,IAAI7N,SAAA,GAAYnD,MAAA,CAAOmD,SAAvB,CAnCA;AAoCA,IAAInkB,QAAA,GAAWghB,MAAA,CAAOhhB,QAAtB,CApCA;AAqCA,IAAI8gB,OAAA,GAAUE,MAAA,CAAOF,OAArB,CArCA;AAsCA,IAAIkS,MAAA,GAASzL,UAAA,CAAW,OAAX,CAAb,CAtCA;AAuCA,IAAI0L,oBAAA,GAAuBP,0BAAA,CAA2BrP,CAAtD,CAvCA;AAwCA,IAAI6P,2BAAA,GAA8BD,oBAAlC,CAxCA;AAyCA,IAAIE,cAAA,GAAiB,CAAC,CAAE,CAAAnzB,QAAA,IAAYA,QAAA,CAASozB,WAArB,IAAoCpS,MAAA,CAAOqS,aAA3C,CAAxB,CAzCA;AA0CA,IAAIC,sBAAA,GAAyB,OAAOC,qBAAP,IAAgC,UAA7D,CA1CA;AA2CA,IAAIC,mBAAA,GAAsB,oBAA1B,CA3CA;AA4CA,IAAIC,iBAAA,GAAoB,kBAAxB,CA5CA;AA6CA,IAAIC,OAAA,GAAU,CAAd,CA7CA;AA8CA,IAAIC,SAAA,GAAY,CAAhB,CA9CA;AA+CA,IAAInlB,QAAA,GAAW,CAAf,CA/CA;AAgDA,IAAIolB,OAAA,GAAU,CAAd,CAhDA;AAiDA,IAAIC,SAAA,GAAY,CAAhB,CAjDA;AAkDA,IAAIC,QAAJ,EAAcC,oBAAd,EAAoCC,cAApC,EAAoDC,UAApD,CAlDA;AAoDA,IAAInS,MAAA,GAASR,QAAA,CAASuR,OAAT,EAAkB,YAAY;AAAA,CACzC,IAAIqB,sBAAA,GAAyBlP,aAAA,CAAc+N,kBAAd,MAAsC9W,MAAA,CAAO8W,kBAAP,CAAnE,CADyC;AAAA,CAEzC,IAAI,CAACmB,sBAAL,EAA6B;AAAA,EAI3B,IAAIhJ,UAAA,KAAe,EAAnB;AAAA,GAAuB,OAAO,IAAP,CAJI;AAAA,EAM3B,IAAI,CAACD,OAAD,IAAY,CAACqI,sBAAjB;AAAA,GAAyC,OAAO,IAAP,CANd;AAAA,EAFY;AAAA,CAWzC,IAAIzM,OAAA,IAAW,CAACkM,kBAAA,CAAmB7Q,SAAnB,CAA6B,SAA7B,CAAhB;AAAA,EAAyD,OAAO,IAAP,CAXhB;AAAA,CAezC,IAAIgJ,UAAA,IAAc,EAAd,IAAoB,cAAcvE,IAAd,CAAmBoM,kBAAnB,CAAxB;AAAA,EAAgE,OAAO,KAAP,CAfvB;AAAA,CAiBzC,IAAIoB,OAAA,GAAUpB,kBAAA,CAAmBzyB,OAAnB,CAA2B,CAA3B,CAAd,CAjByC;AAAA,CAkBzC,IAAI8zB,WAAA,GAAc,UAAU3Q,IAAV,EAAgB;AAAA,EAChCA,IAAA,CAAK,YAAY;AAAA,GAAjB,EAAkC,YAAY;AAAA,GAA9C,EADgC;AAAA,EAAlC,CAlByC;AAAA,CAqBzC,IAAI9kB,WAAA,GAAcw1B,OAAA,CAAQx1B,WAAR,GAAsB,EAAxC,CArByC;AAAA,CAsBzCA,WAAA,CAAYi0B,OAAZ,IAAuBwB,WAAvB,CAtByC;AAAA,CAuBzC,OAAO,CAAE,CAAAD,OAAA,CAAQE,IAAR,CAAa,YAAY;AAAA,EAAzB,aAAqDD,WAArD,CAAT,CAvByC;AAAA,CAA9B,CAAb,CApDA;AA8EA,IAAIE,mBAAA,GAAsBxS,MAAA,IAAU,CAACsQ,2BAAA,CAA4B,UAAU9oB,QAAV,EAAoB;AAAA,CACnFypB,kBAAA,CAAmBwB,GAAnB,CAAuBjrB,QAAvB,EAAiC,OAAjC,EAA0C,YAAY;AAAA,EAAtD,EADmF;AAAA,CAAhD,CAArC,CA9EA;AAmFA,IAAIkrB,UAAA,GAAa,UAAUhS,EAAV,EAAc;AAAA,CAC7B,IAAI6R,IAAJ,CAD6B;AAAA,CAE7B,OAAOjQ,QAAA,CAAS5B,EAAT,KAAgB,OAAQ,CAAA6R,IAAA,GAAO7R,EAAA,CAAG6R,IAAV,CAAR,IAA2B,UAA3C,GAAwDA,IAAxD,GAA+D,KAAtE,CAF6B;AAAA,CAA/B,CAnFA;AAwFA,IAAII,MAAA,GAAS,UAAUlsB,KAAV,EAAiBmsB,QAAjB,EAA2B;AAAA,CACtC,IAAInsB,KAAA,CAAMosB,QAAV;AAAA,EAAoB,OADkB;AAAA,CAEtCpsB,KAAA,CAAMosB,QAAN,GAAiB,IAAjB,CAFsC;AAAA,CAGtC,IAAIC,KAAA,GAAQrsB,KAAA,CAAMssB,SAAlB,CAHsC;AAAA,CAItCtC,SAAA,CAAU,YAAY;AAAA,EACpB,IAAI1sB,KAAA,GAAQ0C,KAAA,CAAM1C,KAAlB,CADoB;AAAA,EAEpB,IAAIivB,EAAA,GAAKvsB,KAAA,CAAMA,KAAN,IAAeorB,SAAxB,CAFoB;AAAA,EAGpB,IAAI9K,KAAA,GAAQ,CAAZ,CAHoB;AAAA,EAKpB,OAAO+L,KAAA,CAAM7Y,MAAN,GAAe8M,KAAtB,EAA6B;AAAA,GAC3B,IAAIkM,QAAA,GAAWH,KAAA,CAAM/L,KAAA,EAAN,CAAf,CAD2B;AAAA,GAE3B,IAAImM,OAAA,GAAUF,EAAA,GAAKC,QAAA,CAASD,EAAd,GAAmBC,QAAA,CAASE,IAA1C,CAF2B;AAAA,GAG3B,IAAI30B,OAAA,GAAUy0B,QAAA,CAASz0B,OAAvB,CAH2B;AAAA,GAI3B,IAAIC,MAAA,GAASw0B,QAAA,CAASx0B,MAAtB,CAJ2B;AAAA,GAK3B,IAAI2sB,MAAA,GAAS6H,QAAA,CAAS7H,MAAtB,CAL2B;AAAA,GAM3B,IAAIplB,MAAJ,EAAYusB,IAAZ,EAAkBa,MAAlB,CAN2B;AAAA,GAO3B,IAAI;AAAA,IACF,IAAIF,OAAJ,EAAa;AAAA,KACX,IAAI,CAACF,EAAL,EAAS;AAAA,MACP,IAAIvsB,KAAA,CAAM4sB,SAAN,KAAoBtB,SAAxB;AAAA,OAAmCuB,iBAAA,CAAkB7sB,KAAlB,EAD5B;AAAA,MAEPA,KAAA,CAAM4sB,SAAN,GAAkBvB,OAAlB,CAFO;AAAA,MADE;AAAA,KAKX,IAAIoB,OAAA,KAAY,IAAhB;AAAA,MAAsBltB,MAAA,GAASjC,KAAT,CAAtB;AAAA,UACK;AAAA,MACH,IAAIqnB,MAAJ;AAAA,OAAYA,MAAA,CAAOmI,KAAP,GADT;AAAA,MAEHvtB,MAAA,GAASktB,OAAA,CAAQnvB,KAAR,CAAT,CAFG;AAAA,MAGH,IAAIqnB,MAAJ,EAAY;AAAA,OACVA,MAAA,CAAOoI,IAAP,GADU;AAAA,OAEVJ,MAAA,GAAS,IAAT,CAFU;AAAA,OAHT;AAAA,MANM;AAAA,KAcX,IAAIptB,MAAA,KAAWitB,QAAA,CAASZ,OAAxB,EAAiC;AAAA,MAC/B5zB,MAAA,CAAO4jB,SAAA,CAAU,qBAAV,CAAP,EAD+B;AAAA,MAAjC,MAEO,IAAIkQ,IAAA,GAAOG,UAAA,CAAW1sB,MAAX,CAAX,EAA+B;AAAA,MACpCusB,IAAA,CAAK/Q,IAAL,CAAUxb,MAAV,EAAkBxH,OAAlB,EAA2BC,MAA3B,EADoC;AAAA,MAA/B;AAAA,MAEAD,OAAA,CAAQwH,MAAR,EAlBI;AAAA,KAAb;AAAA,KAmBOvH,MAAA,CAAOsF,KAAP,EApBL;AAAA,IAAJ,CAqBE,OAAOud,KAAP,EAAc;AAAA,IACd,IAAI8J,MAAA,IAAU,CAACgI,MAAf;AAAA,KAAuBhI,MAAA,CAAOoI,IAAP,GADT;AAAA,IAEd/0B,MAAA,CAAO6iB,KAAP,EAFc;AAAA,IA5BW;AAAA,GALT;AAAA,EAsCpB7a,KAAA,CAAMssB,SAAN,GAAkB,EAAlB,CAtCoB;AAAA,EAuCpBtsB,KAAA,CAAMosB,QAAN,GAAiB,KAAjB,CAvCoB;AAAA,EAwCpB,IAAID,QAAA,IAAY,CAACnsB,KAAA,CAAM4sB,SAAvB;AAAA,GAAkCI,WAAA,CAAYhtB,KAAZ,EAxCd;AAAA,EAAtB,EAJsC;AAAA,CAAxC,CAxFA;AAwIA,IAAI8qB,aAAA,GAAgB,UAAU1vB,IAAV,EAAgBwwB,OAAhB,EAAyBv0B,MAAzB,EAAiC;AAAA,CACnD,IAAI41B,KAAJ,EAAWR,OAAX,CADmD;AAAA,CAEnD,IAAI7B,cAAJ,EAAoB;AAAA,EAClBqC,KAAA,GAAQx1B,QAAA,CAASozB,WAAT,CAAqB,OAArB,CAAR,CADkB;AAAA,EAElBoC,KAAA,CAAMrB,OAAN,GAAgBA,OAAhB,CAFkB;AAAA,EAGlBqB,KAAA,CAAM51B,MAAN,GAAeA,MAAf,CAHkB;AAAA,EAIlB41B,KAAA,CAAMC,SAAN,CAAgB9xB,IAAhB,EAAsB,KAAtB,EAA6B,IAA7B,EAJkB;AAAA,EAKlBqd,MAAA,CAAOqS,aAAP,CAAqBmC,KAArB,EALkB;AAAA,EAApB;AAAA,EAMOA,KAAA,GAAQ;AAAA,GAAErB,OAAA,EAASA,OAAX;AAAA,GAAoBv0B,MAAA,EAAQA,MAA5B;AAAA,GAAR,CAR4C;AAAA,CASnD,IAAI,CAAC0zB,sBAAD,IAA4B,CAAA0B,OAAA,GAAUhU,MAAA,CAAO,OAAOrd,IAAd,CAAV,CAAhC;AAAA,EAAgEqxB,OAAA,CAAQQ,KAAR,EAAhE;AAAA,MACK,IAAI7xB,IAAA,KAAS6vB,mBAAb;AAAA,EAAkCf,gBAAA,CAAiB,6BAAjB,EAAgD7yB,MAAhD,EAVY;AAAA,CAArD,CAxIA;AAqJA,IAAI21B,WAAA,GAAc,UAAUhtB,KAAV,EAAiB;AAAA,CACjC+pB,IAAA,CAAKhP,IAAL,CAAUtC,MAAV,EAAkB,YAAY;AAAA,EAC5B,IAAImT,OAAA,GAAU5rB,KAAA,CAAMke,MAApB,CAD4B;AAAA,EAE5B,IAAI5gB,KAAA,GAAQ0C,KAAA,CAAM1C,KAAlB,CAF4B;AAAA,EAG5B,IAAI6vB,YAAA,GAAeC,WAAA,CAAYptB,KAAZ,CAAnB,CAH4B;AAAA,EAI5B,IAAIT,MAAJ,CAJ4B;AAAA,EAK5B,IAAI4tB,YAAJ,EAAkB;AAAA,GAChB5tB,MAAA,GAAS6qB,OAAA,CAAQ,YAAY;AAAA,IAC3B,IAAI1H,OAAJ,EAAa;AAAA,KACXnK,OAAA,CAAQ8U,IAAR,CAAa,oBAAb,EAAmC/vB,KAAnC,EAA0CsuB,OAA1C,EADW;AAAA,KAAb;AAAA,KAEOd,aAAA,CAAcG,mBAAd,EAAmCW,OAAnC,EAA4CtuB,KAA5C,EAHoB;AAAA,IAApB,CAAT,CADgB;AAAA,GAOhB0C,KAAA,CAAM4sB,SAAN,GAAkBlK,OAAA,IAAW0K,WAAA,CAAYptB,KAAZ,CAAX,GAAgCsrB,SAAhC,GAA4CD,OAA9D,CAPgB;AAAA,GAQhB,IAAI9rB,MAAA,CAAOsb,KAAX;AAAA,IAAkB,MAAMtb,MAAA,CAAOjC,KAAb,CARF;AAAA,GALU;AAAA,EAA9B,EADiC;AAAA,CAAnC,CArJA;AAwKA,IAAI8vB,WAAA,GAAc,UAAUptB,KAAV,EAAiB;AAAA,CACjC,OAAOA,KAAA,CAAM4sB,SAAN,KAAoBvB,OAApB,IAA+B,CAACrrB,KAAA,CAAMstB,MAA7C,CADiC;AAAA,CAAnC,CAxKA;AA4KA,IAAIT,iBAAA,GAAoB,UAAU7sB,KAAV,EAAiB;AAAA,CACvC+pB,IAAA,CAAKhP,IAAL,CAAUtC,MAAV,EAAkB,YAAY;AAAA,EAC5B,IAAImT,OAAA,GAAU5rB,KAAA,CAAMke,MAApB,CAD4B;AAAA,EAE5B,IAAIwE,OAAJ,EAAa;AAAA,GACXnK,OAAA,CAAQ8U,IAAR,CAAa,kBAAb,EAAiCzB,OAAjC,EADW;AAAA,GAAb;AAAA,GAEOd,aAAA,CAAcI,iBAAd,EAAiCU,OAAjC,EAA0C5rB,KAAA,CAAM1C,KAAhD,EAJqB;AAAA,EAA9B,EADuC;AAAA,CAAzC,CA5KA;AAqLA,IAAIsqB,IAAA,GAAO,UAAUxpB,EAAV,EAAc4B,KAAd,EAAqButB,MAArB,EAA6B;AAAA,CACtC,OAAO,UAAUjwB,KAAV,EAAiB;AAAA,EACtBc,EAAA,CAAG4B,KAAH,EAAU1C,KAAV,EAAiBiwB,MAAjB,EADsB;AAAA,EAAxB,CADsC;AAAA,CAAxC,CArLA;AA2LA,IAAIC,cAAA,GAAiB,UAAUxtB,KAAV,EAAiB1C,KAAjB,EAAwBiwB,MAAxB,EAAgC;AAAA,CACnD,IAAIvtB,KAAA,CAAMM,IAAV;AAAA,EAAgB,OADmC;AAAA,CAEnDN,KAAA,CAAMM,IAAN,GAAa,IAAb,CAFmD;AAAA,CAGnD,IAAIitB,MAAJ;AAAA,EAAYvtB,KAAA,GAAQutB,MAAR,CAHuC;AAAA,CAInDvtB,KAAA,CAAM1C,KAAN,GAAcA,KAAd,CAJmD;AAAA,CAKnD0C,KAAA,CAAMA,KAAN,GAAciG,QAAd,CALmD;AAAA,CAMnDimB,MAAA,CAAOlsB,KAAP,EAAc,IAAd,EANmD;AAAA,CAArD,CA3LA;AAoMA,IAAIytB,eAAA,GAAkB,UAAUztB,KAAV,EAAiB1C,KAAjB,EAAwBiwB,MAAxB,EAAgC;AAAA,CACpD,IAAIvtB,KAAA,CAAMM,IAAV;AAAA,EAAgB,OADoC;AAAA,CAEpDN,KAAA,CAAMM,IAAN,GAAa,IAAb,CAFoD;AAAA,CAGpD,IAAIitB,MAAJ;AAAA,EAAYvtB,KAAA,GAAQutB,MAAR,CAHwC;AAAA,CAIpD,IAAI;AAAA,EACF,IAAIvtB,KAAA,CAAMke,MAAN,KAAiB5gB,KAArB;AAAA,GAA4B,MAAMse,SAAA,CAAU,kCAAV,CAAN,CAD1B;AAAA,EAEF,IAAIkQ,IAAA,GAAOG,UAAA,CAAW3uB,KAAX,CAAX,CAFE;AAAA,EAGF,IAAIwuB,IAAJ,EAAU;AAAA,GACR9B,SAAA,CAAU,YAAY;AAAA,IACpB,IAAI0D,OAAA,GAAU,EAAEptB,IAAA,EAAM,KAAR,EAAd,CADoB;AAAA,IAEpB,IAAI;AAAA,KACFwrB,IAAA,CAAK/Q,IAAL,CAAUzd,KAAV,EACEsqB,IAAA,CAAK6F,eAAL,EAAsBC,OAAtB,EAA+B1tB,KAA/B,CADF,EAEE4nB,IAAA,CAAK4F,cAAL,EAAqBE,OAArB,EAA8B1tB,KAA9B,CAFF,EADE;AAAA,KAAJ,CAKE,OAAO6a,KAAP,EAAc;AAAA,KACd2S,cAAA,CAAeE,OAAf,EAAwB7S,KAAxB,EAA+B7a,KAA/B,EADc;AAAA,KAPI;AAAA,IAAtB,EADQ;AAAA,GAAV,MAYO;AAAA,GACLA,KAAA,CAAM1C,KAAN,GAAcA,KAAd,CADK;AAAA,GAEL0C,KAAA,CAAMA,KAAN,GAAcorB,SAAd,CAFK;AAAA,GAGLc,MAAA,CAAOlsB,KAAP,EAAc,KAAd,EAHK;AAAA,GAfL;AAAA,EAAJ,CAoBE,OAAO6a,KAAP,EAAc;AAAA,EACd2S,cAAA,CAAe,EAAEltB,IAAA,EAAM,KAAR,EAAf,EAAgCua,KAAhC,EAAuC7a,KAAvC,EADc;AAAA,EAxBoC;AAAA,CAAtD,CApMA;AAkOA,IAAIuZ,MAAJ,EAAY;AAAA,CAEViR,kBAAA,GAAqB,SAAStB,OAAT,CAAiByE,QAAjB,EAA2B;AAAA,EAC9C/D,UAAA,CAAW,IAAX,EAAiBY,kBAAjB,EAAqCF,OAArC,EAD8C;AAAA,EAE9ChL,SAAA,CAAUqO,QAAV,EAF8C;AAAA,EAG9CpC,QAAA,CAASxQ,IAAT,CAAc,IAAd,EAH8C;AAAA,EAI9C,IAAI/a,KAAA,GAAQ2c,gBAAA,CAAiB,IAAjB,CAAZ,CAJ8C;AAAA,EAK9C,IAAI;AAAA,GACFgR,QAAA,CAAS/F,IAAA,CAAK6F,eAAL,EAAsBztB,KAAtB,CAAT,EAAuC4nB,IAAA,CAAK4F,cAAL,EAAqBxtB,KAArB,CAAvC,EADE;AAAA,GAAJ,CAEE,OAAO6a,KAAP,EAAc;AAAA,GACd2S,cAAA,CAAextB,KAAf,EAAsB6a,KAAtB,EADc;AAAA,GAP8B;AAAA,EAAhD,CAFU;AAAA,CAcV0Q,QAAA,GAAW,SAASrC,OAAT,CAAiByE,QAAjB,EAA2B;AAAA,EACpC9L,gBAAA,CAAiB,IAAjB,EAAuB;AAAA,GACrB3jB,IAAA,EAAMosB,OADe;AAAA,GAErBhqB,IAAA,EAAM,KAFe;AAAA,GAGrB8rB,QAAA,EAAU,KAHW;AAAA,GAIrBkB,MAAA,EAAQ,KAJa;AAAA,GAKrBhB,SAAA,EAAW,EALU;AAAA,GAMrBM,SAAA,EAAW,KANU;AAAA,GAOrB5sB,KAAA,EAAOmrB,OAPc;AAAA,GAQrB7tB,KAAA,EAAOwc,SARc;AAAA,GAAvB,EADoC;AAAA,EAAtC,CAdU;AAAA,CA0BVyR,QAAA,CAAS5R,SAAT,GAAqB+P,WAAA,CAAYc,kBAAA,CAAmB7Q,SAA/B,EAA0C;AAAA,EAG7DmS,IAAA,EAAM,SAASA,IAAT,CAAc8B,WAAd,EAA2BC,UAA3B,EAAuC;AAAA,GAC3C,IAAI7tB,KAAA,GAAQuqB,uBAAA,CAAwB,IAAxB,CAAZ,CAD2C;AAAA,GAE3C,IAAIiC,QAAA,GAAW9B,oBAAA,CAAqBZ,kBAAA,CAAmB,IAAnB,EAAyBU,kBAAzB,CAArB,CAAf,CAF2C;AAAA,GAG3CgC,QAAA,CAASD,EAAT,GAAc,OAAOqB,WAAP,IAAsB,UAAtB,GAAmCA,WAAnC,GAAiD,IAA/D,CAH2C;AAAA,GAI3CpB,QAAA,CAASE,IAAT,GAAgB,OAAOmB,UAAP,IAAqB,UAArB,IAAmCA,UAAnD,CAJ2C;AAAA,GAK3CrB,QAAA,CAAS7H,MAAT,GAAkBjC,OAAA,GAAUnK,OAAA,CAAQoM,MAAlB,GAA2B7K,SAA7C,CAL2C;AAAA,GAM3C9Z,KAAA,CAAMstB,MAAN,GAAe,IAAf,CAN2C;AAAA,GAO3CttB,KAAA,CAAMssB,SAAN,CAAgB/N,IAAhB,CAAqBiO,QAArB,EAP2C;AAAA,GAQ3C,IAAIxsB,KAAA,CAAMA,KAAN,IAAemrB,OAAnB;AAAA,IAA4Be,MAAA,CAAOlsB,KAAP,EAAc,KAAd,EARe;AAAA,GAS3C,OAAOwsB,QAAA,CAASZ,OAAhB,CAT2C;AAAA,GAHgB;AAAA,EAgB7D,SAAS,UAAUiC,UAAV,EAAsB;AAAA,GAC7B,OAAO,KAAK/B,IAAL,CAAUhS,SAAV,EAAqB+T,UAArB,CAAP,CAD6B;AAAA,GAhB8B;AAAA,EAA1C,CAArB,CA1BU;AAAA,CA8CVrC,oBAAA,GAAuB,YAAY;AAAA,EACjC,IAAII,OAAA,GAAU,IAAIL,QAAJ,EAAd,CADiC;AAAA,EAEjC,IAAIvrB,KAAA,GAAQ2c,gBAAA,CAAiBiP,OAAjB,CAAZ,CAFiC;AAAA,EAGjC,KAAKA,OAAL,GAAeA,OAAf,CAHiC;AAAA,EAIjC,KAAK7zB,OAAL,GAAe6vB,IAAA,CAAK6F,eAAL,EAAsBztB,KAAtB,CAAf,CAJiC;AAAA,EAKjC,KAAKhI,MAAL,GAAc4vB,IAAA,CAAK4F,cAAL,EAAqBxtB,KAArB,CAAd,CALiC;AAAA,EAAnC,CA9CU;AAAA,CAqDVmqB,0BAAA,CAA2BrP,CAA3B,GAA+B4P,oBAAA,GAAuB,UAAUphB,CAAV,EAAa;AAAA,EACjE,OAAOA,CAAA,KAAMkhB,kBAAN,IAA4BlhB,CAAA,KAAMmiB,cAAlC,GACH,IAAID,oBAAJ,CAAyBliB,CAAzB,CADG,GAEHqhB,2BAAA,CAA4BrhB,CAA5B,CAFJ,CADiE;AAAA,EAAnE,CArDU;AAAA,CA2DV,IAAI,CAACgV,OAAD,IAAY,OAAOmL,aAAP,IAAwB,UAAxC,EAAoD;AAAA,EAClDiC,UAAA,GAAajC,aAAA,CAAc9P,SAAd,CAAwBmS,IAArC,CADkD;AAAA,EAIlDlT,QAAA,CAAS6Q,aAAA,CAAc9P,SAAvB,EAAkC,MAAlC,EAA0C,SAASmS,IAAT,CAAc8B,WAAd,EAA2BC,UAA3B,EAAuC;AAAA,GAC/E,IAAI3F,IAAA,GAAO,IAAX,CAD+E;AAAA,GAE/E,OAAO,IAAIsC,kBAAJ,CAAuB,UAAUzyB,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,IACvD0zB,UAAA,CAAW3Q,IAAX,CAAgBmN,IAAhB,EAAsBnwB,OAAtB,EAA+BC,MAA/B,EADuD;AAAA,IAAlD,EAEJ8zB,IAFI,CAEC8B,WAFD,EAEcC,UAFd,CAAP,CAF+E;AAAA,GAAjF,EAMG,EAAE9Q,MAAA,EAAQ,IAAV,EANH,EAJkD;AAAA,EAalD,IAAI,OAAO0N,MAAP,IAAiB,UAArB;AAAA,GAAiCjS,CAAA,CAAE;AAAA,IAAEC,MAAA,EAAQ,IAAV;AAAA,IAAgBlb,UAAA,EAAY,IAA5B;AAAA,IAAkCsc,MAAA,EAAQ,IAA1C;AAAA,IAAF,EAAoD;AAAA,IAEnFiU,KAAA,EAAO,SAASA,KAAT,CAAehS,KAAf,EAAmC;AAAA,KACxC,OAAOmO,cAAA,CAAeO,kBAAf,EAAmCC,MAAA,CAAOhC,KAAP,CAAahQ,MAAb,EAAqBgH,SAArB,CAAnC,CAAP,CADwC;AAAA,KAFyC;AAAA,IAApD,EAbiB;AAAA,EA3D1C;AAAA,CAlOZ;AAmTAjH,CAAA,CAAE;AAAA,CAAEC,MAAA,EAAQ,IAAV;AAAA,CAAgB1Y,IAAA,EAAM,IAAtB;AAAA,CAA4B8Z,MAAA,EAAQN,MAApC;AAAA,CAAF,EAAgD,EAC9C2P,OAAA,EAASsB,kBADqC,EAAhD,EAnTA;AAuTAtF,cAAA,CAAesF,kBAAf,EAAmCF,OAAnC,EAA4C,KAA5C,EAAmD,IAAnD,EAvTA;AAwTAX,UAAA,CAAWW,OAAX,EAxTA;AA0TAmB,cAAA,GAAiBzM,UAAA,CAAWsL,OAAX,CAAjB,CA1TA;AA6TA9R,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQmR,OAAV;AAAA,CAAmBhR,IAAA,EAAM,IAAzB;AAAA,CAA+BO,MAAA,EAAQN,MAAvC;AAAA,CAAF,EAAmD;AAAA,CAGjDvhB,MAAA,EAAQ,SAASA,MAAT,CAAgByd,CAAhB,EAAmB;AAAA,EACzB,IAAI2B,UAAA,GAAasT,oBAAA,CAAqB,IAArB,CAAjB,CADyB;AAAA,EAEzBtT,UAAA,CAAWpf,MAAX,CAAkB+iB,IAAlB,CAAuBjB,SAAvB,EAAkCrE,CAAlC,EAFyB;AAAA,EAGzB,OAAO2B,UAAA,CAAWwU,OAAlB,CAHyB;AAAA,EAHsB;AAAA,CAAnD,EA7TA;AAuUApT,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQmR,OAAV;AAAA,CAAmBhR,IAAA,EAAM,IAAzB;AAAA,CAA+BO,MAAA,EAAQyE,OAAA,IAAW/E,MAAlD;AAAA,CAAF,EAA8D;AAAA,CAG5DxhB,OAAA,EAAS,SAASA,OAAT,CAAiBg2B,CAAjB,EAAoB;AAAA,EAC3B,OAAO9D,cAAA,CAAe3L,OAAA,IAAW,SAASmN,cAApB,GAAqCjB,kBAArC,GAA0D,IAAzE,EAA+EuD,CAA/E,CAAP,CAD2B;AAAA,EAH+B;AAAA,CAA9D,EAvUA;AA+UAvV,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQmR,OAAV;AAAA,CAAmBhR,IAAA,EAAM,IAAzB;AAAA,CAA+BO,MAAA,EAAQkS,mBAAvC;AAAA,CAAF,EAAgE;AAAA,CAG9DC,GAAA,EAAK,SAASA,GAAT,CAAajrB,QAAb,EAAuB;AAAA,EAC1B,IAAIuI,CAAA,GAAI,IAAR,CAD0B;AAAA,EAE1B,IAAI8N,UAAA,GAAasT,oBAAA,CAAqBphB,CAArB,CAAjB,CAF0B;AAAA,EAG1B,IAAIvR,OAAA,GAAUqf,UAAA,CAAWrf,OAAzB,CAH0B;AAAA,EAI1B,IAAIC,MAAA,GAASof,UAAA,CAAWpf,MAAxB,CAJ0B;AAAA,EAK1B,IAAIuH,MAAA,GAAS6qB,OAAA,CAAQ,YAAY;AAAA,GAC/B,IAAI4D,eAAA,GAAkB1O,SAAA,CAAUhW,CAAA,CAAEvR,OAAZ,CAAtB,CAD+B;AAAA,GAE/B,IAAI8G,MAAA,GAAS,EAAb,CAF+B;AAAA,GAG/B,IAAIovB,OAAA,GAAU,CAAd,CAH+B;AAAA,GAI/B,IAAIC,SAAA,GAAY,CAAhB,CAJ+B;AAAA,GAK/B3G,OAAA,CAAQxmB,QAAR,EAAkB,UAAU6qB,OAAV,EAAmB;AAAA,IACnC,IAAItL,KAAA,GAAQ2N,OAAA,EAAZ,CADmC;AAAA,IAEnC,IAAIE,aAAA,GAAgB,KAApB,CAFmC;AAAA,IAGnCtvB,MAAA,CAAO0f,IAAP,CAAYzE,SAAZ,EAHmC;AAAA,IAInCoU,SAAA,GAJmC;AAAA,IAKnCF,eAAA,CAAgBjT,IAAhB,CAAqBzR,CAArB,EAAwBsiB,OAAxB,EAAiCE,IAAjC,CAAsC,UAAUxuB,KAAV,EAAiB;AAAA,KACrD,IAAI6wB,aAAJ;AAAA,MAAmB,OADkC;AAAA,KAErDA,aAAA,GAAgB,IAAhB,CAFqD;AAAA,KAGrDtvB,MAAA,CAAOyhB,KAAP,IAAgBhjB,KAAhB,CAHqD;AAAA,KAIrD,EAAE4wB,SAAF,IAAen2B,OAAA,CAAQ8G,MAAR,CAAf,CAJqD;AAAA,KAAvD,EAKG7G,MALH,EALmC;AAAA,IAArC,EAL+B;AAAA,GAiB/B,EAAEk2B,SAAF,IAAen2B,OAAA,CAAQ8G,MAAR,CAAf,CAjB+B;AAAA,GAApB,CAAb,CAL0B;AAAA,EAwB1B,IAAIU,MAAA,CAAOsb,KAAX;AAAA,GAAkB7iB,MAAA,CAAOuH,MAAA,CAAOjC,KAAd,EAxBQ;AAAA,EAyB1B,OAAO8Z,UAAA,CAAWwU,OAAlB,CAzB0B;AAAA,EAHkC;AAAA,CAgC9DwC,IAAA,EAAM,SAASA,IAAT,CAAcrtB,QAAd,EAAwB;AAAA,EAC5B,IAAIuI,CAAA,GAAI,IAAR,CAD4B;AAAA,EAE5B,IAAI8N,UAAA,GAAasT,oBAAA,CAAqBphB,CAArB,CAAjB,CAF4B;AAAA,EAG5B,IAAItR,MAAA,GAASof,UAAA,CAAWpf,MAAxB,CAH4B;AAAA,EAI5B,IAAIuH,MAAA,GAAS6qB,OAAA,CAAQ,YAAY;AAAA,GAC/B,IAAI4D,eAAA,GAAkB1O,SAAA,CAAUhW,CAAA,CAAEvR,OAAZ,CAAtB,CAD+B;AAAA,GAE/BwvB,OAAA,CAAQxmB,QAAR,EAAkB,UAAU6qB,OAAV,EAAmB;AAAA,IACnCoC,eAAA,CAAgBjT,IAAhB,CAAqBzR,CAArB,EAAwBsiB,OAAxB,EAAiCE,IAAjC,CAAsC1U,UAAA,CAAWrf,OAAjD,EAA0DC,MAA1D,EADmC;AAAA,IAArC,EAF+B;AAAA,GAApB,CAAb,CAJ4B;AAAA,EAU5B,IAAIuH,MAAA,CAAOsb,KAAX;AAAA,GAAkB7iB,MAAA,CAAOuH,MAAA,CAAOjC,KAAd,EAVU;AAAA,EAW5B,OAAO8Z,UAAA,CAAWwU,OAAlB,CAX4B;AAAA,EAhCgC;AAAA,CAAhE,E;;;;;;AC/UA,IAAInT,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AAEApb,MAAA,CAAOmB,OAAP,GAAiBwa,MAAA,CAAOyQ,OAAxB,C;;;;;;ACFA,IAAItQ,QAAA,GAAWV,mBAAA,CAAQ,EAAR,CAAf;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUkb,MAAV,EAAkBoL,GAAlB,EAAuBvL,OAAvB,EAAgC;AAAA,CAC/C,SAASpY,GAAT,IAAgB2jB,GAAhB;AAAA,EAAqB3L,QAAA,CAASO,MAAT,EAAiBvY,GAAjB,EAAsB2jB,GAAA,CAAI3jB,GAAJ,CAAtB,EAAgCoY,OAAhC,EAD0B;AAAA,CAE/C,OAAOG,MAAP,CAF+C;AAAA,CAAjD,C;;;;;;;ACFa;AACb,IAAI6F,UAAA,GAAa9G,mBAAA,CAAQ,EAAR,CAAjB,CADA;AAEA,IAAIkE,oBAAA,GAAuBlE,mBAAA,CAAQ,EAAR,CAA3B,CAFA;AAGA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CAHA;AAIA,IAAIkC,WAAA,GAAclC,mBAAA,CAAQ,EAAR,CAAlB,CAJA;AAMA,IAAImS,OAAA,GAAUpI,eAAA,CAAgB,SAAhB,CAAd,CANA;AAQAnlB,MAAA,CAAOmB,OAAP,GAAiB,UAAUowB,gBAAV,EAA4B;AAAA,CAC3C,IAAIC,WAAA,GAActP,UAAA,CAAWqP,gBAAX,CAAlB,CAD2C;AAAA,CAE3C,IAAIpT,cAAA,GAAiBmB,oBAAA,CAAqBtB,CAA1C,CAF2C;AAAA,CAI3C,IAAIV,WAAA,IAAekU,WAAf,IAA8B,CAACA,WAAA,CAAYjE,OAAZ,CAAnC,EAAyD;AAAA,EACvDpP,cAAA,CAAeqT,WAAf,EAA4BjE,OAA5B,EAAqC;AAAA,GACnC7sB,YAAA,EAAc,IADqB;AAAA,GAEnC8Z,GAAA,EAAK,YAAY;AAAA,IAAE,OAAO,IAAP,CAAF;AAAA,IAFkB;AAAA,GAArC,EADuD;AAAA,EAJd;AAAA,CAA7C,C;;;;;;ACRAxa,MAAA,CAAOmB,OAAP,GAAiB,UAAUgc,EAAV,EAAcqU,WAAd,EAA2BlzB,IAA3B,EAAiC;AAAA,CAChD,IAAI,CAAE,CAAA6e,EAAA,YAAcqU,WAAd,CAAN,EAAkC;AAAA,EAChC,MAAM1S,SAAA,CAAU,eAAgB,CAAAxgB,IAAA,GAAOA,IAAA,GAAO,GAAd,GAAoB,EAApB,CAAhB,GAA0C,YAApD,CAAN,CADgC;AAAA,EADc;AAAA,CAG9C,OAAO6e,EAAP,CAH8C;AAAA,CAAlD,C;;;;;;ACAA,IAAIgI,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB;AAEA,IAAImN,QAAA,GAAWpD,eAAA,CAAgB,UAAhB,CAAf,CAFA;AAGA,IAAIsM,YAAA,GAAe,KAAnB,CAHA;AAKA,IAAI;AAAA,CACF,IAAIC,MAAA,GAAS,CAAb,CADE;AAAA,CAEF,IAAIC,kBAAA,GAAqB;AAAA,EACvB5tB,IAAA,EAAM,YAAY;AAAA,GAChB,OAAO,EAAEP,IAAA,EAAM,CAAC,CAACkuB,MAAA,EAAV,EAAP,CADgB;AAAA,GADK;AAAA,EAIvB,UAAU,YAAY;AAAA,GACpBD,YAAA,GAAe,IAAf,CADoB;AAAA,GAJC;AAAA,EAAzB,CAFE;AAAA,CAUFE,kBAAA,CAAmBpJ,QAAnB,IAA+B,YAAY;AAAA,EACzC,OAAO,IAAP,CADyC;AAAA,EAA3C,CAVE;AAAA,CAcFxQ,KAAA,CAAM6Z,IAAN,CAAWD,kBAAX,EAA+B,YAAY;AAAA,EAAE,MAAM,CAAN,CAAF;AAAA,EAA3C,EAdE;AAAA,CAAJ,CAeE,OAAO5T,KAAP,EAAc;AAAA,CApBhB;AAsBA/d,MAAA,CAAOmB,OAAP,GAAiB,UAAUid,IAAV,EAAgByT,YAAhB,EAA8B;AAAA,CAC7C,IAAI,CAACA,YAAD,IAAiB,CAACJ,YAAtB;AAAA,EAAoC,OAAO,KAAP,CADS;AAAA,CAE7C,IAAIK,iBAAA,GAAoB,KAAxB,CAF6C;AAAA,CAG7C,IAAI;AAAA,EACF,IAAIvS,MAAA,GAAS,EAAb,CADE;AAAA,EAEFA,MAAA,CAAOgJ,QAAP,IAAmB,YAAY;AAAA,GAC7B,OAAO;AAAA,IACLxkB,IAAA,EAAM,YAAY;AAAA,KAChB,OAAO,EAAEP,IAAA,EAAMsuB,iBAAA,GAAoB,IAA5B,EAAP,CADgB;AAAA,KADb;AAAA,IAAP,CAD6B;AAAA,GAA/B,CAFE;AAAA,EASF1T,IAAA,CAAKmB,MAAL,EATE;AAAA,EAAJ,CAUE,OAAOxB,KAAP,EAAc;AAAA,EAb6B;AAAA,CAc7C,OAAO+T,iBAAP,CAd6C;AAAA,CAA/C,C;;;;;;ACtBA,IAAItS,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf;AACA,IAAIoH,SAAA,GAAYpH,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAEA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CAFA;AAIA,IAAImS,OAAA,GAAUpI,eAAA,CAAgB,SAAhB,CAAd,CAJA;AAQAnlB,MAAA,CAAOmB,OAAP,GAAiB,UAAU6L,CAAV,EAAa+kB,kBAAb,EAAiC;AAAA,CAChD,IAAIvlB,CAAA,GAAIgT,QAAA,CAASxS,CAAT,EAAY1T,WAApB,CADgD;AAAA,CAEhD,IAAI04B,CAAJ,CAFgD;AAAA,CAGhD,OAAOxlB,CAAA,KAAMwQ,SAAN,IAAoB,CAAAgV,CAAA,GAAIxS,QAAA,CAAShT,CAAT,EAAY+gB,OAAZ,CAAJ,CAAD,IAA8BvQ,SAAjD,GAA6D+U,kBAA7D,GAAkFvP,SAAA,CAAUwP,CAAV,CAAzF,CAHgD;AAAA,CAAlD,C;;;;;;ACRA,IAAIrW,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAI8C,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ,CADA;AAEA,IAAI0P,IAAA,GAAO1P,mBAAA,CAAQ,EAAR,CAAX,CAFA;AAGA,IAAI8K,IAAA,GAAO9K,mBAAA,CAAQ,EAAR,CAAX,CAHA;AAIA,IAAI/f,aAAA,GAAgB+f,mBAAA,CAAQ,EAAR,CAApB,CAJA;AAKA,IAAI6W,MAAA,GAAS7W,mBAAA,CAAQ,EAAR,CAAb,CALA;AAMA,IAAIwK,OAAA,GAAUxK,mBAAA,CAAQ,EAAR,CAAd,CANA;AAQA,IAAI8W,QAAA,GAAWvW,MAAA,CAAOuW,QAAtB,CARA;AASA,IAAIrR,GAAA,GAAMlF,MAAA,CAAOwW,YAAjB,CATA;AAUA,IAAIC,KAAA,GAAQzW,MAAA,CAAO0W,cAAnB,CAVA;AAWA,IAAI5W,OAAA,GAAUE,MAAA,CAAOF,OAArB,CAXA;AAYA,IAAI6W,cAAA,GAAiB3W,MAAA,CAAO2W,cAA5B,CAZA;AAaA,IAAIC,QAAA,GAAW5W,MAAA,CAAO4W,QAAtB,CAbA;AAcA,IAAIpB,OAAA,GAAU,CAAd,CAdA;AAeA,IAAIqB,KAAA,GAAQ,EAAZ,CAfA;AAgBA,IAAIC,kBAAA,GAAqB,oBAAzB,CAhBA;AAiBA,IAAIC,KAAJ,EAAWC,OAAX,EAAoBC,IAApB,CAjBA;AAmBA,IAAIC,GAAA,GAAM,UAAUhR,EAAV,EAAc;AAAA,CAEtB,IAAI2Q,KAAA,CAAMpT,cAAN,CAAqByC,EAArB,CAAJ,EAA8B;AAAA,EAC5B,IAAIvgB,EAAA,GAAKkxB,KAAA,CAAM3Q,EAAN,CAAT,CAD4B;AAAA,EAE5B,OAAO2Q,KAAA,CAAM3Q,EAAN,CAAP,CAF4B;AAAA,EAG5BvgB,EAAA,GAH4B;AAAA,EAFR;AAAA,CAAxB,CAnBA;AA4BA,IAAIwxB,MAAA,GAAS,UAAUjR,EAAV,EAAc;AAAA,CACzB,OAAO,YAAY;AAAA,EACjBgR,GAAA,CAAIhR,EAAJ,EADiB;AAAA,EAAnB,CADyB;AAAA,CAA3B,CA5BA;AAkCA,IAAIkR,QAAA,GAAW,UAAU5C,KAAV,EAAiB;AAAA,CAC9B0C,GAAA,CAAI1C,KAAA,CAAM/Y,IAAV,EAD8B;AAAA,CAAhC,CAlCA;AAsCA,IAAI4b,IAAA,GAAO,UAAUnR,EAAV,EAAc;AAAA,CAEvBlG,MAAA,CAAOsX,WAAP,CAAmBpR,EAAA,GAAK,EAAxB,EAA4BqQ,QAAA,CAASnzB,QAAT,GAAoB,IAApB,GAA2BmzB,QAAA,CAASgB,IAAhE,EAFuB;AAAA,CAAzB,CAtCA;AA4CA,IAAI,CAACrS,GAAD,IAAQ,CAACuR,KAAb,EAAoB;AAAA,CAClBvR,GAAA,GAAM,SAASsR,YAAT,CAAsB7wB,EAAtB,EAA0B;AAAA,EAC9B,IAAI6xB,IAAA,GAAO,EAAX,CAD8B;AAAA,EAE9B,IAAI31B,CAAA,GAAI,CAAR,CAF8B;AAAA,EAG9B,OAAOmlB,SAAA,CAAUjM,MAAV,GAAmBlZ,CAA1B;AAAA,GAA6B21B,IAAA,CAAK1R,IAAL,CAAUkB,SAAA,CAAUnlB,CAAA,EAAV,CAAV,EAHC;AAAA,EAI9Bg1B,KAAA,CAAM,EAAErB,OAAR,IAAmB,YAAY;AAAA,GAE5B,QAAO7vB,EAAP,IAAa,UAAb,GAA0BA,EAA1B,GAA+BgE,QAAA,CAAShE,EAAT,CAA/B,CAAD,CAA8CqqB,KAA9C,CAAoD3O,SAApD,EAA+DmW,IAA/D,EAF6B;AAAA,GAA/B,CAJ8B;AAAA,EAQ9BT,KAAA,CAAMvB,OAAN,EAR8B;AAAA,EAS9B,OAAOA,OAAP,CAT8B;AAAA,EAAhC,CADkB;AAAA,CAYlBiB,KAAA,GAAQ,SAASC,cAAT,CAAwBxQ,EAAxB,EAA4B;AAAA,EAClC,OAAO2Q,KAAA,CAAM3Q,EAAN,CAAP,CADkC;AAAA,EAApC,CAZkB;AAAA,CAgBlB,IAAI+D,OAAJ,EAAa;AAAA,EACX8M,KAAA,GAAQ,UAAU7Q,EAAV,EAAc;AAAA,GACpBpG,OAAA,CAAQ2X,QAAR,CAAiBN,MAAA,CAAOjR,EAAP,CAAjB,EADoB;AAAA,GAAtB,CADW;AAAA,EAAb,MAKO,IAAI0Q,QAAA,IAAYA,QAAA,CAASc,GAAzB,EAA8B;AAAA,EACnCX,KAAA,GAAQ,UAAU7Q,EAAV,EAAc;AAAA,GACpB0Q,QAAA,CAASc,GAAT,CAAaP,MAAA,CAAOjR,EAAP,CAAb,EADoB;AAAA,GAAtB,CADmC;AAAA,EAA9B,MAMA,IAAIyQ,cAAA,IAAkB,CAACL,MAAvB,EAA+B;AAAA,EACpCU,OAAA,GAAU,IAAIL,cAAJ,EAAV,CADoC;AAAA,EAEpCM,IAAA,GAAOD,OAAA,CAAQW,KAAf,CAFoC;AAAA,EAGpCX,OAAA,CAAQY,KAAR,CAAcC,SAAd,GAA0BT,QAA1B,CAHoC;AAAA,EAIpCL,KAAA,GAAQ5H,IAAA,CAAK8H,IAAA,CAAKK,WAAV,EAAuBL,IAAvB,EAA6B,CAA7B,CAAR,CAJoC;AAAA,EAA/B,MAOA,IACLjX,MAAA,CAAO8X,gBAAP,IACA,OAAOR,WAAP,IAAsB,UADtB,IAEA,CAACtX,MAAA,CAAO+X,aAFR,IAGAxB,QAHA,IAGYA,QAAA,CAASnzB,QAAT,KAAsB,OAHlC,IAIA,CAACmf,KAAA,CAAM8U,IAAN,CALI,EAML;AAAA,EACAN,KAAA,GAAQM,IAAR,CADA;AAAA,EAEArX,MAAA,CAAO8X,gBAAP,CAAwB,SAAxB,EAAmCV,QAAnC,EAA6C,KAA7C,EAFA;AAAA,EANK,MAUA,IAAIN,kBAAA,IAAsBp3B,aAAA,CAAc,QAAd,CAA1B,EAAmD;AAAA,EACxDq3B,KAAA,GAAQ,UAAU7Q,EAAV,EAAc;AAAA,GACpBqE,IAAA,CAAKsB,WAAL,CAAiBnsB,aAAA,CAAc,QAAd,CAAjB,EAA0Co3B,kBAA1C,IAAgE,YAAY;AAAA,IAC1EvM,IAAA,CAAKyN,WAAL,CAAiB,IAAjB,EAD0E;AAAA,IAE1Ed,GAAA,CAAIhR,EAAJ,EAF0E;AAAA,IAA5E,CADoB;AAAA,GAAtB,CADwD;AAAA,EAAnD,MAQA;AAAA,EACL6Q,KAAA,GAAQ,UAAU7Q,EAAV,EAAc;AAAA,GACpB+R,UAAA,CAAWd,MAAA,CAAOjR,EAAP,CAAX,EAAuB,CAAvB,EADoB;AAAA,GAAtB,CADK;AAAA,EApDW;AAAA,CA5CpB;AAuGA7hB,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CACf0f,GAAA,EAAKA,GADU;AAAA,CAEfuR,KAAA,EAAOA,KAFQ;AAAA,CAAjB,C;;;;;;ACvGA,IAAItM,SAAA,GAAY1K,mBAAA,CAAQ,EAAR,CAAhB;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,mCAAmCmgB,IAAnC,CAAwCwE,SAAxC,CAAjB,C;;;;;;ACFA,IAAInK,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAIQ,wBAAA,GAA2BR,yBAA/B,CADA;AAEA,IAAIyY,SAAA,GAAYzY,2BAAhB,CAFA;AAGA,IAAI6W,MAAA,GAAS7W,mBAAA,CAAQ,EAAR,CAAb,CAHA;AAIA,IAAI0Y,eAAA,GAAkB1Y,mBAAA,CAAQ,EAAR,CAAtB,CAJA;AAKA,IAAIwK,OAAA,GAAUxK,mBAAA,CAAQ,EAAR,CAAd,CALA;AAOA,IAAI2Y,gBAAA,GAAmBpY,MAAA,CAAOoY,gBAAP,IAA2BpY,MAAA,CAAOqY,sBAAzD,CAPA;AAQA,IAAIr5B,QAAA,GAAWghB,MAAA,CAAOhhB,QAAtB,CARA;AASA,IAAI8gB,OAAA,GAAUE,MAAA,CAAOF,OAArB,CATA;AAUA,IAAI2Q,OAAA,GAAUzQ,MAAA,CAAOyQ,OAArB,CAVA;AAYA,IAAI6H,wBAAA,GAA2BrY,wBAAA,CAAyBD,MAAzB,EAAiC,gBAAjC,CAA/B,CAZA;AAaA,IAAIuY,cAAA,GAAiBD,wBAAA,IAA4BA,wBAAA,CAAyBzzB,KAA1E,CAbA;AAeA,IAAI2zB,KAAJ,EAAWC,IAAX,EAAiBC,IAAjB,EAAuBjF,MAAvB,EAA+BkF,MAA/B,EAAuCC,IAAvC,EAA6CzF,OAA7C,EAAsDE,IAAtD,CAfA;AAkBA,IAAI,CAACkF,cAAL,EAAqB;AAAA,CACnBC,KAAA,GAAQ,YAAY;AAAA,EAClB,IAAI3D,MAAJ,EAAYlvB,EAAZ,CADkB;AAAA,EAElB,IAAIskB,OAAA,IAAY,CAAA4K,MAAA,GAAS/U,OAAA,CAAQoM,MAAjB,CAAhB;AAAA,GAA0C2I,MAAA,CAAOP,IAAP,GAFxB;AAAA,EAGlB,OAAOmE,IAAP,EAAa;AAAA,GACX9yB,EAAA,GAAK8yB,IAAA,CAAK9yB,EAAV,CADW;AAAA,GAEX8yB,IAAA,GAAOA,IAAA,CAAKrwB,IAAZ,CAFW;AAAA,GAGX,IAAI;AAAA,IACFzC,EAAA,GADE;AAAA,IAAJ,CAEE,OAAOyc,KAAP,EAAc;AAAA,IACd,IAAIqW,IAAJ;AAAA,KAAUhF,MAAA,GAAV;AAAA;AAAA,KACKiF,IAAA,GAAOrX,SAAP,CAFS;AAAA,IAGd,MAAMe,KAAN,CAHc;AAAA,IALL;AAAA,GAHK;AAAA,EAahBsW,IAAA,GAAOrX,SAAP,CAbgB;AAAA,EAclB,IAAIwT,MAAJ;AAAA,GAAYA,MAAA,CAAOR,KAAP,GAdM;AAAA,EAApB,CADmB;AAAA,CAoBnB,IAAI,CAACiC,MAAD,IAAW,CAACrM,OAAZ,IAAuB,CAACkO,eAAxB,IAA2CC,gBAA3C,IAA+Dp5B,QAAnE,EAA6E;AAAA,EAC3E25B,MAAA,GAAS,IAAT,CAD2E;AAAA,EAE3EC,IAAA,GAAO55B,QAAA,CAAS65B,cAAT,CAAwB,EAAxB,CAAP,CAF2E;AAAA,EAG3E,IAAIT,gBAAJ,CAAqBI,KAArB,EAA4BM,OAA5B,CAAoCF,IAApC,EAA0C,EAAEG,aAAA,EAAe,IAAjB,EAA1C,EAH2E;AAAA,EAI3EtF,MAAA,GAAS,YAAY;AAAA,GACnBmF,IAAA,CAAKnd,IAAL,GAAYkd,MAAA,GAAS,CAACA,MAAtB,CADmB;AAAA,GAArB,CAJ2E;AAAA,EAA7E,MAQO,IAAIlI,OAAA,IAAWA,OAAA,CAAQnxB,OAAvB,EAAgC;AAAA,EAErC6zB,OAAA,GAAU1C,OAAA,CAAQnxB,OAAR,CAAgB+hB,SAAhB,CAAV,CAFqC;AAAA,EAGrCgS,IAAA,GAAOF,OAAA,CAAQE,IAAf,CAHqC;AAAA,EAIrCI,MAAA,GAAS,YAAY;AAAA,GACnBJ,IAAA,CAAK/Q,IAAL,CAAU6Q,OAAV,EAAmBqF,KAAnB,EADmB;AAAA,GAArB,CAJqC;AAAA,EAAhC,MAQA,IAAIvO,OAAJ,EAAa;AAAA,EAClBwJ,MAAA,GAAS,YAAY;AAAA,GACnB3T,OAAA,CAAQ2X,QAAR,CAAiBe,KAAjB,EADmB;AAAA,GAArB,CADkB;AAAA,EAAb,MAUA;AAAA,EACL/E,MAAA,GAAS,YAAY;AAAA,GAEnByE,SAAA,CAAU5V,IAAV,CAAetC,MAAf,EAAuBwY,KAAvB,EAFmB;AAAA,GAArB,CADK;AAAA,EA9CY;AAAA,CAlBrB;AAwEAn0B,MAAA,CAAOmB,OAAP,GAAiB+yB,cAAA,IAAkB,UAAU5yB,EAAV,EAAc;AAAA,CAC/C,IAAI2rB,IAAA,GAAO;AAAA,EAAE3rB,EAAA,EAAIA,EAAN;AAAA,EAAUyC,IAAA,EAAMiZ,SAAhB;AAAA,EAAX,CAD+C;AAAA,CAE/C,IAAIqX,IAAJ;AAAA,EAAUA,IAAA,CAAKtwB,IAAL,GAAYkpB,IAAZ,CAFqC;AAAA,CAG/C,IAAI,CAACmH,IAAL,EAAW;AAAA,EACTA,IAAA,GAAOnH,IAAP,CADS;AAAA,EAETmC,MAAA,GAFS;AAAA,EAHoC;AAAA,CAM7CiF,IAAA,GAAOpH,IAAP,CAN6C;AAAA,CAAjD,C;;;;;;ACxEA,IAAInH,SAAA,GAAY1K,mBAAA,CAAQ,EAAR,CAAhB;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,qBAAqBmgB,IAArB,CAA0BwE,SAA1B,CAAjB,C;;;;;;ACFA,IAAItG,QAAA,GAAWpE,mBAAA,CAAQ,EAAR,CAAf;AACA,IAAI2D,QAAA,GAAW3D,mBAAA,CAAQ,EAAR,CAAf,CADA;AAEA,IAAIwS,oBAAA,GAAuBxS,mBAAA,CAAQ,GAAR,CAA3B,CAFA;AAIApb,MAAA,CAAOmB,OAAP,GAAiB,UAAUqL,CAAV,EAAaykB,CAAb,EAAgB;AAAA,CAC/BzR,QAAA,CAAShT,CAAT,EAD+B;AAAA,CAE/B,IAAIuS,QAAA,CAASkS,CAAT,KAAeA,CAAA,CAAE33B,WAAF,KAAkBkT,CAArC;AAAA,EAAwC,OAAOykB,CAAP,CAFT;AAAA,CAG/B,IAAI0D,iBAAA,GAAoB/G,oBAAA,CAAqB5P,CAArB,CAAuBxR,CAAvB,CAAxB,CAH+B;AAAA,CAI/B,IAAIvR,OAAA,GAAU05B,iBAAA,CAAkB15B,OAAhC,CAJ+B;AAAA,CAK/BA,OAAA,CAAQg2B,CAAR,EAL+B;AAAA,CAM/B,OAAO0D,iBAAA,CAAkB7F,OAAzB,CAN+B;AAAA,CAAjC,C;;;;;;;ACJa;AACb,IAAItM,SAAA,GAAYpH,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAGA,IAAIwZ,iBAAA,GAAoB,UAAUpoB,CAAV,EAAa;AAAA,CACnC,IAAIvR,OAAJ,EAAaC,MAAb,CADmC;AAAA,CAEnC,KAAK4zB,OAAL,GAAe,IAAItiB,CAAJ,CAAM,UAAUqoB,SAAV,EAAqBC,QAArB,EAA+B;AAAA,EAClD,IAAI75B,OAAA,KAAY+hB,SAAZ,IAAyB9hB,MAAA,KAAW8hB,SAAxC;AAAA,GAAmD,MAAM8B,SAAA,CAAU,yBAAV,CAAN,CADD;AAAA,EAElD7jB,OAAA,GAAU45B,SAAV,CAFkD;AAAA,EAGlD35B,MAAA,GAAS45B,QAAT,CAHkD;AAAA,EAArC,CAAf,CAFmC;AAAA,CAOnC,KAAK75B,OAAL,GAAeunB,SAAA,CAAUvnB,OAAV,CAAf,CAPmC;AAAA,CAQnC,KAAKC,MAAL,GAAcsnB,SAAA,CAAUtnB,MAAV,CAAd,CARmC;AAAA,CAArC,CAHA;AAeA8E,gBAAA,GAAmB,UAAUwM,CAAV,EAAa;AAAA,CAC9B,OAAO,IAAIooB,iBAAJ,CAAsBpoB,CAAtB,CAAP,CAD8B;AAAA,CAAhC,C;;;;;;ACfA,IAAImP,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AAEApb,MAAA,CAAOmB,OAAP,GAAiB,UAAU6X,CAAV,EAAaC,CAAb,EAAgB;AAAA,CAC/B,IAAI/Z,OAAA,GAAUyc,MAAA,CAAOzc,OAArB,CAD+B;AAAA,CAE/B,IAAIA,OAAA,IAAWA,OAAA,CAAQ6e,KAAvB,EAA8B;AAAA,EAC5B4E,SAAA,CAAUjM,MAAV,KAAqB,CAArB,GAAyBxX,OAAA,CAAQ6e,KAAR,CAAc/E,CAAd,CAAzB,GAA4C9Z,OAAA,CAAQ6e,KAAR,CAAc/E,CAAd,EAAiBC,CAAjB,CAA5C,CAD4B;AAAA,EAFC;AAAA,CAAjC,C;;;;;;ACFAjZ,MAAA,CAAOmB,OAAP,GAAiB,UAAUid,IAAV,EAAgB;AAAA,CAC/B,IAAI;AAAA,EACF,OAAO;AAAA,GAAEL,KAAA,EAAO,KAAT;AAAA,GAAgBvd,KAAA,EAAO4d,IAAA,EAAvB;AAAA,GAAP,CADE;AAAA,EAAJ,CAEE,OAAOL,KAAP,EAAc;AAAA,EACd,OAAO;AAAA,GAAEA,KAAA,EAAO,IAAT;AAAA,GAAevd,KAAA,EAAOud,KAAtB;AAAA,GAAP,CADc;AAAA,EAHe;AAAA,CAAjC,C;;;;;;;ACAa;AACb,IAAIrC,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAIoH,SAAA,GAAYpH,mBAAA,CAAQ,EAAR,CAAhB,CAFA;AAGA,IAAIiS,0BAAA,GAA6BjS,mBAAA,CAAQ,GAAR,CAAjC,CAHA;AAIA,IAAIkS,OAAA,GAAUlS,mBAAA,CAAQ,GAAR,CAAd,CAJA;AAKA,IAAIqP,OAAA,GAAUrP,mBAAA,CAAQ,EAAR,CAAd,CALA;AASAM,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,SAAV;AAAA,CAAqBG,IAAA,EAAM,IAA3B;AAAA,CAAF,EAAqC;AAAA,CACnCuY,UAAA,EAAY,SAASA,UAAT,CAAoB9wB,QAApB,EAA8B;AAAA,EACxC,IAAIuI,CAAA,GAAI,IAAR,CADwC;AAAA,EAExC,IAAI8N,UAAA,GAAa+S,0BAAA,CAA2BrP,CAA3B,CAA6BxR,CAA7B,CAAjB,CAFwC;AAAA,EAGxC,IAAIvR,OAAA,GAAUqf,UAAA,CAAWrf,OAAzB,CAHwC;AAAA,EAIxC,IAAIC,MAAA,GAASof,UAAA,CAAWpf,MAAxB,CAJwC;AAAA,EAKxC,IAAIuH,MAAA,GAAS6qB,OAAA,CAAQ,YAAY;AAAA,GAC/B,IAAIH,cAAA,GAAiB3K,SAAA,CAAUhW,CAAA,CAAEvR,OAAZ,CAArB,CAD+B;AAAA,GAE/B,IAAI8G,MAAA,GAAS,EAAb,CAF+B;AAAA,GAG/B,IAAIovB,OAAA,GAAU,CAAd,CAH+B;AAAA,GAI/B,IAAIC,SAAA,GAAY,CAAhB,CAJ+B;AAAA,GAK/B3G,OAAA,CAAQxmB,QAAR,EAAkB,UAAU6qB,OAAV,EAAmB;AAAA,IACnC,IAAItL,KAAA,GAAQ2N,OAAA,EAAZ,CADmC;AAAA,IAEnC,IAAIE,aAAA,GAAgB,KAApB,CAFmC;AAAA,IAGnCtvB,MAAA,CAAO0f,IAAP,CAAYzE,SAAZ,EAHmC;AAAA,IAInCoU,SAAA,GAJmC;AAAA,IAKnCjE,cAAA,CAAelP,IAAf,CAAoBzR,CAApB,EAAuBsiB,OAAvB,EAAgCE,IAAhC,CAAqC,UAAUxuB,KAAV,EAAiB;AAAA,KACpD,IAAI6wB,aAAJ;AAAA,MAAmB,OADiC;AAAA,KAEpDA,aAAA,GAAgB,IAAhB,CAFoD;AAAA,KAGpDtvB,MAAA,CAAOyhB,KAAP,IAAgB;AAAA,MAAEwR,MAAA,EAAQ,WAAV;AAAA,MAAuBx0B,KAAA,EAAOA,KAA9B;AAAA,MAAhB,CAHoD;AAAA,KAIpD,EAAE4wB,SAAF,IAAen2B,OAAA,CAAQ8G,MAAR,CAAf,CAJoD;AAAA,KAAtD,EAKG,UAAUgc,KAAV,EAAiB;AAAA,KAClB,IAAIsT,aAAJ;AAAA,MAAmB,OADD;AAAA,KAElBA,aAAA,GAAgB,IAAhB,CAFkB;AAAA,KAGlBtvB,MAAA,CAAOyhB,KAAP,IAAgB;AAAA,MAAEwR,MAAA,EAAQ,UAAV;AAAA,MAAsBz6B,MAAA,EAAQwjB,KAA9B;AAAA,MAAhB,CAHkB;AAAA,KAIlB,EAAEqT,SAAF,IAAen2B,OAAA,CAAQ8G,MAAR,CAAf,CAJkB;AAAA,KALpB,EALmC;AAAA,IAArC,EAL+B;AAAA,GAsB/B,EAAEqvB,SAAF,IAAen2B,OAAA,CAAQ8G,MAAR,CAAf,CAtB+B;AAAA,GAApB,CAAb,CALwC;AAAA,EA6BxC,IAAIU,MAAA,CAAOsb,KAAX;AAAA,GAAkB7iB,MAAA,CAAOuH,MAAA,CAAOjC,KAAd,EA7BsB;AAAA,EA8BxC,OAAO8Z,UAAA,CAAWwU,OAAlB,CA9BwC;AAAA,EADP;AAAA,CAArC,E;;;;;;;ACTa;AACb,IAAIpT,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAIoH,SAAA,GAAYpH,mBAAA,CAAQ,EAAR,CAAhB,CAFA;AAGA,IAAI8G,UAAA,GAAa9G,mBAAA,CAAQ,EAAR,CAAjB,CAHA;AAIA,IAAIiS,0BAAA,GAA6BjS,mBAAA,CAAQ,GAAR,CAAjC,CAJA;AAKA,IAAIkS,OAAA,GAAUlS,mBAAA,CAAQ,GAAR,CAAd,CALA;AAMA,IAAIqP,OAAA,GAAUrP,mBAAA,CAAQ,EAAR,CAAd,CANA;AAQA,IAAI6Z,iBAAA,GAAoB,yBAAxB,CARA;AAYAvZ,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,SAAV;AAAA,CAAqBG,IAAA,EAAM,IAA3B;AAAA,CAAF,EAAqC;AAAA,CACnC0Y,GAAA,EAAK,SAASA,GAAT,CAAajxB,QAAb,EAAuB;AAAA,EAC1B,IAAIuI,CAAA,GAAI,IAAR,CAD0B;AAAA,EAE1B,IAAI8N,UAAA,GAAa+S,0BAAA,CAA2BrP,CAA3B,CAA6BxR,CAA7B,CAAjB,CAF0B;AAAA,EAG1B,IAAIvR,OAAA,GAAUqf,UAAA,CAAWrf,OAAzB,CAH0B;AAAA,EAI1B,IAAIC,MAAA,GAASof,UAAA,CAAWpf,MAAxB,CAJ0B;AAAA,EAK1B,IAAIuH,MAAA,GAAS6qB,OAAA,CAAQ,YAAY;AAAA,GAC/B,IAAIH,cAAA,GAAiB3K,SAAA,CAAUhW,CAAA,CAAEvR,OAAZ,CAArB,CAD+B;AAAA,GAE/B,IAAIsxB,MAAA,GAAS,EAAb,CAF+B;AAAA,GAG/B,IAAI4E,OAAA,GAAU,CAAd,CAH+B;AAAA,GAI/B,IAAIC,SAAA,GAAY,CAAhB,CAJ+B;AAAA,GAK/B,IAAI+D,eAAA,GAAkB,KAAtB,CAL+B;AAAA,GAM/B1K,OAAA,CAAQxmB,QAAR,EAAkB,UAAU6qB,OAAV,EAAmB;AAAA,IACnC,IAAItL,KAAA,GAAQ2N,OAAA,EAAZ,CADmC;AAAA,IAEnC,IAAIiE,eAAA,GAAkB,KAAtB,CAFmC;AAAA,IAGnC7I,MAAA,CAAO9K,IAAP,CAAYzE,SAAZ,EAHmC;AAAA,IAInCoU,SAAA,GAJmC;AAAA,IAKnCjE,cAAA,CAAelP,IAAf,CAAoBzR,CAApB,EAAuBsiB,OAAvB,EAAgCE,IAAhC,CAAqC,UAAUxuB,KAAV,EAAiB;AAAA,KACpD,IAAI40B,eAAA,IAAmBD,eAAvB;AAAA,MAAwC,OADY;AAAA,KAEpDA,eAAA,GAAkB,IAAlB,CAFoD;AAAA,KAGpDl6B,OAAA,CAAQuF,KAAR,EAHoD;AAAA,KAAtD,EAIG,UAAUud,KAAV,EAAiB;AAAA,KAClB,IAAIqX,eAAA,IAAmBD,eAAvB;AAAA,MAAwC,OADtB;AAAA,KAElBC,eAAA,GAAkB,IAAlB,CAFkB;AAAA,KAGlB7I,MAAA,CAAO/I,KAAP,IAAgBzF,KAAhB,CAHkB;AAAA,KAIlB,EAAEqT,SAAF,IAAel2B,MAAA,CAAO,IAAK,CAAAgnB,UAAA,CAAW,gBAAX,EAAL,CAAmCqK,MAAnC,EAA2C0I,iBAA3C,CAAP,CAAf,CAJkB;AAAA,KAJpB,EALmC;AAAA,IAArC,EAN+B;AAAA,GAsB/B,EAAE7D,SAAF,IAAel2B,MAAA,CAAO,IAAK,CAAAgnB,UAAA,CAAW,gBAAX,EAAL,CAAmCqK,MAAnC,EAA2C0I,iBAA3C,CAAP,CAAf,CAtB+B;AAAA,GAApB,CAAb,CAL0B;AAAA,EA6B1B,IAAIxyB,MAAA,CAAOsb,KAAX;AAAA,GAAkB7iB,MAAA,CAAOuH,MAAA,CAAOjC,KAAd,EA7BQ;AAAA,EA8B1B,OAAO8Z,UAAA,CAAWwU,OAAlB,CA9B0B;AAAA,EADO;AAAA,CAArC,E;;;;;;;ACZa;AACb,IAAIpT,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAIoG,OAAA,GAAUpG,mBAAA,CAAQ,EAAR,CAAd,CAFA;AAGA,IAAIuR,aAAA,GAAgBvR,mBAAA,CAAQ,EAAR,CAApB,CAHA;AAIA,IAAI8C,KAAA,GAAQ9C,mBAAA,CAAQ,EAAR,CAAZ,CAJA;AAKA,IAAI8G,UAAA,GAAa9G,mBAAA,CAAQ,EAAR,CAAjB,CALA;AAMA,IAAI4R,kBAAA,GAAqB5R,mBAAA,CAAQ,EAAR,CAAzB,CANA;AAOA,IAAI+R,cAAA,GAAiB/R,mBAAA,CAAQ,GAAR,CAArB,CAPA;AAQA,IAAIU,QAAA,GAAWV,mBAAA,CAAQ,EAAR,CAAf,CARA;AAWA,IAAIia,WAAA,GAAc,CAAC,CAAC1I,aAAF,IAAmBzO,KAAA,CAAM,YAAY;AAAA,CACrDyO,aAAA,CAAc9P,SAAd,CAAwB,SAAxB,EAAmCoB,IAAnC,CAAwC;AAAA,EAAE+Q,IAAA,EAAM,YAAY;AAAA,GAApB;AAAA,EAAxC,EAA+E,YAAY;AAAA,EAA3F,EADqD;AAAA,CAAlB,CAArC,CAXA;AAiBAtT,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,SAAV;AAAA,CAAqBwN,KAAA,EAAO,IAA5B;AAAA,CAAkCyL,IAAA,EAAM,IAAxC;AAAA,CAA8CvY,MAAA,EAAQsY,WAAtD;AAAA,CAAF,EAAuE;AAAA,CACrE,WAAW,UAAUE,SAAV,EAAqB;AAAA,EAC9B,IAAI/oB,CAAA,GAAIwgB,kBAAA,CAAmB,IAAnB,EAAyB9K,UAAA,CAAW,SAAX,CAAzB,CAAR,CAD8B;AAAA,EAE9B,IAAIsT,UAAA,GAAa,OAAOD,SAAP,IAAoB,UAArC,CAF8B;AAAA,EAG9B,OAAO,KAAKvG,IAAL,CACLwG,UAAA,GAAa,UAAUvE,CAAV,EAAa;AAAA,GACxB,OAAO9D,cAAA,CAAe3gB,CAAf,EAAkB+oB,SAAA,EAAlB,EAA+BvG,IAA/B,CAAoC,YAAY;AAAA,IAAE,OAAOiC,CAAP,CAAF;AAAA,IAAhD,CAAP,CADwB;AAAA,GAA1B,GAEIsE,SAHC,EAILC,UAAA,GAAa,UAAUC,CAAV,EAAa;AAAA,GACxB,OAAOtI,cAAA,CAAe3gB,CAAf,EAAkB+oB,SAAA,EAAlB,EAA+BvG,IAA/B,CAAoC,YAAY;AAAA,IAAE,MAAMyG,CAAN,CAAF;AAAA,IAAhD,CAAP,CADwB;AAAA,GAA1B,GAEIF,SANC,CAAP,CAH8B;AAAA,EADqC;AAAA,CAAvE,EAjBA;AAiCA,IAAI,CAAC/T,OAAD,IAAY,OAAOmL,aAAP,IAAwB,UAApC,IAAkD,CAACA,aAAA,CAAc9P,SAAd,CAAwB,SAAxB,CAAvD,EAA2F;AAAA,CACzFf,QAAA,CAAS6Q,aAAA,CAAc9P,SAAvB,EAAkC,SAAlC,EAA6CqF,UAAA,CAAW,SAAX,EAAsBrF,SAAtB,CAAgC,SAAhC,CAA7C,EADyF;AAAA,C;;;;;;;ACjC9E;AACb,IAAI6Y,MAAA,GAASta,+BAAb,CADA;AAEA,IAAIwE,mBAAA,GAAsBxE,mBAAA,CAAQ,EAAR,CAA1B,CAFA;AAGA,IAAIyJ,cAAA,GAAiBzJ,mBAAA,CAAQ,EAAR,CAArB,CAHA;AAKA,IAAIua,eAAA,GAAkB,iBAAtB,CALA;AAMA,IAAI5Q,gBAAA,GAAmBnF,mBAAA,CAAoBiB,GAA3C,CANA;AAOA,IAAIhB,gBAAA,GAAmBD,mBAAA,CAAoBkB,SAApB,CAA8B6U,eAA9B,CAAvB,CAPA;AAWA9Q,cAAA,CAAejO,MAAf,EAAuB,QAAvB,EAAiC,UAAUoO,QAAV,EAAoB;AAAA,CACnDD,gBAAA,CAAiB,IAAjB,EAAuB;AAAA,EACrB3jB,IAAA,EAAMu0B,eADe;AAAA,EAErBpR,MAAA,EAAQ3N,MAAA,CAAOoO,QAAP,CAFa;AAAA,EAGrBxB,KAAA,EAAO,CAHc;AAAA,EAAvB,EADmD;AAAA,CAArD,EAQG,SAASzf,IAAT,GAAgB;AAAA,CACjB,IAAIb,KAAA,GAAQ2c,gBAAA,CAAiB,IAAjB,CAAZ,CADiB;AAAA,CAEjB,IAAI0E,MAAA,GAASrhB,KAAA,CAAMqhB,MAAnB,CAFiB;AAAA,CAGjB,IAAIf,KAAA,GAAQtgB,KAAA,CAAMsgB,KAAlB,CAHiB;AAAA,CAIjB,IAAIoS,KAAJ,CAJiB;AAAA,CAKjB,IAAIpS,KAAA,IAASe,MAAA,CAAO7N,MAApB;AAAA,EAA4B,OAAO;AAAA,GAAElW,KAAA,EAAOwc,SAAT;AAAA,GAAoBxZ,IAAA,EAAM,IAA1B;AAAA,GAAP,CALX;AAAA,CAMjBoyB,KAAA,GAAQF,MAAA,CAAOnR,MAAP,EAAef,KAAf,CAAR,CANiB;AAAA,CAOjBtgB,KAAA,CAAMsgB,KAAN,IAAeoS,KAAA,CAAMlf,MAArB,CAPiB;AAAA,CAQjB,OAAO;AAAA,EAAElW,KAAA,EAAOo1B,KAAT;AAAA,EAAgBpyB,IAAA,EAAM,KAAtB;AAAA,EAAP,CARiB;AAAA,CARnB,E;;;;;;ACXA,IAAIkgB,SAAA,GAAYtI,mBAAA,CAAQ,EAAR,CAAhB;AACA,IAAIsD,sBAAA,GAAyBtD,mBAAA,CAAQ,EAAR,CAA7B,CADA;AAIA,IAAI+H,YAAA,GAAe,UAAU0S,iBAAV,EAA6B;AAAA,CAC9C,OAAO,UAAUxS,KAAV,EAAiBlM,GAAjB,EAAsB;AAAA,EAC3B,IAAI6a,CAAA,GAAIpb,MAAA,CAAO8H,sBAAA,CAAuB2E,KAAvB,CAAP,CAAR,CAD2B;AAAA,EAE3B,IAAIyS,QAAA,GAAWpS,SAAA,CAAUvM,GAAV,CAAf,CAF2B;AAAA,EAG3B,IAAI4e,IAAA,GAAO/D,CAAA,CAAEtb,MAAb,CAH2B;AAAA,EAI3B,IAAIyC,KAAJ,EAAWvZ,MAAX,CAJ2B;AAAA,EAK3B,IAAIk2B,QAAA,GAAW,CAAX,IAAgBA,QAAA,IAAYC,IAAhC;AAAA,GAAsC,OAAOF,iBAAA,GAAoB,EAApB,GAAyB7Y,SAAhC,CALX;AAAA,EAM3B7D,KAAA,GAAQ6Y,CAAA,CAAEgE,UAAF,CAAaF,QAAb,CAAR,CAN2B;AAAA,EAO3B,OAAO3c,KAAA,GAAQ,MAAR,IAAkBA,KAAA,GAAQ,MAA1B,IAAoC2c,QAAA,GAAW,CAAX,KAAiBC,IAArD,IACD,CAAAn2B,MAAA,GAASoyB,CAAA,CAAEgE,UAAF,CAAaF,QAAA,GAAW,CAAxB,CAAT,CAAD,GAAwC,MADtC,IACgDl2B,MAAA,GAAS,MADzD,GAEDi2B,iBAAA,GAAoB7D,CAAA,CAAE0D,MAAF,CAASI,QAAT,CAApB,GAAyC3c,KAFxC,GAGD0c,iBAAA,GAAoB7D,CAAA,CAAEnT,KAAF,CAAQiX,QAAR,EAAkBA,QAAA,GAAW,CAA7B,CAApB,GAAuD,CAAA3c,KAAA,GAAQ,MAAR,IAAkB,EAAlB,CAAD,GAA0B,CAAAvZ,MAAA,GAAS,MAAT,CAA1B,GAA6C,OAHzG,CAP2B;AAAA,EAA7B,CAD8C;AAAA,CAAhD,CAJA;AAmBAI,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CAGf80B,MAAA,EAAQ9S,YAAA,CAAa,KAAb,CAHO;AAAA,CAMfuS,MAAA,EAAQvS,YAAA,CAAa,IAAb,CANO;AAAA,CAAjB,C;;;;;;ACnBA,IAAIxH,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAI8a,YAAA,GAAe9a,mBAAA,CAAQ,GAAR,CAAnB,CADA;AAEA,IAAI+a,oBAAA,GAAuB/a,mBAAA,CAAQ,EAAR,CAA3B,CAFA;AAGA,IAAIS,2BAAA,GAA8BT,mBAAA,CAAQ,EAAR,CAAlC,CAHA;AAIA,IAAI+J,eAAA,GAAkB/J,mBAAA,CAAQ,EAAR,CAAtB,CAJA;AAMA,IAAImN,QAAA,GAAWpD,eAAA,CAAgB,UAAhB,CAAf,CANA;AAOA,IAAImE,aAAA,GAAgBnE,eAAA,CAAgB,aAAhB,CAApB,CAPA;AAQA,IAAIiR,WAAA,GAAcD,oBAAA,CAAqBp0B,MAAvC,CARA;AAUA,SAASs0B,eAAT,IAA4BH,YAA5B,EAA0C;AAAA,CACxC,IAAII,UAAA,GAAa3a,MAAA,CAAO0a,eAAP,CAAjB,CADwC;AAAA,CAExC,IAAIE,mBAAA,GAAsBD,UAAA,IAAcA,UAAA,CAAWzZ,SAAnD,CAFwC;AAAA,CAGxC,IAAI0Z,mBAAJ,EAAyB;AAAA,EAEvB,IAAIA,mBAAA,CAAoBhO,QAApB,MAAkC6N,WAAtC;AAAA,GAAmD,IAAI;AAAA,IACrDva,2BAAA,CAA4B0a,mBAA5B,EAAiDhO,QAAjD,EAA2D6N,WAA3D,EADqD;AAAA,IAAJ,CAEjD,OAAOrY,KAAP,EAAc;AAAA,IACdwY,mBAAA,CAAoBhO,QAApB,IAAgC6N,WAAhC,CADc;AAAA,IAJO;AAAA,EAOvB,IAAI,CAACG,mBAAA,CAAoBjN,aAApB,CAAL,EAAyC;AAAA,GACvCzN,2BAAA,CAA4B0a,mBAA5B,EAAiDjN,aAAjD,EAAgE+M,eAAhE,EADuC;AAAA,GAPlB;AAAA,EAUvB,IAAIH,YAAA,CAAaG,eAAb,CAAJ;AAAA,GAAmC,SAASG,WAAT,IAAwBL,oBAAxB,EAA8C;AAAA,IAE/E,IAAII,mBAAA,CAAoBC,WAApB,MAAqCL,oBAAA,CAAqBK,WAArB,CAAzC;AAAA,KAA4E,IAAI;AAAA,MAC9E3a,2BAAA,CAA4B0a,mBAA5B,EAAiDC,WAAjD,EAA8DL,oBAAA,CAAqBK,WAArB,CAA9D,EAD8E;AAAA,MAAJ,CAE1E,OAAOzY,KAAP,EAAc;AAAA,MACdwY,mBAAA,CAAoBC,WAApB,IAAmCL,oBAAA,CAAqBK,WAArB,CAAnC,CADc;AAAA,MAJ+D;AAAA,IAV1D;AAAA,EAHe;AAAA,C;;;;;;ACR1Cx2B,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CACfs1B,WAAA,EAAa,CADE;AAAA,CAEfC,mBAAA,EAAqB,CAFN;AAAA,CAGfC,YAAA,EAAc,CAHC;AAAA,CAIfC,cAAA,EAAgB,CAJD;AAAA,CAKfC,WAAA,EAAa,CALE;AAAA,CAMfC,aAAA,EAAe,CANA;AAAA,CAOfC,YAAA,EAAc,CAPC;AAAA,CAQfC,oBAAA,EAAsB,CARP;AAAA,CASfC,QAAA,EAAU,CATK;AAAA,CAUfC,iBAAA,EAAmB,CAVJ;AAAA,CAWfC,cAAA,EAAgB,CAXD;AAAA,CAYfC,eAAA,EAAiB,CAZF;AAAA,CAafC,iBAAA,EAAmB,CAbJ;AAAA,CAcfC,SAAA,EAAW,CAdI;AAAA,CAefC,aAAA,EAAe,CAfA;AAAA,CAgBfC,YAAA,EAAc,CAhBC;AAAA,CAiBfC,QAAA,EAAU,CAjBK;AAAA,CAkBfC,gBAAA,EAAkB,CAlBH;AAAA,CAmBfC,MAAA,EAAQ,CAnBO;AAAA,CAoBfC,WAAA,EAAa,CApBE;AAAA,CAqBfC,aAAA,EAAe,CArBA;AAAA,CAsBfC,aAAA,EAAe,CAtBA;AAAA,CAuBfC,cAAA,EAAgB,CAvBD;AAAA,CAwBfC,YAAA,EAAc,CAxBC;AAAA,CAyBfC,aAAA,EAAe,CAzBA;AAAA,CA0BfC,gBAAA,EAAkB,CA1BH;AAAA,CA2BfC,gBAAA,EAAkB,CA3BH;AAAA,CA4BfC,cAAA,EAAgB,CA5BD;AAAA,CA6BfC,gBAAA,EAAkB,CA7BH;AAAA,CA8BfC,aAAA,EAAe,CA9BA;AAAA,CA+BfC,SAAA,EAAW,CA/BI;AAAA,CAAjB,C;;;;;;ACCA,CAAC,UAAU5c,MAAV,EAAkB6c,OAAlB,EAA2B;AAAA,CACxB,QAA+DA,OAAA,CAAQr3B,OAAR,CAA/D,GACA,CADA,CADwB;AAAA,CAA3B,CAIC,IAJD,EAIQ,UAAUA,OAAV,EAAmB;AAAA,CAAE,aAAF;AAAA,CAGxB,IAAIs3B,cAAA,GAAiB,OAAOhT,MAAP,KAAkB,UAAlB,IAAgC,OAAOA,MAAA,CAAOvgB,QAAd,KAA2B,QAA3D,GACjBugB,MADiB,GAEjB,UAAUiT,WAAV,EAAuB;AAAA,EAAE,OAAO,YAAYA,WAAZ,GAA0B,GAAjC,CAAF;AAAA,EAF3B,CAHwB;AAAA,CAQxB,SAASC,IAAT,GAAgB;AAAA,EARQ;AAAA,CAWxB,SAASC,UAAT,GAAsB;AAAA,EAClB,IAAI,OAAOvb,IAAP,KAAgB,WAApB,EAAiC;AAAA,GAC7B,OAAOA,IAAP,CAD6B;AAAA,GAAjC,MAGK,IAAI,OAAOD,MAAP,KAAkB,WAAtB,EAAmC;AAAA,GACpC,OAAOA,MAAP,CADoC;AAAA,GAAnC,MAGA,IAAI,OAAOzB,MAAP,KAAkB,WAAtB,EAAmC;AAAA,GACpC,OAAOA,MAAP,CADoC;AAAA,GAPtB;AAAA,EAUlB,OAAOqB,SAAP,CAVkB;AAAA,EAXE;AAAA,CAuBxB,IAAI6b,OAAA,GAAUD,UAAA,EAAd,CAvBwB;AAAA,CAyBxB,SAASE,YAAT,CAAsB7H,CAAtB,EAAyB;AAAA,EACrB,OAAQ,OAAOA,CAAP,KAAa,QAAb,IAAyBA,CAAA,KAAM,IAAhC,IAAyC,OAAOA,CAAP,KAAa,UAA7D,CADqB;AAAA,EAzBD;AAAA,CA4BxB,IAAI8H,8BAAA,GAAkCJ,IAAtC,CA5BwB;AAAA,CA8BxB,IAAIK,eAAA,GAAkB5M,OAAtB,CA9BwB;AAAA,CA+BxB,IAAI6M,mBAAA,GAAsB7M,OAAA,CAAQvP,SAAR,CAAkBmS,IAA5C,CA/BwB;AAAA,CAgCxB,IAAIkK,sBAAA,GAAyB9M,OAAA,CAAQnxB,OAAR,CAAgB6vB,IAAhB,CAAqBkO,eAArB,CAA7B,CAhCwB;AAAA,CAiCxB,IAAIG,qBAAA,GAAwB/M,OAAA,CAAQlxB,MAAR,CAAe4vB,IAAf,CAAoBkO,eAApB,CAA5B,CAjCwB;AAAA,CAkCxB,SAASI,UAAT,CAAoBvI,QAApB,EAA8B;AAAA,EAC1B,OAAO,IAAImI,eAAJ,CAAoBnI,QAApB,CAAP,CAD0B;AAAA,EAlCN;AAAA,CAqCxB,SAASwI,mBAAT,CAA6B74B,KAA7B,EAAoC;AAAA,EAChC,OAAO04B,sBAAA,CAAuB14B,KAAvB,CAAP,CADgC;AAAA,EArCZ;AAAA,CAwCxB,SAAS84B,mBAAT,CAA6B/+B,MAA7B,EAAqC;AAAA,EACjC,OAAO4+B,qBAAA,CAAsB5+B,MAAtB,CAAP,CADiC;AAAA,EAxCb;AAAA,CA2CxB,SAASg/B,kBAAT,CAA4BzK,OAA5B,EAAqCgC,WAArC,EAAkDC,UAAlD,EAA8D;AAAA,EAG1D,OAAOkI,mBAAA,CAAoBhb,IAApB,CAAyB6Q,OAAzB,EAAkCgC,WAAlC,EAA+CC,UAA/C,CAAP,CAH0D;AAAA,EA3CtC;AAAA,CAgDxB,SAASyI,WAAT,CAAqB1K,OAArB,EAA8BgC,WAA9B,EAA2CC,UAA3C,EAAuD;AAAA,EACnDwI,kBAAA,CAAmBA,kBAAA,CAAmBzK,OAAnB,EAA4BgC,WAA5B,EAAyCC,UAAzC,CAAnB,EAAyE/T,SAAzE,EAAoF+b,8BAApF,EADmD;AAAA,EAhD/B;AAAA,CAmDxB,SAASU,eAAT,CAAyB3K,OAAzB,EAAkCgC,WAAlC,EAA+C;AAAA,EAC3C0I,WAAA,CAAY1K,OAAZ,EAAqBgC,WAArB,EAD2C;AAAA,EAnDvB;AAAA,CAsDxB,SAAS4I,aAAT,CAAuB5K,OAAvB,EAAgCiC,UAAhC,EAA4C;AAAA,EACxCyI,WAAA,CAAY1K,OAAZ,EAAqB9R,SAArB,EAAgC+T,UAAhC,EADwC;AAAA,EAtDpB;AAAA,CAyDxB,SAAS4I,oBAAT,CAA8B7K,OAA9B,EAAuC8K,kBAAvC,EAA2DC,gBAA3D,EAA6E;AAAA,EACzE,OAAON,kBAAA,CAAmBzK,OAAnB,EAA4B8K,kBAA5B,EAAgDC,gBAAhD,CAAP,CADyE;AAAA,EAzDrD;AAAA,CA4DxB,SAASC,yBAAT,CAAmChL,OAAnC,EAA4C;AAAA,EACxCyK,kBAAA,CAAmBzK,OAAnB,EAA4B9R,SAA5B,EAAuC+b,8BAAvC,EADwC;AAAA,EA5DpB;AAAA,CA+DxB,IAAI7E,cAAA,GAAkB,YAAY;AAAA,EAC9B,IAAI6F,oBAAA,GAAuBlB,OAAA,IAAWA,OAAA,CAAQ3E,cAA9C,CAD8B;AAAA,EAE9B,IAAI,OAAO6F,oBAAP,KAAgC,UAApC,EAAgD;AAAA,GAC5C,OAAOA,oBAAP,CAD4C;AAAA,GAFlB;AAAA,EAK9B,IAAIC,eAAA,GAAkBX,mBAAA,CAAoBrc,SAApB,CAAtB,CAL8B;AAAA,EAM9B,OAAO,UAAU1b,EAAV,EAAc;AAAA,GAAE,OAAOi4B,kBAAA,CAAmBS,eAAnB,EAAoC14B,EAApC,CAAP,CAAF;AAAA,GAArB,CAN8B;AAAA,EAAb,EAArB,CA/DwB;AAAA,CAuExB,SAAS24B,WAAT,CAAqB3tB,CAArB,EAAwBC,CAAxB,EAA2B4mB,IAA3B,EAAiC;AAAA,EAC7B,IAAI,OAAO7mB,CAAP,KAAa,UAAjB,EAA6B;AAAA,GACzB,MAAM,IAAIwS,SAAJ,CAAc,4BAAd,CAAN,CADyB;AAAA,GADA;AAAA,EAI7B,OAAOxZ,QAAA,CAASuX,SAAT,CAAmB8O,KAAnB,CAAyB1N,IAAzB,CAA8B3R,CAA9B,EAAiCC,CAAjC,EAAoC4mB,IAApC,CAAP,CAJ6B;AAAA,EAvET;AAAA,CA6ExB,SAAS+G,WAAT,CAAqB5tB,CAArB,EAAwBC,CAAxB,EAA2B4mB,IAA3B,EAAiC;AAAA,EAC7B,IAAI;AAAA,GACA,OAAOkG,mBAAA,CAAoBY,WAAA,CAAY3tB,CAAZ,EAAeC,CAAf,EAAkB4mB,IAAlB,CAApB,CAAP,CADA;AAAA,GAAJ,CAGA,OAAO3yB,KAAP,EAAc;AAAA,GACV,OAAO84B,mBAAA,CAAoB94B,KAApB,CAAP,CADU;AAAA,GAJe;AAAA,EA7ET;AAAA,CAwFxB,IAAI25B,oBAAA,GAAuB,KAA3B,CAxFwB;AAAA,CA+FxB,IAAIC,WAAA,GAA6B,YAAY;AAAA,EACzC,SAASA,WAAT,GAAuB;AAAA,GACnB,KAAKC,OAAL,GAAe,CAAf,CADmB;AAAA,GAEnB,KAAKC,KAAL,GAAa,CAAb,CAFmB;AAAA,GAInB,KAAKC,MAAL,GAAc;AAAA,IACVC,SAAA,EAAW,EADD;AAAA,IAEVC,KAAA,EAAOzd,SAFG;AAAA,IAAd,CAJmB;AAAA,GAQnB,KAAK0d,KAAL,GAAa,KAAKH,MAAlB,CARmB;AAAA,GAYnB,KAAKF,OAAL,GAAe,CAAf,CAZmB;AAAA,GAcnB,KAAKC,KAAL,GAAa,CAAb,CAdmB;AAAA,GADkB;AAAA,EAiBzCl8B,MAAA,CAAO+f,cAAP,CAAsBic,WAAA,CAAYvd,SAAlC,EAA6C,QAA7C,EAAuD;AAAA,GACnDrC,GAAA,EAAK,YAAY;AAAA,IACb,OAAO,KAAK8f,KAAZ,CADa;AAAA,IADkC;AAAA,GAInD75B,UAAA,EAAY,KAJuC;AAAA,GAKnDC,YAAA,EAAc,IALqC;AAAA,GAAvD,EAjByC;AAAA,EA4BzC05B,WAAA,CAAYvd,SAAZ,CAAsB4E,IAAtB,GAA6B,UAAUkZ,OAAV,EAAmB;AAAA,GAC5C,IAAIC,OAAA,GAAU,KAAKF,KAAnB,CAD4C;AAAA,GAE5C,IAAIG,OAAA,GAAUD,OAAd,CAF4C;AAAA,GAG5C,IAAIA,OAAA,CAAQJ,SAAR,CAAkB9jB,MAAlB,KAA6ByjB,oBAAA,GAAuB,CAAxD,EAA2D;AAAA,IACvDU,OAAA,GAAU;AAAA,KACNL,SAAA,EAAW,EADL;AAAA,KAENC,KAAA,EAAOzd,SAFD;AAAA,KAAV,CADuD;AAAA,IAHf;AAAA,GAW5C4d,OAAA,CAAQJ,SAAR,CAAkB/Y,IAAlB,CAAuBkZ,OAAvB,EAX4C;AAAA,GAY5C,IAAIE,OAAA,KAAYD,OAAhB,EAAyB;AAAA,IACrB,KAAKF,KAAL,GAAaG,OAAb,CADqB;AAAA,IAErBD,OAAA,CAAQH,KAAR,GAAgBI,OAAhB,CAFqB;AAAA,IAZmB;AAAA,GAgB5C,EAAE,KAAKP,KAAP,CAhB4C;AAAA,GAAhD,CA5ByC;AAAA,EAgDzCF,WAAA,CAAYvd,SAAZ,CAAsBie,KAAtB,GAA8B,YAAY;AAAA,GACtC,IAAIC,QAAA,GAAW,KAAKR,MAApB,CADsC;AAAA,GAEtC,IAAIS,QAAA,GAAWD,QAAf,CAFsC;AAAA,GAGtC,IAAIE,SAAA,GAAY,KAAKZ,OAArB,CAHsC;AAAA,GAItC,IAAIa,SAAA,GAAYD,SAAA,GAAY,CAA5B,CAJsC;AAAA,GAKtC,IAAIE,QAAA,GAAWJ,QAAA,CAASP,SAAxB,CALsC;AAAA,GAMtC,IAAIG,OAAA,GAAUQ,QAAA,CAASF,SAAT,CAAd,CANsC;AAAA,GAOtC,IAAIC,SAAA,KAAcf,oBAAlB,EAAwC;AAAA,IACpCa,QAAA,GAAWD,QAAA,CAASN,KAApB,CADoC;AAAA,IAEpCS,SAAA,GAAY,CAAZ,CAFoC;AAAA,IAPF;AAAA,GAYtC,EAAE,KAAKZ,KAAP,CAZsC;AAAA,GAatC,KAAKD,OAAL,GAAea,SAAf,CAbsC;AAAA,GActC,IAAIH,QAAA,KAAaC,QAAjB,EAA2B;AAAA,IACvB,KAAKT,MAAL,GAAcS,QAAd,CADuB;AAAA,IAdW;AAAA,GAkBtCG,QAAA,CAASF,SAAT,IAAsBje,SAAtB,CAlBsC;AAAA,GAmBtC,OAAO2d,OAAP,CAnBsC;AAAA,GAA1C,CAhDyC;AAAA,EA6EzCP,WAAA,CAAYvd,SAAZ,CAAsBue,OAAtB,GAAgC,UAAUC,QAAV,EAAoB;AAAA,GAChD,IAAI79B,CAAA,GAAI,KAAK68B,OAAb,CADgD;AAAA,GAEhD,IAAI9F,IAAA,GAAO,KAAKgG,MAAhB,CAFgD;AAAA,GAGhD,IAAIY,QAAA,GAAW5G,IAAA,CAAKiG,SAApB,CAHgD;AAAA,GAIhD,OAAOh9B,CAAA,KAAM29B,QAAA,CAASzkB,MAAf,IAAyB6d,IAAA,CAAKkG,KAAL,KAAezd,SAA/C,EAA0D;AAAA,IACtD,IAAIxf,CAAA,KAAM29B,QAAA,CAASzkB,MAAnB,EAA2B;AAAA,KACvB6d,IAAA,GAAOA,IAAA,CAAKkG,KAAZ,CADuB;AAAA,KAEvBU,QAAA,GAAW5G,IAAA,CAAKiG,SAAhB,CAFuB;AAAA,KAGvBh9B,CAAA,GAAI,CAAJ,CAHuB;AAAA,KAIvB,IAAI29B,QAAA,CAASzkB,MAAT,KAAoB,CAAxB,EAA2B;AAAA,MACvB,MADuB;AAAA,MAJJ;AAAA,KAD2B;AAAA,IAStD2kB,QAAA,CAASF,QAAA,CAAS39B,CAAT,CAAT,EATsD;AAAA,IAUtD,EAAEA,CAAF,CAVsD;AAAA,IAJV;AAAA,GAApD,CA7EyC;AAAA,EAgGzC48B,WAAA,CAAYvd,SAAZ,CAAsBye,IAAtB,GAA6B,YAAY;AAAA,GACrC,IAAIC,KAAA,GAAQ,KAAKhB,MAAjB,CADqC;AAAA,GAErC,IAAIiB,MAAA,GAAS,KAAKnB,OAAlB,CAFqC;AAAA,GAGrC,OAAOkB,KAAA,CAAMf,SAAN,CAAgBgB,MAAhB,CAAP,CAHqC;AAAA,GAAzC,CAhGyC;AAAA,EAqGzC,OAAOpB,WAAP,CArGyC;AAAA,EAAZ,EAAjC,CA/FwB;AAAA,CAuMxB,SAASqB,qCAAT,CAA+CC,MAA/C,EAAuDC,MAAvD,EAA+D;AAAA,EAC3DD,MAAA,CAAOE,oBAAP,GAA8BD,MAA9B,CAD2D;AAAA,EAE3DA,MAAA,CAAOE,OAAP,GAAiBH,MAAjB,CAF2D;AAAA,EAG3D,IAAIC,MAAA,CAAOG,MAAP,KAAkB,UAAtB,EAAkC;AAAA,GAC9BC,oCAAA,CAAqCL,MAArC,EAD8B;AAAA,GAAlC,MAGK,IAAIC,MAAA,CAAOG,MAAP,KAAkB,QAAtB,EAAgC;AAAA,GACjCE,8CAAA,CAA+CN,MAA/C,EADiC;AAAA,GAAhC,MAGA;AAAA,GACDO,8CAAA,CAA+CP,MAA/C,EAAuDC,MAAA,CAAOO,YAA9D,EADC;AAAA,GATsD;AAAA,EAvMvC;AAAA,CAsNxB,SAASC,iCAAT,CAA2CT,MAA3C,EAAmDnhC,MAAnD,EAA2D;AAAA,EACvD,IAAIohC,MAAA,GAASD,MAAA,CAAOE,oBAApB,CADuD;AAAA,EAEvD,OAAOQ,oBAAA,CAAqBT,MAArB,EAA6BphC,MAA7B,CAAP,CAFuD;AAAA,EAtNnC;AAAA,CA0NxB,SAAS8hC,kCAAT,CAA4CX,MAA5C,EAAoD;AAAA,EAChD,IAAIA,MAAA,CAAOE,oBAAP,CAA4BE,MAA5B,KAAuC,UAA3C,EAAuD;AAAA,GACnDQ,gCAAA,CAAiCZ,MAAjC,EAAyC,IAAI5c,SAAJ,CAAc,kFAAd,CAAzC,EADmD;AAAA,GAAvD,MAGK;AAAA,GACDyd,yCAAA,CAA0Cb,MAA1C,EAAkD,IAAI5c,SAAJ,CAAc,kFAAd,CAAlD,EADC;AAAA,GAJ2C;AAAA,EAOhD4c,MAAA,CAAOE,oBAAP,CAA4BC,OAA5B,GAAsC7e,SAAtC,CAPgD;AAAA,EAQhD0e,MAAA,CAAOE,oBAAP,GAA8B5e,SAA9B,CARgD;AAAA,EA1N5B;AAAA,CAqOxB,SAASwf,mBAAT,CAA6Bl+B,IAA7B,EAAmC;AAAA,EAC/B,OAAO,IAAIwgB,SAAJ,CAAc,YAAYxgB,IAAZ,GAAmB,mCAAjC,CAAP,CAD+B;AAAA,EArOX;AAAA,CAyOxB,SAASy9B,oCAAT,CAA8CL,MAA9C,EAAsD;AAAA,EAClDA,MAAA,CAAOe,cAAP,GAAwBrD,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,GAC1DwgC,MAAA,CAAOgB,sBAAP,GAAgCzhC,OAAhC,CAD0D;AAAA,GAE1DygC,MAAA,CAAOiB,qBAAP,GAA+BzhC,MAA/B,CAF0D;AAAA,GAAtC,CAAxB,CADkD;AAAA,EAzO9B;AAAA,CA+OxB,SAAS+gC,8CAAT,CAAwDP,MAAxD,EAAgEnhC,MAAhE,EAAwE;AAAA,EACpEwhC,oCAAA,CAAqCL,MAArC,EADoE;AAAA,EAEpEY,gCAAA,CAAiCZ,MAAjC,EAAyCnhC,MAAzC,EAFoE;AAAA,EA/OhD;AAAA,CAmPxB,SAASyhC,8CAAT,CAAwDN,MAAxD,EAAgE;AAAA,EAC5DK,oCAAA,CAAqCL,MAArC,EAD4D;AAAA,EAE5DkB,iCAAA,CAAkClB,MAAlC,EAF4D;AAAA,EAnPxC;AAAA,CAuPxB,SAASY,gCAAT,CAA0CZ,MAA1C,EAAkDnhC,MAAlD,EAA0D;AAAA,EACtD,IAAImhC,MAAA,CAAOiB,qBAAP,KAAiC3f,SAArC,EAAgD;AAAA,GAC5C,OAD4C;AAAA,GADM;AAAA,EAItD8c,yBAAA,CAA0B4B,MAAA,CAAOe,cAAjC,EAJsD;AAAA,EAKtDf,MAAA,CAAOiB,qBAAP,CAA6BpiC,MAA7B,EALsD;AAAA,EAMtDmhC,MAAA,CAAOgB,sBAAP,GAAgC1f,SAAhC,CANsD;AAAA,EAOtD0e,MAAA,CAAOiB,qBAAP,GAA+B3f,SAA/B,CAPsD;AAAA,EAvPlC;AAAA,CAgQxB,SAASuf,yCAAT,CAAmDb,MAAnD,EAA2DnhC,MAA3D,EAAmE;AAAA,EAC/D0hC,8CAAA,CAA+CP,MAA/C,EAAuDnhC,MAAvD,EAD+D;AAAA,EAhQ3C;AAAA,CAmQxB,SAASqiC,iCAAT,CAA2ClB,MAA3C,EAAmD;AAAA,EAC/C,IAAIA,MAAA,CAAOgB,sBAAP,KAAkC1f,SAAtC,EAAiD;AAAA,GAC7C,OAD6C;AAAA,GADF;AAAA,EAI/C0e,MAAA,CAAOgB,sBAAP,CAA8B1f,SAA9B,EAJ+C;AAAA,EAK/C0e,MAAA,CAAOgB,sBAAP,GAAgC1f,SAAhC,CAL+C;AAAA,EAM/C0e,MAAA,CAAOiB,qBAAP,GAA+B3f,SAA/B,CAN+C;AAAA,EAnQ3B;AAAA,CA4QxB,IAAI6f,UAAA,GAAapE,cAAA,CAAe,gBAAf,CAAjB,CA5QwB;AAAA,CA6QxB,IAAIqE,UAAA,GAAarE,cAAA,CAAe,gBAAf,CAAjB,CA7QwB;AAAA,CA8QxB,IAAIsE,WAAA,GAActE,cAAA,CAAe,iBAAf,CAAlB,CA9QwB;AAAA,CA+QxB,IAAIuE,SAAA,GAAYvE,cAAA,CAAe,eAAf,CAAhB,CA/QwB;AAAA,CAmRxB,IAAIwE,cAAA,GAAiBhnB,MAAA,CAAOinB,QAAP,IAAmB,UAAUjM,CAAV,EAAa;AAAA,EACjD,OAAO,OAAOA,CAAP,KAAa,QAAb,IAAyBiM,QAAA,CAASjM,CAAT,CAAhC,CADiD;AAAA,EAArD,CAnRwB;AAAA,CAyRxB,IAAIkM,SAAA,GAAYjhC,IAAA,CAAKkhC,KAAL,IAAc,UAAUtkB,CAAV,EAAa;AAAA,EACvC,OAAOA,CAAA,GAAI,CAAJ,GAAQ5c,IAAA,CAAK2nB,IAAL,CAAU/K,CAAV,CAAR,GAAuB5c,IAAA,CAAK4nB,KAAL,CAAWhL,CAAX,CAA9B,CADuC;AAAA,EAA3C,CAzRwB;AAAA,CA8RxB,SAASukB,YAAT,CAAsBpM,CAAtB,EAAyB;AAAA,EACrB,OAAO,OAAOA,CAAP,KAAa,QAAb,IAAyB,OAAOA,CAAP,KAAa,UAA7C,CADqB;AAAA,EA9RD;AAAA,CAiSxB,SAASqM,gBAAT,CAA0B18B,GAA1B,EAA+B3G,OAA/B,EAAwC;AAAA,EACpC,IAAI2G,GAAA,KAAQoc,SAAR,IAAqB,CAACqgB,YAAA,CAAaz8B,GAAb,CAA1B,EAA6C;AAAA,GACzC,MAAM,IAAIke,SAAJ,CAAc7kB,OAAA,GAAU,oBAAxB,CAAN,CADyC;AAAA,GADT;AAAA,EAjShB;AAAA,CAuSxB,SAASsjC,cAAT,CAAwBtM,CAAxB,EAA2Bh3B,OAA3B,EAAoC;AAAA,EAChC,IAAI,OAAOg3B,CAAP,KAAa,UAAjB,EAA6B;AAAA,GACzB,MAAM,IAAInS,SAAJ,CAAc7kB,OAAA,GAAU,qBAAxB,CAAN,CADyB;AAAA,GADG;AAAA,EAvSZ;AAAA,CA6SxB,SAAS8kB,QAAT,CAAkBkS,CAAlB,EAAqB;AAAA,EACjB,OAAQ,OAAOA,CAAP,KAAa,QAAb,IAAyBA,CAAA,KAAM,IAAhC,IAAyC,OAAOA,CAAP,KAAa,UAA7D,CADiB;AAAA,EA7SG;AAAA,CAgTxB,SAASuM,YAAT,CAAsBvM,CAAtB,EAAyBh3B,OAAzB,EAAkC;AAAA,EAC9B,IAAI,CAAC8kB,QAAA,CAASkS,CAAT,CAAL,EAAkB;AAAA,GACd,MAAM,IAAInS,SAAJ,CAAc7kB,OAAA,GAAU,oBAAxB,CAAN,CADc;AAAA,GADY;AAAA,EAhTV;AAAA,CAqTxB,SAASwjC,sBAAT,CAAgCxM,CAAhC,EAAmC6E,QAAnC,EAA6C77B,OAA7C,EAAsD;AAAA,EAClD,IAAIg3B,CAAA,KAAMjU,SAAV,EAAqB;AAAA,GACjB,MAAM,IAAI8B,SAAJ,CAAc,eAAegX,QAAf,GAA0B,mBAA1B,GAAgD77B,OAAhD,GAA0D,IAAxE,CAAN,CADiB;AAAA,GAD6B;AAAA,EArT9B;AAAA,CA0TxB,SAASyjC,mBAAT,CAA6BzM,CAA7B,EAAgC0M,KAAhC,EAAuC1jC,OAAvC,EAAgD;AAAA,EAC5C,IAAIg3B,CAAA,KAAMjU,SAAV,EAAqB;AAAA,GACjB,MAAM,IAAI8B,SAAJ,CAAc6e,KAAA,GAAQ,mBAAR,GAA8B1jC,OAA9B,GAAwC,IAAtD,CAAN,CADiB;AAAA,GADuB;AAAA,EA1TxB;AAAA,CAgUxB,SAAS2jC,yBAAT,CAAmCp9B,KAAnC,EAA0C;AAAA,EACtC,OAAOyV,MAAA,CAAOzV,KAAP,CAAP,CADsC;AAAA,EAhUlB;AAAA,CAmUxB,SAASq9B,kBAAT,CAA4B5M,CAA5B,EAA+B;AAAA,EAC3B,OAAOA,CAAA,KAAM,CAAN,GAAU,CAAV,GAAcA,CAArB,CAD2B;AAAA,EAnUP;AAAA,CAsUxB,SAAS6M,WAAT,CAAqB7M,CAArB,EAAwB;AAAA,EACpB,OAAO4M,kBAAA,CAAmBV,SAAA,CAAUlM,CAAV,CAAnB,CAAP,CADoB;AAAA,EAtUA;AAAA,CA0UxB,SAAS8M,uCAAT,CAAiDv9B,KAAjD,EAAwDvG,OAAxD,EAAiE;AAAA,EAC7D,IAAI+jC,UAAA,GAAa,CAAjB,CAD6D;AAAA,EAE7D,IAAIC,UAAA,GAAahoB,MAAA,CAAOioB,gBAAxB,CAF6D;AAAA,EAG7D,IAAIjN,CAAA,GAAIhb,MAAA,CAAOzV,KAAP,CAAR,CAH6D;AAAA,EAI7DywB,CAAA,GAAI4M,kBAAA,CAAmB5M,CAAnB,CAAJ,CAJ6D;AAAA,EAK7D,IAAI,CAACgM,cAAA,CAAehM,CAAf,CAAL,EAAwB;AAAA,GACpB,MAAM,IAAInS,SAAJ,CAAc7kB,OAAA,GAAU,yBAAxB,CAAN,CADoB;AAAA,GALqC;AAAA,EAQ7Dg3B,CAAA,GAAI6M,WAAA,CAAY7M,CAAZ,CAAJ,CAR6D;AAAA,EAS7D,IAAIA,CAAA,GAAI+M,UAAJ,IAAkB/M,CAAA,GAAIgN,UAA1B,EAAsC;AAAA,GAClC,MAAM,IAAInf,SAAJ,CAAc7kB,OAAA,GAAU,oCAAV,GAAiD+jC,UAAjD,GAA8D,MAA9D,GAAuEC,UAAvE,GAAoF,aAAlG,CAAN,CADkC;AAAA,GATuB;AAAA,EAY7D,IAAI,CAAChB,cAAA,CAAehM,CAAf,CAAD,IAAsBA,CAAA,KAAM,CAAhC,EAAmC;AAAA,GAC/B,OAAO,CAAP,CAD+B;AAAA,GAZ0B;AAAA,EAmB7D,OAAOA,CAAP,CAnB6D;AAAA,EA1UzC;AAAA,CAgWxB,SAASkN,oBAAT,CAA8BlN,CAA9B,EAAiCh3B,OAAjC,EAA0C;AAAA,EACtC,IAAI,CAACmkC,gBAAA,CAAiBnN,CAAjB,CAAL,EAA0B;AAAA,GACtB,MAAM,IAAInS,SAAJ,CAAc7kB,OAAA,GAAU,2BAAxB,CAAN,CADsB;AAAA,GADY;AAAA,EAhWlB;AAAA,CAuWxB,SAASokC,kCAAT,CAA4C1C,MAA5C,EAAoD;AAAA,EAChD,OAAO,IAAI2C,2BAAJ,CAAgC3C,MAAhC,CAAP,CADgD;AAAA,EAvW5B;AAAA,CA2WxB,SAAS4C,4BAAT,CAAsC5C,MAAtC,EAA8C6C,WAA9C,EAA2D;AAAA,EACvD7C,MAAA,CAAOE,OAAP,CAAe4C,aAAf,CAA6Bhd,IAA7B,CAAkC+c,WAAlC,EADuD;AAAA,EA3WnC;AAAA,CA8WxB,SAASE,gCAAT,CAA0C/C,MAA1C,EAAkD5kB,KAAlD,EAAyDvT,IAAzD,EAA+D;AAAA,EAC3D,IAAIk4B,MAAA,GAASC,MAAA,CAAOE,OAApB,CAD2D;AAAA,EAE3D,IAAI2C,WAAA,GAAc9C,MAAA,CAAO+C,aAAP,CAAqB3D,KAArB,EAAlB,CAF2D;AAAA,EAG3D,IAAIt3B,IAAJ,EAAU;AAAA,GACNg7B,WAAA,CAAYG,WAAZ,GADM;AAAA,GAAV,MAGK;AAAA,GACDH,WAAA,CAAYI,WAAZ,CAAwB7nB,KAAxB,EADC;AAAA,GANsD;AAAA,EA9WvC;AAAA,CAwXxB,SAAS8nB,gCAAT,CAA0ClD,MAA1C,EAAkD;AAAA,EAC9C,OAAOA,MAAA,CAAOE,OAAP,CAAe4C,aAAf,CAA6B/nB,MAApC,CAD8C;AAAA,EAxX1B;AAAA,CA2XxB,SAASooB,8BAAT,CAAwCnD,MAAxC,EAAgD;AAAA,EAC5C,IAAID,MAAA,GAASC,MAAA,CAAOE,OAApB,CAD4C;AAAA,EAE5C,IAAIH,MAAA,KAAW1e,SAAf,EAA0B;AAAA,GACtB,OAAO,KAAP,CADsB;AAAA,GAFkB;AAAA,EAK5C,IAAI,CAAC+hB,6BAAA,CAA8BrD,MAA9B,CAAL,EAA4C;AAAA,GACxC,OAAO,KAAP,CADwC;AAAA,GALA;AAAA,EAQ5C,OAAO,IAAP,CAR4C;AAAA,EA3XxB;AAAA,CA0YxB,IAAI4C,2BAAA,GAA6C,YAAY;AAAA,EACzD,SAASA,2BAAT,CAAqC3C,MAArC,EAA6C;AAAA,GACzC8B,sBAAA,CAAuB9B,MAAvB,EAA+B,CAA/B,EAAkC,6BAAlC,EADyC;AAAA,GAEzCwC,oBAAA,CAAqBxC,MAArB,EAA6B,iBAA7B,EAFyC;AAAA,GAGzC,IAAIqD,sBAAA,CAAuBrD,MAAvB,CAAJ,EAAoC;AAAA,IAChC,MAAM,IAAI7c,SAAJ,CAAc,6EAAd,CAAN,CADgC;AAAA,IAHK;AAAA,GAMzC2c,qCAAA,CAAsC,IAAtC,EAA4CE,MAA5C,EANyC;AAAA,GAOzC,KAAK8C,aAAL,GAAqB,IAAIrE,WAAJ,EAArB,CAPyC;AAAA,GADY;AAAA,EAUzDh8B,MAAA,CAAO+f,cAAP,CAAsBmgB,2BAAA,CAA4BzhB,SAAlD,EAA6D,QAA7D,EAAuE;AAAA,GAKnErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACukB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,KACtC,OAAOzF,mBAAA,CAAoB2F,gCAAA,CAAiC,QAAjC,CAApB,CAAP,CADsC;AAAA,KAD7B;AAAA,IAIb,OAAO,KAAKxC,cAAZ,CAJa;AAAA,IALkD;AAAA,GAWnEh8B,UAAA,EAAY,KAXuD;AAAA,GAYnEC,YAAA,EAAc,IAZqD;AAAA,GAAvE,EAVyD;AAAA,EA2BzD49B,2BAAA,CAA4BzhB,SAA5B,CAAsCqiB,MAAtC,GAA+C,UAAU3kC,MAAV,EAAkB;AAAA,GAC7D,IAAIA,MAAA,KAAW,KAAK,CAApB,EAAuB;AAAA,IAAEA,MAAA,GAASyiB,SAAT,CAAF;AAAA,IADsC;AAAA,GAE7D,IAAI,CAAC+hB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,OAAOzF,mBAAA,CAAoB2F,gCAAA,CAAiC,QAAjC,CAApB,CAAP,CADsC;AAAA,IAFmB;AAAA,GAK7D,IAAI,KAAKrD,oBAAL,KAA8B5e,SAAlC,EAA6C;AAAA,IACzC,OAAOsc,mBAAA,CAAoBkD,mBAAA,CAAoB,QAApB,CAApB,CAAP,CADyC;AAAA,IALgB;AAAA,GAQ7D,OAAOL,iCAAA,CAAkC,IAAlC,EAAwC5hC,MAAxC,CAAP,CAR6D;AAAA,GAAjE,CA3ByD;AAAA,EA0CzD+jC,2BAAA,CAA4BzhB,SAA5B,CAAsCsiB,IAAtC,GAA6C,YAAY;AAAA,GACrD,IAAI,CAACJ,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,OAAOzF,mBAAA,CAAoB2F,gCAAA,CAAiC,MAAjC,CAApB,CAAP,CADsC;AAAA,IADW;AAAA,GAIrD,IAAI,KAAKrD,oBAAL,KAA8B5e,SAAlC,EAA6C;AAAA,IACzC,OAAOsc,mBAAA,CAAoBkD,mBAAA,CAAoB,WAApB,CAApB,CAAP,CADyC;AAAA,IAJQ;AAAA,GAOrD,IAAI4C,cAAJ,CAPqD;AAAA,GAQrD,IAAIC,aAAJ,CARqD;AAAA,GASrD,IAAIvQ,OAAA,GAAUsK,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,IAChDkkC,cAAA,GAAiBnkC,OAAjB,CADgD;AAAA,IAEhDokC,aAAA,GAAgBnkC,MAAhB,CAFgD;AAAA,IAAtC,CAAd,CATqD;AAAA,GAarD,IAAIsjC,WAAA,GAAc;AAAA,IACdI,WAAA,EAAa,UAAU7nB,KAAV,EAAiB;AAAA,KAAE,OAAOqoB,cAAA,CAAe;AAAA,MAAE5+B,KAAA,EAAOuW,KAAT;AAAA,MAAgBvT,IAAA,EAAM,KAAtB;AAAA,MAAf,CAAP,CAAF;AAAA,KADhB;AAAA,IAEdm7B,WAAA,EAAa,YAAY;AAAA,KAAE,OAAOS,cAAA,CAAe;AAAA,MAAE5+B,KAAA,EAAOwc,SAAT;AAAA,MAAoBxZ,IAAA,EAAM,IAA1B;AAAA,MAAf,CAAP,CAAF;AAAA,KAFX;AAAA,IAGd87B,WAAA,EAAa,UAAU7J,CAAV,EAAa;AAAA,KAAE,OAAO4J,aAAA,CAAc5J,CAAd,CAAP,CAAF;AAAA,KAHZ;AAAA,IAAlB,CAbqD;AAAA,GAkBrD8J,+BAAA,CAAgC,IAAhC,EAAsCf,WAAtC,EAlBqD;AAAA,GAmBrD,OAAO1P,OAAP,CAnBqD;AAAA,GAAzD,CA1CyD;AAAA,EAwEzDwP,2BAAA,CAA4BzhB,SAA5B,CAAsC2iB,WAAtC,GAAoD,YAAY;AAAA,GAC5D,IAAI,CAACT,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,MAAME,gCAAA,CAAiC,aAAjC,CAAN,CADsC;AAAA,IADkB;AAAA,GAI5D,IAAI,KAAKrD,oBAAL,KAA8B5e,SAAlC,EAA6C;AAAA,IACzC,OADyC;AAAA,IAJe;AAAA,GAO5D,IAAI,KAAKyhB,aAAL,CAAmB/nB,MAAnB,GAA4B,CAAhC,EAAmC;AAAA,IAC/B,MAAM,IAAIoI,SAAJ,CAAc,qFAAd,CAAN,CAD+B;AAAA,IAPyB;AAAA,GAU5Dud,kCAAA,CAAmC,IAAnC,EAV4D;AAAA,GAAhE,CAxEyD;AAAA,EAoFzD,OAAOiC,2BAAP,CApFyD;AAAA,EAAZ,EAAjD,CA1YwB;AAAA,CAgexBlgC,MAAA,CAAO6nB,gBAAP,CAAwBqY,2BAAA,CAA4BzhB,SAApD,EAA+D;AAAA,EAC3DqiB,MAAA,EAAQ,EAAEz+B,UAAA,EAAY,IAAd,EADmD;AAAA,EAE3D0+B,IAAA,EAAM,EAAE1+B,UAAA,EAAY,IAAd,EAFqD;AAAA,EAG3D++B,WAAA,EAAa,EAAE/+B,UAAA,EAAY,IAAd,EAH8C;AAAA,EAI3Dg/B,MAAA,EAAQ,EAAEh/B,UAAA,EAAY,IAAd,EAJmD;AAAA,EAA/D,EAhewB;AAAA,CAsexB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsBmgB,2BAAA,CAA4BzhB,SAAlD,EAA6D4b,cAAA,CAAeiH,WAA5E,EAAyF;AAAA,GACrFl/B,KAAA,EAAO,6BAD8E;AAAA,GAErFE,YAAA,EAAc,IAFuE;AAAA,GAAzF,EADgD;AAAA,EAte5B;AAAA,CA6exB,SAASq+B,6BAAT,CAAuC9N,CAAvC,EAA0C;AAAA,EACtC,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADgB;AAAA,EAItC,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,eAAxC,CAAL,EAA+D;AAAA,GAC3D,OAAO,KAAP,CAD2D;AAAA,GAJzB;AAAA,EAOtC,OAAO,IAAP,CAPsC;AAAA,EA7elB;AAAA,CAsfxB,SAASsO,+BAAT,CAAyC7D,MAAzC,EAAiD8C,WAAjD,EAA8D;AAAA,EAC1D,IAAI7C,MAAA,GAASD,MAAA,CAAOE,oBAApB,CAD0D;AAAA,EAE1DD,MAAA,CAAOgE,UAAP,GAAoB,IAApB,CAF0D;AAAA,EAG1D,IAAIhE,MAAA,CAAOG,MAAP,KAAkB,QAAtB,EAAgC;AAAA,GAC5B0C,WAAA,CAAYG,WAAZ,GAD4B;AAAA,GAAhC,MAGK,IAAIhD,MAAA,CAAOG,MAAP,KAAkB,SAAtB,EAAiC;AAAA,GAClC0C,WAAA,CAAYc,WAAZ,CAAwB3D,MAAA,CAAOO,YAA/B,EADkC;AAAA,GAAjC,MAGA;AAAA,GACDP,MAAA,CAAOiE,yBAAP,CAAiC5C,SAAjC,EAA4CwB,WAA5C,EADC;AAAA,GATqD;AAAA,EAtftC;AAAA,CAogBxB,SAASS,gCAAT,CAA0C3gC,IAA1C,EAAgD;AAAA,EAC5C,OAAO,IAAIwgB,SAAJ,CAAc,2CAA2CxgB,IAA3C,GAAkD,oDAAhE,CAAP,CAD4C;AAAA,EApgBxB;AAAA,CAygBxB,IAAIuhC,EAAJ,CAzgBwB;AAAA,CA0gBxB,IAAIC,sBAAJ,CA1gBwB;AAAA,CA2gBxB,IAAI,OAAOrH,cAAA,CAAesH,aAAtB,KAAwC,QAA5C,EAAsD;AAAA,EAGlDD,sBAAA,GAA0B,CAAAD,EAAA,GAAK,EAAL,EAGtBA,EAAA,CAAGpH,cAAA,CAAesH,aAAlB,IAAmC,YAAY;AAAA,GAC3C,OAAO,IAAP,CAD2C;AAAA,GAHzB,EAMtBF,EANsB,CAA1B,CAHkD;AAAA,EAUlDzhC,MAAA,CAAO+f,cAAP,CAAsB2hB,sBAAtB,EAA8CrH,cAAA,CAAesH,aAA7D,EAA4E,EAAEt/B,UAAA,EAAY,KAAd,EAA5E,EAVkD;AAAA,EA3gB9B;AAAA,CAyhBxB,IAAIu/B,+BAAA,GAAiD,YAAY;AAAA,EAC7D,SAASA,+BAAT,CAAyCtE,MAAzC,EAAiDuE,aAAjD,EAAgE;AAAA,GAC5D,KAAKC,eAAL,GAAuBljB,SAAvB,CAD4D;AAAA,GAE5D,KAAKmjB,WAAL,GAAmB,KAAnB,CAF4D;AAAA,GAG5D,KAAKtE,OAAL,GAAeH,MAAf,CAH4D;AAAA,GAI5D,KAAK0E,cAAL,GAAsBH,aAAtB,CAJ4D;AAAA,GADH;AAAA,EAO7DD,+BAAA,CAAgCnjB,SAAhC,CAA0C9Y,IAA1C,GAAiD,YAAY;AAAA,GACzD,IAAIs8B,KAAA,GAAQ,IAAZ,CADyD;AAAA,GAEzD,IAAIC,SAAA,GAAY,YAAY;AAAA,IAAE,OAAOD,KAAA,CAAME,UAAN,EAAP,CAAF;AAAA,IAA5B,CAFyD;AAAA,GAGzD,KAAKL,eAAL,GAAuB,KAAKA,eAAL,GACnBvG,oBAAA,CAAqB,KAAKuG,eAA1B,EAA2CI,SAA3C,EAAsDA,SAAtD,CADmB,GAEnBA,SAAA,EAFJ,CAHyD;AAAA,GAMzD,OAAO,KAAKJ,eAAZ,CANyD;AAAA,GAA7D,CAP6D;AAAA,EAe7DF,+BAAA,CAAgCnjB,SAAhC,CAA0C2jB,MAA1C,GAAmD,UAAUhgC,KAAV,EAAiB;AAAA,GAChE,IAAI6/B,KAAA,GAAQ,IAAZ,CADgE;AAAA,GAEhE,IAAII,WAAA,GAAc,YAAY;AAAA,IAAE,OAAOJ,KAAA,CAAMK,YAAN,CAAmBlgC,KAAnB,CAAP,CAAF;AAAA,IAA9B,CAFgE;AAAA,GAGhE,OAAO,KAAK0/B,eAAL,GACHvG,oBAAA,CAAqB,KAAKuG,eAA1B,EAA2CO,WAA3C,EAAwDA,WAAxD,CADG,GAEHA,WAAA,EAFJ,CAHgE;AAAA,GAApE,CAf6D;AAAA,EAsB7DT,+BAAA,CAAgCnjB,SAAhC,CAA0C0jB,UAA1C,GAAuD,YAAY;AAAA,GAC/D,IAAIF,KAAA,GAAQ,IAAZ,CAD+D;AAAA,GAE/D,IAAI,KAAKF,WAAT,EAAsB;AAAA,IAClB,OAAO/T,OAAA,CAAQnxB,OAAR,CAAgB;AAAA,KAAEuF,KAAA,EAAOwc,SAAT;AAAA,KAAoBxZ,IAAA,EAAM,IAA1B;AAAA,KAAhB,CAAP,CADkB;AAAA,IAFyC;AAAA,GAK/D,IAAIk4B,MAAA,GAAS,KAAKG,OAAlB,CAL+D;AAAA,GAM/D,IAAIH,MAAA,CAAOE,oBAAP,KAAgC5e,SAApC,EAA+C;AAAA,IAC3C,OAAOsc,mBAAA,CAAoBkD,mBAAA,CAAoB,SAApB,CAApB,CAAP,CAD2C;AAAA,IANgB;AAAA,GAS/D,IAAI4C,cAAJ,CAT+D;AAAA,GAU/D,IAAIC,aAAJ,CAV+D;AAAA,GAW/D,IAAIvQ,OAAA,GAAUsK,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,IAChDkkC,cAAA,GAAiBnkC,OAAjB,CADgD;AAAA,IAEhDokC,aAAA,GAAgBnkC,MAAhB,CAFgD;AAAA,IAAtC,CAAd,CAX+D;AAAA,GAe/D,IAAIsjC,WAAA,GAAc;AAAA,IACdI,WAAA,EAAa,UAAU7nB,KAAV,EAAiB;AAAA,KAC1BspB,KAAA,CAAMH,eAAN,GAAwBljB,SAAxB,CAD0B;AAAA,KAI1BkX,cAAA,CAAe,YAAY;AAAA,MAAE,OAAOkL,cAAA,CAAe;AAAA,OAAE5+B,KAAA,EAAOuW,KAAT;AAAA,OAAgBvT,IAAA,EAAM,KAAtB;AAAA,OAAf,CAAP,CAAF;AAAA,MAA3B,EAJ0B;AAAA,KADhB;AAAA,IAOdm7B,WAAA,EAAa,YAAY;AAAA,KACrB0B,KAAA,CAAMH,eAAN,GAAwBljB,SAAxB,CADqB;AAAA,KAErBqjB,KAAA,CAAMF,WAAN,GAAoB,IAApB,CAFqB;AAAA,KAGrB9D,kCAAA,CAAmCX,MAAnC,EAHqB;AAAA,KAIrB0D,cAAA,CAAe;AAAA,MAAE5+B,KAAA,EAAOwc,SAAT;AAAA,MAAoBxZ,IAAA,EAAM,IAA1B;AAAA,MAAf,EAJqB;AAAA,KAPX;AAAA,IAad87B,WAAA,EAAa,UAAU/kC,MAAV,EAAkB;AAAA,KAC3B8lC,KAAA,CAAMH,eAAN,GAAwBljB,SAAxB,CAD2B;AAAA,KAE3BqjB,KAAA,CAAMF,WAAN,GAAoB,IAApB,CAF2B;AAAA,KAG3B9D,kCAAA,CAAmCX,MAAnC,EAH2B;AAAA,KAI3B2D,aAAA,CAAc9kC,MAAd,EAJ2B;AAAA,KAbjB;AAAA,IAAlB,CAf+D;AAAA,GAmC/DglC,+BAAA,CAAgC7D,MAAhC,EAAwC8C,WAAxC,EAnC+D;AAAA,GAoC/D,OAAO1P,OAAP,CApC+D;AAAA,GAAnE,CAtB6D;AAAA,EA4D7DkR,+BAAA,CAAgCnjB,SAAhC,CAA0C6jB,YAA1C,GAAyD,UAAUlgC,KAAV,EAAiB;AAAA,GACtE,IAAI,KAAK2/B,WAAT,EAAsB;AAAA,IAClB,OAAO/T,OAAA,CAAQnxB,OAAR,CAAgB;AAAA,KAAEuF,KAAA,EAAOA,KAAT;AAAA,KAAgBgD,IAAA,EAAM,IAAtB;AAAA,KAAhB,CAAP,CADkB;AAAA,IADgD;AAAA,GAItE,KAAK28B,WAAL,GAAmB,IAAnB,CAJsE;AAAA,GAKtE,IAAIzE,MAAA,GAAS,KAAKG,OAAlB,CALsE;AAAA,GAMtE,IAAIH,MAAA,CAAOE,oBAAP,KAAgC5e,SAApC,EAA+C;AAAA,IAC3C,OAAOsc,mBAAA,CAAoBkD,mBAAA,CAAoB,kBAApB,CAApB,CAAP,CAD2C;AAAA,IANuB;AAAA,GAStE,IAAI,CAAC,KAAK4D,cAAV,EAA0B;AAAA,IACtB,IAAI39B,MAAA,GAAS05B,iCAAA,CAAkCT,MAAlC,EAA0Cl7B,KAA1C,CAAb,CADsB;AAAA,IAEtB67B,kCAAA,CAAmCX,MAAnC,EAFsB;AAAA,IAGtB,OAAO/B,oBAAA,CAAqBl3B,MAArB,EAA6B,YAAY;AAAA,KAAE,OAAQ;AAAA,MAAEjC,KAAA,EAAOA,KAAT;AAAA,MAAgBgD,IAAA,EAAM,IAAtB;AAAA,MAAR,CAAF;AAAA,KAAzC,CAAP,CAHsB;AAAA,IAT4C;AAAA,GActE64B,kCAAA,CAAmCX,MAAnC,EAdsE;AAAA,GAetE,OAAOrC,mBAAA,CAAoB;AAAA,IAAE74B,KAAA,EAAOA,KAAT;AAAA,IAAgBgD,IAAA,EAAM,IAAtB;AAAA,IAApB,CAAP,CAfsE;AAAA,GAA1E,CA5D6D;AAAA,EA6E7D,OAAOw8B,+BAAP,CA7E6D;AAAA,EAAZ,EAArD,CAzhBwB;AAAA,CAwmBxB,IAAIW,oCAAA,GAAuC;AAAA,EACvC58B,IAAA,EAAM,YAAY;AAAA,GACd,IAAI,CAAC68B,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,OAAOtH,mBAAA,CAAoBuH,sCAAA,CAAuC,MAAvC,CAApB,CAAP,CADsC;AAAA,IAD5B;AAAA,GAId,OAAO,KAAKC,kBAAL,CAAwB/8B,IAAxB,EAAP,CAJc;AAAA,GADqB;AAAA,EAOvCy8B,MAAA,EAAQ,UAAUhgC,KAAV,EAAiB;AAAA,GACrB,IAAI,CAACogC,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,OAAOtH,mBAAA,CAAoBuH,sCAAA,CAAuC,QAAvC,CAApB,CAAP,CADsC;AAAA,IADrB;AAAA,GAIrB,OAAO,KAAKC,kBAAL,CAAwBN,MAAxB,CAA+BhgC,KAA/B,CAAP,CAJqB;AAAA,GAPc;AAAA,EAA3C,CAxmBwB;AAAA,CAsnBxB,IAAIs/B,sBAAA,KAA2B9iB,SAA/B,EAA0C;AAAA,EACtC5e,MAAA,CAAO+pB,cAAP,CAAsBwY,oCAAtB,EAA4Db,sBAA5D,EADsC;AAAA,EAtnBlB;AAAA,CA0nBxB,SAASiB,kCAAT,CAA4CpF,MAA5C,EAAoDsE,aAApD,EAAmE;AAAA,EAC/D,IAAIvE,MAAA,GAAS2C,kCAAA,CAAmC1C,MAAnC,CAAb,CAD+D;AAAA,EAE/D,IAAIqF,IAAA,GAAO,IAAIhB,+BAAJ,CAAoCtE,MAApC,EAA4CuE,aAA5C,CAAX,CAF+D;AAAA,EAG/D,IAAI/6B,QAAA,GAAW9G,MAAA,CAAO5E,MAAP,CAAcmnC,oCAAd,CAAf,CAH+D;AAAA,EAI/Dz7B,QAAA,CAAS47B,kBAAT,GAA8BE,IAA9B,CAJ+D;AAAA,EAK/D,OAAO97B,QAAP,CAL+D;AAAA,EA1nB3C;AAAA,CAioBxB,SAAS07B,6BAAT,CAAuC3P,CAAvC,EAA0C;AAAA,EACtC,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADgB;AAAA,EAItC,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,oBAAxC,CAAL,EAAoE;AAAA,GAChE,OAAO,KAAP,CADgE;AAAA,GAJ9B;AAAA,EAOtC,OAAO,IAAP,CAPsC;AAAA,EAjoBlB;AAAA,CA2oBxB,SAAS4P,sCAAT,CAAgDviC,IAAhD,EAAsD;AAAA,EAClD,OAAO,IAAIwgB,SAAJ,CAAc,iCAAiCxgB,IAAjC,GAAwC,mDAAtD,CAAP,CADkD;AAAA,EA3oB9B;AAAA,CAipBxB,IAAI2iC,WAAA,GAAchrB,MAAA,CAAO/R,KAAP,IAAgB,UAAU+sB,CAAV,EAAa;AAAA,EAE3C,OAAOA,CAAA,KAAMA,CAAb,CAF2C;AAAA,EAA/C,CAjpBwB;AAAA,CAspBxB,SAASiQ,yBAAT,CAAmCpoB,CAAnC,EAAsC;AAAA,EAClC,IAAI,CAACqoB,mBAAA,CAAoBroB,CAApB,CAAL,EAA6B;AAAA,GACzB,OAAO,KAAP,CADyB;AAAA,GADK;AAAA,EAIlC,IAAIA,CAAA,KAAMsoB,QAAV,EAAoB;AAAA,GAChB,OAAO,KAAP,CADgB;AAAA,GAJc;AAAA,EAOlC,OAAO,IAAP,CAPkC;AAAA,EAtpBd;AAAA,CA+pBxB,SAASD,mBAAT,CAA6BroB,CAA7B,EAAgC;AAAA,EAC5B,IAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;AAAA,GACvB,OAAO,KAAP,CADuB;AAAA,GADC;AAAA,EAI5B,IAAImoB,WAAA,CAAYnoB,CAAZ,CAAJ,EAAoB;AAAA,GAChB,OAAO,KAAP,CADgB;AAAA,GAJQ;AAAA,EAO5B,IAAIA,CAAA,GAAI,CAAR,EAAW;AAAA,GACP,OAAO,KAAP,CADO;AAAA,GAPiB;AAAA,EAU5B,OAAO,IAAP,CAV4B;AAAA,EA/pBR;AAAA,CA4qBxB,SAASuoB,YAAT,CAAsBC,SAAtB,EAAiC;AAAA,EAC7B,IAAIC,IAAA,GAAOD,SAAA,CAAUE,MAAV,CAAiB1G,KAAjB,EAAX,CAD6B;AAAA,EAE7BwG,SAAA,CAAUG,eAAV,IAA6BF,IAAA,CAAKxL,IAAlC,CAF6B;AAAA,EAG7B,IAAIuL,SAAA,CAAUG,eAAV,GAA4B,CAAhC,EAAmC;AAAA,GAC/BH,SAAA,CAAUG,eAAV,GAA4B,CAA5B,CAD+B;AAAA,GAHN;AAAA,EAM7B,OAAOF,IAAA,CAAK/gC,KAAZ,CAN6B;AAAA,EA5qBT;AAAA,CAorBxB,SAASkhC,oBAAT,CAA8BJ,SAA9B,EAAyC9gC,KAAzC,EAAgDu1B,IAAhD,EAAsD;AAAA,EAClDA,IAAA,GAAO9f,MAAA,CAAO8f,IAAP,CAAP,CADkD;AAAA,EAElD,IAAI,CAACmL,yBAAA,CAA0BnL,IAA1B,CAAL,EAAsC;AAAA,GAClC,MAAM,IAAI4L,UAAJ,CAAe,sDAAf,CAAN,CADkC;AAAA,GAFY;AAAA,EAKlDL,SAAA,CAAUE,MAAV,CAAiB/f,IAAjB,CAAsB;AAAA,GAAEjhB,KAAA,EAAOA,KAAT;AAAA,GAAgBu1B,IAAA,EAAMA,IAAtB;AAAA,GAAtB,EALkD;AAAA,EAMlDuL,SAAA,CAAUG,eAAV,IAA6B1L,IAA7B,CANkD;AAAA,EAprB9B;AAAA,CA4rBxB,SAAS6L,cAAT,CAAwBN,SAAxB,EAAmC;AAAA,EAC/B,IAAIC,IAAA,GAAOD,SAAA,CAAUE,MAAV,CAAiBlG,IAAjB,EAAX,CAD+B;AAAA,EAE/B,OAAOiG,IAAA,CAAK/gC,KAAZ,CAF+B;AAAA,EA5rBX;AAAA,CAgsBxB,SAASqhC,UAAT,CAAoBP,SAApB,EAA+B;AAAA,EAC3BA,SAAA,CAAUE,MAAV,GAAmB,IAAIpH,WAAJ,EAAnB,CAD2B;AAAA,EAE3BkH,SAAA,CAAUG,eAAV,GAA4B,CAA5B,CAF2B;AAAA,EAhsBP;AAAA,CAqsBxB,SAASK,mBAAT,CAA6B3G,QAA7B,EAAuC;AAAA,EAGnC,OAAOA,QAAA,CAAStc,KAAT,EAAP,CAHmC;AAAA,EArsBf;AAAA,CA0sBxB,SAASkjB,kBAAT,CAA4BC,IAA5B,EAAkCC,UAAlC,EAA8Cxa,GAA9C,EAAmDya,SAAnD,EAA8DlqB,CAA9D,EAAiE;AAAA,EAC7D,IAAImqB,UAAJ,CAAeH,IAAf,EAAqBnhB,GAArB,CAAyB,IAAIshB,UAAJ,CAAe1a,GAAf,EAAoBya,SAApB,EAA+BlqB,CAA/B,CAAzB,EAA4DiqB,UAA5D,EAD6D;AAAA,EA1sBzC;AAAA,CA8sBxB,SAASG,mBAAT,CAA6Bp1B,CAA7B,EAAgC;AAAA,EAC5B,OAAOA,CAAP,CAD4B;AAAA,EA9sBR;AAAA,CAktBxB,SAASq1B,gBAAT,CAA0Br1B,CAA1B,EAA6B;AAAA,EACzB,OAAO,KAAP,CADyB;AAAA,EAltBL;AAAA,CA2tBxB,IAAIs1B,yBAAA,GAA2C,YAAY;AAAA,EACvD,SAASA,yBAAT,GAAqC;AAAA,GACjC,MAAM,IAAIxjB,SAAJ,CAAc,qBAAd,CAAN,CADiC;AAAA,GADkB;AAAA,EAIvD1gB,MAAA,CAAO+f,cAAP,CAAsBmkB,yBAAA,CAA0BzlB,SAAhD,EAA2D,MAA3D,EAAmE;AAAA,GAI/DrC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC+nB,2BAAA,CAA4B,IAA5B,CAAL,EAAwC;AAAA,KACpC,MAAMC,8BAAA,CAA+B,MAA/B,CAAN,CADoC;AAAA,KAD3B;AAAA,IAIb,OAAO,KAAKC,KAAZ,CAJa;AAAA,IAJ8C;AAAA,GAU/DhiC,UAAA,EAAY,KAVmD;AAAA,GAW/DC,YAAA,EAAc,IAXiD;AAAA,GAAnE,EAJuD;AAAA,EAiBvD4hC,yBAAA,CAA0BzlB,SAA1B,CAAoC6lB,OAApC,GAA8C,UAAUC,YAAV,EAAwB;AAAA,GAClE,IAAI,CAACJ,2BAAA,CAA4B,IAA5B,CAAL,EAAwC;AAAA,IACpC,MAAMC,8BAAA,CAA+B,SAA/B,CAAN,CADoC;AAAA,IAD0B;AAAA,GAIlE/E,sBAAA,CAAuBkF,YAAvB,EAAqC,CAArC,EAAwC,SAAxC,EAJkE;AAAA,GAKlEA,YAAA,GAAe5E,uCAAA,CAAwC4E,YAAxC,EAAsD,iBAAtD,CAAf,CALkE;AAAA,GAMlE,IAAI,KAAKC,uCAAL,KAAiD5lB,SAArD,EAAgE;AAAA,IAC5D,MAAM,IAAI8B,SAAJ,CAAc,wCAAd,CAAN,CAD4D;AAAA,IANE;AAAA,GASlE,IAAIujB,gBAAA,CAAiB,KAAKI,KAAL,CAAWpoB,MAA5B,CAAJ,EATkE;AAAA,GAUlEwoB,mCAAA,CAAoC,KAAKD,uCAAzC,EAAkFD,YAAlF,EAVkE;AAAA,GAAtE,CAjBuD;AAAA,EA6BvDL,yBAAA,CAA0BzlB,SAA1B,CAAoCimB,kBAApC,GAAyD,UAAUC,IAAV,EAAgB;AAAA,GACrE,IAAI,CAACR,2BAAA,CAA4B,IAA5B,CAAL,EAAwC;AAAA,IACpC,MAAMC,8BAAA,CAA+B,oBAA/B,CAAN,CADoC;AAAA,IAD6B;AAAA,GAIrE/E,sBAAA,CAAuBsF,IAAvB,EAA6B,CAA7B,EAAgC,oBAAhC,EAJqE;AAAA,GAKrE,IAAI,CAACC,WAAA,CAAYC,MAAZ,CAAmBF,IAAnB,CAAL,EAA+B;AAAA,IAC3B,MAAM,IAAIjkB,SAAJ,CAAc,8CAAd,CAAN,CAD2B;AAAA,IALsC;AAAA,GAQrE,IAAIikB,IAAA,CAAKG,UAAL,KAAoB,CAAxB,EAA2B;AAAA,IACvB,MAAM,IAAIpkB,SAAJ,CAAc,qCAAd,CAAN,CADuB;AAAA,IAR0C;AAAA,GAWrE,IAAIikB,IAAA,CAAK1oB,MAAL,CAAY6oB,UAAZ,KAA2B,CAA/B,EAAkC;AAAA,IAC9B,MAAM,IAAIpkB,SAAJ,CAAc,8CAAd,CAAN,CAD8B;AAAA,IAXmC;AAAA,GAcrE,IAAI,KAAK8jB,uCAAL,KAAiD5lB,SAArD,EAAgE;AAAA,IAC5D,MAAM,IAAI8B,SAAJ,CAAc,wCAAd,CAAN,CAD4D;AAAA,IAdK;AAAA,GAiBrEqkB,8CAAA,CAA+C,KAAKP,uCAApD,EAA6FG,IAA7F,EAjBqE;AAAA,GAAzE,CA7BuD;AAAA,EAgDvD,OAAOT,yBAAP,CAhDuD;AAAA,EAAZ,EAA/C,CA3tBwB;AAAA,CA6wBxBlkC,MAAA,CAAO6nB,gBAAP,CAAwBqc,yBAAA,CAA0BzlB,SAAlD,EAA6D;AAAA,EACzD6lB,OAAA,EAAS,EAAEjiC,UAAA,EAAY,IAAd,EADgD;AAAA,EAEzDqiC,kBAAA,EAAoB,EAAEriC,UAAA,EAAY,IAAd,EAFqC;AAAA,EAGzDsiC,IAAA,EAAM,EAAEtiC,UAAA,EAAY,IAAd,EAHmD;AAAA,EAA7D,EA7wBwB;AAAA,CAkxBxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsBmkB,yBAAA,CAA0BzlB,SAAhD,EAA2D4b,cAAA,CAAeiH,WAA1E,EAAuF;AAAA,GACnFl/B,KAAA,EAAO,2BAD4E;AAAA,GAEnFE,YAAA,EAAc,IAFqE;AAAA,GAAvF,EADgD;AAAA,EAlxB5B;AAAA,CA6xBxB,IAAI0iC,4BAAA,GAA8C,YAAY;AAAA,EAC1D,SAASA,4BAAT,GAAwC;AAAA,GACpC,MAAM,IAAItkB,SAAJ,CAAc,qBAAd,CAAN,CADoC;AAAA,GADkB;AAAA,EAI1D1gB,MAAA,CAAO+f,cAAP,CAAsBilB,4BAAA,CAA6BvmB,SAAnD,EAA8D,aAA9D,EAA6E;AAAA,GAIzErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC6oB,8BAAA,CAA+B,IAA/B,CAAL,EAA2C;AAAA,KACvC,MAAMC,uCAAA,CAAwC,aAAxC,CAAN,CADuC;AAAA,KAD9B;AAAA,IAIb,IAAI,KAAKC,YAAL,KAAsB,IAAtB,IAA8B,KAAKC,iBAAL,CAAuB9sB,MAAvB,GAAgC,CAAlE,EAAqE;AAAA,KACjE,IAAI+sB,eAAA,GAAkB,KAAKD,iBAAL,CAAuBlI,IAAvB,EAAtB,CADiE;AAAA,KAEjE,IAAIyH,IAAA,GAAO,IAAIZ,UAAJ,CAAesB,eAAA,CAAgBppB,MAA/B,EAAuCopB,eAAA,CAAgBC,UAAhB,GAA6BD,eAAA,CAAgBE,WAApF,EAAiGF,eAAA,CAAgBP,UAAhB,GAA6BO,eAAA,CAAgBE,WAA9I,CAAX,CAFiE;AAAA,KAGjE,IAAIC,WAAA,GAAcxlC,MAAA,CAAO5E,MAAP,CAAc8oC,yBAAA,CAA0BzlB,SAAxC,CAAlB,CAHiE;AAAA,KAIjEgnB,8BAAA,CAA+BD,WAA/B,EAA4C,IAA5C,EAAkDb,IAAlD,EAJiE;AAAA,KAKjE,KAAKQ,YAAL,GAAoBK,WAApB,CALiE;AAAA,KAJxD;AAAA,IAWb,OAAO,KAAKL,YAAZ,CAXa;AAAA,IAJwD;AAAA,GAiBzE9iC,UAAA,EAAY,KAjB6D;AAAA,GAkBzEC,YAAA,EAAc,IAlB2D;AAAA,GAA7E,EAJ0D;AAAA,EAwB1DtC,MAAA,CAAO+f,cAAP,CAAsBilB,4BAAA,CAA6BvmB,SAAnD,EAA8D,aAA9D,EAA6E;AAAA,GAKzErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC6oB,8BAAA,CAA+B,IAA/B,CAAL,EAA2C;AAAA,KACvC,MAAMC,uCAAA,CAAwC,aAAxC,CAAN,CADuC;AAAA,KAD9B;AAAA,IAIb,OAAOQ,0CAAA,CAA2C,IAA3C,CAAP,CAJa;AAAA,IALwD;AAAA,GAWzErjC,UAAA,EAAY,KAX6D;AAAA,GAYzEC,YAAA,EAAc,IAZ2D;AAAA,GAA7E,EAxB0D;AAAA,EA0C1D0iC,4BAAA,CAA6BvmB,SAA7B,CAAuCkK,KAAvC,GAA+C,YAAY;AAAA,GACvD,IAAI,CAACsc,8BAAA,CAA+B,IAA/B,CAAL,EAA2C;AAAA,IACvC,MAAMC,uCAAA,CAAwC,OAAxC,CAAN,CADuC;AAAA,IADY;AAAA,GAIvD,IAAI,KAAKS,eAAT,EAA0B;AAAA,IACtB,MAAM,IAAIjlB,SAAJ,CAAc,4DAAd,CAAN,CADsB;AAAA,IAJ6B;AAAA,GAOvD,IAAI5b,KAAA,GAAQ,KAAK8gC,6BAAL,CAAmClI,MAA/C,CAPuD;AAAA,GAQvD,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,IACtB,MAAM,IAAI4b,SAAJ,CAAc,oBAAoB5b,KAApB,GAA4B,2DAA1C,CAAN,CADsB;AAAA,IAR6B;AAAA,GAWvD+gC,iCAAA,CAAkC,IAAlC,EAXuD;AAAA,GAA3D,CA1C0D;AAAA,EAuD1Db,4BAAA,CAA6BvmB,SAA7B,CAAuCqnB,OAAvC,GAAiD,UAAUntB,KAAV,EAAiB;AAAA,GAC9D,IAAI,CAACssB,8BAAA,CAA+B,IAA/B,CAAL,EAA2C;AAAA,IACvC,MAAMC,uCAAA,CAAwC,SAAxC,CAAN,CADuC;AAAA,IADmB;AAAA,GAI9D7F,sBAAA,CAAuB1mB,KAAvB,EAA8B,CAA9B,EAAiC,SAAjC,EAJ8D;AAAA,GAK9D,IAAI,CAACisB,WAAA,CAAYC,MAAZ,CAAmBlsB,KAAnB,CAAL,EAAgC;AAAA,IAC5B,MAAM,IAAI+H,SAAJ,CAAc,oCAAd,CAAN,CAD4B;AAAA,IAL8B;AAAA,GAQ9D,IAAI/H,KAAA,CAAMmsB,UAAN,KAAqB,CAAzB,EAA4B;AAAA,IACxB,MAAM,IAAIpkB,SAAJ,CAAc,qCAAd,CAAN,CADwB;AAAA,IARkC;AAAA,GAW9D,IAAI/H,KAAA,CAAMsD,MAAN,CAAa6oB,UAAb,KAA4B,CAAhC,EAAmC;AAAA,IAC/B,MAAM,IAAIpkB,SAAJ,CAAc,8CAAd,CAAN,CAD+B;AAAA,IAX2B;AAAA,GAc9D,IAAI,KAAKilB,eAAT,EAA0B;AAAA,IACtB,MAAM,IAAIjlB,SAAJ,CAAc,8BAAd,CAAN,CADsB;AAAA,IAdoC;AAAA,GAiB9D,IAAI5b,KAAA,GAAQ,KAAK8gC,6BAAL,CAAmClI,MAA/C,CAjB8D;AAAA,GAkB9D,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,IACtB,MAAM,IAAI4b,SAAJ,CAAc,oBAAoB5b,KAApB,GAA4B,gEAA1C,CAAN,CADsB;AAAA,IAlBoC;AAAA,GAqB9DihC,mCAAA,CAAoC,IAApC,EAA0CptB,KAA1C,EArB8D;AAAA,GAAlE,CAvD0D;AAAA,EAiF1DqsB,4BAAA,CAA6BvmB,SAA7B,CAAuCkB,KAAvC,GAA+C,UAAU0X,CAAV,EAAa;AAAA,GACxD,IAAIA,CAAA,KAAM,KAAK,CAAf,EAAkB;AAAA,IAAEA,CAAA,GAAIzY,SAAJ,CAAF;AAAA,IADsC;AAAA,GAExD,IAAI,CAACqmB,8BAAA,CAA+B,IAA/B,CAAL,EAA2C;AAAA,IACvC,MAAMC,uCAAA,CAAwC,OAAxC,CAAN,CADuC;AAAA,IAFa;AAAA,GAKxDc,iCAAA,CAAkC,IAAlC,EAAwC3O,CAAxC,EALwD;AAAA,GAA5D,CAjF0D;AAAA,EAyF1D2N,4BAAA,CAA6BvmB,SAA7B,CAAuCkgB,WAAvC,IAAsD,UAAUxiC,MAAV,EAAkB;AAAA,GACpE,IAAI,KAAKipC,iBAAL,CAAuB9sB,MAAvB,GAAgC,CAApC,EAAuC;AAAA,IACnC,IAAI+sB,eAAA,GAAkB,KAAKD,iBAAL,CAAuBlI,IAAvB,EAAtB,CADmC;AAAA,IAEnCmI,eAAA,CAAgBE,WAAhB,GAA8B,CAA9B,CAFmC;AAAA,IAD6B;AAAA,GAKpE9B,UAAA,CAAW,IAAX,EALoE;AAAA,GAMpE,IAAIp/B,MAAA,GAAS,KAAK4hC,gBAAL,CAAsB9pC,MAAtB,CAAb,CANoE;AAAA,GAOpE+pC,2CAAA,CAA4C,IAA5C,EAPoE;AAAA,GAQpE,OAAO7hC,MAAP,CARoE;AAAA,GAAxE,CAzF0D;AAAA,EAoG1D2gC,4BAAA,CAA6BvmB,SAA7B,CAAuCmgB,SAAvC,IAAoD,UAAUwB,WAAV,EAAuB;AAAA,GACvE,IAAI7C,MAAA,GAAS,KAAKqI,6BAAlB,CADuE;AAAA,GAEvE,IAAI,KAAKvC,eAAL,GAAuB,CAA3B,EAA8B;AAAA,IAC1B,IAAI/9B,KAAA,GAAQ,KAAK89B,MAAL,CAAY1G,KAAZ,EAAZ,CAD0B;AAAA,IAE1B,KAAK2G,eAAL,IAAwB/9B,KAAA,CAAMw/B,UAA9B,CAF0B;AAAA,IAG1BqB,4CAAA,CAA6C,IAA7C,EAH0B;AAAA,IAI1B,IAAIxB,IAAA,GAAO,IAAIZ,UAAJ,CAAez+B,KAAA,CAAM2W,MAArB,EAA6B3W,KAAA,CAAMggC,UAAnC,EAA+ChgC,KAAA,CAAMw/B,UAArD,CAAX,CAJ0B;AAAA,IAK1B1E,WAAA,CAAYI,WAAZ,CAAwBmE,IAAxB,EAL0B;AAAA,IAM1B,OAN0B;AAAA,IAFyC;AAAA,GAUvE,IAAIyB,qBAAA,GAAwB,KAAKC,sBAAjC,CAVuE;AAAA,GAWvE,IAAID,qBAAA,KAA0BxnB,SAA9B,EAAyC;AAAA,IACrC,IAAI3C,MAAA,GAAS,KAAK,CAAlB,CADqC;AAAA,IAErC,IAAI;AAAA,KACAA,MAAA,GAAS,IAAI2oB,WAAJ,CAAgBwB,qBAAhB,CAAT,CADA;AAAA,KAAJ,CAGA,OAAOE,OAAP,EAAgB;AAAA,KACZlG,WAAA,CAAYc,WAAZ,CAAwBoF,OAAxB,EADY;AAAA,KAEZ,OAFY;AAAA,KALqB;AAAA,IASrC,IAAIC,kBAAA,GAAqB;AAAA,KACrBtqB,MAAA,EAAQA,MADa;AAAA,KAErBqpB,UAAA,EAAY,CAFS;AAAA,KAGrBR,UAAA,EAAYsB,qBAHS;AAAA,KAIrBb,WAAA,EAAa,CAJQ;AAAA,KAKrBiB,WAAA,EAAa,CALQ;AAAA,KAMrBC,eAAA,EAAiB1C,UANI;AAAA,KAOrB2C,UAAA,EAAY,SAPS;AAAA,KAAzB,CATqC;AAAA,IAkBrC,KAAKtB,iBAAL,CAAuB/hB,IAAvB,CAA4BkjB,kBAA5B,EAlBqC;AAAA,IAX8B;AAAA,GA+BvEpG,4BAAA,CAA6B5C,MAA7B,EAAqC6C,WAArC,EA/BuE;AAAA,GAgCvEuG,4CAAA,CAA6C,IAA7C,EAhCuE;AAAA,GAA3E,CApG0D;AAAA,EAsI1D,OAAO3B,4BAAP,CAtI0D;AAAA,EAAZ,EAAlD,CA7xBwB;AAAA,CAq6BxBhlC,MAAA,CAAO6nB,gBAAP,CAAwBmd,4BAAA,CAA6BvmB,SAArD,EAAgE;AAAA,EAC5DkK,KAAA,EAAO,EAAEtmB,UAAA,EAAY,IAAd,EADqD;AAAA,EAE5DyjC,OAAA,EAAS,EAAEzjC,UAAA,EAAY,IAAd,EAFmD;AAAA,EAG5Dsd,KAAA,EAAO,EAAEtd,UAAA,EAAY,IAAd,EAHqD;AAAA,EAI5DmjC,WAAA,EAAa,EAAEnjC,UAAA,EAAY,IAAd,EAJ+C;AAAA,EAK5DukC,WAAA,EAAa,EAAEvkC,UAAA,EAAY,IAAd,EAL+C;AAAA,EAAhE,EAr6BwB;AAAA,CA46BxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsBilB,4BAAA,CAA6BvmB,SAAnD,EAA8D4b,cAAA,CAAeiH,WAA7E,EAA0F;AAAA,GACtFl/B,KAAA,EAAO,8BAD+E;AAAA,GAEtFE,YAAA,EAAc,IAFwE;AAAA,GAA1F,EADgD;AAAA,EA56B5B;AAAA,CAm7BxB,SAAS2iC,8BAAT,CAAwCpS,CAAxC,EAA2C;AAAA,EACvC,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADiB;AAAA,EAIvC,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,+BAAxC,CAAL,EAA+E;AAAA,GAC3E,OAAO,KAAP,CAD2E;AAAA,GAJxC;AAAA,EAOvC,OAAO,IAAP,CAPuC;AAAA,EAn7BnB;AAAA,CA47BxB,SAASsR,2BAAT,CAAqCtR,CAArC,EAAwC;AAAA,EACpC,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADc;AAAA,EAIpC,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,yCAAxC,CAAL,EAAyF;AAAA,GACrF,OAAO,KAAP,CADqF;AAAA,GAJrD;AAAA,EAOpC,OAAO,IAAP,CAPoC;AAAA,EA57BhB;AAAA,CAq8BxB,SAAS8T,4CAAT,CAAsDxpB,UAAtD,EAAkE;AAAA,EAC9D,IAAI0pB,UAAA,GAAaC,0CAAA,CAA2C3pB,UAA3C,CAAjB,CAD8D;AAAA,EAE9D,IAAI,CAAC0pB,UAAL,EAAiB;AAAA,GACb,OADa;AAAA,GAF6C;AAAA,EAK9D,IAAI1pB,UAAA,CAAW4pB,QAAf,EAAyB;AAAA,GACrB5pB,UAAA,CAAW6pB,UAAX,GAAwB,IAAxB,CADqB;AAAA,GAErB,OAFqB;AAAA,GALqC;AAAA,EAS9D7pB,UAAA,CAAW4pB,QAAX,GAAsB,IAAtB,CAT8D;AAAA,EAW9D,IAAIE,WAAA,GAAc9pB,UAAA,CAAW+pB,cAAX,EAAlB,CAX8D;AAAA,EAY9D9L,WAAA,CAAY6L,WAAZ,EAAyB,YAAY;AAAA,GACjC9pB,UAAA,CAAW4pB,QAAX,GAAsB,KAAtB,CADiC;AAAA,GAEjC,IAAI5pB,UAAA,CAAW6pB,UAAf,EAA2B;AAAA,IACvB7pB,UAAA,CAAW6pB,UAAX,GAAwB,KAAxB,CADuB;AAAA,IAEvBL,4CAAA,CAA6CxpB,UAA7C,EAFuB;AAAA,IAFM;AAAA,GAArC,EAMG,UAAUka,CAAV,EAAa;AAAA,GACZ2O,iCAAA,CAAkC7oB,UAAlC,EAA8Cka,CAA9C,EADY;AAAA,GANhB,EAZ8D;AAAA,EAr8B1C;AAAA,CA29BxB,SAAS8P,iDAAT,CAA2DhqB,UAA3D,EAAuE;AAAA,EACnEiqB,iDAAA,CAAkDjqB,UAAlD,EADmE;AAAA,EAEnEA,UAAA,CAAWioB,iBAAX,GAA+B,IAAIpJ,WAAJ,EAA/B,CAFmE;AAAA,EA39B/C;AAAA,CA+9BxB,SAASqL,oDAAT,CAA8D9J,MAA9D,EAAsEgJ,kBAAtE,EAA0F;AAAA,EACtF,IAAInhC,IAAA,GAAO,KAAX,CADsF;AAAA,EAEtF,IAAIm4B,MAAA,CAAOG,MAAP,KAAkB,QAAtB,EAAgC;AAAA,GAC5Bt4B,IAAA,GAAO,IAAP,CAD4B;AAAA,GAFsD;AAAA,EAKtF,IAAIkiC,UAAA,GAAaC,qDAAA,CAAsDhB,kBAAtD,CAAjB,CALsF;AAAA,EAMtF,IAAIA,kBAAA,CAAmBG,UAAnB,KAAkC,SAAtC,EAAiD;AAAA,GAC7CpG,gCAAA,CAAiC/C,MAAjC,EAAyC+J,UAAzC,EAAqDliC,IAArD,EAD6C;AAAA,GAAjD,MAGK;AAAA,GACDoiC,oCAAA,CAAqCjK,MAArC,EAA6C+J,UAA7C,EAAyDliC,IAAzD,EADC;AAAA,GATiF;AAAA,EA/9BlE;AAAA,CA4+BxB,SAASmiC,qDAAT,CAA+DhB,kBAA/D,EAAmF;AAAA,EAC/E,IAAIhB,WAAA,GAAcgB,kBAAA,CAAmBhB,WAArC,CAD+E;AAAA,EAE/E,IAAIiB,WAAA,GAAcD,kBAAA,CAAmBC,WAArC,CAF+E;AAAA,EAG/E,OAAO,IAAID,kBAAA,CAAmBE,eAAvB,CAAuCF,kBAAA,CAAmBtqB,MAA1D,EAAkEsqB,kBAAA,CAAmBjB,UAArF,EAAiGC,WAAA,GAAciB,WAA/G,CAAP,CAH+E;AAAA,EA5+B3D;AAAA,CAi/BxB,SAASiB,+CAAT,CAAyDtqB,UAAzD,EAAqElB,MAArE,EAA6EqpB,UAA7E,EAAyFR,UAAzF,EAAqG;AAAA,EACjG3nB,UAAA,CAAWimB,MAAX,CAAkB/f,IAAlB,CAAuB;AAAA,GAAEpH,MAAA,EAAQA,MAAV;AAAA,GAAkBqpB,UAAA,EAAYA,UAA9B;AAAA,GAA0CR,UAAA,EAAYA,UAAtD;AAAA,GAAvB,EADiG;AAAA,EAEjG3nB,UAAA,CAAWkmB,eAAX,IAA8ByB,UAA9B,CAFiG;AAAA,EAj/B7E;AAAA,CAq/BxB,SAAS4C,2DAAT,CAAqEvqB,UAArE,EAAiFopB,kBAAjF,EAAqG;AAAA,EACjG,IAAIC,WAAA,GAAcD,kBAAA,CAAmBC,WAArC,CADiG;AAAA,EAEjG,IAAImB,mBAAA,GAAsBpB,kBAAA,CAAmBhB,WAAnB,GAAiCgB,kBAAA,CAAmBhB,WAAnB,GAAiCiB,WAA5F,CAFiG;AAAA,EAGjG,IAAIoB,cAAA,GAAiB9pC,IAAA,CAAKynB,GAAL,CAASpI,UAAA,CAAWkmB,eAApB,EAAqCkD,kBAAA,CAAmBzB,UAAnB,GAAgCyB,kBAAA,CAAmBhB,WAAxF,CAArB,CAHiG;AAAA,EAIjG,IAAIsC,cAAA,GAAiBtB,kBAAA,CAAmBhB,WAAnB,GAAiCqC,cAAtD,CAJiG;AAAA,EAKjG,IAAIE,eAAA,GAAkBD,cAAA,GAAiBA,cAAA,GAAiBrB,WAAxD,CALiG;AAAA,EAMjG,IAAIuB,yBAAA,GAA4BH,cAAhC,CANiG;AAAA,EAOjG,IAAII,KAAA,GAAQ,KAAZ,CAPiG;AAAA,EAQjG,IAAIF,eAAA,GAAkBH,mBAAtB,EAA2C;AAAA,GACvCI,yBAAA,GAA4BD,eAAA,GAAkBvB,kBAAA,CAAmBhB,WAAjE,CADuC;AAAA,GAEvCyC,KAAA,GAAQ,IAAR,CAFuC;AAAA,GARsD;AAAA,EAYjG,IAAI5T,KAAA,GAAQjX,UAAA,CAAWimB,MAAvB,CAZiG;AAAA,EAajG,OAAO2E,yBAAA,GAA4B,CAAnC,EAAsC;AAAA,GAClC,IAAIE,WAAA,GAAc7T,KAAA,CAAM8I,IAAN,EAAlB,CADkC;AAAA,GAElC,IAAIgL,WAAA,GAAcpqC,IAAA,CAAKynB,GAAL,CAASwiB,yBAAT,EAAoCE,WAAA,CAAYnD,UAAhD,CAAlB,CAFkC;AAAA,GAGlC,IAAIqD,SAAA,GAAY5B,kBAAA,CAAmBjB,UAAnB,GAAgCiB,kBAAA,CAAmBhB,WAAnE,CAHkC;AAAA,GAIlC5B,kBAAA,CAAmB4C,kBAAA,CAAmBtqB,MAAtC,EAA8CksB,SAA9C,EAAyDF,WAAA,CAAYhsB,MAArE,EAA6EgsB,WAAA,CAAY3C,UAAzF,EAAqG4C,WAArG,EAJkC;AAAA,GAKlC,IAAID,WAAA,CAAYnD,UAAZ,KAA2BoD,WAA/B,EAA4C;AAAA,IACxC9T,KAAA,CAAMsI,KAAN,GADwC;AAAA,IAA5C,MAGK;AAAA,IACDuL,WAAA,CAAY3C,UAAZ,IAA0B4C,WAA1B,CADC;AAAA,IAEDD,WAAA,CAAYnD,UAAZ,IAA0BoD,WAA1B,CAFC;AAAA,IAR6B;AAAA,GAYlC/qB,UAAA,CAAWkmB,eAAX,IAA8B6E,WAA9B,CAZkC;AAAA,GAalCE,sDAAA,CAAuDjrB,UAAvD,EAAmE+qB,WAAnE,EAAgF3B,kBAAhF,EAbkC;AAAA,GAclCwB,yBAAA,IAA6BG,WAA7B,CAdkC;AAAA,GAb2D;AAAA,EA6BjG,OAAOF,KAAP,CA7BiG;AAAA,EAr/B7E;AAAA,CAohCxB,SAASI,sDAAT,CAAgEjrB,UAAhE,EAA4Ewa,IAA5E,EAAkF4O,kBAAlF,EAAsG;AAAA,EAClGa,iDAAA,CAAkDjqB,UAAlD,EADkG;AAAA,EAElGopB,kBAAA,CAAmBhB,WAAnB,IAAkC5N,IAAlC,CAFkG;AAAA,EAphC9E;AAAA,CAwhCxB,SAASwO,4CAAT,CAAsDhpB,UAAtD,EAAkE;AAAA,EAC9D,IAAIA,UAAA,CAAWkmB,eAAX,KAA+B,CAA/B,IAAoClmB,UAAA,CAAWwoB,eAAnD,EAAoE;AAAA,GAChEO,2CAAA,CAA4C/oB,UAA5C,EADgE;AAAA,GAEhEkrB,mBAAA,CAAoBlrB,UAAA,CAAWyoB,6BAA/B,EAFgE;AAAA,GAApE,MAIK;AAAA,GACDe,4CAAA,CAA6CxpB,UAA7C,EADC;AAAA,GALyD;AAAA,EAxhC1C;AAAA,CAiiCxB,SAASiqB,iDAAT,CAA2DjqB,UAA3D,EAAuE;AAAA,EACnE,IAAIA,UAAA,CAAWgoB,YAAX,KAA4B,IAAhC,EAAsC;AAAA,GAClC,OADkC;AAAA,GAD6B;AAAA,EAInEhoB,UAAA,CAAWgoB,YAAX,CAAwBX,uCAAxB,GAAkE5lB,SAAlE,CAJmE;AAAA,EAKnEzB,UAAA,CAAWgoB,YAAX,CAAwBd,KAAxB,GAAgC,IAAhC,CALmE;AAAA,EAMnElnB,UAAA,CAAWgoB,YAAX,GAA0B,IAA1B,CANmE;AAAA,EAjiC/C;AAAA,CAyiCxB,SAASmD,gEAAT,CAA0EnrB,UAA1E,EAAsF;AAAA,EAClF,OAAOA,UAAA,CAAWioB,iBAAX,CAA6B9sB,MAA7B,GAAsC,CAA7C,EAAgD;AAAA,GAC5C,IAAI6E,UAAA,CAAWkmB,eAAX,KAA+B,CAAnC,EAAsC;AAAA,IAClC,OADkC;AAAA,IADM;AAAA,GAI5C,IAAIkD,kBAAA,GAAqBppB,UAAA,CAAWioB,iBAAX,CAA6BlI,IAA7B,EAAzB,CAJ4C;AAAA,GAK5C,IAAIwK,2DAAA,CAA4DvqB,UAA5D,EAAwEopB,kBAAxE,CAAJ,EAAiG;AAAA,IAC7FgC,gDAAA,CAAiDprB,UAAjD,EAD6F;AAAA,IAE7FkqB,oDAAA,CAAqDlqB,UAAA,CAAWyoB,6BAAhE,EAA+FW,kBAA/F,EAF6F;AAAA,IALrD;AAAA,GADkC;AAAA,EAziC9D;AAAA,CAqjCxB,SAASiC,oCAAT,CAA8CrrB,UAA9C,EAA0DwnB,IAA1D,EAAgE8D,eAAhE,EAAiF;AAAA,EAC7E,IAAIlL,MAAA,GAASpgB,UAAA,CAAWyoB,6BAAxB,CAD6E;AAAA,EAE7E,IAAIY,WAAA,GAAc,CAAlB,CAF6E;AAAA,EAG7E,IAAI7B,IAAA,CAAKzpC,WAAL,KAAqBwtC,QAAzB,EAAmC;AAAA,GAC/BlC,WAAA,GAAc7B,IAAA,CAAKzpC,WAAL,CAAiBytC,iBAA/B,CAD+B;AAAA,GAH0C;AAAA,EAM7E,IAAI3kC,IAAA,GAAO2gC,IAAA,CAAKzpC,WAAhB,CAN6E;AAAA,EAO7E,IAAI+gB,MAAA,GAAS+nB,mBAAA,CAAoBW,IAAA,CAAK1oB,MAAzB,CAAb,CAP6E;AAAA,EAQ7E,IAAIsqB,kBAAA,GAAqB;AAAA,GACrBtqB,MAAA,EAAQA,MADa;AAAA,GAErBqpB,UAAA,EAAYX,IAAA,CAAKW,UAFI;AAAA,GAGrBR,UAAA,EAAYH,IAAA,CAAKG,UAHI;AAAA,GAIrBS,WAAA,EAAa,CAJQ;AAAA,GAKrBiB,WAAA,EAAaA,WALQ;AAAA,GAMrBC,eAAA,EAAiBziC,IANI;AAAA,GAOrB0iC,UAAA,EAAY,MAPS;AAAA,GAAzB,CAR6E;AAAA,EAiB7E,IAAIvpB,UAAA,CAAWioB,iBAAX,CAA6B9sB,MAA7B,GAAsC,CAA1C,EAA6C;AAAA,GACzC6E,UAAA,CAAWioB,iBAAX,CAA6B/hB,IAA7B,CAAkCkjB,kBAAlC,EADyC;AAAA,GAKzCqC,gCAAA,CAAiCrL,MAAjC,EAAyCkL,eAAzC,EALyC;AAAA,GAMzC,OANyC;AAAA,GAjBgC;AAAA,EAyB7E,IAAIlL,MAAA,CAAOG,MAAP,KAAkB,QAAtB,EAAgC;AAAA,GAC5B,IAAImL,SAAA,GAAY,IAAI7kC,IAAJ,CAASuiC,kBAAA,CAAmBtqB,MAA5B,EAAoCsqB,kBAAA,CAAmBjB,UAAvD,EAAmE,CAAnE,CAAhB,CAD4B;AAAA,GAE5BmD,eAAA,CAAgBlI,WAAhB,CAA4BsI,SAA5B,EAF4B;AAAA,GAG5B,OAH4B;AAAA,GAzB6C;AAAA,EA8B7E,IAAI1rB,UAAA,CAAWkmB,eAAX,GAA6B,CAAjC,EAAoC;AAAA,GAChC,IAAIqE,2DAAA,CAA4DvqB,UAA5D,EAAwEopB,kBAAxE,CAAJ,EAAiG;AAAA,IAC7F,IAAIe,UAAA,GAAaC,qDAAA,CAAsDhB,kBAAtD,CAAjB,CAD6F;AAAA,IAE7FJ,4CAAA,CAA6ChpB,UAA7C,EAF6F;AAAA,IAG7FsrB,eAAA,CAAgBjI,WAAhB,CAA4B8G,UAA5B,EAH6F;AAAA,IAI7F,OAJ6F;AAAA,IADjE;AAAA,GAOhC,IAAInqB,UAAA,CAAWwoB,eAAf,EAAgC;AAAA,IAC5B,IAAItO,CAAA,GAAI,IAAI3W,SAAJ,CAAc,yDAAd,CAAR,CAD4B;AAAA,IAE5BslB,iCAAA,CAAkC7oB,UAAlC,EAA8Cka,CAA9C,EAF4B;AAAA,IAG5BoR,eAAA,CAAgBvH,WAAhB,CAA4B7J,CAA5B,EAH4B;AAAA,IAI5B,OAJ4B;AAAA,IAPA;AAAA,GA9ByC;AAAA,EA4C7Ela,UAAA,CAAWioB,iBAAX,CAA6B/hB,IAA7B,CAAkCkjB,kBAAlC,EA5C6E;AAAA,EA6C7EqC,gCAAA,CAAiCrL,MAAjC,EAAyCkL,eAAzC,EA7C6E;AAAA,EA8C7E9B,4CAAA,CAA6CxpB,UAA7C,EA9C6E;AAAA,EArjCzD;AAAA,CAqmCxB,SAAS2rB,gDAAT,CAA0D3rB,UAA1D,EAAsEkoB,eAAtE,EAAuF;AAAA,EACnFA,eAAA,CAAgBppB,MAAhB,GAAyB+nB,mBAAA,CAAoBqB,eAAA,CAAgBppB,MAApC,CAAzB,CADmF;AAAA,EAEnF,IAAIshB,MAAA,GAASpgB,UAAA,CAAWyoB,6BAAxB,CAFmF;AAAA,EAGnF,IAAImD,2BAAA,CAA4BxL,MAA5B,CAAJ,EAAyC;AAAA,GACrC,OAAOyL,oCAAA,CAAqCzL,MAArC,IAA+C,CAAtD,EAAyD;AAAA,IACrD,IAAIgJ,kBAAA,GAAqBgC,gDAAA,CAAiDprB,UAAjD,CAAzB,CADqD;AAAA,IAErDkqB,oDAAA,CAAqD9J,MAArD,EAA6DgJ,kBAA7D,EAFqD;AAAA,IADpB;AAAA,GAH0C;AAAA,EArmC/D;AAAA,CA+mCxB,SAAS0C,kDAAT,CAA4D9rB,UAA5D,EAAwEonB,YAAxE,EAAsFgC,kBAAtF,EAA0G;AAAA,EACtG,IAAIA,kBAAA,CAAmBhB,WAAnB,GAAiChB,YAAjC,GAAgDgC,kBAAA,CAAmBzB,UAAvE,EAAmF;AAAA,GAC/E,MAAM,IAAIvB,UAAJ,CAAe,2BAAf,CAAN,CAD+E;AAAA,GADmB;AAAA,EAItG6E,sDAAA,CAAuDjrB,UAAvD,EAAmEonB,YAAnE,EAAiFgC,kBAAjF,EAJsG;AAAA,EAKtG,IAAIA,kBAAA,CAAmBhB,WAAnB,GAAiCgB,kBAAA,CAAmBC,WAAxD,EAAqE;AAAA,GAEjE,OAFiE;AAAA,GALiC;AAAA,EAStG+B,gDAAA,CAAiDprB,UAAjD,EATsG;AAAA,EAUtG,IAAI+rB,aAAA,GAAgB3C,kBAAA,CAAmBhB,WAAnB,GAAiCgB,kBAAA,CAAmBC,WAAxE,CAVsG;AAAA,EAWtG,IAAI0C,aAAA,GAAgB,CAApB,EAAuB;AAAA,GACnB,IAAI3pC,GAAA,GAAMgnC,kBAAA,CAAmBjB,UAAnB,GAAgCiB,kBAAA,CAAmBhB,WAA7D,CADmB;AAAA,GAEnB,IAAI4D,SAAA,GAAY5C,kBAAA,CAAmBtqB,MAAnB,CAA0BwE,KAA1B,CAAgClhB,GAAA,GAAM2pC,aAAtC,EAAqD3pC,GAArD,CAAhB,CAFmB;AAAA,GAGnBkoC,+CAAA,CAAgDtqB,UAAhD,EAA4DgsB,SAA5D,EAAuE,CAAvE,EAA0EA,SAAA,CAAUrE,UAApF,EAHmB;AAAA,GAX+E;AAAA,EAgBtGyB,kBAAA,CAAmBtqB,MAAnB,GAA4B+nB,mBAAA,CAAoBuC,kBAAA,CAAmBtqB,MAAvC,CAA5B,CAhBsG;AAAA,EAiBtGsqB,kBAAA,CAAmBhB,WAAnB,IAAkC2D,aAAlC,CAjBsG;AAAA,EAkBtG7B,oDAAA,CAAqDlqB,UAAA,CAAWyoB,6BAAhE,EAA+FW,kBAA/F,EAlBsG;AAAA,EAmBtG+B,gEAAA,CAAiEnrB,UAAjE,EAnBsG;AAAA,EA/mClF;AAAA,CAooCxB,SAASisB,2CAAT,CAAqDjsB,UAArD,EAAiEonB,YAAjE,EAA+E;AAAA,EAC3E,IAAIc,eAAA,GAAkBloB,UAAA,CAAWioB,iBAAX,CAA6BlI,IAA7B,EAAtB,CAD2E;AAAA,EAE3E,IAAIp4B,KAAA,GAAQqY,UAAA,CAAWyoB,6BAAX,CAAyClI,MAArD,CAF2E;AAAA,EAG3E,IAAI54B,KAAA,KAAU,QAAd,EAAwB;AAAA,GACpB,IAAIy/B,YAAA,KAAiB,CAArB,EAAwB;AAAA,IACpB,MAAM,IAAI7jB,SAAJ,CAAc,kEAAd,CAAN,CADoB;AAAA,IADJ;AAAA,GAIpBooB,gDAAA,CAAiD3rB,UAAjD,EAA6DkoB,eAA7D,EAJoB;AAAA,GAAxB,MAMK;AAAA,GACD4D,kDAAA,CAAmD9rB,UAAnD,EAA+DonB,YAA/D,EAA6Ec,eAA7E,EADC;AAAA,GATsE;AAAA,EAY3EsB,4CAAA,CAA6CxpB,UAA7C,EAZ2E;AAAA,EApoCvD;AAAA,CAkpCxB,SAASorB,gDAAT,CAA0DprB,UAA1D,EAAsE;AAAA,EAClE,IAAIqB,UAAA,GAAarB,UAAA,CAAWioB,iBAAX,CAA6B1I,KAA7B,EAAjB,CADkE;AAAA,EAElE0K,iDAAA,CAAkDjqB,UAAlD,EAFkE;AAAA,EAGlE,OAAOqB,UAAP,CAHkE;AAAA,EAlpC9C;AAAA,CAupCxB,SAASsoB,0CAAT,CAAoD3pB,UAApD,EAAgE;AAAA,EAC5D,IAAIogB,MAAA,GAASpgB,UAAA,CAAWyoB,6BAAxB,CAD4D;AAAA,EAE5D,IAAIrI,MAAA,CAAOG,MAAP,KAAkB,UAAtB,EAAkC;AAAA,GAC9B,OAAO,KAAP,CAD8B;AAAA,GAF0B;AAAA,EAK5D,IAAIvgB,UAAA,CAAWwoB,eAAf,EAAgC;AAAA,GAC5B,OAAO,KAAP,CAD4B;AAAA,GAL4B;AAAA,EAQ5D,IAAI,CAACxoB,UAAA,CAAWksB,QAAhB,EAA0B;AAAA,GACtB,OAAO,KAAP,CADsB;AAAA,GARkC;AAAA,EAW5D,IAAI3I,8BAAA,CAA+BnD,MAA/B,KAA0CkD,gCAAA,CAAiClD,MAAjC,IAA2C,CAAzF,EAA4F;AAAA,GACxF,OAAO,IAAP,CADwF;AAAA,GAXhC;AAAA,EAc5D,IAAIwL,2BAAA,CAA4BxL,MAA5B,KAAuCyL,oCAAA,CAAqCzL,MAArC,IAA+C,CAA1F,EAA6F;AAAA,GACzF,OAAO,IAAP,CADyF;AAAA,GAdjC;AAAA,EAiB5D,IAAIqJ,WAAA,GAAclB,0CAAA,CAA2CvoB,UAA3C,CAAlB,CAjB4D;AAAA,EAkB5D,IAAIypB,WAAA,GAAc,CAAlB,EAAqB;AAAA,GACjB,OAAO,IAAP,CADiB;AAAA,GAlBuC;AAAA,EAqB5D,OAAO,KAAP,CArB4D;AAAA,EAvpCxC;AAAA,CA8qCxB,SAASV,2CAAT,CAAqD/oB,UAArD,EAAiE;AAAA,EAC7DA,UAAA,CAAW+pB,cAAX,GAA4BtoB,SAA5B,CAD6D;AAAA,EAE7DzB,UAAA,CAAW8oB,gBAAX,GAA8BrnB,SAA9B,CAF6D;AAAA,EA9qCzC;AAAA,CAmrCxB,SAASinB,iCAAT,CAA2C1oB,UAA3C,EAAuD;AAAA,EACnD,IAAIogB,MAAA,GAASpgB,UAAA,CAAWyoB,6BAAxB,CADmD;AAAA,EAEnD,IAAIzoB,UAAA,CAAWwoB,eAAX,IAA8BpI,MAAA,CAAOG,MAAP,KAAkB,UAApD,EAAgE;AAAA,GAC5D,OAD4D;AAAA,GAFb;AAAA,EAKnD,IAAIvgB,UAAA,CAAWkmB,eAAX,GAA6B,CAAjC,EAAoC;AAAA,GAChClmB,UAAA,CAAWwoB,eAAX,GAA6B,IAA7B,CADgC;AAAA,GAEhC,OAFgC;AAAA,GALe;AAAA,EASnD,IAAIxoB,UAAA,CAAWioB,iBAAX,CAA6B9sB,MAA7B,GAAsC,CAA1C,EAA6C;AAAA,GACzC,IAAIgxB,oBAAA,GAAuBnsB,UAAA,CAAWioB,iBAAX,CAA6BlI,IAA7B,EAA3B,CADyC;AAAA,GAEzC,IAAIoM,oBAAA,CAAqB/D,WAArB,GAAmC,CAAvC,EAA0C;AAAA,IACtC,IAAIlO,CAAA,GAAI,IAAI3W,SAAJ,CAAc,yDAAd,CAAR,CADsC;AAAA,IAEtCslB,iCAAA,CAAkC7oB,UAAlC,EAA8Cka,CAA9C,EAFsC;AAAA,IAGtC,MAAMA,CAAN,CAHsC;AAAA,IAFD;AAAA,GATM;AAAA,EAiBnD6O,2CAAA,CAA4C/oB,UAA5C,EAjBmD;AAAA,EAkBnDkrB,mBAAA,CAAoB9K,MAApB,EAlBmD;AAAA,EAnrC/B;AAAA,CAusCxB,SAASwI,mCAAT,CAA6C5oB,UAA7C,EAAyDxE,KAAzD,EAAgE;AAAA,EAC5D,IAAI4kB,MAAA,GAASpgB,UAAA,CAAWyoB,6BAAxB,CAD4D;AAAA,EAE5D,IAAIzoB,UAAA,CAAWwoB,eAAX,IAA8BpI,MAAA,CAAOG,MAAP,KAAkB,UAApD,EAAgE;AAAA,GAC5D,OAD4D;AAAA,GAFJ;AAAA,EAK5D,IAAIzhB,MAAA,GAAStD,KAAA,CAAMsD,MAAnB,CAL4D;AAAA,EAM5D,IAAIqpB,UAAA,GAAa3sB,KAAA,CAAM2sB,UAAvB,CAN4D;AAAA,EAO5D,IAAIR,UAAA,GAAansB,KAAA,CAAMmsB,UAAvB,CAP4D;AAAA,EAQ5D,IAAIyE,iBAAA,GAAoBvF,mBAAA,CAAoB/nB,MAApB,CAAxB,CAR4D;AAAA,EAS5D,IAAIykB,8BAAA,CAA+BnD,MAA/B,CAAJ,EAA4C;AAAA,GACxC,IAAIkD,gCAAA,CAAiClD,MAAjC,MAA6C,CAAjD,EAAoD;AAAA,IAChDkK,+CAAA,CAAgDtqB,UAAhD,EAA4DosB,iBAA5D,EAA+EjE,UAA/E,EAA2FR,UAA3F,EADgD;AAAA,IAApD,MAGK;AAAA,IACD,IAAI0E,eAAA,GAAkB,IAAIzF,UAAJ,CAAewF,iBAAf,EAAkCjE,UAAlC,EAA8CR,UAA9C,CAAtB,CADC;AAAA,IAEDxE,gCAAA,CAAiC/C,MAAjC,EAAyCiM,eAAzC,EAA0D,KAA1D,EAFC;AAAA,IAJmC;AAAA,GAA5C,MASK,IAAIT,2BAAA,CAA4BxL,MAA5B,CAAJ,EAAyC;AAAA,GAE1CkK,+CAAA,CAAgDtqB,UAAhD,EAA4DosB,iBAA5D,EAA+EjE,UAA/E,EAA2FR,UAA3F,EAF0C;AAAA,GAG1CwD,gEAAA,CAAiEnrB,UAAjE,EAH0C;AAAA,GAAzC,MAKA;AAAA,GACDsqB,+CAAA,CAAgDtqB,UAAhD,EAA4DosB,iBAA5D,EAA+EjE,UAA/E,EAA2FR,UAA3F,EADC;AAAA,GAvBuD;AAAA,EA0B5D6B,4CAAA,CAA6CxpB,UAA7C,EA1B4D;AAAA,EAvsCxC;AAAA,CAmuCxB,SAAS6oB,iCAAT,CAA2C7oB,UAA3C,EAAuDka,CAAvD,EAA0D;AAAA,EACtD,IAAIkG,MAAA,GAASpgB,UAAA,CAAWyoB,6BAAxB,CADsD;AAAA,EAEtD,IAAIrI,MAAA,CAAOG,MAAP,KAAkB,UAAtB,EAAkC;AAAA,GAC9B,OAD8B;AAAA,GAFoB;AAAA,EAKtDyJ,iDAAA,CAAkDhqB,UAAlD,EALsD;AAAA,EAMtDsmB,UAAA,CAAWtmB,UAAX,EANsD;AAAA,EAOtD+oB,2CAAA,CAA4C/oB,UAA5C,EAPsD;AAAA,EAQtDssB,mBAAA,CAAoBlM,MAApB,EAA4BlG,CAA5B,EARsD;AAAA,EAnuClC;AAAA,CA6uCxB,SAASqO,0CAAT,CAAoDvoB,UAApD,EAAgE;AAAA,EAC5D,IAAIrY,KAAA,GAAQqY,UAAA,CAAWyoB,6BAAX,CAAyClI,MAArD,CAD4D;AAAA,EAE5D,IAAI54B,KAAA,KAAU,SAAd,EAAyB;AAAA,GACrB,OAAO,IAAP,CADqB;AAAA,GAFmC;AAAA,EAK5D,IAAIA,KAAA,KAAU,QAAd,EAAwB;AAAA,GACpB,OAAO,CAAP,CADoB;AAAA,GALoC;AAAA,EAQ5D,OAAOqY,UAAA,CAAWusB,YAAX,GAA0BvsB,UAAA,CAAWkmB,eAA5C,CAR4D;AAAA,EA7uCxC;AAAA,CAuvCxB,SAASoB,mCAAT,CAA6CtnB,UAA7C,EAAyDonB,YAAzD,EAAuE;AAAA,EACnEA,YAAA,GAAe1sB,MAAA,CAAO0sB,YAAP,CAAf,CADmE;AAAA,EAEnE,IAAI,CAACzB,yBAAA,CAA0ByB,YAA1B,CAAL,EAA8C;AAAA,GAC1C,MAAM,IAAIhB,UAAJ,CAAe,+BAAf,CAAN,CAD0C;AAAA,GAFqB;AAAA,EAKnE6F,2CAAA,CAA4CjsB,UAA5C,EAAwDonB,YAAxD,EALmE;AAAA,EAvvC/C;AAAA,CA8vCxB,SAASQ,8CAAT,CAAwD5nB,UAAxD,EAAoEwnB,IAApE,EAA0E;AAAA,EACtE,IAAIU,eAAA,GAAkBloB,UAAA,CAAWioB,iBAAX,CAA6BlI,IAA7B,EAAtB,CADsE;AAAA,EAEtE,IAAImI,eAAA,CAAgBC,UAAhB,GAA6BD,eAAA,CAAgBE,WAA7C,KAA6DZ,IAAA,CAAKW,UAAtE,EAAkF;AAAA,GAC9E,MAAM,IAAI/B,UAAJ,CAAe,yDAAf,CAAN,CAD8E;AAAA,GAFZ;AAAA,EAKtE,IAAI8B,eAAA,CAAgBP,UAAhB,KAA+BH,IAAA,CAAKG,UAAxC,EAAoD;AAAA,GAChD,MAAM,IAAIvB,UAAJ,CAAe,4DAAf,CAAN,CADgD;AAAA,GALkB;AAAA,EAQtE8B,eAAA,CAAgBppB,MAAhB,GAAyB0oB,IAAA,CAAK1oB,MAA9B,CARsE;AAAA,EAStEmtB,2CAAA,CAA4CjsB,UAA5C,EAAwDwnB,IAAA,CAAKG,UAA7D,EATsE;AAAA,EA9vClD;AAAA,CAywCxB,SAAS6E,iCAAT,CAA2CpM,MAA3C,EAAmDpgB,UAAnD,EAA+DysB,cAA/D,EAA+EC,aAA/E,EAA8FC,eAA9F,EAA+GC,aAA/G,EAA8H3D,qBAA9H,EAAqJ;AAAA,EACjJjpB,UAAA,CAAWyoB,6BAAX,GAA2CrI,MAA3C,CADiJ;AAAA,EAEjJpgB,UAAA,CAAW6pB,UAAX,GAAwB,KAAxB,CAFiJ;AAAA,EAGjJ7pB,UAAA,CAAW4pB,QAAX,GAAsB,KAAtB,CAHiJ;AAAA,EAIjJ5pB,UAAA,CAAWgoB,YAAX,GAA0B,IAA1B,CAJiJ;AAAA,EAMjJhoB,UAAA,CAAWimB,MAAX,GAAoBjmB,UAAA,CAAWkmB,eAAX,GAA6BzkB,SAAjD,CANiJ;AAAA,EAOjJ6kB,UAAA,CAAWtmB,UAAX,EAPiJ;AAAA,EAQjJA,UAAA,CAAWwoB,eAAX,GAA6B,KAA7B,CARiJ;AAAA,EASjJxoB,UAAA,CAAWksB,QAAX,GAAsB,KAAtB,CATiJ;AAAA,EAUjJlsB,UAAA,CAAWusB,YAAX,GAA0BK,aAA1B,CAViJ;AAAA,EAWjJ5sB,UAAA,CAAW+pB,cAAX,GAA4B2C,aAA5B,CAXiJ;AAAA,EAYjJ1sB,UAAA,CAAW8oB,gBAAX,GAA8B6D,eAA9B,CAZiJ;AAAA,EAajJ3sB,UAAA,CAAWkpB,sBAAX,GAAoCD,qBAApC,CAbiJ;AAAA,EAcjJjpB,UAAA,CAAWioB,iBAAX,GAA+B,IAAIpJ,WAAJ,EAA/B,CAdiJ;AAAA,EAejJuB,MAAA,CAAOiE,yBAAP,GAAmCrkB,UAAnC,CAfiJ;AAAA,EAgBjJ,IAAI6sB,WAAA,GAAcJ,cAAA,EAAlB,CAhBiJ;AAAA,EAiBjJxO,WAAA,CAAYH,mBAAA,CAAoB+O,WAApB,CAAZ,EAA8C,YAAY;AAAA,GACtD7sB,UAAA,CAAWksB,QAAX,GAAsB,IAAtB,CADsD;AAAA,GAEtD1C,4CAAA,CAA6CxpB,UAA7C,EAFsD;AAAA,GAA1D,EAGG,UAAU5C,CAAV,EAAa;AAAA,GACZyrB,iCAAA,CAAkC7oB,UAAlC,EAA8C5C,CAA9C,EADY;AAAA,GAHhB,EAjBiJ;AAAA,EAzwC7H;AAAA,CAiyCxB,SAAS0vB,qDAAT,CAA+D1M,MAA/D,EAAuE2M,oBAAvE,EAA6FH,aAA7F,EAA4G;AAAA,EACxG,IAAI5sB,UAAA,GAAand,MAAA,CAAO5E,MAAP,CAAc4pC,4BAAA,CAA6BvmB,SAA3C,CAAjB,CADwG;AAAA,EAExG,IAAImrB,cAAA,GAAiB,YAAY;AAAA,GAAE,OAAOhrB,SAAP,CAAF;AAAA,GAAjC,CAFwG;AAAA,EAGxG,IAAIirB,aAAA,GAAgB,YAAY;AAAA,GAAE,OAAO5O,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAhC,CAHwG;AAAA,EAIxG,IAAIkrB,eAAA,GAAkB,YAAY;AAAA,GAAE,OAAO7O,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAlC,CAJwG;AAAA,EAKxG,IAAIsrB,oBAAA,CAAqB7pC,KAArB,KAA+Bue,SAAnC,EAA8C;AAAA,GAC1CgrB,cAAA,GAAiB,YAAY;AAAA,IAAE,OAAOM,oBAAA,CAAqB7pC,KAArB,CAA2B8c,UAA3B,CAAP,CAAF;AAAA,IAA7B,CAD0C;AAAA,GAL0D;AAAA,EAQxG,IAAI+sB,oBAAA,CAAqBC,IAArB,KAA8BvrB,SAAlC,EAA6C;AAAA,GACzCirB,aAAA,GAAgB,YAAY;AAAA,IAAE,OAAOK,oBAAA,CAAqBC,IAArB,CAA0BhtB,UAA1B,CAAP,CAAF;AAAA,IAA5B,CADyC;AAAA,GAR2D;AAAA,EAWxG,IAAI+sB,oBAAA,CAAqBpJ,MAArB,KAAgCliB,SAApC,EAA+C;AAAA,GAC3CkrB,eAAA,GAAkB,UAAU3tC,MAAV,EAAkB;AAAA,IAAE,OAAO+tC,oBAAA,CAAqBpJ,MAArB,CAA4B3kC,MAA5B,CAAP,CAAF;AAAA,IAApC,CAD2C;AAAA,GAXyD;AAAA,EAcxG,IAAIiqC,qBAAA,GAAwB8D,oBAAA,CAAqB9D,qBAAjD,CAdwG;AAAA,EAexG,IAAIA,qBAAA,KAA0B,CAA9B,EAAiC;AAAA,GAC7B,MAAM,IAAI1lB,SAAJ,CAAc,8CAAd,CAAN,CAD6B;AAAA,GAfuE;AAAA,EAkBxGipB,iCAAA,CAAkCpM,MAAlC,EAA0CpgB,UAA1C,EAAsDysB,cAAtD,EAAsEC,aAAtE,EAAqFC,eAArF,EAAsGC,aAAtG,EAAqH3D,qBAArH,EAlBwG;AAAA,EAjyCpF;AAAA,CAqzCxB,SAASX,8BAAT,CAAwC9oC,OAAxC,EAAiDwgB,UAAjD,EAA6DwnB,IAA7D,EAAmE;AAAA,EAC/DhoC,OAAA,CAAQ6nC,uCAAR,GAAkDrnB,UAAlD,CAD+D;AAAA,EAE/DxgB,OAAA,CAAQ0nC,KAAR,GAAgBM,IAAhB,CAF+D;AAAA,EArzC3C;AAAA,CA0zCxB,SAASP,8BAAT,CAAwClkC,IAAxC,EAA8C;AAAA,EAC1C,OAAO,IAAIwgB,SAAJ,CAAc,yCAAyCxgB,IAAzC,GAAgD,kDAA9D,CAAP,CAD0C;AAAA,EA1zCtB;AAAA,CA8zCxB,SAASglC,uCAAT,CAAiDhlC,IAAjD,EAAuD;AAAA,EACnD,OAAO,IAAIwgB,SAAJ,CAAc,4CAA4CxgB,IAA5C,GAAmD,qDAAjE,CAAP,CADmD;AAAA,EA9zC/B;AAAA,CAm0CxB,SAASkqC,+BAAT,CAAyC7M,MAAzC,EAAiD;AAAA,EAC7C,OAAO,IAAI8M,wBAAJ,CAA6B9M,MAA7B,CAAP,CAD6C;AAAA,EAn0CzB;AAAA,CAu0CxB,SAASqL,gCAAT,CAA0CrL,MAA1C,EAAkDkL,eAAlD,EAAmE;AAAA,EAC/DlL,MAAA,CAAOE,OAAP,CAAe6M,iBAAf,CAAiCjnB,IAAjC,CAAsColB,eAAtC,EAD+D;AAAA,EAv0C3C;AAAA,CA00CxB,SAASjB,oCAAT,CAA8CjK,MAA9C,EAAsD5kB,KAAtD,EAA6DvT,IAA7D,EAAmE;AAAA,EAC/D,IAAIk4B,MAAA,GAASC,MAAA,CAAOE,OAApB,CAD+D;AAAA,EAE/D,IAAIgL,eAAA,GAAkBnL,MAAA,CAAOgN,iBAAP,CAAyB5N,KAAzB,EAAtB,CAF+D;AAAA,EAG/D,IAAIt3B,IAAJ,EAAU;AAAA,GACNqjC,eAAA,CAAgBlI,WAAhB,CAA4B5nB,KAA5B,EADM;AAAA,GAAV,MAGK;AAAA,GACD8vB,eAAA,CAAgBjI,WAAhB,CAA4B7nB,KAA5B,EADC;AAAA,GAN0D;AAAA,EA10C3C;AAAA,CAo1CxB,SAASqwB,oCAAT,CAA8CzL,MAA9C,EAAsD;AAAA,EAClD,OAAOA,MAAA,CAAOE,OAAP,CAAe6M,iBAAf,CAAiChyB,MAAxC,CADkD;AAAA,EAp1C9B;AAAA,CAu1CxB,SAASywB,2BAAT,CAAqCxL,MAArC,EAA6C;AAAA,EACzC,IAAID,MAAA,GAASC,MAAA,CAAOE,OAApB,CADyC;AAAA,EAEzC,IAAIH,MAAA,KAAW1e,SAAf,EAA0B;AAAA,GACtB,OAAO,KAAP,CADsB;AAAA,GAFe;AAAA,EAKzC,IAAI,CAAC2rB,0BAAA,CAA2BjN,MAA3B,CAAL,EAAyC;AAAA,GACrC,OAAO,KAAP,CADqC;AAAA,GALA;AAAA,EAQzC,OAAO,IAAP,CARyC;AAAA,EAv1CrB;AAAA,CAs2CxB,IAAI+M,wBAAA,GAA0C,YAAY;AAAA,EACtD,SAASA,wBAAT,CAAkC9M,MAAlC,EAA0C;AAAA,GACtC8B,sBAAA,CAAuB9B,MAAvB,EAA+B,CAA/B,EAAkC,0BAAlC,EADsC;AAAA,GAEtCwC,oBAAA,CAAqBxC,MAArB,EAA6B,iBAA7B,EAFsC;AAAA,GAGtC,IAAIqD,sBAAA,CAAuBrD,MAAvB,CAAJ,EAAoC;AAAA,IAChC,MAAM,IAAI7c,SAAJ,CAAc,6EAAd,CAAN,CADgC;AAAA,IAHE;AAAA,GAMtC,IAAI,CAACukB,8BAAA,CAA+B1H,MAAA,CAAOiE,yBAAtC,CAAL,EAAuE;AAAA,IACnE,MAAM,IAAI9gB,SAAJ,CAAc,0FAChB,QADE,CAAN,CADmE;AAAA,IANjC;AAAA,GAUtC2c,qCAAA,CAAsC,IAAtC,EAA4CE,MAA5C,EAVsC;AAAA,GAWtC,KAAK+M,iBAAL,GAAyB,IAAItO,WAAJ,EAAzB,CAXsC;AAAA,GADY;AAAA,EActDh8B,MAAA,CAAO+f,cAAP,CAAsBsqB,wBAAA,CAAyB5rB,SAA/C,EAA0D,QAA1D,EAAoE;AAAA,GAKhErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACmuB,0BAAA,CAA2B,IAA3B,CAAL,EAAuC;AAAA,KACnC,OAAOrP,mBAAA,CAAoBsP,6BAAA,CAA8B,QAA9B,CAApB,CAAP,CADmC;AAAA,KAD1B;AAAA,IAIb,OAAO,KAAKnM,cAAZ,CAJa;AAAA,IAL+C;AAAA,GAWhEh8B,UAAA,EAAY,KAXoD;AAAA,GAYhEC,YAAA,EAAc,IAZkD;AAAA,GAApE,EAdsD;AAAA,EA+BtD+nC,wBAAA,CAAyB5rB,SAAzB,CAAmCqiB,MAAnC,GAA4C,UAAU3kC,MAAV,EAAkB;AAAA,GAC1D,IAAIA,MAAA,KAAW,KAAK,CAApB,EAAuB;AAAA,IAAEA,MAAA,GAASyiB,SAAT,CAAF;AAAA,IADmC;AAAA,GAE1D,IAAI,CAAC2rB,0BAAA,CAA2B,IAA3B,CAAL,EAAuC;AAAA,IACnC,OAAOrP,mBAAA,CAAoBsP,6BAAA,CAA8B,QAA9B,CAApB,CAAP,CADmC;AAAA,IAFmB;AAAA,GAK1D,IAAI,KAAKhN,oBAAL,KAA8B5e,SAAlC,EAA6C;AAAA,IACzC,OAAOsc,mBAAA,CAAoBkD,mBAAA,CAAoB,QAApB,CAApB,CAAP,CADyC;AAAA,IALa;AAAA,GAQ1D,OAAOL,iCAAA,CAAkC,IAAlC,EAAwC5hC,MAAxC,CAAP,CAR0D;AAAA,GAA9D,CA/BsD;AAAA,EA8CtDkuC,wBAAA,CAAyB5rB,SAAzB,CAAmCsiB,IAAnC,GAA0C,UAAU4D,IAAV,EAAgB;AAAA,GACtD,IAAI,CAAC4F,0BAAA,CAA2B,IAA3B,CAAL,EAAuC;AAAA,IACnC,OAAOrP,mBAAA,CAAoBsP,6BAAA,CAA8B,MAA9B,CAApB,CAAP,CADmC;AAAA,IADe;AAAA,GAItD,IAAI,CAAC5F,WAAA,CAAYC,MAAZ,CAAmBF,IAAnB,CAAL,EAA+B;AAAA,IAC3B,OAAOzJ,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,mCAAd,CAApB,CAAP,CAD2B;AAAA,IAJuB;AAAA,GAOtD,IAAIikB,IAAA,CAAKG,UAAL,KAAoB,CAAxB,EAA2B;AAAA,IACvB,OAAO5J,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,oCAAd,CAApB,CAAP,CADuB;AAAA,IAP2B;AAAA,GAUtD,IAAIikB,IAAA,CAAK1oB,MAAL,CAAY6oB,UAAZ,KAA2B,CAA/B,EAAkC;AAAA,IAC9B,OAAO5J,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,6CAAd,CAApB,CAAP,CAD8B;AAAA,IAVoB;AAAA,GAatD,IAAI,KAAK8c,oBAAL,KAA8B5e,SAAlC,EAA6C;AAAA,IACzC,OAAOsc,mBAAA,CAAoBkD,mBAAA,CAAoB,WAApB,CAApB,CAAP,CADyC;AAAA,IAbS;AAAA,GAgBtD,IAAI4C,cAAJ,CAhBsD;AAAA,GAiBtD,IAAIC,aAAJ,CAjBsD;AAAA,GAkBtD,IAAIvQ,OAAA,GAAUsK,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,IAChDkkC,cAAA,GAAiBnkC,OAAjB,CADgD;AAAA,IAEhDokC,aAAA,GAAgBnkC,MAAhB,CAFgD;AAAA,IAAtC,CAAd,CAlBsD;AAAA,GAsBtD,IAAI2rC,eAAA,GAAkB;AAAA,IAClBjI,WAAA,EAAa,UAAU7nB,KAAV,EAAiB;AAAA,KAAE,OAAOqoB,cAAA,CAAe;AAAA,MAAE5+B,KAAA,EAAOuW,KAAT;AAAA,MAAgBvT,IAAA,EAAM,KAAtB;AAAA,MAAf,CAAP,CAAF;AAAA,KADZ;AAAA,IAElBm7B,WAAA,EAAa,UAAU5nB,KAAV,EAAiB;AAAA,KAAE,OAAOqoB,cAAA,CAAe;AAAA,MAAE5+B,KAAA,EAAOuW,KAAT;AAAA,MAAgBvT,IAAA,EAAM,IAAtB;AAAA,MAAf,CAAP,CAAF;AAAA,KAFZ;AAAA,IAGlB87B,WAAA,EAAa,UAAU7J,CAAV,EAAa;AAAA,KAAE,OAAO4J,aAAA,CAAc5J,CAAd,CAAP,CAAF;AAAA,KAHR;AAAA,IAAtB,CAtBsD;AAAA,GA2BtDoT,4BAAA,CAA6B,IAA7B,EAAmC9F,IAAnC,EAAyC8D,eAAzC,EA3BsD;AAAA,GA4BtD,OAAO/X,OAAP,CA5BsD;AAAA,GAA1D,CA9CsD;AAAA,EAqFtD2Z,wBAAA,CAAyB5rB,SAAzB,CAAmC2iB,WAAnC,GAAiD,YAAY;AAAA,GACzD,IAAI,CAACmJ,0BAAA,CAA2B,IAA3B,CAAL,EAAuC;AAAA,IACnC,MAAMC,6BAAA,CAA8B,aAA9B,CAAN,CADmC;AAAA,IADkB;AAAA,GAIzD,IAAI,KAAKhN,oBAAL,KAA8B5e,SAAlC,EAA6C;AAAA,IACzC,OADyC;AAAA,IAJY;AAAA,GAOzD,IAAI,KAAK0rB,iBAAL,CAAuBhyB,MAAvB,GAAgC,CAApC,EAAuC;AAAA,IACnC,MAAM,IAAIoI,SAAJ,CAAc,qFAAd,CAAN,CADmC;AAAA,IAPkB;AAAA,GAUzDud,kCAAA,CAAmC,IAAnC,EAVyD;AAAA,GAA7D,CArFsD;AAAA,EAiGtD,OAAOoM,wBAAP,CAjGsD;AAAA,EAAZ,EAA9C,CAt2CwB;AAAA,CAy8CxBrqC,MAAA,CAAO6nB,gBAAP,CAAwBwiB,wBAAA,CAAyB5rB,SAAjD,EAA4D;AAAA,EACxDqiB,MAAA,EAAQ,EAAEz+B,UAAA,EAAY,IAAd,EADgD;AAAA,EAExD0+B,IAAA,EAAM,EAAE1+B,UAAA,EAAY,IAAd,EAFkD;AAAA,EAGxD++B,WAAA,EAAa,EAAE/+B,UAAA,EAAY,IAAd,EAH2C;AAAA,EAIxDg/B,MAAA,EAAQ,EAAEh/B,UAAA,EAAY,IAAd,EAJgD;AAAA,EAA5D,EAz8CwB;AAAA,CA+8CxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsBsqB,wBAAA,CAAyB5rB,SAA/C,EAA0D4b,cAAA,CAAeiH,WAAzE,EAAsF;AAAA,GAClFl/B,KAAA,EAAO,0BAD2E;AAAA,GAElFE,YAAA,EAAc,IAFoE;AAAA,GAAtF,EADgD;AAAA,EA/8C5B;AAAA,CAs9CxB,SAASioC,0BAAT,CAAoC1X,CAApC,EAAuC;AAAA,EACnC,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADa;AAAA,EAInC,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,mBAAxC,CAAL,EAAmE;AAAA,GAC/D,OAAO,KAAP,CAD+D;AAAA,GAJhC;AAAA,EAOnC,OAAO,IAAP,CAPmC;AAAA,EAt9Cf;AAAA,CA+9CxB,SAAS4X,4BAAT,CAAsCnN,MAAtC,EAA8CqH,IAA9C,EAAoD8D,eAApD,EAAqE;AAAA,EACjE,IAAIlL,MAAA,GAASD,MAAA,CAAOE,oBAApB,CADiE;AAAA,EAEjED,MAAA,CAAOgE,UAAP,GAAoB,IAApB,CAFiE;AAAA,EAGjE,IAAIhE,MAAA,CAAOG,MAAP,KAAkB,SAAtB,EAAiC;AAAA,GAC7B+K,eAAA,CAAgBvH,WAAhB,CAA4B3D,MAAA,CAAOO,YAAnC,EAD6B;AAAA,GAAjC,MAGK;AAAA,GACD0K,oCAAA,CAAqCjL,MAAA,CAAOiE,yBAA5C,EAAuEmD,IAAvE,EAA6E8D,eAA7E,EADC;AAAA,GAN4D;AAAA,EA/9C7C;AAAA,CA0+CxB,SAAS+B,6BAAT,CAAuCtqC,IAAvC,EAA6C;AAAA,EACzC,OAAO,IAAIwgB,SAAJ,CAAc,wCAAwCxgB,IAAxC,GAA+C,iDAA7D,CAAP,CADyC;AAAA,EA1+CrB;AAAA,CA8+CxB,SAASwqC,oBAAT,CAA8BC,QAA9B,EAAwCC,UAAxC,EAAoD;AAAA,EAChD,IAAIb,aAAA,GAAgBY,QAAA,CAASZ,aAA7B,CADgD;AAAA,EAEhD,IAAIA,aAAA,KAAkBnrB,SAAtB,EAAiC;AAAA,GAC7B,OAAOgsB,UAAP,CAD6B;AAAA,GAFe;AAAA,EAKhD,IAAI/H,WAAA,CAAYkH,aAAZ,KAA8BA,aAAA,GAAgB,CAAlD,EAAqD;AAAA,GACjD,MAAM,IAAIxG,UAAJ,CAAe,uBAAf,CAAN,CADiD;AAAA,GALL;AAAA,EAQhD,OAAOwG,aAAP,CARgD;AAAA,EA9+C5B;AAAA,CAw/CxB,SAASc,oBAAT,CAA8BF,QAA9B,EAAwC;AAAA,EACpC,IAAIhT,IAAA,GAAOgT,QAAA,CAAShT,IAApB,CADoC;AAAA,EAEpC,IAAI,CAACA,IAAL,EAAW;AAAA,GACP,OAAO,YAAY;AAAA,IAAE,OAAO,CAAP,CAAF;AAAA,IAAnB,CADO;AAAA,GAFyB;AAAA,EAKpC,OAAOA,IAAP,CALoC;AAAA,EAx/ChB;AAAA,CAggDxB,SAASmT,sBAAT,CAAgCC,IAAhC,EAAsClvC,OAAtC,EAA+C;AAAA,EAC3CqjC,gBAAA,CAAiB6L,IAAjB,EAAuBlvC,OAAvB,EAD2C;AAAA,EAE3C,IAAIkuC,aAAA,GAAgBgB,IAAA,KAAS,IAAT,IAAiBA,IAAA,KAAS,KAAK,CAA/B,GAAmC,KAAK,CAAxC,GAA4CA,IAAA,CAAKhB,aAArE,CAF2C;AAAA,EAG3C,IAAIpS,IAAA,GAAOoT,IAAA,KAAS,IAAT,IAAiBA,IAAA,KAAS,KAAK,CAA/B,GAAmC,KAAK,CAAxC,GAA4CA,IAAA,CAAKpT,IAA5D,CAH2C;AAAA,EAI3C,OAAO;AAAA,GACHoS,aAAA,EAAeA,aAAA,KAAkBnrB,SAAlB,GAA8BA,SAA9B,GAA0C4gB,yBAAA,CAA0BuK,aAA1B,CADtD;AAAA,GAEHpS,IAAA,EAAMA,IAAA,KAAS/Y,SAAT,GAAqBA,SAArB,GAAiCosB,0BAAA,CAA2BrT,IAA3B,EAAiC97B,OAAA,GAAU,yBAA3C,CAFpC;AAAA,GAAP,CAJ2C;AAAA,EAhgDvB;AAAA,CAygDxB,SAASmvC,0BAAT,CAAoC9nC,EAApC,EAAwCrH,OAAxC,EAAiD;AAAA,EAC7CsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EAD6C;AAAA,EAE7C,OAAO,UAAU8c,KAAV,EAAiB;AAAA,GAAE,OAAO6mB,yBAAA,CAA0Bt8B,EAAA,CAAGyV,KAAH,CAA1B,CAAP,CAAF;AAAA,GAAxB,CAF6C;AAAA,EAzgDzB;AAAA,CA8gDxB,SAASsyB,qBAAT,CAA+BC,QAA/B,EAAyCrvC,OAAzC,EAAkD;AAAA,EAC9CqjC,gBAAA,CAAiBgM,QAAjB,EAA2BrvC,OAA3B,EAD8C;AAAA,EAE9C,IAAIsvC,KAAA,GAAQD,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASC,KAAzE,CAF8C;AAAA,EAG9C,IAAIxiB,KAAA,GAAQuiB,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASviB,KAAzE,CAH8C;AAAA,EAI9C,IAAItoB,KAAA,GAAQ6qC,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAAS7qC,KAAzE,CAJ8C;AAAA,EAK9C,IAAI2C,IAAA,GAAOkoC,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASloC,IAAxE,CAL8C;AAAA,EAM9C,IAAI0lB,KAAA,GAAQwiB,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASxiB,KAAzE,CAN8C;AAAA,EAO9C,OAAO;AAAA,GACHyiB,KAAA,EAAOA,KAAA,KAAUvsB,SAAV,GACHA,SADG,GAEHwsB,kCAAA,CAAmCD,KAAnC,EAA0CD,QAA1C,EAAoDrvC,OAAA,GAAU,0BAA9D,CAHD;AAAA,GAIH8sB,KAAA,EAAOA,KAAA,KAAU/J,SAAV,GACHA,SADG,GAEHysB,kCAAA,CAAmC1iB,KAAnC,EAA0CuiB,QAA1C,EAAoDrvC,OAAA,GAAU,0BAA9D,CAND;AAAA,GAOHwE,KAAA,EAAOA,KAAA,KAAUue,SAAV,GACHA,SADG,GAEH0sB,kCAAA,CAAmCjrC,KAAnC,EAA0C6qC,QAA1C,EAAoDrvC,OAAA,GAAU,0BAA9D,CATD;AAAA,GAUH6sB,KAAA,EAAOA,KAAA,KAAU9J,SAAV,GACHA,SADG,GAEH2sB,kCAAA,CAAmC7iB,KAAnC,EAA0CwiB,QAA1C,EAAoDrvC,OAAA,GAAU,0BAA9D,CAZD;AAAA,GAaHmH,IAAA,EAAMA,IAbH;AAAA,GAAP,CAP8C;AAAA,EA9gD1B;AAAA,CAqiDxB,SAASooC,kCAAT,CAA4CloC,EAA5C,EAAgDgoC,QAAhD,EAA0DrvC,OAA1D,EAAmE;AAAA,EAC/DsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EAD+D;AAAA,EAE/D,OAAO,UAAUM,MAAV,EAAkB;AAAA,GAAE,OAAO2/B,WAAA,CAAY54B,EAAZ,EAAgBgoC,QAAhB,EAA0B,CAAC/uC,MAAD,CAA1B,CAAP,CAAF;AAAA,GAAzB,CAF+D;AAAA,EAriD3C;AAAA,CAyiDxB,SAASkvC,kCAAT,CAA4CnoC,EAA5C,EAAgDgoC,QAAhD,EAA0DrvC,OAA1D,EAAmE;AAAA,EAC/DsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EAD+D;AAAA,EAE/D,OAAO,YAAY;AAAA,GAAE,OAAOigC,WAAA,CAAY54B,EAAZ,EAAgBgoC,QAAhB,EAA0B,EAA1B,CAAP,CAAF;AAAA,GAAnB,CAF+D;AAAA,EAziD3C;AAAA,CA6iDxB,SAASI,kCAAT,CAA4CpoC,EAA5C,EAAgDgoC,QAAhD,EAA0DrvC,OAA1D,EAAmE;AAAA,EAC/DsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EAD+D;AAAA,EAE/D,OAAO,UAAUshB,UAAV,EAAsB;AAAA,GAAE,OAAO0e,WAAA,CAAY34B,EAAZ,EAAgBgoC,QAAhB,EAA0B,CAAC/tB,UAAD,CAA1B,CAAP,CAAF;AAAA,GAA7B,CAF+D;AAAA,EA7iD3C;AAAA,CAijDxB,SAASouB,kCAAT,CAA4CroC,EAA5C,EAAgDgoC,QAAhD,EAA0DrvC,OAA1D,EAAmE;AAAA,EAC/DsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EAD+D;AAAA,EAE/D,OAAO,UAAU8c,KAAV,EAAiBwE,UAAjB,EAA6B;AAAA,GAAE,OAAO2e,WAAA,CAAY54B,EAAZ,EAAgBgoC,QAAhB,EAA0B;AAAA,IAACvyB,KAAD;AAAA,IAAQwE,UAAR;AAAA,IAA1B,CAAP,CAAF;AAAA,GAApC,CAF+D;AAAA,EAjjD3C;AAAA,CAsjDxB,SAASquB,oBAAT,CAA8B3Y,CAA9B,EAAiCh3B,OAAjC,EAA0C;AAAA,EACtC,IAAI,CAAC4vC,gBAAA,CAAiB5Y,CAAjB,CAAL,EAA0B;AAAA,GACtB,MAAM,IAAInS,SAAJ,CAAc7kB,OAAA,GAAU,2BAAxB,CAAN,CADsB;AAAA,GADY;AAAA,EAtjDlB;AAAA,CAikDxB,IAAI6vC,cAAA,GAAgC,YAAY;AAAA,EAC5C,SAASA,cAAT,CAAwBC,iBAAxB,EAA2CC,WAA3C,EAAwD;AAAA,GACpD,IAAID,iBAAA,KAAsB,KAAK,CAA/B,EAAkC;AAAA,IAAEA,iBAAA,GAAoB,EAApB,CAAF;AAAA,IADkB;AAAA,GAEpD,IAAIC,WAAA,KAAgB,KAAK,CAAzB,EAA4B;AAAA,IAAEA,WAAA,GAAc,EAAd,CAAF;AAAA,IAFwB;AAAA,GAGpD,IAAID,iBAAA,KAAsB/sB,SAA1B,EAAqC;AAAA,IACjC+sB,iBAAA,GAAoB,IAApB,CADiC;AAAA,IAArC,MAGK;AAAA,IACDvM,YAAA,CAAauM,iBAAb,EAAgC,iBAAhC,EADC;AAAA,IAN+C;AAAA,GASpD,IAAIhB,QAAA,GAAWG,sBAAA,CAAuBc,WAAvB,EAAoC,kBAApC,CAAf,CAToD;AAAA,GAUpD,IAAIC,cAAA,GAAiBZ,qBAAA,CAAsBU,iBAAtB,EAAyC,iBAAzC,CAArB,CAVoD;AAAA,GAWpDG,wBAAA,CAAyB,IAAzB,EAXoD;AAAA,GAYpD,IAAI9oC,IAAA,GAAO6oC,cAAA,CAAe7oC,IAA1B,CAZoD;AAAA,GAapD,IAAIA,IAAA,KAAS4b,SAAb,EAAwB;AAAA,IACpB,MAAM,IAAI2kB,UAAJ,CAAe,2BAAf,CAAN,CADoB;AAAA,IAb4B;AAAA,GAgBpD,IAAIwI,aAAA,GAAgBlB,oBAAA,CAAqBF,QAArB,CAApB,CAhBoD;AAAA,GAiBpD,IAAIZ,aAAA,GAAgBW,oBAAA,CAAqBC,QAArB,EAA+B,CAA/B,CAApB,CAjBoD;AAAA,GAkBpDqB,sDAAA,CAAuD,IAAvD,EAA6DH,cAA7D,EAA6E9B,aAA7E,EAA4FgC,aAA5F,EAlBoD;AAAA,GADZ;AAAA,EAqB5C/rC,MAAA,CAAO+f,cAAP,CAAsB2rB,cAAA,CAAejtB,SAArC,EAAgD,QAAhD,EAA0D;AAAA,GAItDrC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACqvB,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,KACzB,MAAMQ,yBAAA,CAA0B,QAA1B,CAAN,CADyB;AAAA,KADhB;AAAA,IAIb,OAAOC,sBAAA,CAAuB,IAAvB,CAAP,CAJa;AAAA,IAJqC;AAAA,GAUtD7pC,UAAA,EAAY,KAV0C;AAAA,GAWtDC,YAAA,EAAc,IAXwC;AAAA,GAA1D,EArB4C;AAAA,EA2C5CopC,cAAA,CAAejtB,SAAf,CAAyB0sB,KAAzB,GAAiC,UAAUhvC,MAAV,EAAkB;AAAA,GAC/C,IAAIA,MAAA,KAAW,KAAK,CAApB,EAAuB;AAAA,IAAEA,MAAA,GAASyiB,SAAT,CAAF;AAAA,IADwB;AAAA,GAE/C,IAAI,CAAC6sB,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,OAAOvQ,mBAAA,CAAoB+Q,yBAAA,CAA0B,OAA1B,CAApB,CAAP,CADyB;AAAA,IAFkB;AAAA,GAK/C,IAAIC,sBAAA,CAAuB,IAAvB,CAAJ,EAAkC;AAAA,IAC9B,OAAOhR,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,iDAAd,CAApB,CAAP,CAD8B;AAAA,IALa;AAAA,GAQ/C,OAAOyrB,mBAAA,CAAoB,IAApB,EAA0BhwC,MAA1B,CAAP,CAR+C;AAAA,GAAnD,CA3C4C;AAAA,EA6D5CuvC,cAAA,CAAejtB,SAAf,CAAyBkK,KAAzB,GAAiC,YAAY;AAAA,GACzC,IAAI,CAAC8iB,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,OAAOvQ,mBAAA,CAAoB+Q,yBAAA,CAA0B,OAA1B,CAApB,CAAP,CADyB;AAAA,IADY;AAAA,GAIzC,IAAIC,sBAAA,CAAuB,IAAvB,CAAJ,EAAkC;AAAA,IAC9B,OAAOhR,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,iDAAd,CAApB,CAAP,CAD8B;AAAA,IAJO;AAAA,GAOzC,IAAI0rB,mCAAA,CAAoC,IAApC,CAAJ,EAA+C;AAAA,IAC3C,OAAOlR,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,wCAAd,CAApB,CAAP,CAD2C;AAAA,IAPN;AAAA,GAUzC,OAAO2rB,mBAAA,CAAoB,IAApB,CAAP,CAVyC;AAAA,GAA7C,CA7D4C;AAAA,EAiF5CX,cAAA,CAAejtB,SAAf,CAAyB6tB,SAAzB,GAAqC,YAAY;AAAA,GAC7C,IAAI,CAACb,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,MAAMQ,yBAAA,CAA0B,WAA1B,CAAN,CADyB;AAAA,IADgB;AAAA,GAI7C,OAAOM,kCAAA,CAAmC,IAAnC,CAAP,CAJ6C;AAAA,GAAjD,CAjF4C;AAAA,EAuF5C,OAAOb,cAAP,CAvF4C;AAAA,EAAZ,EAApC,CAjkDwB;AAAA,CA0pDxB1rC,MAAA,CAAO6nB,gBAAP,CAAwB6jB,cAAA,CAAejtB,SAAvC,EAAkD;AAAA,EAC9C0sB,KAAA,EAAO,EAAE9oC,UAAA,EAAY,IAAd,EADuC;AAAA,EAE9CsmB,KAAA,EAAO,EAAEtmB,UAAA,EAAY,IAAd,EAFuC;AAAA,EAG9CiqC,SAAA,EAAW,EAAEjqC,UAAA,EAAY,IAAd,EAHmC;AAAA,EAI9CmqC,MAAA,EAAQ,EAAEnqC,UAAA,EAAY,IAAd,EAJsC;AAAA,EAAlD,EA1pDwB;AAAA,CAgqDxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsB2rB,cAAA,CAAejtB,SAArC,EAAgD4b,cAAA,CAAeiH,WAA/D,EAA4E;AAAA,GACxEl/B,KAAA,EAAO,gBADiE;AAAA,GAExEE,YAAA,EAAc,IAF0D;AAAA,GAA5E,EADgD;AAAA,EAhqD5B;AAAA,CAuqDxB,SAASiqC,kCAAT,CAA4ChP,MAA5C,EAAoD;AAAA,EAChD,OAAO,IAAIkP,2BAAJ,CAAgClP,MAAhC,CAAP,CADgD;AAAA,EAvqD5B;AAAA,CA2qDxB,SAASmP,oBAAT,CAA8B9C,cAA9B,EAA8C+C,cAA9C,EAA8DC,cAA9D,EAA8EC,cAA9E,EAA8F9C,aAA9F,EAA6GgC,aAA7G,EAA4H;AAAA,EACxH,IAAIhC,aAAA,KAAkB,KAAK,CAA3B,EAA8B;AAAA,GAAEA,aAAA,GAAgB,CAAhB,CAAF;AAAA,GAD0F;AAAA,EAExH,IAAIgC,aAAA,KAAkB,KAAK,CAA3B,EAA8B;AAAA,GAAEA,aAAA,GAAgB,YAAY;AAAA,IAAE,OAAO,CAAP,CAAF;AAAA,IAA5B,CAAF;AAAA,GAF0F;AAAA,EAGxH,IAAIxO,MAAA,GAASv9B,MAAA,CAAO5E,MAAP,CAAcswC,cAAA,CAAejtB,SAA7B,CAAb,CAHwH;AAAA,EAIxHqtB,wBAAA,CAAyBvO,MAAzB,EAJwH;AAAA,EAKxH,IAAIpgB,UAAA,GAAand,MAAA,CAAO5E,MAAP,CAAc0xC,+BAAA,CAAgCruB,SAA9C,CAAjB,CALwH;AAAA,EAMxHsuB,oCAAA,CAAqCxP,MAArC,EAA6CpgB,UAA7C,EAAyDysB,cAAzD,EAAyE+C,cAAzE,EAAyFC,cAAzF,EAAyGC,cAAzG,EAAyH9C,aAAzH,EAAwIgC,aAAxI,EANwH;AAAA,EAOxH,OAAOxO,MAAP,CAPwH;AAAA,EA3qDpG;AAAA,CAorDxB,SAASuO,wBAAT,CAAkCvO,MAAlC,EAA0C;AAAA,EACtCA,MAAA,CAAOG,MAAP,GAAgB,UAAhB,CADsC;AAAA,EAItCH,MAAA,CAAOO,YAAP,GAAsBlf,SAAtB,CAJsC;AAAA,EAKtC2e,MAAA,CAAOyP,OAAP,GAAiBpuB,SAAjB,CALsC;AAAA,EAQtC2e,MAAA,CAAO0P,yBAAP,GAAmCruB,SAAnC,CARsC;AAAA,EAWtC2e,MAAA,CAAO2P,cAAP,GAAwB,IAAIlR,WAAJ,EAAxB,CAXsC;AAAA,EActCuB,MAAA,CAAO4P,qBAAP,GAA+BvuB,SAA/B,CAdsC;AAAA,EAiBtC2e,MAAA,CAAO6P,aAAP,GAAuBxuB,SAAvB,CAjBsC;AAAA,EAoBtC2e,MAAA,CAAO8P,qBAAP,GAA+BzuB,SAA/B,CApBsC;AAAA,EAsBtC2e,MAAA,CAAO+P,oBAAP,GAA8B1uB,SAA9B,CAtBsC;AAAA,EAwBtC2e,MAAA,CAAOgQ,aAAP,GAAuB,KAAvB,CAxBsC;AAAA,EAprDlB;AAAA,CA8sDxB,SAAS9B,gBAAT,CAA0B5Y,CAA1B,EAA6B;AAAA,EACzB,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADG;AAAA,EAIzB,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,2BAAxC,CAAL,EAA2E;AAAA,GACvE,OAAO,KAAP,CADuE;AAAA,GAJlD;AAAA,EAOzB,OAAO,IAAP,CAPyB;AAAA,EA9sDL;AAAA,CAutDxB,SAASqZ,sBAAT,CAAgC3O,MAAhC,EAAwC;AAAA,EACpC,IAAIA,MAAA,CAAOyP,OAAP,KAAmBpuB,SAAvB,EAAkC;AAAA,GAC9B,OAAO,KAAP,CAD8B;AAAA,GADE;AAAA,EAIpC,OAAO,IAAP,CAJoC;AAAA,EAvtDhB;AAAA,CA6tDxB,SAASutB,mBAAT,CAA6B5O,MAA7B,EAAqCphC,MAArC,EAA6C;AAAA,EACzC,IAAI2I,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CADyC;AAAA,EAEzC,IAAI54B,KAAA,KAAU,QAAV,IAAsBA,KAAA,KAAU,SAApC,EAA+C;AAAA,GAC3C,OAAOm2B,mBAAA,CAAoBrc,SAApB,CAAP,CAD2C;AAAA,GAFN;AAAA,EAKzC,IAAI2e,MAAA,CAAO+P,oBAAP,KAAgC1uB,SAApC,EAA+C;AAAA,GAC3C,OAAO2e,MAAA,CAAO+P,oBAAP,CAA4BE,QAAnC,CAD2C;AAAA,GALN;AAAA,EAQzC,IAAIC,kBAAA,GAAqB,KAAzB,CARyC;AAAA,EASzC,IAAI3oC,KAAA,KAAU,UAAd,EAA0B;AAAA,GACtB2oC,kBAAA,GAAqB,IAArB,CADsB;AAAA,GAGtBtxC,MAAA,GAASyiB,SAAT,CAHsB;AAAA,GATe;AAAA,EAczC,IAAI8R,OAAA,GAAUsK,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,GAChDygC,MAAA,CAAO+P,oBAAP,GAA8B;AAAA,IAC1BE,QAAA,EAAU5uB,SADgB;AAAA,IAE1B8uB,QAAA,EAAU7wC,OAFgB;AAAA,IAG1B8wC,OAAA,EAAS7wC,MAHiB;AAAA,IAI1B8wC,OAAA,EAASzxC,MAJiB;AAAA,IAK1B0xC,mBAAA,EAAqBJ,kBALK;AAAA,IAA9B,CADgD;AAAA,GAAtC,CAAd,CAdyC;AAAA,EAuBzClQ,MAAA,CAAO+P,oBAAP,CAA4BE,QAA5B,GAAuC9c,OAAvC,CAvByC;AAAA,EAwBzC,IAAI,CAAC+c,kBAAL,EAAyB;AAAA,GACrBK,2BAAA,CAA4BvQ,MAA5B,EAAoCphC,MAApC,EADqB;AAAA,GAxBgB;AAAA,EA2BzC,OAAOu0B,OAAP,CA3ByC;AAAA,EA7tDrB;AAAA,CA0vDxB,SAAS2b,mBAAT,CAA6B9O,MAA7B,EAAqC;AAAA,EACjC,IAAIz4B,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CADiC;AAAA,EAEjC,IAAI54B,KAAA,KAAU,QAAV,IAAsBA,KAAA,KAAU,SAApC,EAA+C;AAAA,GAC3C,OAAOo2B,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,oBAAoB5b,KAApB,GAA4B,2DAA1C,CAApB,CAAP,CAD2C;AAAA,GAFd;AAAA,EAKjC,IAAI4rB,OAAA,GAAUsK,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,GAChD,IAAIixC,YAAA,GAAe;AAAA,IACfL,QAAA,EAAU7wC,OADK;AAAA,IAEf8wC,OAAA,EAAS7wC,MAFM;AAAA,IAAnB,CADgD;AAAA,GAKhDygC,MAAA,CAAO6P,aAAP,GAAuBW,YAAvB,CALgD;AAAA,GAAtC,CAAd,CALiC;AAAA,EAYjC,IAAIC,MAAA,GAASzQ,MAAA,CAAOyP,OAApB,CAZiC;AAAA,EAajC,IAAIgB,MAAA,KAAWpvB,SAAX,IAAwB2e,MAAA,CAAOgQ,aAA/B,IAAgDzoC,KAAA,KAAU,UAA9D,EAA0E;AAAA,GACtEmpC,gCAAA,CAAiCD,MAAjC,EADsE;AAAA,GAbzC;AAAA,EAgBjCE,oCAAA,CAAqC3Q,MAAA,CAAO0P,yBAA5C,EAhBiC;AAAA,EAiBjC,OAAOvc,OAAP,CAjBiC;AAAA,EA1vDb;AAAA,CA8wDxB,SAASyd,6BAAT,CAAuC5Q,MAAvC,EAA+C;AAAA,EAC3C,IAAI7M,OAAA,GAAUsK,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,GAChD,IAAIsxC,YAAA,GAAe;AAAA,IACfV,QAAA,EAAU7wC,OADK;AAAA,IAEf8wC,OAAA,EAAS7wC,MAFM;AAAA,IAAnB,CADgD;AAAA,GAKhDygC,MAAA,CAAO2P,cAAP,CAAsB7pB,IAAtB,CAA2B+qB,YAA3B,EALgD;AAAA,GAAtC,CAAd,CAD2C;AAAA,EAQ3C,OAAO1d,OAAP,CAR2C;AAAA,EA9wDvB;AAAA,CAwxDxB,SAAS2d,+BAAT,CAAyC9Q,MAAzC,EAAiD5d,KAAjD,EAAwD;AAAA,EACpD,IAAI7a,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CADoD;AAAA,EAEpD,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,GACtBgpC,2BAAA,CAA4BvQ,MAA5B,EAAoC5d,KAApC,EADsB;AAAA,GAEtB,OAFsB;AAAA,GAF0B;AAAA,EAMpD2uB,4BAAA,CAA6B/Q,MAA7B,EANoD;AAAA,EAxxDhC;AAAA,CAgyDxB,SAASuQ,2BAAT,CAAqCvQ,MAArC,EAA6CphC,MAA7C,EAAqD;AAAA,EACjD,IAAIghB,UAAA,GAAaogB,MAAA,CAAO0P,yBAAxB,CADiD;AAAA,EAEjD1P,MAAA,CAAOG,MAAP,GAAgB,UAAhB,CAFiD;AAAA,EAGjDH,MAAA,CAAOO,YAAP,GAAsB3hC,MAAtB,CAHiD;AAAA,EAIjD,IAAI6xC,MAAA,GAASzQ,MAAA,CAAOyP,OAApB,CAJiD;AAAA,EAKjD,IAAIgB,MAAA,KAAWpvB,SAAf,EAA0B;AAAA,GACtB2vB,qDAAA,CAAsDP,MAAtD,EAA8D7xC,MAA9D,EADsB;AAAA,GALuB;AAAA,EAQjD,IAAI,CAACqyC,wCAAA,CAAyCjR,MAAzC,CAAD,IAAqDpgB,UAAA,CAAWksB,QAApE,EAA8E;AAAA,GAC1EiF,4BAAA,CAA6B/Q,MAA7B,EAD0E;AAAA,GAR7B;AAAA,EAhyD7B;AAAA,CA4yDxB,SAAS+Q,4BAAT,CAAsC/Q,MAAtC,EAA8C;AAAA,EAC1CA,MAAA,CAAOG,MAAP,GAAgB,SAAhB,CAD0C;AAAA,EAE1CH,MAAA,CAAO0P,yBAAP,CAAiCvO,UAAjC,IAF0C;AAAA,EAG1C,IAAI+P,WAAA,GAAclR,MAAA,CAAOO,YAAzB,CAH0C;AAAA,EAI1CP,MAAA,CAAO2P,cAAP,CAAsBlQ,OAAtB,CAA8B,UAAUoR,YAAV,EAAwB;AAAA,GAClDA,YAAA,CAAaT,OAAb,CAAqBc,WAArB,EADkD;AAAA,GAAtD,EAJ0C;AAAA,EAO1ClR,MAAA,CAAO2P,cAAP,GAAwB,IAAIlR,WAAJ,EAAxB,CAP0C;AAAA,EAQ1C,IAAIuB,MAAA,CAAO+P,oBAAP,KAAgC1uB,SAApC,EAA+C;AAAA,GAC3C8vB,iDAAA,CAAkDnR,MAAlD,EAD2C;AAAA,GAE3C,OAF2C;AAAA,GARL;AAAA,EAY1C,IAAIoR,YAAA,GAAepR,MAAA,CAAO+P,oBAA1B,CAZ0C;AAAA,EAa1C/P,MAAA,CAAO+P,oBAAP,GAA8B1uB,SAA9B,CAb0C;AAAA,EAc1C,IAAI+vB,YAAA,CAAad,mBAAjB,EAAsC;AAAA,GAClCc,YAAA,CAAahB,OAAb,CAAqBc,WAArB,EADkC;AAAA,GAElCC,iDAAA,CAAkDnR,MAAlD,EAFkC;AAAA,GAGlC,OAHkC;AAAA,GAdI;AAAA,EAmB1C,IAAI7M,OAAA,GAAU6M,MAAA,CAAO0P,yBAAP,CAAiCxO,UAAjC,EAA6CkQ,YAAA,CAAaf,OAA1D,CAAd,CAnB0C;AAAA,EAoB1CxS,WAAA,CAAY1K,OAAZ,EAAqB,YAAY;AAAA,GAC7Bie,YAAA,CAAajB,QAAb,GAD6B;AAAA,GAE7BgB,iDAAA,CAAkDnR,MAAlD,EAF6B;AAAA,GAAjC,EAGG,UAAUphC,MAAV,EAAkB;AAAA,GACjBwyC,YAAA,CAAahB,OAAb,CAAqBxxC,MAArB,EADiB;AAAA,GAEjBuyC,iDAAA,CAAkDnR,MAAlD,EAFiB;AAAA,GAHrB,EApB0C;AAAA,EA5yDtB;AAAA,CAw0DxB,SAASqR,iCAAT,CAA2CrR,MAA3C,EAAmD;AAAA,EAC/CA,MAAA,CAAO4P,qBAAP,CAA6BO,QAA7B,CAAsC9uB,SAAtC,EAD+C;AAAA,EAE/C2e,MAAA,CAAO4P,qBAAP,GAA+BvuB,SAA/B,CAF+C;AAAA,EAx0D3B;AAAA,CA40DxB,SAASiwB,0CAAT,CAAoDtR,MAApD,EAA4D5d,KAA5D,EAAmE;AAAA,EAC/D4d,MAAA,CAAO4P,qBAAP,CAA6BQ,OAA7B,CAAqChuB,KAArC,EAD+D;AAAA,EAE/D4d,MAAA,CAAO4P,qBAAP,GAA+BvuB,SAA/B,CAF+D;AAAA,EAG/DyvB,+BAAA,CAAgC9Q,MAAhC,EAAwC5d,KAAxC,EAH+D;AAAA,EA50D3C;AAAA,CAi1DxB,SAASmvB,iCAAT,CAA2CvR,MAA3C,EAAmD;AAAA,EAC/CA,MAAA,CAAO8P,qBAAP,CAA6BK,QAA7B,CAAsC9uB,SAAtC,EAD+C;AAAA,EAE/C2e,MAAA,CAAO8P,qBAAP,GAA+BzuB,SAA/B,CAF+C;AAAA,EAG/C,IAAI9Z,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CAH+C;AAAA,EAI/C,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,GAEtBy4B,MAAA,CAAOO,YAAP,GAAsBlf,SAAtB,CAFsB;AAAA,GAGtB,IAAI2e,MAAA,CAAO+P,oBAAP,KAAgC1uB,SAApC,EAA+C;AAAA,IAC3C2e,MAAA,CAAO+P,oBAAP,CAA4BI,QAA5B,GAD2C;AAAA,IAE3CnQ,MAAA,CAAO+P,oBAAP,GAA8B1uB,SAA9B,CAF2C;AAAA,IAHzB;AAAA,GAJqB;AAAA,EAY/C2e,MAAA,CAAOG,MAAP,GAAgB,QAAhB,CAZ+C;AAAA,EAa/C,IAAIsQ,MAAA,GAASzQ,MAAA,CAAOyP,OAApB,CAb+C;AAAA,EAc/C,IAAIgB,MAAA,KAAWpvB,SAAf,EAA0B;AAAA,GACtBmwB,iCAAA,CAAkCf,MAAlC,EADsB;AAAA,GAdqB;AAAA,EAj1D3B;AAAA,CAm2DxB,SAASgB,0CAAT,CAAoDzR,MAApD,EAA4D5d,KAA5D,EAAmE;AAAA,EAC/D4d,MAAA,CAAO8P,qBAAP,CAA6BM,OAA7B,CAAqChuB,KAArC,EAD+D;AAAA,EAE/D4d,MAAA,CAAO8P,qBAAP,GAA+BzuB,SAA/B,CAF+D;AAAA,EAI/D,IAAI2e,MAAA,CAAO+P,oBAAP,KAAgC1uB,SAApC,EAA+C;AAAA,GAC3C2e,MAAA,CAAO+P,oBAAP,CAA4BK,OAA5B,CAAoChuB,KAApC,EAD2C;AAAA,GAE3C4d,MAAA,CAAO+P,oBAAP,GAA8B1uB,SAA9B,CAF2C;AAAA,GAJgB;AAAA,EAQ/DyvB,+BAAA,CAAgC9Q,MAAhC,EAAwC5d,KAAxC,EAR+D;AAAA,EAn2D3C;AAAA,CA82DxB,SAASysB,mCAAT,CAA6C7O,MAA7C,EAAqD;AAAA,EACjD,IAAIA,MAAA,CAAO6P,aAAP,KAAyBxuB,SAAzB,IAAsC2e,MAAA,CAAO8P,qBAAP,KAAiCzuB,SAA3E,EAAsF;AAAA,GAClF,OAAO,KAAP,CADkF;AAAA,GADrC;AAAA,EAIjD,OAAO,IAAP,CAJiD;AAAA,EA92D7B;AAAA,CAo3DxB,SAAS4vB,wCAAT,CAAkDjR,MAAlD,EAA0D;AAAA,EACtD,IAAIA,MAAA,CAAO4P,qBAAP,KAAiCvuB,SAAjC,IAA8C2e,MAAA,CAAO8P,qBAAP,KAAiCzuB,SAAnF,EAA8F;AAAA,GAC1F,OAAO,KAAP,CAD0F;AAAA,GADxC;AAAA,EAItD,OAAO,IAAP,CAJsD;AAAA,EAp3DlC;AAAA,CA03DxB,SAASqwB,sCAAT,CAAgD1R,MAAhD,EAAwD;AAAA,EACpDA,MAAA,CAAO8P,qBAAP,GAA+B9P,MAAA,CAAO6P,aAAtC,CADoD;AAAA,EAEpD7P,MAAA,CAAO6P,aAAP,GAAuBxuB,SAAvB,CAFoD;AAAA,EA13DhC;AAAA,CA83DxB,SAASswB,2CAAT,CAAqD3R,MAArD,EAA6D;AAAA,EACzDA,MAAA,CAAO4P,qBAAP,GAA+B5P,MAAA,CAAO2P,cAAP,CAAsBxQ,KAAtB,EAA/B,CADyD;AAAA,EA93DrC;AAAA,CAi4DxB,SAASgS,iDAAT,CAA2DnR,MAA3D,EAAmE;AAAA,EAC/D,IAAIA,MAAA,CAAO6P,aAAP,KAAyBxuB,SAA7B,EAAwC;AAAA,GACpC2e,MAAA,CAAO6P,aAAP,CAAqBO,OAArB,CAA6BpQ,MAAA,CAAOO,YAApC,EADoC;AAAA,GAEpCP,MAAA,CAAO6P,aAAP,GAAuBxuB,SAAvB,CAFoC;AAAA,GADuB;AAAA,EAK/D,IAAIovB,MAAA,GAASzQ,MAAA,CAAOyP,OAApB,CAL+D;AAAA,EAM/D,IAAIgB,MAAA,KAAWpvB,SAAf,EAA0B;AAAA,GACtBuwB,gCAAA,CAAiCnB,MAAjC,EAAyCzQ,MAAA,CAAOO,YAAhD,EADsB;AAAA,GANqC;AAAA,EAj4D3C;AAAA,CA24DxB,SAASsR,gCAAT,CAA0C7R,MAA1C,EAAkD8R,YAAlD,EAAgE;AAAA,EAC5D,IAAIrB,MAAA,GAASzQ,MAAA,CAAOyP,OAApB,CAD4D;AAAA,EAE5D,IAAIgB,MAAA,KAAWpvB,SAAX,IAAwBywB,YAAA,KAAiB9R,MAAA,CAAOgQ,aAApD,EAAmE;AAAA,GAC/D,IAAI8B,YAAJ,EAAkB;AAAA,IACdC,8BAAA,CAA+BtB,MAA/B,EADc;AAAA,IAAlB,MAGK;AAAA,IACDC,gCAAA,CAAiCD,MAAjC,EADC;AAAA,IAJ0D;AAAA,GAFP;AAAA,EAU5DzQ,MAAA,CAAOgQ,aAAP,GAAuB8B,YAAvB,CAV4D;AAAA,EA34DxC;AAAA,CA45DxB,IAAI5C,2BAAA,GAA6C,YAAY;AAAA,EACzD,SAASA,2BAAT,CAAqClP,MAArC,EAA6C;AAAA,GACzC8B,sBAAA,CAAuB9B,MAAvB,EAA+B,CAA/B,EAAkC,6BAAlC,EADyC;AAAA,GAEzCiO,oBAAA,CAAqBjO,MAArB,EAA6B,iBAA7B,EAFyC;AAAA,GAGzC,IAAI2O,sBAAA,CAAuB3O,MAAvB,CAAJ,EAAoC;AAAA,IAChC,MAAM,IAAI7c,SAAJ,CAAc,6EAAd,CAAN,CADgC;AAAA,IAHK;AAAA,GAMzC,KAAK6uB,oBAAL,GAA4BhS,MAA5B,CANyC;AAAA,GAOzCA,MAAA,CAAOyP,OAAP,GAAiB,IAAjB,CAPyC;AAAA,GAQzC,IAAIloC,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CARyC;AAAA,GASzC,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,IACtB,IAAI,CAACsnC,mCAAA,CAAoC7O,MAApC,CAAD,IAAgDA,MAAA,CAAOgQ,aAA3D,EAA0E;AAAA,KACtEiC,mCAAA,CAAoC,IAApC,EADsE;AAAA,KAA1E,MAGK;AAAA,KACDC,6CAAA,CAA8C,IAA9C,EADC;AAAA,KAJiB;AAAA,IAOtBC,oCAAA,CAAqC,IAArC,EAPsB;AAAA,IAA1B,MASK,IAAI5qC,KAAA,KAAU,UAAd,EAA0B;AAAA,IAC3B6qC,6CAAA,CAA8C,IAA9C,EAAoDpS,MAAA,CAAOO,YAA3D,EAD2B;AAAA,IAE3B4R,oCAAA,CAAqC,IAArC,EAF2B;AAAA,IAA1B,MAIA,IAAI5qC,KAAA,KAAU,QAAd,EAAwB;AAAA,IACzB2qC,6CAAA,CAA8C,IAA9C,EADyB;AAAA,IAEzBG,8CAAA,CAA+C,IAA/C,EAFyB;AAAA,IAAxB,MAIA;AAAA,IACD,IAAInB,WAAA,GAAclR,MAAA,CAAOO,YAAzB,CADC;AAAA,IAED6R,6CAAA,CAA8C,IAA9C,EAAoDlB,WAApD,EAFC;AAAA,IAGDoB,8CAAA,CAA+C,IAA/C,EAAqDpB,WAArD,EAHC;AAAA,IA1BoC;AAAA,GADY;AAAA,EAiCzDzuC,MAAA,CAAO+f,cAAP,CAAsB0sB,2BAAA,CAA4BhuB,SAAlD,EAA6D,QAA7D,EAAuE;AAAA,GAKnErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC0zB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,KACtC,OAAO5U,mBAAA,CAAoB6U,gCAAA,CAAiC,QAAjC,CAApB,CAAP,CADsC;AAAA,KAD7B;AAAA,IAIb,OAAO,KAAK1R,cAAZ,CAJa;AAAA,IALkD;AAAA,GAWnEh8B,UAAA,EAAY,KAXuD;AAAA,GAYnEC,YAAA,EAAc,IAZqD;AAAA,GAAvE,EAjCyD;AAAA,EA+CzDtC,MAAA,CAAO+f,cAAP,CAAsB0sB,2BAAA,CAA4BhuB,SAAlD,EAA6D,aAA7D,EAA4E;AAAA,GASxErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC0zB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,KACtC,MAAMC,gCAAA,CAAiC,aAAjC,CAAN,CADsC;AAAA,KAD7B;AAAA,IAIb,IAAI,KAAKR,oBAAL,KAA8B3wB,SAAlC,EAA6C;AAAA,KACzC,MAAMoxB,0BAAA,CAA2B,aAA3B,CAAN,CADyC;AAAA,KAJhC;AAAA,IAOb,OAAOC,yCAAA,CAA0C,IAA1C,CAAP,CAPa;AAAA,IATuD;AAAA,GAkBxE5tC,UAAA,EAAY,KAlB4D;AAAA,GAmBxEC,YAAA,EAAc,IAnB0D;AAAA,GAA5E,EA/CyD;AAAA,EAoEzDtC,MAAA,CAAO+f,cAAP,CAAsB0sB,2BAAA,CAA4BhuB,SAAlD,EAA6D,OAA7D,EAAsE;AAAA,GASlErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC0zB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,KACtC,OAAO5U,mBAAA,CAAoB6U,gCAAA,CAAiC,OAAjC,CAApB,CAAP,CADsC;AAAA,KAD7B;AAAA,IAIb,OAAO,KAAKG,aAAZ,CAJa;AAAA,IATiD;AAAA,GAelE7tC,UAAA,EAAY,KAfsD;AAAA,GAgBlEC,YAAA,EAAc,IAhBoD;AAAA,GAAtE,EApEyD;AAAA,EAyFzDmqC,2BAAA,CAA4BhuB,SAA5B,CAAsC0sB,KAAtC,GAA8C,UAAUhvC,MAAV,EAAkB;AAAA,GAC5D,IAAIA,MAAA,KAAW,KAAK,CAApB,EAAuB;AAAA,IAAEA,MAAA,GAASyiB,SAAT,CAAF;AAAA,IADqC;AAAA,GAE5D,IAAI,CAACkxB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,OAAO5U,mBAAA,CAAoB6U,gCAAA,CAAiC,OAAjC,CAApB,CAAP,CADsC;AAAA,IAFkB;AAAA,GAK5D,IAAI,KAAKR,oBAAL,KAA8B3wB,SAAlC,EAA6C;AAAA,IACzC,OAAOsc,mBAAA,CAAoB8U,0BAAA,CAA2B,OAA3B,CAApB,CAAP,CADyC;AAAA,IALe;AAAA,GAQ5D,OAAOG,gCAAA,CAAiC,IAAjC,EAAuCh0C,MAAvC,CAAP,CAR4D;AAAA,GAAhE,CAzFyD;AAAA,EAsGzDswC,2BAAA,CAA4BhuB,SAA5B,CAAsCkK,KAAtC,GAA8C,YAAY;AAAA,GACtD,IAAI,CAACmnB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,OAAO5U,mBAAA,CAAoB6U,gCAAA,CAAiC,OAAjC,CAApB,CAAP,CADsC;AAAA,IADY;AAAA,GAItD,IAAIxS,MAAA,GAAS,KAAKgS,oBAAlB,CAJsD;AAAA,GAKtD,IAAIhS,MAAA,KAAW3e,SAAf,EAA0B;AAAA,IACtB,OAAOsc,mBAAA,CAAoB8U,0BAAA,CAA2B,OAA3B,CAApB,CAAP,CADsB;AAAA,IAL4B;AAAA,GAQtD,IAAI5D,mCAAA,CAAoC7O,MAApC,CAAJ,EAAiD;AAAA,IAC7C,OAAOrC,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,wCAAd,CAApB,CAAP,CAD6C;AAAA,IARK;AAAA,GAWtD,OAAO0vB,gCAAA,CAAiC,IAAjC,CAAP,CAXsD;AAAA,GAA1D,CAtGyD;AAAA,EA6HzD3D,2BAAA,CAA4BhuB,SAA5B,CAAsC2iB,WAAtC,GAAoD,YAAY;AAAA,GAC5D,IAAI,CAAC0O,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,MAAMC,gCAAA,CAAiC,aAAjC,CAAN,CADsC;AAAA,IADkB;AAAA,GAI5D,IAAIxS,MAAA,GAAS,KAAKgS,oBAAlB,CAJ4D;AAAA,GAK5D,IAAIhS,MAAA,KAAW3e,SAAf,EAA0B;AAAA,IACtB,OADsB;AAAA,IALkC;AAAA,GAQ5DyxB,kCAAA,CAAmC,IAAnC,EAR4D;AAAA,GAAhE,CA7HyD;AAAA,EAuIzD5D,2BAAA,CAA4BhuB,SAA5B,CAAsCiK,KAAtC,GAA8C,UAAU/P,KAAV,EAAiB;AAAA,GAC3D,IAAIA,KAAA,KAAU,KAAK,CAAnB,EAAsB;AAAA,IAAEA,KAAA,GAAQiG,SAAR,CAAF;AAAA,IADqC;AAAA,GAE3D,IAAI,CAACkxB,6BAAA,CAA8B,IAA9B,CAAL,EAA0C;AAAA,IACtC,OAAO5U,mBAAA,CAAoB6U,gCAAA,CAAiC,OAAjC,CAApB,CAAP,CADsC;AAAA,IAFiB;AAAA,GAK3D,IAAI,KAAKR,oBAAL,KAA8B3wB,SAAlC,EAA6C;AAAA,IACzC,OAAOsc,mBAAA,CAAoB8U,0BAAA,CAA2B,UAA3B,CAApB,CAAP,CADyC;AAAA,IALc;AAAA,GAQ3D,OAAOM,gCAAA,CAAiC,IAAjC,EAAuC33B,KAAvC,CAAP,CAR2D;AAAA,GAA/D,CAvIyD;AAAA,EAiJzD,OAAO8zB,2BAAP,CAjJyD;AAAA,EAAZ,EAAjD,CA55DwB;AAAA,CA+iExBzsC,MAAA,CAAO6nB,gBAAP,CAAwB4kB,2BAAA,CAA4BhuB,SAApD,EAA+D;AAAA,EAC3D0sB,KAAA,EAAO,EAAE9oC,UAAA,EAAY,IAAd,EADoD;AAAA,EAE3DsmB,KAAA,EAAO,EAAEtmB,UAAA,EAAY,IAAd,EAFoD;AAAA,EAG3D++B,WAAA,EAAa,EAAE/+B,UAAA,EAAY,IAAd,EAH8C;AAAA,EAI3DqmB,KAAA,EAAO,EAAErmB,UAAA,EAAY,IAAd,EAJoD;AAAA,EAK3Dg/B,MAAA,EAAQ,EAAEh/B,UAAA,EAAY,IAAd,EALmD;AAAA,EAM3DukC,WAAA,EAAa,EAAEvkC,UAAA,EAAY,IAAd,EAN8C;AAAA,EAO3D2lC,KAAA,EAAO,EAAE3lC,UAAA,EAAY,IAAd,EAPoD;AAAA,EAA/D,EA/iEwB;AAAA,CAwjExB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsB0sB,2BAAA,CAA4BhuB,SAAlD,EAA6D4b,cAAA,CAAeiH,WAA5E,EAAyF;AAAA,GACrFl/B,KAAA,EAAO,6BAD8E;AAAA,GAErFE,YAAA,EAAc,IAFuE;AAAA,GAAzF,EADgD;AAAA,EAxjE5B;AAAA,CA+jExB,SAASwtC,6BAAT,CAAuCjd,CAAvC,EAA0C;AAAA,EACtC,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADgB;AAAA,EAItC,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,sBAAxC,CAAL,EAAsE;AAAA,GAClE,OAAO,KAAP,CADkE;AAAA,GAJhC;AAAA,EAOtC,OAAO,IAAP,CAPsC;AAAA,EA/jElB;AAAA,CAykExB,SAASsd,gCAAT,CAA0CnC,MAA1C,EAAkD7xC,MAAlD,EAA0D;AAAA,EACtD,IAAIohC,MAAA,GAASyQ,MAAA,CAAOuB,oBAApB,CADsD;AAAA,EAEtD,OAAOpD,mBAAA,CAAoB5O,MAApB,EAA4BphC,MAA5B,CAAP,CAFsD;AAAA,EAzkElC;AAAA,CA6kExB,SAASi0C,gCAAT,CAA0CpC,MAA1C,EAAkD;AAAA,EAC9C,IAAIzQ,MAAA,GAASyQ,MAAA,CAAOuB,oBAApB,CAD8C;AAAA,EAE9C,OAAOlD,mBAAA,CAAoB9O,MAApB,CAAP,CAF8C;AAAA,EA7kE1B;AAAA,CAilExB,SAASgT,oDAAT,CAA8DvC,MAA9D,EAAsE;AAAA,EAClE,IAAIzQ,MAAA,GAASyQ,MAAA,CAAOuB,oBAApB,CADkE;AAAA,EAElE,IAAIzqC,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CAFkE;AAAA,EAGlE,IAAI0O,mCAAA,CAAoC7O,MAApC,KAA+Cz4B,KAAA,KAAU,QAA7D,EAAuE;AAAA,GACnE,OAAOm2B,mBAAA,CAAoBrc,SAApB,CAAP,CADmE;AAAA,GAHL;AAAA,EAMlE,IAAI9Z,KAAA,KAAU,SAAd,EAAyB;AAAA,GACrB,OAAOo2B,mBAAA,CAAoBqC,MAAA,CAAOO,YAA3B,CAAP,CADqB;AAAA,GANyC;AAAA,EASlE,OAAOsS,gCAAA,CAAiCpC,MAAjC,CAAP,CATkE;AAAA,EAjlE9C;AAAA,CA4lExB,SAASwC,sDAAT,CAAgExC,MAAhE,EAAwEruB,KAAxE,EAA+E;AAAA,EAC3E,IAAIquB,MAAA,CAAOyC,mBAAP,KAA+B,SAAnC,EAA8C;AAAA,GAC1CtB,gCAAA,CAAiCnB,MAAjC,EAAyCruB,KAAzC,EAD0C;AAAA,GAA9C,MAGK;AAAA,GACD+wB,yCAAA,CAA0C1C,MAA1C,EAAkDruB,KAAlD,EADC;AAAA,GAJsE;AAAA,EA5lEvD;AAAA,CAomExB,SAAS4uB,qDAAT,CAA+DP,MAA/D,EAAuEruB,KAAvE,EAA8E;AAAA,EAC1E,IAAIquB,MAAA,CAAO2C,kBAAP,KAA8B,SAAlC,EAA6C;AAAA,GACzCC,+BAAA,CAAgC5C,MAAhC,EAAwCruB,KAAxC,EADyC;AAAA,GAA7C,MAGK;AAAA,GACDkxB,wCAAA,CAAyC7C,MAAzC,EAAiDruB,KAAjD,EADC;AAAA,GAJqE;AAAA,EApmEtD;AAAA,CA4mExB,SAASswB,yCAAT,CAAmDjC,MAAnD,EAA2D;AAAA,EACvD,IAAIzQ,MAAA,GAASyQ,MAAA,CAAOuB,oBAApB,CADuD;AAAA,EAEvD,IAAIzqC,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CAFuD;AAAA,EAGvD,IAAI54B,KAAA,KAAU,SAAV,IAAuBA,KAAA,KAAU,UAArC,EAAiD;AAAA,GAC7C,OAAO,IAAP,CAD6C;AAAA,GAHM;AAAA,EAMvD,IAAIA,KAAA,KAAU,QAAd,EAAwB;AAAA,GACpB,OAAO,CAAP,CADoB;AAAA,GAN+B;AAAA,EASvD,OAAOgsC,6CAAA,CAA8CvT,MAAA,CAAO0P,yBAArD,CAAP,CATuD;AAAA,EA5mEnC;AAAA,CAunExB,SAASoD,kCAAT,CAA4CrC,MAA5C,EAAoD;AAAA,EAChD,IAAIzQ,MAAA,GAASyQ,MAAA,CAAOuB,oBAApB,CADgD;AAAA,EAEhD,IAAIwB,aAAA,GAAgB,IAAIrwB,SAAJ,CAAc,kFAAd,CAApB,CAFgD;AAAA,EAGhD6tB,qDAAA,CAAsDP,MAAtD,EAA8D+C,aAA9D,EAHgD;AAAA,EAMhDP,sDAAA,CAAuDxC,MAAvD,EAA+D+C,aAA/D,EANgD;AAAA,EAOhDxT,MAAA,CAAOyP,OAAP,GAAiBpuB,SAAjB,CAPgD;AAAA,EAQhDovB,MAAA,CAAOuB,oBAAP,GAA8B3wB,SAA9B,CARgD;AAAA,EAvnE5B;AAAA,CAioExB,SAAS0xB,gCAAT,CAA0CtC,MAA1C,EAAkDr1B,KAAlD,EAAyD;AAAA,EACrD,IAAI4kB,MAAA,GAASyQ,MAAA,CAAOuB,oBAApB,CADqD;AAAA,EAErD,IAAIpyB,UAAA,GAAaogB,MAAA,CAAO0P,yBAAxB,CAFqD;AAAA,EAGrD,IAAI+D,SAAA,GAAYC,2CAAA,CAA4C9zB,UAA5C,EAAwDxE,KAAxD,CAAhB,CAHqD;AAAA,EAIrD,IAAI4kB,MAAA,KAAWyQ,MAAA,CAAOuB,oBAAtB,EAA4C;AAAA,GACxC,OAAOrU,mBAAA,CAAoB8U,0BAAA,CAA2B,UAA3B,CAApB,CAAP,CADwC;AAAA,GAJS;AAAA,EAOrD,IAAIlrC,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CAPqD;AAAA,EAQrD,IAAI54B,KAAA,KAAU,SAAd,EAAyB;AAAA,GACrB,OAAOo2B,mBAAA,CAAoBqC,MAAA,CAAOO,YAA3B,CAAP,CADqB;AAAA,GAR4B;AAAA,EAWrD,IAAIsO,mCAAA,CAAoC7O,MAApC,KAA+Cz4B,KAAA,KAAU,QAA7D,EAAuE;AAAA,GACnE,OAAOo2B,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,0DAAd,CAApB,CAAP,CADmE;AAAA,GAXlB;AAAA,EAcrD,IAAI5b,KAAA,KAAU,UAAd,EAA0B;AAAA,GACtB,OAAOo2B,mBAAA,CAAoBqC,MAAA,CAAOO,YAA3B,CAAP,CADsB;AAAA,GAd2B;AAAA,EAiBrD,IAAIpN,OAAA,GAAUyd,6BAAA,CAA8B5Q,MAA9B,CAAd,CAjBqD;AAAA,EAkBrD2T,oCAAA,CAAqC/zB,UAArC,EAAiDxE,KAAjD,EAAwDq4B,SAAxD,EAlBqD;AAAA,EAmBrD,OAAOtgB,OAAP,CAnBqD;AAAA,EAjoEjC;AAAA,CAspExB,IAAIygB,aAAA,GAAgB,EAApB,CAtpEwB;AAAA,CA4pExB,IAAIrE,+BAAA,GAAiD,YAAY;AAAA,EAC7D,SAASA,+BAAT,GAA2C;AAAA,GACvC,MAAM,IAAIpsB,SAAJ,CAAc,qBAAd,CAAN,CADuC;AAAA,GADkB;AAAA,EAW7DosB,+BAAA,CAAgCruB,SAAhC,CAA0CkB,KAA1C,GAAkD,UAAU0X,CAAV,EAAa;AAAA,GAC3D,IAAIA,CAAA,KAAM,KAAK,CAAf,EAAkB;AAAA,IAAEA,CAAA,GAAIzY,SAAJ,CAAF;AAAA,IADyC;AAAA,GAE3D,IAAI,CAACwyB,iCAAA,CAAkC,IAAlC,CAAL,EAA8C;AAAA,IAC1C,MAAM,IAAI1wB,SAAJ,CAAc,uGAAd,CAAN,CAD0C;AAAA,IAFa;AAAA,GAK3D,IAAI5b,KAAA,GAAQ,KAAKusC,yBAAL,CAA+B3T,MAA3C,CAL2D;AAAA,GAM3D,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,IAGtB,OAHsB;AAAA,IANiC;AAAA,GAW3DwsC,oCAAA,CAAqC,IAArC,EAA2Cja,CAA3C,EAX2D;AAAA,GAA/D,CAX6D;AAAA,EAyB7DyV,+BAAA,CAAgCruB,SAAhC,CAA0CggB,UAA1C,IAAwD,UAAUtiC,MAAV,EAAkB;AAAA,GACtE,IAAIkI,MAAA,GAAS,KAAKktC,eAAL,CAAqBp1C,MAArB,CAAb,CADsE;AAAA,GAEtEq1C,8CAAA,CAA+C,IAA/C,EAFsE;AAAA,GAGtE,OAAOntC,MAAP,CAHsE;AAAA,GAA1E,CAzB6D;AAAA,EA+B7DyoC,+BAAA,CAAgCruB,SAAhC,CAA0CigB,UAA1C,IAAwD,YAAY;AAAA,GAChE+E,UAAA,CAAW,IAAX,EADgE;AAAA,GAApE,CA/B6D;AAAA,EAkC7D,OAAOqJ,+BAAP,CAlC6D;AAAA,EAAZ,EAArD,CA5pEwB;AAAA,CAgsExB9sC,MAAA,CAAO6nB,gBAAP,CAAwBilB,+BAAA,CAAgCruB,SAAxD,EAAmE,EAC/DkB,KAAA,EAAO,EAAEtd,UAAA,EAAY,IAAd,EADwD,EAAnE,EAhsEwB;AAAA,CAmsExB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsB+sB,+BAAA,CAAgCruB,SAAtD,EAAiE4b,cAAA,CAAeiH,WAAhF,EAA6F;AAAA,GACzFl/B,KAAA,EAAO,iCADkF;AAAA,GAEzFE,YAAA,EAAc,IAF2E;AAAA,GAA7F,EADgD;AAAA,EAnsE5B;AAAA,CA0sExB,SAAS8uC,iCAAT,CAA2Cve,CAA3C,EAA8C;AAAA,EAC1C,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADoB;AAAA,EAI1C,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,2BAAxC,CAAL,EAA2E;AAAA,GACvE,OAAO,KAAP,CADuE;AAAA,GAJjC;AAAA,EAO1C,OAAO,IAAP,CAP0C;AAAA,EA1sEtB;AAAA,CAmtExB,SAASka,oCAAT,CAA8CxP,MAA9C,EAAsDpgB,UAAtD,EAAkEysB,cAAlE,EAAkF+C,cAAlF,EAAkGC,cAAlG,EAAkHC,cAAlH,EAAkI9C,aAAlI,EAAiJgC,aAAjJ,EAAgK;AAAA,EAC5J5uB,UAAA,CAAWk0B,yBAAX,GAAuC9T,MAAvC,CAD4J;AAAA,EAE5JA,MAAA,CAAO0P,yBAAP,GAAmC9vB,UAAnC,CAF4J;AAAA,EAI5JA,UAAA,CAAWimB,MAAX,GAAoBxkB,SAApB,CAJ4J;AAAA,EAK5JzB,UAAA,CAAWkmB,eAAX,GAA6BzkB,SAA7B,CAL4J;AAAA,EAM5J6kB,UAAA,CAAWtmB,UAAX,EAN4J;AAAA,EAO5JA,UAAA,CAAWksB,QAAX,GAAsB,KAAtB,CAP4J;AAAA,EAQ5JlsB,UAAA,CAAWs0B,sBAAX,GAAoC1F,aAApC,CAR4J;AAAA,EAS5J5uB,UAAA,CAAWusB,YAAX,GAA0BK,aAA1B,CAT4J;AAAA,EAU5J5sB,UAAA,CAAWu0B,eAAX,GAA6B/E,cAA7B,CAV4J;AAAA,EAW5JxvB,UAAA,CAAWw0B,eAAX,GAA6B/E,cAA7B,CAX4J;AAAA,EAY5JzvB,UAAA,CAAWo0B,eAAX,GAA6B1E,cAA7B,CAZ4J;AAAA,EAa5J,IAAIwC,YAAA,GAAeuC,8CAAA,CAA+Cz0B,UAA/C,CAAnB,CAb4J;AAAA,EAc5JiyB,gCAAA,CAAiC7R,MAAjC,EAAyC8R,YAAzC,EAd4J;AAAA,EAe5J,IAAIrF,WAAA,GAAcJ,cAAA,EAAlB,CAf4J;AAAA,EAgB5J,IAAIiI,YAAA,GAAe5W,mBAAA,CAAoB+O,WAApB,CAAnB,CAhB4J;AAAA,EAiB5J5O,WAAA,CAAYyW,YAAZ,EAA0B,YAAY;AAAA,GAClC10B,UAAA,CAAWksB,QAAX,GAAsB,IAAtB,CADkC;AAAA,GAElCyI,mDAAA,CAAoD30B,UAApD,EAFkC;AAAA,GAAtC,EAGG,UAAU5C,CAAV,EAAa;AAAA,GACZ4C,UAAA,CAAWksB,QAAX,GAAsB,IAAtB,CADY;AAAA,GAEZgF,+BAAA,CAAgC9Q,MAAhC,EAAwChjB,CAAxC,EAFY;AAAA,GAHhB,EAjB4J;AAAA,EAntExI;AAAA,CA4uExB,SAASyxB,sDAAT,CAAgEzO,MAAhE,EAAwEsO,cAAxE,EAAwF9B,aAAxF,EAAuGgC,aAAvG,EAAsH;AAAA,EAClH,IAAI5uB,UAAA,GAAand,MAAA,CAAO5E,MAAP,CAAc0xC,+BAAA,CAAgCruB,SAA9C,CAAjB,CADkH;AAAA,EAElH,IAAImrB,cAAA,GAAiB,YAAY;AAAA,GAAE,OAAOhrB,SAAP,CAAF;AAAA,GAAjC,CAFkH;AAAA,EAGlH,IAAI+tB,cAAA,GAAiB,YAAY;AAAA,GAAE,OAAO1R,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAjC,CAHkH;AAAA,EAIlH,IAAIguB,cAAA,GAAiB,YAAY;AAAA,GAAE,OAAO3R,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAjC,CAJkH;AAAA,EAKlH,IAAIiuB,cAAA,GAAiB,YAAY;AAAA,GAAE,OAAO5R,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAjC,CALkH;AAAA,EAMlH,IAAIitB,cAAA,CAAexrC,KAAf,KAAyBue,SAA7B,EAAwC;AAAA,GACpCgrB,cAAA,GAAiB,YAAY;AAAA,IAAE,OAAOiC,cAAA,CAAexrC,KAAf,CAAqB8c,UAArB,CAAP,CAAF;AAAA,IAA7B,CADoC;AAAA,GAN0E;AAAA,EASlH,IAAI0uB,cAAA,CAAenjB,KAAf,KAAyB9J,SAA7B,EAAwC;AAAA,GACpC+tB,cAAA,GAAiB,UAAUh0B,KAAV,EAAiB;AAAA,IAAE,OAAOkzB,cAAA,CAAenjB,KAAf,CAAqB/P,KAArB,EAA4BwE,UAA5B,CAAP,CAAF;AAAA,IAAlC,CADoC;AAAA,GAT0E;AAAA,EAYlH,IAAI0uB,cAAA,CAAeljB,KAAf,KAAyB/J,SAA7B,EAAwC;AAAA,GACpCguB,cAAA,GAAiB,YAAY;AAAA,IAAE,OAAOf,cAAA,CAAeljB,KAAf,EAAP,CAAF;AAAA,IAA7B,CADoC;AAAA,GAZ0E;AAAA,EAelH,IAAIkjB,cAAA,CAAeV,KAAf,KAAyBvsB,SAA7B,EAAwC;AAAA,GACpCiuB,cAAA,GAAiB,UAAU1wC,MAAV,EAAkB;AAAA,IAAE,OAAO0vC,cAAA,CAAeV,KAAf,CAAqBhvC,MAArB,CAAP,CAAF;AAAA,IAAnC,CADoC;AAAA,GAf0E;AAAA,EAkBlH4wC,oCAAA,CAAqCxP,MAArC,EAA6CpgB,UAA7C,EAAyDysB,cAAzD,EAAyE+C,cAAzE,EAAyFC,cAAzF,EAAyGC,cAAzG,EAAyH9C,aAAzH,EAAwIgC,aAAxI,EAlBkH;AAAA,EA5uE9F;AAAA,CAiwExB,SAASyF,8CAAT,CAAwDr0B,UAAxD,EAAoE;AAAA,EAChEA,UAAA,CAAWu0B,eAAX,GAA6B9yB,SAA7B,CADgE;AAAA,EAEhEzB,UAAA,CAAWw0B,eAAX,GAA6B/yB,SAA7B,CAFgE;AAAA,EAGhEzB,UAAA,CAAWo0B,eAAX,GAA6B3yB,SAA7B,CAHgE;AAAA,EAIhEzB,UAAA,CAAWs0B,sBAAX,GAAoC7yB,SAApC,CAJgE;AAAA,EAjwE5C;AAAA,CAuwExB,SAASsvB,oCAAT,CAA8C/wB,UAA9C,EAA0D;AAAA,EACtDmmB,oBAAA,CAAqBnmB,UAArB,EAAiCg0B,aAAjC,EAAgD,CAAhD,EADsD;AAAA,EAEtDW,mDAAA,CAAoD30B,UAApD,EAFsD;AAAA,EAvwElC;AAAA,CA2wExB,SAAS8zB,2CAAT,CAAqD9zB,UAArD,EAAiExE,KAAjE,EAAwE;AAAA,EACpE,IAAI;AAAA,GACA,OAAOwE,UAAA,CAAWs0B,sBAAX,CAAkC94B,KAAlC,CAAP,CADA;AAAA,GAAJ,CAGA,OAAOo5B,UAAP,EAAmB;AAAA,GACfC,4CAAA,CAA6C70B,UAA7C,EAAyD40B,UAAzD,EADe;AAAA,GAEf,OAAO,CAAP,CAFe;AAAA,GAJiD;AAAA,EA3wEhD;AAAA,CAoxExB,SAASjB,6CAAT,CAAuD3zB,UAAvD,EAAmE;AAAA,EAC/D,OAAOA,UAAA,CAAWusB,YAAX,GAA0BvsB,UAAA,CAAWkmB,eAA5C,CAD+D;AAAA,EApxE3C;AAAA,CAuxExB,SAAS6N,oCAAT,CAA8C/zB,UAA9C,EAA0DxE,KAA1D,EAAiEq4B,SAAjE,EAA4E;AAAA,EACxE,IAAI;AAAA,GACA1N,oBAAA,CAAqBnmB,UAArB,EAAiCxE,KAAjC,EAAwCq4B,SAAxC,EADA;AAAA,GAAJ,CAGA,OAAOiB,QAAP,EAAiB;AAAA,GACbD,4CAAA,CAA6C70B,UAA7C,EAAyD80B,QAAzD,EADa;AAAA,GAEb,OAFa;AAAA,GAJuD;AAAA,EAQxE,IAAI1U,MAAA,GAASpgB,UAAA,CAAWk0B,yBAAxB,CARwE;AAAA,EASxE,IAAI,CAACjF,mCAAA,CAAoC7O,MAApC,CAAD,IAAgDA,MAAA,CAAOG,MAAP,KAAkB,UAAtE,EAAkF;AAAA,GAC9E,IAAI2R,YAAA,GAAeuC,8CAAA,CAA+Cz0B,UAA/C,CAAnB,CAD8E;AAAA,GAE9EiyB,gCAAA,CAAiC7R,MAAjC,EAAyC8R,YAAzC,EAF8E;AAAA,GATV;AAAA,EAaxEyC,mDAAA,CAAoD30B,UAApD,EAbwE;AAAA,EAvxEpD;AAAA,CAuyExB,SAAS20B,mDAAT,CAA6D30B,UAA7D,EAAyE;AAAA,EACrE,IAAIogB,MAAA,GAASpgB,UAAA,CAAWk0B,yBAAxB,CADqE;AAAA,EAErE,IAAI,CAACl0B,UAAA,CAAWksB,QAAhB,EAA0B;AAAA,GACtB,OADsB;AAAA,GAF2C;AAAA,EAKrE,IAAI9L,MAAA,CAAO4P,qBAAP,KAAiCvuB,SAArC,EAAgD;AAAA,GAC5C,OAD4C;AAAA,GALqB;AAAA,EAQrE,IAAI9Z,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CARqE;AAAA,EASrE,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,GACtBwpC,4BAAA,CAA6B/Q,MAA7B,EADsB;AAAA,GAEtB,OAFsB;AAAA,GAT2C;AAAA,EAarE,IAAIpgB,UAAA,CAAWimB,MAAX,CAAkB9qB,MAAlB,KAA6B,CAAjC,EAAoC;AAAA,GAChC,OADgC;AAAA,GAbiC;AAAA,EAgBrE,IAAIlW,KAAA,GAAQohC,cAAA,CAAermB,UAAf,CAAZ,CAhBqE;AAAA,EAiBrE,IAAI/a,KAAA,KAAU+uC,aAAd,EAA6B;AAAA,GACzBe,2CAAA,CAA4C/0B,UAA5C,EADyB;AAAA,GAA7B,MAGK;AAAA,GACDg1B,2CAAA,CAA4Ch1B,UAA5C,EAAwD/a,KAAxD,EADC;AAAA,GApBgE;AAAA,EAvyEjD;AAAA,CA+zExB,SAAS4vC,4CAAT,CAAsD70B,UAAtD,EAAkEwC,KAAlE,EAAyE;AAAA,EACrE,IAAIxC,UAAA,CAAWk0B,yBAAX,CAAqC3T,MAArC,KAAgD,UAApD,EAAgE;AAAA,GAC5D4T,oCAAA,CAAqCn0B,UAArC,EAAiDwC,KAAjD,EAD4D;AAAA,GADK;AAAA,EA/zEjD;AAAA,CAo0ExB,SAASuyB,2CAAT,CAAqD/0B,UAArD,EAAiE;AAAA,EAC7D,IAAIogB,MAAA,GAASpgB,UAAA,CAAWk0B,yBAAxB,CAD6D;AAAA,EAE7DpC,sCAAA,CAAuC1R,MAAvC,EAF6D;AAAA,EAG7D0F,YAAA,CAAa9lB,UAAb,EAH6D;AAAA,EAI7D,IAAIi1B,gBAAA,GAAmBj1B,UAAA,CAAWw0B,eAAX,EAAvB,CAJ6D;AAAA,EAK7DH,8CAAA,CAA+Cr0B,UAA/C,EAL6D;AAAA,EAM7Die,WAAA,CAAYgX,gBAAZ,EAA8B,YAAY;AAAA,GACtCtD,iCAAA,CAAkCvR,MAAlC,EADsC;AAAA,GAA1C,EAEG,UAAUphC,MAAV,EAAkB;AAAA,GACjB6yC,0CAAA,CAA2CzR,MAA3C,EAAmDphC,MAAnD,EADiB;AAAA,GAFrB,EAN6D;AAAA,EAp0EzC;AAAA,CAg1ExB,SAASg2C,2CAAT,CAAqDh1B,UAArD,EAAiExE,KAAjE,EAAwE;AAAA,EACpE,IAAI4kB,MAAA,GAASpgB,UAAA,CAAWk0B,yBAAxB,CADoE;AAAA,EAEpEnC,2CAAA,CAA4C3R,MAA5C,EAFoE;AAAA,EAGpE,IAAI8U,gBAAA,GAAmBl1B,UAAA,CAAWu0B,eAAX,CAA2B/4B,KAA3B,CAAvB,CAHoE;AAAA,EAIpEyiB,WAAA,CAAYiX,gBAAZ,EAA8B,YAAY;AAAA,GACtCzD,iCAAA,CAAkCrR,MAAlC,EADsC;AAAA,GAEtC,IAAIz4B,KAAA,GAAQy4B,MAAA,CAAOG,MAAnB,CAFsC;AAAA,GAGtCuF,YAAA,CAAa9lB,UAAb,EAHsC;AAAA,GAItC,IAAI,CAACivB,mCAAA,CAAoC7O,MAApC,CAAD,IAAgDz4B,KAAA,KAAU,UAA9D,EAA0E;AAAA,IACtE,IAAIuqC,YAAA,GAAeuC,8CAAA,CAA+Cz0B,UAA/C,CAAnB,CADsE;AAAA,IAEtEiyB,gCAAA,CAAiC7R,MAAjC,EAAyC8R,YAAzC,EAFsE;AAAA,IAJpC;AAAA,GAQtCyC,mDAAA,CAAoD30B,UAApD,EARsC;AAAA,GAA1C,EASG,UAAUhhB,MAAV,EAAkB;AAAA,GACjB,IAAIohC,MAAA,CAAOG,MAAP,KAAkB,UAAtB,EAAkC;AAAA,IAC9B8T,8CAAA,CAA+Cr0B,UAA/C,EAD8B;AAAA,IADjB;AAAA,GAIjB0xB,0CAAA,CAA2CtR,MAA3C,EAAmDphC,MAAnD,EAJiB;AAAA,GATrB,EAJoE;AAAA,EAh1EhD;AAAA,CAo2ExB,SAASy1C,8CAAT,CAAwDz0B,UAAxD,EAAoE;AAAA,EAChE,IAAIypB,WAAA,GAAckK,6CAAA,CAA8C3zB,UAA9C,CAAlB,CADgE;AAAA,EAEhE,OAAOypB,WAAA,IAAe,CAAtB,CAFgE;AAAA,EAp2E5C;AAAA,CAy2ExB,SAAS0K,oCAAT,CAA8Cn0B,UAA9C,EAA0DwC,KAA1D,EAAiE;AAAA,EAC7D,IAAI4d,MAAA,GAASpgB,UAAA,CAAWk0B,yBAAxB,CAD6D;AAAA,EAE7DG,8CAAA,CAA+Cr0B,UAA/C,EAF6D;AAAA,EAG7D2wB,2BAAA,CAA4BvQ,MAA5B,EAAoC5d,KAApC,EAH6D;AAAA,EAz2EzC;AAAA,CA+2ExB,SAASssB,yBAAT,CAAmC/rC,IAAnC,EAAyC;AAAA,EACrC,OAAO,IAAIwgB,SAAJ,CAAc,8BAA8BxgB,IAA9B,GAAqC,uCAAnD,CAAP,CADqC;AAAA,EA/2EjB;AAAA,CAm3ExB,SAAS6vC,gCAAT,CAA0C7vC,IAA1C,EAAgD;AAAA,EAC5C,OAAO,IAAIwgB,SAAJ,CAAc,2CAA2CxgB,IAA3C,GAAkD,oDAAhE,CAAP,CAD4C;AAAA,EAn3ExB;AAAA,CAs3ExB,SAAS8vC,0BAAT,CAAoC9vC,IAApC,EAA0C;AAAA,EACtC,OAAO,IAAIwgB,SAAJ,CAAc,YAAYxgB,IAAZ,GAAmB,mCAAjC,CAAP,CADsC;AAAA,EAt3ElB;AAAA,CAy3ExB,SAASwvC,oCAAT,CAA8C1B,MAA9C,EAAsD;AAAA,EAClDA,MAAA,CAAO3P,cAAP,GAAwBrD,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,GAC1DkxC,MAAA,CAAO1P,sBAAP,GAAgCzhC,OAAhC,CAD0D;AAAA,GAE1DmxC,MAAA,CAAOzP,qBAAP,GAA+BzhC,MAA/B,CAF0D;AAAA,GAG1DkxC,MAAA,CAAOyC,mBAAP,GAA6B,SAA7B,CAH0D;AAAA,GAAtC,CAAxB,CADkD;AAAA,EAz3E9B;AAAA,CAg4ExB,SAASZ,8CAAT,CAAwD7B,MAAxD,EAAgE7xC,MAAhE,EAAwE;AAAA,EACpEuzC,oCAAA,CAAqC1B,MAArC,EADoE;AAAA,EAEpEmB,gCAAA,CAAiCnB,MAAjC,EAAyC7xC,MAAzC,EAFoE;AAAA,EAh4EhD;AAAA,CAo4ExB,SAASyzC,8CAAT,CAAwD5B,MAAxD,EAAgE;AAAA,EAC5D0B,oCAAA,CAAqC1B,MAArC,EAD4D;AAAA,EAE5De,iCAAA,CAAkCf,MAAlC,EAF4D;AAAA,EAp4ExC;AAAA,CAw4ExB,SAASmB,gCAAT,CAA0CnB,MAA1C,EAAkD7xC,MAAlD,EAA0D;AAAA,EACtD,IAAI6xC,MAAA,CAAOzP,qBAAP,KAAiC3f,SAArC,EAAgD;AAAA,GAC5C,OAD4C;AAAA,GADM;AAAA,EAItD8c,yBAAA,CAA0BsS,MAAA,CAAO3P,cAAjC,EAJsD;AAAA,EAKtD2P,MAAA,CAAOzP,qBAAP,CAA6BpiC,MAA7B,EALsD;AAAA,EAMtD6xC,MAAA,CAAO1P,sBAAP,GAAgC1f,SAAhC,CANsD;AAAA,EAOtDovB,MAAA,CAAOzP,qBAAP,GAA+B3f,SAA/B,CAPsD;AAAA,EAQtDovB,MAAA,CAAOyC,mBAAP,GAA6B,UAA7B,CARsD;AAAA,EAx4ElC;AAAA,CAk5ExB,SAASC,yCAAT,CAAmD1C,MAAnD,EAA2D7xC,MAA3D,EAAmE;AAAA,EAC/D0zC,8CAAA,CAA+C7B,MAA/C,EAAuD7xC,MAAvD,EAD+D;AAAA,EAl5E3C;AAAA,CAq5ExB,SAAS4yC,iCAAT,CAA2Cf,MAA3C,EAAmD;AAAA,EAC/C,IAAIA,MAAA,CAAO1P,sBAAP,KAAkC1f,SAAtC,EAAiD;AAAA,GAC7C,OAD6C;AAAA,GADF;AAAA,EAI/CovB,MAAA,CAAO1P,sBAAP,CAA8B1f,SAA9B,EAJ+C;AAAA,EAK/CovB,MAAA,CAAO1P,sBAAP,GAAgC1f,SAAhC,CAL+C;AAAA,EAM/CovB,MAAA,CAAOzP,qBAAP,GAA+B3f,SAA/B,CAN+C;AAAA,EAO/CovB,MAAA,CAAOyC,mBAAP,GAA6B,UAA7B,CAP+C;AAAA,EAr5E3B;AAAA,CA85ExB,SAASjB,mCAAT,CAA6CxB,MAA7C,EAAqD;AAAA,EACjDA,MAAA,CAAOkC,aAAP,GAAuBlV,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,GACzDkxC,MAAA,CAAOsE,qBAAP,GAA+Bz1C,OAA/B,CADyD;AAAA,GAEzDmxC,MAAA,CAAOuE,oBAAP,GAA8Bz1C,MAA9B,CAFyD;AAAA,GAAtC,CAAvB,CADiD;AAAA,EAKjDkxC,MAAA,CAAO2C,kBAAP,GAA4B,SAA5B,CALiD;AAAA,EA95E7B;AAAA,CAq6ExB,SAAShB,6CAAT,CAAuD3B,MAAvD,EAA+D7xC,MAA/D,EAAuE;AAAA,EACnEqzC,mCAAA,CAAoCxB,MAApC,EADmE;AAAA,EAEnE4C,+BAAA,CAAgC5C,MAAhC,EAAwC7xC,MAAxC,EAFmE;AAAA,EAr6E/C;AAAA,CAy6ExB,SAASszC,6CAAT,CAAuDzB,MAAvD,EAA+D;AAAA,EAC3DwB,mCAAA,CAAoCxB,MAApC,EAD2D;AAAA,EAE3DC,gCAAA,CAAiCD,MAAjC,EAF2D;AAAA,EAz6EvC;AAAA,CA66ExB,SAAS4C,+BAAT,CAAyC5C,MAAzC,EAAiD7xC,MAAjD,EAAyD;AAAA,EACrD,IAAI6xC,MAAA,CAAOuE,oBAAP,KAAgC3zB,SAApC,EAA+C;AAAA,GAC3C,OAD2C;AAAA,GADM;AAAA,EAIrD8c,yBAAA,CAA0BsS,MAAA,CAAOkC,aAAjC,EAJqD;AAAA,EAKrDlC,MAAA,CAAOuE,oBAAP,CAA4Bp2C,MAA5B,EALqD;AAAA,EAMrD6xC,MAAA,CAAOsE,qBAAP,GAA+B1zB,SAA/B,CANqD;AAAA,EAOrDovB,MAAA,CAAOuE,oBAAP,GAA8B3zB,SAA9B,CAPqD;AAAA,EAQrDovB,MAAA,CAAO2C,kBAAP,GAA4B,UAA5B,CARqD;AAAA,EA76EjC;AAAA,CAu7ExB,SAASrB,8BAAT,CAAwCtB,MAAxC,EAAgD;AAAA,EAC5CwB,mCAAA,CAAoCxB,MAApC,EAD4C;AAAA,EAv7ExB;AAAA,CA07ExB,SAAS6C,wCAAT,CAAkD7C,MAAlD,EAA0D7xC,MAA1D,EAAkE;AAAA,EAC9DwzC,6CAAA,CAA8C3B,MAA9C,EAAsD7xC,MAAtD,EAD8D;AAAA,EA17E1C;AAAA,CA67ExB,SAAS8xC,gCAAT,CAA0CD,MAA1C,EAAkD;AAAA,EAC9C,IAAIA,MAAA,CAAOsE,qBAAP,KAAiC1zB,SAArC,EAAgD;AAAA,GAC5C,OAD4C;AAAA,GADF;AAAA,EAI9CovB,MAAA,CAAOsE,qBAAP,CAA6B1zB,SAA7B,EAJ8C;AAAA,EAK9CovB,MAAA,CAAOsE,qBAAP,GAA+B1zB,SAA/B,CAL8C;AAAA,EAM9CovB,MAAA,CAAOuE,oBAAP,GAA8B3zB,SAA9B,CAN8C;AAAA,EAO9CovB,MAAA,CAAO2C,kBAAP,GAA4B,WAA5B,CAP8C;AAAA,EA77E1B;AAAA,CAu8ExB,SAAS6B,aAAT,CAAuBpwC,KAAvB,EAA8B;AAAA,EAC1B,IAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAA,KAAU,IAA3C,EAAiD;AAAA,GAC7C,OAAO,KAAP,CAD6C;AAAA,GADvB;AAAA,EAI1B,IAAI;AAAA,GACA,OAAO,OAAOA,KAAA,CAAMqwC,OAAb,KAAyB,SAAhC,CADA;AAAA,GAAJ,CAGA,OAAOhR,EAAP,EAAW;AAAA,GAEP,OAAO,KAAP,CAFO;AAAA,GAPe;AAAA,EAv8EN;AAAA,CAq9ExB,IAAIiR,kBAAA,GAAqB,OAAOC,YAAP,KAAwB,WAAxB,GAAsCA,YAAtC,GAAqD/zB,SAA9E,CAr9EwB;AAAA,CAw9ExB,SAASg0B,yBAAT,CAAmC5uC,IAAnC,EAAyC;AAAA,EACrC,IAAI,CAAE,QAAOA,IAAP,KAAgB,UAAhB,IAA8B,OAAOA,IAAP,KAAgB,QAA9C,CAAN,EAA+D;AAAA,GAC3D,OAAO,KAAP,CAD2D;AAAA,GAD1B;AAAA,EAIrC,IAAI;AAAA,GACA,IAAIA,IAAJ,GADA;AAAA,GAEA,OAAO,IAAP,CAFA;AAAA,GAAJ,CAIA,OAAOy9B,EAAP,EAAW;AAAA,GACP,OAAO,KAAP,CADO;AAAA,GAR0B;AAAA,EAx9EjB;AAAA,CAo+ExB,SAASoR,0BAAT,GAAsC;AAAA,EAClC,IAAI7uC,IAAA,GAAO,SAAS2uC,YAAT,CAAsBvkB,OAAtB,EAA+BluB,IAA/B,EAAqC;AAAA,GAC5C,KAAKkuB,OAAL,GAAeA,OAAA,IAAW,EAA1B,CAD4C;AAAA,GAE5C,KAAKluB,IAAL,GAAYA,IAAA,IAAQ,OAApB,CAF4C;AAAA,GAG5C,IAAImuB,KAAA,CAAMykB,iBAAV,EAA6B;AAAA,IACzBzkB,KAAA,CAAMykB,iBAAN,CAAwB,IAAxB,EAA8B,KAAK53C,WAAnC,EADyB;AAAA,IAHe;AAAA,GAAhD,CADkC;AAAA,EAQlC8I,IAAA,CAAKya,SAAL,GAAiBze,MAAA,CAAO5E,MAAP,CAAcizB,KAAA,CAAM5P,SAApB,CAAjB,CARkC;AAAA,EASlCze,MAAA,CAAO+f,cAAP,CAAsB/b,IAAA,CAAKya,SAA3B,EAAsC,aAAtC,EAAqD;AAAA,GAAErc,KAAA,EAAO4B,IAAT;AAAA,GAAezB,QAAA,EAAU,IAAzB;AAAA,GAA+BD,YAAA,EAAc,IAA7C;AAAA,GAArD,EATkC;AAAA,EAUlC,OAAO0B,IAAP,CAVkC;AAAA,EAp+Ed;AAAA,CAg/ExB,IAAI+uC,cAAA,GAAiBH,yBAAA,CAA0BF,kBAA1B,IAAgDA,kBAAhD,GAAqEG,0BAAA,EAA1F,CAh/EwB;AAAA,CAk/ExB,SAASG,oBAAT,CAA8Bj1B,MAA9B,EAAsC6lB,IAAtC,EAA4CqP,YAA5C,EAA0DC,YAA1D,EAAwErR,aAAxE,EAAuFsR,MAAvF,EAA+F;AAAA,EAC3F,IAAI7V,MAAA,GAAS2C,kCAAA,CAAmCliB,MAAnC,CAAb,CAD2F;AAAA,EAE3F,IAAIiwB,MAAA,GAASzB,kCAAA,CAAmC3I,IAAnC,CAAb,CAF2F;AAAA,EAG3F7lB,MAAA,CAAOwjB,UAAP,GAAoB,IAApB,CAH2F;AAAA,EAI3F,IAAI6R,YAAA,GAAe,KAAnB,CAJ2F;AAAA,EAM3F,IAAIC,YAAA,GAAepY,mBAAA,CAAoBrc,SAApB,CAAnB,CAN2F;AAAA,EAO3F,OAAOoc,UAAA,CAAW,UAAUn+B,OAAV,EAAmBC,MAAnB,EAA2B;AAAA,GACzC,IAAI+vC,cAAJ,CADyC;AAAA,GAEzC,IAAIsG,MAAA,KAAWv0B,SAAf,EAA0B;AAAA,IACtBiuB,cAAA,GAAiB,YAAY;AAAA,KACzB,IAAIltB,KAAA,GAAQ,IAAIozB,cAAJ,CAAmB,SAAnB,EAA8B,YAA9B,CAAZ,CADyB;AAAA,KAEzB,IAAIO,OAAA,GAAU,EAAd,CAFyB;AAAA,KAGzB,IAAI,CAACJ,YAAL,EAAmB;AAAA,MACfI,OAAA,CAAQjwB,IAAR,CAAa,YAAY;AAAA,OACrB,IAAIugB,IAAA,CAAKlG,MAAL,KAAgB,UAApB,EAAgC;AAAA,QAC5B,OAAOyO,mBAAA,CAAoBvI,IAApB,EAA0BjkB,KAA1B,CAAP,CAD4B;AAAA,QADX;AAAA,OAIrB,OAAOsb,mBAAA,CAAoBrc,SAApB,CAAP,CAJqB;AAAA,OAAzB,EADe;AAAA,MAHM;AAAA,KAWzB,IAAI,CAACijB,aAAL,EAAoB;AAAA,MAChByR,OAAA,CAAQjwB,IAAR,CAAa,YAAY;AAAA,OACrB,IAAItF,MAAA,CAAO2f,MAAP,KAAkB,UAAtB,EAAkC;AAAA,QAC9B,OAAOM,oBAAA,CAAqBjgB,MAArB,EAA6B4B,KAA7B,CAAP,CAD8B;AAAA,QADb;AAAA,OAIrB,OAAOsb,mBAAA,CAAoBrc,SAApB,CAAP,CAJqB;AAAA,OAAzB,EADgB;AAAA,MAXK;AAAA,KAmBzB20B,kBAAA,CAAmB,YAAY;AAAA,MAAE,OAAOvlB,OAAA,CAAQ8C,GAAR,CAAYwiB,OAAA,CAAQE,GAAR,CAAY,UAAUC,MAAV,EAAkB;AAAA,OAAE,OAAOA,MAAA,EAAP,CAAF;AAAA,OAA9B,CAAZ,CAAP,CAAF;AAAA,MAA/B,EAA6G,IAA7G,EAAmH9zB,KAAnH,EAnByB;AAAA,KAA7B,CADsB;AAAA,IAsBtB,IAAIwzB,MAAA,CAAOV,OAAX,EAAoB;AAAA,KAChB5F,cAAA,GADgB;AAAA,KAEhB,OAFgB;AAAA,KAtBE;AAAA,IA0BtBsG,MAAA,CAAO9d,gBAAP,CAAwB,OAAxB,EAAiCwX,cAAjC,EA1BsB;AAAA,IAFe;AAAA,GAiCzC,SAAS6G,QAAT,GAAoB;AAAA,IAChB,OAAO1Y,UAAA,CAAW,UAAU2Y,WAAV,EAAuBC,UAAvB,EAAmC;AAAA,KACjD,SAASjuC,IAAT,CAAcP,IAAd,EAAoB;AAAA,MAChB,IAAIA,IAAJ,EAAU;AAAA,OACNuuC,WAAA,GADM;AAAA,OAAV,MAGK;AAAA,OAGDxY,kBAAA,CAAmB0Y,QAAA,EAAnB,EAA+BluC,IAA/B,EAAqCiuC,UAArC,EAHC;AAAA,OAJW;AAAA,MAD6B;AAAA,KAWjDjuC,IAAA,CAAK,KAAL,EAXiD;AAAA,KAA9C,CAAP,CADgB;AAAA,IAjCqB;AAAA,GAgDzC,SAASkuC,QAAT,GAAoB;AAAA,IAChB,IAAIT,YAAJ,EAAkB;AAAA,KACd,OAAOnY,mBAAA,CAAoB,IAApB,CAAP,CADc;AAAA,KADF;AAAA,IAIhB,OAAOE,kBAAA,CAAmB6S,MAAA,CAAOkC,aAA1B,EAAyC,YAAY;AAAA,KACxD,OAAOlV,UAAA,CAAW,UAAU8Y,WAAV,EAAuBC,UAAvB,EAAmC;AAAA,MACjD5S,+BAAA,CAAgC7D,MAAhC,EAAwC;AAAA,OACpCkD,WAAA,EAAa,UAAU7nB,KAAV,EAAiB;AAAA,QAC1B06B,YAAA,GAAelY,kBAAA,CAAmBmV,gCAAA,CAAiCtC,MAAjC,EAAyCr1B,KAAzC,CAAnB,EAAoEiG,SAApE,EAA+E2b,IAA/E,CAAf,CAD0B;AAAA,QAE1BuZ,WAAA,CAAY,KAAZ,EAF0B;AAAA,QADM;AAAA,OAKpCvT,WAAA,EAAa,YAAY;AAAA,QAAE,OAAOuT,WAAA,CAAY,IAAZ,CAAP,CAAF;AAAA,QALW;AAAA,OAMpC5S,WAAA,EAAa6S,UANuB;AAAA,OAAxC,EADiD;AAAA,MAA9C,CAAP,CADwD;AAAA,KAArD,CAAP,CAJgB;AAAA,IAhDqB;AAAA,GAkEzCC,kBAAA,CAAmBj2B,MAAnB,EAA2Buf,MAAA,CAAOe,cAAlC,EAAkD,UAAUoQ,WAAV,EAAuB;AAAA,IACrE,IAAI,CAACyE,YAAL,EAAmB;AAAA,KACfK,kBAAA,CAAmB,YAAY;AAAA,MAAE,OAAOpH,mBAAA,CAAoBvI,IAApB,EAA0B6K,WAA1B,CAAP,CAAF;AAAA,MAA/B,EAAmF,IAAnF,EAAyFA,WAAzF,EADe;AAAA,KAAnB,MAGK;AAAA,KACDwF,QAAA,CAAS,IAAT,EAAexF,WAAf,EADC;AAAA,KAJgE;AAAA,IAAzE,EAlEyC;AAAA,GA2EzCuF,kBAAA,CAAmBpQ,IAAnB,EAAyBoK,MAAA,CAAO3P,cAAhC,EAAgD,UAAUoQ,WAAV,EAAuB;AAAA,IACnE,IAAI,CAAC5M,aAAL,EAAoB;AAAA,KAChB0R,kBAAA,CAAmB,YAAY;AAAA,MAAE,OAAOvV,oBAAA,CAAqBjgB,MAArB,EAA6B0wB,WAA7B,CAAP,CAAF;AAAA,MAA/B,EAAsF,IAAtF,EAA4FA,WAA5F,EADgB;AAAA,KAApB,MAGK;AAAA,KACDwF,QAAA,CAAS,IAAT,EAAexF,WAAf,EADC;AAAA,KAJ8D;AAAA,IAAvE,EA3EyC;AAAA,GAoFzCyF,iBAAA,CAAkBn2B,MAAlB,EAA0Buf,MAAA,CAAOe,cAAjC,EAAiD,YAAY;AAAA,IACzD,IAAI,CAAC4U,YAAL,EAAmB;AAAA,KACfM,kBAAA,CAAmB,YAAY;AAAA,MAAE,OAAOhD,oDAAA,CAAqDvC,MAArD,CAAP,CAAF;AAAA,MAA/B,EADe;AAAA,KAAnB,MAGK;AAAA,KACDiG,QAAA,GADC;AAAA,KAJoD;AAAA,IAA7D,EApFyC;AAAA,GA6FzC,IAAI7H,mCAAA,CAAoCxI,IAApC,KAA6CA,IAAA,CAAKlG,MAAL,KAAgB,QAAjE,EAA2E;AAAA,IACvE,IAAIyW,YAAA,GAAe,IAAIzzB,SAAJ,CAAc,6EAAd,CAAnB,CADuE;AAAA,IAEvE,IAAI,CAACmhB,aAAL,EAAoB;AAAA,KAChB0R,kBAAA,CAAmB,YAAY;AAAA,MAAE,OAAOvV,oBAAA,CAAqBjgB,MAArB,EAA6Bo2B,YAA7B,CAAP,CAAF;AAAA,MAA/B,EAAuF,IAAvF,EAA6FA,YAA7F,EADgB;AAAA,KAApB,MAGK;AAAA,KACDF,QAAA,CAAS,IAAT,EAAeE,YAAf,EADC;AAAA,KALkE;AAAA,IA7FlC;AAAA,GAsGzCzY,yBAAA,CAA0BgY,QAAA,EAA1B,EAtGyC;AAAA,GAuGzC,SAASU,qBAAT,GAAiC;AAAA,IAG7B,IAAIC,eAAA,GAAkBhB,YAAtB,CAH6B;AAAA,IAI7B,OAAOlY,kBAAA,CAAmBkY,YAAnB,EAAiC,YAAY;AAAA,KAAE,OAAOgB,eAAA,KAAoBhB,YAApB,GAAmCe,qBAAA,EAAnC,GAA6Dx1B,SAApE,CAAF;AAAA,KAA7C,CAAP,CAJ6B;AAAA,IAvGQ;AAAA,GA6GzC,SAASo1B,kBAAT,CAA4BzW,MAA5B,EAAoC7M,OAApC,EAA6C+iB,MAA7C,EAAqD;AAAA,IACjD,IAAIlW,MAAA,CAAOG,MAAP,KAAkB,SAAtB,EAAiC;AAAA,KAC7B+V,MAAA,CAAOlW,MAAA,CAAOO,YAAd,EAD6B;AAAA,KAAjC,MAGK;AAAA,KACDxC,aAAA,CAAc5K,OAAd,EAAuB+iB,MAAvB,EADC;AAAA,KAJ4C;AAAA,IA7GZ;AAAA,GAqHzC,SAASS,iBAAT,CAA2B3W,MAA3B,EAAmC7M,OAAnC,EAA4C+iB,MAA5C,EAAoD;AAAA,IAChD,IAAIlW,MAAA,CAAOG,MAAP,KAAkB,QAAtB,EAAgC;AAAA,KAC5B+V,MAAA,GAD4B;AAAA,KAAhC,MAGK;AAAA,KACDpY,eAAA,CAAgB3K,OAAhB,EAAyB+iB,MAAzB,EADC;AAAA,KAJ2C;AAAA,IArHX;AAAA,GA6HzC,SAASF,kBAAT,CAA4BE,MAA5B,EAAoCa,eAApC,EAAqDC,aAArD,EAAoE;AAAA,IAChE,IAAInB,YAAJ,EAAkB;AAAA,KACd,OADc;AAAA,KAD8C;AAAA,IAIhEA,YAAA,GAAe,IAAf,CAJgE;AAAA,IAKhE,IAAIxP,IAAA,CAAKlG,MAAL,KAAgB,UAAhB,IAA8B,CAAC0O,mCAAA,CAAoCxI,IAApC,CAAnC,EAA8E;AAAA,KAC1EvI,eAAA,CAAgB+Y,qBAAA,EAAhB,EAAyCI,SAAzC,EAD0E;AAAA,KAA9E,MAGK;AAAA,KACDA,SAAA,GADC;AAAA,KAR2D;AAAA,IAWhE,SAASA,SAAT,GAAqB;AAAA,KACjBpZ,WAAA,CAAYqY,MAAA,EAAZ,EAAsB,YAAY;AAAA,MAAE,OAAOgB,QAAA,CAASH,eAAT,EAA0BC,aAA1B,CAAP,CAAF;AAAA,MAAlC,EAAwF,UAAUG,QAAV,EAAoB;AAAA,MAAE,OAAOD,QAAA,CAAS,IAAT,EAAeC,QAAf,CAAP,CAAF;AAAA,MAA5G,EADiB;AAAA,KAX2C;AAAA,IA7H3B;AAAA,GA4IzC,SAAST,QAAT,CAAkBU,OAAlB,EAA2Bh1B,KAA3B,EAAkC;AAAA,IAC9B,IAAIyzB,YAAJ,EAAkB;AAAA,KACd,OADc;AAAA,KADY;AAAA,IAI9BA,YAAA,GAAe,IAAf,CAJ8B;AAAA,IAK9B,IAAIxP,IAAA,CAAKlG,MAAL,KAAgB,UAAhB,IAA8B,CAAC0O,mCAAA,CAAoCxI,IAApC,CAAnC,EAA8E;AAAA,KAC1EvI,eAAA,CAAgB+Y,qBAAA,EAAhB,EAAyC,YAAY;AAAA,MAAE,OAAOK,QAAA,CAASE,OAAT,EAAkBh1B,KAAlB,CAAP,CAAF;AAAA,MAArD,EAD0E;AAAA,KAA9E,MAGK;AAAA,KACD80B,QAAA,CAASE,OAAT,EAAkBh1B,KAAlB,EADC;AAAA,KARyB;AAAA,IA5IO;AAAA,GAwJzC,SAAS80B,QAAT,CAAkBE,OAAlB,EAA2Bh1B,KAA3B,EAAkC;AAAA,IAC9B0wB,kCAAA,CAAmCrC,MAAnC,EAD8B;AAAA,IAE9B/P,kCAAA,CAAmCX,MAAnC,EAF8B;AAAA,IAG9B,IAAI6V,MAAA,KAAWv0B,SAAf,EAA0B;AAAA,KACtBu0B,MAAA,CAAOyB,mBAAP,CAA2B,OAA3B,EAAoC/H,cAApC,EADsB;AAAA,KAHI;AAAA,IAM9B,IAAI8H,OAAJ,EAAa;AAAA,KACT73C,MAAA,CAAO6iB,KAAP,EADS;AAAA,KAAb,MAGK;AAAA,KACD9iB,OAAA,CAAQ+hB,SAAR,EADC;AAAA,KATyB;AAAA,IAxJO;AAAA,GAAtC,CAAP,CAP2F;AAAA,EAl/EvE;AAAA,CAsqFxB,IAAIi2B,+BAAA,GAAiD,YAAY;AAAA,EAC7D,SAASA,+BAAT,GAA2C;AAAA,GACvC,MAAM,IAAIn0B,SAAJ,CAAc,qBAAd,CAAN,CADuC;AAAA,GADkB;AAAA,EAI7D1gB,MAAA,CAAO+f,cAAP,CAAsB80B,+BAAA,CAAgCp2B,SAAtD,EAAiE,aAAjE,EAAgF;AAAA,GAK5ErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC04B,iCAAA,CAAkC,IAAlC,CAAL,EAA8C;AAAA,KAC1C,MAAMC,oCAAA,CAAqC,aAArC,CAAN,CAD0C;AAAA,KADjC;AAAA,IAIb,OAAOC,6CAAA,CAA8C,IAA9C,CAAP,CAJa;AAAA,IAL2D;AAAA,GAW5E3yC,UAAA,EAAY,KAXgE;AAAA,GAY5EC,YAAA,EAAc,IAZ8D;AAAA,GAAhF,EAJ6D;AAAA,EAsB7DuyC,+BAAA,CAAgCp2B,SAAhC,CAA0CkK,KAA1C,GAAkD,YAAY;AAAA,GAC1D,IAAI,CAACmsB,iCAAA,CAAkC,IAAlC,CAAL,EAA8C;AAAA,IAC1C,MAAMC,oCAAA,CAAqC,OAArC,CAAN,CAD0C;AAAA,IADY;AAAA,GAI1D,IAAI,CAACE,gDAAA,CAAiD,IAAjD,CAAL,EAA6D;AAAA,IACzD,MAAM,IAAIv0B,SAAJ,CAAc,iDAAd,CAAN,CADyD;AAAA,IAJH;AAAA,GAO1Dw0B,oCAAA,CAAqC,IAArC,EAP0D;AAAA,GAA9D,CAtB6D;AAAA,EA+B7DL,+BAAA,CAAgCp2B,SAAhC,CAA0CqnB,OAA1C,GAAoD,UAAUntB,KAAV,EAAiB;AAAA,GACjE,IAAIA,KAAA,KAAU,KAAK,CAAnB,EAAsB;AAAA,IAAEA,KAAA,GAAQiG,SAAR,CAAF;AAAA,IAD2C;AAAA,GAEjE,IAAI,CAACk2B,iCAAA,CAAkC,IAAlC,CAAL,EAA8C;AAAA,IAC1C,MAAMC,oCAAA,CAAqC,SAArC,CAAN,CAD0C;AAAA,IAFmB;AAAA,GAKjE,IAAI,CAACE,gDAAA,CAAiD,IAAjD,CAAL,EAA6D;AAAA,IACzD,MAAM,IAAIv0B,SAAJ,CAAc,mDAAd,CAAN,CADyD;AAAA,IALI;AAAA,GAQjE,OAAOy0B,sCAAA,CAAuC,IAAvC,EAA6Cx8B,KAA7C,CAAP,CARiE;AAAA,GAArE,CA/B6D;AAAA,EA4C7Dk8B,+BAAA,CAAgCp2B,SAAhC,CAA0CkB,KAA1C,GAAkD,UAAU0X,CAAV,EAAa;AAAA,GAC3D,IAAIA,CAAA,KAAM,KAAK,CAAf,EAAkB;AAAA,IAAEA,CAAA,GAAIzY,SAAJ,CAAF;AAAA,IADyC;AAAA,GAE3D,IAAI,CAACk2B,iCAAA,CAAkC,IAAlC,CAAL,EAA8C;AAAA,IAC1C,MAAMC,oCAAA,CAAqC,OAArC,CAAN,CAD0C;AAAA,IAFa;AAAA,GAK3DK,oCAAA,CAAqC,IAArC,EAA2C/d,CAA3C,EAL2D;AAAA,GAA/D,CA5C6D;AAAA,EAoD7Dwd,+BAAA,CAAgCp2B,SAAhC,CAA0CkgB,WAA1C,IAAyD,UAAUxiC,MAAV,EAAkB;AAAA,GACvEsnC,UAAA,CAAW,IAAX,EADuE;AAAA,GAEvE,IAAIp/B,MAAA,GAAS,KAAK4hC,gBAAL,CAAsB9pC,MAAtB,CAAb,CAFuE;AAAA,GAGvEk5C,8CAAA,CAA+C,IAA/C,EAHuE;AAAA,GAIvE,OAAOhxC,MAAP,CAJuE;AAAA,GAA3E,CApD6D;AAAA,EA2D7DwwC,+BAAA,CAAgCp2B,SAAhC,CAA0CmgB,SAA1C,IAAuD,UAAUwB,WAAV,EAAuB;AAAA,GAC1E,IAAI7C,MAAA,GAAS,KAAK+X,yBAAlB,CAD0E;AAAA,GAE1E,IAAI,KAAKlS,MAAL,CAAY9qB,MAAZ,GAAqB,CAAzB,EAA4B;AAAA,IACxB,IAAIK,KAAA,GAAQsqB,YAAA,CAAa,IAAb,CAAZ,CADwB;AAAA,IAExB,IAAI,KAAK0C,eAAL,IAAwB,KAAKvC,MAAL,CAAY9qB,MAAZ,KAAuB,CAAnD,EAAsD;AAAA,KAClD+8B,8CAAA,CAA+C,IAA/C,EADkD;AAAA,KAElDhN,mBAAA,CAAoB9K,MAApB,EAFkD;AAAA,KAAtD,MAIK;AAAA,KACDgY,+CAAA,CAAgD,IAAhD,EADC;AAAA,KANmB;AAAA,IASxBnV,WAAA,CAAYI,WAAZ,CAAwB7nB,KAAxB,EATwB;AAAA,IAA5B,MAWK;AAAA,IACDwnB,4BAAA,CAA6B5C,MAA7B,EAAqC6C,WAArC,EADC;AAAA,IAEDmV,+CAAA,CAAgD,IAAhD,EAFC;AAAA,IAbqE;AAAA,GAA9E,CA3D6D;AAAA,EA6E7D,OAAOV,+BAAP,CA7E6D;AAAA,EAAZ,EAArD,CAtqFwB;AAAA,CAqvFxB70C,MAAA,CAAO6nB,gBAAP,CAAwBgtB,+BAAA,CAAgCp2B,SAAxD,EAAmE;AAAA,EAC/DkK,KAAA,EAAO,EAAEtmB,UAAA,EAAY,IAAd,EADwD;AAAA,EAE/DyjC,OAAA,EAAS,EAAEzjC,UAAA,EAAY,IAAd,EAFsD;AAAA,EAG/Dsd,KAAA,EAAO,EAAEtd,UAAA,EAAY,IAAd,EAHwD;AAAA,EAI/DukC,WAAA,EAAa,EAAEvkC,UAAA,EAAY,IAAd,EAJkD;AAAA,EAAnE,EArvFwB;AAAA,CA2vFxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsB80B,+BAAA,CAAgCp2B,SAAtD,EAAiE4b,cAAA,CAAeiH,WAAhF,EAA6F;AAAA,GACzFl/B,KAAA,EAAO,iCADkF;AAAA,GAEzFE,YAAA,EAAc,IAF2E;AAAA,GAA7F,EADgD;AAAA,EA3vF5B;AAAA,CAkwFxB,SAASwyC,iCAAT,CAA2CjiB,CAA3C,EAA8C;AAAA,EAC1C,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADoB;AAAA,EAI1C,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,2BAAxC,CAAL,EAA2E;AAAA,GACvE,OAAO,KAAP,CADuE;AAAA,GAJjC;AAAA,EAO1C,OAAO,IAAP,CAP0C;AAAA,EAlwFtB;AAAA,CA2wFxB,SAAS0iB,+CAAT,CAAyDp4B,UAAzD,EAAqE;AAAA,EACjE,IAAI0pB,UAAA,GAAa2O,6CAAA,CAA8Cr4B,UAA9C,CAAjB,CADiE;AAAA,EAEjE,IAAI,CAAC0pB,UAAL,EAAiB;AAAA,GACb,OADa;AAAA,GAFgD;AAAA,EAKjE,IAAI1pB,UAAA,CAAW4pB,QAAf,EAAyB;AAAA,GACrB5pB,UAAA,CAAW6pB,UAAX,GAAwB,IAAxB,CADqB;AAAA,GAErB,OAFqB;AAAA,GALwC;AAAA,EASjE7pB,UAAA,CAAW4pB,QAAX,GAAsB,IAAtB,CATiE;AAAA,EAUjE,IAAIE,WAAA,GAAc9pB,UAAA,CAAW+pB,cAAX,EAAlB,CAViE;AAAA,EAWjE9L,WAAA,CAAY6L,WAAZ,EAAyB,YAAY;AAAA,GACjC9pB,UAAA,CAAW4pB,QAAX,GAAsB,KAAtB,CADiC;AAAA,GAEjC,IAAI5pB,UAAA,CAAW6pB,UAAf,EAA2B;AAAA,IACvB7pB,UAAA,CAAW6pB,UAAX,GAAwB,KAAxB,CADuB;AAAA,IAEvBuO,+CAAA,CAAgDp4B,UAAhD,EAFuB;AAAA,IAFM;AAAA,GAArC,EAMG,UAAUka,CAAV,EAAa;AAAA,GACZ+d,oCAAA,CAAqCj4B,UAArC,EAAiDka,CAAjD,EADY;AAAA,GANhB,EAXiE;AAAA,EA3wF7C;AAAA,CAgyFxB,SAASme,6CAAT,CAAuDr4B,UAAvD,EAAmE;AAAA,EAC/D,IAAIogB,MAAA,GAASpgB,UAAA,CAAWm4B,yBAAxB,CAD+D;AAAA,EAE/D,IAAI,CAACL,gDAAA,CAAiD93B,UAAjD,CAAL,EAAmE;AAAA,GAC/D,OAAO,KAAP,CAD+D;AAAA,GAFJ;AAAA,EAK/D,IAAI,CAACA,UAAA,CAAWksB,QAAhB,EAA0B;AAAA,GACtB,OAAO,KAAP,CADsB;AAAA,GALqC;AAAA,EAQ/D,IAAIzI,sBAAA,CAAuBrD,MAAvB,KAAkCkD,gCAAA,CAAiClD,MAAjC,IAA2C,CAAjF,EAAoF;AAAA,GAChF,OAAO,IAAP,CADgF;AAAA,GARrB;AAAA,EAW/D,IAAIqJ,WAAA,GAAcoO,6CAAA,CAA8C73B,UAA9C,CAAlB,CAX+D;AAAA,EAY/D,IAAIypB,WAAA,GAAc,CAAlB,EAAqB;AAAA,GACjB,OAAO,IAAP,CADiB;AAAA,GAZ0C;AAAA,EAe/D,OAAO,KAAP,CAf+D;AAAA,EAhyF3C;AAAA,CAizFxB,SAASyO,8CAAT,CAAwDl4B,UAAxD,EAAoE;AAAA,EAChEA,UAAA,CAAW+pB,cAAX,GAA4BtoB,SAA5B,CADgE;AAAA,EAEhEzB,UAAA,CAAW8oB,gBAAX,GAA8BrnB,SAA9B,CAFgE;AAAA,EAGhEzB,UAAA,CAAWs0B,sBAAX,GAAoC7yB,SAApC,CAHgE;AAAA,EAjzF5C;AAAA,CAuzFxB,SAASs2B,oCAAT,CAA8C/3B,UAA9C,EAA0D;AAAA,EACtD,IAAI,CAAC83B,gDAAA,CAAiD93B,UAAjD,CAAL,EAAmE;AAAA,GAC/D,OAD+D;AAAA,GADb;AAAA,EAItD,IAAIogB,MAAA,GAASpgB,UAAA,CAAWm4B,yBAAxB,CAJsD;AAAA,EAKtDn4B,UAAA,CAAWwoB,eAAX,GAA6B,IAA7B,CALsD;AAAA,EAMtD,IAAIxoB,UAAA,CAAWimB,MAAX,CAAkB9qB,MAAlB,KAA6B,CAAjC,EAAoC;AAAA,GAChC+8B,8CAAA,CAA+Cl4B,UAA/C,EADgC;AAAA,GAEhCkrB,mBAAA,CAAoB9K,MAApB,EAFgC;AAAA,GANkB;AAAA,EAvzFlC;AAAA,CAk0FxB,SAAS4X,sCAAT,CAAgDh4B,UAAhD,EAA4DxE,KAA5D,EAAmE;AAAA,EAC/D,IAAI,CAACs8B,gDAAA,CAAiD93B,UAAjD,CAAL,EAAmE;AAAA,GAC/D,OAD+D;AAAA,GADJ;AAAA,EAI/D,IAAIogB,MAAA,GAASpgB,UAAA,CAAWm4B,yBAAxB,CAJ+D;AAAA,EAK/D,IAAI1U,sBAAA,CAAuBrD,MAAvB,KAAkCkD,gCAAA,CAAiClD,MAAjC,IAA2C,CAAjF,EAAoF;AAAA,GAChF+C,gCAAA,CAAiC/C,MAAjC,EAAyC5kB,KAAzC,EAAgD,KAAhD,EADgF;AAAA,GAApF,MAGK;AAAA,GACD,IAAIq4B,SAAA,GAAY,KAAK,CAArB,CADC;AAAA,GAED,IAAI;AAAA,IACAA,SAAA,GAAY7zB,UAAA,CAAWs0B,sBAAX,CAAkC94B,KAAlC,CAAZ,CADA;AAAA,IAAJ,CAGA,OAAOo5B,UAAP,EAAmB;AAAA,IACfqD,oCAAA,CAAqCj4B,UAArC,EAAiD40B,UAAjD,EADe;AAAA,IAEf,MAAMA,UAAN,CAFe;AAAA,IALlB;AAAA,GASD,IAAI;AAAA,IACAzO,oBAAA,CAAqBnmB,UAArB,EAAiCxE,KAAjC,EAAwCq4B,SAAxC,EADA;AAAA,IAAJ,CAGA,OAAOiB,QAAP,EAAiB;AAAA,IACbmD,oCAAA,CAAqCj4B,UAArC,EAAiD80B,QAAjD,EADa;AAAA,IAEb,MAAMA,QAAN,CAFa;AAAA,IAZhB;AAAA,GAR0D;AAAA,EAyB/DsD,+CAAA,CAAgDp4B,UAAhD,EAzB+D;AAAA,EAl0F3C;AAAA,CA61FxB,SAASi4B,oCAAT,CAA8Cj4B,UAA9C,EAA0Dka,CAA1D,EAA6D;AAAA,EACzD,IAAIkG,MAAA,GAASpgB,UAAA,CAAWm4B,yBAAxB,CADyD;AAAA,EAEzD,IAAI/X,MAAA,CAAOG,MAAP,KAAkB,UAAtB,EAAkC;AAAA,GAC9B,OAD8B;AAAA,GAFuB;AAAA,EAKzD+F,UAAA,CAAWtmB,UAAX,EALyD;AAAA,EAMzDk4B,8CAAA,CAA+Cl4B,UAA/C,EANyD;AAAA,EAOzDssB,mBAAA,CAAoBlM,MAApB,EAA4BlG,CAA5B,EAPyD;AAAA,EA71FrC;AAAA,CAs2FxB,SAAS2d,6CAAT,CAAuD73B,UAAvD,EAAmE;AAAA,EAC/D,IAAIrY,KAAA,GAAQqY,UAAA,CAAWm4B,yBAAX,CAAqC5X,MAAjD,CAD+D;AAAA,EAE/D,IAAI54B,KAAA,KAAU,SAAd,EAAyB;AAAA,GACrB,OAAO,IAAP,CADqB;AAAA,GAFsC;AAAA,EAK/D,IAAIA,KAAA,KAAU,QAAd,EAAwB;AAAA,GACpB,OAAO,CAAP,CADoB;AAAA,GALuC;AAAA,EAQ/D,OAAOqY,UAAA,CAAWusB,YAAX,GAA0BvsB,UAAA,CAAWkmB,eAA5C,CAR+D;AAAA,EAt2F3C;AAAA,CAi3FxB,SAASoS,8CAAT,CAAwDt4B,UAAxD,EAAoE;AAAA,EAChE,IAAIq4B,6CAAA,CAA8Cr4B,UAA9C,CAAJ,EAA+D;AAAA,GAC3D,OAAO,KAAP,CAD2D;AAAA,GADC;AAAA,EAIhE,OAAO,IAAP,CAJgE;AAAA,EAj3F5C;AAAA,CAu3FxB,SAAS83B,gDAAT,CAA0D93B,UAA1D,EAAsE;AAAA,EAClE,IAAIrY,KAAA,GAAQqY,UAAA,CAAWm4B,yBAAX,CAAqC5X,MAAjD,CADkE;AAAA,EAElE,IAAI,CAACvgB,UAAA,CAAWwoB,eAAZ,IAA+B7gC,KAAA,KAAU,UAA7C,EAAyD;AAAA,GACrD,OAAO,IAAP,CADqD;AAAA,GAFS;AAAA,EAKlE,OAAO,KAAP,CALkE;AAAA,EAv3F9C;AAAA,CA83FxB,SAAS4wC,oCAAT,CAA8CnY,MAA9C,EAAsDpgB,UAAtD,EAAkEysB,cAAlE,EAAkFC,aAAlF,EAAiGC,eAAjG,EAAkHC,aAAlH,EAAiIgC,aAAjI,EAAgJ;AAAA,EAC5I5uB,UAAA,CAAWm4B,yBAAX,GAAuC/X,MAAvC,CAD4I;AAAA,EAE5IpgB,UAAA,CAAWimB,MAAX,GAAoBxkB,SAApB,CAF4I;AAAA,EAG5IzB,UAAA,CAAWkmB,eAAX,GAA6BzkB,SAA7B,CAH4I;AAAA,EAI5I6kB,UAAA,CAAWtmB,UAAX,EAJ4I;AAAA,EAK5IA,UAAA,CAAWksB,QAAX,GAAsB,KAAtB,CAL4I;AAAA,EAM5IlsB,UAAA,CAAWwoB,eAAX,GAA6B,KAA7B,CAN4I;AAAA,EAO5IxoB,UAAA,CAAW6pB,UAAX,GAAwB,KAAxB,CAP4I;AAAA,EAQ5I7pB,UAAA,CAAW4pB,QAAX,GAAsB,KAAtB,CAR4I;AAAA,EAS5I5pB,UAAA,CAAWs0B,sBAAX,GAAoC1F,aAApC,CAT4I;AAAA,EAU5I5uB,UAAA,CAAWusB,YAAX,GAA0BK,aAA1B,CAV4I;AAAA,EAW5I5sB,UAAA,CAAW+pB,cAAX,GAA4B2C,aAA5B,CAX4I;AAAA,EAY5I1sB,UAAA,CAAW8oB,gBAAX,GAA8B6D,eAA9B,CAZ4I;AAAA,EAa5IvM,MAAA,CAAOiE,yBAAP,GAAmCrkB,UAAnC,CAb4I;AAAA,EAc5I,IAAI6sB,WAAA,GAAcJ,cAAA,EAAlB,CAd4I;AAAA,EAe5IxO,WAAA,CAAYH,mBAAA,CAAoB+O,WAApB,CAAZ,EAA8C,YAAY;AAAA,GACtD7sB,UAAA,CAAWksB,QAAX,GAAsB,IAAtB,CADsD;AAAA,GAEtDkM,+CAAA,CAAgDp4B,UAAhD,EAFsD;AAAA,GAA1D,EAGG,UAAU5C,CAAV,EAAa;AAAA,GACZ66B,oCAAA,CAAqCj4B,UAArC,EAAiD5C,CAAjD,EADY;AAAA,GAHhB,EAf4I;AAAA,EA93FxH;AAAA,CAo5FxB,SAASo7B,wDAAT,CAAkEpY,MAAlE,EAA0EqY,gBAA1E,EAA4F7L,aAA5F,EAA2GgC,aAA3G,EAA0H;AAAA,EACtH,IAAI5uB,UAAA,GAAand,MAAA,CAAO5E,MAAP,CAAcy5C,+BAAA,CAAgCp2B,SAA9C,CAAjB,CADsH;AAAA,EAEtH,IAAImrB,cAAA,GAAiB,YAAY;AAAA,GAAE,OAAOhrB,SAAP,CAAF;AAAA,GAAjC,CAFsH;AAAA,EAGtH,IAAIirB,aAAA,GAAgB,YAAY;AAAA,GAAE,OAAO5O,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAhC,CAHsH;AAAA,EAItH,IAAIkrB,eAAA,GAAkB,YAAY;AAAA,GAAE,OAAO7O,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAlC,CAJsH;AAAA,EAKtH,IAAIg3B,gBAAA,CAAiBv1C,KAAjB,KAA2Bue,SAA/B,EAA0C;AAAA,GACtCgrB,cAAA,GAAiB,YAAY;AAAA,IAAE,OAAOgM,gBAAA,CAAiBv1C,KAAjB,CAAuB8c,UAAvB,CAAP,CAAF;AAAA,IAA7B,CADsC;AAAA,GAL4E;AAAA,EAQtH,IAAIy4B,gBAAA,CAAiBzL,IAAjB,KAA0BvrB,SAA9B,EAAyC;AAAA,GACrCirB,aAAA,GAAgB,YAAY;AAAA,IAAE,OAAO+L,gBAAA,CAAiBzL,IAAjB,CAAsBhtB,UAAtB,CAAP,CAAF;AAAA,IAA5B,CADqC;AAAA,GAR6E;AAAA,EAWtH,IAAIy4B,gBAAA,CAAiB9U,MAAjB,KAA4BliB,SAAhC,EAA2C;AAAA,GACvCkrB,eAAA,GAAkB,UAAU3tC,MAAV,EAAkB;AAAA,IAAE,OAAOy5C,gBAAA,CAAiB9U,MAAjB,CAAwB3kC,MAAxB,CAAP,CAAF;AAAA,IAApC,CADuC;AAAA,GAX2E;AAAA,EActHu5C,oCAAA,CAAqCnY,MAArC,EAA6CpgB,UAA7C,EAAyDysB,cAAzD,EAAyEC,aAAzE,EAAwFC,eAAxF,EAAyGC,aAAzG,EAAwHgC,aAAxH,EAdsH;AAAA,EAp5FlG;AAAA,CAq6FxB,SAASgJ,oCAAT,CAA8C70C,IAA9C,EAAoD;AAAA,EAChD,OAAO,IAAIwgB,SAAJ,CAAc,+CAA+CxgB,IAA/C,GAAsD,wDAApE,CAAP,CADgD;AAAA,EAr6F5B;AAAA,CAy6FxB,SAAS21C,iBAAT,CAA2BtY,MAA3B,EAAmCuY,eAAnC,EAAoD;AAAA,EAChD,IAAIxY,MAAA,GAAS2C,kCAAA,CAAmC1C,MAAnC,CAAb,CADgD;AAAA,EAEhD,IAAIwY,OAAA,GAAU,KAAd,CAFgD;AAAA,EAGhD,IAAIC,SAAA,GAAY,KAAhB,CAHgD;AAAA,EAIhD,IAAIC,SAAA,GAAY,KAAhB,CAJgD;AAAA,EAKhD,IAAIC,OAAJ,CALgD;AAAA,EAMhD,IAAIC,OAAJ,CANgD;AAAA,EAOhD,IAAIC,OAAJ,CAPgD;AAAA,EAQhD,IAAIC,OAAJ,CARgD;AAAA,EAShD,IAAIC,oBAAJ,CATgD;AAAA,EAUhD,IAAIC,aAAA,GAAgBvb,UAAA,CAAW,UAAUn+B,OAAV,EAAmB;AAAA,GAC9Cy5C,oBAAA,GAAuBz5C,OAAvB,CAD8C;AAAA,GAA9B,CAApB,CAVgD;AAAA,EAahD,SAASgtC,aAAT,GAAyB;AAAA,GACrB,IAAIkM,OAAJ,EAAa;AAAA,IACT,OAAO9a,mBAAA,CAAoBrc,SAApB,CAAP,CADS;AAAA,IADQ;AAAA,GAIrBm3B,OAAA,GAAU,IAAV,CAJqB;AAAA,GAKrB,IAAI3V,WAAA,GAAc;AAAA,IACdI,WAAA,EAAa,UAAUp+B,KAAV,EAAiB;AAAA,KAI1B0zB,cAAA,CAAe,YAAY;AAAA,MACvBigB,OAAA,GAAU,KAAV,CADuB;AAAA,MAEvB,IAAIS,MAAA,GAASp0C,KAAb,CAFuB;AAAA,MAGvB,IAAIq0C,MAAA,GAASr0C,KAAb,CAHuB;AAAA,MASvB,IAAI,CAAC4zC,SAAL,EAAgB;AAAA,OACZb,sCAAA,CAAuCiB,OAAA,CAAQ5U,yBAA/C,EAA0EgV,MAA1E,EADY;AAAA,OATO;AAAA,MAYvB,IAAI,CAACP,SAAL,EAAgB;AAAA,OACZd,sCAAA,CAAuCkB,OAAA,CAAQ7U,yBAA/C,EAA0EiV,MAA1E,EADY;AAAA,OAZO;AAAA,MAevBH,oBAAA,CAAqB13B,SAArB,EAfuB;AAAA,MAA3B,EAJ0B;AAAA,KADhB;AAAA,IAuBd2hB,WAAA,EAAa,YAAY;AAAA,KACrBwV,OAAA,GAAU,KAAV,CADqB;AAAA,KAErB,IAAI,CAACC,SAAL,EAAgB;AAAA,MACZd,oCAAA,CAAqCkB,OAAA,CAAQ5U,yBAA7C,EADY;AAAA,MAFK;AAAA,KAKrB,IAAI,CAACyU,SAAL,EAAgB;AAAA,MACZf,oCAAA,CAAqCmB,OAAA,CAAQ7U,yBAA7C,EADY;AAAA,MALK;AAAA,KAvBX;AAAA,IAgCdN,WAAA,EAAa,YAAY;AAAA,KACrB6U,OAAA,GAAU,KAAV,CADqB;AAAA,KAhCX;AAAA,IAAlB,CALqB;AAAA,GAyCrB5U,+BAAA,CAAgC7D,MAAhC,EAAwC8C,WAAxC,EAzCqB;AAAA,GA0CrB,OAAOnF,mBAAA,CAAoBrc,SAApB,CAAP,CA1CqB;AAAA,GAbuB;AAAA,EAyDhD,SAAS83B,gBAAT,CAA0Bv6C,MAA1B,EAAkC;AAAA,GAC9B65C,SAAA,GAAY,IAAZ,CAD8B;AAAA,GAE9BE,OAAA,GAAU/5C,MAAV,CAF8B;AAAA,GAG9B,IAAI85C,SAAJ,EAAe;AAAA,IACX,IAAIU,eAAA,GAAkBjT,mBAAA,CAAoB;AAAA,KAACwS,OAAD;AAAA,KAAUC,OAAV;AAAA,KAApB,CAAtB,CADW;AAAA,IAEX,IAAIS,YAAA,GAAe5Y,oBAAA,CAAqBT,MAArB,EAA6BoZ,eAA7B,CAAnB,CAFW;AAAA,IAGXL,oBAAA,CAAqBM,YAArB,EAHW;AAAA,IAHe;AAAA,GAQ9B,OAAOL,aAAP,CAR8B;AAAA,GAzDc;AAAA,EAmEhD,SAASM,gBAAT,CAA0B16C,MAA1B,EAAkC;AAAA,GAC9B85C,SAAA,GAAY,IAAZ,CAD8B;AAAA,GAE9BE,OAAA,GAAUh6C,MAAV,CAF8B;AAAA,GAG9B,IAAI65C,SAAJ,EAAe;AAAA,IACX,IAAIW,eAAA,GAAkBjT,mBAAA,CAAoB;AAAA,KAACwS,OAAD;AAAA,KAAUC,OAAV;AAAA,KAApB,CAAtB,CADW;AAAA,IAEX,IAAIS,YAAA,GAAe5Y,oBAAA,CAAqBT,MAArB,EAA6BoZ,eAA7B,CAAnB,CAFW;AAAA,IAGXL,oBAAA,CAAqBM,YAArB,EAHW;AAAA,IAHe;AAAA,GAQ9B,OAAOL,aAAP,CAR8B;AAAA,GAnEc;AAAA,EA6EhD,SAAS3M,cAAT,GAA0B;AAAA,GA7EsB;AAAA,EAgFhDwM,OAAA,GAAUU,oBAAA,CAAqBlN,cAArB,EAAqCC,aAArC,EAAoD6M,gBAApD,CAAV,CAhFgD;AAAA,EAiFhDL,OAAA,GAAUS,oBAAA,CAAqBlN,cAArB,EAAqCC,aAArC,EAAoDgN,gBAApD,CAAV,CAjFgD;AAAA,EAkFhDvb,aAAA,CAAcgC,MAAA,CAAOe,cAArB,EAAqC,UAAU9jB,CAAV,EAAa;AAAA,GAC9C66B,oCAAA,CAAqCgB,OAAA,CAAQ5U,yBAA7C,EAAwEjnB,CAAxE,EAD8C;AAAA,GAE9C66B,oCAAA,CAAqCiB,OAAA,CAAQ7U,yBAA7C,EAAwEjnB,CAAxE,EAF8C;AAAA,GAG9C+7B,oBAAA,CAAqB13B,SAArB,EAH8C;AAAA,GAAlD,EAlFgD;AAAA,EAuFhD,OAAO;AAAA,GAACw3B,OAAD;AAAA,GAAUC,OAAV;AAAA,GAAP,CAvFgD;AAAA,EAz6F5B;AAAA,CAmgGxB,SAASU,oCAAT,CAA8Ch5B,MAA9C,EAAsDliB,OAAtD,EAA+D;AAAA,EAC3DqjC,gBAAA,CAAiBnhB,MAAjB,EAAyBliB,OAAzB,EAD2D;AAAA,EAE3D,IAAIqvC,QAAA,GAAWntB,MAAf,CAF2D;AAAA,EAG3D,IAAIqoB,qBAAA,GAAwB8E,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAAS9E,qBAAzF,CAH2D;AAAA,EAI3D,IAAItF,MAAA,GAASoK,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASpK,MAA1E,CAJ2D;AAAA,EAK3D,IAAIqJ,IAAA,GAAOe,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASf,IAAxE,CAL2D;AAAA,EAM3D,IAAI9pC,KAAA,GAAQ6qC,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAAS7qC,KAAzE,CAN2D;AAAA,EAO3D,IAAI2C,IAAA,GAAOkoC,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASloC,IAAxE,CAP2D;AAAA,EAQ3D,OAAO;AAAA,GACHojC,qBAAA,EAAuBA,qBAAA,KAA0BxnB,SAA1B,GACnBA,SADmB,GAEnB+gB,uCAAA,CAAwCyG,qBAAxC,EAA+DvqC,OAAA,GAAU,0CAAzE,CAHD;AAAA,GAIHilC,MAAA,EAAQA,MAAA,KAAWliB,SAAX,GACJA,SADI,GAEJo4B,qCAAA,CAAsClW,MAAtC,EAA8CoK,QAA9C,EAAwDrvC,OAAA,GAAU,2BAAlE,CAND;AAAA,GAOHsuC,IAAA,EAAMA,IAAA,KAASvrB,SAAT,GACFA,SADE,GAEFq4B,mCAAA,CAAoC9M,IAApC,EAA0Ce,QAA1C,EAAoDrvC,OAAA,GAAU,yBAA9D,CATD;AAAA,GAUHwE,KAAA,EAAOA,KAAA,KAAUue,SAAV,GACHA,SADG,GAEHs4B,oCAAA,CAAqC72C,KAArC,EAA4C6qC,QAA5C,EAAsDrvC,OAAA,GAAU,0BAAhE,CAZD;AAAA,GAaHmH,IAAA,EAAMA,IAAA,KAAS4b,SAAT,GAAqBA,SAArB,GAAiCu4B,yBAAA,CAA0Bn0C,IAA1B,EAAgCnH,OAAA,GAAU,yBAA1C,CAbpC;AAAA,GAAP,CAR2D;AAAA,EAngGvC;AAAA,CA2hGxB,SAASm7C,qCAAT,CAA+C9zC,EAA/C,EAAmDgoC,QAAnD,EAA6DrvC,OAA7D,EAAsE;AAAA,EAClEsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EADkE;AAAA,EAElE,OAAO,UAAUM,MAAV,EAAkB;AAAA,GAAE,OAAO2/B,WAAA,CAAY54B,EAAZ,EAAgBgoC,QAAhB,EAA0B,CAAC/uC,MAAD,CAA1B,CAAP,CAAF;AAAA,GAAzB,CAFkE;AAAA,EA3hG9C;AAAA,CA+hGxB,SAAS86C,mCAAT,CAA6C/zC,EAA7C,EAAiDgoC,QAAjD,EAA2DrvC,OAA3D,EAAoE;AAAA,EAChEsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EADgE;AAAA,EAEhE,OAAO,UAAUshB,UAAV,EAAsB;AAAA,GAAE,OAAO2e,WAAA,CAAY54B,EAAZ,EAAgBgoC,QAAhB,EAA0B,CAAC/tB,UAAD,CAA1B,CAAP,CAAF;AAAA,GAA7B,CAFgE;AAAA,EA/hG5C;AAAA,CAmiGxB,SAAS+5B,oCAAT,CAA8Ch0C,EAA9C,EAAkDgoC,QAAlD,EAA4DrvC,OAA5D,EAAqE;AAAA,EACjEsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EADiE;AAAA,EAEjE,OAAO,UAAUshB,UAAV,EAAsB;AAAA,GAAE,OAAO0e,WAAA,CAAY34B,EAAZ,EAAgBgoC,QAAhB,EAA0B,CAAC/tB,UAAD,CAA1B,CAAP,CAAF;AAAA,GAA7B,CAFiE;AAAA,EAniG7C;AAAA,CAuiGxB,SAASg6B,yBAAT,CAAmCn0C,IAAnC,EAAyCnH,OAAzC,EAAkD;AAAA,EAC9CmH,IAAA,GAAO,KAAKA,IAAZ,CAD8C;AAAA,EAE9C,IAAIA,IAAA,KAAS,OAAb,EAAsB;AAAA,GAClB,MAAM,IAAI0d,SAAJ,CAAc7kB,OAAA,GAAU,IAAV,GAAiBmH,IAAjB,GAAwB,2DAAtC,CAAN,CADkB;AAAA,GAFwB;AAAA,EAK9C,OAAOA,IAAP,CAL8C;AAAA,EAviG1B;AAAA,CA+iGxB,SAASo0C,oBAAT,CAA8Bt5B,OAA9B,EAAuCjiB,OAAvC,EAAgD;AAAA,EAC5CqjC,gBAAA,CAAiBphB,OAAjB,EAA0BjiB,OAA1B,EAD4C;AAAA,EAE5C,IAAI0nB,IAAA,GAAOzF,OAAA,KAAY,IAAZ,IAAoBA,OAAA,KAAY,KAAK,CAArC,GAAyC,KAAK,CAA9C,GAAkDA,OAAA,CAAQyF,IAArE,CAF4C;AAAA,EAG5C,OAAO,EACHA,IAAA,EAAMA,IAAA,KAAS3E,SAAT,GAAqBA,SAArB,GAAiCy4B,+BAAA,CAAgC9zB,IAAhC,EAAsC1nB,OAAA,GAAU,yBAAhD,CADpC,EAAP,CAH4C;AAAA,EA/iGxB;AAAA,CAsjGxB,SAASw7C,+BAAT,CAAyC9zB,IAAzC,EAA+C1nB,OAA/C,EAAwD;AAAA,EACpD0nB,IAAA,GAAO,KAAKA,IAAZ,CADoD;AAAA,EAEpD,IAAIA,IAAA,KAAS,MAAb,EAAqB;AAAA,GACjB,MAAM,IAAI7C,SAAJ,CAAc7kB,OAAA,GAAU,IAAV,GAAiB0nB,IAAjB,GAAwB,iEAAtC,CAAN,CADiB;AAAA,GAF+B;AAAA,EAKpD,OAAOA,IAAP,CALoD;AAAA,EAtjGhC;AAAA,CA8jGxB,SAAS+zB,sBAAT,CAAgCx5B,OAAhC,EAAyCjiB,OAAzC,EAAkD;AAAA,EAC9CqjC,gBAAA,CAAiBphB,OAAjB,EAA0BjiB,OAA1B,EAD8C;AAAA,EAE9C,IAAIgmC,aAAA,GAAgB/jB,OAAA,KAAY,IAAZ,IAAoBA,OAAA,KAAY,KAAK,CAArC,GAAyC,KAAK,CAA9C,GAAkDA,OAAA,CAAQ+jB,aAA9E,CAF8C;AAAA,EAG9C,OAAO,EAAEA,aAAA,EAAe0V,OAAA,CAAQ1V,aAAR,CAAjB,EAAP,CAH8C;AAAA,EA9jG1B;AAAA,CAokGxB,SAAS2V,kBAAT,CAA4B15B,OAA5B,EAAqCjiB,OAArC,EAA8C;AAAA,EAC1CqjC,gBAAA,CAAiBphB,OAAjB,EAA0BjiB,OAA1B,EAD0C;AAAA,EAE1C,IAAIq3C,YAAA,GAAep1B,OAAA,KAAY,IAAZ,IAAoBA,OAAA,KAAY,KAAK,CAArC,GAAyC,KAAK,CAA9C,GAAkDA,OAAA,CAAQo1B,YAA7E,CAF0C;AAAA,EAG1C,IAAIrR,aAAA,GAAgB/jB,OAAA,KAAY,IAAZ,IAAoBA,OAAA,KAAY,KAAK,CAArC,GAAyC,KAAK,CAA9C,GAAkDA,OAAA,CAAQ+jB,aAA9E,CAH0C;AAAA,EAI1C,IAAIoR,YAAA,GAAen1B,OAAA,KAAY,IAAZ,IAAoBA,OAAA,KAAY,KAAK,CAArC,GAAyC,KAAK,CAA9C,GAAkDA,OAAA,CAAQm1B,YAA7E,CAJ0C;AAAA,EAK1C,IAAIE,MAAA,GAASr1B,OAAA,KAAY,IAAZ,IAAoBA,OAAA,KAAY,KAAK,CAArC,GAAyC,KAAK,CAA9C,GAAkDA,OAAA,CAAQq1B,MAAvE,CAL0C;AAAA,EAM1C,IAAIA,MAAA,KAAWv0B,SAAf,EAA0B;AAAA,GACtB64B,iBAAA,CAAkBtE,MAAlB,EAA0Bt3C,OAAA,GAAU,2BAApC,EADsB;AAAA,GANgB;AAAA,EAS1C,OAAO;AAAA,GACHq3C,YAAA,EAAcqE,OAAA,CAAQrE,YAAR,CADX;AAAA,GAEHrR,aAAA,EAAe0V,OAAA,CAAQ1V,aAAR,CAFZ;AAAA,GAGHoR,YAAA,EAAcsE,OAAA,CAAQtE,YAAR,CAHX;AAAA,GAIHE,MAAA,EAAQA,MAJL;AAAA,GAAP,CAT0C;AAAA,EApkGtB;AAAA,CAolGxB,SAASsE,iBAAT,CAA2BtE,MAA3B,EAAmCt3C,OAAnC,EAA4C;AAAA,EACxC,IAAI,CAAC22C,aAAA,CAAcW,MAAd,CAAL,EAA4B;AAAA,GACxB,MAAM,IAAIzyB,SAAJ,CAAc7kB,OAAA,GAAU,yBAAxB,CAAN,CADwB;AAAA,GADY;AAAA,EAplGpB;AAAA,CA0lGxB,SAAS67C,2BAAT,CAAqCvU,IAArC,EAA2CtnC,OAA3C,EAAoD;AAAA,EAChDqjC,gBAAA,CAAiBiE,IAAjB,EAAuBtnC,OAAvB,EADgD;AAAA,EAEhD,IAAI87C,QAAA,GAAWxU,IAAA,KAAS,IAAT,IAAiBA,IAAA,KAAS,KAAK,CAA/B,GAAmC,KAAK,CAAxC,GAA4CA,IAAA,CAAKwU,QAAhE,CAFgD;AAAA,EAGhDrY,mBAAA,CAAoBqY,QAApB,EAA8B,UAA9B,EAA0C,sBAA1C,EAHgD;AAAA,EAIhD5X,oBAAA,CAAqB4X,QAArB,EAA+B97C,OAAA,GAAU,6BAAzC,EAJgD;AAAA,EAKhD,IAAI0G,QAAA,GAAW4gC,IAAA,KAAS,IAAT,IAAiBA,IAAA,KAAS,KAAK,CAA/B,GAAmC,KAAK,CAAxC,GAA4CA,IAAA,CAAK5gC,QAAhE,CALgD;AAAA,EAMhD+8B,mBAAA,CAAoB/8B,QAApB,EAA8B,UAA9B,EAA0C,sBAA1C,EANgD;AAAA,EAOhDipC,oBAAA,CAAqBjpC,QAArB,EAA+B1G,OAAA,GAAU,6BAAzC,EAPgD;AAAA,EAQhD,OAAO;AAAA,GAAE87C,QAAA,EAAUA,QAAZ;AAAA,GAAsBp1C,QAAA,EAAUA,QAAhC;AAAA,GAAP,CARgD;AAAA,EA1lG5B;AAAA,CA0mGxB,IAAIq1C,cAAA,GAAgC,YAAY;AAAA,EAC5C,SAASA,cAAT,CAAwBC,mBAAxB,EAA6CjM,WAA7C,EAA0D;AAAA,GACtD,IAAIiM,mBAAA,KAAwB,KAAK,CAAjC,EAAoC;AAAA,IAAEA,mBAAA,GAAsB,EAAtB,CAAF;AAAA,IADkB;AAAA,GAEtD,IAAIjM,WAAA,KAAgB,KAAK,CAAzB,EAA4B;AAAA,IAAEA,WAAA,GAAc,EAAd,CAAF;AAAA,IAF0B;AAAA,GAGtD,IAAIiM,mBAAA,KAAwBj5B,SAA5B,EAAuC;AAAA,IACnCi5B,mBAAA,GAAsB,IAAtB,CADmC;AAAA,IAAvC,MAGK;AAAA,IACDzY,YAAA,CAAayY,mBAAb,EAAkC,iBAAlC,EADC;AAAA,IANiD;AAAA,GAStD,IAAIlN,QAAA,GAAWG,sBAAA,CAAuBc,WAAvB,EAAoC,kBAApC,CAAf,CATsD;AAAA,GAUtD,IAAIgK,gBAAA,GAAmBmB,oCAAA,CAAqCc,mBAArC,EAA0D,iBAA1D,CAAvB,CAVsD;AAAA,GAWtDC,wBAAA,CAAyB,IAAzB,EAXsD;AAAA,GAYtD,IAAIlC,gBAAA,CAAiB5yC,IAAjB,KAA0B,OAA9B,EAAuC;AAAA,IACnC,IAAI2nC,QAAA,CAAShT,IAAT,KAAkB/Y,SAAtB,EAAiC;AAAA,KAC7B,MAAM,IAAI2kB,UAAJ,CAAe,4DAAf,CAAN,CAD6B;AAAA,KADE;AAAA,IAInC,IAAIwG,aAAA,GAAgBW,oBAAA,CAAqBC,QAArB,EAA+B,CAA/B,CAApB,CAJmC;AAAA,IAKnCV,qDAAA,CAAsD,IAAtD,EAA4D2L,gBAA5D,EAA8E7L,aAA9E,EALmC;AAAA,IAAvC,MAOK;AAAA,IACD,IAAIgC,aAAA,GAAgBlB,oBAAA,CAAqBF,QAArB,CAApB,CADC;AAAA,IAED,IAAIZ,aAAA,GAAgBW,oBAAA,CAAqBC,QAArB,EAA+B,CAA/B,CAApB,CAFC;AAAA,IAGDgL,wDAAA,CAAyD,IAAzD,EAA+DC,gBAA/D,EAAiF7L,aAAjF,EAAgGgC,aAAhG,EAHC;AAAA,IAnBiD;AAAA,GADd;AAAA,EA0B5C/rC,MAAA,CAAO+f,cAAP,CAAsB63B,cAAA,CAAen5B,SAArC,EAAgD,QAAhD,EAA0D;AAAA,GAItDrC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC4jB,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,KACzB,MAAM+X,2BAAA,CAA4B,QAA5B,CAAN,CADyB;AAAA,KADhB;AAAA,IAIb,OAAOnX,sBAAA,CAAuB,IAAvB,CAAP,CAJa;AAAA,IAJqC;AAAA,GAUtDv+B,UAAA,EAAY,KAV0C;AAAA,GAWtDC,YAAA,EAAc,IAXwC;AAAA,GAA1D,EA1B4C;AAAA,EA6C5Cs1C,cAAA,CAAen5B,SAAf,CAAyBqiB,MAAzB,GAAkC,UAAU3kC,MAAV,EAAkB;AAAA,GAChD,IAAIA,MAAA,KAAW,KAAK,CAApB,EAAuB;AAAA,IAAEA,MAAA,GAASyiB,SAAT,CAAF;AAAA,IADyB;AAAA,GAEhD,IAAI,CAACohB,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,OAAO9E,mBAAA,CAAoB6c,2BAAA,CAA4B,QAA5B,CAApB,CAAP,CADyB;AAAA,IAFmB;AAAA,GAKhD,IAAInX,sBAAA,CAAuB,IAAvB,CAAJ,EAAkC;AAAA,IAC9B,OAAO1F,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,kDAAd,CAApB,CAAP,CAD8B;AAAA,IALc;AAAA,GAQhD,OAAOsd,oBAAA,CAAqB,IAArB,EAA2B7hC,MAA3B,CAAP,CARgD;AAAA,GAApD,CA7C4C;AAAA,EAuD5Cy7C,cAAA,CAAen5B,SAAf,CAAyBu5B,SAAzB,GAAqC,UAAUC,UAAV,EAAsB;AAAA,GACvD,IAAIA,UAAA,KAAe,KAAK,CAAxB,EAA2B;AAAA,IAAEA,UAAA,GAAar5B,SAAb,CAAF;AAAA,IAD4B;AAAA,GAEvD,IAAI,CAACohB,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,MAAM+X,2BAAA,CAA4B,WAA5B,CAAN,CADyB;AAAA,IAF0B;AAAA,GAKvD,IAAIj6B,OAAA,GAAUs5B,oBAAA,CAAqBa,UAArB,EAAiC,iBAAjC,CAAd,CALuD;AAAA,GAMvD,IAAIn6B,OAAA,CAAQyF,IAAR,KAAiB3E,SAArB,EAAgC;AAAA,IAC5B,OAAOqhB,kCAAA,CAAmC,IAAnC,CAAP,CAD4B;AAAA,IANuB;AAAA,GASvD,OAAOmK,+BAAA,CAAgC,IAAhC,CAAP,CATuD;AAAA,GAA3D,CAvD4C;AAAA,EAkE5CwN,cAAA,CAAen5B,SAAf,CAAyBy5B,WAAzB,GAAuC,UAAUC,YAAV,EAAwBF,UAAxB,EAAoC;AAAA,GACvE,IAAIA,UAAA,KAAe,KAAK,CAAxB,EAA2B;AAAA,IAAEA,UAAA,GAAa,EAAb,CAAF;AAAA,IAD4C;AAAA,GAEvE,IAAI,CAACjY,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,MAAM+X,2BAAA,CAA4B,aAA5B,CAAN,CADyB;AAAA,IAF0C;AAAA,GAKvE1Y,sBAAA,CAAuB8Y,YAAvB,EAAqC,CAArC,EAAwC,aAAxC,EALuE;AAAA,GAMvE,IAAI9mC,SAAA,GAAYqmC,2BAAA,CAA4BS,YAA5B,EAA0C,iBAA1C,CAAhB,CANuE;AAAA,GAOvE,IAAIr6B,OAAA,GAAU05B,kBAAA,CAAmBS,UAAnB,EAA+B,kBAA/B,CAAd,CAPuE;AAAA,GAQvE,IAAIrX,sBAAA,CAAuB,IAAvB,CAAJ,EAAkC;AAAA,IAC9B,MAAM,IAAIlgB,SAAJ,CAAc,gFAAd,CAAN,CAD8B;AAAA,IARqC;AAAA,GAWvE,IAAIwrB,sBAAA,CAAuB76B,SAAA,CAAU9O,QAAjC,CAAJ,EAAgD;AAAA,IAC5C,MAAM,IAAIme,SAAJ,CAAc,gFAAd,CAAN,CAD4C;AAAA,IAXuB;AAAA,GAcvE,IAAIgQ,OAAA,GAAUsiB,oBAAA,CAAqB,IAArB,EAA2B3hC,SAAA,CAAU9O,QAArC,EAA+Cub,OAAA,CAAQm1B,YAAvD,EAAqEn1B,OAAA,CAAQo1B,YAA7E,EAA2Fp1B,OAAA,CAAQ+jB,aAAnG,EAAkH/jB,OAAA,CAAQq1B,MAA1H,CAAd,CAduE;AAAA,GAevEzX,yBAAA,CAA0BhL,OAA1B,EAfuE;AAAA,GAgBvE,OAAOrf,SAAA,CAAUsmC,QAAjB,CAhBuE;AAAA,GAA3E,CAlE4C;AAAA,EAoF5CC,cAAA,CAAen5B,SAAf,CAAyB25B,MAAzB,GAAkC,UAAUC,WAAV,EAAuBJ,UAAvB,EAAmC;AAAA,GACjE,IAAIA,UAAA,KAAe,KAAK,CAAxB,EAA2B;AAAA,IAAEA,UAAA,GAAa,EAAb,CAAF;AAAA,IADsC;AAAA,GAEjE,IAAI,CAACjY,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,OAAO9E,mBAAA,CAAoB6c,2BAAA,CAA4B,QAA5B,CAApB,CAAP,CADyB;AAAA,IAFoC;AAAA,GAKjE,IAAIM,WAAA,KAAgBz5B,SAApB,EAA+B;AAAA,IAC3B,OAAOsc,mBAAA,CAAoB,sCAApB,CAAP,CAD2B;AAAA,IALkC;AAAA,GAQjE,IAAI,CAACuQ,gBAAA,CAAiB4M,WAAjB,CAAL,EAAoC;AAAA,IAChC,OAAOnd,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,2EAAd,CAApB,CAAP,CADgC;AAAA,IAR6B;AAAA,GAWjE,IAAI5C,OAAJ,CAXiE;AAAA,GAYjE,IAAI;AAAA,IACAA,OAAA,GAAU05B,kBAAA,CAAmBS,UAAnB,EAA+B,kBAA/B,CAAV,CADA;AAAA,IAAJ,CAGA,OAAO5gB,CAAP,EAAU;AAAA,IACN,OAAO6D,mBAAA,CAAoB7D,CAApB,CAAP,CADM;AAAA,IAfuD;AAAA,GAkBjE,IAAIuJ,sBAAA,CAAuB,IAAvB,CAAJ,EAAkC;AAAA,IAC9B,OAAO1F,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,2EAAd,CAApB,CAAP,CAD8B;AAAA,IAlB+B;AAAA,GAqBjE,IAAIwrB,sBAAA,CAAuBmM,WAAvB,CAAJ,EAAyC;AAAA,IACrC,OAAOnd,mBAAA,CAAoB,IAAIxa,SAAJ,CAAc,2EAAd,CAApB,CAAP,CADqC;AAAA,IArBwB;AAAA,GAwBjE,OAAOsyB,oBAAA,CAAqB,IAArB,EAA2BqF,WAA3B,EAAwCv6B,OAAA,CAAQm1B,YAAhD,EAA8Dn1B,OAAA,CAAQo1B,YAAtE,EAAoFp1B,OAAA,CAAQ+jB,aAA5F,EAA2G/jB,OAAA,CAAQq1B,MAAnH,CAAP,CAxBiE;AAAA,GAArE,CApF4C;AAAA,EAyH5CyE,cAAA,CAAen5B,SAAf,CAAyB65B,GAAzB,GAA+B,YAAY;AAAA,GACvC,IAAI,CAACtY,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,MAAM+X,2BAAA,CAA4B,KAA5B,CAAN,CADyB;AAAA,IADU;AAAA,GAIvC,IAAIQ,QAAA,GAAW1C,iBAAA,CAAkB,IAAlB,CAAf,CAJuC;AAAA,GAKvC,OAAOnS,mBAAA,CAAoB6U,QAApB,CAAP,CALuC;AAAA,GAA3C,CAzH4C;AAAA,EAgI5CX,cAAA,CAAen5B,SAAf,CAAyB9a,MAAzB,GAAkC,UAAUs0C,UAAV,EAAsB;AAAA,GACpD,IAAIA,UAAA,KAAe,KAAK,CAAxB,EAA2B;AAAA,IAAEA,UAAA,GAAar5B,SAAb,CAAF;AAAA,IADyB;AAAA,GAEpD,IAAI,CAACohB,gBAAA,CAAiB,IAAjB,CAAL,EAA6B;AAAA,IACzB,MAAM+X,2BAAA,CAA4B,QAA5B,CAAN,CADyB;AAAA,IAFuB;AAAA,GAKpD,IAAIj6B,OAAA,GAAUw5B,sBAAA,CAAuBW,UAAvB,EAAmC,iBAAnC,CAAd,CALoD;AAAA,GAMpD,OAAOtV,kCAAA,CAAmC,IAAnC,EAAyC7kB,OAAA,CAAQ+jB,aAAjD,CAAP,CANoD;AAAA,GAAxD,CAhI4C;AAAA,EAwI5C,OAAO+V,cAAP,CAxI4C;AAAA,EAAZ,EAApC,CA1mGwB;AAAA,CAovGxB53C,MAAA,CAAO6nB,gBAAP,CAAwB+vB,cAAA,CAAen5B,SAAvC,EAAkD;AAAA,EAC9CqiB,MAAA,EAAQ,EAAEz+B,UAAA,EAAY,IAAd,EADsC;AAAA,EAE9C21C,SAAA,EAAW,EAAE31C,UAAA,EAAY,IAAd,EAFmC;AAAA,EAG9C61C,WAAA,EAAa,EAAE71C,UAAA,EAAY,IAAd,EAHiC;AAAA,EAI9C+1C,MAAA,EAAQ,EAAE/1C,UAAA,EAAY,IAAd,EAJsC;AAAA,EAK9Ci2C,GAAA,EAAK,EAAEj2C,UAAA,EAAY,IAAd,EALyC;AAAA,EAM9CsB,MAAA,EAAQ,EAAEtB,UAAA,EAAY,IAAd,EANsC;AAAA,EAO9CmqC,MAAA,EAAQ,EAAEnqC,UAAA,EAAY,IAAd,EAPsC;AAAA,EAAlD,EApvGwB;AAAA,CA6vGxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsB63B,cAAA,CAAen5B,SAArC,EAAgD4b,cAAA,CAAeiH,WAA/D,EAA4E;AAAA,GACxEl/B,KAAA,EAAO,gBADiE;AAAA,GAExEE,YAAA,EAAc,IAF0D;AAAA,GAA5E,EADgD;AAAA,EA7vG5B;AAAA,CAmwGxB,IAAI,OAAO+3B,cAAA,CAAesH,aAAtB,KAAwC,QAA5C,EAAsD;AAAA,EAClD3hC,MAAA,CAAO+f,cAAP,CAAsB63B,cAAA,CAAen5B,SAArC,EAAgD4b,cAAA,CAAesH,aAA/D,EAA8E;AAAA,GAC1Ev/B,KAAA,EAAOw1C,cAAA,CAAen5B,SAAf,CAAyB9a,MAD0C;AAAA,GAE1EpB,QAAA,EAAU,IAFgE;AAAA,GAG1ED,YAAA,EAAc,IAH4D;AAAA,GAA9E,EADkD;AAAA,EAnwG9B;AAAA,CA4wGxB,SAASw0C,oBAAT,CAA8BlN,cAA9B,EAA8CC,aAA9C,EAA6DC,eAA7D,EAA8EC,aAA9E,EAA6FgC,aAA7F,EAA4G;AAAA,EACxG,IAAIhC,aAAA,KAAkB,KAAK,CAA3B,EAA8B;AAAA,GAAEA,aAAA,GAAgB,CAAhB,CAAF;AAAA,GAD0E;AAAA,EAExG,IAAIgC,aAAA,KAAkB,KAAK,CAA3B,EAA8B;AAAA,GAAEA,aAAA,GAAgB,YAAY;AAAA,IAAE,OAAO,CAAP,CAAF;AAAA,IAA5B,CAAF;AAAA,GAF0E;AAAA,EAGxG,IAAIxO,MAAA,GAASv9B,MAAA,CAAO5E,MAAP,CAAcw8C,cAAA,CAAen5B,SAA7B,CAAb,CAHwG;AAAA,EAIxGq5B,wBAAA,CAAyBva,MAAzB,EAJwG;AAAA,EAKxG,IAAIpgB,UAAA,GAAand,MAAA,CAAO5E,MAAP,CAAcy5C,+BAAA,CAAgCp2B,SAA9C,CAAjB,CALwG;AAAA,EAMxGi3B,oCAAA,CAAqCnY,MAArC,EAA6CpgB,UAA7C,EAAyDysB,cAAzD,EAAyEC,aAAzE,EAAwFC,eAAxF,EAAyGC,aAAzG,EAAwHgC,aAAxH,EANwG;AAAA,EAOxG,OAAOxO,MAAP,CAPwG;AAAA,EA5wGpF;AAAA,CAqxGxB,SAASua,wBAAT,CAAkCva,MAAlC,EAA0C;AAAA,EACtCA,MAAA,CAAOG,MAAP,GAAgB,UAAhB,CADsC;AAAA,EAEtCH,MAAA,CAAOE,OAAP,GAAiB7e,SAAjB,CAFsC;AAAA,EAGtC2e,MAAA,CAAOO,YAAP,GAAsBlf,SAAtB,CAHsC;AAAA,EAItC2e,MAAA,CAAOgE,UAAP,GAAoB,KAApB,CAJsC;AAAA,EArxGlB;AAAA,CA2xGxB,SAASvB,gBAAT,CAA0BnN,CAA1B,EAA6B;AAAA,EACzB,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADG;AAAA,EAIzB,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,2BAAxC,CAAL,EAA2E;AAAA,GACvE,OAAO,KAAP,CADuE;AAAA,GAJlD;AAAA,EAOzB,OAAO,IAAP,CAPyB;AAAA,EA3xGL;AAAA,CAoyGxB,SAAS+N,sBAAT,CAAgCrD,MAAhC,EAAwC;AAAA,EACpC,IAAIA,MAAA,CAAOE,OAAP,KAAmB7e,SAAvB,EAAkC;AAAA,GAC9B,OAAO,KAAP,CAD8B;AAAA,GADE;AAAA,EAIpC,OAAO,IAAP,CAJoC;AAAA,EApyGhB;AAAA,CA2yGxB,SAASof,oBAAT,CAA8BT,MAA9B,EAAsCphC,MAAtC,EAA8C;AAAA,EAC1CohC,MAAA,CAAOgE,UAAP,GAAoB,IAApB,CAD0C;AAAA,EAE1C,IAAIhE,MAAA,CAAOG,MAAP,KAAkB,QAAtB,EAAgC;AAAA,GAC5B,OAAOzC,mBAAA,CAAoBrc,SAApB,CAAP,CAD4B;AAAA,GAFU;AAAA,EAK1C,IAAI2e,MAAA,CAAOG,MAAP,KAAkB,SAAtB,EAAiC;AAAA,GAC7B,OAAOxC,mBAAA,CAAoBqC,MAAA,CAAOO,YAA3B,CAAP,CAD6B;AAAA,GALS;AAAA,EAQ1CuK,mBAAA,CAAoB9K,MAApB,EAR0C;AAAA,EAS1C,IAAIib,mBAAA,GAAsBjb,MAAA,CAAOiE,yBAAP,CAAiC7C,WAAjC,EAA8CxiC,MAA9C,CAA1B,CAT0C;AAAA,EAU1C,OAAOo/B,oBAAA,CAAqBid,mBAArB,EAA0Cje,IAA1C,CAAP,CAV0C;AAAA,EA3yGtB;AAAA,CAuzGxB,SAAS8N,mBAAT,CAA6B9K,MAA7B,EAAqC;AAAA,EACjCA,MAAA,CAAOG,MAAP,GAAgB,QAAhB,CADiC;AAAA,EAEjC,IAAIJ,MAAA,GAASC,MAAA,CAAOE,OAApB,CAFiC;AAAA,EAGjC,IAAIH,MAAA,KAAW1e,SAAf,EAA0B;AAAA,GACtB,OADsB;AAAA,GAHO;AAAA,EAMjC4f,iCAAA,CAAkClB,MAAlC,EANiC;AAAA,EAOjC,IAAIqD,6BAAA,CAA8BrD,MAA9B,CAAJ,EAA2C;AAAA,GACvCA,MAAA,CAAO+C,aAAP,CAAqBrD,OAArB,CAA6B,UAAUoD,WAAV,EAAuB;AAAA,IAChDA,WAAA,CAAYG,WAAZ,GADgD;AAAA,IAApD,EADuC;AAAA,GAIvCjD,MAAA,CAAO+C,aAAP,GAAuB,IAAIrE,WAAJ,EAAvB,CAJuC;AAAA,GAPV;AAAA,EAvzGb;AAAA,CAq0GxB,SAASyN,mBAAT,CAA6BlM,MAA7B,EAAqClG,CAArC,EAAwC;AAAA,EACpCkG,MAAA,CAAOG,MAAP,GAAgB,SAAhB,CADoC;AAAA,EAEpCH,MAAA,CAAOO,YAAP,GAAsBzG,CAAtB,CAFoC;AAAA,EAGpC,IAAIiG,MAAA,GAASC,MAAA,CAAOE,OAApB,CAHoC;AAAA,EAIpC,IAAIH,MAAA,KAAW1e,SAAf,EAA0B;AAAA,GACtB,OADsB;AAAA,GAJU;AAAA,EAOpCsf,gCAAA,CAAiCZ,MAAjC,EAAyCjG,CAAzC,EAPoC;AAAA,EAQpC,IAAIsJ,6BAAA,CAA8BrD,MAA9B,CAAJ,EAA2C;AAAA,GACvCA,MAAA,CAAO+C,aAAP,CAAqBrD,OAArB,CAA6B,UAAUoD,WAAV,EAAuB;AAAA,IAChDA,WAAA,CAAYc,WAAZ,CAAwB7J,CAAxB,EADgD;AAAA,IAApD,EADuC;AAAA,GAIvCiG,MAAA,CAAO+C,aAAP,GAAuB,IAAIrE,WAAJ,EAAvB,CAJuC;AAAA,GAA3C,MAMK;AAAA,GACDsB,MAAA,CAAOgN,iBAAP,CAAyBtN,OAAzB,CAAiC,UAAUyL,eAAV,EAA2B;AAAA,IACxDA,eAAA,CAAgBvH,WAAhB,CAA4B7J,CAA5B,EADwD;AAAA,IAA5D,EADC;AAAA,GAIDiG,MAAA,CAAOgN,iBAAP,GAA2B,IAAItO,WAAJ,EAA3B,CAJC;AAAA,GAd+B;AAAA,EAr0GhB;AAAA,CA21GxB,SAAS+b,2BAAT,CAAqC73C,IAArC,EAA2C;AAAA,EACvC,OAAO,IAAIwgB,SAAJ,CAAc,8BAA8BxgB,IAA9B,GAAqC,uCAAnD,CAAP,CADuC;AAAA,EA31GnB;AAAA,CA+1GxB,SAASu4C,0BAAT,CAAoC1N,IAApC,EAA0ClvC,OAA1C,EAAmD;AAAA,EAC/CqjC,gBAAA,CAAiB6L,IAAjB,EAAuBlvC,OAAvB,EAD+C;AAAA,EAE/C,IAAIkuC,aAAA,GAAgBgB,IAAA,KAAS,IAAT,IAAiBA,IAAA,KAAS,KAAK,CAA/B,GAAmC,KAAK,CAAxC,GAA4CA,IAAA,CAAKhB,aAArE,CAF+C;AAAA,EAG/CzK,mBAAA,CAAoByK,aAApB,EAAmC,eAAnC,EAAoD,qBAApD,EAH+C;AAAA,EAI/C,OAAO,EACHA,aAAA,EAAevK,yBAAA,CAA0BuK,aAA1B,CADZ,EAAP,CAJ+C;AAAA,EA/1G3B;AAAA,CAw2GxB,IAAI2O,sBAAA,GAAyB,SAAS/gB,IAAT,CAAchf,KAAd,EAAqB;AAAA,EAC9C,OAAOA,KAAA,CAAMmsB,UAAb,CAD8C;AAAA,EAAlD,CAx2GwB;AAAA,CAg3GxB,IAAI6T,yBAAA,GAA2C,YAAY;AAAA,EACvD,SAASA,yBAAT,CAAmC76B,OAAnC,EAA4C;AAAA,GACxCuhB,sBAAA,CAAuBvhB,OAAvB,EAAgC,CAAhC,EAAmC,2BAAnC,EADwC;AAAA,GAExCA,OAAA,GAAU26B,0BAAA,CAA2B36B,OAA3B,EAAoC,iBAApC,CAAV,CAFwC;AAAA,GAGxC,KAAK86B,uCAAL,GAA+C96B,OAAA,CAAQisB,aAAvD,CAHwC;AAAA,GADW;AAAA,EAMvD/pC,MAAA,CAAO+f,cAAP,CAAsB44B,yBAAA,CAA0Bl6B,SAAhD,EAA2D,eAA3D,EAA4E;AAAA,GAIxErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACy8B,2BAAA,CAA4B,IAA5B,CAAL,EAAwC;AAAA,KACpC,MAAMC,6BAAA,CAA8B,eAA9B,CAAN,CADoC;AAAA,KAD3B;AAAA,IAIb,OAAO,KAAKF,uCAAZ,CAJa;AAAA,IAJuD;AAAA,GAUxEv2C,UAAA,EAAY,KAV4D;AAAA,GAWxEC,YAAA,EAAc,IAX0D;AAAA,GAA5E,EANuD;AAAA,EAmBvDtC,MAAA,CAAO+f,cAAP,CAAsB44B,yBAAA,CAA0Bl6B,SAAhD,EAA2D,MAA3D,EAAmE;AAAA,GAI/DrC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACy8B,2BAAA,CAA4B,IAA5B,CAAL,EAAwC;AAAA,KACpC,MAAMC,6BAAA,CAA8B,MAA9B,CAAN,CADoC;AAAA,KAD3B;AAAA,IAIb,OAAOJ,sBAAP,CAJa;AAAA,IAJ8C;AAAA,GAU/Dr2C,UAAA,EAAY,KAVmD;AAAA,GAW/DC,YAAA,EAAc,IAXiD;AAAA,GAAnE,EAnBuD;AAAA,EAgCvD,OAAOq2C,yBAAP,CAhCuD;AAAA,EAAZ,EAA/C,CAh3GwB;AAAA,CAk5GxB34C,MAAA,CAAO6nB,gBAAP,CAAwB8wB,yBAAA,CAA0Bl6B,SAAlD,EAA6D;AAAA,EACzDsrB,aAAA,EAAe,EAAE1nC,UAAA,EAAY,IAAd,EAD0C;AAAA,EAEzDs1B,IAAA,EAAM,EAAEt1B,UAAA,EAAY,IAAd,EAFmD;AAAA,EAA7D,EAl5GwB;AAAA,CAs5GxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsB44B,yBAAA,CAA0Bl6B,SAAhD,EAA2D4b,cAAA,CAAeiH,WAA1E,EAAuF;AAAA,GACnFl/B,KAAA,EAAO,2BAD4E;AAAA,GAEnFE,YAAA,EAAc,IAFqE;AAAA,GAAvF,EADgD;AAAA,EAt5G5B;AAAA,CA65GxB,SAASw2C,6BAAT,CAAuC54C,IAAvC,EAA6C;AAAA,EACzC,OAAO,IAAIwgB,SAAJ,CAAc,yCAAyCxgB,IAAzC,GAAgD,kDAA9D,CAAP,CADyC;AAAA,EA75GrB;AAAA,CAg6GxB,SAAS24C,2BAAT,CAAqChmB,CAArC,EAAwC;AAAA,EACpC,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADc;AAAA,EAIpC,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,yCAAxC,CAAL,EAAyF;AAAA,GACrF,OAAO,KAAP,CADqF;AAAA,GAJrD;AAAA,EAOpC,OAAO,IAAP,CAPoC;AAAA,EAh6GhB;AAAA,CA06GxB,IAAIkmB,iBAAA,GAAoB,SAASphB,IAAT,GAAgB;AAAA,EACpC,OAAO,CAAP,CADoC;AAAA,EAAxC,CA16GwB;AAAA,CAk7GxB,IAAIqhB,oBAAA,GAAsC,YAAY;AAAA,EAClD,SAASA,oBAAT,CAA8Bl7B,OAA9B,EAAuC;AAAA,GACnCuhB,sBAAA,CAAuBvhB,OAAvB,EAAgC,CAAhC,EAAmC,sBAAnC,EADmC;AAAA,GAEnCA,OAAA,GAAU26B,0BAAA,CAA2B36B,OAA3B,EAAoC,iBAApC,CAAV,CAFmC;AAAA,GAGnC,KAAKm7B,kCAAL,GAA0Cn7B,OAAA,CAAQisB,aAAlD,CAHmC;AAAA,GADW;AAAA,EAMlD/pC,MAAA,CAAO+f,cAAP,CAAsBi5B,oBAAA,CAAqBv6B,SAA3C,EAAsD,eAAtD,EAAuE;AAAA,GAInErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC88B,sBAAA,CAAuB,IAAvB,CAAL,EAAmC;AAAA,KAC/B,MAAMC,wBAAA,CAAyB,eAAzB,CAAN,CAD+B;AAAA,KADtB;AAAA,IAIb,OAAO,KAAKF,kCAAZ,CAJa;AAAA,IAJkD;AAAA,GAUnE52C,UAAA,EAAY,KAVuD;AAAA,GAWnEC,YAAA,EAAc,IAXqD;AAAA,GAAvE,EANkD;AAAA,EAmBlDtC,MAAA,CAAO+f,cAAP,CAAsBi5B,oBAAA,CAAqBv6B,SAA3C,EAAsD,MAAtD,EAA8D;AAAA,GAK1DrC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAAC88B,sBAAA,CAAuB,IAAvB,CAAL,EAAmC;AAAA,KAC/B,MAAMC,wBAAA,CAAyB,MAAzB,CAAN,CAD+B;AAAA,KADtB;AAAA,IAIb,OAAOJ,iBAAP,CAJa;AAAA,IALyC;AAAA,GAW1D12C,UAAA,EAAY,KAX8C;AAAA,GAY1DC,YAAA,EAAc,IAZ4C;AAAA,GAA9D,EAnBkD;AAAA,EAiClD,OAAO02C,oBAAP,CAjCkD;AAAA,EAAZ,EAA1C,CAl7GwB;AAAA,CAq9GxBh5C,MAAA,CAAO6nB,gBAAP,CAAwBmxB,oBAAA,CAAqBv6B,SAA7C,EAAwD;AAAA,EACpDsrB,aAAA,EAAe,EAAE1nC,UAAA,EAAY,IAAd,EADqC;AAAA,EAEpDs1B,IAAA,EAAM,EAAEt1B,UAAA,EAAY,IAAd,EAF8C;AAAA,EAAxD,EAr9GwB;AAAA,CAy9GxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsBi5B,oBAAA,CAAqBv6B,SAA3C,EAAsD4b,cAAA,CAAeiH,WAArE,EAAkF;AAAA,GAC9El/B,KAAA,EAAO,sBADuE;AAAA,GAE9EE,YAAA,EAAc,IAFgE;AAAA,GAAlF,EADgD;AAAA,EAz9G5B;AAAA,CAg+GxB,SAAS62C,wBAAT,CAAkCj5C,IAAlC,EAAwC;AAAA,EACpC,OAAO,IAAIwgB,SAAJ,CAAc,oCAAoCxgB,IAApC,GAA2C,6CAAzD,CAAP,CADoC;AAAA,EAh+GhB;AAAA,CAm+GxB,SAASg5C,sBAAT,CAAgCrmB,CAAhC,EAAmC;AAAA,EAC/B,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADS;AAAA,EAI/B,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,oCAAxC,CAAL,EAAoF;AAAA,GAChF,OAAO,KAAP,CADgF;AAAA,GAJrD;AAAA,EAO/B,OAAO,IAAP,CAP+B;AAAA,EAn+GX;AAAA,CA6+GxB,SAASumB,kBAAT,CAA4BlO,QAA5B,EAAsCrvC,OAAtC,EAA+C;AAAA,EAC3CqjC,gBAAA,CAAiBgM,QAAjB,EAA2BrvC,OAA3B,EAD2C;AAAA,EAE3C,IAAIk6B,KAAA,GAAQmV,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASnV,KAAzE,CAF2C;AAAA,EAG3C,IAAIsjB,YAAA,GAAenO,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASmO,YAAhF,CAH2C;AAAA,EAI3C,IAAIh5C,KAAA,GAAQ6qC,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAAS7qC,KAAzE,CAJ2C;AAAA,EAK3C,IAAIgR,SAAA,GAAY65B,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAAS75B,SAA7E,CAL2C;AAAA,EAM3C,IAAIioC,YAAA,GAAepO,QAAA,KAAa,IAAb,IAAqBA,QAAA,KAAa,KAAK,CAAvC,GAA2C,KAAK,CAAhD,GAAoDA,QAAA,CAASoO,YAAhF,CAN2C;AAAA,EAO3C,OAAO;AAAA,GACHvjB,KAAA,EAAOA,KAAA,KAAUnX,SAAV,GACHA,SADG,GAEH26B,+BAAA,CAAgCxjB,KAAhC,EAAuCmV,QAAvC,EAAiDrvC,OAAA,GAAU,0BAA3D,CAHD;AAAA,GAIHw9C,YAAA,EAAcA,YAJX;AAAA,GAKHh5C,KAAA,EAAOA,KAAA,KAAUue,SAAV,GACHA,SADG,GAEH46B,+BAAA,CAAgCn5C,KAAhC,EAAuC6qC,QAAvC,EAAiDrvC,OAAA,GAAU,0BAA3D,CAPD;AAAA,GAQHwV,SAAA,EAAWA,SAAA,KAAcuN,SAAd,GACPA,SADO,GAEP66B,mCAAA,CAAoCpoC,SAApC,EAA+C65B,QAA/C,EAAyDrvC,OAAA,GAAU,8BAAnE,CAVD;AAAA,GAWHy9C,YAAA,EAAcA,YAXX;AAAA,GAAP,CAP2C;AAAA,EA7+GvB;AAAA,CAkgHxB,SAASC,+BAAT,CAAyCr2C,EAAzC,EAA6CgoC,QAA7C,EAAuDrvC,OAAvD,EAAgE;AAAA,EAC5DsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EAD4D;AAAA,EAE5D,OAAO,UAAUshB,UAAV,EAAsB;AAAA,GAAE,OAAO2e,WAAA,CAAY54B,EAAZ,EAAgBgoC,QAAhB,EAA0B,CAAC/tB,UAAD,CAA1B,CAAP,CAAF;AAAA,GAA7B,CAF4D;AAAA,EAlgHxC;AAAA,CAsgHxB,SAASq8B,+BAAT,CAAyCt2C,EAAzC,EAA6CgoC,QAA7C,EAAuDrvC,OAAvD,EAAgE;AAAA,EAC5DsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EAD4D;AAAA,EAE5D,OAAO,UAAUshB,UAAV,EAAsB;AAAA,GAAE,OAAO0e,WAAA,CAAY34B,EAAZ,EAAgBgoC,QAAhB,EAA0B,CAAC/tB,UAAD,CAA1B,CAAP,CAAF;AAAA,GAA7B,CAF4D;AAAA,EAtgHxC;AAAA,CA0gHxB,SAASs8B,mCAAT,CAA6Cv2C,EAA7C,EAAiDgoC,QAAjD,EAA2DrvC,OAA3D,EAAoE;AAAA,EAChEsjC,cAAA,CAAej8B,EAAf,EAAmBrH,OAAnB,EADgE;AAAA,EAEhE,OAAO,UAAU8c,KAAV,EAAiBwE,UAAjB,EAA6B;AAAA,GAAE,OAAO2e,WAAA,CAAY54B,EAAZ,EAAgBgoC,QAAhB,EAA0B;AAAA,IAACvyB,KAAD;AAAA,IAAQwE,UAAR;AAAA,IAA1B,CAAP,CAAF;AAAA,GAApC,CAFgE;AAAA,EA1gH5C;AAAA,CAwhHxB,IAAIu8B,eAAA,GAAiC,YAAY;AAAA,EAC7C,SAASA,eAAT,CAAyBC,cAAzB,EAAyCC,mBAAzC,EAA8DC,mBAA9D,EAAmF;AAAA,GAC/E,IAAIF,cAAA,KAAmB,KAAK,CAA5B,EAA+B;AAAA,IAAEA,cAAA,GAAiB,EAAjB,CAAF;AAAA,IADgD;AAAA,GAE/E,IAAIC,mBAAA,KAAwB,KAAK,CAAjC,EAAoC;AAAA,IAAEA,mBAAA,GAAsB,EAAtB,CAAF;AAAA,IAF2C;AAAA,GAG/E,IAAIC,mBAAA,KAAwB,KAAK,CAAjC,EAAoC;AAAA,IAAEA,mBAAA,GAAsB,EAAtB,CAAF;AAAA,IAH2C;AAAA,GAI/E,IAAIF,cAAA,KAAmB/6B,SAAvB,EAAkC;AAAA,IAC9B+6B,cAAA,GAAiB,IAAjB,CAD8B;AAAA,IAJ6C;AAAA,GAO/E,IAAIG,gBAAA,GAAmBhP,sBAAA,CAAuB8O,mBAAvB,EAA4C,kBAA5C,CAAvB,CAP+E;AAAA,GAQ/E,IAAIG,gBAAA,GAAmBjP,sBAAA,CAAuB+O,mBAAvB,EAA4C,iBAA5C,CAAvB,CAR+E;AAAA,GAS/E,IAAIG,WAAA,GAAcZ,kBAAA,CAAmBO,cAAnB,EAAmC,iBAAnC,CAAlB,CAT+E;AAAA,GAU/E,IAAIK,WAAA,CAAYX,YAAZ,KAA6Bz6B,SAAjC,EAA4C;AAAA,IACxC,MAAM,IAAI2kB,UAAJ,CAAe,gCAAf,CAAN,CADwC;AAAA,IAVmC;AAAA,GAa/E,IAAIyW,WAAA,CAAYV,YAAZ,KAA6B16B,SAAjC,EAA4C;AAAA,IACxC,MAAM,IAAI2kB,UAAJ,CAAe,gCAAf,CAAN,CADwC;AAAA,IAbmC;AAAA,GAgB/E,IAAI0W,qBAAA,GAAwBvP,oBAAA,CAAqBqP,gBAArB,EAAuC,CAAvC,CAA5B,CAhB+E;AAAA,GAiB/E,IAAIG,qBAAA,GAAwBrP,oBAAA,CAAqBkP,gBAArB,CAA5B,CAjB+E;AAAA,GAkB/E,IAAII,qBAAA,GAAwBzP,oBAAA,CAAqBoP,gBAArB,EAAuC,CAAvC,CAA5B,CAlB+E;AAAA,GAmB/E,IAAIM,qBAAA,GAAwBvP,oBAAA,CAAqBiP,gBAArB,CAA5B,CAnB+E;AAAA,GAoB/E,IAAIO,oBAAJ,CApB+E;AAAA,GAqB/E,IAAIxI,YAAA,GAAe7W,UAAA,CAAW,UAAUn+B,OAAV,EAAmB;AAAA,IAC7Cw9C,oBAAA,GAAuBx9C,OAAvB,CAD6C;AAAA,IAA9B,CAAnB,CArB+E;AAAA,GAwB/Ey9C,yBAAA,CAA0B,IAA1B,EAAgCzI,YAAhC,EAA8CsI,qBAA9C,EAAqEC,qBAArE,EAA4FH,qBAA5F,EAAmHC,qBAAnH,EAxB+E;AAAA,GAyB/EK,oDAAA,CAAqD,IAArD,EAA2DP,WAA3D,EAzB+E;AAAA,GA0B/E,IAAIA,WAAA,CAAY35C,KAAZ,KAAsBue,SAA1B,EAAqC;AAAA,IACjCy7B,oBAAA,CAAqBL,WAAA,CAAY35C,KAAZ,CAAkB,KAAKm6C,0BAAvB,CAArB,EADiC;AAAA,IAArC,MAGK;AAAA,IACDH,oBAAA,CAAqBz7B,SAArB,EADC;AAAA,IA7B0E;AAAA,GADtC;AAAA,EAkC7C5e,MAAA,CAAO+f,cAAP,CAAsB25B,eAAA,CAAgBj7B,SAAtC,EAAiD,UAAjD,EAA6D;AAAA,GAIzDrC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACq+B,iBAAA,CAAkB,IAAlB,CAAL,EAA8B;AAAA,KAC1B,MAAMC,2BAAA,CAA4B,UAA5B,CAAN,CAD0B;AAAA,KADjB;AAAA,IAIb,OAAO,KAAKC,SAAZ,CAJa;AAAA,IAJwC;AAAA,GAUzDt4C,UAAA,EAAY,KAV6C;AAAA,GAWzDC,YAAA,EAAc,IAX2C;AAAA,GAA7D,EAlC6C;AAAA,EA+C7CtC,MAAA,CAAO+f,cAAP,CAAsB25B,eAAA,CAAgBj7B,SAAtC,EAAiD,UAAjD,EAA6D;AAAA,GAIzDrC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACq+B,iBAAA,CAAkB,IAAlB,CAAL,EAA8B;AAAA,KAC1B,MAAMC,2BAAA,CAA4B,UAA5B,CAAN,CAD0B;AAAA,KADjB;AAAA,IAIb,OAAO,KAAKE,SAAZ,CAJa;AAAA,IAJwC;AAAA,GAUzDv4C,UAAA,EAAY,KAV6C;AAAA,GAWzDC,YAAA,EAAc,IAX2C;AAAA,GAA7D,EA/C6C;AAAA,EA4D7C,OAAOo3C,eAAP,CA5D6C;AAAA,EAAZ,EAArC,CAxhHwB;AAAA,CAslHxB15C,MAAA,CAAO6nB,gBAAP,CAAwB6xB,eAAA,CAAgBj7B,SAAxC,EAAmD;AAAA,EAC/Ck5B,QAAA,EAAU,EAAEt1C,UAAA,EAAY,IAAd,EADqC;AAAA,EAE/CE,QAAA,EAAU,EAAEF,UAAA,EAAY,IAAd,EAFqC;AAAA,EAAnD,EAtlHwB;AAAA,CA0lHxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsB25B,eAAA,CAAgBj7B,SAAtC,EAAiD4b,cAAA,CAAeiH,WAAhE,EAA6E;AAAA,GACzEl/B,KAAA,EAAO,iBADkE;AAAA,GAEzEE,YAAA,EAAc,IAF2D;AAAA,GAA7E,EADgD;AAAA,EA1lH5B;AAAA,CAgmHxB,SAASg4C,yBAAT,CAAmC/c,MAAnC,EAA2CsU,YAA3C,EAAyDsI,qBAAzD,EAAgFC,qBAAhF,EAAuGH,qBAAvG,EAA8HC,qBAA9H,EAAqJ;AAAA,EACjJ,SAAStQ,cAAT,GAA0B;AAAA,GACtB,OAAOiI,YAAP,CADsB;AAAA,GADuH;AAAA,EAIjJ,SAASlF,cAAT,CAAwBh0B,KAAxB,EAA+B;AAAA,GAC3B,OAAOkiC,wCAAA,CAAyCtd,MAAzC,EAAiD5kB,KAAjD,CAAP,CAD2B;AAAA,GAJkH;AAAA,EAOjJ,SAASk0B,cAAT,CAAwB1wC,MAAxB,EAAgC;AAAA,GAC5B,OAAO2+C,wCAAA,CAAyCvd,MAAzC,EAAiDphC,MAAjD,CAAP,CAD4B;AAAA,GAPiH;AAAA,EAUjJ,SAASywC,cAAT,GAA0B;AAAA,GACtB,OAAOmO,wCAAA,CAAyCxd,MAAzC,CAAP,CADsB;AAAA,GAVuH;AAAA,EAajJA,MAAA,CAAOqd,SAAP,GAAmBlO,oBAAA,CAAqB9C,cAArB,EAAqC+C,cAArC,EAAqDC,cAArD,EAAqEC,cAArE,EAAqFsN,qBAArF,EAA4GC,qBAA5G,CAAnB,CAbiJ;AAAA,EAcjJ,SAASvQ,aAAT,GAAyB;AAAA,GACrB,OAAOmR,yCAAA,CAA0Czd,MAA1C,CAAP,CADqB;AAAA,GAdwH;AAAA,EAiBjJ,SAASuM,eAAT,CAAyB3tC,MAAzB,EAAiC;AAAA,GAC7B8+C,2CAAA,CAA4C1d,MAA5C,EAAoDphC,MAApD,EAD6B;AAAA,GAE7B,OAAO8+B,mBAAA,CAAoBrc,SAApB,CAAP,CAF6B;AAAA,GAjBgH;AAAA,EAqBjJ2e,MAAA,CAAOod,SAAP,GAAmB7D,oBAAA,CAAqBlN,cAArB,EAAqCC,aAArC,EAAoDC,eAApD,EAAqEmQ,qBAArE,EAA4FC,qBAA5F,CAAnB,CArBiJ;AAAA,EAuBjJ3c,MAAA,CAAOgQ,aAAP,GAAuB3uB,SAAvB,CAvBiJ;AAAA,EAwBjJ2e,MAAA,CAAO2d,0BAAP,GAAoCt8B,SAApC,CAxBiJ;AAAA,EAyBjJ2e,MAAA,CAAO4d,kCAAP,GAA4Cv8B,SAA5C,CAzBiJ;AAAA,EA0BjJw8B,8BAAA,CAA+B7d,MAA/B,EAAuC,IAAvC,EA1BiJ;AAAA,EA2BjJA,MAAA,CAAOid,0BAAP,GAAoC57B,SAApC,CA3BiJ;AAAA,EAhmH7H;AAAA,CA6nHxB,SAAS67B,iBAAT,CAA2B5nB,CAA3B,EAA8B;AAAA,EAC1B,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADI;AAAA,EAI1B,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,4BAAxC,CAAL,EAA4E;AAAA,GACxE,OAAO,KAAP,CADwE;AAAA,GAJlD;AAAA,EAO1B,OAAO,IAAP,CAP0B;AAAA,EA7nHN;AAAA,CAuoHxB,SAASwoB,oBAAT,CAA8B9d,MAA9B,EAAsClG,CAAtC,EAAyC;AAAA,EACrC+d,oCAAA,CAAqC7X,MAAA,CAAOod,SAAP,CAAiBnZ,yBAAtD,EAAiFnK,CAAjF,EADqC;AAAA,EAErC4jB,2CAAA,CAA4C1d,MAA5C,EAAoDlG,CAApD,EAFqC;AAAA,EAvoHjB;AAAA,CA2oHxB,SAAS4jB,2CAAT,CAAqD1d,MAArD,EAA6DlG,CAA7D,EAAgE;AAAA,EAC5DikB,+CAAA,CAAgD/d,MAAA,CAAOid,0BAAvD,EAD4D;AAAA,EAE5DxI,4CAAA,CAA6CzU,MAAA,CAAOqd,SAAP,CAAiB3N,yBAA9D,EAAyF5V,CAAzF,EAF4D;AAAA,EAG5D,IAAIkG,MAAA,CAAOgQ,aAAX,EAA0B;AAAA,GAItB6N,8BAAA,CAA+B7d,MAA/B,EAAuC,KAAvC,EAJsB;AAAA,GAHkC;AAAA,EA3oHxC;AAAA,CAqpHxB,SAAS6d,8BAAT,CAAwC7d,MAAxC,EAAgD8R,YAAhD,EAA8D;AAAA,EAE1D,IAAI9R,MAAA,CAAO2d,0BAAP,KAAsCt8B,SAA1C,EAAqD;AAAA,GACjD2e,MAAA,CAAO4d,kCAAP,GADiD;AAAA,GAFK;AAAA,EAK1D5d,MAAA,CAAO2d,0BAAP,GAAoClgB,UAAA,CAAW,UAAUn+B,OAAV,EAAmB;AAAA,GAC9D0gC,MAAA,CAAO4d,kCAAP,GAA4Ct+C,OAA5C,CAD8D;AAAA,GAA9B,CAApC,CAL0D;AAAA,EAQ1D0gC,MAAA,CAAOgQ,aAAP,GAAuB8B,YAAvB,CAR0D;AAAA,EArpHtC;AAAA,CAqqHxB,IAAIkM,gCAAA,GAAkD,YAAY;AAAA,EAC9D,SAASA,gCAAT,GAA4C;AAAA,GACxC,MAAM,IAAI76B,SAAJ,CAAc,qBAAd,CAAN,CADwC;AAAA,GADkB;AAAA,EAI9D1gB,MAAA,CAAO+f,cAAP,CAAsBw7B,gCAAA,CAAiC98B,SAAvD,EAAkE,aAAlE,EAAiF;AAAA,GAI7ErC,GAAA,EAAK,YAAY;AAAA,IACb,IAAI,CAACo/B,kCAAA,CAAmC,IAAnC,CAAL,EAA+C;AAAA,KAC3C,MAAMC,sCAAA,CAAuC,aAAvC,CAAN,CAD2C;AAAA,KADlC;AAAA,IAIb,IAAIC,kBAAA,GAAqB,KAAKC,0BAAL,CAAgChB,SAAhC,CAA0CnZ,yBAAnE,CAJa;AAAA,IAKb,OAAOwT,6CAAA,CAA8C0G,kBAA9C,CAAP,CALa;AAAA,IAJ4D;AAAA,GAW7Er5C,UAAA,EAAY,KAXiE;AAAA,GAY7EC,YAAA,EAAc,IAZ+D;AAAA,GAAjF,EAJ8D;AAAA,EAkB9Di5C,gCAAA,CAAiC98B,SAAjC,CAA2CqnB,OAA3C,GAAqD,UAAUntB,KAAV,EAAiB;AAAA,GAClE,IAAIA,KAAA,KAAU,KAAK,CAAnB,EAAsB;AAAA,IAAEA,KAAA,GAAQiG,SAAR,CAAF;AAAA,IAD4C;AAAA,GAElE,IAAI,CAAC48B,kCAAA,CAAmC,IAAnC,CAAL,EAA+C;AAAA,IAC3C,MAAMC,sCAAA,CAAuC,SAAvC,CAAN,CAD2C;AAAA,IAFmB;AAAA,GAKlEG,uCAAA,CAAwC,IAAxC,EAA8CjjC,KAA9C,EALkE;AAAA,GAAtE,CAlB8D;AAAA,EA6B9D4iC,gCAAA,CAAiC98B,SAAjC,CAA2CkB,KAA3C,GAAmD,UAAUxjB,MAAV,EAAkB;AAAA,GACjE,IAAIA,MAAA,KAAW,KAAK,CAApB,EAAuB;AAAA,IAAEA,MAAA,GAASyiB,SAAT,CAAF;AAAA,IAD0C;AAAA,GAEjE,IAAI,CAAC48B,kCAAA,CAAmC,IAAnC,CAAL,EAA+C;AAAA,IAC3C,MAAMC,sCAAA,CAAuC,OAAvC,CAAN,CAD2C;AAAA,IAFkB;AAAA,GAKjEI,qCAAA,CAAsC,IAAtC,EAA4C1/C,MAA5C,EALiE;AAAA,GAArE,CA7B8D;AAAA,EAwC9Do/C,gCAAA,CAAiC98B,SAAjC,CAA2Cq9B,SAA3C,GAAuD,YAAY;AAAA,GAC/D,IAAI,CAACN,kCAAA,CAAmC,IAAnC,CAAL,EAA+C;AAAA,IAC3C,MAAMC,sCAAA,CAAuC,WAAvC,CAAN,CAD2C;AAAA,IADgB;AAAA,GAI/DM,yCAAA,CAA0C,IAA1C,EAJ+D;AAAA,GAAnE,CAxC8D;AAAA,EA8C9D,OAAOR,gCAAP,CA9C8D;AAAA,EAAZ,EAAtD,CArqHwB;AAAA,CAqtHxBv7C,MAAA,CAAO6nB,gBAAP,CAAwB0zB,gCAAA,CAAiC98B,SAAzD,EAAoE;AAAA,EAChEqnB,OAAA,EAAS,EAAEzjC,UAAA,EAAY,IAAd,EADuD;AAAA,EAEhEsd,KAAA,EAAO,EAAEtd,UAAA,EAAY,IAAd,EAFyD;AAAA,EAGhEy5C,SAAA,EAAW,EAAEz5C,UAAA,EAAY,IAAd,EAHqD;AAAA,EAIhEukC,WAAA,EAAa,EAAEvkC,UAAA,EAAY,IAAd,EAJmD;AAAA,EAApE,EArtHwB;AAAA,CA2tHxB,IAAI,OAAOg4B,cAAA,CAAeiH,WAAtB,KAAsC,QAA1C,EAAoD;AAAA,EAChDthC,MAAA,CAAO+f,cAAP,CAAsBw7B,gCAAA,CAAiC98B,SAAvD,EAAkE4b,cAAA,CAAeiH,WAAjF,EAA8F;AAAA,GAC1Fl/B,KAAA,EAAO,kCADmF;AAAA,GAE1FE,YAAA,EAAc,IAF4E;AAAA,GAA9F,EADgD;AAAA,EA3tH5B;AAAA,CAkuHxB,SAASk5C,kCAAT,CAA4C3oB,CAA5C,EAA+C;AAAA,EAC3C,IAAI,CAAC6H,YAAA,CAAa7H,CAAb,CAAL,EAAsB;AAAA,GAClB,OAAO,KAAP,CADkB;AAAA,GADqB;AAAA,EAI3C,IAAI,CAAC7yB,MAAA,CAAOye,SAAP,CAAiBuC,cAAjB,CAAgCnB,IAAhC,CAAqCgT,CAArC,EAAwC,4BAAxC,CAAL,EAA4E;AAAA,GACxE,OAAO,KAAP,CADwE;AAAA,GAJjC;AAAA,EAO3C,OAAO,IAAP,CAP2C;AAAA,EAluHvB;AAAA,CA2uHxB,SAASmpB,qCAAT,CAA+Cze,MAA/C,EAAuDpgB,UAAvD,EAAmE8+B,kBAAnE,EAAuFC,cAAvF,EAAuG;AAAA,EACnG/+B,UAAA,CAAWw+B,0BAAX,GAAwCpe,MAAxC,CADmG;AAAA,EAEnGA,MAAA,CAAOid,0BAAP,GAAoCr9B,UAApC,CAFmG;AAAA,EAGnGA,UAAA,CAAWg/B,mBAAX,GAAiCF,kBAAjC,CAHmG;AAAA,EAInG9+B,UAAA,CAAWi/B,eAAX,GAA6BF,cAA7B,CAJmG;AAAA,EA3uH/E;AAAA,CAivHxB,SAAS3B,oDAAT,CAA8Dhd,MAA9D,EAAsEyc,WAAtE,EAAmF;AAAA,EAC/E,IAAI78B,UAAA,GAAand,MAAA,CAAO5E,MAAP,CAAcmgD,gCAAA,CAAiC98B,SAA/C,CAAjB,CAD+E;AAAA,EAE/E,IAAIw9B,kBAAA,GAAqB,UAAUtjC,KAAV,EAAiB;AAAA,GACtC,IAAI;AAAA,IACAijC,uCAAA,CAAwCz+B,UAAxC,EAAoDxE,KAApD,EADA;AAAA,IAEA,OAAOsiB,mBAAA,CAAoBrc,SAApB,CAAP,CAFA;AAAA,IAAJ,CAIA,OAAOy9B,gBAAP,EAAyB;AAAA,IACrB,OAAOnhB,mBAAA,CAAoBmhB,gBAApB,CAAP,CADqB;AAAA,IALa;AAAA,GAA1C,CAF+E;AAAA,EAW/E,IAAIH,cAAA,GAAiB,YAAY;AAAA,GAAE,OAAOjhB,mBAAA,CAAoBrc,SAApB,CAAP,CAAF;AAAA,GAAjC,CAX+E;AAAA,EAY/E,IAAIo7B,WAAA,CAAY3oC,SAAZ,KAA0BuN,SAA9B,EAAyC;AAAA,GACrCq9B,kBAAA,GAAqB,UAAUtjC,KAAV,EAAiB;AAAA,IAAE,OAAOqhC,WAAA,CAAY3oC,SAAZ,CAAsBsH,KAAtB,EAA6BwE,UAA7B,CAAP,CAAF;AAAA,IAAtC,CADqC;AAAA,GAZsC;AAAA,EAe/E,IAAI68B,WAAA,CAAYjkB,KAAZ,KAAsBnX,SAA1B,EAAqC;AAAA,GACjCs9B,cAAA,GAAiB,YAAY;AAAA,IAAE,OAAOlC,WAAA,CAAYjkB,KAAZ,CAAkB5Y,UAAlB,CAAP,CAAF;AAAA,IAA7B,CADiC;AAAA,GAf0C;AAAA,EAkB/E6+B,qCAAA,CAAsCze,MAAtC,EAA8CpgB,UAA9C,EAA0D8+B,kBAA1D,EAA8EC,cAA9E,EAlB+E;AAAA,EAjvH3D;AAAA,CAqwHxB,SAASZ,+CAAT,CAAyDn+B,UAAzD,EAAqE;AAAA,EACjEA,UAAA,CAAWg/B,mBAAX,GAAiCv9B,SAAjC,CADiE;AAAA,EAEjEzB,UAAA,CAAWi/B,eAAX,GAA6Bx9B,SAA7B,CAFiE;AAAA,EArwH7C;AAAA,CAywHxB,SAASg9B,uCAAT,CAAiDz+B,UAAjD,EAA6DxE,KAA7D,EAAoE;AAAA,EAChE,IAAI4kB,MAAA,GAASpgB,UAAA,CAAWw+B,0BAAxB,CADgE;AAAA,EAEhE,IAAID,kBAAA,GAAqBne,MAAA,CAAOod,SAAP,CAAiBnZ,yBAA1C,CAFgE;AAAA,EAGhE,IAAI,CAACyT,gDAAA,CAAiDyG,kBAAjD,CAAL,EAA2E;AAAA,GACvE,MAAM,IAAIh7B,SAAJ,CAAc,sDAAd,CAAN,CADuE;AAAA,GAHX;AAAA,EAQhE,IAAI;AAAA,GACAy0B,sCAAA,CAAuCuG,kBAAvC,EAA2D/iC,KAA3D,EADA;AAAA,GAAJ,CAGA,OAAO0e,CAAP,EAAU;AAAA,GAEN4jB,2CAAA,CAA4C1d,MAA5C,EAAoDlG,CAApD,EAFM;AAAA,GAGN,MAAMkG,MAAA,CAAOod,SAAP,CAAiB7c,YAAvB,CAHM;AAAA,GAXsD;AAAA,EAgBhE,IAAIuR,YAAA,GAAeoG,8CAAA,CAA+CiG,kBAA/C,CAAnB,CAhBgE;AAAA,EAiBhE,IAAIrM,YAAA,KAAiB9R,MAAA,CAAOgQ,aAA5B,EAA2C;AAAA,GACvC6N,8BAAA,CAA+B7d,MAA/B,EAAuC,IAAvC,EADuC;AAAA,GAjBqB;AAAA,EAzwH5C;AAAA,CA8xHxB,SAASse,qCAAT,CAA+C1+B,UAA/C,EAA2Dka,CAA3D,EAA8D;AAAA,EAC1DgkB,oBAAA,CAAqBl+B,UAAA,CAAWw+B,0BAAhC,EAA4DtkB,CAA5D,EAD0D;AAAA,EA9xHtC;AAAA,CAiyHxB,SAASilB,gDAAT,CAA0Dn/B,UAA1D,EAAsExE,KAAtE,EAA6E;AAAA,EACzE,IAAI4jC,gBAAA,GAAmBp/B,UAAA,CAAWg/B,mBAAX,CAA+BxjC,KAA/B,CAAvB,CADyE;AAAA,EAEzE,OAAO4iB,oBAAA,CAAqBghB,gBAArB,EAAuC39B,SAAvC,EAAkD,UAAUrE,CAAV,EAAa;AAAA,GAClE8gC,oBAAA,CAAqBl+B,UAAA,CAAWw+B,0BAAhC,EAA4DphC,CAA5D,EADkE;AAAA,GAElE,MAAMA,CAAN,CAFkE;AAAA,GAA/D,CAAP,CAFyE;AAAA,EAjyHrD;AAAA,CAwyHxB,SAASwhC,yCAAT,CAAmD5+B,UAAnD,EAA+D;AAAA,EAC3D,IAAIogB,MAAA,GAASpgB,UAAA,CAAWw+B,0BAAxB,CAD2D;AAAA,EAE3D,IAAID,kBAAA,GAAqBne,MAAA,CAAOod,SAAP,CAAiBnZ,yBAA1C,CAF2D;AAAA,EAG3D0T,oCAAA,CAAqCwG,kBAArC,EAH2D;AAAA,EAI3D,IAAI/7B,KAAA,GAAQ,IAAIe,SAAJ,CAAc,4BAAd,CAAZ,CAJ2D;AAAA,EAK3Du6B,2CAAA,CAA4C1d,MAA5C,EAAoD5d,KAApD,EAL2D;AAAA,EAxyHvC;AAAA,CAgzHxB,SAASk7B,wCAAT,CAAkDtd,MAAlD,EAA0D5kB,KAA1D,EAAiE;AAAA,EAC7D,IAAIwE,UAAA,GAAaogB,MAAA,CAAOid,0BAAxB,CAD6D;AAAA,EAE7D,IAAIjd,MAAA,CAAOgQ,aAAX,EAA0B;AAAA,GACtB,IAAIiP,yBAAA,GAA4Bjf,MAAA,CAAO2d,0BAAvC,CADsB;AAAA,GAEtB,OAAO3f,oBAAA,CAAqBihB,yBAArB,EAAgD,YAAY;AAAA,IAC/D,IAAIj6C,QAAA,GAAWg7B,MAAA,CAAOqd,SAAtB,CAD+D;AAAA,IAE/D,IAAI91C,KAAA,GAAQvC,QAAA,CAASm7B,MAArB,CAF+D;AAAA,IAG/D,IAAI54B,KAAA,KAAU,UAAd,EAA0B;AAAA,KACtB,MAAMvC,QAAA,CAASu7B,YAAf,CADsB;AAAA,KAHqC;AAAA,IAM/D,OAAOwe,gDAAA,CAAiDn/B,UAAjD,EAA6DxE,KAA7D,CAAP,CAN+D;AAAA,IAA5D,CAAP,CAFsB;AAAA,GAFmC;AAAA,EAa7D,OAAO2jC,gDAAA,CAAiDn/B,UAAjD,EAA6DxE,KAA7D,CAAP,CAb6D;AAAA,EAhzHzC;AAAA,CA+zHxB,SAASmiC,wCAAT,CAAkDvd,MAAlD,EAA0DphC,MAA1D,EAAkE;AAAA,EAG9Dk/C,oBAAA,CAAqB9d,MAArB,EAA6BphC,MAA7B,EAH8D;AAAA,EAI9D,OAAO8+B,mBAAA,CAAoBrc,SAApB,CAAP,CAJ8D;AAAA,EA/zH1C;AAAA,CAq0HxB,SAASm8B,wCAAT,CAAkDxd,MAAlD,EAA0D;AAAA,EAEtD,IAAIoa,QAAA,GAAWpa,MAAA,CAAOod,SAAtB,CAFsD;AAAA,EAGtD,IAAIx9B,UAAA,GAAaogB,MAAA,CAAOid,0BAAxB,CAHsD;AAAA,EAItD,IAAIiC,YAAA,GAAet/B,UAAA,CAAWi/B,eAAX,EAAnB,CAJsD;AAAA,EAKtDd,+CAAA,CAAgDn+B,UAAhD,EALsD;AAAA,EAOtD,OAAOoe,oBAAA,CAAqBkhB,YAArB,EAAmC,YAAY;AAAA,GAClD,IAAI9E,QAAA,CAASja,MAAT,KAAoB,SAAxB,EAAmC;AAAA,IAC/B,MAAMia,QAAA,CAAS7Z,YAAf,CAD+B;AAAA,IADe;AAAA,GAIlDoX,oCAAA,CAAqCyC,QAAA,CAASnW,yBAA9C,EAJkD;AAAA,GAA/C,EAKJ,UAAUjnB,CAAV,EAAa;AAAA,GACZ8gC,oBAAA,CAAqB9d,MAArB,EAA6BhjB,CAA7B,EADY;AAAA,GAEZ,MAAMo9B,QAAA,CAAS7Z,YAAf,CAFY;AAAA,GALT,CAAP,CAPsD;AAAA,EAr0HlC;AAAA,CAu1HxB,SAASkd,yCAAT,CAAmDzd,MAAnD,EAA2D;AAAA,EAEvD6d,8BAAA,CAA+B7d,MAA/B,EAAuC,KAAvC,EAFuD;AAAA,EAIvD,OAAOA,MAAA,CAAO2d,0BAAd,CAJuD;AAAA,EAv1HnC;AAAA,CA81HxB,SAASO,sCAAT,CAAgDv7C,IAAhD,EAAsD;AAAA,EAClD,OAAO,IAAIwgB,SAAJ,CAAc,gDAAgDxgB,IAAhD,GAAuD,yDAArE,CAAP,CADkD;AAAA,EA91H9B;AAAA,CAk2HxB,SAASw6C,2BAAT,CAAqCx6C,IAArC,EAA2C;AAAA,EACvC,OAAO,IAAIwgB,SAAJ,CAAc,+BAA+BxgB,IAA/B,GAAsC,wCAApD,CAAP,CADuC;AAAA,EAl2HnB;AAAA,CAs2HxB6C,OAAA,CAAQ41C,yBAAR,GAAoCA,yBAApC,CAt2HwB;AAAA,CAu2HxB51C,OAAA,CAAQi2C,oBAAR,GAA+BA,oBAA/B,CAv2HwB;AAAA,CAw2HxBj2C,OAAA,CAAQiiC,4BAAR,GAAuCA,4BAAvC,CAx2HwB;AAAA,CAy2HxBjiC,OAAA,CAAQ60C,cAAR,GAAyBA,cAAzB,CAz2HwB;AAAA,CA02HxB70C,OAAA,CAAQsnC,wBAAR,GAAmCA,wBAAnC,CA12HwB;AAAA,CA22HxBtnC,OAAA,CAAQmhC,yBAAR,GAAoCA,yBAApC,CA32HwB;AAAA,CA42HxBnhC,OAAA,CAAQ8xC,+BAAR,GAA0CA,+BAA1C,CA52HwB;AAAA,CA62HxB9xC,OAAA,CAAQm9B,2BAAR,GAAsCA,2BAAtC,CA72HwB;AAAA,CA82HxBn9B,OAAA,CAAQ22C,eAAR,GAA0BA,eAA1B,CA92HwB;AAAA,CA+2HxB32C,OAAA,CAAQw4C,gCAAR,GAA2CA,gCAA3C,CA/2HwB;AAAA,CAg3HxBx4C,OAAA,CAAQ2oC,cAAR,GAAyBA,cAAzB,CAh3HwB;AAAA,CAi3HxB3oC,OAAA,CAAQ+pC,+BAAR,GAA0CA,+BAA1C,CAj3HwB;AAAA,CAk3HxB/pC,OAAA,CAAQ0pC,2BAAR,GAAsCA,2BAAtC,CAl3HwB;AAAA,CAo3HxBzsC,MAAA,CAAO+f,cAAP,CAAsBhd,OAAtB,EAA+B,YAA/B,EAA6C,EAAEX,KAAA,EAAO,IAAT,EAA7C,EAp3HwB;AAAA,CAJ3B,CAAD,E;;;;;;ACHA4a,mBAAA,CAAQ,GAAR;AACA,IAAI0/B,WAAA,GAAc1/B,mBAAA,CAAQ,GAAR,CAAlB,CADA;AAGApb,MAAA,CAAOmB,OAAP,GAAiB25C,WAAA,CAAY,QAAZ,EAAsB,UAAtB,CAAjB,C;;;;;;;ACHa;AACb,IAAIp/B,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAI2/B,SAAA,GAAY3/B,8BAAhB,CAFA;AAGA,IAAI4/B,UAAA,GAAa5/B,mBAAA,CAAQ,GAAR,CAAjB,CAHA;AAOAM,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,QAAV;AAAA,CAAoBwN,KAAA,EAAO,IAA3B;AAAA,CAAiC9M,MAAA,EAAQi+B,UAAzC;AAAA,CAAF,EAAyD;AAAA,CACvDC,QAAA,EAAU,SAASA,QAAT,CAAkBC,SAAlB,EAAsD;AAAA,EAC9D,OAAOH,SAAA,CAAU,IAAV,EAAgBG,SAAhB,EAA2Bv4B,SAAA,CAAUjM,MAAV,GAAmB,CAAnB,GAAuBiM,SAAA,CAAU,CAAV,CAAvB,GAAsC3F,SAAjE,CAAP,CAD8D;AAAA,EADT;AAAA,CAAzD,E;;;;;;ACNA,IAAIiG,QAAA,GAAW7H,mBAAA,CAAQ,EAAR,CAAf,CADA;AAEA,IAAI+/B,MAAA,GAAS//B,mBAAA,CAAQ,GAAR,CAAb,CAFA;AAGA,IAAIsD,sBAAA,GAAyBtD,mBAAA,CAAQ,EAAR,CAA7B,CAHA;AAKA,IAAIyI,IAAA,GAAO3nB,IAAA,CAAK2nB,IAAhB,CALA;AAQA,IAAIV,YAAA,GAAe,UAAUi4B,MAAV,EAAkB;AAAA,CACnC,OAAO,UAAU/3B,KAAV,EAAiB63B,SAAjB,EAA4BG,UAA5B,EAAwC;AAAA,EAC7C,IAAIrpB,CAAA,GAAIpb,MAAA,CAAO8H,sBAAA,CAAuB2E,KAAvB,CAAP,CAAR,CAD6C;AAAA,EAE7C,IAAIi4B,YAAA,GAAetpB,CAAA,CAAEtb,MAArB,CAF6C;AAAA,EAG7C,IAAI6kC,OAAA,GAAUF,UAAA,KAAer+B,SAAf,GAA2B,GAA3B,GAAiCpG,MAAA,CAAOykC,UAAP,CAA/C,CAH6C;AAAA,EAI7C,IAAIG,YAAA,GAAev4B,QAAA,CAASi4B,SAAT,CAAnB,CAJ6C;AAAA,EAK7C,IAAIO,OAAJ,EAAaC,YAAb,CAL6C;AAAA,EAM7C,IAAIF,YAAA,IAAgBF,YAAhB,IAAgCC,OAAA,IAAW,EAA/C;AAAA,GAAmD,OAAOvpB,CAAP,CANN;AAAA,EAO7CypB,OAAA,GAAUD,YAAA,GAAeF,YAAzB,CAP6C;AAAA,EAQ7CI,YAAA,GAAeP,MAAA,CAAOl9B,IAAP,CAAYs9B,OAAZ,EAAqB13B,IAAA,CAAK43B,OAAA,GAAUF,OAAA,CAAQ7kC,MAAvB,CAArB,CAAf,CAR6C;AAAA,EAS7C,IAAIglC,YAAA,CAAahlC,MAAb,GAAsB+kC,OAA1B;AAAA,GAAmCC,YAAA,GAAeA,YAAA,CAAa78B,KAAb,CAAmB,CAAnB,EAAsB48B,OAAtB,CAAf,CATU;AAAA,EAU7C,OAAOL,MAAA,GAASppB,CAAA,GAAI0pB,YAAb,GAA4BA,YAAA,GAAe1pB,CAAlD,CAV6C;AAAA,EAA/C,CADmC;AAAA,CAArC,CARA;AAuBAhyB,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CAGf1C,KAAA,EAAO0kB,YAAA,CAAa,KAAb,CAHQ;AAAA,CAMfxlB,GAAA,EAAKwlB,YAAA,CAAa,IAAb,CANU;AAAA,CAAjB,C;;;;;;;ACvBa;AACb,IAAIO,SAAA,GAAYtI,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAEA,IAAIsD,sBAAA,GAAyBtD,mBAAA,CAAQ,EAAR,CAA7B,CAFA;AAMApb,MAAA,CAAOmB,OAAP,GAAiB,SAASg6C,MAAT,CAAgBQ,KAAhB,EAAuB;AAAA,CACtC,IAAInlC,GAAA,GAAMI,MAAA,CAAO8H,sBAAA,CAAuB,IAAvB,CAAP,CAAV,CADsC;AAAA,CAEtC,IAAIjc,MAAA,GAAS,EAAb,CAFsC;AAAA,CAGtC,IAAIuV,CAAA,GAAI0L,SAAA,CAAUi4B,KAAV,CAAR,CAHsC;AAAA,CAItC,IAAI3jC,CAAA,GAAI,CAAJ,IAASA,CAAA,IAAKopB,QAAlB;AAAA,EAA4B,MAAMO,UAAA,CAAW,6BAAX,CAAN,CAJU;AAAA,CAKtC,OAAM3pB,CAAA,GAAI,CAAV,EAAc,CAAAA,CAAA,MAAO,CAAP,CAAD,IAAe,CAAAxB,GAAA,IAAOA,GAAP,CAA5B;AAAA,EAAyC,IAAIwB,CAAA,GAAI,CAAR;AAAA,GAAWvV,MAAA,IAAU+T,GAAV,CALd;AAAA,CAMtC,OAAO/T,MAAP,CANsC;AAAA,CAAxC,C;;;;;;ACLA,IAAIqjB,SAAA,GAAY1K,mBAAA,CAAQ,EAAR,CAAhB,CADA;AAIApb,MAAA,CAAOmB,OAAP,GAAiB,mDAAmDmgB,IAAnD,CAAwDwE,SAAxD,CAAjB,C;;;;;;ACJA,IAAInK,MAAA,GAASP,mBAAA,CAAQ,EAAR,CAAb;AACA,IAAI0P,IAAA,GAAO1P,mBAAA,CAAQ,EAAR,CAAX,CADA;AAGA,IAAI6C,IAAA,GAAO3Y,QAAA,CAAS2Y,IAApB,CAHA;AAKAje,MAAA,CAAOmB,OAAP,GAAiB,UAAUy6C,WAAV,EAAuBC,MAAvB,EAA+BnlC,MAA/B,EAAuC;AAAA,CACtD,OAAOoU,IAAA,CAAK7M,IAAL,EAAWtC,MAAA,CAAOigC,WAAP,EAAoB/+B,SAApB,CAA8Bg/B,MAA9B,CAAX,EAAkDnlC,MAAlD,CAAP,CADsD;AAAA,CAAxD,C;;;;;;ACLA0E,mBAAA,CAAQ,GAAR;AACA,IAAI0/B,WAAA,GAAc1/B,mBAAA,CAAQ,GAAR,CAAlB,CADA;AAGApb,MAAA,CAAOmB,OAAP,GAAiB25C,WAAA,CAAY,QAAZ,EAAsB,QAAtB,CAAjB,C;;;;;;;ACHa;AACb,IAAIp/B,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR,CADA;AAEA,IAAI0gC,OAAA,GAAU1gC,4BAAd,CAFA;AAGA,IAAI4/B,UAAA,GAAa5/B,mBAAA,CAAQ,GAAR,CAAjB,CAHA;AAOAM,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,QAAV;AAAA,CAAoBwN,KAAA,EAAO,IAA3B;AAAA,CAAiC9M,MAAA,EAAQi+B,UAAzC;AAAA,CAAF,EAAyD;AAAA,CACvDe,MAAA,EAAQ,SAASA,MAAT,CAAgBb,SAAhB,EAAoD;AAAA,EAC1D,OAAOY,OAAA,CAAQ,IAAR,EAAcZ,SAAd,EAAyBv4B,SAAA,CAAUjM,MAAV,GAAmB,CAAnB,GAAuBiM,SAAA,CAAU,CAAV,CAAvB,GAAsC3F,SAA/D,CAAP,CAD0D;AAAA,EADL;AAAA,CAAzD,E;;;;;;ACPA5B,mBAAA,CAAQ,GAAR;AACA,IAAImH,IAAA,GAAOnH,mBAAA,CAAQ,EAAR,CAAX,CADA;AAGApb,MAAA,CAAOmB,OAAP,GAAiBohB,IAAA,CAAKnkB,MAAL,CAAY2D,MAA7B,C;;;;;;ACHA,IAAI2Z,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR;AACA,IAAI4gC,OAAA,GAAU5gC,+BAAd,CADA;AAKAM,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,QAAV;AAAA,CAAoBG,IAAA,EAAM,IAA1B;AAAA,CAAF,EAAoC;AAAA,CAClCza,MAAA,EAAQ,SAASA,MAAT,CAAgBiL,CAAhB,EAAmB;AAAA,EACzB,OAAOgvC,OAAA,CAAQhvC,CAAR,CAAP,CADyB;AAAA,EADO;AAAA,CAApC,E;;;;;;ACLA,IAAIsQ,WAAA,GAAclC,mBAAA,CAAQ,EAAR,CAAlB;AACA,IAAI4M,UAAA,GAAa5M,mBAAA,CAAQ,EAAR,CAAjB,CADA;AAEA,IAAIqC,eAAA,GAAkBrC,mBAAA,CAAQ,EAAR,CAAtB,CAFA;AAGA,IAAIkD,oBAAA,GAAuBlD,yBAA3B,CAHA;AAMA,IAAI+H,YAAA,GAAe,UAAU84B,UAAV,EAAsB;AAAA,CACvC,OAAO,UAAU9+B,EAAV,EAAc;AAAA,EACnB,IAAInQ,CAAA,GAAIyQ,eAAA,CAAgBN,EAAhB,CAAR,CADmB;AAAA,EAEnB,IAAItZ,IAAA,GAAOmkB,UAAA,CAAWhb,CAAX,CAAX,CAFmB;AAAA,EAGnB,IAAI0J,MAAA,GAAS7S,IAAA,CAAK6S,MAAlB,CAHmB;AAAA,EAInB,IAAIlZ,CAAA,GAAI,CAAR,CAJmB;AAAA,EAKnB,IAAIiF,MAAA,GAAS,EAAb,CALmB;AAAA,EAMnB,IAAIqB,GAAJ,CANmB;AAAA,EAOnB,OAAO4S,MAAA,GAASlZ,CAAhB,EAAmB;AAAA,GACjBsG,GAAA,GAAMD,IAAA,CAAKrG,CAAA,EAAL,CAAN,CADiB;AAAA,GAEjB,IAAI,CAAC8f,WAAD,IAAgBgB,oBAAA,CAAqBL,IAArB,CAA0BjR,CAA1B,EAA6BlJ,GAA7B,CAApB,EAAuD;AAAA,IACrDrB,MAAA,CAAOgf,IAAP,CAAYw6B,UAAA,GAAa;AAAA,KAACn4C,GAAD;AAAA,KAAMkJ,CAAA,CAAElJ,GAAF,CAAN;AAAA,KAAb,GAA6BkJ,CAAA,CAAElJ,GAAF,CAAzC,EADqD;AAAA,IAFtC;AAAA,GAPA;AAAA,EAanB,OAAOrB,MAAP,CAbmB;AAAA,EAArB,CADuC;AAAA,CAAzC,CANA;AAwBAzC,MAAA,CAAOmB,OAAP,GAAiB;AAAA,CAGfkoB,OAAA,EAASlG,YAAA,CAAa,IAAb,CAHM;AAAA,CAMfphB,MAAA,EAAQohB,YAAA,CAAa,KAAb,CANO;AAAA,CAAjB,C;;;;;;ACxBA/H,mBAAA,CAAQ,GAAR;AACA,IAAImH,IAAA,GAAOnH,mBAAA,CAAQ,EAAR,CAAX,CADA;AAGApb,MAAA,CAAOmB,OAAP,GAAiBohB,IAAA,CAAKnkB,MAAL,CAAYirB,OAA7B,C;;;;;;ACHA,IAAI3N,CAAA,GAAIN,mBAAA,CAAQ,CAAR,CAAR;AACA,IAAI8gC,QAAA,GAAW9gC,gCAAf,CADA;AAKAM,CAAA,CAAE;AAAA,CAAEW,MAAA,EAAQ,QAAV;AAAA,CAAoBG,IAAA,EAAM,IAA1B;AAAA,CAAF,EAAoC;AAAA,CAClC6M,OAAA,EAAS,SAASA,OAAT,CAAiBrc,CAAjB,EAAoB;AAAA,EAC3B,OAAOkvC,QAAA,CAASlvC,CAAT,CAAP,CAD2B;AAAA,EADK;AAAA,CAApC,E;;;;;;;;;;;;;;;;;;ACcA;;AAmBA;;AAUA;;AACA;;AAjDA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,IAAMmvC,2BA7DN,KA6DA;AACA,IAAMC,8BA9DN,GA8DA;AAEA,IAAMC,uBACJ,oDAjEF,+BAgEA;;AAIA,IAAMC,2BACJ,wDArEF,mCAoEA;;AAkBA,IAtFA,sBAsFA;;AAWA,6DAA6D;AAC3DC,2BAD2D,uBAC3DA;AAlGF;;AAuMA,0BAA0B;AACxB,MAAMtvB,OAAO,IADW,sBACX,EAAb;AAEA,MAHwB,MAGxB;;AACA,MAAI,2BAA2BxF,eAA/B,KAAmD;AACjDtL,aAAS;AAAE/hB,WADsC;AACxC,KAAT+hB;AADF,SAEO,IAAIqgC,yBAAJ,GAAIA,CAAJ,EAAwB;AAC7BrgC,aAAS;AAAE/E,YADkB;AACpB,KAAT+E;AADK,SAEA,IAAIsL,eAAJ,uBAA0C;AAC/CtL,aAAS;AAAEsgC,aADoC;AACtC,KAATtgC;AADK,SAEA;AACL,QAAI,iBAAJ,UAA6B;AAC3B,YAAM,UACJ,uCAFyB,2DACrB,CAAN;AAFG;;AAOL,QAAI,CAACsL,IAAD,OAAY,CAACA,IAAb,QAAyB,CAACA,IAA9B,OAAyC;AACvC,YAAM,UADiC,6DACjC,CAAN;AARG;;AAYLtL,aAZK,GAYLA;AAtBsB;;AAwBxB,MAAMugC,SAASt+C,cAxBS,IAwBTA,CAAf;AACA,MAAIu+C,iBAAJ;AAAA,MACEC,SA1BsB,IAyBxB;;AAGA,0BAA0B;AACxB,QAAMp8C,QAAQ2b,OADU,GACVA,CAAd;;AAEA;AACE;AACE,YAAI,kBAAJ,aAAmC;AACjC,cAAI;AAEFugC,0BAAc,eAAet/B,OAAf,UAFZ,IAEFs/B;AAFE;AAAJ,YAIE,WAAW;AACX5+C,iEADW,EACXA;AAN+B;AAAnC,eAQO,IAAI,6BAA6B0C,iBAAjC,KAAuD;AAC5Dk8C,wBAAcl8C,MAD8C,QAC9CA,EAAdk8C;AAD4D;AAThE;;AAaE,cAAM,UACJ,2BAfN,8DAcU,CAAN;;AAIF;AACEC,yBADF,KACEA;AAnBJ;;AAqBE;AACEC,iBADF,KACEA;AAtBJ;;AAwBE;AAEE,YACE,qBAGA,kBAHA,eAIAp8C,iBALF,QAME;AACAk8C,wBAAc,eADd,KACc,CAAdA;AAPF,eAQO,IAAIl8C,iBAAJ,YAAiC;AAAA;AAAjC,eAEA,IAAI,iBAAJ,UAA+B;AACpCk8C,wBAAc5hD,yBADsB,KACtBA,CAAd4hD;AADK,eAEA,IACL,+BACAl8C,UADA,QAEA,CAAC0D,MAAM1D,MAHF,MAGJ0D,CAHI,EAIL;AACAw4C,wBAAc,eADd,KACc,CAAdA;AALK,eAMA,IAAIF,yBAAJ,KAAIA,CAAJ,EAA0B;AAC/BE,wBAAc,eADiB,KACjB,CAAdA;AADK,eAEA;AACL,gBAAM,UACJ,kDAFG,gEACC,CAAN;AAvBJ;;AAxBF;AAAA;;AAsDAA,kBAzDwB,KAyDxBA;AArFsB;;AAwFxBA,0BAAwBA,yBAxFA,wBAwFxBA;AACAA,6BACEA,4BA1FsB,wBAyFxBA;AAEAA,wBAAsBA,wBA3FE,IA2FxBA;AACAA,+BAA6BA,+BA5FL,IA4FxBA;AACAA,kBAAgBA,kBA7FQ,IA6FxBA;AACAA,qBAAmBA,qBA9FK,IA8FxBA;;AAEA,MACE,OAAOA,OAAP,2BACA7+C,iCAAa6+C,OAFf,UAEE7+C,CAFF,EAGE;AAIA6+C,wBAJA,IAIAA;AAvGsB;;AAyGxB,MAAI,CAACzmC,iBAAiBymC,OAAtB,YAAKzmC,CAAL,EAA4C;AAC1CymC,0BAAsB,CADoB,CAC1CA;AA1GsB;;AA4GxB,MAAI,OAAOA,OAAP,oBAAJ,WAAiD;AAC/CA,6BAD+C,IAC/CA;AA7GsB;;AA+GxB,MAAI,OAAOA,OAAP,oBAAJ,WAAiD;AAC/CA,6BAAyBG,6DADsB,KAC/CH;AAhHsB;;AAkHxB,MAAI,OAAOA,OAAP,kBAAJ,aAAiD;AAC/CA,2BAAuB3iD,WADwB,QAC/C2iD;AAnHsB;;AAsHxB,MAAI,OAAOA,OAAP,iBAAJ,WAA8C;AAC5CA,0BAD4C,KAC5CA;AAvHsB;;AAyHxB,MAAI,OAAOA,OAAP,kBAAJ,WAA+C;AAC7CA,2BAD6C,KAC7CA;AA1HsB;;AA4HxB,MAAI,OAAOA,OAAP,qBAAJ,WAAkD;AAChDA,8BADgD,KAChDA;AA7HsB;;AAiIxBI,+BAAkBJ,OAjIM,SAiIxBI;;AAEA,MAAI,CAAJ,QAAa;AACX,QAAMC,eAAe;AACnB/mC,iBAAW0mC,OADQ;AAEnB9pB,YAAMoqB,oCAFa;AAAA,KAArB;AAMAJ,aAASG,oBACLE,mBADKF,YACLE,CADKF,GAEL,cATO,YASP,CAFJH;AAGA3vB,mBAVW,MAUXA;AA7IsB;;AA+IxB,MAAMiwB,QAAQjwB,KA/IU,KA+IxB;AACA2vB,sBACQ,YAAY;AAChB,QAAI3vB,KAAJ,WAAoB;AAClB,YAAM,UADY,iBACZ,CAAN;AAFc;;AAKhB,QAAMkwB,kBAAkBC,+CALR,KAKQA,CAAxB;;AAMA,QAAMC,uBAAuB,YAAY,mBAAmB;AAC1D,UAD0D,aAC1D;;AACA,0BAAoB;AAClBC,wBAAgB,6CACd;AACE5mC,kBAAQgmC,OADV;AAEEa,uBAAab,OAFf;AAGEc,2BAAiBd,OAHnB;AAIEe,sCAA4Bf,OAJ9B;AAKEgB,wBAAchB,OALhB;AAMEiB,yBAAejB,OANjB;AAAA,SADc,EADE,cACF,CAAhBY;AADF,aAYO,IAAI,CAACZ,OAAL,MAAkB;AACvBY,wBAAgB,uBAAuB;AACrCljD,eAAKsiD,OADgC;AAErChmC,kBAAQgmC,OAF6B;AAGrCkB,uBAAalB,OAHwB;AAIrCmB,2BAAiBnB,OAJoB;AAKrCoB,0BAAgBpB,OALqB;AAMrCgB,wBAAchB,OANuB;AAOrCiB,yBAAejB,OAPsB;AAAA,SAAvB,CAAhBY;AAfwD;;AAyB1DriD,cAzB0D,aAyB1DA;AApCc,KAWa,CAA7B;AA4BA,WAAO,YAAY,uCAAZ,OACL,gBAAqC;AAAA;AAAA,UAA3B,QAA2B;AAAA,UAArC,aAAqC;;AACnC,UAAIgyB,KAAJ,WAAoB;AAClB,cAAM,UADY,iBACZ,CAAN;AAFiC;;AAKnC,UAAM8wB,iBAAiB,qDAGrBnB,OARiC,IAKZ,CAAvB;AAKAmB,4CAAsCnB,OAVH,oBAUnCmB;AACA,UAAMC,YAAY,yDAXiB,MAWjB,CAAlB;AAMA/wB,wBAjBmC,SAiBnCA;AACA8wB,mCAlBmC,IAkBnCA;AA1DY,KAuCT,CAAP;AAxCJnB,cA+DS3vB,iBA/Me,MAgJxB2vB;AAiEA,SAjNwB,IAiNxB;AAxZF;;AAsaA,sEAAsE;AACpE,MAAIA,OAAJ,WAAsB;AACpB,WAAOxwB,eAAe,UADF,sBACE,CAAfA,CAAP;AAFkE;;AAKpE,6BAA2B;AACzBjQ,oBAAgB8hC,sBADS,MACzB9hC;AACAA,yBAAqB8hC,sBAFI,WAEzB9hC;AACAA,6BAAyB8hC,sBAHA,eAGzB9hC;AACAA,wCACE8hC,sBALuB,0BAIzB9hC;AATkE;;AAYpE,SAAO,uDAC6B;AAChC+gC,SADgC,EAChCA,KADgC;AAEhCgB,gBAFgC;AAOhC/hC,YAAQ;AACN/E,YAAM+E,OADA;AAEN/hB,WAAK+hB,OAFC;AAGNgiC,gBAAUhiC,OAHJ;AAINiiC,wBAAkBjiC,OAJZ;AAKN2hC,sBAAgB3hC,OALV;AAMNzF,cAAQyF,OANF;AAAA,KAPwB;AAehCkiC,kBAAcliC,OAfkB;AAgBhCmiC,qBAAiBniC,OAhBe;AAiBhCoiC,0BAAsB3B,OAjBU;AAkBhC4B,gBAAYriC,OAlBoB;AAmBhCsiC,kBAActiC,OAnBkB;AAoBhCtE,qBAAiBsE,OApBe;AAqBhCuiC,yBAAqBviC,OArBW;AAsBhCwiC,eAAWxiC,OAtBqB;AAAA,GAD7B,OAyBC,oBAAoB;AACxB,QAAIygC,OAAJ,WAAsB;AACpB,YAAM,UADc,sBACd,CAAN;AAFsB;;AAIxB,WAJwB,QAIxB;AAzCgE,GAY7D,CAAP;AAlbF;;AAifA,IAAMgC,yBAA0B,yCAAyC;AACvE,MAAIC,iBADmE,CACvE;;AADuE,MASvE,sBATuE;AAUrEvlD,sCAAc;AAAA;;AACZ,yBADY,oCACZ;AACA,wBAFY,IAEZ;AACA,qBAHY,IAGZ;AAMA,mBAAa,MAAMulD,cATP,EASZ;AAMA,uBAfY,KAeZ;AAQA,wBAvBY,IAuBZ;AASA,wBAhCY,IAgCZ;AAOA,kCAvCY,IAuCZ;AAxCyB;;AAT0C;AAAA;AAAA,WAwDrE,eAAc;AACZ,eAAO,iBADK,OACZ;AAhDyB;AAT0C;AAAA;AAAA,aAgErEhlD,mBAAU;AAAA;;AACR,yBADQ,IACR;AAEA,YAAMilD,qBAAqB,CAAC,KAAD,aACvB1yB,QADuB,OACvBA,EADuB,GAEvB,gBALI,OAKJ,EAFJ;AAGA,eAAO,wBAAwB,YAAM;AACnC,6BADmC,IACnC;;AACA,cAAI,MAAJ,SAAkB;AAChB,0BADgB,OAChB;;AACA,4BAFgB,IAEhB;AAJiC;AAN7B,SAMD,CAAP;AA7DyB;AAT0C;;AAAA;AAAA;;AA+EvE,SA/EuE,sBA+EvE;AAhkBF,CAifgC,EAAhC;;IAqFA,qB;AAOE9yB,sDAKE;AAAA,QAFAkkD,eAEA,uEALFlkD,KAKE;AAAA,QADAmkD,0BACA,uEALFnkD,IAKE;;AAAA;;AACA,kBADA,MACA;AACA,uBAFA,WAEA;AACA,2BAHA,eAGA;AACA,sCAJA,0BAIA;AAEA,2BANA,EAMA;AACA,8BAPA,EAOA;AACA,qCARA,EAQA;AACA,qCATA,EASA;AACA,4BAVA,oCAUA;AAtBwB;;;;WAyB1BylD,oCAA2B;AACzB,gCADyB,QACzB;AA1BwB;;;WA6B1BC,uCAA8B;AAC5B,mCAD4B,QAC5B;AA9BwB;;;WAiC1BC,8CAAqC;AACnC,0CADmC,QACnC;AAlCwB;;;WAqC1BC,8CAAqC;AACnC,0CADmC,QACnC;AAtCwB;;;WAyC1BC,mCAA0B;AAAA,iDACD,KAAvB,eADwB;AAAA;;AAAA;AACxB,4DAA6C;AAAA,cAA7C,QAA6C;AAC3CpsB,0BAD2C,KAC3CA;AAFsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;;;WA+C1BqsB,uCAA8B;AAAA;;AAC5B,yCAAmC,YAAM;AAAA,oDAChB,OAAvB,kBADuC;AAAA;;AAAA;AACvC,iEAAgD;AAAA,gBAAhD,QAAgD;AAC9CrsB,6BAD8C,KAC9CA;AAFqC;AAAA;AAAA;AAAA;AAAA;AAAA;AADb,OAC5B;AAhDwB;;;WAuD1BssB,sCAA6B;AAAA;;AAC3B,yCAAmC,YAAM;AAAA,oDAChB,OAAvB,yBADuC;AAAA;;AAAA;AACvC,iEAAuD;AAAA,gBAAvD,QAAuD;AACrDtsB,qBADqD,KACrDA;AAFqC;AAAA;AAAA;AAAA;AAAA;AAAA;AADd,OAC3B;AAxDwB;;;WA+D1BusB,iCAAwB;AAAA;;AACtB,yCAAmC,YAAM;AAAA,oDAChB,OAAvB,yBADuC;AAAA;;AAAA;AACvC,iEAAuD;AAAA,gBAAvD,QAAuD;AACrDvsB,oBADqD;AADhB;AAAA;AAAA;AAAA;AAAA;AAAA;AADnB,OACtB;AAhEwB;;;WAuE1BwsB,0BAAiB;AACf,4BADe,OACf;AAxEwB;;;WA2E1BC,sCAA6B;AAC3BjmD,6BAD2B,wDAC3BA;AA5EwB;;;WA+E1BgwC,iBAAQ,CA/EkB;;;;;;;;IAqF5B,gB;AACEjwC,gDAAgC;AAAA;;AAC9B,oBAD8B,OAC9B;AACA,sBAF8B,SAE9B;AAHmB;;;;SASrB,eAAwB;AACtB,aAAOoe,6CAAkC,IADnB,qCACmB,EAAlCA,CAAP;AAVmB;;;SAgBrB,eAAe;AACb,aAAO,cADM,QACb;AAjBmB;;;SAuBrB,eAAkB;AAChB,aAAO,cADS,WAChB;AAxBmB;;;SA8BrB,eAAgB;AACd,aAAO,cADO,SACd;AA/BmB;;;WAuCrB+nC,6BAAoB;AAClB,aAAO,wBADW,UACX,CAAP;AAxCmB;;;WAkDrBC,2BAAkB;AAChB,aAAO,6BADS,GACT,CAAP;AAnDmB;;;WA4DrBC,2BAAkB;AAChB,aAAO,gBADS,eACT,EAAP;AA7DmB;;;WAqErBC,4BAAmB;AACjB,aAAO,+BADU,EACV,CAAP;AAtEmB;;;WA8ErBC,yBAAgB;AACd,aAAO,gBADO,aACP,EAAP;AA/EmB;;;WAsFrBC,yBAAgB;AACd,aAAO,gBADO,aACP,EAAP;AAvFmB;;;WA8FrBC,uBAAc;AACZ,aAAO,gBADK,WACL,EAAP;AA/FmB;;;WAuGrBC,gCAAuB;AACrB,aAAO,gBADc,oBACd,EAAP;AAxGmB;;;WAgHrBC,yBAAgB;AACd,aAAO,gBADO,aACP,EAAP;AAjHmB;;;WAwHrBC,0BAAiB;AACf,aAAO,gBADQ,cACR,EAAP;AAzHmB;;;WAiIrBC,yBAAgB;AACd,aAAO,gBADO,aACP,EAAP;AAlImB;;;WA4IrBC,wBAAe;AACb,aAAO,gBADM,eACN,EAAP;AA7ImB;;;WAmKrBC,sBAAa;AACX,aAAO,gBADI,UACJ,EAAP;AApKmB;;;WA4KrBC,oCAA2B;AACzB,aAAO,gBADkB,wBAClB,EAAP;AA7KmB;;;WAqLrBC,0BAAiB;AACf,aAAO,gBADQ,cACR,EAAP;AAtLmB;;;WAgMrBC,uBAAc;AACZ,aAAO,gBADK,WACL,EAAP;AAjMmB;;;WAiNrBC,uBAAc;AACZ,aAAO,gBADK,WACL,EAAP;AAlNmB;;;WAyNrBC,mBAAU;AACR,aAAO,gBADC,OACD,EAAP;AA1NmB;;;WAkOrBC,2BAAkB;AAChB,aAAO,uCADS,OAChB;AAnOmB;;;WAqPrBC,oBAAW;AACT,aAAO,gBADE,QACF,EAAP;AAtPmB;;;WAqQrBC,mBAAiC;AAAA,UAAzBC,eAAyB,uEAAjCD,KAAiC;AAC/B,aAAO,6BAA6BC,mBAAmB,KADxB,SACxB,CAAP;AAtQmB;;;WA4QrBjnD,mBAAU;AACR,aAAO,iBADC,OACD,EAAP;AA7QmB;;;SAqRrB,eAAoB;AAClB,aAAO,gBADW,aAClB;AAtRmB;;;SA4RrB,eAAkB;AAChB,aAAO,gBADS,WAChB;AA7RmB;;;WAsSrBknD,yCAAgC;AAC9B,aAAO,6BADuB,iBACvB,CAAP;AAvSmB;;;WA+SrBC,2BAAkB;AAChB,aAAO,gBADS,eACT,EAAP;AAhTmB;;;WAuTrBC,wBAAe;AACb,aAAO,gBADM,YACN,EAAP;AAxTmB;;;WAgUrBC,kCAAyB;AACvB,aAAO,gBADgB,sBAChB,EAAP;AAjUmB;;;;;;;;IAobvB,Y;AACE5nD,uEAA2E;AAAA,QAAhB6nD,MAAgB,uEAA3E7nD,KAA2E;;AAAA;;AACzE,sBADyE,SACzE;AACA,qBAFyE,QAEzE;AACA,0BAHyE,aAGzE;AACA,sBAJyE,SAIzE;AACA,kBAAc6nD,SAAS,IAATA,wBAAS,EAATA,GAL2D,IAKzE;AACA,mBANyE,MAMzE;AACA,sBAAkBnD,UAPuD,UAOzE;AACA,gBAAY,IAR6D,UAQ7D,EAAZ;AAEA,8BAVyE,KAUzE;AACA,0BAXyE,KAWzE;AACA,yBAAqB,IAZoD,GAYpD,EAArB;AACA,qBAbyE,KAazE;AAde;;;;SAoBjB,eAAiB;AACf,aAAO,kBADQ,CACf;AArBe;;;SA2BjB,eAAa;AACX,aAAO,eADI,MACX;AA5Be;;;SAmCjB,eAAU;AACR,aAAO,eADC,GACR;AApCe;;;SA0CjB,eAAe;AACb,aAAO,eADM,QACb;AA3Ce;;;SAkDjB,eAAW;AACT,aAAO,eADE,IACT;AAnDe;;;WA2DjBoD,uBAMQ;AAAA,sFANRA,EAMQ;AAAA,UANI,KAMJ,SANI,KAMJ;AAAA,iCAJNxlD,QAIM;AAAA,UAJNA,QAIM,+BAJK,KAFD,MAMJ;AAAA,gCAHNN,OAGM;AAAA,UAHNA,OAGM,8BANI,CAMJ;AAAA,gCAFNC,OAEM;AAAA,UAFNA,OAEM,8BANI,CAMJ;AAAA,iCADNC,QACM;AAAA,UADNA,QACM,+BANI,KAMJ;;AACN,aAAO,gCAAiB;AACtBE,iBAAS,KADa;AAEtBW,aAFsB,EAEtBA,KAFsB;AAGtBT,gBAHsB,EAGtBA,QAHsB;AAItBN,eAJsB,EAItBA,OAJsB;AAKtBC,eALsB,EAKtBA,OALsB;AAMtBC,gBANsB,EAMtBA;AANsB,OAAjB,CAAP;AAlEe;;;WAiFjB6lD,0BAAuC;AAAA,sFAAvCA,EAAuC;AAAA,+BAAtBC,MAAsB;AAAA,UAAtBA,MAAsB,6BAAxB,IAAwB;;AACrC,UAAI,CAAC,KAAD,uBAA6B,4BAAjC,QAAqE;AACnE,mCAA2B,+BACzB,KADyB,YADwC,MACxC,CAA3B;AAIA,kCALmE,MAKnE;AANmC;;AAQrC,aAAO,KAR8B,mBAQrC;AAzFe;;;WAgGjBlB,wBAAe;AACb,aAAQ,sBAAR,KAAQ,sBAAR,GAAmC,iCACjC,KAFW,UACsB,CAAnC;AAjGe;;;WA4GjBmB,kBAAS;AACP,aAAQ,gBAAR,KAAQ,gBAAR,GAA6B,2BAA2B,KADjD,UACsB,CAA7B;AA7Ge;;;WAuHjBC,uBAYG;AAAA;AAAA;;AAAA,UAZI,aAYJ,SAZI,aAYJ;AAAA,UAZI,QAYJ,SAZI,QAYJ;AAAA,+BATDF,MASC;AAAA,UATDA,MASC,6BAZI,SAYJ;AAAA,oCARDG,WAQC;AAAA,UARDA,WAQC,kCAZI,KAYJ;AAAA,wCAPDC,sBAOC;AAAA,UAPDA,sBAOC,sCAZI,KAYJ;AAAA,kCANDjyC,SAMC;AAAA,UANDA,SAMC,gCAZI,IAYJ;AAAA,mCALDkyC,UAKC;AAAA,UALDA,UAKC,iCAZI,IAYJ;AAAA,sCAJDC,aAIC;AAAA,UAJDA,aAIC,oCAZI,IAYJ;AAAA,mCAHDC,UAGC;AAAA,UAHDA,UAGC,iCAZI,IAYJ;AAAA,wCAFDC,iBAEC;AAAA,UAFDA,iBAEC,sCAZI,IAYJ;AAAA,wCADDC,4BACC;AAAA,UADDA,4BACC,sCAZHP,IAYG;;AACD,UAAI,KAAJ,QAAiB;AACf,yBADe,SACf;AAFD;;AAKD,UAAMQ,kBAAkBV,+BALvB,SAKD;AAGA,4BARC,KAQD;;AAEA,UAAI,CAAJ,8BAAmC;AACjCS,uCAA+B,gBADE,wBACF,EAA/BA;AAXD;;AAcD,UAAIE,cAAc,uBAdjB,eAciB,CAAlB;;AACA,UAAI,CAAJ,aAAkB;AAChBA,sBAAc7jD,cADE,IACFA,CAAd6jD;;AACA,gDAFgB,WAEhB;AAjBD;;AAqBD,UAAIA,YAAJ,2BAA2C;AACzCC,qBAAaD,YAD4B,yBACzCC;AACAD,gDAFyC,IAEzCA;AAvBD;;AA0BD,UAAME,wBACJP,iBACA,yBAAyB;AAAE9nD,uBAAe,KA5B3C;AA4B0B,OAAzB,CAFF;AAGA,UAAMsoD,eAAe,wBAAiB;AACpCC,gBA9BD;AA6BqC,OAAjB,CAArB;;AAMA,UAAI,CAACJ,YAAL,wBAAyC;AACvCA,6CADuC,oCACvCA;AACAA,mCAA2B;AACzBK,mBADyB;AAEzBC,qBAFyB;AAGzBC,qBAHyB;AAAA,SAA3BP;;AAMA,YAAI,KAAJ,QAAiB;AACf,2BADe,cACf;AATqC;;AAWvC,+BAAuB;AACrBQ,qBAAW,KADU;AAErBnB,kBAFqB;AAGrBI,kCAAwBA,2BAHH;AAIrBI,6BAAmBA,0GAJE;AAAA,SAAvB;AA9CD;;AAsDD,UAAMj9C,WAAWkZ,SAAXlZ,QAAWkZ,QAAS;AACxBkkC,0CADwB,kBACxBA;;AAIA,YAAI,6BAA2BD,oBAA/B,SAA4D;AAC1D,kCAD0D,IAC1D;AANsB;;AAQxB,eARwB,WAQxB;;AAEA,mBAAW;AACTU,+CADS,KACTA;;AAEA,oCAAwB;AACtBT,uBADsB,EACtBA,WADsB;AAEtB1nD,oBAFsB;AAAA,WAAxB;AAHF,eAOO;AACLmoD,wCADK,OACLA;AAlBsB;;AAoBxB,YAAI,OAAJ,QAAiB;AACf,gCADe,WACf;;AACA,gCAFe,SAEf;AAtBsB;AAtDzB,OAsDD;;AA0BA,UAAMA,qBAAqB,uBAAuB;AAChDrnB,kBADgD;AAGhDqhB,gBAAQ;AACNiG,uBADM,EACNA,aADM;AAENC,kBAFM,EAENA,QAFM;AAGNnzC,mBAHM,EAGNA,SAHM;AAINkyC,oBAJM,EAINA,UAJM;AAKNE,oBALM,EAKNA;AALM,SAHwC;AAUhDgB,cAAM,KAV0C;AAWhDC,oBAAY,KAXoC;AAYhDC,sBAAcd,YAZkC;AAahDQ,mBAAW,KAbqC;AAchDb,uBAdgD;AAehDQ,oBAfgD,EAehDA,YAfgD;AAgBhDY,kCAA0BhB,oBAhBsB;AAiBhDb,gBAAQ,KAjBwC;AAAA,OAAvB,CAA3B;AAoBC,+EAA4B,IAA7B,GAA6B,EAA5B,GAAD,GAAC,CApGA,kBAoGA;AACD,UAAM8B,aAAaP,mBArGlB,IAqGD;AAEAt2B,kBAAY,CACV61B,mCADU,sCAAZ71B,OAIQ,iBAA2C;AAAA;AAAA,YAA1C,YAA0C;AAAA,YAA3C,qBAA2C;;AAC/C,YAAI,OAAJ,gBAAyB;AACvBvnB,kBADuB;AAAA;AADsB;;AAK/C,YAAI,OAAJ,QAAiB;AACf,6BADe,WACf;AAN6C;;AAQ/C69C,8CAAsC;AACpCQ,sBADoC,EACpCA,YADoC;AAEpCC,+BAFoC,EAEpCA;AAFoC,SAAtCT;AAIAA,2BAZ+C,mBAY/CA;AAhBJt2B,kBAvGC,QAuGDA;AAoBA,aA3HC,UA2HD;AA9Pe;;;WAqQjBg3B,2BAAkB;AAChB,qCAA+B;AAC7B,YAAInB,yBAAJ,WAAwC;AACtCA,mDAAyCA,YADH,YACtCA;AAEAA,4CAHsC,UAGtCA;AAJ2B;AADf;;AAShB,UAAMD,kBATU,QAShB;;AACA,UAAIC,cAAc,uBAVF,eAUE,CAAlB;;AACA,UAAI,CAAJ,aAAkB;AAChBA,sBAAc7jD,cADE,IACFA,CAAd6jD;;AACA,gDAFgB,WAEhB;AAbc;;AAehB,UAfgB,UAehB;;AAEA,UAAI,CAACA,YAAL,sBAAuC;AAAA;;AACrCoB,qBAAajlD,cADwB,IACxBA,CAAbilD;AACAA,yCAFqC,mBAErCA;AACApB,2CAHqC,oCAGrCA;AACC,mFAA4B,IAA7B,GAA6B,EAA5B,GAAD,GAAC,CAJoC,UAIpC;AACDA,mCAA2B;AACzBK,mBADyB;AAEzBC,qBAFyB;AAGzBC,qBAHyB;AAAA,SAA3BP;;AAMA,YAAI,KAAJ,QAAiB;AACf,2BADe,cACf;AAZmC;;AAcrC,+BAAuB;AACrBQ,qBAAW,KADU;AAErBnB,kBAFqB;AAAA,SAAvB;AA/Bc;;AAoChB,aAAOW,iCApCS,OAoChB;AAzSe;;;WAgTjBqB,6BAGQ;AAAA,sFAHRA,EAGQ;AAAA,wCAFNC,mBAEM;AAAA,UAFNA,mBAEM,sCAHU,KAGV;AAAA,wCADNC,uBACM;AAAA,UADNA,uBACM,sCAHU,KAGV;;AACN,UAAMC,0BADA,GACN;AAEA,aAAO,gEAEL;AACEhB,mBAAW,KADb;AAEEc,6BAAqBA,wBAFvB;AAGEG,0BAAkBF,4BAHpB;AAAA,OAFK,EAOL;AACErb,uBADF;AAEEpS,YAFF,gBAEEA,WAFF,EAEoB;AAChB,iBAAO4tB,kBADS,MAChB;AAHJ;AAAA,OAPK,CAAP;AAtTe;;;WA2UjBC,0BAA4B;AAAA,UAAblH,MAAa,uEAA5BkH,EAA4B;AAC1B,UAAMC,iBAAiB,uBADG,MACH,CAAvB;AAEA,aAAO,YAAY,2BAA2B;AAC5C,wBAAgB;AACdnoB,6BAAmB,iBAA2B;AAAA;;AAAA,gBAAjB,KAAiB,SAAjB,KAAiB;AAAA,gBAA3B,IAA2B,SAA3B,IAA2B;;AAC5C,sBAAU;AACRzgC,sBADQ,WACRA;AADQ;AADkC;;AAK5CmD,0BAAculD,YAAdvlD,QAAkCoC,MALU,MAK5CpC;;AACAulD,uGAA0BnjD,MANkB,KAM5CmjD;;AACAG,gBAP4C;AAA9CpoB,aADc,MACdA;AAF0C;;AAa5C,YAAMA,SAASmoB,eAb6B,SAa7BA,EAAf;AACA,YAAMF,cAAc;AAClBI,iBADkB;AAElBC,kBAAQ5lD,cAFU,IAEVA;AAFU,SAApB;AAIA0lD,YAlB4C;AAHpB,OAGnB,CAAP;AA9Ue;;;WAwWjBG,oBAAW;AACT,uBADS,IACT;AACA,gCAA0B,KAA1B,cAFS,IAET;AAEA,UAAMC,SAJG,EAIT;;AAJS,kDAK2B,KAApC,aALS;AAAA;;AAAA;AAKT,+DAAwD;AAAA;AAAA,cAA7C,MAA6C;AAAA,cAAxD,WAAwD;;AACtD,kCAAwB;AACtBjC,uBADsB,EACtBA,WADsB;AAEtB1nD,oBAAQ,UAFc,qBAEd,CAFc;AAGtB4pD,mBAHsB;AAAA,WAAxB;;AAMA,cAAI7C,WAAJ,UAAyB;AAAA;AAP6B;;AAAA,sDAWrBW,YAAjC,WAXsD;AAAA;;AAAA;AAWtD,mEAA0D;AAAA,kBAA1D,kBAA0D;AACxDiC,0BAAYxB,mBAD4C,SACxDwB;AACAxB,iCAFwD,MAExDA;AAboD;AAAA;AAAA;AAAA;AAAA;AAAA;AAL/C;AAAA;AAAA;AAAA;AAAA;AAAA;;AAqBT,gBArBS,KAqBT;AACA,iCAtBS,IAsBT;AACA,+BAvBS,IAuBT;AACA,yBAxBS,IAwBT;AACA,4BAzBS,KAyBT;AACA,aAAOt2B,YA1BE,MA0BFA,CAAP;AAlYe;;;WA4YjBy0B,mBAA4B;AAAA,UAApBuD,UAAoB,uEAA5BvD,KAA4B;AAC1B,4BAD0B,IAC1B;AACA,aAAO,iBAFmB,UAEnB,CAAP;AA9Ye;;;WAqZjBwD,uBAAgC;AAAA,UAApBD,UAAoB,uEAAhCC,KAAgC;;AAC9B,UAAI,CAAC,KAAL,gBAA0B;AACxB,eADwB,KACxB;AAF4B;;AAAA,kDAIc,mBAA5C,MAA4C,EAJd;AAAA;;AAAA;AAI9B,+DAAyE;AAAA;AAAA,cAA9D,WAA8D,gBAA9D,WAA8D;AAAA,cAAzE,YAAyE,gBAAzE,YAAyE;;AACvE,cAAIC,wBAAwB,CAACvB,aAA7B,WAAqD;AACnD,mBADmD,KACnD;AAFqE;AAJ3C;AAAA;AAAA;AAAA;AAAA;AAAA;;AAU9B,yBAV8B,KAU9B;;AACA,gBAX8B,KAW9B;AACA,iCAZ8B,IAY9B;AACA,+BAb8B,IAa9B;AACA,yBAd8B,IAc9B;;AACA,UAAIqB,cAAc,KAAlB,QAA+B;AAC7B,sBAAc,IADe,wBACf,EAAd;AAhB4B;;AAkB9B,4BAlB8B,KAkB9B;AACA,aAnB8B,IAmB9B;AAxae;;;WA8ajBG,gDAAuC;AACrC,UAAMtC,cAAc,uBADiB,MACjB,CAApB;;AACA,UAAI,CAAJ,aAAkB;AAAA;AAFmB;;AAKrC,UAAI,KAAJ,QAAiB;AACf,4BADe,cACf;AANmC;;AAUrC,UAAIA,YAAJ,wBAAwC;AACtCA,mDADsC,YACtCA;AAXmC;AA9atB;;;WAgcjBuC,0DAAiD;AAE/C,WAAK,IAAIhnD,IAAJ,GAAWD,KAAKknD,kBAArB,QAA+CjnD,IAA/C,IAAuDA,CAAvD,IAA4D;AAC1DykD,8CAAsCwC,0BADoB,CACpBA,CAAtCxC;AACAA,gDAAwCwC,4BAFkB,CAElBA,CAAxCxC;AAJ6C;;AAM/CA,2CAAqCwC,kBANU,SAM/CxC;;AAN+C,kDASdA,YAAjC,WAT+C;AAAA;;AAAA;AAS/C,+DAA0D;AAAA,cAA1D,kBAA0D;AACxDS,6BADwD,mBACxDA;AAV6C;AAAA;AAAA;AAAA;AAAA;AAAA;;AAa/C,UAAI+B,kBAAJ,WAAiC;AAC/B,aAD+B,WAC/B;AAd6C;AAhchC;;;WAqdjBC,iCAAwB;AAAA;;AACtBvpD,wBACEg4B,KADFh4B,QADsB,6DACtBA;;AAKA,UAAM0oD,iBAAiB,iEAND,IAMC,CAAvB;;AAIA,UAAMnoB,SAASmoB,eAVO,SAUPA,EAAf;;AAEA,UAAM5B,cAAc,uBAAuB9uB,KAZrB,MAYF,CAApB;;AACA8uB,iCAbsB,MAatBA;;AAEA,UAAM6B,OAAO,SAAPA,IAAO,GAAM;AACjBpoB,2BACE,kBAAqB;AAAA,cAApB,KAAoB,UAApB,KAAoB;AAAA,cAArB,IAAqB,UAArB,IAAqB;;AACnB,oBAAU;AACRumB,uCADQ,IACRA;AADQ;AADS;;AAKnB,cAAI,kBAAJ,WAA+B;AAAA;AALZ;;AAQnB,yCARmB,WAQnB;;AACA6B,cATmB;AADvBpoB,WAYEnhC,kBAAU;AACR0nD,qCADQ,IACRA;;AAEA,cAAI,kBAAJ,WAA+B;AAAA;AAHvB;;AAMR,cAAIA,YAAJ,cAA8B;AAE5BA,iDAF4B,IAE5BA;;AAF4B,wDAIKA,YAAjC,WAJ4B;AAAA;;AAAA;AAI5B,qEAA0D;AAAA,oBAA1D,kBAA0D;AACxDS,mCADwD,mBACxDA;AAL0B;AAAA;AAAA;AAAA;AAAA;AAAA;;AAO5B,mBAP4B,WAO5B;AAbM;;AAgBR,cAAIT,YAAJ,wBAAwC;AACtCA,sDADsC,MACtCA;AADF,iBAEO,IAAIA,YAAJ,sBAAsC;AAC3CA,oDAD2C,MAC3CA;AADK,iBAEA;AACL,kBADK,MACL;AArBM;AAbK,SACjBvmB;AAhBoB,OAetB;;AAuCAooB,UAtDsB;AArdP;;;WAihBjBa,oCAA2D;AAAA;;AAAA,UAAxC,WAAwC,UAAxC,WAAwC;AAAA,UAAxC,MAAwC,UAAxC,MAAwC;AAAA,gCAAjBR,KAAiB;AAAA,UAAjBA,KAAiB,6BAA3DQ,KAA2D;AACzDxpD,wBACEZ,2BACG,gCAA8BA,WAFnCY,MADyD,8DACzDA;;AAMA,UAAI,CAAC8mD,YAAL,cAA+B;AAAA;AAP0B;;AAUzD,UAAI,CAAJ,OAAY;AAGV,YAAIA,+BAAJ,GAAsC;AAAA;AAH5B;;AASV,YAAI1nD,kBAAJ,4CAAmD;AACjD0nD,kDAAwC,WAAW,YAAM;AACvD,sCAAwB;AAAEA,yBAAF,EAAEA,WAAF;AAAe1nD,oBAAf,EAAeA,MAAf;AAAuB4pD,qBAAvB;AAAA,aAAxB;;AACAlC,oDAFuD,IAEvDA;AAFsC,aADS,2BACT,CAAxCA;AADiD;AATzC;AAV6C;;AA2BzDA,sCAAgC,yBAAmB1nD,MAAnB,aAAmBA,MAAnB,uBAAmBA,OA3BM,OA2BzB,CAAhC0nD;AACAA,iCA5ByD,IA4BzDA;;AAEA,UAAI,gBAAJ,WAA+B;AAAA;AA9B0B;;AAAA,mDAmClB,KAAvC,aAnCyD;AAAA;;AAAA;AAmCzD,kEAA2D;AAAA;AAAA,cAAhD,MAAgD;AAAA,cAA3D,cAA2D;;AACzD,cAAI2C,mBAAJ,aAAoC;AAClC,yCADkC,MAClC;;AADkC;AADqB;AAnCF;AAAA;AAAA;AAAA;AAAA;AAAA;;AA0CzD,WA1CyD,OA0CzD;AA3jBe;;;SAikBjB,eAAY;AACV,aAAO,KADG,MACV;AAlkBe;;;;;;;;IAskBnB,Y;AACEtrD,0BAAc;AAAA;;AACZ,sBADY,EACZ;AACA,qBAAiB8yB,gBAFL,SAEKA,CAAjB;AAHe;;;;WAMjB6G,qCAA4B;AAAA;;AAC1B,iCAA2B;AAGzB,YAAI,+BAA6BzyB,UAAjC,MAAiD;AAC/C,iBAD+C,KAC/C;AAJuB;;AAMzB,YAAIqkD,WAAJ,KAAIA,CAAJ,EAAuB;AAErB,iBAAOA,WAFc,KAEdA,CAAP;AARuB;;AAUzB,oBAVyB,MAUzB;;AACA,YAAK,UAASrkD,MAAV,MAAC,KAA0Bg8C,yBAA/B,MAA+BA,CAA/B,EAAsD;AAEpD,cAAIsI,SAAJ,aAAIA,SAAJ,eAAIA,mBAAJ,MAAIA,CAAJ,EAAiC;AAC/BriD,qBAAS,IAAIjC,MAAJ,oBAEPA,MAFO,YAGPA,MAJ6B,UACtB,CAATiC;AADF,iBAMO;AACLA,qBAAS,IAAIjC,MAAJ,YADJ,KACI,CAATiC;AATkD;;AAWpDoiD,4BAXoD,MAWpDA;AACA,iBAZoD,MAYpD;AAvBuB;;AAyBzB,YAAIrkD,iBAAJ,KAA0B;AACxBiC,mBAAS,IADe,GACf,EAATA;AACAoiD,4BAFwB,MAExBA;;AAFwB,uDAGxB,KAHwB;AAAA;;AAAA;AAGxB,sEAAgC;AAAA;AAAA,kBAArB,GAAqB;AAAA,kBAAhC,GAAgC;;AAC9BpiD,8BAAgBsiD,WADc,GACdA,CAAhBtiD;AAJsB;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMxB,iBANwB,MAMxB;AA/BuB;;AAiCzB,YAAIjC,iBAAJ,KAA0B;AACxBiC,mBAAS,IADe,GACf,EAATA;AACAoiD,4BAFwB,MAExBA;;AAFwB,uDAGxB,KAHwB;AAAA;;AAAA;AAGxB,sEAAyB;AAAA,kBAAzB,IAAyB;AACvBpiD,yBAAWsiD,WADY,IACZA,CAAXtiD;AAJsB;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMxB,iBANwB,MAMxB;AAvCuB;;AAyCzBA,iBAASsV,4BAzCgB,EAyCzBtV;AACAoiD,0BA1CyB,MA0CzBA;;AAGA,6BAAuB;AACrB,cAAIG,IAAJ;AAAA,cACE5sC,IAFmB,KACrB;;AAEA,iBAAO,EAAE,OAAOha,mCAAhB,CAAgBA,CAAT,CAAP,EAAwD;AACtDga,gBAAIha,sBADkD,CAClDA,CAAJga;AAJmB;;AAMrB,cAAI,OAAO4sC,KAAP,UAAJ,aAAuC;AAAA;AANlB;;AASrB,cAAI,OAAOA,KAAP,UAAJ,YAAsC;AAAA;;AACpC,yCAAIxkD,oBAAJ,kDAAIA,kCAAJ,CAAIA,CAAJ,EAA+B;AAC7B,oBAAM,6DACwCA,MAFjB,CAEiBA,CADxC,EAAN;AAFkC;;AAAA;AATjB;;AAiBrBiC,sBAAYsiD,WAAWC,KAjBF,KAiBTD,CAAZtiD;AA9DuB;;AAgEzB,eAhEyB,MAgEzB;AAjEwB;;AAoE1B,UAAMoiD,SAAS,IApEW,OAoEX,EAAf;AACA,UAAM10B,QAAQ;AAAE/Y,cAAM2tC,WArEI,GAqEJA;AAAR,OAAd;;AAEA,0BAAoB,YAAM;AAAA,qDACD,OAAvB,UADwB;AAAA;;AAAA;AACxB,oEAAwC;AAAA,gBAAxC,QAAwC;AACtChyB,kCADsC,KACtCA;AAFsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAvEA,OAuE1B;AA7Ee;;;WAoFjBU,0CAAiC;AAC/B,2BAD+B,QAC/B;AArFe;;;WAwFjBuf,6CAAoC;AAClC,UAAMx1C,IAAI,wBADwB,QACxB,CAAV;;AACA,gCAFkC,CAElC;AA1Fe;;;WA6FjB08C,qBAAY;AACV,+BADU,CACV;AA9Fe;;;;;;;;AA2GnB,IAAM+C,YAAa,4BAA4B;AAC7C,MAAMgI,iBAAiB,IADsB,OACtB,EAAvB;AACA,MAAIC,mBAFyC,KAE7C;AACA,MAH6C,iBAG7C;AACA,MAAIC,mBAJyC,CAI7C;AACA,MAL6C,oBAK7C;;AAIE,MAAI3pC,qBAAY,mBAAhB,YAA+D;AAE7D0pC,uBAF6D,IAE7DA;AAKEE,wBAP2D,iBAO3DA;AAPJ,SASO,IAAI,oFAAgC,mBAApC,UAAiE;AAAA;;AACtE,QAAMC,yCAAgB1qD,sBAAhB0qD,0DAAgB1qD,sBADgD,GACtE;;AACA,uBAAmB;AACjByqD,0BAAoBC,mDADH,aACGA,CAApBD;AAHoE;AAlB7B;;AA6B7C,2BAAwB;AACtB,QAAIpI,oCAAJ,WAAmC;AACjC,aAAOA,oCAD0B,SACjC;AAFoB;;AAItB,QAAI,6BAAJ,aAA8C;AAC5C,UAAI,CAAJ,mBAAe;AACbsI,uCADa,+CACbA;AAF0C;;AAI5C,aAJ4C,iBAI5C;AARoB;;AAUtB,UAAM,UAVgB,+CAUhB,CAAN;AAvC2C;;AA0C7C,+CAA6C;AAC3C,QAD2C,wBAC3C;;AACA,QAAI;AAAA;;AACFC,0DAA2BxrD,sBAA3BwrD,0DAA2BxrD,sBADzB,oBACFwrD;AADF,MAEE,WAAW,CAJ8B;;AAO3C,WAAOA,4BAPoC,IAO3C;AAjD2C;;AAqD7C,mCAAiC;AAC/B,8BAA0B;AACxB,aAAOC,qBADiB,OACxB;AAF6B;;AAI/BA,2BAJ+B,oCAI/BA;;AAEA,QAAMC;AAAAA,gFAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AACPF,wCADO,GACoBG,iCADF,EAAlB;;AAAA,qBAGb,wBAHa;AAAA;AAAA;AAAA;;AAAA,iDAGiB,wBAHjB;;AAAA;AAAA,sBAYX,qBAGA,mBAJF,UAXa;AAAA;AAAA;AAAA;;AA8BL9I,sBA9BK,GA8BI+I,gBAAgBC,aAd/B,EAceD,CA9BJ;AAAA,iDA+BJ/I,OAfP,oBAhBW;;AAAA;AAAA;AAAA,uBAiCPiJ,+BAAWD,aAjCc,EAiCzBC,CAjCO;;AAAA;AAAA,iDAkCNzoC,mBAlCwB,oBAAlB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAATqoC;;AAAAA;AAAAA;AAAAA;AAAAA,OAAN;;AAoCAA,kBAAcD,qBAAdC,SAA4CD,qBA1Cb,MA0C/BC;AAEA,WAAOD,qBA5CwB,OA4C/B;AAjG2C;;AAoG7C,iCAA+B;AAI7B,QAAM50B,UAAU,0BAJa,KAI7B;AACA,WAAOjW,oBAAoB,SAAS,CALP,OAKO,CAAT,CAApBA,CAAP;AAzG2C;;AAAA,MAmH7C,SAnH6C;AAuH3CrhB,yBAIQ;AAAA,uFAJRA,EAIQ;AAAA,+BAHNgF,IAGM;AAAA,UAHNA,IAGM,4BAJI,IAIJ;AAAA,+BAFNs0B,IAEM;AAAA,UAFNA,IAEM,4BAJI,IAIJ;AAAA,oCADN5c,SACM;AAAA,UADNA,SACM,iCAJI,8BAIJ;;AAAA;;AACN,UAAI4c,QAAQqyB,mBAAZ,IAAYA,CAAZ,EAAsC;AACpC,cAAM,UAD8B,6CAC9B,CAAN;AAFI;;AAKN,kBALM,IAKN;AACA,uBANM,KAMN;AACA,kCAPM,IAON;AACA,uBARM,SAQN;AAEA,8BAVM,oCAUN;AACA,mBAXM,IAWN;AACA,wBAZM,IAYN;AACA,6BAbM,IAaN;;AAEA,gBAAU;AACRA,iCADQ,IACRA;;AACA,iCAFQ,IAER;;AAFQ;AAfJ;;AAoBN,WApBM,WAoBN;AA5BY;;AAnH6B;AAAA;AAAA,WAkJ3C,eAAc;AACZ,eAAO,sBADK,OACZ;AAhCY;AAnH6B;AAAA;AAAA,WAsJ3C,eAAW;AACT,eAAO,KADE,KACT;AApCY;AAnH6B;AAAA;AAAA,WA0J3C,eAAqB;AACnB,eAAO,KADY,eACnB;AAxCY;AAnH6B;AAAA;AAAA,aA8J3Ca,mCAA0B;AACxB,qBADwB,IACxB;AACA,+BAAuB,sDAFC,IAED,CAAvB;;AACA,yCAAiC,YAAY,CAHrB,CAGxB;;AAIA,8BAPwB,OAOxB;AAlDY;AAnH6B;AAAA;AAAA,aAwK3CC,uBAAc;AAAA;;AAMZ,YACE,iCACA,CADA,oBAEA,CAACL,iCAHH,IAIE;AACA,cAAIM,YAAYJ,aADhB,EACA;;AAEA,cAAI;AAGF,gBAGE,CAACK,wBAAa7oC,gBAAb6oC,MAHH,SAGGA,CAHH,EAIE;AACAD,0BAAYE,iBACV,mBAAmB9oC,OAAnB,UAFF,IACY8oC,CAAZF;AARA;;AAeF,gBAAMpJ,SAAS,WAfb,SAea,CAAf;AACA,gBAAMmB,iBAAiB,sDAhBrB,MAgBqB,CAAvB;;AACA,gBAAMoI,iBAAiB,SAAjBA,cAAiB,GAAM;AAC3BvJ,kDAD2B,aAC3BA;AACAmB,6BAF2B,OAE3BA;AACAnB,qBAH2B,SAG3BA;;AACA,kBAAI,OAAJ,WAAoB;AAClB,+CAA6B,UADX,sBACW,CAA7B;AADF,qBAEO;AAGL,uBAHK,gBAGL;AATyB;AAjB3B,aAiBF;;AAaA,gBAAMwJ,gBAAgB,SAAhBA,aAAgB,GAAM;AAC1B,kBAAI,CAAC,OAAL,YAAsB;AAGpBD,8BAHoB;AADI;AA9B1B,aA8BF;;AAOAvJ,6CArCE,aAqCFA;AAEAmB,sCAA0B3mC,gBAAQ;AAChCwlC,kDADgC,aAChCA;;AACA,kBAAI,OAAJ,WAAoB;AAClBuJ,8BADkB;AAAA;AAFY;;AAMhC,wBAAU;AAER,yCAFQ,cAER;AACA,+BAHQ,MAGR;AACA,oCAJQ,MAIR;;AACA,oBAAI,CAAC/uC,KAAL,kBAA4B;AAC1B,gDAD0B,KAC1B;AANM;;AAQR,wCARQ,OAQR;;AAEA2mC,iDAAiC;AAC/B/nC,6BAAW,OAXL;AAUyB,iBAAjC+nC;AAVF,qBAaO;AACL,uBADK,gBACL;;AACAA,+BAFK,OAELA;AACAnB,uBAHK,SAGLA;AAtB8B;AAvChC,aAuCFmB;AA0BAA,uCAA2B3mC,gBAAQ;AACjCwlC,kDADiC,aACjCA;;AACA,kBAAI,OAAJ,WAAoB;AAClBuJ,8BADkB;AAAA;AAFa;;AAMjC,kBAAI;AACFE,wBADE;AAAJ,gBAEE,UAAU;AAEV,uBAFU,gBAEV;AAV+B;AAjEjC,aAiEFtI;;AAcA,gBAAMsI,WAAW,SAAXA,QAAW,GAAM;AACrB,kBAAMC,UAAU,eAAe,CAC7B,oCAFmB,CACU,CAAf,CAAhB;;AAKA,kBAAI;AACFvI,qDAAqC,CAACuI,QADpC,MACmC,CAArCvI;AADF,gBAEE,WAAW;AACXjgD,gCADW,mCACXA;AACAwoD,6BAFW,CAEXA;AACAvI,4CAHW,OAGXA;AAXmB;AA/ErB,aA+EF;;AAmBAsI,oBAlGE;AAAA;AAAJ,YAoGE,UAAU;AACV5iD,4BADU,+BACVA;AAxGF;AAVU;;AAuHZ,aAvHY,gBAuHZ;AA5KY;AAnH6B;AAAA;AAAA,aAkS3C8iD,4BAAmB;AAAA;;AACjB,YAAI,CAAJ,kBAAuB;AACrBzoD,0BADqB,yBACrBA;AACAonD,6BAFqB,IAErBA;AAHe;;AAMjBsB,qCACQC,gCAAwB;AAC5B,cAAI,QAAJ,WAAoB;AAClB,4CAA6B,UADX,sBACW,CAA7B;;AADkB;AADQ;;AAK5B,cAAM7zB,OAAO,IALe,YAKf,EAAb;AACA,0BAN4B,IAM5B;AAGA,cAAM/Q,KAAK,SAASsjC,gBATQ,EAS5B;AAIA,cAAMuB,gBAAgB,oCAAmB7kC,KAAnB,eAbM,IAaN,CAAtB;AACA4kC,oDAd4B,IAc5BA;AAEA,cAAM1I,iBAAiB,wCAAuBl8B,KAAvB,WAhBK,IAgBL,CAAvB;AACA,oCAjB4B,cAiB5B;;AACA,mCAlB4B,OAkB5B;;AAEAk8B,2CAAiC;AAC/B/nC,uBAAW,QArBe;AAoBK,WAAjC+nC;AArBJyI,oBAyBSjsD,kBAAU;AACf,0CACE,qDAA6CA,OAFhC,OAEb,SADF;AAhCa,SAMjBisD;AArLY;AAnH6B;AAAA;AAAA,aA2U3C3sD,mBAAU;AACR,yBADQ,IACR;;AACA,YAAI,KAAJ,YAAqB;AAEnB,0BAFmB,SAEnB;;AACA,4BAHmB,IAGnB;AALM;;AAORorD,iCAAsB,KAPd,KAORA;AACA,qBARQ,IAQR;;AACA,YAAI,KAAJ,iBAA0B;AACxB,+BADwB,OACxB;;AACA,iCAFwB,IAExB;AAXM;AAxNI;AAnH6B;AAAA;AAAA,aA8V3C,0BAAwB;AACtB,YAAI,WAAW,CAACvI,OAAhB,MAA6B;AAC3B,gBAAM,UADqB,gDACrB,CAAN;AAFoB;;AAItB,YAAIuI,mBAAmBvI,OAAvB,IAAIuI,CAAJ,EAAqC;AACnC,iBAAOA,mBAAmBvI,OADS,IAC5BuI,CAAP;AALoB;;AAOtB,eAAO,cAPe,MAOf,CAAP;AAlPY;AAnH6B;AAAA;AAAA,aAwW3C,wBAAsB;AACpB,eAAOW,aADa,EACpB;AAtPY;AAnH6B;;AAAA;AAAA;;AA4W7C,SA5W6C,SA4W7C;AA5mEF,CAgwDmB,EAAnB;;;;IAmXA,e;AACEtsD,+EAAgE;AAAA;;AAC9D,0BAD8D,cAC9D;AACA,uBAF8D,WAE9D;AACA,sBAAkB,IAH4C,UAG5C,EAAlB;AACA,sBAAkB,4BAAe;AAC/B4jD,aAAOyJ,YADwB;AAE/BC,4BAAsB,gCAFS,IAET,CAFS;AAG/B9sD,qBAAe4iD,OAHgB;AAAA,KAAf,CAAlB;AAKA,mBAT8D,MAS9D;AACA,6BAAyB,IAAIA,OAAJ,kBAA6B;AACpDxiD,eAASwiD,OAD2C;AAEpDviD,oBAAcuiD,OAFsC;AAAA,KAA7B,CAAzB;AAKA,qBAf8D,KAe9D;AACA,6BAhB8D,IAgB9D;AACA,+BAjB8D,IAiB9D;AAEA,0BAnB8D,aAmB9D;AACA,uBApB8D,IAoB9D;AACA,yBArB8D,IAqB9D;AAEA,qBAvB8D,EAuB9D;AACA,wBAxB8D,EAwB9D;AACA,kCAzB8D,oCAyB9D;AAEA,SA3B8D,mBA2B9D;AA5BkB;;;;SA+BpB,eAAyB;AACvB,aAAO,6BADgB,OACvB;AAhCkB;;;WAmCpB7iD,mBAAU;AAAA;;AACR,UAAI,KAAJ,mBAA4B;AAC1B,eAAO,uBADmB,OAC1B;AAFM;;AAKR,uBALQ,IAKR;AACA,+BANQ,oCAMR;;AAEA,UAAI,KAAJ,qBAA8B;AAC5B,wCACE,UAF0B,iDAE1B,CADF;AATM;;AAcR,UAAMqqD,SAdE,EAcR;AAGA,6BAAuB,gBAAgB;AACrC,kBAAU;AACRA,sBAAY2C,KADJ,QACIA,EAAZ3C;AAFmC;AAjB/B,OAiBR;AAKA,8BAtBQ,CAsBR;AACA,iCAvBQ,CAuBR;AAEA,UAAM4C,aAAa,iDAzBX,IAyBW,CAAnB;AACA5C,kBA1BQ,UA0BRA;;AAEA,UAAI,KAAJ,oBAA6B;AAC3B,YAAM6C,iCAAiC,8BAC/BC,uBAAe;AAEnB,cAAIA,2BAAJ,mBAAIA,CAAJ,EAAqD;AACnDA,0CADmD,aACnDA;AAHiB;AADgB,oBAO9B,YAAM,CARY,CACY,CAAvC;AAQA9C,oBAT2B,8BAS3BA;AArCM;;AAuCR93B,+BAAyB,YAAM;AAC7B,2BAD6B,KAC7B;;AACA,2BAF6B,KAE7B;;AACA,uCAH6B,IAG7B;;AAEA,YAAI,QAAJ,gBAAyB;AACvB,mDACE,yBAFqB,wBAErB,CADF;AAN2B;;AAW7B,YAAI,QAAJ,gBAAyB;AACvB,iCADuB,OACvB;;AACA,mCAFuB,IAEvB;AAb2B;;AAe7B,kCAf6B,OAe7B;AAfFA,SAgBG,uBAvDK,MAuCRA;AAiBA,aAAO,uBAxDC,OAwDR;AA3FkB;;;WA8FpB66B,+BAAsB;AAAA;;AAAA,UACd,cADc,QACd,cADc;AAAA,UACd,WADc,QACd,WADc;AAGpBlJ,qCAA+B,sBAAgB;AAC7C5iD,0BACE,QADFA,gBAD6C,iDAC7CA;AAIA,8BAAmB,uBAL0B,aAK1B,EAAnB;;AACA,yCAA8B+rD,eAAO;AACnC,kCAAqB;AACnBC,oBAAQD,IADW;AAEnBE,mBAAOF,IAFY;AAAA,WAArB;AAP2C,SAM7C;;AAMAG,sBAAc,YAAM;AAClB,0CAEQ,kBAA2B;AAAA,gBAAjB,KAAiB,UAAjB,KAAiB;AAAA,gBAA3B,IAA2B,UAA3B,IAA2B;;AAC/B,sBAAU;AACRA,mBADQ,KACRA;AADQ;AADqB;;AAK/BlsD,8BACEqhD,yBADFrhD,KACEqhD,CADFrhD,EAL+B,sCAK/BA;AAMAksD,yBAAa,eAAbA,KAAa,CAAbA,KAAuC,CAXR,KAWQ,CAAvCA;AAbJ,sBAeS9sD,kBAAU;AACf8sD,uBADe,MACfA;AAjBc,WAClB;AAb2C,SAY7CA;;AAqBAA,wBAAgB9sD,kBAAU;AACxB,qCADwB,MACxB;;AAEA8sD,8BAAiBC,uBAAe;AAC9B,gBAAI,QAAJ,WAAoB;AAAA;AADU;;AAI9B,kBAJ8B,WAI9B;AAPsB,WAGxBD;AApC2C,SAiC7CA;AApCkB,OAGpBtJ;AA6CAA,8CAAwC3mC,gBAAQ;AAC9C,YAAMmwC,oBADwC,oCAC9C;AACA,YAAMC,aAAa,QAF2B,WAE9C;AACAA,qCAA6B,YAAM;AAGjC,cAAI,CAACA,WAAD,wBAAoC,CAACA,WAAzC,kBAAsE;AACpE,gBAAI,yBAAsBb,YAA1B,YAAkD;AAChDA,qCAAuB,QADyB,aAChDA;AAFkE;;AAIpEa,oCAAwBN,eAAO;AAC7B,kBAAIP,YAAJ,YAA4B;AAC1BA,uCAAuB;AACrBQ,0BAAQD,IADa;AAErBE,yBAAOF,IAFc;AAAA,iBAAvBP;AAF2B;AAJqC,aAIpEa;AAP+B;;AAiBjCD,oCAA0B;AACxBE,kCAAsBD,WADE;AAExBE,8BAAkBF,WAFM;AAGxBG,2BAAeH,WAHS;AAAA,WAA1BD;AAjBFC,WAsBGD,kBAzB2C,MAG9CC;AAwBA,eAAOD,kBA3BuC,OA2B9C;AA3EkB,OAgDpBxJ;AA8BAA,0CAAoC,sBAAgB;AAClD5iD,0BACE,QADFA,gBADkD,sDAClDA;;AAIA,YAAMysD,cAAc,sCAClBxwC,KADkB,OAElBA,KAPgD,GAK9B,CAApB;;AAeA,YAAI,CAAJ,aAAkB;AAChBiwC,eADgB,KAChBA;AADgB;AApBgC;;AAyBlDA,sBAAc,YAAM;AAClBO,kCAEQ,kBAA2B;AAAA,gBAAjB,KAAiB,UAAjB,KAAiB;AAAA,gBAA3B,IAA2B,UAA3B,IAA2B;;AAC/B,sBAAU;AACRP,mBADQ,KACRA;AADQ;AADqB;;AAK/BlsD,8BACEqhD,yBADFrhD,KACEqhD,CADFrhD,EAL+B,2CAK/BA;AAIAksD,yBAAa,eAAbA,KAAa,CAAbA,KAAuC,CATR,KASQ,CAAvCA;AAXJO,sBAaSrtD,kBAAU;AACf8sD,uBADe,MACfA;AAfc,WAClBO;AA1BgD,SAyBlDP;;AAmBAA,wBAAgB9sD,kBAAU;AACxBqtD,6BADwB,MACxBA;AAEAP,8BAAiBC,uBAAe;AAC9B,gBAAI,QAAJ,WAAoB;AAAA;AADU;;AAI9B,kBAJ8B,WAI9B;AAPsB,WAGxBD;AA/CgD,SA4ClDA;AA1HkB,OA8EpBtJ;AAwDAA,kCAA4B,kBAAiB;AAAA,YAAjB,OAAiB,UAAjB,OAAiB;AAC3C,4BAAiB8J,QAD0B,QAC3C;;AACAlB,wCAAgC,8BAFW,OAEX,CAAhCA;AAxIkB,OAsIpB5I;AAKAA,wCAAkC,cAAc;AAC9C,YAD8C,MAC9C;;AACA,gBAAQ+J,GAAR;AACE;AACEvtD,qBAAS,4BAAsButD,GAAtB,SAAkCA,GAD7C,IACW,CAATvtD;AAFJ;;AAIE;AACEA,qBAAS,8BAAwButD,GADnC,OACW,CAATvtD;AALJ;;AAOE;AACEA,qBAAS,8BAAwButD,GADnC,OACW,CAATvtD;AARJ;;AAUE;AACEA,qBAAS,sCAAgCutD,GAAhC,SAA4CA,GADvD,MACW,CAATvtD;AAXJ;;AAaE;AACEA,qBAAS,gCAA0ButD,GAA1B,SAAsCA,GADjD,OACW,CAATvtD;AAdJ;AAAA;;AAiBA,YAAI,EAAE,kBAAN,KAAI,CAAJ,EAAgC;AAC9B,cAAMwtD,MADwB,wCAC9B;AAOEjqD,0BAR4B,GAQ5BA;AA3B0C;;AA8B9C6oD,uCA9B8C,MA8B9CA;AAzKkB,OA2IpB5I;AAiCAA,2CAAqCiK,qBAAa;AAChD,sCADgD,oCAChD;;AAEA,YAAIrB,YAAJ,YAA4B;AAC1B,cAAMsB,iBAAiB9J,SAAjB8J,cAAiB9J,WAAY;AACjC,gDAAiC;AAC/BA,sBAF+B,EAE/BA;AAD+B,aAAjC;AAFwB,WAC1B;;AAKA,cAAI;AACFwI,mDAAuCqB,UADrC,IACFrB;AADF,YAEE,WAAW;AACX,+CADW,EACX;AATwB;AAA5B,eAWO;AACL,6CACE,4BAAsBqB,UAAtB,SAAyCA,UAFtC,IAEH,CADF;AAf8C;;AAmBhD,eAAO,4BAnByC,OAmBhD;AA/LkB,OA4KpBjK;AAsBAA,sCAAgC3mC,gBAAQ;AAGtC,YAAIuvC,YAAJ,YAA4B;AAC1BA,iCAAuB;AACrBQ,oBAAQ/vC,KADa;AAErBgwC,mBAAOhwC,KAFc;AAAA,WAAvBuvC;AAJoC;;AAStC,+CATsC,IAStC;AA3MkB,OAkMpB5I;AAYAA,2CAAqC3mC,gBAAQ;AAC3C,YAAI,QAAJ,WAAoB;AAAA;AADuB;;AAK3C,YAAMyvC,OAAO,kBAAezvC,KALe,SAK9B,CAAb;;AACAyvC,8BAAsBzvC,KAAtByvC,cAAyCzvC,KANE,MAM3CyvC;AApNkB,OA8MpB9I;AASAA,qCAA+B3mC,gBAAQ;AAAA;;AACrC,YAAI,QAAJ,WAAoB;AAAA;AADiB;;AAAA;AAAA,YAK/B,EAL+B;AAAA,YAK/B,IAL+B;AAAA,YAK/B,YAL+B;;AAMrC,YAAI,uBAAJ,EAAI,CAAJ,EAA6B;AAAA;AANQ;;AAUrC;AACE;AACE,gBAAMslC,SAAS,QADjB,OACE;;AAEA,gBAAI,WAAJ,cAA6B;AAC3B,kBAAMwL,gBAAgBC,aADK,KAC3B;AACArqD,mEAF2B,aAE3BA;;AACA,6CAH2B,aAG3B;;AAH2B;AAH/B;;AAUE,gBAAIsqD,eAVN,IAUE;;AACA,gBAAI1L,0CAAiB3iD,wBAAjB2iD,kDAAiB3iD,sBAArB,SAAwD;AACtDquD,6BAAe;AACbC,4BADa,wBACbA,IADa,EACbA,GADa,EACW;AACtBtuD,2DADsB,GACtBA;AAFW;AAAA,eAAfquD;AAZJ;;AAkBE,gBAAMrzC,OAAO,8CAAiC;AAC5C8C,+BAAiB6kC,OAD2B;AAE5C4B,+BAAiB5B,OAF2B;AAG5C+B,4BAAc/B,OAH8B;AAI5CkK,oCAAsB,mCAJsB,OAItB,CAJsB;AAK5CwB,0BAL4C,EAK5CA;AAL4C,aAAjC,CAAb;;AAQA,mDAES7tD,kBAAU;AACf,qBAAOwjD,+CAA+C;AAAEl8B,kBADzC,EACyCA;AAAF,eAA/Ck8B,CAAP;AAHJ,0BAKW,YAAM;AACb,kBAAI,CAACrB,OAAD,uBAA+B3nC,KAAnC,MAA8C;AAM5CA,4BAN4C,IAM5CA;AAPW;;AASb,6CATa,IASb;AAxCN,aA0BE;;AA3BJ;;AA4CE,eA5CF,UA4CE;AACA;AACE,2CADF,YACE;;AA9CJ;;AAgDE;AACE,kBAAM,mDAjDV,IAiDU,EAAN;AAjDJ;AAjOkB,OAuNpBgpC;AA+DAA,+BAAyB3mC,gBAAQ;AAAA;;AAC/B,YAAI,QAAJ,WAAoB;AAElB,iBAFkB,SAElB;AAH6B;;AAAA;AAAA,YAMzB,EANyB;AAAA,YAMzB,SANyB;AAAA,YAMzB,IANyB;AAAA,YAMzB,SANyB;;AAO/B,YAAMkxC,YAAY,kBAPa,SAOb,CAAlB;;AACA,YAAIA,mBAAJ,EAAIA,CAAJ,EAA4B;AAC1B,iBAD0B,SAC1B;AAT6B;;AAY/B;AACE;AACEA,uCADF,SACEA;AAGA,gBAAMC,0BAJR,OAIE;;AACA,gBAAIC,sKAAJ,yBAAuD;AACrDF,6CADqD,IACrDA;AANJ;;AADF;;AAUE;AACE,kBAAM,4CAXV,IAWU,EAAN;AAXJ;;AAaA,eAzB+B,SAyB/B;AA/SkB,OAsRpBvK;AA4BAA,uCAAiC3mC,gBAAQ;AACvC,YAAI,QAAJ,WAAoB;AAAA;AADmB;;AAKvC,YAAIuvC,YAAJ,YAA4B;AAC1BA,iCAAuB;AACrBQ,oBAAQ/vC,KADa;AAErBgwC,mBAAOhwC,KAFc;AAAA,WAAvBuvC;AANqC;AAlTrB,OAkTpB5I;AAaAA,8CAEE,gCAjUkB,IAiUlB,CAFFA;AAKAA,4CAAsC,sBAAgB;AACpD,YAAI,QAAJ,WAAoB;AAClBsJ,qBAAW,UADO,sBACP,CAAXA;AADkB;AADgC;;AAKpD,YAAIoB,UALgD,KAKpD;;AAEApB,sBAAc,YAAM;AAClB,uBAAa;AACXA,iBADW,KACXA;AADW;AADK;;AAKlBoB,oBALkB,IAKlBA;;AAEA,qDACQ,uBAAuB;AAC3BpB,yCAA6B,CAACqB,qBADH,MACE,CAA7BrB;AAFJ,sBAIS,kBAAkB;AACvBA,uBADuB,MACvBA;AAZc,WAOlB;AAdkD,SAOpDA;AA3UkB,OAoUpBtJ;AAlakB;;;WA2bpB4K,uCAAqC;AAAA,UAArCA,SAAqC,UAArCA,SAAqC;;AACnC,UAAI,KAAJ,WAAoB;AAAA;AADe;;AAInC,UAAI,iBAAJ,sBAA2C;AACzC,8CADyC,SACzC;AALiC;AA3bjB;;;WAocpBjI,mBAAU;AACR,aAAO,+CADC,IACD,CAAP;AArckB;;;WAwcpBjB,6BAAoB;AAAA;;AAClB,UACE,CAACxpC,iBAAD,UAACA,CAAD,IACA2yC,cADA,KAEAA,aAAa,KAHf,WAIE;AACA,eAAOx8B,eAAe,UADtB,sBACsB,CAAfA,CAAP;AANgB;;AASlB,UAAMq2B,YAAYmG,aATA,CASlB;;AACA,UAAInG,aAAa,KAAjB,cAAoC;AAClC,eAAO,kBAD2B,SAC3B,CAAP;AAXgB;;AAalB,UAAM3zB,UAAU,+CACc;AAC1B2zB,iBAFY,EAEZA;AAD0B,OADd,OAIRoG,oBAAY;AAChB,YAAI,QAAJ,WAAoB;AAClB,gBAAM,UADY,qBACZ,CAAN;AAFc;;AAIhB,YAAMhC,OAAO,+CAIX,gBAJW,eAKX,gBATc,MAIH,CAAb;AAOA,uCAXgB,IAWhB;AACA,eAZgB,IAYhB;AA7Bc,OAaF,CAAhB;AAkBA,qCA/BkB,OA+BlB;AACA,aAhCkB,OAgClB;AAxekB;;;WA2epBnH,2BAAkB;AAChB,aAAO,oDAC4B;AAC/BoJ,WAFG,EAEHA;AAD+B,OAD5B,WAIE,kBAAkB;AACvB,eAAO18B,eAAe,UADC,MACD,CAAfA,CAAP;AANY,OACT,CAAP;AA5ekB;;;WAqfpBi1B,2CAAkC;AAChC,aAAO,sDAAsD;AAC3DoB,iBAD2D,EAC3DA,SAD2D;AAE3DnB,cAF2D,EAE3DA;AAF2D,OAAtD,CAAP;AAtfkB;;;WA4fpBP,yCAAgC;AAAA;;AAC9B,aAAO,oDAC4B;AAC/BgI,kBAAU,KADqB;AAE/BjH,2BAAmBA,0GAFY;AAG/BkH,gEAAU,gBAAVA,sDAAU,0BAAVA,yEAH+B;AAAA,OAD5B,aAMI,YAAM;AACb,+BAAuB;AACrBlH,4BADqB,aACrBA;AAFW;AAPa,OACvB,CAAP;AA7fkB;;;WA0gBpBd,2BAAkB;AAChB,aAAO,uDADS,IACT,CAAP;AA3gBkB;;;WA8gBpBC,wBAAe;AACb,aAAQ,yBAAR,KAAQ,yBAAR,GAAsC,oDADzB,IACyB,CAAtC;AA/gBkB;;;WAqhBpBC,kCAAyB;AACvB,aAAO,8DADgB,IAChB,CAAP;AAthBkB;;;WAyhBpBvB,2BAAkB;AAChB,aAAO,uDADS,IACT,CAAP;AA1hBkB;;;WA6hBpBC,4BAAmB;AACjB,UAAI,cAAJ,UAA4B;AAC1B,eAAOxzB,eAAe,UADI,8BACJ,CAAfA,CAAP;AAFe;;AAIjB,aAAO,sDAAsD;AAC3DvK,UALe,EAKfA;AAD2D,OAAtD,CAAP;AAjiBkB;;;WAsiBpBg+B,yBAAgB;AACd,aAAO,qDADO,IACP,CAAP;AAviBkB;;;WA0iBpBC,yBAAgB;AACd,aAAO,qDADO,IACP,CAAP;AA3iBkB;;;WA8iBpBC,uBAAc;AACZ,aAAO,mDADK,IACL,CAAP;AA/iBkB;;;WAkjBpBC,gCAAuB;AACrB,aAAO,4DADc,IACd,CAAP;AAnjBkB;;;WAsjBpBC,yBAAgB;AACd,aAAO,qDADO,IACP,CAAP;AAvjBkB;;;WA0jBpBC,0BAAiB;AACf,aAAO,sDADQ,IACR,CAAP;AA3jBkB;;;WA8jBpBC,yBAAgB;AACd,aAAO,qDADO,IACP,CAAP;AA/jBkB;;;WAkkBpB8I,2BAAkB;AAChB,aAAO,uDADS,IACT,CAAP;AAnkBkB;;;WAskBpBC,qCAA4B;AAC1B,aAAO,wDAAwD;AAC7DzG,iBAFwB,EAExBA;AAD6D,OAAxD,CAAP;AAvkBkB;;;WA4kBpB0G,+BAAsB;AACpB,aAAO,kDAAkD;AACvD1G,iBAFkB,EAElBA;AADuD,OAAlD,CAAP;AA7kBkB;;;WAklBpBpC,sBAAa;AACX,aAAO,kDADI,IACJ,CAAP;AAnlBkB;;;WAslBpBC,oCAA2B;AACzB,aAAO,2EAEC8I,mBAAW;AACf,eAAO,mDADQ,OACR,CAAP;AAJqB,OAClB,CAAP;AAvlBkB;;;WA8lBpB7I,0BAAiB;AACf,aAAO,sDADQ,IACR,CAAP;AA/lBkB;;;WAkmBpBC,uBAAc;AAAA;;AACZ,aAAO,8DAEC4I,mBAAW;AAAA;;AACf,eAAO;AACL3lD,gBAAM2lD,QADD,CACCA,CADD;AAELjoC,oBAAUioC,aAAa,uBAAaA,QAA1BA,CAA0BA,CAAb,CAAbA,GAFL;AAGL3L,sFAA4B,mBAA5BA,wDAA4B,4BAA5BA,yEAHK;AAILkK,0EAAe,mBAAfA,yDAAe,kCAAfA,yEAJK;AAAA,SAAP;AAJQ,OACL,CAAP;AAnmBkB;;;WA+mBpBlH,uBAAc;AACZ,aAAO,mDADK,IACL,CAAP;AAhnBkB;;;WAmnBpBG,oBAAW;AACT,aAAO,gDADE,IACF,CAAP;AApnBkB;;;;uFAunBpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmBE,+BAAnB;AAAA;AAAA,uBACQ,+CADoC,IACpC,CADR;;AAAA;AAAA,qBAGM,KAAJ,SAHF;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAMWtjD,iBANX,GAMO,CANP,EAMkBD,EANlB,GAMuB,eAArB,MANF;;AAAA;AAAA,sBAM8CC,IAA5C,EANF;AAAA;AAAA;AAAA;;AAOUqpD,oBAPV,GAOiB,eAD0C,CAC1C,CAPjB;;AAAA,oBAQI,IARJ;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAWUwC,iCAXV,GAW8BxC,KAL6B,OAK7BA,EAX9B;;AAAA,oBAaI,iBAbJ;AAAA;AAAA;AAAA;;AAAA,sBAcY,uCAAgCrpD,IADhB,CAChB,8BAdZ;;AAAA;AAMsDA,iBAApD,EANF;AAAA;AAAA;;AAAA;AAiBE,gCAjB0C,KAiB1C;;AACA,oBAAI,CAAJ,iBAAsB;AACpB,kCADoB,KACpB;AAnBwC;;AAqB1C,4CArB0C,IAqB1C;;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;SAwBA,eAAoB;AAClB,UAAMk/C,SAAS,KADG,OAClB;AACA,aAAO,yCAA8B;AACnC0B,0BAAkB1B,OADiB;AAEnC4B,yBAAiB5B,OAFkB;AAAA,OAA9B,CAAP;AAjpBkB;;;;;;IA8pBtB,U;AACEpjD,wBAAc;AAAA;;AACZ,iBAAa8E,cADD,IACCA,CAAb;AAFa;;;;WASfkrD,2BAAkB;AAChB,UAAI,WAAJ,KAAI,CAAJ,EAAuB;AACrB,eAAO,WADc,KACd,CAAP;AAFc;;AAIhB,aAAQ,oBAAoB;AAC1BhvC,oBAD0B;AAE1BlD,cAF0B;AAG1BmyC,kBAH0B;AAAA,OAA5B;AAba;;;WA4Bf/uC,oBAA4B;AAAA,UAAjB6gB,QAAiB,uEAA5B7gB,IAA4B;;AAG1B,oBAAc;AACZ,uDADY,QACZ;;AACA,eAFY,IAEZ;AALwB;;AAS1B,UAAM5Z,MAAM,WATc,KASd,CAAZ;;AAGA,UAAI,QAAQ,CAACA,IAAb,UAA2B;AACzB,cAAM,8DADmB,KACnB,OAAN;AAbwB;;AAe1B,aAAOA,IAfmB,IAe1B;AA3Ca;;;WA8Cf+c,oBAAW;AACT,UAAM/c,MAAM,WADH,KACG,CAAZ;AACA,aAAOA,4DAFE,KAET;AAhDa;;;WAsDf3F,8BAAqB;AACnB,UAAM2F,MAAM,gBADO,KACP,CAAZ;;AAEAA,qBAHmB,IAGnBA;AACAA,iBAJmB,IAInBA;AACAA,6BALmB,IAKnBA;AA3Da;;;WA8DfwxB,iBAAQ;AACN,mBAAah0B,cADP,IACOA,CAAb;AA/Da;;;;;;IAsEjB,U;AACE9E,0CAAgC;AAAA;;AAC9B,+BAD8B,kBAC9B;AAQA,sBAT8B,IAS9B;AAVa;;;;SAiBf,eAAc;AACZ,aAAO,oCADK,OACZ;AAlBa;;;WA0Bf4lC,kBAAS;AACP,+BADO,MACP;AA3Ba;;;;;;AAmCjB,IAAMsqB,qBAAsB,qCAAqC;AAC/D,MAAMC,oBAAoB,IADqC,OACrC,EAA1B;;AAD+D,MAI/D,kBAJ+D;AAK7DnwD,wCAWG;AAAA,UAXS,QAWT,UAXS,QAWT;AAAA,UAXS,MAWT,UAXS,MAWT;AAAA,UAXS,IAWT,UAXS,IAWT;AAAA,UAXS,UAWT,UAXS,UAWT;AAAA,UAXS,YAWT,UAXS,YAWT;AAAA,UAXS,SAWT,UAXS,SAWT;AAAA,UAXS,aAWT,UAXS,aAWT;AAAA,UAXS,YAWT,UAXS,YAWT;AAAA,yCAFD0pD,wBAEC;AAAA,UAFDA,wBAEC,sCAXS,KAWT;AAAA,iCADD7B,MACC;AAAA,UADDA,MACC,8BAXH7nD,KAWG;;AAAA;;AACD,sBADC,QACD;AACA,oBAFC,MAED;AACA,kBAHC,IAGD;AACA,wBAJC,UAID;AACA,6BALC,IAKD;AACA,0BANC,YAMD;AACA,wBAPC,SAOD;AACA,2BARC,aAQD;AACA,0BATC,YASD;AACA,qBAVC,MAUD;AAEA,qBAZC,KAYD;AACA,mCAbC,IAaD;AACA,2BAdC,KAcD;AACA,uCACE0pD,qCAAqC,kBAhBtC,WAeD;AAEA,uBAjBC,KAiBD;AACA,wBAlBC,oCAkBD;AACA,kBAAY,eAnBX,IAmBW,CAAZ;AAEA,0BAAoB,iBArBnB,IAqBmB,CAApB;AACA,4BAAsB,oBAtBrB,IAsBqB,CAAtB;AACA,gCAA0B,wBAvBzB,IAuByB,CAA1B;AACA,wBAAkB,gBAxBjB,IAwBiB,CAAlB;AACA,qBAAetG,qBAzBd,MAyBD;AArCqB;;AAJsC;AAAA;AAAA,WA4C7D,eAAgB;AACd,eAAO,iCAA8B,YAAY,CADnC,CACP,CAAP;AAzCqB;AAJsC;AAAA;AAAA,aAmD7DgN,oCAAoE;AAAA;;AAAA,yCAA/CxG,YAA+C;AAAA,YAA/CA,YAA+C,oCAAjD,KAAiD;AAAA,YAApEwG,qBAAoE,UAApEA,qBAAoE;;AAClE,YAAI,KAAJ,WAAoB;AAAA;AAD8C;;AAIlE,YAAI,KAAJ,SAAkB;AAChB,cAAID,sBAAsB,KAA1B,OAAIA,CAAJ,EAAyC;AACvC,kBAAM,UACJ,kIAFqC,yBACjC,CAAN;AAFc;;AAQhBA,gCAAsB,KARN,OAQhBA;AAZgE;;AAelE,YAAI,yCAAgB1vD,yBAAhB,kDAAgBA,sBAApB,SAAwD;AACtD,yBAAeA,iCAAiC,KADM,UACvCA,CAAf;AACA,4BAAkB,KAFoC,YAEtD;AACA,wCAA8B,aAHwB,iBAGxB,EAA9B;AAlBgE;;AAAA,2BA0B9D,KA1B8D;AAAA,YAoB5D,aApB4D,gBAoB5D,aApB4D;AAAA,YAoB5D,QApB4D,gBAoB5D,QApB4D;AAAA,YAoB5D,SApB4D,gBAoB5D,SApB4D;AAAA,YAoB5D,UApB4D,gBAoB5D,UApB4D;AAAA,YAoB5D,UApB4D,gBAoB5D,UApB4D;AA4BlE,mBAAW,0CAET,KAFS,YAGT,KAHS,MAIT,KAJS,eAKT,KALS,0BA5BuD,qBA4BvD,CAAX;AASA,8BAAsB;AACpB0V,mBADoB,EACpBA,SADoB;AAEpBmzC,kBAFoB,EAEpBA,QAFoB;AAGpBM,sBAHoB,EAGpBA,YAHoB;AAIpBrB,oBAJoB,EAIpBA;AAJoB,SAAtB;AAMA,+BA3CkE,CA2ClE;AACA,6BA5CkE,IA4ClE;;AACA,YAAI,KAAJ,uBAAgC;AAC9B,eAD8B,qBAC9B;AA9CgE;AA/C7C;AAJsC;AAAA;AAAA,aAqG7D3iB,kBAAqB;AAAA,YAAdnhB,KAAc,uEAArBmhB,IAAqB;AACnB,uBADmB,KACnB;AACA,yBAFmB,IAEnB;;AACA,YAAI,KAAJ,KAAc;AACZ,mBADY,UACZ;AAJiB;;AAMnB,YAAI,KAAJ,SAAkB;AAChBuqB,sCAAyB,KADT,OAChBA;AAPiB;;AASnB,sBACE1rC,SACE,mFAC+B,kBAD/B,IAXe,QAWf,CAFJ;AA1GqB;AAJsC;AAAA;AAAA,aAuH7D4rC,+BAAsB;AACpB,YAAI,CAAC,KAAL,eAAyB;AACvB,cAAI,CAAC,KAAL,uBAAiC;AAC/B,yCAA6B,KADE,cAC/B;AAFqB;;AAAA;AADL;;AAQpB,YAAI,KAAJ,SAAkB;AAChB,0CAAgC,KADhB,YAChB;AATkB;;AAYpB,YAAI,KAAJ,SAAkB;AAAA;AAZE;;AAepB,aAfoB,SAepB;AAlIqB;AAJsC;AAAA;AAAA,aAyI7DC,qBAAY;AACV,uBADU,IACV;;AACA,YAAI,KAAJ,WAAoB;AAAA;AAFV;;AAKV,YAAI,UAAJ,YAA0B;AACxB,+BAAqB,KADG,kBACxB;AADF,eAEO;AACL,eADK,aACL;AARQ;AArIW;AAJsC;AAAA;AAAA,aAqJ7DC,yBAAgB;AAAA;;AACd,YAAI,KAAJ,2BAAoC;AAClCzsC,uCAA6B,YAAM;AACjC,0CAAwB,QADS,YACjC;AAFgC,WAClCA;AADF,eAIO;AACLgP,iCAAuB,KAAvBA,qBAA8C,KADzC,YACLA;AANY;AAjJO;AAJsC;AAAA;AAAA;AAAA,kFA+J7D;AAAA;AAAA;AAAA;AAAA;AAAA,uBACM,KAAJ,SADF;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAIE,yCAAuB,6BACrB,KADqB,cAErB,KAFqB,iBAGrB,KAHqB,gBAIrB,KARU,OAIW,CAAvB;;AAMA,sBAAI,yBAAyB,4BAA7B,QAAiE;AAC/D,mCAD+D,KAC/D;;AACA,wBAAI,kBAAJ,WAAiC;AAC/B,+BAD+B,UAC/B;;AACA,0BAAI,KAAJ,SAAkB;AAChBq9B,oDAAyB,KADT,OAChBA;AAH6B;;AAK/B,2BAL+B,QAK/B;AAP6D;AAVrD;;AAAd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA/J6D;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAqL/D,SArL+D,kBAqL/D;AA/iGF,CA03F4B,EAA5B;;AAyLA,IAAM/nC,UAnjGN,SAmjGA;;AAGA,IAAMooC,QAtjGN,WAsjGA;;;;;;;;;;;;;;;;;;;ACviGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAWA,c;AACExwD,gCAIG;AAAA,QAJS,KAIT,QAJS,KAIT;AAAA,QAJS,oBAIT,QAJS,oBAIT;AAAA,kCADDQ,aACC;AAAA,QADDA,aACC,mCADeC,WAHlBT,QAIG;;AAAA;;AACD,QAAI,qBAAJ,gBAAyC;AACvCC,6BADuC,mCACvCA;AAFD;;AAID,iBAJC,KAID;AACA,iCALC,oBAKD;AACA,qBANC,aAMD;AAEA,2BARC,EAQD;AACA,wBATC,IASD;AAdiB;;;;WAiBnBwwD,2CAAkC;AAChC,gCADgC,cAChC;;AACA,+BAFgC,cAEhC;AAnBiB;;;WAsBnBC,0BAAiB;AACf,UAAIC,eAAe,KADJ,YACf;;AACA,UAAI,CAAJ,cAAmB;AACjBA,uBAAe,oBAAoB,6BADlB,OACkB,CAAnCA;AACAA,yDAA0C,KAFzB,KAEjBA;;AACA,mFAHiB,YAGjB;AALa;;AAUf,UAAMC,aAAaD,aAVJ,KAUf;AACAC,kCAA4BA,oBAXb,MAWfA;AAjCiB;;;WAoCnB93B,iBAAQ;AAAA;;AACN,mCAA6B+3B,0BAAkB;AAC7C,wCAD6C,cAC7C;AAFI,OACN;AAGA,oCAJM,CAIN;;AAEA,UAAI,KAAJ,cAAuB;AAErB,0BAFqB,MAErB;AACA,4BAHqB,IAGrB;AATI;AApCW;;;;+EAiDnB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAEMp1C,iBAAiBA,KAArB,WAFF;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAKEA,gCALe,IAKfA;;AALF,qBAOM,KAAJ,yBAPF;AAAA;AAAA;AAAA;;AAQUo1C,8BARV,GAQ2Bp1C,KADW,oBACXA,EAR3B;;AAAA,qBASI,cATJ;AAAA;AAAA;AAAA;;AAUM,uCADkB,cAClB;AAVN;AAAA;AAAA,uBAYco1C,eADJ,MAXV;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAcQ,2CAA2B;AACzBC,6BAAW31C,2BAFF;AACgB,iBAA3B;;AAGA3W,+DAA6BqsD,eAJlB,MAIXrsD;AAGAiX,uCAPW,IAOXA;AApBR;;AAAA;AAAA;;AAAA;AA4BQs1C,oBA5BR,GA4Bet1C,KA5BE,kBA4BFA,EA5Bf;;AAAA,qBA6BE,IA7BF;AAAA;AAAA;AAAA;;AA8BI,gCADQ,IACR;;AA9BJ,qBAgCQ,KAAJ,0BAhCJ;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA,uBAmCU,YAAY9Z,mBAAW;AAC3B,sBAAMF,UAAU,6BADW,OACX,CAAhB;;AACA,+CAA2B,CAA3B,IAA2B,CAA3B,EAAmC,CAAnC,IAAmC,CAAnC,EAF2B,OAE3B;AARM,iBAMF,CAnCV;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WA2CAuvD,yCAAgC;AAC9B/wD,6BAD8B,0CAC9BA;AA7FiB;;;SAgGnB,eAAgC;AAAA;;AAC9B,aAAOme,qDAA0C,CAAC,qBAAC,cAAD,4CAAC,gBADrB,KACoB,CAA3CA,CAAP;AAjGiB;;;SAqGnB,eAAiC;AAC/Bne,6BAD+B,+CAC/BA;AAtGiB;;;SA0GnB,eAAoB;AAClBA,6BADkB,kCAClBA;AA3GiB;;;WA8GnBgxD,4DAAmD;AACjDhxD,6BADiD,0CACjDA;AA/GiB;;;;;;AAmHrB,IA7IA,UA6IA;;AAOO;AAGLixD;AAAAA;;AAAAA;;AACElxD,uCAAoB;AAAA;;AAAA;;AAClB,iCADkB,MAClB;AACA,8BAAsB;AACpBmxD,kBADoB;AAEpBC,uBAFoB;AAAA,OAAtB;AAIA,8BANkB,CAMlB;AANkB;AADsC;;AAA5DF;AAAAA;AAAAA,WAUE,eAAiC;AAC/B,YAAIG,YAD2B,KAC/B;;AAEE,YAAI,qBAAJ,aAAsC;AAEpCA,sBAFoC,IAEpCA;AAFF,eAGO;AAGL,cAAMtyC,IAAI,wCACRuyC,UAJG,SAGK,CAAV;;AAGA,cAAIvyC,gDAAJ,IAAkB;AAChBsyC,wBADgB,IAChBA;AAPG;AANsB;;AAkB/B,eAAOjzC,sDAlBwB,SAkBxBA,CAAP;AA5BwD;AAA5D8yC;AAAAA;AAAAA,aA+BEF,yCAAgC;AAC9B,mCAA2B;AACzBnvD,4BAAO,CAACJ,QAARI,MADyB,2CACzBA;AACAJ,yBAFyB,IAEzBA;;AAGA,iBAAOd,+BAA+BA,oBAAtC,MAAgE;AAC9D,gBAAM4wD,eAAe5wD,iBADyC,KACzCA,EAArB;AACA25B,uBAAWi3B,aAAXj3B,UAF8D,CAE9DA;AAPuB;AADG;;AAY9B,YAAM35B,UAAU,KAZc,cAY9B;AACA,YAAMc,UAAU;AACd8mB,2CAA0B5nB,QADZ,aACYA,EAA1B4nB,CADc;AAEdre,gBAFc;AAGdqB,oBAHc;AAIdw2B,kBAJc,EAIdA;AAJc,SAAhB;AAMAphC,8BAnB8B,OAmB9BA;AACA,eApB8B,OAoB9B;AAnDwD;AAA5DuwD;AAAAA;AAAAA,WAsDE,eAAoB;AAClB,YAAMM,kBAAkB,SAAlBA,eAAkB,GAAY;AAGlC,iBAAOC,KACL,6/CAJgC,sEAG3BA,CAAP;AAJgB,SAClB;;AA4BA,eAAOrzC,yCAA8BozC,eA7BnB,EA6BXpzC,CAAP;AAnFwD;AAA5D8yC;AAAAA;AAAAA,aAsFED,sDAA6C;AAAA;;AAO3C,qCAA6B;AAC3B,iBACGnzC,2BAAD,EAACA,GACAA,gBAAgB4zC,SAAhB5zC,MADD,EAACA,GAEAA,gBAAgB4zC,SAAhB5zC,MAFD,CAACA,GAGAA,gBAAgB4zC,SAAhB5zC,KALwB,IAC3B;AARyC;;AAe3C,yDAAiD;AAC/C,cAAM6zC,SAASC,eADgC,MAChCA,CAAf;AACA,cAAMC,SAASD,YAAYF,SAFoB,MAEhCE,CAAf;AACA,iBAAOD,kBAHwC,MAG/C;AAlByC;;AAoB3C,eApB2C,EAoB3C;;AAGA,YAAMjxD,SAAS,6BAvB4B,QAuB5B,CAAf;;AACAA,uBAxB2C,CAwB3CA;AACAA,wBAzB2C,CAyB3CA;AACA,YAAMoxD,MAAMpxD,kBA1B+B,IA0B/BA,CAAZ;AAEA,YAAI03B,SA5BuC,CA4B3C;;AACA,6CAAqC;AACnCA,gBADmC;;AAGnC,cAAIA,SAAJ,IAAiB;AACf5zB,4BADe,8BACfA;AACAu9B,oBAFe;AAAA;AAHkB;;AAQnC+vB,qBAAW,UARwB,IAQnCA;AACAA,+BATmC,EASnCA;AACA,cAAM5C,YAAY4C,0BAViB,CAUjBA,CAAlB;;AACA,cAAI5C,oBAAJ,GAA2B;AACzBntB,oBADyB;AAAA;AAXQ;;AAenCzH,qBAAWy3B,6BAfwB,QAexBA,CAAXz3B;AA5CyC;;AA+C3C,YAAM03B,6BAAsB/sD,KAAL,GAAKA,EAAtB+sD,SAAmC,KA/CE,cA+CF,EAAnCA,CAAN;AAMA,YAAIl0C,OAAO,KArDgC,aAqD3C;AACA,YAAMm0C,iBAtDqC,GAsD3C;AACAn0C,eAAOo0C,mCAGLF,eAHKE,QAvDoC,cAuDpCA,CAAPp0C;AAOA,YAAMq0C,sBA9DqC,EA8D3C;AACA,YAAMC,aA/DqC,UA+D3C;AACA,YAAIC,WAAWC,YAhE4B,mBAgE5BA,CAAf;;AACA,aAAKpuD,OAAOD,KAAK+tD,wBAAjB,GAA4C9tD,IAA5C,IAAoDA,KAApD,GAA4D;AAC1DmuD,qBAAYA,wBAAwBC,sBAAzB,CAAyBA,CAAxBD,GAD8C,CAC1DA;AAlEyC;;AAoE3C,YAAInuD,IAAI8tD,eAAR,QAA+B;AAE7BK,qBACGA,wBAAwBC,MAAMN,iBAANM,OAAzB,CAAyBA,CAAxBD,GAH0B,CAE7BA;AAtEyC;;AAyE3Cv0C,eAAOo0C,2CAA2CK,oBAzEP,QAyEOA,CAA3CL,CAAPp0C;AAEA,YAAMhd,8CAAuC0xD,KA3EF,IA2EEA,CAAvC1xD,OAAN;AACA,YAAMiwD,2CAAO,cAAPA,oBA5EqC,GA4ErCA,MAAN;AACA,wBA7E2C,IA6E3C;AAEA,YAAMrnC,QA/EqC,EA+E3C;;AACA,aAAKxlB,OAAOD,KAAKwuD,MAAjB,QAA+BvuD,IAA/B,IAAuCA,CAAvC,IAA4C;AAC1CwlB,qBAAW+oC,SAD+B,UAC1C/oC;AAjFyC;;AAmF3CA,mBAnF2C,cAmF3CA;;AAEA,YAAMgpC,MAAM,6BArF+B,KAqF/B,CAAZ;;AACAA,+BAtF2C,QAsF3CA;AACAA,0BAAkBA,mBAvFyB,MAuF3CA;AACAA,6BAxF2C,UAwF3CA;AACAA,wBAAgBA,iBAzF2B,KAyF3CA;;AAEA,aAAKxuD,OAAOD,KAAKylB,MAAjB,QAA+BxlB,IAA/B,IAAuC,EAAvC,GAA4C;AAC1C,cAAMyuD,OAAO,6BAD6B,MAC7B,CAAb;;AACAA,6BAF0C,IAE1CA;AACAA,kCAAwBjpC,MAHkB,CAGlBA,CAAxBipC;AACAD,0BAJ0C,IAI1CA;AA/FyC;;AAiG3C,wCAjG2C,GAiG3C;;AAEAX,oCAA4B,YAAM;AAChC,4CADgC,GAChC;;AACAtwD,kBAFgC,QAEhCA;AArGyC,SAmG3CswD;AAzLwD;AAA5Db;;AAAAA;AAAAA,IAAa,cAAbA;AAvJF;;IAyVA,c;AACElxD,iDASE;AAAA,sCANEue,eAMF;AAAA,QANEA,eAMF,sCAPA,IAOA;AAAA,sCALEymC,eAKF;AAAA,QALEA,eAKF,sCAPA,KAOA;AAAA,mCAJEG,YAIF;AAAA,QAJEA,YAIF,mCAPA,KAOA;AAAA,QAPA,oBAOA,SAPA,oBAOA;AAAA,mCAFE2J,YAEF;AAAA,QAFEA,YAEF,mCATF9uD,IASE;;AAAA;;AACA,0BAAsB8E,cADtB,IACsBA,CAAtB;;AAEA,kCAAgC;AAC9B,gBAAU8tD,eADoB,CACpBA,CAAV;AAJF;;AAMA,2BAAuBr0C,oBANvB,KAMA;AACA,2BAAuBymC,oBAPvB,IAOA;AACA,wBAAoBG,iBARpB,IAQA;AACA,iCATA,oBASA;AACA,wBAVA,YAUA;AApBiB;;;;WAuBnB0N,gCAAuB;AACrB,UAAI,CAAC,KAAD,QAAc,KAAlB,iBAAwC;AACtC,eADsC,IACtC;AAFmB;;AAIrB,UAAMhC,iBAAiB,aAAa,KAAb,YAA8B,KAA9B,MAJF,EAIE,CAAvB;;AAEA,UAAI,KAAJ,cAAuB;AACrB,uCADqB,IACrB;AAPmB;;AASrB,aATqB,cASrB;AAhCiB;;;WAmCnBiC,8BAAqB;AACnB,UAAI,CAAC,KAAD,QAAc,KAAlB,iBAAwC;AACtC,eADsC,IACtC;AAFiB;;AAInB,UAAMh1C,OAAOi1C,yBAAc,eAAe,KAJvB,IAIQ,CAAdA,CAAb;AAEA,UAAMjyD,yBAAkB,KAAZ,QAANA,qBAA0C0xD,KAN7B,IAM6BA,CAA1C1xD,OAAN;AACA,UAAMiwD,2CAAmC,KAA5B,UAAPA,oBAPa,GAObA,MAAN;;AAEA,UAAI,KAAJ,cAAuB;AACrB,6CADqB,GACrB;AAViB;;AAYnB,aAZmB,IAYnB;AA/CiB;;;WAkDnBiC,2CAAkC;AAChC,UAAI,mCAAJ,WAAkD;AAChD,eAAO,oBADyC,SACzC,CAAP;AAF8B;;AAKhC,gBALgC,OAKhC;;AACA,UAAI;AACFC,eAAO1J,SAAS,6BADd,SACKA,CAAP0J;AADF,QAEE,WAAW;AACX,YAAI,CAAC,KAAL,cAAwB;AACtB,gBADsB,EACtB;AAFS;;AAIX,mCAA2B;AACzBnC,qBAAW31C,2BALF;AAIgB,SAA3B;;AAGA3W,2EAPW,EAOXA;AAEA,eAAQ,iCAAiC,mBAAmB,CATjD,CASX;AAjB8B;;AAuBhC,UAAI,wBAAwB8Z,4BAA5B,OAAyD;AACvD;AAAA,YACE40C,KAFqD,EACvD;;AAEA,aAAK,IAAIhvD,IAAJ,GAAWD,KAAKgvD,KAArB,QAAkC/uD,IAAlC,IAA0CA,CAA1C,IAA+C;AAC7CivD,oBAAUF,KADmC,CACnCA,CAAVE;;AAEA,cAAIA,iBAAJ,WAAgC;AAC9Bt5B,mBAAOs5B,kBADuB,GACvBA,CAAPt5B;AADF,iBAEO;AACLA,mBADK,EACLA;AAN2C;;AAQ7Cq5B,gBAAM,OAAOC,QAAP,mBARuC,MAQ7CD;AAXqD;;AAcvD,eAAQ,iCAAiC,0BAdc,EAcd,CAAzC;AArC8B;;AAyChC,aAAQ,iCAAiC,mBAAmB;AAC1D,aAAK,IAAIhvD,KAAJ,GAAWD,MAAKgvD,KAArB,QAAkC/uD,KAAlC,KAA0CA,EAA1C,IAA+C;AAC7CivD,oBAAUF,KADmC,EACnCA,CAAVE;;AAEA,cAAIA,gBAAJ,SAA6B;AAC3BA,2BAAe,OAAO,CAAP,KAAfA;AAJ2C;;AAM7CvzC,YAAEuzC,QAAFvzC,cAAwBuzC,QANqB,IAM7CvzC;AAPwD;AAzC5B,OAyChC;AA3FiB;;;;;;;;;;;;;;;;;;;;;;ACzUrB;;AAhBA;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAoBA,IAAIwzC,oBACFpzD,6BAAc;AAAA;;AACZC,yBADY,oCACZA;AAF0B,CAA9B;;;;AAMA,IAAIozD,wBACFrzD,iCAAc;AAAA;;AACZC,yBADY,wCACZA;AAF8B,CAAlC;;;;AAMA,uBAA+E;AAC7EmzD;AAAAA;;AAAAA;;AAAAA;AAAAA;;AAAAA;AAAAA;;AAAAA;AAAAA;AAAAA,aACElzD,+BAAsB;AACpB,YAAIG,cAAcC,UAAlB,GAA+B;AAC7B,gBAAM,UADuB,qBACvB,CAAN;AAFkB;;AAIpB,YAAMgzD,SAASC,QAJK,QAILA,CAAf;;AACA,YAAM7yD,SAAS4yD,2BALK,MAKLA,CAAf;AACA,eAAO;AACL5yD,gBADK,EACLA,MADK;AAELC,mBAASD,kBAFJ,IAEIA;AAFJ,SAAP;AAPgD;AAApD0yD;;AAAAA;AAAAA,IAAoB,gCAApBA;;AAcAC;AAAAA;;AAAAA;;AAAAA;AAAAA;;AAAAA;AAAAA;;AAAAA;AAAAA;AAAAA,aACEnyD,0CAAiC;AAC/B,eAAO,YAAY,2BAAqB;AACtC,cAAMsyD,KAAKD,QAD2B,IAC3BA,CAAX;;AACAC,2BAAiB,uBAAiB;AAChC,gBAAI/uC,SAAS,CAAb,MAAoB;AAClB7iB,qBAAO,UADW,KACX,CAAPA;AADkB;AADY;;AAKhCD,oBAAQ;AAAEJ,wBAAU,eAAZ,IAAY,CAAZ;AAAkCR,6BAAlC,EAAkCA;AAAlC,aAARY;AAPoC,WAEtC6xD;AAH6B,SACxB,CAAP;AAFwD;AAA5DH;;AAAAA;AAAAA,IAAwB,oCAAxBA;AA/CF,C;;;;;;;;;;;;;;ACAA;;AAAA;;;;;;;;;;;;;;;;;;;;IAqBA,iB;AACErzD,+BAAc;AAAA;;AACZ,oBAAgB,IADJ,GACI,EAAhB;AACA,qBAFY,KAEZ;AAMA,yBARY,IAQZ;AACA,2BATY,IASZ;AAVoB;;;;WAsBtByzD,qCAA4B;AAC1B,UAAMnsD,MAAM,kBADc,GACd,CAAZ;;AACA,aAAOA,0BAFmB,YAE1B;AAxBoB;;;WA8BtBosD,6CAAoC;AAClC1H,qCADkC,uBAClCA;;AACA,UAAI,kBAAJ,GAAI,CAAJ,EAA4B;AAC1B,eAAO,kBADmB,GACnB,CAAP;AAHgC;;AAMlC,6BANkC,YAMlC;;AACA,aAPkC,YAOlC;AArCoB;;;WAgDtB2H,8BAAqB;AACnB,UAAMrsD,MAAM,kBADO,GACP,CAAZ;;AACA,UAAIssD,WAFe,KAEnB;;AACA,UAAItsD,QAAJ,WAAuB;AACrB,2CAA2BxC,eAA3B,KAA2BA,CAA3B,qCAAkD;AAAA;AAAA,cAAvC,KAAuC;AAAA,cAAlD,GAAkD;;AAChD,cAAIwC,eAAJ,KAAwB;AACtBssD,uBADsB,IACtBA;AACAtsD,yBAFsB,GAEtBA;AAH8C;AAD7B;AAAvB,aAOO;AACL,+BADK,KACL;;AACAssD,mBAFK,IAELA;AAZiB;;AAcnB,oBAAc;AACZ,aADY,YACZ;AAfiB;AAhDC;;;WAmEtBC,kBAAS;AACP,aAAO,yBAAyBC,yBAAc,KAAvC,QAAyBA,CAAzB,GADA,IACP;AApEoB;;;SAuEtB,eAAW;AACT,aAAO,cADE,IACT;AAxEoB;;;WA8EtBC,wBAAe;AACb,UAAI,CAAC,KAAL,WAAqB;AACnB,yBADmB,IACnB;;AACA,YAAI,OAAO,KAAP,kBAAJ,YAA8C;AAC5C,eAD4C,aAC5C;AAHiB;AADR;AA9EO;;;WAuFtBC,yBAAgB;AACd,UAAI,KAAJ,WAAoB;AAClB,yBADkB,KAClB;;AACA,YAAI,OAAO,KAAP,oBAAJ,YAAgD;AAC9C,eAD8C,eAC9C;AAHgB;AADN;AAvFM;;;SAoGtB,eAAmB;AACjB,aAAO,yBAAyB,KAAzB,WADU,IACjB;AArGoB;;;;;;;;;;;;;;;;;;;;ACrBxB;;AAiBA,IAAMC,sBAAsBnvD,cAjB5B,IAiB4BA,CAA5B;AACiE;AAE9D,4BAAyB;AAExB,2BAAc;AACZmvD,4CADY,IACZA;AAHsB;AAFqC,GAE9D,GAAD;AApBF;AA2BA,IAAM1Q,yBAAyBz+C,cA3B/B,mBA2B+BA,CAA/B;;;;;;;;;;;;;;;ACZA;;AAcA;;;;;;;;;;AAKA,IAAMovD,gBAlCN,EAkCA;AAEA,IAAMC,gBApCN,GAoCA;AACA,IAAMC,iBArCN,IAqCA;AAEA,IAAMC,uBAvCN,IAuCA;AACA,IAAMC,sBAxCN,IAwCA;AAEA,IAAMC,oBA1CN,EA0CA;AAOA,IAAMC,yBAjDN,QAiDA;;AAEA,yCAAyC;AAEvC,MAAI,CAAC1C,IAAL,qBAA8B;AAC5BA,wBAAoBA,IADQ,IAC5BA;AACAA,2BAAuBA,IAFK,OAE5BA;AACAA,0BAAsBA,IAHM,MAG5BA;AACAA,yBAAqBA,IAJO,KAI5BA;AACAA,6BAAyBA,IALG,SAK5BA;AACAA,6BAAyBA,IANG,SAM5BA;AACAA,gCAA4BA,IAPA,YAO5BA;AACAA,kCAA8BA,IARF,cAQ5BA;AAEAA,2BAAuBA,wBAAwB,kBAA/CA;AACAA,0BAX4B,EAW5BA;;AAEA,QAAI;AAIF,UAAMpG,OAAO5mD,gCACXA,sBADWA,GACXA,CADWA,EAJX,WAIWA,CAAb;AAKAgtD,0BAAoBpG,KATlB,GASFoG;AACAA,0BAAoBpG,KAVlB,GAUFoG;AAEAhtD,8CAAwC;AACtCyiB,aAAK,6BAA6B;AAChC,6BAAmBlnB,QADa,sBAChC;AAFoC;AAItC6gB,aAAK,wBAAwB;AAC3B,iBAAO,KADoB,aACpB,EAAP;AALoC;AAAA,OAAxCpc;AAZF,MAoBE,UAAU,CAjCgB;;AAmC5BA,sDAAkD;AAChDoc,WAAK,+BAA+B;AAClC,eAAO,KAD2B,gBAClC;AAF8C;AAAA,KAAlDpc;AAMAA,6DAAyD;AACvDoc,WAAK,sCAAsC;AAKzC,YAAMnC,IAAI,KAL+B,gBAKzC;AACA,YAAMW,IAAIX,EAAV,CAAUA,CAAV;AAAA,YACEY,IAAIZ,EADN,CACMA,CADN;AAAA,YAEEa,IAAIb,EAFN,CAEMA,CAFN;AAAA,YAGEE,IAAIF,EAHN,CAGMA,CAHN;AAAA,YAIEod,IAAIpd,EAJN,CAIMA,CAJN;AAAA,YAKE2F,IAAI3F,EAXmC,CAWnCA,CALN;AAOA,YAAM01C,QAAQ/0C,QAAQC,IAbmB,CAazC;AACA,YAAM+0C,QAAQ/0C,QAAQD,IAdmB,CAczC;AAEA,eAAO,CACLT,IADK,OAELU,IAFK,OAGLC,IAHK,OAILF,IAJK,OAKJ,SAAQE,IAAT,CAAC,IALI,OAMJ,SAAQF,IAAT,CAAC,IANI,MAAP;AAjBqD;AAAA,KAAzD5a;;AA4BAgtD,eAAW,mBAAmB;AAC5B,UAAM6C,MAAM,KADgB,gBAC5B;;AACA,gCAF4B,GAE5B;;AACA,8BAAwBA,aAHI,CAGJA,CAAxB;;AAEA,WAL4B,aAK5B;AA1E0B,KAqE5B7C;;AAQAA,kBAAc,sBAAsB;AAClC,UAAM8C,OAAO,qBADqB,GACrB,EAAb;;AACA,gBAAU;AACR,gCADQ,IACR;;AACA,aAFQ,gBAER;AAJgC;AA7ER,KA6E5B9C;;AAQAA,oBAAgB,4BAA4B;AAC1C,UAAM/yC,IAAI,KADgC,gBAC1C;AACAA,aAAOA,WAAWA,OAAXA,IAAsBA,EAFa,CAEbA,CAA7BA;AACAA,aAAOA,WAAWA,OAAXA,IAAsBA,EAHa,CAGbA,CAA7BA;;AAEA,iCAL0C,CAK1C;AA1F0B,KAqF5B+yC;;AAQAA,gBAAY,wBAAwB;AAClC,UAAM/yC,IAAI,KADwB,gBAClC;AACAA,aAAOA,OAF2B,CAElCA;AACAA,aAAOA,OAH2B,CAGlCA;AACAA,aAAOA,OAJ2B,CAIlCA;AACAA,aAAOA,OAL2B,CAKlCA;;AAEA,6BAPkC,CAOlC;AApG0B,KA6F5B+yC;;AAUAA,oBAAgB,wCAAwC;AACtD,UAAM/yC,IAAI,KAD4C,gBACtD;AACA,8BAAwB,CACtBA,WAAWA,OADW,GAEtBA,WAAWA,OAFW,GAGtBA,WAAWA,OAHW,GAItBA,WAAWA,OAJW,GAKtBA,WAAWA,OAAXA,IAAsBA,EALA,CAKAA,CALA,EAMtBA,WAAWA,OAAXA,IAAsBA,EANA,CAMAA,CANA,CAAxB;;AASA+yC,4CAXsD,CAWtDA;AAlH0B,KAuG5BA;;AAcAA,uBAAmB,2CAA2C;AAC5D,8BAAwB,kBAAxB;;AAEAA,+CAH4D,CAG5DA;AAxH0B,KAqH5BA;;AAMAA,yBAAqB,6BAA6B;AAChD,8BAAwB,kBAAxB;;AAEAA,UAHgD,uBAGhDA;AA9H0B,KA2H5BA;;AAMAA,iBAAa,0BAA0B;AACrC,UAAM+C,WAAWjyD,SADoB,KACpBA,CAAjB;AACA,UAAMkyD,WAAWlyD,SAFoB,KAEpBA,CAAjB;AAEA,UAAMmc,IAAI,KAJ2B,gBAIrC;AACA,8BAAwB,CACtBA,kBAAkBA,OADI,UAEtBA,kBAAkBA,OAFI,UAGtBA,OAAO,CAAPA,WAAmBA,OAHG,UAItBA,OAAO,CAAPA,WAAmBA,OAJG,UAKtBA,EALsB,CAKtBA,CALsB,EAMtBA,EANsB,CAMtBA,CANsB,CAAxB;;AASA,2BAdqC,KAcrC;AA/I0B,KAiI5B+yC;AAnIqC;AAnDzC;;AAyMA,IAAMiD,iBAAkB,iCAAiC;AAEvD,yCAAuC;AACrC,yBADqC,aACrC;AACA,iBAAajwD,cAFwB,IAExBA,CAAb;AAJqD;;AAMvDiwD,6BAA2B;AACzBC,eAAW,qEAKT;AACA,UADA,WACA;;AACA,UAAI,mBAAJ,WAAkC;AAChCC,sBAAc,WADkB,EAClB,CAAdA;AACA,qDAFgC,MAEhC;AAEAA,wDAJgC,CAIhCA;AAJF,aAKO;AACLA,sBAAc,iCADT,MACS,CAAdA;AACA,yBAFK,WAEL;AATF;;AAWA,0BAAoB;AAClBC,mCAA2BD,YADT,OAClBC;AAZF;;AAcA,aAdA,WAcA;AApBuB;AAsBzBp8B,SAtByB,mBAsBjB;AACN,qBAAiB,KAAjB,OAA6B;AAC3B,YAAMm8B,cAAc,WADO,EACP,CAApB;AACA,mCAF2B,WAE3B;AACA,eAAO,WAHoB,EAGpB,CAAP;AAJI;AAtBiB;AAAA,GAA3BF;AA8BA,SApCuD,cAoCvD;AA7OF,CAyMwB,EAAxB;;AAuCA,oCAAoC;AAClC,MAAMI,yBAD4B,IAClC;AAEA,MAAM90D,QAAQ+0D,QAAd;AAAA,MACE90D,SAAS80D,QADX;AAAA,MAEEC,SAASh1D,QALuB,CAGlC;AAGA,gBANkC,EAMlC;AACA,MAAMi1D,SAAS,eAAeD,UAAU,SAPN,CAOJA,CAAf,CAAf;AAEA,MAAME,cACF,eAAe,iDAAf,CADJ;AAIA,MAAMC,WAAYn1D,QAAD,CAACA,GAAa,CAA/B;AAAA,MACEo1D,QAAQL,QAdwB,IAalC;AAEA,MAAMt3C,OAAO,eAAe03C,WAfM,MAerB,CAAb;AACA,MAAI33C,MAhB8B,CAgBlC;;AACA,OAAK3Z,OAAOD,KAAKwxD,MAAjB,QAA+BvxD,IAA/B,IAAuCA,CAAvC,IAA4C;AAC1C,QAAMwxD,OAAOD,MAD6B,CAC7BA,CAAb;AACA,QAAIE,OAFsC,GAE1C;;AACA,WAAOA,OAAP,GAAiB;AACf73C,WAAKD,GAALC,MAAc43C,kBADC,GACf53C;AACA63C,eAFe,CAEfA;AALwC;AAjBV;;AAoClC,MAAItT,QApC8B,CAoClC;AACAxkC,QArCkC,CAqClCA;;AACA,MAAIC,cAAJ,GAAqB;AACnBw3C,gBADmB,CACnBA;AACA,MAFmB,KAEnB;AAxCgC;;AA0ClC,OAAKM,IAAL,GAAYA,IAAZ,OAAuBA,CAAvB,IAA4B;AAC1B,QAAI93C,cAAcA,KAAKD,MAAvB,CAAkBC,CAAlB,EAAiC;AAC/Bw3C,kBAAYx3C,gBADmB,CAC/Bw3C;AACA,QAF+B,KAE/B;AAHwB;;AAK1Bz3C,OAL0B;AA1CM;;AAiDlC,MAAIC,cAAJ,GAAqB;AACnBw3C,gBADmB,CACnBA;AACA,MAFmB,KAEnB;AAnDgC;;AAqDlC,OAAKpxD,IAAL,GAAYA,IAAZ,QAAwBA,CAAxB,IAA6B;AAC3B2Z,UAAM3Z,IADqB,QAC3B2Z;AACAg4C,SAAK3xD,IAFsB,MAE3B2xD;;AACA,QAAI/3C,KAAKD,MAALC,cAAyBA,KAA7B,GAA6BA,CAA7B,EAAwC;AACtCw3C,mBAAax3C,gBADyB,CACtCw3C;AACA,QAFsC,KAEtC;AALyB;;AAS3B,QAAIQ,MAAO,iBAAD,CAAC,KAAsB,KAAKj4C,MAAL,gBATN,CAShB,CAAX;;AACA,SAAK+3C,IAAL,GAAYA,IAAZ,OAAuBA,CAAvB,IAA4B;AAC1BE,YACG,QAAD,CAAC,KACA,KAAKj4C,MAAL,SADD,CAAC,KAEA,KAAKA,iBAAL,SAJuB,CAEvB,CADHi4C;;AAIA,UAAIP,YAAJ,GAAIA,CAAJ,EAAsB;AACpBD,eAAOO,KAAPP,KAAiBC,YADG,GACHA,CAAjBD;AACA,UAFoB,KAEpB;AAPwB;;AAS1Bz3C,SAT0B;AAVD;;AAqB3B,QAAIC,KAAKD,MAALC,cAAyBA,KAA7B,GAA6BA,CAA7B,EAAwC;AACtCw3C,aAAOO,KAAPP,KAAiBx3C,gBADqB,CACtCw3C;AACA,QAFsC,KAEtC;AAvByB;;AA0B3B,QAAIjT,QAAJ,wBAAoC;AAClC,aADkC,IAClC;AA3ByB;AArDK;;AAoFlCxkC,QAAM23C,YAAY,SApFgB,CAoF5BA,CAAN33C;AACAg4C,OAAK3xD,IArF6B,MAqFlC2xD;;AACA,MAAI/3C,cAAJ,GAAqB;AACnBw3C,iBADmB,CACnBA;AACA,MAFmB,KAEnB;AAxFgC;;AA0FlC,OAAKM,IAAL,GAAYA,IAAZ,OAAuBA,CAAvB,IAA4B;AAC1B,QAAI93C,cAAcA,KAAKD,MAAvB,CAAkBC,CAAlB,EAAiC;AAC/Bw3C,aAAOO,KAAPP,KAAiBx3C,gBADc,CAC/Bw3C;AACA,QAF+B,KAE/B;AAHwB;;AAK1Bz3C,OAL0B;AA1FM;;AAiGlC,MAAIC,cAAJ,GAAqB;AACnBw3C,WAAOO,KAAPP,KADmB,CACnBA;AACA,MAFmB,KAEnB;AAnGgC;;AAqGlC,MAAIjT,QAAJ,wBAAoC;AAClC,WADkC,IAClC;AAtGgC;;AA0GlC,MAAM0T,QAAQ,eAAe,YAAY,CAAZ,MAAmB,CAAnB,mBAAf,CAAd;AACA,MAAMC,WA3G4B,EA2GlC;;AACA,OAAK9xD,IAAL,GAAYm+C,SAASn+C,KAArB,QAAkCA,CAAlC,IAAuC;AACrC,QAAI4a,IAAI5a,IAD6B,MACrC;AACA,QAAMG,MAAMya,IAFyB,KAErC;;AACA,WAAOA,WAAW,CAACw2C,OAAnB,CAAmBA,CAAnB,EAA8B;AAC5Bx2C,OAD4B;AAHO;;AAMrC,QAAIA,MAAJ,KAAe;AAAA;AANsB;;AASrC,QAAMm3C,SAAS,CAACn3C,IAAD,UAAf;AAEA,QAAMo3C,KAX+B,CAWrC;AACA,QAAIpuD,OAAOwtD,OAZ0B,CAY1BA,CAAX;;AACA,OAAG;AACD,UAAMpjC,OAAO6jC,MADZ,IACYA,CAAb;;AACA,SAAG;AACDj3C,aADC,IACDA;AADF,eAES,CAACw2C,OAJT,CAISA,CAFV;;AAIA,UAAMa,KAAKb,OANV,CAMUA,CAAX;;AACA,UAAIa,YAAYA,OAAhB,IAA2B;AAEzBruD,eAFyB,EAEzBA;AAEAwtD,oBAJyB,CAIzBA;AAJF,aAKO;AAGLxtD,eAAOquD,KAAO,OAAD,IAAC,IAHT,CAGLruD;AAEAwtD,qBAAcxtD,QAAD,CAACA,GAAcA,QALvB,CAKLwtD;AAjBD;;AAoBDW,kBAAYn3C,IApBX,MAoBDm3C;AACAA,kBAAan3C,IAAD,MAACA,GArBZ,CAqBDm3C;;AAEA,UAAI,CAACX,OAAL,CAAKA,CAAL,EAAgB;AACd,UADc,KACd;AAxBD;AAAH,aA0BSY,OAvC4B,CAarC;;AA2BAF,kBAxCqC,MAwCrCA;AACA,MAzCqC,CAyCrC;AArJgC;;AAwJlC,MAAMI,cAAc,SAAdA,WAAc,IAAa;AAC/Bx2C,MAD+B,IAC/BA;AAEAA,YAAQ,IAARA,OAAmB,KAHY,MAG/BA;AACAA,mBAAe,CAJgB,MAI/BA;AACAA,MAL+B,SAK/BA;;AACA,SAAK,IAAIyR,IAAJ,GAAWglC,KAAKL,SAArB,QAAsC3kC,IAAtC,IAA8CA,CAA9C,IAAmD;AACjD,UAAMilC,IAAIN,SADuC,CACvCA,CAAV;AACAp2C,eAAS02C,EAAT12C,CAAS02C,CAAT12C,EAAe02C,EAFkC,CAElCA,CAAf12C;;AACA,WAAK,IAAI22C,IAAJ,GAAWC,KAAKF,EAArB,QAA+BC,IAA/B,IAAuCA,KAAvC,GAA+C;AAC7C32C,iBAAS02C,EAAT12C,CAAS02C,CAAT12C,EAAe02C,EAAEC,IAD4B,CAC9BD,CAAf12C;AAJ+C;AANpB;;AAa/BA,MAb+B,IAa/BA;AACAA,MAd+B,SAc/BA;AACAA,MAf+B,OAe/BA;AAvKgC,GAwJlC;;AAkBA,SA1KkC,WA0KlC;AA1ZF;;AA6ZA,IAAM62C,mBAAoB,mCAAmC;AAE3D,8BAA4B;AAE1B,wBAF0B,KAE1B;AACA,oBAH0B,CAG1B;AACA,yBAJ0B,CAI1B;AACA,sBAL0B,qBAK1B;AACA,2BAN0B,CAM1B;AACA,sBAP0B,0BAO1B;AACA,mBAR0B,CAQ1B;AAEA,aAV0B,CAU1B;AACA,aAX0B,CAW1B;AAEA,iBAb0B,CAa1B;AACA,iBAd0B,CAc1B;AAEA,uBAhB0B,CAgB1B;AACA,uBAjB0B,CAiB1B;AACA,sBAlB0B,CAkB1B;AACA,6BAAyB7pD,wBAnBC,IAmB1B;AACA,oBApB0B,CAoB1B;AAEA,qBAtB0B,SAsB1B;AACA,uBAvB0B,SAuB1B;AACA,uBAxB0B,KAwB1B;AAEA,qBA1B0B,CA0B1B;AACA,uBA3B0B,CA2B1B;AACA,qBA5B0B,CA4B1B;AACA,uBA7B0B,IA6B1B;AACA,0BA9B0B,IA8B1B;AACA,wBA/B0B,IA+B1B;AAjCyD;;AAoC3D6pD,+BAA6B;AAC3B3zD,WAAO,kCAAkC;AACvC,aAAOgC,cADgC,IAChCA,CAAP;AAFyB;AAI3B4xD,qBAAiB,gDAAgD;AAC/D,eAD+D,CAC/D;AACA,eAF+D,CAE/D;AANyB;AAAA,GAA7BD;AASA,SA7C2D,gBA6C3D;AA1cF,CA6Z0B,EAA1B;;AAmDA,IAAME,iBAAkB,iCAAiC;AAGvD,MAAMC,iBAHiD,EAGvD;AAEA,MAAMC,kBALiD,EAKvD;;AAGA,uHAQE;AACA,eADA,SACA;AACA,mBAAe,IAFf,gBAEe,EAAf;AACA,sBAHA,EAGA;AACA,uBAJA,IAIA;AACA,yBALA,KAKA;AACA,eANA,IAMA;AACA,iBAPA,IAOA;AACA,sBARA,UAQA;AACA,gBATA,IASA;AACA,yBAVA,aAUA;AACA,wBAXA,YAWA;AACA,sBAZA,UAYA;AACA,sBAbA,EAaA;AACA,2BAdA,IAcA;AAGA,yBAjBA,IAiBA;AACA,8BAlBA,EAkBA;AACA,sBAnBA,CAmBA;AACA,sBApBA,EAoBA;AACA,wBArBA,CAqBA;AACA,qBAtBA,IAsBA;AACA,0BAvBA,IAuBA;AACA,8BAxBA,EAwBA;AACA,iCAzBA,qBAyBA;AACA,0BAAsB,mBAAmB,KA1BzC,aA0BsB,CAAtB;;AACA,mBAAe;AAGb3B,iCAHa,SAGbA;AA9BF;;AAgCA,sCAhCA,IAgCA;AAhDqD;;AAmDvD,4CAA+D;AAAA,QAArB4B,YAAqB,uEAA/D,IAA+D;;AAC7D,QAAI,oCAAoC1B,mBAAxC,WAAsE;AACpEtD,mCADoE,CACpEA;AADoE;AADT;;AAiB7D,QAAMxxD,SAAS80D,QAAf;AAAA,QACE/0D,QAAQ+0D,QAlBmD,KAiB7D;AAEA,QAAM2B,qBAAqBz2D,SAnBkC,iBAmB7D;AACA,QAAM02D,aAAc,UAAD,kBAAC,IApByC,iBAoB7D;AACA,QAAMC,cAAcF,wCAAwCC,aArBC,CAqB7D;AAEA,QAAME,eAAepF,2BAvBwC,iBAuBxCA,CAArB;AACA,QAAIqF,SAAJ;AAAA,QAxB6D,OAwB7D;AAEA,QAAMhpC,MAAMinC,QA1BiD,IA0B7D;AACA,QAAM1sB,OAAOwuB,aA3BgD,IA2B7D;AACA,+BA5B6D,gBA4B7D;AAEA,2DA9B6D,eA8B7D;;AACA,sBAAkB;AAChB,cAAQJ,aAAR;AACE;AACEM,2BAAiBN,aADnB,CACmBA,CAAjBM;AACAC,6BAAmBP,aAFrB,CAEqBA,CAAnBO;AACAC,4BAAkBR,aAHpB,CAGoBA,CAAlBQ;AACAC,4BAAkBT,aAJpB,CAIoBA,CAAlBS;AALJ;;AAOE;AACEH,2BAAiBN,aADnB,CACmBA,CAAjBM;AACAC,6BAAmBP,aAFrB,CAEqBA,CAAnBO;AACAC,4BAAkBR,aAHpB,CAGoBA,CAAlBQ;AACAC,4BAAkBT,aAJpB,CAIoBA,CAAlBS;AAXJ;AAAA;AAhC2D;;AAkD7D,QAAInC,iBAAiB7nD,gBAArB,gBAA+C;AAE7C,UAAMiqD,YAAYrpC,IAF2B,UAE7C;AACA,UAAMspC,SAAS,gBAAgB/uB,KAAhB,WAAgCA,mBAHF,CAG9B,CAAf;AACA,UAAMgvB,mBAAmBD,OAJoB,MAI7C;AACA,UAAME,cAAet3D,QAAD,CAACA,IALwB,CAK7C;AACA,UAAIu3D,QANyC,UAM7C;AACA,UAAIC,QAAQ15C,gDAPiC,UAO7C;;AAEA,2BAAqB;AACnB,YAAIo5C,+BAA+BA,0BAAnC,GAAgE;AAAA,qBAC7C,cAD6C;AAC9D,eAD8D;AAC9D,eAD8D;AAD7C;AATwB;;AAe7C,WAAKrzD,IAAL,GAAYA,IAAZ,aAA6BA,CAA7B,IAAkC;AAChC4zD,0BACE5zD,qCAF8B,kBAChC4zD;AAEAC,kBAHgC,CAGhCA;;AACA,aAAKnC,IAAL,GAAYA,IAAZ,iBAAiCA,CAAjC,IAAsC;AACpC,cAAMoC,UAAUR,YADoB,MACpC;AACA,cAAInmC,IAFgC,CAEpC;AACA,cAAM4mC,OAAOD,gCAAgCA,cAHT,CAGpC;AACA,cAAME,eAAeD,OAAO,CAJQ,CAIpC;AACA,cAAItC,OALgC,CAKpC;AACA,cAAIwC,UANgC,CAMpC;;AACA,iBAAO9mC,IAAP,cAAyBA,KAAzB,GAAiC;AAC/B8mC,sBAAUhqC,IAAIgpC,MADiB,EACrBhpC,CAAVgqC;AACAV,mBAAOM,OAAPN,MAAoBU,wBAFW,KAE/BV;AACAA,mBAAOM,OAAPN,MAAoBU,uBAHW,KAG/BV;AACAA,mBAAOM,OAAPN,MAAoBU,uBAJW,KAI/BV;AACAA,mBAAOM,OAAPN,MAAoBU,uBALW,KAK/BV;AACAA,mBAAOM,OAAPN,MAAoBU,sBANW,KAM/BV;AACAA,mBAAOM,OAAPN,MAAoBU,sBAPW,KAO/BV;AACAA,mBAAOM,OAAPN,MAAoBU,sBARW,KAQ/BV;AACAA,mBAAOM,OAAPN,MAAoBU,sBATW,KAS/BV;AAhBkC;;AAkBpC,iBAAOpmC,IAAP,MAAiBA,CAAjB,IAAsB;AACpB,gBAAIskC,SAAJ,GAAgB;AACdwC,wBAAUhqC,IAAIgpC,MADA,EACJhpC,CAAVgqC;AACAxC,qBAFc,GAEdA;AAHkB;;AAMpB8B,mBAAOM,OAAPN,MAAoBU,yBANA,KAMpBV;AACA9B,qBAPoB,CAOpBA;AAzBkC;AAJN;;AAiChC,eAAOoC,UAAP,kBAAmC;AACjCN,iBAAOM,OAAPN,MADiC,CACjCA;AAlC8B;;AAqChC3F,0CAAkC5tD,IArCF,iBAqChC4tD;AApD2C;AAA/C,WAsDO,IAAIsD,iBAAiB7nD,gBAArB,YAA2C;AAEhD,UAAM6qD,kBAAkB,CAAC,EACvB,sCAH8C,eAEvB,CAAzB;AAMAxC,UARgD,CAQhDA;AACAyC,yBAAmBh4D,4BAT6B,CAShDg4D;;AACA,WAAKn0D,IAAL,GAAYA,IAAZ,YAA4BA,CAA5B,IAAiC;AAC/BwkC,iBAASva,qBAAqBgpC,SADC,gBACtBhpC,CAATua;AACAyuB,kBAF+B,gBAE/BA;;AAEA,6BAAqB;AACnB,eAAK,IAAI9lC,KAAT,GAAgBA,KAAhB,kBAAsCA,MAAtC,GAA8C;AAC5C,gCAAoB;AAClBqX,mBAAKrX,KAALqX,KAAc0uB,eAAe1uB,KAAKrX,KADhB,CACWqX,CAAf0uB,CAAd1uB;AAF0C;;AAI5C,kCAAsB;AACpBA,mBAAKrX,KAALqX,KAAc2uB,iBAAiB3uB,KAAKrX,KADhB,CACWqX,CAAjB2uB,CAAd3uB;AAL0C;;AAO5C,iCAAqB;AACnBA,mBAAKrX,KAALqX,KAAc4uB,gBAAgB5uB,KAAKrX,KADhB,CACWqX,CAAhB4uB,CAAd5uB;AAR0C;AAD3B;AAJU;;AAkB/BopB,0CAlB+B,CAkB/BA;AACA8D,aAnB+B,iBAmB/BA;AA7B8C;;AA+BhD,UAAI1xD,IAAJ,aAAqB;AACnBm0D,2BAAmBh4D,6BADA,CACnBg4D;AACA3vB,iBAASva,qBAAqBgpC,SAFX,gBAEVhpC,CAATua;;AAEA,6BAAqB;AACnB,eAAK,IAAIrX,MAAT,GAAgBA,MAAhB,kBAAsCA,OAAtC,GAA8C;AAC5C,gCAAoB;AAClBqX,mBAAKrX,MAALqX,KAAc0uB,eAAe1uB,KAAKrX,MADhB,CACWqX,CAAf0uB,CAAd1uB;AAF0C;;AAI5C,kCAAsB;AACpBA,mBAAKrX,MAALqX,KAAc2uB,iBAAiB3uB,KAAKrX,MADhB,CACWqX,CAAjB2uB,CAAd3uB;AAL0C;;AAO5C,iCAAqB;AACnBA,mBAAKrX,MAALqX,KAAc4uB,gBAAgB5uB,KAAKrX,MADhB,CACWqX,CAAhB4uB,CAAd5uB;AAR0C;AAD3B;AAJF;;AAkBnBopB,0CAlBmB,CAkBnBA;AAjD8C;AAA3C,WAmDA,IAAIsD,iBAAiB7nD,gBAArB,WAA0C;AAE/C,UAAM6qD,mBAAkB,CAAC,EACvB,sCAH6C,eAEtB,CAAzB;;AAMAN,wBAR+C,iBAQ/CA;AACAO,yBAAmBh4D,QAT4B,eAS/Cg4D;;AACA,WAAKn0D,IAAL,GAAYA,IAAZ,aAA6BA,CAA7B,IAAkC;AAChC,YAAIA,KAAJ,YAAqB;AACnB4zD,4BADmB,kBACnBA;AACAO,6BAAmBh4D,QAFA,eAEnBg4D;AAH8B;;AAMhCN,kBANgC,CAMhCA;;AACA,aAAKnC,IAAL,kBAA2BA,CAA3B,KAAkC;AAChCltB,eAAKqvB,OAALrvB,MAAkBva,IAAIgpC,MADU,EACdhpC,CAAlBua;AACAA,eAAKqvB,OAALrvB,MAAkBva,IAAIgpC,MAFU,EAEdhpC,CAAlBua;AACAA,eAAKqvB,OAALrvB,MAAkBva,IAAIgpC,MAHU,EAGdhpC,CAAlBua;AACAA,eAAKqvB,OAALrvB,MAJgC,GAIhCA;AAX8B;;AAchC,8BAAqB;AACnB,eAAK,IAAIrX,MAAT,GAAgBA,MAAhB,SAA6BA,OAA7B,GAAqC;AACnC,gCAAoB;AAClBqX,mBAAKrX,MAALqX,KAAc0uB,eAAe1uB,KAAKrX,MADhB,CACWqX,CAAf0uB,CAAd1uB;AAFiC;;AAInC,kCAAsB;AACpBA,mBAAKrX,MAALqX,KAAc2uB,iBAAiB3uB,KAAKrX,MADhB,CACWqX,CAAjB2uB,CAAd3uB;AALiC;;AAOnC,iCAAqB;AACnBA,mBAAKrX,MAALqX,KAAc4uB,gBAAgB5uB,KAAKrX,MADhB,CACWqX,CAAhB4uB,CAAd5uB;AARiC;AADlB;AAdW;;AA4BhCopB,0CAAkC5tD,IA5BF,iBA4BhC4tD;AAtC6C;AAA1C,WAwCA;AACL,YAAM,oCAA6BsD,QAD9B,IACC,EAAN;AApM2D;AAnDR;;AA2PvD,4CAA0C;AACxC,QAAM90D,SAAS80D,QAAf;AAAA,QACE/0D,QAAQ+0D,QAF8B,KACxC;AAEA,QAAM2B,qBAAqBz2D,SAHa,iBAGxC;AACA,QAAM02D,aAAc,UAAD,kBAAC,IAJoB,iBAIxC;AACA,QAAMC,cAAcF,wCAAwCC,aALpB,CAKxC;AAEA,QAAME,eAAepF,2BAPmB,iBAOnBA,CAArB;AACA,QAAIqF,SARoC,CAQxC;AACA,QAAMhpC,MAAMinC,QAT4B,IASxC;AACA,QAAM1sB,OAAOwuB,aAV2B,IAUxC;;AAEA,SAAK,IAAIhzD,IAAT,GAAgBA,IAAhB,aAAiCA,CAAjC,IAAsC;AACpC,UAAM4zD,kBACJ5zD,qCAFkC,kBACpC;AAKA,UAAI6zD,UANgC,CAMpC;;AACA,WAAK,IAAInC,IAAT,GAAgBA,IAAhB,iBAAqCA,CAArC,IAA0C;AACxC,YAAIF,IAAJ;AAAA,YACEC,OAFsC,CACxC;;AAEA,aAAK,IAAItkC,IAAT,GAAgBA,IAAhB,OAA2BA,CAA3B,IAAgC;AAC9B,cAAI,CAAJ,MAAW;AACTqkC,mBAAOvnC,IAAIgpC,MADF,EACFhpC,CAAPunC;AACAC,mBAFS,GAETA;AAH4B;;AAK9BjtB,0BAAgBgtB,kBALc,GAK9BhtB;AACAqvB,qBAN8B,CAM9BA;AACApC,mBAP8B,CAO9BA;AAVsC;AAPN;;AAoBpC7D,wCAAkC5tD,IApBE,iBAoBpC4tD;AAhCsC;AA3Pa;;AA+RvD,4CAA0C;AACxC,QAAMwG,aAAa,6IAAnB;;AAYA,SAAK,IAAIp0D,IAAJ,GAAWD,KAAKq0D,WAArB,QAAwCp0D,IAAxC,IAAgDA,CAAhD,IAAqD;AACnD,UAAMq0D,WAAWD,WADkC,CAClCA,CAAjB;;AACA,UAAIE,wBAAJ,WAAuC;AACrCC,4BAAoBD,UADiB,QACjBA,CAApBC;AAHiD;AAbb;;AAmBxC,QAAID,0BAAJ,WAAyC;AACvCC,0BAAoBD,UADmB,WACnBA,EAApBC;AACAA,+BAAyBD,UAFc,cAEvCC;AArBsC;AA/Ra;;AAwTvD,kCAAgC;AAC9B3G,sBAD8B,SAC9BA;AACAA,oBAF8B,SAE9BA;AACAA,mBAH8B,SAG9BA;AACAA,sBAJ8B,CAI9BA;AACAA,oBAL8B,CAK9BA;AACAA,kBAN8B,MAM9BA;AACAA,mBAP8B,OAO9BA;AACAA,qBAR8B,EAQ9BA;AACAA,mCAT8B,aAS9BA;AACAA,eAV8B,iBAU9BA;;AACA,QAAIA,oBAAJ,WAAmC;AACjCA,sBADiC,EACjCA;AACAA,2BAFiC,CAEjCA;AAb4B;AAxTuB;;AAyUvD,mDAAiD;AAC/C,QAAM10C,SAASD,MADgC,MAC/C;;AACA,SAAK,IAAIjZ,IAAT,GAAgBA,IAAhB,QAA4BA,KAA5B,GAAoC;AAClC,UAAMw0D,QAAQv7C,MADoB,CACpBA,CAAd;;AACA,UAAIu7C,UAAJ,GAAiB;AACfv7C,cAAMjZ,IAANiZ,KADe,EACfA;AACAA,cAAMjZ,IAANiZ,KAFe,EAEfA;AACAA,cAAMjZ,IAANiZ,KAHe,EAGfA;AAHF,aAIO,IAAIu7C,QAAJ,KAAiB;AACtB,YAAMC,SAAS,MADO,KACtB;AACAx7C,cAAMjZ,IAANiZ,KAAgBA,MAAMjZ,IAANiZ,aAAuBy7C,KAAxB,MAACz7C,IAFM,CAEtBA;AACAA,cAAMjZ,IAANiZ,KAAgBA,MAAMjZ,IAANiZ,aAAuB07C,KAAxB,MAAC17C,IAHM,CAGtBA;AACAA,cAAMjZ,IAANiZ,KAAgBA,MAAMjZ,IAANiZ,aAAuB27C,KAAxB,MAAC37C,IAJM,CAItBA;AAVgC;AAFW;AAzUM;;AA0VvD,+DAA6D;AAC3D,QAAMC,SAAS27C,SAD4C,MAC3D;AACA,QAAMh2D,QAAQ,IAF6C,GAE3D;;AACA,SAAK,IAAImB,IAAT,GAAgBA,IAAhB,QAA4BA,KAA5B,GAAoC;AAClC,UAAMw0D,QAAQM,cAAcA,YAAYD,SAA1BC,CAA0BD,CAAZC,CAAdA,GAAyCD,SADrB,CACqBA,CAAvD;AACAE,qBAAgBA,uBAAD,KAACA,GAFkB,CAElCA;AALyD;AA1VN;;AAmWvD,oEAAkE;AAChE,QAAM77C,SAAS27C,SADiD,MAChE;;AACA,SAAK,IAAI70D,IAAT,GAAgBA,IAAhB,QAA4BA,KAA5B,GAAoC;AAClC,UAAMg1D,IACJH,SAAS70D,IAAT60D,UACAA,SAAS70D,IAAT60D,KADAA,MAEAA,SAAS70D,IAAT60D,KAJgC,EAClC;AAIAE,qBAAeD,cACVC,eAAeD,YAAYE,KAA5B,CAAgBF,CAAfC,IADUD,IAEVC,eAAD,CAACA,IAP6B,EAKlCA;AAP8D;AAnWX;;AAgXvD,iGAQE;AACA,QAAME,cAAc,CAAC,CADrB,QACA;AACA,QAAMP,KAAKO,cAAcC,SAAdD,CAAcC,CAAdD,GAFX,CAEA;AACA,QAAMN,KAAKM,cAAcC,SAAdD,CAAcC,CAAdD,GAHX,CAGA;AACA,QAAML,KAAKK,cAAcC,SAAdD,CAAcC,CAAdD,GAJX,CAIA;AAEA,QANA,SAMA;;AACA,QAAIE,YAAJ,cAA8B;AAC5BC,kBAD4B,sBAC5BA;AADF,WAEO;AACLA,kBADK,iBACLA;AAVF;;AAcA,QAAMC,oBAdN,OAcA;AACA,QAAMzjB,YAAYlzC,iBAAiBA,UAAU22D,oBAf7C,KAemC32D,CAAjBA,CAAlB;;AACA,SAAK,IAAI42D,MAAT,GAAkBA,MAAlB,QAAgCA,OAAhC,WAAkD;AAChD,UAAMC,cAAc72D,oBAAoBtC,SADQ,GAC5BsC,CAApB;AACA,UAAMm2D,WAAWW,oCAF+B,WAE/BA,CAAjB;AACA,UAAMT,YAAYU,qCAH8B,WAG9BA,CAAlB;;AAEA,uBAAiB;AACfC,6BAAqBb,SAArBa,cADe,EACfA;AAN8C;;AAQhDN,gBAAUP,SAAVO,MAAyBL,UAAzBK,MARgD,WAQhDA;AAEAI,yCAVgD,GAUhDA;AA1BF;AAxXqD;;AAsZvD,4DAA0D;AACxD,QAAM/D,OAAOp6C,MAD2C,MACxD;AACA,QAAMm+C,UAAUn+C,MAFwC,OAExD;AAEAu2C,qBACEv2C,MADFu2C,cAIEv2C,MAJFu2C,QAKEv2C,MALFu2C,SAMEv2C,MAVsD,OAIxDu2C;AASA,QAAMsH,WAAW79C,kBAbuC,IAaxD;;AACA,QAAI,CAACA,MAAD,eAAsButC,aAA1B,WAAkD;AAChD,UAAM+Q,WAAW,0BAA0B;AACzCC,eAAOH,SADkC;AAEzChE,YAFyC,EAEzCA,IAFyC;AAGzC2C,oBAAY;AACVe,mBAAS99C,MADC;AAEV69C,kBAFU,EAEVA;AAFU;AAH6B,OAA1B,CAAjB;AAQAtH,sCATgD,CAShDA;AACAA,8BAAwBv2C,MAAxBu2C,SAAuCv2C,MAVS,OAUhDu2C;AAVgD;AAdM;;AA2BxDiI,2CAGEpE,KAHFoE,OAIEpE,KAJFoE,QAKEx+C,MALFw+C,mBAOEx+C,MAlCsD,WA2BxDw+C;AASAjI,2BApCwD,CAoCxDA;AA1bqD;;AA6bvD,MAAMkI,kBAAkB,2BAAxB;AACA,MAAMC,mBAAmB,2BAAzB;AACA,MAAMC,cA/biD,EA+bvD;AACA,MAAMC,UAhciD,EAgcvD;AAEAxD,6BAA2B;AACzByD,gBADyB,+BAMtB;AAAA,UALU,SAKV,SALU,SAKV;AAAA,UALU,QAKV,SALU,QAKV;AAAA,qCAFDxQ,YAEC;AAAA,UAFDA,YAEC,mCALU,KAKV;AAAA,mCADDrB,UACC;AAAA,UADDA,UACC,iCALH6R,IAKG;AAMD,UAAM/5D,QAAQ,gBANb,KAMD;AACA,UAAMC,SAAS,gBAPd,MAOD;AAEA,eATC,IASD;AACA,2BAAqBioD,cAVpB,oBAUD;AACA,qCAXC,MAWD;AACA,eAZC,OAYD;;AAEA,wBAAkB;AAChB,YAAM8R,oBAAoB,4DADV,IACU,CAA1B;AAMA,4BAAoB,KAPJ,GAOhB;AACA,iCAAyBA,kBART,MAQhB;AACA,mBAAWA,kBATK,OAShB;AACA,iBAVgB,IAUhB;AAGA,iCACE,KADF,KAEE,kBAfc,mBAahB;AA3BD;;AAiCD,eAjCC,IAiCD;AACAC,wBAAkB,KAlCjB,GAkCDA;;AACA,qBAAe;AACb,iCAAyB,KAAzB,KADa,SACb;AApCD;;AAsCD,+BAAyB,KAAzB,KAAmChR,SAtClC,SAsCD;AAEA,2BAAqB,6BAxCpB,KAwCoB,EAArB;AACA,kCAA4B1mD,WAC1B,mBAD0BA,CAC1B,CAD0BA,EAE1B,mBA3CD,CA2CC,CAF0BA,CAA5B;;AAKA,UAAI,KAAJ,YAAqB;AACnB,wBADmB,WACnB;AA/CD;AANsB;AAyDzB23D,yBAAqB,wGAKnB;AACA,UAAMtR,YAAYQ,aADlB,SACA;AACA,UAAMT,UAAUS,aAFhB,OAEA;AACA,UAAIvlD,IAAIs2D,qBAHR,CAGA;AACA,UAAMC,eAAexR,UAJrB,MAIA;;AAGA,UAAIwR,iBAAJ,GAAwB;AACtB,eADsB,CACtB;AARF;;AAWA,UAAMC,kBACJD,sCACA,4BAbF,UAWA;AAGA,UAAME,UAAUD,kBAAkBz1D,aAAlBy1D,iBAdhB,CAcA;AACA,UAAI3E,QAfJ,CAeA;AAEA,UAAMvM,aAAa,KAjBnB,UAiBA;AACA,UAAMD,OAAO,KAlBb,IAkBA;AACA,UAnBA,IAmBA;;AAEA,mBAAa;AACX,YAAIqR,yBAAyB12D,MAAM02D,QAAnC,gBAA2D;AACzDA,6BADyD,gBACzDA;AACA,iBAFyD,CAEzD;AAHS;;AAMXC,eAAO7R,QANI,CAMJA,CAAP6R;;AAEA,YAAIA,SAAStlD,UAAb,YAA6B;AAC3B,iCAAuB0zC,UADI,CACJA,CAAvB;AADF,eAEO;AAAA,qDACkBA,UAAvB,CAAuBA,CADlB;AAAA;;AAAA;AACL,gEAAqC;AAAA,kBAArC,QAAqC;AACnC,kBAAM6R,WAAWC,yCADkB,IACnC;;AAIA,kBAAI,CAACD,aAAL,QAAKA,CAAL,EAA6B;AAC3BA,uCAD2B,gBAC3BA;AACA,uBAF2B,CAE3B;AAPiC;AADhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAVI;;AAuBX52D,SAvBW;;AA0BX,YAAIA,MAAJ,cAAwB;AACtB,iBADsB,CACtB;AA3BS;;AAgCX,YAAIw2D,mBAAmB,UAAvB,iBAAkD;AAChD,cAAIz1D,aAAJ,SAA0B;AACxB+1D,4BADwB;AAExB,mBAFwB,CAExB;AAH8C;;AAKhDjF,kBALgD,CAKhDA;AArCS;AArBb;AA9DuB;AAgIzBkF,gBAAY,qCAAqC;AAE/C,aAAO,0BAA0B,6BAAjC,MAAoE;AAClE,aADkE,OAClE;AAH6C;;AAM/C,eAN+C,OAM/C;;AAEA,UAAI,KAAJ,mBAA4B;AAC1B,mBAAW,KADe,YAC1B;AACA,iBAF0B,IAE1B;AACA,6CAH0B,CAG1B;AACA,2BAAmB,KAAnB,sBAJ0B,CAI1B;AACA,iBAL0B,OAK1B;AACA,iCAN0B,IAM1B;AAd6C;;AAiB/C,0BAjB+C,KAiB/C;AACA,wBAlB+C,KAkB/C;;AAEA,UAAI,KAAJ,YAAqB;AACnB,wBADmB,SACnB;AArB6C;AAhIxB;AA0JzBxlD,kBAAc,4CAA4C;AACxD,+BADwD,KACxD;AACA,2BAFwD,KAExD;AA5JuB;AA8JzBC,gBAAY,0CAA0C;AACpD,yBAAmBskD,gBADiC,KACjCA,CAAnB;AA/JuB;AAiKzBrkD,iBAAa,2CAA2C;AACtD,0BAAoBskD,iBADkC,KAClCA,CAApB;AAlKuB;AAoKzBrkD,mBAAe,6CAA6C;AAC1D,4BAD0D,KAC1D;AArKuB;AAuKzBC,aAAS,sDAAsD;AAC7D,UAAMi8C,MAAM,KADiD,GAC7D;;AACA,UAAIA,oBAAJ,WAAmC;AACjCA,wBADiC,SACjCA;AACAA,6BAFiC,SAEjCA;AAJ2D;AAvKtC;AA8KzBh8C,sBA9KyB,8BA8KzBA,MA9KyB,EA8KE,CA9KF;AAiLzBC,eAjLyB,uBAiLzBA,QAjLyB,EAiLH,CAjLG;AAoLzBC,eAAW,0CAA0C;AACnD,WAAK,IAAI9R,IAAJ,GAAWD,KAAKi3D,OAArB,QAAoCh3D,IAApC,IAA4CA,CAA5C,IAAiD;AAC/C,YAAM0F,QAAQsxD,OADiC,CACjCA,CAAd;AACA,YAAM1wD,MAAMZ,MAFmC,CAEnCA,CAAZ;AACA,YAAM1C,QAAQ0C,MAHiC,CAGjCA,CAAd;;AAEA;AACE;AACE,8BADF,KACE;AAFJ;;AAIE;AACE,4BADF,KACE;AALJ;;AAOE;AACE,6BADF,KACE;AARJ;;AAUE;AACE,+BADF,KACE;AAXJ;;AAaE;AACE,yBAAa1C,MAAb,CAAaA,CAAb,EAAuBA,MADzB,CACyBA,CAAvB;AAdJ;;AAgBE;AACE,oCADF,KACE;AAjBJ;;AAmBE;AACE,6BADF,KACE;AApBJ;;AAsBE;AACE,yBAAaA,MAAb,CAAaA,CAAb,EAAuBA,MADzB,CACyBA,CAAvB;AAvBJ;;AAyBE;AACE,uCAA2B0C,MAD7B,CAC6BA,CAA3B;AA1BJ;;AA4BE;AACE,qCAAyBA,MAD3B,CAC2BA,CAAzB;AACA,mCAAuBA,MAFzB,CAEyBA,CAAvB;AA9BJ;;AAgCE;AACE,gDADF,KACE;AAjCJ;;AAmCE;AACE,gBAAI,aAAJ,aAA8B;AAI5B,kBACE,8BACA,gBAAgB,yBAAhB,mBACE,aAHJ,aAIE;AACA,qBADA,iBACA;AALF,qBAMO;AACL,qBADK,aACL;AAX0B;AADhC;;AAeE,uCAA2B1C,QAAQ,KAARA,YAf7B,IAeE;;AACA,gBAAI,aAAJ,aAA8B;AAC5B,mBAD4B,eAC5B;AAjBJ;;AAmBE,6BAnBF,IAmBE;AAtDJ;;AAwDE;AACE,wCAzDJ,KAyDI;AAzDJ;AANiD;AApL5B;AAuPzBi0D,qBAAiB,0CAA0C;AACzD,UAAMC,cAAc,aADqC,WACzD;AACA,UAAMC,aAAaD,mBAFsC,KAEzD;AACA,UAAME,cAAcF,mBAHqC,MAGzD;AACA,UAAMG,UAAU,iBAAiB,KAJwB,UAIzD;AACA,UAAMC,gBAAgB,gEALmC,IAKnC,CAAtB;AAOA,UAAMC,aAAa,KAZsC,GAYzD;AACA,UAAMC,mBAAmBD,WAbgC,mBAazD;AACA,eAdyD,IAczD;AAEA,UAAME,WAAWH,cAhBwC,OAgBzD;AACAG,qBAAe,IAAIP,YAAnBO,QAAuC,IAAIP,YAjBc,MAiBzDO;AACAA,yBAAmB,CAACP,YAApBO,SAAyC,CAACP,YAlBe,OAkBzDO;AACAA,yCAnByD,gBAmBzDA;AAEAP,0CAAoCO,SArBqB,0BAqBzDP;AAEAQ,+BAvByD,QAuBzDA;AACA,iBAxByD,QAwBzD;AACA,qBAAe,CACb,qBADa,EAEb,SAFa,EAGb,SAHa,CAAf;AAKA,2BA9ByD,UA8BzD;AACA,WA/ByD,UA+BzD;AAtRuB;AAwRzBC,uBAAmB,wCAAwC;AAGzD,UAAMF,WAAW,KAHwC,GAGzD;AACA,WAJyD,UAIzD;AACA,iBAAW,gBAL8C,GAK9C,EAAX;AAEAG,mBACE,KADFA,KAEE,aAFFA,uBAIE,KAXuD,YAOzDA;AAMA,eAbyD,OAazD;AACA,eAdyD,IAczD;AACAF,6BAAuB,KAfkC,GAezDA;AAGA,oCAlByD,QAkBzD;;AAGA,UAAMG,iBAAiB58C,qBACrB,yBADqBA,uBAErBw8C,SAvBuD,mBAqBlCx8C,CAAvB;;AAIA,+BAAyB,KAAzB,KAzByD,cAyBzD;AAGAw8C,eA5ByD,IA4BzDA;AACAA,2CA7ByD,CA6BzDA;AACAA,+BAAyBA,gBAAzBA,OAAgDA,gBA9BS,MA8BzDA;AACAA,eA/ByD,OA+BzDA;AAvTuB;AAyTzBK,sBAAkB,2CAA2C;AAI3D,UAAML,WAAW,aAJ0C,cAI3D;AACA,UAAMF,aAAa,KALwC,GAK3D;AACA,iBAN2D,QAM3D;AACA,2BAP2D,UAO3D;AACA,WAR2D,UAQ3D;AAjUuB;AAmUzBQ,mBAAe,wCAAwC;AACrD,UAAMN,WAAW,KADoC,GACrD;AACA,WAFqD,UAErD;AACA,iBAAW,gBAH0C,GAG1C,EAAX;AAEAG,mBACE,KADFA,KAEE,aAFFA,uBAIE,KATmD,YAKrDA;AAMA,eAXqD,OAWrD;AACAF,6BAAuB,KAZ8B,GAYrDA;;AAGA,UAAMG,iBAAiB58C,qBACrB,yBADqBA,uBAErBw8C,SAjBmD,mBAe9Bx8C,CAAvB;;AAIA,+BAAyB,KAAzB,KAnBqD,cAmBrD;AAtVuB;AAwVzBlJ,UAAM,+BAA+B;AACnC,eADmC,IACnC;AACA,UAAM0+C,MAAM,KAFuB,OAEnC;AACA,2BAHmC,GAGnC;AACA,qBAAeA,IAJoB,KAIpBA,EAAf;AACA,oCALmC,IAKnC;AA7VuB;AA+VzBz+C,aAAS,kCAAkC;AAEzC,UAAI,aAAJ,gBAAiC;AAC/B,aAD+B,gBAC/B;AAHuC;;AAOzC,UACE,sCACC,gCACC,gBAAgB,yBAAhB,mBACE,aAJN,WACE,CADF,EAKE;AACA,aADA,aACA;AAbuC;;AAgBzC,UAAI,2BAAJ,GAAkC;AAChC,uBAAe,gBADiB,GACjB,EAAf;AACA,iBAFgC,OAEhC;AAGA,2BALgC,IAKhC;AAEA,0CAPgC,IAOhC;AAPF,aAQO;AAEL,mCAFK,IAEL;AA1BuC;AA/VlB;AA4XzBC,eAAW,oDAAoD;AAC7D,wCAD6D,CAC7D;AAEA,wCAH6D,IAG7D;AA/XuB;AAmYzB+E,mBAAe,iDAAiD;AAC9D,UAAM42C,MAAM,KADkD,GAC9D;AACA,UAAMqB,UAAU,KAF8C,OAE9D;AACA,UAAIx7B,IAAIw7B,QAAR;AAAA,UACE+F,IAAI/F,QAJwD,CAG9D;;AAEA,WAAK,IAAIjvD,IAAJ,GAAW0xD,IAAX,GAAkB3xD,KAAKi4D,IAA5B,QAAwCh4D,IAAxC,IAAgDA,CAAhD,IAAqD;AACnD,gBAAQg4D,SAAR;AACE,eAAK3mD,UAAL;AACEoiB,gBAAIkC,KAAK+7B,CADX,EACM/7B,CAAJlC;AACAuhC,gBAAIr/B,KAAK+7B,CAFX,EAEM/7B,CAAJq/B;AACA,gBAAM74D,QAAQw5B,KAAK+7B,CAHrB,EAGgB/7B,CAAd;AACA,gBAAMv5B,SAASu5B,KAAK+7B,CAJtB,EAIiB/7B,CAAf;AAEA,gBAAMsiC,KAAKxkC,IANb,KAME;AACA,gBAAMykC,KAAKlD,IAPb,MAOE;AACApH,0BARF,CAQEA;;AACA,gBAAIzxD,eAAeC,WAAnB,GAAiC;AAC/BwxD,6BAD+B,EAC/BA;AADF,mBAEO;AACLA,6BADK,CACLA;AACAA,6BAFK,EAELA;AACAA,4BAHK,EAGLA;AAdJ;;AAiBEA,gBAjBF,SAiBEA;AAlBJ;;AAoBE,eAAKv8C,UAAL;AACEoiB,gBAAIkC,KAAK+7B,CADX,EACM/7B,CAAJlC;AACAuhC,gBAAIr/B,KAAK+7B,CAFX,EAEM/7B,CAAJq/B;AACApH,0BAHF,CAGEA;AAvBJ;;AAyBE,eAAKv8C,UAAL;AACEoiB,gBAAIkC,KAAK+7B,CADX,EACM/7B,CAAJlC;AACAuhC,gBAAIr/B,KAAK+7B,CAFX,EAEM/7B,CAAJq/B;AACApH,0BAHF,CAGEA;AA5BJ;;AA8BE,eAAKv8C,UAAL;AACEoiB,gBAAIkC,KAAK+7B,IADX,CACM/7B,CAAJlC;AACAuhC,gBAAIr/B,KAAK+7B,IAFX,CAEM/7B,CAAJq/B;AACApH,8BACEj4B,KADFi4B,CACEj4B,CADFi4B,EAEEj4B,KAAK+7B,IAFP9D,CAEEj4B,CAFFi4B,EAGEj4B,KAAK+7B,IAHP9D,CAGEj4B,CAHFi4B,EAIEj4B,KAAK+7B,IAJP9D,CAIEj4B,CAJFi4B,KAHF,CAGEA;AAQA8D,iBAXF,CAWEA;AAzCJ;;AA2CE,eAAKrgD,UAAL;AACEu8C,oCAGEj4B,KAHFi4B,CAGEj4B,CAHFi4B,EAIEj4B,KAAK+7B,IAJP9D,CAIEj4B,CAJFi4B,EAKEj4B,KAAK+7B,IALP9D,CAKEj4B,CALFi4B,EAMEj4B,KAAK+7B,IAPT,CAOI/7B,CANFi4B;AAQAn6B,gBAAIkC,KAAK+7B,IATX,CASM/7B,CAAJlC;AACAuhC,gBAAIr/B,KAAK+7B,IAVX,CAUM/7B,CAAJq/B;AACAtD,iBAXF,CAWEA;AAtDJ;;AAwDE,eAAKrgD,UAAL;AACEoiB,gBAAIkC,KAAK+7B,IADX,CACM/7B,CAAJlC;AACAuhC,gBAAIr/B,KAAK+7B,IAFX,CAEM/7B,CAAJq/B;AACApH,8BAAkBj4B,KAAlBi4B,CAAkBj4B,CAAlBi4B,EAA2Bj4B,KAAK+7B,IAAhC9D,CAA2Bj4B,CAA3Bi4B,WAHF,CAGEA;AACA8D,iBAJF,CAIEA;AA5DJ;;AA8DE,eAAKrgD,UAAL;AACEu8C,gBADF,SACEA;AA/DJ;AAAA;AAN4D;;AAyE9DqB,iCAzE8D,CAyE9DA;AA5cuB;AA8czB18C,eAAW,oCAAoC;AAC7C,eAD6C,SAC7C;AA/cuB;AAidzBE,YAAQ,4CAA4C;AAClD0lD,oBAAc,mDADoC,IAClDA;AACA,UAAMvK,MAAM,KAFsC,GAElD;AACA,UAAMwK,cAAc,aAH8B,WAGlD;AAGAxK,wBAAkB,aANgC,WAMlDA;;AACA,UAAI,KAAJ,gBAAyB;AACvB,YAAI,qCAAmCwK,WAAnC,aAAmCA,WAAnC,eAAmCA,YAAvC,YAAgE;AAG9DxK,cAH8D,IAG9DA;AAKA,cAAM37C,YAAY27C,IAR4C,mBAQ9D;;AACA,cAAM/uD,QAAQoc,oDATgD,CAShDA,CAAd;;AACA2yC,4BAAkBwK,4BAV4C,IAU5CA,CAAlBxK;AACA,cAAMyK,YAAY,KAX4C,mBAW5C,EAAlB;AACA,cAAMC,kBAAkB,yBAZsC,KAY9D;;AACA,cAAID,iBAAiB,cAArB,iBAAoD;AAClDzK,gBADkD,cAClDA;AACAA,4BAAgBlvD,WAAW,KAFuB,oBAElCA,CAAhBkvD;AAFF,iBAGO;AACLA,4BAAgBlvD,oBADX,eACWA,CAAhBkvD;AAjB4D;;AAmB9DA,cAnB8D,MAmB9DA;AACAA,cApB8D,OAoB9DA;AApBF,eAqBO;AACL,cAAMyK,aAAY,KADb,mBACa,EAAlB;;AACA,cAAIA,kBAAiB,eAAc,aAAnC,WAA2D;AAGzDzK,gBAHyD,IAGzDA;AACAA,gBAJyD,cAIzDA;AACAA,4BAAgBlvD,WAAW,KAL8B,oBAKzCA,CAAhBkvD;AACAA,gBANyD,MAMzDA;AACAA,gBAPyD,OAOzDA;AAPF,iBAQO;AAELA,4BAAgBlvD,qBAAoB,aAF/B,SAEWA,CAAhBkvD;AACAA,gBAHK,MAGLA;AAbG;AAtBgB;AAPyB;;AA8ClD,uBAAiB;AACf,aADe,WACf;AA/CgD;;AAkDlDA,wBAAkB,aAlDgC,SAkDlDA;AAngBuB;AAqgBzBl7C,iBAAa,sCAAsC;AACjD,WADiD,SACjD;AACA,WAFiD,MAEjD;AAvgBuB;AAygBzBC,UAAM,0CAA0C;AAC9CwlD,oBAAc,mDADgC,IAC9CA;AACA,UAAMvK,MAAM,KAFkC,GAE9C;AACA,UAAM2K,YAAY,aAH4B,SAG9C;AACA,UAAMC,gBAAgB,aAJwB,WAI9C;AACA,UAAIC,cAL0C,KAK9C;;AAEA,yBAAmB;AACjB7K,YADiB,IACjBA;;AACA,YAAI,KAAJ,eAAwB;AACtBA,sCAA4B,KADN,aACtBA;AAHe;;AAKjBA,wBAAgB2K,0BALC,IAKDA,CAAhB3K;AACA6K,sBANiB,IAMjBA;AAb4C;;AAgB9C,UAAI,KAAJ,gBAAyB;AACvB,YAAI,KAAJ,eAAwB;AACtB7K,mBADsB,SACtBA;AACA,+BAFsB,KAEtB;AAFF,eAGO;AACLA,cADK,IACLA;AALqB;AAhBqB;;AAyB9C,uBAAiB;AACfA,YADe,OACfA;AA1B4C;;AA4B9C,uBAAiB;AACf,aADe,WACf;AA7B4C;AAzgBvB;AAyiBzBh7C,YAAQ,iCAAiC;AACvC,2BADuC,IACvC;AACA,WAFuC,IAEvC;AA3iBuB;AA6iBzBC,gBAAY,qCAAqC;AAC/C,gBAD+C,KAC/C;AACA,kBAF+C,KAE/C;AAEA,WAJ+C,WAI/C;AAjjBuB;AAmjBzBC,kBAAc,uCAAuC;AACnD,2BADmD,IACnD;AACA,WAFmD,UAEnD;AArjBuB;AAujBzBC,qBAAiB,0CAA0C;AACzD,WADyD,SACzD;AACA,WAFyD,UAEzD;AAzjBuB;AA2jBzBC,uBAAmB,4CAA4C;AAC7D,2BAD6D,IAC7D;AACA,WAF6D,SAE7D;AACA,WAH6D,UAG7D;AA9jBuB;AAgkBzBC,aAAS,kCAAkC;AACzC,WADyC,WACzC;AAjkBuB;AAqkBzBC,UAAM,+BAA+B;AACnC,yBADmC,WACnC;AAtkBuB;AAwkBzBC,YAAQ,iCAAiC;AACvC,yBADuC,OACvC;AAzkBuB;AA6kBzBC,eAAW,oCAAoC;AAC7C,gCAD6C,qBAC7C;AACA,qCAF6C,CAE7C;AACA,uBAAiB,qBAH4B,CAG7C;AACA,uBAAiB,qBAJ4B,CAI7C;AAjlBuB;AAmlBzBC,aAAS,kCAAkC;AACzC,UAAMqlD,QAAQ,KAD2B,gBACzC;AACA,UAAM9K,MAAM,KAF6B,GAEzC;;AACA,UAAI8K,UAAJ,WAAyB;AACvB9K,YADuB,SACvBA;AADuB;AAHgB;;AAQzCA,UARyC,IAQzCA;AACAA,UATyC,SASzCA;;AACA,WAAK,IAAI5tD,IAAT,GAAgBA,IAAI04D,MAApB,QAAkC14D,CAAlC,IAAuC;AACrC,YAAM+kB,OAAO2zC,MADwB,CACxBA,CAAb;AACA9K,oCAA4B7oC,KAFS,SAErC6oC;AACAA,sBAAc7oC,KAAd6oC,GAAsB7oC,KAHe,CAGrC6oC;AACA7oC,4BAAoBA,KAJiB,QAIrCA;AAduC;;AAgBzC6oC,UAhByC,OAgBzCA;AACAA,UAjByC,IAiBzCA;AACAA,UAlByC,SAkBzCA;AACA,aAAO,KAnBkC,gBAmBzC;AAtmBuB;AAwmBzBt6C,oBAAgB,gDAAgD;AAC9D,iCAD8D,OAC9D;AAzmBuB;AA2mBzBC,oBAAgB,gDAAgD;AAC9D,iCAD8D,OAC9D;AA5mBuB;AA8mBzBC,eAAW,yCAAyC;AAClD,gCAA0B3U,QADwB,GAClD;AA/mBuB;AAinBzB4U,gBAAY,4CAA4C;AACtD,6BAAuB,CAD+B,OACtD;AAlnBuB;AAonBzBC,aAAS,mDAAmD;AAC1D,UAAMilD,UAAU,oBAD0C,WAC1C,CAAhB;AACA,UAAM1J,UAAU,KAF0C,OAE1D;;AAEA,UAAI,CAAJ,SAAc;AACZ,cAAM,wCADM,WACN,EAAN;AALwD;;AAO1DA,2BAAqB0J,sBAPqC,0BAO1D1J;;AAIA,UAAIA,+BAA+BA,0BAAnC,GAAgE;AAC9D3uD,wBAAK,kCADyD,WAC9DA;AAZwD;;AAiB1D,UAAIi4B,OAAJ,GAAc;AACZA,eAAO,CADK,IACZA;AACA02B,gCAAwB,CAFZ,CAEZA;AAFF,aAGO;AACLA,gCADK,CACLA;AArBwD;;AAwB1D,0BAxB0D,OAwB1D;AACA,8BAzB0D,IAyB1D;;AAEA,UAAI0J,QAAJ,aAAyB;AAAA;AA3BiC;;AA+B1D,UAAM73D,OAAO63D,sBA/B6C,YA+B1D;AAEA,UAAIC,OAjCsD,QAiC1D;;AACA,UAAID,QAAJ,OAAmB;AACjBC,eADiB,KACjBA;AADF,aAEO,IAAID,QAAJ,MAAkB;AACvBC,eADuB,MACvBA;AArCwD;;AAuC1D,UAAMC,SAASF,4BAvC2C,QAuC1D;AACA,UAAMG,uBAAW,IAAXA,iBAAyBH,QAxC2B,YAwCpDG,CAAN;AAMA,UAAIC,kBA9CsD,IA8C1D;;AACA,UAAIxgC,OAAJ,eAA0B;AACxBwgC,0BADwB,aACxBA;AADF,aAEO,IAAIxgC,OAAJ,eAA0B;AAC/BwgC,0BAD+B,aAC/BA;AAlDwD;;AAoD1D,mCAA6BxgC,OApD6B,eAoD1D;AAEA,gCAAgB,MAAhB,cAAgB,IAAhB,cAAgB,eAAhB,gBAtD0D,QAsD1D;AA1qBuB;AA4qBzB5kB,0BAAsB,mDAAmD;AACvE,uCADuE,IACvE;AA7qBuB;AA+qBzBC,iBAAa,0CAA0C;AACrD,8BADqD,IACrD;AAhrBuB;AAkrBzBC,cAAU,uCAAuC;AAC/C,uBAAiB,sBAD8B,CAC/C;AACA,uBAAiB,sBAF8B,CAE/C;AAprBuB;AAsrBzBC,wBAAoB,iDAAiD;AACnE,sBAAgB,CADmD,CACnE;AACA,uBAFmE,CAEnE;AAxrBuB;AA0rBzBC,mBAAe,wDAAwD;AACrE,gCAA0B,kBAA1B;AACA,qCAA+BrV,cAFsC,CAEtCA,CAA/B;AAEA,uBAAiB,qBAJoD,CAIrE;AACA,uBAAiB,qBALoD,CAKrE;AA/rBuB;AAisBzBsV,cAAU,mCAAmC;AAC3C,uBAAiB,aAD0B,OAC3C;AAlsBuB;AAqsBzBglD,aArsByB,qBAqsBzBA,SArsByB,EAqsBzBA,CArsByB,EAqsBzBA,CArsByB,EAqsBzBA,gBArsByB,EAqsBzBA,mBArsByB,EAqsByC;AAChE,UAAMpL,MAAM,KADoD,GAChE;AACA,UAAMqB,UAAU,KAFgD,OAEhE;AACA,UAAM13C,OAAO03C,QAHmD,IAGhE;AACA,UAAMgK,oBAAoBhK,QAJsC,iBAIhE;AACA,UAAMiK,WAAWjK,mBAAmBA,QAL4B,aAKhE;AACA,UAAMkK,iBACJF,oBAAoBvwD,wBAP0C,gBAMhE;AAEA,UAAM0wD,iBAAiB,CAAC,EACtB,oBAAoB1wD,wBAT0C,gBAQxC,CAAxB;AAGA,UAAM2wD,cAAcpK,uBAAuB,CAAC13C,KAXoB,WAWhE;AAEA,UAbgE,SAahE;;AACA,UAAIA,0CAAJ,aAA2D;AACzD+hD,oBAAY/hD,sBAAsB,KAAtBA,YAD6C,SAC7CA,CAAZ+hD;AAf8D;;AAkBhE,UAAI/hD,wBAAJ,aAAyC;AACvCq2C,YADuC,IACvCA;AACAA,yBAFuC,CAEvCA;AACAA,YAHuC,SAGvCA;AACA0L,uBAJuC,QAIvCA;;AACA,8BAAsB;AACpB1L,sCADoB,gBACpBA;AANqC;;AAQvC,YACEuL,mBAAmBzwD,wBAAnBywD,QACAA,mBAAmBzwD,wBAFrB,aAGE;AACAklD,cADA,IACAA;AAZqC;;AAcvC,YACEuL,mBAAmBzwD,wBAAnBywD,UACAA,mBAAmBzwD,wBAFrB,aAGE;AACA,mCAAyB;AACvBklD,gBADuB,cACvBA;AACAA,4BAAgBlvD,WAAW,KAFJ,oBAEPA,CAAhBkvD;AAHF;;AAKAA,cALA,MAKAA;AAtBqC;;AAwBvCA,YAxBuC,OAwBvCA;AAxBF,aAyBO;AACL,YACEuL,mBAAmBzwD,wBAAnBywD,QACAA,mBAAmBzwD,wBAFrB,aAGE;AACAklD,qCADA,CACAA;AALG;;AAOL,YACEuL,mBAAmBzwD,wBAAnBywD,UACAA,mBAAmBzwD,wBAFrB,aAGE;AACA,mCAAyB;AACvBklD,gBADuB,IACvBA;AACAA,0BAFuB,CAEvBA;AACAA,gBAHuB,cAGvBA;AACAA,4BAAgBlvD,WAAW,KAJJ,oBAIPA,CAAhBkvD;AACAA,yCALuB,CAKvBA;AACAA,gBANuB,OAMvBA;AANF,iBAOO;AACLA,yCADK,CACLA;AATF;AAVG;AA3CyD;;AAmEhE,0BAAoB;AAClB,YAAM8K,QAAQ,0BAA0B,wBADtB,EACJ,CAAd;AACAA,mBAAW;AACTzmD,qBAAW27C,IADF;AAETn6B,WAFS,EAETA,CAFS;AAGTuhC,WAHS,EAGTA,CAHS;AAITkE,kBAJS,EAITA,QAJS;AAKTI,mBALS,EAKTA;AALS,SAAXZ;AArE8D;AArsBzC;;AAoxBzB,kCAA8B;AAAA,kCAGH,6DAHG,EAGH,CAHG;AAAA,UAGtB,GAHsB,yBAGpBj8D,OAHoB;;AAQ5BmxD,qBAR4B,CAQ5BA;AACAA,2BAT4B,EAS5BA;AACA,UAAMh0C,OAAOg0C,+BAVe,IAU5B;AACA,UAAIluD,UAXwB,KAW5B;;AACA,WAAK,IAAIM,IAAT,GAAgBA,IAAI4Z,KAApB,QAAiC5Z,KAAjC,GAAyC;AACvC,YAAI4Z,eAAeA,UAAnB,KAAkC;AAChCla,oBADgC,IAChCA;AADgC;AADK;AAZb;;AAkB5B,aAAOwa,mDAlBqB,OAkBrBA,CAAP;AAtyBuB;;AAyyBzBjG,cAAU,yCAAyC;AACjD,UAAMg7C,UAAU,KADiC,OACjD;AACA,UAAM13C,OAAO03C,QAFoC,IAEjD;;AACA,UAAI13C,KAAJ,aAAsB;AACpB,eAAO,mBADa,MACb,CAAP;AAJ+C;;AAOjD,UAAM2hD,WAAWjK,QAPgC,QAOjD;;AACA,UAAIiK,aAAJ,GAAoB;AAClB,eADkB,SAClB;AAT+C;;AAYjD,UAAMtL,MAAM,KAZqC,GAYjD;AACA,UAAM2L,gBAAgBtK,QAb2B,aAajD;AACA,UAAMuK,cAAcvK,QAd6B,WAcjD;AACA,UAAMwK,cAAcxK,QAf6B,WAejD;AACA,UAAMyK,gBAAgBzK,QAhB2B,aAgBjD;AACA,UAAM0K,aAAa1K,qBAjB8B,aAiBjD;AACA,UAAM2K,eAAeC,OAlB4B,MAkBjD;AACA,UAAMC,WAAWviD,KAnBgC,QAmBjD;AACA,UAAMwiD,aAAaD,eAAe,CApBe,CAoBjD;AACA,UAAME,kBAAkBziD,KArByB,eAqBjD;AACA,UAAM0iD,oBAAoBf,WAAWjK,mBAtBY,CAsBZA,CAArC;AAEA,UAAMiL,iBACJjL,8BAA8BvmD,wBAA9BumD,QACA,CAAC13C,KADD03C,mBAEA,CAACA,QA3B8C,WAwBjD;AAKArB,UA7BiD,IA6BjDA;AACA,UA9BiD,gBA8BjD;;AACA,UAAIqB,QAAJ,aAAyB;AAGvBrB,YAHuB,IAGvBA;AACA,YAAMuM,UAAUlL,kCAJO,IAIPA,CAAhB;AACAmL,2BAAmBxM,IALI,mBAKvBwM;AACAxM,YANuB,OAMvBA;AACAA,wBAPuB,OAOvBA;AAtC+C;;AAwCjDA,+BAAyBqB,QAxCwB,UAwCjDrB;AACAA,oBAAcqB,QAAdrB,GAAyBqB,YAAYA,QAzCY,QAyCjDrB;;AAEA,UAAI8L,gBAAJ,GAAuB;AACrB9L,8BAAsB,CADD,CACrBA;AADF,aAEO;AACLA,8BADK,CACLA;AA9C+C;;AAiDjD,UAAIyK,YAAYpJ,QAjDiC,SAiDjD;AACA,UAAIoL,sBAlD6C,KAkDjD;AACA,UAAMx7D,QAAQowD,QAnDmC,eAmDjD;;AACA,UAAIpwD,eAAew5D,cAAnB,GAAoC;AAClC,YAAMc,iBACJlK,4BAA4BvmD,wBAFI,gBAClC;;AAEA,YACEywD,mBAAmBzwD,wBAAnBywD,UACAA,mBAAmBzwD,wBAFrB,aAGE;AACA,4CADA,IACA;AACA2vD,sBAAY,KAFZ,mBAEY,EAAZA;AACAgC,gCAAsBhC,YAHtB,CAGAgC;AATgC;AAApC,aAWO;AACLhC,qBADK,KACLA;AAhE+C;;AAmEjD,UAAIkB,kBAAJ,KAA2B;AACzB3L,iCADyB,aACzBA;AACAyK,qBAFyB,aAEzBA;AArE+C;;AAwEjDzK,sBAxEiD,SAwEjDA;AAEA,UAAIn6B,IAAJ;AAAA,UA1EiD,CA0EjD;;AAEA,WAAKzzB,IAAL,GAAYA,IAAZ,cAA8B,EAA9B,GAAmC;AACjC,YAAMs6D,QAAQT,OADmB,CACnBA,CAAd;;AACA,YAAIU,iBAAJ,KAAIA,CAAJ,EAAkB;AAChB9mC,eAAMsmC,qBAAD,QAACA,GADU,IAChBtmC;AADgB;AAFe;;AAOjC,YAAI+mC,gBAP6B,KAOjC;AACA,YAAMC,UAAW,+BAAD,CAAC,IARgB,WAQjC;AACA,YAAMC,YAAYJ,MATe,QASjC;AACA,YAAMK,SAASL,MAVkB,MAUjC;AACA,YAAIM,OAAJ;AAAA,YAAaC,OAXoB,SAWjC;AACA,YAAI1+D,QAAQm+D,MAZqB,KAYjC;;AACA,sBAAc;AACZ,cAAMQ,UAAUR,iBADJ,eACZ;AACA,cAAMS,KACJ,EAAE,gBAAgBD,QAAhB,CAAgBA,CAAhB,GAA6B3+D,QAA/B,OAHU,iBAEZ;AAEA,cAAM6+D,KAAKF,aAJC,iBAIZ;AAEA3+D,kBAAQ2+D,UAAU,CAACA,QAAXA,CAAWA,CAAXA,GANI,KAMZ3+D;AACAy+D,oBAAUG,KAPE,aAOZH;AACAC,oBAAW,KAAD,EAAC,IARC,aAQZA;AARF,eASO;AACLD,oBAAUnnC,IADL,aACLmnC;AACAC,oBAFK,CAELA;AAxB+B;;AA2BjC,YAAItjD,kBAAkBpb,QAAtB,GAAiC;AAI/B,cAAM8+D,gBACFrN,mCAAD,IAACA,GAAF,QAAEA,GAL2B,aAI/B;;AAGA,cAAIzxD,yBAAyB,KAA7B,yBAA2D;AACzD,gBAAM++D,kBAAkB/+D,QADiC,aACzD;AACAq+D,4BAFyD,IAEzDA;AACA5M,gBAHyD,IAGzDA;AACAA,uCAJyD,CAIzDA;AACAgN,uBALyD,eAKzDA;AALF,iBAMO,IAAIz+D,UAAJ,eAA6B;AAClCy+D,uBACK,SAAD,aAAC,IAAF,IAAE,GAAH,QAAG,GAF6B,aAClCA;AAd6B;AA3BA;;AAgDjC,YAAI,wBAAwB,kBAAkBrjD,KAA9C,WAAI,CAAJ,EAAiE;AAC/D,cAAI2iD,kBAAkB,CAAtB,QAA+B;AAE7BtM,6CAF6B,OAE7BA;AAFF,iBAGO;AACL,0EADK,mBACL;;AAOA,wBAAY;AACV,kBAAMuN,gBACJP,UAAW1B,WAAWyB,cAAZ,CAACzB,GAFH,aACV;AAEA,kBAAMkC,gBACJP,UAAW3B,WAAWyB,cAAZ,CAACzB,GAJH,aAGV;AAEA,6BACEyB,OADF,0DALU,mBAKV;AAbG;AAJwD;AAhDhC;;AA4EjC,YAAIU,SA5E6B,SA4EjC;;AACA,sBAAc;AACZA,sBAAYl/D,4BAA4Bs+D,UAD5B,aACZY;AADF,eAEO;AACLA,sBAAYl/D,4BAA4Bs+D,UADnC,aACLY;AAhF+B;;AAkFjC5nC,aAlFiC,SAkFjCA;;AAEA,2BAAmB;AACjBm6B,cADiB,OACjBA;AArF+B;AA5Ec;;AAoKjD,oBAAc;AACZqB,qBADY,CACZA;AADF,aAEO;AACLA,qBAAax7B,IADR,UACLw7B;AAvK+C;;AAyKjDrB,UAzKiD,OAyKjDA;AAl9BuB;AAq9BzB0N,mBAAe,8CAA8C;AAE3D,UAAM1N,MAAM,KAF+C,GAE3D;AACA,UAAMqB,UAAU,KAH2C,OAG3D;AACA,UAAM13C,OAAO03C,QAJ8C,IAI3D;AACA,UAAMiK,WAAWjK,QAL0C,QAK3D;AACA,UAAMyK,gBAAgBzK,QANqC,aAM3D;AACA,UAAM8K,aAAaxiD,oBAAoB,CAPoB,CAO3D;AACA,UAAMiiD,cAAcvK,QARuC,WAQ3D;AACA,UAAMwK,cAAcxK,QATuC,WAS3D;AACA,UAAM0K,aAAa1K,qBAVwC,aAU3D;AACA,UAAMsM,aAAatM,sBAXwC,0BAW3D;AACA,UAAM2K,eAAeC,OAZsC,MAY3D;AACA,UAAM2B,kBACJvM,8BAA8BvmD,wBAd2B,SAa3D;AAEA,2BAf2D,aAe3D;;AAEA,UAAI8yD,mBAAmBtC,aAAvB,GAAuC;AAAA;AAjBoB;;AAoB3D,wCApB2D,IAoB3D;AAEAtL,UAtB2D,IAsB3DA;AACAA,+BAAyBqB,QAvBkC,UAuB3DrB;AACAA,oBAAcqB,QAAdrB,GAAyBqB,QAxBkC,CAwB3DrB;AAEAA,4BA1B2D,aA0B3DA;;AAEA,WAAK5tD,IAAL,GAAYA,IAAZ,cAA8B,EAA9B,GAAmC;AACjCs6D,gBAAQT,OADyB,CACzBA,CAARS;;AACA,YAAIC,iBAAJ,KAAIA,CAAJ,EAAkB;AAChBkB,0BAAiB1B,qBAAD,QAACA,GADD,IAChB0B;AACA,4CAFgB,CAEhB;AACAxM,uBAAawM,gBAHG,UAGhBxM;AAHgB;AAFe;;AASjC,YAAMwL,UAAW,+BAAD,CAAC,IATgB,WASjC;AACA,YAAMlV,eAAehuC,0BAA0B+iD,MAVd,cAUZ/iD,CAArB;;AACA,YAAI,CAAJ,cAAmB;AACjBjX,sDAAyBg6D,MADR,cACjBh6D;AADiB;AAXc;;AAejC,YAAI,KAAJ,gBAAyB;AACvB,iCADuB,KACvB;AACA,eAFuB,IAEvB;AACAstD,8BAHuB,QAGvBA;AACAA,mCAJuB,UAIvBA;AACA,mCALuB,YAKvB;AACA,eANuB,OAMvB;AArB+B;;AAwBjC,YAAM8N,cAAc,0BAAoB,CAACpB,MAAD,SAApB,EAxBa,UAwBb,CAApB;;AACAn+D,gBAAQu/D,4BAzByB,OAyBjCv/D;AAEAyxD,6BA3BiC,CA2BjCA;AACAqB,qBAAa9yD,QA5BoB,UA4BjC8yD;AAxDyD;;AA0D3DrB,UA1D2D,OA0D3DA;AACA,6BA3D2D,IA2D3D;AAhhCuB;AAohCzBv5C,kBAAc,qDAAqD,CAphC1C;AAwhCzBC,2BAAuB,kFAOrB;AAGA,8BAAwBqnD,MAAxB,KAAmCC,MAHnC,GAGA;AACA,WAJA,IAIA;AACA,WALA,OAKA;AApiCuB;AAwiCzBC,uBAAmB,8CAA8C;AAAA;;AAC/D,UAD+D,OAC/D;;AACA,UAAIC,UAAJ,iBAA+B;AAC7B,YAAMC,QAAQD,GADe,CACfA,CAAd;AACA,YAAME,gBACJ,sBAAsB,6BAHK,KAGL,EADxB;AAEA,YAAMC,wBAAwB;AAC5BC,gCAAsBtO,mCAAO;AAC3B,mBAAO,wBAEL,MAFK,YAGL,MAHK,MAIL,MAJK,eAKL,MANyB,YACpB,CAAP;AAF0B;AAAA,SAA9B;AAWAuM,kBAAU,6CAGR,KAHQ,4BAfmB,aAenB,CAAVA;AAfF,aAsBO;AACLA,kBAAUgC,6CADL,EACKA,CAAVhC;AAzB6D;;AA2B/D,aA3B+D,OA2B/D;AAnkCuB;AAqkCzBzlD,qBAAiB,0CAA0C;AACzD,iCAA2B,uBAD8B,SAC9B,CAA3B;AAtkCuB;AAwkCzBE,mBAAe,wCAAwC;AACrD,+BAAyB,uBAD4B,SAC5B,CAAzB;AACA,iCAFqD,IAErD;AA1kCuB;AA4kCzBG,uBAAmB,mDAAmD;AACpE,UAAMgnD,QAAQ9gD,8BADsD,CACtDA,CAAd;;AACA,6BAFoE,KAEpE;AACA,iCAHoE,KAGpE;AA/kCuB;AAilCzBjG,qBAAiB,iDAAiD;AAChE,UAAM+mD,QAAQ9gD,8BADkD,CAClDA,CAAd;;AACA,2BAFgE,KAEhE;AACA,+BAHgE,KAGhE;AACA,iCAJgE,KAIhE;AArlCuB;AAwlCzB9F,iBAAa,+CAA+C;AAC1D,UAAI,CAAC,KAAL,gBAA0B;AAAA;AADgC;;AAI1D,UAAMy4C,MAAM,KAJ8C,GAI1D;AAEA,WAN0D,IAM1D;AACA,UAAMuM,UAAUgC,6CAP0C,SAO1CA,CAAhB;AACAvO,sBAAgBuM,8BAR0C,IAQ1CA,CAAhBvM;AAEA,UAAMwO,MAAMxO,IAV8C,0BAU1D;;AACA,eAAS;AACP,YAAMpxD,SAASoxD,IADR,MACP;AACA,YAAMzxD,QAAQK,OAFP,KAEP;AACA,YAAMJ,SAASI,OAHR,MAGP;;AAEA,YAAM6/D,KAAK,0BAAoB,MAApB,EALJ,GAKI,CAAX;;AACA,YAAMC,KAAK,0BAAoB,WAApB,EANJ,GAMI,CAAX;;AACA,YAAMC,KAAK,0BAAoB,UAApB,EAPJ,GAOI,CAAX;;AACA,YAAMC,KAAK,0BAAoB,eAApB,EARJ,GAQI,CAAX;;AAEA,YAAMC,KAAK/9D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GAVlC,CAUkCA,CAA9B99D,CAAX;AACA,YAAMg+D,KAAKh+D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GAXlC,CAWkCA,CAA9B99D,CAAX;AACA,YAAMi+D,KAAKj+D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GAZlC,CAYkCA,CAA9B99D,CAAX;AACA,YAAMk+D,KAAKl+D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GAblC,CAakCA,CAA9B99D,CAAX;AAEA,kCAA0Bi+D,KAA1B,IAAmCC,KAf5B,EAeP;AAfF,aAgBO;AAOL,0BAAkB,CAAlB,MAAyB,CAAzB,YAPK,IAOL;AAlCwD;;AAqC1D,WArC0D,OAqC1D;AA7nCuB;AAioCzBxnD,sBAAkB,2CAA2C;AAC3DrZ,6BAD2D,kCAC3DA;AAloCuB;AAooCzBsZ,oBAAgB,yCAAyC;AACvDtZ,6BADuD,gCACvDA;AAroCuB;AAwoCzBga,2BAAuB,4DAGrB;AACA,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD1B;;AAIA,WAJA,IAIA;AACA,mCAA6B,KAL7B,aAKA;;AAEA,UAAIwE,yBAAyBsiD,kBAA7B,GAAkD;AAChD,mCADgD,MAChD;AARF;;AAWA,2BAAqB,SAXrB,mBAWA;;AAEA,gBAAU;AACR,YAAM1gE,QAAQ2gE,UAAUA,KADhB,CACgBA,CAAxB;AACA,YAAM1gE,SAAS0gE,UAAUA,KAFjB,CAEiBA,CAAzB;AACA,sBAAcA,KAAd,CAAcA,CAAd,EAAuBA,KAAvB,CAAuBA,CAAvB,SAHQ,MAGR;AACA,aAJQ,IAIR;AACA,aALQ,OAKR;AAlBF;AA3oCuB;AAiqCzB9mD,yBAAqB,8CAA8C;AACjE,UAAI,CAAC,KAAL,gBAA0B;AAAA;AADuC;;AAIjE,WAJiE,OAIjE;AACA,2BAAqB,wBAL4C,GAK5C,EAArB;AAtqCuB;AAyqCzBC,gBAAY,0CAA0C;AACpD,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD0B;;AAKpD,WALoD,IAKpD;AACA,UAAMshD,aAAa,KANiC,GAMpD;;AAcA,UAAI,CAACwF,MAAL,UAAqB;AACnB92D,wBADmB,oCACnBA;AArBkD;;AA0BpD,UAAI82D,MAAJ,UAAoB;AAClBz8D,wBADkB,gCAClBA;AA3BkD;;AA8BpD,UAAMk3D,mBAAmBD,WA9B2B,mBA8BpD;;AACA,UAAIwF,MAAJ,QAAkB;AAChBxF,+CAAuCwF,MADvB,MAChBxF;AAhCkD;;AAkCpD,UAAI,CAACwF,MAAL,MAAiB;AACf,cAAM,UADS,2BACT,CAAN;AAnCkD;;AAwCpD,UAAIC,SAAS/hD,sCACX8hD,MADW9hD,MAEXs8C,WA1CkD,mBAwCvCt8C,CAAb;;AAKA,UAAMgiD,eAAe,OAGnB1F,kBAHmB,OAInBA,kBAJmB,OAArB;AAMAyF,eAAS/hD,8CAAwC,YAAjD+hD;AAGA,UAAMl/D,UAAUY,WAAWs+D,OAtDyB,CAsDzBA,CAAXt+D,CAAhB;AACA,UAAMX,UAAUW,WAAWs+D,OAvDyB,CAuDzBA,CAAXt+D,CAAhB;AACA,UAAIy4D,aAAaz4D,SAASA,UAAUs+D,OAAVt+D,CAAUs+D,CAAVt+D,IAATA,SAxDmC,CAwDnCA,CAAjB;AACA,UAAI04D,cAAc14D,SAASA,UAAUs+D,OAAVt+D,CAAUs+D,CAAVt+D,IAATA,SAzDkC,CAyDlCA,CAAlB;AACA,UAAIw+D,SAAJ;AAAA,UACEC,SA3DkD,CA0DpD;;AAEA,UAAIhG,aAAJ,gBAAiC;AAC/B+F,iBAAS/F,aADsB,cAC/B+F;AACA/F,qBAF+B,cAE/BA;AA9DkD;;AAgEpD,UAAIC,cAAJ,gBAAkC;AAChC+F,iBAAS/F,cADuB,cAChC+F;AACA/F,sBAFgC,cAEhCA;AAlEkD;;AAqEpD,UAAIC,UAAU,YAAY,KArE0B,UAqEpD;;AACA,UAAI0F,MAAJ,OAAiB;AAEf1F,mBAAW,YAAa,sBAFT,CAEfA;AAxEkD;;AA0EpD,UAAMC,gBAAgB,gEA1E8B,IA0E9B,CAAtB;AAMA,UAAMG,WAAWH,cAhFmC,OAgFpD;AAIAG,qBAAe,IAAfA,QAA2B,IApFyB,MAoFpDA;AACAA,yBAAmB,CAAnBA,SAA6B,CArFuB,OAqFpDA;AACAA,yCAtFoD,gBAsFpDA;;AAEA,UAAIsF,MAAJ,OAAiB;AAEf,6BAAqB;AACnBvgE,kBAAQ86D,cADW;AAEnB76D,mBAFmB;AAGnBqB,iBAHmB,EAGnBA,OAHmB;AAInBC,iBAJmB,EAInBA,OAJmB;AAKnBm/D,gBALmB,EAKnBA,MALmB;AAMnBC,gBANmB,EAMnBA,MANmB;AAOnBhI,mBAAS4H,YAPU;AAQnB7H,oBAAU6H,YARS;AASnBjI,uBAAaiI,2BATM;AAUnBK,iCAVmB;AAAA,SAArB;AAFF,aAcO;AAGL7F,+CAHK,CAGLA;AACAA,sCAJK,OAILA;AACAA,iCALK,MAKLA;AA3GkD;;AA+GpDG,+BA/GoD,QA+GpDA;AACA,iBAhHoD,QAgHpD;AACA,qBAAe,CACb,qBADa,EAEb,SAFa,EAGb,SAHa,CAAf;AAKA,2BAtHoD,UAsHpD;AACA,WAvHoD,UAuHpD;AAGA,iCA1HoD,IA0HpD;AAnyCuB;AAsyCzBxhD,cAAU,wCAAwC;AAChD,UAAI,CAAC,KAAL,gBAA0B;AAAA;AADsB;;AAIhD,WAJgD,UAIhD;AACA,UAAMuhD,WAAW,KAL+B,GAKhD;AACA,iBAAW,gBANqC,GAMrC,EAAX;;AAGA,UAAI,mCAAJ,WAAkD;AAChD,yCADgD,KAChD;AADF,aAEO;AACL,4CADK,KACL;AAZ8C;;AAchD,UAAIsF,MAAJ,OAAiB;AACf,yBAAiB,gBADF,GACE,EAAjB;AADF,aAEO;AACL,2BAAmBtF,SAAnB,WADK,CACL;AAjB8C;;AAmBhD,WAnBgD,OAmBhD;AAzzCuB;AA4zCzBthD,sBAAkB,2CAA2C;AAC3D,WAD2D,IAC3D;;AACA,UAAI,KAAJ,eAAwB;AACtB,oCAA4B,KAA5B,KAAsC,KADhB,aACtB;AAHyD;AA5zCpC;AAm0CzBC,oBAAgB,yCAAyC;AACvD,WADuD,OACvD;AAp0CuB;AAu0CzBC,qBAAiB,iEAIf;AACA,WADA,IACA;AACA+/C,wBAAkB,KAFlB,GAEAA;AACA,qBAAe,IAHf,gBAGe,EAAf;;AAEA,UAAI77C,uBAAuBtb,gBAA3B,GAA8C;AAC5C,YAAM9C,QAAQ8C,UAAUA,KADoB,CACpBA,CAAxB;AACA,YAAM7C,SAAS6C,UAAUA,KAFmB,CAEnBA,CAAzB;AACA,sBAAcA,KAAd,CAAcA,CAAd,EAAuBA,KAAvB,CAAuBA,CAAvB,SAH4C,MAG5C;AACA,aAJ4C,IAI5C;AACA,aAL4C,OAK5C;AAVF;;AAaA,iCAbA,SAaA;AACA,iCAdA,MAcA;AAz1CuB;AA41CzBqX,mBAAe,wCAAwC;AACrD,WADqD,OACrD;AA71CuB;AAg2CzBE,2BAAuB,mDAAmD;AACxE,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD8C;;AAIxE,UAAMo3C,MAAM,KAJ4D,GAIxE;AACA,UAAMzxD,QAAQkhE,IAAd;AAAA,UACEjhE,SAASihE,IAN6D,MAKxE;AAEA,UAAM9E,YAAY,aAPsD,SAOxE;AACA,UAAMC,gBAAgB,aARkD,WAQxE;AAEA,UAAM8B,QAAQ,KAV0D,eAUxE;;AAEA,UAAInK,iCAAiCmK,mBAArC,WAAmE;AACjE,YAAIn+D,gCAAgCC,UAApC,qBAAmE;AACjEk+D,2BAAiB,kBAAkB;AAAE1gD,kBAAMyjD,IAAR;AAAkBlhE,iBAAlB,EAAkBA,KAAlB;AAAyBC,kBAAzB,EAAyBA;AAAzB,WAAlB,CAAjBk+D;AADF,eAEO;AACLA,2BADK,IACLA;AAJ+D;AAZK;;AAoBxE,UAAIA,KAAJ,aAAIA,KAAJ,eAAIA,MAAJ,UAAqB;AACnBA,uBADmB,GACnBA;AADmB;AApBmD;;AAyBxE,UAAMgD,aAAa,mDAzBqD,MAyBrD,CAAnB;AAKA,UAAM9H,UAAU8H,WA9BwD,OA8BxE;AACA9H,cA/BwE,IA+BxEA;AAEA+H,kCAjCwE,GAiCxEA;AAEA/H,yCAnCwE,WAmCxEA;AAEAA,0BAAoBgD,gBAChBD,8BADgBC,IAChBD,CADgBC,GArCoD,SAqCxEhD;AAGAA,oCAxCwE,MAwCxEA;AAEAA,cA1CwE,OA0CxEA;AAEA,mCAA6B8H,WA5C2C,MA4CxE;AA54CuB;AA+4CzBxmD,+BA/4CyB,uCA+4CzBA,OA/4CyB,EA+4CzBA,MA/4CyB,EAs5CvB;AAAA,UAJA0mD,KAIA,uEAPF1mD,CAOE;AAAA,UAHA2mD,KAGA,uEAPF3mD,CAOE;AAAA,UAPFA,MAOE;AAAA,UAPFA,SAOE;;AACA,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD1B;;AAIA,UAAM3a,QAAQ+0D,QAJd,KAIA;AACA,UAAM90D,SAAS80D,QALf,MAKA;AACA,UAAMqH,YAAY,aANlB,SAMA;AACA,UAAMC,gBAAgB,aAPtB,WAOA;AAEA,UAAM8E,aAAa,mDATnB,MASmB,CAAnB;AAKA,UAAM9H,UAAU8H,WAdhB,OAcA;AACA9H,cAfA,IAeAA;AAEA+H,kCAjBA,OAiBAA;AAEA/H,yCAnBA,WAmBAA;AAEAA,0BAAoBgD,gBAChBD,8BADgBC,IAChBD,CADgBC,GArBpB,SAqBAhD;AAGAA,oCAxBA,MAwBAA;AAEAA,cA1BA,OA0BAA;AAEA,UAAM5H,MAAM,KA5BZ,GA4BA;;AACA,WAAK,IAAI5tD,IAAJ,GAAWD,KAAK29D,UAArB,QAAuC19D,IAAvC,IAA+CA,KAA/C,GAAuD;AACrD4tD,YADqD,IACrDA;AACAA,oDAKE8P,UALF9P,CAKE8P,CALF9P,EAME8P,UAAU19D,IARyC,CAQnD09D,CANF9P;AAQAA,qBAAa,CAVwC,CAUrDA;AACAA,sBAAc0P,WAAd1P,gCAAyD,CAAzDA,MAXqD,CAWrDA;AACAA,YAZqD,OAYrDA;AAzCF;AAt5CuB;AAm8CzBn3C,gCAA4B,2DAE1B;AACA,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD1B;;AAIA,UAAMm3C,MAAM,KAJZ,GAIA;AAEA,UAAM2K,YAAY,aANlB,SAMA;AACA,UAAMC,gBAAgB,aAPtB,WAOA;;AACA,WAAK,IAAIx4D,IAAJ,GAAWD,KAAK49D,OAArB,QAAoC39D,IAApC,IAA4CA,CAA5C,IAAiD;AAC/C,YAAM49D,QAAQD,OADiC,CACjCA,CAAd;AACA,YAAMxhE,QAAQyhE,MAAd;AAAA,YACExhE,SAASwhE,MAHoC,MAE/C;AAGA,YAAMN,aAAa,mDAL4B,MAK5B,CAAnB;AAKA,YAAM9H,UAAU8H,WAV+B,OAU/C;AACA9H,gBAX+C,IAW/CA;AAEA+H,oCAb+C,KAa/CA;AAEA/H,2CAf+C,WAe/CA;AAEAA,4BAAoBgD,gBAChBD,8BADgBC,IAChBD,CADgBC,GAjB2B,SAiB/ChD;AAGAA,sCApB+C,MAoB/CA;AAEAA,gBAtB+C,OAsB/CA;AAEA5H,YAxB+C,IAwB/CA;AACAA,iCAAyBgQ,MAzBsB,SAyB/ChQ;AACAA,qBAAa,CA1BkC,CA0B/CA;AACAA,sBAAc0P,WAAd1P,gCAAyD,CAAzDA,MA3B+C,CA2B/CA;AACAA,YA5B+C,OA4B/CA;AApCF;AAr8CuB;AA6+CzBl3C,uBAAmB,iDAAiD;AAClE,UAAI,CAAC,KAAL,gBAA0B;AAAA;AADwC;;AAIlE,UAAMw6C,UAAU2M,yBACZ,oBADYA,KACZ,CADYA,GAEZ,cAN8D,KAM9D,CAFJ;;AAGA,UAAI,CAAJ,SAAc;AACZv9D,wBADY,iCACZA;AADY;AAPoD;;AAYlE,mCAZkE,OAYlE;AAz/CuB;AA4/CzBuW,6BAAyB,kFAKvB;AACA,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD1B;;AAIA,UAAMq6C,UAAU2M,yBACZ,oBADYA,KACZ,CADYA,GAEZ,cANJ,KAMI,CAFJ;;AAGA,UAAI,CAAJ,SAAc;AACZv9D,wBADY,iCACZA;AADY;AAPd;;AAYA,UAAMnE,QAAQ+0D,QAZd,KAYA;AACA,UAAM90D,SAAS80D,QAbf,MAaA;AACA,UAAM9c,MAdN,EAcA;;AACA,WAAK,IAAIp0C,IAAJ,GAAWD,KAAK29D,UAArB,QAAuC19D,IAAvC,IAA+CA,KAA/C,GAAuD;AACrDo0C,iBAAS;AACPniC,qBAAW,uBAAuByrD,UAAvB,CAAuBA,CAAvB,EAAqCA,UAAU19D,IAA/C,CAAqC09D,CAArC,CADJ;AAEPjqC,aAFO;AAGPuhC,aAHO;AAIP8I,aAJO;AAKPC,aALO;AAAA,SAAT3pB;AAhBF;;AAwBA,iDAxBA,GAwBA;AAzhDuB;AA4hDzBz9B,6BAAyB,yDAEvB;AACA,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD1B;;AAIA,UAAMxa,QAAQ+0D,QAJd,KAIA;AACA,UAAM90D,SAAS80D,QALf,MAKA;AACA,UAAMtD,MAAM,KANZ,GAMA;AAEA,WARA,IAQA;AAEAA,gBAAU,IAAVA,OAAqB,KAVrB,MAUAA;AAEA,UAAM4J,mBAAmB5J,IAZzB,0BAYA;AACA,UAAIoQ,aAAat/D,SACfA,WAAW84D,iBAAX94D,CAAW84D,CAAX94D,EAAgC84D,iBADjB94D,CACiB84D,CAAhC94D,CADeA,EAbjB,CAaiBA,CAAjB;AAIA,UAAIu/D,cAAcv/D,SAChBA,WAAW84D,iBAAX94D,CAAW84D,CAAX94D,EAAgC84D,iBADhB94D,CACgB84D,CAAhC94D,CADgBA,EAjBlB,CAiBkBA,CAAlB;AAKA,iCAtBA,MAsBA;;AAEA,UACG,qCAAqCwyD,mBAAtC,WAAC,IACD,CAACA,QAFH,MAGE;AACAgN,qBADA,OACAA;AAJF,aAKO;AACLC,oBAAY,oDADP,MACO,CAAZA;AACAC,iBAASD,UAFJ,OAELC;AACAC,4CAAoC,aAH/B,YAGLA;AACAH,qBAAaC,UAJR,MAILD;AAjCF;;AAoCA,UAAII,aAAJ;AAAA,UACEC,cArCF,MAoCA;AAEA,UAAIC,cAtCJ,WAsCA;;AAIA,aACGR,kBAAkBM,aAAnB,CAACN,IACAC,mBAAmBM,cAFtB,GAGE;AACA,YAAIE,WAAJ;AAAA,YACEC,YAFF,WACA;;AAEA,YAAIV,kBAAkBM,aAAtB,GAAsC;AACpCG,qBAAW//D,UAAU4/D,aADe,CACzB5/D,CAAX+/D;AACAT,wBAAcM,aAFsB,QAEpCN;AALF;;AAOA,YAAIC,mBAAmBM,cAAvB,GAAwC;AACtCG,sBAAYhgE,UAAU6/D,cADgB,CAC1B7/D,CAAZggE;AACAT,yBAAeM,cAFuB,SAEtCN;AATF;;AAWAE,oBAAY,qDAXZ,SAWY,CAAZA;AAKAC,iBAASD,UAhBT,OAgBAC;AACAA,yCAjBA,SAiBAA;AACAA,oFAlBA,SAkBAA;AAWAF,qBAAaC,UA7Bb,MA6BAD;AACAI,qBA9BA,QA8BAA;AACAC,sBA/BA,SA+BAA;AACAC,sBAAcA,4CAhCd,WAgCAA;AA7EF;;AA+EA5Q,kEAOE,CAPFA,eA/EA,MA+EAA;;AAYA,UAAI,KAAJ,YAAqB;AACnB,YAAMt1B,WAAW,0BAA0B,CADxB,MACF,CAAjB;AACA,oCAA4B;AAC1B44B,iBAD0B,EAC1BA,OAD0B;AAE1ByN,gBAAMrmC,SAFoB,CAEpBA,CAFoB;AAG1BsmC,eAAKtmC,SAHqB,CAGrBA,CAHqB;AAI1Bn8B,iBAAOA,QAAQq7D,iBAJW,CAIXA,CAJW;AAK1Bp7D,kBAAQA,SAASo7D,iBALS,CAKTA;AALS,SAA5B;AA7FF;;AAqGA,WArGA,OAqGA;AAnoDuB;AAsoDzB5gD,kCAA8B,mEAG5B;AACA,UAAI,CAAC,KAAL,gBAA0B;AAAA;AAD1B;;AAIA,UAAMg3C,MAAM,KAJZ,GAIA;AACA,UAAMkQ,IAAI5M,QALV,KAKA;AACA,UAAM6M,IAAI7M,QANV,MAMA;AAEA,UAAMiN,YAAY,gDARlB,CAQkB,CAAlB;AACA,UAAMC,SAASD,UATf,OASA;AACAE,0CAAoC,aAVpC,YAUAA;;AAEA,WAAK,IAAIr+D,IAAJ,GAAWD,KAAKq0C,IAArB,QAAiCp0C,IAAjC,IAAyCA,CAAzC,IAA8C;AAC5C,YAAMkG,QAAQkuC,IAD8B,CAC9BA,CAAd;AACAwZ,YAF4C,IAE5CA;AACAA,iCAAyB1nD,MAHmB,SAG5C0nD;AACAA,qBAAa,CAJ+B,CAI5CA;AACAA,sBACEuQ,UADFvQ,QAEE1nD,MAFF0nD,GAGE1nD,MAHF0nD,GAIE1nD,MAJF0nD,GAKE1nD,MALF0nD,MAOE,CAPFA,MAL4C,CAK5CA;;AAWA,YAAI,KAAJ,YAAqB;AACnB,cAAMt1B,WAAW,uBAAuBpyB,MAAvB,GAAgCA,MAD9B,CACF,CAAjB;AACA,sCAA4B;AAC1BgrD,mBAD0B,EAC1BA,OAD0B;AAE1ByN,kBAAMrmC,SAFoB,CAEpBA,CAFoB;AAG1BsmC,iBAAKtmC,SAHqB,CAGrBA,CAHqB;AAI1Bn8B,mBAJ0B;AAK1BC,oBAL0B;AAAA,WAA5B;AAlB0C;;AA0B5CwxD,YA1B4C,OA0B5CA;AAtCF;AAzoDuB;AAmrDzB72C,8BAA0B,mDAAmD;AAC3E,UAAI,CAAC,KAAL,gBAA0B;AAAA;AADiD;;AAI3E,iCAJ2E,CAI3E;AAvrDuB;AA4rDzBvB,eAAW,uCAAuC,CA5rDzB;AA+rDzBC,oBAAgB,wDAAwD,CA/rD/C;AAksDzBC,wBAAoB,gDAAgD;AAClE,mCAA6B;AAC3BmpD,iBAFgE;AACrC,OAA7B;AAnsDuB;AAusDzBlpD,6BAAyB,iEAGvB;AACA,UAAI6Y,QAAJ,MAAkB;AAChB,qCAA6B;AAC3BqwC,mBAAS,qCAFK,UAEL;AADkB,SAA7B;AADF,aAIO;AACL,qCAA6B;AAC3BA,mBAFG;AACwB,SAA7B;AANF;;AAUA,4BAAsB,KAVtB,gBAUsB,EAAtB;AAptDuB;AAstDzBjpD,sBAAkB,2CAA2C;AAC3D,8BAD2D,GAC3D;AACA,4BAAsB,KAFqC,gBAErC,EAAtB;AAxtDuB;AA6tDzBC,iBAAa,sCAAsC,CA7tD1B;AAguDzBC,eAAW,oCAAoC,CAhuDtB;AAsuDzBqiD,iBAAa,sCAAsC;AACjD,UAAMvK,MAAM,KADqC,GACjD;;AACA,UAAI,KAAJ,aAAsB;AACpB,YAAI,qBAAJ,SAAkC;AAChCA,mBADgC,SAChCA;AADF,eAEO;AACLA,cADK,IACLA;AAJkB;;AAMpB,2BANoB,IAMpB;AAR+C;;AAUjDA,UAViD,SAUjDA;AAhvDuB;AAkvDzBkR,uBAlvDyB,iCAkvDH;AACpB,UAAI,oCAAJ,MAA8C;AAY5C,YAAMjkD,IAAI,SAZkC,mBAY5C;AAEA,YAAMkkD,SAASrgE,SAASmc,OAAOA,EAAPA,CAAOA,CAAPA,GAAcA,OAAOA,EAdD,CAcCA,CAA9Bnc,CAAf;AACA,YAAMsgE,UAAUnkD,6BAAYA,IAAZA,EAf4B,CAe5BA,CAAhB;AACA,YAAMokD,UAAUpkD,6BAAYA,IAAZA,EAhB4B,CAgB5BA,CAAhB;AACA,YAAMqkD,cAAcxgE,UAAUA,kBAAVA,OAAUA,CAAVA,IAjBwB,MAiB5C;;AACA,YACEsgE,uBACA,0CAFF,GAGE;AAUA,4CAAkC,EAChC,4BAXF,WAUkC,CAAlC;AAbF,eAgBO,IAAID,SAAStmD,OAAb,SAA6B;AAClC,4CADkC,WAClC;AADK,eAEA;AAEL,4CAFK,CAEL;AAtC0C;AAD1B;;AA2CpB,aAAO,KA3Ca,0BA2CpB;AA7xDuB;AA+xDzB0mD,uBAAmB,gDAAgD;AACjE,UAAMltD,YAAY,SAD+C,mBACjE;AACA,aAAO,CACLA,mBAAmBA,eAAnBA,IAAsCA,UADjC,CACiCA,CADjC,EAELA,mBAAmBA,eAAnBA,IAAsCA,UAFjC,CAEiCA,CAFjC,CAAP;AAjyDuB;AAuyDzBmtD,sBAAkB,2CAA2C;AAC3D,WAAK,IAAIp/D,IAAI,iCAAb,GAAiDA,KAAjD,GAAyDA,CAAzD,IAA8D;AAC5D,YAAI,CAAC,2BAAL,SAAyC;AACvC,iBADuC,KACvC;AAF0D;AADH;;AAM3D,aAN2D,IAM3D;AA7yDuB;AAAA,GAA3ByyD;;AAizDA,4BAAsB;AACpBA,6BAAyBphD,UAAzBohD,EAAyBphD,CAAzBohD,IAAoCA,yBADhB,EACgBA,CAApCA;AApvEqD;;AAuvEvD,SAvvEuD,cAuvEvD;AAvsFF,CAgdwB,EAAxB;;;;;;;;;;;;;;;;;ACjcA;;AAEA,IAAM4M,aAjBN,EAiBA;;AAEA,qCAAqC;AACnC,MAAI,SAAS,kBAAb,aAA4C;AAAA;AADT;;AAInC,MAAMljE,QAAQ2gE,UAAUA,KAJW,CAIXA,CAAxB;AACA,MAAM1gE,SAAS0gE,UAAUA,KALU,CAKVA,CAAzB;AACA,MAAMwC,SAAS,IANoB,MAMpB,EAAf;AACAA,cAAYxC,KAAZwC,CAAYxC,CAAZwC,EAAqBxC,KAArBwC,CAAqBxC,CAArBwC,SAPmC,MAOnCA;AACA1R,WARmC,MAQnCA;AA3BF;;AA8BAyR,yBAAyB;AACvBE,UAAQ,iCAAiC;AACvC,QAAM37D,OAAO47D,IAD0B,CAC1BA,CAAb;AACA,QAAM1C,OAAO0C,IAF0B,CAE1BA,CAAb;AACA,QAAMC,aAAaD,IAHoB,CAGpBA,CAAnB;AACA,QAAMxN,KAAKwN,IAJ4B,CAI5BA,CAAX;AACA,QAAMxkD,KAAKwkD,IAL4B,CAK5BA,CAAX;AACA,QAAM9K,KAAK8K,IAN4B,CAM5BA,CAAX;AACA,QAAME,KAAKF,IAP4B,CAO5BA,CAAX;AACA,WAAO;AACLG,kBAAY,qCAAqC;AAC/CC,8BAD+C,IAC/CA;AACA,YAF+C,IAE/C;;AACA,YAAIh8D,SAAJ,SAAsB;AACpBi8D,iBAAOjS,yBAAyBoE,GAAzBpE,CAAyBoE,CAAzBpE,EAAgCoE,GAAhCpE,CAAgCoE,CAAhCpE,EAAuC5yC,GAAvC4yC,CAAuC5yC,CAAvC4yC,EAA8C5yC,GADjC,CACiCA,CAA9C4yC,CAAPiS;AADF,eAEO,IAAIj8D,SAAJ,UAAuB;AAC5Bi8D,iBAAOjS,yBAAyBoE,GAAzBpE,CAAyBoE,CAAzBpE,EAAgCoE,GAAhCpE,CAAgCoE,CAAhCpE,MAA2C5yC,GAA3C4yC,CAA2C5yC,CAA3C4yC,EAAkD5yC,GAAlD4yC,CAAkD5yC,CAAlD4yC,EADqB,EACrBA,CAAPiS;AAN6C;;AAS/C,aAAK,IAAI7/D,IAAJ,GAAWD,KAAK0/D,WAArB,QAAwCz/D,IAAxC,IAAgD,EAAhD,GAAqD;AACnD,cAAM0b,IAAI+jD,WADyC,CACzCA,CAAV;AACAI,4BAAkBnkD,EAAlBmkD,CAAkBnkD,CAAlBmkD,EAAwBnkD,EAF2B,CAE3BA,CAAxBmkD;AAX6C;;AAa/C,eAb+C,IAa/C;AAdG;AAAA,KAAP;AATqB;AAAA,CAAzBR;;AA6BA,IAAMS,mBAAoB,mCAAmC;AAC3D,+DAA6D;AAE3D,QAAM/N,SAASt1D,QAAf;AAAA,QACEsjE,SAAStjE,QAHgD,MAE3D;AAEA,QAAMwc,QAAQW,KAAd;AAAA,QACEomD,UAAUpmD,aAL+C,CAI3D;AAEA,QAN2D,GAM3D;;AACA,QAAIm4C,OAAO/2C,KAAP+2C,KAAiBA,OAAO72C,KAA5B,CAAqB62C,CAArB,EAAqC;AACnCkO,YADmC,EACnCA;AACAjlD,WAFmC,EAEnCA;AACAE,WAHmC,GAGnCA;AACA+kD,YAJmC,EAInCA;AACAC,WALmC,EAKnCA;AACAC,WANmC,GAMnCA;AAbyD;;AAe3D,QAAIpO,OAAO72C,KAAP62C,KAAiBA,OAAO32C,KAA5B,CAAqB22C,CAArB,EAAqC;AACnCkO,YADmC,EACnCA;AACA/kD,WAFmC,EAEnCA;AACAE,WAHmC,GAGnCA;AACA6kD,YAJmC,EAInCA;AACAE,WALmC,EAKnCA;AACAC,WANmC,GAMnCA;AArByD;;AAuB3D,QAAIrO,OAAO/2C,KAAP+2C,KAAiBA,OAAO72C,KAA5B,CAAqB62C,CAArB,EAAqC;AACnCkO,YADmC,EACnCA;AACAjlD,WAFmC,EAEnCA;AACAE,WAHmC,GAGnCA;AACA+kD,YAJmC,EAInCA;AACAC,WALmC,EAKnCA;AACAC,WANmC,GAMnCA;AA7ByD;;AA+B3D,QAAMxD,KAAM,cAAalgE,QAAd,OAAC,IAAgCA,QA/Be,MA+B3D;AACA,QAAMmgE,KAAM,QAAO5hD,KAAP,KAAiBve,QAAlB,OAAC,IAAoCA,QAhCW,MAgC3D;AACA,QAAM4jE,KAAM,cAAa5jE,QAAd,OAAC,IAAgCA,QAjCe,MAiC3D;AACA,QAAM6jE,KAAM,QAAOplD,KAAP,KAAiBze,QAAlB,OAAC,IAAoCA,QAlCW,MAkC3D;AACA,QAAM8jE,KAAM,cAAa9jE,QAAd,OAAC,IAAgCA,QAnCe,MAmC3D;AACA,QAAM+jE,KAAM,QAAOplD,KAAP,KAAiB3e,QAAlB,OAAC,IAAoCA,QApCW,MAoC3D;;AACA,QAAImgE,MAAJ,IAAc;AAAA;AArC6C;;AAwC3D,QAAM6D,MAAMV,OAAZ,EAAYA,CAAZ;AAAA,QACEW,MAAMX,OAAOG,KADf,CACQH,CADR;AAAA,QAEEY,MAAMZ,OAAOG,KA1C4C,CA0CnDH,CAFR;AAGA,QAAMa,MAAMb,OAAZ,EAAYA,CAAZ;AAAA,QACEc,MAAMd,OAAOI,KADf,CACQJ,CADR;AAAA,QAEEe,MAAMf,OAAOI,KA7C4C,CA6CnDJ,CAFR;AAGA,QAAMgB,MAAMhB,OAAZ,EAAYA,CAAZ;AAAA,QACEiB,MAAMjB,OAAOK,KADf,CACQL,CADR;AAAA,QAEEkB,MAAMlB,OAAOK,KAhD4C,CAgDnDL,CAFR;AAIA,QAAMmB,OAAOxiE,WAAb,EAAaA,CAAb;AAAA,QACEyiE,OAAOziE,WAnDkD,EAmDlDA,CADT;AAEA,sBApD2D,GAoD3D;AACA,sBArD2D,GAqD3D;;AACA,SAAK,IAAIs2D,IAAT,MAAmBA,KAAnB,MAA8BA,CAA9B,IAAmC;AACjC,UAAIA,IAAJ,IAAY;AACV,YAAI7nC,EADM,SACV;;AACA,YAAI6nC,IAAJ,IAAY;AACV7nC,eADU,CACVA;AADF,eAEO,IAAIyvC,OAAJ,IAAe;AACpBzvC,eADoB,CACpBA;AADK,eAEA;AACLA,eAAK,MAAD,CAAC,KAAW,KADX,EACA,CAALA;AAPQ;;AASVi0C,aAAKzE,KAAM,MAAD,EAAC,IATD,EASVyE;AACAC,cAAMZ,MAAO,OAAD,GAAC,IAVH,EAUVY;AACAC,cAAMZ,MAAO,OAAD,GAAC,IAXH,EAWVY;AACAC,cAAMZ,MAAO,OAAD,GAAC,IAZH,EAYVY;AAZF,aAaO;AACL,YAAIp0C,GADC,SACL;;AACA,YAAI6nC,IAAJ,IAAY;AACV7nC,gBADU,CACVA;AADF,eAEO,IAAImzC,OAAJ,IAAe;AACpBnzC,gBADoB,CACpBA;AADK,eAEA;AACLA,gBAAK,MAAD,CAAC,KAAW,KADX,EACA,CAALA;AAPG;;AASLi0C,aAAKf,KAAM,MAAD,EAAC,IATN,GASLe;AACAC,cAAMT,MAAO,OAAD,GAAC,IAVR,GAULS;AACAC,cAAMT,MAAO,OAAD,GAAC,IAXR,GAWLS;AACAC,cAAMT,MAAO,OAAD,GAAC,IAZR,GAYLS;AA1B+B;;AA6BjC,UAAIp0C,CA7B6B,SA6BjC;;AACA,UAAI6nC,IAAJ,IAAY;AACV7nC,YADU,CACVA;AADF,aAEO,IAAI6nC,IAAJ,IAAY;AACjB7nC,YADiB,CACjBA;AADK,aAEA;AACLA,YAAK,MAAD,CAAC,KAAW,KADX,EACA,CAALA;AAnC+B;;AAqCjCq0C,WAAK7E,KAAM,MAAD,EAAC,IArCsB,CAqCjC6E;AACAC,YAAMhB,MAAO,OAAD,GAAC,IAtCoB,CAsCjCgB;AACAC,YAAMhB,MAAO,OAAD,GAAC,IAvCoB,CAuCjCgB;AACAC,YAAMhB,MAAO,OAAD,GAAC,IAxCoB,CAwCjCgB;AACA,UAAMC,MAAMljE,WAAWA,aAzCU,EAyCVA,CAAXA,CAAZ;AACA,UAAMmjE,MAAMnjE,WAAWA,aA1CU,EA0CVA,CAAXA,CAAZ;AACA,UAAIgzD,IAAIsO,cAAc4B,MA3CW,CA2CjC;;AACA,WAAK,IAAInuC,IAAT,KAAkBA,KAAlB,KAA4BA,CAA5B,IAAiC;AAC/BtG,YAAK,MAAD,CAAC,KAAW,KADe,EAC1B,CAALA;;AACA,YAAIA,IAAJ,GAAW;AACTA,cADS,CACTA;AADF,eAEO,IAAIA,IAAJ,GAAW;AAChBA,cADgB,CAChBA;AAL6B;;AAO/BlU,cAAMy4C,CAANz4C,MAAcooD,MAAO,OAAD,GAAC,IAAR,CAACA,GAPiB,CAO/BpoD;AACAA,cAAMy4C,CAANz4C,MAAcqoD,MAAO,OAAD,GAAC,IAAR,CAACA,GARiB,CAQ/BroD;AACAA,cAAMy4C,CAANz4C,MAAcsoD,MAAO,OAAD,GAAC,IAAR,CAACA,GATiB,CAS/BtoD;AACAA,cAAMy4C,CAANz4C,MAV+B,GAU/BA;AAtD+B;AAtDwB;AADF;;AAkH3D,6CAA2C;AACzC,QAAM6oD,KAAKC,OAD8B,MACzC;AACA,QAAMC,KAAKD,OAF8B,MAEzC;AACA,WAHyC,EAGzC;;AACA,YAAQA,OAAR;AACE;AACE,YAAME,iBAAiBF,OADzB,cACE;AACA,YAAMG,OAAOxjE,WAAWojE,YAAXpjE,kBAFf,CAEE;AACA,YAAMyjE,OAAOF,iBAHf,CAGE;;AACA,aAAKjiE,IAAL,GAAYA,IAAZ,MAAsBA,CAAtB,IAA2B;AACzB,cAAIoiE,IAAIpiE,IADiB,cACzB;;AACA,eAAK,IAAI0xD,IAAT,GAAgBA,IAAhB,MAA0BA,KAAK0Q,CAA/B,IAAoC;AAClCC,wCAGEP,GAHFO,CAGEP,CAHFO,EAIEP,GAAGM,IAJLC,CAIEP,CAJFO,EAKEP,GAAGM,IALLC,cAKEP,CALFO,EAMEL,GANFK,CAMEL,CANFK,EAOEL,GAAGI,IAPLC,CAOEL,CAPFK,EAQEL,GAAGI,IAT6B,cAShCJ,CARFK;AAUAA,wCAGEP,GAAGM,qBAHLC,CAGEP,CAHFO,EAIEP,GAAGM,IAJLC,CAIEP,CAJFO,EAKEP,GAAGM,IALLC,cAKEP,CALFO,EAMEL,GAAGI,qBANLC,CAMEL,CANFK,EAOEL,GAAGI,IAPLC,CAOEL,CAPFK,EAQEL,GAAGI,IAnB6B,cAmBhCJ,CARFK;AAbuB;AAJ7B;;AADF;;AA+BE;AACE,aAAKriE,OAAOD,KAAK+hE,GAAjB,QAA4B9hE,IAA5B,IAAoCA,KAApC,GAA4C;AAC1CqiE,sCAGEP,GAHFO,CAGEP,CAHFO,EAIEP,GAAG9hE,IAJLqiE,CAIEP,CAJFO,EAKEP,GAAG9hE,IALLqiE,CAKEP,CALFO,EAMEL,GANFK,CAMEL,CANFK,EAOEL,GAAGhiE,IAPLqiE,CAOEL,CAPFK,EAQEL,GAAGhiE,IATqC,CASxCgiE,CARFK;AAFJ;;AA/BF;;AA6CE;AACE,cAAM,UA9CV,gBA8CU,CAAN;AA9CJ;AAtHyD;;AAyK3D,2HASE;AAGA,QAAMC,iBAHN,GAGA;AAEA,QAAMC,mBALN,IAKA;AAGA,QAAMC,cARN,CAQA;AAEA,QAAM1kE,UAAUY,WAAWs+D,OAV3B,CAU2BA,CAAXt+D,CAAhB;AACA,QAAMX,UAAUW,WAAWs+D,OAX3B,CAW2BA,CAAXt+D,CAAhB;AACA,QAAM+jE,cAAc/jE,UAAUs+D,OAAVt+D,CAAUs+D,CAAVt+D,IAZpB,OAYA;AACA,QAAMgkE,eAAehkE,UAAUs+D,OAAVt+D,CAAUs+D,CAAVt+D,IAbrB,OAaA;AAEA,QAAMvC,QAAQuC,SACZA,UAAUA,SAAS+jE,cAAcE,cAAdF,CAAcE,CAAdF,GADP/jE,cACFA,CAAVA,CADYA,EAfd,gBAecA,CAAd;AAIA,QAAMtC,SAASsC,SACbA,UAAUA,SAASgkE,eAAeC,cAAfD,CAAeC,CAAfD,GADNhkE,cACHA,CAAVA,CADaA,EAnBf,gBAmBeA,CAAf;AAIA,QAAMw+D,SAASuF,cAvBf,KAuBA;AACA,QAAMtF,SAASuF,eAxBf,MAwBA;AAEA,QAAMjmE,UAAU;AACds1D,YADc,EACdA,MADc;AAEdgO,YAFc,EAEdA,MAFc;AAGdjiE,eAAS,CAHK;AAIdC,eAAS,CAJK;AAKdm/D,cAAQ,IALM;AAMdC,cAAQ,IANM;AAAA,KAAhB;AASA,QAAMyF,cAAczmE,QAAQqmE,cAnC5B,CAmCA;AACA,QAAMK,eAAezmE,SAASomE,cApC9B,CAoCA;AAEA,8BAtCA,EAsCA;;AACA,QAAI5d,aAAJ,WAA4B;AAC1BpoD,eAAS,yBAAyB;AAChCL,aADgC,EAChCA,KADgC;AAEhCC,cAFgC,EAEhCA,MAFgC;AAGhC0mE,uBAHgC,EAGhCA,eAHgC;AAIhCC,eAJgC,EAIhCA,OAJgC;AAKhCtmE,eALgC,EAKhCA;AALgC,OAAzB,CAATD;AAQA2hE,kBAAY6E,4DATc,KASdA,CAAZ7E;AAMAA,uDAf0B,WAe1BA;AACA3hE,eAAS2hE,UAhBiB,MAgB1B3hE;AAhBF,WAiBO;AACL2hE,kBAAY6E,4DADP,KACOA,CAAZ7E;AAMA,UAAMC,SAASD,UAPV,OAOL;AAEA,UAAMvkD,OAAOwkD,8BATR,MASQA,CAAb;;AACA,2BAAqB;AACnB,YAAMnlD,QAAQW,KADK,IACnB;;AACA,aAAK5Z,OAAOD,KAAKkZ,MAAjB,QAA+BjZ,IAA/B,IAAuCA,KAAvC,GAA+C;AAC7CiZ,qBAAW6pD,gBADkC,CAClCA,CAAX7pD;AACAA,gBAAMjZ,IAANiZ,KAAe6pD,gBAF8B,CAE9BA,CAAf7pD;AACAA,gBAAMjZ,IAANiZ,KAAe6pD,gBAH8B,CAG9BA,CAAf7pD;AACAA,gBAAMjZ,IAANiZ,KAJ6C,GAI7CA;AANiB;AAVhB;;AAmBL,WAAKjZ,IAAL,GAAYA,IAAI+iE,QAAhB,QAAgC/iE,CAAhC,IAAqC;AACnCijE,yBAAiBF,QAAjBE,CAAiBF,CAAjBE,EADmC,OACnCA;AApBG;;AAsBL7E,6CAtBK,WAsBLA;AACA5hE,eAAS2hE,UAvBJ,MAuBL3hE;AA/EF;;AAkFA,WAAO;AACLA,YADK,EACLA,MADK;AAELsB,eAASA,UAAU0kE,cAFd;AAGLzkE,eAASA,UAAUykE,cAHd;AAILtF,YAJK,EAILA,MAJK;AAKLC,YALK,EAKLA;AALK,KAAP;AApQyD;;AA4Q3D,SA5Q2D,gBA4Q3D;AAvUF,CA2D0B,EAA1B;;AA+QAkC,kBAAkB;AAChBE,UAAQ,0BAA0B;AAEhC,QAAMxN,SAASyN,IAFiB,CAEjBA,CAAf;AACA,QAAMO,SAASP,IAHiB,CAGjBA,CAAf;AACA,QAAMuD,UAAUvD,IAJgB,CAIhBA,CAAhB;AACA,QAAMxC,SAASwC,IALiB,CAKjBA,CAAf;AACA,QAAM3C,SAAS2C,IANiB,CAMjBA,CAAf;AACA,QAAM1C,OAAO0C,IAPmB,CAOnBA,CAAb;AACA,QAAMnb,aAAamb,IARa,CAQbA,CAAnB;AACA,WAAO;AACLG,kBAAY,kDAAkD;AAC5DC,8BAD4D,IAC5DA;AACA,YAF4D,KAE5D;;AACA,yBAAiB;AACf/gE,kBAAQoc,yCAAmC2yC,IAD5B,mBACP3yC,CAARpc;AADF,eAEO;AAELA,kBAAQoc,yCAAmCioD,MAFtC,aAEGjoD,CAARpc;;AACA,sBAAY;AACV,gBAAMskE,cAAcloD,yCADV,MACUA,CAApB;;AACApc,oBAAQ,CAACA,WAAWskE,YAAZ,CAAYA,CAAZ,EAA4BtkE,WAAWskE,YAAvC,CAAuCA,CAAvC,CAARtkE;AALG;AALqD;;AAgB5D,YAAMukE,yBAAyBtD,yDAM7B3qD,qBAN6B2qD,YAO7BoD,MAP6BpD,gBAQ7BoD,MAxB0D,YAgB7BpD,CAA/B;;AAWA,YAAI,CAAJ,aAAkB;AAChBlS,sCAA4BsV,MADZ,aAChBtV;;AACA,sBAAY;AACVA,qCADU,MACVA;AAHc;AA3B0C;;AAkC5DA,sBACEwV,uBADFxV,SAEEwV,uBApC0D,OAkC5DxV;AAIAA,kBAAUwV,uBAAVxV,QAAyCwV,uBAtCmB,MAsC5DxV;AAEA,eAAOA,kBAAkBwV,uBAAlBxV,QAxCqD,WAwCrDA,CAAP;AAzCG;AAAA,KAAP;AAVc;AAAA,CAAlByR;AAyDAA,mBAAmB;AACjBE,UAAQ,wBAAwB;AAC9B,WAAO;AACLI,kBAAY,mCAAmC;AAC7C,eAD6C,SAC7C;AAFG;AAAA,KAAP;AAFe;AAAA,CAAnBN;;AAUA,sCAAsC;AACpC,MAAMgE,YAAYhE,WAAWG,IADO,CACPA,CAAXH,CAAlB;;AACA,MAAI,CAAJ,WAAgB;AACd,UAAM,qCAA8BG,IADtB,CACsBA,CAA9B,EAAN;AAHkC;;AAKpC,SAAO6D,iBAL6B,GAK7BA,CAAP;AAlZF;;AAwZA,IAAMC,gBAAiB,gCAAgC;AACrD,MAAMC,YAAY;AAChBC,aADgB;AAEhBC,eAFgB;AAAA,GAAlB;AAKA,MAAMlB,mBAN+C,IAMrD;;AAGA,+EAA6E;AAC3E,wBAAoBzG,GADuD,CACvDA,CAApB;AACA,kBAAcA,SAAS,kBAAvB;AACA,gBAAYA,GAH+D,CAG/DA,CAAZ;AACA,iBAAaA,GAJ8D,CAI9DA,CAAb;AACA,iBAAaA,GAL8D,CAK9DA,CAAb;AACA,qBAAiBA,GAN0D,CAM1DA,CAAjB;AACA,sBAAkBA,GAPyD,CAOzDA,CAAlB;AACA,iBAR2E,KAQ3E;AACA,iCAT2E,qBAS3E;AACA,yBAV2E,aAU3E;AACA,eAX2E,GAW3E;AApBmD;;AAuBrDwH,4BAA0B;AACxBI,yBAAqB,iDAAiD;AACpE,UAAMne,eAAe,KAD+C,YACpE;AACA,UAAMuX,OAAO,KAFuD,IAEpE;AACA,UAAM6G,QAAQ,KAHsD,KAGpE;AACA,UAAMC,QAAQ,KAJsD,KAIpE;AACA,UAAMC,YAAY,KALkD,SAKpE;AACA,UAAMC,aAAa,KANiD,UAMpE;AACA,UAAM/H,QAAQ,KAPsD,KAOpE;AACA,UAAME,wBAAwB,KARsC,qBAQpE;AAEAh2D,sBAAK,iBAV+D,UAUpEA;AAsBA,UAAMw2D,KAAKK,KAAX,CAAWA,CAAX;AAAA,UACEJ,KAAKI,KADP,CACOA,CADP;AAAA,UAEEH,KAAKG,KAFP,CAEOA,CAFP;AAAA,UAGEF,KAAKE,KAnC6D,CAmC7DA,CAHP;;AAMA,UAAMqG,cAAcloD,yCAAmC,KAtCa,MAsChDA,CAApB;;AACA,UAAM8oD,iBAAiB9oD,yCACrB,KAxCkE,aAuC7CA,CAAvB;;AAGA,UAAM+oD,gBAAgB,CACpBb,iBAAiBY,eADG,CACHA,CADG,EAEpBZ,iBAAiBY,eAFG,CAEHA,CAFG,CAAtB;AAQA,UAAME,OAAO,4BAEX,gBAFW,OAGXD,cArDkE,CAqDlEA,CAHW,CAAb;AAKA,UAAME,OAAO,4BAEX,gBAFW,QAGXF,cA1DkE,CA0DlEA,CAHW,CAAb;AAMA,UAAM7F,YAAY+E,0CAEhBe,KAFgBf,MAGhBgB,KAHgBhB,MA7DkD,IA6DlDA,CAAlB;AAMA,UAAM9E,SAASD,UAnEqD,OAmEpE;AACA,UAAMgG,WAAWlI,2CApEmD,MAoEnDA,CAAjB;AACAkI,4BAAsBjB,MArE8C,UAqEpEiB;AAEA,+DAvEoE,KAuEpE;AAEAA,yBAAmBF,KAAnBE,aAAqCD,KAArCC,UAzEoE,CAyEpEA;AAGAA,qCAA+B,CAA/BA,IAAoC,CA5EgC,EA4EpEA;AAEA,gDA9EoE,EA8EpE;AAEAA,mCAhFoE,YAgFpEA;AAEA,yCAlFoE,EAkFpE;AAIA,qBAAe,IAAIF,KAAnB,OAA+B,IAAIC,KAtFiC,KAsFpE;AACA,aAAO/F,UAvF6D,MAuFpE;AAxFsB;AA2FxBiG,qBAAiB,oEAIf;AAEAp2C,aAAOtvB,SAFP,IAEOA,CAAPsvB;AAKA,UAAMq2C,UAAU3lE,2BAPhB,cAOgBA,CAAhB;AACA,UAAI65B,OAAO75B,UAAUsvB,OARrB,KAQWtvB,CAAX;;AACA,UAAI65B,QAAJ,SAAqB;AACnBA,eADmB,OACnBA;AADF,aAEO;AACL15B,gBAAQ05B,OADH,IACL15B;AAZF;;AAcA,aAAO;AAAEA,aAAF,EAAEA,KAAF;AAAS05B,YAAT,EAASA;AAAT,OAAP;AA7GsB;AAgHxB+rC,cAAU,kDAAkD;AAC1D,UAAI/pD,uBAAuBuiD,gBAA3B,GAA8C;AAC5C,YAAMyH,YAAY5H,KAD0B,EAC5C;AACA,YAAM6H,aAAa5H,KAFyB,EAE5C;AACAuH,6CAH4C,UAG5CA;AACAA,iBAJ4C,IAI5CA;AACAA,iBAL4C,OAK5CA;AANwD;AAhHpC;AA0HxBM,oCAAgC,oEAI9B;AACA,UAAMhoE,UAAU0nE,SAAhB;AAAA,UACElV,UAAUkV,SAFZ,OACA;;AAEA;AACE,aAAKZ,UAAL;AACE,cAAM3V,MAAM,KADd,GACE;AACAnxD,8BAAoBmxD,IAFtB,SAEEnxD;AACAA,gCAAsBmxD,IAHxB,WAGEnxD;AACAwyD,8BAAoBrB,IAJtB,SAIEqB;AACAA,gCAAsBrB,IALxB,WAKEqB;AANJ;;AAQE,aAAKsU,UAAL;AACE,cAAMmB,WAAWzpD,wBAAkB8gD,MAAlB9gD,CAAkB8gD,CAAlB9gD,EAA4B8gD,MAA5B9gD,CAA4B8gD,CAA5B9gD,EAAsC8gD,MADzD,CACyDA,CAAtC9gD,CAAjB;;AACAxe,8BAFF,QAEEA;AACAA,gCAHF,QAGEA;AAEAwyD,8BALF,QAKEA;AACAA,gCANF,QAMEA;AAdJ;;AAgBE;AACE,gBAAM,wDAjBV,SAiBU,EAAN;AAjBJ;AAjIsB;AAsJxB0Q,gBAAY,8CAA8C;AACxD/R,YAAM,KADkD,GACxDA;AAEAA,kCAA4B,KAH4B,aAGxDA;AACAA,+BAAyB,KAJ+B,MAIxDA;AAEA,UAAMwV,yBAAyB,yBANyB,KAMzB,CAA/B;AAEA,aAAOxV,0CARiD,QAQjDA,CAAP;AA9JsB;AAAA,GAA1B0V;AAkKA,SAzLqD,aAyLrD;AAjlBF,CAwZuB,EAAvB;;;;;;;;;;;;;;;AC7XA,IAAM9jB,sBAAsB5+C,cA3B5B,IA2B4BA,CAA5B;;AAEA4+C,iCACEA,sDAEIA,oBAhCN,UA6BAA;AAKAA,gCACEA,mDAEIA,oBArCN,SAkCAA,C;;;;;;;;;;;;;;;;ACnBA;;;;;;;;;;;;;;;;AASA,IAAMmlB,eAAe;AACnBj1D,WADmB;AAEnBk1D,QAFmB;AAGnBC,SAHmB;AAAA,CAArB;AAMA,IAAMC,aAAa;AACjBp1D,WADiB;AAEjBq1D,UAFiB;AAGjBC,mBAHiB;AAIjBC,SAJiB;AAKjBC,WALiB;AAMjBL,SANiB;AAOjBM,QAPiB;AAQjBC,iBARiB;AASjBC,kBATiB;AAAA,CAAnB;;AAYA,4BAA4B;AAWxB,MAAI,gCAA8BtoE,WAAlC,MAAmD;AACjD,WADiD,MACjD;AAZsB;;AAe1B,UAAQA,OAAR;AACE;AACE,aAAO,yBAAmBA,OAF9B,OAEW,CAAP;;AACF;AACE,aAAO,8BAAwBA,OAJnC,OAIW,CAAP;;AACF;AACE,aAAO,sCAAgCA,OAAhC,SAAgDA,OAN3D,MAMW,CAAP;;AACF;AACE,aAAO,gCAA0BA,OAA1B,SAA0CA,OARrD,OAQW,CAAP;;AACF;AACE,aAAO,gCAA0BA,OAA1B,SAA0CA,OAVrD,QAUqDA,EAA1C,CAAP;AAVJ;AAzDF;;IAuEA,c;AACEjB,0DAA4C;AAAA;;AAAA;;AAC1C,sBAD0C,UAC1C;AACA,sBAF0C,UAE1C;AACA,kBAH0C,MAG1C;AACA,sBAJ0C,CAI1C;AACA,oBAL0C,CAK1C;AACA,gCAN0C,IAM1C;AACA,uBAAmB8E,cAPuB,IAOvBA,CAAnB;AACA,6BAAyBA,cARiB,IAQjBA,CAAzB;AACA,gCAA4BA,cATc,IASdA,CAA5B;AACA,yBAAqBA,cAVqB,IAUrBA,CAArB;;AAEA,8BAA0B+xB,iBAAS;AACjC,UAAM/Y,OAAO+Y,MADoB,IACjC;;AACA,UAAI/Y,oBAAoB,MAAxB,YAAyC;AAAA;AAFR;;AAKjC,UAAIA,KAAJ,QAAiB;AACf,oCADe,IACf;;AADe;AALgB;;AASjC,UAAIA,KAAJ,UAAmB;AACjB,YAAM0rD,aAAa1rD,KADF,UACjB;AACA,YAAMkD,aAAa,2BAFF,UAEE,CAAnB;;AACA,YAAI,CAAJ,YAAiB;AACf,gBAAM,4CADS,UACT,EAAN;AAJe;;AAMjB,eAAO,2BANU,UAMV,CAAP;;AAEA,YAAIlD,kBAAkB+qD,aAAtB,MAAyC;AACvC7nD,6BAAmBlD,KADoB,IACvCkD;AADF,eAEO,IAAIlD,kBAAkB+qD,aAAtB,OAA0C;AAC/C7nD,4BAAkByoD,WAAW3rD,KADkB,MAC7B2rD,CAAlBzoD;AADK,eAEA;AACL,gBAAM,UADD,0BACC,CAAN;AAbe;;AAAA;AATc;;AA0BjC,UAAMu3B,SAAS,oBAAmBz6B,KA1BD,MA0BlB,CAAf;;AACA,UAAI,CAAJ,QAAa;AACX,cAAM,gDAAyCA,KADpC,MACL,EAAN;AA5B+B;;AA8BjC,UAAIA,KAAJ,YAAqB;AACnB,YAAM4rD,eAAe,MADF,UACnB;AACA,YAAMC,eAAe7rD,KAFF,UAEnB;AACA,oBAAY,mBAAmB;AAC7Bnc,kBAAQ42C,OAAOz6B,KADc,IACrBy6B,CAAR52C;AADF,gBAGE,kBAAkB;AAChBioE,6BAAmB;AACjBC,wBADiB;AAEjBC,wBAFiB;AAGjB/nC,sBAAU8mC,aAHO;AAIjBW,wBAAY1rD,KAJK;AAKjBA,kBALiB;AAAA,WAAnB8rD;AAJJ,WAYE,kBAAkB;AAChBA,6BAAmB;AACjBC,wBADiB;AAEjBC,wBAFiB;AAGjB/nC,sBAAU8mC,aAHO;AAIjBW,wBAAY1rD,KAJK;AAKjB7c,oBAAQwoE,WALS,MAKTA;AALS,WAAnBG;AAhBe,SAGnB;AAHmB;AA9BY;;AAyDjC,UAAI9rD,KAAJ,UAAmB;AACjB,gCADiB,IACjB;;AADiB;AAzDc;;AA6DjCy6B,aAAOz6B,KA7D0B,IA6DjCy6B;AAzEwC,KAY1C;;AA+DAqxB,uCAAmC,KA3EO,kBA2E1CA;AA5EiB;;;;WA+EnBG,iCAAwB;AAUtB,UAAMC,KAAK,KAVW,aAUtB;;AACA,UAAIA,GAAJ,UAAIA,CAAJ,EAAoB;AAClB,cAAM,4DADY,UACZ,QAAN;AAZoB;;AActBA,uBAdsB,OActBA;AA7FiB;;;WAsGnBC,2CAAkC;AAChC,wBACE;AACEJ,oBAAY,KADd;AAEEC,oBAAY,KAFd;AAGEvxB,gBAHF;AAIEz6B,YAJF,EAIEA;AAJF,OADF,EADgC,SAChC;AAvGiB;;;WA0HnBosD,sDAA6C;AAC3C,UAAMV,aAAa,KADwB,UACxB,EAAnB;AACA,UAAMxoD,aAFqC,oCAE3C;AACA,8CAH2C,UAG3C;;AACA,UAAI;AACF,0BACE;AACE6oD,sBAAY,KADd;AAEEC,sBAAY,KAFd;AAGEvxB,kBAHF;AAIEixB,oBAJF,EAIEA,UAJF;AAKE1rD,cALF,EAKEA;AALF,SADF,EADE,SACF;AADF,QAWE,WAAW;AACXkD,0BADW,EACXA;AAhByC;;AAkB3C,aAAOA,WAlBoC,OAkB3C;AA5IiB;;;WAyJnBmpD,uEAA8D;AAAA;;AAC5D,UAAMC,WAAW,KAD2C,QAC3C,EAAjB;AACA,UAAMP,aAAa,KAFyC,UAE5D;AACA,UAAMC,aAAa,KAHyC,UAG5D;AACA,UAAMF,SAAS,KAJ6C,MAI5D;AAEA,aAAO,mBACL;AACEzkE,eAAO8c,2BAAc;AACnB,cAAMooD,kBADa,oCACnB;AACA,+CAAmC;AACjCpoD,sBADiC,EACjCA,UADiC;AAEjCqoD,uBAFiC;AAGjCC,sBAHiC;AAIjCC,wBAJiC;AAKjCC,sBALiC;AAAA,WAAnC;;AAOA,8BACE;AACEZ,sBADF,EACEA,UADF;AAEEC,sBAFF,EAEEA,UAFF;AAGEvxB,oBAHF;AAIE6xB,oBAJF,EAIEA,QAJF;AAKEtsD,gBALF,EAKEA,IALF;AAME4tB,yBAAazpB,WANf;AAAA,WADF,EATmB,SASnB;;AAYA,iBAAOooD,gBArBY,OAqBnB;AAtBJ;AAyBEp7B,cAAMhtB,0BAAc;AAClB,cAAMyoD,iBADY,oCAClB;AACA,wDAFkB,cAElB;AACAd,6BAAmB;AACjBC,sBADiB,EACjBA,UADiB;AAEjBC,sBAFiB,EAEjBA,UAFiB;AAGjBznC,oBAAQ2mC,WAHS;AAIjBoB,oBAJiB,EAIjBA,QAJiB;AAKjB1+B,yBAAazpB,WALI;AAAA,WAAnB2nD;AASA,iBAAOc,eAZW,OAYlB;AArCJ;AAwCE9kC,gBAAQ3kC,wBAAU;AAChBY,4BAAOZ,kBAAPY,OADgB,iCAChBA;AACA,cAAM8oE,mBAFU,oCAEhB;AACA,0DAHgB,gBAGhB;AACA,wDAJgB,IAIhB;AACAf,6BAAmB;AACjBC,sBADiB,EACjBA,UADiB;AAEjBC,sBAFiB,EAEjBA,UAFiB;AAGjBznC,oBAAQ2mC,WAHS;AAIjBoB,oBAJiB,EAIjBA,QAJiB;AAKjBnpE,oBAAQwoE,WALS,MAKTA;AALS,WAAnBG;AAQA,iBAAOe,iBAbS,OAahB;AArDJ;AAAA,OADK,EANqD,gBAMrD,CAAP;AA/JiB;;;WA+NnBC,iCAAwB;AACtB,UAAM7mD,OADgB,IACtB;AACA,UAAMw0B,SAAS,mBAAmBz6B,KAFZ,MAEP,CAAf;AACA,UAAMssD,WAAWtsD,KAHK,QAGtB;AACA,UAAM+rD,aAAa,KAJG,UAItB;AACA,UAAMC,aAAahsD,KALG,UAKtB;AACA,UAAM8rD,SAAS,KANO,MAMtB;AAEA,UAAMiB,aAAa;AACjBjgC,eADiB,mBACjBA,KADiB,EACmB;AAAA,cAArBnO,IAAqB,uEAApCmO,CAAoC;AAAA,cAApCA,SAAoC;;AAClC,cAAI,KAAJ,aAAsB;AAAA;AADY;;AAIlC,cAAMkgC,kBAAkB,KAJU,WAIlC;AACA,8BALkC,IAKlC;;AAIA,cAAIA,uBAAuB,oBAA3B,GAAkD;AAChD,kCADgD,oCAChD;AACA,yBAAa,oBAFmC,OAEhD;AAXgC;;AAalC/mD,4BACE;AACE8lD,sBADF,EACEA,UADF;AAEEC,sBAFF,EAEEA,UAFF;AAGEznC,oBAAQ2mC,WAHV;AAIEoB,oBAJF,EAIEA,QAJF;AAKE3sD,iBALF,EAKEA;AALF,WADFsG,EAbkC,SAalCA;AAde;AA0BjB0J,aA1BiB,mBA0BT;AACN,cAAI,KAAJ,aAAsB;AAAA;AADhB;;AAIN,6BAJM,IAIN;AACAm8C,6BAAmB;AACjBC,sBADiB,EACjBA,UADiB;AAEjBC,sBAFiB,EAEjBA,UAFiB;AAGjBznC,oBAAQ2mC,WAHS;AAIjBoB,oBAJiB,EAIjBA;AAJiB,WAAnBR;AAMA,iBAAO7lD,iBAXD,QAWCA,CAAP;AArCe;AAwCjBU,aAxCiB,iBAwCjBA,MAxCiB,EAwCH;AACZ5iB,4BAAOZ,kBAAPY,OADY,gCACZA;;AACA,cAAI,KAAJ,aAAsB;AAAA;AAFV;;AAKZ,6BALY,IAKZ;AACA+nE,6BAAmB;AACjBC,sBADiB,EACjBA,UADiB;AAEjBC,sBAFiB,EAEjBA,UAFiB;AAGjBznC,oBAAQ2mC,WAHS;AAIjBoB,oBAJiB,EAIjBA,QAJiB;AAKjBnpE,oBAAQwoE,WALS,MAKTA;AALS,WAAnBG;AA9Ce;AAuDjBmB,wBAvDiB;AAwDjBC,gBAxDiB;AAyDjBC,kBAzDiB;AA0DjBC,qBA1DiB;AA2DjBx/B,qBAAa5tB,KA3DI;AA4DjBgvB,eA5DiB;AAAA,OAAnB;AA+DA+9B,gCAvEsB,OAuEtBA;AACAA,yBAAmBA,0BAxEG,OAwEtBA;AACA,mCAzEsB,UAyEtB;AACA,kBAAY,mBAAmB;AAC7BlpE,gBAAQ42C,OAAOz6B,KAAPy6B,MADqB,UACrBA,CAAR52C;AADF,cAGE,YAAY;AACVioE,2BAAmB;AACjBC,oBADiB,EACjBA,UADiB;AAEjBC,oBAFiB,EAEjBA,UAFiB;AAGjBznC,kBAAQ2mC,WAHS;AAIjBoB,kBAJiB,EAIjBA,QAJiB;AAKjBe,mBALiB;AAAA,SAAnBvB;AAJJ,SAYE,kBAAkB;AAChBA,2BAAmB;AACjBC,oBADiB,EACjBA,UADiB;AAEjBC,oBAFiB,EAEjBA,UAFiB;AAGjBznC,kBAAQ2mC,WAHS;AAIjBoB,kBAJiB,EAIjBA,QAJiB;AAKjBnpE,kBAAQwoE,WALS,MAKTA;AALS,SAAnBG;AAvFkB,OA0EtB;AAzSiB;;;WAoUnBwB,qCAA4B;AAC1B,UAAMhB,WAAWtsD,KADS,QAC1B;AACA,UAAM+rD,aAAa,KAFO,UAE1B;AACA,UAAMC,aAAahsD,KAHO,UAG1B;AACA,UAAM8rD,SAAS,KAJW,MAI1B;;AAEA,cAAQ9rD,KAAR;AACE,aAAKkrD,WAAL;AACE,cAAIlrD,KAAJ,SAAkB;AAChB,uDADgB,OAChB;AADF,iBAEO;AACL,8DACE2rD,WAAW3rD,KAFR,MAEH2rD,CADF;AAJJ;;AADF;;AAUE,aAAKT,WAAL;AACE,cAAIlrD,KAAJ,SAAkB;AAChB,sDADgB,OAChB;AADF,iBAEO;AACL,6DACE2rD,WAAW3rD,KAFR,MAEH2rD,CADF;AAJJ;;AAVF;;AAmBE,aAAKT,WAAL;AAEE,cAAI,CAAC,iBAAL,QAAK,CAAL,EAAiC;AAC/BY,+BAAmB;AACjBC,wBADiB,EACjBA,UADiB;AAEjBC,wBAFiB,EAEjBA,UAFiB;AAGjBznC,sBAAQ2mC,WAHS;AAIjBoB,sBAJiB,EAIjBA,QAJiB;AAKjBe,uBALiB;AAAA,aAAnBvB;AAD+B;AAFnC;;AAeE,cACE,+CACA9rD,mBAFF,GAGE;AACA,sDADA,OACA;AAnBJ;;AAsBE,mDAAyCA,KAtB3C,WAsBE;AAtBF,cAuBQ,MAvBR,GAuBqB,iBAAiBA,KAvBtC,QAuBqB,CAvBrB,CAuBQ,MAvBR;AAwBE,sBAAY,mBAAmB;AAC7Bnc,oBAAQqpE,UAAUA,MADW,EAC7BrpE;AADF,kBAGE,YAAY;AACVioE,+BAAmB;AACjBC,wBADiB,EACjBA,UADiB;AAEjBC,wBAFiB,EAEjBA,UAFiB;AAGjBznC,sBAAQ2mC,WAHS;AAIjBoB,sBAJiB,EAIjBA,QAJiB;AAKjBe,uBALiB;AAAA,aAAnBvB;AAJJ,aAYE,kBAAkB;AAChBA,+BAAmB;AACjBC,wBADiB,EACjBA,UADiB;AAEjBC,wBAFiB,EAEjBA,UAFiB;AAGjBznC,sBAAQ2mC,WAHS;AAIjBoB,sBAJiB,EAIjBA,QAJiB;AAKjBnpE,sBAAQwoE,WALS,MAKTA;AALS,aAAnBG;AArCN,WAwBE;AA3CJ;;AAkEE,aAAKZ,WAAL;AACEnnE,4BACE,uBADFA,QACE,CADFA,EADF,uCACEA;;AAIA,cAAI,iCAAJ,UAA+C;AAAA;AALjD;;AAQE,8DAAoDic,KARtD,KAQE;AA1EJ;;AA4EE,aAAKkrD,WAAL;AACEnnE,4BACE,uBADFA,QACE,CADFA,EADF,qCACEA;;AAIA,cAAI,iCAAJ,UAA+C;AAAA;AALjD;;AAQE,sDARF,IAQE;AACA,sDATF,KASE;;AACA,uCAVF,QAUE;;AAtFJ;;AAwFE,aAAKmnE,WAAL;AACEnnE,4BACE,uBADFA,QACE,CADFA,EADF,qCACEA;AAIA,4DACE4nE,WAAW3rD,KANf,MAMI2rD,CADF;;AAGA,uCARF,QAQE;;AAhGJ;;AAkGE,aAAKT,WAAL;AACE,cAAIlrD,KAAJ,SAAkB;AAChB,wDADgB,OAChB;AADF,iBAEO;AACL,+DACE2rD,WAAW3rD,KAFR,MAEH2rD,CADF;AAJJ;;AAQE,uCARF,QAQE;;AA1GJ;;AA4GE,aAAKT,WAAL;AACE,cAAI,CAAC,iBAAL,QAAK,CAAL,EAAiC;AAAA;AADnC;;AAAA,cAIQ,QAJR,GAIuB,iBAAiBlrD,KAJxC,QAIuB,CAJvB,CAIQ,QAJR;AAKE,sBAAY,mBAAmB;AAC7Bnc,oBAAQspE,YAAYA,SAASxB,WAAW3rD,KADX,MACA2rD,CAATwB,CAApBtpE;AADF,kBAGE,YAAY;AACVioE,+BAAmB;AACjBC,wBADiB,EACjBA,UADiB;AAEjBC,wBAFiB,EAEjBA,UAFiB;AAGjBznC,sBAAQ2mC,WAHS;AAIjBoB,sBAJiB,EAIjBA,QAJiB;AAKjBe,uBALiB;AAAA,aAAnBvB;AAJJ,aAYE,kBAAkB;AAChBA,+BAAmB;AACjBC,wBADiB,EACjBA,UADiB;AAEjBC,wBAFiB,EAEjBA,UAFiB;AAGjBznC,sBAAQ2mC,WAHS;AAIjBoB,sBAJiB,EAIjBA,QAJiB;AAKjBnpE,sBAAQwoE,WALS,MAKTA;AALS,aAAnBG;AAlBN,WAKE;AAsBA,2DACEH,WAAW3rD,KA5Bf,MA4BI2rD,CADF;AAGA,mDA9BF,IA8BE;AACA,iBAAO,iBA/BT,QA+BS,CAAP;AA3IJ;;AA6IE;AACE,gBAAM,UA9IV,wBA8IU,CAAN;AA9IJ;AA1UiB;;;;kGA+dnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAGQ,mBACJ,CACE,iCADF,WAEE,iCAFF,UAGE,iCAHF,gBAIM,sBAAsB;AAC1B,yBAAOzoD,cAAcA,WADK,OAC1B;AATkC,iBAIpC,CADI,CAHR;;AAAA;AAYE,uBAAO,uBAZ+B,QAY/B,CAAP;;AAZF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAqBAqqD,0CAAiC;AAC/B,UAAI7f,aAAa,KAAjB,sBAA4C;AAC1C,yCAD0C,SAC1C;AADF,aAEO;AACL,gCADK,OACL;AAJ6B;AApfd;;;WA4fnBjrD,mBAAU;AACR,iDAA2C,KADnC,kBACR;AA7fiB;;;;;;;;;;;;;;;;;;;;ACvErB;;;;;;;;IAiBA,Q;AACEP,0BAAqC;AAAA,QAAzB,UAAyB,QAAzB,UAAyB;AAAA,QAArCA,OAAqC,QAArCA,OAAqC;;AAAA;;AACnC,wBADmC,UACnC;AACA,iBAFmC,OAEnC;AAHW;;;;WAMbsrE,kBAAS;AACP,aAAO,KADA,KACP;AAPW;;;WAUbpqD,mBAAU;AAAA;;AACR,sCAAO,2BAAP,yEADQ,IACR;AAXW;;;WAcb2yC,kBAAS;AACP,aAAOC,yBAAc,KADd,YACAA,CAAP;AAfW;;;WAkBbzvC,mBAAU;AACR,aAAO,sBADC,IACD,CAAP;AAnBW;;;;;;;;;;;;;;;;;;;;ACHf;;;;;;;;;;;;;;IAEA,oB,GACErkB,4CAA0B;AAAA;;AACxB,iBADwB,IACxB;AACA,cAFwB,IAExB;AACA,gBAHwB,MAGxB;AAJuB,C;;IAQ3B,qB;AACEA,uCAAkB;AAAA;;AAChB,gBADgB,IAChB;AACA,mBAFgB,IAEhB;AACA,kBAHgB,IAGhB;AACA,mBAAe,IAJC,GAID,EAAf;;AAEA,QAAI8d,SAAJ,MAAmB;AAAA;AANH;;AAShB,gBAAYA,KATI,IAShB;AACA,mBAAeA,KAVC,OAUhB;AACA,kBAAcA,KAXE,KAWhB;;AAXgB,+CAYIA,KAApB,MAZgB;AAAA;;AAAA;AAYhB,0DAAiC;AAAA,YAAjC,MAAiC;;AAC/B,yBACEmjD,OADF,IAEE,yBAAyBA,OAAzB,MAAqCA,OAHR,MAG7B,CAFF;AAbc;AAAA;AAAA;AAAA;AAAA;AAAA;;AAmBhB,QAAInjD,mBAAJ,OAA8B;AAAA,kDACR,KAApB,OAD4B;AAAA;;AAAA;AAC5B,+DAAkC;AAAA,cAAlC,KAAkC;AAChCmjD,0BADgC,KAChCA;AAF0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBd;;AAAA,gDAyBCnjD,KAAjB,EAzBgB;AAAA;;AAAA;AAyBhB,6DAA0B;AAAA,YAA1B,EAA0B;AACxB,uCADwB,IACxB;AA1Bc;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,gDA6BEA,KAAlB,GA7BgB;AAAA;;AAAA;AA6BhB,6DAA4B;AAAA,YAA5B,GAA4B;AAC1B,wCAD0B,KAC1B;AA9Bc;AAAA;AAAA;AAAA;AAAA;AAAA;AADQ;;;;WAmC1BytD,0BAAiB;AACf,UAAItK,eAAJ,OAA0B;AACxB,YAAI,CAAC,iBAAiBA,MAAtB,EAAK,CAAL,EAAiC;AAC/Bz8D,sEAA0Cy8D,MADX,EAC/Bz8D;AACA,iBAF+B,IAE/B;AAHsB;;AAKxB,eAAO,iBAAiBy8D,MAAjB,IALiB,OAKxB;AALF,aAMO,IAAIA,eAAJ,QAA2B;AAGhC,YAAIA,MAAJ,YAAsB;AACpBz8D,0BADoB,0CACpBA;AAJ8B;;AAMhC,YAAI,CAACy8D,MAAD,UAAiBA,iBAArB,SAA+C;AAAA,sDAE5BA,MAAjB,GAF6C;AAAA;;AAAA;AAE7C,mEAA4B;AAAA,kBAA5B,EAA4B;;AAC1B,kBAAI,CAAC,iBAAL,EAAK,CAAL,EAA2B;AACzBz8D,4EADyB,EACzBA;AACA,uBAFyB,IAEzB;AAHwB;;AAK1B,kBAAI,qBAAJ,SAAkC;AAChC,uBADgC,IAChC;AANwB;AAFiB;AAAA;AAAA;AAAA;AAAA;AAAA;;AAW7C,iBAX6C,KAW7C;AAXF,eAYO,IAAIy8D,iBAAJ,SAA8B;AAAA,sDAClBA,MAAjB,GADmC;AAAA;;AAAA;AACnC,mEAA4B;AAAA,kBAA5B,GAA4B;;AAC1B,kBAAI,CAAC,iBAAL,GAAK,CAAL,EAA2B;AACzBz8D,4EADyB,GACzBA;AACA,uBAFyB,IAEzB;AAHwB;;AAK1B,kBAAI,CAAC,sBAAL,SAAmC;AACjC,uBADiC,KACjC;AANwB;AADO;AAAA;AAAA;AAAA;AAAA;AAAA;;AAUnC,iBAVmC,IAUnC;AAVK,eAWA,IAAIy8D,iBAAJ,UAA+B;AAAA,sDACnBA,MAAjB,GADoC;AAAA;;AAAA;AACpC,mEAA4B;AAAA,kBAA5B,IAA4B;;AAC1B,kBAAI,CAAC,iBAAL,IAAK,CAAL,EAA2B;AACzBz8D,4EADyB,IACzBA;AACA,uBAFyB,IAEzB;AAHwB;;AAK1B,kBAAI,CAAC,uBAAL,SAAmC;AACjC,uBADiC,IACjC;AANwB;AADQ;AAAA;AAAA;AAAA;AAAA;AAAA;;AAUpC,iBAVoC,KAUpC;AAVK,eAWA,IAAIy8D,iBAAJ,UAA+B;AAAA,sDACnBA,MAAjB,GADoC;AAAA;;AAAA;AACpC,mEAA4B;AAAA,kBAA5B,IAA4B;;AAC1B,kBAAI,CAAC,iBAAL,IAAK,CAAL,EAA2B;AACzBz8D,4EADyB,IACzBA;AACA,uBAFyB,IAEzB;AAHwB;;AAK1B,kBAAI,uBAAJ,SAAkC;AAChC,uBADgC,KAChC;AANwB;AADQ;AAAA;AAAA;AAAA;AAAA;AAAA;;AAUpC,iBAVoC,IAUpC;AAlD8B;;AAoDhCA,kEAAwCy8D,MApDR,MAoDhCz8D;AACA,eArDgC,IAqDhC;AA5Da;;AA8DfA,mDAA2By8D,MA9DZ,IA8Dfz8D;AACA,aA/De,IA+Df;AAlGwB;;;WAqG1BgnE,2BAAkC;AAAA,UAAhBzI,OAAgB,uEAAlCyI,IAAkC;;AAChC,UAAI,CAAC,iBAAL,EAAK,CAAL,EAA2B;AACzBhnE,oEADyB,EACzBA;AADyB;AADK;;AAKhC,qCAA+B,CAAC,CALA,OAKhC;AA1GwB;;;WA6G1BinE,oBAAW;AACT,UAAI,CAAC,aAAL,MAAwB;AACtB,eADsB,IACtB;AAFO;;AAIT,UAAI,KAAJ,QAAiB;AACf,eAAO,YADQ,KACR,EAAP;AALO;;AAOT,aAAOhtD,WAAW,aAPT,IAOS,EAAXA,CAAP;AApHwB;;;WAuH1BitD,qBAAY;AACV,aAAO,wBAAwB5X,yBAAc,KAAtC,OAAwBA,CAAxB,GADG,IACV;AAxHwB;;;WA2H1B6X,sBAAa;AACX,aAAO,wBADI,IACX;AA5HwB;;;;;;;;;;;;;;;;;;;;;;ACT5B;;AAfA;;;;;;;;;;;;;;;;;;;;IAmBA,sB;AACE3rE,iEAA2C;AAAA;;AAAA;;AACzC6B,6CADyC,6EACzCA;AAKA,yBANyC,EAMzC;AACA,4BAAwBuhD,0BAPiB,KAOzC;AACA,uCACEA,qCATuC,IAQzC;AAGA,QAAMa,cAAcb,OAXqB,WAWzC;;AACA,QAAIa,iFAAJ,GAA6B;AAC3B,UAAMljC,SAAS,4BADY,MAC3B;;AACA,8BAF2B,MAE3B;AAduC;;AAiBzC,kCAjByC,qBAiBzC;AACA,iCAA6B,CAACqiC,OAlBW,aAkBzC;AACA,6BAAyB,CAACA,OAnBe,YAmBzC;AACA,0BAAsBA,OApBmB,MAoBzC;AAEA,8BAtByC,IAsBzC;AACA,yBAvByC,EAuBzC;;AAEA,iDAA6C,wBAAkB;AAC7D,2BAAoB;AAAEwoB,aAAF,EAAEA,KAAF;AAASnuD,aAAT,EAASA;AAAT,OAApB;AA1BuC,KAyBzC;;AAIA,oDAAgD,yBAAmB;AACjE,wBAAiB;AAAEowC,cAAF,EAAEA,MAAF;AAAUC,aAAV,EAAUA;AAAV,OAAjB;AA9BuC,KA6BzC;;AAIA,2DAAuDrwC,iBAAS;AAC9D,2BAAoB;AAAEA,aADwC,EACxCA;AAAF,OAApB;AAlCuC,KAiCzC;;AAIA,2DAAuD,YAAM;AAC3D,YAD2D,kBAC3D;AAtCuC,KAqCzC;;AAIA,gCAzCyC,cAyCzC;AA1CyB;;;;WA6C3BouD,8BAAqB;AACnB,UAAM9qD,SAAS,eAAe8Y,KAAf,OADI,MACnB;;AACA,UAAIA,eAAJ,WAA8B;AAC5B,YAAI,KAAJ,oBAA6B;AAC3B,2CAD2B,MAC3B;AADF,eAEO;AACL,kCADK,MACL;AAJ0B;AAA9B,aAMO;AACL,YAAMiyC,QAAQ,wBAAwB,uBAAuB;AAC3D,cAAIxd,uBAAuBz0B,KAA3B,OAAuC;AACrC,mBADqC,KACrC;AAFyD;;AAI3Dy0B,+BAJ2D,MAI3DA;;AACA,iBAL2D,IAK3D;AANG,SACS,CAAd;;AAOAzsD,iCARK,yEAQLA;AAhBiB;AA7CM;;;SAoE3B,eAA6B;AAAA;;AAC3B,gEAAO,uBAAP,2DAAO,8BAAP,yEAD2B,CAC3B;AArEyB;;;WAwE3BkqE,0BAAiB;AACf,UAAIne,cAAJ,WAA6B;AAE3B,YAAMoe,cAAc,mBAFO,CAEP,CAApB;;AACA,YAAIA,WAAJ,aAAIA,WAAJ,eAAIA,YAAJ,YAA6B;AAC3BA,iCAAuB;AAAEne,oBAAQD,IADN;AACJ,WAAvBoe;AAJyB;AAA7B,aAMO;AACL,YAAM9d,aAAa,KADd,kBACL;;AACA,YAAIA,UAAJ,aAAIA,UAAJ,eAAIA,WAAJ,YAA4B;AAC1BA,gCAAsB;AAAEL,oBAAQD,IAAV;AAAsBE,mBAAOF,IAA7B;AAAA,WAAtBM;AAHG;AAPQ;AAxEU;;;WAuF3B+d,8BAAqB;AACnB,UAAI,KAAJ,oBAA6B;AAC3B,gCAD2B,eAC3B;AAFiB;;AAInB,8BAJmB,IAInB;AA3FyB;;;WA8F3BC,oCAA2B;AACzB,UAAMhoE,IAAI,2BADe,MACf,CAAV;;AACA,UAAIA,KAAJ,GAAY;AACV,qCADU,CACV;AAHuB;AA9FA;;;WAqG3BioE,yBAAgB;AACdtqE,wBACE,CAAC,KADHA,oBADc,+DACdA;AAIA,UAAMuqE,eAAe,KALP,aAKd;AACA,2BANc,IAMd;AACA,aAAO,qDAGL,KAHK,kBAIL,KAXY,2BAOP,CAAP;AA5GyB;;;WAoH3BC,oCAA2B;AACzB,UAAIhoE,OAAO,KAAX,wBAAwC;AACtC,eADsC,IACtC;AAFuB;;AAIzB,UAAM+9B,SAAS,mDAJU,GAIV,CAAf;;AACA,0DALyB,GAKzB;;AACA,8BANyB,MAMzB;;AACA,aAPyB,MAOzB;AA3HyB;;;WA8H3BkqC,mCAA0B;AACxB,UAAI,KAAJ,oBAA6B;AAC3B,uCAD2B,MAC3B;AAFsB;;AAIxB,UAAMC,UAAU,yBAJQ,CAIR,CAAhB;;AACAA,sBAAgB,uBAAuB;AACrCje,2BADqC,MACrCA;AANsB,OAKxBie;;AAGA,kCARwB,KAQxB;AAtIyB;;;;;;;;IA2I7B,4B;AACEvsE,8DAKE;AAAA,QAFAkkD,eAEA,uEALFlkD,KAKE;AAAA,QADAmkD,0BACA,uEALFnkD,IAKE;;AAAA;;AACA,mBADA,MACA;AACA,iBAAakkD,mBAFb,KAEA;AACA,qBAAiBsoB,yFAHjB,IAGA;AAGA,yBAAqBJ,gBANrB,EAMA;AACA,mBAPA,CAOA;;AAPA,+CAQoB,KAApB,aARA;AAAA;;AAAA;AAQA,0DAAwC;AAAA,YAAxC,KAAwC;AACtC,wBAAgB3uD,MADsB,UACtC;AATF;AAAA;AAAA;AAAA;AAAA;AAAA;;AAWA,qBAXA,EAWA;AACA,yBAAqBqV,QAZrB,OAYqBA,EAArB;AACAuP,gCAbA,IAaAA;AAEA,sBAfA,IAeA;AArB+B;;;;WAwBjCoqC,yBAAgB;AACd,UAAI,KAAJ,OAAgB;AAAA;AADF;;AAId,UAAI,wBAAJ,GAA+B;AAC7B,YAAMC,oBAAoB,eADG,KACH,EAA1B;;AACAA,kCAA0B;AAAExlE,iBAAF;AAAgBgD,gBAAhB;AAAA,SAA1BwiE;AAFF,aAGO;AACL,gCADK,KACL;AARY;;AAUd,sBAAgBjvD,MAVF,UAUd;AAlC+B;;;SAqCjC,eAAmB;AACjB,aAAO,KADU,aACjB;AAtC+B;;;SAyCjC,eAAe;AACb,aAAO,KADM,SACb;AA1C+B;;;SA6CjC,eAAuB;AACrB,aAAO,aADc,iBACrB;AA9C+B;;;SAiDjC,eAA2B;AACzB,aAAO,aADkB,qBACzB;AAlD+B;;;SAqDjC,eAAoB;AAClB,aAAO,aADW,cAClB;AAtD+B;;;;+EAyDjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBACM,4BAAJ,CADF;AAAA;AAAA;AAAA;;AAEUA,qBAFV,GAEkB,mBADmB,KACnB,EAFlB;AAAA,iDAGW;AAAEvW,yBAAF;AAAgBgD,wBAAhB;AAAA,iBAHX;;AAAA;AAAA,qBAKM,KAAJ,KALF;AAAA;AAAA;AAAA;;AAAA,iDAMW;AAAEhD,yBAAF;AAAoBgD,wBAApB;AAAA,iBANX;;AAAA;AAQQwiE,iCARR,GAAa,oCAAb;;AASE,oCATW,iBASX;;AATF,iDAUSA,kBAVI,OAAb;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAaA9mC,wBAAe;AACb,mBADa,IACb;;AACA,6BAAuB,6BAA6B;AAClD8mC,kCAA0B;AAAExlE,iBAAF;AAAoBgD,gBAApB;AAAA,SAA1BwiE;AAHW,OAEb;;AAGA,uBALa,EAKb;AA3E+B;;;WA8EjCxoB,2BAAkB;AAChB,UAAI,KAAJ,OAAgB;AAAA;AADA;;AAIhB,mBAJgB,IAIhB;AAlF+B;;;;;;IAuFnC,iC;AACElkD,iEAAgC;AAAA;;AAC9B,mBAD8B,MAC9B;AACA,kBAF8B,KAE9B;AACA,gBAH8B,GAG9B;AACA,wBAJ8B,IAI9B;AACA,qBAL8B,EAK9B;AACA,iBAN8B,KAM9B;AAEA,sBAR8B,IAQ9B;AAToC;;;;WAYtCysE,yBAAgB;AACd,UAAI,KAAJ,OAAgB;AAAA;AADF;;AAId,UAAI,0BAAJ,GAAiC;AAC/B,4BAD+B,KAC/B;AADF,aAEO;AACL,YAAME,qBAAqB,eADtB,KACsB,EAA3B;;AACAA,mCAA2B;AAAEzlE,iBAAF;AAAgBgD,gBAAhB;AAAA,SAA3ByiE;;AACA,+BAAuB,6BAA6B;AAClDD,oCAA0B;AAAExlE,mBAAF;AAAoBgD,kBAApB;AAAA,WAA1BwiE;AAJG,SAGL;;AAGA,yBANK,EAML;AAZY;;AAcd,mBAdc,IAcd;;AACA,sCAfc,IAed;AA3BoC;;;SA8BtC,eAA2B;AACzB,aADyB,KACzB;AA/BoC;;;;gFAkCtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACM,KAAJ,YADF;AAAA;AAAA;AAAA;;AAEUjvD,qBAFV,GAEkB,KADO,YADzB;AAGI,oCAFqB,IAErB;AAHJ,kDAIW;AAAEvW,yBAAF;AAAgBgD,wBAAhB;AAAA,iBAJX;;AAAA;AAAA,qBAMM,KAAJ,KANF;AAAA;AAAA;AAAA;;AAAA,kDAOW;AAAEhD,yBAAF;AAAoBgD,wBAApB;AAAA,iBAPX;;AAAA;AASQwiE,iCATR,GAAa,oCAAb;;AAUE,oCAVW,iBAUX;;AAVF,kDAWSA,kBAXI,OAAb;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAcA9mC,wBAAe;AACb,mBADa,IACb;;AACA,6BAAuB,6BAA6B;AAClD8mC,kCAA0B;AAAExlE,iBAAF;AAAoBgD,gBAApB;AAAA,SAA1BwiE;AAHW,OAEb;;AAGA,uBALa,EAKb;;AACA,sCANa,IAMb;AAtDoC;;;;;;;;;;;;;;;;;;ACrPxC;;;;;;;;IAkBA,Y;AACE1sE,8BAAgC;AAAA,2BAAlB+oD,MAAkB;AAAA,QAAlBA,MAAkB,4BAApB,KAAoB;;AAAA;;AAC9B,oBAAgBA,WADc,IAC9B;AAFe;;;;SAKjB,eAAgB;AACd,UAAInlD,UAAU,KADA,QACd;;AACA,mBAAa;AACXA,kBAAUgpE,WADC,SACDA,EAAVhpE;AAHY;;AAKd,aAAOwa,qCALO,OAKPA,CAAP;AAVe;;;WAajB09C,6BAA0C;AAAA,UAA7B,KAA6B,SAA7B,KAA6B;AAAA,UAA7B,IAA6B,SAA7B,IAA6B;AAAA,UAA1CA,UAA0C,SAA1CA,UAA0C;AACxC,aAAO8Q,qCADiC,UACjCA,CAAP;AAde;;;WAiBjBC,4BAAkE;AAAA,UAAtD,KAAsD,SAAtD,KAAsD;AAAA,UAAtD,MAAsD,SAAtD,MAAsD;AAAA,UAAtD,eAAsD,SAAtD,eAAsD;AAAA,UAAtD,OAAsD,SAAtD,OAAsD;AAAA,UAAlEA,OAAkE,SAAlEA,OAAkE;AAChE,aAAOD,gEADyD,OACzDA,CAAP;AAlBe;;;WA2BjB9zC,iBAAQ;AACN8zC,iBADM,OACNA;AA5Be;;;;;;;;AAgCnB,IAAMA,aAAc,6BAA6B;AAC/C,4CAA0C;AACxC,QAAME,SAASC,gBADyB,UACzBA,CAAf;AACAA,4BAFwC,IAExCA;AACAA,qBAHwC,MAGxCA;AACA,QAAMC,WAAWD,8BAA8BA,GAJP,cAIvBA,CAAjB;;AACA,QAAI,CAAJ,UAAe;AACb,UAAME,WAAWF,oBADJ,MACIA,CAAjB;AACA,YAAM,UAAU,sCAFH,QAEP,CAAN;AAPsC;;AASxC,WATwC,MASxC;AAV6C;;AAY/C,wCAAsC;AACpC,WAAOG,qBAAqBH,GADQ,aAC7BG,CAAP;AAb6C;;AAe/C,0CAAwC;AACtC,WAAOA,qBAAqBH,GADU,eAC/BG,CAAP;AAhB6C;;AAkB/C,sCAAoC;AAClC,QAAMC,UAAUJ,GADkB,aAClBA,EAAhB;;AACA,SAAK,IAAI7oE,IAAJ,GAAWD,KAAKmpE,QAArB,QAAqClpE,IAArC,IAA6C,EAA7C,GAAkD;AAChD6oE,+BAAyBK,QADuB,CACvBA,CAAzBL;AAHgC;;AAKlCA,mBALkC,OAKlCA;AACA,QAAMM,SAASN,gCAAgCA,GANb,WAMnBA,CAAf;;AACA,QAAI,CAAJ,QAAa;AACX,UAAME,WAAWF,qBADN,OACMA,CAAjB;AACA,YAAM,UAAU,mCAFL,QAEL,CAAN;AATgC;;AAWlC,WAXkC,OAWlC;AA7B6C;;AA+B/C,+CAA6C;AAC3CA,qBAD2C,SAC3CA;AACA,QAAMO,UAAUP,GAF2B,aAE3BA,EAAhB;AACAA,mBAAeA,GAAfA,YAH2C,OAG3CA;AAGAA,qBAAiBA,GAAjBA,YAAgCA,GAAhCA,gBAAmDA,GANR,aAM3CA;AACAA,qBAAiBA,GAAjBA,YAAgCA,GAAhCA,gBAAmDA,GAPR,aAO3CA;AACAA,qBAAiBA,GAAjBA,YAAgCA,GAAhCA,oBAAuDA,GARZ,OAQ3CA;AACAA,qBAAiBA,GAAjBA,YAAgCA,GAAhCA,oBAAuDA,GATZ,OAS3CA;AAGAA,kBAAcA,GAAdA,eAAgCA,GAAhCA,MAAyCA,GAAzCA,MAAkDA,GAAlDA,eAZ2C,KAY3CA;AACA,WAb2C,OAa3C;AA5C6C;;AA+C/C,iBA/C+C,aA+C/C;;AACA,wBAAsB;AACpB,mBAAe;AAAA;AADK;;AAMpBQ,oBAAgBlsE,uBANI,QAMJA,CAAhBksE;AACAC,gBAAYD,kCAAkC;AAC5CE,0BARkB;AAO0B,KAAlCF,CAAZC;AAvD6C;;AA4D/C,MAAME,wBACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7D6C,iEA4D/C;AAgBA,MAAMC,0BACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7E6C,iEA4E/C;AA8BA,MAAIC,aA1G2C,IA0G/C;;AAEA,yBAAuB;AACrBC,cADqB;AAErB,QAAMntE,SAFe,aAErB;AACA6sE,oBAHqB,IAGrBA;AACA,QAAMR,KAJe,SAIrB;AACAS,gBALqB,IAKrBA;AAGA,QAAMM,eAAeC,uBARA,qBAQAA,CAArB;AACA,QAAMC,iBAAiBC,yBATF,uBASEA,CAAvB;AACA,QAAMd,UAAU,kBAAkB,8BAAlB,CAAhB;AACAJ,kBAXqB,OAWrBA;AAEA,QAAMmB,QAbe,EAarB;AACAA,eAdqB,EAcrBA;AACAA,mBAfqB,MAerBA;AACAA,+BAA2BnB,+BAhBN,cAgBMA,CAA3BmB;AACAA,6BAAyBnB,8BAjBJ,YAiBIA,CAAzBmB;AACAA,6BAAyBnB,+BAlBJ,YAkBIA,CAAzBmB;AACAA,4BAAwBnB,+BAnBH,WAmBGA,CAAxBmB;AAEA,QAAMC,mBAAmBpB,8BArBJ,YAqBIA,CAAzB;AACA,QAAMqB,mBAAmBrB,+BAtBJ,SAsBIA,CAAzB;AACA,QAAMsB,kBAAkBtB,+BAvBH,QAuBGA,CAAxB;AAGA,QAAMuB,iBAAiBvB,GA1BF,YA0BEA,EAAvB;AACAA,kBAAcA,GAAdA,cA3BqB,cA2BrBA;AAEAA,kBAAcA,GAAdA,cAA+B,iBAAiB,4DAAjB,CAA/BA,EAMcA,GAnCO,WA6BrBA;AAOAA,+BApCqB,gBAoCrBA;AACAA,gDAA4CA,GAA5CA,iBArCqB,CAqCrBA;AAEAA,mCAvCqB,CAuCrBA;AACAA,kCAxCqB,CAwCrBA;AAEAa,iBA1CqB,KA0CrBA;AAtJ6C;;AAyJ/C,iDAA+C;AAC7C,QAAMvtE,QAAQy5D,MAAd;AAAA,QACEx5D,SAASw5D,MAFkC,MAC7C;;AAGA,QAAI,CAAJ,YAAiB;AACfyU,iBADe;AAJ4B;;AAO7C,QAAML,QAAN;AAAA,QACExtE,SAASwtE,MADX;AAAA,QAEEnB,KAAKmB,MATsC,EAO7C;AAGAxtE,mBAV6C,KAU7CA;AACAA,oBAX6C,MAW7CA;AACAqsE,sBAAkBA,GAAlBA,oBAAyCA,GAZI,mBAY7CA;AACAA,iBAAamB,MAAbnB,2BAb6C,MAa7CA;;AAEA,QAAIzU,WAAJ,UAAyB;AACvByU,mBACEmB,MADFnB,oBAEEzU,oBAFFyU,CAEEzU,CAFFyU,EAGEzU,oBAHFyU,CAGEzU,CAHFyU,EAIEzU,oBAJFyU,CAIEzU,CAJFyU,EADuB,CACvBA;AADF,WAQO;AACLA,mBAAamB,MAAbnB,6BADK,CACLA;AAxB2C;;AA0B7CA,iBACEmB,MADFnB,iBAEEzU,0CA5B2C,CA0B7CyU;AAMA,QAAMO,UAAUkB,yBAAyBzB,GAhCI,QAgC7ByB,CAAhB;AACA,QAAMC,cAAcD,wBAAwBzB,GAjCC,QAiCzByB,CAApB;AAIA,QAAMztD,SAASgsD,GArC8B,YAqC9BA,EAAf;AACAA,kBAAcA,GAAdA,cAtC6C,MAsC7CA;AAEAA,kBAAcA,GAAdA,cAA+B,iBAAiB,+DAAjB,CAA/BA,EAMmBA,GA9C0B,WAwC7CA;AAOAA,+BAA2BmB,MA/CkB,gBA+C7CnB;AACAA,2BAAuBmB,MAAvBnB,qBAAkDA,GAAlDA,iBAhD6C,CAgD7CA;AAGAA,2BAnD6C,CAmD7CA;AACAA,cAAUA,GApDmC,KAoD7CA;AACAA,iBAAaA,GAAbA,KAAqBA,GArDwB,mBAqD7CA;AACAA,aAASA,GAtDoC,gBAsD7CA;AAEAA,kBAAcA,GAAdA,cAxD6C,CAwD7CA;AAEAA,OA1D6C,KA0D7CA;AAEAA,qBA5D6C,OA4D7CA;AACAA,qBA7D6C,WA6D7CA;AACAA,oBA9D6C,MA8D7CA;AAEA,WAhE6C,MAgE7C;AAzN6C;;AA4N/C,MAAM2B,0BACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7N6C,iEA4N/C;AAmBA,MAAMC,4BACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhP6C,iEA+O/C;AAUA,MAAIC,eAzP2C,IAyP/C;;AAEA,2BAAyB;AACvBf,cADuB;AAEvB,QAAMntE,SAFiB,aAEvB;AACA6sE,oBAHuB,IAGvBA;AACA,QAAMR,KAJiB,SAIvB;AACAS,gBALuB,IAKvBA;AAGA,QAAMM,eAAeC,uBARE,uBAQFA,CAArB;AACA,QAAMC,iBAAiBC,yBATA,yBASAA,CAAvB;AACA,QAAMd,UAAU,kBAAkB,8BAAlB,CAAhB;AACAJ,kBAXuB,OAWvBA;AAEA,QAAMmB,QAbiB,EAavB;AACAA,eAduB,EAcvBA;AACAA,mBAfuB,MAevBA;AACAA,+BAA2BnB,+BAhBJ,cAgBIA,CAA3BmB;AACAA,0BAAsBnB,+BAjBC,SAiBDA,CAAtBmB;AACAA,2BAAuBnB,+BAlBA,UAkBAA,CAAvBmB;AACAA,6BAAyBnB,8BAnBF,YAmBEA,CAAzBmB;AACAA,0BAAsBnB,8BApBC,SAoBDA,CAAtBmB;AAEAU,mBAtBuB,KAsBvBA;AAjR6C;;AAoR/C,yEAAuE;AACrE,QAAI,CAAJ,cAAmB;AACjBC,mBADiB;AADkD;;AAIrE,QAAMX,QAAN;AAAA,QACExtE,SAASwtE,MADX;AAAA,QAEEnB,KAAKmB,MAN8D,EAIrE;AAIAxtE,mBARqE,KAQrEA;AACAA,oBATqE,MASrEA;AACAqsE,sBAAkBA,GAAlBA,oBAAyCA,GAV4B,mBAUrEA;AACAA,iBAAamB,MAAbnB,2BAXqE,MAWrEA;AAGA,QAAI1qB,QAdiE,CAcrE;;AACA,SAAK,IAAIn+C,IAAJ,GAAWD,KAAKgjE,QAArB,QAAqC/iE,IAArC,IAA6CA,CAA7C,IAAkD;AAChD,cAAQ+iE,WAAR;AACE;AACE,cAAMb,OACHa,2BAA2BA,WAA5B,cAACA,GAFL,CACE;AAEA5kB,mBAAU,QAAD,CAAC,KAAa,4BAAd,CAAC,IAHZ,CAGEA;AAJJ;;AAME;AACEA,mBAAS4kB,kBADX,MACE5kB;AAPJ;AAAA;AAhBmE;;AA4BrE,QAAM4T,SAAS,iBAAiB5T,QA5BqC,CA4BtD,CAAf;AACA,QAAM4hB,SAAS,eAAe5hB,QA7BuC,CA6BtD,CAAf;AACA,QAAMysB,YAAYnuE,QAAlB;AAAA,QACEouE,YAAYpuE,QA/BuD,MA8BrE;AAEA,QAAIquE,SAAJ;AAAA,QACEC,SAjCmE,CAgCrE;;AAEA,SAAK,IAAI/qE,KAAJ,GAAWD,MAAKgjE,QAArB,QAAqC/iE,KAArC,KAA6CA,EAA7C,IAAkD;AAChD,UAAM+hE,SAASgB,QAAf,EAAeA,CAAf;AAAA,UACEjB,KAAKC,OADP;AAAA,UAEEC,KAAKD,OAHyC,MAChD;;AAGA,cAAQA,OAAR;AACE;AACE,cAAMI,OAAOJ,OADf,cACE;;AACA,cAAMG,QAAQJ,YAAD,IAACA,GAFhB,CAEE;;AACA,eAAK,IAAIxM,MAAT,GAAkBA,MAAlB,OAA8BA,GAA9B,IAAqC;AACnC,gBAAI9H,SAAS8H,aADsB,CACnC;;AACA,iBAAK,IAAI0V,MAAT,GAAkBA,MAAlB,MAA8BA,OAAOxd,MAArC,IAA+C;AAC7CuE,+BAAiB6Y,UAAU9I,GAAGtU,gBADe,CAClBsU,CAAV8I,CAAjB7Y;AACAA,qBAAO+Y,SAAP/Y,KAAqB6Y,UAAU9I,GAAGtU,gBAAHsU,KAFc,CAExB8I,CAArB7Y;AACAA,qBAAO+Y,SAAP/Y,KAAqB6Y,UAAU9I,GAAGtU,SAHW,IAGdsU,CAAV8I,CAArB7Y;AACAA,qBAAO+Y,SAAP/Y,KAAqB6Y,UAAU9I,GAAGtU,SAAHsU,QAJc,CAIxB8I,CAArB7Y;AACAA,qBAAO+Y,SAAP/Y,KAAqB6Y,UAAU9I,GAAGtU,SALW,CAKdsU,CAAV8I,CAArB7Y;AACAA,qBAAO+Y,SAAP/Y,KAAqB6Y,UAAU9I,GAAGtU,SAAHsU,KANc,CAMxB8I,CAArB7Y;AACAgO,+BAAiB8K,UAAU7I,GAAGxU,gBAPe,CAOlBwU,CAAV6I,CAAjB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,gBAAHwU,KARc,CAQxB6I,CAArB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,gBAAHwU,KATc,CASxB6I,CAArB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,SAVW,IAUdwU,CAAV6I,CAArB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,SAAHwU,QAXc,CAWxB6I,CAArB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,SAAHwU,QAZc,CAYxB6I,CAArB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,SAbW,CAadwU,CAAV6I,CAArB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,SAAHwU,KAdc,CAcxB6I,CAArB9K;AACAA,qBAAOgL,SAAPhL,KAAqB8K,UAAU7I,GAAGxU,SAAHwU,KAfc,CAexB6I,CAArB9K;AAEAhO,qBAAO+Y,SAAP/Y,KAAqBA,OAAO+Y,SAjBiB,CAiBxB/Y,CAArBA;AACAA,qBAAO+Y,SAAP/Y,KAAqBA,OAAO+Y,SAlBiB,CAkBxB/Y,CAArBA;AACAA,qBAAO+Y,SAAP/Y,KAAqBA,OAAO+Y,SAnBiB,CAmBxB/Y,CAArBA;AACAA,qBAAO+Y,SAAP/Y,KAAqBA,OAAO+Y,SApBiB,CAoBxB/Y,CAArBA;AACAA,qBAAO+Y,SAAP/Y,MAAsB6Y,UAAU9I,GArBa,MAqBbA,CAAV8I,CAAtB7Y;AACAA,qBAAO+Y,SAAP/Y,MAAsB6Y,UAAU9I,aAtBa,CAsBvB8I,CAAtB7Y;AACAgO,qBAAOgL,SAAPhL,KAAqBA,OAAOgL,SAvBiB,CAuBxBhL,CAArBA;AACAA,qBAAOgL,SAAPhL,MAAsBA,OAAOgL,SAxBgB,CAwBvBhL,CAAtBA;AACAA,qBAAOgL,SAAPhL,MAAsBA,OAAOgL,SAzBgB,CAyBvBhL,CAAtBA;AACAA,qBAAOgL,SAAPhL,MAAsBA,OAAOgL,SA1BgB,CA0BvBhL,CAAtBA;AACAA,qBAAOgL,SAAPhL,MAAsBA,OAAOgL,SA3BgB,CA2BvBhL,CAAtBA;AACAA,qBAAOgL,SAAPhL,MAAsBA,OAAOgL,SA5BgB,CA4BvBhL,CAAtBA;AACAA,qBAAOgL,SAAPhL,MAAsB8K,UAAU7I,GA7Ba,MA6BbA,CAAV6I,CAAtB9K;AACAA,qBAAOgL,SAAPhL,MAAsB8K,UAAU7I,aA9Ba,CA8BvB6I,CAAtB9K;AACAA,qBAAOgL,SAAPhL,MAAsB8K,UAAU7I,aA/Ba,CA+BvB6I,CAAtB9K;AACA+K,wBAhC6C,EAgC7CA;AACAC,wBAjC6C,EAiC7CA;AAnCiC;AAHvC;;AADF;;AA2CE;AACE,eAAK,IAAIrZ,IAAJ,GAAWuZ,KAAKnJ,GAArB,QAAgCpQ,IAAhC,IAAwCA,CAAxC,IAA6C;AAC3CK,6BAAiB6Y,UAAU9I,GADgB,CAChBA,CAAV8I,CAAjB7Y;AACAA,mBAAO+Y,SAAP/Y,KAAqB6Y,UAAU9I,QAFY,CAEtB8I,CAArB7Y;AACAgO,6BAAiB8K,UAAU7I,GAHgB,CAGhBA,CAAV6I,CAAjB9K;AACAA,mBAAOgL,SAAPhL,KAAqB8K,UAAU7I,QAJY,CAItB6I,CAArB9K;AACAA,mBAAOgL,SAAPhL,KAAqB8K,UAAU7I,QALY,CAKtB6I,CAArB9K;AACA+K,sBAN2C,CAM3CA;AACAC,sBAP2C,CAO3CA;AARJ;;AA3CF;AAAA;AAtCmE;;AAgGrE,yBAAqB;AACnBlC,oBACE/F,qBADF+F,KAEE/F,qBAFF+F,KAGE/F,qBAHF+F,KADmB,GACnBA;AADF,WAOO;AACLA,6BADK,CACLA;AAxGmE;;AA0GrEA,aAASA,GA1G4D,gBA0GrEA;AAEA,QAAMqC,eAAerC,GA5GgD,YA4GhDA,EAArB;AACAA,kBAAcA,GAAdA,cA7GqE,YA6GrEA;AACAA,kBAAcA,GAAdA,sBAAuCA,GA9G8B,WA8GrEA;AACAA,+BAA2BmB,MA/G0C,gBA+GrEnB;AACAA,2BAAuBmB,MAAvBnB,qBAAkDA,GAAlDA,iBAhHqE,CAgHrEA;AAEA,QAAMsC,eAAetC,GAlHgD,YAkHhDA,EAArB;AACAA,kBAAcA,GAAdA,cAnHqE,YAmHrEA;AACAA,kBAAcA,GAAdA,sBAAuCA,GApH8B,WAoHrEA;AACAA,+BAA2BmB,MArH0C,aAqHrEnB;AACAA,2BACEmB,MADFnB,kBAGEA,GAHFA,yBAtHqE,CAsHrEA;AASAA,iBAAamB,MAAbnB,eAAkCpsE,QAAlCosE,QAAkDpsE,QA/HmB,MA+HrEosE;AACAA,iBAAamB,MAAbnB,gBAAmCpsE,QAAnCosE,SAAoDpsE,QAhIiB,OAgIrEosE;AAEAA,kBAAcA,GAAdA,cAlIqE,KAkIrEA;AAEAA,OApIqE,KAoIrEA;AAEAA,oBAtIqE,YAsIrEA;AACAA,oBAvIqE,YAuIrEA;AAEA,WAzIqE,MAyIrE;AA7Z6C;;AAga/C,SAAO;AACLuC,aADK,uBACO;AACV,UAAI;AACFzB,kBADE;AAEF,eAAO,CAAC,CAFN,SAEF;AAFF,QAGE,WAAW,CAJH;;AAKV,aALU,KAKV;AANG;AASL/R,gBATK,EASLA,YATK;AAWL+Q,eAXK,EAWLA,WAXK;AAaLtlB,WAbK,qBAaK;AAAA;;AACR,yBAAIqmB,UAAJ,wCAAIA,YAAJ,QAAwB;AACtBA,kCADsB,CACtBA;AACAA,mCAFsB,CAEtBA;AAHM;;AAKR,2BAAIgB,YAAJ,0CAAIA,cAAJ,QAA0B;AACxBA,oCADwB,CACxBA;AACAA,qCAFwB,CAExBA;AAPM;;AASRhB,mBATQ,IASRA;AACAgB,qBAVQ,IAURA;AAvBG;AAAA,GAAP;AAldF,CAkDoB,EAApB,C;;;;;;;;;;;;;;;;ACnCA;;AAOA;;AAtBA;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoDA,wB;;;;;;;WAKE,4BAA0B;AACxB,UAAMvV,UAAUkW,gBADQ,cACxB;;AAEA;AACE,aAAK5hE,qBAAL;AACE,iBAAO,0BAFX,UAEW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,0BALX,UAKW,CAAP;;AAEF,aAAKA,qBAAL;AACE,cAAM6hE,YAAYD,gBADpB,SACE;;AAEA;AACE;AACE,qBAAO,gCAFX,UAEW,CAAP;;AACF;AACE,kBAAIA,gBAAJ,aAAiC;AAC/B,uBAAO,uCADwB,UACxB,CAAP;AADF,qBAEO,IAAIA,gBAAJ,UAA8B;AACnC,uBAAO,oCAD4B,UAC5B,CAAP;AAJJ;;AAME,qBAAO,sCATX,UASW,CAAP;;AACF;AACE,qBAAO,kCAXX,UAWW,CAAP;AAXJ;;AAaA,iBAAO,4BAvBX,UAuBW,CAAP;;AAEF,aAAK5hE,qBAAL;AACE,iBAAO,2BA1BX,UA0BW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,8BA7BX,UA6BW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,0BAhCX,UAgCW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,4BAnCX,UAmCW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,4BAtCX,UAsCW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,8BAzCX,UAyCW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,2BA5CX,UA4CW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,yBA/CX,UA+CW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,6BAlDX,UAkDW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,+BArDX,UAqDW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,+BAxDX,UAwDW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,8BA3DX,UA2DW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,+BA9DX,UA8DW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,2BAjEX,UAiEW,CAAP;;AAEF,aAAKA,qBAAL;AACE,iBAAO,oCApEX,UAoEW,CAAP;;AAEF;AACE,iBAAO,sBAvEX,UAuEW,CAAP;AAvEJ;AAR2B;;;;;;IAoF/B,iB;AACE3N,yCAOE;AAAA,mFAPFA,EAOE;AAAA,iCAJEyvE,YAIF;AAAA,QAJEA,YAIF,kCALA,KAKA;AAAA,iCAHEC,YAGF;AAAA,QAHEA,YAGF,kCALA,KAKA;AAAA,qCAFEC,oBAEF;AAAA,QAFEA,oBAEF,sCALA,KAKA;;AAAA;;AACA,wBADA,YACA;AACA,gBAAYJ,WAFZ,IAEA;AACA,iBAAaA,WAHb,KAGA;AACA,gBAAYA,WAJZ,IAIA;AACA,oBAAgBA,WALhB,QAKA;AACA,uBAAmBA,WANnB,WAMA;AACA,2BAAuBA,WAPvB,eAOA;AACA,8BAA0BA,WAR1B,kBAQA;AACA,kCAA8BA,WAT9B,sBASA;AACA,sBAAkBA,WAVlB,UAUA;AACA,6BAAyBA,WAXzB,iBAWA;AACA,2BAAuBA,WAZvB,eAYA;AACA,wBAAoBA,WAbpB,YAaA;AACA,uBAAmBA,WAdnB,UAcA;;AAEA,sBAAkB;AAChB,uBAAiB,sBADD,YACC,CAAjB;AAjBF;;AAmBA,8BAA0B;AACxB,4BAAsB,2BADE,YACF,CAAtB;AApBF;AARoB;;;;WAwCtBK,4BAAuC;AAAA,UAAtBF,YAAsB,uEAAvCE,KAAuC;AACrC,UAAM9xD,OAAO,KAAb;AAAA,UACEyvC,OAAO,KADT;AAAA,UAEEjE,WAAW,KAHwB,QACrC;AAGA,UAAMthB,YAAY3mC,uBAJmB,SAInBA,CAAlB;AACA,UAAIhB,QAAQyd,eAAeA,UALU,CAKVA,CAA3B;AACA,UAAIxd,SAASwd,eAAeA,UANS,CAMTA,CAA5B;AAEAkqB,mDAA6ClqB,KARR,EAQrCkqB;;AAIA,UAAM7kC,OAAO,yBAAmB,CAC9B2a,UAD8B,CAC9BA,CAD8B,EAE9ByvC,eAAezvC,UAAfyvC,CAAezvC,CAAfyvC,GAA8BA,UAFA,CAEAA,CAFA,EAG9BzvC,UAH8B,CAG9BA,CAH8B,EAI9ByvC,eAAezvC,UAAfyvC,CAAezvC,CAAfyvC,GAA8BA,UAJA,CAIAA,CAJA,CAAnB,CAAb;;AAOAvlB,mDAAsCshB,wBAnBD,GAmBCA,CAAtCthB;AACAA,kDAAqC,CAAC7kC,KAAJ,CAAIA,CAAtC6kC,gBAAmD,CAAC7kC,KApBf,CAoBeA,CAApD6kC;;AAEA,UAAI,iBAAiBlqB,yBAArB,GAAiD;AAC/CkqB,gDAAiClqB,iBADc,KAC/CkqB;;AACA,YAAIlqB,2BAA2B/L,gCAA/B,WAAoE;AAIlE1R,kBAAQA,QAAQ,IAAIyd,iBAJ8C,KAIlEzd;AACAC,mBAASA,SAAS,IAAIwd,iBAL4C,KAKlExd;AAP6C;;AAU/C,YAAMuvE,mBAAmB/xD,iBAVsB,sBAU/C;AACA,YAAMgyD,iBAAiBhyD,iBAXwB,oBAW/C;;AACA,YAAI+xD,wBAAwBC,iBAA5B,GAAgD;AAC9C,cAAMC,mBAAS,gBAATA,kBADwC,cACxCA,OAAN;AACA/nC,yCAF8C,MAE9CA;AAd6C;;AAiB/C,gBAAQlqB,iBAAR;AACE,eAAK/L,gCAAL;AACEi2B,0CADF,OACEA;AAFJ;;AAKE,eAAKj2B,gCAAL;AACEi2B,0CADF,QACEA;AANJ;;AASE,eAAKj2B,gCAAL;AACEvN,4BADF,qCACEA;AAVJ;;AAaE,eAAKuN,gCAAL;AACEvN,4BADF,mCACEA;AAdJ;;AAiBE,eAAKuN,gCAAL;AACEi2B,gDADF,OACEA;AAlBJ;;AAqBE;AArBF;AAAA;;AAyBA,YAAIlqB,KAAJ,OAAgB;AACdkqB,wCAA8B7oB,wBAC5BrB,gBAD4BqB,GAE5BrB,gBAF4BqB,GAG5BrB,gBAJY,CACgBqB,CAA9B6oB;AADF,eAMO;AAELA,wCAFK,CAELA;AAlD6C;AAtBZ;;AA4ErCA,uCAA0B7kC,KA5EW,CA4EXA,CAA1B6kC;AACAA,sCAAyB7kC,KA7EY,CA6EZA,CAAzB6kC;AACAA,wCA9EqC,KA8ErCA;AACAA,yCA/EqC,MA+ErCA;AACA,aAhFqC,SAgFrC;AAxHoB;;;WAmItBgoC,iCAA4C;AAAA,UAAtBN,YAAsB,uEAA5CM,KAA4C;;AAC1C,UAAI,CAAC,UAAL,YAA2B;AACzB,eADyB,IACzB;AAFwC;;AAK1C,UAAMC,iBALoC,EAK1C;AACA,UAAMC,YAAY,UANwB,IAM1C;;AAN0C,iDAOlB,UAAxB,UAP0C;AAAA;;AAAA;AAO1C,4DAA8C;AAAA,cAA9C,SAA8C;AAC5C,2BAAiB,CACfC,aADe,GAEfA,aAFe,GAGfA,aAHe,GAIfA,aAJe,EAAjB;AAMAF,8BAAoB,sBAPwB,YAOxB,CAApBA;AAdwC;AAAA;AAAA;AAAA;AAAA;AAAA;;AAgB1C,uBAhB0C,SAgB1C;AACA,aAjB0C,cAiB1C;AApJoB;;;WAiKtBG,qCAA4B;AAC1B,UAAIpoC,YAAY,KADU,SAC1B;;AACA,UAAI,KAAJ,gBAAyB;AACvBqoC,kBAAUA,WAAW,KADE,cACvBA;AACAroC,oBAAY,oBAFW,CAEX,CAAZA;AAJwB;;AAQ1B,UAAI,CAAJ,SAAc;AACZqoC,kBAAUhvE,uBADE,KACFA,CAAVgvE;AACAA,+BAAuBroC,gBAFX,MAEZqoC;AACAA,8BAAsBroC,gBAHV,KAGZqoC;AACAroC,8BAJY,OAIZA;AAZwB;;AAe1B,UAAMsoC,eAAe,iBAAiB;AACpCtoC,iBADoC,EACpCA,SADoC;AAEpCqoC,eAFoC,EAEpCA,OAFoC;AAGpCpQ,eAAOniD,KAH6B;AAIpCyyD,eAAOzyD,KAJ6B;AAKpC0yD,0BAAkB1yD,KALkB;AAMpC2yD,kBAAU3yD,KAN0B;AAOpC4yD,qBAPoC;AAAA,OAAjB,CAArB;AASA,UAAMC,QAAQL,aAxBY,MAwBZA,EAAd;AAGAK,yBAAmB3oC,gBA3BO,KA2B1B2oC;AAEA3oC,4BA7B0B,KA6B1BA;AA9LoB;;;WAyMtB4oC,0CAAiC;AAQ/B,kCAA4BC,yBAAiB;AAC3CA,kCAD2C,SAC3CA;AAT6B,OAQ/B;AAGA,aAAO,KAXwB,cAW/B;AApNoB;;;WA8NtB3oB,kBAAS;AACPjoD,6BADO,mDACPA;AA/NoB;;;;;;IAmOxB,qB;;;;;AACED,6CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,uBACAF,gBADA,QAEAA,gBAFA,UAGAA,gBAHA,iBAICA,4BACE,kCACCA,wBADD,UACCA,CADD,IAECA,wBATgB,YAShBA,CAHHA,CALmB,CAAtB;AADsB,6BAWtB,UAXsB,EAWJ;AAAEE,kBAAF,EAAEA,YAAF;AAAgBE,4BAAhB;AAAA,KAXI;AAD4B;;;;WAepDznB,kBAAS;AAAA,UACD,IADC,QACD,IADC;AAAA,UACD,WADC,QACD,WADC;AAEP,UAAMnkD,OAAO1C,uBAFN,GAEMA,CAAb;;AAEA,UAAIyc,KAAJ,KAAc;AACZgzD,oDAAwB;AACtBhwE,eAAKgd,KADiB;AAEtBiF,kBAAQjF,iBACJxa,0BADIwa,QAEJizD,YAJkB;AAKtBC,eAAKD,YALiB;AAMtBntE,mBAASmtE,YANa;AAAA,SAAxBD;AADF,aASO,IAAIhzD,KAAJ,QAAiB;AACtB,oCAA4BA,KADN,MACtB;AADK,aAEA,IAAIA,KAAJ,MAAe;AACpB,6BAAqBA,KADD,IACpB;AADK,aAEA,IACLA,iBACC,uBACCA,aADD,UACCA,CADD,IAECA,aAHFA,YAGEA,CAHFA,KAIA,KAJAA,mBAKA,KANK,cAOL;AACA,iCADA,IACA;AARK,aASA;AACL,6BADK,EACL;AA3BK;;AA8BP,UAAI,KAAJ,gBAAyB;AACvB,eAAO,iDACL,gCAA0B;AACxB,cAAMmzD,cAAc/mD,qBAAqBnmB,KADjB,SACiBA,EAAzC;AACA8sE,oCAFwB,WAExBA;AACA,iBAHwB,aAGxB;AALmB,SAChB,CAAP;AA/BK;;AAwCP,iCAxCO,gBAwCP;AACA,iCAzCO,IAyCP;AACA,aAAO,KA1CA,SA0CP;AAzDkD;;;WAoEpDK,sCAA6B;AAAA;;AAC3BntE,kBAAY,oCADe,WACf,CAAZA;;AACAA,qBAAe,YAAM;AACnB,yBAAiB;AACf,4CADe,WACf;AAFiB;;AAInB,eAJmB,KAInB;AANyB,OAE3BA;;AAMA,UAAIo5C,eAAeA,gBAAnB,IAA6D;AAC3Dp5C,yBAD2D,cAC3DA;AATyB;AApEuB;;;WAyFpDotE,wCAA+B;AAAA;;AAC7BptE,kBAAY,8BADiB,EACjB,CAAZA;;AACAA,qBAAe,YAAM;AACnB,8CADmB,MACnB;;AACA,eAFmB,KAEnB;AAJ2B,OAE7BA;;AAIAA,uBAN6B,cAM7BA;AA/FkD;;;WA0GpDqtE,mCAA0B;AAAA;;AACxBrtE,kBAAY,8BADY,EACZ,CAAZA;AACA,UAAMu0C,MAAM,QAAQ,CAClB,qBADkB,EAElB,yBAFkB,EAGlB,6BAHkB,CAAR,CAAZ;;AAFwB;AAOxB,YAAWtzC,IAAX;AACE,YAAMqsE,SAAS/4B,QAD6B,IAC7BA,CAAf;;AACA,YAAI,CAAJ,QAAa;AAAA;AAF+B;;AAK5Cv0C,uBAAe,YAAM;AAAA;;AACnB,iLAA8D;AAC5D8e,oBAD4D;AAE5DyuD,oBAAQ;AACN/oD,kBAAIzK,KADE;AAEN9Y,kBAFM,EAENA;AAFM;AAFoD,WAA9D;AAOA,iBARmB,KAQnB;AAb0C,SAK5CjB;AAZsB;;AAOxB,sCAAmBe,YAAYgZ,KAA/B,OAAmBhZ,CAAnB,kCAA8C;AAAA;;AAAA,iCAE/B;AATS;;AAuBxBf,uBAvBwB,cAuBxBA;AAjIkD;;;;EAAtD,iB;;IAqIA,qB;;;;;AACE/D,6CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,8BAMtB,UANsB,EAMJ;AAAEE,kBANE,EAMFA;AAAF,KANI;AAD4B;;;;WAUpDvnB,kBAAS;AACP,iCADO,gBACP;AAEA,UAAM4Z,QAAQzgE,uBAHP,KAGOA,CAAd;AACAygE,2BAAqB,qBAJd,MAIPA;AACAA,0BAAoB,qBALb,KAKPA;AACAA,kBACE,0CAEA,eAFA,WAEA,EAFA,GAPK,MAMPA;AAKAA,kBAXO,uBAWPA;AACAA,6BAZO,sBAYPA;AACAA,+BAAyByP,eAAe;AAAEzpE,cAAM,UAbzC;AAaiC,OAAfypE,CAAzBzP;;AAEA,UAAI,CAAC,UAAL,UAAyB;AACvB,iCAAyB,KADF,IACvB;AAhBK;;AAmBP,iCAnBO,KAmBP;AACA,aAAO,KApBA,SAoBP;AA9BkD;;;;EAAtD,iB;;IAkCA,uB;;;;;;;;;;;;;WACE5Z,kBAAS;AAEP,UAAI,UAAJ,iBAA+B;AAC7B,+BAAuB,UADM,eAC7B;AAHK;;AAMP,aAAO,KANA,SAMP;AAPoD;;;WAUtDspB,gCAAuB;AACrB,aACGlgB,sCAAsCz6B,MAAvC,OAACy6B,IACAA,sCAAsCz6B,MAHpB,OACrB;AAXoD;;;WAiBtD46C,sEAA6D;AAAA;;AAC3D,UAAIC,kBAAJ,OAAIA,CAAJ,EAAgC;AAE9BrwC,2CAAmCxK,iBAAS;AAAA;;AAC1C,iLAA8D;AAC5DhU,oBAD4D;AAE5DyuD,oBAAQ;AACN/oD,kBAAI,YADE;AAENvjB,oBAFM;AAGNkC,qBAAOyqE,YAHD,KAGCA,CAHD;AAINnwC,qBAAO3K,MAJD;AAKN+6C,wBAAU,uBALJ,KAKI;AALJ;AAFoD,WAA9D;AAH4B,SAE9BvwC;AAFF,aAcO;AAELA,2CAAmCxK,iBAAS;AAAA;;AAC1C,oLAA8D;AAC5DhU,oBAD4D;AAE5DyuD,oBAAQ;AACN/oD,kBAAI,YADE;AAENvjB,oBAFM;AAGNkC,qBAAO2vB,aAHD;AAAA;AAFoD,WAA9D;AAHG,SAELwK;AAjByD;AAjBP;;;WA+CtDwwC,oDAA2C;AAAA,kDACzC,KADyC;AAAA;;AAAA;AACzC,+DAA2C;AAAA;;AAAA;AAAA,cAAhC,QAAgC;AAAA,cAA3C,SAA2C;;AACzC,cAAIC,gDAA0B,iBAA1BA,+CAA0B,mBAA9B,SAA8B,CAA9B,EAA8D;AAC5D,iEAD4D,MAC5D;AAFuC;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CW;;;WAuDtDC,0BAAiB;AAAA,UACT,MADS,SACT,MADS;AAAA,UACT,MADS,SACT,MADS;AAAA,UAET,KAFS,UAET,KAFS;;AAGf,gCAAmB,8EAAnB,6BAOG;AAPH,YAAW/sE,IAAX;AAQE,YAAIi7D,QAAQqR,OADX,IACWA,CAAZ;;AACA,YAAI,CAAJ,OAAY;AAAA;AAFX;;AAKDrR,gBAAQ+R,2CAAmB/R,MAAnB+R,CAAmB/R,CAAnB+R,YAAoC/R,YAL3C,CAK2CA,CAApC+R,CAAR/R;;AACA;AACE,eADF,SACE;AACA;AACEjyC,oCADF,KACEA;AAHJ;;AAKE,eALF,SAKE;AACA;AACEA,0BADF,KACEA;AAPJ;;AASE,eATF,aASE;AACA;AACEA,gCADF,KACEA;AAXJ;AAAA;AAhBa;AAvDqC;;;;EAAxD,iB;;IAyFA,2B;;;;;AACEhuB,mDAAwB;AAAA;;AACtB,QAAMyvE,eACJF,qCACC,CAACA,gBAAD,iBAAkC,CAAC,CAACA,gBAHjB,UACtB;AADsB,8BAItB,UAJsB,EAIJ;AAAEE,kBAJE,EAIFA;AAAF,KAJI;AADwC;;;;WAQhEvnB,kBAAS;AAAA;;AACP,UAAM+pB,UAAU,KADT,iBACP;AACA,UAAM1pD,KAAK,UAFJ,EAEP;AAEA,iCAJO,sBAIP;AAEA,UAAI8Y,UANG,IAMP;;AACA,UAAI,KAAJ,wBAAiC;AAI/B,YAAM6wC,aAAa,qBAAqB;AACtChrE,iBAAO,UAD+B;AAEtCirE,yBAAe,UAFuB;AAAA,SAArB,CAAnB;AAIA,YAAM9nB,cAAc6nB,4BAA4BA,WAA5BA,SARW,EAQ/B;AACA,YAAME,cAAc;AAClBC,qBADkB;AAElBC,0BAFkB;AAGlBC,qCAHkB;AAIlBC,4BAJkB;AAAA,SAApB;;AAOA,YAAI,UAAJ,WAAyB;AACvBnxC,oBAAUhgC,uBADa,UACbA,CAAVggC;AACAA,gCAFuB,WAEvBA;AAFF,eAGO;AACLA,oBAAUhgC,uBADL,OACKA,CAAVggC;AACAA,yBAFK,MAELA;AACAA,wCAHK,WAGLA;AAtB6B;;AAyB/B+wC,gCAzB+B,WAyB/BA;AACA/wC,mCA1B+B,EA0B/BA;AAEAA,0CAAkC,iBAAiB;AACjD4wC,+BAAqB;AAAE/qE,mBAAO2vB,aADmB;AAC5B,WAArBo7C;AA7B6B,SA4B/B5wC;;AAIA,YAAIoxC,eAAe57C,6BAAS;AAC1B,cAAIu7C,YAAJ,gBAAgC;AAC9Bv7C,iCAAqBu7C,YADS,cAC9Bv7C;AAFwB;;AAI1BA,4CAJ0B,CAI1BA;AACAu7C,kDAL0B,IAK1BA;AArC6B,SAgC/B;;AAQA,YAAI,wBAAwB,KAA5B,cAA+C;AAAA;;AAC7C/wC,4CAAkCxK,iBAAS;AACzC,gBAAIu7C,YAAJ,WAA2B;AACzBv7C,mCAAqBu7C,YADI,SACzBv7C;AAFuC;AADE,WAC7CwK;AAMAA,wDAA8CxK,iBAAS;AAAA,gBAC/C,MAD+C,SAC/C,MAD+C;AAErD,gBAAMuhB,UAAU;AACdlxC,mBADc,mBACN;AACNkrE,wCAAwBd,gBADlB,EACNc;AACAH,qCAAqB;AAAE/qE,yBAAOkrE,sBAFxB,QAEwBA;AAAT,iBAArBH;;AACA,oBAAI,CAACG,YAAL,gBAAiC;AAC/Bv7C,uCAAqBu7C,YADU,SAC/Bv7C;AAJI;AADM;AAQds7C,2BARc,2BAQE;AACdC,6CAA6Bd,wBADf,EACdc;;AACA,oBAAIv7C,iBAAiBx1B,SAArB,eAA6C;AAE3Cw1B,uCAAqBu7C,YAFsB,cAE3Cv7C;AAJY;;AAMdo7C,qCAAqB;AACnBK,kCAAgBF,YAPJ;AAMO,iBAArBH;AAdY;AAkBdS,mBAlBc,mBAkBN;AACNp4C,2BAAW;AAAA,yBAAMzD,mBAAmB;AAAE87C,mCAAtCr4C;AAAoC,mBAAnBzD,CAAN;AAAA,iBAAXyD,EADM,CACNA;AAnBY;AAqBds4C,sBArBc,sBAqBH;AAET/7C,qCAAqBy6C,OAFZ,QAETz6C;AAvBY;AAyBdg8C,oBAzBc,oBAyBL;AACPh8C,gDAAgCy6C,2BADzB,SACPz6C;AAGAo7C,qCAAqB;AAAEY,0BAAQvB,OAJxB;AAIc,iBAArBW;AA7BY;AA+Bda,sBA/Bc,sBA+BH;AACTj8C,wCAAwB,CAACy6C,OADhB,QACTz6C;AAhCY;AAkCdk8C,sBAlCc,sBAkCH;AAAA,sDACkBzB,OADlB;AAAA,oBACH,QADG;AAAA,oBACH,MADG;;AAET,oBAAI0B,iBAAiBC,SAASp8C,mBAA9B,QAAyD;AACvDA,2DADuD,MACvDA;AAHO;AAlCG;AAAA,aAAhB;AAyCA/xB,uCACUE;AAAAA,qBAAQA,QADlBF,OACUE;AAAAA,aADVF,UAEWE;AAAAA,qBAAQozC,QA7CkC,IA6ClCA,GAARpzC;AAAAA,aAFXF;;AAGA,6BA9CqD,KA8CrD;AArD2C,WAO7Cu8B;AAmDAA,8CAAoCxK,iBAAS;AAAA;;AAC3Cu7C,2CAA+Bv7C,aADY,KAC3Cu7C;AAGA,gBAAIc,YAAY,CAJ2B,CAI3C;;AACA,gBAAIr8C,cAAJ,UAA4B;AAC1Bq8C,0BAD0B,CAC1BA;AADF,mBAEO,IAAIr8C,cAAJ,SAA2B;AAChCq8C,0BADgC,CAChCA;AADK,mBAEA,IAAIr8C,cAAJ,OAAyB;AAC9Bq8C,0BAD8B,CAC9BA;AAVyC;;AAY3C,gBAAIA,cAAc,CAAlB,GAAsB;AAAA;AAZqB;;AAgB3Cd,oCAAwBv7C,aAhBmB,KAgB3Cu7C;AACA,mLAA8D;AAC5DvvD,sBAD4D;AAE5DyuD,sBAAQ;AACN/oD,kBADM,EACNA,EADM;AAENvjB,sBAFM;AAGNkC,uBAAO2vB,aAHD;AAINs8C,4BAJM;AAKND,yBALM,EAKNA,SALM;AAMNF,0BAAUn8C,aANJ;AAONo8C,wBAAQp8C,aAPF;AAAA;AAFoD,aAA9D;AA3E2C,WA0D7CwK;AA8BA,cAAM+xC,gBAxFuC,YAwF7C;AACAX,yBAzF6C,IAyF7CA;AACApxC,2CAAiCxK,iBAAS;AACxC,gBAAI,mBAAJ,QAA6B;AAAA;;AAE3Bu7C,sCAAwBv7C,aAFG,KAE3Bu7C;AACA,wLAA8D;AAC5DvvD,wBAD4D;AAE5DyuD,wBAAQ;AACN/oD,oBADM,EACNA,EADM;AAENvjB,wBAFM;AAGNkC,yBAAO2vB,aAHD;AAINs8C,8BAJM;AAKND,6BALM;AAMNF,4BAAUn8C,aANJ;AAONo8C,0BAAQp8C,aAPF;AAAA;AAFoD,eAA9D;AAJsC;;AAiBxCu8C,0BAjBwC,KAiBxCA;AA3G2C,WA0F7C/xC;AAmBAA,gDAAsCxK,iBAAS;AAC7Cu7C,2CAA+Bv7C,aADc,KAC7Cu7C;AACAA,oDAF6C,IAE7CA;AA/G2C,WA6G7C/wC;AAIAA,4CAAkCxK,iBAAS;AAEzC,gBAAIA,gCAAgCA,aAApC,cAA+D;AAC7Du7C,sDAD6D,IAC7DA;AAHuC;AAjHE,WAiH7C/wC;AAMAA,6CAAmCxK,iBAAS;AAC1Cu7C,oDAAwC,CACtCv7C,aADsC,gBAEtCA,aAFsC,aAAxCu7C;AAxH2C,WAuH7C/wC;;AAOA,qCAAI,iBAAJ,gDAAI,oBAAJ,WAAkC;AAGhCA,8CAAkCxK,iBAAS;AAAA;;AACzC,kBAAIm8C,WAAW,CAD0B,CACzC;AACA,kBAAIC,SAAS,CAF4B,CAEzC;;AACA,kBAAIb,YAAJ,2BAA2C;AAAA,2DACpBA,YADoB;;AACzC,wBADyC;AACzC,sBADyC;AAHF;;AAMzC,wLAA8D;AAC5DvvD,wBAD4D;AAE5DyuD,wBAAQ;AACN/oD,oBADM,EACNA,EADM;AAENvjB,wBAFM;AAGNkC,yBAAOkrE,YAHD;AAINiB,0BAAQx8C,MAJF;AAKNs8C,8BALM;AAMNH,0BANM,EAMNA,QANM;AAONC,wBAPM,EAONA;AAPM;AAFoD,eAA9D;AAT8B,aAGhC5xC;AAjI2C;;AAsJ7C,2CAEE,CACE,kBADF,EAEE,gBAFF,EAGE,2BAHF,EAIE,6BAJF,EAKE,4BALF,EAME,uBANF,CAFF,EAUExK;AAAAA,mBAASA,aAhKkC,KAgK3CA;AAAAA,WAVF;AA9L6B;;AA4M/B,0BAAkB;AAChBwK,2CADgB,YAChBA;AA7M6B;;AAgN/BA,2BAAmB,UAhNY,QAgN/BA;AACAA,uBAAe,UAjNgB,SAiN/BA;;AAEA,YAAI,qBAAJ,MAA+B;AAC7BA,8BAAoB,UADS,MAC7BA;AApN6B;;AAuN/B,YAAI,UAAJ,MAAoB;AAClB,cAAMiyC,aAAa,oBAAoB,eADrB,CACqB,CAAvC;AACA,cAAMC,YAAYD,aAAa,UAFb,MAElB;AAEAjyC,gCAJkB,MAIlBA;AACAA,uDALkB,SAKlBA;AA5N6B;AAAjC,aA8NO;AACLA,kBAAUhgC,uBADL,KACKA,CAAVggC;AACAA,8BAAsB,UAFjB,UAELA;AACAA,sCAHK,QAGLA;AACAA,gCAJK,YAILA;AAzOK;;AA4OP,yBA5OO,OA4OP;;AAEA,iCA9OO,OA8OP;AACA,aAAO,KA/OA,SA+OP;AAvP8D;;;WAiQhEmyC,gCAAuB;AACrB,UAAMC,iBAAiB,2BAAvB;AADqB,kCAEW,UAFX;AAAA,UAEf,QAFe,yBAEf,QAFe;AAAA,UAEf,SAFe,yBAEf,SAFe;AAGrB,UAAMzlD,QAAQqT,QAHO,KAGrB;;AAKA,oBAAc;AACZrT,mCADY,QACZA;AATmB;;AAYrBA,oBAAc7O,wBAAkBu0D,UAAlBv0D,CAAkBu0D,CAAlBv0D,EAAgCu0D,UAAhCv0D,CAAgCu0D,CAAhCv0D,EAA8Cu0D,UAZvC,CAYuCA,CAA9Cv0D,CAAd6O;;AAEA,UAAI,4BAAJ,MAAsC;AACpCA,0BAAkBylD,eAAe,UADG,aAClBA,CAAlBzlD;AAfmB;AAjQyC;;;;EAAlE,uB;;IAqRA,+B;;;;;AACEhuB,uDAAwB;AAAA;;AAAA,8BACtB,UADsB,EACJ;AAAEyvE,oBAAcF,WADZ;AACJ,KADI;AAD4C;;;;WAKpErnB,kBAAS;AAAA;;AACP,UAAM+pB,UAAU,KADT,iBACP;AACA,UAAMn0D,OAAO,KAFN,IAEP;AACA,UAAMyK,KAAKzK,KAHJ,EAGP;AACA,UAAM5W,QAAQ+qE,qBAAqB;AACjC/qE,eACE4W,oBACEA,oBAAoBA,qBAAqBA,KAA1C,UAACA,IACC,CAACA,KAAD,eAAqBA,oBAJdm0D,KAEVn0D;AAF+B,OAArBm0D,EAJP,KAIP;AAOA,iCAXO,iCAWP;AAEA,UAAM5wC,UAAUhgC,uBAbT,OAaSA,CAAhB;AACAggC,yBAAmBvjB,KAdZ,QAcPujB;AACAA,qBAfO,UAePA;AACAA,qBAAe,UAhBR,SAgBPA;;AACA,iBAAW;AACTA,wCADS,IACTA;AAlBK;;AAoBPA,iCApBO,EAoBPA;AAEAA,yCAAmC,iBAAiB;AAClD,YAAMr8B,OAAO6xB,aADqC,IAClD;;AADkD,oDAE3Bx1B,2BAAvB,IAAuBA,CAF2B;AAAA;;AAAA;AAElD,iEAAyD;AAAA,gBAAzD,QAAyD;;AACvD,gBAAIsyE,aAAa98C,MAAjB,QAA+B;AAC7B88C,iCAD6B,KAC7BA;AACA1B,+BACE0B,iCADF1B,oBACE0B,CADF1B,EAEE;AAAE/qE,uBAJyB;AAI3B,eAFF+qE;AAHqD;AAFP;AAAA;AAAA;AAAA;AAAA;AAAA;;AAWlDA,6BAAqB;AAAE/qE,iBAAO2vB,aAXoB;AAW7B,SAArBo7C;AAjCK,OAsBP5wC;;AAcA,UAAI,wBAAwB,KAA5B,cAA+C;AAC7CA,sDAA8CxK,iBAAS;AAAA,cAC/C,MAD+C,SAC/C,MAD+C;AAErD,cAAMuhB,UAAU;AACdlxC,iBADc,mBACN;AACN2vB,qCAAuBy6C,iBADjB,KACNz6C;AACAo7C,mCAAqB;AAAE/qE,uBAAO2vB,aAFxB;AAEe,eAArBo7C;AAHY;AAKdS,iBALc,mBAKN;AACNp4C,yBAAW;AAAA,uBAAMzD,mBAAmB;AAAE87C,iCAAtCr4C;AAAoC,iBAAnBzD,CAAN;AAAA,eAAXyD,EADM,CACNA;AANY;AAQdu4C,kBARc,oBAQL;AACPh8C,8CAAgCy6C,2BADzB,SACPz6C;AAGAo7C,mCAAqB;AAAEY,wBAAQvB,OAJxB;AAIc,eAArBW;AAZY;AAcda,oBAdc,sBAcH;AACTj8C,sCAAwB,CAACy6C,OADhB,QACTz6C;AAfY;AAAA,WAAhB;AAkBA/xB,qCACUE;AAAAA,mBAAQA,QADlBF,OACUE;AAAAA,WADVF,UAEWE;AAAAA,mBAAQozC,QAtBkC,IAsBlCA,GAARpzC;AAAAA,WAFXF;;AAGA,2BAvBqD,KAuBrD;AAxB2C,SAC7Cu8B;;AA0BA,yCAEE,CACE,sBADF,EAEE,oBAFF,EAGE,kBAHF,EAIE,gBAJF,EAKE,2BALF,EAME,6BANF,EAOE,4BAPF,EAQE,uBARF,CAFF,EAYExK;AAAAA,iBAASA,aAvCkC,OAuC3CA;AAAAA,SAZF;AA/DK;;AA+EP,iCA/EO,OA+EP;AACA,aAAO,KAhFA,SAgFP;AArFkE;;;;EAAtE,uB;;IAyFA,kC;;;;;AACE72B,0DAAwB;AAAA;;AAAA,8BACtB,UADsB,EACJ;AAAEyvE,oBAAcF,WADZ;AACJ,KADI;AAD+C;;;;WAKvErnB,kBAAS;AAAA;;AACP,iCADO,oCACP;AACA,UAAM+pB,UAAU,KAFT,iBAEP;AACA,UAAMn0D,OAAO,KAHN,IAGP;AACA,UAAMyK,KAAKzK,KAJJ,EAIP;AACA,UAAM5W,QAAQ+qE,qBAAqB;AACjC/qE,eAAO4W,oBAAoBA,KADfm0D;AAAqB,OAArBA,EALP,KAKP;AAIA,UAAM5wC,UAAUhgC,uBATT,OASSA,CAAhB;AACAggC,yBAAmBvjB,KAVZ,QAUPujB;AACAA,qBAXO,OAWPA;AACAA,qBAAevjB,KAZR,SAYPujB;;AACA,iBAAW;AACTA,wCADS,IACTA;AAdK;;AAgBPA,iCAhBO,EAgBPA;AAEAA,yCAAmC,iBAAiB;AAAA,YAC5C,MAD4C,SAC5C,MAD4C;;AAAA,oDAE9BhgC,2BAA2B0hB,OAA/C,IAAoB1hB,CAF8B;AAAA;;AAAA;AAElD,iEAA6D;AAAA,gBAA7D,KAA6D;;AAC3D,gBAAIuyE,UAAJ,QAAsB;AACpB3B,+BAAiB2B,mBAAjB3B,IAAiB2B,CAAjB3B,EAA2C;AAAE/qE,uBADzB;AACuB,eAA3C+qE;AAFyD;AAFX;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOlDA,6BAAqB;AAAE/qE,iBAAO6b,OAPoB;AAO7B,SAArBkvD;AAzBK,OAkBP5wC;;AAUA,UAAI,wBAAwB,KAA5B,cAA+C;AAC7C,YAAMwyC,iBAAiB/1D,KADsB,WAC7C;AACAujB,sDAA8CxK,iBAAS;AAAA,cAC/C,MAD+C,SAC/C,MAD+C;AAErD,cAAMuhB,UAAU;AACdlxC,iBADc,mBACN;AACN,kBAAM4sE,UAAUD,mBAAmBvC,OAD7B,KACN;;AADM,0DAEcjwE,2BAA2Bw1B,aAA/C,IAAoBx1B,CAFd;AAAA;;AAAA;AAEN,uEAAmE;AAAA,sBAAnE,KAAmE;AACjE,sBAAM0yE,UAAUH,mBADiD,IACjDA,CAAhB;AACAA,kCAAgBG,kBAFiD,OAEjEH;AACA3B,4CAA0B;AAAE/qE,2BAAO0sE,MAH8B;AAGvC,mBAA1B3B;AALI;AAAA;AAAA;AAAA;AAAA;AAAA;AADM;AASdS,iBATc,mBASN;AACNp4C,yBAAW;AAAA,uBAAMzD,mBAAmB;AAAE87C,iCAAtCr4C;AAAoC,iBAAnBzD,CAAN;AAAA,eAAXyD,EADM,CACNA;AAVY;AAYdu4C,kBAZc,oBAYL;AACPh8C,8CAAgCy6C,2BADzB,SACPz6C;AAGAo7C,mCAAqB;AAAEY,wBAAQvB,OAJxB;AAIc,eAArBW;AAhBY;AAkBda,oBAlBc,sBAkBH;AACTj8C,sCAAwB,CAACy6C,OADhB,QACTz6C;AAnBY;AAAA,WAAhB;AAsBA/xB,qCACUE;AAAAA,mBAAQA,QADlBF,OACUE;AAAAA,WADVF,UAEWE;AAAAA,mBAAQozC,QA1BkC,IA0BlCA,GAARpzC;AAAAA,WAFXF;;AAGA,2BA3BqD,KA2BrD;AA7B2C,SAE7Cu8B;;AA8BA,yCAEE,CACE,sBADF,EAEE,oBAFF,EAGE,kBAHF,EAIE,gBAJF,EAKE,2BALF,EAME,6BANF,EAOE,4BAPF,EAQE,uBARF,CAFF,EAYExK;AAAAA,iBAASA,aA5CkC,OA4C3CA;AAAAA,SAZF;AA5DK;;AA4EP,iCA5EO,OA4EP;AACA,aAAO,KA7EA,SA6EP;AAlFqE;;;;EAAzE,uB;;IAsFA,iC;;;;;;;;;;;;;WACEqxB,kBAAS;AAIP,UAAMlgB,SAJC,gGAIP;;AACAA,4BALO,mCAKPA;;AAEA,UAAI,UAAJ,iBAA+B;AAC7BA,0BAAkB,UADW,eAC7BA;AARK;;AAWP,aAXO,SAWP;AAZkE;;;;EAAtE,qB;;IAgBA,6B;;;;;AACEhoC,qDAAwB;AAAA;;AAAA,8BACtB,UADsB,EACJ;AAAEyvE,oBAAcF,WADZ;AACJ,KADI;AAD0C;;;;WAKlErnB,kBAAS;AAAA;;AACP,iCADO,wBACP;AACA,UAAM+pB,UAAU,KAFT,iBAEP;AACA,UAAM1pD,KAAK,UAHJ,EAGP;AASA0pD,2BAAqB;AACnB/qE,eACE,kCAAkC,qBAAlC,CAAkC,CAAlC,GAdG;AAYc,OAArB+qE;AAKA,UAAM+B,gBAAgB3yE,uBAjBf,QAiBeA,CAAtB;AACA2yE,+BAAyB,UAlBlB,QAkBPA;AACAA,2BAAqB,UAnBd,SAmBPA;AACAA,uCApBO,EAoBPA;;AAEA,UAAI,CAAC,UAAL,OAAsB;AAEpBA,6BAAqB,kBAFD,MAEpBA;;AACA,YAAI,UAAJ,aAA2B;AACzBA,mCADyB,IACzBA;AAJkB;AAtBf;;AAAA,kDA+Bc,UAArB,OA/BO;AAAA;;AAAA;AA+BP,+DAAwC;AAAA,cAAxC,MAAwC;AACtC,cAAMC,gBAAgB5yE,uBADgB,QAChBA,CAAtB;AACA4yE,sCAA4BC,OAFU,YAEtCD;AACAA,gCAAsBC,OAHgB,WAGtCD;;AACA,cAAI,8BAA8BC,OAAlC,WAAI,CAAJ,EAAuD;AACrDD,mDADqD,IACrDA;AALoC;;AAOtCD,oCAPsC,aAOtCA;AAtCK;AAAA;AAAA;AAAA;AAAA;AAAA;;AAyCP,UAAMvgB,WAAW,SAAXA,QAAW,kBAAqB;AACpC,YAAMzuD,OAAOmvE,qBADuB,aACpC;AACA,YAAMvxD,UAAUiU,aAFoB,OAEpC;;AACA,YAAI,CAACA,aAAL,UAA4B;AAC1B,iBAAOjU,0BAA0B,CAA1BA,WAEHA,QAAQA,QAARA,eAHsB,IAGtBA,CAFJ;AAJkC;;AAQpC,eAAOnE,qCACUy1D;AAAAA,iBAAUA,OADpBz1D,QACUy1D;AAAAA,SADVz1D,MAEAy1D;AAAAA,iBAAUA,OAVmB,IAUnBA,CAAVA;AAAAA,SAFAz1D,CAAP;AAjDK,OAyCP;;AAaA,UAAM21D,WAAWv9C,SAAXu9C,QAAWv9C,QAAS;AACxB,YAAMjU,UAAUiU,aADQ,OACxB;AACA,eAAO,kCAAkCq9C,kBAAU;AACjD,iBAAO;AAAEG,0BAAcH,OAAhB;AAAoCI,yBAAaJ,OAAjD;AAAA,WAAP;AAHsB,SAEjB,CAAP;AAxDK,OAsDP;;AAOA,UAAI,wBAAwB,KAA5B,cAA+C;AAC7CF,4DAAoDn9C,iBAAS;AAAA,cACrD,MADqD,SACrD,MADqD;AAE3D,cAAMuhB,UAAU;AACdlxC,iBADc,mBACN;AACN,kBAAM0b,UAAUoxD,cADV,OACN;AACA,kBAAM9sE,QAAQoqE,OAFR,KAEN;AACA,kBAAM7oE,SAAS,QAAQgW,+BAA+B,CAHhD,KAGgD,CAAvC,CAAf;AACAA,oDAAsCy1D,kBAAU;AAC9CA,kCAAkBzrE,WAAWyrE,OADiB,KAC5BzrE,CAAlByrE;AALI,eAINz1D;AAGAwzD,mCAAqB;AACnB/qE,uBAAOusD,gBARH,IAQGA;AADY,eAArBwe;AARY;AAYdsC,6BAZc,+BAYM;AAClBP,uCADkB,IAClBA;AAbY;AAedQ,kBAfc,oBAeL;AACP,kBAAM5xD,UAAUoxD,cADT,OACP;AACA,kBAAM9pD,QAAQonD,OAFP,MAEP;AACA1uD,wCAHO,KAGPA;AACAoxD,mCAJO,KAIPA;;AACA,kBAAIpxD,iBAAJ,GAAwB;AACtB,oBAAM1e,IAAIua,wCAERy1D;AAAAA,yBAAUA,OAHU,QAGpBA;AAAAA,iBAFQz1D,CAAV;;AAIA,oBAAIva,MAAM,CAAV,GAAc;AACZ0e,wCADY,IACZA;AANoB;AALjB;;AAcPqvD,mCAAqB;AACnB/qE,uBAAOusD,gBADY,IACZA,CADY;AAEnBhJ,uBAAO2pB,SAFY,KAEZA;AAFY,eAArBnC;AA7BY;AAkCdn5C,iBAlCc,mBAkCN;AACN,qBAAOk7C,yBAAP,GAAmC;AACjCA,qCADiC,CACjCA;AAFI;;AAIN/B,mCAAqB;AAAE/qE,uBAAF;AAAeujD,uBAAf;AAAA,eAArBwnB;AAtCY;AAwCdwC,kBAxCc,oBAwCL;AAAA,mCACsCnD,OADtC;AAAA,kBACD,KADC,kBACD,KADC;AAAA,kBACD,YADC,kBACD,YADC;AAAA,kBACD,WADC,kBACD,WADC;AAEP,kBAAM2C,gBAAgB5yE,uBAFf,QAEeA,CAAtB;AACA4yE,0CAHO,YAGPA;AACAA,oCAJO,WAIPA;AACAD,wDAEEA,uBAPK,KAOLA,CAFFA;AAIA/B,mCAAqB;AACnB/qE,uBAAOusD,gBADY,IACZA,CADY;AAEnBhJ,uBAAO2pB,SAFY,KAEZA;AAFY,eAArBnC;AAjDY;AAsDdxnB,iBAtDc,mBAsDN;AAAA,kBACA,KADA,UACA,KADA;;AAEN,qBAAOupB,yBAAP,GAAmC;AACjCA,qCADiC,CACjCA;AAHI;;AAAA,0DAKN,KALM;AAAA;;AAAA;AAKN,uEAA0B;AAAA,sBAA1B,IAA0B;AAAA,sBAClB,YADkB,QAClB,YADkB;AAAA,sBAClB,WADkB,QAClB,WADkB;AAExB,sBAAMC,gBAAgB5yE,uBAFE,QAEFA,CAAtB;AACA4yE,8CAHwB,YAGxBA;AACAA,wCAJwB,WAIxBA;AACAD,4CALwB,aAKxBA;AAVI;AAAA;AAAA;AAAA;AAAA;AAAA;;AAYN,kBAAIA,+BAAJ,GAAsC;AACpCA,oDADoC,IACpCA;AAbI;;AAeN/B,mCAAqB;AACnB/qE,uBAAOusD,gBADY,IACZA,CADY;AAEnBhJ,uBAAO2pB,SAFY,KAEZA;AAFY,eAArBnC;AArEY;AA0EdyC,mBA1Ec,qBA0EJ;AACR,kBAAMA,UAAU,QAAQpD,OADhB,OACQ,CAAhB;AACA,kBAAM1uD,UAAUiU,aAFR,OAER;AACApY,oDAAsC,qBAAe;AACnDy1D,kCAAkBQ,YADiC,CACjCA,CAAlBR;AAJM,eAGRz1D;AAGAwzD,mCAAqB;AACnB/qE,uBAAOusD,gBAPD,IAOCA;AADY,eAArBwe;AAhFY;AAoFdS,iBApFc,mBAoFN;AACNp4C,yBAAW;AAAA,uBAAMzD,mBAAmB;AAAE87C,iCAAtCr4C;AAAoC,iBAAnBzD,CAAN;AAAA,eAAXyD,EADM,CACNA;AArFY;AAuFdu4C,kBAvFc,oBAuFL;AACPh8C,8CAAgCy6C,2BADzB,SACPz6C;AAGAo7C,mCAAqB;AAAEY,wBAAQvB,OAJxB;AAIc,eAArBW;AA3FY;AA6Fda,oBA7Fc,sBA6FH;AACTj8C,sCAAwB,CAACy6C,OADhB,QACTz6C;AA9FY;AAAA,WAAhB;AAiGA/xB,qCACUE;AAAAA,mBAAQA,QADlBF,OACUE;AAAAA,WADVF,UAEWE;AAAAA,mBAAQozC,QArGwC,IAqGxCA,GAARpzC;AAAAA,WAFXF;;AAGA,2BAtG2D,KAsG3D;AAvG2C,SAC7CkvE;AAyGAA,gDAAwCn9C,iBAAS;AAAA;;AAC/C,cAAMy9C,cAAc7gB,gBAD2B,IAC3BA,CAApB;AACA,cAAMvsD,QAAQusD,gBAFiC,KAEjCA,CAAd;AACAwe,+BAAqB;AAAE/qE,mBAHwB;AAG1B,WAArB+qE;AAEA,iLAA8D;AAC5DpvD,oBAD4D;AAE5DyuD,oBAAQ;AACN/oD,gBADM,EACNA,EADM;AAENvjB,oBAFM;AAGNkC,mBAHM,EAGNA,KAHM;AAINytE,wBAJM;AAKNxB,0BALM;AAMND,yBANM;AAON0B,uBAPM;AAAA;AAFoD,WAA9D;AA/G2C,SA0G7CZ;;AAmBA,+CAEE,CACE,kBADF,EAEE,gBAFF,EAGE,2BAHF,EAIE,6BAJF,EAKE,4BALF,EAME,uBANF,EAOE,mBAPF,CAFF,EAWEn9C;AAAAA,iBAASA,aAxIkC,OAwI3CA;AAAAA,SAXF;AA7HF,aA0IO;AACLm9C,gDAAwC,iBAAiB;AACvD/B,+BAAqB;AAAE/qE,mBAAOusD,SADyB,KACzBA;AAAT,WAArBwe;AAFG,SACL+B;AAxMK;;AA6MP,iCA7MO,aA6MP;AACA,aAAO,KA9MA,SA8MP;AAnNgE;;;;EAApE,uB;;IAuNA,sB;;;;;AACEh0E,8CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EAAE,yBAAyBF,gBAD3B,QACA,CAAtB;AADsB,8BAEtB,UAFsB,EAEJ;AAAEE,kBAFE,EAEFA;AAAF,KAFI;AAD6B;;;;WAMrDvnB,kBAAS;AAGP,UAAM2sB,eAAe,0DAArB;AASA,iCAZO,iBAYP;;AAEA,UAAIA,sBAAsB,UAA1B,UAAIA,CAAJ,EAAiD;AAC/C,eAAO,KADwC,SAC/C;AAfK;;AAkBP,UAAMC,2CAAmC,UAlBlC,QAkBDA,QAAN;AACA,UAAMC,iBAAiB,4BAnBhB,QAmBgB,CAAvB;;AACA,UAAIA,0BAAJ,GAAiC;AAC/B,eAAO,KADwB,SAC/B;AArBK;;AAwBP,UAAMpE,QAAQ,iBAAiB;AAC7B3oC,mBAAW,KADkB;AAE7BqoC,iBAAS5xD,WAFoB,cAEpBA,CAFoB;AAG7BwhD,eAAO,UAHsB;AAI7BsQ,eAAO,UAJsB;AAK7BC,0BAAkB,UALW;AAM7BC,kBAAU,UANmB;AAAA,OAAjB,CAAd;AAWA,UAAMljB,OAAO,KAnCN,IAmCP;;AACA,UAAMpqD,OAAO,yBAAmB,CAC9B,qBAD8B,CAC9B,CAD8B,EAE9BoqD,eAAe,qBAAfA,CAAe,CAAfA,GAAyCA,UAFX,CAEWA,CAFX,EAG9B,qBAH8B,CAG9B,CAH8B,EAI9BA,eAAe,qBAAfA,CAAe,CAAfA,GAAyCA,UAJX,CAIWA,CAJX,CAAnB,CAAb;;AAMA,UAAMynB,YACJ7xE,UAAU,qBAAVA,CAAU,CAAVA,GAAoC,qBA3C/B,CA2C+B,CADtC;AAEA,UAAM8xE,WAAW9xE,KA5CV,CA4CUA,CAAjB;AAEA,uDAA0C,CAAH,SAAvC,gBAA0D,CA9CnD,QA8CP;AACA,4CA/CO,SA+CP;AACA,2CAhDO,QAgDP;AAEA,iCAA2BwtE,MAlDpB,MAkDoBA,EAA3B;AACA,aAAO,KAnDA,SAmDP;AAzDmD;;;;EAAvD,iB;;IA6DA,Y;AACE3wE,oCAAwB;AAAA;;AACtB,qBAAiBuvE,WADK,SACtB;AACA,mBAAeA,WAFO,OAEtB;AACA,iBAAaA,WAHS,KAGtB;AACA,iBAAaA,WAJS,KAItB;AACA,4BAAwBA,WALF,gBAKtB;AACA,oBAAgBA,WANM,QAMtB;AACA,uBAAmBA,0BAPG,KAOtB;AAEA,kBATsB,KAStB;AAVe;;;;WAajBrnB,kBAAS;AAAA;;AACP,UAAMgtB,qBADC,GACP;AAEA,UAAM59C,UAAUj2B,uBAHT,KAGSA,CAAhB;AACAi2B,0BAJO,cAIPA;AAMA,yBAAmB,6BAA6B,KAVzC,SAUP;AACA,gCAXO,IAWP;AAEA,UAAMq5C,QAAQtvE,uBAbP,KAaOA,CAAd;AACAsvE,wBAdO,OAcPA;AAEA,UAAM1Q,QAAQ,KAhBP,KAgBP;;AACA,iBAAW;AAET,YAAM5gD,IAAI61D,sBAAsB,MAAMjV,MAA5BiV,CAA4BjV,CAA5BiV,IAAwCjV,MAFzC,CAEyCA,CAAlD;AACA,YAAMkV,IAAID,sBAAsB,MAAMjV,MAA5BiV,CAA4BjV,CAA5BiV,IAAwCjV,MAHzC,CAGyCA,CAAlD;AACA,YAAMtgD,IAAIu1D,sBAAsB,MAAMjV,MAA5BiV,CAA4BjV,CAA5BiV,IAAwCjV,MAJzC,CAIyCA,CAAlD;AACA0Q,sCAA8BxxD,wBAAkBE,IAAlBF,GAAyBg2D,IAAzBh2D,GAAgCQ,IALrD,CAKqBR,CAA9BwxD;AAtBK;;AAyBP,UAAMJ,QAAQlvE,uBAzBP,IAyBOA,CAAd;AACAkvE,0BAAoB,KA1Bb,KA0BPA;AACAI,wBA3BO,KA2BPA;;AAKA,UAAMyE,aAAaC,0CAA2B,KAhCvC,gBAgCYA,CAAnB;;AACA,sBAAgB;AACd,YAAM7E,mBAAmBnvE,uBADX,MACWA,CAAzB;AACAmvE,uCAFc,oBAEdA;AACAA,0CAHc,wBAGdA;AACAA,4CAAoC,eAAe;AACjD1vD,gBAAMs0D,WAD2C,kBAC3CA,EAD2C;AAEjDrwE,gBAAMqwE,WAF2C,kBAE3CA;AAF2C,SAAf,CAApC5E;AAIAG,0BARc,gBAQdA;AAzCK;;AA4CP,UAAMF,WAAW,qBAAqB,KA5C/B,QA4CU,CAAjB;;AACAE,wBA7CO,QA6CPA;;AAEA,UAAI,CAAClyD,cAAc,KAAnB,OAAKA,CAAL,EAAkC;AAChC,uBAAe,CAAC,KADgB,OACjB,CAAf;AAhDK;;AAoDP,2BAAqB4iB,mBAAW;AAC9BA,0CAAkC,oBADJ,MACI,CAAlCA;AACAA,8CAAsC,0BAFR,KAEQ,CAAtCA;AACAA,6CAAqC,0BAHP,KAGO,CAArCA;AAvDK,OAoDP;AAKAsvC,sCAAgC,sBAzDzB,IAyDyB,CAAhCA;AAEAr5C,0BA3DO,KA2DPA;AACA,aA5DO,OA4DP;AAzEe;;;WAoFjBg+C,mCAA0B;AACxB,UAAMx2D,IAAIzd,uBADc,GACdA,CAAV;AACA,UAAMk0E,QAAQ9E,eAFU,cAEVA,CAAd;;AACA,WAAK,IAAIvsE,IAAJ,GAAWD,KAAKsxE,MAArB,QAAmCrxE,IAAnC,IAA2C,EAA3C,GAAgD;AAC9C,YAAMsxE,OAAOD,MADiC,CACjCA,CAAb;AACAz2D,sBAAczd,wBAFgC,IAEhCA,CAAdyd;;AACA,YAAI5a,IAAID,KAAR,GAAgB;AACd6a,wBAAczd,uBADA,IACAA,CAAdyd;AAJ4C;AAHxB;;AAUxB,aAVwB,CAUxB;AA9Fe;;;WAuGjB22D,mBAAU;AACR,UAAI,KAAJ,QAAiB;AACf,mBADe,IACf;AADF,aAEO;AACL,mBADK,IACL;AAJM;AAvGO;;;WAsHjBC,iBAAmB;AAAA,UAAbC,GAAa,uEAAnBD,KAAmB;;AACjB,eAAS;AACP,sBADO,IACP;AAFe;;AAIjB,UAAI,iBAAJ,QAA6B;AAC3B,kCAD2B,KAC3B;AACA,uCAF2B,CAE3B;AANe;AAtHF;;;WAuIjBE,iBAAoB;AAAA,UAAdC,KAAc,uEAApBD,IAAoB;;AAClB,iBAAW;AACT,sBADS,KACT;AAFgB;;AAIlB,UAAI,CAAC,iBAAD,UAA4B,CAAC,KAAjC,QAA8C;AAC5C,kCAD4C,IAC5C;AACA,uCAF4C,CAE5C;AANgB;AAvIH;;;;;;IAkJnB,yB;;;;;AACE51E,iDAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KANI;AADgC;;;;WAUxDxnB,kBAAS;AACP,iCADO,oBACP;;AAEA,UAAI,CAAC,UAAL,UAAyB;AACvB,gCAAwB,KADD,IACvB;AAJK;;AAMP,aAAO,KANA,SAMP;AAhBsD;;;;EAA1D,iB;;IAoBA,qB;;;;;AACEloD,6CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KANI;AAD4B;;;;WAUpDxnB,kBAAS;AACP,iCADO,gBACP;AAKA,UAAMpqC,OAAO,KANN,IAMP;AACA,UAAMzd,QAAQyd,eAAeA,UAPtB,CAOsBA,CAA7B;AACA,UAAMxd,SAASwd,eAAeA,UARvB,CAQuBA,CAA9B;AACA,UAAMhc,MAAM,8BATL,MASK,CAAZ;AAIA,UAAM0zE,OAAO,8BAbN,UAaM,CAAb;AACAA,8BAAwB13D,eAAeA,qBAdhC,CAcgCA,CAAvC03D;AACAA,8BAAwB13D,eAAeA,qBAfhC,CAegCA,CAAvC03D;AACAA,8BAAwB13D,eAAeA,qBAhBhC,CAgBgCA,CAAvC03D;AACAA,8BAAwB13D,eAAeA,qBAjBhC,CAiBgCA,CAAvC03D;AAGAA,wCAAkC13D,0BApB3B,CAoBP03D;AACAA,kCArBO,aAqBPA;AAEA1zE,sBAvBO,IAuBPA;AACA,4BAxBO,GAwBP;;AAIA,8BA5BO,IA4BP;;AAEA,aAAO,KA9BA,SA8BP;AAxCkD;;;;EAAtD,iB;;IA4CA,uB;;;;;AACE9B,+CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KANI;AAD8B;;;;WAUtDxnB,kBAAS;AACP,iCADO,kBACP;AAKA,UAAMpqC,OAAO,KANN,IAMP;AACA,UAAMzd,QAAQyd,eAAeA,UAPtB,CAOsBA,CAA7B;AACA,UAAMxd,SAASwd,eAAeA,UARvB,CAQuBA,CAA9B;AACA,UAAMhc,MAAM,8BATL,MASK,CAAZ;AAKA,UAAMg0E,cAAch4D,iBAdb,KAcP;AACA,UAAMi4D,SAAS,8BAfR,UAeQ,CAAf;AACAA,+BAAyBD,cAhBlB,CAgBPC;AACAA,+BAAyBD,cAjBlB,CAiBPC;AACAA,mCAA6B11E,QAlBtB,WAkBP01E;AACAA,oCAA8Bz1E,SAnBvB,WAmBPy1E;AAGAA,0CAAoCD,eAtB7B,CAsBPC;AACAA,oCAvBO,aAuBPA;AACAA,kCAxBO,MAwBPA;AAEAj0E,sBA1BO,MA0BPA;AACA,4BA3BO,GA2BP;;AAIA,gCA/BO,IA+BP;;AAEA,aAAO,KAjCA,SAiCP;AA3CoD;;;;EAAxD,iB;;IA+CA,uB;;;;;AACE9B,+CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KANI;AAD8B;;;;WAUtDxnB,kBAAS;AACP,iCADO,kBACP;AAKA,UAAMpqC,OAAO,KANN,IAMP;AACA,UAAMzd,QAAQyd,eAAeA,UAPtB,CAOsBA,CAA7B;AACA,UAAMxd,SAASwd,eAAeA,UARvB,CAQuBA,CAA9B;AACA,UAAMhc,MAAM,8BATL,MASK,CAAZ;AAKA,UAAMg0E,cAAch4D,iBAdb,KAcP;AACA,UAAMk4D,SAAS,8BAfR,aAeQ,CAAf;AACAA,gCAA0B31E,QAhBnB,CAgBP21E;AACAA,gCAA0B11E,SAjBnB,CAiBP01E;AACAA,gCAA0B31E,YAAYy1E,cAlB/B,CAkBPE;AACAA,gCAA0B11E,aAAaw1E,cAnBhC,CAmBPE;AAGAA,0CAAoCF,eAtB7B,CAsBPE;AACAA,oCAvBO,aAuBPA;AACAA,kCAxBO,MAwBPA;AAEAl0E,sBA1BO,MA0BPA;AACA,4BA3BO,GA2BP;;AAIA,gCA/BO,IA+BP;;AAEA,aAAO,KAjCA,SAiCP;AA3CoD;;;;EAAxD,iB;;IA+CA,yB;;;;;AACE9B,iDAAwB;AAAA;;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AAKA,8CAAkB;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KAAlB;AAEA,iCARsB,oBAQtB;AACA,6BATsB,cAStB;AATsB;AADgC;;;;WAaxDxnB,kBAAS;AACP,iCAA2B,KADpB,kBACP;AAKA,UAAMpqC,OAAO,KANN,IAMP;AACA,UAAMzd,QAAQyd,eAAeA,UAPtB,CAOsBA,CAA7B;AACA,UAAMxd,SAASwd,eAAeA,UARvB,CAQuBA,CAA9B;AACA,UAAMhc,MAAM,8BATL,MASK,CAAZ;AAMA,UAAIwzD,SAfG,EAeP;;AAfO,kDAgBkBx3C,KAAzB,QAhBO;AAAA;;AAAA;AAgBP,+DAAwC;AAAA,cAAxC,UAAwC;AACtC,cAAM6Z,IAAIs+C,eAAen4D,UADa,CACbA,CAAzB;AACA,cAAMo7C,IAAIp7C,eAAem4D,WAFa,CAEtC;AACA3gB,sBAAY39B,UAH0B,CAGtC29B;AAnBK;AAAA;AAAA;AAAA;AAAA;AAAA;;AAqBPA,eAASA,YArBF,GAqBEA,CAATA;AAEA,UAAM4gB,WAAW,8BAA8B,KAvBxC,cAuBU,CAAjB;AACAA,sCAxBO,MAwBPA;AAGAA,4CAAsCp4D,0BA3B/B,CA2BPo4D;AACAA,sCA5BO,aA4BPA;AACAA,oCA7BO,MA6BPA;AAEAp0E,sBA/BO,QA+BPA;AACA,4BAhCO,GAgCP;;AAIA,kCApCO,IAoCP;;AAEA,aAAO,KAtCA,SAsCP;AAnDsD;;;;EAA1D,iB;;IAuDA,wB;;;;;AACE9B,gDAAwB;AAAA;;AAAA;;AAEtB,kCAFsB,UAEtB;AAEA,iCAJsB,mBAItB;AACA,6BALsB,aAKtB;AALsB;AADuC;;;EAAjE,yB;;IAUA,sB;;;;;AACEA,8CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KANI;AAD6B;;;;WAUrDxnB,kBAAS;AACP,iCADO,iBACP;;AAEA,UAAI,CAAC,UAAL,UAAyB;AACvB,gCAAwB,KADD,IACvB;AAJK;;AAMP,aAAO,KANA,SAMP;AAhBmD;;;;EAAvD,iB;;IAoBA,oB;;;;;AACEloD,4CAAwB;AAAA;;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AAKA,8CAAkB;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KAAlB;AAEA,iCARsB,eAQtB;AAIA,6BAZsB,cAYtB;AAZsB;AAD2B;;;;WAgBnDxnB,kBAAS;AACP,iCAA2B,KADpB,kBACP;AAIA,UAAMpqC,OAAO,KALN,IAKP;AACA,UAAMzd,QAAQyd,eAAeA,UANtB,CAMsBA,CAA7B;AACA,UAAMxd,SAASwd,eAAeA,UAPvB,CAOuBA,CAA9B;AACA,UAAMhc,MAAM,8BARL,MAQK,CAAZ;;AARO,kDAUegc,KAAtB,QAVO;AAAA;;AAAA;AAUP,+DAAqC;AAAA,cAArC,OAAqC;AAKnC,cAAIw3C,SAL+B,EAKnC;;AALmC,uDAMnC,OANmC;AAAA;;AAAA;AAMnC,sEAAkC;AAAA,kBAAlC,UAAkC;AAChC,kBAAM39B,IAAIs+C,eAAen4D,UADO,CACPA,CAAzB;AACA,kBAAMo7C,IAAIp7C,eAAem4D,WAFO,CAEhC;AACA3gB,oCAAY,CAAZA,cAHgC,CAGhCA;AATiC;AAAA;AAAA;AAAA;AAAA;AAAA;;AAWnCA,mBAASA,YAX0B,GAW1BA,CAATA;AAEA,cAAM4gB,WAAW,8BAA8B,KAbZ,cAalB,CAAjB;AACAA,0CAdmC,MAcnCA;AAGAA,gDAAsCp4D,0BAjBH,CAiBnCo4D;AACAA,0CAlBmC,aAkBnCA;AACAA,wCAnBmC,MAmBnCA;;AAIA,sCAvBmC,IAuBnC;;AAEAp0E,0BAzBmC,QAyBnCA;AAnCK;AAAA;AAAA;AAAA;AAAA;AAAA;;AAsCP,4BAtCO,GAsCP;AACA,aAAO,KAvCA,SAuCP;AAvDiD;;;;EAArD,iB;;IA2DA,0B;;;;;AACE9B,kDAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAChBE,kBADgB,EAChBA,YADgB;AAEhBC,oBAFgB;AAGhBC,4BAHgB;AAAA,KANI;AADiC;;;;WAczDznB,kBAAS;AACP,UAAI,CAAC,UAAL,UAAyB;AACvB,gCAAwB,KADD,IACvB;AAFK;;AAKP,UAAI,KAAJ,gBAAyB;AACvB,eAAO,2BADgB,qBAChB,CAAP;AANK;;AASP,iCATO,qBASP;AACA,aAAO,KAVA,SAUP;AAxBuD;;;;EAA3D,iB;;IA4BA,0B;;;;;AACEloD,kDAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAChBE,kBADgB,EAChBA,YADgB;AAEhBC,oBAFgB;AAGhBC,4BAHgB;AAAA,KANI;AADiC;;;;WAczDznB,kBAAS;AACP,UAAI,CAAC,UAAL,UAAyB;AACvB,gCAAwB,KADD,IACvB;AAFK;;AAKP,UAAI,KAAJ,gBAAyB;AACvB,eAAO,2BADgB,qBAChB,CAAP;AANK;;AASP,iCATO,qBASP;AACA,aAAO,KAVA,SAUP;AAxBuD;;;;EAA3D,iB;;IA4BA,yB;;;;;AACEloD,iDAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAChBE,kBADgB,EAChBA,YADgB;AAEhBC,oBAFgB;AAGhBC,4BAHgB;AAAA,KANI;AADgC;;;;WAcxDznB,kBAAS;AACP,UAAI,CAAC,UAAL,UAAyB;AACvB,gCAAwB,KADD,IACvB;AAFK;;AAKP,UAAI,KAAJ,gBAAyB;AACvB,eAAO,2BADgB,oBAChB,CAAP;AANK;;AASP,iCATO,oBASP;AACA,aAAO,KAVA,SAUP;AAxBsD;;;;EAA1D,iB;;IA4BA,0B;;;;;AACEloD,kDAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAChBE,kBADgB,EAChBA,YADgB;AAEhBC,oBAFgB;AAGhBC,4BAHgB;AAAA,KANI;AADiC;;;;WAczDznB,kBAAS;AACP,UAAI,CAAC,UAAL,UAAyB;AACvB,gCAAwB,KADD,IACvB;AAFK;;AAKP,UAAI,KAAJ,gBAAyB;AACvB,eAAO,2BADgB,qBAChB,CAAP;AANK;;AASP,iCATO,qBASP;AACA,aAAO,KAVA,SAUP;AAxBuD;;;;EAA3D,iB;;IA4BA,sB;;;;;AACEloD,8CAAwB;AAAA;;AACtB,QAAMyvE,eAAe,CAAC,EACpB,4BACAF,gBADA,SAEAA,gBAJoB,QACA,CAAtB;AADsB,+BAMtB,UANsB,EAMJ;AAAEE,kBAAF,EAAEA,YAAF;AAAgBC,oBAAhB;AAAA,KANI;AAD6B;;;;WAUrDxnB,kBAAS;AACP,iCADO,iBACP;;AAEA,UAAI,CAAC,UAAL,UAAyB;AACvB,gCAAwB,KADD,IACvB;AAJK;;AAMP,aAAO,KANA,SAMP;AAhBmD;;;;EAAvD,iB;;IAoBA,+B;;;;;AACEloD,uDAAwB;AAAA;;AAAA;;AAAA;;AACtB,8CAAkB;AAAEyvE,oBADE;AACJ,KAAlB;AADsB,4BAGQ,aAHR;AAAA,QAGhB,QAHgB,qBAGhB,QAHgB;AAAA,QAGhB,OAHgB,qBAGhB,OAHgB;AAItB,uBAAgB0G,uCAJM,QAINA,CAAhB;AACA,sBALsB,OAKtB;AAEA,8KAAgE;AAC9DtzD,YAD8D;AAE9D0F,UAAI6tD,6BAF0D,QAE1DA,CAF0D;AAG9D1mB,cAH8D,EAG9DA,QAH8D;AAI9DriC,aAJ8D,EAI9DA;AAJ8D,KAAhE;AAPsB;AADsC;;;;WAgB9D66B,kBAAS;AACP,iCADO,0BACP;AAEA,UAAMmoB,UAAUhvE,uBAHT,KAGSA,CAAhB;AACAgvE,6BAAuB,qBAJhB,MAIPA;AACAA,4BAAsB,qBALf,KAKPA;AACAA,2CAAqC,oBAN9B,IAM8B,CAArCA;;AAEA,UAAI,CAAC,UAAD,aAAwB,mBAAmB,UAA/C,QAAI,CAAJ,EAAoE;AAClE,mCAA2B,KADuC,IAClE;AATK;;AAYP,iCAZO,OAYP;AACA,aAAO,KAbA,SAaP;AA7B4D;;;WAsC9DgG,qBAAY;AAAA;;AACV,sJACE,KADF,WAEE,KAFF,SAGE,KAJQ,QACV;AAvC4D;;;;EAAhE,iB;;IA+DA,e;;;;;;;WAQE,4BAA0B;AACxB,UAAMC,oBAAN;AAAA,UACEC,mBAFsB,EACxB;;AADwB,mDAMLhH,WAAnB,WANwB;AAAA;;AAAA;AAMxB,kEAA2C;AAAA,cAA3C,KAA2C;;AACzC,cAAI,CAAJ,OAAW;AAAA;AAD8B;;AAIzC,cAAIzxD,yBAAwBnQ,qBAA5B,OAAkD;AAChD4oE,kCADgD,KAChDA;AADgD;AAJT;;AAQzCD,iCARyC,KAQzCA;AAdsB;AAAA;AAAA;AAAA;AAAA;AAAA;;AAgBxB,UAAIC,iBAAJ,QAA6B;AAC3BD,wDAD2B,gBAC3BA;AAjBsB;;AAoBxB,wGAAsC;AAAtC,YAAWx4D,IAAX;AACE,YAAMujB,UAAU,gCAAgC;AAC9CvjB,cAD8C,EAC9CA,IAD8C;AAE9Cg8C,iBAAOyV,WAFuC;AAG9ChiB,gBAAMgiB,WAHwC;AAI9CjmB,oBAAUimB,WAJoC;AAK9CwB,uBAAaxB,WALiC;AAM9CiH,2BAAiBjH,WAN6B;AAO9CkH,8BAAoBlH,iCAP0B;AAQ9CnnB,kCAAwBmnB,sCARsB;AAS9CmH,sBAAY,IATkC,4BASlC,EATkC;AAU9CluB,6BACE+mB,gCAAgC,IAXY,qCAWZ,EAXY;AAY9CoH,2BAAiBpH,WAZ6B;AAa9C5nB,wBAAc4nB,WAbgC;AAc9CqH,sBAAYrH,yBAAyB;AAAEsH,oBAdO;AAcT;AAdS,SAAhC,CAAhB;;AAgBA,YAAIx1C,QAAJ,cAA0B;AACxB,cAAMy1C,WAAWz1C,QADO,MACPA,EAAjB;;AACA,cAAIvjB,KAAJ,QAAiB;AACfg5D,wCADe,QACfA;AAHsB;;AAKxB,cAAIr4D,cAAJ,QAAIA,CAAJ,EAA6B;AAAA,yDAC3B,QAD2B;AAAA;;AAAA;AAC3B,wEAAwC;AAAA,oBAAxC,eAAwC;AACtC8wD,2CADsC,eACtCA;AAFyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAA7B,iBAIO;AACL,gBAAIluC,mBAAJ,wBAA+C;AAG7CkuC,qCAH6C,QAG7CA;AAHF,mBAIO;AACLA,yCADK,QACLA;AANG;AATiB;AAjBU;AApBd;AARN;;;WA0EpB,4BAA0B;AACxB,UAAMp5D,6BAAsBo5D,mCADJ,GACIA,CAAtBp5D,MAAN;;AADwB,mDAELo5D,WAAnB,WAFwB;AAAA;;AAAA;AAExB,kEAA2C;AAAA,cAA3C,IAA2C;AACzC,cAAM1tC,WAAW0tC,gEACSzxD,KAFe,EACxByxD,SAAjB;;AAGA,wBAAc;AACZ1tC,6BAAiBR,mBAAW;AAC1BA,wCAD0B,SAC1BA;AAFU,aACZQ;AALuC;AAFnB;AAAA;AAAA;AAAA;AAAA;AAAA;;AAYxB0tC,8BAZwB,KAYxBA;AAtFkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACh8DtB,0BAA0B;AACxB,SAAO3sE,WAAWA,YAAYA,YAAZA,CAAYA,CAAZA,IAAXA,8BADiB,GACjBA,CAAP;AAvBF;;IA6BA,e;;;;;;;WACE,sBAA4B;AAAA;AAAA,UAAd,CAAc;AAAA,UAAd,CAAc;AAAA,UAAd,CAAc;AAAA,UAA5B,CAA4B;;AAC1B,aAAO,MAAM,IAAIA,YAAY,UAAU,OAAV,IAAqB,OAArB,IAAtB,CAAUA,CAAV,CAAP;AAFkB;;;WAKpB,uBAAmB;AAAA;AAAA,UAAnB,CAAmB;;AACjB,aAAO,kBAAkB,IAAlB,EAAP;AANkB;;;WASpB,sBAAkB;AAAA;AAAA,UAAlB,CAAkB;;AAChB,aAAO,gBAAP;AAVkB;;;WAapB,uBAAmB;AAAA;AAAA,UAAnB,CAAmB;;AACjB,UAAMm0E,IAAIC,cADO,CACPA,CAAV;AACA,wBAAO,CAAP,SAAO,CAAP,SAFiB,CAEjB;AAfkB;;;WAkBpB,sBAAwB;AAAA;AAAA,UAAX,CAAW;AAAA,UAAX,CAAW;AAAA,UAAxB,CAAwB;;AACtB,aAAO,MAAM,UAAU,OAAV,IAAqB,OAA3B,EAAP;AAnBkB;;;WAsBpB,0BAA2B;AAAA;AAAA,UAAX,CAAW;AAAA,UAAX,CAAW;AAAA,UAA3B,CAA2B;;AACzB,UAAMC,IAAID,cADe,CACfA,CAAV;AACA,UAAMD,IAAIC,cAFe,CAEfA,CAAV;AACA,UAAME,IAAIF,cAHe,CAGfA,CAAV;AACA,wBAAO,CAAP,SAAO,CAAP,SAJyB,CAIzB;AA1BkB;;;WA6BpB,kBAAgB;AACd,aADc,WACd;AA9BkB;;;WAiCpB,0BAA8B;AAAA;AAAA,UAAd,CAAc;AAAA,UAAd,CAAc;AAAA,UAAd,CAAc;AAAA,UAA9B,CAA8B;;AAC5B,aAAO,QAEL,IAAIp0E,YAAYgd,IAFX,CAEDhd,CAFC,EAGL,IAAIA,YAAYmc,IAHX,CAGDnc,CAHC,EAIL,IAAIA,YAAYs2D,IAJX,CAIDt2D,CAJC,CAAP;AAlCkB;;;WA0CpB,+BAA6B;AAC3B,aAAO,cAAc,cADM,UACN,CAAd,CAAP;AA3CkB;;;WA8CpB,0BAA2B;AAAA;AAAA,UAAX,CAAW;AAAA,UAAX,CAAW;AAAA,UAA3B,CAA2B;;AACzB,UAAMgd,IAAI,IADe,CACzB;AACA,UAAMb,IAAI,IAFe,CAEzB;AACA,UAAMm6C,IAAI,IAHe,CAGzB;AACA,UAAM7nC,IAAIzuB,eAJe,CAIfA,CAAV;AACA,aAAO,oBAAP;AAnDkB;;;;;;;;;;;;;;;;;;;;ACdtB;;AAuCA,IAAMu0E,kBAAmB,kCAAkC;AACzD,MAAMC,0BADmD,MACzD;AACA,MAAMC,oBAFmD,EAEzD;AACA,MAAMC,sBAHmD,GAGzD;AACA,MAAMC,cAAc,IAJqC,GAIrC,EAApB;AAEA,MAAMC,sBANmD,IAMzD;;AAEA,gCAA8B;AAC5B,WAAO,CAACA,yBADoB,GACpBA,CAAR;AATuD;;AAYzD,sCAAoC;AAClC,QAAMC,eAAeF,gBADa,UACbA,CAArB;;AACA,sBAAkB;AAChB,aADgB,YAChB;AAHgC;;AAMlCzlB,QANkC,IAMlCA;AACAA,yBAAW,iBAAXA,gBAPkC,UAOlCA;AACA,QAAM4lB,UAAU5lB,gBARkB,EAQlBA,CAAhB;AAGA,QAAI6lB,SAASD,QAXqB,qBAWlC;AACA,QAAIE,UAAUh1E,SAAS80E,QAZW,sBAYpB90E,CAAd;;AACA,gBAAY;AACVkvD,UADU,OACVA;AACA,UAAM+lB,QAAQF,UAAU,SAFd,OAEIA,CAAd;AACAJ,kCAHU,KAGVA;AACA,aAJU,KAIV;AAjBgC;;AAwBlCzlB,sBAxBkC,KAwBlCA;AACAA,2CAzBkC,iBAyBlCA;AACAA,2BA1BkC,CA0BlCA;AACA,QAAIgmB,SAAShmB,6DA3BqB,IA2BlC;AAEA8lB,cA7BkC,CA6BlCA;;AACA,SAAK,IAAI1zE,IAAI4zE,oBAAb,GAAoC5zE,KAApC,GAA4CA,KAA5C,GAAoD;AAClD,UAAI4zE,YAAJ,GAAmB;AACjBF,kBAAUh1E,UAAUsB,QADH,iBACPtB,CAAVg1E;AADiB;AAD+B;AA9BlB;;AAwClC9lB,2CAxCkC,iBAwClCA;AACAA,2BAzCkC,iBAyClCA;AACAgmB,aAAShmB,6DA1CyB,IA0ClCgmB;AACAH,aA3CkC,CA2ClCA;;AACA,SAAK,IAAIzzE,KAAJ,GAAWD,KAAK6zE,OAArB,QAAoC5zE,KAApC,IAA4CA,MAA5C,GAAoD;AAClD,UAAI4zE,aAAJ,GAAmB;AACjBH,iBAASN,oBAAoBz0E,WAAWsB,SADvB,iBACYtB,CAA7B+0E;AADiB;AAD+B;AA5ClB;;AAmDlC7lB,QAnDkC,OAmDlCA;;AAEA,gBAAY;AACV,UAAM+lB,SAAQF,UAAU,SADd,OACIA,CAAd;;AACAJ,kCAFU,MAEVA;AACA,aAHU,MAGV;AAxDgC;;AA2DlCA,gCA3DkC,mBA2DlCA;AACA,WA5DkC,mBA4DlC;AAxEuD;;AA2EzD,+CAA6C;AAE3C,QAAMQ,UAAU12E,uBAF2B,MAE3BA,CAAhB;AACA,QAAM22E,oBAAoB;AACxBC,aADwB;AAExBC,mBAFwB;AAGxBC,oBAHwB;AAIxBC,yBAJwB;AAKxBC,qBALwB;AAMxBC,mBANwB;AAOxBC,oBAPwB;AAQxBC,kBARwB;AASxBz1E,aATwB;AAAA,KAA1B;;AAYA4wB,wBAf2C,OAe3CA;;AACA,QAAI8kD,gBAAgBC,KAApB,GAAID,CAAJ,EAA+B;AAC7BT,uCAD6B,IAC7BA;;AACArkD,2CAF6B,iBAE7BA;;AAF6B;AAhBY;;AAsB3C,QAAMglD,KAAKx5D,qBAAewU,eAAfxU,WAAyCu5D,KAtBT,SAsBhCv5D,CAAX;;AACA,QAAI84D,QAAQr1E,WAAW+1E,GAAX/1E,CAAW+1E,CAAX/1E,EAAkB+1E,GAvBa,CAuBbA,CAAlB/1E,CAAZ;AACA,QAAMorB,QAAQ08B,OAAOguB,KAxBsB,QAwB7BhuB,CAAd;;AACA,QAAI18B,MAAJ,UAAoB;AAClBiqD,eAASr1E,UADS,CAClBq1E;AA1ByC;;AA4B3C,QAAMW,aAAah2E,WAAW+1E,GAAX/1E,CAAW+1E,CAAX/1E,EAAkB+1E,GA5BM,CA4BNA,CAAlB/1E,CAAnB;AACA,QAAMi2E,aAAaD,aAAaE,UAAU9qD,MAAV8qD,YA7BW,GA6BXA,CAAhC;AAEA,cA/B2C,GA+B3C;;AACA,QAAIb,UAAJ,GAAiB;AACfpV,aAAO8V,GADQ,CACRA,CAAP9V;AACAC,YAAM6V,QAFS,UAEf7V;AAFF,WAGO;AACLD,aAAO8V,QAAQE,aAAaj2E,SADvB,KACuBA,CAA5BigE;AACAC,YAAM6V,QAAQE,aAAaj2E,SAFtB,KAEsBA,CAA3BkgE;AArCyC;;AAyC3CiV,mCAzC2C,IAyC3CA;AACAA,kCA1C2C,GA0C3CA;AACAA,uCA3C2C,UA2C3CA;AACAA,+BAA2B/pD,MA5CgB,UA4C3C+pD;AAEAA,0BAAsBW,KA9CqB,GA8C3CX;AAEAA,kBAAcW,KAhD6B,GAgD3CX;;AAIA,QAAIpkD,KAAJ,uBAAgC;AAC9BokD,iCAA2BW,KADG,QAC9BX;AArDyC;;AAuD3C,QAAIE,UAAJ,GAAiB;AACfD,gCAA0BC,SAAS,MAAMr1E,KAD1B,EACWq1E,CAA1BD;AAxDyC;;AA6D3C,QAAIe,kBA7DuC,KA6D3C;;AACA,QAAIL,kBAAJ,GAAyB;AACvBK,wBADuB,IACvBA;AADF,WAEO,IAAIL,sBAAsBA,eAA1B,CAA0BA,CAA1B,EAA6C;AAClD,UAAMM,YAAYp2E,SAAS81E,eAA3B,CAA2BA,CAAT91E,CAAlB;AAAA,UACEq2E,YAAYr2E,SAAS81E,eAF2B,CAE3BA,CAAT91E,CADd;;AAIA,UACEo2E,2BACAp2E,iCAAiCA,oBAAjCA,SAAiCA,CAAjCA,GAFF,KAGE;AACAm2E,0BADA,IACAA;AATgD;AAhET;;AA4E3C,yBAAqB;AACnB,UAAI/qD,MAAJ,UAAoB;AAClBgqD,wCAAgCU,cAAc/kD,eAD5B,KAClBqkD;AADF,aAEO;AACLA,wCAAgCU,aAAa/kD,eADxC,KACLqkD;AAJiB;AA5EsB;;AAmF3CrkD,yCAnF2C,iBAmF3CA;;AACA,QAAIA,KAAJ,oBAA6B;AAC3BA,uBAD2B,OAC3BA;AArFyC;;AAwF3C,QAAIA,KAAJ,uBAAgC;AAC9B,UAAIulD,WAAJ;AAAA,UACEC,WAF4B,CAC9B;;AAEA,UAAIlB,UAAJ,GAAiB;AACfiB,mBAAWt2E,SADI,KACJA,CAAXs2E;AACAC,mBAAWv2E,SAFI,KAEJA,CAAXu2E;AAL4B;;AAO9B,UAAMC,WACH,kBAAiBV,KAAjB,SAA+BA,KAAhC,KAAC,IAA6C/kD,eARlB,KAO9B;AAEA,UAAM0lD,YATwB,UAS9B;AAEA,aAX8B,CAW9B;;AACA,UAAIpB,UAAJ,GAAiB;AACfl5D,YAAI,qBAAqB,CAArB,8BAAJA;AACAY,YAAI,sCAAgC,2BAAhC,EAFW,CAEX,CAAJA;AAFF,aAGO;AACLA,YAAI,YAAYkjD,OAAZ,UAA6BC,MAA7B,UAAJnjD;AAhB4B;;AAmB9BgU,wBAAkB;AAChBkvC,cAAMljD,EADU,CACVA,CADU;AAEhBmjD,aAAKnjD,EAFW,CAEXA,CAFW;AAGhB25D,eAAO35D,EAHS,CAGTA,CAHS;AAIhB45D,gBAAQ55D,EAJQ,CAIRA,CAJQ;AAKhB+yC,aALgB;AAMhBj2B,cAAM,qBANU;AAOhB1d,SAPgB,EAOhBA;AAPgB,OAAlB4U;AA3GyC;AA3EY;;AAkMzD,wBAAsB;AACpB,QAAIA,KAAJ,WAAoB;AAAA;AADA;;AAIpB,QAAM6lD,WAAW7lD,KAJG,SAIpB;AACA,QAAM3S,aAAa2S,KALC,WAKpB;AACA,QAAM8lD,iBAAiBD,SANH,MAMpB;;AAIA,QAAIC,iBAAJ,yBAA8C;AAC5C9lD,4BAD4C,IAC5CA;AACA3S,iBAF4C,OAE5CA;AAF4C;AAV1B;;AAgBpB,QAAI,CAAC2S,KAAL,oBAA8B;AAC5B,WAAK,IAAIzvB,IAAT,GAAgBA,IAAhB,gBAAoCA,CAApC,IAAyC;AACvCyvB,yBAAiB6lD,SADsB,CACtBA,CAAjB7lD;AAF0B;AAhBV;;AAsBpBA,0BAtBoB,IAsBpBA;AACA3S,eAvBoB,OAuBpBA;AAzNuD;;AA4NzD,8CAA4C;AAC1C,QAAI7X,SADsC,CAC1C;;AACA,SAAK,IAAIjF,IAAT,GAAgBA,IAAhB,OAA2BA,CAA3B,IAAgC;AAC9B,UAAMw1E,IAAIC,GAAGjoB,MADiB,EACpBioB,CAAV;;AACA,UAAID,IAAJ,GAAW;AACTvwE,iBAASA,SAASvG,YAATuG,MAASvG,CAATuG,GADA,CACTA;AAH4B;AAFU;;AAQ1C,WAR0C,MAQ1C;AApOuD;;AAuOzD,wBAAsB;AACpB,QAAM+3D,SAASvtC,KADK,OACpB;AACA,QAAM21B,WAAW31B,KAFG,SAEpB;AAEA,QAAMimD,WAAWC,aAAavwB,SAAbuwB,OAA6BvwB,SAA7BuwB,QAJG,MAIHA,CAAjB;;AAJoB,+BAKX31E,CALW;AAMlB,UAAMwuD,MAAMwO,UAD4B,GACxC;;AACA,UAAM4Y,gBAAgBnmD,4BAFkB,GAElBA,CAAtB;;AACA,UAAImmD,wBAAJ,GAA+B;AAC7BA,oCAA4B5Y,iBAAiB0Y,YADhB,IAC7BE;AACAA,mCAA2B5Y,gBAAgB0Y,YAFd,GAE7BE;AACAA,qCAA6BF,oBAAoB1Y,UAHpB,KAG7B4Y;AACAA,sCAA8BF,qBAAqB1Y,UAJtB,MAI7B4Y;;AACAnmD,yCAL6B,aAK7BA;;AAL6B;AAHS;;AAaxC,UAAMwI,IAAIy9C,SAAV,CAAUA,CAAV;AAAA,UACEj6D,IAAIuhD,OAdkC,CAclCA,CADN;AAEA,UAAMniD,IAAIY,EAAV;AAAA,UACEC,IAAIb,EADN,CACMA,CADN;AAAA,UAEE6yC,IAAI7yC,EAjBkC,CAiBlCA,CAFN;AAIA,UAAMu2C,SAAS,CAAC,MAAD,EAAS,IAAI31C,OAAJ,CAAIA,CAAJ,CAAT,EAAyB,CAACA,OAAD,CAACA,CAAD,IAAzB,EAAyCA,EAAzC,KAAf;AACA,UAAMg6D,KAAK,iBApB6B,EAoB7B,CAAX;AACArkB,qBAAe,gBAAgB;AAC7B,YAAMokB,IAAIv6D,6BADmB,CACnBA,CAAV;;AACAw6D,WAAG/jB,IAAH+jB,KAAY/5D,KAAM,UAAS85D,EAAV,CAAUA,CAAT,IAFW,CAE7BC;AACAA,WAAG/jB,IAAH+jB,KAAY/nB,KAAM,SAAQ8nB,EAAT,CAASA,CAAR,IAHW,CAG7BC;AACAA,WAAG/jB,IAAH+jB,KAAY/5D,KAAM,WAAU85D,EAAX,CAAWA,CAAV,IAJW,CAI7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/nB,KAAM,YAAW8nB,EAAZ,CAAYA,CAAX,IALU,CAK7BC;AAEAA,WAAG/jB,IAAH+jB,MAAa/nB,KAAM,UAAS8nB,EAAV,CAAUA,CAAT,IAAiB,CAPP,CAO7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/5D,KAAM,SAAQ85D,EAAT,CAASA,CAAR,IARU,CAQ7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/nB,KAAM,WAAU8nB,EAAX,CAAWA,CAAV,IAAkB,CATR,CAS7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/5D,KAAM,YAAW85D,EAAZ,CAAYA,CAAX,IAVU,CAU7BC;AAEAA,WAAG/jB,IAAH+jB,MAAa/5D,KAAM,UAAS85D,EAAV,CAAUA,CAAT,IAAiB,CAZP,CAY7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/nB,KAAM,SAAQ8nB,EAAT,CAASA,CAAR,IAAgB,CAbN,CAa7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/5D,KAAM,WAAU85D,EAAX,CAAWA,CAAV,IAAkB,CAdR,CAc7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/nB,KAAM,YAAW8nB,EAAZ,CAAYA,CAAX,IAAmB,CAfT,CAe7BC;AAEAA,WAAG/jB,IAAH+jB,MAAa/nB,KAAM,UAAS8nB,EAAV,CAAUA,CAAT,IAjBU,CAiB7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/5D,KAAM,SAAQ85D,EAAT,CAASA,CAAR,IAAgB,CAlBN,CAkB7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/nB,KAAM,WAAU8nB,EAAX,CAAWA,CAAV,IAnBU,CAmB7BC;AACAA,WAAG/jB,IAAH+jB,MAAa/5D,KAAM,YAAW85D,EAAZ,CAAYA,CAAX,IAAmB,CApBT,CAoB7BC;AAzCsC,OAqBxCrkB;AAwBA,UAAMykB,WAAW,IAAIn3E,SAASA,SAATA,CAASA,CAATA,EAAsBA,SA7CH,CA6CGA,CAAtBA,CAArB;AACAk3E,kCAA4BE,8BA9CY,QA8CxCF;AACAA,iCAA2BE,8BA/Ca,QA+CxCF;AACAA,mCAA6BE,6BAhDW,QAgDxCF;AACAA,oCAA8BE,8BAjDU,QAiDxCF;;AACAnmD,uCAlDwC,aAkDxCA;AAvDkB;;AAKpB,SAAK,IAAIzvB,IAAT,GAAgBA,IAAI01E,SAApB,QAAqC11E,CAArC,IAA0C;AAAA,uBAAjCA,CAAiC;;AAAA,+BAGT;AARb;AAvOmC;;AAkSzD,8CAA4C;AAC1C,QAAMg9D,SAAS,UAAU,kBAAkB;AACzC,aAAO;AACLL,YAAIoZ,IADC;AAELnZ,YAAImZ,IAFC;AAGL1V,YAAI0V,IAHC;AAILzV,YAAIyV,IAJC;AAKL/vD,eALK;AAMLgwD,eANK;AAOLC,eAPK;AAAA,OAAP;AAFwC,KAC3B,CAAf;AAWAC,2BAZ0C,MAY1CA;AACA,QAAMR,WAAW,UAAUS,MAbe,MAazB,CAAjB;AACAnZ,mBAAe,aAAa;AAC1B,UAAMh9D,IAAIyb,EADgB,KAC1B;AACAi6D,oBAAc;AACZ/W,cAAMljD,EADM;AAEZmjD,aAFY;AAGZwW,eAAO35D,EAHK;AAIZ45D,gBAJY;AAAA,OAAdK;AAhBwC,KAc1C1Y;AAYAmZ,cAAU,kBAAkB;AAC1B,UAAMl+C,IAAIy9C,SAAV,CAAUA,CAAV;AAAA,UACEj6D,IAAIuhD,OAFoB,CAEpBA,CADN;AAEAvhD,aAAOs6D,IAHmB,GAG1Bt6D;AACAA,aAAOtf,QAAQ87B,EAJW,KAI1Bxc;AACAA,aAAOs6D,IALmB,MAK1Bt6D;AACAA,aAAOtf,QAAQ87B,EANW,IAM1Bxc;AACAA,gBAP0B,CAO1BA;AACAA,gBAR0B,SAQ1BA;AACAA,gBAT0B,SAS1BA;AAnCwC,KA0B1C06D;AAWAD,4BArC0C,MAqC1CA;AAEAlZ,mBAAe,aAAa;AAC1B,UAAMh9D,IAAIyb,EADgB,KAC1B;AACAi6D,wBAAkBj6D,EAFQ,KAE1Bi6D;AACAA,2BAAqBj6D,EAHK,KAG1Bi6D;AA1CwC,KAuC1C1Y;AAKA,WA5C0C,QA4C1C;AA9UuD;;AAiVzD,0CAAwC;AAEtCA,gBAAY,gBAAgB;AAC1B,aAAOxhD,OAAOC,EAAPD,MAAeA,UAAUC,EADN,KAC1B;AAHoC,KAEtCuhD;AAKA,QAAMoZ,eAAe;AACnBzZ,UAAI,CADe;AAEnBC,UAAI,CAFe;AAGnByD,UAHmB;AAInBC,UAJmB;AAKnBt6C,aAAO,CALY;AAMnBgwD,aANmB;AAOnBC,aAPmB;AAAA,KAArB;AASA,QAAMI,UAAU,CACd;AACEp1E,aAAO,CADT;AAEEd,WAFF;AAGEm2E,gBAHF;AAAA,KADc,CAAhB;AAQAtZ,mBAAe,oBAAoB;AAGjC,UAAIh9D,IAH6B,CAGjC;;AACA,aAAOA,IAAIq2E,QAAJr2E,UAAsBq2E,kBAAkBC,SAA/C,IAA4D;AAC1Dt2E,SAD0D;AAJ3B;;AAOjC,UAAI0xD,IAAI2kB,iBAPyB,CAOjC;;AACA,aAAO3kB,UAAU2kB,oBAAoBC,SAArC,IAAkD;AAChD5kB,SADgD;AARjB;;AAYjC,uBAZiC,gBAYjC;AACA;AAAA;AAAA,UAEE6kB,UAAU,CAfqB,QAajC;;AAGA,WAAKnU,IAAL,GAAYA,KAAZ,GAAoBA,CAApB,IAAyB;AACvBoU,sBAAcH,QADS,CACTA,CAAdG;AACAC,2BAAmBD,YAFI,QAEvBC;AACA,YAAIC,IAHmB,SAGvB;;AACA,YAAID,sBAAsBH,SAA1B,IAAuC;AAIrCI,iBACED,yBAAyBH,SAAzBG,QACIA,iBADJA,QAEIH,SAP+B,EAIrCI;AAJF,eAQO,IAAID,2BAAJ,WAA0C;AAG/CC,iBAAQ,uBAAsBJ,SAAvB,EAAC,IAHuC,CAG/CI;AAHK,eAIA;AAELA,iBAAOD,iBAFF,KAELC;AAlBqB;;AAoBvB,YAAIA,OAAJ,SAAoB;AAClBH,oBADkB,IAClBA;AArBqB;AAhBQ;;AA0CjCD,uBA1CiC,OA0CjCA;;AAGA,WAAKlU,IAAL,GAAYA,KAAZ,GAAoBA,CAApB,IAAyB;AACvBoU,sBAAcH,QADS,CACTA,CAAdG;AACAC,2BAAmBD,YAFI,QAEvBC;;AACA,YAAIA,2BAAJ,WAA0C;AAExC,cAAIA,sBAAsBH,SAA1B,IAAuC;AAGrC,gBAAIG,yBAAyBH,SAA7B,OAA6C;AAC3CG,uCAAyBA,iBADkB,EAC3CA;AAJmC;AAAvC,iBAMO;AACLA,qCADK,OACLA;AATsC;AAA1C,eAWO,IAAIA,yBAAJ,SAAsC;AAE3CA,mCAAyB/3E,kBAAkB+3E,iBAFA,EAElB/3E,CAAzB+3E;AAhBqB;AA7CQ;;AAkEjC,UAAME,iBAlE2B,EAkEjC;AACA,UAAIC,eAnE6B,IAmEjC;;AACA,WAAKxU,IAAL,GAAYA,KAAZ,GAAoBA,CAApB,IAAyB;AACvBoU,sBAAcH,QADS,CACTA,CAAdG;AACAC,2BAAmBD,YAFI,QAEvBC;AAEA,YAAMI,cACJJ,sBAAsBH,SAAtBG,wBALqB,QAIvB;;AAEA,YAAIG,iBAAJ,aAAkC;AAEhCD,yBAAeA,wBAAfA,SAAgDH,YAFhB,GAEhCG;AAFF,eAGO;AACLA,8BAAoB;AAClB11E,mBAAOu1E,YADW;AAElBr2E,iBAAKq2E,YAFa;AAGlBF,sBAHkB;AAAA,WAApBK;AAKAC,yBANK,WAMLA;AAfqB;AApEQ;;AAsFjC,UAAIP,mBAAmBC,SAAvB,IAAoC;AAClCK,kCAA0BL,SADQ,EAClCK;AACAA,+BAAuB;AACrB11E,iBAAOo1E,WADc;AAErBl2E,eAAKm2E,SAFgB;AAGrBA,oBAAUD,WAHW;AAAA,SAAvBM;AAxF+B;;AA8FjC,UAAIL,cAAcD,WAAlB,KAAkC;AAChCM,uBAAeA,wBAAfA,SAAgDL,SADhB,EAChCK;AACAA,4BAAoB;AAClB11E,iBAAOq1E,SADW;AAElBn2E,eAAKk2E,WAFa;AAGlBC,oBAAUD,WAHQ;AAAA,SAApBM;AAhG+B;;AA0GjC,WAAKvU,IAAL,GAAYA,KAAZ,GAAoBA,CAApB,IAAyB;AACvBoU,sBAAcH,QADS,CACTA,CAAdG;AACAC,2BAAmBD,YAFI,QAEvBC;;AACA,YAAIA,2BAAJ,WAA0C;AAAA;AAHnB;;AAMvB,YAAIK,OANmB,KAMvB;;AACA,aACE3pD,IAAIntB,IADN,GAEE,SAASmtB,KAAT,KAAmBkpD,oBAAoBI,iBAFzC,IAGEtpD,CAHF,IAIE;AACA2pD,iBAAOT,wBADP,gBACAS;AAZqB;;AAcvB,aACE3pD,IAAIukC,IADN,GAEE,SAASvkC,IAAIkpD,QAAb,UAA+BA,kBAAkBI,iBAFnD,IAGEtpD,CAHF,IAIE;AACA2pD,iBAAOT,wBADP,gBACAS;AAnBqB;;AAqBvB,aAAK3pD,IAAL,GAAY,SAASA,IAAIwpD,eAAzB,QAAgDxpD,CAAhD,IAAqD;AACnD2pD,iBAAOH,+BAD4C,gBACnDG;AAtBqB;;AAwBvB,YAAI,CAAJ,MAAW;AACTL,mCADS,OACTA;AAzBqB;AA1GQ;;AAuIjCl8D,4CAEE,IAAIm3C,QAAJ,UAzI+B,cAyI/B,CAFFn3C;AA/JoC,KAwBtCyiD;AA8IAqZ,oBAAgB,uBAAuB;AACrC,UAAMI,mBAAmBD,YADY,QACrC;;AACA,UAAIC,2BAAJ,WAA0C;AACxCA,iCAAyB/3E,gBAAgB+3E,iBADD,EACf/3E,CAAzB+3E;AAHmC;AAtKD,KAsKtCJ;AAvfuD;;AAygBzD,qCAQG;AAAA;AAAA;;AAAA,QAR0B,WAQ1B,QAR0B,WAQ1B;AAAA,QAR0B,iBAQ1B,QAR0B,iBAQ1B;AAAA,QAR0B,SAQ1B,QAR0B,SAQ1B;AAAA,QAR0B,QAQ1B,QAR0B,QAQ1B;AAAA,QAR0B,QAQ1B,QAR0B,QAQ1B;AAAA,QAR0B,mBAQ1B,QAR0B,mBAQ1B;AAAA,QARH,oBAQG,QARH,oBAQG;AACD,wBADC,WACD;AACA,8BAFC,iBAED;AACA,sBAHC,SAGD;AACA,qBAAiBvyC,UAJhB,aAID;AACA,qBALC,QAKD;AACA,qBAAiBwxC,YANhB,EAMD;AACA,gCAA4ByB,uBAP3B,EAOD;AACA,iCAA6B,CAAC,CAR7B,oBAQD;AACA,iCAA6B,CAAC,2BAACx6E,wBAAD,kDAACA,sBAT9B,OAS6B,CAA9B;AAEA,mBAXC,IAWD;AACA,mCAZC,IAYD;AACA,qCAbC,IAaD;AACA,0BAdC,IAcD;AACA,8BAA0B,IAfzB,OAeyB,EAA1B;AACA,0BAhBC,KAgBD;AACA,qBAjBC,KAiBD;AACA,uBAlBC,oCAkBD;AACA,wBAnBC,IAmBD;AACA,mBApBC,EAoBD;;AAGA,wCACW,YAAM;AACb,UAAI,MAAJ,gBAAyB;AAGvB,4CAHuB,CAGvB;AACA,6CAJuB,CAIvB;AACA,+BALuB,IAKvB;AANW;AADjB,gBAUS,YAAM,CAjCd,CAuBD;AAxiBuD;;AAsjBzDy6E,kCAAgC;AAC9B,kBAAc;AACZ,aAAO,iBADK,OACZ;AAF4B;;AAK9Bt1C,YAAQ,4BAA4B;AAClC,uBADkC,IAClC;;AACA,UAAI,KAAJ,SAAkB;AAChB,4BAAoB,yBADJ,2BACI,CAApB;;AACA,uBAFgB,IAEhB;AAJgC;;AAMlC,UAAI,sBAAJ,MAAgC;AAC9BgjB,qBAAa,KADiB,YAC9BA;AACA,4BAF8B,IAE9B;AARgC;;AAUlC,8BAAwB,UAVU,2BAUV,CAAxB;AAf4B;AAkB9BuyB,iBAlB8B,yBAkB9BA,KAlB8B,EAkB9BA,UAlB8B,EAkBG;AAC/B,WAAK,IAAIj3E,IAAJ,GAAWk3E,MAAM3wB,MAAtB,QAAoCvmD,IAApC,KAA6CA,CAA7C,IAAkD;AAChD,uCAA+BumD,SADiB,GAChD;;AACA4wB,yBAAiB5wB,MAAjB4wB,CAAiB5wB,CAAjB4wB,cAAuC,KAFS,cAEhDA;AAH6B;AAlBH;AAyB9BC,eAzB8B,uBAyB9BA,OAzB8B,EAyBT;AACnB,UAAMtD,oBAAoB,4BADP,OACO,CAA1B;;AACA,UAAIA,kBAAJ,cAAoC;AAAA;AAFjB;;AAMnB,UAAI7hE,YANe,EAMnB;;AACA,UAAI6hE,kCAAJ,GAAyC;AAAA,6BACND,QADM;AAAA,YACjC,QADiC,kBACjC,QADiC;AAAA,YACjC,UADiC,kBACjC,UADiC;;AAIvC,YACE3a,aAAa,KAAbA,2BACAme,eAAe,KAFjB,2BAGE;AACA,+CAA2B,QAA3B,cADA,UACA;AACA,yCAFA,QAEA;AACA,2CAHA,UAGA;AAVqC;;AAAA,oCAarB,gCAAgCxD,QAbX,WAarB,CAbqB;AAAA,YAajC,KAbiC,yBAajC,KAbiC;;AAevC,YAAI13E,QAAJ,GAAe;AACb23E,oCAA0BA,gCADb,KACbA;AACA7hE,uCAAsB6hE,kBAFT,KAEb7hE;AAjBqC;AAPtB;;AA2BnB,UAAI6hE,4BAAJ,GAAmC;AACjC7hE,qCAAsB6hE,kBAAV,KAAZ7hE,kBADiC,SACjCA;AA5BiB;;AA8BnB,UAAIA,mBAAJ,GAA0B;AACxB,YAAI,KAAJ,uBAAgC;AAC9B6hE,gDAD8B,SAC9BA;AAFsB;;AAIxBD,kCAJwB,SAIxBA;AAlCiB;;AAoCnB,2CApCmB,iBAoCnB;;AACA,kCArCmB,OAqCnB;AA9D4B;AAiE9ByD,aAAS,mCAAmC;AAAA;;AAC1C,UAAMx6D,aADoC,oCAC1C;AACA,UAAIy6D,aAAa32E,cAFyB,IAEzBA,CAAjB;;AAGA,UAAMpE,SAAS,6BAL2B,QAK3B,CAAf;;AACAA,sBAAgBA,eAN0B,iBAM1CA;AAMEA,yBAZwC,IAYxCA;AAEF,4BAAsBA,wBAAwB;AAAEg4D,eAdN;AAcI,OAAxBh4D,CAAtB;;AAEA,UAAI,KAAJ,cAAuB;AACrB,YAAMg7E,YAAY,kBADG,KACrB;AACA,YAAMC,aAAa,kBAFE,MAErB;;AACA,sCAHqB,UAGrB;;AACA36D,mBAJqB,OAIrBA;AAJF,aAKO,IAAI,KAAJ,oBAA6B;AAClC,YAAMwpC,OAAO,SAAPA,IAAO,GAAM;AACjB,qCAAyB,iBAAqB;AAAA,gBAApB,KAAoB,SAApB,KAAoB;AAAA,gBAArB,IAAqB,SAArB,IAAqB;;AAC5C,sBAAU;AACRxpC,yBADQ,OACRA;AADQ;AADkC;;AAM5Clc,sCAA0BoC,MANkB,MAM5CpC;;AACA,iCAAmBoC,MAAnB,OAP4C,UAO5C;;AACAsjD,gBAR4C;AAA9C,aASGxpC,WAVc,MACjB;AAFgC,SAClC;;AAaA,uBAAe,wBAdmB,SAcnB,EAAf;AACAwpC,YAfkC;AAA7B,aAgBA;AACL,cAAM,UACJ,kDAFG,wBACC,CAAN;AAtCwC;;AA4C1CxpC,8BAAwB,YAAM;AAC5By6D,qBAD4B,IAC5BA;;AACA,YAAI,CAAJ,SAAc;AAEZvzB,iBAFY,MAEZA;AAFF,eAGO;AAEL,gCAAoB,WAAW,YAAM;AACnCA,mBADmC,MACnCA;AACA,kCAFmC,IAEnC;AAFkB,aAFf,OAEe,CAApB;AAP0B;AAA9BlnC,SAYG,iBAxDuC,MA4C1CA;AA7G4B;AA4H9B46D,oBAAgB,8CAA8C;AAC5D,UAAI,CAAC,KAAD,yBAA+B,CAAC,KAApC,gBAAyD;AAAA;AADG;;AAI5D,UAAI,iBAAJ,MAA2B;AACzBC,eADyB,IACzBA;AACA,uBAFyB,IAEzB;AAN0D;;AAQ5D,UAAMC,eAAN;AAAA,UACEC,aAT0D,EAQ5D;;AAGA,WAAK,IAAI73E,IAAJ,GAAWD,KAAK,eAArB,QAA4CC,IAA5C,IAAoDA,CAApD,IAAyD;AACvD,YAAMwuD,MAAM,eAD2C,CAC3C,CAAZ;;AACA,YAAMspB,WAAW,4BAFsC,GAEtC,CAAjB;;AAEA,YAAIA,SAAJ,cAA2B;AAAA;AAJ4B;;AAOvD,wBAAgB;AACdF,gCADc,CACdA;AACAC,8BAFc,CAEdA;;AAEA,cAAIC,SAAJ,mBAAgC;AAC9BF,8BAAkBE,SADY,iBAC9BF;AALY;;AAOd,cAAIE,sBAAJ,GAA6B;AAC3BD,sCAAmBC,SADQ,UAC3BD;AACAD,mDAAgC,CAACE,SAFN,UAE3BF;AAFF,iBAGO;AACLC,4BADK,CACLA;AAXY;;AAad,cAAIC,wBAAJ,GAA+B;AAC7BD,sCAAmBC,wBAAwBA,SADd,KAC7BD;AADF,iBAEO;AACLA,4BADK,CACLA;AAhBY;;AAkBd,cAAIC,yBAAJ,GAAgC;AAC9BD,sCAAmBC,SADW,aAC9BD;AADF,iBAEO;AACLA,4BADK,CACLA;AArBY;;AAuBd,cAAIC,uBAAJ,GAA8B;AAC5BD,sCAAmBC,uBAAuBA,SADd,KAC5BD;AACAD,mDACgB,CAACE,SAAD,cAAwBA,SAHZ,KAE5BF;AAFF,iBAKO;AACLC,4BADK,CACLA;AA7BY;;AAgCdrpB,8BAAoBqpB,gBAhCN,GAgCMA,CAApBrpB;;AACA,cAAIopB,aAAJ,QAAyB;AACvBppB,kCAAsBopB,kBADC,GACDA,CAAtBppB;AAlCY;AAAhB,eAoCO;AACLA,8BADK,IACLA;AACAA,gCAAsBspB,SAFjB,iBAELtpB;AA7CqD;AAXG;AA5HhC;AAAA,GAAhCwoB;;AA2LA,6CAA2C;AACzC,QAAMvnD,OAAO,wBAAwB;AACnC02B,mBAAa4xB,iBADsB;AAEnCC,yBAAmBD,iBAFgB;AAGnCj0C,iBAAWi0C,iBAHwB;AAInC3yB,gBAAU2yB,iBAJyB;AAKnCzC,gBAAUyC,iBALyB;AAMnChB,2BAAqBgB,iBANc;AAOnCE,4BAAsBF,iBAPa;AAAA,KAAxB,CAAb;;AASAtoD,iBAAasoD,iBAV4B,OAUzCtoD;;AACA,WAXyC,IAWzC;AA5vBuD;;AA+vBzD,SA/vByD,eA+vBzD;AArzBF,CAsDyB,EAAzB;;;;;;;;;;;;;;;;ACtCA;;AAhBA;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAIyoD,cAAc,uBAAY;AAC5B,QAAM,UADsB,8BACtB,CAAN;AAhCF,CA+BA;;;AAIiE;AAAA,MAiU/D,YAjU+D,GAiU/D,8BAA8B;AAC5B,QAAIC,SADwB,EAC5B;AACA,QAAMlY,MAFsB,EAE5B;;AAF4B,+CAI5B,MAJ4B;AAAA;;AAAA;AAI5B,0DAAoC;AAAA,YAApC,aAAoC;;AAClC,YAAImY,qBAAJ,QAAiC;AAC/BD,sBAAY;AAAExhB,kBAAF;AAAY7yD,gBAAZ;AAAyByiD,mBAAzB;AAAA,WAAZ4xB;AACAlY,mBAF+B,MAE/BA;AACAkY,mBAASA,OAAOA,gBAAPA,GAHsB,KAG/BA;AAH+B;AADC;;AAQlC,YAAIC,qBAAJ,WAAoC;AAClCD,mBAASlY,IADyB,GACzBA,EAATkY;AADF,eAEO;AACLA,sBADK,aACLA;AAXgC;AAJR;AAAA;AAAA;AAAA;AAAA;AAAA;;AAkB5B,WAlB4B,MAkB5B;AAnV6D;;AAAA,MA6V/D,EA7V+D,GA6V/D,mBAAmB;AACjB,QAAI1/D,iBAAJ,KAAIA,CAAJ,EAA6B;AAC3B,aAAOzV,MADoB,QACpBA,EAAP;AAFe;;AAIjB,QAAM0qD,IAAI1qD,cAJO,EAIPA,CAAV;AACA,QAAIhD,IAAI0tD,WALS,CAKjB;;AACA,QAAIA,SAAJ,KAAkB;AAChB,aADgB,CAChB;AAPe;;AAWjB,OAAG;AACD1tD,OADC;AAAH,aAES0tD,SAbQ,GAWjB;;AAGA,WAAOA,eAAeA,mBAAmB1tD,IAdxB,CAcV0tD,CAAP;AA3W6D;;AAAA,MAuX/D,EAvX+D,GAuX/D,eAAe;AACb,QAAI7yC,cAAcA,SAAlB,GAA8B;AAC5B,UAAIA,cAAcA,SAAlB,GAA8B;AAC5B,YAAIA,cAAcA,SAAlB,GAA8B;AAC5B,iBAD4B,EAC5B;AAF0B;;AAI5B,+BAAgBw9D,GAAGx9D,EAAZ,CAAYA,CAAHw9D,CAAhB,cAA4BA,GAAGx9D,EAJH,CAIGA,CAAHw9D,CAA5B;AAL0B;;AAO5B,UAAIx9D,SAASA,EAATA,CAASA,CAATA,IAAiBA,SAAS,CAACA,EAA/B,CAA+BA,CAA/B,EAAqC;AACnC,YAAMW,IAAK9c,UAAUmc,EAAVnc,CAAUmc,CAAVnc,IAAD,GAACA,GAAyBA,KADD,EACnC;AACA,gCAAiB25E,GAFkB,CAElBA,CAAjB;AAT0B;AAA9B,WAWO;AACL,UAAIx9D,cAAcA,SAAdA,KAA4BA,SAA5BA,KAA0CA,SAA9C,GAA0D;AACxD,mCAAoBw9D,GAAGx9D,EAAhB,CAAgBA,CAAHw9D,CAApB,cAAgCA,GAAGx9D,EADqB,CACrBA,CAAHw9D,CAAhC;AAFG;AAZM;;AAiBb,WACE,iBAAUA,GAAGx9D,EAAb,CAAaA,CAAHw9D,CAAV,cAAsBA,GAAGx9D,EAAzB,CAAyBA,CAAHw9D,CAAtB,cAAkCA,GAAGx9D,EAArC,CAAqCA,CAAHw9D,CAAlC,cAA8CA,GAAGx9D,EAAjD,CAAiDA,CAAHw9D,CAA9C,cAA0DA,GAAGx9D,EAA7D,CAA6DA,CAAHw9D,CAA1D,mBACGA,GAAGx9D,EAnBK,CAmBLA,CAAHw9D,CADH,MADF;AAxY6D;;AAC/D,MAAMC,eAAe;AACnBC,eADmB;AAEnBC,gBAFmB;AAGnBjgB,eAHmB;AAAA,GAArB;AAKA,MAAMkgB,SANyD,sCAM/D;AACA,MAAMC,WAPyD,8BAO/D;AACA,MAAM5iB,kBAAkB,2BAAxB;AACA,MAAMC,mBAAmB,2BAAzB;;AAEA,MAAM4iB,sBAAuB,YAAY;AACvC,QAAMC,aAAa,eAAe,gDAAf,CAAnB;AAUA,QAAMC,qBAXiC,EAWvC;AAEA,QAAMC,WAAW,eAbsB,GAatB,CAAjB;;AACA,SAAK,IAAI94E,IAAT,GAAgBA,IAAhB,KAAyBA,CAAzB,IAA8B;AAC5B,UAAI0b,IADwB,CAC5B;;AACA,WAAK,IAAIqiD,IAAT,GAAgBA,IAAhB,GAAuBA,CAAvB,IAA4B;AAC1B,YAAIriD,IAAJ,GAAW;AACTA,cAAI,aAAeA,KAAD,CAACA,GADV,UACTA;AADF,eAEO;AACLA,cAAKA,KAAD,CAACA,GADA,UACLA;AAJwB;AAFA;;AAS5Bo9D,oBAT4B,CAS5BA;AAvBqC;;AA0BvC,qCAAiC;AAC/B,UAAIC,MAAM,CADqB,CAC/B;;AACA,WAAK,IAAI/4E,KAAT,OAAoBA,KAApB,KAA6BA,EAA7B,IAAkC;AAChC,YAAMwb,IAAK,OAAM5B,KAAP,EAAOA,CAAN,IADqB,IAChC;AACA,YAAM6B,IAAIq9D,SAFsB,CAEtBA,CAAV;AACAC,cAAOA,QAAD,CAACA,GAHyB,CAGhCA;AAL6B;;AAO/B,aAAOA,MAAM,CAPkB,CAO/B;AAjCqC;;AAoCvC,qDAAiD;AAC/C,UAAIn+D,IAD2C,MAC/C;AACA,UAAMs8D,MAAM8B,KAFmC,MAE/C;AAEAp/D,gBAAWs9D,OAAD,EAACA,GAJoC,IAI/Ct9D;AACAA,WAAKgB,IAALhB,KAAes9D,OAAD,EAACA,GALgC,IAK/Ct9D;AACAA,WAAKgB,IAALhB,KAAes9D,OAAD,CAACA,GANgC,IAM/Ct9D;AACAA,WAAKgB,IAALhB,KAAcs9D,MAPiC,IAO/Ct9D;AACAgB,WAR+C,CAQ/CA;AAEAhB,gBAAUhW,qBAVqC,IAU/CgW;AACAA,WAAKgB,IAALhB,KAAchW,qBAXiC,IAW/CgW;AACAA,WAAKgB,IAALhB,KAAchW,qBAZiC,IAY/CgW;AACAA,WAAKgB,IAALhB,KAAchW,qBAbiC,IAa/CgW;AACAgB,WAd+C,CAc/CA;AAEAhB,qBAhB+C,CAgB/CA;AACAgB,WAAKo+D,KAjB0C,MAiB/Cp+D;AAEA,UAAMm+D,MAAME,YAAYzrB,SAAZyrB,GAnBmC,CAmBnCA,CAAZ;AACAr/D,gBAAWm/D,OAAD,EAACA,GApBoC,IAoB/Cn/D;AACAA,WAAKgB,IAALhB,KAAem/D,OAAD,EAACA,GArBgC,IAqB/Cn/D;AACAA,WAAKgB,IAALhB,KAAem/D,OAAD,CAACA,GAtBgC,IAsB/Cn/D;AACAA,WAAKgB,IAALhB,KAAcm/D,MAvBiC,IAuB/Cn/D;AA3DqC;;AA8DvC,uCAAmC;AACjC,UAAI4B,IAD6B,CACjC;AACA,UAAIC,IAF6B,CAEjC;;AACA,WAAK,IAAIzb,MAAT,OAAoBA,MAApB,KAA6B,EAA7B,KAAkC;AAChCwb,YAAK,MAAK,YAAN,IAAC,KAD2B,KAChCA;AACAC,YAAK,KAAD,CAAC,IAF2B,KAEhCA;AAL+B;;AAOjC,aAAQA,KAAD,EAACA,GAPyB,CAOjC;AArEqC;;AA8EvC,mCAA+B;AAC7B,UAAI,CAAJ,mBAAe;AAIb,eAAOy9D,wBAJM,QAINA,CAAP;AAL2B;;AAO7B,UAAI;AAUF,YAVE,KAUF;;AAEA,YAAIn3E,SAASkc,iBAATlc,SAAJ,GAA0C;AACxCyf,kBADwC,QACxCA;AADF,eAEO;AAELA,kBAAQ3D,YAFH,QAEGA,CAAR2D;AAhBA;;AAkBF,YAAM23D,SAAS9pB,mCAAmD;AAChE+pB,iBAnBA;AAkBgE,SAAnD/pB,CAAf;;AAGA,eAAO8pB,wCAAwC,eArB7C,MAqB6C,CAA/C;AArBF,QAsBE,UAAU;AACV74E,wBACE,kEAFQ,CACVA;AA9B2B;;AAmC7B,aAAO44E,wBAnCsB,QAmCtBA,CAAP;AAjHqC;;AAqHvC,+CAA2C;AACzC,UAAIhC,MAAMmC,SAD+B,MACzC;AACA,UAAMC,iBAFmC,MAEzC;AAEA,UAAMC,gBAAgB76E,UAAUw4E,MAJS,cAInBx4E,CAAtB;AACA,UAAM86E,OAAO,eAAe,UAAUD,gBAAV,IALa,CAK5B,CAAb;AACA,UAAIE,KANqC,CAMzC;AACAD,WAAKC,EAALD,MAPyC,IAOzCA;AACAA,WAAKC,EAALD,MARyC,IAQzCA;AAEA,UAAI7/D,MAVqC,CAUzC;;AACA,aAAOu9D,MAAP,gBAA6B;AAE3BsC,aAAKC,EAALD,MAF2B,IAE3BA;AACAA,aAAKC,EAALD,MAH2B,IAG3BA;AACAA,aAAKC,EAALD,MAJ2B,IAI3BA;AACAA,aAAKC,EAALD,MAL2B,IAK3BA;AACAA,aAAKC,EAALD,MAN2B,IAM3BA;AACAA,iBAASH,uBAAuB1/D,MAAhC6/D,cAASH,CAATG,EAP2B,EAO3BA;AACAC,cAR2B,cAQ3BA;AACA9/D,eAT2B,cAS3BA;AACAu9D,eAV2B,cAU3BA;AArBuC;;AAyBzCsC,WAAKC,EAALD,MAzByC,IAyBzCA;AACAA,WAAKC,EAALD,MAAatC,MA1B4B,IA0BzCsC;AACAA,WAAKC,EAALD,MAActC,OAAD,CAACA,GA3B2B,IA2BzCsC;AACAA,WAAKC,EAALD,MAAa,gBA5B4B,IA4BzCA;AACAA,WAAKC,EAALD,MAAe,QAAD,MAAC,KAAF,CAAE,GA7B0B,IA6BzCA;AACAA,eAASH,kBAATG,GAASH,CAATG,EA9ByC,EA8BzCA;AACAC,YAAMJ,kBA/BmC,GA+BzCI;AAEA,UAAMC,QAAQC,qBAAqBN,SAjCM,MAiC3BM,CAAd;AACAH,WAAKC,EAALD,MAAcE,SAAD,EAACA,GAlC2B,IAkCzCF;AACAA,WAAKC,EAALD,MAAcE,SAAD,EAACA,GAnC2B,IAmCzCF;AACAA,WAAKC,EAALD,MAAcE,SAAD,CAACA,GApC2B,IAoCzCF;AACAA,WAAKC,EAALD,MAAaE,QArC4B,IAqCzCF;AACA,aAtCyC,IAsCzC;AA3JqC;;AA8JvC,4DAAwD;AACtD,UAAMr9E,QAAQ+0D,QADwC,KACtD;AACA,UAAM90D,SAAS80D,QAFuC,MAEtD;AACA,+BAHsD,QAGtD;AACA,UAAMj4C,QAAQi4C,QAJwC,IAItD;;AAEA;AACE,aAAK7nD,gBAAL;AACEuwE,sBADF,CACEA;AACAC,qBAFF,CAEEA;AACAvoB,qBAAYn1D,QAAD,CAACA,IAHd,CAGEm1D;AAJJ;;AAME,aAAKjoD,gBAAL;AACEuwE,sBADF,CACEA;AACAC,qBAFF,CAEEA;AACAvoB,qBAAWn1D,QAHb,CAGEm1D;AATJ;;AAWE,aAAKjoD,gBAAL;AACEuwE,sBADF,CACEA;AACAC,qBAFF,CAEEA;AACAvoB,qBAAWn1D,QAHb,CAGEm1D;AAdJ;;AAgBE;AACE,gBAAM,UAjBV,gBAiBU,CAAN;AAjBJ;;AAqBA,UAAM+nB,WAAW,eAAgB,KAAD,QAAC,IA3BqB,MA2BrC,CAAjB;AACA,UAAIS,iBAAJ;AAAA,UACEC,cA7BoD,CA4BtD;;AAEA,WAAK,IAAI/kB,IAAT,GAAgBA,IAAhB,QAA4B,EAA5B,GAAiC;AAC/BqkB,iBAASS,cAATT,MAD+B,CAC/BA;AACAA,qBACEpgE,4BAA4B8gE,cAD9BV,QACEpgE,CADFogE,EAF+B,cAE/BA;AAIAU,uBAN+B,QAM/BA;AACAD,0BAP+B,QAO/BA;AArCoD;;AAwCtD,UAAIryD,SAASpe,gBAAToe,kBAAJ,QAAiD;AAE/CqyD,yBAF+C,CAE/CA;;AACA,aAAK,IAAI9kB,KAAT,GAAgBA,KAAhB,QAA4BA,EAA5B,IAAiC;AAC/B8kB,wBAD+B;;AAE/B,eAAK,IAAI95E,MAAT,GAAgBA,MAAhB,UAA8BA,GAA9B,IAAmC;AACjCq5E,qBAASS,cAATT,OADiC,IACjCA;AAH6B;AAHc;AAxCK;;AAmDtD,UAAMW,OAAO,eAAe,CACzB79E,SAAD,EAACA,GADyB,MAEzBA,SAAD,EAACA,GAFyB,MAGzBA,SAAD,CAACA,GAHyB,MAI1BA,QAJ0B,MAKzBC,UAAD,EAACA,GALyB,MAMzBA,UAAD,EAACA,GANyB,MAOzBA,UAAD,CAACA,GAPyB,MAQ1BA,SAR0B,4CAAf,CAAb;AAeA,UAAMo9E,OAAOS,YAlEyC,QAkEzCA,CAAb;AAGA,UAAMC,YACJtB,oBAAoBC,qBAApBD,IAA6CoB,KAA7CpB,SAA2DY,KAtEP,MAqEtD;AAEA,UAAM5/D,OAAO,eAvEyC,SAuEzC,CAAb;AACA,UAAI4zC,SAxEkD,CAwEtD;AACA5zC,2BAzEsD,MAyEtDA;AACA4zC,gBAAUorB,WA1E4C,MA0EtDprB;AACA2sB,wCA3EsD,MA2EtDA;AACA3sB,gBAAUqrB,qBAAqBmB,KA5EuB,MA4EtDxsB;AACA2sB,yCA7EsD,MA6EtDA;AACA3sB,gBAAUqrB,qBAAqBW,KA9EuB,MA8EtDhsB;AACA2sB,4BAAsB,eAAtBA,CAAsB,CAAtBA,QA/EsD,MA+EtDA;AAEA,aAAOC,8CAjF+C,eAiF/CA,CAAP;AA/OqC;;AAmPvC,WAAO,+DAA+D;AACpE,UAAM3yD,OACJypC,6BAA6B7nD,gBAA7B6nD,iBAAwDA,QAFU,IACpE;AAEA,aAAOmpB,uCAH6D,MAG7DA,CAAP;AAtPqC,KAmPvC;AA9P6D,GAWlC,EAA7B;;AAX+D,MAqQ/D,aArQ+D;AAsQ7Dv+E,6BAAc;AAAA;;AACZ,2BADY,CACZ;AACA,wBAAkBw8E,aAFN,UAEZ;AACA,sBAHY,CAGZ;AAEA,wBALY,qBAKZ;AACA,wBANY,0BAMZ;AACA,qBAPY,CAOZ;AACA,+BAAyB5vE,wBARb,IAQZ;AACA,6BATY,CASZ;AAGA,eAZY,CAYZ;AACA,eAbY,CAaZ;AAGA,mBAhBY,CAgBZ;AACA,mBAjBY,CAiBZ;AAGA,yBApBY,CAoBZ;AACA,yBArBY,CAqBZ;AACA,wBAtBY,CAsBZ;AACA,sBAvBY,CAuBZ;AAGA,uBAAiB4vE,aA1BL,SA0BZ;AACA,yBA3BY,SA2BZ;AAEA,uBA7BY,CA6BZ;AACA,yBA9BY,CA8BZ;AACA,uBA/BY,CA+BZ;AACA,sBAhCY,EAgCZ;AACA,qBAjCY,EAiCZ;AACA,wBAlCY,CAkCZ;AAEA,uBApCY,EAoCZ;AACA,uBArCY,CAqCZ;AAEA,0BAvCY,EAuCZ;AAGA,2BA1CY,IA0CZ;AACA,uBA3CY,IA2CZ;AAEA,oBA7CY,EA6CZ;AA9CgB;;AArQ2C;AAAA;AAAA,aAsT7D15E,iBAAQ;AACN,eAAOgC,cADD,IACCA,CAAP;AAlDgB;AArQ2C;AAAA;AAAA,aA0T7D4xD,+BAAsB;AACpB,iBADoB,CACpB;AACA,iBAFoB,CAEpB;AAvDgB;AArQ2C;;AAAA;AAAA;;AAiZ/D,MAAI8nB,YAjZ2D,CAiZ/D;AACA,MAAIC,YAlZ2D,CAkZ/D;AACA,MAAIC,eAnZ2D,CAmZ/D;;AAGAtC;AACEp8E,2CAAuD;AAAA,UAAzBohB,eAAyB,uEAAvDphB,KAAuD;;AAAA;;AACrD,wBAAkB,IADmC,4BACnC,EAAlB;AAEA,qBAAe,IAHsC,aAGtC,EAAf;AACA,6BAJqD,qBAIrD;AACA,4BALqD,EAKrD;AACA,wBANqD,EAMrD;AACA,wBAPqD,UAOrD;AACA,kBARqD,IAQrD;AACA,yBATqD,IASrD;AACA,2BAVqD,KAUrD;AAEA,wBAZqD,KAYrD;AACA,2BAAqB8E,cAbgC,IAahCA,CAArB;AACA,sBAdqD,IAcrD;AACA,6BAAuB,CAAC,CAf6B,eAerD;AAKA,gCApBqD,EAoBrD;;AACA,gCAAsB;AACpB,gCAAwByQ,UAAxB,EAAwBA,CAAxB,IADoB,EACpB;AAtBmD;AADzB;;AAAhC6mE;AAAAA;AAAAA,aA2BEnmE,gBAAO;AACL,iCAAyB,KADpB,eACL;AACA,YAAM0+C,MAAM,KAFP,OAEL;AACA,6BAHK,GAGL;AACA,uBAAeA,IAJV,KAIUA,EAAf;AA/B4B;AAAhCynB;AAAAA;AAAAA,aAkCElmE,mBAAU;AACR,+BAAuB,oBADf,GACe,EAAvB;AACA,uBAAe,gBAFP,GAEO,EAAf;AACA,2BAHQ,IAGR;AACA,oBAJQ,IAIR;AAtC4B;AAAhCkmE;AAAAA;AAAAA,aAyCEnb,sBAAa;AACX,aADW,IACX;AACA,2BAFW,KAEX;AACA,aAHW,OAGX;AA5C4B;AAAhCmb;AAAAA;AAAAA,aA+CEuC,wCAA+B;AAAA;;AAC7B,YAAM31B,UAAUS,aADa,OAC7B;AACA,YAAMR,YAAYQ,aAFW,SAE7B;;AAEA,aAAK,IAAIvlD,IAAJ,GAAWD,KAAK+kD,QAArB,QAAqC9kD,IAArC,IAA6CA,CAA7C,IAAkD;AAChD,cAAI8kD,eAAezzC,UAAnB,YAAmC;AAAA;AADa;;AAAA,sDAK9B0zC,UAAlB,CAAkBA,CAL8B;AAAA;;AAAA;AAAA;AAAA,kBAKhD,GALgD;AAM9C,kBAAM6R,WAAWxzD,uBAAuB,MAAvBA,aAAyC,MAD5B,IAC9B;AACA,kBAAMkuB,UAAU,YAAY7zB,mBAAW;AACrCm5D,kCADqC,OACrCA;AAH4B,eAEd,CAAhB;;AAGA,8CAL8B,OAK9B;AAV8C;;AAKhD,mEAAgC;AAAA;AALgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAJrB;;AAiB7B,eAAOhoC,YAAY,aAjBU,YAiBtBA,CAAP;AAhE4B;AAAhCspD;AAAAA;AAAAA,aAmEEjmE,qCAA4B;AAC1B,YAAMyoE,kBAAkB,kBAAxB;AACA,+BAAuBz/D,qBACrB,KADqBA,iBAFG,eAEHA,CAAvB;AAIA,oBAN0B,IAM1B;AAzE4B;AAAhCi9D;AAAAA;AAAAA,aA4EEyC,wCAA+B;AAAA;;AAC7B,wBAD6B,QAC7B;;AAEA,YAAMC,aAAa,iBAHU,QAGV,CAAnB;;AACA,eAAO,yCAAyC,YAAM;AACpD,mCADoD,qBACpD;;AACA,+BAAmB,qBAFiC,YAEjC,CAAnB;;AACA,iBAHoD,UAGpD;AAP2B,SAItB,CAAP;AAhF4B;AAAhC1C;AAAAA;AAAAA,aAuFE2C,qCAA4B;AAC1B,YAAMC,oBAAoB,KADA,kBAC1B;AACA,YAAM/1B,YAAYQ,aAFQ,SAE1B;AACA,YAAMT,UAAUS,aAHU,OAG1B;AACA,YAAMw1B,SAJoB,EAI1B;;AACA,aAAK,IAAI/6E,IAAJ,GAAWD,KAAK+kD,QAArB,QAAqC9kD,IAArC,IAA6CA,CAA7C,IAAkD;AAChD,cAAM22D,OAAO7R,QADmC,CACnCA,CAAb;AACAi2B,sBAAY;AACVpkB,gBADU,EACVA,IADU;AAEV7yD,gBAAIg3E,kBAFM,IAENA,CAFM;AAGVnlD,kBAAMovB,UAHI,CAGJA;AAHI,WAAZg2B;AAPwB;;AAa1B,eAAOC,aAbmB,MAanBA,CAAP;AApG4B;AAAhC9C;AAAAA;AAAAA,aAuGE+C,+BAAsB;AAAA,oDACpB,MADoB;AAAA;;AAAA;AACpB,iEAAoC;AAAA,gBAApC,aAAoC;AAClC,gBAAMn3E,KAAKo3E,cADuB,EAClC;AACA,gBAAMvkB,OAAOukB,cAFqB,IAElC;AACA,gBAAMvlD,OAAOulD,cAHqB,IAGlC;;AAEA,oBAAQvkB,OAAR;AACE,mBAAKtlD,UAAL;AACE,qBADF,SACE;AAFJ;;AAIE,mBAAKA,UAAL;AAJF;;AAOE,mBAAKA,UAAL;AACE,gCADF,IACE;AARJ;;AAUE,mBAAKA,UAAL;AACE,wCAAwBskB,KAAxB,CAAwBA,CAAxB,EAAiCA,KADnC,CACmCA,CAAjC;AAXJ;;AAaE,mBAAKtkB,UAAL;AACE,6BADF,IACE;AAdJ;;AAgBE,mBAAKA,UAAL;AACE,8BAAcskB,KADhB,CACgBA,CAAd;AAjBJ;;AAmBE,mBAAKtkB,UAAL;AACE,8BAAcskB,KADhB,CACgBA,CAAd;AApBJ;;AAsBE,mBAAKtkB,UAAL;AACE,qBADF,OACE;AAvBJ;;AAyBE,mBAAKA,UAAL;AACE,8BAAcskB,KAAd,CAAcA,CAAd,EAAuBA,KADzB,CACyBA,CAAvB;AA1BJ;;AA4BE,mBAAKtkB,UAAL;AACE,oCAAoBskB,KADtB,CACsBA,CAApB;AA7BJ;;AA+BE,mBAAKtkB,UAAL;AACE,oCAAoBskB,KADtB,CACsBA,CAApB;AAhCJ;;AAkCE,mBAAKtkB,UAAL;AACE,+BAAeskB,KADjB,CACiBA,CAAf;AAnCJ;;AAqCE,mBAAKtkB,UAAL;AACE,mCACEskB,KADF,CACEA,CADF,EAEEA,KAFF,CAEEA,CAFF,EAGEA,KAHF,CAGEA,CAHF,EAIEA,KAJF,CAIEA,CAJF,EAKEA,KALF,CAKEA,CALF,EAMEA,KAPJ,CAOIA,CANF;AAtCJ;;AA+CE,mBAAKtkB,UAAL;AACE,iCAAiBskB,KADnB,CACmBA,CAAjB;AAhDJ;;AAkDE,mBAAKtkB,UAAL;AACE,0CAA0BskB,KAD5B,CAC4BA,CAA1B;AAnDJ;;AAqDE,mBAAKtkB,UAAL;AACE,kCAAkBskB,KADpB,CACoBA,CAAlB;AAtDJ;;AAwDE,mBAAKtkB,UAAL;AACE,iCAAiBskB,KADnB,CACmBA,CAAjB;AAzDJ;;AA2DE,mBAAKtkB,UAAL;AACE,gCAAgBskB,KADlB,CACkBA,CAAhB;AA5DJ;;AA8DE,mBAAKtkB,UAAL;AACE,mCAAmBskB,KADrB,CACqBA,CAAnB;AA/DJ;;AAiEE,mBAAKtkB,UAAL;AACE,qCAAqBskB,KAArB,CAAqBA,CAArB,EAA8BA,KAA9B,CAA8BA,CAA9B,EAAuCA,KADzC,CACyCA,CAAvC;AAlEJ;;AAoEE,mBAAKtkB,UAAL;AACE,uCAAuBskB,KAAvB,CAAuBA,CAAvB,EAAgCA,KAAhC,CAAgCA,CAAhC,EAAyCA,KAD3C,CAC2CA,CAAzC;AArEJ;;AAuEE,mBAAKtkB,UAAL;AACE,qCADF,IACE;AAxEJ;;AA0EE,mBAAKA,UAAL;AACE,mCADF,IACE;AA3EJ;;AA6EE,mBAAKA,UAAL;AACE,iCAAiBskB,KADnB,CACmBA,CAAjB;AA9EJ;;AAgFE,mBAAKtkB,UAAL;AACE,6BAAaskB,KAAb,CAAaA,CAAb,EAAsBA,KADxB,CACwBA,CAAtB;AAjFJ;;AAmFE,mBAAKtkB,UAAL;AACE,wCAAwBskB,KAD1B,CAC0BA,CAAxB;AApFJ;;AAsFE,mBAAKtkB,UAAL;AACE,iCAAiBskB,KADnB,CACmBA,CAAjB;AAvFJ;;AAyFE,mBAAKtkB,UAAL;AACE,+BAAeskB,KADjB,CACiBA,CAAf;AA1FJ;;AA4FE,mBAAKtkB,UAAL;AACE,qBADF,IACE;AA7FJ;;AA+FE,mBAAKA,UAAL;AACE,qBADF,MACE;AAhGJ;;AAkGE,mBAAKA,UAAL;AACE,qBADF,MACE;AAnGJ;;AAqGE,mBAAKA,UAAL;AACE,qBADF,UACE;AAtGJ;;AAwGE,mBAAKA,UAAL;AACE,qBADF,YACE;AAzGJ;;AA2GE,mBAAKA,UAAL;AACE,0BADF,SACE;AA5GJ;;AA8GE,mBAAKA,UAAL;AACE,0BADF,SACE;AA/GJ;;AAiHE,mBAAKA,UAAL;AACE,qBADF,wBACE;AAlHJ;;AAoHE,mBAAKA,UAAL;AACE,uCAAuBskB,KADzB,CACyBA,CAAvB;AArHJ;;AAuHE,mBAAKtkB,UAAL;AACE,6CAA6BskB,KAD/B,CAC+BA,CAA7B;AAxHJ;;AA0HE,mBAAKtkB,UAAL;AACE,2CAA2BskB,KAD7B,CAC6BA,CAA3B;AA3HJ;;AA6HE,mBAAKtkB,UAAL;AACE,2CAA2BskB,KAA3B,CAA2BA,CAA3B,EAAoCA,KADtC,CACsCA,CAApC;AA9HJ;;AAgIE,mBAAKtkB,UAAL;AACE,qBADF,mBACE;AAjIJ;;AAmIE,mBAAKA,UAAL;AACE,qBADF,SACE;AApIJ;;AAsIE,mBAAKA,UAAL;AACE,qBADF,WACE;AAvIJ;;AAyIE,mBAAKA,UAAL;AACE,qBADF,eACE;AA1IJ;;AA4IE,mBAAKA,UAAL;AACE,qBADF,iBACE;AA7IJ;;AA+IE,mBAAKA,UAAL;AACE,qBADF,QACE;AAhJJ;;AAkJE,mBAAKA,UAAL;AACE,+BACEskB,KADF,CACEA,CADF,EAEEA,KAFF,CAEEA,CAFF,EAGEA,KAHF,CAGEA,CAHF,EAIEA,KAJF,CAIEA,CAJF,EAKEA,KALF,CAKEA,CALF,EAMEA,KAPJ,CAOIA,CANF;AAnJJ;;AA4JE,mBAAKtkB,UAAL;AACE,mCAAmBskB,KAAnB,CAAmBA,CAAnB,EAA4BA,KAD9B,CAC8BA,CAA5B;AA7JJ;;AA+JE,mBAAKtkB,UAAL;AACE,qBADF,OACE;AAhKJ;;AAkKE;AACE,2BAAW6pE,cADb,KACE;AAnKJ;;AAqKE;AACE56E,iEADF,EACEA;AAtKJ;AAAA;AANkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAvGQ;AAAhC43E;AAAAA;AAAAA,aAyRE3kE,qCAA4B;AAC1B,mCAD0B,WAC1B;AA1R4B;AAAhC2kE;AAAAA;AAAAA,aA6RE5kE,qCAA4B;AAC1B,mCAD0B,WAC1B;AA9R4B;AAAhC4kE;AAAAA;AAAAA,aAiSElkE,oBAAW;AACT,yBAAiB,aADR,OACT;AAlS4B;AAAhCkkE;AAAAA;AAAAA,aAqSEnkE,yCAAgC;AAC9B,YAAMk7C,UAAU,KADc,OAC9B;AACAA,6BAAqBA,qBAAqB,kBAA1CA;AACAA,kCAA0BvwD,cAHI,CAGJA,CAA1BuwD;AAEAA,oBAAYA,gBALkB,CAK9BA;AACAA,oBAAYA,gBANkB,CAM9BA;AAEAA,0BAR8B,EAQ9BA;AACAA,0BAT8B,EAS9BA;AACAA,wBAAgB,8BAVc,WAUd,CAAhBA;AACAA,0DAAkDA,QAXpB,UAW9BA;AACAA,kEAGKopB,GAAGppB,QAfsB,QAezBopB,CAHLppB;AAKAA,gDAAwCopB,GAAG,CAACppB,QAjBd,CAiBUopB,CAAxCppB;AAEAA,6BAAqB,8BAnBS,UAmBT,CAArBA;AACAA,uCAA+BA,QApBD,KAoB9BA;AAzT4B;AAAhCipB;AAAAA;AAAAA,aA4TE9kE,qBAAY;AACV,YAAM67C,UAAU,KADN,OACV;AACAA,oBAAYA,gBAFF,CAEVA;AACAA,oBAAYA,gBAHF,CAGVA;AACAA,6BAJU,qBAIVA;AACAA,6BALU,qBAKVA;AACAA,kCANU,CAMVA;AACAA,wBAAgB,8BAPN,WAOM,CAAhBA;AACAA,6BAAqB,8BARX,UAQW,CAArBA;AACAA,yBAAiB,8BATP,OASO,CAAjBA;AACAA,0BAVU,EAUVA;AACAA,0BAXU,EAWVA;AAvU4B;AAAhCipB;AAAAA;AAAAA,aA0UErkE,wBAAe;AACb,YAAMo7C,UAAU,KADH,OACb;AACAA,oBAAYA,iBAFC,CAEbA;AACAA,oBAAYA,iBAHC,CAGbA;AAEAA,0BALa,EAKbA;AACAA,0BANa,EAMbA;AACAA,wBAAgB,8BAPH,WAOG,CAAhBA;AACAA,0DAAkDA,QARrC,UAQbA;AACAA,kEAGKopB,GAAGppB,QAZK,QAYRopB,CAHLppB;AAKAA,gDAAwCopB,GAAG,CAACppB,QAd/B,CAc2BopB,CAAxCppB;AAxV4B;AAAhCipB;AAAAA;AAAAA,aA2VEjkE,0BAAiB;AACf,YAAMg7C,UAAU,KADD,OACf;AACA,YAAM13C,OAAO03C,QAFE,IAEf;AACA,YAAMiK,WAAWjK,QAHF,QAGf;;AACA,YAAIiK,aAAJ,GAAoB;AAAA;AAJL;;AAQf,YAAMK,gBAAgBtK,QARP,aAQf;AACA,YAAMuK,cAAcvK,QATL,WASf;AACA,YAAMwK,cAAcxK,QAVL,WAUf;AACA,YAAMyK,gBAAgBzK,QAXP,aAWf;AACA,YAAM0K,aAAa1K,qBAZJ,aAYf;AACA,YAAM6K,WAAWviD,KAbF,QAaf;AACA,YAAMwiD,aAAaD,eAAe,CAdnB,CAcf;AACA,YAAME,kBAAkBziD,KAfT,eAef;AACA,YAAM0iD,oBAAoBf,WAAWjK,mBAhBtB,CAgBsBA,CAArC;AAEA,YAAIx7B,IAlBW,CAkBf;;AAlBe,oDAmBf,MAnBe;AAAA;;AAAA;AAmBf,iEAA4B;AAAA,gBAA5B,KAA4B;;AAC1B,gBAAI6mC,UAAJ,MAAoB;AAElB7mC,mBAAKimC,gBAFa,WAElBjmC;AAFkB;AAApB,mBAIO,IAAI8mC,iBAAJ,KAAIA,CAAJ,EAAkB;AACvB9mC,mBAAMsmC,qBAAD,QAACA,GADiB,IACvBtmC;AADuB;AALC;;AAU1B,gBAAMgnC,UAAW,+BAAD,CAAC,IAVS,WAU1B;AACA,gBAAMC,YAAYJ,MAXQ,QAW1B;AACA,gBAAIM,OAAJ;AAAA,gBAAaC,OAZa,SAY1B;AACA,gBAAI1+D,QAAQm+D,MAbc,KAa1B;;AACA,0BAAc;AACZ,kBAAIS,EADQ,SACZ;AACA,kBAAMD,UAAUR,iBAFJ,eAEZ;AACAS,mBAAKT,gBAAgBQ,QAAhBR,CAAgBQ,CAAhBR,GAA6Bn+D,QAHtB,GAGZ4+D;AACAA,mBAAK,MAJO,iBAIZA;AACA,kBAAMC,KAAKF,aALC,iBAKZ;AAEA3+D,sBAAQ2+D,UAAU,CAACA,QAAXA,CAAWA,CAAXA,GAPI,KAOZ3+D;AACAy+D,wBAAUG,KARE,aAQZH;AACAC,wBAAW,KAAD,EAAC,IATC,aASZA;AATF,mBAUO;AACLD,wBAAUnnC,IADL,aACLmnC;AACAC,wBAFK,CAELA;AA1BwB;;AA6B1B,gBAAIP,kBAAkB/iD,KAAtB,aAAwC;AACtC03C,mCAAqBA,YADiB,OACtCA;;AACA,4BAAc;AACZA,qCAAqB,CAACA,QAAD,IADT,OACZA;AAHoC;;AAKtCA,2CALsC,SAKtCA;AALF,mBAMO,CAnCmB;;AA0C1B,gBAAIoM,SA1CsB,SA0C1B;;AACA,0BAAc;AACZA,0BAAYl/D,4BAA4Bs+D,UAD5B,aACZY;AADF,mBAEO;AACLA,0BAAYl/D,4BAA4Bs+D,UADnC,aACLY;AA9CwB;;AAiD1B5nC,iBAjD0B,SAiD1BA;AApEa;AAAA;AAAA;AAAA;AAAA;AAAA;;AAsEfw7B,gDAGEA,6BAzEa,GAyEbA,CAHFA;;AAKA,sBAAc;AACZA,kDAGEA,6BAJU,GAIVA,CAHFA;AADF,eAMO;AACLA,kDAAwCopB,GAAG,CAACppB,QADvC,CACmCopB,CAAxCppB;AAlFa;;AAqFf,sBAAc;AACZA,uBADY,CACZA;AADF,eAEO;AACLA,uBAAax7B,IADR,UACLw7B;AAxFa;;AA2FfA,0DAAkDA,QA3FnC,UA2FfA;AACAA,kEAGKopB,GAAGppB,QA/FO,QA+FVopB,CAHLppB;;AAKA,YAAIA,sBAAsBqpB,aAA1B,WAAkD;AAChDrpB,2DAAiDA,QADD,SAChDA;AAlGa;;AAoGf,YAAIA,uBAAuBqpB,aAA3B,YAAoD;AAClDrpB,4DAAkDA,QADA,UAClDA;AArGa;;AAwGf,YAAMkK,iBACJlK,4BAA4BvmD,wBAzGf,gBAwGf;;AAEA,YACEywD,mBAAmBzwD,wBAAnBywD,QACAA,mBAAmBzwD,wBAFrB,aAGE;AACA,cAAIumD,sBAAsBqpB,aAA1B,WAAkD;AAChDrpB,uDAA2CA,QADK,SAChDA;AAFF;;AAIA,cAAIA,oBAAJ,GAA2B;AACzBA,+DAAmDA,QAD1B,SACzBA;AALF;AAHF,eAUO,IAAIA,8BAA8BvmD,wBAAlC,aAAiE;AAGtEumD,qDAHsE,aAGtEA;AAHK,eAIA;AACLA,qDADK,MACLA;AAzHa;;AA4Hf,YACEkK,mBAAmBzwD,wBAAnBywD,UACAA,mBAAmBzwD,wBAFrB,aAGE;AACA,cAAMyyE,iBAAiB,KAAK,2BAD5B,CACuB,CAAvB;;AACA,oCAA0BlsB,QAA1B,OAFA,cAEA;AAjIa;;AAuIf,YAAImsB,aAAansB,QAvIF,UAuIf;;AACA,YAAIA,qBAAJ,GAA4B;AAC1BmsB,uBAAaA,WADa,KACbA,EAAbA;AACAA,2BAAiBnsB,QAFS,QAE1BmsB;AA1Ia;;AA6IfnsB,uEAGKosB,GAAH,UAAGA,CAHLpsB,oBAG6BopB,GAhJd,UAgJcA,CAH7BppB;AAKAA,+DAlJe,UAkJfA;AACAA,uCAA+BA,QAnJhB,KAmJfA;AACAA,mCAA2BA,QApJZ,UAoJfA;;AAEA,iDAAyCA,QAtJ1B,UAsJf;AAjf4B;AAAhCipB;AAAAA;AAAAA,aAofEpkE,kCAAyB;AACvB,wBAAgB,CADO,CACvB;AACA,yBAFuB,CAEvB;AAtf4B;AAAhCokE;AAAAA;AAAAA,aAyfEoD,+BAAsB;AACpB,YAAI,CAAC3iB,QAAL,MAAmB;AACjB,gBAAM,UACJ,2CAFe,6DACX,CAAN;AAFkB;;AAOpB,YAAI,CAAC,KAAL,UAAoB;AAClB,0BAAgB,8BADE,WACF,CAAhB;AACA,qDAFkB,UAElB;AACA,gCAAsB,KAHJ,QAGlB;AAVkB;;AAapB,YAAM/7D,MAAMw9E,2BACVzhB,QADUyhB,MAEVzhB,QAFUyhB,UAGV,KAhBkB,eAaRA,CAAZ;AAKA,qCACE,sCAA8BzhB,QAA9B,yCAnBkB,GAmBlB,WADF;AA3gB4B;AAAhCuf;AAAAA;AAAAA,aAghBExkE,0BAAiB;AACf,YAAMu7C,UAAU,KADD,OACf;AACA,YAAM0J,UAAU,oBAAoB4iB,QAFrB,CAEqBA,CAApB,CAAhB;AACA,YAAIhjD,OAAOgjD,QAHI,CAGJA,CAAX;AACAtsB,uBAJe,OAIfA;;AAEA,YACE,mBACA,CAAC0J,QADD,eAEA,CAAC,mBAAmBA,QAHtB,UAGG,CAHH,EAIE;AACA,4BADA,OACA;AACA,6BAAmBA,QAAnB,cAFA,OAEA;AAZa;;AAcf1J,6BAAqB0J,sBAdN,0BAcf1J;AAEA,YAAI2J,OAhBW,QAgBf;;AACA,YAAID,QAAJ,OAAmB;AACjBC,iBADiB,KACjBA;AADF,eAEO,IAAID,QAAJ,MAAkB;AACvBC,iBADuB,MACvBA;AApBa;;AAsBf,YAAMC,SAASF,4BAtBA,QAsBf;;AAEA,YAAIpgC,OAAJ,GAAc;AACZA,iBAAO,CADK,IACZA;AACA02B,kCAAwB,CAFZ,CAEZA;AAFF,eAGO;AACLA,kCADK,CACLA;AA5Ba;;AA8BfA,2BA9Be,IA8BfA;AACAA,6BAAqB0J,QA/BN,UA+Bf1J;AACAA,6BAhCe,IAgCfA;AACAA,4BAjCe,MAiCfA;AAEAA,wBAAgB,8BAnCD,WAmCC,CAAhBA;AACAA,gDAAwCopB,GAAG,CAACppB,QApC7B,CAoCyBopB,CAAxCppB;AACAA,0BArCe,EAqCfA;AACAA,0BAtCe,EAsCfA;AAtjB4B;AAAhCipB;AAAAA;AAAAA,aAyjBE7kE,mBAAU;AAAA;;AACR,YAAM47C,UAAU,KADR,OACR;;AACA,YACEA,4BAA4BvmD,wBAA5BumD,2CACAA,kBADAA,gDACAA,oBAFF,aAEEA,EAFF,EAGE;AAEAA,4BAAkBA,QAFlB,UAEAA;AACA,oBAHA,SAGA;AACA,eAJA,OAIA;AATM;AAzjBoB;AAAhCipB;AAAAA;AAAAA,aAukBE3mE,6BAAoB;AAClB,YAAIpV,QAAJ,GAAe;AACb,mCADa,KACb;AAFgB;AAvkBU;AAAhC+7E;AAAAA;AAAAA,aA6kBE1mE,2BAAkB;AAChB,+BAAuBskD,gBADP,KACOA,CAAvB;AA9kB4B;AAAhCoiB;AAAAA;AAAAA,aAilBEzmE,4BAAmB;AACjB,gCAAwBskD,iBADP,KACOA,CAAxB;AAllB4B;AAAhCmiB;AAAAA;AAAAA,aAqlBExmE,8BAAqB;AACnB,kCADmB,KACnB;AAtlB4B;AAAhCwmE;AAAAA;AAAAA,aAylBEsD,qCAA4B;AAC1B,mCAD0B,WAC1B;AA1lB4B;AAAhCtD;AAAAA;AAAAA,aA6lBEnjE,oCAA2B;AACzB,mCAA2BkG,8BADF,CACEA,CAA3B;AA9lB4B;AAAhCi9D;AAAAA;AAAAA,aAimBEuD,iCAAwB;AACtB,iCADsB,SACtB;AAlmB4B;AAAhCvD;AAAAA;AAAAA,aAqmBEljE,kCAAyB;AACvB,iCAAyBiG,8BADF,CACEA,CAAzB;AACA,6BAAqB,8BAFE,WAEF,CAArB;AACA,+BAHuB,EAGvB;AACA,+BAJuB,EAIvB;AAzmB4B;AAAhCi9D;AAAAA;AAAAA,aA4mBExjE,+BAAsB;AACpB,mCAA2B,yBADP,IACO,CAA3B;AA7mB4B;AAAhCwjE;AAAAA;AAAAA,aAgnBEtjE,6BAAoB;AAClB,iCAAyB,yBADP,IACO,CAAzB;AAjnB4B;AAAhCsjE;AAAAA;AAAAA,aAonBE/iE,2BAAkB;AAChB,YAAMhZ,QAAQ,cADE,KAChB;AACA,YAAMC,SAAS,cAFC,MAEhB;;AACA,YAAMggE,MAAMnhD,4BAAsB,KAHlB,eAGJA,CAAZ;;AACA,YAAMohD,KAAK,0BAAoB,MAApB,EAJK,GAIL,CAAX;;AACA,YAAMC,KAAK,0BAAoB,WAApB,EALK,GAKL,CAAX;;AACA,YAAMC,KAAK,0BAAoB,UAApB,EANK,GAML,CAAX;;AACA,YAAMC,KAAK,0BAAoB,eAApB,EAPK,GAOL,CAAX;;AACA,YAAMC,KAAK/9D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GARzB,CAQyBA,CAA9B99D,CAAX;AACA,YAAMg+D,KAAKh+D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GATzB,CASyBA,CAA9B99D,CAAX;AACA,YAAMi+D,KAAKj+D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GAVzB,CAUyBA,CAA9B99D,CAAX;AACA,YAAMk+D,KAAKl+D,SAAS29D,GAAT39D,CAAS29D,CAAT39D,EAAgB49D,GAAhB59D,CAAgB49D,CAAhB59D,EAAuB69D,GAAvB79D,CAAuB69D,CAAvB79D,EAA8B89D,GAXzB,CAWyBA,CAA9B99D,CAAX;AAEA,YAAMO,OAAO,8BAbG,UAaH,CAAb;AACAA,uCAdgB,EAchBA;AACAA,uCAfgB,EAehBA;AACAA,2CAAmC09D,KAhBnB,EAgBhB19D;AACAA,4CAAoC29D,KAjBpB,EAiBhB39D;AACAA,0CAAkC,yBAlBlB,IAkBkB,CAAlCA;;AACA,YAAI,yBAAJ,GAAgC;AAC9BA,oDAA0C,aADZ,SAC9BA;AApBc;;AAsBhB,iDAtBgB,IAsBhB;AA1oB4B;AAAhCi5E;AAAAA;AAAAA,aAgpBEwD,mCAA0B;AACxB,YAAI/lD,YAAJ,iBAAiC;AAC/B,iBAAO,wBADwB,IACxB,CAAP;AAFsB;;AAIxB,eAAO,yBAJiB,IAIjB,CAAP;AAppB4B;AAAhCuiD;AAAAA;AAAAA,aA0pBEyD,kCAAyB;AACvB,YAAM5f,QAAQpmC,KADS,CACTA,CAAd;AACA,YAAM4vB,eAAe5vB,KAFE,CAEFA,CAArB;AACA,YAAMknC,SAASlnC,WAHQ,qBAGvB;;AAHuB,oCAIEA,KAJF,CAIEA,CAJF;AAAA,YAIjB,EAJiB;AAAA,YAIjB,EAJiB;AAAA,YAIjB,EAJiB;AAAA,YAIjB,EAJiB;;AAKvB,YAAMguC,QAAQhuC,KALS,CAKTA,CAAd;AACA,YAAMiuC,QAAQjuC,KANS,CAMTA,CAAd;AACA,YAAMkuC,YAAYluC,KAPK,CAOLA,CAAlB;AAEA,YAAMimD,4BAAqBpB,YATJ,EASjBoB,CAAN;;AATuB,mCAUJ,0BAAoB,QAApB,EAVI,MAUJ,CAVI;AAAA;AAAA,YAUjB,GAViB;AAAA,YAUjB,GAViB;;AAAA,oCAWJ,0BAAoB,QAApB,EAXI,MAWJ,CAXI;AAAA;AAAA,YAWjB,GAXiB;AAAA,YAWjB,GAXiB;;AAAA,oCAYE3gE,yCAZF,MAYEA,CAZF;AAAA;AAAA,YAYjB,MAZiB;AAAA,YAYjB,MAZiB;;AAavB,YAAM4gE,SAASlY,QAbQ,MAavB;AACA,YAAMmY,SAASlY,QAdQ,MAcvB;AAEA,YAAMmY,SAAS,8BAhBQ,aAgBR,CAAf;AACAA,0CAjBuB,QAiBvBA;AACAA,oDAlBuB,gBAkBvBA;AACAA,6CAnBuB,MAmBvBA;AACAA,8CApBuB,MAoBvBA;AACAA,mDArBuB,GAqBvBA;AACAA,mDAtBuB,GAsBvBA;AAGA,YAAMn+E,MAAM,KAzBW,GAyBvB;AACA,YAAM88E,kBAAkB,KA1BD,eA0BvB;AACA,YAAMniB,YAAY,aA3BK,SA2BvB;AACA,YAAMH,cAAc,aA5BG,WA4BvB;AAEA,YAAM0E,OAAO,uBAAuBkf,MAAvB,KAAkCC,MA9BxB,GA8BV,CAAb;AACA,mBA/BuB,IA+BvB;AACA,+BAhCuB,MAgCvB;;AACA,YAAIpY,cAAJ,GAAqB;AACnB,cAAMa,WAAWzpD,6DADE,KACFA,EAAjB;;AACA,mCAFmB,QAEnB;AACA,qCAHmB,QAGnB;AApCqB;;AAsCvB,2BAAmB,mBAtCI,YAsCJ,CAAnB;AAGA,mBAzCuB,GAyCvB;AACA,+BA1CuB,eA0CvB;AACA,iCA3CuB,SA2CvB;AACA,mCA5CuB,WA4CvB;AAEA8gE,2BAAmBjf,gBA9CI,CA8CJA,CAAnBif;AACA,8BA/CuB,MA+CvB;AACA,8BAhDuB,QAgDvB;AA1sB4B;AAAhC7D;AAAAA;AAAAA,aAgtBEgE,mCAA0B;AACxB,gBAAQvmD,KAAR,CAAQA,CAAR;AACE;AACE,gBAAMwmD,6BAAsB3B,YAD9B,EACQ2B,CAAN;AACA,gBAAM1c,aAAa9pC,KAFrB,CAEqBA,CAAnB;AACA,gBAHF,QAGE;;AAEA,oBAAQA,KAAR,CAAQA,CAAR;AACE;AACE,oBAAMymD,SAASzmD,KADjB,CACiBA,CAAf;AACA,oBAAM0mD,SAAS1mD,KAFjB,CAEiBA,CAAf;AACA2mD,2BAAW,8BAHb,oBAGa,CAAXA;AACAA,oDAJF,SAIEA;AACAA,+DALF,gBAKEA;AACAA,oDAAoCF,OANtC,CAMsCA,CAApCE;AACAA,oDAAoCF,OAPtC,CAOsCA,CAApCE;AACAA,oDAAoCD,OARtC,CAQsCA,CAApCC;AACAA,oDAAoCD,OATtC,CASsCA,CAApCC;AAVJ;;AAYE;AACE,oBAAMC,aAAa5mD,KADrB,CACqBA,CAAnB;AACA,oBAAM6mD,cAAc7mD,KAFtB,CAEsBA,CAApB;AACA,oBAAM8mD,cAAc9mD,KAHtB,CAGsBA,CAApB;AACA,oBAAM+mD,eAAe/mD,KAJvB,CAIuBA,CAArB;AACA2mD,2BAAW,8BALb,oBAKa,CAAXA;AACAA,oDANF,SAMEA;AACAA,+DAPF,gBAOEA;AACAA,oDAAoCE,YARtC,CAQsCA,CAApCF;AACAA,oDAAoCE,YATtC,CASsCA,CAApCF;AACAA,mDAVF,YAUEA;AACAA,oDAAoCC,WAXtC,CAWsCA,CAApCD;AACAA,oDAAoCC,WAZtC,CAYsCA,CAApCD;AACAA,oDAbF,WAaEA;AAzBJ;;AA2BE;AACE,sBAAM,8CAAuC3mD,KA5BjD,CA4BiDA,CAAvC,EAAN;AA5BJ;;AALF,wDAmCE,UAnCF;AAAA;;AAAA;AAmCE,qEAAoC;AAAA,oBAApC,SAAoC;AAClC,oBAAM/uB,OAAO,8BADqB,UACrB,CAAb;AACAA,oDAAoC+1E,UAFF,CAEEA,CAApC/1E;AACAA,wDAAwC+1E,UAHN,CAGMA,CAAxC/1E;AACA01E,qCAJkC,IAIlCA;AAvCJ;AAAA;AAAA;AAAA;AAAA;AAAA;;AAyCE,kCAzCF,QAyCE;AACA,kCA3CJ,SA2CI;;AACF;AACEh8E,4BADF,4BACEA;AACA,mBA9CJ,IA8CI;;AACF;AACE,mBAhDJ,SAgDI;;AACF;AACE,kBAAM,qCAA8Bq1B,KAlDxC,CAkDwCA,CAA9B,EAAN;AAlDJ;AAjtB4B;AAAhCuiD;AAAAA;AAAAA,aAuwBEvmE,uCAA8B;AAC5B,iCAD4B,SAC5B;AACA,iCAF4B,SAE5B;AAzwB4B;AAAhCumE;AAAAA;AAAAA,aA4wBElhE,kCAAyB;AACvB,YAAMi4C,UAAU,KADO,OACvB;AACA,YAAIx7B,IAAIw7B,QAAR;AAAA,YACE+F,IAAI/F,QAHiB,CAEvB;AAEA,YAAIl0C,IAJmB,EAIvB;AACA,YAAI22C,IALmB,CAKvB;;AALuB,oDAOvB,GAPuB;AAAA;;AAAA;AAOvB,iEAAsB;AAAA,gBAAtB,EAAsB;;AACpB,oBAAQkrB,KAAR;AACE,mBAAKvrE,UAAL;AACEoiB,oBAAIkC,KAAK+7B,CADX,EACM/7B,CAAJlC;AACAuhC,oBAAIr/B,KAAK+7B,CAFX,EAEM/7B,CAAJq/B;AACA,oBAAM74D,QAAQw5B,KAAK+7B,CAHrB,EAGgB/7B,CAAd;AACA,oBAAMv5B,SAASu5B,KAAK+7B,CAJtB,EAIiB/7B,CAAf;AACA,oBAAMsiC,KAAKxkC,IALb,KAKE;AACA,oBAAMykC,KAAKlD,IANb,MAME;AACAj6C,4BAEEs9D,GAFFt9D,CAEEs9D,CAFFt9D,EAGEs9D,GAHFt9D,CAGEs9D,CAHFt9D,OAKEs9D,GALFt9D,EAKEs9D,CALFt9D,EAMEs9D,GANFt9D,CAMEs9D,CANFt9D,OAQEs9D,GARFt9D,EAQEs9D,CARFt9D,EASEs9D,GATFt9D,EASEs9D,CATFt9D,OAWEs9D,GAXFt9D,CAWEs9D,CAXFt9D,EAYEs9D,GAZFt9D,EAYEs9D,CAZFt9D,EAPF,GAOEA;AARJ;;AAwBE,mBAAK1J,UAAL;AACEoiB,oBAAIkC,KAAK+7B,CADX,EACM/7B,CAAJlC;AACAuhC,oBAAIr/B,KAAK+7B,CAFX,EAEM/7B,CAAJq/B;AACAj6C,4BAAYs9D,GAAZt9D,CAAYs9D,CAAZt9D,EAAmBs9D,GAHrB,CAGqBA,CAAnBt9D;AA3BJ;;AA6BE,mBAAK1J,UAAL;AACEoiB,oBAAIkC,KAAK+7B,CADX,EACM/7B,CAAJlC;AACAuhC,oBAAIr/B,KAAK+7B,CAFX,EAEM/7B,CAAJq/B;AACAj6C,4BAAYs9D,GAAZt9D,CAAYs9D,CAAZt9D,EAAmBs9D,GAHrB,CAGqBA,CAAnBt9D;AAhCJ;;AAkCE,mBAAK1J,UAAL;AACEoiB,oBAAIkC,KAAK+7B,IADX,CACM/7B,CAAJlC;AACAuhC,oBAAIr/B,KAAK+7B,IAFX,CAEM/7B,CAAJq/B;AACAj6C,4BAEEs9D,GAAG1iD,KAFL5a,CAEK4a,CAAH0iD,CAFFt9D,EAGEs9D,GAAG1iD,KAAK+7B,IAHV32C,CAGK4a,CAAH0iD,CAHFt9D,EAIEs9D,GAAG1iD,KAAK+7B,IAJV32C,CAIK4a,CAAH0iD,CAJFt9D,EAKEs9D,GAAG1iD,KAAK+7B,IALV32C,CAKK4a,CAAH0iD,CALFt9D,EAMEs9D,GANFt9D,CAMEs9D,CANFt9D,EAOEs9D,GAVJ,CAUIA,CAPFt9D;AASA22C,qBAZF,CAYEA;AA9CJ;;AAgDE,mBAAKrgD,UAAL;AACE0J,4BAEEs9D,GAFFt9D,CAEEs9D,CAFFt9D,EAGEs9D,GAHFt9D,CAGEs9D,CAHFt9D,EAIEs9D,GAAG1iD,KAJL5a,CAIK4a,CAAH0iD,CAJFt9D,EAKEs9D,GAAG1iD,KAAK+7B,IALV32C,CAKK4a,CAAH0iD,CALFt9D,EAMEs9D,GAAG1iD,KAAK+7B,IANV32C,CAMK4a,CAAH0iD,CANFt9D,EAOEs9D,GAAG1iD,KAAK+7B,IARZ,CAQO/7B,CAAH0iD,CAPFt9D;AASA0Y,oBAAIkC,KAAK+7B,IAVX,CAUM/7B,CAAJlC;AACAuhC,oBAAIr/B,KAAK+7B,IAXX,CAWM/7B,CAAJq/B;AACAtD,qBAZF,CAYEA;AA5DJ;;AA8DE,mBAAKrgD,UAAL;AACEoiB,oBAAIkC,KAAK+7B,IADX,CACM/7B,CAAJlC;AACAuhC,oBAAIr/B,KAAK+7B,IAFX,CAEM/7B,CAAJq/B;AACAj6C,4BAEEs9D,GAAG1iD,KAFL5a,CAEK4a,CAAH0iD,CAFFt9D,EAGEs9D,GAAG1iD,KAAK+7B,IAHV32C,CAGK4a,CAAH0iD,CAHFt9D,EAIEs9D,GAJFt9D,CAIEs9D,CAJFt9D,EAKEs9D,GALFt9D,CAKEs9D,CALFt9D,EAMEs9D,GANFt9D,CAMEs9D,CANFt9D,EAOEs9D,GAVJ,CAUIA,CAPFt9D;AASA22C,qBAZF,CAYEA;AA1EJ;;AA4EE,mBAAKrgD,UAAL;AACE0J,uBADF,GACEA;AA7EJ;AAAA;AARqB;AAAA;AAAA;AAAA;AAAA;AAAA;;AA0FvBA,YAAIA,OA1FmB,GA0FnBA,CAAJA;;AAEA,YACEk0C,gBACA+I,aADA/I,KAEA+I,WAAW3mD,UAFX49C,aAGA+I,WAAW3mD,UAJb,QAKE;AAIA0J,cAAIk0C,yCAJJ,CAIAl0C;AATF,eAUO;AACLk0C,yBAAe,8BADV,UACU,CAAfA;;AACA,mDAAyCA,QAFpC,IAEL;AAxGqB;;AA2GvBA,+CA3GuB,CA2GvBA;AACAA,kDA5GuB,MA4GvBA;AAIAA,0BAAkBA,QAhHK,IAgHvBA;AACAA,mCAjHuB,CAiHvBA;AA73B4B;AAAhCipB;AAAAA;AAAAA,aAg4BEjlE,mBAAU;AACR,YAAMg8C,UAAU,KADR,OACR;AAGAA,uBAJQ,IAIRA;;AAEA,YAAI,CAAC,KAAL,aAAuB;AAAA;AANf;;AASR,YAAI,CAACA,QAAL,SAAsB;AACpB,6BADoB,IACpB;AADoB;AATd;;AAeR,YAAM4tB,2BAAoBvC,SAflB,EAeFuC,CAAN;AACA,YAAMC,WAAW,8BAhBT,cAgBS,CAAjB;AACAA,4CAjBQ,MAiBRA;AACAA,mDAA2CzB,GAAG,KAlBtC,eAkBmCA,CAA3CyB;AAGA,YAAMC,cAAc9tB,0BArBZ,IAqBYA,CAApB;;AACA,YAAI,qBAAJ,WAAoC;AAClC8tB,wDADkC,SAClCA;AADF,eAEO;AACLA,wDADK,SACLA;AAzBM;;AA2BR,2BA3BQ,IA2BR;AACAD,6BA5BQ,WA4BRA;AACA,8BA7BQ,QA6BR;;AAEA,YAAI7tB,QAAJ,eAA2B;AAGzBA,8BAHyB,IAGzBA;AACA,kCAAwB,gBAAgB;AACtCyB,6BADsC,IACtCA;AALuB,WAIzB;AAIAosB,qDAA2C7tB,QARlB,aAQzB6tB;AAvCM;;AAyCR7tB,+CAzCQ,MAyCRA;AAEA,oBA3CQ,IA2CR;AA36B4B;AAAhCipB;AAAAA;AAAAA,aA86BEhlE,oBAAW;AACT,2BADS,IACT;AA/6B4B;AAAhCglE;AAAAA;AAAAA,aAk7BE3lE,qBAAY;AACV,YAAM08C,UAAU,KADN,OACV;;AACA,YAAIA,QAAJ,MAAkB;AAChB,cAAMl0C,cAAOk0C,kCADG,GACHA,CAAPl0C,MAAN;AACAk0C,iDAFgB,CAEhBA;AAJQ;AAl7BkB;AAAhCipB;AAAAA;AAAAA,aA07BEzkE,6BAAoB;AAClB,+BAAuB,CADL,OAClB;AA37B4B;AAAhCykE;AAAAA;AAAAA,aA87BEtkE,+BAAsB;AACpB,gCADoB,QACpB;AA/7B4B;AAAhCskE;AAAAA;AAAAA,aAk8BEvkE,iDAAwC;AACtC,yCADsC,iBACtC;AAn8B4B;AAAhCukE;AAAAA;AAAAA,aAs8BE1kE,0BAAiB;AACf,kCAA0B3U,QADX,GACf;AAv8B4B;AAAhCq5E;AAAAA;AAAAA,aA08BEtmE,oCAA2B,CA18BG;AAAhCsmE;AAAAA;AAAAA,aA88BErmE,+BAAsB,CA98BQ;AAAhCqmE;AAAAA;AAAAA,aAk9BEpmE,2BAAkB;AAAA,oDAChB,MADgB;AAAA;;AAAA;AAChB,iEAAmC;AAAA;AAAA,gBAAxB,GAAwB;AAAA,gBAAnC,KAAmC;;AACjC;AACE;AACE,kCADF,KACE;AAFJ;;AAIE;AACE,gCADF,KACE;AALJ;;AAOE;AACE,iCADF,KACE;AARJ;;AAUE;AACE,mCADF,KACE;AAXJ;;AAaE;AACE,6BAAa9O,MAAb,CAAaA,CAAb,EAAuBA,MADzB,CACyBA,CAAvB;AAdJ;;AAgBE;AACE,wCADF,KACE;AAjBJ;;AAmBE;AACE,iCADF,KACE;AApBJ;;AAsBE;AACE,6BADF,KACE;AAvBJ;;AAyBE;AACE,oCADF,KACE;AA1BJ;;AA4BE;AACE,kCADF,KACE;AA7BJ;;AA+BE;AACE1C,+EADF,GACEA;AAhCJ;AAAA;AAFc;AAAA;AAAA;AAAA;AAAA;AAAA;AAl9BY;AAAhC43E;AAAAA;AAAAA,aA0/BEvlE,gBAAO;AACL,YAAMs8C,UAAU,KADX,OACL;;AACA,YAAIA,QAAJ,SAAqB;AACnBA,uDAA6CA,QAD1B,SACnBA;AACAA,+DAAqDA,QAFlC,SAEnBA;AACA,eAHmB,OAGnB;AALG;AA1/BuB;AAAhCipB;AAAAA;AAAAA,aAmgCEzlE,kBAAS;AACP,YAAMw8C,UAAU,KADT,OACP;;AACA,YAAIA,QAAJ,SAAqB;AACnB,oCAA0BA,QADP,OACnB;;AACAA,uDAFmB,MAEnBA;AACA,eAHmB,OAGnB;AALK;AAngCqB;AAAhCipB;AAAAA;AAAAA,aA+gCE8E,uCAAkD;AAAA,YAApB7B,cAAoB,uEAAlD6B,CAAkD;AAChD,YAAM/tB,UAAU,KADgC,OAChD;AACA,YAAIguB,YAAYhuB,QAFgC,SAEhD;;AACA,YAAIksB,wBAAwB8B,mBAA5B,GAAkD;AAChDA,sBAAY,cAAc,iBAAiB;AACzC,mBAAO9B,iBADkC,KACzC;AAF8C,WACpC,CAAZ8B;AAJ8C;;AAQhD9/C,+CAAuC8xB,QARS,WAQhD9xB;AACAA,uDAA+C8xB,QATC,WAShD9xB;AACAA,0DAAkDk7C,GAAGppB,QAVL,UAUEopB,CAAlDl7C;AACAA,uDAA+C8xB,QAXC,OAWhD9xB;AACAA,wDAAgD8xB,QAZA,QAYhD9xB;AACAA,qDAGEk7C,GAAG8C,iBAAiBlsB,QAApBopB,aAhB8C,IAahDl7C;AAKAA,yDAGE8/C,uBArB8C,GAqB9CA,CAHF9/C;AAKAA,0DAGEk7C,GAAG8C,iBAAiBlsB,QAApBopB,aA1B8C,IAuBhDl7C;AAtiC4B;AAAhC+6C;AAAAA;AAAAA,aA6iCEtlE,kBAAS;AACP,YAAI,aAAJ,SAA0B;AACxB,iEADwB,SACxB;AAFK;;AAIP,aAJO,IAIP;AAjjC4B;AAAhCslE;AAAAA;AAAAA,aAojCErlE,sBAAa;AAGX,aAHW,MAGX;AACA,aAJW,IAIX;AAxjC4B;AAAhCqlE;AAAAA;AAAAA,aA2jCEplE,wBAAe;AACb,YAAI,aAAJ,SAA0B;AACxB,iEADwB,SACxB;AAFW;;AAIb,aAJa,UAIb;AA/jC4B;AAAhColE;AAAAA;AAAAA,aAkkCExlE,uBAAc;AACZ,aADY,SACZ;AACA,aAFY,MAEZ;AApkC4B;AAAhCwlE;AAAAA;AAAAA,aAukCEnlE,2BAAkB;AAChB,aADgB,SAChB;AACA,aAFgB,UAEhB;AAzkC4B;AAAhCmlE;AAAAA;AAAAA,aA4kCEllE,6BAAoB;AAClB,aADkB,SAClB;AACA,aAFkB,YAElB;AA9kC4B;AAAhCklE;AAAAA;AAAAA,aAilCEnhE,oCAA2B;AACzB,YAAM9X,OAAO,8BADY,UACZ,CAAb;AACAA,uCAFyB,GAEzBA;AACAA,uCAHyB,GAGzBA;AACAA,2CAJyB,KAIzBA;AACAA,4CALyB,KAKzBA;AACAA,0CAAkC,aANT,SAMzBA;;AAEA,iDARyB,IAQzB;AAzlC4B;AAAhCi5E;AAAAA;AAAAA,aA4lCExhE,kCAAyB;AACvB,YAAMw6C,UAAU2M,yBACZ,oBADYA,KACZ,CADYA,GAEZ,cAHmB,KAGnB,CAFJ;;AAGA,YAAI,CAAJ,SAAc;AACZv9D,mEADY,KACZA;AADY;AAJS;;AAQvB,qCARuB,OAQvB;AApmC4B;AAAhC43E;AAAAA;AAAAA,aAumCEvhE,gDAAuC;AACrC,YAAMxa,QAAQ+0D,QADuB,KACrC;AACA,YAAM90D,SAAS80D,QAFsB,MAErC;AAEA,YAAMgsB,SAASvE,6BAA6B,KAA7BA,iBAAmD,CAAC,CAJ9B,IAItBA,CAAf;AACA,YAAMwE,WAAW,8BALoB,UAKpB,CAAjB;AACAA,2CANqC,GAMrCA;AACAA,2CAPqC,GAOrCA;AACAA,+CAAuC9E,GARF,KAQEA,CAAvC8E;AACAA,gDAAwC9E,GATH,MASGA,CAAxC8E;AACA,+BAVqC,QAUrC;AACA,kBAXqC,SAWrC;AAEA,YAAMC,QAAQ,8BAbuB,WAavB,CAAd;AACAA,qDAdqC,MAcrCA;AACAA,wCAfqC,GAerCA;AACAA,wCAAgC/E,GAAG,CAhBE,MAgBLA,CAAhC+E;AACAA,4CAAoC/E,YAjBC,IAiBrC+E;AACAA,6CAAqC/E,aAlBA,IAkBrC+E;AACAA,gEAGW/E,GAAG,IAAZ,KAASA,CAHX+E,cAG4B/E,GAAG,KAtBM,MAsBTA,CAH5B+E;;AAKA,kBAAU;AACR3rB,2BADQ,KACRA;AADF,eAEO;AACL,mDADK,KACL;AA3BmC;AAvmCT;AAAhCymB;AAAAA;AAAAA,aAsoCE1hE,wCAA+B;AAC7B,YAAMy4C,UAAU,KADa,OAC7B;AACA,YAAM9yD,QAAQ+0D,QAFe,KAE7B;AACA,YAAM90D,SAAS80D,QAHc,MAG7B;AACA,YAAMqH,YAAYtJ,QAJW,SAI7B;AAEAA,uCAAwBsrB,SANK,EAM7BtrB;AACA,YAAMwC,OAAO,8BAPgB,UAOhB,CAAb;AACAA,wCAAgCxC,QARH,MAQ7BwC;AAEA,YAAMxyD,OAAO,8BAVgB,UAUhB,CAAb;AACAA,uCAX6B,GAW7BA;AACAA,uCAZ6B,GAY7BA;AACAA,2CAAmCo5E,GAbN,KAaMA,CAAnCp5E;AACAA,4CAAoCo5E,GAdP,MAcOA,CAApCp5E;AACAA,0CAf6B,SAe7BA;AACAA,yDAA0CgwD,QAhBb,MAgB7BhwD;AAEA,8BAlB6B,IAkB7B;;AACA,iDAnB6B,IAmB7B;;AAEA,8CArB6B,IAqB7B;AA3pC4B;AAAhCi5E;AAAAA;AAAAA,aA8pCEniE,6CAAoC;AAClC,YAAIwE,yBAAyBsiD,kBAA7B,GAAkD;AAChD,yBACEA,OADF,CACEA,CADF,EAEEA,OAFF,CAEEA,CAFF,EAGEA,OAHF,CAGEA,CAHF,EAIEA,OAJF,CAIEA,CAJF,EAKEA,OALF,CAKEA,CALF,EAMEA,OAP8C,CAO9CA,CANF;AAFgC;;AAYlC,kBAAU;AACR,cAAM1gE,QAAQ2gE,UAAUA,KADhB,CACgBA,CAAxB;AACA,cAAM1gE,SAAS0gE,UAAUA,KAFjB,CAEiBA,CAAzB;AAEA,cAAMqgB,WAAW,8BAJT,UAIS,CAAjB;AACAA,6CAAmCrgB,KAL3B,CAK2BA,CAAnCqgB;AACAA,6CAAmCrgB,KAN3B,CAM2BA,CAAnCqgB;AACAA,iDAAuC9E,GAP/B,KAO+BA,CAAvC8E;AACAA,kDAAwC9E,GARhC,MAQgCA,CAAxC8E;AACA,iCATQ,QASR;AACA,oBAVQ,SAUR;AACA,eAXQ,OAWR;AAvBgC;AA9pCN;AAAhCjF;AAAAA;AAAAA,aAyrCEliE,+BAAsB,CAzrCQ;AAAhCkiE;AAAAA;AAAAA,aA8rCE3vB,+BAAsB;AACpB,YAAM3qD,MAAM,uBAAuBwnD,SAAvB,OAAuCA,SAD/B,MACR,CAAZ;AAGA,YAAMi4B,cAAc,8BAJA,UAIA,CAApB;AACAz/E,wBALoB,WAKpBA;AACA,oBANoB,WAMpB;AAIA,YAAM0/E,YAAY,8BAVE,OAUF,CAAlB;AACAA,oDAA4CjC,GAAGj2B,SAX3B,SAWwBi2B,CAA5CiC;AACA1/E,wBAZoB,SAYpBA;AAKA,mBAjBoB,SAiBpB;AAEA,eAnBoB,GAmBpB;AAjtC4B;AAAhCs6E;AAAAA;AAAAA,aAutCEqF,4BAAmB;AACjB,YAAI,CAAC,aAAL,WAA6B;AAC3B,cAAMC,YAAY,8BADS,OACT,CAAlB;AACAA,sDAA4C,aAFjB,aAE3BA;AACA,+BAH2B,SAG3B;AACA,mCAJ2B,SAI3B;AALe;;AAOjB,eAAO,aAPU,SAOjB;AA9tC4B;AAAhCtF;AAAAA;AAAAA,aAouCEuF,iCAAwB;AACtB,YAAI,CAAC,KAAL,MAAgB;AACd,sBAAY,8BADE,OACF,CAAZ;AACA,sDAA4CpC,GAAG,KAFjC,eAE8BA,CAA5C;;AACA,cAAI,aAAJ,eAAgC;AAC9B,gDAAoC,KADN,IAC9B;AADF,iBAEO;AACL,iCAAqB,KADhB,IACL;AANY;AADM;;AAUtB,eAAO,KAVe,IAUtB;AA9uC4B;AAAhCnD;;AAAAA;AAAAA;AAzbF,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICeA,Q;;;;;;;WACE,oCAAkC;AAChC,yCAA2Bt3E,eAA3B,KAA2BA,CAA3B,qCAAkD;AAAA;AAAA,YAAvC,GAAuC;AAAA,YAAlD,KAAkD;;AAChD,YAAIoC,kBAAkBA,UAAtB,WAA2C;AAAA;AADK;;AAKhD,YAAIsD,QAAJ,SAAqB;AACnBoiB,iCADmB,KACnBA;AADF,eAEO;AACL9nB,wBAAc8nB,KAAd9nB,OADK,KACLA;AAR8C;AADlB;AADrB;;;WAeb,4BAA0B;AACxB,UAAM88E,OAAOrS,WADW,GACxB;AACA,UAAMsS,WAAWxgF,uBAAuBugF,KAFhB,IAEPvgF,CAAjB;;AACA,UAAIugF,KAAJ,YAAqB;AACnBE,yCAAiCF,KADd,UACnBE;AAJsB;;AAMxB,UAAMC,QAAQ,CAAC,OAAO,CAAP,YAAD,CAAd;AAEA,UAAMC,UAAUzS,WARQ,GAQxB;AACAyS,0BATwB,QASxBA;AACA,UAAMC,SAAS1S,mCAVS,GAUTA,CAAf;AACAyS,iDAXwB,MAWxBA;AAGAA,oCAdwB,kBAcxBA;;AAEA,aAAOD,eAAP,GAAyB;AAAA,oCACGA,MAAMA,eADT,CACGA,CADH;AAAA,YACjB,MADiB;AAAA,YACjB,CADiB;AAAA,YACjB,IADiB;;AAEvB,YAAI79E,UAAUgzB,gBAAd,QAAsC;AACpC6qD,gBADoC,GACpCA;AADoC;AAFf;;AAOvB,YAAMG,QAAQhrD,gBAAgB,EAAE6qD,MAAMA,eAANA,GAPT,CAOSA,CAAlB7qD,CAAd;;AACA,YAAIgrD,UAAJ,MAAoB;AAAA;AARG;;AAAA,YAYjB,IAZiB,SAYjB,IAZiB;;AAavB,YAAIl9E,SAAJ,SAAsB;AACpB4nB,2BAAiBvrB,wBAAwB6gF,MADrB,KACH7gF,CAAjBurB;AADoB;AAbC;;AAkBvB,YAAMu1D,YAAY9gF,uBAlBK,IAkBLA,CAAlB;AACAurB,yBAnBuB,SAmBvBA;;AACA,YAAIs1D,MAAJ,YAAsB;AACpBJ,4CAAkCI,MADd,UACpBJ;AArBqB;;AAwBvB,YAAII,kBAAkBA,wBAAtB,GAAiD;AAC/CH,qBAAW,QAAQ,CAAR,aAAXA;AADF,eAEO,IAAIG,MAAJ,OAAiB;AACtBC,gCAAsB9gF,wBAAwB6gF,MADxB,KACA7gF,CAAtB8gF;AA3BqB;AAhBD;AAfb;;;WAsEb,4BAA0B;AACxB,UAAMhsE,6BAAsBo5D,mCADJ,GACIA,CAAtBp5D,MAAN;AACAo5D,uCAFwB,SAExBA;AACAA,8BAHwB,KAGxBA;AAzEW;;;;;;;;;;;;;;;;;;;;;;;;ACCf;;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAtBA;;AAiCA,IAAM/b,KAAKD,QAjCX,IAiCWA,CAAX;;AACA,IAAM6uB,OAAO7uB,QAlCb,MAkCaA,CAAb;;AACA,IAAM8uB,QAAQ9uB,QAnCd,OAmCcA,CAAd;;AACA,IAAMzyD,MAAMyyD,QApCZ,KAoCYA,CAAZ;;AAEA,IAAM+uB,eAtCN,yBAsCA;;AAEA,6BAA6B;AAC3B,MAAMC,YAAYzhF,UADS,SACTA,CAAlB;;AACA,MAAIyhF,kCAAkCA,UAAtC,MAAsD;AACpD,WADoD,SACpD;AAHyB;;AAM3B,MAAI,qBAAJ,SAAI,CAAJ,EAAqC;AACnC,WAAOzhF,4BAD4B,SAC5BA,EAAP;AAPyB;;AAU3B,MAAI,CAACyhF,UAAL,MAAqB;AACnBA,yBADmB,OACnBA;AAXyB;;AAa3B,SAb2B,SAa3B;AArDF;;IAwDA,a;AACEviF,iCAAoB;AAAA;;AAClB,kBADkB,MAClB;AACA,eAAWwiF,SAAS3/D,OAFF,GAEP2/D,CAAX;AACA,kBACE,iCAAiC,sBAJjB,QAGlB;AAGA,mBAAe,sBANG,OAMlB;AACA,uBAAoB,eAAe3/D,OAAhB,WAAC,IAPF,EAOlB;AAEA,8BATkB,IASlB;AACA,gCAVkB,EAUlB;AAXgB;;;;SAclB,eAA6B;AAAA;;AAC3B,gEAAO,uBAAP,2DAAO,8BAAP,yEAD2B,CAC3B;AAfgB;;;WAkBlBspD,yBAAgB;AACdtqE,wBACE,CAAC,KADHA,oBADc,sDACdA;AAIA,gCAA0B,eACtB,8BADsB,IACtB,CADsB,GAEtB,4BAPU,IAOV,CAFJ;AAGA,aAAO,KARO,kBAQd;AA1BgB;;;WA6BlBwqE,oCAA2B;AACzB,UAAIhoE,OAAO,KAAX,wBAAwC;AACtC,eADsC,IACtC;AAFuB;;AAIzB,UAAMiqD,cAAc,eAChB,4CADgB,GAChB,CADgB,GAEhB,0CANqB,GAMrB,CAFJ;;AAGA,qCAPyB,WAOzB;;AACA,aARyB,WAQzB;AArCgB;;;WAwClBge,mCAA0B;AACxB,UAAI,KAAJ,oBAA6B;AAC3B,uCAD2B,MAC3B;AAFsB;;AAKxB,UAAMC,UAAU,gCALQ,CAKR,CAAhB;;AACAA,sBAAgB,kBAAkB;AAChCnqC,sBADgC,MAChCA;AAPsB,OAMxBmqC;AA9CgB;;;;;;;;IAoDpB,c;AACEvsE,kCAAoB;AAAA;;AAClB,gBAAYqiC,OADM,GAClB;AACA,iBAFkB,KAElB;AACA,wBAHkB,IAGlB;AACA,sBAJkB,IAIlB;AACA,QAAMxf,SAASwf,OALG,MAKlB;AACA,0BAAsBxf,OANJ,MAMlB;AACA,mBAPkB,CAOlB;AACA,qBARkB,IAQlB;AAEA,yBAAqBA,uBAVH,KAUlB;AACA,2BAAuBA,OAXL,cAWlB;;AACA,QAAI,CAAC,KAAD,mBAAyB,CAAC,KAA9B,eAAkD;AAChD,2BADgD,IAChD;AAbgB;;AAgBlB,iCAA6B,CAACA,OAhBZ,aAgBlB;AACA,6BAAyB,CAACA,OAjBR,YAiBlB;AAEA,2BAnBkB,IAmBlB;AACA,2BApBkB,oCAoBlB;AACA,8BArBkB,oCAqBlB;AAtBiB;;;;SAyBnB,eAAmB;AACjB,aAAO,wBADU,OACjB;AA1BiB;;;SA6BnB,eAAe;AACb,aAAO,KADM,SACb;AA9BiB;;;SAiCnB,eAAoB;AAClB,aAAO,KADW,cAClB;AAlCiB;;;SAqCnB,eAAuB;AACrB,aAAO,KADc,iBACrB;AAtCiB;;;SAyCnB,eAA2B;AACzB,aAAO,KADkB,qBACzB;AA1CiB;;;;+EA6CnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACQ,qBADK,OAAb;;AAAA;AAAA,qBAEM,KAAJ,KAFF;AAAA;AAAA;AAAA;;AAAA,iDAGW;AAAE3b,yBAAF;AAAoBgD,wBAApB;AAAA,iBAHX;;AAAA;AAAA,qBAKM,KAAJ,YALF;AAAA;AAAA;AAAA;;AAAA,sBAMU,KADe,YALzB;;AAAA;AASQuT,qBATR,GASgB,qBATH,IASG,EAThB;;AAAA,sBAUMA,UAAJ,IAVF;AAAA;AAAA;AAAA;;AAWI,uCADkB,oCAClB;AAXJ,iDAYW,KAFW,IAEX,EAZX;;AAAA;AAcE,gCAAgBA,MAdL,MAcX;;AACA,oBAAI,KAAJ,YAAqB;AACnB,kCAAgB;AACdowC,4BAAQ,KADM;AAEdC,2BAAO,KAFO;AAAA,mBAAhB;AAhBS;;AAsBL/sC,sBAtBR,GAsBiB,sBAtBJ,MAAb;AAAA,iDAuBS;AAAE7Z,yBAAF;AAAiBgD,wBAAjB;AAAA,iBAvBT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WA0BA07B,wBAAe;AAGb,UAAI,CAAC,KAAL,iBAA2B;AACzB,oBADyB,MACzB;;AADyB;AAHd;;AAOb,mCAPa,MAOb;AA9EiB;;;WAiFnB68C,wBAAe;AACb,0BADa,MACb;;AACA,2BAFa,OAEb;AAnFiB;;;WAsFnBC,4CAAmC;AAAA;;AACjC,6BADiC,cACjC;AACAn4B,oCAA8B,YAAM;AAClC,8BADkC,OAClC;AAH+B,OAEjCA;AAIAA,+BAAyB,YAAM;AAE7BA,uBAF6B,OAE7BA;AACA,sBAH6B,IAG7B;;AACA,8BAJ6B,OAI7B;AAV+B,OAMjCA;AAOAA,iCAA2BtpD,kBAAU;AACnC,qBADmC,MACnC;AAd+B,OAajCspD;;AAMA,UAAI,CAAC,KAAD,yBAA+B,KAAnC,mBAA2D;AACzD,oBAAY,yBAD6C,uBAC7C,CAAZ;AApB+B;;AAwBjC,UAAI,KAAJ,cAAuB;AACrB,qCAA6B,KADR,YACrB;AAzB+B;AAtFhB;;;;;;IAoHrB,e;AACEvqD,mCAAoB;AAAA;;AAClB,gBAAYqiC,OADM,GAClB;AACA,iBAFkB,KAElB;AACA,wBAHkB,IAGlB;AACA,sBAJkB,IAIlB;AACA,mBALkB,CAKlB;AACA,2BANkB,IAMlB;AACA,2BAPkB,oCAOlB;AACA,QAAMxf,SAASwf,OARG,MAQlB;AACA,iCAA6B,CAACxf,OATZ,aASlB;AAVkB;;;;SAapB,eAA2B;AACzB,aAAO,KADkB,qBACzB;AAdkB;;;;gFAiBpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACQ,qBADK,OAAb;;AAAA;AAAA,qBAEM,KAAJ,KAFF;AAAA;AAAA;AAAA;;AAAA,kDAGW;AAAE3b,yBAAF;AAAoBgD,wBAApB;AAAA,iBAHX;;AAAA;AAAA,qBAKM,KAAJ,YALF;AAAA;AAAA;AAAA;;AAAA,sBAMU,KADe,YALzB;;AAAA;AASQuT,qBATR,GASgB,qBATH,IASG,EAThB;;AAAA,sBAUMA,UAAJ,IAVF;AAAA;AAAA;AAAA;;AAWI,uCADkB,oCAClB;AAXJ,kDAYW,KAFW,IAEX,EAZX;;AAAA;AAcE,gCAAgBA,MAdL,MAcX;;AACA,oBAAI,KAAJ,YAAqB;AACnB,kCAAgB;AAAEowC,4BAAQ,KADP;AACH,mBAAhB;AAhBS;;AAmBL9sC,sBAnBR,GAmBiB,sBAnBJ,MAAb;AAAA,kDAoBS;AAAE7Z,yBAAF;AAAiBgD,wBAAjB;AAAA,iBApBT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAuBA07B,wBAAe;AAGb,UAAI,CAAC,KAAL,iBAA2B;AACzB,oBADyB,MACzB;;AADyB;AAHd;;AAOb,mCAPa,MAOb;AA/CkB;;;WAkDpB68C,wBAAe;AACb,0BADa,MACb;;AACA,2BAFa,OAEb;AApDkB;;;WAuDpBC,4CAAmC;AAAA;;AACjC,6BADiC,cACjC;AACAn4B,oCAA8B,YAAM;AAClC,+BADkC,OAClC;AAH+B,OAEjCA;AAIAA,+BAAyB,YAAM;AAE7BA,uBAF6B,OAE7BA;AACA,uBAH6B,IAG7B;;AACA,+BAJ6B,OAI7B;AAV+B,OAMjCA;AAOAA,iCAA2BtpD,kBAAU;AACnC,sBADmC,MACnC;AAd+B,OAajCspD;;AAKA,UAAI,KAAJ,cAAuB;AACrB,qCAA6B,KADR,YACrB;AAnB+B;AAvDf;;;;;;AA+EtB,kDAAkD;AAChD,SAAO;AACL9kD,cAAU88E,UADL;AAELI,UAAMJ,UAFD;AAGL3oD,UAAM2oD,UAHD;AAILjpD,UAAMipD,UAJD;AAKLt5D,UAAMs5D,UALD;AAML14E,YANK;AAOL+4E,WAPK,EAOLA;AAPK,GAAP;AAhTF;;IA2TA,uB;;;;;AACE5iF,2CAAoB;AAAA;;AAAA;;AAClB,+BADkB,MAClB;;AAEA,QAAM6iF,iBAAiBvhF,SAAjBuhF,cAAiBvhF,WAAY;AACjC,UAAIA,wBAAJ,KAAiC;AAC/B,YAAMmjB,QAAQ,sDAAwC,OADvB,IACjB,SAAd;AACA,8BAF+B,KAE/B;;AACA,yCAH+B,KAG/B;;AAH+B;AADA;;AAOjC,gCAPiC,OAOjC;;AACA,gCARiC,QAQjC;;AAEA,UAAMq+D,oBAAoB99E,SAApB89E,iBAAoB99E,OAAQ;AAGhC,eAAO,+BAA6BA,KAHJ,WAGIA,EAA7B,CAAP;AAb+B,OAUjC;;AAViC,kCAkB7B,qDAAiC;AACnC89E,yBADmC,EACnCA,iBADmC;AAEnCC,gBAAQ1gD,OAF2B;AAGnCmiB,wBAAgB,OAHmB;AAInCJ,sBAAc,OAJqB;AAAA,OAAjC,CAlB6B;AAAA,UAe3B,kBAf2B,yBAe3B,kBAf2B;AAAA,UAe3B,eAf2B,yBAe3B,eAf2B;;AAyBjC,iCAzBiC,kBAyBjC;AAEA,8BAAsB4+B,mBAAmB,OA3BR,cA2BjC;AAEA,yBAAiBC,8CA7BgB,iBA6BhBA,CAAjB;AAhCgB,KAGlB;;AAgCA,sBAnCkB,IAmClB;;AACA,QAAI,yBAAJ,SAAoC;AAClC,wBAAgBb,aACdc,qBAAqB,OAArBA,MAAgC7gD,OADlB+/C,WACdc,CADcd,EADkB,cAClBA,CAAhB;AADF,WAKO;AACL,wBAAgBC,cACda,qBAAqB,OAArBA,MAAgC7gD,OADlBggD,WACda,CADcb,EADX,cACWA,CAAhB;AA1CgB;;AAgDlB,gCAA0BphF,kBAAU;AAClC,4BADkC,MAClC;;AACA,uCAFkC,MAElC;AAlDgB,KAgDlB;;AAOA,oBAvDkB,GAuDlB;;AAvDkB;AAD+B;;;EAArD,c;;IA4DA,wB;;;;;AACEjB,wDAAgC;AAAA;;AAAA;;AAC9B,gCAD8B,MAC9B;AAEA,0BAH8B,EAG9B;;AACA,yBAAuBqiC,OAAvB,aAA2C;AACzC,UAAMn7B,QAAQm7B,mBAD2B,QAC3BA,CAAd;;AACA,UAAI,iBAAJ,aAAkC;AAAA;AAFO;;AAKzC,sCALyC,KAKzC;AAT4B;;AAW9B,gDAA0B,KAA1B,cAA4Ch+B,MAXd,CAW9B;;AAEA,QAAMw+E,iBAAiBvhF,SAAjBuhF,cAAiBvhF,WAAY;AACjC,UAAIA,wBAAJ,KAAiC;AAC/B,YAAMmjB,QAAQ,sDAAwC,OADvB,IACjB,SAAd;AACA,8BAF+B,KAE/B;AAF+B;AADA;;AAMjC,gCANiC,QAMjC;AAnB4B,KAa9B;;AASA,sBAtB8B,IAsB9B;;AACA,QAAI,yBAAJ,SAAoC;AAClC,wBAAgB29D,aACdc,qBAAqB,OAArBA,MAAgC,OADlBd,YACdc,CADcd,EADkB,cAClBA,CAAhB;AADF,WAKO;AACL,wBAAgBC,cACda,qBAAqB,OAArBA,MAAgC,OADlBb,YACda,CADcb,EADX,cACWA,CAAhB;AA7B4B;;AAmC9B,gCAA0BphF,kBAAU;AAClC,4BADkC,MAClC;AApC4B,KAmC9B;;AAGA,oBAtC8B,GAsC9B;;AAtC8B;AADqB;;;EAAvD,e;;IA2CA,yB;;;;;AACEjB,6CAAoB;AAAA;;AAAA;;AAClB,gCADkB,MAClB;AAEA,QAAIipB,OAAOpkB,mBAAmB,YAHZ,IAGPA,CAAX;;AAGA,QAAIy9E,kBAAkB,YAAtB,IAAIA,CAAJ,EAAuC;AACrCr5D,aAAOA,oBAD8B,EAC9BA,CAAPA;AAPgB;;AAUlBuqC,mBAAe,uBAAiB;AAC9B,iBAAW;AACT,YAAI/uC,eAAJ,UAA6B;AAC3BA,kBAAQ,sDADmB,IACnB,SAARA;AAFO;;AAIT,8BAJS,KAIT;;AACA,yCALS,KAKT;;AALS;AADmB;;AAU9B,8BAAsBvB,KAVQ,IAU9B;;AAEA,gCAAwBswC,oBAZM,IAYNA,CAAxB;;AACA,gCAb8B,OAa9B;AAvBgB,KAUlBA;AAVkB;AADiC;;;EAAvD,c;;IA6BA,0B;;;;;AACExzD,0DAAgC;AAAA;;AAAA;;AAC9B,gCAD8B,MAC9B;AAEA,QAAIipB,OAAOpkB,mBAAmB,YAHA,IAGnBA,CAAX;;AAGA,QAAIy9E,kBAAkB,YAAtB,IAAIA,CAAJ,EAAuC;AACrCr5D,aAAOA,oBAD8B,EAC9BA,CAAPA;AAP4B;;AAU9B,8BAAwB,0BAA0B;AAAE9jB,WAAF,EAAEA,KAAF;AAASd,WAAKA,MAAd;AAAA,KAA1B,CAAxB;;AAV8B;AADuB;;;EAAzD,e;;;;;;;;;;;;;;;;;AChbA;;AAfA;;AAAA;;AAuBA,gDAKG;AAAA,MALuC,iBAKvC,QALuC,iBAKvC;AAAA,MALuC,MAKvC,QALuC,MAKvC;AAAA,MALuC,cAKvC,QALuC,cAKvC;AAAA,MALH,YAKG,QALH,YAKG;AACDxC,oBAAO2iD,iBAAP3iD,GADC,2CACDA;AACA,MAAMshF,eAAe;AACnBC,wBADmB;AAEnBJ,qBAFmB;AAAA,GAArB;AAKA,MAAM5lE,SAASnX,SAAS68E,kBAAT78E,gBAAS68E,CAAT78E,EAPd,EAOcA,CAAf;;AACA,MAAI,CAAC0W,iBAAL,MAAKA,CAAL,EAA+B;AAC7B,WAD6B,YAC7B;AATD;;AAYDwmE,iCAZC,MAYDA;;AAEA,MAAI/lE,UAAU,IAAd,gBAAkC;AAGhC,WAHgC,YAGhC;AAjBD;;AAoBD,MAAIgnC,gBAAgB,CAApB,QAA6B;AAC3B,WAD2B,YAC3B;AArBD;;AAuBD,MAAI0+B,uCAAJ,SAAoD;AAClD,WADkD,YAClD;AAxBD;;AA2BD,MAAMO,kBAAkBP,yCA3BvB,UA2BD;;AACA,MAAIO,oBAAJ,YAAoC;AAClC,WADkC,YAClC;AA7BD;;AAgCDF,oCAhCC,IAgCDA;AACA,SAjCC,YAiCD;AA7DF;;AAgEA,sDAAsD;AACpD,MAAMG,qBAAqBR,kBADyB,qBACzBA,CAA3B;;AACA,0BAAwB;AACtB,QAAIpzB,WAAW6zB,kEADO,kBACPA,CAAf;;AACA,QAAI7zB,kBAAJ,GAAIA,CAAJ,EAA4B;AAC1B,UAAI;AACFA,mBAAW7qD,mBADT,QACSA,CAAX6qD;AADF,QAEE,WAAW,CAHa;AAFN;;AAOtB,QAAI8c,8BAAJ,QAAIA,CAAJ,EAAyB;AACvB,aADuB,QACvB;AARoB;AAF4B;;AAapD,SAboD,IAapD;AA7EF;;AAgFA,gDAAgD;AAC9C,MAAI9wC,kBAAmBA,gBAAgB56B,eAAvC,OAAuCA,CAAvC,EAAiE;AAC/D,WAAO,8BAAwB,wBADgC,IACxD,CAAP;AAF4C;;AAI9C,SAAO,4EACL,MADK,mDAJuC,MAIvC,CAAP;AApFF;;AA0FA,wCAAwC;AACtC,SAAO46B,kBAAkBA,WADa,GACtC;AA3FF,C;;;;;;;;;;;;;;;;;;;;;;;;;;AC6BA,qEAAqE;AACnE,MAAI8nD,qBAD+D,IACnE;AAGA,MAAIrf,MAAMsf,uCAJyD,kBAIzDA,CAAV;;AACA,WAAS;AACPtf,UAAMA,IADC,CACDA,CAANA;AACA,QAAIzU,WAAWg0B,eAFR,GAEQA,CAAf;AACAh0B,eAAWhvC,SAHJ,QAGIA,CAAXgvC;AACAA,eAAWi0B,cAJJ,QAIIA,CAAXj0B;AACAA,eAAWk0B,cALJ,QAKIA,CAAXl0B;AACA,WAAOm0B,cANA,QAMAA,CAAP;AAXiE;;AAiBnE1f,QAAM2f,gBAjB6D,kBAiB7DA,CAAN3f;;AACA,WAAS;AAEP,QAAMzU,YAAWk0B,cAFV,GAEUA,CAAjB;;AACA,WAAOC,cAHA,SAGAA,CAAP;AArBiE;;AAyBnE1f,QAAMsf,oCAzB6D,kBAyB7DA,CAANtf;;AACA,WAAS;AACPA,UAAMA,IADC,CACDA,CAANA;;AACA,QAAIzU,aAAWg0B,eAFR,GAEQA,CAAf;;AACAh0B,iBAAWk0B,cAHJ,UAGIA,CAAXl0B;AACA,WAAOm0B,cAJA,UAIAA,CAAP;AA9BiE;;AAoCnE,kDAAgD;AAC9C,WAAO,WACL,8GADK,KADuC,KACvC,CAAP;AArCiE;;AAmDnE,uCAAqC;AACnC,kBAAc;AACZ,UAAI,CAAC,sBAAL,KAAK,CAAL,EAAmC;AACjC,eADiC,KACjC;AAFU;;AAIZ,UAAI;AACF,YAAME,UAAU,0BAA0B;AAAEC,iBAD1C;AACwC,SAA1B,CAAhB;AACA,YAAM7mE,QAAQ,kBAAkB,cAAc;AAC5C,iBAAO8mE,mBADqC,IAC5C;AAHA,SAEY,CAAd;AAGA/8E,gBAAQ68E,eAAe,eALrB,KAKqB,CAAfA,CAAR78E;AACAs8E,6BANE,KAMFA;AANF,QAOE,UAAU;AAGV,YAAI,iBAAJ,QAAI,CAAJ,EAAgC;AAE9B,cAAI;AACFt8E,oBAAQrC,mBAAmB4b,OADzB,KACyBA,CAAnB5b,CAARqC;AACAs8E,iCAFE,KAEFA;AAFF,YAGE,YAAY,CALgB;AAHtB;AAXA;AADqB;;AAwBnC,WAxBmC,KAwBnC;AA3EiE;;AA6EnE,gCAA8B;AAC5B,QAAIA,sBAAsB,mBAA1B,KAA0B,CAA1B,EAAqD;AAEnDt8E,cAAQg9E,oBAF2C,KAE3CA,CAARh9E;;AACA,8BAAwB;AAEtBA,gBAAQg9E,yBAFc,KAEdA,CAARh9E;AALiD;AADzB;;AAS5B,WAT4B,KAS5B;AAtFiE;;AAwFnE,kDAAgD;AAC9C,QAAMnB,UADwC,EAC9C;AACA,QAF8C,KAE9C;AAGA,QAAM2D,OAAO+5E,iDALiC,IAKjCA,CAAb;;AACA,WAAQ,SAAQ/5E,UAAT,qBAASA,CAAR,MAAR,MAA4D;AAAA;AAAA;AAAA,UACtD,CADsD;AAAA,UACtD,IADsD;AAAA,UACtD,IADsD;;AAE1DgV,UAAIzY,YAFsD,EAEtDA,CAAJyY;;AACA,UAAIA,KAAJ,SAAkB;AAEhB,YAAIA,MAAJ,GAAa;AAAA;AAFG;;AAAA;AAHwC;;AAU1D3Y,mBAAa,YAAbA;AAhB4C;;AAkB9C,QAAMo+E,QAlBwC,EAkB9C;;AACA,SAAK,IAAIzlE,MAAT,GAAgBA,MAAI3Y,QAApB,QAAoC,EAApC,KAAyC;AACvC,UAAI,EAAE,OAAN,OAAI,CAAJ,EAAqB;AAAA;AADkB;;AAAA,uCAKpBA,QALoB,GAKpBA,CALoB;AAAA,UAKnC,KALmC;AAAA,UAKnC,KALmC;;AAMvCq+E,cAAOV,eANgC,KAMhCA,CAAPU;;AACA,iBAAU;AACRA,gBAAO1jE,SADC,KACDA,CAAP0jE;;AACA,YAAI1lE,QAAJ,GAAa;AACX0lE,kBAAOT,cADI,KACJA,CAAPS;AAHM;AAP6B;;AAavCD,iBAbuC,KAavCA;AAhC4C;;AAkC9C,WAAOA,WAlCuC,EAkCvCA,CAAP;AA1HiE;;AA4HnE,iCAA+B;AAC7B,QAAIj9E,iBAAJ,GAAIA,CAAJ,EAA2B;AACzB,UAAMi9E,QAAQj9E,qBADW,KACXA,CAAd;;AAEA,WAAK,IAAIhD,IAAT,GAAgBA,IAAIigF,MAApB,QAAkC,EAAlC,GAAuC;AACrC,YAAME,YAAYF,iBADmB,GACnBA,CAAlB;;AACA,YAAIE,cAAc,CAAlB,GAAsB;AACpBF,qBAAWA,kBADS,SACTA,CAAXA;AACAA,yBAAejgF,IAFK,CAEpBigF;AAJmC;;AAMrCA,mBAAWA,2BAN0B,IAM1BA,CAAXA;AATuB;;AAWzBj9E,cAAQi9E,WAXiB,GAWjBA,CAARj9E;AAZ2B;;AAc7B,WAd6B,KAc7B;AA1IiE;;AA4InE,mCAAiC;AAE/B,QAAMo9E,cAAcC,iBAFW,GAEXA,CAApB;;AACA,QAAID,gBAAgB,CAApB,GAAwB;AAItB,aAJsB,QAItB;AAP6B;;AAS/B,QAAME,WAAWD,kBATc,WASdA,CAAjB;AACA,QAAME,YAAYF,eAAeD,cAVF,CAUbC,CAAlB;AAEA,QAAMr9E,QAAQu9E,6BAZiB,EAYjBA,CAAd;AACA,WAAOP,qBAbwB,KAaxBA,CAAP;AAzJiE;;AA2JnE,gCAA8B;AAW5B,QAAI,CAACh9E,iBAAD,IAACA,CAAD,IAA2B,4BAA/B,KAA+B,CAA/B,EAAmE;AACjE,aADiE,KACjE;AAZ0B;;AAqB5B,WAAO,gEAEL,4CAA4C;AAC1C,UAAIs9E,oBAAoBA,aAAxB,KAA0C;AAExCE,eAAOA,mBAFiC,GAEjCA,CAAPA;AACAA,eAAO,mCAAmC,sBAAsB;AAC9D,iBAAOpnE,oBAAoBrX,cADmC,EACnCA,CAApBqX,CAAP;AAJsC,SAGjC,CAAPonE;AAGA,eAAOR,oBANiC,IAMjCA,CAAP;AAPwC;;AAS1C,UAAI;AACFQ,eAAOjzB,KADL,IACKA,CAAPizB;AADF,QAEE,UAAU,CAX8B;;AAY1C,aAAOR,oBAZmC,IAYnCA,CAAP;AAnCwB,KAqBrB,CAAP;AAhLiE;;AAmMnE,SAnMmE,EAmMnE;AAhOF,C;;;;;;;;;;;;;;;;ACeA;;AAKA;;;;;;;;;;;;;;AApBA;AAgCA,IAAMS,cAhCN,GAgCA;AACA,IAAMC,2BAjCN,GAiCA;;AAEA,6BAA6B;AAC3B,MAAM9mE,OAAO+mE,IADc,QAC3B;;AACA,MAAI,gBAAJ,UAA8B;AAC5B,WAD4B,IAC5B;AAHyB;;AAK3B,MAAMC,QAAQtjF,yBALa,IAKbA,CAAd;AACA,SAAOsjF,MANoB,MAM3B;AAzCF;;IA4CA,c;AACE9kF,qCAAuB;AAAA;;AACrB,eADqB,GACrB;AACA65B,WAAOA,QAFc,EAErBA;AACA,kBAAc,iBAHO,GAGP,CAAd;AACA,uBAAoB,eAAeA,KAAhB,WAAC,IAJC,EAIrB;AACA,2BAAuBA,wBALF,KAKrB;;AACA,kBACEA,eACA,iCAAiC;AAC/B,aAAO,IADwB,cACxB,EAAP;AATiB,KAMrB;;AAMA,qBAZqB,CAYrB;AACA,2BAAuB/0B,cAbF,IAaEA,CAAvB;AAdiB;;;;WAiBnBigF,6CAAoC;AAClC,UAAMlrD,OAAO;AACX+xC,aADW,EACXA,KADW;AAEXvnE,WAFW,EAEXA;AAFW,OAAb;;AAIA,kCAA8B;AAC5Bw1B,qBAAamrD,UADe,IACfA,CAAbnrD;AANgC;;AAQlC,aAAO,aAR2B,IAQ3B,CAAP;AAzBiB;;;WA4BnBorD,gCAAuB;AACrB,aAAO,aADc,SACd,CAAP;AA7BiB;;;WAgCnBxjF,uBAAc;AACZ,UAAMojF,MAAM,KADA,MACA,EAAZ;AACA,UAAMK,QAAQ,KAFF,SAEE,EAAd;AACA,UAAMC,iBAAkB,8BAA8B;AACpDN,WAJU,EAIVA;AADoD,OAAtD;AAIAA,sBAAgB,KAPJ,GAOZA;AACAA,4BAAsB,KARV,eAQZA;;AACA,2BAAuB,KAAvB,aAAyC;AACvC,YAAM39E,QAAQ,iBADyB,QACzB,CAAd;;AACA,YAAI,iBAAJ,aAAkC;AAAA;AAFK;;AAKvC29E,uCALuC,KAKvCA;AAdU;;AAgBZ,UAAI,eAAe,WAAf,QAAkC,SAAtC,MAAqD;AACnDA,sDAAuChrD,KAAT,KAA9BgrD,cAAqDhrD,WADF,CACnDgrD;AACAM,wCAFmD,wBAEnDA;AAFF,aAGO;AACLA,wCADK,WACLA;AApBU;;AAsBZN,yBAtBY,aAsBZA;;AAEA,UAAIhrD,KAAJ,SAAkB;AAChBgrD,sBAAc,eAAe;AAC3BhrD,uBAAagrD,IADc,MAC3BhrD;AAFc,SAChBgrD;AAzBU;;AA6BZA,+BAAyB,8BA7Bb,KA6Ba,CAAzBA;AACAA,uBAAiB,2BA9BL,KA8BK,CAAjBA;AAEAM,yCAAmCtrD,KAhCvB,iBAgCZsrD;AACAA,8BAAwBtrD,KAjCZ,MAiCZsrD;AACAA,+BAAyBtrD,KAlCb,OAkCZsrD;AACAA,kCAA4BtrD,KAnChB,UAmCZsrD;AAEAN,eArCY,IAqCZA;AAEA,aAvCY,KAuCZ;AAvEiB;;;WA0EnBO,gCAAuB;AACrB,UAAMD,iBAAiB,qBADF,KACE,CAAvB;;AACA,UAAI,CAAJ,gBAAqB;AAAA;AAFA;;AAOrB,UAAIA,eAAJ,YAA+B;AAC7BA,kCAD6B,GAC7BA;AARmB;AA1EJ;;;WAsFnBE,mCAA0B;AACxB,UAAMF,iBAAiB,qBADC,KACD,CAAvB;;AACA,UAAI,CAAJ,gBAAqB;AAAA;AAFG;;AAOxB,UAAMN,MAAMM,eAPY,GAOxB;;AACA,UAAIN,uBAAuBM,eAA3B,mBAA6D;AAC3DA,uBAD2D,iBAC3DA;AACA,eAAOA,eAFoD,iBAE3D;AAVsB;;AAaxB,UAAIN,mBAAJ,GAA0B;AAAA;AAbF;;AAiBxB,UAAI,EAAE,SAAS,KAAf,eAAI,CAAJ,EAAsC;AAAA;AAjBd;;AAuBxB,aAAO,qBAvBiB,KAuBjB,CAAP;;AAGA,UAAIA,oBAAoB,KAAxB,QAAqC;AACnC,YAAIM,eAAJ,SAA4B;AAC1BA,iCAAuBN,IADG,MAC1BM;AAFiC;;AAAA;AA1Bb;;AAgCxB,UAAMG,YAAYT,cAhCM,WAgCxB;AAKA,UAAMU,+BACJD,6BACAH,kCAvCsB,wBAqCxB;;AAIA,UACE,iCACAG,cAAcH,eAFhB,gBAGE;AACA,YAAIA,eAAJ,SAA4B;AAC1BA,iCAAuBN,IADG,MAC1BM;AAFF;;AAAA;AA5CsB;;AAmDxB,UAAM1nE,QAAQ+nE,eAnDU,GAmDVA,CAAd;;AACA,UAAIF,cAAJ,0BAA4C;AAC1C,YAAMG,cAAcZ,sBADsB,eACtBA,CAApB;AACA,YAAM9+E,UAAU,gCAF0B,WAE1B,CAAhB;AACAo/E,8BAAsB;AACpBvZ,iBAAO3lE,SAASF,QAATE,CAASF,CAATE,EADa,EACbA,CADa;AAEpBwX,eAFoB,EAEpBA;AAFoB,SAAtB0nE;AAHF,aAOO,WAAW;AAChBA,8BAAsB;AACpBvZ,iBADoB;AAEpBnuD,eAFoB,EAEpBA;AAFoB,SAAtB0nE;AADK,aAKA,IAAIA,eAAJ,SAA4B;AACjCA,+BAAuBN,IADU,MACjCM;AAjEsB;AAtFP;;;WA2JnBO,8BAAqB;AACnB,aAAO,4BADY,GACnB;AA5JiB;;;WA+JnBC,iCAAwB;AACtB,aAAOT,SAAS,KADM,eACtB;AAhKiB;;;WAmKnBzxC,6BAAoB;AAClB,UAAMoxC,MAAM,4BADM,GAClB;AACA,aAAO,qBAFW,KAEX,CAAP;AACAA,UAHkB,KAGlBA;AAtKiB;;;;;;IA2KrB,gB;AACE7kF,oCAAoB;AAAA;;AAClB,mBADkB,MAClB;AACA,oBAAgB,mBAAmB6iB,OAAnB,KAA+B;AAC7CyhC,mBAAazhC,OADgC;AAE7C0hC,uBAAiB1hC,OAF4B;AAAA,KAA/B,CAAhB;AAIA,2BAAuBA,OANL,cAMlB;AACA,8BAPkB,IAOlB;AACA,gCARkB,EAQlB;AATmB;;;;WAYrB+iE,6CAAoC;AAClC,UAAM1hF,IAAI,kCADwB,MACxB,CAAV;;AACA,UAAIA,KAAJ,GAAY;AACV,4CADU,CACV;AAHgC;AAZf;;;WAmBrBioE,yBAAgB;AACdtqE,wBACE,CAAC,KADHA,oBADc,yDACdA;AAIA,gCAA0B,sCACxB,KADwB,UAExB,KAPY,OAKY,CAA1B;AAIA,aAAO,KATO,kBASd;AA5BmB;;;WA+BrBwqE,oCAA2B;AACzB,UAAMjqC,SAAS,uCACb,KADa,iBADU,GACV,CAAf;AAKAA,wBAAkB,sCANO,IAMP,CAAlBA;;AACA,qCAPyB,MAOzB;;AACA,aARyB,MAQzB;AAvCmB;;;WA0CrBkqC,mCAA0B;AACxB,UAAI,KAAJ,oBAA6B;AAC3B,uCAD2B,MAC3B;AAFsB;;AAIxB,UAAMC,UAAU,gCAJQ,CAIR,CAAhB;;AACAA,sBAAgB,kBAAkB;AAChCnqC,sBADgC,MAChCA;AANsB,OAKxBmqC;AA/CmB;;;;;;;;IAsDvB,iC;AACEvsE,8DAA6B;AAAA;;AAC3B,oBAD2B,OAC3B;AAEA,QAAM65B,OAAO;AACXgsD,yBAAmB,6BADR,IACQ,CADR;AAEXC,cAAQ,kBAFG,IAEH,CAFG;AAGXC,eAAS,mBAHE,IAGF,CAHE;AAIXX,kBAAY,sBAJD,IAIC;AAJD,KAAb;AAMA,gBAAYviE,OATe,GAS3B;AACA,0BAAsBmjE,oBAVK,IAULA,CAAtB;AACA,sCAX2B,oCAW3B;AACA,yBAAqBnjE,uBAZM,KAY3B;AACA,0BAAsBA,OAbK,MAa3B;AACA,2BAAuBA,OAdI,cAc3B;;AACA,QAAI,CAAC,KAAD,mBAAyB,CAAC,KAA9B,eAAkD;AAChD,2BADgD,IAChD;AAhByB;;AAmB3B,iCAnB2B,KAmB3B;AACA,6BApB2B,KAoB3B;AAEA,yBAtB2B,EAsB3B;AACA,qBAvB2B,EAuB3B;AACA,iBAxB2B,KAwB3B;AACA,wBAzB2B,SAyB3B;AACA,qBA1B2B,IA0B3B;AAEA,sBA5B2B,IA4B3B;AA7BoC;;;;WAgCtCojE,8BAAqB;AACnB,UAAMC,mBAAmB,KADN,cACnB;;AACA,UAAMC,iBAAiB,4BAFJ,gBAEI,CAAvB;;AAEA,UAAMrD,oBAAoB99E,SAApB89E,iBAAoB99E,OAAQ;AAChC,eAAOmhF,iCADyB,IACzBA,CAAP;AALiB,OAInB;;AAJmB,kCAUf,qDAAiC;AACnCrD,yBADmC,EACnCA,iBADmC;AAEnCC,gBAAQ,cAF2B;AAGnCv+B,wBAAgB,KAHmB;AAInCJ,sBAAc,KAJqB;AAAA,OAAjC,CAVe;AAAA,UAOb,kBAPa,yBAOb,kBAPa;AAAA,UAOb,eAPa,yBAOb,eAPa;;AAiBnB,8BAAwB;AACtB,iCADsB,IACtB;AAlBiB;;AAqBnB,4BAAsB4+B,mBAAmB,KArBtB,cAqBnB;AAEA,uBAAiBC,8CAvBE,iBAuBFA,CAAjB;;AAEA,UAAI,KAAJ,mBAA4B;AAK1B,mCAL0B,gBAK1B;AA9BiB;;AAiCnB,sCAjCmB,OAiCnB;AAjEoC;;;WAoEtCmD,uBAAc;AACZ,gBAAU;AACR,YAAI,wBAAJ,GAA+B;AAC7B,cAAM1Z,oBAAoB,eADG,KACH,EAA1B;;AACAA,oCAA0B;AAAExlE,mBAAO2yB,KAAT;AAAqB3vB,kBAArB;AAAA,WAA1BwiE;AAFF,eAGO;AACL,kCAAwB7yC,KADnB,KACL;AALM;AADE;;AASZ,mBATY,IASZ;;AACA,UAAI,4BAAJ,GAAmC;AAAA;AAVvB;;AAaZ,6BAAuB,6BAA6B;AAClD6yC,kCAA0B;AAAExlE,iBAAF;AAAoBgD,gBAApB;AAAA,SAA1BwiE;AAdU,OAaZ;;AAGA,uBAhBY,EAgBZ;AApFoC;;;WAuFtC2Z,0BAAiB;AACf,UAAMvlF,MAAM,KADG,IACf;AACA,UAAM4tD,YAAY43B,sDAFH,GAEGA,CAAlB;AACA,0BAHe,SAGf;;AACA,6CAJe,SAIf;;AACA,6BAAuB,6BAA6B;AAClD5Z,iCADkD,SAClDA;AANa,OAKf;;AAGA,uBARe,EAQf;AACA,2BATe,EASf;AAhGoC;;;WAmGtCX,2BAAkB;AAChB,UAAI,KAAJ,YAAqB;AACnB,wBAAgB;AACdle,kBAAQ/vC,KADM;AAEdgwC,iBAAOhwC,wBAAwBA,KAAxBA,QAAqC,KAF9B;AAAA,SAAhB;AAFc;AAnGoB;;;SA4GtC,eAAe;AACb,aAAO,KADM,SACb;AA7GoC;;;SAgHtC,eAAuB;AACrB,aAAO,KADc,iBACrB;AAjHoC;;;SAoHtC,eAA2B;AACzB,aAAO,KADkB,qBACzB;AArHoC;;;SAwHtC,eAAoB;AAClB,aAAO,KADW,cAClB;AAzHoC;;;SA4HtC,eAAmB;AACjB,aAAO,gCADU,OACjB;AA7HoC;;;;+EAgItC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACM,KAAJ,YADF;AAAA;AAAA;AAAA;;AAAA,sBAEU,KADe,YADzB;;AAAA;AAAA,sBAIM,4BAAJ,CAJF;AAAA;AAAA;AAAA;;AAKUL,qBALV,GAKkB,mBADmB,KACnB,EALlB;AAAA,iDAMW;AAAEvW,yBAAF;AAAgBgD,wBAAhB;AAAA,iBANX;;AAAA;AAAA,qBAQM,KAAJ,KARF;AAAA;AAAA;AAAA;;AAAA,iDASW;AAAEhD,yBAAF;AAAoBgD,wBAApB;AAAA,iBATX;;AAAA;AAWQwiE,iCAXR,GAAa,oCAAb;;AAYE,oCAZW,iBAYX;;AAZF,iDAaSA,kBAbI,OAAb;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAgBA9mC,wBAAe;AACb,mBADa,IACb;;AACA,6CAFa,MAEb;;AACA,6BAAuB,6BAA6B;AAClD8mC,kCAA0B;AAAExlE,iBAAF;AAAoBgD,gBAApB;AAAA,SAA1BwiE;AAJW,OAGb;;AAGA,uBANa,EAMb;;AACA,UAAI,+BAA+B,KAAnC,cAAI,CAAJ,EAAyD;AACvD,mCAA2B,KAD4B,cACvD;AARW;;AAUb,gCAVa,IAUb;AA1JoC;;;;;;IA+JxC,kC;AACE1sE,mEAAiC;AAAA;;AAC/B,oBAD+B,OAC/B;AACA,QAAM65B,OAAO;AACXisD,cAAQ,kBADG,IACH,CADG;AAEXV,kBAAY,sBAFD,IAEC;AAFD,KAAb;AAIA,sBAAkBY,iCANa,IAMbA,CAAlB;AACA,qBAP+B,EAO/B;AACA,wBAR+B,IAQ/B;AACA,iBAT+B,KAS/B;AAEA,sBAX+B,IAW/B;AACA,oBAZ+B,IAY/B;AAbqC;;;;WAgBvCO,kBAAS;AACP,UAAI,KAAJ,UAAmB;AACjB,sBADiB,IACjB;AAFK;AAhB8B;;;WAsBvCH,uBAAc;AACZ,UAAM3oE,QAAQK,KADF,KACZ;;AACA,UAAI,wBAAJ,GAA+B;AAC7B,YAAM4uD,oBAAoB,eADG,KACH,EAA1B;;AACAA,kCAA0B;AAAExlE,iBAAF;AAAgBgD,gBAAhB;AAAA,SAA1BwiE;AAFF,aAGO;AACL,4BADK,KACL;AANU;;AAQZ,mBARY,IAQZ;;AACA,6BAAuB,6BAA6B;AAClDA,kCAA0B;AAAExlE,iBAAF;AAAoBgD,gBAApB;AAAA,SAA1BwiE;AAVU,OASZ;;AAGA,uBAZY,EAYZ;;AACA,WAbY,MAaZ;AAnCqC;;;WAsCvCX,0BAAiB;AACf,UAAI,CAAC,KAAD,wBAA8B,KAAlC,YAAmD;AACjD,wBAAgB;AACdle,kBAAQD,IAFuC;AACjC,SAAhB;AAFa;AAtCsB;;;SA8CvC,eAA2B;AACzB,aADyB,KACzB;AA/CqC;;;;gFAkDvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBACM,sBAAJ,IADF;AAAA;AAAA;AAAA;;AAEUnwC,qBAFV,GAEkB,KADgB,YADlC;AAGI,oCAF8B,IAE9B;AAHJ,kDAIW;AAAEvW,yBAAF;AAAgBgD,wBAAhB;AAAA,iBAJX;;AAAA;AAAA,qBAMM,KAAJ,KANF;AAAA;AAAA;AAAA;;AAAA,kDAOW;AAAEhD,yBAAF;AAAoBgD,wBAApB;AAAA,iBAPX;;AAAA;AASQwiE,iCATR,GAAa,oCAAb;;AAUE,oCAVW,iBAUX;;AAVF,kDAWSA,kBAXI,OAAb;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAcA9mC,wBAAe;AACb,mBADa,IACb;;AACA,6BAAuB,6BAA6B;AAClD8mC,kCAA0B;AAAExlE,iBAAF;AAAoBgD,gBAApB;AAAA,SAA1BwiE;AAHW,OAEb;;AAGA,uBALa,EAKb;;AACA,UAAI,+BAA+B,KAAnC,UAAI,CAAJ,EAAqD;AACnD,mCAA2B,KADwB,UACnD;AAPW;;AASb,WATa,MASb;AAzEqC;;;;;;;;;;;;;;;;;;;;AC7ZzC;;AAKA;;;;;;;;;;;;;;AApBA;;AAiCA,uEAAuE;AACrE,SAAO;AACL7iE,YADK;AAEL+4E,WAFK,EAELA,OAFK;AAGL3qC,YAAQuuC,eAARvuC,aAAQuuC,eAARvuC,uBAAQuuC,gBAHH;AAILn+D,UAJK;AAKLo+D,iBAAaliC,8BALR;AAMLmiC,cANK;AAAA,GAAP;AAlCF;;AA4CA,oCAAoC;AAClC,MAAM9D,UAAU,IADkB,OAClB,EAAhB;;AACA,oCAAoC;AAClC,QAAM17E,QAAQo9C,YADoB,QACpBA,CAAd;;AACA,QAAI,iBAAJ,aAAkC;AAAA;AAFA;;AAKlCs+B,6BALkC,KAKlCA;AAPgC;;AASlC,SATkC,OASlC;AArDF;;IAyDA,c;AACE5iF,kCAAoB;AAAA;;AAClB,kBADkB,MAClB;AACA,kBAAc,iBAAiB6iB,OAFb,GAEJ,CAAd;AACA,uBAAoB,eAAeA,OAAhB,WAAC,IAHF,EAGlB;AAEA,8BALkB,IAKlB;AACA,gCANkB,EAMlB;AAPiB;;;;SAUnB,eAA6B;AAAA;;AAC3B,gEAAO,uBAAP,2DAAO,8BAAP,yEAD2B,CAC3B;AAXiB;;;WAcnBspD,yBAAgB;AACdtqE,wBACE,CAAC,KADHA,oBADc,uDACdA;AAIA,gCAA0B,yBALZ,IAKY,CAA1B;AACA,aAAO,KANO,kBAMd;AApBiB;;;WAuBnBwqE,oCAA2B;AACzB,UAAIhoE,OAAO,KAAX,wBAAwC;AACtC,eADsC,IACtC;AAFuB;;AAIzB,UAAM+9B,SAAS,2CAJU,GAIV,CAAf;;AACA,qCALyB,MAKzB;;AACA,aANyB,MAMzB;AA7BiB;;;WAgCnBkqC,mCAA0B;AACxB,UAAI,KAAJ,oBAA6B;AAC3B,uCAD2B,MAC3B;AAFsB;;AAIxB,UAAMC,UAAU,gCAJQ,CAIR,CAAhB;;AACAA,sBAAgB,kBAAkB;AAChCnqC,sBADgC,MAChCA;AANsB,OAKxBmqC;AArCiB;;;;;;;;IA4CrB,oB;AACEvsE,wCAAoB;AAAA;;AAAA;;AAClB,mBADkB,MAClB;AACA,mBAFkB,IAElB;AACA,mBAHkB,CAGlB;AACA,qBAJkB,IAIlB;AACA,QAAM6iB,SAASwf,OALG,MAKlB;AACA,4BAAwBxf,0BANN,KAMlB;AACA,0BAAsBA,OAPJ,MAOlB;AACA,8BARkB,oCAQlB;AACA,yBAAqBA,uBATH,KASlB;AACA,2BAAuBA,OAVL,cAUlB;;AACA,QAAI,CAAC,KAAD,mBAAyB,CAAC,KAA9B,eAAkD;AAChD,2BADgD,IAChD;AAZgB;;AAelB,QAAI,2BAAJ,aAA4C;AAC1C,8BAAwB,IADkB,eAClB,EAAxB;AAhBgB;;AAkBlB,iCAA6B,CAACA,OAlBZ,aAkBlB;AACA,6BAAyB,CAACA,OAnBR,YAmBlB;AAEA,oBAAgB8jE,cAAc,aArBZ,WAqBFA,CAAhB;AAEA,QAAM7lF,MAAM+hB,OAvBM,GAuBlB;AACA6U,eAEEkvD,mBACE,KADFA,UAEE,KAFFA,kBAGE,KALJlvD,gBAEEkvD,CAFFlvD,OAQQp2B,oBAAY;AAChB,UAAI,CAACulF,2CAAuBvlF,SAA5B,MAAKulF,CAAL,EAA8C;AAC5C,cAAMP,8CAA0BhlF,SAA1BglF,QADsC,GACtCA,CAAN;AAFc;;AAIhB,sBAAehlF,cAJC,SAIDA,EAAf;;AACA,+BALgB,OAKhB;;AAEA,UAAMwhF,oBAAoB99E,SAApB89E,iBAAoB99E,OAAQ;AAChC,eAAO1D,qBADyB,IACzBA,CAAP;AARc,OAOhB;;AAPgB,kCAaZ,qDAAiC;AACnCwhF,yBADmC,EACnCA,iBADmC;AAEnCC,gBAAQ,cAF2B;AAGnCv+B,wBAAgB,MAHmB;AAInCJ,sBAAc,MAJqB;AAAA,OAAjC,CAbY;AAAA,UAUV,kBAVU,yBAUV,kBAVU;AAAA,UAUV,eAVU,yBAUV,eAVU;;AAoBhB,gCApBgB,kBAoBhB;AAEA,6BAAsB4+B,mBAAmB,MAtBzB,cAsBhB;AAEA,wBAAiBC,8CAxBD,iBAwBCA,CAAjB;;AAIA,UAAI,CAAC,MAAD,yBAA+B,MAAnC,mBAA2D;AACzD,qBAAY,yBAD6C,wBAC7C,CAAZ;AA7Bc;AARpBvrD,gBAwCS,wBAhES,MAwBlBA;AA0CA,sBAlEkB,IAkElB;AAnEuB;;;;SAsEzB,eAAmB;AACjB,aAAO,wBADU,OACjB;AAvEuB;;;SA0EzB,eAAe;AACb,aAAO,KADM,SACb;AA3EuB;;;SA8EzB,eAAoB;AAClB,aAAO,KADW,cAClB;AA/EuB;;;SAkFzB,eAAuB;AACrB,aAAO,KADc,iBACrB;AAnFuB;;;SAsFzB,eAA2B;AACzB,aAAO,KADkB,qBACzB;AAvFuB;;;;+EA0FzB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACQ,wBADK,OAAb;;AAAA;AAAA;AAAA,uBAEgC,aAFnB,IAEmB,EAFhC;;AAAA;AAAA;AAEQ,qBAFR,yBAEQ,KAFR;AAEQ,oBAFR,yBAEQ,IAFR;;AAAA,qBAGE,IAHF;AAAA;AAAA;AAAA;;AAAA,iDAIW;AAAExwB,uBAAF,EAAEA,KAAF;AAASgD,sBAAT,EAASA;AAAT,iBAJX;;AAAA;AAME,gCAAgBhD,MANL,UAMX;;AACA,oBAAI,KAAJ,YAAqB;AACnB,kCAAgB;AACd2mD,4BAAQ,KADM;AAEdC,2BAAO,KAFO;AAAA,mBAAhB;AARS;;AAaL/sC,sBAbR,GAaiB,sBAbJ,MAAb;AAAA,iDAcS;AAAE7Z,yBAAF;AAAiBgD,wBAAjB;AAAA,iBAdT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAiBA07B,wBAAe;AACb,UAAI,KAAJ,SAAkB;AAChB,4BADgB,MAChB;AAFW;;AAIb,UAAI,KAAJ,kBAA2B;AACzB,8BADyB,KACzB;AALW;AA3GU;;;;;;IAsH3B,yB;AACE5lC,yDAAgC;AAAA;;AAAA;;AAC9B,mBAD8B,MAC9B;AACA,mBAF8B,IAE9B;AACA,mBAH8B,CAG9B;AACA,QAAM6iB,SAASwf,OAJe,MAI9B;AACA,4BAAwBxf,0BALM,KAK9B;AACA,2BAN8B,oCAM9B;AACA,iCAA6B,CAACA,OAPA,aAO9B;;AAEA,QAAI,2BAAJ,aAA4C;AAC1C,8BAAwB,IADkB,eAClB,EAAxB;AAV4B;;AAa9B,oBAAgB8jE,cAAc,aAbA,WAadA,CAAhB;;AACA,kDAA8B,KAA9B,cAAgDtiF,MAdlB,CAc9B;;AAEA,QAAMvD,MAAM+hB,OAhBkB,GAgB9B;AACA6U,eAEEkvD,mBACE,KADFA,UAEE,KAFFA,kBAGE,KALJlvD,gBAEEkvD,CAFFlvD,OAQQp2B,oBAAY;AAChB,UAAI,CAACulF,2CAAuBvlF,SAA5B,MAAKulF,CAAL,EAA8C;AAC5C,cAAMP,8CAA0BhlF,SAA1BglF,QADsC,GACtCA,CAAN;AAFc;;AAIhB,6BAJgB,OAIhB;;AACA,uBAAehlF,cALC,SAKDA,EAAf;AAbJo2B,gBAeSz2B,kBAAU;AACf,UAAIA,kEAAJ,cAAmC;AAAA;AADpB;;AAIf,YAJe,MAIf;AApC0B,KAiB9By2B;AAsBA,sBAvC8B,IAuC9B;AAxC4B;;;;SA2C9B,eAA2B;AACzB,aAAO,KADkB,qBACzB;AA5C4B;;;;gFA+C9B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACQ,qBADK,OAAb;;AAAA;AAAA;AAAA,uBAEgC,aAFnB,IAEmB,EAFhC;;AAAA;AAAA;AAEQ,qBAFR,0BAEQ,KAFR;AAEQ,oBAFR,0BAEQ,IAFR;;AAAA,qBAGE,IAHF;AAAA;AAAA;AAAA;;AAAA,kDAIW;AAAExwB,uBAAF,EAAEA,KAAF;AAASgD,sBAAT,EAASA;AAAT,iBAJX;;AAAA;AAME,gCAAgBhD,MANL,UAMX;;AACA,oBAAI,KAAJ,YAAqB;AACnB,kCAAgB;AAAE2mD,4BAAQ,KADP;AACH,mBAAhB;AARS;;AAUL9sC,sBAVR,GAUiB,sBAVJ,MAAb;AAAA,kDAWS;AAAE7Z,yBAAF;AAAiBgD,wBAAjB;AAAA,iBAXT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAcA07B,wBAAe;AACb,UAAI,KAAJ,SAAkB;AAChB,4BADgB,MAChB;AAFW;;AAIb,UAAI,KAAJ,kBAA2B;AACzB,8BADyB,KACzB;AALW;AA7De;;;;;;;;;UC3NhC;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCzBA;WACA;WACA;WACA;WACA,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACYA;;AAYA;;AASA;;AArCA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AA8DA,IAAMkhD,eA9DN,SA8DA;AAGA,IAAMC,aAjEN,WAiEA;AAiBqC;AAAA,iBACdjlE,oBADc,CACdA,CADc;AAAA,MAC7B,QAD6B,YAC7B,QAD6B;;AAEnC,gBAAc;AACZ,QAAMklE,gBAAgBllE,sCAAtB;;AACAmlE,yCAA2B7jC,kBAAU;AACnC,aAAO,kBAD4B,MAC5B,CAAP;AAHU,KAEZ6jC;AAFF,SAKO;AACL,QAAMC,mBAAmBplE,yCAAzB;;AACA,QAFK,cAEL;;AACA,gDAAwB;AACtBqlE,uBAAiBrlE,uCAAjBqlE;AAJG;;AAMLF,yCAA2B7jC,kBAAU;AACnC,UAAI+jC,kBAAkB/lF,oCAAgBgiD,OAAtC,GAAsBhiD,CAAtB,EAAmD;AACjD,eAAO,mBAD0C,MAC1C,CAAP;AAFiC;;AAInC,aAAO,qBAJ4B,MAI5B,CAAP;AAVG,KAML6lF;AAbiC;AAlFrC,C", + "file": "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 2015 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 {\n assert,\n BaseException,\n CMapCompressionType,\n isString,\n removeNullCharacters,\n stringToBytes,\n unreachable,\n Util,\n warn,\n} from \"../shared/util.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass BaseCanvasFactory {\n constructor() {\n if (this.constructor === BaseCanvasFactory) {\n unreachable(\"Cannot initialize BaseCanvasFactory.\");\n }\n }\n\n create(width, height) {\n unreachable(\"Abstract method `create` called.\");\n }\n\n reset(canvasAndContext, width, height) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n canvasAndContext.canvas.width = width;\n canvasAndContext.canvas.height = height;\n }\n\n destroy(canvasAndContext) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n // Zeroing the width and height cause Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n canvasAndContext.canvas.width = 0;\n canvasAndContext.canvas.height = 0;\n canvasAndContext.canvas = null;\n canvasAndContext.context = null;\n }\n}\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n constructor({ ownerDocument = globalThis.document } = {}) {\n super();\n this._document = ownerDocument;\n }\n\n create(width, height) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n const canvas = this._document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = width;\n canvas.height = height;\n return {\n canvas,\n context,\n };\n }\n}\n\nclass BaseCMapReaderFactory {\n constructor({ baseUrl = null, isCompressed = false }) {\n if (this.constructor === BaseCMapReaderFactory) {\n unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n }\n this.baseUrl = baseUrl;\n this.isCompressed = isCompressed;\n }\n\n async fetch({ name }) {\n if (!this.baseUrl) {\n throw new Error(\n 'The CMap \"baseUrl\" parameter must be specified, ensure that ' +\n 'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.'\n );\n }\n if (!name) {\n throw new Error(\"CMap name must be specified.\");\n }\n const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n const compressionType = this.isCompressed\n ? CMapCompressionType.BINARY\n : CMapCompressionType.NONE;\n\n return this._fetchData(url, compressionType).catch(reason => {\n throw new Error(\n `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n );\n });\n }\n\n /**\n * @private\n */\n _fetchData(url, compressionType) {\n unreachable(\"Abstract method `_fetchData` called.\");\n }\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n _fetchData(url, compressionType) {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n (isFetchSupported() && isValidFetchUrl(url, document.baseURI))\n ) {\n return fetch(url).then(async response => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n let cMapData;\n if (this.isCompressed) {\n cMapData = new Uint8Array(await response.arrayBuffer());\n } else {\n cMapData = stringToBytes(await response.text());\n }\n return { cMapData, compressionType };\n });\n }\n\n // The Fetch API is not supported.\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n\n if (this.isCompressed) {\n request.responseType = \"arraybuffer\";\n }\n request.onreadystatechange = () => {\n if (request.readyState !== XMLHttpRequest.DONE) {\n return;\n }\n if (request.status === 200 || request.status === 0) {\n let cMapData;\n if (this.isCompressed && request.response) {\n cMapData = new Uint8Array(request.response);\n } else if (!this.isCompressed && request.responseText) {\n cMapData = stringToBytes(request.responseText);\n }\n if (cMapData) {\n resolve({ cMapData, compressionType });\n return;\n }\n }\n reject(new Error(request.statusText));\n };\n\n request.send(null);\n });\n }\n}\n\nclass DOMSVGFactory {\n create(width, height) {\n assert(width > 0 && height > 0, \"Invalid SVG dimensions\");\n\n const svg = document.createElementNS(SVG_NS, \"svg:svg\");\n svg.setAttribute(\"version\", \"1.1\");\n svg.setAttribute(\"width\", width + \"px\");\n svg.setAttribute(\"height\", height + \"px\");\n svg.setAttribute(\"preserveAspectRatio\", \"none\");\n svg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n\n return svg;\n }\n\n createElement(type) {\n assert(typeof type === \"string\", \"Invalid SVG element type\");\n\n return document.createElementNS(SVG_NS, type);\n }\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array} viewBox - The xMin, yMin, xMax and\n * yMax coordinates.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n * default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n * default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n * viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n * in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n /**\n * @param {PageViewportParameters}\n */\n constructor({\n viewBox,\n scale,\n rotation,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n }) {\n this.viewBox = viewBox;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n // creating transform to convert pdf coordinate system to the normal\n // canvas like coordinates taking in account scale and rotation\n const centerX = (viewBox[2] + viewBox[0]) / 2;\n const centerY = (viewBox[3] + viewBox[1]) / 2;\n let rotateA, rotateB, rotateC, rotateD;\n // Normalize the rotation, by clamping it to the [0, 360) range.\n rotation %= 360;\n if (rotation < 0) {\n rotation += 360;\n }\n switch (rotation) {\n case 180:\n rotateA = -1;\n rotateB = 0;\n rotateC = 0;\n rotateD = 1;\n break;\n case 90:\n rotateA = 0;\n rotateB = 1;\n rotateC = 1;\n rotateD = 0;\n break;\n case 270:\n rotateA = 0;\n rotateB = -1;\n rotateC = -1;\n rotateD = 0;\n break;\n case 0:\n rotateA = 1;\n rotateB = 0;\n rotateC = 0;\n rotateD = -1;\n break;\n default:\n throw new Error(\n \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n );\n }\n\n if (dontFlip) {\n rotateC = -rotateC;\n rotateD = -rotateD;\n }\n\n let offsetCanvasX, offsetCanvasY;\n let width, height;\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = Math.abs(viewBox[3] - viewBox[1]) * scale;\n height = Math.abs(viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = Math.abs(viewBox[2] - viewBox[0]) * scale;\n height = Math.abs(viewBox[3] - viewBox[1]) * scale;\n }\n // creating transform for the following operations:\n // translate(-centerX, -centerY), rotate and flip vertically,\n // scale, and translate(offsetCanvasX, offsetCanvasY)\n this.transform = [\n rotateA * scale,\n rotateB * scale,\n rotateC * scale,\n rotateD * scale,\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n ];\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * Clones viewport, with optional additional properties.\n * @param {PageViewportCloneParameters} [params]\n * @returns {PageViewport} Cloned viewport.\n */\n clone({\n scale = this.scale,\n rotation = this.rotation,\n offsetX = this.offsetX,\n offsetY = this.offsetY,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.viewBox.slice(),\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * Converts PDF point to the viewport coordinates. For examples, useful for\n * converting PDF location into canvas pixel coordinates.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Object} Object containing `x` and `y` properties of the\n * point in the viewport coordinate space.\n * @see {@link convertToPdfPoint}\n * @see {@link convertToViewportRectangle}\n */\n convertToViewportPoint(x, y) {\n return Util.applyTransform([x, y], this.transform);\n }\n\n /**\n * Converts PDF rectangle to the viewport coordinates.\n * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n * @returns {Array} Array containing corresponding coordinates of the\n * rectangle in the viewport coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToViewportRectangle(rect) {\n const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform);\n const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform);\n return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n }\n\n /**\n * Converts viewport coordinates to the PDF location. For examples, useful\n * for converting canvas pixel location into PDF one.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Object} Object containing `x` and `y` properties of the\n * point in the PDF coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToPdfPoint(x, y) {\n return Util.applyInverseTransform([x, y], this.transform);\n }\n}\n\nclass RenderingCancelledException extends BaseException {\n constructor(msg, type) {\n super(msg);\n this.type = type;\n }\n}\n\nconst LinkTarget = {\n NONE: 0, // Default value.\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4,\n};\n\n/**\n * @typedef ExternalLinkParameters\n * @typedef {Object} ExternalLinkParameters\n * @property {string} url - An absolute URL.\n * @property {LinkTarget} [target] - The link target. The default value is\n * `LinkTarget.NONE`.\n * @property {string} [rel] - The link relationship. The default value is\n * `DEFAULT_LINK_REL`.\n * @property {boolean} [enabled] - Whether the link should be enabled. The\n * default value is true.\n */\n\n/**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLLinkElement} link - The link element.\n * @param {ExternalLinkParameters} params\n */\nfunction addLinkAttributes(link, { url, target, rel, enabled = true } = {}) {\n assert(\n url && typeof url === \"string\",\n 'addLinkAttributes: A valid \"url\" parameter must provided.'\n );\n\n const urlNullRemoved = removeNullCharacters(url);\n if (enabled) {\n link.href = link.title = urlNullRemoved;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${urlNullRemoved}`;\n link.onclick = () => {\n return false;\n };\n }\n\n let targetStr = \"\"; // LinkTarget.NONE\n switch (target) {\n case LinkTarget.NONE:\n break;\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n link.target = targetStr;\n\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n}\n\nfunction isDataScheme(url) {\n const ii = url.length;\n let i = 0;\n while (i < ii && url[i].trim() === \"\") {\n i++;\n }\n return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\n/**\n * Gets the filename from a given URL.\n * @param {string} url\n * @returns {string}\n */\nfunction getFilenameFromUrl(url) {\n const anchor = url.indexOf(\"#\");\n const query = url.indexOf(\"?\");\n const end = Math.min(\n anchor > 0 ? anchor : url.length,\n query > 0 ? query : url.length\n );\n return url.substring(url.lastIndexOf(\"/\", end) + 1, end);\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n if (typeof url !== \"string\") {\n return defaultFilename;\n }\n if (isDataScheme(url)) {\n warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n return defaultFilename;\n }\n const reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n const splitURI = reURI.exec(url);\n let suggestedFilename =\n reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.includes(\"%\")) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename = reFilename.exec(\n decodeURIComponent(suggestedFilename)\n )[0];\n } catch (ex) {\n // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || defaultFilename;\n}\n\nclass StatTimer {\n constructor() {\n this.started = Object.create(null);\n this.times = [];\n }\n\n time(name) {\n if (name in this.started) {\n warn(`Timer is already running for ${name}`);\n }\n this.started[name] = Date.now();\n }\n\n timeEnd(name) {\n if (!(name in this.started)) {\n warn(`Timer has not been started for ${name}`);\n }\n this.times.push({\n name,\n start: this.started[name],\n end: Date.now(),\n });\n // Remove timer from started so it can be called again.\n delete this.started[name];\n }\n\n toString() {\n // Find the longest name for padding purposes.\n const outBuf = [];\n let longest = 0;\n for (const time of this.times) {\n const name = time.name;\n if (name.length > longest) {\n longest = name.length;\n }\n }\n for (const time of this.times) {\n const duration = time.end - time.start;\n outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\\n`);\n }\n return outBuf.join(\"\");\n }\n}\n\nfunction isFetchSupported() {\n return (\n typeof fetch !== \"undefined\" &&\n typeof Response !== \"undefined\" &&\n \"body\" in Response.prototype &&\n typeof ReadableStream !== \"undefined\"\n );\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n try {\n const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url);\n // The Fetch API only supports the http/https protocols, and not file/ftp.\n return protocol === \"http:\" || protocol === \"https:\";\n } catch (ex) {\n return false; // `new URL()` will throw on incorrect data.\n }\n}\n\n/**\n * @param {string} src\n * @param {boolean} [removeScriptElement]\n * @returns {Promise}\n */\nfunction loadScript(src, removeScriptElement = false) {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = src;\n\n script.onload = function (evt) {\n if (removeScriptElement) {\n script.remove();\n }\n resolve(evt);\n };\n script.onerror = function () {\n reject(new Error(`Cannot load script at: ${script.src}`));\n };\n (document.head || document.documentElement).appendChild(script);\n });\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n console.log(\"Deprecated API usage: \" + details);\n}\n\nlet pdfDateStringRegex;\n\nclass PDFDateString {\n /**\n * Convert a PDF date string to a JavaScript `Date` object.\n *\n * The PDF date string format is described in section 7.9.4 of the official\n * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n * edition) Adobe describes the same format including a trailing apostrophe.\n * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n * them. We ignore all apostrophes as they are not necessary for date parsing.\n *\n * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n * parts of the date string).\n *\n * @param {string} input\n * @returns {Date|null}\n */\n static toDateObject(input) {\n if (!input || !isString(input)) {\n return null;\n }\n\n // Lazily initialize the regular expression.\n if (!pdfDateStringRegex) {\n pdfDateStringRegex = new RegExp(\n \"^D:\" + // Prefix (required)\n \"(\\\\d{4})\" + // Year (required)\n \"(\\\\d{2})?\" + // Month (optional)\n \"(\\\\d{2})?\" + // Day (optional)\n \"(\\\\d{2})?\" + // Hour (optional)\n \"(\\\\d{2})?\" + // Minute (optional)\n \"(\\\\d{2})?\" + // Second (optional)\n \"([Z|+|-])?\" + // Universal time relation (optional)\n \"(\\\\d{2})?\" + // Offset hour (optional)\n \"'?\" + // Splitting apostrophe (optional)\n \"(\\\\d{2})?\" + // Offset minute (optional)\n \"'?\" // Trailing apostrophe (optional)\n );\n }\n\n // Optional fields that don't satisfy the requirements from the regular\n // expression (such as incorrect digit counts or numbers that are out of\n // range) will fall back the defaults from the specification.\n const matches = pdfDateStringRegex.exec(input);\n if (!matches) {\n return null;\n }\n\n // JavaScript's `Date` object expects the month to be between 0 and 11\n // instead of 1 and 12, so we have to correct for that.\n const year = parseInt(matches[1], 10);\n let month = parseInt(matches[2], 10);\n month = month >= 1 && month <= 12 ? month - 1 : 0;\n let day = parseInt(matches[3], 10);\n day = day >= 1 && day <= 31 ? day : 1;\n let hour = parseInt(matches[4], 10);\n hour = hour >= 0 && hour <= 23 ? hour : 0;\n let minute = parseInt(matches[5], 10);\n minute = minute >= 0 && minute <= 59 ? minute : 0;\n let second = parseInt(matches[6], 10);\n second = second >= 0 && second <= 59 ? second : 0;\n const universalTimeRelation = matches[7] || \"Z\";\n let offsetHour = parseInt(matches[8], 10);\n offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n let offsetMinute = parseInt(matches[9], 10) || 0;\n offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n // Universal time relation 'Z' means that the local time is equal to the\n // universal time, whereas the relations '+'/'-' indicate that the local\n // time is later respectively earlier than the universal time. Every date\n // is normalized to universal time.\n if (universalTimeRelation === \"-\") {\n hour += offsetHour;\n minute += offsetMinute;\n } else if (universalTimeRelation === \"+\") {\n hour -= offsetHour;\n minute -= offsetMinute;\n }\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n }\n}\n\nexport {\n addLinkAttributes,\n BaseCanvasFactory,\n BaseCMapReaderFactory,\n DEFAULT_LINK_REL,\n deprecated,\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMSVGFactory,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n isDataScheme,\n isFetchSupported,\n isPdfFile,\n isValidFetchUrl,\n LinkTarget,\n loadScript,\n PageViewport,\n PDFDateString,\n RenderingCancelledException,\n StatTimer,\n};\n", + "module.exports = require(\"regenerator-runtime\");\n", + "/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\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\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// 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 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 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 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 errorFontGetPath: \"errorFontGetPath\",\n errorMarkedContent: \"errorMarkedContent\",\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 * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl) {\n if (!url) {\n return null;\n }\n try {\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 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) {\n if (this.constructor === BaseException) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n this.message = message;\n this.name = this.constructor.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);\n this.code = code;\n }\n}\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg);\n this.details = details;\n }\n}\n\nclass InvalidPDFException extends BaseException {}\n\nclass MissingPDFException extends BaseException {}\n\nclass UnexpectedResponseException extends BaseException {\n constructor(msg, status) {\n super(msg);\n this.status = status;\n }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {}\n\nconst NullCharactersRegExp = /\\x00/g;\n\n/**\n * @param {string} str\n */\nfunction removeNullCharacters(str) {\n if (typeof str !== \"string\") {\n warn(\"The argument for removeNullCharacters must be a string.\");\n return str;\n }\n return str.replace(NullCharactersRegExp, \"\");\n}\n\nfunction bytesToString(bytes) {\n assert(\n bytes !== null && typeof bytes === \"object\" && bytes.length !== undefined,\n \"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 assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\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 */\nfunction arrayByteLength(arr) {\n if (arr.length !== undefined) {\n return arr.length;\n }\n assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\n return arr.byteLength;\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 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\n// prettier-ignore\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,\n 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 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, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,\n 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,\n 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,\n 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC\n];\n\nfunction stringToPDFString(str) {\n const length = str.length,\n strBuf = [];\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n // UTF16BE BOM\n for (let i = 2; i < length; i += 2) {\n strBuf.push(\n String.fromCharCode((str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))\n );\n }\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n // UTF16LE BOM\n for (let i = 2; i < length; i += 2) {\n strBuf.push(\n String.fromCharCode((str.charCodeAt(i + 1) << 8) | str.charCodeAt(i))\n );\n }\n } else {\n for (let i = 0; i < length; ++i) {\n const code = PDFStringTranslateTable[str.charCodeAt(i)];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\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(String.fromCharCode((char >> 8) & 0xff));\n buf.push(String.fromCharCode(char & 0xff));\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 isBool(v) {\n return typeof v === \"boolean\";\n}\n\nfunction isNum(v) {\n return typeof v === \"number\";\n}\n\nfunction isString(v) {\n return typeof v === \"string\";\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\nfunction createObjectURL(data, contentType = \"\", forceDataSchema = false) {\n if (URL.createObjectURL && !forceDataSchema) {\n return URL.createObjectURL(new Blob([data], { type: contentType }));\n }\n // Blob/createObjectURL is not available, falling back to data schema.\n const digits =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n let buffer = `data:${contentType};base64,`;\n for (let i = 0, ii = data.length; i < ii; i += 3) {\n const b1 = data[i] & 0xff;\n const b2 = data[i + 1] & 0xff;\n const b3 = data[i + 2] & 0xff;\n const d1 = b1 >> 2,\n d2 = ((b1 & 3) << 4) | (b2 >> 4);\n const d3 = i + 1 < ii ? ((b2 & 0xf) << 2) | (b3 >> 6) : 64;\n const d4 = i + 2 < ii ? b3 & 0x3f : 64;\n buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n }\n return buffer;\n}\n\nexport {\n AbortException,\n AnnotationActionEventType,\n AnnotationBorderStyleType,\n AnnotationFieldFlag,\n AnnotationFlag,\n AnnotationMarkedState,\n AnnotationReplyType,\n AnnotationReviewState,\n AnnotationStateModelType,\n AnnotationType,\n arrayByteLength,\n arraysToBytes,\n assert,\n BaseException,\n bytesToString,\n CMapCompressionType,\n createObjectURL,\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 isBool,\n IsEvalSupportedCached,\n IsLittleEndianCached,\n isNum,\n isSameOrigin,\n isString,\n MissingPDFException,\n objectFromMap,\n objectSize,\n OPS,\n PageActionEventType,\n PasswordException,\n PasswordResponses,\n PermissionFlag,\n removeNullCharacters,\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\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 (typeof globalThis === \"undefined\" || !globalThis._pdfjsCompatibilityChecked)\n) {\n // Provides support for globalThis in legacy browsers.\n // Support: Firefox<65, Chrome<71, Safari<12.1\n if (typeof globalThis === \"undefined\" || globalThis.Math !== Math) {\n // eslint-disable-next-line no-global-assign\n globalThis = require(\"core-js/es/global-this\");\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 // Provides support for Object.fromEntries in legacy browsers.\n // Support: Firefox<63, Chrome<73, Safari<12.1\n (function checkObjectFromEntries() {\n if (Object.fromEntries) {\n return;\n }\n require(\"core-js/es/object/from-entries.js\");\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\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: Safari<10.1, Node.js\n (function checkReadableStream() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n // The current image decoders are synchronous, hence `ReadableStream`\n // shouldn't need to be polyfilled for the IMAGE_DECODERS build target.\n return;\n }\n let isReadableStreamSupported = false;\n\n if (typeof ReadableStream !== \"undefined\") {\n // MS Edge may say it has ReadableStream but they are not up to spec yet.\n try {\n // eslint-disable-next-line no-new\n new ReadableStream({\n start(controller) {\n controller.close();\n },\n });\n isReadableStreamSupported = true;\n } catch (e) {\n // The ReadableStream constructor cannot be used.\n }\n }\n if (isReadableStreamSupported) {\n return;\n }\n globalThis.ReadableStream = require(\"web-streams-polyfill/dist/ponyfill.js\").ReadableStream;\n })();\n\n // Provides support for String.prototype.padStart in legacy browsers.\n // Support: Chrome<57, Safari<10\n (function checkStringPadStart() {\n if (String.prototype.padStart) {\n return;\n }\n require(\"core-js/es/string/pad-start.js\");\n })();\n\n // Provides support for String.prototype.padEnd in legacy browsers.\n // Support: Chrome<57, Safari<10\n (function checkStringPadEnd() {\n if (String.prototype.padEnd) {\n return;\n }\n require(\"core-js/es/string/pad-end.js\");\n })();\n\n // Provides support for Object.values in legacy browsers.\n // Support: Chrome<54, Safari<10.1\n (function checkObjectValues() {\n if (Object.values) {\n return;\n }\n Object.values = require(\"core-js/es/object/values.js\");\n })();\n\n // Provides support for Object.entries in legacy browsers.\n // Support: Chrome<54, Safari<10.1\n (function checkObjectEntries() {\n if (Object.entries) {\n return;\n }\n Object.entries = require(\"core-js/es/object/entries.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.global-this');\n\nmodule.exports = require('../internals/global');\n", + "var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\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*/\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 propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\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 = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(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", + "'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 fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.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.call(it, '') : Object(it);\n} : Object;\n", + "var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\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 isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n", + "module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n", + "var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n", + "var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied 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 DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\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 isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n", + "var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\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 state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\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 typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n", + "var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n", + "var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\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 NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\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) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(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 inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /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", + "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.10.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n", + "module.exports = false;\n", + "var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n", + "module.exports = {};\n", + "var has = require('../internals/has');\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) {\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 (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n", + "var getBuiltIn = require('../internals/get-built-in');\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\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 ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n", + "var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n", + "var global = require('../internals/global');\n\nmodule.exports = global;\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 has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\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) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n", + "var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\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 = toLength(O.length);\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 toInteger = require('../internals/to-integer');\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(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n", + "var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n", + "var toInteger = require('../internals/to-integer');\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 = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\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');\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 : typeof detection == 'function' ? 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", + "require('../../modules/es.array.iterator');\nrequire('../../modules/es.object.from-entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.fromEntries;\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 defineIterator = require('../internals/define-iterator');\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\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\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", + "var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\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 createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (NATIVE_SYMBOL && has(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n } return WellKnownSymbolsStore[name];\n};\n", + "var IS_NODE = require('../internals/engine-is-node');\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 // eslint-disable-next-line es/no-symbol -- required for testing\n return !Symbol.sham &&\n // Chrome 38 Symbol has incorrect toString conversion\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n (IS_NODE ? V8_VERSION === 38 : V8_VERSION > 37 && V8_VERSION < 41);\n});\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 userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (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 && +version;\n", + "var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\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", + "var anObject = require('../internals/an-object');\nvar defineProperties = 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 /* global ActiveXObject -- old IE */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\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 : defineProperties(result, Properties);\n};\n", + "var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-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\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\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++], Properties[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", + "module.exports = {};\n", + "'use strict';\nvar $ = require('../internals/export');\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 IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\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 (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(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#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\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 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) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, 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 getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\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\nvar returnThis = function () { return this; };\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 = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n", + "var has = require('../internals/has');\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 ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n", + "var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\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", + "var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n", + "/* eslint-disable no-proto -- safe */\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 = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(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.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n", + "var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n", + "var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n", + "var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\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, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\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 (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\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", + "var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n", + "module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n", + "var classof = require('../internals/classof');\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 it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n", + "var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\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' && typeof O.callee == 'function' ? '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 anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n", + "'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n", + "require('../../modules/es.aggregate-error');\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');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n", + "'use strict';\nvar $ = require('../internals/export');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar iterate = require('../internals/iterate');\n\nvar $AggregateError = function AggregateError(errors, message) {\n var that = this;\n if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message);\n if (setPrototypeOf) {\n // eslint-disable-next-line unicorn/error-message -- expected\n that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n }\n if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message));\n var errorsArray = [];\n iterate(errors, errorsArray.push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\n$AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(5, $AggregateError),\n message: createPropertyDescriptor(5, ''),\n name: createPropertyDescriptor(5, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n AggregateError: $AggregateError\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 NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\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 InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n if (!GLOBAL_CORE_JS_PROMISE) {\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 (V8_VERSION === 66) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true;\n }\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructor.prototype['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(PromiseConstructor)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = PromiseConstructor.resolve(1);\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\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) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\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 then.call(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 state.reactions = [];\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 task.call(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 task.call(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 then.call(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, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(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 // 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: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\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 && typeof NativePromise == 'function') {\n nativeThen = NativePromise.prototype.then;\n\n // wrap native Promise#then for native async functions\n redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // wrap fetch result\n if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fetch: function fetch(input /* , init */) {\n return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n }\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 capability.reject.call(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 = aFunction(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 values.push(undefined);\n remaining++;\n $promiseResolve.call(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 = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(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", + "module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\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 aFunction = require('../internals/a-function');\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 : aFunction(S);\n};\n", + "var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(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(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(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, 1);\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 typeof postMessage == 'function' &&\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 userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n", + "var global = require('../internals/global');\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_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 (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n then = promise.then;\n notify = function () {\n then.call(promise, 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 notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, 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');\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 aFunction = require('../internals/a-function');\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 = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\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", + "'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\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 = aFunction(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 values.push(undefined);\n remaining++;\n promiseResolve.call(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 aFunction = require('../internals/a-function');\nvar getBuiltIn = require('../internals/get-built-in');\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 capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aFunction(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 errors.push(undefined);\n remaining++;\n promiseResolve.call(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 (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new (getBuiltIn('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 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 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 = typeof onFinally == 'function';\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// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n", + "'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\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: String(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 toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (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');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n", + "// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n", + "/**\n * web-streams-polyfill v3.0.2\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.WebStreamsPolyfill = {}));\n}(this, (function (exports) { 'use strict';\n\n /// \n var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n function (description) { return \"Symbol(\" + description + \")\"; };\n\n /// \n function noop() {\n // do nothing\n }\n function getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n }\n else if (typeof window !== 'undefined') {\n return window;\n }\n else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n }\n var globals = getGlobals();\n\n function typeIsObject(x) {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n }\n var rethrowAssertionErrorRejection = noop;\n\n var originalPromise = Promise;\n var originalPromiseThen = Promise.prototype.then;\n var originalPromiseResolve = Promise.resolve.bind(originalPromise);\n var originalPromiseReject = Promise.reject.bind(originalPromise);\n function newPromise(executor) {\n return new originalPromise(executor);\n }\n function promiseResolvedWith(value) {\n return originalPromiseResolve(value);\n }\n function promiseRejectedWith(reason) {\n return originalPromiseReject(reason);\n }\n function PerformPromiseThen(promise, onFulfilled, onRejected) {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected);\n }\n function uponPromise(promise, onFulfilled, onRejected) {\n PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);\n }\n function uponFulfillment(promise, onFulfilled) {\n uponPromise(promise, onFulfilled);\n }\n function uponRejection(promise, onRejected) {\n uponPromise(promise, undefined, onRejected);\n }\n function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n }\n function setPromiseIsHandledToTrue(promise) {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n }\n var queueMicrotask = (function () {\n var globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n var resolvedPromise = promiseResolvedWith(undefined);\n return function (fn) { return PerformPromiseThen(resolvedPromise, fn); };\n })();\n function reflectCall(F, V, args) {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n }\n function promiseCall(F, V, args) {\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n }\n catch (value) {\n return promiseRejectedWith(value);\n }\n }\n\n // Original from Chromium\n // https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n var QUEUE_MAX_ARRAY_SIZE = 16384;\n /**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\n var SimpleQueue = /** @class */ (function () {\n function SimpleQueue() {\n this._cursor = 0;\n this._size = 0;\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n Object.defineProperty(SimpleQueue.prototype, \"length\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n SimpleQueue.prototype.push = function (element) {\n var oldBack = this._back;\n var newBack = oldBack;\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n };\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n SimpleQueue.prototype.shift = function () { // must not be called on an empty queue\n var oldFront = this._front;\n var newFront = oldFront;\n var oldCursor = this._cursor;\n var newCursor = oldCursor + 1;\n var elements = oldFront._elements;\n var element = elements[oldCursor];\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n newFront = oldFront._next;\n newCursor = 0;\n }\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined;\n return element;\n };\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n SimpleQueue.prototype.forEach = function (callback) {\n var i = this._cursor;\n var node = this._front;\n var elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n node = node._next;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n };\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n SimpleQueue.prototype.peek = function () { // must not be called on an empty queue\n var front = this._front;\n var cursor = this._cursor;\n return front._elements[cursor];\n };\n return SimpleQueue;\n }());\n\n function ReadableStreamReaderGenericInitialize(reader, stream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n }\n else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n }\n else {\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n }\n // A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n // check.\n function ReadableStreamReaderGenericCancel(reader, reason) {\n var stream = reader._ownerReadableStream;\n return ReadableStreamCancel(stream, reason);\n }\n function ReadableStreamReaderGenericRelease(reader) {\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\n }\n else {\n defaultReaderClosedPromiseResetToRejected(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\n }\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined;\n }\n // Helper functions for the readers.\n function readerLockException(name) {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n }\n // Helper functions for the ReadableStreamDefaultReader.\n function defaultReaderClosedPromiseInitialize(reader) {\n reader._closedPromise = newPromise(function (resolve, reject) {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n }\n function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n }\n function defaultReaderClosedPromiseInitializeAsResolved(reader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n }\n function defaultReaderClosedPromiseReject(reader, reason) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n }\n function defaultReaderClosedPromiseResetToRejected(reader, reason) {\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n }\n function defaultReaderClosedPromiseResolve(reader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n }\n\n var AbortSteps = SymbolPolyfill('[[AbortSteps]]');\n var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');\n var CancelSteps = SymbolPolyfill('[[CancelSteps]]');\n var PullSteps = SymbolPolyfill('[[PullSteps]]');\n\n /// \n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\n var NumberIsFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n };\n\n /// \n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\n var MathTrunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n };\n\n // https://heycam.github.io/webidl/#idl-dictionaries\n function isDictionary(x) {\n return typeof x === 'object' || typeof x === 'function';\n }\n function assertDictionary(obj, context) {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(context + \" is not an object.\");\n }\n }\n // https://heycam.github.io/webidl/#idl-callback-functions\n function assertFunction(x, context) {\n if (typeof x !== 'function') {\n throw new TypeError(context + \" is not a function.\");\n }\n }\n // https://heycam.github.io/webidl/#idl-object\n function isObject(x) {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n }\n function assertObject(x, context) {\n if (!isObject(x)) {\n throw new TypeError(context + \" is not an object.\");\n }\n }\n function assertRequiredArgument(x, position, context) {\n if (x === undefined) {\n throw new TypeError(\"Parameter \" + position + \" is required in '\" + context + \"'.\");\n }\n }\n function assertRequiredField(x, field, context) {\n if (x === undefined) {\n throw new TypeError(field + \" is required in '\" + context + \"'.\");\n }\n }\n // https://heycam.github.io/webidl/#idl-unrestricted-double\n function convertUnrestrictedDouble(value) {\n return Number(value);\n }\n function censorNegativeZero(x) {\n return x === 0 ? 0 : x;\n }\n function integerPart(x) {\n return censorNegativeZero(MathTrunc(x));\n }\n // https://heycam.github.io/webidl/#idl-unsigned-long-long\n function convertUnsignedLongLongWithEnforceRange(value, context) {\n var lowerBound = 0;\n var upperBound = Number.MAX_SAFE_INTEGER;\n var x = Number(value);\n x = censorNegativeZero(x);\n if (!NumberIsFinite(x)) {\n throw new TypeError(context + \" is not a finite number\");\n }\n x = integerPart(x);\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(context + \" is outside the accepted range of \" + lowerBound + \" to \" + upperBound + \", inclusive\");\n }\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n return x;\n }\n\n function assertReadableStream(x, context) {\n if (!IsReadableStream(x)) {\n throw new TypeError(context + \" is not a ReadableStream.\");\n }\n }\n\n // Abstract operations for the ReadableStream.\n function AcquireReadableStreamDefaultReader(stream) {\n return new ReadableStreamDefaultReader(stream);\n }\n // ReadableStream API exposed for controllers.\n function ReadableStreamAddReadRequest(stream, readRequest) {\n stream._reader._readRequests.push(readRequest);\n }\n function ReadableStreamFulfillReadRequest(stream, chunk, done) {\n var reader = stream._reader;\n var readRequest = reader._readRequests.shift();\n if (done) {\n readRequest._closeSteps();\n }\n else {\n readRequest._chunkSteps(chunk);\n }\n }\n function ReadableStreamGetNumReadRequests(stream) {\n return stream._reader._readRequests.length;\n }\n function ReadableStreamHasDefaultReader(stream) {\n var reader = stream._reader;\n if (reader === undefined) {\n return false;\n }\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n return true;\n }\n /**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\n var ReadableStreamDefaultReader = /** @class */ (function () {\n function ReadableStreamDefaultReader(stream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n ReadableStreamReaderGenericInitialize(this, stream);\n this._readRequests = new SimpleQueue();\n }\n Object.defineProperty(ReadableStreamDefaultReader.prototype, \"closed\", {\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get: function () {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n return this._closedPromise;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n ReadableStreamDefaultReader.prototype.cancel = function (reason) {\n if (reason === void 0) { reason = undefined; }\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n return ReadableStreamReaderGenericCancel(this, reason);\n };\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n ReadableStreamDefaultReader.prototype.read = function () {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n var resolvePromise;\n var rejectPromise;\n var promise = newPromise(function (resolve, reject) {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n var readRequest = {\n _chunkSteps: function (chunk) { return resolvePromise({ value: chunk, done: false }); },\n _closeSteps: function () { return resolvePromise({ value: undefined, done: true }); },\n _errorSteps: function (e) { return rejectPromise(e); }\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n };\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n ReadableStreamDefaultReader.prototype.releaseLock = function () {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n if (this._ownerReadableStream === undefined) {\n return;\n }\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n ReadableStreamReaderGenericRelease(this);\n };\n return ReadableStreamDefaultReader;\n }());\n Object.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n }\n // Abstract operations for the readers.\n function IsReadableStreamDefaultReader(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n return true;\n }\n function ReadableStreamDefaultReaderRead(reader, readRequest) {\n var stream = reader._ownerReadableStream;\n stream._disturbed = true;\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n }\n else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n }\n else {\n stream._readableStreamController[PullSteps](readRequest);\n }\n }\n // Helper functions for the ReadableStreamDefaultReader.\n function defaultReaderBrandCheckException(name) {\n return new TypeError(\"ReadableStreamDefaultReader.prototype.\" + name + \" can only be used on a ReadableStreamDefaultReader\");\n }\n\n /// \n var _a;\n var AsyncIteratorPrototype;\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = (_a = {},\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n _a[SymbolPolyfill.asyncIterator] = function () {\n return this;\n },\n _a);\n Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });\n }\n\n /// \n var ReadableStreamAsyncIteratorImpl = /** @class */ (function () {\n function ReadableStreamAsyncIteratorImpl(reader, preventCancel) {\n this._ongoingPromise = undefined;\n this._isFinished = false;\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n ReadableStreamAsyncIteratorImpl.prototype.next = function () {\n var _this = this;\n var nextSteps = function () { return _this._nextSteps(); };\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n };\n ReadableStreamAsyncIteratorImpl.prototype.return = function (value) {\n var _this = this;\n var returnSteps = function () { return _this._returnSteps(value); };\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n };\n ReadableStreamAsyncIteratorImpl.prototype._nextSteps = function () {\n var _this = this;\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n var reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n var resolvePromise;\n var rejectPromise;\n var promise = newPromise(function (resolve, reject) {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n var readRequest = {\n _chunkSteps: function (chunk) {\n _this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(function () { return resolvePromise({ value: chunk, done: false }); });\n },\n _closeSteps: function () {\n _this._ongoingPromise = undefined;\n _this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: function (reason) {\n _this._ongoingPromise = undefined;\n _this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n };\n ReadableStreamAsyncIteratorImpl.prototype._returnSteps = function (value) {\n if (this._isFinished) {\n return Promise.resolve({ value: value, done: true });\n }\n this._isFinished = true;\n var reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n if (!this._preventCancel) {\n var result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, function () { return ({ value: value, done: true }); });\n }\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value: value, done: true });\n };\n return ReadableStreamAsyncIteratorImpl;\n }());\n var ReadableStreamAsyncIteratorPrototype = {\n next: function () {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n return: function (value) {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n };\n if (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n }\n // Abstract operations for the ReadableStream.\n function AcquireReadableStreamAsyncIterator(stream, preventCancel) {\n var reader = AcquireReadableStreamDefaultReader(stream);\n var impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n }\n function IsReadableStreamAsyncIterator(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n return true;\n }\n // Helper functions for the ReadableStream.\n function streamAsyncIteratorBrandCheckException(name) {\n return new TypeError(\"ReadableStreamAsyncIterator.\" + name + \" can only be used on a ReadableSteamAsyncIterator\");\n }\n\n /// \n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\n var NumberIsNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n };\n\n function IsFiniteNonNegativeNumber(v) {\n if (!IsNonNegativeNumber(v)) {\n return false;\n }\n if (v === Infinity) {\n return false;\n }\n return true;\n }\n function IsNonNegativeNumber(v) {\n if (typeof v !== 'number') {\n return false;\n }\n if (NumberIsNaN(v)) {\n return false;\n }\n if (v < 0) {\n return false;\n }\n return true;\n }\n\n function DequeueValue(container) {\n var pair = container._queue.shift();\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n return pair.value;\n }\n function EnqueueValueWithSize(container, value, size) {\n size = Number(size);\n if (!IsFiniteNonNegativeNumber(size)) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n container._queue.push({ value: value, size: size });\n container._queueTotalSize += size;\n }\n function PeekQueueValue(container) {\n var pair = container._queue.peek();\n return pair.value;\n }\n function ResetQueue(container) {\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n }\n\n function CreateArrayFromList(elements) {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice();\n }\n function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n }\n // Not implemented correctly\n function TransferArrayBuffer(O) {\n return O;\n }\n // Not implemented correctly\n function IsDetachedBuffer(O) {\n return false;\n }\n\n /**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\n var ReadableStreamBYOBRequest = /** @class */ (function () {\n function ReadableStreamBYOBRequest() {\n throw new TypeError('Illegal constructor');\n }\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, \"view\", {\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get: function () {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n return this._view;\n },\n enumerable: false,\n configurable: true\n });\n ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n if (IsDetachedBuffer(this._view.buffer)) ;\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n };\n ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n if (view.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (view.buffer.byteLength === 0) {\n throw new TypeError(\"chunk's buffer must have non-zero byteLength\");\n }\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n };\n return ReadableStreamBYOBRequest;\n }());\n Object.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n }\n /**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\n var ReadableByteStreamController = /** @class */ (function () {\n function ReadableByteStreamController() {\n throw new TypeError('Illegal constructor');\n }\n Object.defineProperty(ReadableByteStreamController.prototype, \"byobRequest\", {\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get: function () {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n if (this._byobRequest === null && this._pendingPullIntos.length > 0) {\n var firstDescriptor = this._pendingPullIntos.peek();\n var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, this, view);\n this._byobRequest = byobRequest;\n }\n return this._byobRequest;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ReadableByteStreamController.prototype, \"desiredSize\", {\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get: function () {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n return ReadableByteStreamControllerGetDesiredSize(this);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n ReadableByteStreamController.prototype.close = function () {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n var state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be closed\");\n }\n ReadableByteStreamControllerClose(this);\n };\n ReadableByteStreamController.prototype.enqueue = function (chunk) {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(\"chunk's buffer must have non-zero byteLength\");\n }\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n var state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be enqueued to\");\n }\n ReadableByteStreamControllerEnqueue(this, chunk);\n };\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n ReadableByteStreamController.prototype.error = function (e) {\n if (e === void 0) { e = undefined; }\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n ReadableByteStreamControllerError(this, e);\n };\n /** @internal */\n ReadableByteStreamController.prototype[CancelSteps] = function (reason) {\n if (this._pendingPullIntos.length > 0) {\n var firstDescriptor = this._pendingPullIntos.peek();\n firstDescriptor.bytesFilled = 0;\n }\n ResetQueue(this);\n var result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n };\n /** @internal */\n ReadableByteStreamController.prototype[PullSteps] = function (readRequest) {\n var stream = this._controlledReadableByteStream;\n if (this._queueTotalSize > 0) {\n var entry = this._queue.shift();\n this._queueTotalSize -= entry.byteLength;\n ReadableByteStreamControllerHandleQueueDrain(this);\n var view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n readRequest._chunkSteps(view);\n return;\n }\n var autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n var buffer = void 0;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n }\n catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n var pullIntoDescriptor = {\n buffer: buffer,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n };\n return ReadableByteStreamController;\n }());\n Object.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n }\n // Abstract operations for the ReadableByteStreamController.\n function IsReadableByteStreamController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n return true;\n }\n function IsReadableStreamBYOBRequest(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n return true;\n }\n function ReadableByteStreamControllerCallPullIfNeeded(controller) {\n var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n controller._pulling = true;\n // TODO: Test controller argument\n var pullPromise = controller._pullAlgorithm();\n uponPromise(pullPromise, function () {\n controller._pulling = false;\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n }, function (e) {\n ReadableByteStreamControllerError(controller, e);\n });\n }\n function ReadableByteStreamControllerClearPendingPullIntos(controller) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n }\n function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\n var done = false;\n if (stream._state === 'closed') {\n done = true;\n }\n var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView, done);\n }\n else {\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n }\n function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\n var bytesFilled = pullIntoDescriptor.bytesFilled;\n var elementSize = pullIntoDescriptor.elementSize;\n return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\n }\n function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\n controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength });\n controller._queueTotalSize += byteLength;\n }\n function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\n var elementSize = pullIntoDescriptor.elementSize;\n var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n var totalBytesToCopyRemaining = maxBytesToCopy;\n var ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n var queue = controller._queue;\n while (totalBytesToCopyRemaining > 0) {\n var headOfQueue = queue.peek();\n var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n }\n else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n return ready;\n }\n function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n pullIntoDescriptor.bytesFilled += size;\n }\n function ReadableByteStreamControllerHandleQueueDrain(controller) {\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n }\n else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n }\n function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\n if (controller._byobRequest === null) {\n return;\n }\n controller._byobRequest._associatedReadableByteStreamController = undefined;\n controller._byobRequest._view = null;\n controller._byobRequest = null;\n }\n function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n var pullIntoDescriptor = controller._pendingPullIntos.peek();\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n }\n }\n }\n function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {\n var stream = controller._controlledReadableByteStream;\n var elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = view.constructor.BYTES_PER_ELEMENT;\n }\n var ctor = view.constructor;\n var buffer = TransferArrayBuffer(view.buffer);\n var pullIntoDescriptor = {\n buffer: buffer,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize: elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n if (stream._state === 'closed') {\n var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n ReadableByteStreamControllerHandleQueueDrain(controller);\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n if (controller._closeRequested) {\n var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n controller._pendingPullIntos.push(pullIntoDescriptor);\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n var stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n }\n function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\n if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n // TODO: Figure out whether we should detach the buffer or not here.\n return;\n }\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n }\n function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\n var firstDescriptor = controller._pendingPullIntos.peek();\n var state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n }\n else {\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n function ReadableByteStreamControllerShiftPendingPullInto(controller) {\n var descriptor = controller._pendingPullIntos.shift();\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n return descriptor;\n }\n function ReadableByteStreamControllerShouldCallPull(controller) {\n var stream = controller._controlledReadableByteStream;\n if (stream._state !== 'readable') {\n return false;\n }\n if (controller._closeRequested) {\n return false;\n }\n if (!controller._started) {\n return false;\n }\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n if (desiredSize > 0) {\n return true;\n }\n return false;\n }\n function ReadableByteStreamControllerClearAlgorithms(controller) {\n controller._pullAlgorithm = undefined;\n controller._cancelAlgorithm = undefined;\n }\n // A client of ReadableByteStreamController may use these functions directly to bypass state check.\n function ReadableByteStreamControllerClose(controller) {\n var stream = controller._controlledReadableByteStream;\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n return;\n }\n if (controller._pendingPullIntos.length > 0) {\n var firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n throw e;\n }\n }\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n function ReadableByteStreamControllerEnqueue(controller, chunk) {\n var stream = controller._controlledReadableByteStream;\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n var buffer = chunk.buffer;\n var byteOffset = chunk.byteOffset;\n var byteLength = chunk.byteLength;\n var transferredBuffer = TransferArrayBuffer(buffer);\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n else {\n var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n }\n else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n }\n else {\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n function ReadableByteStreamControllerError(controller, e) {\n var stream = controller._controlledReadableByteStream;\n if (stream._state !== 'readable') {\n return;\n }\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n }\n function ReadableByteStreamControllerGetDesiredSize(controller) {\n var state = controller._controlledReadableByteStream._state;\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n return controller._strategyHWM - controller._queueTotalSize;\n }\n function ReadableByteStreamControllerRespond(controller, bytesWritten) {\n bytesWritten = Number(bytesWritten);\n if (!IsFiniteNonNegativeNumber(bytesWritten)) {\n throw new RangeError('bytesWritten must be a finite');\n }\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n }\n function ReadableByteStreamControllerRespondWithNewView(controller, view) {\n var firstDescriptor = controller._pendingPullIntos.peek();\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.byteLength !== view.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n firstDescriptor.buffer = view.buffer;\n ReadableByteStreamControllerRespondInternal(controller, view.byteLength);\n }\n function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {\n controller._controlledReadableByteStream = stream;\n controller._pullAgain = false;\n controller._pulling = false;\n controller._byobRequest = null;\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined;\n ResetQueue(controller);\n controller._closeRequested = false;\n controller._started = false;\n controller._strategyHWM = highWaterMark;\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n controller._pendingPullIntos = new SimpleQueue();\n stream._readableStreamController = controller;\n var startResult = startAlgorithm();\n uponPromise(promiseResolvedWith(startResult), function () {\n controller._started = true;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }, function (r) {\n ReadableByteStreamControllerError(controller, r);\n });\n }\n function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {\n var controller = Object.create(ReadableByteStreamController.prototype);\n var startAlgorithm = function () { return undefined; };\n var pullAlgorithm = function () { return promiseResolvedWith(undefined); };\n var cancelAlgorithm = function () { return promiseResolvedWith(undefined); };\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = function () { return underlyingByteSource.start(controller); };\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = function () { return underlyingByteSource.pull(controller); };\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = function (reason) { return underlyingByteSource.cancel(reason); };\n }\n var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);\n }\n function SetUpReadableStreamBYOBRequest(request, controller, view) {\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n }\n // Helper functions for the ReadableStreamBYOBRequest.\n function byobRequestBrandCheckException(name) {\n return new TypeError(\"ReadableStreamBYOBRequest.prototype.\" + name + \" can only be used on a ReadableStreamBYOBRequest\");\n }\n // Helper functions for the ReadableByteStreamController.\n function byteStreamControllerBrandCheckException(name) {\n return new TypeError(\"ReadableByteStreamController.prototype.\" + name + \" can only be used on a ReadableByteStreamController\");\n }\n\n // Abstract operations for the ReadableStream.\n function AcquireReadableStreamBYOBReader(stream) {\n return new ReadableStreamBYOBReader(stream);\n }\n // ReadableStream API exposed for controllers.\n function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {\n stream._reader._readIntoRequests.push(readIntoRequest);\n }\n function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\n var reader = stream._reader;\n var readIntoRequest = reader._readIntoRequests.shift();\n if (done) {\n readIntoRequest._closeSteps(chunk);\n }\n else {\n readIntoRequest._chunkSteps(chunk);\n }\n }\n function ReadableStreamGetNumReadIntoRequests(stream) {\n return stream._reader._readIntoRequests.length;\n }\n function ReadableStreamHasBYOBReader(stream) {\n var reader = stream._reader;\n if (reader === undefined) {\n return false;\n }\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n return true;\n }\n /**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\n var ReadableStreamBYOBReader = /** @class */ (function () {\n function ReadableStreamBYOBReader(stream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n ReadableStreamReaderGenericInitialize(this, stream);\n this._readIntoRequests = new SimpleQueue();\n }\n Object.defineProperty(ReadableStreamBYOBReader.prototype, \"closed\", {\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get: function () {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n return this._closedPromise;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n ReadableStreamBYOBReader.prototype.cancel = function (reason) {\n if (reason === void 0) { reason = undefined; }\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n return ReadableStreamReaderGenericCancel(this, reason);\n };\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n ReadableStreamBYOBReader.prototype.read = function (view) {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(\"view's buffer must have non-zero byteLength\"));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n var resolvePromise;\n var rejectPromise;\n var promise = newPromise(function (resolve, reject) {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n var readIntoRequest = {\n _chunkSteps: function (chunk) { return resolvePromise({ value: chunk, done: false }); },\n _closeSteps: function (chunk) { return resolvePromise({ value: chunk, done: true }); },\n _errorSteps: function (e) { return rejectPromise(e); }\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n };\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n ReadableStreamBYOBReader.prototype.releaseLock = function () {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n if (this._ownerReadableStream === undefined) {\n return;\n }\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n ReadableStreamReaderGenericRelease(this);\n };\n return ReadableStreamBYOBReader;\n }());\n Object.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n }\n // Abstract operations for the readers.\n function IsReadableStreamBYOBReader(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n return true;\n }\n function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {\n var stream = reader._ownerReadableStream;\n stream._disturbed = true;\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n }\n else {\n ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);\n }\n }\n // Helper functions for the ReadableStreamBYOBReader.\n function byobReaderBrandCheckException(name) {\n return new TypeError(\"ReadableStreamBYOBReader.prototype.\" + name + \" can only be used on a ReadableStreamBYOBReader\");\n }\n\n function ExtractHighWaterMark(strategy, defaultHWM) {\n var highWaterMark = strategy.highWaterMark;\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n return highWaterMark;\n }\n function ExtractSizeAlgorithm(strategy) {\n var size = strategy.size;\n if (!size) {\n return function () { return 1; };\n }\n return size;\n }\n\n function convertQueuingStrategy(init, context) {\n assertDictionary(init, context);\n var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n var size = init === null || init === void 0 ? void 0 : init.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, context + \" has member 'size' that\")\n };\n }\n function convertQueuingStrategySize(fn, context) {\n assertFunction(fn, context);\n return function (chunk) { return convertUnrestrictedDouble(fn(chunk)); };\n }\n\n function convertUnderlyingSink(original, context) {\n assertDictionary(original, context);\n var abort = original === null || original === void 0 ? void 0 : original.abort;\n var close = original === null || original === void 0 ? void 0 : original.close;\n var start = original === null || original === void 0 ? void 0 : original.start;\n var type = original === null || original === void 0 ? void 0 : original.type;\n var write = original === null || original === void 0 ? void 0 : original.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original, context + \" has member 'abort' that\"),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original, context + \" has member 'close' that\"),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original, context + \" has member 'start' that\"),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original, context + \" has member 'write' that\"),\n type: type\n };\n }\n function convertUnderlyingSinkAbortCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (reason) { return promiseCall(fn, original, [reason]); };\n }\n function convertUnderlyingSinkCloseCallback(fn, original, context) {\n assertFunction(fn, context);\n return function () { return promiseCall(fn, original, []); };\n }\n function convertUnderlyingSinkStartCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (controller) { return reflectCall(fn, original, [controller]); };\n }\n function convertUnderlyingSinkWriteCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (chunk, controller) { return promiseCall(fn, original, [chunk, controller]); };\n }\n\n function assertWritableStream(x, context) {\n if (!IsWritableStream(x)) {\n throw new TypeError(context + \" is not a WritableStream.\");\n }\n }\n\n /**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\n var WritableStream = /** @class */ (function () {\n function WritableStream(rawUnderlyingSink, rawStrategy) {\n if (rawUnderlyingSink === void 0) { rawUnderlyingSink = {}; }\n if (rawStrategy === void 0) { rawStrategy = {}; }\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n }\n else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n var underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n InitializeWritableStream(this);\n var type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n var highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n Object.defineProperty(WritableStream.prototype, \"locked\", {\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get: function () {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n return IsWritableStreamLocked(this);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n WritableStream.prototype.abort = function (reason) {\n if (reason === void 0) { reason = undefined; }\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n return WritableStreamAbort(this, reason);\n };\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n WritableStream.prototype.close = function () {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n return WritableStreamClose(this);\n };\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n WritableStream.prototype.getWriter = function () {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n return AcquireWritableStreamDefaultWriter(this);\n };\n return WritableStream;\n }());\n Object.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n }\n // Abstract operations for the WritableStream.\n function AcquireWritableStreamDefaultWriter(stream) {\n return new WritableStreamDefaultWriter(stream);\n }\n // Throws if and only if startAlgorithm throws.\n function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n if (highWaterMark === void 0) { highWaterMark = 1; }\n if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; }\n var stream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n var controller = Object.create(WritableStreamDefaultController.prototype);\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n }\n function InitializeWritableStream(stream) {\n stream._state = 'writable';\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n stream._writer = undefined;\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined;\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n }\n function IsWritableStream(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n return true;\n }\n function IsWritableStreamLocked(stream) {\n if (stream._writer === undefined) {\n return false;\n }\n return true;\n }\n function WritableStreamAbort(stream, reason) {\n var state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n var wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n var promise = newPromise(function (resolve, reject) {\n stream._pendingAbortRequest = {\n _promise: undefined,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest._promise = promise;\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n return promise;\n }\n function WritableStreamClose(stream) {\n var state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\"The stream (in \" + state + \" state) is not in the writable state and cannot be closed\"));\n }\n var promise = newPromise(function (resolve, reject) {\n var closeRequest = {\n _resolve: resolve,\n _reject: reject\n };\n stream._closeRequest = closeRequest;\n });\n var writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n return promise;\n }\n // WritableStream API exposed for controllers.\n function WritableStreamAddWriteRequest(stream) {\n var promise = newPromise(function (resolve, reject) {\n var writeRequest = {\n _resolve: resolve,\n _reject: reject\n };\n stream._writeRequests.push(writeRequest);\n });\n return promise;\n }\n function WritableStreamDealWithRejection(stream, error) {\n var state = stream._state;\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n WritableStreamFinishErroring(stream);\n }\n function WritableStreamStartErroring(stream, reason) {\n var controller = stream._writableStreamController;\n stream._state = 'erroring';\n stream._storedError = reason;\n var writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n }\n function WritableStreamFinishErroring(stream) {\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n var storedError = stream._storedError;\n stream._writeRequests.forEach(function (writeRequest) {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n var abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n var promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(promise, function () {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n }, function (reason) {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n }\n function WritableStreamFinishInFlightWrite(stream) {\n stream._inFlightWriteRequest._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n }\n function WritableStreamFinishInFlightWriteWithError(stream, error) {\n stream._inFlightWriteRequest._reject(error);\n stream._inFlightWriteRequest = undefined;\n WritableStreamDealWithRejection(stream, error);\n }\n function WritableStreamFinishInFlightClose(stream) {\n stream._inFlightCloseRequest._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n var state = stream._state;\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n stream._state = 'closed';\n var writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n }\n function WritableStreamFinishInFlightCloseWithError(stream, error) {\n stream._inFlightCloseRequest._reject(error);\n stream._inFlightCloseRequest = undefined;\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n }\n // TODO(ricea): Fix alphabetical order.\n function WritableStreamCloseQueuedOrInFlight(stream) {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n return true;\n }\n function WritableStreamHasOperationMarkedInFlight(stream) {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n return true;\n }\n function WritableStreamMarkCloseRequestInFlight(stream) {\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n }\n function WritableStreamMarkFirstWriteRequestInFlight(stream) {\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n }\n function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\n if (stream._closeRequest !== undefined) {\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n var writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n }\n function WritableStreamUpdateBackpressure(stream, backpressure) {\n var writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n }\n else {\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n stream._backpressure = backpressure;\n }\n /**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\n var WritableStreamDefaultWriter = /** @class */ (function () {\n function WritableStreamDefaultWriter(stream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n this._ownerWritableStream = stream;\n stream._writer = this;\n var state = stream._state;\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n }\n else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n defaultWriterClosedPromiseInitialize(this);\n }\n else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n }\n else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n }\n else {\n var storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n Object.defineProperty(WritableStreamDefaultWriter.prototype, \"closed\", {\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get: function () {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n return this._closedPromise;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(WritableStreamDefaultWriter.prototype, \"desiredSize\", {\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get: function () {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n return WritableStreamDefaultWriterGetDesiredSize(this);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(WritableStreamDefaultWriter.prototype, \"ready\", {\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get: function () {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n return this._readyPromise;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n WritableStreamDefaultWriter.prototype.abort = function (reason) {\n if (reason === void 0) { reason = undefined; }\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n return WritableStreamDefaultWriterAbort(this, reason);\n };\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n WritableStreamDefaultWriter.prototype.close = function () {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n var stream = this._ownerWritableStream;\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n return WritableStreamDefaultWriterClose(this);\n };\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n WritableStreamDefaultWriter.prototype.releaseLock = function () {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n var stream = this._ownerWritableStream;\n if (stream === undefined) {\n return;\n }\n WritableStreamDefaultWriterRelease(this);\n };\n WritableStreamDefaultWriter.prototype.write = function (chunk) {\n if (chunk === void 0) { chunk = undefined; }\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n return WritableStreamDefaultWriterWrite(this, chunk);\n };\n return WritableStreamDefaultWriter;\n }());\n Object.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n }\n // Abstract operations for the WritableStreamDefaultWriter.\n function IsWritableStreamDefaultWriter(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n return true;\n }\n // A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n function WritableStreamDefaultWriterAbort(writer, reason) {\n var stream = writer._ownerWritableStream;\n return WritableStreamAbort(stream, reason);\n }\n function WritableStreamDefaultWriterClose(writer) {\n var stream = writer._ownerWritableStream;\n return WritableStreamClose(stream);\n }\n function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\n var stream = writer._ownerWritableStream;\n var state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n return WritableStreamDefaultWriterClose(writer);\n }\n function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n }\n else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n }\n function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n }\n else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n }\n function WritableStreamDefaultWriterGetDesiredSize(writer) {\n var stream = writer._ownerWritableStream;\n var state = stream._state;\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n }\n function WritableStreamDefaultWriterRelease(writer) {\n var stream = writer._ownerWritableStream;\n var releasedError = new TypeError(\"Writer was released and can no longer be used to monitor the stream's closedness\");\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n stream._writer = undefined;\n writer._ownerWritableStream = undefined;\n }\n function WritableStreamDefaultWriterWrite(writer, chunk) {\n var stream = writer._ownerWritableStream;\n var controller = stream._writableStreamController;\n var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n var state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n var promise = WritableStreamAddWriteRequest(stream);\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n return promise;\n }\n var closeSentinel = {};\n /**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\n var WritableStreamDefaultController = /** @class */ (function () {\n function WritableStreamDefaultController() {\n throw new TypeError('Illegal constructor');\n }\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n WritableStreamDefaultController.prototype.error = function (e) {\n if (e === void 0) { e = undefined; }\n if (!IsWritableStreamDefaultController(this)) {\n throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');\n }\n var state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n WritableStreamDefaultControllerError(this, e);\n };\n /** @internal */\n WritableStreamDefaultController.prototype[AbortSteps] = function (reason) {\n var result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n };\n /** @internal */\n WritableStreamDefaultController.prototype[ErrorSteps] = function () {\n ResetQueue(this);\n };\n return WritableStreamDefaultController;\n }());\n Object.defineProperties(WritableStreamDefaultController.prototype, {\n error: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n }\n // Abstract operations implementing interface required by the WritableStream.\n function IsWritableStreamDefaultController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n return true;\n }\n function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined;\n controller._queueTotalSize = undefined;\n ResetQueue(controller);\n controller._started = false;\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n var startResult = startAlgorithm();\n var startPromise = promiseResolvedWith(startResult);\n uponPromise(startPromise, function () {\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }, function (r) {\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n });\n }\n function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {\n var controller = Object.create(WritableStreamDefaultController.prototype);\n var startAlgorithm = function () { return undefined; };\n var writeAlgorithm = function () { return promiseResolvedWith(undefined); };\n var closeAlgorithm = function () { return promiseResolvedWith(undefined); };\n var abortAlgorithm = function () { return promiseResolvedWith(undefined); };\n if (underlyingSink.start !== undefined) {\n startAlgorithm = function () { return underlyingSink.start(controller); };\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = function (chunk) { return underlyingSink.write(chunk, controller); };\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = function () { return underlyingSink.close(); };\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = function (reason) { return underlyingSink.abort(reason); };\n }\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n }\n // ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\n function WritableStreamDefaultControllerClearAlgorithms(controller) {\n controller._writeAlgorithm = undefined;\n controller._closeAlgorithm = undefined;\n controller._abortAlgorithm = undefined;\n controller._strategySizeAlgorithm = undefined;\n }\n function WritableStreamDefaultControllerClose(controller) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }\n function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\n try {\n return controller._strategySizeAlgorithm(chunk);\n }\n catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n }\n function WritableStreamDefaultControllerGetDesiredSize(controller) {\n return controller._strategyHWM - controller._queueTotalSize;\n }\n function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n }\n catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n var stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }\n // Abstract operations for the WritableStreamDefaultController.\n function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\n var stream = controller._controlledWritableStream;\n if (!controller._started) {\n return;\n }\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n var state = stream._state;\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n if (controller._queue.length === 0) {\n return;\n }\n var value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n }\n else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n }\n function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n }\n function WritableStreamDefaultControllerProcessClose(controller) {\n var stream = controller._controlledWritableStream;\n WritableStreamMarkCloseRequestInFlight(stream);\n DequeueValue(controller);\n var sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(sinkClosePromise, function () {\n WritableStreamFinishInFlightClose(stream);\n }, function (reason) {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n });\n }\n function WritableStreamDefaultControllerProcessWrite(controller, chunk) {\n var stream = controller._controlledWritableStream;\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n var sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(sinkWritePromise, function () {\n WritableStreamFinishInFlightWrite(stream);\n var state = stream._state;\n DequeueValue(controller);\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }, function (reason) {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n });\n }\n function WritableStreamDefaultControllerGetBackpressure(controller) {\n var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n }\n // A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n function WritableStreamDefaultControllerError(controller, error) {\n var stream = controller._controlledWritableStream;\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n }\n // Helper functions for the WritableStream.\n function streamBrandCheckException(name) {\n return new TypeError(\"WritableStream.prototype.\" + name + \" can only be used on a WritableStream\");\n }\n // Helper functions for the WritableStreamDefaultWriter.\n function defaultWriterBrandCheckException(name) {\n return new TypeError(\"WritableStreamDefaultWriter.prototype.\" + name + \" can only be used on a WritableStreamDefaultWriter\");\n }\n function defaultWriterLockException(name) {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n }\n function defaultWriterClosedPromiseInitialize(writer) {\n writer._closedPromise = newPromise(function (resolve, reject) {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n }\n function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n }\n function defaultWriterClosedPromiseInitializeAsResolved(writer) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n }\n function defaultWriterClosedPromiseReject(writer, reason) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n }\n function defaultWriterClosedPromiseResetToRejected(writer, reason) {\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n }\n function defaultWriterClosedPromiseResolve(writer) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n }\n function defaultWriterReadyPromiseInitialize(writer) {\n writer._readyPromise = newPromise(function (resolve, reject) {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n }\n function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n }\n function defaultWriterReadyPromiseInitializeAsResolved(writer) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n }\n function defaultWriterReadyPromiseReject(writer, reason) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n }\n function defaultWriterReadyPromiseReset(writer) {\n defaultWriterReadyPromiseInitialize(writer);\n }\n function defaultWriterReadyPromiseResetToRejected(writer, reason) {\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n }\n function defaultWriterReadyPromiseResolve(writer) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n }\n\n function isAbortSignal(value) {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof value.aborted === 'boolean';\n }\n catch (_a) {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n }\n\n /// \n var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;\n\n /// \n function isDOMExceptionConstructor(ctor) {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new ctor();\n return true;\n }\n catch (_a) {\n return false;\n }\n }\n function createDOMExceptionPolyfill() {\n var ctor = function DOMException(message, name) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n };\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n }\n var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\n function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {\n var reader = AcquireReadableStreamDefaultReader(source);\n var writer = AcquireWritableStreamDefaultWriter(dest);\n source._disturbed = true;\n var shuttingDown = false;\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n var currentWrite = promiseResolvedWith(undefined);\n return newPromise(function (resolve, reject) {\n var abortAlgorithm;\n if (signal !== undefined) {\n abortAlgorithm = function () {\n var error = new DOMException$1('Aborted', 'AbortError');\n var actions = [];\n if (!preventAbort) {\n actions.push(function () {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(function () {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(function () { return Promise.all(actions.map(function (action) { return action(); })); }, true, error);\n };\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n signal.addEventListener('abort', abortAlgorithm);\n }\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise(function (resolveLoop, rejectLoop) {\n function next(done) {\n if (done) {\n resolveLoop();\n }\n else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n next(false);\n });\n }\n function pipeStep() {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n return PerformPromiseThen(writer._readyPromise, function () {\n return newPromise(function (resolveRead, rejectRead) {\n ReadableStreamDefaultReaderRead(reader, {\n _chunkSteps: function (chunk) {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: function () { return resolveRead(true); },\n _errorSteps: rejectRead\n });\n });\n });\n }\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, function (storedError) {\n if (!preventAbort) {\n shutdownWithAction(function () { return WritableStreamAbort(dest, storedError); }, true, storedError);\n }\n else {\n shutdown(true, storedError);\n }\n });\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {\n if (!preventCancel) {\n shutdownWithAction(function () { return ReadableStreamCancel(source, storedError); }, true, storedError);\n }\n else {\n shutdown(true, storedError);\n }\n });\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, function () {\n if (!preventClose) {\n shutdownWithAction(function () { return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); });\n }\n else {\n shutdown();\n }\n });\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it');\n if (!preventCancel) {\n shutdownWithAction(function () { return ReadableStreamCancel(source, destClosed_1); }, true, destClosed_1);\n }\n else {\n shutdown(true, destClosed_1);\n }\n }\n setPromiseIsHandledToTrue(pipeLoop());\n function waitForWritesToFinish() {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n var oldCurrentWrite = currentWrite;\n return PerformPromiseThen(currentWrite, function () { return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; });\n }\n function isOrBecomesErrored(stream, promise, action) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n }\n else {\n uponRejection(promise, action);\n }\n }\n function isOrBecomesClosed(stream, promise, action) {\n if (stream._state === 'closed') {\n action();\n }\n else {\n uponFulfillment(promise, action);\n }\n }\n function shutdownWithAction(action, originalIsError, originalError) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n }\n else {\n doTheRest();\n }\n function doTheRest() {\n uponPromise(action(), function () { return finalize(originalIsError, originalError); }, function (newError) { return finalize(true, newError); });\n }\n }\n function shutdown(isError, error) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), function () { return finalize(isError, error); });\n }\n else {\n finalize(isError, error);\n }\n }\n function finalize(isError, error) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n }\n else {\n resolve(undefined);\n }\n }\n });\n }\n\n /**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\n var ReadableStreamDefaultController = /** @class */ (function () {\n function ReadableStreamDefaultController() {\n throw new TypeError('Illegal constructor');\n }\n Object.defineProperty(ReadableStreamDefaultController.prototype, \"desiredSize\", {\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get: function () {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n ReadableStreamDefaultController.prototype.close = function () {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n ReadableStreamDefaultControllerClose(this);\n };\n ReadableStreamDefaultController.prototype.enqueue = function (chunk) {\n if (chunk === void 0) { chunk = undefined; }\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n };\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n ReadableStreamDefaultController.prototype.error = function (e) {\n if (e === void 0) { e = undefined; }\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n ReadableStreamDefaultControllerError(this, e);\n };\n /** @internal */\n ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) {\n ResetQueue(this);\n var result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n };\n /** @internal */\n ReadableStreamDefaultController.prototype[PullSteps] = function (readRequest) {\n var stream = this._controlledReadableStream;\n if (this._queue.length > 0) {\n var chunk = DequeueValue(this);\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n }\n else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n readRequest._chunkSteps(chunk);\n }\n else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n };\n return ReadableStreamDefaultController;\n }());\n Object.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n }\n // Abstract operations for the ReadableStreamDefaultController.\n function IsReadableStreamDefaultController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n return true;\n }\n function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\n var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n controller._pulling = true;\n var pullPromise = controller._pullAlgorithm();\n uponPromise(pullPromise, function () {\n controller._pulling = false;\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n }, function (e) {\n ReadableStreamDefaultControllerError(controller, e);\n });\n }\n function ReadableStreamDefaultControllerShouldCallPull(controller) {\n var stream = controller._controlledReadableStream;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n if (!controller._started) {\n return false;\n }\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n if (desiredSize > 0) {\n return true;\n }\n return false;\n }\n function ReadableStreamDefaultControllerClearAlgorithms(controller) {\n controller._pullAlgorithm = undefined;\n controller._cancelAlgorithm = undefined;\n controller._strategySizeAlgorithm = undefined;\n }\n // A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n function ReadableStreamDefaultControllerClose(controller) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n var stream = controller._controlledReadableStream;\n controller._closeRequested = true;\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n }\n function ReadableStreamDefaultControllerEnqueue(controller, chunk) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n var stream = controller._controlledReadableStream;\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n }\n else {\n var chunkSize = void 0;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n }\n catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n }\n catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n function ReadableStreamDefaultControllerError(controller, e) {\n var stream = controller._controlledReadableStream;\n if (stream._state !== 'readable') {\n return;\n }\n ResetQueue(controller);\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n }\n function ReadableStreamDefaultControllerGetDesiredSize(controller) {\n var state = controller._controlledReadableStream._state;\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n return controller._strategyHWM - controller._queueTotalSize;\n }\n // This is used in the implementation of TransformStream.\n function ReadableStreamDefaultControllerHasBackpressure(controller) {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n return true;\n }\n function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {\n var state = controller._controlledReadableStream._state;\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n return false;\n }\n function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n controller._controlledReadableStream = stream;\n controller._queue = undefined;\n controller._queueTotalSize = undefined;\n ResetQueue(controller);\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n stream._readableStreamController = controller;\n var startResult = startAlgorithm();\n uponPromise(promiseResolvedWith(startResult), function () {\n controller._started = true;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }, function (r) {\n ReadableStreamDefaultControllerError(controller, r);\n });\n }\n function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {\n var controller = Object.create(ReadableStreamDefaultController.prototype);\n var startAlgorithm = function () { return undefined; };\n var pullAlgorithm = function () { return promiseResolvedWith(undefined); };\n var cancelAlgorithm = function () { return promiseResolvedWith(undefined); };\n if (underlyingSource.start !== undefined) {\n startAlgorithm = function () { return underlyingSource.start(controller); };\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = function () { return underlyingSource.pull(controller); };\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = function (reason) { return underlyingSource.cancel(reason); };\n }\n SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n }\n // Helper functions for the ReadableStreamDefaultController.\n function defaultControllerBrandCheckException(name) {\n return new TypeError(\"ReadableStreamDefaultController.prototype.\" + name + \" can only be used on a ReadableStreamDefaultController\");\n }\n\n function ReadableStreamTee(stream, cloneForBranch2) {\n var reader = AcquireReadableStreamDefaultReader(stream);\n var reading = false;\n var canceled1 = false;\n var canceled2 = false;\n var reason1;\n var reason2;\n var branch1;\n var branch2;\n var resolveCancelPromise;\n var cancelPromise = newPromise(function (resolve) {\n resolveCancelPromise = resolve;\n });\n function pullAlgorithm() {\n if (reading) {\n return promiseResolvedWith(undefined);\n }\n reading = true;\n var readRequest = {\n _chunkSteps: function (value) {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(function () {\n reading = false;\n var value1 = value;\n var value2 = value;\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // value2 = StructuredDeserialize(StructuredSerialize(value2));\n // }\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);\n }\n resolveCancelPromise(undefined);\n });\n },\n _closeSteps: function () {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController);\n }\n },\n _errorSteps: function () {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promiseResolvedWith(undefined);\n }\n function cancel1Algorithm(reason) {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n var compositeReason = CreateArrayFromList([reason1, reason2]);\n var cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n function cancel2Algorithm(reason) {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n var compositeReason = CreateArrayFromList([reason1, reason2]);\n var cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n function startAlgorithm() {\n // do nothing\n }\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n uponRejection(reader._closedPromise, function (r) {\n ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\n resolveCancelPromise(undefined);\n });\n return [branch1, branch2];\n }\n\n function convertUnderlyingDefaultOrByteSource(source, context) {\n assertDictionary(source, context);\n var original = source;\n var autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;\n var cancel = original === null || original === void 0 ? void 0 : original.cancel;\n var pull = original === null || original === void 0 ? void 0 : original.pull;\n var start = original === null || original === void 0 ? void 0 : original.start;\n var type = original === null || original === void 0 ? void 0 : original.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, context + \" has member 'autoAllocateChunkSize' that\"),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original, context + \" has member 'cancel' that\"),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original, context + \" has member 'pull' that\"),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original, context + \" has member 'start' that\"),\n type: type === undefined ? undefined : convertReadableStreamType(type, context + \" has member 'type' that\")\n };\n }\n function convertUnderlyingSourceCancelCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (reason) { return promiseCall(fn, original, [reason]); };\n }\n function convertUnderlyingSourcePullCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (controller) { return promiseCall(fn, original, [controller]); };\n }\n function convertUnderlyingSourceStartCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (controller) { return reflectCall(fn, original, [controller]); };\n }\n function convertReadableStreamType(type, context) {\n type = \"\" + type;\n if (type !== 'bytes') {\n throw new TypeError(context + \" '\" + type + \"' is not a valid enumeration value for ReadableStreamType\");\n }\n return type;\n }\n\n function convertReaderOptions(options, context) {\n assertDictionary(options, context);\n var mode = options === null || options === void 0 ? void 0 : options.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, context + \" has member 'mode' that\")\n };\n }\n function convertReadableStreamReaderMode(mode, context) {\n mode = \"\" + mode;\n if (mode !== 'byob') {\n throw new TypeError(context + \" '\" + mode + \"' is not a valid enumeration value for ReadableStreamReaderMode\");\n }\n return mode;\n }\n\n function convertIteratorOptions(options, context) {\n assertDictionary(options, context);\n var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n }\n\n function convertPipeOptions(options, context) {\n assertDictionary(options, context);\n var preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;\n var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n var preventClose = options === null || options === void 0 ? void 0 : options.preventClose;\n var signal = options === null || options === void 0 ? void 0 : options.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, context + \" has member 'signal' that\");\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal: signal\n };\n }\n function assertAbortSignal(signal, context) {\n if (!isAbortSignal(signal)) {\n throw new TypeError(context + \" is not an AbortSignal.\");\n }\n }\n\n function convertReadableWritablePair(pair, context) {\n assertDictionary(pair, context);\n var readable = pair === null || pair === void 0 ? void 0 : pair.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, context + \" has member 'readable' that\");\n var writable = pair === null || pair === void 0 ? void 0 : pair.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, context + \" has member 'writable' that\");\n return { readable: readable, writable: writable };\n }\n\n /**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\n var ReadableStream = /** @class */ (function () {\n function ReadableStream(rawUnderlyingSource, rawStrategy) {\n if (rawUnderlyingSource === void 0) { rawUnderlyingSource = {}; }\n if (rawStrategy === void 0) { rawStrategy = {}; }\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n }\n else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n var underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n InitializeReadableStream(this);\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n var highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);\n }\n else {\n var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n var highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);\n }\n }\n Object.defineProperty(ReadableStream.prototype, \"locked\", {\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get: function () {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('locked');\n }\n return IsReadableStreamLocked(this);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n ReadableStream.prototype.cancel = function (reason) {\n if (reason === void 0) { reason = undefined; }\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException$1('cancel'));\n }\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n return ReadableStreamCancel(this, reason);\n };\n ReadableStream.prototype.getReader = function (rawOptions) {\n if (rawOptions === void 0) { rawOptions = undefined; }\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('getReader');\n }\n var options = convertReaderOptions(rawOptions, 'First parameter');\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n return AcquireReadableStreamBYOBReader(this);\n };\n ReadableStream.prototype.pipeThrough = function (rawTransform, rawOptions) {\n if (rawOptions === void 0) { rawOptions = {}; }\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n var transform = convertReadableWritablePair(rawTransform, 'First parameter');\n var options = convertPipeOptions(rawOptions, 'Second parameter');\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n var promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n setPromiseIsHandledToTrue(promise);\n return transform.readable;\n };\n ReadableStream.prototype.pipeTo = function (destination, rawOptions) {\n if (rawOptions === void 0) { rawOptions = {}; }\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));\n }\n if (destination === undefined) {\n return promiseRejectedWith(\"Parameter 1 is required in 'pipeTo'.\");\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(new TypeError(\"ReadableStream.prototype.pipeTo's first argument must be a WritableStream\"));\n }\n var options;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n }\n catch (e) {\n return promiseRejectedWith(e);\n }\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\n }\n return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n };\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n ReadableStream.prototype.tee = function () {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('tee');\n }\n var branches = ReadableStreamTee(this);\n return CreateArrayFromList(branches);\n };\n ReadableStream.prototype.values = function (rawOptions) {\n if (rawOptions === void 0) { rawOptions = undefined; }\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('values');\n }\n var options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n };\n return ReadableStream;\n }());\n Object.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n }\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n }\n // Abstract operations for the ReadableStream.\n // Throws if and only if startAlgorithm throws.\n function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n if (highWaterMark === void 0) { highWaterMark = 1; }\n if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; }\n var stream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n var controller = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n }\n function InitializeReadableStream(stream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n }\n function IsReadableStream(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n return true;\n }\n function IsReadableStreamLocked(stream) {\n if (stream._reader === undefined) {\n return false;\n }\n return true;\n }\n // ReadableStream API exposed for controllers.\n function ReadableStreamCancel(stream, reason) {\n stream._disturbed = true;\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n ReadableStreamClose(stream);\n var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n }\n function ReadableStreamClose(stream) {\n stream._state = 'closed';\n var reader = stream._reader;\n if (reader === undefined) {\n return;\n }\n defaultReaderClosedPromiseResolve(reader);\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(function (readRequest) {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n }\n function ReadableStreamError(stream, e) {\n stream._state = 'errored';\n stream._storedError = e;\n var reader = stream._reader;\n if (reader === undefined) {\n return;\n }\n defaultReaderClosedPromiseReject(reader, e);\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(function (readRequest) {\n readRequest._errorSteps(e);\n });\n reader._readRequests = new SimpleQueue();\n }\n else {\n reader._readIntoRequests.forEach(function (readIntoRequest) {\n readIntoRequest._errorSteps(e);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n }\n // Helper functions for the ReadableStream.\n function streamBrandCheckException$1(name) {\n return new TypeError(\"ReadableStream.prototype.\" + name + \" can only be used on a ReadableStream\");\n }\n\n function convertQueuingStrategyInit(init, context) {\n assertDictionary(init, context);\n var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n }\n\n var byteLengthSizeFunction = function size(chunk) {\n return chunk.byteLength;\n };\n /**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\n var ByteLengthQueuingStrategy = /** @class */ (function () {\n function ByteLengthQueuingStrategy(options) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"highWaterMark\", {\n /**\n * Returns the high water mark provided to the constructor.\n */\n get: function () {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"size\", {\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get: function () {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n },\n enumerable: false,\n configurable: true\n });\n return ByteLengthQueuingStrategy;\n }());\n Object.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n }\n // Helper functions for the ByteLengthQueuingStrategy.\n function byteLengthBrandCheckException(name) {\n return new TypeError(\"ByteLengthQueuingStrategy.prototype.\" + name + \" can only be used on a ByteLengthQueuingStrategy\");\n }\n function IsByteLengthQueuingStrategy(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n return true;\n }\n\n var countSizeFunction = function size() {\n return 1;\n };\n /**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\n var CountQueuingStrategy = /** @class */ (function () {\n function CountQueuingStrategy(options) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n Object.defineProperty(CountQueuingStrategy.prototype, \"highWaterMark\", {\n /**\n * Returns the high water mark provided to the constructor.\n */\n get: function () {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CountQueuingStrategy.prototype, \"size\", {\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get: function () {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n },\n enumerable: false,\n configurable: true\n });\n return CountQueuingStrategy;\n }());\n Object.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n }\n // Helper functions for the CountQueuingStrategy.\n function countBrandCheckException(name) {\n return new TypeError(\"CountQueuingStrategy.prototype.\" + name + \" can only be used on a CountQueuingStrategy\");\n }\n function IsCountQueuingStrategy(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n return true;\n }\n\n function convertTransformer(original, context) {\n assertDictionary(original, context);\n var flush = original === null || original === void 0 ? void 0 : original.flush;\n var readableType = original === null || original === void 0 ? void 0 : original.readableType;\n var start = original === null || original === void 0 ? void 0 : original.start;\n var transform = original === null || original === void 0 ? void 0 : original.transform;\n var writableType = original === null || original === void 0 ? void 0 : original.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original, context + \" has member 'flush' that\"),\n readableType: readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original, context + \" has member 'start' that\"),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original, context + \" has member 'transform' that\"),\n writableType: writableType\n };\n }\n function convertTransformerFlushCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (controller) { return promiseCall(fn, original, [controller]); };\n }\n function convertTransformerStartCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (controller) { return reflectCall(fn, original, [controller]); };\n }\n function convertTransformerTransformCallback(fn, original, context) {\n assertFunction(fn, context);\n return function (chunk, controller) { return promiseCall(fn, original, [chunk, controller]); };\n }\n\n // Class TransformStream\n /**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\n var TransformStream = /** @class */ (function () {\n function TransformStream(rawTransformer, rawWritableStrategy, rawReadableStrategy) {\n if (rawTransformer === void 0) { rawTransformer = {}; }\n if (rawWritableStrategy === void 0) { rawWritableStrategy = {}; }\n if (rawReadableStrategy === void 0) { rawReadableStrategy = {}; }\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n var writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n var readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n var transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n var readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n var readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n var writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n var writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n var startPromise_resolve;\n var startPromise = newPromise(function (resolve) {\n startPromise_resolve = resolve;\n });\n InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n }\n else {\n startPromise_resolve(undefined);\n }\n }\n Object.defineProperty(TransformStream.prototype, \"readable\", {\n /**\n * The readable side of the transform stream.\n */\n get: function () {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException$2('readable');\n }\n return this._readable;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TransformStream.prototype, \"writable\", {\n /**\n * The writable side of the transform stream.\n */\n get: function () {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException$2('writable');\n }\n return this._writable;\n },\n enumerable: false,\n configurable: true\n });\n return TransformStream;\n }());\n Object.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n }\n function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {\n function startAlgorithm() {\n return startPromise;\n }\n function writeAlgorithm(chunk) {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n function abortAlgorithm(reason) {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n function closeAlgorithm() {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);\n function pullAlgorithm() {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n function cancelAlgorithm(reason) {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined;\n stream._backpressureChangePromise = undefined;\n stream._backpressureChangePromise_resolve = undefined;\n TransformStreamSetBackpressure(stream, true);\n stream._transformStreamController = undefined;\n }\n function IsTransformStream(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n return true;\n }\n // This is a no-op if both sides are already errored.\n function TransformStreamError(stream, e) {\n ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n }\n function TransformStreamErrorWritableAndUnblockWrite(stream, e) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n }\n function TransformStreamSetBackpressure(stream, backpressure) {\n // Passes also when called during construction.\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n stream._backpressureChangePromise = newPromise(function (resolve) {\n stream._backpressureChangePromise_resolve = resolve;\n });\n stream._backpressure = backpressure;\n }\n // Class TransformStreamDefaultController\n /**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\n var TransformStreamDefaultController = /** @class */ (function () {\n function TransformStreamDefaultController() {\n throw new TypeError('Illegal constructor');\n }\n Object.defineProperty(TransformStreamDefaultController.prototype, \"desiredSize\", {\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get: function () {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('desiredSize');\n }\n var readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n },\n enumerable: false,\n configurable: true\n });\n TransformStreamDefaultController.prototype.enqueue = function (chunk) {\n if (chunk === void 0) { chunk = undefined; }\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('enqueue');\n }\n TransformStreamDefaultControllerEnqueue(this, chunk);\n };\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n TransformStreamDefaultController.prototype.error = function (reason) {\n if (reason === void 0) { reason = undefined; }\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('error');\n }\n TransformStreamDefaultControllerError(this, reason);\n };\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n TransformStreamDefaultController.prototype.terminate = function () {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('terminate');\n }\n TransformStreamDefaultControllerTerminate(this);\n };\n return TransformStreamDefaultController;\n }());\n Object.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n }\n // Transform Stream Default Controller Abstract Operations\n function IsTransformStreamDefaultController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n return true;\n }\n function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n }\n function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {\n var controller = Object.create(TransformStreamDefaultController.prototype);\n var transformAlgorithm = function (chunk) {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk);\n return promiseResolvedWith(undefined);\n }\n catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n var flushAlgorithm = function () { return promiseResolvedWith(undefined); };\n if (transformer.transform !== undefined) {\n transformAlgorithm = function (chunk) { return transformer.transform(chunk, controller); };\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = function () { return transformer.flush(controller); };\n }\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n }\n function TransformStreamDefaultControllerClearAlgorithms(controller) {\n controller._transformAlgorithm = undefined;\n controller._flushAlgorithm = undefined;\n }\n function TransformStreamDefaultControllerEnqueue(controller, chunk) {\n var stream = controller._controlledTransformStream;\n var readableController = stream._readable._readableStreamController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n }\n catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n throw stream._readable._storedError;\n }\n var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n TransformStreamSetBackpressure(stream, true);\n }\n }\n function TransformStreamDefaultControllerError(controller, e) {\n TransformStreamError(controller._controlledTransformStream, e);\n }\n function TransformStreamDefaultControllerPerformTransform(controller, chunk) {\n var transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, function (r) {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n }\n function TransformStreamDefaultControllerTerminate(controller) {\n var stream = controller._controlledTransformStream;\n var readableController = stream._readable._readableStreamController;\n ReadableStreamDefaultControllerClose(readableController);\n var error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n }\n // TransformStreamDefaultSink Algorithms\n function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {\n var controller = stream._transformStreamController;\n if (stream._backpressure) {\n var backpressureChangePromise = stream._backpressureChangePromise;\n return transformPromiseWith(backpressureChangePromise, function () {\n var writable = stream._writable;\n var state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n }\n function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n }\n function TransformStreamDefaultSinkCloseAlgorithm(stream) {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n var readable = stream._readable;\n var controller = stream._transformStreamController;\n var flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, function () {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController);\n }, function (r) {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n }\n // TransformStreamDefaultSource Algorithms\n function TransformStreamDefaultSourcePullAlgorithm(stream) {\n // Invariant. Enforced by the promises returned by start() and pull().\n TransformStreamSetBackpressure(stream, false);\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n }\n // Helper functions for the TransformStreamDefaultController.\n function defaultControllerBrandCheckException$1(name) {\n return new TypeError(\"TransformStreamDefaultController.prototype.\" + name + \" can only be used on a TransformStreamDefaultController\");\n }\n // Helper functions for the TransformStream.\n function streamBrandCheckException$2(name) {\n return new TypeError(\"TransformStream.prototype.\" + name + \" can only be used on a TransformStream\");\n }\n\n exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;\n exports.CountQueuingStrategy = CountQueuingStrategy;\n exports.ReadableByteStreamController = ReadableByteStreamController;\n exports.ReadableStream = ReadableStream;\n exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader;\n exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest;\n exports.ReadableStreamDefaultController = ReadableStreamDefaultController;\n exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader;\n exports.TransformStream = TransformStream;\n exports.TransformStreamDefaultController = TransformStreamDefaultController;\n exports.WritableStream = WritableStream;\n exports.WritableStreamDefaultController = WritableStreamDefaultController;\n exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=ponyfill.js.map\n", + "require('../../modules/es.string.pad-start');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'padStart');\n", + "'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n", + "// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = String(requireObjectCoercible($this));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n", + "'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n", + "// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line unicorn/no-unsafe-regex -- safe\nmodule.exports = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n", + "var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\n\nvar call = Function.call;\n\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\n return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\n};\n", + "require('../../modules/es.string.pad-end');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('String', 'padEnd');\n", + "'use strict';\nvar $ = require('../internals/export');\nvar $padEnd = require('../internals/string-pad').end;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padEnd` method\n// https://tc39.es/ecma262/#sec-string.prototype.padend\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n", + "require('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n", + "var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n", + "var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n", + "require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n", + "var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\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 assert,\n createPromiseCapability,\n getVerbosityLevel,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isSameOrigin,\n MissingPDFException,\n PasswordException,\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 isDataScheme,\n loadScript,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport { NodeCanvasFactory, NodeCMapReaderFactory } from \"./node_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { apiCompatibilityParams } from \"./api_compatibility.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 { WebGLContext } from \"./webgl.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;\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 * 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} [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 `@font-face` rules. If disabled, fonts will\n * be rendered using a built-in font renderer that constructs the glyphs with\n * primitive path commands. The default value is `false`.\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.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.isEvalSupported !== \"boolean\") {\n params.isEvalSupported = true;\n }\n if (typeof params.disableFontFace !== \"boolean\") {\n params.disableFontFace = apiCompatibilityParams.disableFontFace || false;\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 messageHandler.postMessageTransfers = worker.postMessageTransfers;\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 the\n * `MessageHandler` is known.\n * @private\n */\nfunction _fetchDocument(worker, source, pdfDataRangeTransport, docId) {\n if (worker.destroyed) {\n return Promise.reject(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 return worker.messageHandler\n .sendWithPromise(\"GetDocRequest\", {\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 postMessageTransfers: worker.postMessageTransfers,\n docBaseUrl: source.docBaseUrl,\n ignoreErrors: source.ignoreErrors,\n isEvalSupported: source.isEvalSupported,\n fontExtraProperties: source.fontExtraProperties,\n enableXfa: source.enableXfa,\n })\n .then(function (workerId) {\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n return workerId;\n });\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 *\n * @typedef {Object} PDFDocumentLoadingTask\n * @property {string} docId - Unique identifier for the document loading task.\n * @property {boolean} destroyed - Whether the loading task is destroyed or not.\n * @property {function} [onPassword] - Callback to request a password if a wrong\n * or no password was provided. The callback receives two parameters: a\n * function that should be called with the new password, and a reason (see\n * {@link PasswordResponses}).\n * @property {function} [onProgress] - Callback to be able to monitor the\n * loading progress of the PDF file (necessary to implement e.g. a loading\n * bar). The callback receives an {Object} with the properties `loaded`\n * ({number}) and `total` ({number}) that indicate how many bytes are loaded.\n * @property {function} [onUnsupportedFeature] - Callback for when an\n * unsupported feature is used in the PDF document. The callback receives an\n * {@link UNSUPPORTED_FEATURES} argument.\n * @property {Promise} promise - Promise for document loading\n * task completion.\n * @property {function} destroy - Abort all network requests and destroy\n * the worker. Returns a promise that is resolved when destruction is\n * completed.\n */\n\n/**\n * @type {any}\n * @ignore\n */\nconst PDFDocumentLoadingTask = (function PDFDocumentLoadingTaskClosure() {\n let nextDocumentId = 0;\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 */\n // eslint-disable-next-line no-shadow\n class PDFDocumentLoadingTask {\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\" + nextDocumentId++;\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). The callback receives\n * an {Object} with the properties `loaded` ({number}) and `total`\n * ({number}) that indicate how many bytes are loaded.\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 * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n destroy() {\n this.destroyed = true;\n\n const transportDestroyed = !this._transport\n ? Promise.resolve()\n : this._transport.destroy();\n return transportDestroyed.then(() => {\n this._transport = null;\n if (this._worker) {\n this._worker.destroy();\n this._worker = null;\n }\n });\n }\n }\n return PDFDocumentLoadingTask;\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\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return shadow(this, \"annotationStorage\", new 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 {string} A (not guaranteed to be) unique ID to identify a PDF.\n */\n get fingerprint() {\n return this._pdfInfo.fingerprint;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return this._pdfInfo.isPureXfa;\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 {{num: number, gen: number}} ref - The page reference. Must have\n * the `num` and `gen` properties.\n * @returns {Promise<{num: number, gen: number}>} A promise that is resolved\n * with the page index (starting from zero) that is associated with the\n * reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise>>} A promise that is resolved\n * with a mapping from named destinations to references.\n *\n * This can be slow for large documents. Use `getDestination` instead.\n */\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n /**\n * @param {string} id - The named destination to get.\n * @returns {Promise>} A promise that is resolved with all\n * information of the given named destination.\n */\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} containing the page labels that correspond to the page\n * indexes, or `null` when no page labels are present in the PDF file.\n */\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page layout name.\n */\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page mode name.\n */\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} containing the viewer preferences, or `null` when no viewer\n * preferences are present in the PDF file.\n */\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an {Array}\n * containing the destination, or `null` when no open action is present\n * in the PDF.\n */\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a lookup table\n * for mapping named attachments to their content.\n */\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} of all the JavaScript strings in the name tree, or `null`\n * if no JavaScript exists.\n */\n getJavaScript() {\n return this._transport.getJavaScript();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with the JavaScript actions:\n * - from the name tree (like getJavaScript);\n * - from A or AA entries in the catalog dictionary.\n * , or `null` if no JavaScript exists.\n */\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n\n /**\n * @typedef {Object} OutlineNode\n * @property {string} title\n * @property {boolean} bold\n * @property {boolean} italic\n * @property {Uint8ClampedArray} color - The color in RGB format to use for\n * display purposes.\n * @property {string | Array | null} dest\n * @property {string | null} url\n * @property {string | undefined} unsafeUrl\n * @property {boolean | undefined} newWindow\n * @property {number | undefined} count\n * @property {Array} items\n */\n\n /**\n * @returns {Promise>} A promise that is resolved with an\n * {Array} that is a tree outline (if it has one) of the PDF file.\n */\n getOutline() {\n return this._transport.getOutline();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {@link OptionalContentConfig} that contains all the optional content\n * groups (assuming that the document has any).\n */\n getOptionalContentConfig() {\n return this._transport.getOptionalContentConfig();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} that contains the permission flags for the PDF document, or\n * `null` when no permissions are present in the PDF file.\n */\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n /**\n * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n * resolved with an {Object} that has `info` and `metadata` properties.\n * `info` is an {Object} filled with anything available in the information\n * dictionary and similarly `metadata` is a {Metadata} object with\n * information from the metadata section of the PDF.\n */\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n /**\n * @typedef {Object} MarkInfo\n * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n * @property {boolean} Marked\n * @property {boolean} UserProperties\n * @property {boolean} Suspects\n */\n\n /**\n * @returns {Promise} A promise that is resolved with\n * a {MarkInfo} object that contains the MarkInfo flags for the PDF\n * document, or `null` when no MarkInfo values are present in the PDF file.\n */\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {TypedArray} that has the raw data from the PDF.\n */\n getData() {\n return this._transport.getData();\n }\n\n /**\n * @returns {Promise<{ length: number }>} A promise that is resolved when the\n * document's data is loaded. It is resolved with an {Object} that contains\n * the `length` property that indicates size of the PDF data in bytes.\n */\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\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 * @returns {Promise} A promise this is resolved with\n * current statistics about document structures (see\n * {@link PDFDocumentStats}).\n */\n getStats() {\n return this._transport.getStats();\n }\n\n /**\n * Cleans up resources allocated by the document on both the main and worker\n * threads.\n *\n * NOTE: Do not, under any circumstances, call this method when rendering is\n * currently ongoing since that may lead to rendering errors.\n *\n * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n * NOTE: This will increase persistent memory usage, hence don't use this\n * option unless absolutely necessary. The default value is `false`.\n * @returns {Promise} A promise that is resolved when clean-up has finished.\n */\n cleanup(keepLoadedFonts = false) {\n return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n }\n\n /**\n * Destroys the current document instance and terminates the worker.\n */\n destroy() {\n return this.loadingTask.destroy();\n }\n\n /**\n * @type {DocumentInitParameters} A subset of the current\n * {DocumentInitParameters}, which are either needed in the viewer and/or\n * whose default values may be affected by the `apiCompatibilityParams`.\n */\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n /**\n * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n */\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n /**\n * @param {AnnotationStorage} annotationStorage - Storage for annotation\n * data in forms.\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the full data of the saved document.\n */\n saveDocument(annotationStorage) {\n return this._transport.saveDocument(annotationStorage);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing /AcroForm field data for the JS sandbox,\n * or `null` when no field data is present in the PDF file.\n */\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with `true`\n * if some /AcroForm fields have JavaScript actions.\n */\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing IDs of annotations that have a calculation\n * action, or `null` when no such annotations are present in the PDF file.\n */\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n * the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n * flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} normalizeWhitespace - Replaces all occurrences of\n * whitespace with standard spaces (0x20). The default value is `false`.\n * @property {boolean} disableCombineTextItems - Do not attempt to combine\n * same line {@link TextItem}'s. The default value is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array} items - Array of {@link TextItem} objects.\n * @property {Object} styles - {@link TextStyle} objects,\n * indexed by font name.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} intent - Determines the annotations that will be fetched,\n * can be either 'display' (viewable annotations) or 'print' (printable\n * annotations). If the parameter is omitted, all annotations are fetched.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {Object} canvasContext - A 2D context of a DOM Canvas object.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n * the `PDFPageProxy.getViewport` method.\n * @property {string} [intent] - Rendering intent, can be 'display' or 'print'.\n * The default value is 'display'.\n * @property {boolean} [enableWebGL] - Enables WebGL accelerated rendering for\n * some operations. The default value is `false`.\n * @property {boolean} [renderInteractiveForms] - Whether or not interactive\n * form elements are rendered in the display layer. If so, we do not render\n * them on the canvas as well.\n * @property {Array} [transform] - Additional transform, applied just\n * before viewport transform.\n * @property {Object} [imageLayer] - An object that has `beginLayout`,\n * `endLayout` and `appendImage` functions.\n * @property {Object} [canvasFactory] - The factory instance that will be used\n * when creating canvases. The default value is {new DOMCanvasFactory()}.\n * @property {Object | string} [background] - Background to use for the canvas.\n * Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n * value, a `CanvasGradient` object (a linear or radial gradient) or\n * a `CanvasPattern` object (a repetitive image). The default value is\n * 'rgb(255,255,255)'.\n * @property {AnnotationStorage} [annotationStorage] - Storage for annotation\n * data in forms.\n * @property {Promise} [optionalContentConfigPromise] -\n * A promise that should resolve with an {@link OptionalContentConfig}\n * created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n * the configuration will be fetched automatically with the default visibility\n * states set.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array} fnArray - Array containing the operator functions.\n * @property {Array} argsArray - Array containing the arguments of the\n * functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._ownerDocument = ownerDocument;\n this._transport = transport;\n this._stats = pdfBug ? new StatTimer() : null;\n this._pdfBug = pdfBug;\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n\n this.cleanupAfterRender = false;\n this.pendingCleanup = false;\n this._intentStates = new Map();\n this.destroyed = false;\n }\n\n /**\n * @type {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n /**\n * @type {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n /**\n * @type {Object} The reference that points to this page. It has `num` and\n * `gen` properties.\n */\n get ref() {\n return this._pageInfo.ref;\n }\n\n /**\n * @type {number} The default size of units in 1/72nds of an inch.\n */\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n /**\n * @type {Array} An array of the visible portion of the PDF page in\n * user space units [x1, y1, x2, y2].\n */\n get view() {\n return this._pageInfo.view;\n }\n\n /**\n * @param {GetViewportParameters} params - Viewport parameters.\n * @returns {PageViewport} Contains 'width' and 'height' properties\n * along with transforms required for rendering.\n */\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.view,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * @param {GetAnnotationsParameters} params - Annotation parameters.\n * @returns {Promise>} A promise that is resolved with an\n * {Array} of the annotation objects.\n */\n getAnnotations({ intent = null } = {}) {\n if (!this._annotationsPromise || this._annotationsIntent !== intent) {\n this._annotationsPromise = this._transport.getAnnotations(\n this._pageIndex,\n intent\n );\n this._annotationsIntent = intent;\n }\n return this._annotationsPromise;\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} with JS actions.\n */\n getJSActions() {\n return (this._jsActionsPromise ||= this._transport.getPageJSActions(\n this._pageIndex\n ));\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with a fake DOM object (a tree structure where elements\n * are {Object} with a name, attributes (class, style, ...), value and\n * children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n */\n getXfa() {\n return (this._xfaPromise ||= this._transport.getPageXfa(this._pageIndex));\n }\n\n /**\n * Begins the process of rendering a page to the desired context.\n *\n * @param {RenderParameters} params Page render parameters.\n * @returns {RenderTask} An object that contains a promise that is\n * resolved when the page finishes rendering.\n */\n render({\n canvasContext,\n viewport,\n intent = \"display\",\n enableWebGL = false,\n renderInteractiveForms = false,\n transform = null,\n imageLayer = null,\n canvasFactory = null,\n background = null,\n annotationStorage = null,\n optionalContentConfigPromise = null,\n }) {\n if (this._stats) {\n this._stats.time(\"Overall\");\n }\n\n const renderingIntent = intent === \"print\" ? \"print\" : \"display\";\n // If there was a pending destroy, cancel it so no cleanup happens during\n // this call to render.\n this.pendingCleanup = false;\n\n if (!optionalContentConfigPromise) {\n optionalContentConfigPromise = this._transport.getOptionalContentConfig();\n }\n\n let intentState = this._intentStates.get(renderingIntent);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(renderingIntent, intentState);\n }\n\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const canvasFactoryInstance =\n canvasFactory ||\n new DefaultCanvasFactory({ ownerDocument: this._ownerDocument });\n const webGLContext = new WebGLContext({\n enable: enableWebGL,\n });\n\n // If there's no displayReadyCapability yet, then the operatorList\n // was never requested before. Make the request and create the promise.\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = createPromiseCapability();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n };\n\n if (this._stats) {\n this._stats.time(\"Page Request\");\n }\n this._pumpOperatorList({\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n renderInteractiveForms: renderInteractiveForms === true,\n annotationStorage: annotationStorage?.serializable || null,\n });\n }\n\n const complete = error => {\n intentState.renderTasks.delete(internalRenderTask);\n\n // Attempt to reduce memory usage during *printing*, by always running\n // cleanup once rendering has finished (regardless of cleanupAfterRender).\n if (this.cleanupAfterRender || renderingIntent === \"print\") {\n this.pendingCleanup = true;\n }\n this._tryCleanup();\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error,\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n if (this._stats) {\n this._stats.timeEnd(\"Rendering\");\n this._stats.timeEnd(\"Overall\");\n }\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n // Only include the required properties, and *not* the entire object.\n params: {\n canvasContext,\n viewport,\n transform,\n imageLayer,\n background,\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: canvasFactoryInstance,\n webGLContext,\n useRequestAnimationFrame: renderingIntent !== \"print\",\n pdfBug: this._pdfBug,\n });\n\n (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n const renderTask = internalRenderTask.task;\n\n Promise.all([\n intentState.displayReadyCapability.promise,\n optionalContentConfigPromise,\n ])\n .then(([transparency, optionalContentConfig]) => {\n if (this.pendingCleanup) {\n complete();\n return;\n }\n if (this._stats) {\n this._stats.time(\"Rendering\");\n }\n internalRenderTask.initializeGraphics({\n transparency,\n optionalContentConfig,\n });\n internalRenderTask.operatorListChanged();\n })\n .catch(complete);\n\n return renderTask;\n }\n\n /**\n * @returns {Promise} A promise resolved with an\n * {@link PDFOperatorList} object that represents page's operator list.\n */\n getOperatorList() {\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n\n intentState.renderTasks.delete(opListTask);\n }\n }\n\n const renderingIntent = \"oplist\";\n let intentState = this._intentStates.get(renderingIntent);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(renderingIntent, intentState);\n }\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = Object.create(null);\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = createPromiseCapability();\n (intentState.renderTasks ||= new Set()).add(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n };\n\n if (this._stats) {\n this._stats.time(\"Page Request\");\n }\n this._pumpOperatorList({\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n });\n }\n return intentState.opListReadCapability.promise;\n }\n\n /**\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {ReadableStream} Stream for reading text content chunks.\n */\n streamTextContent({\n normalizeWhitespace = false,\n disableCombineTextItems = false,\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n return this._transport.messageHandler.sendWithStream(\n \"GetTextContent\",\n {\n pageIndex: this._pageIndex,\n normalizeWhitespace: normalizeWhitespace === true,\n combineTextItems: disableCombineTextItems !== true,\n },\n {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n size(textContent) {\n return textContent.items.length;\n },\n }\n );\n }\n\n /**\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {Promise} A promise that is resolved with a\n * {@link TextContent} object that represents the page's text content.\n */\n getTextContent(params = {}) {\n const readableStream = this.streamTextContent(params);\n\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({ value, done }) {\n if (done) {\n resolve(textContent);\n return;\n }\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null),\n };\n pump();\n });\n }\n\n /**\n * Destroys the page object.\n * @private\n */\n _destroy() {\n this.destroyed = true;\n this._transport.pageCache[this._pageIndex] = null;\n\n const waitOn = [];\n for (const [intent, intentState] of this._intentStates) {\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true,\n });\n\n if (intent === \"oplist\") {\n // Avoid errors below, since the renderTasks are just stubs.\n continue;\n }\n for (const internalRenderTask of intentState.renderTasks) {\n waitOn.push(internalRenderTask.completed);\n internalRenderTask.cancel();\n }\n }\n this.objs.clear();\n this._annotationsPromise = null;\n this._jsActionsPromise = null;\n this._xfaPromise = null;\n this.pendingCleanup = false;\n return Promise.all(waitOn);\n }\n\n /**\n * Cleans up resources allocated by the page.\n *\n * @param {boolean} [resetStats] - Reset page stats, if enabled.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n cleanup(resetStats = false) {\n this.pendingCleanup = true;\n return this._tryCleanup(resetStats);\n }\n\n /**\n * Attempts to clean up if rendering is in a state where that's possible.\n * @private\n */\n _tryCleanup(resetStats = false) {\n if (!this.pendingCleanup) {\n return false;\n }\n for (const { renderTasks, operatorList } of this._intentStates.values()) {\n if (renderTasks.size > 0 || !operatorList.lastChunk) {\n return false;\n }\n }\n\n this._intentStates.clear();\n this.objs.clear();\n this._annotationsPromise = null;\n this._jsActionsPromise = null;\n this._xfaPromise = null;\n if (resetStats && this._stats) {\n this._stats = new StatTimer();\n }\n this.pendingCleanup = false;\n return true;\n }\n\n /**\n * @private\n */\n _startRenderPage(transparency, intent) {\n const intentState = this._intentStates.get(intent);\n if (!intentState) {\n return; // Rendering was cancelled.\n }\n if (this._stats) {\n this._stats.timeEnd(\"Page Request\");\n }\n // TODO Refactor RenderPageRequest to separate rendering\n // and operator list logic\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.resolve(transparency);\n }\n }\n\n /**\n * @private\n */\n _renderPageChunk(operatorListChunk, intentState) {\n // Add the new chunk to the current operator list.\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this._tryCleanup();\n }\n }\n\n /**\n * @private\n */\n _pumpOperatorList(args) {\n assert(\n args.intent,\n 'PDFPageProxy._pumpOperatorList: Expected \"intent\" argument.'\n );\n\n const readableStream = this._transport.messageHandler.sendWithStream(\n \"GetOperatorList\",\n args\n );\n const reader = readableStream.getReader();\n\n const intentState = this._intentStates.get(args.intent);\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(\n ({ value, done }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n this._renderPageChunk(value, intentState);\n pump();\n },\n reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n if (intentState.operatorList) {\n // Mark operator list as complete.\n intentState.operatorList.lastChunk = true;\n\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n this._tryCleanup();\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n }\n );\n };\n pump();\n }\n\n /**\n * @private\n */\n _abortOperatorList({ intentState, reason, force = false }) {\n assert(\n reason instanceof Error ||\n (typeof reason === \"object\" && reason !== null),\n 'PDFPageProxy._abortOperatorList: Expected \"reason\" argument.'\n );\n\n if (!intentState.streamReader) {\n return;\n }\n if (!force) {\n // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n // multiple render() calls on the same canvas, won't break all rendering.\n if (intentState.renderTasks.size > 0) {\n return;\n }\n // Don't immediately abort parsing on the worker-thread when rendering is\n // cancelled, since that will unnecessarily delay re-rendering when (for\n // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n if (reason instanceof RenderingCancelledException) {\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n this._abortOperatorList({ intentState, reason, force: true });\n intentState.streamReaderCancelTimeout = null;\n }, RENDERING_CANCELLED_TIMEOUT);\n return;\n }\n }\n intentState.streamReader.cancel(new AbortException(reason?.message));\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n // Remove the current `intentState`, since a cancelled `getOperatorList`\n // call on the worker-thread cannot be re-started...\n for (const [intent, curIntentState] of this._intentStates) {\n if (curIntentState === intentState) {\n this._intentStates.delete(intent);\n break;\n }\n }\n // ... and force clean-up to ensure that any old state is always removed.\n this.cleanup();\n }\n\n /**\n * @type {Object} Returns page stats, if enabled; returns `null` otherwise.\n */\n get stats() {\n return this._stats;\n }\n}\n\nclass LoopbackPort {\n constructor() {\n this._listeners = [];\n this._deferred = Promise.resolve(undefined);\n }\n\n postMessage(obj, transfers) {\n function cloneValue(value) {\n // Trying to perform a structured clone close to the spec, including\n // transfers.\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n if (cloned.has(value)) {\n // already cloned the object\n return cloned.get(value);\n }\n let buffer, result;\n if ((buffer = value.buffer) && isArrayBuffer(buffer)) {\n // We found object with ArrayBuffer (typed array).\n if (transfers?.includes(buffer)) {\n result = new value.constructor(\n buffer,\n value.byteOffset,\n value.byteLength\n );\n } else {\n result = new value.constructor(value);\n }\n cloned.set(value, result);\n return result;\n }\n if (value instanceof Map) {\n result = new Map();\n cloned.set(value, result); // Adding to cache now for cyclic references.\n for (const [key, val] of value) {\n result.set(key, cloneValue(val));\n }\n return result;\n }\n if (value instanceof Set) {\n result = new Set();\n cloned.set(value, result); // Adding to cache now for cyclic references.\n for (const val of value) {\n result.add(cloneValue(val));\n }\n return result;\n }\n result = Array.isArray(value) ? [] : {};\n cloned.set(value, result); // Adding to cache now for cyclic references.\n // Cloning all value and object properties, however ignoring properties\n // defined via getter.\n for (const i in value) {\n let desc,\n p = value;\n while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {\n p = Object.getPrototypeOf(p);\n }\n if (typeof desc.value === \"undefined\") {\n continue;\n }\n if (typeof desc.value === \"function\") {\n if (value.hasOwnProperty?.(i)) {\n throw new Error(\n `LoopbackPort.postMessage - cannot clone: ${value[i]}`\n );\n }\n continue;\n }\n result[i] = cloneValue(desc.value);\n }\n return result;\n }\n\n const cloned = new WeakMap();\n const event = { data: cloneValue(obj) };\n\n this._deferred.then(() => {\n for (const listener of this._listeners) {\n listener.call(this, event);\n }\n });\n }\n\n addEventListener(name, listener) {\n this._listeners.push(listener);\n }\n\n removeEventListener(name, listener) {\n const i = this._listeners.indexOf(listener);\n this._listeners.splice(i, 1);\n }\n\n terminate() {\n this._listeners.length = 0;\n }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Object} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level; the\n * constants from {@link VerbosityLevel} should be used.\n */\n\n/** @type {any} */\nconst PDFWorker = (function PDFWorkerClosure() {\n const pdfWorkerPorts = new WeakMap();\n let isWorkerDisabled = false;\n let fallbackWorkerSrc;\n let nextFakeWorkerId = 0;\n let fakeWorkerCapability;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\")) {\n // eslint-disable-next-line no-undef\n if (isNodeJS && typeof __non_webpack_require__ === \"function\") {\n // Workers aren't supported in Node.js, force-disabling them there.\n isWorkerDisabled = true;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"LIB\")) {\n fallbackWorkerSrc = \"../pdf.worker.js\";\n } else {\n fallbackWorkerSrc = \"./pdf.worker.js\";\n }\n } else if (typeof document === \"object\" && \"currentScript\" in document) {\n const pdfjsFilePath = document.currentScript?.src;\n if (pdfjsFilePath) {\n fallbackWorkerSrc = pdfjsFilePath.replace(\n /(\\.(?:min\\.)?js)(\\?.*)?$/i,\n \".worker$1$2\"\n );\n }\n }\n }\n\n function getWorkerSrc() {\n if (GlobalWorkerOptions.workerSrc) {\n return GlobalWorkerOptions.workerSrc;\n }\n if (typeof fallbackWorkerSrc !== \"undefined\") {\n if (!isNodeJS) {\n deprecated('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n return fallbackWorkerSrc;\n }\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n function getMainThreadWorkerMessageHandler() {\n let mainWorkerMessageHandler;\n try {\n mainWorkerMessageHandler = globalThis.pdfjsWorker?.WorkerMessageHandler;\n } catch (ex) {\n /* Ignore errors. */\n }\n return mainWorkerMessageHandler || null;\n }\n\n // Loads worker code into main thread.\n function setupFakeWorkerGlobal() {\n if (fakeWorkerCapability) {\n return fakeWorkerCapability.promise;\n }\n fakeWorkerCapability = createPromiseCapability();\n\n const loader = async function () {\n const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();\n\n if (mainWorkerMessageHandler) {\n // The worker was already loaded using e.g. a ` + + + + + +
+
+
+
+
+ + + + +
+
+ +
+ +
+
+
+
+
+ + + +
+
+
+ +
+ + + + +
+
+
+
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + + + + + Current View + + +
+ + +
+
+
+ +
+ +
+ + + +
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + +
+ + + +
+
+ + diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/viewer.js b/leigh-mecha-javafx/src/main/resources/pdfjs/web/viewer.js new file mode 100644 index 0000000000000000000000000000000000000000..09362f5f14bf10689b7d8ee71d64a956dc032cd2 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/viewer.js @@ -0,0 +1,22594 @@ +/** + * @licstart The following is the entire license notice for the + * Javascript code in this page + * + * Copyright 2021 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 + */ + +/******/ +(() => { // webpackBootstrap + /******/ + "use strict"; + /******/ + var __webpack_modules__ = ([ + /* 0 */, + /* 1 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.OptionKind = exports.AppOptions = void 0; + + var _viewer_compatibility = __webpack_require__(2); + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + 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); + return Constructor; + } + + var OptionKind = { + VIEWER: 0x02, + API: 0x04, + WORKER: 0x08, + PREFERENCE: 0x80 + }; + exports.OptionKind = OptionKind; + var defaultOptions = { + cursorToolOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + defaultUrl: { + value: "", + kind: OptionKind.VIEWER + }, + defaultZoomValue: { + value: "", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + disableHistory: { + value: false, + kind: OptionKind.VIEWER + }, + disablePageLabels: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePermissions: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePrintAutoRotate: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableScripting: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableWebGL: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + externalLinkRel: { + value: "noopener noreferrer nofollow", + kind: OptionKind.VIEWER + }, + externalLinkTarget: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + historyUpdateUrl: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + ignoreDestinationZoom: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + imageResourcesPath: { + value: "images/", + kind: OptionKind.VIEWER + }, + maxCanvasPixels: { + value: 16777216, + compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels, + kind: OptionKind.VIEWER + }, + pdfBugEnabled: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + printResolution: { + value: 150, + kind: OptionKind.VIEWER + }, + renderer: { + value: "canvas", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + renderInteractiveForms: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + sidebarViewOnLoad: { + value: 1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + scrollModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + spreadModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + textLayerMode: { + value: 1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + useOnlyCssZoom: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + viewerCssTheme: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + viewOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + cMapPacked: { + value: true, + kind: OptionKind.API + }, + cMapUrl: { + value: "cmaps/", + kind: OptionKind.API + }, + disableAutoFetch: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableFontFace: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableRange: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableStream: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + docBaseUrl: { + value: "", + kind: OptionKind.API + }, + enableXfa: { + value: false, + kind: OptionKind.API + }, + fontExtraProperties: { + value: false, + kind: OptionKind.API + }, + isEvalSupported: { + value: true, + kind: OptionKind.API + }, + maxImageSize: { + value: -1, + kind: OptionKind.API + }, + pdfBug: { + value: false, + kind: OptionKind.API + }, + verbosity: { + value: 1, + kind: OptionKind.API + }, + workerPort: { + value: null, + kind: OptionKind.WORKER + }, + workerSrc: { + value: "pdf.worker.js", + kind: OptionKind.WORKER + } + }; + { + defaultOptions.disablePreferences = { + value: false, + kind: OptionKind.VIEWER + }; + defaultOptions.locale = { + value: typeof navigator !== "undefined" ? navigator.language : "en-US", + kind: OptionKind.VIEWER + }; + defaultOptions.sandboxBundleSrc = { + value: "pdf.sandbox.js", + kind: OptionKind.VIEWER + }; + } + var userOptions = Object.create(null); + + var AppOptions = /*#__PURE__*/function () { + function AppOptions() { + _classCallCheck(this, AppOptions); + + throw new Error("Cannot initialize AppOptions."); + } + + _createClass(AppOptions, null, [{ + key: "get", + value: function get(name) { + var userOption = userOptions[name]; + + if (userOption !== undefined) { + return userOption; + } + + var defaultOption = defaultOptions[name]; + + if (defaultOption !== undefined) { + var _defaultOption$compat; + + return (_defaultOption$compat = defaultOption.compatibility) !== null && _defaultOption$compat !== void 0 ? _defaultOption$compat : defaultOption.value; + } + + return undefined; + } + }, { + key: "getAll", + value: function getAll() { + var kind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var options = Object.create(null); + + for (var name in defaultOptions) { + var _defaultOption$compat2; + + var defaultOption = defaultOptions[name]; + + if (kind) { + if ((kind & defaultOption.kind) === 0) { + continue; + } + + if (kind === OptionKind.PREFERENCE) { + var value = defaultOption.value, + valueType = _typeof(value); + + if (valueType === "boolean" || valueType === "string" || valueType === "number" && Number.isInteger(value)) { + options[name] = value; + continue; + } + + throw new Error("Invalid type for preference: ".concat(name)); + } + } + + var userOption = userOptions[name]; + options[name] = userOption !== undefined ? userOption : (_defaultOption$compat2 = defaultOption.compatibility) !== null && _defaultOption$compat2 !== void 0 ? _defaultOption$compat2 : defaultOption.value; + } + + return options; + } + }, { + key: "set", + value: function set(name, value) { + userOptions[name] = value; + } + }, { + key: "setAll", + value: function setAll(options) { + for (var name in options) { + userOptions[name] = options[name]; + } + } + }, { + key: "remove", + value: function remove(name) { + delete userOptions[name]; + } + }]); + + return AppOptions; + }(); + + exports.AppOptions = AppOptions; + + /***/ + }), + /* 2 */ + /***/ ((__unused_webpack_module, exports) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.viewerCompatibilityParams = void 0; + var compatibilityParams = Object.create(null); + { + var userAgent = typeof navigator !== "undefined" && navigator.userAgent || ""; + var platform = typeof navigator !== "undefined" && navigator.platform || ""; + var maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1; + var isAndroid = /Android/.test(userAgent); + var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1; + var isIOSChrome = /CriOS/.test(userAgent); + + (function checkOnBlobSupport() { + if (isIOSChrome) { + compatibilityParams.disableCreateObjectURL = true; + } + })(); + + (function checkCanvasSizeLimitation() { + if (isIOS || isAndroid) { + compatibilityParams.maxCanvasPixels = 5242880; + } + })(); + } + var viewerCompatibilityParams = Object.freeze(compatibilityParams); + exports.viewerCompatibilityParams = viewerCompatibilityParams; + + /***/ + }), + /* 3 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultExternalServices = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _ui_utils = __webpack_require__(6); + + var _app_options = __webpack_require__(1); + + var _pdfjsLib = __webpack_require__(7); + + var _pdf_cursor_tools = __webpack_require__(8); + + var _pdf_rendering_queue = __webpack_require__(10); + + var _overlay_manager = __webpack_require__(11); + + var _password_prompt = __webpack_require__(12); + + var _pdf_attachment_viewer = __webpack_require__(13); + + var _pdf_document_properties = __webpack_require__(15); + + var _pdf_find_bar = __webpack_require__(16); + + var _pdf_find_controller = __webpack_require__(17); + + var _pdf_history = __webpack_require__(19); + + var _pdf_layer_viewer = __webpack_require__(20); + + var _pdf_link_service = __webpack_require__(21); + + var _pdf_outline_viewer = __webpack_require__(22); + + var _pdf_presentation_mode = __webpack_require__(23); + + var _pdf_scripting_manager = __webpack_require__(24); + + var _pdf_sidebar = __webpack_require__(25); + + var _pdf_sidebar_resizer = __webpack_require__(26); + + var _pdf_thumbnail_viewer = __webpack_require__(27); + + var _pdf_viewer = __webpack_require__(29); + + var _secondary_toolbar = __webpack_require__(36); + + var _toolbar = __webpack_require__(38); + + var _viewer_compatibility = __webpack_require__(2); + + var _view_history = __webpack_require__(39); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + return keys; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + if (i % 2) { + ownKeys(Object(source), true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + return target; + } + + 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 _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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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 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); + return Constructor; + } + + var DEFAULT_SCALE_DELTA = 1.1; + var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; + var FORCE_PAGES_LOADED_TIMEOUT = 10000; + var WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; + var ENABLE_PERMISSIONS_CLASS = "enablePermissions"; + var ViewOnLoad = { + UNKNOWN: -1, + PREVIOUS: 0, + INITIAL: 1 + }; + var ViewerCssTheme = { + AUTOMATIC: 0, + LIGHT: 1, + DARK: 2 + }; + var KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"]; + var KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"]; + + var DefaultExternalServices = /*#__PURE__*/function () { + function DefaultExternalServices() { + _classCallCheck(this, DefaultExternalServices); + + throw new Error("Cannot initialize DefaultExternalServices."); + } + + _createClass(DefaultExternalServices, null, [{ + key: "updateFindControlState", + value: function updateFindControlState(data) { + } + }, { + key: "updateFindMatchesCount", + value: function updateFindMatchesCount(data) { + } + }, { + key: "initPassiveLoading", + value: function initPassiveLoading(callbacks) { + } + }, { + key: "fallback", + value: function () { + var _fallback = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(data) { + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + function fallback(_x) { + return _fallback.apply(this, arguments); + } + + return fallback; + }() + }, { + key: "reportTelemetry", + value: function reportTelemetry(data) { + } + }, { + key: "createDownloadManager", + value: function createDownloadManager(options) { + throw new Error("Not implemented: createDownloadManager"); + } + }, { + key: "createPreferences", + value: function createPreferences() { + throw new Error("Not implemented: createPreferences"); + } + }, { + key: "createL10n", + value: function createL10n(options) { + throw new Error("Not implemented: createL10n"); + } + }, { + key: "createScripting", + value: function createScripting(options) { + throw new Error("Not implemented: createScripting"); + } + }, { + key: "supportsIntegratedFind", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "supportsIntegratedFind", false); + } + }, { + key: "supportsDocumentFonts", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "supportsDocumentFonts", true); + } + }, { + key: "supportedMouseWheelZoomModifierKeys", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "supportedMouseWheelZoomModifierKeys", { + ctrlKey: true, + metaKey: true + }); + } + }, { + key: "isInAutomation", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "isInAutomation", false); + } + }]); + + return DefaultExternalServices; + }(); + + exports.DefaultExternalServices = DefaultExternalServices; + var PDFViewerApplication = { + initialBookmark: document.location.hash.substring(1), + _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(), + fellback: false, + appConfig: null, + pdfDocument: null, + pdfLoadingTask: null, + printService: null, + pdfViewer: null, + pdfThumbnailViewer: null, + pdfRenderingQueue: null, + pdfPresentationMode: null, + pdfDocumentProperties: null, + pdfLinkService: null, + pdfHistory: null, + pdfSidebar: null, + pdfSidebarResizer: null, + pdfOutlineViewer: null, + pdfAttachmentViewer: null, + pdfLayerViewer: null, + pdfCursorTools: null, + pdfScriptingManager: null, + store: null, + downloadManager: null, + overlayManager: null, + preferences: null, + toolbar: null, + secondaryToolbar: null, + eventBus: null, + l10n: null, + isInitialViewSet: false, + downloadComplete: false, + isViewerEmbedded: window.parent !== window, + url: "", + baseUrl: "", + externalServices: DefaultExternalServices, + _boundEvents: Object.create(null), + documentInfo: null, + metadata: null, + _contentDispositionFilename: null, + _contentLength: null, + triggerDelayedFallback: null, + _saveInProgress: false, + _wheelUnusedTicks: 0, + _idleCallbacks: new Set(), + initialize: function initialize(appConfig) { + var _this = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + var appContainer; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _this.preferences = _this.externalServices.createPreferences(); + _this.appConfig = appConfig; + _context2.next = 4; + return _this._readPreferences(); + + case 4: + _context2.next = 6; + return _this._parseHashParameters(); + + case 6: + _this._forceCssTheme(); + + _context2.next = 9; + return _this._initializeL10n(); + + case 9: + if (_this.isViewerEmbedded && _app_options.AppOptions.get("externalLinkTarget") === _pdfjsLib.LinkTarget.NONE) { + _app_options.AppOptions.set("externalLinkTarget", _pdfjsLib.LinkTarget.TOP); + } + + _context2.next = 12; + return _this._initializeViewerComponents(); + + case 12: + _this.bindEvents(); + + _this.bindWindowEvents(); + + appContainer = appConfig.appContainer || document.documentElement; + + _this.l10n.translate(appContainer).then(function () { + _this.eventBus.dispatch("localized", { + source: _this + }); + }); + + _this._initializedCapability.resolve(); + + case 17: + case "end": + return _context2.stop(); + } + } + }, _callee2); + }))(); + }, + _readPreferences: function _readPreferences() { + var _this2 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + if (!_app_options.AppOptions.get("disablePreferences")) { + _context3.next = 2; + break; + } + + return _context3.abrupt("return"); + + case 2: + _context3.prev = 2; + _context3.t0 = _app_options.AppOptions; + _context3.next = 6; + return _this2.preferences.getAll(); + + case 6: + _context3.t1 = _context3.sent; + + _context3.t0.setAll.call(_context3.t0, _context3.t1); + + _context3.next = 13; + break; + + case 10: + _context3.prev = 10; + _context3.t2 = _context3["catch"](2); + console.error("_readPreferences: \"".concat(_context3.t2 === null || _context3.t2 === void 0 ? void 0 : _context3.t2.message, "\".")); + + case 13: + case "end": + return _context3.stop(); + } + } + }, _callee3, null, [[2, 10]]); + }))(); + }, + _parseHashParameters: function _parseHashParameters() { + var _this3 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4() { + var hash, hashParams, waitOn, viewer, enabled; + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + if (_app_options.AppOptions.get("pdfBugEnabled")) { + _context4.next = 2; + break; + } + + return _context4.abrupt("return", undefined); + + case 2: + hash = document.location.hash.substring(1); + + if (hash) { + _context4.next = 5; + break; + } + + return _context4.abrupt("return", undefined); + + case 5: + hashParams = (0, _ui_utils.parseQueryString)(hash), waitOn = []; + + if ("disableworker" in hashParams && hashParams.disableworker === "true") { + waitOn.push(loadFakeWorker()); + } + + if ("disablerange" in hashParams) { + _app_options.AppOptions.set("disableRange", hashParams.disablerange === "true"); + } + + if ("disablestream" in hashParams) { + _app_options.AppOptions.set("disableStream", hashParams.disablestream === "true"); + } + + if ("disableautofetch" in hashParams) { + _app_options.AppOptions.set("disableAutoFetch", hashParams.disableautofetch === "true"); + } + + if ("disablefontface" in hashParams) { + _app_options.AppOptions.set("disableFontFace", hashParams.disablefontface === "true"); + } + + if ("disablehistory" in hashParams) { + _app_options.AppOptions.set("disableHistory", hashParams.disablehistory === "true"); + } + + if ("webgl" in hashParams) { + _app_options.AppOptions.set("enableWebGL", hashParams.webgl === "true"); + } + + if ("verbosity" in hashParams) { + _app_options.AppOptions.set("verbosity", hashParams.verbosity | 0); + } + + if (!("textlayer" in hashParams)) { + _context4.next = 23; + break; + } + + _context4.t0 = hashParams.textlayer; + _context4.next = _context4.t0 === "off" ? 18 : _context4.t0 === "visible" ? 20 : _context4.t0 === "shadow" ? 20 : _context4.t0 === "hover" ? 20 : 23; + break; + + case 18: + _app_options.AppOptions.set("textLayerMode", _ui_utils.TextLayerMode.DISABLE); + + return _context4.abrupt("break", 23); + + case 20: + viewer = _this3.appConfig.viewerContainer; + viewer.classList.add("textLayer-" + hashParams.textlayer); + return _context4.abrupt("break", 23); + + case 23: + if ("pdfbug" in hashParams) { + _app_options.AppOptions.set("pdfBug", true); + + _app_options.AppOptions.set("fontExtraProperties", true); + + enabled = hashParams.pdfbug.split(","); + waitOn.push(loadAndEnablePDFBug(enabled)); + } + + if ("locale" in hashParams) { + _app_options.AppOptions.set("locale", hashParams.locale); + } + + if (!(waitOn.length === 0)) { + _context4.next = 27; + break; + } + + return _context4.abrupt("return", undefined); + + case 27: + return _context4.abrupt("return", Promise.all(waitOn)["catch"](function (reason) { + console.error("_parseHashParameters: \"".concat(reason.message, "\".")); + })); + + case 28: + case "end": + return _context4.stop(); + } + } + }, _callee4); + }))(); + }, + _initializeL10n: function _initializeL10n() { + var _this4 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5() { + var dir; + return _regenerator["default"].wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + _this4.l10n = _this4.externalServices.createL10n({ + locale: _app_options.AppOptions.get("locale") + }); + _context5.next = 3; + return _this4.l10n.getDirection(); + + case 3: + dir = _context5.sent; + document.getElementsByTagName("html")[0].dir = dir; + + case 5: + case "end": + return _context5.stop(); + } + } + }, _callee5); + }))(); + }, + _forceCssTheme: function _forceCssTheme() { + var cssTheme = _app_options.AppOptions.get("viewerCssTheme"); + + if (cssTheme === ViewerCssTheme.AUTOMATIC || !Object.values(ViewerCssTheme).includes(cssTheme)) { + return; + } + + try { + var styleSheet = document.styleSheets[0]; + var cssRules = (styleSheet === null || styleSheet === void 0 ? void 0 : styleSheet.cssRules) || []; + + for (var i = 0, ii = cssRules.length; i < ii; i++) { + var _rule$media; + + var rule = cssRules[i]; + + if (rule instanceof CSSMediaRule && ((_rule$media = rule.media) === null || _rule$media === void 0 ? void 0 : _rule$media[0]) === "(prefers-color-scheme: dark)") { + if (cssTheme === ViewerCssTheme.LIGHT) { + styleSheet.deleteRule(i); + return; + } + + var darkRules = /^@media \(prefers-color-scheme: dark\) {\n\s*([\w\s-.,:;/\\{}()]+)\n}$/.exec(rule.cssText); + + if (darkRules !== null && darkRules !== void 0 && darkRules[1]) { + styleSheet.deleteRule(i); + styleSheet.insertRule(darkRules[1], i); + } + + return; + } + } + } catch (reason) { + console.error("_forceCssTheme: \"".concat(reason === null || reason === void 0 ? void 0 : reason.message, "\".")); + } + }, + _initializeViewerComponents: function _initializeViewerComponents() { + var _this5 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6() { + var appConfig, eventBus, pdfRenderingQueue, pdfLinkService, downloadManager, findController, + pdfScriptingManager, container, viewer; + return _regenerator["default"].wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + appConfig = _this5.appConfig; + eventBus = appConfig.eventBus || new _ui_utils.EventBus({ + isInAutomation: _this5.externalServices.isInAutomation + }); + _this5.eventBus = eventBus; + _this5.overlayManager = new _overlay_manager.OverlayManager(); + pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); + pdfRenderingQueue.onIdle = _this5._cleanup.bind(_this5); + _this5.pdfRenderingQueue = pdfRenderingQueue; + pdfLinkService = new _pdf_link_service.PDFLinkService({ + eventBus: eventBus, + externalLinkTarget: _app_options.AppOptions.get("externalLinkTarget"), + externalLinkRel: _app_options.AppOptions.get("externalLinkRel"), + ignoreDestinationZoom: _app_options.AppOptions.get("ignoreDestinationZoom") + }); + _this5.pdfLinkService = pdfLinkService; + downloadManager = _this5.externalServices.createDownloadManager(); + _this5.downloadManager = downloadManager; + findController = new _pdf_find_controller.PDFFindController({ + linkService: pdfLinkService, + eventBus: eventBus + }); + _this5.findController = findController; + pdfScriptingManager = new _pdf_scripting_manager.PDFScriptingManager({ + eventBus: eventBus, + sandboxBundleSrc: _app_options.AppOptions.get("sandboxBundleSrc"), + scriptingFactory: _this5.externalServices, + docPropertiesLookup: _this5._scriptingDocProperties.bind(_this5) + }); + _this5.pdfScriptingManager = pdfScriptingManager; + container = appConfig.mainContainer; + viewer = appConfig.viewerContainer; + _this5.pdfViewer = new _pdf_viewer.PDFViewer({ + container: container, + viewer: viewer, + eventBus: eventBus, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + downloadManager: downloadManager, + findController: findController, + scriptingManager: pdfScriptingManager, + renderer: _app_options.AppOptions.get("renderer"), + enableWebGL: _app_options.AppOptions.get("enableWebGL"), + l10n: _this5.l10n, + textLayerMode: _app_options.AppOptions.get("textLayerMode"), + imageResourcesPath: _app_options.AppOptions.get("imageResourcesPath"), + renderInteractiveForms: _app_options.AppOptions.get("renderInteractiveForms"), + enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"), + useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"), + maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels"), + enableScripting: _app_options.AppOptions.get("enableScripting") + }); + pdfRenderingQueue.setViewer(_this5.pdfViewer); + pdfLinkService.setViewer(_this5.pdfViewer); + pdfScriptingManager.setViewer(_this5.pdfViewer); + _this5.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({ + container: appConfig.sidebar.thumbnailView, + eventBus: eventBus, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + l10n: _this5.l10n + }); + pdfRenderingQueue.setThumbnailViewer(_this5.pdfThumbnailViewer); + _this5.pdfHistory = new _pdf_history.PDFHistory({ + linkService: pdfLinkService, + eventBus: eventBus + }); + pdfLinkService.setHistory(_this5.pdfHistory); + + if (!_this5.supportsIntegratedFind) { + _this5.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, _this5.l10n); + } + + _this5.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, _this5.overlayManager, eventBus, _this5.l10n); + _this5.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({ + container: container, + eventBus: eventBus, + cursorToolOnLoad: _app_options.AppOptions.get("cursorToolOnLoad") + }); + _this5.toolbar = new _toolbar.Toolbar(appConfig.toolbar, eventBus, _this5.l10n); + _this5.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); + + if (_this5.supportsFullscreen) { + _this5.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({ + container: container, + pdfViewer: _this5.pdfViewer, + eventBus: eventBus + }); + } + + _this5.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, _this5.overlayManager, _this5.l10n, _this5.isViewerEmbedded); + _this5.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({ + container: appConfig.sidebar.outlineView, + eventBus: eventBus, + linkService: pdfLinkService + }); + _this5.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({ + container: appConfig.sidebar.attachmentsView, + eventBus: eventBus, + downloadManager: downloadManager + }); + _this5.pdfLayerViewer = new _pdf_layer_viewer.PDFLayerViewer({ + container: appConfig.sidebar.layersView, + eventBus: eventBus, + l10n: _this5.l10n + }); + _this5.pdfSidebar = new _pdf_sidebar.PDFSidebar({ + elements: appConfig.sidebar, + pdfViewer: _this5.pdfViewer, + pdfThumbnailViewer: _this5.pdfThumbnailViewer, + eventBus: eventBus, + l10n: _this5.l10n + }); + _this5.pdfSidebar.onToggled = _this5.forceRendering.bind(_this5); + _this5.pdfSidebarResizer = new _pdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, _this5.l10n); + + case 38: + case "end": + return _context6.stop(); + } + } + }, _callee6); + }))(); + }, + run: function run(config) { + this.initialize(config).then(webViewerInitialized); + }, + + get initialized() { + return this._initializedCapability.settled; + }, + + get initializedPromise() { + return this._initializedCapability.promise; + }, + + zoomIn: function zoomIn(ticks) { + if (this.pdfViewer.isInPresentationMode) { + return; + } + + var newScale = this.pdfViewer.currentScale; + + do { + newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.ceil(newScale * 10) / 10; + newScale = Math.min(_ui_utils.MAX_SCALE, newScale); + } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE); + + this.pdfViewer.currentScaleValue = newScale; + }, + zoomOut: function zoomOut(ticks) { + if (this.pdfViewer.isInPresentationMode) { + return; + } + + var newScale = this.pdfViewer.currentScale; + + do { + newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.floor(newScale * 10) / 10; + newScale = Math.max(_ui_utils.MIN_SCALE, newScale); + } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE); + + this.pdfViewer.currentScaleValue = newScale; + }, + zoomReset: function zoomReset() { + if (this.pdfViewer.isInPresentationMode) { + return; + } + + this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + }, + + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + }, + + get page() { + return this.pdfViewer.currentPageNumber; + }, + + set page(val) { + this.pdfViewer.currentPageNumber = val; + }, + + get supportsPrinting() { + return PDFPrintServiceFactory.instance.supportsPrinting; + }, + + get supportsFullscreen() { + var doc = document.documentElement; + var support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen); + + if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false) { + support = false; + } + + return (0, _pdfjsLib.shadow)(this, "supportsFullscreen", support); + }, + + get supportsIntegratedFind() { + return this.externalServices.supportsIntegratedFind; + }, + + get supportsDocumentFonts() { + return this.externalServices.supportsDocumentFonts; + }, + + get loadingBar() { + var bar = new _ui_utils.ProgressBar("#loadingBar"); + return (0, _pdfjsLib.shadow)(this, "loadingBar", bar); + }, + + get supportedMouseWheelZoomModifierKeys() { + return this.externalServices.supportedMouseWheelZoomModifierKeys; + }, + + initPassiveLoading: function initPassiveLoading() { + throw new Error("Not implemented: initPassiveLoading"); + }, + setTitleUsingUrl: function setTitleUsingUrl() { + var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; + this.url = url; + this.baseUrl = url.split("#")[0]; + var title = (0, _pdfjsLib.getPdfFilenameFromUrl)(url, ""); + + if (!title) { + try { + title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url; + } catch (ex) { + title = url; + } + } + + this.setTitle(title); + }, + setTitle: function setTitle(title) { + if (this.isViewerEmbedded) { + return; + } + + document.title = title; + }, + + get _docFilename() { + return this._contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(this.url); + }, + + _cancelIdleCallbacks: function _cancelIdleCallbacks() { + if (!this._idleCallbacks.size) { + return; + } + + var _iterator = _createForOfIteratorHelper(this._idleCallbacks), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var callback = _step.value; + window.cancelIdleCallback(callback); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + this._idleCallbacks.clear(); + }, + close: function close() { + var _this6 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee7() { + var _this6$pdfDocument; + + var container, promises; + return _regenerator["default"].wrap(function _callee7$(_context7) { + while (1) { + switch (_context7.prev = _context7.next) { + case 0: + _this6._unblockDocumentLoadEvent(); + + container = _this6.appConfig.errorWrapper.container; + container.hidden = true; + + if (_this6.pdfLoadingTask) { + _context7.next = 5; + break; + } + + return _context7.abrupt("return"); + + case 5: + if (!(((_this6$pdfDocument = _this6.pdfDocument) === null || _this6$pdfDocument === void 0 ? void 0 : _this6$pdfDocument.annotationStorage.size) > 0 && _this6._annotationStorageModified)) { + _context7.next = 13; + break; + } + + _context7.prev = 6; + _context7.next = 9; + return _this6.save({ + sourceEventType: "save" + }); + + case 9: + _context7.next = 13; + break; + + case 11: + _context7.prev = 11; + _context7.t0 = _context7["catch"](6); + + case 13: + promises = []; + promises.push(_this6.pdfLoadingTask.destroy()); + _this6.pdfLoadingTask = null; + + if (_this6.pdfDocument) { + _this6.pdfDocument = null; + + _this6.pdfThumbnailViewer.setDocument(null); + + _this6.pdfViewer.setDocument(null); + + _this6.pdfLinkService.setDocument(null); + + _this6.pdfDocumentProperties.setDocument(null); + } + + webViewerResetPermissions(); + _this6.store = null; + _this6.isInitialViewSet = false; + _this6.downloadComplete = false; + _this6.url = ""; + _this6.baseUrl = ""; + _this6.documentInfo = null; + _this6.metadata = null; + _this6._contentDispositionFilename = null; + _this6._contentLength = null; + _this6.triggerDelayedFallback = null; + _this6._saveInProgress = false; + + _this6._cancelIdleCallbacks(); + + promises.push(_this6.pdfScriptingManager.destroyPromise); + + _this6.pdfSidebar.reset(); + + _this6.pdfOutlineViewer.reset(); + + _this6.pdfAttachmentViewer.reset(); + + _this6.pdfLayerViewer.reset(); + + if (_this6.pdfHistory) { + _this6.pdfHistory.reset(); + } + + if (_this6.findBar) { + _this6.findBar.reset(); + } + + _this6.toolbar.reset(); + + _this6.secondaryToolbar.reset(); + + if (typeof PDFBug !== "undefined") { + PDFBug.cleanup(); + } + + _context7.next = 42; + return Promise.all(promises); + + case 42: + case "end": + return _context7.stop(); + } + } + }, _callee7, null, [[6, 11]]); + }))(); + }, + open: function open(file, args) { + var _this7 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee8() { + var workerParameters, key, parameters, apiParameters, _key, value, _key2, loadingTask; + + return _regenerator["default"].wrap(function _callee8$(_context8) { + while (1) { + switch (_context8.prev = _context8.next) { + case 0: + if (!_this7.pdfLoadingTask) { + _context8.next = 3; + break; + } + + _context8.next = 3; + return _this7.close(); + + case 3: + workerParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER); + + for (key in workerParameters) { + _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key]; + } + + parameters = Object.create(null); + + if (typeof file === "string") { + _this7.setTitleUsingUrl(file); + + parameters.url = file; + } else if (file && "byteLength" in file) { + parameters.data = file; + } else if (file.url && file.originalUrl) { + _this7.setTitleUsingUrl(file.originalUrl); + + parameters.url = file.url; + } + + apiParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.API); + + for (_key in apiParameters) { + value = apiParameters[_key]; + + if (_key === "docBaseUrl" && !value) { + } + + parameters[_key] = value; + } + + if (args) { + for (_key2 in args) { + parameters[_key2] = args[_key2]; + } + } + + loadingTask = (0, _pdfjsLib.getDocument)(parameters); + _this7.pdfLoadingTask = loadingTask; + + loadingTask.onPassword = function (updateCallback, reason) { + _this7.pdfLinkService.externalLinkEnabled = false; + + _this7.passwordPrompt.setUpdateCallback(updateCallback, reason); + + _this7.passwordPrompt.open(); + }; + + loadingTask.onProgress = function (_ref) { + var loaded = _ref.loaded, + total = _ref.total; + + _this7.progress(loaded / total); + }; + + loadingTask.onUnsupportedFeature = _this7.fallback.bind(_this7); + return _context8.abrupt("return", loadingTask.promise.then(function (pdfDocument) { + _this7.load(pdfDocument); + }, function (exception) { + if (loadingTask !== _this7.pdfLoadingTask) { + return undefined; + } + + var key = "loading_error"; + + if (exception instanceof _pdfjsLib.InvalidPDFException) { + key = "invalid_file_error"; + } else if (exception instanceof _pdfjsLib.MissingPDFException) { + key = "missing_file_error"; + } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) { + key = "unexpected_response_error"; + } + + return _this7.l10n.get(key).then(function (msg) { + _this7._documentError(msg, { + message: exception === null || exception === void 0 ? void 0 : exception.message + }); + + throw exception; + }); + })); + + case 16: + case "end": + return _context8.stop(); + } + } + }, _callee8); + }))(); + }, + _ensureDownloadComplete: function _ensureDownloadComplete() { + if (this.pdfDocument && this.downloadComplete) { + return; + } + + throw new Error("PDF document not downloaded."); + }, + download: function download() { + var _arguments = arguments, + _this8 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee9() { + var _ref2, _ref2$sourceEventType, sourceEventType, url, filename, data, blob; + + return _regenerator["default"].wrap(function _callee9$(_context9) { + while (1) { + switch (_context9.prev = _context9.next) { + case 0: + _ref2 = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {}, _ref2$sourceEventType = _ref2.sourceEventType, sourceEventType = _ref2$sourceEventType === void 0 ? "download" : _ref2$sourceEventType; + url = _this8.baseUrl, filename = _this8._docFilename; + _context9.prev = 2; + + _this8._ensureDownloadComplete(); + + _context9.next = 6; + return _this8.pdfDocument.getData(); + + case 6: + data = _context9.sent; + blob = new Blob([data], { + type: "application/pdf" + }); + _context9.next = 10; + return _this8.downloadManager.download(blob, url, filename, sourceEventType); + + case 10: + _context9.next = 16; + break; + + case 12: + _context9.prev = 12; + _context9.t0 = _context9["catch"](2); + _context9.next = 16; + return _this8.downloadManager.downloadUrl(url, filename); + + case 16: + case "end": + return _context9.stop(); + } + } + }, _callee9, null, [[2, 12]]); + }))(); + }, + save: function save() { + var _arguments2 = arguments, + _this9 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee10() { + var _ref3, _ref3$sourceEventType, sourceEventType, url, filename, data, blob; + + return _regenerator["default"].wrap(function _callee10$(_context10) { + while (1) { + switch (_context10.prev = _context10.next) { + case 0: + _ref3 = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : {}, _ref3$sourceEventType = _ref3.sourceEventType, sourceEventType = _ref3$sourceEventType === void 0 ? "download" : _ref3$sourceEventType; + + if (!_this9._saveInProgress) { + _context10.next = 3; + break; + } + + return _context10.abrupt("return"); + + case 3: + _this9._saveInProgress = true; + _context10.next = 6; + return _this9.pdfScriptingManager.dispatchWillSave(); + + case 6: + url = _this9.baseUrl, filename = _this9._docFilename; + _context10.prev = 7; + + _this9._ensureDownloadComplete(); + + _context10.next = 11; + return _this9.pdfDocument.saveDocument(_this9.pdfDocument.annotationStorage); + + case 11: + data = _context10.sent; + blob = new Blob([data], { + type: "application/pdf" + }); + _context10.next = 15; + return _this9.downloadManager.download(blob, url, filename, sourceEventType); + + case 15: + _context10.next = 21; + break; + + case 17: + _context10.prev = 17; + _context10.t0 = _context10["catch"](7); + _context10.next = 21; + return _this9.download({ + sourceEventType: sourceEventType + }); + + case 21: + _context10.prev = 21; + _context10.next = 24; + return _this9.pdfScriptingManager.dispatchDidSave(); + + case 24: + _this9._saveInProgress = false; + return _context10.finish(21); + + case 26: + case "end": + return _context10.stop(); + } + } + }, _callee10, null, [[7, 17, 21, 26]]); + }))(); + }, + downloadOrSave: function downloadOrSave(options) { + var _this$pdfDocument; + + if (((_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage.size) > 0) { + this.save(options); + } else { + this.download(options); + } + }, + _delayedFallback: function _delayedFallback(featureId) { + var _this10 = this; + + this.externalServices.reportTelemetry({ + type: "unsupportedFeature", + featureId: featureId + }); + + if (!this.triggerDelayedFallback) { + this.triggerDelayedFallback = function () { + _this10.fallback(featureId); + + _this10.triggerDelayedFallback = null; + }; + } + }, + fallback: function fallback(featureId) { + var _this11 = this; + + this.externalServices.reportTelemetry({ + type: "unsupportedFeature", + featureId: featureId + }); + + switch (featureId) { + case _pdfjsLib.UNSUPPORTED_FEATURES.errorFontLoadNative: + case _pdfjsLib.UNSUPPORTED_FEATURES.errorFontMissing: + return; + } + + if (this.fellback) { + return; + } + + this.fellback = true; + this.externalServices.fallback({ + featureId: featureId, + url: this.baseUrl + }).then(function (download) { + if (!download) { + return; + } + + _this11.download({ + sourceEventType: "download" + }); + }); + }, + _documentError: function _documentError(message) { + var moreInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + this._unblockDocumentLoadEvent(); + + this._otherError(message, moreInfo); + }, + _otherError: function _otherError(message) { + var moreInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var moreInfoText = [this.l10n.get("error_version_info", { + version: _pdfjsLib.version || "?", + build: _pdfjsLib.build || "?" + })]; + + if (moreInfo) { + moreInfoText.push(this.l10n.get("error_message", { + message: moreInfo.message + })); + + if (moreInfo.stack) { + moreInfoText.push(this.l10n.get("error_stack", { + stack: moreInfo.stack + })); + } else { + if (moreInfo.filename) { + moreInfoText.push(this.l10n.get("error_file", { + file: moreInfo.filename + })); + } + + if (moreInfo.lineNumber) { + moreInfoText.push(this.l10n.get("error_line", { + line: moreInfo.lineNumber + })); + } + } + } + + var errorWrapperConfig = this.appConfig.errorWrapper; + var errorWrapper = errorWrapperConfig.container; + errorWrapper.hidden = false; + var errorMessage = errorWrapperConfig.errorMessage; + errorMessage.textContent = message; + var closeButton = errorWrapperConfig.closeButton; + + closeButton.onclick = function () { + errorWrapper.hidden = true; + }; + + var errorMoreInfo = errorWrapperConfig.errorMoreInfo; + var moreInfoButton = errorWrapperConfig.moreInfoButton; + var lessInfoButton = errorWrapperConfig.lessInfoButton; + + moreInfoButton.onclick = function () { + errorMoreInfo.hidden = false; + moreInfoButton.hidden = true; + lessInfoButton.hidden = false; + errorMoreInfo.style.height = errorMoreInfo.scrollHeight + "px"; + }; + + lessInfoButton.onclick = function () { + errorMoreInfo.hidden = true; + moreInfoButton.hidden = false; + lessInfoButton.hidden = true; + }; + + moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; + lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; + closeButton.oncontextmenu = _ui_utils.noContextMenuHandler; + moreInfoButton.hidden = false; + lessInfoButton.hidden = true; + Promise.all(moreInfoText).then(function (parts) { + errorMoreInfo.value = parts.join("\n"); + }); + }, + progress: function progress(level) { + var _this12 = this; + + if (this.downloadComplete) { + return; + } + + var percent = Math.round(level * 100); + + if (percent > this.loadingBar.percent || isNaN(percent)) { + this.loadingBar.percent = percent; + var disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get("disableAutoFetch"); + + if (disableAutoFetch && percent) { + if (this.disableAutoFetchLoadingBarTimeout) { + clearTimeout(this.disableAutoFetchLoadingBarTimeout); + this.disableAutoFetchLoadingBarTimeout = null; + } + + this.loadingBar.show(); + this.disableAutoFetchLoadingBarTimeout = setTimeout(function () { + _this12.loadingBar.hide(); + + _this12.disableAutoFetchLoadingBarTimeout = null; + }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT); + } + } + }, + load: function load(pdfDocument) { + var _this13 = this; + + this.pdfDocument = pdfDocument; + pdfDocument.getDownloadInfo().then(function (_ref4) { + var length = _ref4.length; + _this13._contentLength = length; + _this13.downloadComplete = true; + + _this13.loadingBar.hide(); + + firstPagePromise.then(function () { + _this13.eventBus.dispatch("documentloaded", { + source: _this13 + }); + }); + }); + var pageLayoutPromise = pdfDocument.getPageLayout()["catch"](function () { + }); + var pageModePromise = pdfDocument.getPageMode()["catch"](function () { + }); + var openActionPromise = pdfDocument.getOpenAction()["catch"](function () { + }); + this.toolbar.setPagesCount(pdfDocument.numPages, false); + this.secondaryToolbar.setPagesCount(pdfDocument.numPages); + var baseDocumentUrl; + baseDocumentUrl = null; + this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); + this.pdfDocumentProperties.setDocument(pdfDocument, this.url); + var pdfViewer = this.pdfViewer; + pdfViewer.setDocument(pdfDocument); + var firstPagePromise = pdfViewer.firstPagePromise, + onePageRendered = pdfViewer.onePageRendered, + pagesPromise = pdfViewer.pagesPromise; + var pdfThumbnailViewer = this.pdfThumbnailViewer; + pdfThumbnailViewer.setDocument(pdfDocument); + var storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprint)).getMultiple({ + page: null, + zoom: _ui_utils.DEFAULT_SCALE_VALUE, + scrollLeft: "0", + scrollTop: "0", + rotation: null, + sidebarView: _ui_utils.SidebarView.UNKNOWN, + scrollMode: _ui_utils.ScrollMode.UNKNOWN, + spreadMode: _ui_utils.SpreadMode.UNKNOWN + })["catch"](function () { + return Object.create(null); + }); + firstPagePromise.then(function (pdfPage) { + _this13.loadingBar.setWidth(_this13.appConfig.viewerContainer); + + _this13._initializeAnnotationStorageCallbacks(pdfDocument); + + Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then( /*#__PURE__*/function () { + var _ref6 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee11(_ref5) { + var _ref7, timeStamp, stored, pageLayout, pageMode, openAction, viewOnLoad, + initialBookmark, zoom, hash, rotation, sidebarView, scrollMode, spreadMode; + + return _regenerator["default"].wrap(function _callee11$(_context11) { + while (1) { + switch (_context11.prev = _context11.next) { + case 0: + _ref7 = _slicedToArray(_ref5, 5), timeStamp = _ref7[0], stored = _ref7[1], pageLayout = _ref7[2], pageMode = _ref7[3], openAction = _ref7[4]; + viewOnLoad = _app_options.AppOptions.get("viewOnLoad"); + + _this13._initializePdfHistory({ + fingerprint: pdfDocument.fingerprint, + viewOnLoad: viewOnLoad, + initialDest: openAction === null || openAction === void 0 ? void 0 : openAction.dest + }); + + initialBookmark = _this13.initialBookmark; + zoom = _app_options.AppOptions.get("defaultZoomValue"); + hash = zoom ? "zoom=".concat(zoom) : null; + rotation = null; + sidebarView = _app_options.AppOptions.get("sidebarViewOnLoad"); + scrollMode = _app_options.AppOptions.get("scrollModeOnLoad"); + spreadMode = _app_options.AppOptions.get("spreadModeOnLoad"); + + if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) { + hash = "page=".concat(stored.page, "&zoom=").concat(zoom || stored.zoom, ",") + "".concat(stored.scrollLeft, ",").concat(stored.scrollTop); + rotation = parseInt(stored.rotation, 10); + + if (sidebarView === _ui_utils.SidebarView.UNKNOWN) { + sidebarView = stored.sidebarView | 0; + } + + if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) { + scrollMode = stored.scrollMode | 0; + } + + if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) { + spreadMode = stored.spreadMode | 0; + } + } + + if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) { + sidebarView = (0, _ui_utils.apiPageModeToSidebarView)(pageMode); + } + + if (pageLayout && spreadMode === _ui_utils.SpreadMode.UNKNOWN) { + spreadMode = (0, _ui_utils.apiPageLayoutToSpreadMode)(pageLayout); + } + + _this13.setInitialView(hash, { + rotation: rotation, + sidebarView: sidebarView, + scrollMode: scrollMode, + spreadMode: spreadMode + }); + + _this13.eventBus.dispatch("documentinit", { + source: _this13 + }); + + if (!_this13.isViewerEmbedded) { + pdfViewer.focus(); + } + + _this13._initializePermissions(pdfDocument); + + _context11.next = 19; + return Promise.race([pagesPromise, new Promise(function (resolve) { + setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT); + })]); + + case 19: + if (!(!initialBookmark && !hash)) { + _context11.next = 21; + break; + } + + return _context11.abrupt("return"); + + case 21: + if (!pdfViewer.hasEqualPageSizes) { + _context11.next = 23; + break; + } + + return _context11.abrupt("return"); + + case 23: + _this13.initialBookmark = initialBookmark; + pdfViewer.currentScaleValue = pdfViewer.currentScaleValue; + + _this13.setInitialView(hash); + + case 26: + case "end": + return _context11.stop(); + } + } + }, _callee11); + })); + + return function (_x2) { + return _ref6.apply(this, arguments); + }; + }())["catch"](function () { + _this13.setInitialView(); + }).then(function () { + pdfViewer.update(); + }); + }); + pagesPromise.then(function () { + _this13._unblockDocumentLoadEvent(); + + _this13._initializeAutoPrint(pdfDocument, openActionPromise); + }); + onePageRendered.then(function () { + pdfDocument.getOutline().then(function (outline) { + _this13.pdfOutlineViewer.render({ + outline: outline, + pdfDocument: pdfDocument + }); + }); + pdfDocument.getAttachments().then(function (attachments) { + _this13.pdfAttachmentViewer.render({ + attachments: attachments + }); + }); + pdfViewer.optionalContentConfigPromise.then(function (optionalContentConfig) { + _this13.pdfLayerViewer.render({ + optionalContentConfig: optionalContentConfig, + pdfDocument: pdfDocument + }); + }); + + if ("requestIdleCallback" in window) { + var callback = window.requestIdleCallback(function () { + _this13._collectTelemetry(pdfDocument); + + _this13._idleCallbacks["delete"](callback); + }, { + timeout: 1000 + }); + + _this13._idleCallbacks.add(callback); + } + }); + + this._initializePageLabels(pdfDocument); + + this._initializeMetadata(pdfDocument); + }, + _scriptingDocProperties: function _scriptingDocProperties(pdfDocument) { + var _this14 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee12() { + var _this14$metadata, _this14$metadata2; + + return _regenerator["default"].wrap(function _callee12$(_context12) { + while (1) { + switch (_context12.prev = _context12.next) { + case 0: + if (_this14.documentInfo) { + _context12.next = 5; + break; + } + + _context12.next = 3; + return new Promise(function (resolve) { + _this14.eventBus._on("metadataloaded", resolve, { + once: true + }); + }); + + case 3: + if (!(pdfDocument !== _this14.pdfDocument)) { + _context12.next = 5; + break; + } + + return _context12.abrupt("return", null); + + case 5: + if (_this14._contentLength) { + _context12.next = 10; + break; + } + + _context12.next = 8; + return new Promise(function (resolve) { + _this14.eventBus._on("documentloaded", resolve, { + once: true + }); + }); + + case 8: + if (!(pdfDocument !== _this14.pdfDocument)) { + _context12.next = 10; + break; + } + + return _context12.abrupt("return", null); + + case 10: + return _context12.abrupt("return", _objectSpread(_objectSpread({}, _this14.documentInfo), {}, { + baseURL: _this14.baseUrl, + filesize: _this14._contentLength, + filename: _this14._docFilename, + metadata: (_this14$metadata = _this14.metadata) === null || _this14$metadata === void 0 ? void 0 : _this14$metadata.getRaw(), + authors: (_this14$metadata2 = _this14.metadata) === null || _this14$metadata2 === void 0 ? void 0 : _this14$metadata2.get("dc:creator"), + numPages: _this14.pagesCount, + URL: _this14.url + })); + + case 11: + case "end": + return _context12.stop(); + } + } + }, _callee12); + }))(); + }, + _collectTelemetry: function _collectTelemetry(pdfDocument) { + var _this15 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee13() { + var markInfo, tagged; + return _regenerator["default"].wrap(function _callee13$(_context13) { + while (1) { + switch (_context13.prev = _context13.next) { + case 0: + _context13.next = 2; + return _this15.pdfDocument.getMarkInfo(); + + case 2: + markInfo = _context13.sent; + + if (!(pdfDocument !== _this15.pdfDocument)) { + _context13.next = 5; + break; + } + + return _context13.abrupt("return"); + + case 5: + tagged = (markInfo === null || markInfo === void 0 ? void 0 : markInfo.Marked) || false; + + _this15.externalServices.reportTelemetry({ + type: "tagged", + tagged: tagged + }); + + case 7: + case "end": + return _context13.stop(); + } + } + }, _callee13); + }))(); + }, + _initializeAutoPrint: function _initializeAutoPrint(pdfDocument, openActionPromise) { + var _this16 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee14() { + var _yield$Promise$all, _yield$Promise$all2, openAction, javaScript, triggerAutoPrint, + _iterator2, _step2, js; + + return _regenerator["default"].wrap(function _callee14$(_context14) { + while (1) { + switch (_context14.prev = _context14.next) { + case 0: + _context14.next = 2; + return Promise.all([openActionPromise, !_this16.pdfViewer.enableScripting ? pdfDocument.getJavaScript() : null]); + + case 2: + _yield$Promise$all = _context14.sent; + _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2); + openAction = _yield$Promise$all2[0]; + javaScript = _yield$Promise$all2[1]; + + if (!(pdfDocument !== _this16.pdfDocument)) { + _context14.next = 8; + break; + } + + return _context14.abrupt("return"); + + case 8: + triggerAutoPrint = false; + + if ((openAction === null || openAction === void 0 ? void 0 : openAction.action) === "Print") { + triggerAutoPrint = true; + } + + if (!javaScript) { + _context14.next = 31; + break; + } + + javaScript.some(function (js) { + if (!js) { + return false; + } + + console.warn("Warning: JavaScript is not supported"); + + _this16._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript); + + return true; + }); + + if (triggerAutoPrint) { + _context14.next = 31; + break; + } + + _iterator2 = _createForOfIteratorHelper(javaScript); + _context14.prev = 14; + + _iterator2.s(); + + case 16: + if ((_step2 = _iterator2.n()).done) { + _context14.next = 23; + break; + } + + js = _step2.value; + + if (!(js && _ui_utils.AutoPrintRegExp.test(js))) { + _context14.next = 21; + break; + } + + triggerAutoPrint = true; + return _context14.abrupt("break", 23); + + case 21: + _context14.next = 16; + break; + + case 23: + _context14.next = 28; + break; + + case 25: + _context14.prev = 25; + _context14.t0 = _context14["catch"](14); + + _iterator2.e(_context14.t0); + + case 28: + _context14.prev = 28; + + _iterator2.f(); + + return _context14.finish(28); + + case 31: + if (triggerAutoPrint) { + _this16.triggerPrinting(); + } + + case 32: + case "end": + return _context14.stop(); + } + } + }, _callee14, null, [[14, 25, 28, 31]]); + }))(); + }, + _initializeMetadata: function _initializeMetadata(pdfDocument) { + var _this17 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee15() { + var _this17$_contentDispo, _this17$_contentLengt; + + var _yield$pdfDocument$ge, info, metadata, contentDispositionFilename, contentLength, pdfTitle, + metadataTitle, versionId, generatorId, producer, formType; + + return _regenerator["default"].wrap(function _callee15$(_context15) { + while (1) { + switch (_context15.prev = _context15.next) { + case 0: + _context15.next = 2; + return pdfDocument.getMetadata(); + + case 2: + _yield$pdfDocument$ge = _context15.sent; + info = _yield$pdfDocument$ge.info; + metadata = _yield$pdfDocument$ge.metadata; + contentDispositionFilename = _yield$pdfDocument$ge.contentDispositionFilename; + contentLength = _yield$pdfDocument$ge.contentLength; + + if (!(pdfDocument !== _this17.pdfDocument)) { + _context15.next = 9; + break; + } + + return _context15.abrupt("return"); + + case 9: + _this17.documentInfo = info; + _this17.metadata = metadata; + (_this17$_contentDispo = _this17._contentDispositionFilename) !== null && _this17$_contentDispo !== void 0 ? _this17$_contentDispo : _this17._contentDispositionFilename = contentDispositionFilename; + (_this17$_contentLengt = _this17._contentLength) !== null && _this17$_contentLengt !== void 0 ? _this17$_contentLengt : _this17._contentLength = contentLength; + console.log("PDF ".concat(pdfDocument.fingerprint, " [").concat(info.PDFFormatVersion, " ") + "".concat((info.Producer || "-").trim(), " / ").concat((info.Creator || "-").trim(), "] ") + "(PDF.js: ".concat(_pdfjsLib.version || "-") + "".concat(_this17.pdfViewer.enableWebGL ? " [WebGL]" : "", ")")); + pdfTitle = info === null || info === void 0 ? void 0 : info.Title; + metadataTitle = metadata === null || metadata === void 0 ? void 0 : metadata.get("dc:title"); + + if (metadataTitle) { + if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) { + pdfTitle = metadataTitle; + } + } + + if (pdfTitle) { + _this17.setTitle("".concat(pdfTitle, " - ").concat(contentDispositionFilename || document.title)); + } else if (contentDispositionFilename) { + _this17.setTitle(contentDispositionFilename); + } + + if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) { + console.warn("Warning: XFA is not supported"); + + _this17._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms); + } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !_this17.pdfViewer.renderInteractiveForms) { + console.warn("Warning: Interactive form support is not enabled"); + + _this17._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms); + } + + versionId = "other"; + + if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) { + versionId = "v".concat(info.PDFFormatVersion.replace(".", "_")); + } + + generatorId = "other"; + + if (info.Producer) { + producer = info.Producer.toLowerCase(); + KNOWN_GENERATORS.some(function (generator) { + if (!producer.includes(generator)) { + return false; + } + + generatorId = generator.replace(/[ .-]/g, "_"); + return true; + }); + } + + formType = null; + + if (info.IsXFAPresent) { + formType = "xfa"; + } else if (info.IsAcroFormPresent) { + formType = "acroform"; + } + + _this17.externalServices.reportTelemetry({ + type: "documentInfo", + version: versionId, + generator: generatorId, + formType: formType + }); + + _this17.eventBus.dispatch("metadataloaded", { + source: _this17 + }); + + case 27: + case "end": + return _context15.stop(); + } + } + }, _callee15); + }))(); + }, + _initializePageLabels: function _initializePageLabels(pdfDocument) { + var _this18 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee16() { + var labels, numLabels, i, pdfViewer, pdfThumbnailViewer, toolbar; + return _regenerator["default"].wrap(function _callee16$(_context16) { + while (1) { + switch (_context16.prev = _context16.next) { + case 0: + _context16.next = 2; + return pdfDocument.getPageLabels(); + + case 2: + labels = _context16.sent; + + if (!(pdfDocument !== _this18.pdfDocument)) { + _context16.next = 5; + break; + } + + return _context16.abrupt("return"); + + case 5: + if (!(!labels || _app_options.AppOptions.get("disablePageLabels"))) { + _context16.next = 7; + break; + } + + return _context16.abrupt("return"); + + case 7: + numLabels = labels.length; + + if (!(numLabels !== _this18.pagesCount)) { + _context16.next = 11; + break; + } + + console.error("The number of Page Labels does not match the number of pages in the document."); + return _context16.abrupt("return"); + + case 11: + i = 0; + + while (i < numLabels && labels[i] === (i + 1).toString()) { + i++; + } + + if (!(i === numLabels)) { + _context16.next = 15; + break; + } + + return _context16.abrupt("return"); + + case 15: + pdfViewer = _this18.pdfViewer, pdfThumbnailViewer = _this18.pdfThumbnailViewer, toolbar = _this18.toolbar; + pdfViewer.setPageLabels(labels); + pdfThumbnailViewer.setPageLabels(labels); + toolbar.setPagesCount(numLabels, true); + toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + + case 20: + case "end": + return _context16.stop(); + } + } + }, _callee16); + }))(); + }, + _initializePdfHistory: function _initializePdfHistory(_ref8) { + var fingerprint = _ref8.fingerprint, + viewOnLoad = _ref8.viewOnLoad, + _ref8$initialDest = _ref8.initialDest, + initialDest = _ref8$initialDest === void 0 ? null : _ref8$initialDest; + + if (this.isViewerEmbedded || _app_options.AppOptions.get("disableHistory")) { + return; + } + + this.pdfHistory.initialize({ + fingerprint: fingerprint, + resetHistory: viewOnLoad === ViewOnLoad.INITIAL, + updateUrl: _app_options.AppOptions.get("historyUpdateUrl") + }); + + if (this.pdfHistory.initialBookmark) { + this.initialBookmark = this.pdfHistory.initialBookmark; + this.initialRotation = this.pdfHistory.initialRotation; + } + + if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) { + this.initialBookmark = JSON.stringify(initialDest); + this.pdfHistory.push({ + explicitDest: initialDest, + pageNumber: null + }); + } + }, + _initializePermissions: function _initializePermissions(pdfDocument) { + var _this19 = this; + + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee17() { + var permissions; + return _regenerator["default"].wrap(function _callee17$(_context17) { + while (1) { + switch (_context17.prev = _context17.next) { + case 0: + _context17.next = 2; + return pdfDocument.getPermissions(); + + case 2: + permissions = _context17.sent; + + if (!(pdfDocument !== _this19.pdfDocument)) { + _context17.next = 5; + break; + } + + return _context17.abrupt("return"); + + case 5: + if (!(!permissions || !_app_options.AppOptions.get("enablePermissions"))) { + _context17.next = 7; + break; + } + + return _context17.abrupt("return"); + + case 7: + if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) { + _this19.appConfig.viewerContainer.classList.add(ENABLE_PERMISSIONS_CLASS); + } + + case 8: + case "end": + return _context17.stop(); + } + } + }, _callee17); + }))(); + }, + _initializeAnnotationStorageCallbacks: function _initializeAnnotationStorageCallbacks(pdfDocument) { + var _this20 = this; + + if (pdfDocument !== this.pdfDocument) { + return; + } + + var annotationStorage = pdfDocument.annotationStorage; + + annotationStorage.onSetModified = function () { + window.addEventListener("beforeunload", beforeUnload); + _this20._annotationStorageModified = true; + }; + + annotationStorage.onResetModified = function () { + window.removeEventListener("beforeunload", beforeUnload); + delete _this20._annotationStorageModified; + }; + }, + setInitialView: function setInitialView(storedHash) { + var _this21 = this; + + var _ref9 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + rotation = _ref9.rotation, + sidebarView = _ref9.sidebarView, + scrollMode = _ref9.scrollMode, + spreadMode = _ref9.spreadMode; + + var setRotation = function setRotation(angle) { + if ((0, _ui_utils.isValidRotation)(angle)) { + _this21.pdfViewer.pagesRotation = angle; + } + }; + + var setViewerModes = function setViewerModes(scroll, spread) { + if ((0, _ui_utils.isValidScrollMode)(scroll)) { + _this21.pdfViewer.scrollMode = scroll; + } + + if ((0, _ui_utils.isValidSpreadMode)(spread)) { + _this21.pdfViewer.spreadMode = spread; + } + }; + + this.isInitialViewSet = true; + this.pdfSidebar.setInitialView(sidebarView); + setViewerModes(scrollMode, spreadMode); + + if (this.initialBookmark) { + setRotation(this.initialRotation); + delete this.initialRotation; + this.pdfLinkService.setHash(this.initialBookmark); + this.initialBookmark = null; + } else if (storedHash) { + setRotation(rotation); + this.pdfLinkService.setHash(storedHash); + } + + this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); + this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber); + + if (!this.pdfViewer.currentScaleValue) { + this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + } + }, + _cleanup: function _cleanup() { + if (!this.pdfDocument) { + return; + } + + this.pdfViewer.cleanup(); + this.pdfThumbnailViewer.cleanup(); + this.pdfDocument.cleanup(this.pdfViewer.renderer === _ui_utils.RendererType.SVG); + }, + forceRendering: function forceRendering() { + this.pdfRenderingQueue.printing = !!this.printService; + this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible; + this.pdfRenderingQueue.renderHighestPriority(); + }, + beforePrint: function beforePrint() { + var _this22 = this; + + this.pdfScriptingManager.dispatchWillPrint(); + + if (this.printService) { + return; + } + + if (!this.supportsPrinting) { + this.l10n.get("printing_not_supported").then(function (msg) { + _this22._otherError(msg); + }); + return; + } + + if (!this.pdfViewer.pageViewsReady) { + this.l10n.get("printing_not_ready").then(function (msg) { + window.alert(msg); + }); + return; + } + + var pagesOverview = this.pdfViewer.getPagesOverview(); + var printContainer = this.appConfig.printContainer; + + var printResolution = _app_options.AppOptions.get("printResolution"); + + var optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise; + var printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this.l10n); + this.printService = printService; + this.forceRendering(); + printService.layout(); + this.externalServices.reportTelemetry({ + type: "print" + }); + }, + afterPrint: function afterPrint() { + this.pdfScriptingManager.dispatchDidPrint(); + + if (this.printService) { + this.printService.destroy(); + this.printService = null; + + if (this.pdfDocument) { + this.pdfDocument.annotationStorage.resetModified(); + } + } + + this.forceRendering(); + }, + rotatePages: function rotatePages(delta) { + this.pdfViewer.pagesRotation += delta; + }, + requestPresentationMode: function requestPresentationMode() { + if (!this.pdfPresentationMode) { + return; + } + + this.pdfPresentationMode.request(); + }, + triggerPrinting: function triggerPrinting() { + if (!this.supportsPrinting) { + return; + } + + window.print(); + }, + bindEvents: function bindEvents() { + var eventBus = this.eventBus, + _boundEvents = this._boundEvents; + _boundEvents.beforePrint = this.beforePrint.bind(this); + _boundEvents.afterPrint = this.afterPrint.bind(this); + + eventBus._on("resize", webViewerResize); + + eventBus._on("hashchange", webViewerHashchange); + + eventBus._on("beforeprint", _boundEvents.beforePrint); + + eventBus._on("afterprint", _boundEvents.afterPrint); + + eventBus._on("pagerendered", webViewerPageRendered); + + eventBus._on("updateviewarea", webViewerUpdateViewarea); + + eventBus._on("pagechanging", webViewerPageChanging); + + eventBus._on("scalechanging", webViewerScaleChanging); + + eventBus._on("rotationchanging", webViewerRotationChanging); + + eventBus._on("sidebarviewchanged", webViewerSidebarViewChanged); + + eventBus._on("pagemode", webViewerPageMode); + + eventBus._on("namedaction", webViewerNamedAction); + + eventBus._on("presentationmodechanged", webViewerPresentationModeChanged); + + eventBus._on("presentationmode", webViewerPresentationMode); + + eventBus._on("print", webViewerPrint); + + eventBus._on("download", webViewerDownload); + + eventBus._on("save", webViewerSave); + + eventBus._on("firstpage", webViewerFirstPage); + + eventBus._on("lastpage", webViewerLastPage); + + eventBus._on("nextpage", webViewerNextPage); + + eventBus._on("previouspage", webViewerPreviousPage); + + eventBus._on("zoomin", webViewerZoomIn); + + eventBus._on("zoomout", webViewerZoomOut); + + eventBus._on("zoomreset", webViewerZoomReset); + + eventBus._on("pagenumberchanged", webViewerPageNumberChanged); + + eventBus._on("scalechanged", webViewerScaleChanged); + + eventBus._on("rotatecw", webViewerRotateCw); + + eventBus._on("rotateccw", webViewerRotateCcw); + + eventBus._on("optionalcontentconfig", webViewerOptionalContentConfig); + + eventBus._on("switchscrollmode", webViewerSwitchScrollMode); + + eventBus._on("scrollmodechanged", webViewerScrollModeChanged); + + eventBus._on("switchspreadmode", webViewerSwitchSpreadMode); + + eventBus._on("spreadmodechanged", webViewerSpreadModeChanged); + + eventBus._on("documentproperties", webViewerDocumentProperties); + + eventBus._on("find", webViewerFind); + + eventBus._on("findfromurlhash", webViewerFindFromUrlHash); + + eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount); + + eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState); + + if (_app_options.AppOptions.get("pdfBug")) { + _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug; + + eventBus._on("pagerendered", _boundEvents.reportPageStatsPDFBug); + + eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug); + } + + eventBus._on("fileinputchange", webViewerFileInputChange); + + eventBus._on("openfile", webViewerOpenFile); + }, + bindWindowEvents: function bindWindowEvents() { + var eventBus = this.eventBus, + _boundEvents = this._boundEvents; + + _boundEvents.windowResize = function () { + eventBus.dispatch("resize", { + source: window + }); + }; + + _boundEvents.windowHashChange = function () { + eventBus.dispatch("hashchange", { + source: window, + hash: document.location.hash.substring(1) + }); + }; + + _boundEvents.windowBeforePrint = function () { + eventBus.dispatch("beforeprint", { + source: window + }); + }; + + _boundEvents.windowAfterPrint = function () { + eventBus.dispatch("afterprint", { + source: window + }); + }; + + _boundEvents.windowUpdateFromSandbox = function (event) { + eventBus.dispatch("updatefromsandbox", { + source: window, + detail: event.detail + }); + }; + + window.addEventListener("visibilitychange", webViewerVisibilityChange); + window.addEventListener("wheel", webViewerWheel, { + passive: false + }); + window.addEventListener("touchstart", webViewerTouchStart, { + passive: false + }); + window.addEventListener("click", webViewerClick); + window.addEventListener("keydown", webViewerKeyDown); + window.addEventListener("keyup", webViewerKeyUp); + window.addEventListener("resize", _boundEvents.windowResize); + window.addEventListener("hashchange", _boundEvents.windowHashChange); + window.addEventListener("beforeprint", _boundEvents.windowBeforePrint); + window.addEventListener("afterprint", _boundEvents.windowAfterPrint); + window.addEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); + }, + unbindEvents: function unbindEvents() { + var eventBus = this.eventBus, + _boundEvents = this._boundEvents; + + eventBus._off("resize", webViewerResize); + + eventBus._off("hashchange", webViewerHashchange); + + eventBus._off("beforeprint", _boundEvents.beforePrint); + + eventBus._off("afterprint", _boundEvents.afterPrint); + + eventBus._off("pagerendered", webViewerPageRendered); + + eventBus._off("updateviewarea", webViewerUpdateViewarea); + + eventBus._off("pagechanging", webViewerPageChanging); + + eventBus._off("scalechanging", webViewerScaleChanging); + + eventBus._off("rotationchanging", webViewerRotationChanging); + + eventBus._off("sidebarviewchanged", webViewerSidebarViewChanged); + + eventBus._off("pagemode", webViewerPageMode); + + eventBus._off("namedaction", webViewerNamedAction); + + eventBus._off("presentationmodechanged", webViewerPresentationModeChanged); + + eventBus._off("presentationmode", webViewerPresentationMode); + + eventBus._off("print", webViewerPrint); + + eventBus._off("download", webViewerDownload); + + eventBus._off("save", webViewerSave); + + eventBus._off("firstpage", webViewerFirstPage); + + eventBus._off("lastpage", webViewerLastPage); + + eventBus._off("nextpage", webViewerNextPage); + + eventBus._off("previouspage", webViewerPreviousPage); + + eventBus._off("zoomin", webViewerZoomIn); + + eventBus._off("zoomout", webViewerZoomOut); + + eventBus._off("zoomreset", webViewerZoomReset); + + eventBus._off("pagenumberchanged", webViewerPageNumberChanged); + + eventBus._off("scalechanged", webViewerScaleChanged); + + eventBus._off("rotatecw", webViewerRotateCw); + + eventBus._off("rotateccw", webViewerRotateCcw); + + eventBus._off("optionalcontentconfig", webViewerOptionalContentConfig); + + eventBus._off("switchscrollmode", webViewerSwitchScrollMode); + + eventBus._off("scrollmodechanged", webViewerScrollModeChanged); + + eventBus._off("switchspreadmode", webViewerSwitchSpreadMode); + + eventBus._off("spreadmodechanged", webViewerSpreadModeChanged); + + eventBus._off("documentproperties", webViewerDocumentProperties); + + eventBus._off("find", webViewerFind); + + eventBus._off("findfromurlhash", webViewerFindFromUrlHash); + + eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount); + + eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState); + + if (_boundEvents.reportPageStatsPDFBug) { + eventBus._off("pagerendered", _boundEvents.reportPageStatsPDFBug); + + eventBus._off("pagechanging", _boundEvents.reportPageStatsPDFBug); + + _boundEvents.reportPageStatsPDFBug = null; + } + + eventBus._off("fileinputchange", webViewerFileInputChange); + + eventBus._off("openfile", webViewerOpenFile); + + _boundEvents.beforePrint = null; + _boundEvents.afterPrint = null; + }, + unbindWindowEvents: function unbindWindowEvents() { + var _boundEvents = this._boundEvents; + window.removeEventListener("visibilitychange", webViewerVisibilityChange); + window.removeEventListener("wheel", webViewerWheel, { + passive: false + }); + window.removeEventListener("touchstart", webViewerTouchStart, { + passive: false + }); + window.removeEventListener("click", webViewerClick); + window.removeEventListener("keydown", webViewerKeyDown); + window.removeEventListener("keyup", webViewerKeyUp); + window.removeEventListener("resize", _boundEvents.windowResize); + window.removeEventListener("hashchange", _boundEvents.windowHashChange); + window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint); + window.removeEventListener("afterprint", _boundEvents.windowAfterPrint); + window.removeEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); + _boundEvents.windowResize = null; + _boundEvents.windowHashChange = null; + _boundEvents.windowBeforePrint = null; + _boundEvents.windowAfterPrint = null; + _boundEvents.windowUpdateFromSandbox = null; + }, + accumulateWheelTicks: function accumulateWheelTicks(ticks) { + if (this._wheelUnusedTicks > 0 && ticks < 0 || this._wheelUnusedTicks < 0 && ticks > 0) { + this._wheelUnusedTicks = 0; + } + + this._wheelUnusedTicks += ticks; + var wholeTicks = Math.sign(this._wheelUnusedTicks) * Math.floor(Math.abs(this._wheelUnusedTicks)); + this._wheelUnusedTicks -= wholeTicks; + return wholeTicks; + }, + _unblockDocumentLoadEvent: function _unblockDocumentLoadEvent() { + if (document.blockUnblockOnload) { + document.blockUnblockOnload(false); + } + + this._unblockDocumentLoadEvent = function () { + }; + }, + + get scriptingReady() { + return this.pdfScriptingManager.ready; + } + + }; + exports.PDFViewerApplication = PDFViewerApplication; + var validateFileURL; + { + var HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"]; + + validateFileURL = function validateFileURL(file) { + if (file === undefined) { + return; + } + + try { + var viewerOrigin = new URL(window.location.href).origin || "null"; + + if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) { + return; + } + + var _URL = new URL(file, window.location.href), + origin = _URL.origin, + protocol = _URL.protocol; + + if (origin !== viewerOrigin && protocol !== "blob:") { + throw new Error("file origin does not match viewer's"); + } + } catch (ex) { + PDFViewerApplication.l10n.get("loading_error").then(function (msg) { + PDFViewerApplication._documentError(msg, { + message: ex === null || ex === void 0 ? void 0 : ex.message + }); + }); + throw ex; + } + }; + } + + function loadFakeWorker() { + return _loadFakeWorker.apply(this, arguments); + } + + function _loadFakeWorker() { + _loadFakeWorker = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee18() { + return _regenerator["default"].wrap(function _callee18$(_context18) { + while (1) { + switch (_context18.prev = _context18.next) { + case 0: + if (!_pdfjsLib.GlobalWorkerOptions.workerSrc) { + _pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get("workerSrc"); + } + + return _context18.abrupt("return", (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.getWorkerSrc())); + + case 2: + case "end": + return _context18.stop(); + } + } + }, _callee18); + })); + return _loadFakeWorker.apply(this, arguments); + } + + function loadAndEnablePDFBug(enabledTabs) { + var appConfig = PDFViewerApplication.appConfig; + return (0, _pdfjsLib.loadScript)(appConfig.debuggerScriptPath).then(function () { + PDFBug.enable(enabledTabs); + PDFBug.init({ + OPS: _pdfjsLib.OPS + }, appConfig.mainContainer); + }); + } + + function reportPageStatsPDFBug(_ref10) { + var _pageView$pdfPage; + + var pageNumber = _ref10.pageNumber; + + if (typeof Stats === "undefined" || !Stats.enabled) { + return; + } + + var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + var pageStats = pageView === null || pageView === void 0 ? void 0 : (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.stats; + + if (!pageStats) { + return; + } + + Stats.add(pageNumber, pageStats); + } + + function webViewerInitialized() { + var appConfig = PDFViewerApplication.appConfig; + var file; + var queryString = document.location.search.substring(1); + var params = (0, _ui_utils.parseQueryString)(queryString); + file = "file" in params ? params.file : _app_options.AppOptions.get("defaultUrl"); + validateFileURL(file); + var fileInput = document.createElement("input"); + fileInput.id = appConfig.openFileInputName; + fileInput.className = "fileInput"; + fileInput.setAttribute("type", "file"); + fileInput.oncontextmenu = _ui_utils.noContextMenuHandler; + document.body.appendChild(fileInput); + + if (!window.File || !window.FileReader || !window.FileList || !window.Blob) { + appConfig.toolbar.openFile.hidden = true; + appConfig.secondaryToolbar.openFileButton.hidden = true; + } else { + fileInput.value = null; + } + + fileInput.addEventListener("change", function (evt) { + var files = evt.target.files; + + if (!files || files.length === 0) { + return; + } + + PDFViewerApplication.eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.target + }); + }); + appConfig.mainContainer.addEventListener("dragover", function (evt) { + evt.preventDefault(); + evt.dataTransfer.dropEffect = "move"; + }); + appConfig.mainContainer.addEventListener("drop", function (evt) { + evt.preventDefault(); + var files = evt.dataTransfer.files; + + if (!files || files.length === 0) { + return; + } + + PDFViewerApplication.eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.dataTransfer + }); + }); + + if (!PDFViewerApplication.supportsDocumentFonts) { + _app_options.AppOptions.set("disableFontFace", true); + + PDFViewerApplication.l10n.get("web_fonts_disabled").then(function (msg) { + console.warn(msg); + }); + } + + if (!PDFViewerApplication.supportsPrinting) { + appConfig.toolbar.print.classList.add("hidden"); + appConfig.secondaryToolbar.printButton.classList.add("hidden"); + } + + if (!PDFViewerApplication.supportsFullscreen) { + appConfig.toolbar.presentationModeButton.classList.add("hidden"); + appConfig.secondaryToolbar.presentationModeButton.classList.add("hidden"); + } + + if (PDFViewerApplication.supportsIntegratedFind) { + appConfig.toolbar.viewFind.classList.add("hidden"); + } + + appConfig.mainContainer.addEventListener("transitionend", function (evt) { + if (evt.target === this) { + PDFViewerApplication.eventBus.dispatch("resize", { + source: this + }); + } + }, true); + + try { + webViewerOpenFileViaURL(file); + } catch (reason) { + PDFViewerApplication.l10n.get("loading_error").then(function (msg) { + PDFViewerApplication._documentError(msg, reason); + }); + } + } + + function webViewerOpenFileViaURL(file) { + if (file) { + PDFViewerApplication.open(file); + } + } + + function webViewerResetPermissions() { + var appConfig = PDFViewerApplication.appConfig; + + if (!appConfig) { + return; + } + + appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS); + } + + function webViewerPageRendered(_ref11) { + var pageNumber = _ref11.pageNumber, + timestamp = _ref11.timestamp, + error = _ref11.error; + + if (pageNumber === PDFViewerApplication.page) { + PDFViewerApplication.toolbar.updateLoadingIndicatorState(false); + } + + if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { + var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + var thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageNumber - 1); + + if (pageView && thumbnailView) { + thumbnailView.setImage(pageView); + } + } + + if (error) { + PDFViewerApplication.l10n.get("rendering_error").then(function (msg) { + PDFViewerApplication._otherError(msg, error); + }); + } + + PDFViewerApplication.externalServices.reportTelemetry({ + type: "pageInfo", + timestamp: timestamp + }); + PDFViewerApplication.pdfDocument.getStats().then(function (stats) { + PDFViewerApplication.externalServices.reportTelemetry({ + type: "documentStats", + stats: stats + }); + }); + } + + function webViewerPageMode(_ref12) { + var mode = _ref12.mode; + var view; + + switch (mode) { + case "thumbs": + view = _ui_utils.SidebarView.THUMBS; + break; + + case "bookmarks": + case "outline": + view = _ui_utils.SidebarView.OUTLINE; + break; + + case "attachments": + view = _ui_utils.SidebarView.ATTACHMENTS; + break; + + case "layers": + view = _ui_utils.SidebarView.LAYERS; + break; + + case "none": + view = _ui_utils.SidebarView.NONE; + break; + + default: + console.error('Invalid "pagemode" hash parameter: ' + mode); + return; + } + + PDFViewerApplication.pdfSidebar.switchView(view, true); + } + + function webViewerNamedAction(evt) { + switch (evt.action) { + case "GoToPage": + PDFViewerApplication.appConfig.toolbar.pageNumber.select(); + break; + + case "Find": + if (!PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.findBar.toggle(); + } + + break; + + case "Print": + PDFViewerApplication.triggerPrinting(); + break; + + case "SaveAs": + webViewerSave(); + break; + } + } + + function webViewerPresentationModeChanged(evt) { + PDFViewerApplication.pdfViewer.presentationModeState = evt.state; + } + + function webViewerSidebarViewChanged(evt) { + PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; + var store = PDFViewerApplication.store; + + if (store && PDFViewerApplication.isInitialViewSet) { + store.set("sidebarView", evt.view)["catch"](function () { + }); + } + } + + function webViewerUpdateViewarea(evt) { + var location = evt.location, + store = PDFViewerApplication.store; + + if (store && PDFViewerApplication.isInitialViewSet) { + store.setMultiple({ + page: location.pageNumber, + zoom: location.scale, + scrollLeft: location.left, + scrollTop: location.top, + rotation: location.rotation + })["catch"](function () { + }); + } + + var href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams); + PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href; + PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href; + var currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1); + var loading = (currentPage === null || currentPage === void 0 ? void 0 : currentPage.renderingState) !== _pdf_rendering_queue.RenderingStates.FINISHED; + PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading); + } + + function webViewerScrollModeChanged(evt) { + var store = PDFViewerApplication.store; + + if (store && PDFViewerApplication.isInitialViewSet) { + store.set("scrollMode", evt.mode)["catch"](function () { + }); + } + } + + function webViewerSpreadModeChanged(evt) { + var store = PDFViewerApplication.store; + + if (store && PDFViewerApplication.isInitialViewSet) { + store.set("spreadMode", evt.mode)["catch"](function () { + }); + } + } + + function webViewerResize() { + var pdfDocument = PDFViewerApplication.pdfDocument, + pdfViewer = PDFViewerApplication.pdfViewer; + + if (!pdfDocument) { + return; + } + + var currentScaleValue = pdfViewer.currentScaleValue; + + if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") { + pdfViewer.currentScaleValue = currentScaleValue; + } + + pdfViewer.update(); + } + + function webViewerHashchange(evt) { + var hash = evt.hash; + + if (!hash) { + return; + } + + if (!PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.initialBookmark = hash; + } else if (!PDFViewerApplication.pdfHistory.popStateInProgress) { + PDFViewerApplication.pdfLinkService.setHash(hash); + } + } + + var webViewerFileInputChange, webViewerOpenFile; + { + webViewerFileInputChange = function webViewerFileInputChange(evt) { + var _PDFViewerApplication; + + if ((_PDFViewerApplication = PDFViewerApplication.pdfViewer) !== null && _PDFViewerApplication !== void 0 && _PDFViewerApplication.isInPresentationMode) { + return; + } + + var file = evt.fileInput.files[0]; + + if (!_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { + var url = URL.createObjectURL(file); + + if (file.name) { + url = { + url: url, + originalUrl: file.name + }; + } + + PDFViewerApplication.open(url); + } else { + PDFViewerApplication.setTitleUsingUrl(file.name); + var fileReader = new FileReader(); + + fileReader.onload = function webViewerChangeFileReaderOnload(event) { + var buffer = event.target.result; + PDFViewerApplication.open(new Uint8Array(buffer)); + }; + + fileReader.readAsArrayBuffer(file); + } + + var appConfig = PDFViewerApplication.appConfig; + appConfig.toolbar.viewBookmark.hidden = true; + appConfig.secondaryToolbar.viewBookmarkButton.hidden = true; + appConfig.toolbar.download.hidden = true; + appConfig.secondaryToolbar.downloadButton.hidden = true; + }; + + webViewerOpenFile = function webViewerOpenFile(evt) { + var openFileInputName = PDFViewerApplication.appConfig.openFileInputName; + document.getElementById(openFileInputName).click(); + }; + } + + function webViewerPresentationMode() { + PDFViewerApplication.requestPresentationMode(); + } + + function webViewerPrint() { + PDFViewerApplication.triggerPrinting(); + } + + function webViewerDownload() { + PDFViewerApplication.downloadOrSave({ + sourceEventType: "download" + }); + } + + function webViewerSave() { + PDFViewerApplication.downloadOrSave({ + sourceEventType: "save" + }); + } + + function webViewerFirstPage() { + if (PDFViewerApplication.pdfDocument) { + PDFViewerApplication.page = 1; + } + } + + function webViewerLastPage() { + if (PDFViewerApplication.pdfDocument) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + } + } + + function webViewerNextPage() { + PDFViewerApplication.pdfViewer.nextPage(); + } + + function webViewerPreviousPage() { + PDFViewerApplication.pdfViewer.previousPage(); + } + + function webViewerZoomIn() { + PDFViewerApplication.zoomIn(); + } + + function webViewerZoomOut() { + PDFViewerApplication.zoomOut(); + } + + function webViewerZoomReset() { + PDFViewerApplication.zoomReset(); + } + + function webViewerPageNumberChanged(evt) { + var pdfViewer = PDFViewerApplication.pdfViewer; + + if (evt.value !== "") { + PDFViewerApplication.pdfLinkService.goToPage(evt.value); + } + + if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) { + PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + } + } + + function webViewerScaleChanged(evt) { + PDFViewerApplication.pdfViewer.currentScaleValue = evt.value; + } + + function webViewerRotateCw() { + PDFViewerApplication.rotatePages(90); + } + + function webViewerRotateCcw() { + PDFViewerApplication.rotatePages(-90); + } + + function webViewerOptionalContentConfig(evt) { + PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise; + } + + function webViewerSwitchScrollMode(evt) { + PDFViewerApplication.pdfViewer.scrollMode = evt.mode; + } + + function webViewerSwitchSpreadMode(evt) { + PDFViewerApplication.pdfViewer.spreadMode = evt.mode; + } + + function webViewerDocumentProperties() { + PDFViewerApplication.pdfDocumentProperties.open(); + } + + function webViewerFind(evt) { + PDFViewerApplication.findController.executeCommand("find" + evt.type, { + query: evt.query, + phraseSearch: evt.phraseSearch, + caseSensitive: evt.caseSensitive, + entireWord: evt.entireWord, + highlightAll: evt.highlightAll, + findPrevious: evt.findPrevious + }); + } + + function webViewerFindFromUrlHash(evt) { + PDFViewerApplication.findController.executeCommand("find", { + query: evt.query, + phraseSearch: evt.phraseSearch, + caseSensitive: false, + entireWord: false, + highlightAll: true, + findPrevious: false + }); + } + + function webViewerUpdateFindMatchesCount(_ref13) { + var matchesCount = _ref13.matchesCount; + + if (PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount); + } else { + PDFViewerApplication.findBar.updateResultsCount(matchesCount); + } + } + + function webViewerUpdateFindControlState(_ref14) { + var state = _ref14.state, + previous = _ref14.previous, + matchesCount = _ref14.matchesCount, + rawQuery = _ref14.rawQuery; + + if (PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.externalServices.updateFindControlState({ + result: state, + findPrevious: previous, + matchesCount: matchesCount, + rawQuery: rawQuery + }); + } else { + PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount); + } + } + + function webViewerScaleChanging(evt) { + PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale); + PDFViewerApplication.pdfViewer.update(); + } + + function webViewerRotationChanging(evt) { + PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation; + PDFViewerApplication.forceRendering(); + PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber; + } + + function webViewerPageChanging(_ref15) { + var pageNumber = _ref15.pageNumber, + pageLabel = _ref15.pageLabel; + PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel); + PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber); + + if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { + PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber); + } + } + + function webViewerVisibilityChange(evt) { + if (document.visibilityState === "visible") { + setZoomDisabledTimeout(); + } + } + + var zoomDisabledTimeout = null; + + function setZoomDisabledTimeout() { + if (zoomDisabledTimeout) { + clearTimeout(zoomDisabledTimeout); + } + + zoomDisabledTimeout = setTimeout(function () { + zoomDisabledTimeout = null; + }, WHEEL_ZOOM_DISABLED_TIMEOUT); + } + + function webViewerWheel(evt) { + var pdfViewer = PDFViewerApplication.pdfViewer, + supportedMouseWheelZoomModifierKeys = PDFViewerApplication.supportedMouseWheelZoomModifierKeys; + + if (pdfViewer.isInPresentationMode) { + return; + } + + if (evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) { + evt.preventDefault(); + + if (zoomDisabledTimeout || document.visibilityState === "hidden") { + return; + } + + var previousScale = pdfViewer.currentScale; + var delta = (0, _ui_utils.normalizeWheelEventDirection)(evt); + var ticks = 0; + + if (evt.deltaMode === WheelEvent.DOM_DELTA_LINE || evt.deltaMode === WheelEvent.DOM_DELTA_PAGE) { + if (Math.abs(delta) >= 1) { + ticks = Math.sign(delta); + } else { + ticks = PDFViewerApplication.accumulateWheelTicks(delta); + } + } else { + var PIXELS_PER_LINE_SCALE = 30; + ticks = PDFViewerApplication.accumulateWheelTicks(delta / PIXELS_PER_LINE_SCALE); + } + + if (ticks < 0) { + PDFViewerApplication.zoomOut(-ticks); + } else if (ticks > 0) { + PDFViewerApplication.zoomIn(ticks); + } + + var currentScale = pdfViewer.currentScale; + + if (previousScale !== currentScale) { + var scaleCorrectionFactor = currentScale / previousScale - 1; + var rect = pdfViewer.container.getBoundingClientRect(); + var dx = evt.clientX - rect.left; + var dy = evt.clientY - rect.top; + pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor; + pdfViewer.container.scrollTop += dy * scaleCorrectionFactor; + } + } else { + setZoomDisabledTimeout(); + } + } + + function webViewerTouchStart(evt) { + if (evt.touches.length > 1) { + evt.preventDefault(); + } + } + + function webViewerClick(evt) { + if (PDFViewerApplication.triggerDelayedFallback && PDFViewerApplication.pdfViewer.containsElement(evt.target)) { + PDFViewerApplication.triggerDelayedFallback(); + } + + if (!PDFViewerApplication.secondaryToolbar.isOpen) { + return; + } + + var appConfig = PDFViewerApplication.appConfig; + + if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) { + PDFViewerApplication.secondaryToolbar.close(); + } + } + + function webViewerKeyUp(evt) { + if (evt.keyCode === 9) { + if (PDFViewerApplication.triggerDelayedFallback) { + PDFViewerApplication.triggerDelayedFallback(); + } + } + } + + function webViewerKeyDown(evt) { + if (PDFViewerApplication.overlayManager.active) { + return; + } + + var handled = false, + ensureViewerFocused = false; + var cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0); + var pdfViewer = PDFViewerApplication.pdfViewer; + var isViewerInPresentationMode = pdfViewer === null || pdfViewer === void 0 ? void 0 : pdfViewer.isInPresentationMode; + + if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { + switch (evt.keyCode) { + case 70: + if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) { + PDFViewerApplication.findBar.open(); + handled = true; + } + + break; + + case 71: + if (!PDFViewerApplication.supportsIntegratedFind) { + var findState = PDFViewerApplication.findController.state; + + if (findState) { + PDFViewerApplication.findController.executeCommand("findagain", { + query: findState.query, + phraseSearch: findState.phraseSearch, + caseSensitive: findState.caseSensitive, + entireWord: findState.entireWord, + highlightAll: findState.highlightAll, + findPrevious: cmd === 5 || cmd === 12 + }); + } + + handled = true; + } + + break; + + case 61: + case 107: + case 187: + case 171: + if (!isViewerInPresentationMode) { + PDFViewerApplication.zoomIn(); + } + + handled = true; + break; + + case 173: + case 109: + case 189: + if (!isViewerInPresentationMode) { + PDFViewerApplication.zoomOut(); + } + + handled = true; + break; + + case 48: + case 96: + if (!isViewerInPresentationMode) { + setTimeout(function () { + PDFViewerApplication.zoomReset(); + }); + handled = false; + } + + break; + + case 38: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + + break; + + case 40: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + + break; + } + } + + var eventBus = PDFViewerApplication.eventBus; + + if (cmd === 1 || cmd === 8) { + switch (evt.keyCode) { + case 83: + eventBus.dispatch("download", { + source: window + }); + handled = true; + break; + + case 79: { + eventBus.dispatch("openfile", { + source: window + }); + handled = true; + } + break; + } + } + + if (cmd === 3 || cmd === 10) { + switch (evt.keyCode) { + case 80: + PDFViewerApplication.requestPresentationMode(); + handled = true; + break; + + case 71: + PDFViewerApplication.appConfig.toolbar.pageNumber.select(); + handled = true; + break; + } + } + + if (handled) { + if (ensureViewerFocused && !isViewerInPresentationMode) { + pdfViewer.focus(); + } + + evt.preventDefault(); + return; + } + + var curElement = (0, _ui_utils.getActiveOrFocusedElement)(); + var curElementTagName = curElement === null || curElement === void 0 ? void 0 : curElement.tagName.toUpperCase(); + + if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElement !== null && curElement !== void 0 && curElement.isContentEditable) { + if (evt.keyCode !== 27) { + return; + } + } + + if (cmd === 0) { + var turnPage = 0, + turnOnlyIfPageFit = false; + + switch (evt.keyCode) { + case 38: + case 33: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + + turnPage = -1; + break; + + case 8: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + + turnPage = -1; + break; + + case 37: + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + + case 75: + case 80: + turnPage = -1; + break; + + case 27: + if (PDFViewerApplication.secondaryToolbar.isOpen) { + PDFViewerApplication.secondaryToolbar.close(); + handled = true; + } + + if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) { + PDFViewerApplication.findBar.close(); + handled = true; + } + + break; + + case 40: + case 34: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + + turnPage = 1; + break; + + case 13: + case 32: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + + turnPage = 1; + break; + + case 39: + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + + case 74: + case 78: + turnPage = 1; + break; + + case 36: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + + break; + + case 35: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + + break; + + case 83: + PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT); + break; + + case 72: + PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND); + break; + + case 82: + PDFViewerApplication.rotatePages(90); + break; + + case 115: + PDFViewerApplication.pdfSidebar.toggle(); + break; + } + + if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) { + if (turnPage > 0) { + pdfViewer.nextPage(); + } else { + pdfViewer.previousPage(); + } + + handled = true; + } + } + + if (cmd === 4) { + switch (evt.keyCode) { + case 13: + case 32: + if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") { + break; + } + + if (PDFViewerApplication.page > 1) { + PDFViewerApplication.page--; + } + + handled = true; + break; + + case 82: + PDFViewerApplication.rotatePages(-90); + break; + } + } + + if (!handled && !isViewerInPresentationMode) { + if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") { + ensureViewerFocused = true; + } + } + + if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } + + if (handled) { + evt.preventDefault(); + } + } + + function beforeUnload(evt) { + evt.preventDefault(); + evt.returnValue = ""; + return false; + } + + var PDFPrintServiceFactory = { + instance: { + supportsPrinting: false, + createPrintService: function createPrintService() { + throw new Error("Not implemented: createPrintService"); + } + } + }; + exports.PDFPrintServiceFactory = PDFPrintServiceFactory; + + /***/ + }), + /* 4 */ + /***/ ((module, __unused_webpack_exports, __webpack_require__) => { + + + module.exports = __webpack_require__(5); + + /***/ + }), + /* 5 */ + /***/ ((module, __unused_webpack_exports, __webpack_require__) => { + + /* module decorator */ + module = __webpack_require__.nmd(module); + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _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 = {}; + + 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 = Gp.constructor = GeneratorFunctionPrototype; + 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); + + 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"); + + Gp[iteratorSymbol] = function () { + return this; + }; + + 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) { + Function("r", "regeneratorRuntime = r")(runtime); + } + + /***/ + }), + /* 6 */ + /***/ ((__unused_webpack_module, exports) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.apiPageLayoutToSpreadMode = apiPageLayoutToSpreadMode; + exports.apiPageModeToSidebarView = apiPageModeToSidebarView; + exports.approximateFraction = approximateFraction; + exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements; + exports.binarySearchFirstItem = binarySearchFirstItem; + exports.getActiveOrFocusedElement = getActiveOrFocusedElement; + exports.getOutputScale = getOutputScale; + exports.getPageSizeInches = getPageSizeInches; + exports.getVisibleElements = getVisibleElements; + exports.isPortraitOrientation = isPortraitOrientation; + exports.isValidRotation = isValidRotation; + exports.isValidScrollMode = isValidScrollMode; + exports.isValidSpreadMode = isValidSpreadMode; + exports.moveToEndOfArray = moveToEndOfArray; + exports.noContextMenuHandler = noContextMenuHandler; + exports.normalizeWheelEventDelta = normalizeWheelEventDelta; + exports.normalizeWheelEventDirection = normalizeWheelEventDirection; + exports.parseQueryString = parseQueryString; + exports.roundToDivide = roundToDivide; + exports.scrollIntoView = scrollIntoView; + exports.waitOnEventOrTimeout = waitOnEventOrTimeout; + exports.watchScroll = watchScroll; + exports.WaitOnType = exports.VERTICAL_PADDING = exports.UNKNOWN_SCALE = exports.TextLayerMode = exports.SpreadMode = exports.SidebarView = exports.ScrollMode = exports.SCROLLBAR_PADDING = exports.RendererType = exports.ProgressBar = exports.PresentationModeState = exports.MIN_SCALE = exports.MAX_SCALE = exports.MAX_AUTO_SCALE = exports.EventBus = exports.DEFAULT_SCALE_VALUE = exports.DEFAULT_SCALE = exports.CSS_UNITS = exports.AutoPrintRegExp = exports.animationStarted = void 0; + + 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); + return Constructor; + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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 CSS_UNITS = 96.0 / 72.0; + exports.CSS_UNITS = CSS_UNITS; + var DEFAULT_SCALE_VALUE = "auto"; + exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE; + var DEFAULT_SCALE = 1.0; + exports.DEFAULT_SCALE = DEFAULT_SCALE; + var MIN_SCALE = 0.1; + exports.MIN_SCALE = MIN_SCALE; + var MAX_SCALE = 10.0; + exports.MAX_SCALE = MAX_SCALE; + var UNKNOWN_SCALE = 0; + exports.UNKNOWN_SCALE = UNKNOWN_SCALE; + var MAX_AUTO_SCALE = 1.25; + exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE; + var SCROLLBAR_PADDING = 40; + exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING; + var VERTICAL_PADDING = 5; + exports.VERTICAL_PADDING = VERTICAL_PADDING; + var LOADINGBAR_END_OFFSET_VAR = "--loadingBar-end-offset"; + var PresentationModeState = { + UNKNOWN: 0, + NORMAL: 1, + CHANGING: 2, + FULLSCREEN: 3 + }; + exports.PresentationModeState = PresentationModeState; + var SidebarView = { + UNKNOWN: -1, + NONE: 0, + THUMBS: 1, + OUTLINE: 2, + ATTACHMENTS: 3, + LAYERS: 4 + }; + exports.SidebarView = SidebarView; + var RendererType = { + CANVAS: "canvas", + SVG: "svg" + }; + exports.RendererType = RendererType; + var TextLayerMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_ENHANCE: 2 + }; + exports.TextLayerMode = TextLayerMode; + var ScrollMode = { + UNKNOWN: -1, + VERTICAL: 0, + HORIZONTAL: 1, + WRAPPED: 2 + }; + exports.ScrollMode = ScrollMode; + var SpreadMode = { + UNKNOWN: -1, + NONE: 0, + ODD: 1, + EVEN: 2 + }; + exports.SpreadMode = SpreadMode; + var AutoPrintRegExp = /\bprint\s*\(/; + exports.AutoPrintRegExp = AutoPrintRegExp; + + function getOutputScale(ctx) { + var devicePixelRatio = window.devicePixelRatio || 1; + var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; + var pixelRatio = devicePixelRatio / backingStoreRatio; + return { + sx: pixelRatio, + sy: pixelRatio, + scaled: pixelRatio !== 1 + }; + } + + function scrollIntoView(element, spot) { + var skipOverflowHiddenElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var parent = element.offsetParent; + + if (!parent) { + console.error("offsetParent is not set -- cannot scroll"); + return; + } + + var offsetY = element.offsetTop + element.clientTop; + var offsetX = element.offsetLeft + element.clientLeft; + + while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || skipOverflowHiddenElements && getComputedStyle(parent).overflow === "hidden") { + if (parent.dataset._scaleY) { + offsetY /= parent.dataset._scaleY; + offsetX /= parent.dataset._scaleX; + } + + offsetY += parent.offsetTop; + offsetX += parent.offsetLeft; + parent = parent.offsetParent; + + if (!parent) { + return; + } + } + + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + + if (spot.left !== undefined) { + offsetX += spot.left; + parent.scrollLeft = offsetX; + } + } + + parent.scrollTop = offsetY; + } + + function watchScroll(viewAreaElement, callback) { + var debounceScroll = function debounceScroll(evt) { + if (rAF) { + return; + } + + rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { + rAF = null; + var currentX = viewAreaElement.scrollLeft; + var lastX = state.lastX; + + if (currentX !== lastX) { + state.right = currentX > lastX; + } + + state.lastX = currentX; + var currentY = viewAreaElement.scrollTop; + var lastY = state.lastY; + + if (currentY !== lastY) { + state.down = currentY > lastY; + } + + state.lastY = currentY; + callback(state); + }); + }; + + var state = { + right: true, + down: true, + lastX: viewAreaElement.scrollLeft, + lastY: viewAreaElement.scrollTop, + _eventHandler: debounceScroll + }; + var rAF = null; + viewAreaElement.addEventListener("scroll", debounceScroll, true); + return state; + } + + function parseQueryString(query) { + var parts = query.split("&"); + var params = Object.create(null); + + for (var i = 0, ii = parts.length; i < ii; ++i) { + var param = parts[i].split("="); + var key = param[0].toLowerCase(); + var value = param.length > 1 ? param[1] : null; + params[decodeURIComponent(key)] = decodeURIComponent(value); + } + + return params; + } + + function binarySearchFirstItem(items, condition) { + var minIndex = 0; + var maxIndex = items.length - 1; + + if (maxIndex < 0 || !condition(items[maxIndex])) { + return items.length; + } + + if (condition(items[minIndex])) { + return minIndex; + } + + while (minIndex < maxIndex) { + var currentIndex = minIndex + maxIndex >> 1; + var currentItem = items[currentIndex]; + + if (condition(currentItem)) { + maxIndex = currentIndex; + } else { + minIndex = currentIndex + 1; + } + } + + return minIndex; + } + + function approximateFraction(x) { + if (Math.floor(x) === x) { + return [x, 1]; + } + + var xinv = 1 / x; + var limit = 8; + + if (xinv > limit) { + return [1, limit]; + } else if (Math.floor(xinv) === xinv) { + return [1, xinv]; + } + + var x_ = x > 1 ? xinv : x; + var a = 0, + b = 1, + c = 1, + d = 1; + + while (true) { + var p = a + c, + q = b + d; + + if (q > limit) { + break; + } + + if (x_ <= p / q) { + c = p; + d = q; + } else { + a = p; + b = q; + } + } + + var result; + + if (x_ - a / b < c / d - x_) { + result = x_ === x ? [a, b] : [b, a]; + } else { + result = x_ === x ? [c, d] : [d, c]; + } + + return result; + } + + function roundToDivide(x, div) { + var r = x % div; + return r === 0 ? x : Math.round(x - r + div); + } + + function getPageSizeInches(_ref) { + var view = _ref.view, + userUnit = _ref.userUnit, + rotate = _ref.rotate; + + var _view = _slicedToArray(view, 4), + x1 = _view[0], + y1 = _view[1], + x2 = _view[2], + y2 = _view[3]; + + var changeOrientation = rotate % 180 !== 0; + var width = (x2 - x1) / 72 * userUnit; + var height = (y2 - y1) / 72 * userUnit; + return { + width: changeOrientation ? height : width, + height: changeOrientation ? width : height + }; + } + + function backtrackBeforeAllVisibleElements(index, views, top) { + if (index < 2) { + return index; + } + + var elt = views[index].div; + var pageTop = elt.offsetTop + elt.clientTop; + + if (pageTop >= top) { + elt = views[index - 1].div; + pageTop = elt.offsetTop + elt.clientTop; + } + + for (var i = index - 2; i >= 0; --i) { + elt = views[i].div; + + if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) { + break; + } + + index = i; + } + + return index; + } + + function getVisibleElements(_ref2) { + var scrollEl = _ref2.scrollEl, + views = _ref2.views, + _ref2$sortByVisibilit = _ref2.sortByVisibility, + sortByVisibility = _ref2$sortByVisibilit === void 0 ? false : _ref2$sortByVisibilit, + _ref2$horizontal = _ref2.horizontal, + horizontal = _ref2$horizontal === void 0 ? false : _ref2$horizontal, + _ref2$rtl = _ref2.rtl, + rtl = _ref2$rtl === void 0 ? false : _ref2$rtl; + var top = scrollEl.scrollTop, + bottom = top + scrollEl.clientHeight; + var left = scrollEl.scrollLeft, + right = left + scrollEl.clientWidth; + + function isElementBottomAfterViewTop(view) { + var element = view.div; + var elementBottom = element.offsetTop + element.clientTop + element.clientHeight; + return elementBottom > top; + } + + function isElementNextAfterViewHorizontally(view) { + var element = view.div; + var elementLeft = element.offsetLeft + element.clientLeft; + var elementRight = elementLeft + element.clientWidth; + return rtl ? elementLeft < right : elementRight > left; + } + + var visible = [], + numViews = views.length; + var firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop); + + if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) { + firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top); + } + + var lastEdge = horizontal ? right : -1; + + for (var i = firstVisibleElementInd; i < numViews; i++) { + var view = views[i], + element = view.div; + var currentWidth = element.offsetLeft + element.clientLeft; + var currentHeight = element.offsetTop + element.clientTop; + var viewWidth = element.clientWidth, + viewHeight = element.clientHeight; + var viewRight = currentWidth + viewWidth; + var viewBottom = currentHeight + viewHeight; + + if (lastEdge === -1) { + if (viewBottom >= bottom) { + lastEdge = viewBottom; + } + } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) { + break; + } + + if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) { + continue; + } + + var hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom); + var hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right); + var fractionHeight = (viewHeight - hiddenHeight) / viewHeight, + fractionWidth = (viewWidth - hiddenWidth) / viewWidth; + var percent = fractionHeight * fractionWidth * 100 | 0; + visible.push({ + id: view.id, + x: currentWidth, + y: currentHeight, + view: view, + percent: percent, + widthPercent: fractionWidth * 100 | 0 + }); + } + + var first = visible[0], + last = visible[visible.length - 1]; + + if (sortByVisibility) { + visible.sort(function (a, b) { + var pc = a.percent - b.percent; + + if (Math.abs(pc) > 0.001) { + return -pc; + } + + return a.id - b.id; + }); + } + + return { + first: first, + last: last, + views: visible + }; + } + + function noContextMenuHandler(evt) { + evt.preventDefault(); + } + + function normalizeWheelEventDirection(evt) { + var delta = Math.hypot(evt.deltaX, evt.deltaY); + var angle = Math.atan2(evt.deltaY, evt.deltaX); + + if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) { + delta = -delta; + } + + return delta; + } + + function normalizeWheelEventDelta(evt) { + var delta = normalizeWheelEventDirection(evt); + var MOUSE_DOM_DELTA_PIXEL_MODE = 0; + var MOUSE_DOM_DELTA_LINE_MODE = 1; + var MOUSE_PIXELS_PER_LINE = 30; + var MOUSE_LINES_PER_PAGE = 30; + + if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) { + delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE; + } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) { + delta /= MOUSE_LINES_PER_PAGE; + } + + return delta; + } + + function isValidRotation(angle) { + return Number.isInteger(angle) && angle % 90 === 0; + } + + function isValidScrollMode(mode) { + return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN; + } + + function isValidSpreadMode(mode) { + return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN; + } + + function isPortraitOrientation(size) { + return size.width <= size.height; + } + + var WaitOnType = { + EVENT: "event", + TIMEOUT: "timeout" + }; + exports.WaitOnType = WaitOnType; + + function waitOnEventOrTimeout(_ref3) { + var target = _ref3.target, + name = _ref3.name, + _ref3$delay = _ref3.delay, + delay = _ref3$delay === void 0 ? 0 : _ref3$delay; + return new Promise(function (resolve, reject) { + if (_typeof(target) !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) { + throw new Error("waitOnEventOrTimeout - invalid parameters."); + } + + function handler(type) { + if (target instanceof EventBus) { + target._off(name, eventHandler); + } else { + target.removeEventListener(name, eventHandler); + } + + if (timeout) { + clearTimeout(timeout); + } + + resolve(type); + } + + var eventHandler = handler.bind(null, WaitOnType.EVENT); + + if (target instanceof EventBus) { + target._on(name, eventHandler); + } else { + target.addEventListener(name, eventHandler); + } + + var timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT); + var timeout = setTimeout(timeoutHandler, delay); + }); + } + + var animationStarted = new Promise(function (resolve) { + window.requestAnimationFrame(resolve); + }); + exports.animationStarted = animationStarted; + + function dispatchDOMEvent(eventName) { + var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + throw new Error("Not implemented: dispatchDOMEvent"); + } + + var EventBus = /*#__PURE__*/function () { + function EventBus(options) { + _classCallCheck(this, EventBus); + + this._listeners = Object.create(null); + } + + _createClass(EventBus, [{ + key: "on", + value: function on(eventName, listener) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + this._on(eventName, listener, { + external: true, + once: options === null || options === void 0 ? void 0 : options.once + }); + } + }, { + key: "off", + value: function off(eventName, listener) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + this._off(eventName, listener, { + external: true, + once: options === null || options === void 0 ? void 0 : options.once + }); + } + }, { + key: "dispatch", + value: function dispatch(eventName) { + var _this = this; + + var eventListeners = this._listeners[eventName]; + + if (!eventListeners || eventListeners.length === 0) { + return; + } + + var args = Array.prototype.slice.call(arguments, 1); + var externalListeners; + eventListeners.slice(0).forEach(function (_ref4) { + var listener = _ref4.listener, + external = _ref4.external, + once = _ref4.once; + + if (once) { + _this._off(eventName, listener); + } + + if (external) { + (externalListeners || (externalListeners = [])).push(listener); + return; + } + + listener.apply(null, args); + }); + + if (externalListeners) { + externalListeners.forEach(function (listener) { + listener.apply(null, args); + }); + externalListeners = null; + } + } + }, { + key: "_on", + value: function _on(eventName, listener) { + var _this$_listeners; + + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var eventListeners = (_this$_listeners = this._listeners)[eventName] || (_this$_listeners[eventName] = []); + eventListeners.push({ + listener: listener, + external: (options === null || options === void 0 ? void 0 : options.external) === true, + once: (options === null || options === void 0 ? void 0 : options.once) === true + }); + } + }, { + key: "_off", + value: function _off(eventName, listener) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var eventListeners = this._listeners[eventName]; + + if (!eventListeners) { + return; + } + + for (var i = 0, ii = eventListeners.length; i < ii; i++) { + if (eventListeners[i].listener === listener) { + eventListeners.splice(i, 1); + return; + } + } + } + }]); + + return EventBus; + }(); + + exports.EventBus = EventBus; + + function clamp(v, min, max) { + return Math.min(Math.max(v, min), max); + } + + var ProgressBar = /*#__PURE__*/function () { + function ProgressBar(id) { + var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + height = _ref5.height, + width = _ref5.width, + units = _ref5.units; + + _classCallCheck(this, ProgressBar); + + this.visible = true; + this.div = document.querySelector(id + " .progress"); + this.bar = this.div.parentNode; + this.height = height || 100; + this.width = width || 100; + this.units = units || "%"; + this.div.style.height = this.height + this.units; + this.percent = 0; + } + + _createClass(ProgressBar, [{ + key: "_updateBar", + value: function _updateBar() { + if (this._indeterminate) { + this.div.classList.add("indeterminate"); + this.div.style.width = this.width + this.units; + return; + } + + this.div.classList.remove("indeterminate"); + var progressSize = this.width * this._percent / 100; + this.div.style.width = progressSize + this.units; + } + }, { + key: "percent", + get: function get() { + return this._percent; + }, + set: function set(val) { + this._indeterminate = isNaN(val); + this._percent = clamp(val, 0, 100); + + this._updateBar(); + } + }, { + key: "setWidth", + value: function setWidth(viewer) { + if (!viewer) { + return; + } + + var container = viewer.parentNode; + var scrollbarWidth = container.offsetWidth - viewer.offsetWidth; + + if (scrollbarWidth > 0) { + var doc = document.documentElement; + doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, "".concat(scrollbarWidth, "px")); + } + } + }, { + key: "hide", + value: function hide() { + if (!this.visible) { + return; + } + + this.visible = false; + this.bar.classList.add("hidden"); + } + }, { + key: "show", + value: function show() { + if (this.visible) { + return; + } + + this.visible = true; + this.bar.classList.remove("hidden"); + } + }]); + + return ProgressBar; + }(); + + exports.ProgressBar = ProgressBar; + + function moveToEndOfArray(arr, condition) { + var moved = [], + len = arr.length; + var write = 0; + + for (var read = 0; read < len; ++read) { + if (condition(arr[read])) { + moved.push(arr[read]); + } else { + arr[write] = arr[read]; + ++write; + } + } + + for (var _read = 0; write < len; ++_read, ++write) { + arr[write] = moved[_read]; + } + } + + function getActiveOrFocusedElement() { + var curRoot = document; + var curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + + while ((_curActiveOrFocused = curActiveOrFocused) !== null && _curActiveOrFocused !== void 0 && _curActiveOrFocused.shadowRoot) { + var _curActiveOrFocused; + + curRoot = curActiveOrFocused.shadowRoot; + curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + } + + return curActiveOrFocused; + } + + function apiPageLayoutToSpreadMode(layout) { + switch (layout) { + case "SinglePage": + case "OneColumn": + return SpreadMode.NONE; + + case "TwoColumnLeft": + case "TwoPageLeft": + return SpreadMode.ODD; + + case "TwoColumnRight": + case "TwoPageRight": + return SpreadMode.EVEN; + } + + return SpreadMode.NONE; + } + + function apiPageModeToSidebarView(mode) { + switch (mode) { + case "UseNone": + return SidebarView.NONE; + + case "UseThumbs": + return SidebarView.THUMBS; + + case "UseOutlines": + return SidebarView.OUTLINE; + + case "UseAttachments": + return SidebarView.ATTACHMENTS; + + case "UseOC": + return SidebarView.LAYERS; + } + + return SidebarView.NONE; + } + + /***/ + }), + /* 7 */ + /***/ ((module) => { + + + var pdfjsLib; + + if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) { + pdfjsLib = window["pdfjs-dist/build/pdf"]; + } else { + pdfjsLib = require("pdf.js"); + } + + module.exports = pdfjsLib; + + /***/ + }), + /* 8 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFCursorTools = exports.CursorTool = void 0; + + var _grab_to_pan = __webpack_require__(9); + + var _ui_utils = __webpack_require__(6); + + 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); + return Constructor; + } + + var CursorTool = { + SELECT: 0, + HAND: 1, + ZOOM: 2 + }; + exports.CursorTool = CursorTool; + + var PDFCursorTools = /*#__PURE__*/function () { + function PDFCursorTools(_ref) { + var _this = this; + + var container = _ref.container, + eventBus = _ref.eventBus, + _ref$cursorToolOnLoad = _ref.cursorToolOnLoad, + cursorToolOnLoad = _ref$cursorToolOnLoad === void 0 ? CursorTool.SELECT : _ref$cursorToolOnLoad; + + _classCallCheck(this, PDFCursorTools); + + this.container = container; + this.eventBus = eventBus; + this.active = CursorTool.SELECT; + this.activeBeforePresentationMode = null; + this.handTool = new _grab_to_pan.GrabToPan({ + element: this.container + }); + + this._addEventListeners(); + + Promise.resolve().then(function () { + _this.switchTool(cursorToolOnLoad); + }); + } + + _createClass(PDFCursorTools, [{ + key: "activeTool", + get: function get() { + return this.active; + } + }, { + key: "switchTool", + value: function switchTool(tool) { + var _this2 = this; + + if (this.activeBeforePresentationMode !== null) { + return; + } + + if (tool === this.active) { + return; + } + + var disableActiveTool = function disableActiveTool() { + switch (_this2.active) { + case CursorTool.SELECT: + break; + + case CursorTool.HAND: + _this2.handTool.deactivate(); + + break; + + case CursorTool.ZOOM: + } + }; + + switch (tool) { + case CursorTool.SELECT: + disableActiveTool(); + break; + + case CursorTool.HAND: + disableActiveTool(); + this.handTool.activate(); + break; + + case CursorTool.ZOOM: + default: + console.error("switchTool: \"".concat(tool, "\" is an unsupported value.")); + return; + } + + this.active = tool; + + this._dispatchEvent(); + } + }, { + key: "_dispatchEvent", + value: function _dispatchEvent() { + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool: this.active + }); + } + }, { + key: "_addEventListeners", + value: function _addEventListeners() { + var _this3 = this; + + this.eventBus._on("switchcursortool", function (evt) { + _this3.switchTool(evt.tool); + }); + + this.eventBus._on("presentationmodechanged", function (evt) { + switch (evt.state) { + case _ui_utils.PresentationModeState.FULLSCREEN: { + var previouslyActive = _this3.active; + + _this3.switchTool(CursorTool.SELECT); + + _this3.activeBeforePresentationMode = previouslyActive; + break; + } + + case _ui_utils.PresentationModeState.NORMAL: { + var _previouslyActive = _this3.activeBeforePresentationMode; + _this3.activeBeforePresentationMode = null; + + _this3.switchTool(_previouslyActive); + + break; + } + } + }); + } + }]); + + return PDFCursorTools; + }(); + + exports.PDFCursorTools = PDFCursorTools; + + /***/ + }), + /* 9 */ + /***/ ((__unused_webpack_module, exports) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.GrabToPan = GrabToPan; + + function GrabToPan(options) { + this.element = options.element; + this.document = options.element.ownerDocument; + + if (typeof options.ignoreTarget === "function") { + this.ignoreTarget = options.ignoreTarget; + } + + this.onActiveChanged = options.onActiveChanged; + this.activate = this.activate.bind(this); + this.deactivate = this.deactivate.bind(this); + this.toggle = this.toggle.bind(this); + this._onmousedown = this._onmousedown.bind(this); + this._onmousemove = this._onmousemove.bind(this); + this._endPan = this._endPan.bind(this); + var overlay = this.overlay = document.createElement("div"); + overlay.className = "grab-to-pan-grabbing"; + } + + GrabToPan.prototype = { + CSS_CLASS_GRAB: "grab-to-pan-grab", + activate: function GrabToPan_activate() { + if (!this.active) { + this.active = true; + this.element.addEventListener("mousedown", this._onmousedown, true); + this.element.classList.add(this.CSS_CLASS_GRAB); + + if (this.onActiveChanged) { + this.onActiveChanged(true); + } + } + }, + deactivate: function GrabToPan_deactivate() { + if (this.active) { + this.active = false; + this.element.removeEventListener("mousedown", this._onmousedown, true); + + this._endPan(); + + this.element.classList.remove(this.CSS_CLASS_GRAB); + + if (this.onActiveChanged) { + this.onActiveChanged(false); + } + } + }, + toggle: function GrabToPan_toggle() { + if (this.active) { + this.deactivate(); + } else { + this.activate(); + } + }, + ignoreTarget: function GrabToPan_ignoreTarget(node) { + return node.matches("a[href], a[href] *, input, textarea, button, button *, select, option"); + }, + _onmousedown: function GrabToPan__onmousedown(event) { + if (event.button !== 0 || this.ignoreTarget(event.target)) { + return; + } + + if (event.originalTarget) { + try { + event.originalTarget.tagName; + } catch (e) { + return; + } + } + + this.scrollLeftStart = this.element.scrollLeft; + this.scrollTopStart = this.element.scrollTop; + this.clientXStart = event.clientX; + this.clientYStart = event.clientY; + this.document.addEventListener("mousemove", this._onmousemove, true); + this.document.addEventListener("mouseup", this._endPan, true); + this.element.addEventListener("scroll", this._endPan, true); + event.preventDefault(); + event.stopPropagation(); + var focusedElement = document.activeElement; + + if (focusedElement && !focusedElement.contains(event.target)) { + focusedElement.blur(); + } + }, + _onmousemove: function GrabToPan__onmousemove(event) { + this.element.removeEventListener("scroll", this._endPan, true); + + if (isLeftMouseReleased(event)) { + this._endPan(); + + return; + } + + var xDiff = event.clientX - this.clientXStart; + var yDiff = event.clientY - this.clientYStart; + var scrollTop = this.scrollTopStart - yDiff; + var scrollLeft = this.scrollLeftStart - xDiff; + + if (this.element.scrollTo) { + this.element.scrollTo({ + top: scrollTop, + left: scrollLeft, + behavior: "instant" + }); + } else { + this.element.scrollTop = scrollTop; + this.element.scrollLeft = scrollLeft; + } + + if (!this.overlay.parentNode) { + document.body.appendChild(this.overlay); + } + }, + _endPan: function GrabToPan__endPan() { + this.element.removeEventListener("scroll", this._endPan, true); + this.document.removeEventListener("mousemove", this._onmousemove, true); + this.document.removeEventListener("mouseup", this._endPan, true); + this.overlay.remove(); + } + }; + + function isLeftMouseReleased(event) { + if ("buttons" in event) { + return !(event.buttons & 1); + } + + var chrome = window.chrome; + var isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app); + var isSafari6plus = /Apple/.test(navigator.vendor) && /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent); + + if (isChrome15OrOpera15plus || isSafari6plus) { + return event.which === 0; + } + + return false; + } + + /***/ + }), + /* 10 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.RenderingStates = exports.PDFRenderingQueue = void 0; + + var _pdfjsLib = __webpack_require__(7); + + 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); + return Constructor; + } + + var CLEANUP_TIMEOUT = 30000; + var RenderingStates = { + INITIAL: 0, + RUNNING: 1, + PAUSED: 2, + FINISHED: 3 + }; + exports.RenderingStates = RenderingStates; + + var PDFRenderingQueue = /*#__PURE__*/function () { + function PDFRenderingQueue() { + _classCallCheck(this, PDFRenderingQueue); + + this.pdfViewer = null; + this.pdfThumbnailViewer = null; + this.onIdle = null; + this.highestPriorityPage = null; + this.idleTimeout = null; + this.printing = false; + this.isThumbnailViewEnabled = false; + } + + _createClass(PDFRenderingQueue, [{ + key: "setViewer", + value: function setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + }, { + key: "setThumbnailViewer", + value: function setThumbnailViewer(pdfThumbnailViewer) { + this.pdfThumbnailViewer = pdfThumbnailViewer; + } + }, { + key: "isHighestPriority", + value: function isHighestPriority(view) { + return this.highestPriorityPage === view.renderingId; + } + }, { + key: "renderHighestPriority", + value: function renderHighestPriority(currentlyVisiblePages) { + if (this.idleTimeout) { + clearTimeout(this.idleTimeout); + this.idleTimeout = null; + } + + if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { + return; + } + + if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) { + if (this.pdfThumbnailViewer.forceRendering()) { + return; + } + } + + if (this.printing) { + return; + } + + if (this.onIdle) { + this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); + } + } + }, { + key: "getHighestPriority", + value: function getHighestPriority(visible, views, scrolledDown) { + var visibleViews = visible.views; + var numVisible = visibleViews.length; + + if (numVisible === 0) { + return null; + } + + for (var i = 0; i < numVisible; ++i) { + var view = visibleViews[i].view; + + if (!this.isViewFinished(view)) { + return view; + } + } + + if (scrolledDown) { + var nextPageIndex = visible.last.id; + + if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) { + return views[nextPageIndex]; + } + } else { + var previousPageIndex = visible.first.id - 2; + + if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) { + return views[previousPageIndex]; + } + } + + return null; + } + }, { + key: "isViewFinished", + value: function isViewFinished(view) { + return view.renderingState === RenderingStates.FINISHED; + } + }, { + key: "renderView", + value: function renderView(view) { + var _this = this; + + switch (view.renderingState) { + case RenderingStates.FINISHED: + return false; + + case RenderingStates.PAUSED: + this.highestPriorityPage = view.renderingId; + view.resume(); + break; + + case RenderingStates.RUNNING: + this.highestPriorityPage = view.renderingId; + break; + + case RenderingStates.INITIAL: + this.highestPriorityPage = view.renderingId; + view.draw()["finally"](function () { + _this.renderHighestPriority(); + })["catch"](function (reason) { + if (reason instanceof _pdfjsLib.RenderingCancelledException) { + return; + } + + console.error("renderView: \"".concat(reason, "\"")); + }); + break; + } + + return true; + } + }]); + + return PDFRenderingQueue; + }(); + + exports.PDFRenderingQueue = PDFRenderingQueue; + + /***/ + }), + /* 11 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.OverlayManager = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + 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); + return Constructor; + } + + var OverlayManager = /*#__PURE__*/function () { + function OverlayManager() { + _classCallCheck(this, OverlayManager); + + this._overlays = {}; + this._active = null; + this._keyDownBound = this._keyDown.bind(this); + } + + _createClass(OverlayManager, [{ + key: "active", + get: function get() { + return this._active; + } + }, { + key: "register", + value: function () { + var _register = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(name, element) { + var callerCloseMethod, + canForceClose, + container, + _args = arguments; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + callerCloseMethod = _args.length > 2 && _args[2] !== undefined ? _args[2] : null; + canForceClose = _args.length > 3 && _args[3] !== undefined ? _args[3] : false; + + if (!(!name || !element || !(container = element.parentNode))) { + _context.next = 6; + break; + } + + throw new Error("Not enough parameters."); + + case 6: + if (!this._overlays[name]) { + _context.next = 8; + break; + } + + throw new Error("The overlay is already registered."); + + case 8: + this._overlays[name] = { + element: element, + container: container, + callerCloseMethod: callerCloseMethod, + canForceClose: canForceClose + }; + + case 9: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function register(_x, _x2) { + return _register.apply(this, arguments); + } + + return register; + }() + }, { + key: "unregister", + value: function () { + var _unregister = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(name) { + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + if (this._overlays[name]) { + _context2.next = 4; + break; + } + + throw new Error("The overlay does not exist."); + + case 4: + if (!(this._active === name)) { + _context2.next = 6; + break; + } + + throw new Error("The overlay cannot be removed while it is active."); + + case 6: + delete this._overlays[name]; + + case 7: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + function unregister(_x3) { + return _unregister.apply(this, arguments); + } + + return unregister; + }() + }, { + key: "open", + value: function () { + var _open = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(name) { + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + if (this._overlays[name]) { + _context3.next = 4; + break; + } + + throw new Error("The overlay does not exist."); + + case 4: + if (!this._active) { + _context3.next = 14; + break; + } + + if (!this._overlays[name].canForceClose) { + _context3.next = 9; + break; + } + + this._closeThroughCaller(); + + _context3.next = 14; + break; + + case 9: + if (!(this._active === name)) { + _context3.next = 13; + break; + } + + throw new Error("The overlay is already active."); + + case 13: + throw new Error("Another overlay is currently active."); + + case 14: + this._active = name; + + this._overlays[this._active].element.classList.remove("hidden"); + + this._overlays[this._active].container.classList.remove("hidden"); + + window.addEventListener("keydown", this._keyDownBound); + + case 18: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function open(_x4) { + return _open.apply(this, arguments); + } + + return open; + }() + }, { + key: "close", + value: function () { + var _close = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(name) { + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + if (this._overlays[name]) { + _context4.next = 4; + break; + } + + throw new Error("The overlay does not exist."); + + case 4: + if (this._active) { + _context4.next = 8; + break; + } + + throw new Error("The overlay is currently not active."); + + case 8: + if (!(this._active !== name)) { + _context4.next = 10; + break; + } + + throw new Error("Another overlay is currently active."); + + case 10: + this._overlays[this._active].container.classList.add("hidden"); + + this._overlays[this._active].element.classList.add("hidden"); + + this._active = null; + window.removeEventListener("keydown", this._keyDownBound); + + case 14: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + + function close(_x5) { + return _close.apply(this, arguments); + } + + return close; + }() + }, { + key: "_keyDown", + value: function _keyDown(evt) { + if (this._active && evt.keyCode === 27) { + this._closeThroughCaller(); + + evt.preventDefault(); + } + } + }, { + key: "_closeThroughCaller", + value: function _closeThroughCaller() { + if (this._overlays[this._active].callerCloseMethod) { + this._overlays[this._active].callerCloseMethod(); + } + + if (this._active) { + this.close(this._active); + } + } + }]); + + return OverlayManager; + }(); + + exports.OverlayManager = OverlayManager; + + /***/ + }), + /* 12 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PasswordPrompt = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _pdfjsLib = __webpack_require__(7); + + 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); + return Constructor; + } + + var PasswordPrompt = /*#__PURE__*/function () { + function PasswordPrompt(options, overlayManager, l10n) { + var _this = this; + + var isViewerEmbedded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + _classCallCheck(this, PasswordPrompt); + + this.overlayName = options.overlayName; + this.container = options.container; + this.label = options.label; + this.input = options.input; + this.submitButton = options.submitButton; + this.cancelButton = options.cancelButton; + this.overlayManager = overlayManager; + this.l10n = l10n; + this._isViewerEmbedded = isViewerEmbedded; + this.updateCallback = null; + this.reason = null; + this.submitButton.addEventListener("click", this.verify.bind(this)); + this.cancelButton.addEventListener("click", this.close.bind(this)); + this.input.addEventListener("keydown", function (e) { + if (e.keyCode === 13) { + _this.verify(); + } + }); + this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true); + } + + _createClass(PasswordPrompt, [{ + key: "open", + value: function () { + var _open = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var passwordIncorrect; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this.overlayManager.open(this.overlayName); + + case 2: + passwordIncorrect = this.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD; + + if (!this._isViewerEmbedded || passwordIncorrect) { + this.input.focus(); + } + + _context.next = 6; + return this.l10n.get("password_".concat(passwordIncorrect ? "invalid" : "label")); + + case 6: + this.label.textContent = _context.sent; + + case 7: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function open() { + return _open.apply(this, arguments); + } + + return open; + }() + }, { + key: "close", + value: function close() { + var _this2 = this; + + this.overlayManager.close(this.overlayName).then(function () { + _this2.input.value = ""; + }); + } + }, { + key: "verify", + value: function verify() { + var password = this.input.value; + + if ((password === null || password === void 0 ? void 0 : password.length) > 0) { + this.close(); + this.updateCallback(password); + } + } + }, { + key: "setUpdateCallback", + value: function setUpdateCallback(updateCallback, reason) { + this.updateCallback = updateCallback; + this.reason = reason; + } + }]); + + return PasswordPrompt; + }(); + + exports.PasswordPrompt = PasswordPrompt; + + /***/ + }), + /* 13 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFAttachmentViewer = void 0; + + var _pdfjsLib = __webpack_require__(7); + + var _base_tree_viewer = __webpack_require__(14); + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + function _get(target, property, receiver) { + 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(receiver); + } + return desc.value; + }; + } + return _get(target, property, receiver || target); + } + + function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + return object; + } + + 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 + } + }); + 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; + } + 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 PDFAttachmentViewer = /*#__PURE__*/function (_BaseTreeViewer) { + _inherits(PDFAttachmentViewer, _BaseTreeViewer); + + var _super = _createSuper(PDFAttachmentViewer); + + function PDFAttachmentViewer(options) { + var _this; + + _classCallCheck(this, PDFAttachmentViewer); + + _this = _super.call(this, options); + _this.downloadManager = options.downloadManager; + + _this.eventBus._on("fileattachmentannotation", _this._appendAttachment.bind(_assertThisInitialized(_this))); + + return _this; + } + + _createClass(PDFAttachmentViewer, [{ + key: "reset", + value: function reset() { + var keepRenderedCapability = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + _get(_getPrototypeOf(PDFAttachmentViewer.prototype), "reset", this).call(this); + + this._attachments = null; + + if (!keepRenderedCapability) { + this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)(); + } + + if (this._pendingDispatchEvent) { + clearTimeout(this._pendingDispatchEvent); + } + + this._pendingDispatchEvent = null; + } + }, { + key: "_dispatchEvent", + value: function _dispatchEvent(attachmentsCount) { + var _this2 = this; + + this._renderedCapability.resolve(); + + if (this._pendingDispatchEvent) { + clearTimeout(this._pendingDispatchEvent); + this._pendingDispatchEvent = null; + } + + if (attachmentsCount === 0) { + this._pendingDispatchEvent = setTimeout(function () { + _this2.eventBus.dispatch("attachmentsloaded", { + source: _this2, + attachmentsCount: 0 + }); + + _this2._pendingDispatchEvent = null; + }); + return; + } + + this.eventBus.dispatch("attachmentsloaded", { + source: this, + attachmentsCount: attachmentsCount + }); + } + }, { + key: "_bindLink", + value: function _bindLink(element, _ref) { + var _this3 = this; + + var content = _ref.content, + filename = _ref.filename; + + element.onclick = function () { + _this3.downloadManager.openOrDownloadData(element, content, filename); + + return false; + }; + } + }, { + key: "render", + value: function render(_ref2) { + var attachments = _ref2.attachments, + _ref2$keepRenderedCap = _ref2.keepRenderedCapability, + keepRenderedCapability = _ref2$keepRenderedCap === void 0 ? false : _ref2$keepRenderedCap; + + if (this._attachments) { + this.reset(keepRenderedCapability); + } + + this._attachments = attachments || null; + + if (!attachments) { + this._dispatchEvent(0); + + return; + } + + var names = Object.keys(attachments).sort(function (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + var fragment = document.createDocumentFragment(); + var attachmentsCount = 0; + + var _iterator = _createForOfIteratorHelper(names), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var name = _step.value; + var item = attachments[name]; + var content = item.content, + filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename); + var div = document.createElement("div"); + div.className = "treeItem"; + var element = document.createElement("a"); + + this._bindLink(element, { + content: content, + filename: filename + }); + + element.textContent = this._normalizeTextContent(filename); + div.appendChild(element); + fragment.appendChild(div); + attachmentsCount++; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + this._finishRendering(fragment, attachmentsCount); + } + }, { + key: "_appendAttachment", + value: function _appendAttachment(_ref3) { + var _this4 = this; + + var id = _ref3.id, + filename = _ref3.filename, + content = _ref3.content; + var renderedPromise = this._renderedCapability.promise; + renderedPromise.then(function () { + if (renderedPromise !== _this4._renderedCapability.promise) { + return; + } + + var attachments = _this4._attachments; + + if (!attachments) { + attachments = Object.create(null); + } else { + for (var name in attachments) { + if (id === name) { + return; + } + } + } + + attachments[id] = { + filename: filename, + content: content + }; + + _this4.render({ + attachments: attachments, + keepRenderedCapability: true + }); + }); + } + }]); + + return PDFAttachmentViewer; + }(_base_tree_viewer.BaseTreeViewer); + + exports.PDFAttachmentViewer = PDFAttachmentViewer; + + /***/ + }), + /* 14 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.BaseTreeViewer = void 0; + + var _pdfjsLib = __webpack_require__(7); + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + var TREEITEM_OFFSET_TOP = -100; + var TREEITEM_SELECTED_CLASS = "selected"; + + var BaseTreeViewer = /*#__PURE__*/function () { + function BaseTreeViewer(options) { + _classCallCheck(this, BaseTreeViewer); + + if (this.constructor === BaseTreeViewer) { + throw new Error("Cannot initialize BaseTreeViewer."); + } + + this.container = options.container; + this.eventBus = options.eventBus; + this.reset(); + } + + _createClass(BaseTreeViewer, [{ + key: "reset", + value: function reset() { + this._pdfDocument = null; + this._lastToggleIsShow = true; + this._currentTreeItem = null; + this.container.textContent = ""; + this.container.classList.remove("treeWithDeepNesting"); + } + }, { + key: "_dispatchEvent", + value: function _dispatchEvent(count) { + throw new Error("Not implemented: _dispatchEvent"); + } + }, { + key: "_bindLink", + value: function _bindLink(element, params) { + throw new Error("Not implemented: _bindLink"); + } + }, { + key: "_normalizeTextContent", + value: function _normalizeTextContent(str) { + return (0, _pdfjsLib.removeNullCharacters)(str) || "\u2013"; + } + }, { + key: "_addToggleButton", + value: function _addToggleButton(div) { + var _this = this; + + var hidden = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var toggler = document.createElement("div"); + toggler.className = "treeItemToggler"; + + if (hidden) { + toggler.classList.add("treeItemsHidden"); + } + + toggler.onclick = function (evt) { + evt.stopPropagation(); + toggler.classList.toggle("treeItemsHidden"); + + if (evt.shiftKey) { + var shouldShowAll = !toggler.classList.contains("treeItemsHidden"); + + _this._toggleTreeItem(div, shouldShowAll); + } + }; + + div.insertBefore(toggler, div.firstChild); + } + }, { + key: "_toggleTreeItem", + value: function _toggleTreeItem(root) { + var show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + this._lastToggleIsShow = show; + + var _iterator = _createForOfIteratorHelper(root.querySelectorAll(".treeItemToggler")), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var toggler = _step.value; + toggler.classList.toggle("treeItemsHidden", !show); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + }, { + key: "_toggleAllTreeItems", + value: function _toggleAllTreeItems() { + this._toggleTreeItem(this.container, !this._lastToggleIsShow); + } + }, { + key: "_finishRendering", + value: function _finishRendering(fragment, count) { + var hasAnyNesting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + if (hasAnyNesting) { + this.container.classList.add("treeWithDeepNesting"); + this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden"); + } + + this.container.appendChild(fragment); + + this._dispatchEvent(count); + } + }, { + key: "render", + value: function render(params) { + throw new Error("Not implemented: render"); + } + }, { + key: "_updateCurrentTreeItem", + value: function _updateCurrentTreeItem() { + var treeItem = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + + if (this._currentTreeItem) { + this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS); + + this._currentTreeItem = null; + } + + if (treeItem) { + treeItem.classList.add(TREEITEM_SELECTED_CLASS); + this._currentTreeItem = treeItem; + } + } + }, { + key: "_scrollToCurrentTreeItem", + value: function _scrollToCurrentTreeItem(treeItem) { + if (!treeItem) { + return; + } + + var currentNode = treeItem.parentNode; + + while (currentNode && currentNode !== this.container) { + if (currentNode.classList.contains("treeItem")) { + var toggler = currentNode.firstElementChild; + toggler === null || toggler === void 0 ? void 0 : toggler.classList.remove("treeItemsHidden"); + } + + currentNode = currentNode.parentNode; + } + + this._updateCurrentTreeItem(treeItem); + + this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP); + } + }]); + + return BaseTreeViewer; + }(); + + exports.BaseTreeViewer = BaseTreeViewer; + + /***/ + }), + /* 15 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFDocumentProperties = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _pdfjsLib = __webpack_require__(7); + + var _ui_utils = __webpack_require__(6); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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 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); + return Constructor; + } + + var DEFAULT_FIELD_CONTENT = "-"; + var NON_METRIC_LOCALES = ["en-us", "en-lr", "my"]; + var US_PAGE_NAMES = { + "8.5x11": "Letter", + "8.5x14": "Legal" + }; + var METRIC_PAGE_NAMES = { + "297x420": "A3", + "210x297": "A4" + }; + + function getPageName(size, isPortrait, pageNames) { + var width = isPortrait ? size.width : size.height; + var height = isPortrait ? size.height : size.width; + return pageNames["".concat(width, "x").concat(height)]; + } + + var PDFDocumentProperties = /*#__PURE__*/function () { + function PDFDocumentProperties(_ref, overlayManager, eventBus, l10n) { + var _this = this; + + var overlayName = _ref.overlayName, + fields = _ref.fields, + container = _ref.container, + closeButton = _ref.closeButton; + + _classCallCheck(this, PDFDocumentProperties); + + this.overlayName = overlayName; + this.fields = fields; + this.container = container; + this.overlayManager = overlayManager; + this.l10n = l10n; + + this._reset(); + + closeButton.addEventListener("click", this.close.bind(this)); + this.overlayManager.register(this.overlayName, this.container, this.close.bind(this)); + + eventBus._on("pagechanging", function (evt) { + _this._currentPageNumber = evt.pageNumber; + }); + + eventBus._on("rotationchanging", function (evt) { + _this._pagesRotation = evt.pagesRotation; + }); + + this._isNonMetricLocale = true; + l10n.getLanguage().then(function (locale) { + _this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale); + }); + } + + _createClass(PDFDocumentProperties, [{ + key: "open", + value: function () { + var _open = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var _this2 = this; + + var freezeFieldData, currentPageNumber, pagesRotation, _yield$this$pdfDocume, info, + contentDispositionFilename, contentLength, _yield$Promise$all, _yield$Promise$all2, + fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized, + _yield$this$pdfDocume2, length, data; + + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + freezeFieldData = function freezeFieldData(data) { + Object.defineProperty(_this2, "fieldData", { + value: Object.freeze(data), + writable: false, + enumerable: true, + configurable: true + }); + }; + + _context.next = 3; + return Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]); + + case 3: + currentPageNumber = this._currentPageNumber; + pagesRotation = this._pagesRotation; + + if (!(this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === this.fieldData._pagesRotation)) { + _context.next = 8; + break; + } + + this._updateUI(); + + return _context.abrupt("return"); + + case 8: + _context.next = 10; + return this.pdfDocument.getMetadata(); + + case 10: + _yield$this$pdfDocume = _context.sent; + info = _yield$this$pdfDocume.info; + contentDispositionFilename = _yield$this$pdfDocume.contentDispositionFilename; + contentLength = _yield$this$pdfDocume.contentLength; + _context.next = 16; + return Promise.all([contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(this.url), this._parseFileSize(contentLength), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(function (pdfPage) { + return _this2._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation); + }), this._parseLinearization(info.IsLinearized)]); + + case 16: + _yield$Promise$all = _context.sent; + _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 6); + fileName = _yield$Promise$all2[0]; + fileSize = _yield$Promise$all2[1]; + creationDate = _yield$Promise$all2[2]; + modificationDate = _yield$Promise$all2[3]; + pageSize = _yield$Promise$all2[4]; + isLinearized = _yield$Promise$all2[5]; + freezeFieldData({ + fileName: fileName, + fileSize: fileSize, + title: info.Title, + author: info.Author, + subject: info.Subject, + keywords: info.Keywords, + creationDate: creationDate, + modificationDate: modificationDate, + creator: info.Creator, + producer: info.Producer, + version: info.PDFFormatVersion, + pageCount: this.pdfDocument.numPages, + pageSize: pageSize, + linearized: isLinearized, + _currentPageNumber: currentPageNumber, + _pagesRotation: pagesRotation + }); + + this._updateUI(); + + _context.next = 28; + return this.pdfDocument.getDownloadInfo(); + + case 28: + _yield$this$pdfDocume2 = _context.sent; + length = _yield$this$pdfDocume2.length; + + if (!(contentLength === length)) { + _context.next = 32; + break; + } + + return _context.abrupt("return"); + + case 32: + data = Object.assign(Object.create(null), this.fieldData); + _context.next = 35; + return this._parseFileSize(length); + + case 35: + data.fileSize = _context.sent; + freezeFieldData(data); + + this._updateUI(); + + case 38: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function open() { + return _open.apply(this, arguments); + } + + return open; + }() + }, { + key: "close", + value: function close() { + this.overlayManager.close(this.overlayName); + } + }, { + key: "setDocument", + value: function setDocument(pdfDocument) { + var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + if (this.pdfDocument) { + this._reset(); + + this._updateUI(true); + } + + if (!pdfDocument) { + return; + } + + this.pdfDocument = pdfDocument; + this.url = url; + + this._dataAvailableCapability.resolve(); + } + }, { + key: "_reset", + value: function _reset() { + this.pdfDocument = null; + this.url = null; + delete this.fieldData; + this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._currentPageNumber = 1; + this._pagesRotation = 0; + } + }, { + key: "_updateUI", + value: function _updateUI() { + var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (reset || !this.fieldData) { + for (var id in this.fields) { + this.fields[id].textContent = DEFAULT_FIELD_CONTENT; + } + + return; + } + + if (this.overlayManager.active !== this.overlayName) { + return; + } + + for (var _id in this.fields) { + var content = this.fieldData[_id]; + this.fields[_id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT; + } + } + }, { + key: "_parseFileSize", + value: function () { + var _parseFileSize2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + var fileSize, + kb, + mb, + _args2 = arguments; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + fileSize = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : 0; + kb = fileSize / 1024, mb = kb / 1024; + + if (kb) { + _context2.next = 4; + break; + } + + return _context2.abrupt("return", undefined); + + case 4: + return _context2.abrupt("return", this.l10n.get("document_properties_".concat(mb >= 1 ? "mb" : "kb"), { + size_mb: mb >= 1 && (+mb.toPrecision(3)).toLocaleString(), + size_kb: mb < 1 && (+kb.toPrecision(3)).toLocaleString(), + size_b: fileSize.toLocaleString() + })); + + case 5: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + function _parseFileSize() { + return _parseFileSize2.apply(this, arguments); + } + + return _parseFileSize; + }() + }, { + key: "_parsePageSize", + value: function () { + var _parsePageSize2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(pageSizeInches, pagesRotation) { + var isPortrait, sizeInches, sizeMillimeters, rawName, exactMillimeters, intMillimeters, + _yield$Promise$all3, _yield$Promise$all4, _yield$Promise$all4$, width, height, unit, + name, orientation; + + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + if (pageSizeInches) { + _context3.next = 2; + break; + } + + return _context3.abrupt("return", undefined); + + case 2: + if (pagesRotation % 180 !== 0) { + pageSizeInches = { + width: pageSizeInches.height, + height: pageSizeInches.width + }; + } + + isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches); + sizeInches = { + width: Math.round(pageSizeInches.width * 100) / 100, + height: Math.round(pageSizeInches.height * 100) / 100 + }; + sizeMillimeters = { + width: Math.round(pageSizeInches.width * 25.4 * 10) / 10, + height: Math.round(pageSizeInches.height * 25.4 * 10) / 10 + }; + rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES); + + if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) { + exactMillimeters = { + width: pageSizeInches.width * 25.4, + height: pageSizeInches.height * 25.4 + }; + intMillimeters = { + width: Math.round(sizeMillimeters.width), + height: Math.round(sizeMillimeters.height) + }; + + if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) { + rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES); + + if (rawName) { + sizeInches = { + width: Math.round(intMillimeters.width / 25.4 * 100) / 100, + height: Math.round(intMillimeters.height / 25.4 * 100) / 100 + }; + sizeMillimeters = intMillimeters; + } + } + } + + _context3.next = 10; + return Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get("document_properties_page_size_unit_".concat(this._isNonMetricLocale ? "inches" : "millimeters")), rawName && this.l10n.get("document_properties_page_size_name_".concat(rawName.toLowerCase())), this.l10n.get("document_properties_page_size_orientation_".concat(isPortrait ? "portrait" : "landscape"))]); + + case 10: + _yield$Promise$all3 = _context3.sent; + _yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 4); + _yield$Promise$all4$ = _yield$Promise$all4[0]; + width = _yield$Promise$all4$.width; + height = _yield$Promise$all4$.height; + unit = _yield$Promise$all4[1]; + name = _yield$Promise$all4[2]; + orientation = _yield$Promise$all4[3]; + return _context3.abrupt("return", this.l10n.get("document_properties_page_size_dimension_".concat(name ? "name_" : "", "string"), { + width: width.toLocaleString(), + height: height.toLocaleString(), + unit: unit, + name: name, + orientation: orientation + })); + + case 19: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function _parsePageSize(_x, _x2) { + return _parsePageSize2.apply(this, arguments); + } + + return _parsePageSize; + }() + }, { + key: "_parseDate", + value: function () { + var _parseDate2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(inputDate) { + var dateObject; + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate); + + if (dateObject) { + _context4.next = 3; + break; + } + + return _context4.abrupt("return", undefined); + + case 3: + return _context4.abrupt("return", this.l10n.get("document_properties_date_string", { + date: dateObject.toLocaleDateString(), + time: dateObject.toLocaleTimeString() + })); + + case 4: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + + function _parseDate(_x3) { + return _parseDate2.apply(this, arguments); + } + + return _parseDate; + }() + }, { + key: "_parseLinearization", + value: function _parseLinearization(isLinearized) { + return this.l10n.get("document_properties_linearized_".concat(isLinearized ? "yes" : "no")); + } + }]); + + return PDFDocumentProperties; + }(); + + exports.PDFDocumentProperties = PDFDocumentProperties; + + /***/ + }), + /* 16 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFFindBar = void 0; + + var _pdf_find_controller = __webpack_require__(17); + + 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); + return Constructor; + } + + var MATCHES_COUNT_LIMIT = 1000; + + var PDFFindBar = /*#__PURE__*/function () { + function PDFFindBar(options, eventBus, l10n) { + var _this = this; + + _classCallCheck(this, PDFFindBar); + + this.opened = false; + this.bar = options.bar; + this.toggleButton = options.toggleButton; + this.findField = options.findField; + this.highlightAll = options.highlightAllCheckbox; + this.caseSensitive = options.caseSensitiveCheckbox; + this.entireWord = options.entireWordCheckbox; + this.findMsg = options.findMsg; + this.findResultsCount = options.findResultsCount; + this.findPreviousButton = options.findPreviousButton; + this.findNextButton = options.findNextButton; + this.eventBus = eventBus; + this.l10n = l10n; + this.toggleButton.addEventListener("click", function () { + _this.toggle(); + }); + this.findField.addEventListener("input", function () { + _this.dispatchEvent(""); + }); + this.bar.addEventListener("keydown", function (e) { + switch (e.keyCode) { + case 13: + if (e.target === _this.findField) { + _this.dispatchEvent("again", e.shiftKey); + } + + break; + + case 27: + _this.close(); + + break; + } + }); + this.findPreviousButton.addEventListener("click", function () { + _this.dispatchEvent("again", true); + }); + this.findNextButton.addEventListener("click", function () { + _this.dispatchEvent("again", false); + }); + this.highlightAll.addEventListener("click", function () { + _this.dispatchEvent("highlightallchange"); + }); + this.caseSensitive.addEventListener("click", function () { + _this.dispatchEvent("casesensitivitychange"); + }); + this.entireWord.addEventListener("click", function () { + _this.dispatchEvent("entirewordchange"); + }); + + this.eventBus._on("resize", this._adjustWidth.bind(this)); + } + + _createClass(PDFFindBar, [{ + key: "reset", + value: function reset() { + this.updateUIState(); + } + }, { + key: "dispatchEvent", + value: function dispatchEvent(type, findPrev) { + this.eventBus.dispatch("find", { + source: this, + type: type, + query: this.findField.value, + phraseSearch: true, + caseSensitive: this.caseSensitive.checked, + entireWord: this.entireWord.checked, + highlightAll: this.highlightAll.checked, + findPrevious: findPrev + }); + } + }, { + key: "updateUIState", + value: function updateUIState(state, previous, matchesCount) { + var _this2 = this; + + var findMsg = Promise.resolve(""); + var status = ""; + + switch (state) { + case _pdf_find_controller.FindState.FOUND: + break; + + case _pdf_find_controller.FindState.PENDING: + status = "pending"; + break; + + case _pdf_find_controller.FindState.NOT_FOUND: + findMsg = this.l10n.get("find_not_found"); + status = "notFound"; + break; + + case _pdf_find_controller.FindState.WRAPPED: + findMsg = this.l10n.get("find_reached_".concat(previous ? "top" : "bottom")); + break; + } + + this.findField.setAttribute("data-status", status); + findMsg.then(function (msg) { + _this2.findMsg.textContent = msg; + + _this2._adjustWidth(); + }); + this.updateResultsCount(matchesCount); + } + }, { + key: "updateResultsCount", + value: function updateResultsCount() { + var _this3 = this; + + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$current = _ref.current, + current = _ref$current === void 0 ? 0 : _ref$current, + _ref$total = _ref.total, + total = _ref$total === void 0 ? 0 : _ref$total; + + var limit = MATCHES_COUNT_LIMIT; + var matchCountMsg = Promise.resolve(""); + + if (total > 0) { + if (total > limit) { + var key = "find_match_count_limit"; + matchCountMsg = this.l10n.get(key, { + limit: limit + }); + } else { + var _key = "find_match_count"; + matchCountMsg = this.l10n.get(_key, { + current: current, + total: total + }); + } + } + + matchCountMsg.then(function (msg) { + _this3.findResultsCount.textContent = msg; + + _this3.findResultsCount.classList.toggle("hidden", !total); + + _this3._adjustWidth(); + }); + } + }, { + key: "open", + value: function open() { + if (!this.opened) { + this.opened = true; + this.toggleButton.classList.add("toggled"); + this.toggleButton.setAttribute("aria-expanded", "true"); + this.bar.classList.remove("hidden"); + } + + this.findField.select(); + this.findField.focus(); + + this._adjustWidth(); + } + }, { + key: "close", + value: function close() { + if (!this.opened) { + return; + } + + this.opened = false; + this.toggleButton.classList.remove("toggled"); + this.toggleButton.setAttribute("aria-expanded", "false"); + this.bar.classList.add("hidden"); + this.eventBus.dispatch("findbarclose", { + source: this + }); + } + }, { + key: "toggle", + value: function toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } + }, { + key: "_adjustWidth", + value: function _adjustWidth() { + if (!this.opened) { + return; + } + + this.bar.classList.remove("wrapContainers"); + var findbarHeight = this.bar.clientHeight; + var inputContainerHeight = this.bar.firstElementChild.clientHeight; + + if (findbarHeight > inputContainerHeight) { + this.bar.classList.add("wrapContainers"); + } + } + }]); + + return PDFFindBar; + }(); + + exports.PDFFindBar = PDFFindBar; + + /***/ + }), + /* 17 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFFindController = exports.FindState = void 0; + + var _pdfjsLib = __webpack_require__(7); + + var _pdf_find_utils = __webpack_require__(18); + + var _ui_utils = __webpack_require__(6); + + 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); + 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 _iterableToArrayLimit(arr, i) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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; + } + + var FindState = { + FOUND: 0, + NOT_FOUND: 1, + WRAPPED: 2, + PENDING: 3 + }; + exports.FindState = FindState; + var FIND_TIMEOUT = 250; + var MATCH_SCROLL_OFFSET_TOP = -50; + var MATCH_SCROLL_OFFSET_LEFT = -400; + var CHARACTERS_TO_NORMALIZE = { + "\u2018": "'", + "\u2019": "'", + "\u201A": "'", + "\u201B": "'", + "\u201C": '"', + "\u201D": '"', + "\u201E": '"', + "\u201F": '"', + "\xBC": "1/4", + "\xBD": "1/2", + "\xBE": "3/4" + }; + var normalizationRegex = null; + + function normalize(text) { + if (!normalizationRegex) { + var replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(""); + normalizationRegex = new RegExp("[".concat(replace, "]"), "g"); + } + + var diffs = null; + var normalizedText = text.replace(normalizationRegex, function (ch, index) { + var normalizedCh = CHARACTERS_TO_NORMALIZE[ch], + diff = normalizedCh.length - ch.length; + + if (diff !== 0) { + (diffs || (diffs = [])).push([index, diff]); + } + + return normalizedCh; + }); + return [normalizedText, diffs]; + } + + function getOriginalIndex(matchIndex) { + var diffs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + if (!diffs) { + return matchIndex; + } + + var totalDiff = 0; + + var _iterator = _createForOfIteratorHelper(diffs), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var _step$value = _slicedToArray(_step.value, 2), + index = _step$value[0], + diff = _step$value[1]; + + var currentIndex = index + totalDiff; + + if (currentIndex >= matchIndex) { + break; + } + + if (currentIndex + diff > matchIndex) { + totalDiff += matchIndex - currentIndex; + break; + } + + totalDiff += diff; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return matchIndex - totalDiff; + } + + var PDFFindController = /*#__PURE__*/function () { + function PDFFindController(_ref) { + var linkService = _ref.linkService, + eventBus = _ref.eventBus; + + _classCallCheck(this, PDFFindController); + + this._linkService = linkService; + this._eventBus = eventBus; + + this._reset(); + + eventBus._on("findbarclose", this._onFindBarClose.bind(this)); + } + + _createClass(PDFFindController, [{ + key: "highlightMatches", + get: function get() { + return this._highlightMatches; + } + }, { + key: "pageMatches", + get: function get() { + return this._pageMatches; + } + }, { + key: "pageMatchesLength", + get: function get() { + return this._pageMatchesLength; + } + }, { + key: "selected", + get: function get() { + return this._selected; + } + }, { + key: "state", + get: function get() { + return this._state; + } + }, { + key: "setDocument", + value: function setDocument(pdfDocument) { + if (this._pdfDocument) { + this._reset(); + } + + if (!pdfDocument) { + return; + } + + this._pdfDocument = pdfDocument; + + this._firstPageCapability.resolve(); + } + }, { + key: "executeCommand", + value: function executeCommand(cmd, state) { + var _this = this; + + if (!state) { + return; + } + + var pdfDocument = this._pdfDocument; + + if (this._state === null || this._shouldDirtyMatch(cmd, state)) { + this._dirtyMatch = true; + } + + this._state = state; + + if (cmd !== "findhighlightallchange") { + this._updateUIState(FindState.PENDING); + } + + this._firstPageCapability.promise.then(function () { + if (!_this._pdfDocument || pdfDocument && _this._pdfDocument !== pdfDocument) { + return; + } + + _this._extractText(); + + var findbarClosed = !_this._highlightMatches; + var pendingTimeout = !!_this._findTimeout; + + if (_this._findTimeout) { + clearTimeout(_this._findTimeout); + _this._findTimeout = null; + } + + if (cmd === "find") { + _this._findTimeout = setTimeout(function () { + _this._nextMatch(); + + _this._findTimeout = null; + }, FIND_TIMEOUT); + } else if (_this._dirtyMatch) { + _this._nextMatch(); + } else if (cmd === "findagain") { + _this._nextMatch(); + + if (findbarClosed && _this._state.highlightAll) { + _this._updateAllPages(); + } + } else if (cmd === "findhighlightallchange") { + if (pendingTimeout) { + _this._nextMatch(); + } else { + _this._highlightMatches = true; + } + + _this._updateAllPages(); + } else { + _this._nextMatch(); + } + }); + } + }, { + key: "scrollMatchIntoView", + value: function scrollMatchIntoView(_ref2) { + var _ref2$element = _ref2.element, + element = _ref2$element === void 0 ? null : _ref2$element, + _ref2$pageIndex = _ref2.pageIndex, + pageIndex = _ref2$pageIndex === void 0 ? -1 : _ref2$pageIndex, + _ref2$matchIndex = _ref2.matchIndex, + matchIndex = _ref2$matchIndex === void 0 ? -1 : _ref2$matchIndex; + + if (!this._scrollMatches || !element) { + return; + } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) { + return; + } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) { + return; + } + + this._scrollMatches = false; + var spot = { + top: MATCH_SCROLL_OFFSET_TOP, + left: MATCH_SCROLL_OFFSET_LEFT + }; + (0, _ui_utils.scrollIntoView)(element, spot, true); + } + }, { + key: "_reset", + value: function _reset() { + this._highlightMatches = false; + this._scrollMatches = false; + this._pdfDocument = null; + this._pageMatches = []; + this._pageMatchesLength = []; + this._state = null; + this._selected = { + pageIdx: -1, + matchIdx: -1 + }; + this._offset = { + pageIdx: null, + matchIdx: null, + wrapped: false + }; + this._extractTextPromises = []; + this._pageContents = []; + this._pageDiffs = []; + this._matchesCountTotal = 0; + this._pagesToSearch = null; + this._pendingFindMatches = Object.create(null); + this._resumePageIdx = null; + this._dirtyMatch = false; + clearTimeout(this._findTimeout); + this._findTimeout = null; + this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)(); + } + }, { + key: "_query", + get: function get() { + if (this._state.query !== this._rawQuery) { + this._rawQuery = this._state.query; + + var _normalize = normalize(this._state.query); + + var _normalize2 = _slicedToArray(_normalize, 1); + + this._normalizedQuery = _normalize2[0]; + } + + return this._normalizedQuery; + } + }, { + key: "_shouldDirtyMatch", + value: function _shouldDirtyMatch(cmd, state) { + if (state.query !== this._state.query) { + return true; + } + + switch (cmd) { + case "findagain": + var pageNumber = this._selected.pageIdx + 1; + var linkService = this._linkService; + + if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) { + return true; + } + + return false; + + case "findhighlightallchange": + return false; + } + + return true; + } + }, { + key: "_prepareMatches", + value: function _prepareMatches(matchesWithLength, matches, matchesLength) { + function isSubTerm(currentIndex) { + var currentElem = matchesWithLength[currentIndex]; + var nextElem = matchesWithLength[currentIndex + 1]; + + if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) { + currentElem.skipped = true; + return true; + } + + for (var i = currentIndex - 1; i >= 0; i--) { + var prevElem = matchesWithLength[i]; + + if (prevElem.skipped) { + continue; + } + + if (prevElem.match + prevElem.matchLength < currentElem.match) { + break; + } + + if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) { + currentElem.skipped = true; + return true; + } + } + + return false; + } + + matchesWithLength.sort(function (a, b) { + return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match; + }); + + for (var i = 0, len = matchesWithLength.length; i < len; i++) { + if (isSubTerm(i)) { + continue; + } + + matches.push(matchesWithLength[i].match); + matchesLength.push(matchesWithLength[i].matchLength); + } + } + }, { + key: "_isEntireWord", + value: function _isEntireWord(content, startIdx, length) { + if (startIdx > 0) { + var first = content.charCodeAt(startIdx); + var limit = content.charCodeAt(startIdx - 1); + + if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) { + return false; + } + } + + var endIdx = startIdx + length - 1; + + if (endIdx < content.length - 1) { + var last = content.charCodeAt(endIdx); + + var _limit = content.charCodeAt(endIdx + 1); + + if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(_limit)) { + return false; + } + } + + return true; + } + }, { + key: "_calculatePhraseMatch", + value: function _calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord) { + var matches = [], + matchesLength = []; + var queryLen = query.length; + var matchIdx = -queryLen; + + while (true) { + matchIdx = pageContent.indexOf(query, matchIdx + queryLen); + + if (matchIdx === -1) { + break; + } + + if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) { + continue; + } + + var originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs), + matchEnd = matchIdx + queryLen - 1, + originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1; + matches.push(originalMatchIdx); + matchesLength.push(originalQueryLen); + } + + this._pageMatches[pageIndex] = matches; + this._pageMatchesLength[pageIndex] = matchesLength; + } + }, { + key: "_calculateWordMatch", + value: function _calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord) { + var matchesWithLength = []; + var queryArray = query.match(/\S+/g); + + for (var i = 0, len = queryArray.length; i < len; i++) { + var subquery = queryArray[i]; + var subqueryLen = subquery.length; + var matchIdx = -subqueryLen; + + while (true) { + matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen); + + if (matchIdx === -1) { + break; + } + + if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) { + continue; + } + + var originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs), + matchEnd = matchIdx + subqueryLen - 1, + originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1; + matchesWithLength.push({ + match: originalMatchIdx, + matchLength: originalQueryLen, + skipped: false + }); + } + } + + this._pageMatchesLength[pageIndex] = []; + this._pageMatches[pageIndex] = []; + + this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], this._pageMatchesLength[pageIndex]); + } + }, { + key: "_calculateMatch", + value: function _calculateMatch(pageIndex) { + var pageContent = this._pageContents[pageIndex]; + var pageDiffs = this._pageDiffs[pageIndex]; + var query = this._query; + var _this$_state = this._state, + caseSensitive = _this$_state.caseSensitive, + entireWord = _this$_state.entireWord, + phraseSearch = _this$_state.phraseSearch; + + if (query.length === 0) { + return; + } + + if (!caseSensitive) { + pageContent = pageContent.toLowerCase(); + query = query.toLowerCase(); + } + + if (phraseSearch) { + this._calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord); + } else { + this._calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord); + } + + if (this._state.highlightAll) { + this._updatePage(pageIndex); + } + + if (this._resumePageIdx === pageIndex) { + this._resumePageIdx = null; + + this._nextPageMatch(); + } + + var pageMatchesCount = this._pageMatches[pageIndex].length; + + if (pageMatchesCount > 0) { + this._matchesCountTotal += pageMatchesCount; + + this._updateUIResultsCount(); + } + } + }, { + key: "_extractText", + value: function _extractText() { + var _this2 = this; + + if (this._extractTextPromises.length > 0) { + return; + } + + var promise = Promise.resolve(); + + var _loop = function _loop(i, ii) { + var extractTextCapability = (0, _pdfjsLib.createPromiseCapability)(); + _this2._extractTextPromises[i] = extractTextCapability.promise; + promise = promise.then(function () { + return _this2._pdfDocument.getPage(i + 1).then(function (pdfPage) { + return pdfPage.getTextContent({ + normalizeWhitespace: true + }); + }).then(function (textContent) { + var textItems = textContent.items; + var strBuf = []; + + for (var j = 0, jj = textItems.length; j < jj; j++) { + strBuf.push(textItems[j].str); + } + + var _normalize3 = normalize(strBuf.join("")); + + var _normalize4 = _slicedToArray(_normalize3, 2); + + _this2._pageContents[i] = _normalize4[0]; + _this2._pageDiffs[i] = _normalize4[1]; + extractTextCapability.resolve(i); + }, function (reason) { + console.error("Unable to get text content for page ".concat(i + 1), reason); + _this2._pageContents[i] = ""; + _this2._pageDiffs[i] = null; + extractTextCapability.resolve(i); + }); + }); + }; + + for (var i = 0, ii = this._linkService.pagesCount; i < ii; i++) { + _loop(i, ii); + } + } + }, { + key: "_updatePage", + value: function _updatePage(index) { + if (this._scrollMatches && this._selected.pageIdx === index) { + this._linkService.page = index + 1; + } + + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: index + }); + } + }, { + key: "_updateAllPages", + value: function _updateAllPages() { + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: -1 + }); + } + }, { + key: "_nextMatch", + value: function _nextMatch() { + var _this3 = this; + + var previous = this._state.findPrevious; + var currentPageIndex = this._linkService.page - 1; + var numPages = this._linkService.pagesCount; + this._highlightMatches = true; + + if (this._dirtyMatch) { + this._dirtyMatch = false; + this._selected.pageIdx = this._selected.matchIdx = -1; + this._offset.pageIdx = currentPageIndex; + this._offset.matchIdx = null; + this._offset.wrapped = false; + this._resumePageIdx = null; + this._pageMatches.length = 0; + this._pageMatchesLength.length = 0; + this._matchesCountTotal = 0; + + this._updateAllPages(); + + for (var i = 0; i < numPages; i++) { + if (this._pendingFindMatches[i] === true) { + continue; + } + + this._pendingFindMatches[i] = true; + + this._extractTextPromises[i].then(function (pageIdx) { + delete _this3._pendingFindMatches[pageIdx]; + + _this3._calculateMatch(pageIdx); + }); + } + } + + if (this._query === "") { + this._updateUIState(FindState.FOUND); + + return; + } + + if (this._resumePageIdx) { + return; + } + + var offset = this._offset; + this._pagesToSearch = numPages; + + if (offset.matchIdx !== null) { + var numPageMatches = this._pageMatches[offset.pageIdx].length; + + if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { + offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; + + this._updateMatch(true); + + return; + } + + this._advanceOffsetPage(previous); + } + + this._nextPageMatch(); + } + }, { + key: "_matchesReady", + value: function _matchesReady(matches) { + var offset = this._offset; + var numMatches = matches.length; + var previous = this._state.findPrevious; + + if (numMatches) { + offset.matchIdx = previous ? numMatches - 1 : 0; + + this._updateMatch(true); + + return true; + } + + this._advanceOffsetPage(previous); + + if (offset.wrapped) { + offset.matchIdx = null; + + if (this._pagesToSearch < 0) { + this._updateMatch(false); + + return true; + } + } + + return false; + } + }, { + key: "_nextPageMatch", + value: function _nextPageMatch() { + if (this._resumePageIdx !== null) { + console.error("There can only be one pending page."); + } + + var matches = null; + + do { + var pageIdx = this._offset.pageIdx; + matches = this._pageMatches[pageIdx]; + + if (!matches) { + this._resumePageIdx = pageIdx; + break; + } + } while (!this._matchesReady(matches)); + } + }, { + key: "_advanceOffsetPage", + value: function _advanceOffsetPage(previous) { + var offset = this._offset; + var numPages = this._linkService.pagesCount; + offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; + offset.matchIdx = null; + this._pagesToSearch--; + + if (offset.pageIdx >= numPages || offset.pageIdx < 0) { + offset.pageIdx = previous ? numPages - 1 : 0; + offset.wrapped = true; + } + } + }, { + key: "_updateMatch", + value: function _updateMatch() { + var found = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var state = FindState.NOT_FOUND; + var wrapped = this._offset.wrapped; + this._offset.wrapped = false; + + if (found) { + var previousPage = this._selected.pageIdx; + this._selected.pageIdx = this._offset.pageIdx; + this._selected.matchIdx = this._offset.matchIdx; + state = wrapped ? FindState.WRAPPED : FindState.FOUND; + + if (previousPage !== -1 && previousPage !== this._selected.pageIdx) { + this._updatePage(previousPage); + } + } + + this._updateUIState(state, this._state.findPrevious); + + if (this._selected.pageIdx !== -1) { + this._scrollMatches = true; + + this._updatePage(this._selected.pageIdx); + } + } + }, { + key: "_onFindBarClose", + value: function _onFindBarClose(evt) { + var _this4 = this; + + var pdfDocument = this._pdfDocument; + + this._firstPageCapability.promise.then(function () { + if (!_this4._pdfDocument || pdfDocument && _this4._pdfDocument !== pdfDocument) { + return; + } + + if (_this4._findTimeout) { + clearTimeout(_this4._findTimeout); + _this4._findTimeout = null; + } + + if (_this4._resumePageIdx) { + _this4._resumePageIdx = null; + _this4._dirtyMatch = true; + } + + _this4._updateUIState(FindState.FOUND); + + _this4._highlightMatches = false; + + _this4._updateAllPages(); + }); + } + }, { + key: "_requestMatchesCount", + value: function _requestMatchesCount() { + var _this$_selected = this._selected, + pageIdx = _this$_selected.pageIdx, + matchIdx = _this$_selected.matchIdx; + var current = 0, + total = this._matchesCountTotal; + + if (matchIdx !== -1) { + for (var i = 0; i < pageIdx; i++) { + var _this$_pageMatches$i; + + current += ((_this$_pageMatches$i = this._pageMatches[i]) === null || _this$_pageMatches$i === void 0 ? void 0 : _this$_pageMatches$i.length) || 0; + } + + current += matchIdx + 1; + } + + if (current < 1 || current > total) { + current = total = 0; + } + + return { + current: current, + total: total + }; + } + }, { + key: "_updateUIResultsCount", + value: function _updateUIResultsCount() { + this._eventBus.dispatch("updatefindmatchescount", { + source: this, + matchesCount: this._requestMatchesCount() + }); + } + }, { + key: "_updateUIState", + value: function _updateUIState(state, previous) { + var _this$_state$query, _this$_state2; + + this._eventBus.dispatch("updatefindcontrolstate", { + source: this, + state: state, + previous: previous, + matchesCount: this._requestMatchesCount(), + rawQuery: (_this$_state$query = (_this$_state2 = this._state) === null || _this$_state2 === void 0 ? void 0 : _this$_state2.query) !== null && _this$_state$query !== void 0 ? _this$_state$query : null + }); + } + }]); + + return PDFFindController; + }(); + + exports.PDFFindController = PDFFindController; + + /***/ + }), + /* 18 */ + /***/ ((__unused_webpack_module, exports) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.getCharacterType = getCharacterType; + exports.CharacterType = void 0; + var CharacterType = { + SPACE: 0, + ALPHA_LETTER: 1, + PUNCT: 2, + HAN_LETTER: 3, + KATAKANA_LETTER: 4, + HIRAGANA_LETTER: 5, + HALFWIDTH_KATAKANA_LETTER: 6, + THAI_LETTER: 7 + }; + exports.CharacterType = CharacterType; + + function isAlphabeticalScript(charCode) { + return charCode < 0x2e80; + } + + function isAscii(charCode) { + return (charCode & 0xff80) === 0; + } + + function isAsciiAlpha(charCode) { + return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a; + } + + function isAsciiDigit(charCode) { + return charCode >= 0x30 && charCode <= 0x39; + } + + function isAsciiSpace(charCode) { + return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a; + } + + function isHan(charCode) { + return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff; + } + + function isKatakana(charCode) { + return charCode >= 0x30a0 && charCode <= 0x30ff; + } + + function isHiragana(charCode) { + return charCode >= 0x3040 && charCode <= 0x309f; + } + + function isHalfwidthKatakana(charCode) { + return charCode >= 0xff60 && charCode <= 0xff9f; + } + + function isThai(charCode) { + return (charCode & 0xff80) === 0x0e00; + } + + function getCharacterType(charCode) { + if (isAlphabeticalScript(charCode)) { + if (isAscii(charCode)) { + if (isAsciiSpace(charCode)) { + return CharacterType.SPACE; + } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) { + return CharacterType.ALPHA_LETTER; + } + + return CharacterType.PUNCT; + } else if (isThai(charCode)) { + return CharacterType.THAI_LETTER; + } else if (charCode === 0xa0) { + return CharacterType.SPACE; + } + + return CharacterType.ALPHA_LETTER; + } + + if (isHan(charCode)) { + return CharacterType.HAN_LETTER; + } else if (isKatakana(charCode)) { + return CharacterType.KATAKANA_LETTER; + } else if (isHiragana(charCode)) { + return CharacterType.HIRAGANA_LETTER; + } else if (isHalfwidthKatakana(charCode)) { + return CharacterType.HALFWIDTH_KATAKANA_LETTER; + } + + return CharacterType.ALPHA_LETTER; + } + + /***/ + }), + /* 19 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.isDestArraysEqual = isDestArraysEqual; + exports.isDestHashesEqual = isDestHashesEqual; + exports.PDFHistory = void 0; + + var _ui_utils = __webpack_require__(6); + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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); + return Constructor; + } + + var HASH_CHANGE_TIMEOUT = 1000; + var POSITION_UPDATED_THRESHOLD = 50; + var UPDATE_VIEWAREA_TIMEOUT = 1000; + + function getCurrentHash() { + return document.location.hash; + } + + var PDFHistory = /*#__PURE__*/function () { + function PDFHistory(_ref) { + var _this = this; + + var linkService = _ref.linkService, + eventBus = _ref.eventBus; + + _classCallCheck(this, PDFHistory); + + this.linkService = linkService; + this.eventBus = eventBus; + this._initialized = false; + this._fingerprint = ""; + this.reset(); + this._boundEvents = null; + this._isViewerInPresentationMode = false; + + this.eventBus._on("presentationmodechanged", function (evt) { + _this._isViewerInPresentationMode = evt.state !== _ui_utils.PresentationModeState.NORMAL; + }); + + this.eventBus._on("pagesinit", function () { + _this._isPagesLoaded = false; + + _this.eventBus._on("pagesloaded", function (evt) { + _this._isPagesLoaded = !!evt.pagesCount; + }, { + once: true + }); + }); + } + + _createClass(PDFHistory, [{ + key: "initialize", + value: function initialize(_ref2) { + var fingerprint = _ref2.fingerprint, + _ref2$resetHistory = _ref2.resetHistory, + resetHistory = _ref2$resetHistory === void 0 ? false : _ref2$resetHistory, + _ref2$updateUrl = _ref2.updateUrl, + updateUrl = _ref2$updateUrl === void 0 ? false : _ref2$updateUrl; + + if (!fingerprint || typeof fingerprint !== "string") { + console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.'); + return; + } + + if (this._initialized) { + this.reset(); + } + + var reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint; + this._fingerprint = fingerprint; + this._updateUrl = updateUrl === true; + this._initialized = true; + + this._bindEvents(); + + var state = window.history.state; + this._popStateInProgress = false; + this._blockHashChange = 0; + this._currentHash = getCurrentHash(); + this._numPositionUpdates = 0; + this._uid = this._maxUid = 0; + this._destination = null; + this._position = null; + + if (!this._isValidState(state, true) || resetHistory) { + var _this$_parseCurrentHa = this._parseCurrentHash(true), + hash = _this$_parseCurrentHa.hash, + page = _this$_parseCurrentHa.page, + rotation = _this$_parseCurrentHa.rotation; + + if (!hash || reInitialized || resetHistory) { + this._pushOrReplaceState(null, true); + + return; + } + + this._pushOrReplaceState({ + hash: hash, + page: page, + rotation: rotation + }, true); + + return; + } + + var destination = state.destination; + + this._updateInternalState(destination, state.uid, true); + + if (destination.rotation !== undefined) { + this._initialRotation = destination.rotation; + } + + if (destination.dest) { + this._initialBookmark = JSON.stringify(destination.dest); + this._destination.page = null; + } else if (destination.hash) { + this._initialBookmark = destination.hash; + } else if (destination.page) { + this._initialBookmark = "page=".concat(destination.page); + } + } + }, { + key: "reset", + value: function reset() { + if (this._initialized) { + this._pageHide(); + + this._initialized = false; + + this._unbindEvents(); + } + + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + + this._initialBookmark = null; + this._initialRotation = null; + } + }, { + key: "push", + value: function push(_ref3) { + var _this2 = this; + + var _ref3$namedDest = _ref3.namedDest, + namedDest = _ref3$namedDest === void 0 ? null : _ref3$namedDest, + explicitDest = _ref3.explicitDest, + pageNumber = _ref3.pageNumber; + + if (!this._initialized) { + return; + } + + if (namedDest && typeof namedDest !== "string") { + console.error("PDFHistory.push: " + "\"".concat(namedDest, "\" is not a valid namedDest parameter.")); + return; + } else if (!Array.isArray(explicitDest)) { + console.error("PDFHistory.push: " + "\"".concat(explicitDest, "\" is not a valid explicitDest parameter.")); + return; + } else if (!this._isValidPage(pageNumber)) { + if (pageNumber !== null || this._destination) { + console.error("PDFHistory.push: " + "\"".concat(pageNumber, "\" is not a valid pageNumber parameter.")); + return; + } + } + + var hash = namedDest || JSON.stringify(explicitDest); + + if (!hash) { + return; + } + + var forceReplace = false; + + if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) { + if (this._destination.page) { + return; + } + + forceReplace = true; + } + + if (this._popStateInProgress && !forceReplace) { + return; + } + + this._pushOrReplaceState({ + dest: explicitDest, + hash: hash, + page: pageNumber, + rotation: this.linkService.rotation + }, forceReplace); + + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(function () { + _this2._popStateInProgress = false; + }); + } + } + }, { + key: "pushPage", + value: function pushPage(pageNumber) { + var _this$_destination, + _this3 = this; + + if (!this._initialized) { + return; + } + + if (!this._isValidPage(pageNumber)) { + console.error("PDFHistory.pushPage: \"".concat(pageNumber, "\" is not a valid page number.")); + return; + } + + if (((_this$_destination = this._destination) === null || _this$_destination === void 0 ? void 0 : _this$_destination.page) === pageNumber) { + return; + } + + if (this._popStateInProgress) { + return; + } + + this._pushOrReplaceState({ + dest: null, + hash: "page=".concat(pageNumber), + page: pageNumber, + rotation: this.linkService.rotation + }); + + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(function () { + _this3._popStateInProgress = false; + }); + } + } + }, { + key: "pushCurrentPosition", + value: function pushCurrentPosition() { + if (!this._initialized || this._popStateInProgress) { + return; + } + + this._tryPushCurrentPosition(); + } + }, { + key: "back", + value: function back() { + if (!this._initialized || this._popStateInProgress) { + return; + } + + var state = window.history.state; + + if (this._isValidState(state) && state.uid > 0) { + window.history.back(); + } + } + }, { + key: "forward", + value: function forward() { + if (!this._initialized || this._popStateInProgress) { + return; + } + + var state = window.history.state; + + if (this._isValidState(state) && state.uid < this._maxUid) { + window.history.forward(); + } + } + }, { + key: "popStateInProgress", + get: function get() { + return this._initialized && (this._popStateInProgress || this._blockHashChange > 0); + } + }, { + key: "initialBookmark", + get: function get() { + return this._initialized ? this._initialBookmark : null; + } + }, { + key: "initialRotation", + get: function get() { + return this._initialized ? this._initialRotation : null; + } + }, { + key: "_pushOrReplaceState", + value: function _pushOrReplaceState(destination) { + var forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var shouldReplace = forceReplace || !this._destination; + var newState = { + fingerprint: this._fingerprint, + uid: shouldReplace ? this._uid : this._uid + 1, + destination: destination + }; + + this._updateInternalState(destination, newState.uid); + + var newUrl; + + if (this._updateUrl && destination !== null && destination !== void 0 && destination.hash) { + var baseUrl = document.location.href.split("#")[0]; + + if (!baseUrl.startsWith("file://")) { + newUrl = "".concat(baseUrl, "#").concat(destination.hash); + } + } + + if (shouldReplace) { + window.history.replaceState(newState, "", newUrl); + } else { + window.history.pushState(newState, "", newUrl); + } + } + }, { + key: "_tryPushCurrentPosition", + value: function _tryPushCurrentPosition() { + var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (!this._position) { + return; + } + + var position = this._position; + + if (temporary) { + position = Object.assign(Object.create(null), this._position); + position.temporary = true; + } + + if (!this._destination) { + this._pushOrReplaceState(position); + + return; + } + + if (this._destination.temporary) { + this._pushOrReplaceState(position, true); + + return; + } + + if (this._destination.hash === position.hash) { + return; + } + + if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) { + return; + } + + var forceReplace = false; + + if (this._destination.page >= position.first && this._destination.page <= position.page) { + if (this._destination.dest !== undefined || !this._destination.first) { + return; + } + + forceReplace = true; + } + + this._pushOrReplaceState(position, forceReplace); + } + }, { + key: "_isValidPage", + value: function _isValidPage(val) { + return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount; + } + }, { + key: "_isValidState", + value: function _isValidState(state) { + var checkReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!state) { + return false; + } + + if (state.fingerprint !== this._fingerprint) { + if (checkReload) { + if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) { + return false; + } + + var _performance$getEntri = performance.getEntriesByType("navigation"), + _performance$getEntri2 = _slicedToArray(_performance$getEntri, 1), + perfEntry = _performance$getEntri2[0]; + + if ((perfEntry === null || perfEntry === void 0 ? void 0 : perfEntry.type) !== "reload") { + return false; + } + } else { + return false; + } + } + + if (!Number.isInteger(state.uid) || state.uid < 0) { + return false; + } + + if (state.destination === null || _typeof(state.destination) !== "object") { + return false; + } + + return true; + } + }, { + key: "_updateInternalState", + value: function _updateInternalState(destination, uid) { + var removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + + if (removeTemporary && destination !== null && destination !== void 0 && destination.temporary) { + delete destination.temporary; + } + + this._destination = destination; + this._uid = uid; + this._maxUid = Math.max(this._maxUid, uid); + this._numPositionUpdates = 0; + } + }, { + key: "_parseCurrentHash", + value: function _parseCurrentHash() { + var checkNameddest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var hash = unescape(getCurrentHash()).substring(1); + var params = (0, _ui_utils.parseQueryString)(hash); + var nameddest = params.nameddest || ""; + var page = params.page | 0; + + if (!this._isValidPage(page) || checkNameddest && nameddest.length > 0) { + page = null; + } + + return { + hash: hash, + page: page, + rotation: this.linkService.rotation + }; + } + }, { + key: "_updateViewarea", + value: function _updateViewarea(_ref4) { + var _this4 = this; + + var location = _ref4.location; + + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + + this._position = { + hash: this._isViewerInPresentationMode ? "page=".concat(location.pageNumber) : location.pdfOpenParams.substring(1), + page: this.linkService.page, + first: location.pageNumber, + rotation: location.rotation + }; + + if (this._popStateInProgress) { + return; + } + + if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) { + this._numPositionUpdates++; + } + + if (UPDATE_VIEWAREA_TIMEOUT > 0) { + this._updateViewareaTimeout = setTimeout(function () { + if (!_this4._popStateInProgress) { + _this4._tryPushCurrentPosition(true); + } + + _this4._updateViewareaTimeout = null; + }, UPDATE_VIEWAREA_TIMEOUT); + } + } + }, { + key: "_popState", + value: function _popState(_ref5) { + var _this5 = this; + + var state = _ref5.state; + var newHash = getCurrentHash(), + hashChanged = this._currentHash !== newHash; + this._currentHash = newHash; + + if (!state) { + this._uid++; + + var _this$_parseCurrentHa2 = this._parseCurrentHash(), + hash = _this$_parseCurrentHa2.hash, + page = _this$_parseCurrentHa2.page, + rotation = _this$_parseCurrentHa2.rotation; + + this._pushOrReplaceState({ + hash: hash, + page: page, + rotation: rotation + }, true); + + return; + } + + if (!this._isValidState(state)) { + return; + } + + this._popStateInProgress = true; + + if (hashChanged) { + this._blockHashChange++; + (0, _ui_utils.waitOnEventOrTimeout)({ + target: window, + name: "hashchange", + delay: HASH_CHANGE_TIMEOUT + }).then(function () { + _this5._blockHashChange--; + }); + } + + var destination = state.destination; + + this._updateInternalState(destination, state.uid, true); + + if ((0, _ui_utils.isValidRotation)(destination.rotation)) { + this.linkService.rotation = destination.rotation; + } + + if (destination.dest) { + this.linkService.goToDestination(destination.dest); + } else if (destination.hash) { + this.linkService.setHash(destination.hash); + } else if (destination.page) { + this.linkService.page = destination.page; + } + + Promise.resolve().then(function () { + _this5._popStateInProgress = false; + }); + } + }, { + key: "_pageHide", + value: function _pageHide() { + if (!this._destination || this._destination.temporary) { + this._tryPushCurrentPosition(); + } + } + }, { + key: "_bindEvents", + value: function _bindEvents() { + if (this._boundEvents) { + return; + } + + this._boundEvents = { + updateViewarea: this._updateViewarea.bind(this), + popState: this._popState.bind(this), + pageHide: this._pageHide.bind(this) + }; + + this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea); + + window.addEventListener("popstate", this._boundEvents.popState); + window.addEventListener("pagehide", this._boundEvents.pageHide); + } + }, { + key: "_unbindEvents", + value: function _unbindEvents() { + if (!this._boundEvents) { + return; + } + + this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea); + + window.removeEventListener("popstate", this._boundEvents.popState); + window.removeEventListener("pagehide", this._boundEvents.pageHide); + this._boundEvents = null; + } + }]); + + return PDFHistory; + }(); + + exports.PDFHistory = PDFHistory; + + function isDestHashesEqual(destHash, pushHash) { + if (typeof destHash !== "string" || typeof pushHash !== "string") { + return false; + } + + if (destHash === pushHash) { + return true; + } + + var _parseQueryString = (0, _ui_utils.parseQueryString)(destHash), + nameddest = _parseQueryString.nameddest; + + if (nameddest === pushHash) { + return true; + } + + return false; + } + + function isDestArraysEqual(firstDest, secondDest) { + function isEntryEqual(first, second) { + if (_typeof(first) !== _typeof(second)) { + return false; + } + + if (Array.isArray(first) || Array.isArray(second)) { + return false; + } + + if (first !== null && _typeof(first) === "object" && second !== null) { + if (Object.keys(first).length !== Object.keys(second).length) { + return false; + } + + for (var key in first) { + if (!isEntryEqual(first[key], second[key])) { + return false; + } + } + + return true; + } + + return first === second || Number.isNaN(first) && Number.isNaN(second); + } + + if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) { + return false; + } + + if (firstDest.length !== secondDest.length) { + return false; + } + + for (var i = 0, ii = firstDest.length; i < ii; i++) { + if (!isEntryEqual(firstDest[i], secondDest[i])) { + return false; + } + } + + return true; + } + + /***/ + }), + /* 20 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFLayerViewer = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _base_tree_viewer = __webpack_require__(14); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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 _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); + return Constructor; + } + + function _get(target, property, receiver) { + 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(receiver); + } + return desc.value; + }; + } + return _get(target, property, receiver || target); + } + + function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + return object; + } + + 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 + } + }); + 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; + } + 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 PDFLayerViewer = /*#__PURE__*/function (_BaseTreeViewer) { + _inherits(PDFLayerViewer, _BaseTreeViewer); + + var _super = _createSuper(PDFLayerViewer); + + function PDFLayerViewer(options) { + var _this; + + _classCallCheck(this, PDFLayerViewer); + + _this = _super.call(this, options); + _this.l10n = options.l10n; + + _this.eventBus._on("resetlayers", _this._resetLayers.bind(_assertThisInitialized(_this))); + + _this.eventBus._on("togglelayerstree", _this._toggleAllTreeItems.bind(_assertThisInitialized(_this))); + + return _this; + } + + _createClass(PDFLayerViewer, [{ + key: "reset", + value: function reset() { + _get(_getPrototypeOf(PDFLayerViewer.prototype), "reset", this).call(this); + + this._optionalContentConfig = null; + } + }, { + key: "_dispatchEvent", + value: function _dispatchEvent(layersCount) { + this.eventBus.dispatch("layersloaded", { + source: this, + layersCount: layersCount + }); + } + }, { + key: "_bindLink", + value: function _bindLink(element, _ref) { + var _this2 = this; + + var groupId = _ref.groupId, + input = _ref.input; + + var setVisibility = function setVisibility() { + _this2._optionalContentConfig.setVisibility(groupId, input.checked); + + _this2.eventBus.dispatch("optionalcontentconfig", { + source: _this2, + promise: Promise.resolve(_this2._optionalContentConfig) + }); + }; + + element.onclick = function (evt) { + if (evt.target === input) { + setVisibility(); + return true; + } else if (evt.target !== element) { + return true; + } + + input.checked = !input.checked; + setVisibility(); + return false; + }; + } + }, { + key: "_setNestedName", + value: function () { + var _setNestedName2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(element, _ref2) { + var _ref2$name, name; + + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _ref2$name = _ref2.name, name = _ref2$name === void 0 ? null : _ref2$name; + + if (!(typeof name === "string")) { + _context.next = 4; + break; + } + + element.textContent = this._normalizeTextContent(name); + return _context.abrupt("return"); + + case 4: + _context.next = 6; + return this.l10n.get("additional_layers"); + + case 6: + element.textContent = _context.sent; + element.style.fontStyle = "italic"; + + case 8: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function _setNestedName(_x, _x2) { + return _setNestedName2.apply(this, arguments); + } + + return _setNestedName; + }() + }, { + key: "_addToggleButton", + value: function _addToggleButton(div, _ref3) { + var _ref3$name = _ref3.name, + name = _ref3$name === void 0 ? null : _ref3$name; + + _get(_getPrototypeOf(PDFLayerViewer.prototype), "_addToggleButton", this).call(this, div, name === null); + } + }, { + key: "_toggleAllTreeItems", + value: function _toggleAllTreeItems() { + if (!this._optionalContentConfig) { + return; + } + + _get(_getPrototypeOf(PDFLayerViewer.prototype), "_toggleAllTreeItems", this).call(this); + } + }, { + key: "render", + value: function render(_ref4) { + var optionalContentConfig = _ref4.optionalContentConfig, + pdfDocument = _ref4.pdfDocument; + + if (this._optionalContentConfig) { + this.reset(); + } + + this._optionalContentConfig = optionalContentConfig || null; + this._pdfDocument = pdfDocument || null; + var groups = optionalContentConfig === null || optionalContentConfig === void 0 ? void 0 : optionalContentConfig.getOrder(); + + if (!groups) { + this._dispatchEvent(0); + + return; + } + + var fragment = document.createDocumentFragment(), + queue = [{ + parent: fragment, + groups: groups + }]; + var layersCount = 0, + hasAnyNesting = false; + + while (queue.length > 0) { + var levelData = queue.shift(); + + var _iterator = _createForOfIteratorHelper(levelData.groups), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var groupId = _step.value; + var div = document.createElement("div"); + div.className = "treeItem"; + var element = document.createElement("a"); + div.appendChild(element); + + if (_typeof(groupId) === "object") { + hasAnyNesting = true; + + this._addToggleButton(div, groupId); + + this._setNestedName(element, groupId); + + var itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.appendChild(itemsDiv); + queue.push({ + parent: itemsDiv, + groups: groupId.order + }); + } else { + var group = optionalContentConfig.getGroup(groupId); + var input = document.createElement("input"); + + this._bindLink(element, { + groupId: groupId, + input: input + }); + + input.type = "checkbox"; + input.id = groupId; + input.checked = group.visible; + var label = document.createElement("label"); + label.setAttribute("for", groupId); + label.textContent = this._normalizeTextContent(group.name); + element.appendChild(input); + element.appendChild(label); + layersCount++; + } + + levelData.parent.appendChild(div); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + + this._finishRendering(fragment, layersCount, hasAnyNesting); + } + }, { + key: "_resetLayers", + value: function () { + var _resetLayers2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + var optionalContentConfig; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + if (this._optionalContentConfig) { + _context2.next = 2; + break; + } + + return _context2.abrupt("return"); + + case 2: + _context2.next = 4; + return this._pdfDocument.getOptionalContentConfig(); + + case 4: + optionalContentConfig = _context2.sent; + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(optionalContentConfig) + }); + this.render({ + optionalContentConfig: optionalContentConfig, + pdfDocument: this._pdfDocument + }); + + case 7: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + function _resetLayers() { + return _resetLayers2.apply(this, arguments); + } + + return _resetLayers; + }() + }]); + + return PDFLayerViewer; + }(_base_tree_viewer.BaseTreeViewer); + + exports.PDFLayerViewer = PDFLayerViewer; + + /***/ + }), + /* 21 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.SimpleLinkService = exports.PDFLinkService = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _ui_utils = __webpack_require__(6); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(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); + return Constructor; + } + + var PDFLinkService = /*#__PURE__*/function () { + function PDFLinkService() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + eventBus = _ref.eventBus, + _ref$externalLinkTarg = _ref.externalLinkTarget, + externalLinkTarget = _ref$externalLinkTarg === void 0 ? null : _ref$externalLinkTarg, + _ref$externalLinkRel = _ref.externalLinkRel, + externalLinkRel = _ref$externalLinkRel === void 0 ? null : _ref$externalLinkRel, + _ref$externalLinkEnab = _ref.externalLinkEnabled, + externalLinkEnabled = _ref$externalLinkEnab === void 0 ? true : _ref$externalLinkEnab, + _ref$ignoreDestinatio = _ref.ignoreDestinationZoom, + ignoreDestinationZoom = _ref$ignoreDestinatio === void 0 ? false : _ref$ignoreDestinatio; + + _classCallCheck(this, PDFLinkService); + + this.eventBus = eventBus; + this.externalLinkTarget = externalLinkTarget; + this.externalLinkRel = externalLinkRel; + this.externalLinkEnabled = externalLinkEnabled; + this._ignoreDestinationZoom = ignoreDestinationZoom; + this.baseUrl = null; + this.pdfDocument = null; + this.pdfViewer = null; + this.pdfHistory = null; + this._pagesRefCache = null; + } + + _createClass(PDFLinkService, [{ + key: "setDocument", + value: function setDocument(pdfDocument) { + var baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + this.baseUrl = baseUrl; + this.pdfDocument = pdfDocument; + this._pagesRefCache = Object.create(null); + } + }, { + key: "setViewer", + value: function setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + }, { + key: "setHistory", + value: function setHistory(pdfHistory) { + this.pdfHistory = pdfHistory; + } + }, { + key: "pagesCount", + get: function get() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + } + }, { + key: "page", + get: function get() { + return this.pdfViewer.currentPageNumber; + }, + set: function set(value) { + this.pdfViewer.currentPageNumber = value; + } + }, { + key: "rotation", + get: function get() { + return this.pdfViewer.pagesRotation; + }, + set: function set(value) { + this.pdfViewer.pagesRotation = value; + } + }, { + key: "navigateTo", + value: function navigateTo(dest) { + console.error("Deprecated method: `navigateTo`, use `goToDestination` instead."); + this.goToDestination(dest); + } + }, { + key: "_goToDestinationHelper", + value: function _goToDestinationHelper(rawDest) { + var _this = this; + + var namedDest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var explicitDest = arguments.length > 2 ? arguments[2] : undefined; + var destRef = explicitDest[0]; + var pageNumber; + + if (destRef instanceof Object) { + pageNumber = this._cachedPageNumber(destRef); + + if (pageNumber === null) { + this.pdfDocument.getPageIndex(destRef).then(function (pageIndex) { + _this.cachePageRef(pageIndex + 1, destRef); + + _this._goToDestinationHelper(rawDest, namedDest, explicitDest); + })["catch"](function () { + console.error("PDFLinkService._goToDestinationHelper: \"".concat(destRef, "\" is not ") + "a valid page reference, for dest=\"".concat(rawDest, "\".")); + }); + return; + } + } else if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } else { + console.error("PDFLinkService._goToDestinationHelper: \"".concat(destRef, "\" is not ") + "a valid destination reference, for dest=\"".concat(rawDest, "\".")); + return; + } + + if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) { + console.error("PDFLinkService._goToDestinationHelper: \"".concat(pageNumber, "\" is not ") + "a valid page number, for dest=\"".concat(rawDest, "\".")); + return; + } + + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.push({ + namedDest: namedDest, + explicitDest: explicitDest, + pageNumber: pageNumber + }); + } + + this.pdfViewer.scrollPageIntoView({ + pageNumber: pageNumber, + destArray: explicitDest, + ignoreDestinationZoom: this._ignoreDestinationZoom + }); + } + }, { + key: "goToDestination", + value: function () { + var _goToDestination = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(dest) { + var namedDest, explicitDest; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + if (this.pdfDocument) { + _context.next = 2; + break; + } + + return _context.abrupt("return"); + + case 2: + if (!(typeof dest === "string")) { + _context.next = 9; + break; + } + + namedDest = dest; + _context.next = 6; + return this.pdfDocument.getDestination(dest); + + case 6: + explicitDest = _context.sent; + _context.next = 13; + break; + + case 9: + namedDest = null; + _context.next = 12; + return dest; + + case 12: + explicitDest = _context.sent; + + case 13: + if (Array.isArray(explicitDest)) { + _context.next = 16; + break; + } + + console.error("PDFLinkService.goToDestination: \"".concat(explicitDest, "\" is not ") + "a valid destination array, for dest=\"".concat(dest, "\".")); + return _context.abrupt("return"); + + case 16: + this._goToDestinationHelper(dest, namedDest, explicitDest); + + case 17: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function goToDestination(_x) { + return _goToDestination.apply(this, arguments); + } + + return goToDestination; + }() + }, { + key: "goToPage", + value: function goToPage(val) { + if (!this.pdfDocument) { + return; + } + + var pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0; + + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error("PDFLinkService.goToPage: \"".concat(val, "\" is not a valid page.")); + return; + } + + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.pushPage(pageNumber); + } + + this.pdfViewer.scrollPageIntoView({ + pageNumber: pageNumber + }); + } + }, { + key: "getDestinationHash", + value: function getDestinationHash(dest) { + if (typeof dest === "string") { + if (dest.length > 0) { + return this.getAnchorUrl("#" + escape(dest)); + } + } else if (Array.isArray(dest)) { + var str = JSON.stringify(dest); + + if (str.length > 0) { + return this.getAnchorUrl("#" + escape(str)); + } + } + + return this.getAnchorUrl(""); + } + }, { + key: "getAnchorUrl", + value: function getAnchorUrl(anchor) { + return (this.baseUrl || "") + anchor; + } + }, { + key: "setHash", + value: function setHash(hash) { + if (!this.pdfDocument) { + return; + } + + var pageNumber, dest; + + if (hash.includes("=")) { + var params = (0, _ui_utils.parseQueryString)(hash); + + if ("search" in params) { + this.eventBus.dispatch("findfromurlhash", { + source: this, + query: params.search.replace(/"/g, ""), + phraseSearch: params.phrase === "true" + }); + } + + if ("page" in params) { + pageNumber = params.page | 0 || 1; + } + + if ("zoom" in params) { + var zoomArgs = params.zoom.split(","); + var zoomArg = zoomArgs[0]; + var zoomArgNumber = parseFloat(zoomArg); + + if (!zoomArg.includes("Fit")) { + dest = [null, { + name: "XYZ" + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg]; + } else { + if (zoomArg === "Fit" || zoomArg === "FitB") { + dest = [null, { + name: zoomArg + }]; + } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") { + dest = [null, { + name: zoomArg + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null]; + } else if (zoomArg === "FitR") { + if (zoomArgs.length !== 5) { + console.error('PDFLinkService.setHash: Not enough parameters for "FitR".'); + } else { + dest = [null, { + name: zoomArg + }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0]; + } + } else { + console.error("PDFLinkService.setHash: \"".concat(zoomArg, "\" is not ") + "a valid zoom value."); + } + } + } + + if (dest) { + this.pdfViewer.scrollPageIntoView({ + pageNumber: pageNumber || this.page, + destArray: dest, + allowNegativeOffset: true + }); + } else if (pageNumber) { + this.page = pageNumber; + } + + if ("pagemode" in params) { + this.eventBus.dispatch("pagemode", { + source: this, + mode: params.pagemode + }); + } + + if ("nameddest" in params) { + this.goToDestination(params.nameddest); + } + } else { + dest = unescape(hash); + + try { + dest = JSON.parse(dest); + + if (!Array.isArray(dest)) { + dest = dest.toString(); + } + } catch (ex) { + } + + if (typeof dest === "string" || isValidExplicitDestination(dest)) { + this.goToDestination(dest); + return; + } + + console.error("PDFLinkService.setHash: \"".concat(unescape(hash), "\" is not ") + "a valid destination."); + } + } + }, { + key: "executeNamedAction", + value: function executeNamedAction(action) { + switch (action) { + case "GoBack": + if (this.pdfHistory) { + this.pdfHistory.back(); + } + + break; + + case "GoForward": + if (this.pdfHistory) { + this.pdfHistory.forward(); + } + + break; + + case "NextPage": + this.pdfViewer.nextPage(); + break; + + case "PrevPage": + this.pdfViewer.previousPage(); + break; + + case "LastPage": + this.page = this.pagesCount; + break; + + case "FirstPage": + this.page = 1; + break; + + default: + break; + } + + this.eventBus.dispatch("namedaction", { + source: this, + action: action + }); + } + }, { + key: "cachePageRef", + value: function cachePageRef(pageNum, pageRef) { + if (!pageRef) { + return; + } + + var refStr = pageRef.gen === 0 ? "".concat(pageRef.num, "R") : "".concat(pageRef.num, "R").concat(pageRef.gen); + this._pagesRefCache[refStr] = pageNum; + } + }, { + key: "_cachedPageNumber", + value: function _cachedPageNumber(pageRef) { + var _this$_pagesRefCache; + + var refStr = pageRef.gen === 0 ? "".concat(pageRef.num, "R") : "".concat(pageRef.num, "R").concat(pageRef.gen); + return ((_this$_pagesRefCache = this._pagesRefCache) === null || _this$_pagesRefCache === void 0 ? void 0 : _this$_pagesRefCache[refStr]) || null; + } + }, { + key: "isPageVisible", + value: function isPageVisible(pageNumber) { + return this.pdfViewer.isPageVisible(pageNumber); + } + }, { + key: "isPageCached", + value: function isPageCached(pageNumber) { + return this.pdfViewer.isPageCached(pageNumber); + } + }]); + + return PDFLinkService; + }(); + + exports.PDFLinkService = PDFLinkService; + + function isValidExplicitDestination(dest) { + if (!Array.isArray(dest)) { + return false; + } + + var destLength = dest.length; + + if (destLength < 2) { + return false; + } + + var page = dest[0]; + + if (!(_typeof(page) === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) { + return false; + } + + var zoom = dest[1]; + + if (!(_typeof(zoom) === "object" && typeof zoom.name === "string")) { + return false; + } + + var allowNull = true; + + switch (zoom.name) { + case "XYZ": + if (destLength !== 5) { + return false; + } + + break; + + case "Fit": + case "FitB": + return destLength === 2; + + case "FitH": + case "FitBH": + case "FitV": + case "FitBV": + if (destLength !== 3) { + return false; + } + + break; + + case "FitR": + if (destLength !== 6) { + return false; + } + + allowNull = false; + break; + + default: + return false; + } + + for (var i = 2; i < destLength; i++) { + var param = dest[i]; + + if (!(typeof param === "number" || allowNull && param === null)) { + return false; + } + } + + return true; + } + + var SimpleLinkService = /*#__PURE__*/function () { + function SimpleLinkService() { + _classCallCheck(this, SimpleLinkService); + + this.externalLinkTarget = null; + this.externalLinkRel = null; + this.externalLinkEnabled = true; + this._ignoreDestinationZoom = false; + } + + _createClass(SimpleLinkService, [{ + key: "pagesCount", + get: function get() { + return 0; + } + }, { + key: "page", + get: function get() { + return 0; + }, + set: function set(value) { + } + }, { + key: "rotation", + get: function get() { + return 0; + }, + set: function set(value) { + } + }, { + key: "goToDestination", + value: function () { + var _goToDestination2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(dest) { + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + + function goToDestination(_x2) { + return _goToDestination2.apply(this, arguments); + } + + return goToDestination; + }() + }, { + key: "goToPage", + value: function goToPage(val) { + } + }, { + key: "getDestinationHash", + value: function getDestinationHash(dest) { + return "#"; + } + }, { + key: "getAnchorUrl", + value: function getAnchorUrl(hash) { + return "#"; + } + }, { + key: "setHash", + value: function setHash(hash) { + } + }, { + key: "executeNamedAction", + value: function executeNamedAction(action) { + } + }, { + key: "cachePageRef", + value: function cachePageRef(pageNum, pageRef) { + } + }, { + key: "isPageVisible", + value: function isPageVisible(pageNumber) { + return true; + } + }, { + key: "isPageCached", + value: function isPageCached(pageNumber) { + return true; + } + }]); + + return SimpleLinkService; + }(); + + exports.SimpleLinkService = SimpleLinkService; + + /***/ + }), + /* 22 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFOutlineViewer = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _pdfjsLib = __webpack_require__(7); + + var _base_tree_viewer = __webpack_require__(14); + + var _ui_utils = __webpack_require__(6); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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 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; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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 _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 _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 _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + 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); + return Constructor; + } + + function _get(target, property, receiver) { + 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(receiver); + } + return desc.value; + }; + } + return _get(target, property, receiver || target); + } + + function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + return object; + } + + 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 + } + }); + 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; + } + 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 PDFOutlineViewer = /*#__PURE__*/function (_BaseTreeViewer) { + _inherits(PDFOutlineViewer, _BaseTreeViewer); + + var _super = _createSuper(PDFOutlineViewer); + + function PDFOutlineViewer(options) { + var _this; + + _classCallCheck(this, PDFOutlineViewer); + + _this = _super.call(this, options); + _this.linkService = options.linkService; + + _this.eventBus._on("toggleoutlinetree", _this._toggleAllTreeItems.bind(_assertThisInitialized(_this))); + + _this.eventBus._on("currentoutlineitem", _this._currentOutlineItem.bind(_assertThisInitialized(_this))); + + _this.eventBus._on("pagechanging", function (evt) { + _this._currentPageNumber = evt.pageNumber; + }); + + _this.eventBus._on("pagesloaded", function (evt) { + _this._isPagesLoaded = !!evt.pagesCount; + }); + + _this.eventBus._on("sidebarviewchanged", function (evt) { + _this._sidebarView = evt.view; + }); + + return _this; + } + + _createClass(PDFOutlineViewer, [{ + key: "reset", + value: function reset() { + _get(_getPrototypeOf(PDFOutlineViewer.prototype), "reset", this).call(this); + + this._outline = null; + this._pageNumberToDestHashCapability = null; + this._currentPageNumber = 1; + this._isPagesLoaded = false; + } + }, { + key: "_dispatchEvent", + value: function _dispatchEvent(outlineCount) { + var _this$_pdfDocument; + + this.eventBus.dispatch("outlineloaded", { + source: this, + outlineCount: outlineCount, + enableCurrentOutlineItemButton: outlineCount > 0 && !((_this$_pdfDocument = this._pdfDocument) !== null && _this$_pdfDocument !== void 0 && _this$_pdfDocument.loadingParams.disableAutoFetch) + }); + } + }, { + key: "_bindLink", + value: function _bindLink(element, _ref) { + var _this2 = this; + + var url = _ref.url, + newWindow = _ref.newWindow, + dest = _ref.dest; + var linkService = this.linkService; + + if (url) { + (0, _pdfjsLib.addLinkAttributes)(element, { + url: url, + target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget, + rel: linkService.externalLinkRel, + enabled: linkService.externalLinkEnabled + }); + return; + } + + element.href = linkService.getDestinationHash(dest); + + element.onclick = function (evt) { + _this2._updateCurrentTreeItem(evt.target.parentNode); + + if (dest) { + linkService.goToDestination(dest); + } + + return false; + }; + } + }, { + key: "_setStyles", + value: function _setStyles(element, _ref2) { + var bold = _ref2.bold, + italic = _ref2.italic; + + if (bold) { + element.style.fontWeight = "bold"; + } + + if (italic) { + element.style.fontStyle = "italic"; + } + } + }, { + key: "_addToggleButton", + value: function _addToggleButton(div, _ref3) { + var count = _ref3.count, + items = _ref3.items; + var hidden = false; + + if (count < 0) { + var totalCount = items.length; + + if (totalCount > 0) { + var queue = _toConsumableArray(items); + + while (queue.length > 0) { + var _queue$shift = queue.shift(), + nestedCount = _queue$shift.count, + nestedItems = _queue$shift.items; + + if (nestedCount > 0 && nestedItems.length > 0) { + totalCount += nestedItems.length; + queue.push.apply(queue, _toConsumableArray(nestedItems)); + } + } + } + + if (Math.abs(count) === totalCount) { + hidden = true; + } + } + + _get(_getPrototypeOf(PDFOutlineViewer.prototype), "_addToggleButton", this).call(this, div, hidden); + } + }, { + key: "_toggleAllTreeItems", + value: function _toggleAllTreeItems() { + if (!this._outline) { + return; + } + + _get(_getPrototypeOf(PDFOutlineViewer.prototype), "_toggleAllTreeItems", this).call(this); + } + }, { + key: "render", + value: function render(_ref4) { + var outline = _ref4.outline, + pdfDocument = _ref4.pdfDocument; + + if (this._outline) { + this.reset(); + } + + this._outline = outline || null; + this._pdfDocument = pdfDocument || null; + + if (!outline) { + this._dispatchEvent(0); + + return; + } + + var fragment = document.createDocumentFragment(); + var queue = [{ + parent: fragment, + items: outline + }]; + var outlineCount = 0, + hasAnyNesting = false; + + while (queue.length > 0) { + var levelData = queue.shift(); + + var _iterator = _createForOfIteratorHelper(levelData.items), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var item = _step.value; + var div = document.createElement("div"); + div.className = "treeItem"; + var element = document.createElement("a"); + + this._bindLink(element, item); + + this._setStyles(element, item); + + element.textContent = this._normalizeTextContent(item.title); + div.appendChild(element); + + if (item.items.length > 0) { + hasAnyNesting = true; + + this._addToggleButton(div, item); + + var itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.appendChild(itemsDiv); + queue.push({ + parent: itemsDiv, + items: item.items + }); + } + + levelData.parent.appendChild(div); + outlineCount++; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + + this._finishRendering(fragment, outlineCount, hasAnyNesting); + } + }, { + key: "_currentOutlineItem", + value: function () { + var _currentOutlineItem2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var pageNumberToDestHash, i, destHash, linkElement; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + if (this._isPagesLoaded) { + _context.next = 2; + break; + } + + throw new Error("_currentOutlineItem: All pages have not been loaded."); + + case 2: + if (!(!this._outline || !this._pdfDocument)) { + _context.next = 4; + break; + } + + return _context.abrupt("return"); + + case 4: + _context.next = 6; + return this._getPageNumberToDestHash(this._pdfDocument); + + case 6: + pageNumberToDestHash = _context.sent; + + if (pageNumberToDestHash) { + _context.next = 9; + break; + } + + return _context.abrupt("return"); + + case 9: + this._updateCurrentTreeItem(null); + + if (!(this._sidebarView !== _ui_utils.SidebarView.OUTLINE)) { + _context.next = 12; + break; + } + + return _context.abrupt("return"); + + case 12: + i = this._currentPageNumber; + + case 13: + if (!(i > 0)) { + _context.next = 25; + break; + } + + destHash = pageNumberToDestHash.get(i); + + if (destHash) { + _context.next = 17; + break; + } + + return _context.abrupt("continue", 22); + + case 17: + linkElement = this.container.querySelector("a[href=\"".concat(destHash, "\"]")); + + if (linkElement) { + _context.next = 20; + break; + } + + return _context.abrupt("continue", 22); + + case 20: + this._scrollToCurrentTreeItem(linkElement.parentNode); + + return _context.abrupt("break", 25); + + case 22: + i--; + _context.next = 13; + break; + + case 25: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function _currentOutlineItem() { + return _currentOutlineItem2.apply(this, arguments); + } + + return _currentOutlineItem; + }() + }, { + key: "_getPageNumberToDestHash", + value: function () { + var _getPageNumberToDestHash2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(pdfDocument) { + var pageNumberToDestHash, pageNumberNesting, queue, levelData, currentNesting, _iterator2, + _step2, _step2$value, dest, items, explicitDest, pageNumber, _explicitDest, + _explicitDest2, destRef, destHash; + + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + if (!this._pageNumberToDestHashCapability) { + _context2.next = 2; + break; + } + + return _context2.abrupt("return", this._pageNumberToDestHashCapability.promise); + + case 2: + this._pageNumberToDestHashCapability = (0, _pdfjsLib.createPromiseCapability)(); + pageNumberToDestHash = new Map(), pageNumberNesting = new Map(); + queue = [{ + nesting: 0, + items: this._outline + }]; + + case 5: + if (!(queue.length > 0)) { + _context2.next = 56; + break; + } + + levelData = queue.shift(), currentNesting = levelData.nesting; + _iterator2 = _createForOfIteratorHelper(levelData.items); + _context2.prev = 8; + + _iterator2.s(); + + case 10: + if ((_step2 = _iterator2.n()).done) { + _context2.next = 46; + break; + } + + _step2$value = _step2.value, dest = _step2$value.dest, items = _step2$value.items; + explicitDest = void 0, pageNumber = void 0; + + if (!(typeof dest === "string")) { + _context2.next = 21; + break; + } + + _context2.next = 16; + return pdfDocument.getDestination(dest); + + case 16: + explicitDest = _context2.sent; + + if (!(pdfDocument !== this._pdfDocument)) { + _context2.next = 19; + break; + } + + return _context2.abrupt("return", null); + + case 19: + _context2.next = 22; + break; + + case 21: + explicitDest = dest; + + case 22: + if (!Array.isArray(explicitDest)) { + _context2.next = 43; + break; + } + + _explicitDest = explicitDest, _explicitDest2 = _slicedToArray(_explicitDest, 1), destRef = _explicitDest2[0]; + + if (!(destRef instanceof Object)) { + _context2.next = 41; + break; + } + + pageNumber = this.linkService._cachedPageNumber(destRef); + + if (pageNumber) { + _context2.next = 39; + break; + } + + _context2.prev = 27; + _context2.next = 30; + return pdfDocument.getPageIndex(destRef); + + case 30: + _context2.t0 = _context2.sent; + pageNumber = _context2.t0 + 1; + + if (!(pdfDocument !== this._pdfDocument)) { + _context2.next = 34; + break; + } + + return _context2.abrupt("return", null); + + case 34: + this.linkService.cachePageRef(pageNumber, destRef); + _context2.next = 39; + break; + + case 37: + _context2.prev = 37; + _context2.t1 = _context2["catch"](27); + + case 39: + _context2.next = 42; + break; + + case 41: + if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } + + case 42: + if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) { + destHash = this.linkService.getDestinationHash(dest); + pageNumberToDestHash.set(pageNumber, destHash); + pageNumberNesting.set(pageNumber, currentNesting); + } + + case 43: + if (items.length > 0) { + queue.push({ + nesting: currentNesting + 1, + items: items + }); + } + + case 44: + _context2.next = 10; + break; + + case 46: + _context2.next = 51; + break; + + case 48: + _context2.prev = 48; + _context2.t2 = _context2["catch"](8); + + _iterator2.e(_context2.t2); + + case 51: + _context2.prev = 51; + + _iterator2.f(); + + return _context2.finish(51); + + case 54: + _context2.next = 5; + break; + + case 56: + this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null); + + return _context2.abrupt("return", this._pageNumberToDestHashCapability.promise); + + case 58: + case "end": + return _context2.stop(); + } + } + }, _callee2, this, [[8, 48, 51, 54], [27, 37]]); + })); + + function _getPageNumberToDestHash(_x) { + return _getPageNumberToDestHash2.apply(this, arguments); + } + + return _getPageNumberToDestHash; + }() + }]); + + return PDFOutlineViewer; + }(_base_tree_viewer.BaseTreeViewer); + + exports.PDFOutlineViewer = PDFOutlineViewer; + + /***/ + }), + /* 23 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFPresentationMode = void 0; + + var _ui_utils = __webpack_require__(6); + + 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); + return Constructor; + } + + var DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500; + var DELAY_BEFORE_HIDING_CONTROLS = 3000; + var ACTIVE_SELECTOR = "pdfPresentationMode"; + var CONTROLS_SELECTOR = "pdfPresentationModeControls"; + var MOUSE_SCROLL_COOLDOWN_TIME = 50; + var PAGE_SWITCH_THRESHOLD = 0.1; + var SWIPE_MIN_DISTANCE_THRESHOLD = 50; + var SWIPE_ANGLE_THRESHOLD = Math.PI / 6; + + var PDFPresentationMode = /*#__PURE__*/function () { + function PDFPresentationMode(_ref) { + var container = _ref.container, + pdfViewer = _ref.pdfViewer, + eventBus = _ref.eventBus; + + _classCallCheck(this, PDFPresentationMode); + + this.container = container; + this.pdfViewer = pdfViewer; + this.eventBus = eventBus; + this.active = false; + this.args = null; + this.contextMenuOpen = false; + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + this.touchSwipeState = null; + } + + _createClass(PDFPresentationMode, [{ + key: "request", + value: function request() { + if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) { + return false; + } + + this._addFullscreenChangeListeners(); + + this._setSwitchInProgress(); + + this._notifyStateChange(); + + if (this.container.requestFullscreen) { + this.container.requestFullscreen(); + } else if (this.container.mozRequestFullScreen) { + this.container.mozRequestFullScreen(); + } else if (this.container.webkitRequestFullscreen) { + this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); + } else { + return false; + } + + this.args = { + page: this.pdfViewer.currentPageNumber, + previousScale: this.pdfViewer.currentScaleValue + }; + return true; + } + }, { + key: "_mouseWheel", + value: function _mouseWheel(evt) { + if (!this.active) { + return; + } + + evt.preventDefault(); + var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); + var currentTime = Date.now(); + var storedTime = this.mouseScrollTimeStamp; + + if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { + return; + } + + if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) { + this._resetMouseScrollState(); + } + + this.mouseScrollDelta += delta; + + if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { + var totalDelta = this.mouseScrollDelta; + + this._resetMouseScrollState(); + + var success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage(); + + if (success) { + this.mouseScrollTimeStamp = currentTime; + } + } + } + }, { + key: "isFullscreen", + get: function get() { + return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen); + } + }, { + key: "_notifyStateChange", + value: function _notifyStateChange() { + var state = _ui_utils.PresentationModeState.NORMAL; + + if (this.switchInProgress) { + state = _ui_utils.PresentationModeState.CHANGING; + } else if (this.active) { + state = _ui_utils.PresentationModeState.FULLSCREEN; + } + + this.eventBus.dispatch("presentationmodechanged", { + source: this, + state: state, + + get active() { + throw new Error("Deprecated parameter: `active`, please use `state` instead."); + }, + + get switchInProgress() { + throw new Error("Deprecated parameter: `switchInProgress`, please use `state` instead."); + } + + }); + } + }, { + key: "_setSwitchInProgress", + value: function _setSwitchInProgress() { + var _this = this; + + if (this.switchInProgress) { + clearTimeout(this.switchInProgress); + } + + this.switchInProgress = setTimeout(function () { + _this._removeFullscreenChangeListeners(); + + delete _this.switchInProgress; + + _this._notifyStateChange(); + }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS); + } + }, { + key: "_resetSwitchInProgress", + value: function _resetSwitchInProgress() { + if (this.switchInProgress) { + clearTimeout(this.switchInProgress); + delete this.switchInProgress; + } + } + }, { + key: "_enter", + value: function _enter() { + var _this2 = this; + + this.active = true; + + this._resetSwitchInProgress(); + + this._notifyStateChange(); + + this.container.classList.add(ACTIVE_SELECTOR); + setTimeout(function () { + _this2.pdfViewer.currentPageNumber = _this2.args.page; + _this2.pdfViewer.currentScaleValue = "page-fit"; + }, 0); + + this._addWindowListeners(); + + this._showControls(); + + this.contextMenuOpen = false; + window.getSelection().removeAllRanges(); + } + }, { + key: "_exit", + value: function _exit() { + var _this3 = this; + + var page = this.pdfViewer.currentPageNumber; + this.container.classList.remove(ACTIVE_SELECTOR); + setTimeout(function () { + _this3.active = false; + + _this3._removeFullscreenChangeListeners(); + + _this3._notifyStateChange(); + + _this3.pdfViewer.currentScaleValue = _this3.args.previousScale; + _this3.pdfViewer.currentPageNumber = page; + _this3.args = null; + }, 0); + + this._removeWindowListeners(); + + this._hideControls(); + + this._resetMouseScrollState(); + + this.contextMenuOpen = false; + } + }, { + key: "_mouseDown", + value: function _mouseDown(evt) { + if (this.contextMenuOpen) { + this.contextMenuOpen = false; + evt.preventDefault(); + return; + } + + if (evt.button === 0) { + var isInternalLink = evt.target.href && evt.target.classList.contains("internalLink"); + + if (!isInternalLink) { + evt.preventDefault(); + + if (evt.shiftKey) { + this.pdfViewer.previousPage(); + } else { + this.pdfViewer.nextPage(); + } + } + } + } + }, { + key: "_contextMenu", + value: function _contextMenu() { + this.contextMenuOpen = true; + } + }, { + key: "_showControls", + value: function _showControls() { + var _this4 = this; + + if (this.controlsTimeout) { + clearTimeout(this.controlsTimeout); + } else { + this.container.classList.add(CONTROLS_SELECTOR); + } + + this.controlsTimeout = setTimeout(function () { + _this4.container.classList.remove(CONTROLS_SELECTOR); + + delete _this4.controlsTimeout; + }, DELAY_BEFORE_HIDING_CONTROLS); + } + }, { + key: "_hideControls", + value: function _hideControls() { + if (!this.controlsTimeout) { + return; + } + + clearTimeout(this.controlsTimeout); + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + } + }, { + key: "_resetMouseScrollState", + value: function _resetMouseScrollState() { + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + } + }, { + key: "_touchSwipe", + value: function _touchSwipe(evt) { + if (!this.active) { + return; + } + + if (evt.touches.length > 1) { + this.touchSwipeState = null; + return; + } + + switch (evt.type) { + case "touchstart": + this.touchSwipeState = { + startX: evt.touches[0].pageX, + startY: evt.touches[0].pageY, + endX: evt.touches[0].pageX, + endY: evt.touches[0].pageY + }; + break; + + case "touchmove": + if (this.touchSwipeState === null) { + return; + } + + this.touchSwipeState.endX = evt.touches[0].pageX; + this.touchSwipeState.endY = evt.touches[0].pageY; + evt.preventDefault(); + break; + + case "touchend": + if (this.touchSwipeState === null) { + return; + } + + var delta = 0; + var dx = this.touchSwipeState.endX - this.touchSwipeState.startX; + var dy = this.touchSwipeState.endY - this.touchSwipeState.startY; + var absAngle = Math.abs(Math.atan2(dy, dx)); + + if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) { + delta = dx; + } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) { + delta = dy; + } + + if (delta > 0) { + this.pdfViewer.previousPage(); + } else if (delta < 0) { + this.pdfViewer.nextPage(); + } + + break; + } + } + }, { + key: "_addWindowListeners", + value: function _addWindowListeners() { + this.showControlsBind = this._showControls.bind(this); + this.mouseDownBind = this._mouseDown.bind(this); + this.mouseWheelBind = this._mouseWheel.bind(this); + this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this); + this.contextMenuBind = this._contextMenu.bind(this); + this.touchSwipeBind = this._touchSwipe.bind(this); + window.addEventListener("mousemove", this.showControlsBind); + window.addEventListener("mousedown", this.mouseDownBind); + window.addEventListener("wheel", this.mouseWheelBind, { + passive: false + }); + window.addEventListener("keydown", this.resetMouseScrollStateBind); + window.addEventListener("contextmenu", this.contextMenuBind); + window.addEventListener("touchstart", this.touchSwipeBind); + window.addEventListener("touchmove", this.touchSwipeBind); + window.addEventListener("touchend", this.touchSwipeBind); + } + }, { + key: "_removeWindowListeners", + value: function _removeWindowListeners() { + window.removeEventListener("mousemove", this.showControlsBind); + window.removeEventListener("mousedown", this.mouseDownBind); + window.removeEventListener("wheel", this.mouseWheelBind, { + passive: false + }); + window.removeEventListener("keydown", this.resetMouseScrollStateBind); + window.removeEventListener("contextmenu", this.contextMenuBind); + window.removeEventListener("touchstart", this.touchSwipeBind); + window.removeEventListener("touchmove", this.touchSwipeBind); + window.removeEventListener("touchend", this.touchSwipeBind); + delete this.showControlsBind; + delete this.mouseDownBind; + delete this.mouseWheelBind; + delete this.resetMouseScrollStateBind; + delete this.contextMenuBind; + delete this.touchSwipeBind; + } + }, { + key: "_fullscreenChange", + value: function _fullscreenChange() { + if (this.isFullscreen) { + this._enter(); + } else { + this._exit(); + } + } + }, { + key: "_addFullscreenChangeListeners", + value: function _addFullscreenChangeListeners() { + this.fullscreenChangeBind = this._fullscreenChange.bind(this); + window.addEventListener("fullscreenchange", this.fullscreenChangeBind); + window.addEventListener("mozfullscreenchange", this.fullscreenChangeBind); + window.addEventListener("webkitfullscreenchange", this.fullscreenChangeBind); + } + }, { + key: "_removeFullscreenChangeListeners", + value: function _removeFullscreenChangeListeners() { + window.removeEventListener("fullscreenchange", this.fullscreenChangeBind); + window.removeEventListener("mozfullscreenchange", this.fullscreenChangeBind); + window.removeEventListener("webkitfullscreenchange", this.fullscreenChangeBind); + delete this.fullscreenChangeBind; + } + }]); + + return PDFPresentationMode; + }(); + + exports.PDFPresentationMode = PDFPresentationMode; + + /***/ + }), + /* 24 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFScriptingManager = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _pdfjsLib = __webpack_require__(7); + + var _ui_utils = __webpack_require__(6); + + var _pdf_rendering_queue = __webpack_require__(10); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + return keys; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + if (i % 2) { + ownKeys(Object(source), true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + return target; + } + + 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 _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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 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); + return Constructor; + } + + var PDFScriptingManager = /*#__PURE__*/function () { + function PDFScriptingManager(_ref) { + var eventBus = _ref.eventBus, + _ref$sandboxBundleSrc = _ref.sandboxBundleSrc, + sandboxBundleSrc = _ref$sandboxBundleSrc === void 0 ? null : _ref$sandboxBundleSrc, + _ref$scriptingFactory = _ref.scriptingFactory, + scriptingFactory = _ref$scriptingFactory === void 0 ? null : _ref$scriptingFactory, + _ref$docPropertiesLoo = _ref.docPropertiesLookup, + docPropertiesLookup = _ref$docPropertiesLoo === void 0 ? null : _ref$docPropertiesLoo; + + _classCallCheck(this, PDFScriptingManager); + + this._pdfDocument = null; + this._pdfViewer = null; + this._closeCapability = null; + this._destroyCapability = null; + this._scripting = null; + this._mouseState = Object.create(null); + this._pageEventsReady = false; + this._ready = false; + this._eventBus = eventBus; + this._sandboxBundleSrc = sandboxBundleSrc; + this._scriptingFactory = scriptingFactory; + this._docPropertiesLookup = docPropertiesLookup; + } + + _createClass(PDFScriptingManager, [{ + key: "setViewer", + value: function setViewer(pdfViewer) { + this._pdfViewer = pdfViewer; + } + }, { + key: "setDocument", + value: function () { + var _setDocument = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(pdfDocument) { + var _this = this, + _this$_scripting3; + + var _yield$Promise$all, _yield$Promise$all2, objects, calculationOrder, docActions, + _iterator, _step, _step$value, name, listener, _iterator2, _step2, _step2$value, _name, + _listener, docProperties; + + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + if (!this._pdfDocument) { + _context2.next = 3; + break; + } + + _context2.next = 3; + return this._destroyScripting(); + + case 3: + this._pdfDocument = pdfDocument; + + if (pdfDocument) { + _context2.next = 6; + break; + } + + return _context2.abrupt("return"); + + case 6: + _context2.next = 8; + return Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]); + + case 8: + _yield$Promise$all = _context2.sent; + _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3); + objects = _yield$Promise$all2[0]; + calculationOrder = _yield$Promise$all2[1]; + docActions = _yield$Promise$all2[2]; + + if (!(!objects && !docActions)) { + _context2.next = 17; + break; + } + + _context2.next = 16; + return this._destroyScripting(); + + case 16: + return _context2.abrupt("return"); + + case 17: + if (!(pdfDocument !== this._pdfDocument)) { + _context2.next = 19; + break; + } + + return _context2.abrupt("return"); + + case 19: + this._scripting = this._createScripting(); + + this._internalEvents.set("updatefromsandbox", function (event) { + if ((event === null || event === void 0 ? void 0 : event.source) !== window) { + return; + } + + _this._updateFromSandbox(event.detail); + }); + + this._internalEvents.set("dispatcheventinsandbox", function (event) { + var _this$_scripting; + + (_this$_scripting = _this._scripting) === null || _this$_scripting === void 0 ? void 0 : _this$_scripting.dispatchEventInSandbox(event.detail); + }); + + this._internalEvents.set("pagechanging", function (_ref2) { + var pageNumber = _ref2.pageNumber, + previous = _ref2.previous; + + if (pageNumber === previous) { + return; + } + + _this._dispatchPageClose(previous); + + _this._dispatchPageOpen(pageNumber); + }); + + this._internalEvents.set("pagerendered", function (_ref3) { + var pageNumber = _ref3.pageNumber; + + if (!_this._pageOpenPending.has(pageNumber)) { + return; + } + + if (pageNumber !== _this._pdfViewer.currentPageNumber) { + return; + } + + _this._dispatchPageOpen(pageNumber); + }); + + this._internalEvents.set("pagesdestroy", /*#__PURE__*/function () { + var _ref4 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(event) { + var _this$_scripting2, _this$_closeCapabilit; + + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return _this._dispatchPageClose(_this._pdfViewer.currentPageNumber); + + case 2: + _context.next = 4; + return (_this$_scripting2 = _this._scripting) === null || _this$_scripting2 === void 0 ? void 0 : _this$_scripting2.dispatchEventInSandbox({ + id: "doc", + name: "WillClose" + }); + + case 4: + (_this$_closeCapabilit = _this._closeCapability) === null || _this$_closeCapabilit === void 0 ? void 0 : _this$_closeCapabilit.resolve(); + + case 5: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + return function (_x2) { + return _ref4.apply(this, arguments); + }; + }()); + + this._domEvents.set("mousedown", function (event) { + _this._mouseState.isDown = true; + }); + + this._domEvents.set("mouseup", function (event) { + _this._mouseState.isDown = false; + }); + + _iterator = _createForOfIteratorHelper(this._internalEvents); + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + _step$value = _slicedToArray(_step.value, 2), name = _step$value[0], listener = _step$value[1]; + + this._eventBus._on(name, listener); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + _iterator2 = _createForOfIteratorHelper(this._domEvents); + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + _step2$value = _slicedToArray(_step2.value, 2), _name = _step2$value[0], _listener = _step2$value[1]; + window.addEventListener(_name, _listener); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + _context2.prev = 31; + _context2.next = 34; + return this._getDocProperties(); + + case 34: + docProperties = _context2.sent; + + if (!(pdfDocument !== this._pdfDocument)) { + _context2.next = 37; + break; + } + + return _context2.abrupt("return"); + + case 37: + _context2.next = 39; + return this._scripting.createSandbox({ + objects: objects, + calculationOrder: calculationOrder, + appInfo: { + platform: navigator.platform, + language: navigator.language + }, + docInfo: _objectSpread(_objectSpread({}, docProperties), {}, { + actions: docActions + }) + }); + + case 39: + this._eventBus.dispatch("sandboxcreated", { + source: this + }); + + _context2.next = 48; + break; + + case 42: + _context2.prev = 42; + _context2.t0 = _context2["catch"](31); + console.error("PDFScriptingManager.setDocument: \"".concat(_context2.t0 === null || _context2.t0 === void 0 ? void 0 : _context2.t0.message, "\".")); + _context2.next = 47; + return this._destroyScripting(); + + case 47: + return _context2.abrupt("return"); + + case 48: + _context2.next = 50; + return (_this$_scripting3 = this._scripting) === null || _this$_scripting3 === void 0 ? void 0 : _this$_scripting3.dispatchEventInSandbox({ + id: "doc", + name: "Open" + }); + + case 50: + _context2.next = 52; + return this._dispatchPageOpen(this._pdfViewer.currentPageNumber, true); + + case 52: + Promise.resolve().then(function () { + if (pdfDocument === _this._pdfDocument) { + _this._ready = true; + } + }); + + case 53: + case "end": + return _context2.stop(); + } + } + }, _callee2, this, [[31, 42]]); + })); + + function setDocument(_x) { + return _setDocument.apply(this, arguments); + } + + return setDocument; + }() + }, { + key: "dispatchWillSave", + value: function () { + var _dispatchWillSave = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(detail) { + var _this$_scripting4; + + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + return _context3.abrupt("return", (_this$_scripting4 = this._scripting) === null || _this$_scripting4 === void 0 ? void 0 : _this$_scripting4.dispatchEventInSandbox({ + id: "doc", + name: "WillSave" + })); + + case 1: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function dispatchWillSave(_x3) { + return _dispatchWillSave.apply(this, arguments); + } + + return dispatchWillSave; + }() + }, { + key: "dispatchDidSave", + value: function () { + var _dispatchDidSave = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(detail) { + var _this$_scripting5; + + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + return _context4.abrupt("return", (_this$_scripting5 = this._scripting) === null || _this$_scripting5 === void 0 ? void 0 : _this$_scripting5.dispatchEventInSandbox({ + id: "doc", + name: "DidSave" + })); + + case 1: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + + function dispatchDidSave(_x4) { + return _dispatchDidSave.apply(this, arguments); + } + + return dispatchDidSave; + }() + }, { + key: "dispatchWillPrint", + value: function () { + var _dispatchWillPrint = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5(detail) { + var _this$_scripting6; + + return _regenerator["default"].wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + return _context5.abrupt("return", (_this$_scripting6 = this._scripting) === null || _this$_scripting6 === void 0 ? void 0 : _this$_scripting6.dispatchEventInSandbox({ + id: "doc", + name: "WillPrint" + })); + + case 1: + case "end": + return _context5.stop(); + } + } + }, _callee5, this); + })); + + function dispatchWillPrint(_x5) { + return _dispatchWillPrint.apply(this, arguments); + } + + return dispatchWillPrint; + }() + }, { + key: "dispatchDidPrint", + value: function () { + var _dispatchDidPrint = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6(detail) { + var _this$_scripting7; + + return _regenerator["default"].wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + return _context6.abrupt("return", (_this$_scripting7 = this._scripting) === null || _this$_scripting7 === void 0 ? void 0 : _this$_scripting7.dispatchEventInSandbox({ + id: "doc", + name: "DidPrint" + })); + + case 1: + case "end": + return _context6.stop(); + } + } + }, _callee6, this); + })); + + function dispatchDidPrint(_x6) { + return _dispatchDidPrint.apply(this, arguments); + } + + return dispatchDidPrint; + }() + }, { + key: "mouseState", + get: function get() { + return this._mouseState; + } + }, { + key: "destroyPromise", + get: function get() { + var _this$_destroyCapabil; + + return ((_this$_destroyCapabil = this._destroyCapability) === null || _this$_destroyCapabil === void 0 ? void 0 : _this$_destroyCapabil.promise) || null; + } + }, { + key: "ready", + get: function get() { + return this._ready; + } + }, { + key: "_internalEvents", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "_internalEvents", new Map()); + } + }, { + key: "_domEvents", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "_domEvents", new Map()); + } + }, { + key: "_pageOpenPending", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "_pageOpenPending", new Set()); + } + }, { + key: "_visitedPages", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "_visitedPages", new Map()); + } + }, { + key: "_updateFromSandbox", + value: function () { + var _updateFromSandbox2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee7(detail) { + var isInPresentationMode, id, command, value, element, _this$_pdfDocument; + + return _regenerator["default"].wrap(function _callee7$(_context7) { + while (1) { + switch (_context7.prev = _context7.next) { + case 0: + isInPresentationMode = this._pdfViewer.isInPresentationMode || this._pdfViewer.isChangingPresentationMode; + id = detail.id, command = detail.command, value = detail.value; + + if (id) { + _context7.next = 25; + break; + } + + _context7.t0 = command; + _context7.next = _context7.t0 === "clear" ? 6 : _context7.t0 === "error" ? 8 : _context7.t0 === "layout" ? 10 : _context7.t0 === "page-num" ? 12 : _context7.t0 === "print" ? 14 : _context7.t0 === "println" ? 18 : _context7.t0 === "zoom" ? 20 : 24; + break; + + case 6: + console.clear(); + return _context7.abrupt("break", 24); + + case 8: + console.error(value); + return _context7.abrupt("break", 24); + + case 10: + this._pdfViewer.spreadMode = (0, _ui_utils.apiPageLayoutToSpreadMode)(value); + return _context7.abrupt("break", 24); + + case 12: + this._pdfViewer.currentPageNumber = value + 1; + return _context7.abrupt("break", 24); + + case 14: + _context7.next = 16; + return this._pdfViewer.pagesPromise; + + case 16: + this._eventBus.dispatch("print", { + source: this + }); + + return _context7.abrupt("break", 24); + + case 18: + console.log(value); + return _context7.abrupt("break", 24); + + case 20: + if (!isInPresentationMode) { + _context7.next = 22; + break; + } + + return _context7.abrupt("return"); + + case 22: + this._pdfViewer.currentScaleValue = value; + return _context7.abrupt("break", 24); + + case 24: + return _context7.abrupt("return"); + + case 25: + if (!isInPresentationMode) { + _context7.next = 28; + break; + } + + if (!detail.focus) { + _context7.next = 28; + break; + } + + return _context7.abrupt("return"); + + case 28: + element = document.getElementById(id); + + if (element) { + element.dispatchEvent(new CustomEvent("updatefromsandbox", { + detail: detail + })); + } else { + delete detail.id; + (_this$_pdfDocument = this._pdfDocument) === null || _this$_pdfDocument === void 0 ? void 0 : _this$_pdfDocument.annotationStorage.setValue(id, detail); + } + + case 30: + case "end": + return _context7.stop(); + } + } + }, _callee7, this); + })); + + function _updateFromSandbox(_x7) { + return _updateFromSandbox2.apply(this, arguments); + } + + return _updateFromSandbox; + }() + }, { + key: "_dispatchPageOpen", + value: function () { + var _dispatchPageOpen2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee9(pageNumber) { + var _this2 = this; + + var initialize, + pdfDocument, + visitedPages, + pageView, + actionsPromise, + _args9 = arguments; + return _regenerator["default"].wrap(function _callee9$(_context9) { + while (1) { + switch (_context9.prev = _context9.next) { + case 0: + initialize = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : false; + pdfDocument = this._pdfDocument, visitedPages = this._visitedPages; + + if (initialize) { + this._closeCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._pageEventsReady = true; + } + + if (this._pageEventsReady) { + _context9.next = 5; + break; + } + + return _context9.abrupt("return"); + + case 5: + pageView = this._pdfViewer.getPageView(pageNumber - 1); + + if (!((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) !== _pdf_rendering_queue.RenderingStates.FINISHED)) { + _context9.next = 9; + break; + } + + this._pageOpenPending.add(pageNumber); + + return _context9.abrupt("return"); + + case 9: + this._pageOpenPending["delete"](pageNumber); + + actionsPromise = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee8() { + var _pageView$pdfPage, _this2$_scripting; + + var actions; + return _regenerator["default"].wrap(function _callee8$(_context8) { + while (1) { + switch (_context8.prev = _context8.next) { + case 0: + _context8.next = 2; + return !visitedPages.has(pageNumber) ? (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.getJSActions() : null; + + case 2: + actions = _context8.sent; + + if (!(pdfDocument !== _this2._pdfDocument)) { + _context8.next = 5; + break; + } + + return _context8.abrupt("return"); + + case 5: + _context8.next = 7; + return (_this2$_scripting = _this2._scripting) === null || _this2$_scripting === void 0 ? void 0 : _this2$_scripting.dispatchEventInSandbox({ + id: "page", + name: "PageOpen", + pageNumber: pageNumber, + actions: actions + }); + + case 7: + case "end": + return _context8.stop(); + } + } + }, _callee8); + }))(); + visitedPages.set(pageNumber, actionsPromise); + + case 12: + case "end": + return _context9.stop(); + } + } + }, _callee9, this); + })); + + function _dispatchPageOpen(_x8) { + return _dispatchPageOpen2.apply(this, arguments); + } + + return _dispatchPageOpen; + }() + }, { + key: "_dispatchPageClose", + value: function () { + var _dispatchPageClose2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee10(pageNumber) { + var _this$_scripting8; + + var pdfDocument, visitedPages, actionsPromise; + return _regenerator["default"].wrap(function _callee10$(_context10) { + while (1) { + switch (_context10.prev = _context10.next) { + case 0: + pdfDocument = this._pdfDocument, visitedPages = this._visitedPages; + + if (this._pageEventsReady) { + _context10.next = 3; + break; + } + + return _context10.abrupt("return"); + + case 3: + if (!this._pageOpenPending.has(pageNumber)) { + _context10.next = 5; + break; + } + + return _context10.abrupt("return"); + + case 5: + actionsPromise = visitedPages.get(pageNumber); + + if (actionsPromise) { + _context10.next = 8; + break; + } + + return _context10.abrupt("return"); + + case 8: + visitedPages.set(pageNumber, null); + _context10.next = 11; + return actionsPromise; + + case 11: + if (!(pdfDocument !== this._pdfDocument)) { + _context10.next = 13; + break; + } + + return _context10.abrupt("return"); + + case 13: + _context10.next = 15; + return (_this$_scripting8 = this._scripting) === null || _this$_scripting8 === void 0 ? void 0 : _this$_scripting8.dispatchEventInSandbox({ + id: "page", + name: "PageClose", + pageNumber: pageNumber + }); + + case 15: + case "end": + return _context10.stop(); + } + } + }, _callee10, this); + })); + + function _dispatchPageClose(_x9) { + return _dispatchPageClose2.apply(this, arguments); + } + + return _dispatchPageClose; + }() + }, { + key: "_getDocProperties", + value: function () { + var _getDocProperties2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee11() { + return _regenerator["default"].wrap(function _callee11$(_context11) { + while (1) { + switch (_context11.prev = _context11.next) { + case 0: + if (!this._docPropertiesLookup) { + _context11.next = 2; + break; + } + + return _context11.abrupt("return", this._docPropertiesLookup(this._pdfDocument)); + + case 2: + throw new Error("_getDocProperties: Unable to lookup properties."); + + case 3: + case "end": + return _context11.stop(); + } + } + }, _callee11, this); + })); + + function _getDocProperties() { + return _getDocProperties2.apply(this, arguments); + } + + return _getDocProperties; + }() + }, { + key: "_createScripting", + value: function _createScripting() { + this._destroyCapability = (0, _pdfjsLib.createPromiseCapability)(); + + if (this._scripting) { + throw new Error("_createScripting: Scripting already exists."); + } + + if (this._scriptingFactory) { + return this._scriptingFactory.createScripting({ + sandboxBundleSrc: this._sandboxBundleSrc + }); + } + + throw new Error("_createScripting: Cannot create scripting."); + } + }, { + key: "_destroyScripting", + value: function () { + var _destroyScripting2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee12() { + var _this$_destroyCapabil3; + + var _this$_destroyCapabil2, _iterator3, _step3, _step3$value, name, listener, _iterator4, + _step4, _step4$value, _name2, _listener2; + + return _regenerator["default"].wrap(function _callee12$(_context12) { + while (1) { + switch (_context12.prev = _context12.next) { + case 0: + if (this._scripting) { + _context12.next = 4; + break; + } + + this._pdfDocument = null; + (_this$_destroyCapabil2 = this._destroyCapability) === null || _this$_destroyCapabil2 === void 0 ? void 0 : _this$_destroyCapabil2.resolve(); + return _context12.abrupt("return"); + + case 4: + if (!this._closeCapability) { + _context12.next = 8; + break; + } + + _context12.next = 7; + return Promise.race([this._closeCapability.promise, new Promise(function (resolve) { + setTimeout(resolve, 1000); + })])["catch"](function (reason) { + }); + + case 7: + this._closeCapability = null; + + case 8: + this._pdfDocument = null; + _context12.prev = 9; + _context12.next = 12; + return this._scripting.destroySandbox(); + + case 12: + _context12.next = 16; + break; + + case 14: + _context12.prev = 14; + _context12.t0 = _context12["catch"](9); + + case 16: + _iterator3 = _createForOfIteratorHelper(this._internalEvents); + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + _step3$value = _slicedToArray(_step3.value, 2), name = _step3$value[0], listener = _step3$value[1]; + + this._eventBus._off(name, listener); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + + this._internalEvents.clear(); + + _iterator4 = _createForOfIteratorHelper(this._domEvents); + + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + _step4$value = _slicedToArray(_step4.value, 2), _name2 = _step4$value[0], _listener2 = _step4$value[1]; + window.removeEventListener(_name2, _listener2); + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + + this._domEvents.clear(); + + this._pageOpenPending.clear(); + + this._visitedPages.clear(); + + this._scripting = null; + delete this._mouseState.isDown; + this._pageEventsReady = false; + this._ready = false; + (_this$_destroyCapabil3 = this._destroyCapability) === null || _this$_destroyCapabil3 === void 0 ? void 0 : _this$_destroyCapabil3.resolve(); + + case 29: + case "end": + return _context12.stop(); + } + } + }, _callee12, this, [[9, 14]]); + })); + + function _destroyScripting() { + return _destroyScripting2.apply(this, arguments); + } + + return _destroyScripting; + }() + }]); + + return PDFScriptingManager; + }(); + + exports.PDFScriptingManager = PDFScriptingManager; + + /***/ + }), + /* 25 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFSidebar = void 0; + + var _ui_utils = __webpack_require__(6); + + var _pdf_rendering_queue = __webpack_require__(10); + + 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); + return Constructor; + } + + var UI_NOTIFICATION_CLASS = "pdfSidebarNotification"; + + var PDFSidebar = /*#__PURE__*/function () { + function PDFSidebar(_ref) { + var elements = _ref.elements, + pdfViewer = _ref.pdfViewer, + pdfThumbnailViewer = _ref.pdfThumbnailViewer, + eventBus = _ref.eventBus, + l10n = _ref.l10n; + + _classCallCheck(this, PDFSidebar); + + this.isOpen = false; + this.active = _ui_utils.SidebarView.THUMBS; + this.isInitialViewSet = false; + this.onToggled = null; + this.pdfViewer = pdfViewer; + this.pdfThumbnailViewer = pdfThumbnailViewer; + this.outerContainer = elements.outerContainer; + this.viewerContainer = elements.viewerContainer; + this.toggleButton = elements.toggleButton; + this.thumbnailButton = elements.thumbnailButton; + this.outlineButton = elements.outlineButton; + this.attachmentsButton = elements.attachmentsButton; + this.layersButton = elements.layersButton; + this.thumbnailView = elements.thumbnailView; + this.outlineView = elements.outlineView; + this.attachmentsView = elements.attachmentsView; + this.layersView = elements.layersView; + this._outlineOptionsContainer = elements.outlineOptionsContainer; + this._currentOutlineItemButton = elements.currentOutlineItemButton; + this.eventBus = eventBus; + this.l10n = l10n; + + this._addEventListeners(); + } + + _createClass(PDFSidebar, [{ + key: "reset", + value: function reset() { + this.isInitialViewSet = false; + + this._hideUINotification(true); + + this.switchView(_ui_utils.SidebarView.THUMBS); + this.outlineButton.disabled = false; + this.attachmentsButton.disabled = false; + this.layersButton.disabled = false; + this._currentOutlineItemButton.disabled = true; + } + }, { + key: "visibleView", + get: function get() { + return this.isOpen ? this.active : _ui_utils.SidebarView.NONE; + } + }, { + key: "isThumbnailViewVisible", + get: function get() { + return this.isOpen && this.active === _ui_utils.SidebarView.THUMBS; + } + }, { + key: "isOutlineViewVisible", + get: function get() { + return this.isOpen && this.active === _ui_utils.SidebarView.OUTLINE; + } + }, { + key: "isAttachmentsViewVisible", + get: function get() { + return this.isOpen && this.active === _ui_utils.SidebarView.ATTACHMENTS; + } + }, { + key: "isLayersViewVisible", + get: function get() { + return this.isOpen && this.active === _ui_utils.SidebarView.LAYERS; + } + }, { + key: "setInitialView", + value: function setInitialView() { + var view = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _ui_utils.SidebarView.NONE; + + if (this.isInitialViewSet) { + return; + } + + this.isInitialViewSet = true; + + if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) { + this._dispatchEvent(); + + return; + } + + if (!this._switchView(view, true)) { + this._dispatchEvent(); + } + } + }, { + key: "switchView", + value: function switchView(view) { + var forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + this._switchView(view, forceOpen); + } + }, { + key: "_switchView", + value: function _switchView(view) { + var forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var isViewChanged = view !== this.active; + var shouldForceRendering = false; + + switch (view) { + case _ui_utils.SidebarView.NONE: + if (this.isOpen) { + this.close(); + return true; + } + + return false; + + case _ui_utils.SidebarView.THUMBS: + if (this.isOpen && isViewChanged) { + shouldForceRendering = true; + } + + break; + + case _ui_utils.SidebarView.OUTLINE: + if (this.outlineButton.disabled) { + return false; + } + + break; + + case _ui_utils.SidebarView.ATTACHMENTS: + if (this.attachmentsButton.disabled) { + return false; + } + + break; + + case _ui_utils.SidebarView.LAYERS: + if (this.layersButton.disabled) { + return false; + } + + break; + + default: + console.error("PDFSidebar._switchView: \"".concat(view, "\" is not a valid view.")); + return false; + } + + this.active = view; + this.thumbnailButton.classList.toggle("toggled", view === _ui_utils.SidebarView.THUMBS); + this.outlineButton.classList.toggle("toggled", view === _ui_utils.SidebarView.OUTLINE); + this.attachmentsButton.classList.toggle("toggled", view === _ui_utils.SidebarView.ATTACHMENTS); + this.layersButton.classList.toggle("toggled", view === _ui_utils.SidebarView.LAYERS); + this.thumbnailView.classList.toggle("hidden", view !== _ui_utils.SidebarView.THUMBS); + this.outlineView.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE); + this.attachmentsView.classList.toggle("hidden", view !== _ui_utils.SidebarView.ATTACHMENTS); + this.layersView.classList.toggle("hidden", view !== _ui_utils.SidebarView.LAYERS); + + this._outlineOptionsContainer.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE); + + if (forceOpen && !this.isOpen) { + this.open(); + return true; + } + + if (shouldForceRendering) { + this._updateThumbnailViewer(); + + this._forceRendering(); + } + + if (isViewChanged) { + this._dispatchEvent(); + } + + return isViewChanged; + } + }, { + key: "open", + value: function open() { + if (this.isOpen) { + return; + } + + this.isOpen = true; + this.toggleButton.classList.add("toggled"); + this.toggleButton.setAttribute("aria-expanded", "true"); + this.outerContainer.classList.add("sidebarMoving", "sidebarOpen"); + + if (this.active === _ui_utils.SidebarView.THUMBS) { + this._updateThumbnailViewer(); + } + + this._forceRendering(); + + this._dispatchEvent(); + + this._hideUINotification(); + } + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + + this.isOpen = false; + this.toggleButton.classList.remove("toggled"); + this.toggleButton.setAttribute("aria-expanded", "false"); + this.outerContainer.classList.add("sidebarMoving"); + this.outerContainer.classList.remove("sidebarOpen"); + + this._forceRendering(); + + this._dispatchEvent(); + } + }, { + key: "toggle", + value: function toggle() { + if (this.isOpen) { + this.close(); + } else { + this.open(); + } + } + }, { + key: "_dispatchEvent", + value: function _dispatchEvent() { + this.eventBus.dispatch("sidebarviewchanged", { + source: this, + view: this.visibleView + }); + } + }, { + key: "_forceRendering", + value: function _forceRendering() { + if (this.onToggled) { + this.onToggled(); + } else { + this.pdfViewer.forceRendering(); + this.pdfThumbnailViewer.forceRendering(); + } + } + }, { + key: "_updateThumbnailViewer", + value: function _updateThumbnailViewer() { + var pdfViewer = this.pdfViewer, + pdfThumbnailViewer = this.pdfThumbnailViewer; + var pagesCount = pdfViewer.pagesCount; + + for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) { + var pageView = pdfViewer.getPageView(pageIndex); + + if ((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) === _pdf_rendering_queue.RenderingStates.FINISHED) { + var thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex); + thumbnailView.setImage(pageView); + } + } + + pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); + } + }, { + key: "_showUINotification", + value: function _showUINotification() { + var _this = this; + + this.l10n.get("toggle_sidebar_notification2.title").then(function (msg) { + _this.toggleButton.title = msg; + }); + + if (!this.isOpen) { + this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); + } + } + }, { + key: "_hideUINotification", + value: function _hideUINotification() { + var _this2 = this; + + var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (this.isOpen || reset) { + this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); + } + + if (reset) { + this.l10n.get("toggle_sidebar.title").then(function (msg) { + _this2.toggleButton.title = msg; + }); + } + } + }, { + key: "_addEventListeners", + value: function _addEventListeners() { + var _this3 = this; + + this.viewerContainer.addEventListener("transitionend", function (evt) { + if (evt.target === _this3.viewerContainer) { + _this3.outerContainer.classList.remove("sidebarMoving"); + } + }); + this.toggleButton.addEventListener("click", function () { + _this3.toggle(); + }); + this.thumbnailButton.addEventListener("click", function () { + _this3.switchView(_ui_utils.SidebarView.THUMBS); + }); + this.outlineButton.addEventListener("click", function () { + _this3.switchView(_ui_utils.SidebarView.OUTLINE); + }); + this.outlineButton.addEventListener("dblclick", function () { + _this3.eventBus.dispatch("toggleoutlinetree", { + source: _this3 + }); + }); + this.attachmentsButton.addEventListener("click", function () { + _this3.switchView(_ui_utils.SidebarView.ATTACHMENTS); + }); + this.layersButton.addEventListener("click", function () { + _this3.switchView(_ui_utils.SidebarView.LAYERS); + }); + this.layersButton.addEventListener("dblclick", function () { + _this3.eventBus.dispatch("resetlayers", { + source: _this3 + }); + }); + + this._currentOutlineItemButton.addEventListener("click", function () { + _this3.eventBus.dispatch("currentoutlineitem", { + source: _this3 + }); + }); + + var onTreeLoaded = function onTreeLoaded(count, button, view) { + button.disabled = !count; + + if (count) { + _this3._showUINotification(); + } else if (_this3.active === view) { + _this3.switchView(_ui_utils.SidebarView.THUMBS); + } + }; + + this.eventBus._on("outlineloaded", function (evt) { + onTreeLoaded(evt.outlineCount, _this3.outlineButton, _ui_utils.SidebarView.OUTLINE); + + if (evt.enableCurrentOutlineItemButton) { + _this3.pdfViewer.pagesPromise.then(function () { + _this3._currentOutlineItemButton.disabled = !_this3.isInitialViewSet; + }); + } + }); + + this.eventBus._on("attachmentsloaded", function (evt) { + onTreeLoaded(evt.attachmentsCount, _this3.attachmentsButton, _ui_utils.SidebarView.ATTACHMENTS); + }); + + this.eventBus._on("layersloaded", function (evt) { + onTreeLoaded(evt.layersCount, _this3.layersButton, _ui_utils.SidebarView.LAYERS); + }); + + this.eventBus._on("presentationmodechanged", function (evt) { + if (evt.state === _ui_utils.PresentationModeState.NORMAL && _this3.isThumbnailViewVisible) { + _this3._updateThumbnailViewer(); + } + }); + } + }]); + + return PDFSidebar; + }(); + + exports.PDFSidebar = PDFSidebar; + + /***/ + }), + /* 26 */ + /***/ ((__unused_webpack_module, exports) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFSidebarResizer = void 0; + + 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); + return Constructor; + } + + var SIDEBAR_WIDTH_VAR = "--sidebar-width"; + var SIDEBAR_MIN_WIDTH = 200; + var SIDEBAR_RESIZING_CLASS = "sidebarResizing"; + + var PDFSidebarResizer = /*#__PURE__*/function () { + function PDFSidebarResizer(options, eventBus, l10n) { + var _this = this; + + _classCallCheck(this, PDFSidebarResizer); + + this.isRTL = false; + this.sidebarOpen = false; + this.doc = document.documentElement; + this._width = null; + this._outerContainerWidth = null; + this._boundEvents = Object.create(null); + this.outerContainer = options.outerContainer; + this.resizer = options.resizer; + this.eventBus = eventBus; + l10n.getDirection().then(function (dir) { + _this.isRTL = dir === "rtl"; + }); + + this._addEventListeners(); + } + + _createClass(PDFSidebarResizer, [{ + key: "outerContainerWidth", + get: function get() { + return this._outerContainerWidth || (this._outerContainerWidth = this.outerContainer.clientWidth); + } + }, { + key: "_updateWidth", + value: function _updateWidth() { + var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var maxWidth = Math.floor(this.outerContainerWidth / 2); + + if (width > maxWidth) { + width = maxWidth; + } + + if (width < SIDEBAR_MIN_WIDTH) { + width = SIDEBAR_MIN_WIDTH; + } + + if (width === this._width) { + return false; + } + + this._width = width; + this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, "".concat(width, "px")); + return true; + } + }, { + key: "_mouseMove", + value: function _mouseMove(evt) { + var width = evt.clientX; + + if (this.isRTL) { + width = this.outerContainerWidth - width; + } + + this._updateWidth(width); + } + }, { + key: "_mouseUp", + value: function _mouseUp(evt) { + this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + this.eventBus.dispatch("resize", { + source: this + }); + var _boundEvents = this._boundEvents; + window.removeEventListener("mousemove", _boundEvents.mouseMove); + window.removeEventListener("mouseup", _boundEvents.mouseUp); + } + }, { + key: "_addEventListeners", + value: function _addEventListeners() { + var _this2 = this; + + var _boundEvents = this._boundEvents; + _boundEvents.mouseMove = this._mouseMove.bind(this); + _boundEvents.mouseUp = this._mouseUp.bind(this); + this.resizer.addEventListener("mousedown", function (evt) { + if (evt.button !== 0) { + return; + } + + _this2.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + + window.addEventListener("mousemove", _boundEvents.mouseMove); + window.addEventListener("mouseup", _boundEvents.mouseUp); + }); + + this.eventBus._on("sidebarviewchanged", function (evt) { + _this2.sidebarOpen = !!(evt !== null && evt !== void 0 && evt.view); + }); + + this.eventBus._on("resize", function (evt) { + if ((evt === null || evt === void 0 ? void 0 : evt.source) !== window) { + return; + } + + _this2._outerContainerWidth = null; + + if (!_this2._width) { + return; + } + + if (!_this2.sidebarOpen) { + _this2._updateWidth(_this2._width); + + return; + } + + _this2.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + + var updated = _this2._updateWidth(_this2._width); + + Promise.resolve().then(function () { + _this2.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + + if (updated) { + _this2.eventBus.dispatch("resize", { + source: _this2 + }); + } + }); + }); + } + }]); + + return PDFSidebarResizer; + }(); + + exports.PDFSidebarResizer = PDFSidebarResizer; + + /***/ + }), + /* 27 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFThumbnailViewer = void 0; + + var _ui_utils = __webpack_require__(6); + + var _pdf_thumbnail_view = __webpack_require__(28); + + var _pdf_rendering_queue = __webpack_require__(10); + + 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); + return Constructor; + } + + var THUMBNAIL_SCROLL_MARGIN = -19; + var THUMBNAIL_SELECTED_CLASS = "selected"; + + var PDFThumbnailViewer = /*#__PURE__*/function () { + function PDFThumbnailViewer(_ref) { + var _this = this; + + var container = _ref.container, + eventBus = _ref.eventBus, + linkService = _ref.linkService, + renderingQueue = _ref.renderingQueue, + l10n = _ref.l10n; + + _classCallCheck(this, PDFThumbnailViewer); + + this.container = container; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.l10n = l10n; + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this)); + + this._resetView(); + + eventBus._on("optionalcontentconfigchanged", function () { + _this._setImageDisabled = true; + }); + } + + _createClass(PDFThumbnailViewer, [{ + key: "_scrollUpdated", + value: function _scrollUpdated() { + this.renderingQueue.renderHighestPriority(); + } + }, { + key: "getThumbnail", + value: function getThumbnail(index) { + return this._thumbnails[index]; + } + }, { + key: "_getVisibleThumbs", + value: function _getVisibleThumbs() { + return (0, _ui_utils.getVisibleElements)({ + scrollEl: this.container, + views: this._thumbnails + }); + } + }, { + key: "scrollThumbnailIntoView", + value: function scrollThumbnailIntoView(pageNumber) { + if (!this.pdfDocument) { + return; + } + + var thumbnailView = this._thumbnails[pageNumber - 1]; + + if (!thumbnailView) { + console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.'); + return; + } + + if (pageNumber !== this._currentPageNumber) { + var prevThumbnailView = this._thumbnails[this._currentPageNumber - 1]; + prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS); + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + } + + var visibleThumbs = this._getVisibleThumbs(); + + var numVisibleThumbs = visibleThumbs.views.length; + + if (numVisibleThumbs > 0) { + var first = visibleThumbs.first.id; + var last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first; + var shouldScroll = false; + + if (pageNumber <= first || pageNumber >= last) { + shouldScroll = true; + } else { + visibleThumbs.views.some(function (view) { + if (view.id !== pageNumber) { + return false; + } + + shouldScroll = view.percent < 100; + return true; + }); + } + + if (shouldScroll) { + (0, _ui_utils.scrollIntoView)(thumbnailView.div, { + top: THUMBNAIL_SCROLL_MARGIN + }); + } + } + + this._currentPageNumber = pageNumber; + } + }, { + key: "pagesRotation", + get: function get() { + return this._pagesRotation; + }, + set: function set(rotation) { + if (!(0, _ui_utils.isValidRotation)(rotation)) { + throw new Error("Invalid thumbnails rotation angle."); + } + + if (!this.pdfDocument) { + return; + } + + if (this._pagesRotation === rotation) { + return; + } + + this._pagesRotation = rotation; + + for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { + this._thumbnails[i].update(rotation); + } + } + }, { + key: "cleanup", + value: function cleanup() { + for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { + if (this._thumbnails[i] && this._thumbnails[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { + this._thumbnails[i].reset(); + } + } + + _pdf_thumbnail_view.TempImageFactory.destroyCanvas(); + } + }, { + key: "_resetView", + value: function _resetView() { + this._thumbnails = []; + this._currentPageNumber = 1; + this._pageLabels = null; + this._pagesRotation = 0; + this._optionalContentConfigPromise = null; + this._pagesRequests = new WeakMap(); + this._setImageDisabled = false; + this.container.textContent = ""; + } + }, { + key: "setDocument", + value: function setDocument(pdfDocument) { + var _this2 = this; + + if (this.pdfDocument) { + this._cancelRendering(); + + this._resetView(); + } + + this.pdfDocument = pdfDocument; + + if (!pdfDocument) { + return; + } + + var firstPagePromise = pdfDocument.getPage(1); + var optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); + firstPagePromise.then(function (firstPdfPage) { + _this2._optionalContentConfigPromise = optionalContentConfigPromise; + var pagesCount = pdfDocument.numPages; + var viewport = firstPdfPage.getViewport({ + scale: 1 + }); + + var checkSetImageDisabled = function checkSetImageDisabled() { + return _this2._setImageDisabled; + }; + + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + var thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({ + container: _this2.container, + id: pageNum, + defaultViewport: viewport.clone(), + optionalContentConfigPromise: optionalContentConfigPromise, + linkService: _this2.linkService, + renderingQueue: _this2.renderingQueue, + checkSetImageDisabled: checkSetImageDisabled, + disableCanvasToImageConversion: false, + l10n: _this2.l10n + }); + + _this2._thumbnails.push(thumbnail); + } + + var firstThumbnailView = _this2._thumbnails[0]; + + if (firstThumbnailView) { + firstThumbnailView.setPdfPage(firstPdfPage); + } + + var thumbnailView = _this2._thumbnails[_this2._currentPageNumber - 1]; + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + })["catch"](function (reason) { + console.error("Unable to initialize thumbnail viewer", reason); + }); + } + }, { + key: "_cancelRendering", + value: function _cancelRendering() { + for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { + if (this._thumbnails[i]) { + this._thumbnails[i].cancelRendering(); + } + } + } + }, { + key: "setPageLabels", + value: function setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels."); + } else { + this._pageLabels = labels; + } + + for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { + var _this$_pageLabels$i, _this$_pageLabels; + + this._thumbnails[i].setPageLabel((_this$_pageLabels$i = (_this$_pageLabels = this._pageLabels) === null || _this$_pageLabels === void 0 ? void 0 : _this$_pageLabels[i]) !== null && _this$_pageLabels$i !== void 0 ? _this$_pageLabels$i : null); + } + } + }, { + key: "_ensurePdfPageLoaded", + value: function _ensurePdfPageLoaded(thumbView) { + var _this3 = this; + + if (thumbView.pdfPage) { + return Promise.resolve(thumbView.pdfPage); + } + + if (this._pagesRequests.has(thumbView)) { + return this._pagesRequests.get(thumbView); + } + + var promise = this.pdfDocument.getPage(thumbView.id).then(function (pdfPage) { + if (!thumbView.pdfPage) { + thumbView.setPdfPage(pdfPage); + } + + _this3._pagesRequests["delete"](thumbView); + + return pdfPage; + })["catch"](function (reason) { + console.error("Unable to get page for thumb view", reason); + + _this3._pagesRequests["delete"](thumbView); + }); + + this._pagesRequests.set(thumbView, promise); + + return promise; + } + }, { + key: "forceRendering", + value: function forceRendering() { + var _this4 = this; + + var visibleThumbs = this._getVisibleThumbs(); + + var thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, this.scroll.down); + + if (thumbView) { + this._ensurePdfPageLoaded(thumbView).then(function () { + _this4.renderingQueue.renderView(thumbView); + }); + + return true; + } + + return false; + } + }]); + + return PDFThumbnailViewer; + }(); + + exports.PDFThumbnailViewer = PDFThumbnailViewer; + + /***/ + }), + /* 28 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.TempImageFactory = exports.PDFThumbnailView = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _ui_utils = __webpack_require__(6); + + var _pdfjsLib = __webpack_require__(7); + + var _pdf_rendering_queue = __webpack_require__(10); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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 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); + return Constructor; + } + + var MAX_NUM_SCALING_STEPS = 3; + var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; + var THUMBNAIL_WIDTH = 98; + + var TempImageFactory = function TempImageFactoryClosure() { + var tempCanvasCache = null; + return { + getCanvas: function getCanvas(width, height) { + var tempCanvas = tempCanvasCache; + + if (!tempCanvas) { + tempCanvas = document.createElement("canvas"); + tempCanvasCache = tempCanvas; + } + + tempCanvas.width = width; + tempCanvas.height = height; + tempCanvas.mozOpaque = true; + var ctx = tempCanvas.getContext("2d", { + alpha: false + }); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + return tempCanvas; + }, + destroyCanvas: function destroyCanvas() { + var tempCanvas = tempCanvasCache; + + if (tempCanvas) { + tempCanvas.width = 0; + tempCanvas.height = 0; + } + + tempCanvasCache = null; + } + }; + }(); + + exports.TempImageFactory = TempImageFactory; + + var PDFThumbnailView = /*#__PURE__*/function () { + function PDFThumbnailView(_ref) { + var container = _ref.container, + id = _ref.id, + defaultViewport = _ref.defaultViewport, + optionalContentConfigPromise = _ref.optionalContentConfigPromise, + linkService = _ref.linkService, + renderingQueue = _ref.renderingQueue, + checkSetImageDisabled = _ref.checkSetImageDisabled, + _ref$disableCanvasToI = _ref.disableCanvasToImageConversion, + disableCanvasToImageConversion = _ref$disableCanvasToI === void 0 ? false : _ref$disableCanvasToI, + l10n = _ref.l10n; + + _classCallCheck(this, PDFThumbnailView); + + this.id = id; + this.renderingId = "thumbnail" + id; + this.pageLabel = null; + this.pdfPage = null; + this.rotation = 0; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = optionalContentConfigPromise || null; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.renderTask = null; + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + this.resume = null; + + this._checkSetImageDisabled = checkSetImageDisabled || function () { + return false; + }; + + this.disableCanvasToImageConversion = disableCanvasToImageConversion; + this.pageWidth = this.viewport.width; + this.pageHeight = this.viewport.height; + this.pageRatio = this.pageWidth / this.pageHeight; + this.canvasWidth = THUMBNAIL_WIDTH; + this.canvasHeight = this.canvasWidth / this.pageRatio | 0; + this.scale = this.canvasWidth / this.pageWidth; + this.l10n = l10n; + var anchor = document.createElement("a"); + anchor.href = linkService.getAnchorUrl("#page=" + id); + + this._thumbPageTitle.then(function (msg) { + anchor.title = msg; + }); + + anchor.onclick = function () { + linkService.goToPage(id); + return false; + }; + + this.anchor = anchor; + var div = document.createElement("div"); + div.className = "thumbnail"; + div.setAttribute("data-page-number", this.id); + this.div = div; + var ring = document.createElement("div"); + ring.className = "thumbnailSelectionRing"; + var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + "px"; + ring.style.height = this.canvasHeight + borderAdjustment + "px"; + this.ring = ring; + div.appendChild(ring); + anchor.appendChild(div); + container.appendChild(anchor); + } + + _createClass(PDFThumbnailView, [{ + key: "setPdfPage", + value: function setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + }, { + key: "reset", + value: function reset() { + this.cancelRendering(); + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + this.pageWidth = this.viewport.width; + this.pageHeight = this.viewport.height; + this.pageRatio = this.pageWidth / this.pageHeight; + this.canvasHeight = this.canvasWidth / this.pageRatio | 0; + this.scale = this.canvasWidth / this.pageWidth; + this.div.removeAttribute("data-loaded"); + var ring = this.ring; + var childNodes = ring.childNodes; + + for (var i = childNodes.length - 1; i >= 0; i--) { + ring.removeChild(childNodes[i]); + } + + var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + "px"; + ring.style.height = this.canvasHeight + borderAdjustment + "px"; + + if (this.canvas) { + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + + if (this.image) { + this.image.removeAttribute("src"); + delete this.image; + } + } + }, { + key: "update", + value: function update(rotation) { + if (typeof rotation !== "undefined") { + this.rotation = rotation; + } + + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + }, { + key: "cancelRendering", + value: function cancelRendering() { + if (this.renderTask) { + this.renderTask.cancel(); + this.renderTask = null; + } + + this.resume = null; + } + }, { + key: "_getPageDrawContext", + value: function _getPageDrawContext() { + var canvas = document.createElement("canvas"); + this.canvas = canvas; + canvas.mozOpaque = true; + var ctx = canvas.getContext("2d", { + alpha: false + }); + var outputScale = (0, _ui_utils.getOutputScale)(ctx); + canvas.width = this.canvasWidth * outputScale.sx | 0; + canvas.height = this.canvasHeight * outputScale.sy | 0; + canvas.style.width = this.canvasWidth + "px"; + canvas.style.height = this.canvasHeight + "px"; + var transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; + return [ctx, transform]; + } + }, { + key: "_convertCanvasToImage", + value: function _convertCanvasToImage() { + var _this = this; + + if (!this.canvas) { + return; + } + + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { + return; + } + + var className = "thumbnailImage"; + + if (this.disableCanvasToImageConversion) { + this.canvas.className = className; + + this._thumbPageCanvas.then(function (msg) { + _this.canvas.setAttribute("aria-label", msg); + }); + + this.div.setAttribute("data-loaded", true); + this.ring.appendChild(this.canvas); + return; + } + + var image = document.createElement("img"); + image.className = className; + + this._thumbPageCanvas.then(function (msg) { + image.setAttribute("aria-label", msg); + }); + + image.style.width = this.canvasWidth + "px"; + image.style.height = this.canvasHeight + "px"; + image.src = this.canvas.toDataURL(); + this.image = image; + this.div.setAttribute("data-loaded", true); + this.ring.appendChild(image); + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + }, { + key: "draw", + value: function draw() { + var _this2 = this; + + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + return Promise.resolve(undefined); + } + + var pdfPage = this.pdfPage; + + if (!pdfPage) { + this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + return Promise.reject(new Error("pdfPage is not loaded")); + } + + this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + + var finishRenderTask = /*#__PURE__*/function () { + var _ref2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var error, + _args = arguments; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + error = _args.length > 0 && _args[0] !== undefined ? _args[0] : null; + + if (renderTask === _this2.renderTask) { + _this2.renderTask = null; + } + + if (!(error instanceof _pdfjsLib.RenderingCancelledException)) { + _context.next = 4; + break; + } + + return _context.abrupt("return"); + + case 4: + _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + + _this2._convertCanvasToImage(); + + if (!error) { + _context.next = 8; + break; + } + + throw error; + + case 8: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + return function finishRenderTask() { + return _ref2.apply(this, arguments); + }; + }(); + + var _this$_getPageDrawCon = this._getPageDrawContext(), + _this$_getPageDrawCon2 = _slicedToArray(_this$_getPageDrawCon, 2), + ctx = _this$_getPageDrawCon2[0], + transform = _this$_getPageDrawCon2[1]; + + var drawViewport = this.viewport.clone({ + scale: this.scale + }); + + var renderContinueCallback = function renderContinueCallback(cont) { + if (!_this2.renderingQueue.isHighestPriority(_this2)) { + _this2.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; + + _this2.resume = function () { + _this2.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + cont(); + }; + + return; + } + + cont(); + }; + + var renderContext = { + canvasContext: ctx, + transform: transform, + viewport: drawViewport, + optionalContentConfigPromise: this._optionalContentConfigPromise + }; + var renderTask = this.renderTask = pdfPage.render(renderContext); + renderTask.onContinue = renderContinueCallback; + var resultPromise = renderTask.promise.then(function () { + finishRenderTask(null); + }, function (error) { + finishRenderTask(error); + }); + resultPromise["finally"](function () { + var _this2$pdfPage; + + var pageCached = _this2.linkService.isPageCached(_this2.id); + + if (pageCached) { + return; + } + + (_this2$pdfPage = _this2.pdfPage) === null || _this2$pdfPage === void 0 ? void 0 : _this2$pdfPage.cleanup(); + }); + return resultPromise; + } + }, { + key: "setImage", + value: function setImage(pageView) { + if (this._checkSetImageDisabled()) { + return; + } + + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { + return; + } + + var img = pageView.canvas; + + if (!img) { + return; + } + + if (!this.pdfPage) { + this.setPdfPage(pageView.pdfPage); + } + + this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + + var _this$_getPageDrawCon3 = this._getPageDrawContext(), + _this$_getPageDrawCon4 = _slicedToArray(_this$_getPageDrawCon3, 1), + ctx = _this$_getPageDrawCon4[0]; + + var canvas = ctx.canvas; + + if (img.width <= 2 * canvas.width) { + ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); + + this._convertCanvasToImage(); + + return; + } + + var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; + var reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS; + var reducedImage = TempImageFactory.getCanvas(reducedWidth, reducedHeight); + var reducedImageCtx = reducedImage.getContext("2d"); + + while (reducedWidth > img.width || reducedHeight > img.height) { + reducedWidth >>= 1; + reducedHeight >>= 1; + } + + reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight); + + while (reducedWidth > 2 * canvas.width) { + reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1); + reducedWidth >>= 1; + reducedHeight >>= 1; + } + + ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); + + this._convertCanvasToImage(); + } + }, { + key: "_thumbPageTitle", + get: function get() { + var _this$pageLabel; + + return this.l10n.get("thumb_page_title", { + page: (_this$pageLabel = this.pageLabel) !== null && _this$pageLabel !== void 0 ? _this$pageLabel : this.id + }); + } + }, { + key: "_thumbPageCanvas", + get: function get() { + var _this$pageLabel2; + + return this.l10n.get("thumb_page_canvas", { + page: (_this$pageLabel2 = this.pageLabel) !== null && _this$pageLabel2 !== void 0 ? _this$pageLabel2 : this.id + }); + } + }, { + key: "setPageLabel", + value: function setPageLabel(label) { + var _this3 = this; + + this.pageLabel = typeof label === "string" ? label : null; + + this._thumbPageTitle.then(function (msg) { + _this3.anchor.title = msg; + }); + + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { + return; + } + + this._thumbPageCanvas.then(function (msg) { + if (_this3.image) { + _this3.image.setAttribute("aria-label", msg); + } else if (_this3.disableCanvasToImageConversion && _this3.canvas) { + _this3.canvas.setAttribute("aria-label", msg); + } + }); + } + }]); + + return PDFThumbnailView; + }(); + + exports.PDFThumbnailView = PDFThumbnailView; + + /***/ + }), + /* 29 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFViewer = void 0; + + var _ui_utils = __webpack_require__(6); + + var _base_viewer = __webpack_require__(30); + + var _pdfjsLib = __webpack_require__(7); + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + function _get(target, property, receiver) { + 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(receiver); + } + return desc.value; + }; + } + return _get(target, property, receiver || target); + } + + function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + return object; + } + + 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 + } + }); + 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; + } + 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 PDFViewer = /*#__PURE__*/function (_BaseViewer) { + _inherits(PDFViewer, _BaseViewer); + + var _super = _createSuper(PDFViewer); + + function PDFViewer() { + _classCallCheck(this, PDFViewer); + + return _super.apply(this, arguments); + } + + _createClass(PDFViewer, [{ + key: "_viewerElement", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "_viewerElement", this.viewer); + } + }, { + key: "_scrollIntoView", + value: function _scrollIntoView(_ref) { + var pageDiv = _ref.pageDiv, + _ref$pageSpot = _ref.pageSpot, + pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot, + _ref$pageNumber = _ref.pageNumber, + pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber; + + if (!pageSpot && !this.isInPresentationMode) { + var left = pageDiv.offsetLeft + pageDiv.clientLeft; + var right = left + pageDiv.clientWidth; + var _this$container = this.container, + scrollLeft = _this$container.scrollLeft, + clientWidth = _this$container.clientWidth; + + if (this._isScrollModeHorizontal || left < scrollLeft || right > scrollLeft + clientWidth) { + pageSpot = { + left: 0, + top: 0 + }; + } + } + + _get(_getPrototypeOf(PDFViewer.prototype), "_scrollIntoView", this).call(this, { + pageDiv: pageDiv, + pageSpot: pageSpot, + pageNumber: pageNumber + }); + } + }, { + key: "_getVisiblePages", + value: function _getVisiblePages() { + if (this.isInPresentationMode) { + return this._getCurrentVisiblePage(); + } + + return _get(_getPrototypeOf(PDFViewer.prototype), "_getVisiblePages", this).call(this); + } + }, { + key: "_updateHelper", + value: function _updateHelper(visiblePages) { + if (this.isInPresentationMode) { + return; + } + + var currentId = this._currentPageNumber; + var stillFullyVisible = false; + + var _iterator = _createForOfIteratorHelper(visiblePages), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var page = _step.value; + + if (page.percent < 100) { + break; + } + + if (page.id === currentId && this._scrollMode === _ui_utils.ScrollMode.VERTICAL && this._spreadMode === _ui_utils.SpreadMode.NONE) { + stillFullyVisible = true; + break; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + if (!stillFullyVisible) { + currentId = visiblePages[0].id; + } + + this._setCurrentPageNumber(currentId); + } + }]); + + return PDFViewer; + }(_base_viewer.BaseViewer); + + exports.PDFViewer = PDFViewer; + + /***/ + }), + /* 30 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.BaseViewer = void 0; + + var _pdfjsLib = __webpack_require__(7); + + var _ui_utils = __webpack_require__(6); + + var _pdf_rendering_queue = __webpack_require__(10); + + var _annotation_layer_builder = __webpack_require__(31); + + var _l10n_utils = __webpack_require__(32); + + var _pdf_page_view = __webpack_require__(33); + + var _pdf_link_service = __webpack_require__(21); + + var _text_layer_builder = __webpack_require__(34); + + var _xfa_layer_builder = __webpack_require__(35); + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + var DEFAULT_CACHE_SIZE = 10; + + function PDFPageViewBuffer(size) { + var data = []; + + this.push = function (view) { + var i = data.indexOf(view); + + if (i >= 0) { + data.splice(i, 1); + } + + data.push(view); + + if (data.length > size) { + data.shift().destroy(); + } + }; + + this.resize = function (newSize, pagesToKeep) { + size = newSize; + + if (pagesToKeep) { + var pageIdsToKeep = new Set(); + + for (var i = 0, iMax = pagesToKeep.length; i < iMax; ++i) { + pageIdsToKeep.add(pagesToKeep[i].id); + } + + (0, _ui_utils.moveToEndOfArray)(data, function (page) { + return pageIdsToKeep.has(page.id); + }); + } + + while (data.length > size) { + data.shift().destroy(); + } + }; + + this.has = function (view) { + return data.includes(view); + }; + } + + function isSameScale(oldScale, newScale) { + if (newScale === oldScale) { + return true; + } + + if (Math.abs(newScale - oldScale) < 1e-15) { + return true; + } + + return false; + } + + var BaseViewer = /*#__PURE__*/function () { + function BaseViewer(options) { + var _this$container, + _this$viewer, + _this = this; + + _classCallCheck(this, BaseViewer); + + if (this.constructor === BaseViewer) { + throw new Error("Cannot initialize BaseViewer."); + } + + var viewerVersion = '2.8.335'; + + if (_pdfjsLib.version !== viewerVersion) { + throw new Error("The API version \"".concat(_pdfjsLib.version, "\" does not match the Viewer version \"").concat(viewerVersion, "\".")); + } + + this._name = this.constructor.name; + this.container = options.container; + this.viewer = options.viewer || options.container.firstElementChild; + + if (!(((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.tagName.toUpperCase()) === "DIV" && ((_this$viewer = this.viewer) === null || _this$viewer === void 0 ? void 0 : _this$viewer.tagName.toUpperCase()) === "DIV")) { + throw new Error("Invalid `container` and/or `viewer` option."); + } + + if (this.container.offsetParent && getComputedStyle(this.container).position !== "absolute") { + throw new Error("The `container` must be absolutely positioned."); + } + + this.eventBus = options.eventBus; + this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService(); + this.downloadManager = options.downloadManager || null; + this.findController = options.findController || null; + this._scriptingManager = options.scriptingManager || null; + this.removePageBorders = options.removePageBorders || false; + this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.renderInteractiveForms = options.renderInteractiveForms !== false; + this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; + this.enableWebGL = options.enableWebGL || false; + this.useOnlyCssZoom = options.useOnlyCssZoom || false; + this.maxCanvasPixels = options.maxCanvasPixels; + this.l10n = options.l10n || _l10n_utils.NullL10n; + this.enableScripting = options.enableScripting === true && !!this._scriptingManager; + this.defaultRenderingQueue = !options.renderingQueue; + + if (this.defaultRenderingQueue) { + this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); + this.renderingQueue.setViewer(this); + } else { + this.renderingQueue = options.renderingQueue; + } + + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this)); + this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN; + this._onBeforeDraw = this._onAfterDraw = null; + + this._resetView(); + + if (this.removePageBorders) { + this.viewer.classList.add("removePageBorders"); + } + + Promise.resolve().then(function () { + _this.eventBus.dispatch("baseviewerinit", { + source: _this + }); + }); + } + + _createClass(BaseViewer, [{ + key: "pagesCount", + get: function get() { + return this._pages.length; + } + }, { + key: "getPageView", + value: function getPageView(index) { + return this._pages[index]; + } + }, { + key: "pageViewsReady", + get: function get() { + if (!this._pagesCapability.settled) { + return false; + } + + return this._pages.every(function (pageView) { + return pageView === null || pageView === void 0 ? void 0 : pageView.pdfPage; + }); + } + }, { + key: "currentPageNumber", + get: function get() { + return this._currentPageNumber; + }, + set: function set(val) { + if (!Number.isInteger(val)) { + throw new Error("Invalid page number."); + } + + if (!this.pdfDocument) { + return; + } + + if (!this._setCurrentPageNumber(val, true)) { + console.error("".concat(this._name, ".currentPageNumber: \"").concat(val, "\" is not a valid page.")); + } + } + }, { + key: "_setCurrentPageNumber", + value: function _setCurrentPageNumber(val) { + var _this$_pageLabels, _this$_pageLabels2; + + var resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (this._currentPageNumber === val) { + if (resetCurrentPageView) { + this._resetCurrentPageView(); + } + + return true; + } + + if (!(0 < val && val <= this.pagesCount)) { + return false; + } + + var previous = this._currentPageNumber; + this._currentPageNumber = val; + this.eventBus.dispatch("pagechanging", { + source: this, + pageNumber: val, + pageLabel: (_this$_pageLabels = (_this$_pageLabels2 = this._pageLabels) === null || _this$_pageLabels2 === void 0 ? void 0 : _this$_pageLabels2[val - 1]) !== null && _this$_pageLabels !== void 0 ? _this$_pageLabels : null, + previous: previous + }); + + if (resetCurrentPageView) { + this._resetCurrentPageView(); + } + + return true; + } + }, { + key: "currentPageLabel", + get: function get() { + var _this$_pageLabels3, _this$_pageLabels4; + + return (_this$_pageLabels3 = (_this$_pageLabels4 = this._pageLabels) === null || _this$_pageLabels4 === void 0 ? void 0 : _this$_pageLabels4[this._currentPageNumber - 1]) !== null && _this$_pageLabels3 !== void 0 ? _this$_pageLabels3 : null; + }, + set: function set(val) { + if (!this.pdfDocument) { + return; + } + + var page = val | 0; + + if (this._pageLabels) { + var i = this._pageLabels.indexOf(val); + + if (i >= 0) { + page = i + 1; + } + } + + if (!this._setCurrentPageNumber(page, true)) { + console.error("".concat(this._name, ".currentPageLabel: \"").concat(val, "\" is not a valid page.")); + } + } + }, { + key: "currentScale", + get: function get() { + return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE; + }, + set: function set(val) { + if (isNaN(val)) { + throw new Error("Invalid numeric scale."); + } + + if (!this.pdfDocument) { + return; + } + + this._setScale(val, false); + } + }, { + key: "currentScaleValue", + get: function get() { + return this._currentScaleValue; + }, + set: function set(val) { + if (!this.pdfDocument) { + return; + } + + this._setScale(val, false); + } + }, { + key: "pagesRotation", + get: function get() { + return this._pagesRotation; + }, + set: function set(rotation) { + if (!(0, _ui_utils.isValidRotation)(rotation)) { + throw new Error("Invalid pages rotation angle."); + } + + if (!this.pdfDocument) { + return; + } + + rotation %= 360; + + if (rotation < 0) { + rotation += 360; + } + + if (this._pagesRotation === rotation) { + return; + } + + this._pagesRotation = rotation; + var pageNumber = this._currentPageNumber; + + for (var i = 0, ii = this._pages.length; i < ii; i++) { + var pageView = this._pages[i]; + pageView.update(pageView.scale, rotation); + } + + if (this._currentScaleValue) { + this._setScale(this._currentScaleValue, true); + } + + this.eventBus.dispatch("rotationchanging", { + source: this, + pagesRotation: rotation, + pageNumber: pageNumber + }); + + if (this.defaultRenderingQueue) { + this.update(); + } + } + }, { + key: "firstPagePromise", + get: function get() { + return this.pdfDocument ? this._firstPageCapability.promise : null; + } + }, { + key: "onePageRendered", + get: function get() { + return this.pdfDocument ? this._onePageRenderedCapability.promise : null; + } + }, { + key: "pagesPromise", + get: function get() { + return this.pdfDocument ? this._pagesCapability.promise : null; + } + }, { + key: "_viewerElement", + get: function get() { + throw new Error("Not implemented: _viewerElement"); + } + }, { + key: "_onePageRenderedOrForceFetch", + value: function _onePageRenderedOrForceFetch() { + if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) { + return Promise.resolve(); + } + + return this._onePageRenderedCapability.promise; + } + }, { + key: "setDocument", + value: function setDocument(pdfDocument) { + var _this2 = this; + + if (this.pdfDocument) { + this.eventBus.dispatch("pagesdestroy", { + source: this + }); + + this._cancelRendering(); + + this._resetView(); + + if (this.findController) { + this.findController.setDocument(null); + } + + if (this._scriptingManager) { + this._scriptingManager.setDocument(null); + } + } + + this.pdfDocument = pdfDocument; + + if (!pdfDocument) { + return; + } + + var isPureXfa = pdfDocument.isPureXfa; + var pagesCount = pdfDocument.numPages; + var firstPagePromise = pdfDocument.getPage(1); + var optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); + + this._pagesCapability.promise.then(function () { + _this2.eventBus.dispatch("pagesloaded", { + source: _this2, + pagesCount: pagesCount + }); + }); + + this._onBeforeDraw = function (evt) { + var pageView = _this2._pages[evt.pageNumber - 1]; + + if (!pageView) { + return; + } + + _this2._buffer.push(pageView); + }; + + this.eventBus._on("pagerender", this._onBeforeDraw); + + this._onAfterDraw = function (evt) { + if (evt.cssTransform || _this2._onePageRenderedCapability.settled) { + return; + } + + _this2._onePageRenderedCapability.resolve(); + + _this2.eventBus._off("pagerendered", _this2._onAfterDraw); + + _this2._onAfterDraw = null; + }; + + this.eventBus._on("pagerendered", this._onAfterDraw); + + firstPagePromise.then(function (firstPdfPage) { + _this2._firstPageCapability.resolve(firstPdfPage); + + _this2._optionalContentConfigPromise = optionalContentConfigPromise; + var scale = _this2.currentScale; + var viewport = firstPdfPage.getViewport({ + scale: scale * _ui_utils.CSS_UNITS + }); + var textLayerFactory = _this2.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? _this2 : null; + var xfaLayerFactory = isPureXfa ? _this2 : null; + + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + var pageView = new _pdf_page_view.PDFPageView({ + container: _this2._viewerElement, + eventBus: _this2.eventBus, + id: pageNum, + scale: scale, + defaultViewport: viewport.clone(), + optionalContentConfigPromise: optionalContentConfigPromise, + renderingQueue: _this2.renderingQueue, + textLayerFactory: textLayerFactory, + textLayerMode: _this2.textLayerMode, + annotationLayerFactory: _this2, + xfaLayerFactory: xfaLayerFactory, + imageResourcesPath: _this2.imageResourcesPath, + renderInteractiveForms: _this2.renderInteractiveForms, + renderer: _this2.renderer, + enableWebGL: _this2.enableWebGL, + useOnlyCssZoom: _this2.useOnlyCssZoom, + maxCanvasPixels: _this2.maxCanvasPixels, + l10n: _this2.l10n, + enableScripting: _this2.enableScripting + }); + + _this2._pages.push(pageView); + } + + var firstPageView = _this2._pages[0]; + + if (firstPageView) { + firstPageView.setPdfPage(firstPdfPage); + + _this2.linkService.cachePageRef(1, firstPdfPage.ref); + } + + if (_this2._spreadMode !== _ui_utils.SpreadMode.NONE) { + _this2._updateSpreadMode(); + } + + _this2._onePageRenderedOrForceFetch().then(function () { + if (_this2.findController) { + _this2.findController.setDocument(pdfDocument); + } + + if (_this2.enableScripting) { + _this2._scriptingManager.setDocument(pdfDocument); + } + + if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) { + _this2._pagesCapability.resolve(); + + return; + } + + var getPagesLeft = pagesCount - 1; + + if (getPagesLeft <= 0) { + _this2._pagesCapability.resolve(); + + return; + } + + var _loop = function _loop(_pageNum) { + pdfDocument.getPage(_pageNum).then(function (pdfPage) { + var pageView = _this2._pages[_pageNum - 1]; + + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + + _this2.linkService.cachePageRef(_pageNum, pdfPage.ref); + + if (--getPagesLeft === 0) { + _this2._pagesCapability.resolve(); + } + }, function (reason) { + console.error("Unable to get page ".concat(_pageNum, " to initialize viewer"), reason); + + if (--getPagesLeft === 0) { + _this2._pagesCapability.resolve(); + } + }); + }; + + for (var _pageNum = 2; _pageNum <= pagesCount; ++_pageNum) { + _loop(_pageNum); + } + }); + + _this2.eventBus.dispatch("pagesinit", { + source: _this2 + }); + + if (_this2.defaultRenderingQueue) { + _this2.update(); + } + })["catch"](function (reason) { + console.error("Unable to initialize viewer", reason); + }); + } + }, { + key: "setPageLabels", + value: function setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error("".concat(this._name, ".setPageLabels: Invalid page labels.")); + } else { + this._pageLabels = labels; + } + + for (var i = 0, ii = this._pages.length; i < ii; i++) { + var _this$_pageLabels$i, _this$_pageLabels5; + + this._pages[i].setPageLabel((_this$_pageLabels$i = (_this$_pageLabels5 = this._pageLabels) === null || _this$_pageLabels5 === void 0 ? void 0 : _this$_pageLabels5[i]) !== null && _this$_pageLabels$i !== void 0 ? _this$_pageLabels$i : null); + } + } + }, { + key: "_resetView", + value: function _resetView() { + this._pages = []; + this._currentPageNumber = 1; + this._currentScale = _ui_utils.UNKNOWN_SCALE; + this._currentScaleValue = null; + this._pageLabels = null; + this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); + this._location = null; + this._pagesRotation = 0; + this._optionalContentConfigPromise = null; + this._pagesRequests = new WeakMap(); + this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._scrollMode = _ui_utils.ScrollMode.VERTICAL; + this._spreadMode = _ui_utils.SpreadMode.NONE; + + if (this._onBeforeDraw) { + this.eventBus._off("pagerender", this._onBeforeDraw); + + this._onBeforeDraw = null; + } + + if (this._onAfterDraw) { + this.eventBus._off("pagerendered", this._onAfterDraw); + + this._onAfterDraw = null; + } + + this.viewer.textContent = ""; + + this._updateScrollMode(); + } + }, { + key: "_scrollUpdate", + value: function _scrollUpdate() { + if (this.pagesCount === 0) { + return; + } + + this.update(); + } + }, { + key: "_scrollIntoView", + value: function _scrollIntoView(_ref) { + var pageDiv = _ref.pageDiv, + _ref$pageSpot = _ref.pageSpot, + pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot, + _ref$pageNumber = _ref.pageNumber, + pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber; + (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot); + } + }, { + key: "_setScaleUpdatePages", + value: function _setScaleUpdatePages(newScale, newValue) { + var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var preset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + this._currentScaleValue = newValue.toString(); + + if (isSameScale(this._currentScale, newScale)) { + if (preset) { + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: newValue + }); + } + + return; + } + + for (var i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].update(newScale); + } + + this._currentScale = newScale; + + if (!noScroll) { + var page = this._currentPageNumber, + dest; + + if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) { + page = this._location.pageNumber; + dest = [null, { + name: "XYZ" + }, this._location.left, this._location.top, null]; + } + + this.scrollPageIntoView({ + pageNumber: page, + destArray: dest, + allowNegativeOffset: true + }); + } + + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: preset ? newValue : undefined + }); + + if (this.defaultRenderingQueue) { + this.update(); + } + } + }, { + key: "_pageWidthScaleFactor", + get: function get() { + if (this._spreadMode !== _ui_utils.SpreadMode.NONE && this._scrollMode !== _ui_utils.ScrollMode.HORIZONTAL && !this.isInPresentationMode) { + return 2; + } + + return 1; + } + }, { + key: "_setScale", + value: function _setScale(value) { + var noScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var scale = parseFloat(value); + + if (scale > 0) { + this._setScaleUpdatePages(scale, value, noScroll, false); + } else { + var currentPage = this._pages[this._currentPageNumber - 1]; + + if (!currentPage) { + return; + } + + var noPadding = this.isInPresentationMode || this.removePageBorders; + var hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING; + var vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING; + + if (!noPadding && this._isScrollModeHorizontal) { + var _ref2 = [vPadding, hPadding]; + hPadding = _ref2[0]; + vPadding = _ref2[1]; + } + + var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this._pageWidthScaleFactor; + var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; + + switch (value) { + case "page-actual": + scale = 1; + break; + + case "page-width": + scale = pageWidthScale; + break; + + case "page-height": + scale = pageHeightScale; + break; + + case "page-fit": + scale = Math.min(pageWidthScale, pageHeightScale); + break; + + case "auto": + var horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale); + scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale); + break; + + default: + console.error("".concat(this._name, "._setScale: \"").concat(value, "\" is an unknown zoom value.")); + return; + } + + this._setScaleUpdatePages(scale, value, noScroll, true); + } + } + }, { + key: "_resetCurrentPageView", + value: function _resetCurrentPageView() { + if (this.isInPresentationMode) { + this._setScale(this._currentScaleValue, true); + } + + var pageView = this._pages[this._currentPageNumber - 1]; + + this._scrollIntoView({ + pageDiv: pageView.div + }); + } + }, { + key: "pageLabelToPageNumber", + value: function pageLabelToPageNumber(label) { + if (!this._pageLabels) { + return null; + } + + var i = this._pageLabels.indexOf(label); + + if (i < 0) { + return null; + } + + return i + 1; + } + }, { + key: "scrollPageIntoView", + value: function scrollPageIntoView(_ref3) { + var pageNumber = _ref3.pageNumber, + _ref3$destArray = _ref3.destArray, + destArray = _ref3$destArray === void 0 ? null : _ref3$destArray, + _ref3$allowNegativeOf = _ref3.allowNegativeOffset, + allowNegativeOffset = _ref3$allowNegativeOf === void 0 ? false : _ref3$allowNegativeOf, + _ref3$ignoreDestinati = _ref3.ignoreDestinationZoom, + ignoreDestinationZoom = _ref3$ignoreDestinati === void 0 ? false : _ref3$ignoreDestinati; + + if (!this.pdfDocument) { + return; + } + + var pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1]; + + if (!pageView) { + console.error("".concat(this._name, ".scrollPageIntoView: ") + "\"".concat(pageNumber, "\" is not a valid pageNumber parameter.")); + return; + } + + if (this.isInPresentationMode || !destArray) { + this._setCurrentPageNumber(pageNumber, true); + + return; + } + + var x = 0, + y = 0; + var width = 0, + height = 0, + widthScale, + heightScale; + var changeOrientation = pageView.rotation % 180 !== 0; + var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS; + var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS; + var scale = 0; + + switch (destArray[1].name) { + case "XYZ": + x = destArray[2]; + y = destArray[3]; + scale = destArray[4]; + x = x !== null ? x : 0; + y = y !== null ? y : pageHeight; + break; + + case "Fit": + case "FitB": + scale = "page-fit"; + break; + + case "FitH": + case "FitBH": + y = destArray[2]; + scale = "page-width"; + + if (y === null && this._location) { + x = this._location.left; + y = this._location.top; + } else if (typeof y !== "number") { + y = pageHeight; + } + + break; + + case "FitV": + case "FitBV": + x = destArray[2]; + width = pageWidth; + height = pageHeight; + scale = "page-height"; + break; + + case "FitR": + x = destArray[2]; + y = destArray[3]; + width = destArray[4] - x; + height = destArray[5] - y; + var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; + var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; + widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS; + heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS; + scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); + break; + + default: + console.error("".concat(this._name, ".scrollPageIntoView: ") + "\"".concat(destArray[1].name, "\" is not a valid destination type.")); + return; + } + + if (!ignoreDestinationZoom) { + if (scale && scale !== this._currentScale) { + this.currentScaleValue = scale; + } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) { + this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + } + } + + if (scale === "page-fit" && !destArray[4]) { + this._scrollIntoView({ + pageDiv: pageView.div, + pageNumber: pageNumber + }); + + return; + } + + var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; + var left = Math.min(boundingRect[0][0], boundingRect[1][0]); + var top = Math.min(boundingRect[0][1], boundingRect[1][1]); + + if (!allowNegativeOffset) { + left = Math.max(left, 0); + top = Math.max(top, 0); + } + + this._scrollIntoView({ + pageDiv: pageView.div, + pageSpot: { + left: left, + top: top + }, + pageNumber: pageNumber + }); + } + }, { + key: "_updateLocation", + value: function _updateLocation(firstPage) { + var currentScale = this._currentScale; + var currentScaleValue = this._currentScaleValue; + var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; + var pageNumber = firstPage.id; + var pdfOpenParams = "#page=" + pageNumber; + pdfOpenParams += "&zoom=" + normalizedScaleValue; + var currentPageView = this._pages[pageNumber - 1]; + var container = this.container; + var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); + var intLeft = Math.round(topLeft[0]); + var intTop = Math.round(topLeft[1]); + pdfOpenParams += "," + intLeft + "," + intTop; + this._location = { + pageNumber: pageNumber, + scale: normalizedScaleValue, + top: intTop, + left: intLeft, + rotation: this._pagesRotation, + pdfOpenParams: pdfOpenParams + }; + } + }, { + key: "_updateHelper", + value: function _updateHelper(visiblePages) { + throw new Error("Not implemented: _updateHelper"); + } + }, { + key: "update", + value: function update() { + var visible = this._getVisiblePages(); + + var visiblePages = visible.views, + numVisiblePages = visiblePages.length; + + if (numVisiblePages === 0) { + return; + } + + var newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1); + + this._buffer.resize(newCacheSize, visiblePages); + + this.renderingQueue.renderHighestPriority(visible); + + this._updateHelper(visiblePages); + + this._updateLocation(visible.first); + + this.eventBus.dispatch("updateviewarea", { + source: this, + location: this._location + }); + } + }, { + key: "containsElement", + value: function containsElement(element) { + return this.container.contains(element); + } + }, { + key: "focus", + value: function focus() { + this.container.focus(); + } + }, { + key: "_isScrollModeHorizontal", + get: function get() { + return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL; + } + }, { + key: "_isContainerRtl", + get: function get() { + return getComputedStyle(this.container).direction === "rtl"; + } + }, { + key: "isInPresentationMode", + get: function get() { + return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN; + } + }, { + key: "isChangingPresentationMode", + get: function get() { + return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING; + } + }, { + key: "isHorizontalScrollbarEnabled", + get: function get() { + return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; + } + }, { + key: "isVerticalScrollbarEnabled", + get: function get() { + return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight; + } + }, { + key: "_getCurrentVisiblePage", + value: function _getCurrentVisiblePage() { + if (!this.pagesCount) { + return { + views: [] + }; + } + + var pageView = this._pages[this._currentPageNumber - 1]; + var element = pageView.div; + var view = { + id: pageView.id, + x: element.offsetLeft + element.clientLeft, + y: element.offsetTop + element.clientTop, + view: pageView + }; + return { + first: view, + last: view, + views: [view] + }; + } + }, { + key: "_getVisiblePages", + value: function _getVisiblePages() { + return (0, _ui_utils.getVisibleElements)({ + scrollEl: this.container, + views: this._pages, + sortByVisibility: true, + horizontal: this._isScrollModeHorizontal, + rtl: this._isScrollModeHorizontal && this._isContainerRtl + }); + } + }, { + key: "isPageVisible", + value: function isPageVisible(pageNumber) { + if (!this.pdfDocument) { + return false; + } + + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error("".concat(this._name, ".isPageVisible: \"").concat(pageNumber, "\" is not a valid page.")); + return false; + } + + return this._getVisiblePages().views.some(function (view) { + return view.id === pageNumber; + }); + } + }, { + key: "isPageCached", + value: function isPageCached(pageNumber) { + if (!this.pdfDocument || !this._buffer) { + return false; + } + + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error("".concat(this._name, ".isPageCached: \"").concat(pageNumber, "\" is not a valid page.")); + return false; + } + + var pageView = this._pages[pageNumber - 1]; + + if (!pageView) { + return false; + } + + return this._buffer.has(pageView); + } + }, { + key: "cleanup", + value: function cleanup() { + for (var i = 0, ii = this._pages.length; i < ii; i++) { + if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { + this._pages[i].reset(); + } + } + } + }, { + key: "_cancelRendering", + value: function _cancelRendering() { + for (var i = 0, ii = this._pages.length; i < ii; i++) { + if (this._pages[i]) { + this._pages[i].cancelRendering(); + } + } + } + }, { + key: "_ensurePdfPageLoaded", + value: function _ensurePdfPageLoaded(pageView) { + var _this3 = this; + + if (pageView.pdfPage) { + return Promise.resolve(pageView.pdfPage); + } + + if (this._pagesRequests.has(pageView)) { + return this._pagesRequests.get(pageView); + } + + var promise = this.pdfDocument.getPage(pageView.id).then(function (pdfPage) { + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + + _this3._pagesRequests["delete"](pageView); + + return pdfPage; + })["catch"](function (reason) { + console.error("Unable to get page for page view", reason); + + _this3._pagesRequests["delete"](pageView); + }); + + this._pagesRequests.set(pageView, promise); + + return promise; + } + }, { + key: "forceRendering", + value: function forceRendering(currentlyVisiblePages) { + var _this4 = this; + + var visiblePages = currentlyVisiblePages || this._getVisiblePages(); + + var scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down; + var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead); + + if (pageView) { + this._ensurePdfPageLoaded(pageView).then(function () { + _this4.renderingQueue.renderView(pageView); + }); + + return true; + } + + return false; + } + }, { + key: "createTextLayerBuilder", + value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) { + var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + var eventBus = arguments.length > 4 ? arguments[4] : undefined; + return new _text_layer_builder.TextLayerBuilder({ + textLayerDiv: textLayerDiv, + eventBus: eventBus, + pageIndex: pageIndex, + viewport: viewport, + findController: this.isInPresentationMode ? null : this.findController, + enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection + }); + } + }, { + key: "createAnnotationLayerBuilder", + value: function createAnnotationLayerBuilder(pageDiv, pdfPage) { + var _this$pdfDocument, _this$pdfDocument2, _this$_scriptingManag; + + var annotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var imageResourcesPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; + var renderInteractiveForms = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; + var l10n = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _l10n_utils.NullL10n; + var enableScripting = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; + var hasJSActionsPromise = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; + var mouseState = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; + return new _annotation_layer_builder.AnnotationLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage, + annotationStorage: annotationStorage || ((_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage), + imageResourcesPath: imageResourcesPath, + renderInteractiveForms: renderInteractiveForms, + linkService: this.linkService, + downloadManager: this.downloadManager, + l10n: l10n, + enableScripting: enableScripting, + hasJSActionsPromise: hasJSActionsPromise || ((_this$pdfDocument2 = this.pdfDocument) === null || _this$pdfDocument2 === void 0 ? void 0 : _this$pdfDocument2.hasJSActions()), + mouseState: mouseState || ((_this$_scriptingManag = this._scriptingManager) === null || _this$_scriptingManag === void 0 ? void 0 : _this$_scriptingManag.mouseState) + }); + } + }, { + key: "createXfaLayerBuilder", + value: function createXfaLayerBuilder(pageDiv, pdfPage) { + return new _xfa_layer_builder.XfaLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage + }); + } + }, { + key: "hasEqualPageSizes", + get: function get() { + var firstPageView = this._pages[0]; + + for (var i = 1, ii = this._pages.length; i < ii; ++i) { + var pageView = this._pages[i]; + + if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) { + return false; + } + } + + return true; + } + }, { + key: "getPagesOverview", + value: function getPagesOverview() { + var _this5 = this; + + return this._pages.map(function (pageView) { + var viewport = pageView.pdfPage.getViewport({ + scale: 1 + }); + + if (!_this5.enablePrintAutoRotate || (0, _ui_utils.isPortraitOrientation)(viewport)) { + return { + width: viewport.width, + height: viewport.height, + rotation: viewport.rotation + }; + } + + return { + width: viewport.height, + height: viewport.width, + rotation: (viewport.rotation - 90) % 360 + }; + }); + } + }, { + key: "optionalContentConfigPromise", + get: function get() { + if (!this.pdfDocument) { + return Promise.resolve(null); + } + + if (!this._optionalContentConfigPromise) { + return this.pdfDocument.getOptionalContentConfig(); + } + + return this._optionalContentConfigPromise; + }, + set: function set(promise) { + if (!(promise instanceof Promise)) { + throw new Error("Invalid optionalContentConfigPromise: ".concat(promise)); + } + + if (!this.pdfDocument) { + return; + } + + if (!this._optionalContentConfigPromise) { + return; + } + + this._optionalContentConfigPromise = promise; + + var _iterator = _createForOfIteratorHelper(this._pages), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var pageView = _step.value; + pageView.update(pageView.scale, pageView.rotation, promise); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + this.update(); + this.eventBus.dispatch("optionalcontentconfigchanged", { + source: this, + promise: promise + }); + } + }, { + key: "scrollMode", + get: function get() { + return this._scrollMode; + }, + set: function set(mode) { + if (this._scrollMode === mode) { + return; + } + + if (!(0, _ui_utils.isValidScrollMode)(mode)) { + throw new Error("Invalid scroll mode: ".concat(mode)); + } + + this._scrollMode = mode; + this.eventBus.dispatch("scrollmodechanged", { + source: this, + mode: mode + }); + + this._updateScrollMode(this._currentPageNumber); + } + }, { + key: "_updateScrollMode", + value: function _updateScrollMode() { + var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var scrollMode = this._scrollMode, + viewer = this.viewer; + viewer.classList.toggle("scrollHorizontal", scrollMode === _ui_utils.ScrollMode.HORIZONTAL); + viewer.classList.toggle("scrollWrapped", scrollMode === _ui_utils.ScrollMode.WRAPPED); + + if (!this.pdfDocument || !pageNumber) { + return; + } + + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this._setScale(this._currentScaleValue, true); + } + + this._setCurrentPageNumber(pageNumber, true); + + this.update(); + } + }, { + key: "spreadMode", + get: function get() { + return this._spreadMode; + }, + set: function set(mode) { + if (this._spreadMode === mode) { + return; + } + + if (!(0, _ui_utils.isValidSpreadMode)(mode)) { + throw new Error("Invalid spread mode: ".concat(mode)); + } + + this._spreadMode = mode; + this.eventBus.dispatch("spreadmodechanged", { + source: this, + mode: mode + }); + + this._updateSpreadMode(this._currentPageNumber); + } + }, { + key: "_updateSpreadMode", + value: function _updateSpreadMode() { + var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + + if (!this.pdfDocument) { + return; + } + + var viewer = this.viewer, + pages = this._pages; + viewer.textContent = ""; + + if (this._spreadMode === _ui_utils.SpreadMode.NONE) { + for (var i = 0, iMax = pages.length; i < iMax; ++i) { + viewer.appendChild(pages[i].div); + } + } else { + var parity = this._spreadMode - 1; + var spread = null; + + for (var _i = 0, _iMax = pages.length; _i < _iMax; ++_i) { + if (spread === null) { + spread = document.createElement("div"); + spread.className = "spread"; + viewer.appendChild(spread); + } else if (_i % 2 === parity) { + spread = spread.cloneNode(false); + viewer.appendChild(spread); + } + + spread.appendChild(pages[_i].div); + } + } + + if (!pageNumber) { + return; + } + + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this._setScale(this._currentScaleValue, true); + } + + this._setCurrentPageNumber(pageNumber, true); + + this.update(); + } + }, { + key: "_getPageAdvance", + value: function _getPageAdvance(currentPageNumber) { + var previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (this.isInPresentationMode) { + return 1; + } + + switch (this._scrollMode) { + case _ui_utils.ScrollMode.WRAPPED: { + var _this$_getVisiblePage = this._getVisiblePages(), + views = _this$_getVisiblePage.views, + pageLayout = new Map(); + + var _iterator2 = _createForOfIteratorHelper(views), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var _step2$value = _step2.value, + id = _step2$value.id, + y = _step2$value.y, + percent = _step2$value.percent, + widthPercent = _step2$value.widthPercent; + + if (percent === 0 || widthPercent < 100) { + continue; + } + + var yArray = pageLayout.get(y); + + if (!yArray) { + pageLayout.set(y, yArray || (yArray = [])); + } + + yArray.push(id); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + var _iterator3 = _createForOfIteratorHelper(pageLayout.values()), + _step3; + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var _yArray = _step3.value; + + var currentIndex = _yArray.indexOf(currentPageNumber); + + if (currentIndex === -1) { + continue; + } + + var numPages = _yArray.length; + + if (numPages === 1) { + break; + } + + if (previous) { + for (var i = currentIndex - 1, ii = 0; i >= ii; i--) { + var currentId = _yArray[i], + expectedId = _yArray[i + 1] - 1; + + if (currentId < expectedId) { + return currentPageNumber - expectedId; + } + } + } else { + for (var _i2 = currentIndex + 1, _ii = numPages; _i2 < _ii; _i2++) { + var _currentId = _yArray[_i2], + _expectedId = _yArray[_i2 - 1] + 1; + + if (_currentId > _expectedId) { + return _expectedId - currentPageNumber; + } + } + } + + if (previous) { + var firstId = _yArray[0]; + + if (firstId < currentPageNumber) { + return currentPageNumber - firstId + 1; + } + } else { + var lastId = _yArray[numPages - 1]; + + if (lastId > currentPageNumber) { + return lastId - currentPageNumber + 1; + } + } + + break; + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + + break; + } + + case _ui_utils.ScrollMode.HORIZONTAL: { + break; + } + + case _ui_utils.ScrollMode.VERTICAL: { + if (this._spreadMode === _ui_utils.SpreadMode.NONE) { + break; + } + + var parity = this._spreadMode - 1; + + if (previous && currentPageNumber % 2 !== parity) { + break; + } else if (!previous && currentPageNumber % 2 === parity) { + break; + } + + var _this$_getVisiblePage2 = this._getVisiblePages(), + _views = _this$_getVisiblePage2.views, + _expectedId2 = previous ? currentPageNumber - 1 : currentPageNumber + 1; + + var _iterator4 = _createForOfIteratorHelper(_views), + _step4; + + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + var _step4$value = _step4.value, + _id = _step4$value.id, + _percent = _step4$value.percent, + _widthPercent = _step4$value.widthPercent; + + if (_id !== _expectedId2) { + continue; + } + + if (_percent > 0 && _widthPercent === 100) { + return 2; + } + + break; + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + + break; + } + } + + return 1; + } + }, { + key: "nextPage", + value: function nextPage() { + var currentPageNumber = this._currentPageNumber, + pagesCount = this.pagesCount; + + if (currentPageNumber >= pagesCount) { + return false; + } + + var advance = this._getPageAdvance(currentPageNumber, false) || 1; + this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount); + return true; + } + }, { + key: "previousPage", + value: function previousPage() { + var currentPageNumber = this._currentPageNumber; + + if (currentPageNumber <= 1) { + return false; + } + + var advance = this._getPageAdvance(currentPageNumber, true) || 1; + this.currentPageNumber = Math.max(currentPageNumber - advance, 1); + return true; + } + }]); + + return BaseViewer; + }(); + + exports.BaseViewer = BaseViewer; + + /***/ + }), + /* 31 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = void 0; + + var _pdfjsLib = __webpack_require__(7); + + var _l10n_utils = __webpack_require__(32); + + var _pdf_link_service = __webpack_require__(21); + + 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) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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); + return Constructor; + } + + var AnnotationLayerBuilder = /*#__PURE__*/function () { + function AnnotationLayerBuilder(_ref) { + var pageDiv = _ref.pageDiv, + pdfPage = _ref.pdfPage, + linkService = _ref.linkService, + downloadManager = _ref.downloadManager, + _ref$annotationStorag = _ref.annotationStorage, + annotationStorage = _ref$annotationStorag === void 0 ? null : _ref$annotationStorag, + _ref$imageResourcesPa = _ref.imageResourcesPath, + imageResourcesPath = _ref$imageResourcesPa === void 0 ? "" : _ref$imageResourcesPa, + _ref$renderInteractiv = _ref.renderInteractiveForms, + renderInteractiveForms = _ref$renderInteractiv === void 0 ? true : _ref$renderInteractiv, + _ref$l10n = _ref.l10n, + l10n = _ref$l10n === void 0 ? _l10n_utils.NullL10n : _ref$l10n, + _ref$enableScripting = _ref.enableScripting, + enableScripting = _ref$enableScripting === void 0 ? false : _ref$enableScripting, + _ref$hasJSActionsProm = _ref.hasJSActionsPromise, + hasJSActionsPromise = _ref$hasJSActionsProm === void 0 ? null : _ref$hasJSActionsProm, + _ref$mouseState = _ref.mouseState, + mouseState = _ref$mouseState === void 0 ? null : _ref$mouseState; + + _classCallCheck(this, AnnotationLayerBuilder); + + this.pageDiv = pageDiv; + this.pdfPage = pdfPage; + this.linkService = linkService; + this.downloadManager = downloadManager; + this.imageResourcesPath = imageResourcesPath; + this.renderInteractiveForms = renderInteractiveForms; + this.l10n = l10n; + this.annotationStorage = annotationStorage; + this.enableScripting = enableScripting; + this._hasJSActionsPromise = hasJSActionsPromise; + this._mouseState = mouseState; + this.div = null; + this._cancelled = false; + } + + _createClass(AnnotationLayerBuilder, [{ + key: "render", + value: function render(viewport) { + var _this = this; + + var intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "display"; + return Promise.all([this.pdfPage.getAnnotations({ + intent: intent + }), this._hasJSActionsPromise]).then(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + annotations = _ref3[0], + _ref3$ = _ref3[1], + hasJSActions = _ref3$ === void 0 ? false : _ref3$; + + if (_this._cancelled) { + return; + } + + if (annotations.length === 0) { + return; + } + + var parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: _this.div, + annotations: annotations, + page: _this.pdfPage, + imageResourcesPath: _this.imageResourcesPath, + renderInteractiveForms: _this.renderInteractiveForms, + linkService: _this.linkService, + downloadManager: _this.downloadManager, + annotationStorage: _this.annotationStorage, + enableScripting: _this.enableScripting, + hasJSActions: hasJSActions, + mouseState: _this._mouseState + }; + + if (_this.div) { + _pdfjsLib.AnnotationLayer.update(parameters); + } else { + _this.div = document.createElement("div"); + _this.div.className = "annotationLayer"; + + _this.pageDiv.appendChild(_this.div); + + parameters.div = _this.div; + + _pdfjsLib.AnnotationLayer.render(parameters); + + _this.l10n.translate(_this.div); + } + }); + } + }, { + key: "cancel", + value: function cancel() { + this._cancelled = true; + } + }, { + key: "hide", + value: function hide() { + if (!this.div) { + return; + } + + this.div.hidden = true; + } + }]); + + return AnnotationLayerBuilder; + }(); + + exports.AnnotationLayerBuilder = AnnotationLayerBuilder; + + var DefaultAnnotationLayerFactory = /*#__PURE__*/function () { + function DefaultAnnotationLayerFactory() { + _classCallCheck(this, DefaultAnnotationLayerFactory); + } + + _createClass(DefaultAnnotationLayerFactory, [{ + key: "createAnnotationLayerBuilder", + value: function createAnnotationLayerBuilder(pageDiv, pdfPage) { + var annotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var imageResourcesPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; + var renderInteractiveForms = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var l10n = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _l10n_utils.NullL10n; + var enableScripting = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; + var hasJSActionsPromise = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; + var mouseState = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; + return new AnnotationLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage, + imageResourcesPath: imageResourcesPath, + renderInteractiveForms: renderInteractiveForms, + linkService: new _pdf_link_service.SimpleLinkService(), + l10n: l10n, + annotationStorage: annotationStorage, + enableScripting: enableScripting, + hasJSActionsPromise: hasJSActionsPromise, + mouseState: mouseState + }); + } + }]); + + return DefaultAnnotationLayerFactory; + }(); + + exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory; + + /***/ + }), + /* 32 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.getL10nFallback = getL10nFallback; + exports.NullL10n = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + 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); + }); + }; + } + + var DEFAULT_L10N_STRINGS = { + of_pages: "of {{pagesCount}}", + page_of_pages: "({{pageNumber}} of {{pagesCount}})", + document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)", + document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)", + document_properties_date_string: "{{date}}, {{time}}", + 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", + 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_yes: "Yes", + document_properties_linearized_no: "No", + print_progress_percent: "{{progress}}%", + "toggle_sidebar.title": "Toggle Sidebar", + "toggle_sidebar_notification2.title": "Toggle Sidebar (document contains outline/attachments/layers)", + additional_layers: "Additional Layers", + page_landmark: "Page {{page}}", + thumb_page_title: "Page {{page}}", + thumb_page_canvas: "Thumbnail of Page {{page}}", + find_reached_top: "Reached top of document, continued from bottom", + find_reached_bottom: "Reached end of document, continued from top", + "find_match_count[one]": "{{current}} of {{total}} match", + "find_match_count[other]": "{{current}} of {{total}} matches", + "find_match_count_limit[one]": "More than {{limit}} match", + "find_match_count_limit[other]": "More than {{limit}} matches", + find_not_found: "Phrase not found", + error_version_info: "PDF.js v{{version}} (build: {{build}})", + error_message: "Message: {{message}}", + error_stack: "Stack: {{stack}}", + error_file: "File: {{file}}", + error_line: "Line: {{line}}", + rendering_error: "An error occurred while rendering the page.", + page_scale_width: "Page Width", + page_scale_fit: "Page Fit", + page_scale_auto: "Automatic Zoom", + page_scale_actual: "Actual Size", + page_scale_percent: "{{scale}}%", + 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.", + 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." + }; + + function getL10nFallback(key, args) { + switch (key) { + case "find_match_count": + key = "find_match_count[".concat(args.total === 1 ? "one" : "other", "]"); + break; + + case "find_match_count_limit": + key = "find_match_count_limit[".concat(args.limit === 1 ? "one" : "other", "]"); + break; + } + + return DEFAULT_L10N_STRINGS[key] || ""; + } + + function formatL10nValue(text, args) { + if (!args) { + return text; + } + + return text.replace(/\{\{\s*(\w+)\s*\}\}/g, function (all, name) { + return name in args ? args[name] : "{{" + name + "}}"; + }); + } + + var NullL10n = { + getLanguage: function getLanguage() { + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + return _context.abrupt("return", "en-us"); + + case 1: + case "end": + return _context.stop(); + } + } + }, _callee); + }))(); + }, + getDirection: function getDirection() { + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + return _context2.abrupt("return", "ltr"); + + case 1: + case "end": + return _context2.stop(); + } + } + }, _callee2); + }))(); + }, + get: function get(key) { + var _arguments = arguments; + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { + var args, fallback; + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + args = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : null; + fallback = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : getL10nFallback(key, args); + return _context3.abrupt("return", formatL10nValue(fallback, args)); + + case 3: + case "end": + return _context3.stop(); + } + } + }, _callee3); + }))(); + }, + translate: function translate(element) { + return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4() { + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + case "end": + return _context4.stop(); + } + } + }, _callee4); + }))(); + } + }; + exports.NullL10n = NullL10n; + + /***/ + }), + /* 33 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFPageView = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _ui_utils = __webpack_require__(6); + + var _pdfjsLib = __webpack_require__(7); + + var _l10n_utils = __webpack_require__(32); + + var _pdf_rendering_queue = __webpack_require__(10); + + var _viewer_compatibility = __webpack_require__(2); + + 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); + return Constructor; + } + + var MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216; + + var PDFPageView = /*#__PURE__*/function () { + function PDFPageView(options) { + _classCallCheck(this, PDFPageView); + + var container = options.container; + var defaultViewport = options.defaultViewport; + this.id = options.id; + this.renderingId = "page" + this.id; + this.pdfPage = null; + this.pageLabel = null; + this.rotation = 0; + this.scale = options.scale || _ui_utils.DEFAULT_SCALE; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = options.optionalContentConfigPromise || null; + this.hasRestrictedScaling = false; + this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.renderInteractiveForms = options.renderInteractiveForms !== false; + this.useOnlyCssZoom = options.useOnlyCssZoom || false; + this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS; + this.eventBus = options.eventBus; + this.renderingQueue = options.renderingQueue; + this.textLayerFactory = options.textLayerFactory; + this.annotationLayerFactory = options.annotationLayerFactory; + this.xfaLayerFactory = options.xfaLayerFactory; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; + this.enableWebGL = options.enableWebGL || false; + this.l10n = options.l10n || _l10n_utils.NullL10n; + this.enableScripting = options.enableScripting === true; + this.paintTask = null; + this.paintedViewportMap = new WeakMap(); + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + this.resume = null; + this._renderError = null; + this.annotationLayer = null; + this.textLayer = null; + this.zoomLayer = null; + this.xfaLayer = null; + var div = document.createElement("div"); + div.className = "page"; + div.style.width = Math.floor(this.viewport.width) + "px"; + div.style.height = Math.floor(this.viewport.height) + "px"; + div.setAttribute("data-page-number", this.id); + div.setAttribute("role", "region"); + this.l10n.get("page_landmark", { + page: this.id + }).then(function (msg) { + div.setAttribute("aria-label", msg); + }); + this.div = div; + container.appendChild(div); + } + + _createClass(PDFPageView, [{ + key: "setPdfPage", + value: function setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: this.scale * _ui_utils.CSS_UNITS, + rotation: totalRotation + }); + this.reset(); + } + }, { + key: "destroy", + value: function destroy() { + this.reset(); + + if (this.pdfPage) { + this.pdfPage.cleanup(); + } + } + }, { + key: "_renderAnnotationLayer", + value: function () { + var _renderAnnotationLayer2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var error; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + error = null; + _context.prev = 1; + _context.next = 4; + return this.annotationLayer.render(this.viewport, "display"); + + case 4: + _context.next = 9; + break; + + case 6: + _context.prev = 6; + _context.t0 = _context["catch"](1); + error = _context.t0; + + case 9: + _context.prev = 9; + this.eventBus.dispatch("annotationlayerrendered", { + source: this, + pageNumber: this.id, + error: error + }); + return _context.finish(9); + + case 12: + case "end": + return _context.stop(); + } + } + }, _callee, this, [[1, 6, 9, 12]]); + })); + + function _renderAnnotationLayer() { + return _renderAnnotationLayer2.apply(this, arguments); + } + + return _renderAnnotationLayer; + }() + }, { + key: "_renderXfaLayer", + value: function () { + var _renderXfaLayer2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + var error; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + error = null; + _context2.prev = 1; + _context2.next = 4; + return this.xfaLayer.render(this.viewport, "display"); + + case 4: + _context2.next = 9; + break; + + case 6: + _context2.prev = 6; + _context2.t0 = _context2["catch"](1); + error = _context2.t0; + + case 9: + _context2.prev = 9; + this.eventBus.dispatch("xfalayerrendered", { + source: this, + pageNumber: this.id, + error: error + }); + return _context2.finish(9); + + case 12: + case "end": + return _context2.stop(); + } + } + }, _callee2, this, [[1, 6, 9, 12]]); + })); + + function _renderXfaLayer() { + return _renderXfaLayer2.apply(this, arguments); + } + + return _renderXfaLayer; + }() + }, { + key: "_resetZoomLayer", + value: function _resetZoomLayer() { + var removeFromDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (!this.zoomLayer) { + return; + } + + var zoomLayerCanvas = this.zoomLayer.firstChild; + this.paintedViewportMap["delete"](zoomLayerCanvas); + zoomLayerCanvas.width = 0; + zoomLayerCanvas.height = 0; + + if (removeFromDOM) { + this.zoomLayer.remove(); + } + + this.zoomLayer = null; + } + }, { + key: "reset", + value: function reset() { + var _this$annotationLayer, + _this$xfaLayer, + _this = this; + + var keepZoomLayer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var keepAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + this.cancelRendering(keepAnnotations); + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + var div = this.div; + div.style.width = Math.floor(this.viewport.width) + "px"; + div.style.height = Math.floor(this.viewport.height) + "px"; + var childNodes = div.childNodes; + var currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null; + var currentAnnotationNode = keepAnnotations && ((_this$annotationLayer = this.annotationLayer) === null || _this$annotationLayer === void 0 ? void 0 : _this$annotationLayer.div) || null; + var currentXfaLayerNode = ((_this$xfaLayer = this.xfaLayer) === null || _this$xfaLayer === void 0 ? void 0 : _this$xfaLayer.div) || null; + + for (var i = childNodes.length - 1; i >= 0; i--) { + var node = childNodes[i]; + + if (currentZoomLayerNode === node || currentAnnotationNode === node || currentXfaLayerNode === node) { + continue; + } + + div.removeChild(node); + } + + div.removeAttribute("data-loaded"); + + if (currentAnnotationNode) { + this.annotationLayer.hide(); + } else if (this.annotationLayer) { + this.annotationLayer.cancel(); + this.annotationLayer = null; + } + + if (!currentZoomLayerNode) { + if (this.canvas) { + this.paintedViewportMap["delete"](this.canvas); + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + + this._resetZoomLayer(); + } + + if (this.svg) { + this.paintedViewportMap["delete"](this.svg); + delete this.svg; + } + + this.loadingIconDiv = document.createElement("div"); + this.loadingIconDiv.className = "loadingIcon"; + this.loadingIconDiv.setAttribute("role", "img"); + this.l10n.get("loading").then(function (msg) { + var _this$loadingIconDiv; + + (_this$loadingIconDiv = _this.loadingIconDiv) === null || _this$loadingIconDiv === void 0 ? void 0 : _this$loadingIconDiv.setAttribute("aria-label", msg); + }); + div.appendChild(this.loadingIconDiv); + } + }, { + key: "update", + value: function update(scale, rotation) { + var optionalContentConfigPromise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + this.scale = scale || this.scale; + + if (typeof rotation !== "undefined") { + this.rotation = rotation; + } + + if (optionalContentConfigPromise instanceof Promise) { + this._optionalContentConfigPromise = optionalContentConfigPromise; + } + + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: this.scale * _ui_utils.CSS_UNITS, + rotation: totalRotation + }); + + if (this.svg) { + this.cssTransform(this.svg, true); + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform: true, + timestamp: performance.now(), + error: this._renderError + }); + return; + } + + var isScalingRestricted = false; + + if (this.canvas && this.maxCanvasPixels > 0) { + var outputScale = this.outputScale; + + if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) { + isScalingRestricted = true; + } + } + + if (this.canvas) { + if (this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { + this.cssTransform(this.canvas, true); + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform: true, + timestamp: performance.now(), + error: this._renderError + }); + return; + } + + if (!this.zoomLayer && !this.canvas.hidden) { + this.zoomLayer = this.canvas.parentNode; + this.zoomLayer.style.position = "absolute"; + } + } + + if (this.zoomLayer) { + this.cssTransform(this.zoomLayer.firstChild); + } + + this.reset(true, true); + } + }, { + key: "cancelRendering", + value: function cancelRendering() { + var keepAnnotations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (this.paintTask) { + this.paintTask.cancel(); + this.paintTask = null; + } + + this.resume = null; + + if (this.textLayer) { + this.textLayer.cancel(); + this.textLayer = null; + } + + if (!keepAnnotations && this.annotationLayer) { + this.annotationLayer.cancel(); + this.annotationLayer = null; + } + } + }, { + key: "cssTransform", + value: function cssTransform(target) { + var redrawAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var width = this.viewport.width; + var height = this.viewport.height; + var div = this.div; + target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + "px"; + target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + "px"; + var relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation; + var absRotation = Math.abs(relativeRotation); + var scaleX = 1, + scaleY = 1; + + if (absRotation === 90 || absRotation === 270) { + scaleX = height / width; + scaleY = width / height; + } + + target.style.transform = "rotate(".concat(relativeRotation, "deg) scale(").concat(scaleX, ", ").concat(scaleY, ")"); + + if (this.textLayer) { + var textLayerViewport = this.textLayer.viewport; + var textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation; + var textAbsRotation = Math.abs(textRelativeRotation); + var scale = width / textLayerViewport.width; + + if (textAbsRotation === 90 || textAbsRotation === 270) { + scale = width / textLayerViewport.height; + } + + var textLayerDiv = this.textLayer.textLayerDiv; + var transX, transY; + + switch (textAbsRotation) { + case 0: + transX = transY = 0; + break; + + case 90: + transX = 0; + transY = "-" + textLayerDiv.style.height; + break; + + case 180: + transX = "-" + textLayerDiv.style.width; + transY = "-" + textLayerDiv.style.height; + break; + + case 270: + transX = "-" + textLayerDiv.style.width; + transY = 0; + break; + + default: + console.error("Bad rotation value."); + break; + } + + textLayerDiv.style.transform = "rotate(".concat(textAbsRotation, "deg) ") + "scale(".concat(scale, ") ") + "translate(".concat(transX, ", ").concat(transY, ")"); + textLayerDiv.style.transformOrigin = "0% 0%"; + } + + if (redrawAnnotations && this.annotationLayer) { + this._renderAnnotationLayer(); + } + + if (this.xfaLayer) { + this._renderXfaLayer(); + } + } + }, { + key: "width", + get: function get() { + return this.viewport.width; + } + }, { + key: "height", + get: function get() { + return this.viewport.height; + } + }, { + key: "getPagePoint", + value: function getPagePoint(x, y) { + return this.viewport.convertToPdfPoint(x, y); + } + }, { + key: "draw", + value: function draw() { + var _this$annotationLayer2, + _this2 = this; + + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + this.reset(); + } + + var div = this.div, + pdfPage = this.pdfPage; + + if (!pdfPage) { + this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + + if (this.loadingIconDiv) { + div.removeChild(this.loadingIconDiv); + delete this.loadingIconDiv; + } + + return Promise.reject(new Error("pdfPage is not loaded")); + } + + this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + var canvasWrapper = document.createElement("div"); + canvasWrapper.style.width = div.style.width; + canvasWrapper.style.height = div.style.height; + canvasWrapper.classList.add("canvasWrapper"); + + if ((_this$annotationLayer2 = this.annotationLayer) !== null && _this$annotationLayer2 !== void 0 && _this$annotationLayer2.div) { + div.insertBefore(canvasWrapper, this.annotationLayer.div); + } else { + div.appendChild(canvasWrapper); + } + + var textLayer = null; + + if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) { + var _this$annotationLayer3; + + var textLayerDiv = document.createElement("div"); + textLayerDiv.className = "textLayer"; + textLayerDiv.style.width = canvasWrapper.style.width; + textLayerDiv.style.height = canvasWrapper.style.height; + + if ((_this$annotationLayer3 = this.annotationLayer) !== null && _this$annotationLayer3 !== void 0 && _this$annotationLayer3.div) { + div.insertBefore(textLayerDiv, this.annotationLayer.div); + } else { + div.appendChild(textLayerDiv); + } + + textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE, this.eventBus); + } + + this.textLayer = textLayer; + var renderContinueCallback = null; + + if (this.renderingQueue) { + renderContinueCallback = function renderContinueCallback(cont) { + if (!_this2.renderingQueue.isHighestPriority(_this2)) { + _this2.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; + + _this2.resume = function () { + _this2.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + cont(); + }; + + return; + } + + cont(); + }; + } + + var finishPaintTask = /*#__PURE__*/function () { + var _ref = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { + var error, + _args3 = arguments; + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + error = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null; + + if (paintTask === _this2.paintTask) { + _this2.paintTask = null; + } + + if (!(error instanceof _pdfjsLib.RenderingCancelledException)) { + _context3.next = 5; + break; + } + + _this2._renderError = null; + return _context3.abrupt("return"); + + case 5: + _this2._renderError = error; + _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + + if (_this2.loadingIconDiv) { + div.removeChild(_this2.loadingIconDiv); + delete _this2.loadingIconDiv; + } + + _this2._resetZoomLayer(true); + + _this2.eventBus.dispatch("pagerendered", { + source: _this2, + pageNumber: _this2.id, + cssTransform: false, + timestamp: performance.now(), + error: _this2._renderError + }); + + if (!error) { + _context3.next = 12; + break; + } + + throw error; + + case 12: + case "end": + return _context3.stop(); + } + } + }, _callee3); + })); + + return function finishPaintTask() { + return _ref.apply(this, arguments); + }; + }(); + + var paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); + paintTask.onRenderContinue = renderContinueCallback; + this.paintTask = paintTask; + var resultPromise = paintTask.promise.then(function () { + return finishPaintTask(null).then(function () { + if (textLayer) { + var readableStream = pdfPage.streamTextContent({ + normalizeWhitespace: true + }); + textLayer.setTextContentStream(readableStream); + textLayer.render(); + } + }); + }, function (reason) { + return finishPaintTask(reason); + }); + + if (this.annotationLayerFactory) { + if (!this.annotationLayer) { + this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, null, this.imageResourcesPath, this.renderInteractiveForms, this.l10n, this.enableScripting, null, null); + } + + this._renderAnnotationLayer(); + } + + if (this.xfaLayerFactory) { + if (!this.xfaLayer) { + this.xfaLayer = this.xfaLayerFactory.createXfaLayerBuilder(div, pdfPage); + } + + this._renderXfaLayer(); + } + + div.setAttribute("data-loaded", true); + this.eventBus.dispatch("pagerender", { + source: this, + pageNumber: this.id + }); + return resultPromise; + } + }, { + key: "paintOnCanvas", + value: function paintOnCanvas(canvasWrapper) { + var renderCapability = (0, _pdfjsLib.createPromiseCapability)(); + var result = { + promise: renderCapability.promise, + onRenderContinue: function onRenderContinue(cont) { + cont(); + }, + cancel: function cancel() { + renderTask.cancel(); + } + }; + var viewport = this.viewport; + var canvas = document.createElement("canvas"); + canvas.hidden = true; + var isCanvasHidden = true; + + var showCanvas = function showCanvas() { + if (isCanvasHidden) { + canvas.hidden = false; + isCanvasHidden = false; + } + }; + + canvasWrapper.appendChild(canvas); + this.canvas = canvas; + canvas.mozOpaque = true; + var ctx = canvas.getContext("2d", { + alpha: false + }); + var outputScale = (0, _ui_utils.getOutputScale)(ctx); + this.outputScale = outputScale; + + if (this.useOnlyCssZoom) { + var actualSizeViewport = viewport.clone({ + scale: _ui_utils.CSS_UNITS + }); + outputScale.sx *= actualSizeViewport.width / viewport.width; + outputScale.sy *= actualSizeViewport.height / viewport.height; + outputScale.scaled = true; + } + + if (this.maxCanvasPixels > 0) { + var pixelsInViewport = viewport.width * viewport.height; + var maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport); + + if (outputScale.sx > maxScale || outputScale.sy > maxScale) { + outputScale.sx = maxScale; + outputScale.sy = maxScale; + outputScale.scaled = true; + this.hasRestrictedScaling = true; + } else { + this.hasRestrictedScaling = false; + } + } + + var sfx = (0, _ui_utils.approximateFraction)(outputScale.sx); + var sfy = (0, _ui_utils.approximateFraction)(outputScale.sy); + canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]); + canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]); + canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + "px"; + canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + "px"; + this.paintedViewportMap.set(canvas, viewport); + var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0]; + var renderContext = { + canvasContext: ctx, + transform: transform, + viewport: this.viewport, + enableWebGL: this.enableWebGL, + renderInteractiveForms: this.renderInteractiveForms, + optionalContentConfigPromise: this._optionalContentConfigPromise + }; + var renderTask = this.pdfPage.render(renderContext); + + renderTask.onContinue = function (cont) { + showCanvas(); + + if (result.onRenderContinue) { + result.onRenderContinue(cont); + } else { + cont(); + } + }; + + renderTask.promise.then(function () { + showCanvas(); + renderCapability.resolve(undefined); + }, function (error) { + showCanvas(); + renderCapability.reject(error); + }); + return result; + } + }, { + key: "paintOnSvg", + value: function paintOnSvg(wrapper) { + var _this3 = this; + + var cancelled = false; + + var ensureNotCancelled = function ensureNotCancelled() { + if (cancelled) { + throw new _pdfjsLib.RenderingCancelledException("Rendering cancelled, page ".concat(_this3.id), "svg"); + } + }; + + var pdfPage = this.pdfPage; + var actualSizeViewport = this.viewport.clone({ + scale: _ui_utils.CSS_UNITS + }); + var promise = pdfPage.getOperatorList().then(function (opList) { + ensureNotCancelled(); + var svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs, _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL); + return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { + ensureNotCancelled(); + _this3.svg = svg; + + _this3.paintedViewportMap.set(svg, actualSizeViewport); + + svg.style.width = wrapper.style.width; + svg.style.height = wrapper.style.height; + _this3.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + wrapper.appendChild(svg); + }); + }); + return { + promise: promise, + onRenderContinue: function onRenderContinue(cont) { + cont(); + }, + cancel: function cancel() { + cancelled = true; + } + }; + } + }, { + key: "setPageLabel", + value: function setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + + if (this.pageLabel !== null) { + this.div.setAttribute("data-page-label", this.pageLabel); + } else { + this.div.removeAttribute("data-page-label"); + } + } + }]); + + return PDFPageView; + }(); + + exports.PDFPageView = PDFPageView; + + /***/ + }), + /* 34 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.TextLayerBuilder = exports.DefaultTextLayerFactory = void 0; + + var _pdfjsLib = __webpack_require__(7); + + 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); + return Constructor; + } + + var EXPAND_DIVS_TIMEOUT = 300; + + var TextLayerBuilder = /*#__PURE__*/function () { + function TextLayerBuilder(_ref) { + var textLayerDiv = _ref.textLayerDiv, + eventBus = _ref.eventBus, + pageIndex = _ref.pageIndex, + viewport = _ref.viewport, + _ref$findController = _ref.findController, + findController = _ref$findController === void 0 ? null : _ref$findController, + _ref$enhanceTextSelec = _ref.enhanceTextSelection, + enhanceTextSelection = _ref$enhanceTextSelec === void 0 ? false : _ref$enhanceTextSelec; + + _classCallCheck(this, TextLayerBuilder); + + this.textLayerDiv = textLayerDiv; + this.eventBus = eventBus; + this.textContent = null; + this.textContentItemsStr = []; + this.textContentStream = null; + this.renderingDone = false; + this.pageIdx = pageIndex; + this.pageNumber = this.pageIdx + 1; + this.matches = []; + this.viewport = viewport; + this.textDivs = []; + this.findController = findController; + this.textLayerRenderTask = null; + this.enhanceTextSelection = enhanceTextSelection; + this._onUpdateTextLayerMatches = null; + + this._bindMouse(); + } + + _createClass(TextLayerBuilder, [{ + key: "_finishRendering", + value: function _finishRendering() { + this.renderingDone = true; + + if (!this.enhanceTextSelection) { + var endOfContent = document.createElement("div"); + endOfContent.className = "endOfContent"; + this.textLayerDiv.appendChild(endOfContent); + } + + this.eventBus.dispatch("textlayerrendered", { + source: this, + pageNumber: this.pageNumber, + numTextDivs: this.textDivs.length + }); + } + }, { + key: "render", + value: function render() { + var _this = this; + + var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + if (!(this.textContent || this.textContentStream) || this.renderingDone) { + return; + } + + this.cancel(); + this.textDivs = []; + var textLayerFrag = document.createDocumentFragment(); + this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({ + textContent: this.textContent, + textContentStream: this.textContentStream, + container: textLayerFrag, + viewport: this.viewport, + textDivs: this.textDivs, + textContentItemsStr: this.textContentItemsStr, + timeout: timeout, + enhanceTextSelection: this.enhanceTextSelection + }); + this.textLayerRenderTask.promise.then(function () { + _this.textLayerDiv.appendChild(textLayerFrag); + + _this._finishRendering(); + + _this._updateMatches(); + }, function (reason) { + }); + + if (!this._onUpdateTextLayerMatches) { + this._onUpdateTextLayerMatches = function (evt) { + if (evt.pageIndex === _this.pageIdx || evt.pageIndex === -1) { + _this._updateMatches(); + } + }; + + this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches); + } + } + }, { + key: "cancel", + value: function cancel() { + if (this.textLayerRenderTask) { + this.textLayerRenderTask.cancel(); + this.textLayerRenderTask = null; + } + + if (this._onUpdateTextLayerMatches) { + this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches); + + this._onUpdateTextLayerMatches = null; + } + } + }, { + key: "setTextContentStream", + value: function setTextContentStream(readableStream) { + this.cancel(); + this.textContentStream = readableStream; + } + }, { + key: "setTextContent", + value: function setTextContent(textContent) { + this.cancel(); + this.textContent = textContent; + } + }, { + key: "_convertMatches", + value: function _convertMatches(matches, matchesLength) { + if (!matches) { + return []; + } + + var textContentItemsStr = this.textContentItemsStr; + var i = 0, + iIndex = 0; + var end = textContentItemsStr.length - 1; + var result = []; + + for (var m = 0, mm = matches.length; m < mm; m++) { + var matchIdx = matches[m]; + + while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + + if (i === textContentItemsStr.length) { + console.error("Could not find a matching mapping"); + } + + var match = { + begin: { + divIdx: i, + offset: matchIdx - iIndex + } + }; + matchIdx += matchesLength[m]; + + while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + + match.end = { + divIdx: i, + offset: matchIdx - iIndex + }; + result.push(match); + } + + return result; + } + }, { + key: "_renderMatches", + value: function _renderMatches(matches) { + if (matches.length === 0) { + return; + } + + var findController = this.findController, + pageIdx = this.pageIdx, + textContentItemsStr = this.textContentItemsStr, + textDivs = this.textDivs; + var isSelectedPage = pageIdx === findController.selected.pageIdx; + var selectedMatchIdx = findController.selected.matchIdx; + var highlightAll = findController.state.highlightAll; + var prevEnd = null; + var infinity = { + divIdx: -1, + offset: undefined + }; + + function beginText(begin, className) { + var divIdx = begin.divIdx; + textDivs[divIdx].textContent = ""; + appendTextToDiv(divIdx, 0, begin.offset, className); + } + + function appendTextToDiv(divIdx, fromOffset, toOffset, className) { + var div = textDivs[divIdx]; + var content = textContentItemsStr[divIdx].substring(fromOffset, toOffset); + var node = document.createTextNode(content); + + if (className) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(node); + div.appendChild(span); + return; + } + + div.appendChild(node); + } + + var i0 = selectedMatchIdx, + i1 = i0 + 1; + + if (highlightAll) { + i0 = 0; + i1 = matches.length; + } else if (!isSelectedPage) { + return; + } + + for (var i = i0; i < i1; i++) { + var match = matches[i]; + var begin = match.begin; + var end = match.end; + var isSelected = isSelectedPage && i === selectedMatchIdx; + var highlightSuffix = isSelected ? " selected" : ""; + + if (isSelected) { + findController.scrollMatchIntoView({ + element: textDivs[begin.divIdx], + pageIndex: pageIdx, + matchIndex: selectedMatchIdx + }); + } + + if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { + if (prevEnd !== null) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + + beginText(begin); + } else { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); + } + + if (begin.divIdx === end.divIdx) { + appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix); + } else { + appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); + + for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { + textDivs[n0].className = "highlight middle" + highlightSuffix; + } + + beginText(end, "highlight end" + highlightSuffix); + } + + prevEnd = end; + } + + if (prevEnd) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + } + }, { + key: "_updateMatches", + value: function _updateMatches() { + if (!this.renderingDone) { + return; + } + + var findController = this.findController, + matches = this.matches, + pageIdx = this.pageIdx, + textContentItemsStr = this.textContentItemsStr, + textDivs = this.textDivs; + var clearedUntilDivIdx = -1; + + for (var i = 0, ii = matches.length; i < ii; i++) { + var match = matches[i]; + var begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); + + for (var n = begin, end = match.end.divIdx; n <= end; n++) { + var div = textDivs[n]; + div.textContent = textContentItemsStr[n]; + div.className = ""; + } + + clearedUntilDivIdx = match.end.divIdx + 1; + } + + if (!(findController !== null && findController !== void 0 && findController.highlightMatches)) { + return; + } + + var pageMatches = findController.pageMatches[pageIdx] || null; + var pageMatchesLength = findController.pageMatchesLength[pageIdx] || null; + this.matches = this._convertMatches(pageMatches, pageMatchesLength); + + this._renderMatches(this.matches); + } + }, { + key: "_bindMouse", + value: function _bindMouse() { + var _this2 = this; + + var div = this.textLayerDiv; + var expandDivsTimer = null; + div.addEventListener("mousedown", function (evt) { + if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) { + _this2.textLayerRenderTask.expandTextDivs(true); + + if (expandDivsTimer) { + clearTimeout(expandDivsTimer); + expandDivsTimer = null; + } + + return; + } + + var end = div.querySelector(".endOfContent"); + + if (!end) { + return; + } + + var adjustTop = evt.target !== div; + adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none"; + + if (adjustTop) { + var divBounds = div.getBoundingClientRect(); + var r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height); + end.style.top = (r * 100).toFixed(2) + "%"; + } + + end.classList.add("active"); + }); + div.addEventListener("mouseup", function () { + if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) { + expandDivsTimer = setTimeout(function () { + if (_this2.textLayerRenderTask) { + _this2.textLayerRenderTask.expandTextDivs(false); + } + + expandDivsTimer = null; + }, EXPAND_DIVS_TIMEOUT); + return; + } + + var end = div.querySelector(".endOfContent"); + + if (!end) { + return; + } + + end.style.top = ""; + end.classList.remove("active"); + }); + } + }]); + + return TextLayerBuilder; + }(); + + exports.TextLayerBuilder = TextLayerBuilder; + + var DefaultTextLayerFactory = /*#__PURE__*/function () { + function DefaultTextLayerFactory() { + _classCallCheck(this, DefaultTextLayerFactory); + } + + _createClass(DefaultTextLayerFactory, [{ + key: "createTextLayerBuilder", + value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) { + var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + var eventBus = arguments.length > 4 ? arguments[4] : undefined; + return new TextLayerBuilder({ + textLayerDiv: textLayerDiv, + pageIndex: pageIndex, + viewport: viewport, + enhanceTextSelection: enhanceTextSelection, + eventBus: eventBus + }); + } + }]); + + return DefaultTextLayerFactory; + }(); + + exports.DefaultTextLayerFactory = DefaultTextLayerFactory; + + /***/ + }), + /* 35 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.XfaLayerBuilder = exports.DefaultXfaLayerFactory = void 0; + + var _pdfjsLib = __webpack_require__(7); + + 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); + return Constructor; + } + + var XfaLayerBuilder = /*#__PURE__*/function () { + function XfaLayerBuilder(_ref) { + var pageDiv = _ref.pageDiv, + pdfPage = _ref.pdfPage; + + _classCallCheck(this, XfaLayerBuilder); + + this.pageDiv = pageDiv; + this.pdfPage = pdfPage; + this.div = null; + this._cancelled = false; + } + + _createClass(XfaLayerBuilder, [{ + key: "render", + value: function render(viewport) { + var _this = this; + + var intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "display"; + return this.pdfPage.getXfa().then(function (xfa) { + if (_this._cancelled) { + return; + } + + var parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: _this.div, + xfa: xfa, + page: _this.pdfPage + }; + + if (_this.div) { + _pdfjsLib.XfaLayer.update(parameters); + } else { + _this.div = document.createElement("div"); + + _this.pageDiv.appendChild(_this.div); + + parameters.div = _this.div; + + _pdfjsLib.XfaLayer.render(parameters); + } + }); + } + }, { + key: "cancel", + value: function cancel() { + this._cancelled = true; + } + }, { + key: "hide", + value: function hide() { + if (!this.div) { + return; + } + + this.div.hidden = true; + } + }]); + + return XfaLayerBuilder; + }(); + + exports.XfaLayerBuilder = XfaLayerBuilder; + + var DefaultXfaLayerFactory = /*#__PURE__*/function () { + function DefaultXfaLayerFactory() { + _classCallCheck(this, DefaultXfaLayerFactory); + } + + _createClass(DefaultXfaLayerFactory, [{ + key: "createXfaLayerBuilder", + value: function createXfaLayerBuilder(pageDiv, pdfPage) { + return new XfaLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage + }); + } + }]); + + return DefaultXfaLayerFactory; + }(); + + exports.DefaultXfaLayerFactory = DefaultXfaLayerFactory; + + /***/ + }), + /* 36 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.SecondaryToolbar = void 0; + + var _ui_utils = __webpack_require__(6); + + var _pdf_cursor_tools = __webpack_require__(8); + + var _pdf_single_page_viewer = __webpack_require__(37); + + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + var SecondaryToolbar = /*#__PURE__*/function () { + function SecondaryToolbar(options, mainContainer, eventBus) { + var _this = this; + + _classCallCheck(this, SecondaryToolbar); + + this.toolbar = options.toolbar; + this.toggleButton = options.toggleButton; + this.toolbarButtonContainer = options.toolbarButtonContainer; + this.buttons = [{ + element: options.presentationModeButton, + eventName: "presentationmode", + close: true + }, { + element: options.openFileButton, + eventName: "openfile", + close: true + }, { + element: options.printButton, + eventName: "print", + close: true + }, { + element: options.downloadButton, + eventName: "download", + close: true + }, { + element: options.viewBookmarkButton, + eventName: null, + close: true + }, { + element: options.firstPageButton, + eventName: "firstpage", + close: true + }, { + element: options.lastPageButton, + eventName: "lastpage", + close: true + }, { + element: options.pageRotateCwButton, + eventName: "rotatecw", + close: false + }, { + element: options.pageRotateCcwButton, + eventName: "rotateccw", + close: false + }, { + element: options.cursorSelectToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: _pdf_cursor_tools.CursorTool.SELECT + }, + close: true + }, { + element: options.cursorHandToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: _pdf_cursor_tools.CursorTool.HAND + }, + close: true + }, { + element: options.scrollVerticalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: _ui_utils.ScrollMode.VERTICAL + }, + close: true + }, { + element: options.scrollHorizontalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: _ui_utils.ScrollMode.HORIZONTAL + }, + close: true + }, { + element: options.scrollWrappedButton, + eventName: "switchscrollmode", + eventDetails: { + mode: _ui_utils.ScrollMode.WRAPPED + }, + close: true + }, { + element: options.spreadNoneButton, + eventName: "switchspreadmode", + eventDetails: { + mode: _ui_utils.SpreadMode.NONE + }, + close: true + }, { + element: options.spreadOddButton, + eventName: "switchspreadmode", + eventDetails: { + mode: _ui_utils.SpreadMode.ODD + }, + close: true + }, { + element: options.spreadEvenButton, + eventName: "switchspreadmode", + eventDetails: { + mode: _ui_utils.SpreadMode.EVEN + }, + close: true + }, { + element: options.documentPropertiesButton, + eventName: "documentproperties", + close: true + }]; + this.items = { + firstPage: options.firstPageButton, + lastPage: options.lastPageButton, + pageRotateCw: options.pageRotateCwButton, + pageRotateCcw: options.pageRotateCcwButton + }; + this.mainContainer = mainContainer; + this.eventBus = eventBus; + this.opened = false; + this.containerHeight = null; + this.previousContainerHeight = null; + this.reset(); + + this._bindClickListeners(); + + this._bindCursorToolsListener(options); + + this._bindScrollModeListener(options); + + this._bindSpreadModeListener(options); + + this.eventBus._on("resize", this._setMaxHeight.bind(this)); + + this.eventBus._on("baseviewerinit", function (evt) { + if (evt.source instanceof _pdf_single_page_viewer.PDFSinglePageViewer) { + _this.toolbarButtonContainer.classList.add("hiddenScrollModeButtons", "hiddenSpreadModeButtons"); + } else { + _this.toolbarButtonContainer.classList.remove("hiddenScrollModeButtons", "hiddenSpreadModeButtons"); + } + }); + } + + _createClass(SecondaryToolbar, [{ + key: "isOpen", + get: function get() { + return this.opened; + } + }, { + key: "setPageNumber", + value: function setPageNumber(pageNumber) { + this.pageNumber = pageNumber; + + this._updateUIState(); + } + }, { + key: "setPagesCount", + value: function setPagesCount(pagesCount) { + this.pagesCount = pagesCount; + + this._updateUIState(); + } + }, { + key: "reset", + value: function reset() { + this.pageNumber = 0; + this.pagesCount = 0; + + this._updateUIState(); + + this.eventBus.dispatch("secondarytoolbarreset", { + source: this + }); + } + }, { + key: "_updateUIState", + value: function _updateUIState() { + this.items.firstPage.disabled = this.pageNumber <= 1; + this.items.lastPage.disabled = this.pageNumber >= this.pagesCount; + this.items.pageRotateCw.disabled = this.pagesCount === 0; + this.items.pageRotateCcw.disabled = this.pagesCount === 0; + } + }, { + key: "_bindClickListeners", + value: function _bindClickListeners() { + var _this2 = this; + + this.toggleButton.addEventListener("click", this.toggle.bind(this)); + + var _iterator = _createForOfIteratorHelper(this.buttons), + _step; + + try { + var _loop = function _loop() { + var _step$value = _step.value, + element = _step$value.element, + eventName = _step$value.eventName, + close = _step$value.close, + eventDetails = _step$value.eventDetails; + element.addEventListener("click", function (evt) { + if (eventName !== null) { + var details = { + source: _this2 + }; + + for (var property in eventDetails) { + details[property] = eventDetails[property]; + } + + _this2.eventBus.dispatch(eventName, details); + } + + if (close) { + _this2.close(); + } + }); + }; + + for (_iterator.s(); !(_step = _iterator.n()).done;) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + }, { + key: "_bindCursorToolsListener", + value: function _bindCursorToolsListener(buttons) { + this.eventBus._on("cursortoolchanged", function (_ref) { + var tool = _ref.tool; + buttons.cursorSelectToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.SELECT); + buttons.cursorHandToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.HAND); + }); + } + }, { + key: "_bindScrollModeListener", + value: function _bindScrollModeListener(buttons) { + var _this3 = this; + + function scrollModeChanged(_ref2) { + var mode = _ref2.mode; + buttons.scrollVerticalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.VERTICAL); + buttons.scrollHorizontalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.HORIZONTAL); + buttons.scrollWrappedButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.WRAPPED); + var isScrollModeHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL; + buttons.spreadNoneButton.disabled = isScrollModeHorizontal; + buttons.spreadOddButton.disabled = isScrollModeHorizontal; + buttons.spreadEvenButton.disabled = isScrollModeHorizontal; + } + + this.eventBus._on("scrollmodechanged", scrollModeChanged); + + this.eventBus._on("secondarytoolbarreset", function (evt) { + if (evt.source === _this3) { + scrollModeChanged({ + mode: _ui_utils.ScrollMode.VERTICAL + }); + } + }); + } + }, { + key: "_bindSpreadModeListener", + value: function _bindSpreadModeListener(buttons) { + var _this4 = this; + + function spreadModeChanged(_ref3) { + var mode = _ref3.mode; + buttons.spreadNoneButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.NONE); + buttons.spreadOddButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.ODD); + buttons.spreadEvenButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.EVEN); + } + + this.eventBus._on("spreadmodechanged", spreadModeChanged); + + this.eventBus._on("secondarytoolbarreset", function (evt) { + if (evt.source === _this4) { + spreadModeChanged({ + mode: _ui_utils.SpreadMode.NONE + }); + } + }); + } + }, { + key: "open", + value: function open() { + if (this.opened) { + return; + } + + this.opened = true; + + this._setMaxHeight(); + + this.toggleButton.classList.add("toggled"); + this.toggleButton.setAttribute("aria-expanded", "true"); + this.toolbar.classList.remove("hidden"); + } + }, { + key: "close", + value: function close() { + if (!this.opened) { + return; + } + + this.opened = false; + this.toolbar.classList.add("hidden"); + this.toggleButton.classList.remove("toggled"); + this.toggleButton.setAttribute("aria-expanded", "false"); + } + }, { + key: "toggle", + value: function toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } + }, { + key: "_setMaxHeight", + value: function _setMaxHeight() { + if (!this.opened) { + return; + } + + this.containerHeight = this.mainContainer.clientHeight; + + if (this.containerHeight === this.previousContainerHeight) { + return; + } + + this.toolbarButtonContainer.style.maxHeight = "".concat(this.containerHeight - _ui_utils.SCROLLBAR_PADDING, "px"); + this.previousContainerHeight = this.containerHeight; + } + }]); + + return SecondaryToolbar; + }(); + + exports.SecondaryToolbar = SecondaryToolbar; + + /***/ + }), + /* 37 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFSinglePageViewer = void 0; + + var _base_viewer = __webpack_require__(30); + + var _pdfjsLib = __webpack_require__(7); + + 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); + return Constructor; + } + + function _get(target, property, receiver) { + 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(receiver); + } + return desc.value; + }; + } + return _get(target, property, receiver || target); + } + + function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + return object; + } + + 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 + } + }); + 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; + } + 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 PDFSinglePageViewer = /*#__PURE__*/function (_BaseViewer) { + _inherits(PDFSinglePageViewer, _BaseViewer); + + var _super = _createSuper(PDFSinglePageViewer); + + function PDFSinglePageViewer(options) { + var _this; + + _classCallCheck(this, PDFSinglePageViewer); + + _this = _super.call(this, options); + + _this.eventBus._on("pagesinit", function (evt) { + _this._ensurePageViewVisible(); + }); + + return _this; + } + + _createClass(PDFSinglePageViewer, [{ + key: "_viewerElement", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer); + } + }, { + key: "_pageWidthScaleFactor", + get: function get() { + return 1; + } + }, { + key: "_resetView", + value: function _resetView() { + _get(_getPrototypeOf(PDFSinglePageViewer.prototype), "_resetView", this).call(this); + + this._previousPageNumber = 1; + this._shadowViewer = document.createDocumentFragment(); + this._updateScrollDown = null; + } + }, { + key: "_ensurePageViewVisible", + value: function _ensurePageViewVisible() { + var pageView = this._pages[this._currentPageNumber - 1]; + var previousPageView = this._pages[this._previousPageNumber - 1]; + var viewerNodes = this.viewer.childNodes; + + switch (viewerNodes.length) { + case 0: + this.viewer.appendChild(pageView.div); + break; + + case 1: + if (viewerNodes[0] !== previousPageView.div) { + throw new Error("_ensurePageViewVisible: Unexpected previously visible page."); + } + + if (pageView === previousPageView) { + break; + } + + this._shadowViewer.appendChild(previousPageView.div); + + this.viewer.appendChild(pageView.div); + this.container.scrollTop = 0; + break; + + default: + throw new Error("_ensurePageViewVisible: Only one page should be visible at a time."); + } + + this._previousPageNumber = this._currentPageNumber; + } + }, { + key: "_scrollUpdate", + value: function _scrollUpdate() { + if (this._updateScrollDown) { + this._updateScrollDown(); + } + + _get(_getPrototypeOf(PDFSinglePageViewer.prototype), "_scrollUpdate", this).call(this); + } + }, { + key: "_scrollIntoView", + value: function _scrollIntoView(_ref) { + var _this2 = this; + + var pageDiv = _ref.pageDiv, + _ref$pageSpot = _ref.pageSpot, + pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot, + _ref$pageNumber = _ref.pageNumber, + pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber; + + if (pageNumber) { + this._setCurrentPageNumber(pageNumber); + } + + var scrolledDown = this._currentPageNumber >= this._previousPageNumber; + + this._ensurePageViewVisible(); + + this.update(); + + _get(_getPrototypeOf(PDFSinglePageViewer.prototype), "_scrollIntoView", this).call(this, { + pageDiv: pageDiv, + pageSpot: pageSpot, + pageNumber: pageNumber + }); + + this._updateScrollDown = function () { + _this2.scroll.down = scrolledDown; + _this2._updateScrollDown = null; + }; + } + }, { + key: "_getVisiblePages", + value: function _getVisiblePages() { + return this._getCurrentVisiblePage(); + } + }, { + key: "_updateHelper", + value: function _updateHelper(visiblePages) { + } + }, { + key: "_isScrollModeHorizontal", + get: function get() { + return (0, _pdfjsLib.shadow)(this, "_isScrollModeHorizontal", false); + } + }, { + key: "_updateScrollMode", + value: function _updateScrollMode() { + } + }, { + key: "_updateSpreadMode", + value: function _updateSpreadMode() { + } + }, { + key: "_getPageAdvance", + value: function _getPageAdvance() { + return 1; + } + }]); + + return PDFSinglePageViewer; + }(_base_viewer.BaseViewer); + + exports.PDFSinglePageViewer = PDFSinglePageViewer; + + /***/ + }), + /* 38 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.Toolbar = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _ui_utils = __webpack_require__(6); + + 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; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + 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 = o[Symbol.iterator](); + }, 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); + return Constructor; + } + + var PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading"; + var SCALE_SELECT_CONTAINER_WIDTH = 140; + var SCALE_SELECT_WIDTH = 162; + + var Toolbar = /*#__PURE__*/function () { + function Toolbar(options, eventBus, l10n) { + _classCallCheck(this, Toolbar); + + this.toolbar = options.container; + this.eventBus = eventBus; + this.l10n = l10n; + this.buttons = [{ + element: options.previous, + eventName: "previouspage" + }, { + element: options.next, + eventName: "nextpage" + }, { + element: options.zoomIn, + eventName: "zoomin" + }, { + element: options.zoomOut, + eventName: "zoomout" + }, { + element: options.openFile, + eventName: "openfile" + }, { + element: options.print, + eventName: "print" + }, { + element: options.presentationModeButton, + eventName: "presentationmode" + }, { + element: options.download, + eventName: "download" + }, { + element: options.viewBookmark, + eventName: null + }]; + this.items = { + numPages: options.numPages, + pageNumber: options.pageNumber, + scaleSelectContainer: options.scaleSelectContainer, + scaleSelect: options.scaleSelect, + customScaleOption: options.customScaleOption, + previous: options.previous, + next: options.next, + zoomIn: options.zoomIn, + zoomOut: options.zoomOut + }; + this._wasLocalized = false; + this.reset(); + + this._bindListeners(); + } + + _createClass(Toolbar, [{ + key: "setPageNumber", + value: function setPageNumber(pageNumber, pageLabel) { + this.pageNumber = pageNumber; + this.pageLabel = pageLabel; + + this._updateUIState(false); + } + }, { + key: "setPagesCount", + value: function setPagesCount(pagesCount, hasPageLabels) { + this.pagesCount = pagesCount; + this.hasPageLabels = hasPageLabels; + + this._updateUIState(true); + } + }, { + key: "setPageScale", + value: function setPageScale(pageScaleValue, pageScale) { + this.pageScaleValue = (pageScaleValue || pageScale).toString(); + this.pageScale = pageScale; + + this._updateUIState(false); + } + }, { + key: "reset", + value: function reset() { + this.pageNumber = 0; + this.pageLabel = null; + this.hasPageLabels = false; + this.pagesCount = 0; + this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + this.pageScale = _ui_utils.DEFAULT_SCALE; + + this._updateUIState(true); + + this.updateLoadingIndicatorState(); + } + }, { + key: "_bindListeners", + value: function _bindListeners() { + var _this = this; + + var _this$items = this.items, + pageNumber = _this$items.pageNumber, + scaleSelect = _this$items.scaleSelect; + var self = this; + + var _iterator = _createForOfIteratorHelper(this.buttons), + _step; + + try { + var _loop = function _loop() { + var _step$value = _step.value, + element = _step$value.element, + eventName = _step$value.eventName; + element.addEventListener("click", function (evt) { + if (eventName !== null) { + _this.eventBus.dispatch(eventName, { + source: _this + }); + } + }); + }; + + for (_iterator.s(); !(_step = _iterator.n()).done;) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + pageNumber.addEventListener("click", function () { + this.select(); + }); + pageNumber.addEventListener("change", function () { + self.eventBus.dispatch("pagenumberchanged", { + source: self, + value: this.value + }); + }); + scaleSelect.addEventListener("change", function () { + if (this.value === "custom") { + return; + } + + self.eventBus.dispatch("scalechanged", { + source: self, + value: this.value + }); + }); + scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler; + + this.eventBus._on("localized", function () { + _this._wasLocalized = true; + + _this._adjustScaleWidth(); + + _this._updateUIState(true); + }); + } + }, { + key: "_updateUIState", + value: function _updateUIState() { + var resetNumPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (!this._wasLocalized) { + return; + } + + var pageNumber = this.pageNumber, + pagesCount = this.pagesCount, + pageScaleValue = this.pageScaleValue, + pageScale = this.pageScale, + items = this.items; + + if (resetNumPages) { + if (this.hasPageLabels) { + items.pageNumber.type = "text"; + } else { + items.pageNumber.type = "number"; + this.l10n.get("of_pages", { + pagesCount: pagesCount + }).then(function (msg) { + items.numPages.textContent = msg; + }); + } + + items.pageNumber.max = pagesCount; + } + + if (this.hasPageLabels) { + items.pageNumber.value = this.pageLabel; + this.l10n.get("page_of_pages", { + pageNumber: pageNumber, + pagesCount: pagesCount + }).then(function (msg) { + items.numPages.textContent = msg; + }); + } else { + items.pageNumber.value = pageNumber; + } + + items.previous.disabled = pageNumber <= 1; + items.next.disabled = pageNumber >= pagesCount; + items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE; + items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE; + this.l10n.get("page_scale_percent", { + scale: Math.round(pageScale * 10000) / 100 + }).then(function (msg) { + var predefinedValueFound = false; + + var _iterator2 = _createForOfIteratorHelper(items.scaleSelect.options), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var option = _step2.value; + + if (option.value !== pageScaleValue) { + option.selected = false; + continue; + } + + option.selected = true; + predefinedValueFound = true; + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + if (!predefinedValueFound) { + items.customScaleOption.textContent = msg; + items.customScaleOption.selected = true; + } + }); + } + }, { + key: "updateLoadingIndicatorState", + value: function updateLoadingIndicatorState() { + var loading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var pageNumberInput = this.items.pageNumber; + pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading); + } + }, { + key: "_adjustScaleWidth", + value: function () { + var _adjustScaleWidth2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var items, l10n, predefinedValuesPromise, canvas, ctx, _getComputedStyle, fontSize, + fontFamily, maxWidth, _iterator3, _step3, predefinedValue, _ctx$measureText, width, + overflow; + + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + items = this.items, l10n = this.l10n; + predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto"), l10n.get("page_scale_actual"), l10n.get("page_scale_fit"), l10n.get("page_scale_width")]); + canvas = document.createElement("canvas"); + canvas.mozOpaque = true; + ctx = canvas.getContext("2d", { + alpha: false + }); + _context.next = 7; + return _ui_utils.animationStarted; + + case 7: + _getComputedStyle = getComputedStyle(items.scaleSelect), fontSize = _getComputedStyle.fontSize, fontFamily = _getComputedStyle.fontFamily; + ctx.font = "".concat(fontSize, " ").concat(fontFamily); + maxWidth = 0; + _context.t0 = _createForOfIteratorHelper; + _context.next = 13; + return predefinedValuesPromise; + + case 13: + _context.t1 = _context.sent; + _iterator3 = (0, _context.t0)(_context.t1); + + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + predefinedValue = _step3.value; + _ctx$measureText = ctx.measureText(predefinedValue), width = _ctx$measureText.width; + + if (width > maxWidth) { + maxWidth = width; + } + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + + overflow = SCALE_SELECT_WIDTH - SCALE_SELECT_CONTAINER_WIDTH; + maxWidth += 2 * overflow; + + if (maxWidth > SCALE_SELECT_CONTAINER_WIDTH) { + items.scaleSelect.style.width = "".concat(maxWidth + overflow, "px"); + items.scaleSelectContainer.style.width = "".concat(maxWidth, "px"); + } + + canvas.width = 0; + canvas.height = 0; + canvas = ctx = null; + + case 22: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function _adjustScaleWidth() { + return _adjustScaleWidth2.apply(this, arguments); + } + + return _adjustScaleWidth; + }() + }]); + + return Toolbar; + }(); + + exports.Toolbar = Toolbar; + + /***/ + }), + /* 39 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.ViewHistory = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + 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); + return Constructor; + } + + var DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; + + var ViewHistory = /*#__PURE__*/function () { + function ViewHistory(fingerprint) { + var _this = this; + + var cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_VIEW_HISTORY_CACHE_SIZE; + + _classCallCheck(this, ViewHistory); + + this.fingerprint = fingerprint; + this.cacheSize = cacheSize; + this._initializedPromise = this._readFromStorage().then(function (databaseStr) { + var database = JSON.parse(databaseStr || "{}"); + var index = -1; + + if (!Array.isArray(database.files)) { + database.files = []; + } else { + while (database.files.length >= _this.cacheSize) { + database.files.shift(); + } + + for (var i = 0, ii = database.files.length; i < ii; i++) { + var branch = database.files[i]; + + if (branch.fingerprint === _this.fingerprint) { + index = i; + break; + } + } + } + + if (index === -1) { + index = database.files.push({ + fingerprint: _this.fingerprint + }) - 1; + } + + _this.file = database.files[index]; + _this.database = database; + }); + } + + _createClass(ViewHistory, [{ + key: "_writeToStorage", + value: function () { + var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var databaseStr; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + databaseStr = JSON.stringify(this.database); + localStorage.setItem("pdfjs.history", databaseStr); + + case 2: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function _writeToStorage() { + return _writeToStorage2.apply(this, arguments); + } + + return _writeToStorage; + }() + }, { + key: "_readFromStorage", + value: function () { + var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + return _context2.abrupt("return", localStorage.getItem("pdfjs.history")); + + case 1: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + + function _readFromStorage() { + return _readFromStorage2.apply(this, arguments); + } + + return _readFromStorage; + }() + }, { + key: "set", + value: function () { + var _set = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(name, val) { + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + _context3.next = 2; + return this._initializedPromise; + + case 2: + this.file[name] = val; + return _context3.abrupt("return", this._writeToStorage()); + + case 4: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function set(_x, _x2) { + return _set.apply(this, arguments); + } + + return set; + }() + }, { + key: "setMultiple", + value: function () { + var _setMultiple = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(properties) { + var name; + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.next = 2; + return this._initializedPromise; + + case 2: + for (name in properties) { + this.file[name] = properties[name]; + } + + return _context4.abrupt("return", this._writeToStorage()); + + case 4: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + + function setMultiple(_x3) { + return _setMultiple.apply(this, arguments); + } + + return setMultiple; + }() + }, { + key: "get", + value: function () { + var _get = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5(name, defaultValue) { + var val; + return _regenerator["default"].wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + _context5.next = 2; + return this._initializedPromise; + + case 2: + val = this.file[name]; + return _context5.abrupt("return", val !== undefined ? val : defaultValue); + + case 4: + case "end": + return _context5.stop(); + } + } + }, _callee5, this); + })); + + function get(_x4, _x5) { + return _get.apply(this, arguments); + } + + return get; + }() + }, { + key: "getMultiple", + value: function () { + var _getMultiple = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6(properties) { + var values, name, val; + return _regenerator["default"].wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + _context6.next = 2; + return this._initializedPromise; + + case 2: + values = Object.create(null); + + for (name in properties) { + val = this.file[name]; + values[name] = val !== undefined ? val : properties[name]; + } + + return _context6.abrupt("return", values); + + case 5: + case "end": + return _context6.stop(); + } + } + }, _callee6, this); + })); + + function getMultiple(_x6) { + return _getMultiple.apply(this, arguments); + } + + return getMultiple; + }() + }]); + + return ViewHistory; + }(); + + exports.ViewHistory = ViewHistory; + + /***/ + }), + /* 40 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.GenericCom = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _app = __webpack_require__(3); + + var _preferences = __webpack_require__(41); + + var _download_manager = __webpack_require__(42); + + var _genericl10n = __webpack_require__(43); + + var _generic_scripting = __webpack_require__(45); + + 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); + return Constructor; + } + + 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 + } + }); + 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; + } + 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 GenericCom = {}; + exports.GenericCom = GenericCom; + + var GenericPreferences = /*#__PURE__*/function (_BasePreferences) { + _inherits(GenericPreferences, _BasePreferences); + + var _super = _createSuper(GenericPreferences); + + function GenericPreferences() { + _classCallCheck(this, GenericPreferences); + + return _super.apply(this, arguments); + } + + _createClass(GenericPreferences, [{ + key: "_writeToStorage", + value: function () { + var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(prefObj) { + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj)); + + case 1: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + function _writeToStorage(_x) { + return _writeToStorage2.apply(this, arguments); + } + + return _writeToStorage; + }() + }, { + key: "_readFromStorage", + value: function () { + var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(prefObj) { + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + return _context2.abrupt("return", JSON.parse(localStorage.getItem("pdfjs.preferences"))); + + case 1: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + + function _readFromStorage(_x2) { + return _readFromStorage2.apply(this, arguments); + } + + return _readFromStorage; + }() + }]); + + return GenericPreferences; + }(_preferences.BasePreferences); + + var GenericExternalServices = /*#__PURE__*/function (_DefaultExternalServi) { + _inherits(GenericExternalServices, _DefaultExternalServi); + + var _super2 = _createSuper(GenericExternalServices); + + function GenericExternalServices() { + _classCallCheck(this, GenericExternalServices); + + return _super2.apply(this, arguments); + } + + _createClass(GenericExternalServices, null, [{ + key: "createDownloadManager", + value: function createDownloadManager(options) { + return new _download_manager.DownloadManager(); + } + }, { + key: "createPreferences", + value: function createPreferences() { + return new GenericPreferences(); + } + }, { + key: "createL10n", + value: function createL10n(_ref) { + var _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? "en-US" : _ref$locale; + return new _genericl10n.GenericL10n(locale); + } + }, { + key: "createScripting", + value: function createScripting(_ref2) { + var sandboxBundleSrc = _ref2.sandboxBundleSrc; + return new _generic_scripting.GenericScripting(sandboxBundleSrc); + } + }]); + + return GenericExternalServices; + }(_app.DefaultExternalServices); + + _app.PDFViewerApplication.externalServices = GenericExternalServices; + + /***/ + }), + /* 41 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.BasePreferences = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _app_options = __webpack_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 _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + + 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); + return Constructor; + } + + var BasePreferences = /*#__PURE__*/function () { + function BasePreferences() { + var _this = this; + + _classCallCheck(this, BasePreferences); + + if (this.constructor === BasePreferences) { + throw new Error("Cannot initialize BasePreferences."); + } + + Object.defineProperty(this, "defaults", { + value: Object.freeze({ + "cursorToolOnLoad": 0, + "defaultZoomValue": "", + "disablePageLabels": false, + "enablePermissions": false, + "enablePrintAutoRotate": true, + "enableScripting": true, + "enableWebGL": false, + "externalLinkTarget": 0, + "historyUpdateUrl": false, + "ignoreDestinationZoom": false, + "pdfBugEnabled": false, + "renderer": "canvas", + "renderInteractiveForms": true, + "sidebarViewOnLoad": -1, + "scrollModeOnLoad": -1, + "spreadModeOnLoad": -1, + "textLayerMode": 1, + "useOnlyCssZoom": false, + "viewerCssTheme": 0, + "viewOnLoad": 0, + "disableAutoFetch": false, + "disableFontFace": false, + "disableRange": false, + "disableStream": false + }), + writable: false, + enumerable: true, + configurable: false + }); + this.prefs = Object.create(null); + this._initializedPromise = this._readFromStorage(this.defaults).then(function (prefs) { + for (var name in _this.defaults) { + var prefValue = prefs === null || prefs === void 0 ? void 0 : prefs[name]; + + if (_typeof(prefValue) === _typeof(_this.defaults[name])) { + _this.prefs[name] = prefValue; + } + } + }); + } + + _createClass(BasePreferences, [{ + key: "_writeToStorage", + value: function () { + var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(prefObj) { + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + throw new Error("Not implemented: _writeToStorage"); + + case 1: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + function _writeToStorage(_x) { + return _writeToStorage2.apply(this, arguments); + } + + return _writeToStorage; + }() + }, { + key: "_readFromStorage", + value: function () { + var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(prefObj) { + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + throw new Error("Not implemented: _readFromStorage"); + + case 1: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + + function _readFromStorage(_x2) { + return _readFromStorage2.apply(this, arguments); + } + + return _readFromStorage; + }() + }, { + key: "reset", + value: function () { + var _reset = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + _context3.next = 2; + return this._initializedPromise; + + case 2: + this.prefs = Object.create(null); + return _context3.abrupt("return", this._writeToStorage(this.defaults)); + + case 4: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function reset() { + return _reset.apply(this, arguments); + } + + return reset; + }() + }, { + key: "set", + value: function () { + var _set = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(name, value) { + var defaultValue, valueType, defaultType; + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.next = 2; + return this._initializedPromise; + + case 2: + defaultValue = this.defaults[name]; + + if (!(defaultValue === undefined)) { + _context4.next = 7; + break; + } + + throw new Error("Set preference: \"".concat(name, "\" is undefined.")); + + case 7: + if (!(value === undefined)) { + _context4.next = 9; + break; + } + + throw new Error("Set preference: no value is specified."); + + case 9: + valueType = _typeof(value); + defaultType = _typeof(defaultValue); + + if (!(valueType !== defaultType)) { + _context4.next = 19; + break; + } + + if (!(valueType === "number" && defaultType === "string")) { + _context4.next = 16; + break; + } + + value = value.toString(); + _context4.next = 17; + break; + + case 16: + throw new Error("Set preference: \"".concat(value, "\" is a ").concat(valueType, ", expected a ").concat(defaultType, ".")); + + case 17: + _context4.next = 21; + break; + + case 19: + if (!(valueType === "number" && !Number.isInteger(value))) { + _context4.next = 21; + break; + } + + throw new Error("Set preference: \"".concat(value, "\" must be an integer.")); + + case 21: + this.prefs[name] = value; + return _context4.abrupt("return", this._writeToStorage(this.prefs)); + + case 23: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + + function set(_x3, _x4) { + return _set.apply(this, arguments); + } + + return set; + }() + }, { + key: "get", + value: function () { + var _get = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5(name) { + var defaultValue, prefValue; + return _regenerator["default"].wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + _context5.next = 2; + return this._initializedPromise; + + case 2: + defaultValue = this.defaults[name], prefValue = this.prefs[name]; + + if (!(defaultValue === undefined)) { + _context5.next = 5; + break; + } + + throw new Error("Get preference: \"".concat(name, "\" is undefined.")); + + case 5: + return _context5.abrupt("return", prefValue !== undefined ? prefValue : defaultValue); + + case 6: + case "end": + return _context5.stop(); + } + } + }, _callee5, this); + })); + + function get(_x5) { + return _get.apply(this, arguments); + } + + return get; + }() + }, { + key: "getAll", + value: function () { + var _getAll = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6() { + var obj, name, prefValue; + return _regenerator["default"].wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + _context6.next = 2; + return this._initializedPromise; + + case 2: + obj = Object.create(null); + + for (name in this.defaults) { + prefValue = this.prefs[name]; + obj[name] = prefValue !== undefined ? prefValue : this.defaults[name]; + } + + return _context6.abrupt("return", obj); + + case 5: + case "end": + return _context6.stop(); + } + } + }, _callee6, this); + })); + + function getAll() { + return _getAll.apply(this, arguments); + } + + return getAll; + }() + }]); + + return BasePreferences; + }(); + + exports.BasePreferences = BasePreferences; + + /***/ + }), + /* 42 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.DownloadManager = void 0; + + var _pdfjsLib = __webpack_require__(7); + + var _viewer_compatibility = __webpack_require__(2); + + 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); + return Constructor; + } + + ; + + function _download(blobUrl, filename) { + var a = document.createElement("a"); + + if (!a.click) { + throw new Error('DownloadManager: "a.click()" is not supported.'); + } + + a.href = blobUrl; + a.target = "_parent"; + + if ("download" in a) { + a.download = filename; + } + + (document.body || document.documentElement).appendChild(a); + a.click(); + a.remove(); + } + + var DownloadManager = /*#__PURE__*/function () { + function DownloadManager() { + _classCallCheck(this, DownloadManager); + + this._openBlobUrls = new WeakMap(); + } + + _createClass(DownloadManager, [{ + key: "downloadUrl", + value: function downloadUrl(url, filename) { + if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, "http://example.com")) { + return; + } + + _download(url + "#pdfjs.action=download", filename); + } + }, { + key: "downloadData", + value: function downloadData(data, filename, contentType) { + var blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL); + + _download(blobUrl, filename); + } + }, { + key: "openOrDownloadData", + value: function openOrDownloadData(element, data, filename) { + var isPdfData = (0, _pdfjsLib.isPdfFile)(filename); + var contentType = isPdfData ? "application/pdf" : ""; + + if (isPdfData && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { + var blobUrl = this._openBlobUrls.get(element); + + if (!blobUrl) { + blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + + this._openBlobUrls.set(element, blobUrl); + } + + var viewerUrl; + viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename); + + try { + window.open(viewerUrl); + return true; + } catch (ex) { + console.error("openOrDownloadData: ".concat(ex)); + URL.revokeObjectURL(blobUrl); + + this._openBlobUrls["delete"](element); + } + } + + this.downloadData(data, filename, contentType); + return false; + } + }, { + key: "download", + value: function download(blob, url, filename) { + var sourceEventType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "download"; + + if (_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { + this.downloadUrl(url, filename); + return; + } + + var blobUrl = URL.createObjectURL(blob); + + _download(blobUrl, filename); + } + }]); + + return DownloadManager; + }(); + + exports.DownloadManager = DownloadManager; + + /***/ + }), + /* 43 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.GenericL10n = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + __webpack_require__(44); + + var _l10n_utils = __webpack_require__(32); + + 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); + return Constructor; + } + + var webL10n = document.webL10n; + + var GenericL10n = /*#__PURE__*/function () { + function GenericL10n(lang) { + _classCallCheck(this, GenericL10n); + + this._lang = lang; + this._ready = new Promise(function (resolve, reject) { + webL10n.setLanguage(lang, function () { + resolve(webL10n); + }); + }); + } + + _createClass(GenericL10n, [{ + key: "getLanguage", + value: function () { + var _getLanguage = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { + var l10n; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this._ready; + + case 2: + l10n = _context.sent; + return _context.abrupt("return", l10n.getLanguage()); + + case 4: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function getLanguage() { + return _getLanguage.apply(this, arguments); + } + + return getLanguage; + }() + }, { + key: "getDirection", + value: function () { + var _getDirection = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { + var l10n; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _context2.next = 2; + return this._ready; + + case 2: + l10n = _context2.sent; + return _context2.abrupt("return", l10n.getDirection()); + + case 4: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + function getDirection() { + return _getDirection.apply(this, arguments); + } + + return getDirection; + }() + }, { + key: "get", + value: function () { + var _get = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(key) { + var args, + fallback, + l10n, + _args3 = arguments; + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + args = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : null; + fallback = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : (0, _l10n_utils.getL10nFallback)(key, args); + _context3.next = 4; + return this._ready; + + case 4: + l10n = _context3.sent; + return _context3.abrupt("return", l10n.get(key, args, fallback)); + + case 6: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function get(_x) { + return _get.apply(this, arguments); + } + + return get; + }() + }, { + key: "translate", + value: function () { + var _translate = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(element) { + var l10n; + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.next = 2; + return this._ready; + + case 2: + l10n = _context4.sent; + return _context4.abrupt("return", l10n.translate(element)); + + case 4: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + + function translate(_x2) { + return _translate.apply(this, arguments); + } + + return translate; + }() + }]); + + return GenericL10n; + }(); + + exports.GenericL10n = GenericL10n; + + /***/ + }), + /* 44 */ + /***/ (() => { + + + document.webL10n = function (window, document, undefined) { + var gL10nData = {}; + var gTextData = ''; + var gTextProp = 'textContent'; + var gLanguage = ''; + var gMacros = {}; + var gReadyState = 'loading'; + var gAsyncResourceLoading = true; + + function getL10nResourceLinks() { + return document.querySelectorAll('link[type="application/l10n"]'); + } + + function getL10nDictionary() { + var script = document.querySelector('script[type="application/l10n"]'); + return script ? JSON.parse(script.innerHTML) : null; + } + + function getTranslatableChildren(element) { + return element ? element.querySelectorAll('*[data-l10n-id]') : []; + } + + function getL10nAttributes(element) { + if (!element) return {}; + var l10nId = element.getAttribute('data-l10n-id'); + var l10nArgs = element.getAttribute('data-l10n-args'); + var args = {}; + + if (l10nArgs) { + try { + args = JSON.parse(l10nArgs); + } catch (e) { + console.warn('could not parse arguments for #' + l10nId); + } + } + + return { + id: l10nId, + args: args + }; + } + + function xhrLoadText(url, onSuccess, onFailure) { + onSuccess = onSuccess || function _onSuccess(data) { + }; + + onFailure = onFailure || function _onFailure() { + }; + + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, gAsyncResourceLoading); + + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=utf-8'); + } + + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200 || xhr.status === 0) { + onSuccess(xhr.responseText); + } else { + onFailure(); + } + } + }; + + xhr.onerror = onFailure; + xhr.ontimeout = onFailure; + + try { + xhr.send(null); + } catch (e) { + onFailure(); + } + } + + function parseResource(href, lang, successCallback, failureCallback) { + var baseURL = href.replace(/[^\/]*$/, '') || './'; + + function evalString(text) { + if (text.lastIndexOf('\\') < 0) return text; + return text.replace(/\\\\/g, '\\').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\t/g, '\t').replace(/\\b/g, '\b').replace(/\\f/g, '\f').replace(/\\{/g, '{').replace(/\\}/g, '}').replace(/\\"/g, '"').replace(/\\'/g, "'"); + } + + function parseProperties(text, parsedPropertiesCallback) { + var dictionary = {}; + var reBlank = /^\s*|\s*$/; + var reComment = /^\s*#|^\s*$/; + var reSection = /^\s*\[(.*)\]\s*$/; + var reImport = /^\s*@import\s+url\((.*)\)\s*$/i; + var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; + + function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) { + var entries = rawText.replace(reBlank, '').split(/[\r\n]+/); + var currentLang = '*'; + var genericLang = lang.split('-', 1)[0]; + var skipLang = false; + var match = ''; + + function nextEntry() { + while (true) { + if (!entries.length) { + parsedRawLinesCallback(); + return; + } + + var line = entries.shift(); + if (reComment.test(line)) continue; + + if (extendedSyntax) { + match = reSection.exec(line); + + if (match) { + currentLang = match[1].toLowerCase(); + skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang; + continue; + } else if (skipLang) { + continue; + } + + match = reImport.exec(line); + + if (match) { + loadImport(baseURL + match[1], nextEntry); + return; + } + } + + var tmp = line.match(reSplit); + + if (tmp && tmp.length == 3) { + dictionary[tmp[1]] = evalString(tmp[2]); + } + } + } + + nextEntry(); + } + + function loadImport(url, callback) { + xhrLoadText(url, function (content) { + parseRawLines(content, false, callback); + }, function () { + console.warn(url + ' not found.'); + callback(); + }); + } + + parseRawLines(text, true, function () { + parsedPropertiesCallback(dictionary); + }); + } + + xhrLoadText(href, function (response) { + gTextData += response; + parseProperties(response, function (data) { + for (var key in data) { + var id, + prop, + index = key.lastIndexOf('.'); + + if (index > 0) { + id = key.substring(0, index); + prop = key.substring(index + 1); + } else { + id = key; + prop = gTextProp; + } + + if (!gL10nData[id]) { + gL10nData[id] = {}; + } + + gL10nData[id][prop] = data[key]; + } + + if (successCallback) { + successCallback(); + } + }); + }, failureCallback); + } + + function loadLocale(lang, callback) { + if (lang) { + lang = lang.toLowerCase(); + } + + callback = callback || function _callback() { + }; + + clear(); + gLanguage = lang; + var langLinks = getL10nResourceLinks(); + var langCount = langLinks.length; + + if (langCount === 0) { + var dict = getL10nDictionary(); + + if (dict && dict.locales && dict.default_locale) { + console.log('using the embedded JSON directory, early way out'); + gL10nData = dict.locales[lang]; + + if (!gL10nData) { + var defaultLocale = dict.default_locale.toLowerCase(); + + for (var anyCaseLang in dict.locales) { + anyCaseLang = anyCaseLang.toLowerCase(); + + if (anyCaseLang === lang) { + gL10nData = dict.locales[lang]; + break; + } else if (anyCaseLang === defaultLocale) { + gL10nData = dict.locales[defaultLocale]; + } + } + } + + callback(); + } else { + console.log('no resource to load, early way out'); + } + + gReadyState = 'complete'; + return; + } + + var onResourceLoaded = null; + var gResourceCount = 0; + + onResourceLoaded = function onResourceLoaded() { + gResourceCount++; + + if (gResourceCount >= langCount) { + callback(); + gReadyState = 'complete'; + } + }; + + function L10nResourceLink(link) { + var href = link.href; + + this.load = function (lang, callback) { + parseResource(href, lang, callback, function () { + console.warn(href + ' not found.'); + console.warn('"' + lang + '" resource not found'); + gLanguage = ''; + callback(); + }); + }; + } + + for (var i = 0; i < langCount; i++) { + var resource = new L10nResourceLink(langLinks[i]); + resource.load(lang, onResourceLoaded); + } + } + + function clear() { + gL10nData = {}; + gTextData = ''; + gLanguage = ''; + } + + function getPluralRules(lang) { + var locales2rules = { + 'af': 3, + 'ak': 4, + 'am': 4, + 'ar': 1, + 'asa': 3, + 'az': 0, + 'be': 11, + 'bem': 3, + 'bez': 3, + 'bg': 3, + 'bh': 4, + 'bm': 0, + 'bn': 3, + 'bo': 0, + 'br': 20, + 'brx': 3, + 'bs': 11, + 'ca': 3, + 'cgg': 3, + 'chr': 3, + 'cs': 12, + 'cy': 17, + 'da': 3, + 'de': 3, + 'dv': 3, + 'dz': 0, + 'ee': 3, + 'el': 3, + 'en': 3, + 'eo': 3, + 'es': 3, + 'et': 3, + 'eu': 3, + 'fa': 0, + 'ff': 5, + 'fi': 3, + 'fil': 4, + 'fo': 3, + 'fr': 5, + 'fur': 3, + 'fy': 3, + 'ga': 8, + 'gd': 24, + 'gl': 3, + 'gsw': 3, + 'gu': 3, + 'guw': 4, + 'gv': 23, + 'ha': 3, + 'haw': 3, + 'he': 2, + 'hi': 4, + 'hr': 11, + 'hu': 0, + 'id': 0, + 'ig': 0, + 'ii': 0, + 'is': 3, + 'it': 3, + 'iu': 7, + 'ja': 0, + 'jmc': 3, + 'jv': 0, + 'ka': 0, + 'kab': 5, + 'kaj': 3, + 'kcg': 3, + 'kde': 0, + 'kea': 0, + 'kk': 3, + 'kl': 3, + 'km': 0, + 'kn': 0, + 'ko': 0, + 'ksb': 3, + 'ksh': 21, + 'ku': 3, + 'kw': 7, + 'lag': 18, + 'lb': 3, + 'lg': 3, + 'ln': 4, + 'lo': 0, + 'lt': 10, + 'lv': 6, + 'mas': 3, + 'mg': 4, + 'mk': 16, + 'ml': 3, + 'mn': 3, + 'mo': 9, + 'mr': 3, + 'ms': 0, + 'mt': 15, + 'my': 0, + 'nah': 3, + 'naq': 7, + 'nb': 3, + 'nd': 3, + 'ne': 3, + 'nl': 3, + 'nn': 3, + 'no': 3, + 'nr': 3, + 'nso': 4, + 'ny': 3, + 'nyn': 3, + 'om': 3, + 'or': 3, + 'pa': 3, + 'pap': 3, + 'pl': 13, + 'ps': 3, + 'pt': 3, + 'rm': 3, + 'ro': 9, + 'rof': 3, + 'ru': 11, + 'rwk': 3, + 'sah': 0, + 'saq': 3, + 'se': 7, + 'seh': 3, + 'ses': 0, + 'sg': 0, + 'sh': 11, + 'shi': 19, + 'sk': 12, + 'sl': 14, + 'sma': 7, + 'smi': 7, + 'smj': 7, + 'smn': 7, + 'sms': 7, + 'sn': 3, + 'so': 3, + 'sq': 3, + 'sr': 11, + 'ss': 3, + 'ssy': 3, + 'st': 3, + 'sv': 3, + 'sw': 3, + 'syr': 3, + 'ta': 3, + 'te': 3, + 'teo': 3, + 'th': 0, + 'ti': 4, + 'tig': 3, + 'tk': 3, + 'tl': 4, + 'tn': 3, + 'to': 0, + 'tr': 0, + 'ts': 3, + 'tzm': 22, + 'uk': 11, + 'ur': 3, + 've': 3, + 'vi': 0, + 'vun': 3, + 'wa': 4, + 'wae': 3, + 'wo': 0, + 'xh': 3, + 'xog': 3, + 'yo': 0, + 'zh': 0, + 'zu': 3 + }; + + function isIn(n, list) { + return list.indexOf(n) !== -1; + } + + function isBetween(n, start, end) { + return start <= n && n <= end; + } + + var pluralRules = { + '0': function _(n) { + return 'other'; + }, + '1': function _(n) { + if (isBetween(n % 100, 3, 10)) return 'few'; + if (n === 0) return 'zero'; + if (isBetween(n % 100, 11, 99)) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '2': function _(n) { + if (n !== 0 && n % 10 === 0) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '3': function _(n) { + if (n == 1) return 'one'; + return 'other'; + }, + '4': function _(n) { + if (isBetween(n, 0, 1)) return 'one'; + return 'other'; + }, + '5': function _(n) { + if (isBetween(n, 0, 2) && n != 2) return 'one'; + return 'other'; + }, + '6': function _(n) { + if (n === 0) return 'zero'; + if (n % 10 == 1 && n % 100 != 11) return 'one'; + return 'other'; + }, + '7': function _(n) { + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '8': function _(n) { + if (isBetween(n, 3, 6)) return 'few'; + if (isBetween(n, 7, 10)) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '9': function _(n) { + if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few'; + if (n == 1) return 'one'; + return 'other'; + }, + '10': function _(n) { + if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few'; + if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one'; + return 'other'; + }, + '11': function _(n) { + if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; + if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many'; + if (n % 10 == 1 && n % 100 != 11) return 'one'; + return 'other'; + }, + '12': function _(n) { + if (isBetween(n, 2, 4)) return 'few'; + if (n == 1) return 'one'; + return 'other'; + }, + '13': function _(n) { + if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; + if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many'; + if (n == 1) return 'one'; + return 'other'; + }, + '14': function _(n) { + if (isBetween(n % 100, 3, 4)) return 'few'; + if (n % 100 == 2) return 'two'; + if (n % 100 == 1) return 'one'; + return 'other'; + }, + '15': function _(n) { + if (n === 0 || isBetween(n % 100, 2, 10)) return 'few'; + if (isBetween(n % 100, 11, 19)) return 'many'; + if (n == 1) return 'one'; + return 'other'; + }, + '16': function _(n) { + if (n % 10 == 1 && n != 11) return 'one'; + return 'other'; + }, + '17': function _(n) { + if (n == 3) return 'few'; + if (n === 0) return 'zero'; + if (n == 6) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '18': function _(n) { + if (n === 0) return 'zero'; + if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one'; + return 'other'; + }, + '19': function _(n) { + if (isBetween(n, 2, 10)) return 'few'; + if (isBetween(n, 0, 1)) return 'one'; + return 'other'; + }, + '20': function _(n) { + if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few'; + if (n % 1000000 === 0 && n !== 0) return 'many'; + if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two'; + if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one'; + return 'other'; + }, + '21': function _(n) { + if (n === 0) return 'zero'; + if (n == 1) return 'one'; + return 'other'; + }, + '22': function _(n) { + if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one'; + return 'other'; + }, + '23': function _(n) { + if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one'; + return 'other'; + }, + '24': function _(n) { + if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few'; + if (isIn(n, [2, 12])) return 'two'; + if (isIn(n, [1, 11])) return 'one'; + return 'other'; + } + }; + var index = locales2rules[lang.replace(/-.*$/, '')]; + + if (!(index in pluralRules)) { + console.warn('plural form unknown for [' + lang + ']'); + return function () { + return 'other'; + }; + } + + return pluralRules[index]; + } + + gMacros.plural = function (str, param, key, prop) { + var n = parseFloat(param); + if (isNaN(n)) return str; + if (prop != gTextProp) return str; + + if (!gMacros._pluralRules) { + gMacros._pluralRules = getPluralRules(gLanguage); + } + + var index = '[' + gMacros._pluralRules(n) + ']'; + + if (n === 0 && key + '[zero]' in gL10nData) { + str = gL10nData[key + '[zero]'][prop]; + } else if (n == 1 && key + '[one]' in gL10nData) { + str = gL10nData[key + '[one]'][prop]; + } else if (n == 2 && key + '[two]' in gL10nData) { + str = gL10nData[key + '[two]'][prop]; + } else if (key + index in gL10nData) { + str = gL10nData[key + index][prop]; + } else if (key + '[other]' in gL10nData) { + str = gL10nData[key + '[other]'][prop]; + } + + return str; + }; + + function getL10nData(key, args, fallback) { + var data = gL10nData[key]; + + if (!data) { + console.warn('#' + key + ' is undefined.'); + + if (!fallback) { + return null; + } + + data = fallback; + } + + var rv = {}; + + for (var prop in data) { + var str = data[prop]; + str = substIndexes(str, args, key, prop); + str = substArguments(str, args, key); + rv[prop] = str; + } + + return rv; + } + + function substIndexes(str, args, key, prop) { + var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/; + var reMatch = reIndex.exec(str); + if (!reMatch || !reMatch.length) return str; + var macroName = reMatch[1]; + var paramName = reMatch[2]; + var param; + + if (args && paramName in args) { + param = args[paramName]; + } else if (paramName in gL10nData) { + param = gL10nData[paramName]; + } + + if (macroName in gMacros) { + var macro = gMacros[macroName]; + str = macro(str, param, key, prop); + } + + return str; + } + + function substArguments(str, args, key) { + var reArgs = /\{\{\s*(.+?)\s*\}\}/g; + return str.replace(reArgs, function (matched_text, arg) { + if (args && arg in args) { + return args[arg]; + } + + if (arg in gL10nData) { + return gL10nData[arg]; + } + + console.log('argument {{' + arg + '}} for #' + key + ' is undefined.'); + return matched_text; + }); + } + + function translateElement(element) { + var l10n = getL10nAttributes(element); + if (!l10n.id) return; + var data = getL10nData(l10n.id, l10n.args); + + if (!data) { + console.warn('#' + l10n.id + ' is undefined.'); + return; + } + + if (data[gTextProp]) { + if (getChildElementCount(element) === 0) { + element[gTextProp] = data[gTextProp]; + } else { + var children = element.childNodes; + var found = false; + + for (var i = 0, l = children.length; i < l; i++) { + if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) { + if (found) { + children[i].nodeValue = ''; + } else { + children[i].nodeValue = data[gTextProp]; + found = true; + } + } + } + + if (!found) { + var textNode = document.createTextNode(data[gTextProp]); + element.insertBefore(textNode, element.firstChild); + } + } + + delete data[gTextProp]; + } + + for (var k in data) { + element[k] = data[k]; + } + } + + function getChildElementCount(element) { + if (element.children) { + return element.children.length; + } + + if (typeof element.childElementCount !== 'undefined') { + return element.childElementCount; + } + + var count = 0; + + for (var i = 0; i < element.childNodes.length; i++) { + count += element.nodeType === 1 ? 1 : 0; + } + + return count; + } + + function translateFragment(element) { + element = element || document.documentElement; + var children = getTranslatableChildren(element); + var elementCount = children.length; + + for (var i = 0; i < elementCount; i++) { + translateElement(children[i]); + } + + translateElement(element); + } + + return { + get: function get(key, args, fallbackString) { + var index = key.lastIndexOf('.'); + var prop = gTextProp; + + if (index > 0) { + prop = key.substring(index + 1); + key = key.substring(0, index); + } + + var fallback; + + if (fallbackString) { + fallback = {}; + fallback[prop] = fallbackString; + } + + var data = getL10nData(key, args, fallback); + + if (data && prop in data) { + return data[prop]; + } + + return '{{' + key + '}}'; + }, + getData: function getData() { + return gL10nData; + }, + getText: function getText() { + return gTextData; + }, + getLanguage: function getLanguage() { + return gLanguage; + }, + setLanguage: function setLanguage(lang, callback) { + loadLocale(lang, function () { + if (callback) callback(); + }); + }, + getDirection: function getDirection() { + var rtlList = ['ar', 'he', 'fa', 'ps', 'ur']; + var shortCode = gLanguage.split('-', 1)[0]; + return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr'; + }, + translate: translateFragment, + getReadyState: function getReadyState() { + return gReadyState; + }, + ready: function ready(callback) { + if (!callback) { + return; + } else if (gReadyState == 'complete' || gReadyState == 'interactive') { + window.setTimeout(function () { + callback(); + }); + } else if (document.addEventListener) { + document.addEventListener('localized', function once() { + document.removeEventListener('localized', once); + callback(); + }); + } + } + }; + }(window, document); + + /***/ + }), + /* 45 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.docPropertiesLookup = docPropertiesLookup; + exports.GenericScripting = void 0; + + var _regenerator = _interopRequireDefault(__webpack_require__(4)); + + var _pdfjsLib = __webpack_require__(7); + + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {"default": obj}; + } + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + return keys; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + if (i % 2) { + ownKeys(Object(source), true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + return target; + } + + 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 _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); + 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 docPropertiesLookup(_x) { + return _docPropertiesLookup.apply(this, arguments); + } + + function _docPropertiesLookup() { + _docPropertiesLookup = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(pdfDocument) { + var url, baseUrl, _yield$pdfDocument$ge, info, metadata, contentDispositionFilename, contentLength, + _yield$pdfDocument$ge2, length; + + return _regenerator["default"].wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + url = "", baseUrl = url.split("#")[0]; + _context4.next = 3; + return pdfDocument.getMetadata(); + + case 3: + _yield$pdfDocument$ge = _context4.sent; + info = _yield$pdfDocument$ge.info; + metadata = _yield$pdfDocument$ge.metadata; + contentDispositionFilename = _yield$pdfDocument$ge.contentDispositionFilename; + contentLength = _yield$pdfDocument$ge.contentLength; + + if (contentLength) { + _context4.next = 14; + break; + } + + _context4.next = 11; + return pdfDocument.getDownloadInfo(); + + case 11: + _yield$pdfDocument$ge2 = _context4.sent; + length = _yield$pdfDocument$ge2.length; + contentLength = length; + + case 14: + return _context4.abrupt("return", _objectSpread(_objectSpread({}, info), {}, { + baseURL: baseUrl, + filesize: contentLength, + filename: contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(url), + metadata: metadata === null || metadata === void 0 ? void 0 : metadata.getRaw(), + authors: metadata === null || metadata === void 0 ? void 0 : metadata.get("dc:creator"), + numPages: pdfDocument.numPages, + URL: url + })); + + case 15: + case "end": + return _context4.stop(); + } + } + }, _callee4); + })); + return _docPropertiesLookup.apply(this, arguments); + } + + var GenericScripting = /*#__PURE__*/function () { + function GenericScripting(sandboxBundleSrc) { + _classCallCheck(this, GenericScripting); + + this._ready = (0, _pdfjsLib.loadScript)(sandboxBundleSrc, true).then(function () { + return window.pdfjsSandbox.QuickJSSandbox(); + }); + } + + _createClass(GenericScripting, [{ + key: "createSandbox", + value: function () { + var _createSandbox = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(data) { + var sandbox; + return _regenerator["default"].wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this._ready; + + case 2: + sandbox = _context.sent; + sandbox.create(data); + + case 4: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function createSandbox(_x2) { + return _createSandbox.apply(this, arguments); + } + + return createSandbox; + }() + }, { + key: "dispatchEventInSandbox", + value: function () { + var _dispatchEventInSandbox = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(event) { + var sandbox; + return _regenerator["default"].wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _context2.next = 2; + return this._ready; + + case 2: + sandbox = _context2.sent; + sandbox.dispatchEvent(event); + + case 4: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + function dispatchEventInSandbox(_x3) { + return _dispatchEventInSandbox.apply(this, arguments); + } + + return dispatchEventInSandbox; + }() + }, { + key: "destroySandbox", + value: function () { + var _destroySandbox = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { + var sandbox; + return _regenerator["default"].wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + _context3.next = 2; + return this._ready; + + case 2: + sandbox = _context3.sent; + sandbox.nukeSandbox(); + + case 4: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function destroySandbox() { + return _destroySandbox.apply(this, arguments); + } + + return destroySandbox; + }() + }]); + + return GenericScripting; + }(); + + exports.GenericScripting = GenericScripting; + + /***/ + }), + /* 46 */ + /***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + exports.PDFPrintService = PDFPrintService; + + var _app = __webpack_require__(3); + + var _viewer_compatibility = __webpack_require__(2); + + var activeService = null; + var overlayManager = null; + + function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise) { + var scratchCanvas = activeService.scratchCanvas; + var PRINT_UNITS = printResolution / 72.0; + scratchCanvas.width = Math.floor(size.width * PRINT_UNITS); + scratchCanvas.height = Math.floor(size.height * PRINT_UNITS); + var ctx = scratchCanvas.getContext("2d"); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height); + ctx.restore(); + return pdfDocument.getPage(pageNumber).then(function (pdfPage) { + var renderContext = { + canvasContext: ctx, + transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], + viewport: pdfPage.getViewport({ + scale: 1, + rotation: size.rotation + }), + intent: "print", + annotationStorage: pdfDocument.annotationStorage, + optionalContentConfigPromise: optionalContentConfigPromise + }; + return pdfPage.render(renderContext).promise; + }); + } + + function PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution) { + var optionalContentConfigPromise = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; + var l10n = arguments.length > 5 ? arguments[5] : undefined; + this.pdfDocument = pdfDocument; + this.pagesOverview = pagesOverview; + this.printContainer = printContainer; + this._printResolution = printResolution || 150; + this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig(); + this.l10n = l10n; + this.currentPage = -1; + this.scratchCanvas = document.createElement("canvas"); + } + + PDFPrintService.prototype = { + layout: function layout() { + this.throwIfInactive(); + var body = document.querySelector("body"); + body.setAttribute("data-pdfjsprinting", true); + var hasEqualPageSizes = this.pagesOverview.every(function (size) { + return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height; + }, this); + + if (!hasEqualPageSizes) { + console.warn("Not all pages have the same size. The printed " + "result may be incorrect!"); + } + + this.pageStyleSheet = document.createElement("style"); + var pageSize = this.pagesOverview[0]; + this.pageStyleSheet.textContent = "@page { size: " + pageSize.width + "pt " + pageSize.height + "pt;}"; + body.appendChild(this.pageStyleSheet); + }, + destroy: function destroy() { + if (activeService !== this) { + return; + } + + this.printContainer.textContent = ""; + var body = document.querySelector("body"); + body.removeAttribute("data-pdfjsprinting"); + + if (this.pageStyleSheet) { + this.pageStyleSheet.remove(); + this.pageStyleSheet = null; + } + + this.scratchCanvas.width = this.scratchCanvas.height = 0; + this.scratchCanvas = null; + activeService = null; + ensureOverlay().then(function () { + if (overlayManager.active !== "printServiceOverlay") { + return; + } + + overlayManager.close("printServiceOverlay"); + }); + }, + renderPages: function renderPages() { + var _this = this; + + var pageCount = this.pagesOverview.length; + + var renderNextPage = function renderNextPage(resolve, reject) { + _this.throwIfInactive(); + + if (++_this.currentPage >= pageCount) { + renderProgress(pageCount, pageCount, _this.l10n); + resolve(); + return; + } + + var index = _this.currentPage; + renderProgress(index, pageCount, _this.l10n); + renderPage(_this, _this.pdfDocument, index + 1, _this.pagesOverview[index], _this._printResolution, _this._optionalContentConfigPromise).then(_this.useRenderedPage.bind(_this)).then(function () { + renderNextPage(resolve, reject); + }, reject); + }; + + return new Promise(renderNextPage); + }, + useRenderedPage: function useRenderedPage() { + this.throwIfInactive(); + var img = document.createElement("img"); + var scratchCanvas = this.scratchCanvas; + + if ("toBlob" in scratchCanvas && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { + scratchCanvas.toBlob(function (blob) { + img.src = URL.createObjectURL(blob); + }); + } else { + img.src = scratchCanvas.toDataURL(); + } + + var wrapper = document.createElement("div"); + wrapper.appendChild(img); + this.printContainer.appendChild(wrapper); + return new Promise(function (resolve, reject) { + img.onload = resolve; + img.onerror = reject; + }); + }, + performPrint: function performPrint() { + var _this2 = this; + + this.throwIfInactive(); + return new Promise(function (resolve) { + setTimeout(function () { + if (!_this2.active) { + resolve(); + return; + } + + print.call(window); + setTimeout(resolve, 20); + }, 0); + }); + }, + + get active() { + return this === activeService; + }, + + throwIfInactive: function throwIfInactive() { + if (!this.active) { + throw new Error("This print request was cancelled or completed."); + } + } + }; + var print = window.print; + + window.print = function () { + if (activeService) { + console.warn("Ignored window.print() because of a pending print job."); + return; + } + + ensureOverlay().then(function () { + if (activeService) { + overlayManager.open("printServiceOverlay"); + } + }); + + try { + dispatchEvent("beforeprint"); + } finally { + if (!activeService) { + console.error("Expected print service to be initialized."); + ensureOverlay().then(function () { + if (overlayManager.active === "printServiceOverlay") { + overlayManager.close("printServiceOverlay"); + } + }); + return; + } + + var activeServiceOnEntry = activeService; + activeService.renderPages().then(function () { + return activeServiceOnEntry.performPrint(); + })["catch"](function () { + }).then(function () { + if (activeServiceOnEntry.active) { + abort(); + } + }); + } + }; + + function dispatchEvent(eventType) { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent(eventType, false, false, "custom"); + window.dispatchEvent(event); + } + + function abort() { + if (activeService) { + activeService.destroy(); + dispatchEvent("afterprint"); + } + } + + function renderProgress(index, total, l10n) { + var progressContainer = document.getElementById("printServiceOverlay"); + var progress = Math.round(100 * index / total); + var progressBar = progressContainer.querySelector("progress"); + var progressPerc = progressContainer.querySelector(".relative-progress"); + progressBar.value = progress; + l10n.get("print_progress_percent", { + progress: progress + }).then(function (msg) { + progressPerc.textContent = msg; + }); + } + + window.addEventListener("keydown", function (event) { + if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { + window.print(); + event.preventDefault(); + + if (event.stopImmediatePropagation) { + event.stopImmediatePropagation(); + } else { + event.stopPropagation(); + } + } + }, true); + + if ("onbeforeprint" in window) { + var stopPropagationIfNeeded = function stopPropagationIfNeeded(event) { + if (event.detail !== "custom" && event.stopImmediatePropagation) { + event.stopImmediatePropagation(); + } + }; + + window.addEventListener("beforeprint", stopPropagationIfNeeded); + window.addEventListener("afterprint", stopPropagationIfNeeded); + } + + var overlayPromise; + + function ensureOverlay() { + if (!overlayPromise) { + overlayManager = _app.PDFViewerApplication.overlayManager; + + if (!overlayManager) { + throw new Error("The overlay manager has not yet been initialized."); + } + + overlayPromise = overlayManager.register("printServiceOverlay", document.getElementById("printServiceOverlay"), abort, true); + document.getElementById("printCancel").onclick = abort; + } + + return overlayPromise; + } + + _app.PDFPrintServiceFactory.instance = { + supportsPrinting: true, + createPrintService: function createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n) { + if (activeService) { + throw new Error("The print service is created and active."); + } + + activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n); + return activeService; + } + }; + + /***/ + }) + /******/]); + /************************************************************************/ + /******/ // The module cache + /******/ + var __webpack_module_cache__ = {}; + /******/ + /******/ // The require function + /******/ + function __webpack_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, __webpack_require__); + /******/ + /******/ // Flag the module as loaded + /******/ + module.loaded = true; + /******/ + /******/ // Return the exports of the module + /******/ + return module.exports; + /******/ + } + + /******/ + /************************************************************************/ + /******/ /* webpack/runtime/node module decorator */ + /******/ + (() => { + /******/ + __webpack_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 isolated against other modules in the chunk. + (() => { + var exports = __webpack_exports__; + + + Object.defineProperty(exports, "__esModule", ({ + value: true + })); + Object.defineProperty(exports, "PDFViewerApplicationOptions", ({ + enumerable: true, + get: function get() { + return _app_options.AppOptions; + } + })); + Object.defineProperty(exports, "PDFViewerApplication", ({ + enumerable: true, + get: function get() { + return _app.PDFViewerApplication; + } + })); + + var _app_options = __webpack_require__(1); + + var _app = __webpack_require__(3); + + var pdfjsVersion = '2.8.335'; + var pdfjsBuild = '228adbf67'; + window.PDFViewerApplication = _app.PDFViewerApplication; + window.PDFViewerApplicationOptions = _app_options.AppOptions; + ; + ; + { + __webpack_require__(40); + } + ; + { + __webpack_require__(46); + } + + function getViewerConfiguration() { + var errorWrapper = null; + errorWrapper = { + container: document.getElementById("errorWrapper"), + errorMessage: document.getElementById("errorMessage"), + closeButton: document.getElementById("errorClose"), + errorMoreInfo: document.getElementById("errorMoreInfo"), + moreInfoButton: document.getElementById("errorShowMore"), + lessInfoButton: document.getElementById("errorShowLess") + }; + return { + appContainer: document.body, + mainContainer: document.getElementById("viewerContainer"), + viewerContainer: document.getElementById("viewer"), + eventBus: null, + toolbar: { + container: document.getElementById("toolbarViewer"), + numPages: document.getElementById("numPages"), + pageNumber: document.getElementById("pageNumber"), + scaleSelectContainer: document.getElementById("scaleSelectContainer"), + scaleSelect: document.getElementById("scaleSelect"), + customScaleOption: document.getElementById("customScaleOption"), + previous: document.getElementById("previous"), + next: document.getElementById("next"), + zoomIn: document.getElementById("zoomIn"), + zoomOut: document.getElementById("zoomOut"), + viewFind: document.getElementById("viewFind"), + openFile: document.getElementById("openFile"), + print: document.getElementById("print"), + presentationModeButton: document.getElementById("presentationMode"), + download: document.getElementById("download"), + viewBookmark: document.getElementById("viewBookmark") + }, + secondaryToolbar: { + toolbar: document.getElementById("secondaryToolbar"), + toggleButton: document.getElementById("secondaryToolbarToggle"), + toolbarButtonContainer: document.getElementById("secondaryToolbarButtonContainer"), + presentationModeButton: document.getElementById("secondaryPresentationMode"), + openFileButton: document.getElementById("secondaryOpenFile"), + printButton: document.getElementById("secondaryPrint"), + downloadButton: document.getElementById("secondaryDownload"), + viewBookmarkButton: document.getElementById("secondaryViewBookmark"), + firstPageButton: document.getElementById("firstPage"), + lastPageButton: document.getElementById("lastPage"), + pageRotateCwButton: document.getElementById("pageRotateCw"), + pageRotateCcwButton: document.getElementById("pageRotateCcw"), + cursorSelectToolButton: document.getElementById("cursorSelectTool"), + cursorHandToolButton: document.getElementById("cursorHandTool"), + scrollVerticalButton: document.getElementById("scrollVertical"), + scrollHorizontalButton: document.getElementById("scrollHorizontal"), + scrollWrappedButton: document.getElementById("scrollWrapped"), + spreadNoneButton: document.getElementById("spreadNone"), + spreadOddButton: document.getElementById("spreadOdd"), + spreadEvenButton: document.getElementById("spreadEven"), + documentPropertiesButton: document.getElementById("documentProperties") + }, + sidebar: { + outerContainer: document.getElementById("outerContainer"), + viewerContainer: document.getElementById("viewerContainer"), + toggleButton: document.getElementById("sidebarToggle"), + thumbnailButton: document.getElementById("viewThumbnail"), + outlineButton: document.getElementById("viewOutline"), + attachmentsButton: document.getElementById("viewAttachments"), + layersButton: document.getElementById("viewLayers"), + thumbnailView: document.getElementById("thumbnailView"), + outlineView: document.getElementById("outlineView"), + attachmentsView: document.getElementById("attachmentsView"), + layersView: document.getElementById("layersView"), + outlineOptionsContainer: document.getElementById("outlineOptionsContainer"), + currentOutlineItemButton: document.getElementById("currentOutlineItem") + }, + sidebarResizer: { + outerContainer: document.getElementById("outerContainer"), + resizer: document.getElementById("sidebarResizer") + }, + findBar: { + bar: document.getElementById("findbar"), + toggleButton: document.getElementById("viewFind"), + findField: document.getElementById("findInput"), + highlightAllCheckbox: document.getElementById("findHighlightAll"), + caseSensitiveCheckbox: document.getElementById("findMatchCase"), + entireWordCheckbox: document.getElementById("findEntireWord"), + findMsg: document.getElementById("findMsg"), + findResultsCount: document.getElementById("findResultsCount"), + findPreviousButton: document.getElementById("findPrevious"), + findNextButton: document.getElementById("findNext") + }, + passwordOverlay: { + overlayName: "passwordOverlay", + container: document.getElementById("passwordOverlay"), + label: document.getElementById("passwordText"), + input: document.getElementById("password"), + submitButton: document.getElementById("passwordSubmit"), + cancelButton: document.getElementById("passwordCancel") + }, + documentProperties: { + overlayName: "documentPropertiesOverlay", + container: document.getElementById("documentPropertiesOverlay"), + closeButton: document.getElementById("documentPropertiesClose"), + fields: { + fileName: document.getElementById("fileNameField"), + fileSize: document.getElementById("fileSizeField"), + title: document.getElementById("titleField"), + author: document.getElementById("authorField"), + subject: document.getElementById("subjectField"), + keywords: document.getElementById("keywordsField"), + creationDate: document.getElementById("creationDateField"), + modificationDate: document.getElementById("modificationDateField"), + creator: document.getElementById("creatorField"), + producer: document.getElementById("producerField"), + version: document.getElementById("versionField"), + pageCount: document.getElementById("pageCountField"), + pageSize: document.getElementById("pageSizeField"), + linearized: document.getElementById("linearizedField") + } + }, + errorWrapper: errorWrapper, + printContainer: document.getElementById("printContainer"), + openFileInputName: "fileInput", + debuggerScriptPath: "./debugger.js" + }; + } + + function webViewerLoad() { + var config = getViewerConfiguration(); + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("webviewerloaded", true, true, { + source: window + }); + + try { + parent.document.dispatchEvent(event); + } catch (ex) { + console.error("webviewerloaded: ".concat(ex)); + document.dispatchEvent(event); + } + + _app.PDFViewerApplication.run(config); + } + + if (document.blockUnblockOnload) { + document.blockUnblockOnload(true); + } + + if (document.readyState === "interactive" || document.readyState === "complete") { + webViewerLoad(); + } else { + document.addEventListener("DOMContentLoaded", webViewerLoad, true); + } + })(); + + /******/ +})() +; +//# sourceMappingURL=viewer.js.map \ No newline at end of file diff --git a/leigh-mecha-javafx/src/main/resources/pdfjs/web/viewer.js.map b/leigh-mecha-javafx/src/main/resources/pdfjs/web/viewer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6593ddf008b8390521e6f5fc11bf9299902da617 --- /dev/null +++ b/leigh-mecha-javafx/src/main/resources/pdfjs/web/viewer.js.map @@ -0,0 +1,1697 @@ +{ + "version": 3, + "sources": [ + "webpack://pdf.js/web/app_options.js", + "webpack://pdf.js/web/viewer_compatibility.js", + "webpack://pdf.js/web/app.js", + "webpack://pdf.js/node_modules/@babel/runtime/regenerator/index.js", + "webpack://pdf.js/node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js", + "webpack://pdf.js/web/ui_utils.js", + "webpack://pdf.js/web/pdfjs.js", + "webpack://pdf.js/web/pdf_cursor_tools.js", + "webpack://pdf.js/web/grab_to_pan.js", + "webpack://pdf.js/web/pdf_rendering_queue.js", + "webpack://pdf.js/web/overlay_manager.js", + "webpack://pdf.js/web/password_prompt.js", + "webpack://pdf.js/web/pdf_attachment_viewer.js", + "webpack://pdf.js/web/base_tree_viewer.js", + "webpack://pdf.js/web/pdf_document_properties.js", + "webpack://pdf.js/web/pdf_find_bar.js", + "webpack://pdf.js/web/pdf_find_controller.js", + "webpack://pdf.js/web/pdf_find_utils.js", + "webpack://pdf.js/web/pdf_history.js", + "webpack://pdf.js/web/pdf_layer_viewer.js", + "webpack://pdf.js/web/pdf_link_service.js", + "webpack://pdf.js/web/pdf_outline_viewer.js", + "webpack://pdf.js/web/pdf_presentation_mode.js", + "webpack://pdf.js/web/pdf_scripting_manager.js", + "webpack://pdf.js/web/pdf_sidebar.js", + "webpack://pdf.js/web/pdf_sidebar_resizer.js", + "webpack://pdf.js/web/pdf_thumbnail_viewer.js", + "webpack://pdf.js/web/pdf_thumbnail_view.js", + "webpack://pdf.js/web/pdf_viewer.js", + "webpack://pdf.js/web/base_viewer.js", + "webpack://pdf.js/web/annotation_layer_builder.js", + "webpack://pdf.js/web/l10n_utils.js", + "webpack://pdf.js/web/pdf_page_view.js", + "webpack://pdf.js/web/text_layer_builder.js", + "webpack://pdf.js/web/xfa_layer_builder.js", + "webpack://pdf.js/web/secondary_toolbar.js", + "webpack://pdf.js/web/pdf_single_page_viewer.js", + "webpack://pdf.js/web/toolbar.js", + "webpack://pdf.js/web/view_history.js", + "webpack://pdf.js/web/genericcom.js", + "webpack://pdf.js/web/preferences.js", + "webpack://pdf.js/web/download_manager.js", + "webpack://pdf.js/web/genericl10n.js", + "webpack://pdf.js/external/webL10n/l10n.js", + "webpack://pdf.js/web/generic_scripting.js", + "webpack://pdf.js/web/pdf_print_service.js", + "webpack://pdf.js/webpack/bootstrap", + "webpack://pdf.js/webpack/runtime/node module decorator", + "webpack://pdf.js/web/viewer.js" + ], + "names": [ + "OptionKind", + "VIEWER", + "API", + "WORKER", + "PREFERENCE", + "defaultOptions", + "cursorToolOnLoad", + "value", + "kind", + "defaultUrl", + "defaultZoomValue", + "disableHistory", + "disablePageLabels", + "enablePermissions", + "enablePrintAutoRotate", + "enableScripting", + "enableWebGL", + "externalLinkRel", + "externalLinkTarget", + "historyUpdateUrl", + "ignoreDestinationZoom", + "imageResourcesPath", + "maxCanvasPixels", + "compatibility", + "viewerCompatibilityParams", + "pdfBugEnabled", + "printResolution", + "renderer", + "renderInteractiveForms", + "sidebarViewOnLoad", + "scrollModeOnLoad", + "spreadModeOnLoad", + "textLayerMode", + "useOnlyCssZoom", + "viewerCssTheme", + "viewOnLoad", + "cMapPacked", + "cMapUrl", + "disableAutoFetch", + "disableFontFace", + "disableRange", + "disableStream", + "docBaseUrl", + "enableXfa", + "fontExtraProperties", + "isEvalSupported", + "maxImageSize", + "pdfBug", + "verbosity", + "workerPort", + "workerSrc", + "navigator", + "userOptions", + "Object", + "constructor", + "userOption", + "defaultOption", + "options", + "valueType", + "Number", + "compatibilityParams", + "userAgent", + "platform", + "maxTouchPoints", + "isAndroid", + "isIOS", + "isIOSChrome", + "DEFAULT_SCALE_DELTA", + "DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT", + "FORCE_PAGES_LOADED_TIMEOUT", + "WHEEL_ZOOM_DISABLED_TIMEOUT", + "ENABLE_PERMISSIONS_CLASS", + "ViewOnLoad", + "UNKNOWN", + "PREVIOUS", + "INITIAL", + "ViewerCssTheme", + "AUTOMATIC", + "LIGHT", + "DARK", + "KNOWN_VERSIONS", + "KNOWN_GENERATORS", + "shadow", + "ctrlKey", + "metaKey", + "PDFViewerApplication", + "initialBookmark", + "document", + "_initializedCapability", + "fellback", + "appConfig", + "pdfDocument", + "pdfLoadingTask", + "printService", + "pdfViewer", + "pdfThumbnailViewer", + "pdfRenderingQueue", + "pdfPresentationMode", + "pdfDocumentProperties", + "pdfLinkService", + "pdfHistory", + "pdfSidebar", + "pdfSidebarResizer", + "pdfOutlineViewer", + "pdfAttachmentViewer", + "pdfLayerViewer", + "pdfCursorTools", + "pdfScriptingManager", + "store", + "downloadManager", + "overlayManager", + "preferences", + "toolbar", + "secondaryToolbar", + "eventBus", + "l10n", + "isInitialViewSet", + "downloadComplete", + "isViewerEmbedded", + "window", + "url", + "baseUrl", + "externalServices", + "_boundEvents", + "documentInfo", + "metadata", + "_contentDispositionFilename", + "_contentLength", + "triggerDelayedFallback", + "_saveInProgress", + "_wheelUnusedTicks", + "_idleCallbacks", + "AppOptions", + "LinkTarget", + "appContainer", + "source", + "console", + "reason", + "hash", + "hashParams", + "parseQueryString", + "waitOn", + "loadFakeWorker", + "TextLayerMode", + "viewer", + "enabled", + "loadAndEnablePDFBug", + "locale", + "dir", + "_forceCssTheme", + "cssTheme", + "styleSheet", + "cssRules", + "i", + "ii", + "rule", + "darkRules", + "isInAutomation", + "findController", + "linkService", + "sandboxBundleSrc", + "scriptingFactory", + "docPropertiesLookup", + "container", + "renderingQueue", + "scriptingManager", + "elements", + "run", + "zoomIn", + "newScale", + "Math", + "zoomOut", + "zoomReset", + "PDFPrintServiceFactory", + "doc", + "support", + "bar", + "initPassiveLoading", + "setTitleUsingUrl", + "title", + "getPdfFilenameFromUrl", + "decodeURIComponent", + "getFilenameFromUrl", + "setTitle", + "_cancelIdleCallbacks", + "sourceEventType", + "promises", + "webViewerResetPermissions", + "PDFBug", + "Promise", + "workerParameters", + "GlobalWorkerOptions", + "parameters", + "file", + "apiParameters", + "key", + "args", + "loadingTask", + "getDocument", + "loaded", + "exception", + "msg", + "message", + "_ensureDownloadComplete", + "filename", + "data", + "blob", + "type", + "downloadOrSave", + "_delayedFallback", + "featureId", + "fallback", + "UNSUPPORTED_FEATURES", + "download", + "_documentError", + "moreInfo", + "_otherError", + "moreInfoText", + "version", + "build", + "stack", + "line", + "errorWrapperConfig", + "errorWrapper", + "errorMessage", + "closeButton", + "errorMoreInfo", + "moreInfoButton", + "lessInfoButton", + "parts", + "progress", + "percent", + "level", + "isNaN", + "clearTimeout", + "load", + "firstPagePromise", + "pageLayoutPromise", + "pageModePromise", + "openActionPromise", + "baseDocumentUrl", + "storedPromise", + "page", + "zoom", + "scrollLeft", + "scrollTop", + "rotation", + "sidebarView", + "SidebarView", + "scrollMode", + "ScrollMode", + "spreadMode", + "SpreadMode", + "pdfPage", + "fingerprint", + "initialDest", + "openAction", + "stored", + "parseInt", + "pageMode", + "apiPageModeToSidebarView", + "pageLayout", + "apiPageLayoutToSpreadMode", + "resolve", + "setTimeout", + "pagesPromise", + "onePageRendered", + "outline", + "attachments", + "optionalContentConfig", + "callback", + "timeout", + "once", + "baseURL", + "filesize", + "authors", + "numPages", + "URL", + "markInfo", + "tagged", + "triggerAutoPrint", + "javaScript", + "js", + "AutoPrintRegExp", + "info", + "pdfTitle", + "metadataTitle", + "contentDispositionFilename", + "versionId", + "generatorId", + "producer", + "generator", + "formType", + "labels", + "numLabels", + "_initializePdfHistory", + "resetHistory", + "updateUrl", + "JSON", + "explicitDest", + "pageNumber", + "permissions", + "PermissionFlag", + "_initializeAnnotationStorageCallbacks", + "annotationStorage", + "setInitialView", + "setRotation", + "angle", + "isValidRotation", + "setViewerModes", + "isValidScrollMode", + "isValidSpreadMode", + "_cleanup", + "RendererType", + "forceRendering", + "beforePrint", + "pagesOverview", + "printContainer", + "optionalContentConfigPromise", + "afterPrint", + "rotatePages", + "requestPresentationMode", + "triggerPrinting", + "bindEvents", + "bindWindowEvents", + "event", + "detail", + "passive", + "unbindEvents", + "unbindWindowEvents", + "accumulateWheelTicks", + "ticks", + "wholeTicks", + "_unblockDocumentLoadEvent", + "HOSTED_VIEWER_ORIGINS", + "validateFileURL", + "viewerOrigin", + "origin", + "protocol", + "ex", + "loadScript", + "PDFWorker", + "OPS", + "Stats", + "pageView", + "pageStats", + "queryString", + "params", + "fileInput", + "files", + "evt", + "webViewerOpenFileViaURL", + "thumbnailView", + "timestamp", + "stats", + "view", + "webViewerSave", + "location", + "href", + "currentPage", + "loading", + "RenderingStates", + "currentScaleValue", + "webViewerFileInputChange", + "originalUrl", + "fileReader", + "buffer", + "webViewerOpenFile", + "openFileInputName", + "query", + "phraseSearch", + "caseSensitive", + "entireWord", + "highlightAll", + "findPrevious", + "result", + "matchesCount", + "rawQuery", + "setZoomDisabledTimeout", + "zoomDisabledTimeout", + "supportedMouseWheelZoomModifierKeys", + "previousScale", + "delta", + "normalizeWheelEventDirection", + "WheelEvent", + "PIXELS_PER_LINE_SCALE", + "currentScale", + "scaleCorrectionFactor", + "rect", + "dx", + "dy", + "handled", + "ensureViewerFocused", + "cmd", + "isViewerInPresentationMode", + "findState", + "curElement", + "curElementTagName", + "turnPage", + "turnOnlyIfPageFit", + "CursorTool", + "instance", + "supportsPrinting", + "createPrintService", + "module", + "runtime", + "Op", + "hasOwn", + "$Symbol", + "iteratorSymbol", + "asyncIteratorSymbol", + "toStringTagSymbol", + "enumerable", + "configurable", + "writable", + "obj", + "define", + "protoGenerator", + "outerFn", + "context", + "tryLocsList", + "makeInvokeMethod", + "exports", + "arg", + "fn", + "GenStateSuspendedStart", + "GenStateSuspendedYield", + "GenStateExecuting", + "GenStateCompleted", + "ContinueSentinel", + "IteratorPrototype", + "getProto", + "NativeIteratorPrototype", + "values", + "Gp", + "GeneratorFunctionPrototype", + "Generator", + "GeneratorFunction", + "ctor", + "genFun", + "__await", + "record", + "tryCatch", + "reject", + "invoke", + "previousPromise", + "callInvokeWithMethodAndArg", + "defineIteratorMethods", + "AsyncIterator", + "PromiseImpl", + "iter", + "wrap", + "state", + "method", + "doneResult", + "delegate", + "delegateResult", + "maybeInvokeDelegate", + "done", + "entry", + "tryLoc", + "locs", + "keys", + "next", + "iteratorMethod", + "iterable", + "Context", + "reset", + "name", + "stop", + "rootEntry", + "rootRecord", + "dispatchException", + "handle", + "hasCatch", + "hasFinally", + "abrupt", + "finallyEntry", + "complete", + "finish", + "resetTryEntry", + "thrown", + "delegateYield", + "iterator", + "resultName", + "nextLoc", + "regeneratorRuntime", + "Function", + "CSS_UNITS", + "DEFAULT_SCALE_VALUE", + "DEFAULT_SCALE", + "MIN_SCALE", + "MAX_SCALE", + "UNKNOWN_SCALE", + "MAX_AUTO_SCALE", + "SCROLLBAR_PADDING", + "VERTICAL_PADDING", + "LOADINGBAR_END_OFFSET_VAR", + "PresentationModeState", + "NORMAL", + "CHANGING", + "FULLSCREEN", + "NONE", + "THUMBS", + "OUTLINE", + "ATTACHMENTS", + "LAYERS", + "CANVAS", + "SVG", + "DISABLE", + "ENABLE", + "ENABLE_ENHANCE", + "VERTICAL", + "HORIZONTAL", + "WRAPPED", + "ODD", + "EVEN", + "devicePixelRatio", + "backingStoreRatio", + "ctx", + "pixelRatio", + "sx", + "sy", + "scaled", + "skipOverflowHiddenElements", + "parent", + "element", + "offsetY", + "offsetX", + "getComputedStyle", + "spot", + "debounceScroll", + "rAF", + "currentX", + "viewAreaElement", + "lastX", + "currentY", + "lastY", + "right", + "down", + "_eventHandler", + "param", + "minIndex", + "maxIndex", + "items", + "condition", + "currentIndex", + "currentItem", + "xinv", + "limit", + "x_", + "x", + "a", + "b", + "c", + "d", + "p", + "q", + "r", + "changeOrientation", + "rotate", + "width", + "height", + "index", + "elt", + "views", + "pageTop", + "sortByVisibility", + "horizontal", + "rtl", + "top", + "scrollEl", + "bottom", + "left", + "elementBottom", + "elementLeft", + "elementRight", + "visible", + "numViews", + "firstVisibleElementInd", + "binarySearchFirstItem", + "backtrackBeforeAllVisibleElements", + "lastEdge", + "currentWidth", + "currentHeight", + "viewWidth", + "viewHeight", + "viewRight", + "viewBottom", + "hiddenHeight", + "hiddenWidth", + "fractionHeight", + "fractionWidth", + "id", + "y", + "widthPercent", + "first", + "last", + "pc", + "MOUSE_DOM_DELTA_PIXEL_MODE", + "MOUSE_DOM_DELTA_LINE_MODE", + "MOUSE_PIXELS_PER_LINE", + "MOUSE_LINES_PER_PAGE", + "mode", + "size", + "WaitOnType", + "EVENT", + "TIMEOUT", + "delay", + "target", + "eventHandler", + "handler", + "timeoutHandler", + "animationStarted", + "on", + "external", + "off", + "dispatch", + "eventListeners", + "Array", + "listener", + "externalListeners", + "_on", + "_off", + "units", + "_updateBar", + "progressSize", + "clamp", + "setWidth", + "scrollbarWidth", + "hide", + "show", + "moved", + "len", + "arr", + "write", + "read", + "curRoot", + "curActiveOrFocused", + "pdfjsLib", + "__non_webpack_require__", + "SELECT", + "HAND", + "ZOOM", + "switchTool", + "tool", + "disableActiveTool", + "_dispatchEvent", + "_addEventListeners", + "previouslyActive", + "overlay", + "GrabToPan", + "CSS_CLASS_GRAB", + "activate", + "deactivate", + "toggle", + "ignoreTarget", + "node", + "_onmousedown", + "focusedElement", + "_onmousemove", + "isLeftMouseReleased", + "xDiff", + "yDiff", + "behavior", + "_endPan", + "chrome", + "isChrome15OrOpera15plus", + "isSafari6plus", + "CLEANUP_TIMEOUT", + "RUNNING", + "PAUSED", + "FINISHED", + "setViewer", + "setThumbnailViewer", + "isHighestPriority", + "renderHighestPriority", + "getHighestPriority", + "visibleViews", + "numVisible", + "nextPageIndex", + "previousPageIndex", + "isViewFinished", + "renderView", + "callerCloseMethod", + "canForceClose", + "_keyDown", + "_closeThroughCaller", + "e", + "passwordIncorrect", + "PasswordResponses", + "close", + "verify", + "password", + "setUpdateCallback", + "keepRenderedCapability", + "attachmentsCount", + "_bindLink", + "render", + "names", + "fragment", + "item", + "content", + "div", + "_appendAttachment", + "renderedPromise", + "TREEITEM_OFFSET_TOP", + "TREEITEM_SELECTED_CLASS", + "_normalizeTextContent", + "removeNullCharacters", + "_addToggleButton", + "hidden", + "toggler", + "shouldShowAll", + "_toggleTreeItem", + "root", + "_toggleAllTreeItems", + "_finishRendering", + "hasAnyNesting", + "_updateCurrentTreeItem", + "treeItem", + "_scrollToCurrentTreeItem", + "currentNode", + "DEFAULT_FIELD_CONTENT", + "NON_METRIC_LOCALES", + "US_PAGE_NAMES", + "METRIC_PAGE_NAMES", + "isPortrait", + "pageNames", + "freezeFieldData", + "currentPageNumber", + "pagesRotation", + "getPageSizeInches", + "fileName", + "fileSize", + "author", + "subject", + "keywords", + "creationDate", + "modificationDate", + "creator", + "pageCount", + "pageSize", + "linearized", + "_currentPageNumber", + "_pagesRotation", + "contentLength", + "setDocument", + "_reset", + "_updateUI", + "kb", + "mb", + "size_mb", + "size_kb", + "size_b", + "pageSizeInches", + "isPortraitOrientation", + "sizeInches", + "sizeMillimeters", + "rawName", + "getPageName", + "exactMillimeters", + "intMillimeters", + "unit", + "orientation", + "dateObject", + "PDFDateString", + "date", + "time", + "_parseLinearization", + "isLinearized", + "MATCHES_COUNT_LIMIT", + "dispatchEvent", + "updateUIState", + "findMsg", + "status", + "FindState", + "previous", + "updateResultsCount", + "current", + "total", + "matchCountMsg", + "open", + "_adjustWidth", + "findbarHeight", + "inputContainerHeight", + "FOUND", + "NOT_FOUND", + "PENDING", + "FIND_TIMEOUT", + "MATCH_SCROLL_OFFSET_TOP", + "MATCH_SCROLL_OFFSET_LEFT", + "CHARACTERS_TO_NORMALIZE", + "normalizationRegex", + "replace", + "diffs", + "normalizedText", + "normalizedCh", + "diff", + "ch", + "totalDiff", + "matchIndex", + "executeCommand", + "findbarClosed", + "pendingTimeout", + "scrollMatchIntoView", + "pageIndex", + "scrollIntoView", + "pageIdx", + "matchIdx", + "wrapped", + "normalize", + "_shouldDirtyMatch", + "_prepareMatches", + "currentElem", + "matchesWithLength", + "nextElem", + "prevElem", + "isSubTerm", + "matches", + "matchesLength", + "_isEntireWord", + "startIdx", + "getCharacterType", + "endIdx", + "_calculatePhraseMatch", + "queryLen", + "pageContent", + "originalMatchIdx", + "getOriginalIndex", + "matchEnd", + "originalQueryLen", + "_calculateWordMatch", + "queryArray", + "subquery", + "subqueryLen", + "match", + "matchLength", + "skipped", + "_calculateMatch", + "pageDiffs", + "pageMatchesCount", + "_extractText", + "promise", + "extractTextCapability", + "normalizeWhitespace", + "textContent", + "textItems", + "strBuf", + "j", + "jj", + "_updatePage", + "_updateAllPages", + "_nextMatch", + "currentPageIndex", + "offset", + "numPageMatches", + "_matchesReady", + "numMatches", + "_nextPageMatch", + "_advanceOffsetPage", + "_updateMatch", + "found", + "previousPage", + "_onFindBarClose", + "_requestMatchesCount", + "_updateUIResultsCount", + "_updateUIState", + "CharacterType", + "SPACE", + "ALPHA_LETTER", + "PUNCT", + "HAN_LETTER", + "KATAKANA_LETTER", + "HIRAGANA_LETTER", + "HALFWIDTH_KATAKANA_LETTER", + "THAI_LETTER", + "charCode", + "isAlphabeticalScript", + "isAscii", + "isAsciiSpace", + "isAsciiAlpha", + "isAsciiDigit", + "isThai", + "isHan", + "isKatakana", + "isHiragana", + "isHalfwidthKatakana", + "HASH_CHANGE_TIMEOUT", + "POSITION_UPDATED_THRESHOLD", + "UPDATE_VIEWAREA_TIMEOUT", + "initialize", + "reInitialized", + "getCurrentHash", + "destination", + "push", + "namedDest", + "forceReplace", + "isDestArraysEqual", + "dest", + "pushPage", + "pushCurrentPosition", + "back", + "forward", + "_pushOrReplaceState", + "shouldReplace", + "newState", + "uid", + "newUrl", + "_tryPushCurrentPosition", + "temporary", + "position", + "_isValidPage", + "val", + "_isValidState", + "checkReload", + "performance", + "perfEntry", + "_updateInternalState", + "removeTemporary", + "_parseCurrentHash", + "checkNameddest", + "unescape", + "nameddest", + "_updateViewarea", + "_popState", + "newHash", + "hashChanged", + "waitOnEventOrTimeout", + "_pageHide", + "_bindEvents", + "updateViewarea", + "popState", + "pageHide", + "_unbindEvents", + "destHash", + "second", + "isEntryEqual", + "firstDest", + "secondDest", + "layersCount", + "setVisibility", + "input", + "groups", + "queue", + "levelData", + "itemsDiv", + "groupId", + "group", + "label", + "externalLinkEnabled", + "setHistory", + "navigateTo", + "_goToDestinationHelper", + "destRef", + "destArray", + "goToPage", + "getDestinationHash", + "escape", + "str", + "getAnchorUrl", + "setHash", + "zoomArgs", + "zoomArg", + "zoomArgNumber", + "parseFloat", + "allowNegativeOffset", + "isValidExplicitDestination", + "executeNamedAction", + "action", + "cachePageRef", + "refStr", + "pageRef", + "_cachedPageNumber", + "isPageVisible", + "isPageCached", + "destLength", + "allowNull", + "outlineCount", + "enableCurrentOutlineItemButton", + "addLinkAttributes", + "newWindow", + "rel", + "_setStyles", + "count", + "totalCount", + "nestedCount", + "nestedItems", + "pageNumberToDestHash", + "linkElement", + "pageNumberNesting", + "nesting", + "currentNesting", + "DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS", + "DELAY_BEFORE_HIDING_CONTROLS", + "ACTIVE_SELECTOR", + "CONTROLS_SELECTOR", + "MOUSE_SCROLL_COOLDOWN_TIME", + "PAGE_SWITCH_THRESHOLD", + "SWIPE_MIN_DISTANCE_THRESHOLD", + "SWIPE_ANGLE_THRESHOLD", + "request", + "Element", + "_mouseWheel", + "normalizeWheelEventDelta", + "currentTime", + "Date", + "storedTime", + "totalDelta", + "success", + "_notifyStateChange", + "_setSwitchInProgress", + "_resetSwitchInProgress", + "_enter", + "_exit", + "_mouseDown", + "isInternalLink", + "_contextMenu", + "_showControls", + "_hideControls", + "_resetMouseScrollState", + "_touchSwipe", + "startX", + "startY", + "endX", + "endY", + "absAngle", + "_addWindowListeners", + "_removeWindowListeners", + "_fullscreenChange", + "_addFullscreenChangeListeners", + "_removeFullscreenChangeListeners", + "docProperties", + "objects", + "calculationOrder", + "appInfo", + "language", + "docInfo", + "actions", + "error", + "isInPresentationMode", + "visitedPages", + "actionsPromise", + "_createScripting", + "UI_NOTIFICATION_CLASS", + "switchView", + "forceOpen", + "_switchView", + "isViewChanged", + "shouldForceRendering", + "_forceRendering", + "_updateThumbnailViewer", + "pagesCount", + "_showUINotification", + "_hideUINotification", + "onTreeLoaded", + "button", + "SIDEBAR_WIDTH_VAR", + "SIDEBAR_MIN_WIDTH", + "SIDEBAR_RESIZING_CLASS", + "_updateWidth", + "maxWidth", + "_mouseMove", + "_mouseUp", + "updated", + "THUMBNAIL_SCROLL_MARGIN", + "THUMBNAIL_SELECTED_CLASS", + "watchScroll", + "_scrollUpdated", + "getThumbnail", + "_getVisibleThumbs", + "scrollThumbnailIntoView", + "prevThumbnailView", + "visibleThumbs", + "numVisibleThumbs", + "shouldScroll", + "cleanup", + "TempImageFactory", + "_resetView", + "firstPdfPage", + "viewport", + "scale", + "checkSetImageDisabled", + "pageNum", + "thumbnail", + "defaultViewport", + "disableCanvasToImageConversion", + "firstThumbnailView", + "_cancelRendering", + "setPageLabels", + "_ensurePdfPageLoaded", + "thumbView", + "MAX_NUM_SCALING_STEPS", + "THUMBNAIL_CANVAS_BORDER_WIDTH", + "THUMBNAIL_WIDTH", + "tempCanvasCache", + "getCanvas", + "tempCanvas", + "alpha", + "destroyCanvas", + "anchor", + "ring", + "borderAdjustment", + "setPdfPage", + "totalRotation", + "childNodes", + "update", + "cancelRendering", + "_getPageDrawContext", + "canvas", + "outputScale", + "getOutputScale", + "transform", + "_convertCanvasToImage", + "className", + "image", + "draw", + "finishRenderTask", + "renderTask", + "drawViewport", + "renderContinueCallback", + "cont", + "renderContext", + "canvasContext", + "resultPromise", + "pageCached", + "setImage", + "img", + "reducedWidth", + "reducedHeight", + "reducedImage", + "reducedImageCtx", + "setPageLabel", + "_scrollIntoView", + "pageSpot", + "pageDiv", + "_getVisiblePages", + "_updateHelper", + "currentId", + "stillFullyVisible", + "visiblePages", + "DEFAULT_CACHE_SIZE", + "pageIdsToKeep", + "iMax", + "pagesToKeep", + "moveToEndOfArray", + "viewerVersion", + "getPageView", + "_setCurrentPageNumber", + "resetCurrentPageView", + "pageLabel", + "_onePageRenderedOrForceFetch", + "isPureXfa", + "textLayerFactory", + "xfaLayerFactory", + "annotationLayerFactory", + "firstPageView", + "getPagesLeft", + "_scrollUpdate", + "_setScaleUpdatePages", + "noScroll", + "preset", + "newValue", + "isSameScale", + "presetValue", + "_setScale", + "noPadding", + "hPadding", + "vPadding", + "pageWidthScale", + "pageHeightScale", + "horizontalScale", + "_resetCurrentPageView", + "pageLabelToPageNumber", + "scrollPageIntoView", + "pageWidth", + "pageHeight", + "widthScale", + "heightScale", + "boundingRect", + "_updateLocation", + "normalizedScaleValue", + "firstPage", + "pdfOpenParams", + "currentPageView", + "topLeft", + "intLeft", + "intTop", + "numVisiblePages", + "newCacheSize", + "containsElement", + "focus", + "_getCurrentVisiblePage", + "currentlyVisiblePages", + "scrollAhead", + "createTextLayerBuilder", + "enhanceTextSelection", + "textLayerDiv", + "createAnnotationLayerBuilder", + "hasJSActionsPromise", + "mouseState", + "createXfaLayerBuilder", + "getPagesOverview", + "_updateScrollMode", + "_updateSpreadMode", + "pages", + "parity", + "spread", + "_getPageAdvance", + "yArray", + "expectedId", + "firstId", + "lastId", + "nextPage", + "advance", + "intent", + "hasJSActions", + "annotations", + "dontFlip", + "AnnotationLayer", + "cancel", + "DEFAULT_L10N_STRINGS", + "of_pages", + "page_of_pages", + "document_properties_kb", + "document_properties_mb", + "document_properties_date_string", + "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", + "document_properties_page_size_name_a4", + "document_properties_page_size_name_letter", + "document_properties_page_size_name_legal", + "document_properties_page_size_dimension_string", + "document_properties_page_size_dimension_name_string", + "document_properties_linearized_yes", + "document_properties_linearized_no", + "print_progress_percent", + "additional_layers", + "page_landmark", + "thumb_page_title", + "thumb_page_canvas", + "find_reached_top", + "find_reached_bottom", + "find_not_found", + "error_version_info", + "error_message", + "error_stack", + "error_file", + "error_line", + "rendering_error", + "page_scale_width", + "page_scale_fit", + "page_scale_auto", + "page_scale_actual", + "page_scale_percent", + "loading_error", + "invalid_file_error", + "missing_file_error", + "unexpected_response_error", + "printing_not_supported", + "printing_not_ready", + "web_fonts_disabled", + "NullL10n", + "getL10nFallback", + "formatL10nValue", + "MAX_CANVAS_PIXELS", + "destroy", + "_resetZoomLayer", + "removeFromDOM", + "zoomLayerCanvas", + "keepZoomLayer", + "keepAnnotations", + "currentZoomLayerNode", + "currentAnnotationNode", + "currentXfaLayerNode", + "cssTransform", + "isScalingRestricted", + "redrawAnnotations", + "relativeRotation", + "absRotation", + "scaleX", + "scaleY", + "textLayerViewport", + "textRelativeRotation", + "textAbsRotation", + "transX", + "transY", + "getPagePoint", + "canvasWrapper", + "textLayer", + "finishPaintTask", + "paintTask", + "readableStream", + "paintOnCanvas", + "renderCapability", + "onRenderContinue", + "isCanvasHidden", + "showCanvas", + "actualSizeViewport", + "pixelsInViewport", + "maxScale", + "sfx", + "approximateFraction", + "sfy", + "roundToDivide", + "paintOnSvg", + "cancelled", + "ensureNotCancelled", + "opList", + "svgGfx", + "svg", + "wrapper", + "EXPAND_DIVS_TIMEOUT", + "endOfContent", + "numTextDivs", + "textLayerFrag", + "textContentStream", + "textDivs", + "textContentItemsStr", + "setTextContentStream", + "setTextContent", + "_convertMatches", + "iIndex", + "end", + "m", + "mm", + "begin", + "divIdx", + "_renderMatches", + "isSelectedPage", + "selectedMatchIdx", + "prevEnd", + "infinity", + "appendTextToDiv", + "span", + "i0", + "i1", + "isSelected", + "highlightSuffix", + "beginText", + "n0", + "n1", + "_updateMatches", + "clearedUntilDivIdx", + "n", + "pageMatches", + "pageMatchesLength", + "_bindMouse", + "expandDivsTimer", + "adjustTop", + "divBounds", + "xfa", + "XfaLayer", + "eventName", + "eventDetails", + "lastPage", + "pageRotateCw", + "pageRotateCcw", + "setPageNumber", + "setPagesCount", + "_bindClickListeners", + "details", + "_bindCursorToolsListener", + "buttons", + "_bindScrollModeListener", + "isScrollModeHorizontal", + "scrollModeChanged", + "_bindSpreadModeListener", + "spreadModeChanged", + "_setMaxHeight", + "_ensurePageViewVisible", + "previousPageView", + "viewerNodes", + "scrolledDown", + "PAGE_NUMBER_LOADING_INDICATOR", + "SCALE_SELECT_CONTAINER_WIDTH", + "SCALE_SELECT_WIDTH", + "scaleSelectContainer", + "scaleSelect", + "customScaleOption", + "setPageScale", + "_bindListeners", + "self", + "resetNumPages", + "pageScale", + "predefinedValueFound", + "option", + "updateLoadingIndicatorState", + "pageNumberInput", + "predefinedValuesPromise", + "overflow", + "DEFAULT_VIEW_HISTORY_CACHE_SIZE", + "cacheSize", + "databaseStr", + "database", + "branch", + "localStorage", + "properties", + "GenericCom", + "prefs", + "prefValue", + "defaultValue", + "defaultType", + "downloadUrl", + "createValidAbsoluteUrl", + "downloadData", + "blobUrl", + "createObjectURL", + "openOrDownloadData", + "isPdfData", + "isPdfFile", + "contentType", + "viewerUrl", + "encodeURIComponent", + "webL10n", + "gL10nData", + "gTextData", + "gTextProp", + "gLanguage", + "gMacros", + "gReadyState", + "gAsyncResourceLoading", + "script", + "l10nId", + "l10nArgs", + "onSuccess", + "onFailure", + "xhr", + "text", + "dictionary", + "reBlank", + "reComment", + "reSection", + "reImport", + "reSplit", + "entries", + "rawText", + "currentLang", + "genericLang", + "lang", + "skipLang", + "parsedRawLinesCallback", + "loadImport", + "tmp", + "evalString", + "nextEntry", + "xhrLoadText", + "parseRawLines", + "parsedPropertiesCallback", + "parseProperties", + "prop", + "successCallback", + "clear", + "langLinks", + "getL10nResourceLinks", + "langCount", + "dict", + "getL10nDictionary", + "defaultLocale", + "anyCaseLang", + "onResourceLoaded", + "gResourceCount", + "link", + "parseResource", + "resource", + "locales2rules", + "list", + "start", + "pluralRules", + "isBetween", + "getPluralRules", + "rv", + "substIndexes", + "substArguments", + "reIndex", + "reMatch", + "macroName", + "paramName", + "macro", + "reArgs", + "getL10nAttributes", + "getL10nData", + "getChildElementCount", + "children", + "l", + "textNode", + "getTranslatableChildren", + "elementCount", + "translateElement", + "get", + "getData", + "getText", + "getLanguage", + "setLanguage", + "loadLocale", + "getDirection", + "rtlList", + "shortCode", + "translate", + "getReadyState", + "ready", + "sandbox", + "activeService", + "scratchCanvas", + "PRINT_UNITS", + "PDFPrintService", + "layout", + "body", + "hasEqualPageSizes", + "ensureOverlay", + "renderPages", + "renderNextPage", + "renderProgress", + "renderPage", + "useRenderedPage", + "performPrint", + "print", + "throwIfInactive", + "activeServiceOnEntry", + "abort", + "progressContainer", + "progressBar", + "progressPerc", + "stopPropagationIfNeeded", + "overlayPromise", + "pdfjsVersion", + "pdfjsBuild", + "require", + "mainContainer", + "viewerContainer", + "viewFind", + "openFile", + "presentationModeButton", + "viewBookmark", + "toggleButton", + "toolbarButtonContainer", + "openFileButton", + "printButton", + "downloadButton", + "viewBookmarkButton", + "firstPageButton", + "lastPageButton", + "pageRotateCwButton", + "pageRotateCcwButton", + "cursorSelectToolButton", + "cursorHandToolButton", + "scrollVerticalButton", + "scrollHorizontalButton", + "scrollWrappedButton", + "spreadNoneButton", + "spreadOddButton", + "spreadEvenButton", + "documentPropertiesButton", + "sidebar", + "outerContainer", + "thumbnailButton", + "outlineButton", + "attachmentsButton", + "layersButton", + "outlineView", + "attachmentsView", + "layersView", + "outlineOptionsContainer", + "currentOutlineItemButton", + "sidebarResizer", + "resizer", + "findBar", + "findField", + "highlightAllCheckbox", + "caseSensitiveCheckbox", + "entireWordCheckbox", + "findResultsCount", + "findPreviousButton", + "findNextButton", + "passwordOverlay", + "overlayName", + "submitButton", + "cancelButton", + "documentProperties", + "fields", + "debuggerScriptPath", + "config", + "getViewerConfiguration", + "webViewerLoad" + ], + "mappings": "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", + "file": "viewer.js", + "sourcesContent": [ + "/* 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\nimport { viewerCompatibilityParams } from \"./viewer_compatibility.js\";\n\nconst OptionKind = {\n VIEWER: 0x02,\n API: 0x04,\n WORKER: 0x08,\n PREFERENCE: 0x80,\n};\n\n/**\n * PLEASE NOTE: To avoid introducing unnecessary dependencies, we specify the\n * values below *explicitly* rather than relying on imported types.\n */\nconst defaultOptions = {\n cursorToolOnLoad: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n defaultUrl: {\n /** @type {string} */\n value: \"compressed.tracemonkey-pldi-09.pdf\",\n kind: OptionKind.VIEWER,\n },\n defaultZoomValue: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n disableHistory: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER,\n },\n disablePageLabels: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n /**\n * The `disablePreferences` is, conditionally, defined below.\n */\n enablePermissions: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePrintAutoRotate: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableScripting: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableWebGL: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n externalLinkRel: {\n /** @type {string} */\n value: \"noopener noreferrer nofollow\",\n kind: OptionKind.VIEWER,\n },\n externalLinkTarget: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n historyUpdateUrl: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n ignoreDestinationZoom: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n imageResourcesPath: {\n /** @type {string} */\n value: \"./images/\",\n kind: OptionKind.VIEWER,\n },\n /**\n * The `locale` is, conditionally, defined below.\n */\n maxCanvasPixels: {\n /** @type {number} */\n value: 16777216,\n compatibility: viewerCompatibilityParams.maxCanvasPixels,\n kind: OptionKind.VIEWER,\n },\n pdfBugEnabled: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n printResolution: {\n /** @type {number} */\n value: 150,\n kind: OptionKind.VIEWER,\n },\n renderer: {\n /** @type {string} */\n value: \"canvas\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n renderInteractiveForms: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n sidebarViewOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n scrollModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n spreadModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n textLayerMode: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n useOnlyCssZoom: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewerCssTheme: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewOnLoad: {\n /** @type {boolean} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n\n cMapPacked: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n cMapUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n ? \"../external/bcmaps/\"\n : \"../web/cmaps/\",\n kind: OptionKind.API,\n },\n disableAutoFetch: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableFontFace: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableRange: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableStream: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n docBaseUrl: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.API,\n },\n enableXfa: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n fontExtraProperties: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n isEvalSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n maxImageSize: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.API,\n },\n pdfBug: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n verbosity: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.API,\n },\n\n workerPort: {\n /** @type {Object} */\n value: null,\n kind: OptionKind.WORKER,\n },\n workerSrc: {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n ? \"../src/worker_loader.js\"\n : \"../build/pdf.worker.js\",\n kind: OptionKind.WORKER,\n },\n};\nif (\n typeof PDFJSDev === \"undefined\" ||\n PDFJSDev.test(\"!PRODUCTION || GENERIC\")\n) {\n defaultOptions.disablePreferences = {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER,\n };\n defaultOptions.locale = {\n /** @type {string} */\n value: typeof navigator !== \"undefined\" ? navigator.language : \"en-US\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n ? \"../build/dev-sandbox/pdf.sandbox.js\"\n : \"../build/pdf.sandbox.js\",\n kind: OptionKind.VIEWER,\n };\n} else if (PDFJSDev.test(\"CHROME\")) {\n defaultOptions.disableTelemetry = {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value: \"../build/pdf.sandbox.js\",\n kind: OptionKind.VIEWER,\n };\n}\n\nconst userOptions = Object.create(null);\n\nclass AppOptions {\n constructor() {\n throw new Error(\"Cannot initialize AppOptions.\");\n }\n\n static get(name) {\n const userOption = userOptions[name];\n if (userOption !== undefined) {\n return userOption;\n }\n const defaultOption = defaultOptions[name];\n if (defaultOption !== undefined) {\n return defaultOption.compatibility ?? defaultOption.value;\n }\n return undefined;\n }\n\n static getAll(kind = null) {\n const options = Object.create(null);\n for (const name in defaultOptions) {\n const defaultOption = defaultOptions[name];\n if (kind) {\n if ((kind & defaultOption.kind) === 0) {\n continue;\n }\n if (kind === OptionKind.PREFERENCE) {\n const value = defaultOption.value,\n valueType = typeof value;\n\n if (\n valueType === \"boolean\" ||\n valueType === \"string\" ||\n (valueType === \"number\" && Number.isInteger(value))\n ) {\n options[name] = value;\n continue;\n }\n throw new Error(`Invalid type for preference: ${name}`);\n }\n }\n const userOption = userOptions[name];\n options[name] =\n userOption !== undefined\n ? userOption\n : defaultOption.compatibility ?? defaultOption.value;\n }\n return options;\n }\n\n static set(name, value) {\n userOptions[name] = value;\n }\n\n static setAll(options) {\n for (const name in options) {\n userOptions[name] = options[name];\n }\n }\n\n static remove(name) {\n delete userOptions[name];\n }\n}\n\nexport { AppOptions, OptionKind };\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\nconst compatibilityParams = Object.create(null);\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n const userAgent =\n (typeof navigator !== \"undefined\" && navigator.userAgent) || \"\";\n const platform =\n (typeof navigator !== \"undefined\" && navigator.platform) || \"\";\n const maxTouchPoints =\n (typeof navigator !== \"undefined\" && navigator.maxTouchPoints) || 1;\n\n const isAndroid = /Android/.test(userAgent);\n const isIOS =\n /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n (platform === \"MacIntel\" && maxTouchPoints > 1);\n const isIOSChrome = /CriOS/.test(userAgent);\n\n // Checks if possible to use URL.createObjectURL()\n // Support: IE, Chrome on iOS\n (function checkOnBlobSupport() {\n // Sometimes Chrome on iOS loses data created with createObjectURL(),\n // see issue #8081.\n if (isIOSChrome) {\n compatibilityParams.disableCreateObjectURL = true;\n }\n })();\n\n // Limit canvas size to 5 mega-pixels on mobile.\n // Support: Android, iOS\n (function checkCanvasSizeLimitation() {\n if (isIOS || isAndroid) {\n compatibilityParams.maxCanvasPixels = 5242880;\n }\n })();\n}\nconst viewerCompatibilityParams = Object.freeze(compatibilityParams);\n\nexport { viewerCompatibilityParams };\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/* globals PDFBug, Stats */\n\nimport {\n animationStarted,\n apiPageLayoutToSpreadMode,\n apiPageModeToSidebarView,\n AutoPrintRegExp,\n DEFAULT_SCALE_VALUE,\n EventBus,\n getActiveOrFocusedElement,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_SCALE,\n MIN_SCALE,\n noContextMenuHandler,\n normalizeWheelEventDirection,\n parseQueryString,\n ProgressBar,\n RendererType,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n} from \"./ui_utils.js\";\nimport { AppOptions, OptionKind } from \"./app_options.js\";\nimport {\n build,\n createPromiseCapability,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n GlobalWorkerOptions,\n InvalidPDFException,\n isPdfFile,\n LinkTarget,\n loadScript,\n MissingPDFException,\n OPS,\n PDFWorker,\n PermissionFlag,\n shadow,\n UnexpectedResponseException,\n UNSUPPORTED_FEATURES,\n version,\n} from \"pdfjs-lib\";\nimport { CursorTool, PDFCursorTools } from \"./pdf_cursor_tools.js\";\nimport { PDFRenderingQueue, RenderingStates } from \"./pdf_rendering_queue.js\";\nimport { OverlayManager } from \"./overlay_manager.js\";\nimport { PasswordPrompt } from \"./password_prompt.js\";\nimport { PDFAttachmentViewer } from \"./pdf_attachment_viewer.js\";\nimport { PDFDocumentProperties } from \"./pdf_document_properties.js\";\nimport { PDFFindBar } from \"./pdf_find_bar.js\";\nimport { PDFFindController } from \"./pdf_find_controller.js\";\nimport { PDFHistory } from \"./pdf_history.js\";\nimport { PDFLayerViewer } from \"./pdf_layer_viewer.js\";\nimport { PDFLinkService } from \"./pdf_link_service.js\";\nimport { PDFOutlineViewer } from \"./pdf_outline_viewer.js\";\nimport { PDFPresentationMode } from \"./pdf_presentation_mode.js\";\nimport { PDFScriptingManager } from \"./pdf_scripting_manager.js\";\nimport { PDFSidebar } from \"./pdf_sidebar.js\";\nimport { PDFSidebarResizer } from \"./pdf_sidebar_resizer.js\";\nimport { PDFThumbnailViewer } from \"./pdf_thumbnail_viewer.js\";\nimport { PDFViewer } from \"./pdf_viewer.js\";\nimport { SecondaryToolbar } from \"./secondary_toolbar.js\";\nimport { Toolbar } from \"./toolbar.js\";\nimport { viewerCompatibilityParams } from \"./viewer_compatibility.js\";\nimport { ViewHistory } from \"./view_history.js\";\n\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; // ms\nconst FORCE_PAGES_LOADED_TIMEOUT = 10000; // ms\nconst WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; // ms\nconst ENABLE_PERMISSIONS_CLASS = \"enablePermissions\";\n\nconst ViewOnLoad = {\n UNKNOWN: -1,\n PREVIOUS: 0, // Default value.\n INITIAL: 1,\n};\n\nconst ViewerCssTheme = {\n AUTOMATIC: 0, // Default value.\n LIGHT: 1,\n DARK: 2,\n};\n\n// Keep these in sync with mozilla-central's Histograms.json.\nconst KNOWN_VERSIONS = [\n \"1.0\",\n \"1.1\",\n \"1.2\",\n \"1.3\",\n \"1.4\",\n \"1.5\",\n \"1.6\",\n \"1.7\",\n \"1.8\",\n \"1.9\",\n \"2.0\",\n \"2.1\",\n \"2.2\",\n \"2.3\",\n];\n// Keep these in sync with mozilla-central's Histograms.json.\nconst KNOWN_GENERATORS = [\n \"acrobat distiller\",\n \"acrobat pdfwriter\",\n \"adobe livecycle\",\n \"adobe pdf library\",\n \"adobe photoshop\",\n \"ghostscript\",\n \"tcpdf\",\n \"cairo\",\n \"dvipdfm\",\n \"dvips\",\n \"pdftex\",\n \"pdfkit\",\n \"itext\",\n \"prince\",\n \"quarkxpress\",\n \"mac os x\",\n \"microsoft\",\n \"openoffice\",\n \"oracle\",\n \"luradocument\",\n \"pdf-xchange\",\n \"antenna house\",\n \"aspose.cells\",\n \"fpdf\",\n];\n\nclass DefaultExternalServices {\n constructor() {\n throw new Error(\"Cannot initialize DefaultExternalServices.\");\n }\n\n static updateFindControlState(data) {}\n\n static updateFindMatchesCount(data) {}\n\n static initPassiveLoading(callbacks) {}\n\n static async fallback(data) {}\n\n static reportTelemetry(data) {}\n\n static createDownloadManager(options) {\n throw new Error(\"Not implemented: createDownloadManager\");\n }\n\n static createPreferences() {\n throw new Error(\"Not implemented: createPreferences\");\n }\n\n static createL10n(options) {\n throw new Error(\"Not implemented: createL10n\");\n }\n\n static createScripting(options) {\n throw new Error(\"Not implemented: createScripting\");\n }\n\n static get supportsIntegratedFind() {\n return shadow(this, \"supportsIntegratedFind\", false);\n }\n\n static get supportsDocumentFonts() {\n return shadow(this, \"supportsDocumentFonts\", true);\n }\n\n static get supportedMouseWheelZoomModifierKeys() {\n return shadow(this, \"supportedMouseWheelZoomModifierKeys\", {\n ctrlKey: true,\n metaKey: true,\n });\n }\n\n static get isInAutomation() {\n return shadow(this, \"isInAutomation\", false);\n }\n}\n\nconst PDFViewerApplication = {\n initialBookmark: document.location.hash.substring(1),\n _initializedCapability: createPromiseCapability(),\n fellback: false,\n appConfig: null,\n pdfDocument: null,\n pdfLoadingTask: null,\n printService: null,\n /** @type {PDFViewer} */\n pdfViewer: null,\n /** @type {PDFThumbnailViewer} */\n pdfThumbnailViewer: null,\n /** @type {PDFRenderingQueue} */\n pdfRenderingQueue: null,\n /** @type {PDFPresentationMode} */\n pdfPresentationMode: null,\n /** @type {PDFDocumentProperties} */\n pdfDocumentProperties: null,\n /** @type {PDFLinkService} */\n pdfLinkService: null,\n /** @type {PDFHistory} */\n pdfHistory: null,\n /** @type {PDFSidebar} */\n pdfSidebar: null,\n /** @type {PDFSidebarResizer} */\n pdfSidebarResizer: null,\n /** @type {PDFOutlineViewer} */\n pdfOutlineViewer: null,\n /** @type {PDFAttachmentViewer} */\n pdfAttachmentViewer: null,\n /** @type {PDFLayerViewer} */\n pdfLayerViewer: null,\n /** @type {PDFCursorTools} */\n pdfCursorTools: null,\n /** @type {PDFScriptingManager} */\n pdfScriptingManager: null,\n /** @type {ViewHistory} */\n store: null,\n /** @type {DownloadManager} */\n downloadManager: null,\n /** @type {OverlayManager} */\n overlayManager: null,\n /** @type {Preferences} */\n preferences: null,\n /** @type {Toolbar} */\n toolbar: null,\n /** @type {SecondaryToolbar} */\n secondaryToolbar: null,\n /** @type {EventBus} */\n eventBus: null,\n /** @type {IL10n} */\n l10n: null,\n isInitialViewSet: false,\n downloadComplete: false,\n isViewerEmbedded: window.parent !== window,\n url: \"\",\n baseUrl: \"\",\n externalServices: DefaultExternalServices,\n _boundEvents: Object.create(null),\n documentInfo: null,\n metadata: null,\n _contentDispositionFilename: null,\n _contentLength: null,\n triggerDelayedFallback: null,\n _saveInProgress: false,\n _wheelUnusedTicks: 0,\n _idleCallbacks: new Set(),\n\n // Called once when the document is loaded.\n async initialize(appConfig) {\n this.preferences = this.externalServices.createPreferences();\n this.appConfig = appConfig;\n\n await this._readPreferences();\n await this._parseHashParameters();\n this._forceCssTheme();\n await this._initializeL10n();\n\n if (\n this.isViewerEmbedded &&\n AppOptions.get(\"externalLinkTarget\") === LinkTarget.NONE\n ) {\n // Prevent external links from \"replacing\" the viewer,\n // when it's embedded in e.g. an