Index: /extensions/AMetaData/JpegMetaData/Common/Const.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Common/Const.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Common/Const.class.php	(revision 4686)
@@ -0,0 +1,144 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Constants used by the JpegMetaData classes
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * Float and Double type are not implemented yet
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  /**
+   * define the value for the LITTLE ENDIAN (Intel) byte order
+   */
+  define("BYTE_ORDER_LITTLE_ENDIAN", "II");
+
+  /**
+   * define the value for the BIG ENDIAN (Motorola) byte order
+   */
+  define("BYTE_ORDER_BIG_ENDIAN", "MM");
+
+
+  /**
+   * in IFDs entries, the data type is given by a byte
+   * theses constants associate a human readable value
+   */
+  class ByteType
+  {
+    /**
+     * unknown type
+     */
+    const UNKNOWN    = 0x00;
+    /**
+     * 8bit
+     * Unsigned integer values from 0 to 255
+     */
+    const UBYTE      = 0x01;
+    /**
+     * ASCII String
+     */
+    const ASCII      = 0x02;
+    /**
+     * 16bit
+     * Unsigned integer values from 0 to 65535
+     */
+    const USHORT     = 0x03;
+    /**
+     * 32bit
+     * Unsigned integer values from 0 to 4294967295
+     */
+    const ULONG      = 0x04;
+    /**
+     * 2x32bit
+     * Unsigned rational number consist of two unsigned 32-bit integers
+     * denoting the enumerator and denominator.
+     * Each integer have values from 0 and 4294967295
+     */
+    const URATIONAL  = 0x05;
+    /**
+     * 8bit
+     * Signed integer values from -128 to 127
+     */
+    const SBYTE      = 0x06;
+    /**
+     * 8bit
+     * Each component will be a byte with no associated interpretation
+     */
+    const UNDEFINED  = 0x07;
+    /**
+     * 16bit
+     * Signed integer values from -32768 to 32767
+     */
+    const SSHORT     = 0x08;
+    /**
+     * 32bit
+     * Signed integer values from -2147483648 to 2147483647
+     */
+    const SLONG      = 0x09;
+    /**
+     * 2x32bit
+     * Signed rational number consist of two signed 32-bit integers
+     * denoting the enumerator and denominator.
+     * Each integer have values from -2147483648 to 2147483647
+     */
+    const SRATIONAL  = 0x0A;
+    const FLOAT      = 0x0B;
+    const DOUBLE     = 0x0C;
+
+    /**
+     * this array gives the byte size of each kind of data
+     */
+    public static $typeSizes =
+    Array(
+      self::UNKNOWN   => 0,
+      self::UBYTE     => 1,
+      self::ASCII     => 1,
+      self::USHORT    => 2,
+      self::ULONG     => 4,
+      self::URATIONAL => 8,
+      self::SBYTE     => 1,
+      self::UNDEFINED => 1,
+      self::SSHORT    => 2,
+      self::SLONG     => 4,
+      self::SRATIONAL => 8,
+      self::FLOAT     => 0,
+      self::DOUBLE    => 0
+    );
+  }
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Common/ConvertData.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Common/ConvertData.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Common/ConvertData.class.php	(revision 4686)
@@ -0,0 +1,494 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * ConvertData class is used to convert data from a type into another type
+ *
+ * This class provides theses public functions :
+ *  - (static) toUByte
+ *  - (static) toSByte
+ *  - (static) toUShort
+ *  - (static) toSShort
+ *  - (static) toULong
+ *  - (static) toSLong
+ *  - (static) toURational
+ *  - (static) toSRational
+ *  - (static) toExposureTime
+ *  - (static) toFNumber
+ *  - (static) toDateTime
+ *  - (static) toFocalLength
+ *  - (static) toEV
+ *  - (static) toDistance
+ *  - (static) toStrings
+ *  - (static) toDMS
+ *  - (static) toHexDump
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Const.class.php");
+
+  class ConvertData
+  {
+    /**
+     * Convert the given data into a single unsigned Byte (8bit)
+     *
+     * @param String $data : representing the unsigned Byte
+     * @return UByte
+     */
+    static public function toUByte($data)
+    {
+      if(strlen($data)>=1)
+        return(ord($data{0}));
+      else
+        return(0);
+    }
+
+    /**
+     * Convert the given data into a single signed Byte (8bit)
+     *
+     * @param String $data : representing the signed Byte
+     * @return SByte
+     */
+    static public function toSByte($data)
+    {
+      $unsigned = self::toUByte($data);
+      if($unsigned>127)
+        return($unsigned-256);
+      else
+        return($unsigned);
+    }
+
+    /**
+     * Convert the given data into an unsigned Short integer (16bit)
+     *
+     * @param String $data       : representing the unsigned Short
+     * @param String $endianType : the byte order
+     * @return UShort
+     */
+    static public function toUShort($data, $endianType)
+    {
+      if(strlen($data)>=2)
+      {
+        if($endianType==BYTE_ORDER_LITTLE_ENDIAN)
+          return(ord($data{0}) +
+                 ord($data{1})*256);
+        else
+          return(ord($data{0})*256 +
+                 ord($data{1}));
+      }
+      else
+      {
+        return(0);
+      }
+    }
+
+    /**
+     * Convert the given data into a signed Short integer (16bit)
+     *
+     * @param String $data       : representing the signed Short
+     * @param String $endianType : the byte order
+     * @return SShort
+     */
+    static public function toSShort($data, $endianType)
+    {
+      $unsigned = self::toUShort($data, $endianType);
+      if($unsigned>32767)
+        return($unsigned-65536);
+      else
+        return($unsigned);
+    }
+
+    /**
+     * Convert the given data into an unsigned Long integer (32bit)
+     *
+     * @param String $data       : representing the unsigned Long
+     * @param String $endianType : the byte order
+     * @return ULong
+     */
+    static public function toULong($data, $endianType)
+    {
+      if(strlen($data)>=4)
+      {
+        if($endianType==BYTE_ORDER_LITTLE_ENDIAN)
+          return(ord($data{0}) +
+                 ord($data{1})*256 +
+                 ord($data{2})*65536 +
+                 ord($data{3})*16777216);
+        else
+          return(ord($data{0})*16777216 +
+                 ord($data{1})*65536 +
+                 ord($data{2})*256 +
+                 ord($data{3}));
+      }
+      else
+      {
+        return(0);
+      }
+    }
+
+    /**
+     * Convert the given data into a signed Long integer (32bit)
+     *
+     * @param String $data       : representing the signed Long
+     * @param String $endianType : the byte order
+     * @return SLong
+     */
+    static public function toSLong($data, $endianType)
+    {
+      $unsigned = self::toULong($data, $endianType);
+      if($unsigned>2147483647)
+        return($unsigned-4294967296);
+      else
+        return($unsigned);
+    }
+
+    /**
+     * Convert the given data into an array of unsigned Long (2x32bit)
+     *
+     * @param String $data       : representing the unsigned Rational
+     * @param String $endianType : the byte order
+     * @return URational
+     */
+    static public function toURational($data, $endianType)
+    {
+      if(strlen($data)>=8)
+      {
+        return(
+          Array(
+            self::toULong($data, $endianType),
+            self::toULong(substr($data, 4), $endianType)
+          )
+        );
+      }
+      else
+      {
+        return(Array(0,0));
+      }
+    }
+
+    /**
+     * Convert the given data into an array of signed Long (2x32bit)
+     *
+     * @param String $data       : representing the signed Rational
+     * @param String $endianType : the byte order
+     * @return SRational
+     */
+    static public function toSRational($data, $endianType)
+    {
+      if(strlen($data)>=8)
+      {
+        return(
+          Array(
+            self::toSLong($data, $endianType),
+            self::toSLong(substr($data, 4), $endianType)
+          )
+        );
+      }
+      else
+      {
+        return(Array(0,0));
+      }
+    }
+
+    /**
+     * Convert a floating value exprimed in seconds into a "photographic"
+     * value
+     *
+     * example :
+     *  1.5   => "1.5s"
+     *  0.004 => "1/250s"     *
+     *
+     * @param Float $time : time to convert
+     * @return String
+     */
+    static public function toExposureTime($time)
+    {
+      if($time>=1 or $time==0)
+      {
+        return($time."s");
+      }
+      else
+      {
+        return(sprintf("1/%ds", 1/$time));
+      }
+    }
+
+    /**
+     * Convert a floating value in a f/x.y string
+     *
+     * example :
+     *  1.8 => "f/1.8"
+     *  8   => "f/8.0"
+     *
+     * @param Float $fNumber : fnumber
+     * @return String
+     */
+    static public function toFNumber($fNumber)
+    {
+      return(sprintf("f/%.1f", $fNumber));
+    }
+
+    /**
+     * Convert a string Date/Time into a DateTime object
+     *
+     * Example of valid string :
+     *  "2009:12:24 19:54"
+     *  "2009:12:24 19:54\x00"
+     *  "2009:12:24 19:54:38"
+     *  "2009:12:24 19:54:38\x00"
+     *  "2009-12-24 19:54"
+     *  "2009-12-24T19:54"
+     *  "2009-12-24 19:54:38"
+     *  "2009-12-24T19:54:38"
+     *  "2009-12-24 19:54Z"
+     *  "2009-12-24T19:54Z"
+     *  "2009-12-24 19:54:38Z"
+     *  "2009-12-24T19:54:38Z"
+     *  "2009-12-24 19:54+02:00"
+     *  "2009-12-24T19:54+02:00"
+     *  "2009-12-24 19:54:38+02:00"
+     *  "2009-12-24T19:54:38+02:00"
+     *  "20091224"
+     *
+     * returns null if date is not a valid date
+     *
+     * @param String $dateTime : date time in a valid format
+     * @return String
+     */
+    static public function toDateTime($dateTime)
+    {
+      if(preg_match('/^(\d{4}:\d{2}:\d{2}\s\d{2}:\d{2}(:\d{2}){0,1}\x00{0,1}|\d{4}-\d{2}-\d{2}(T|\s)\d{2}:\d{2}(:\d{2}){0,1}(Z|[+|-]\d{2}:\d{2}){0,1}|\d{4}\d{2}\d{2})/', $dateTime))
+      {
+        $returned=new DateTime($dateTime, new DateTimeZone("UTC"));
+      }
+      else
+      {
+        $returned=null;
+      }
+      return($returned);
+    }
+
+    /**
+     * Convert a floating value in a focal length string
+     *
+     * Example:
+     *  250 => "250.0mm"
+     *
+     * @param Float $focalLength : focal length in millimeters
+     * @return String
+     */
+    static public function toFocalLength($focalLength)
+    {
+      return(sprintf("%.1f mm", $focalLength));
+    }
+
+    /**
+     * Convert a floating value in an EV
+     *
+     * Example:
+     *  0.7 => "0.7 EV"
+     *
+     * @param Float $ev : EV
+     * @return String
+     */
+    static public function toEV($ev)
+    {
+      return(sprintf("%.1f EV", $ev));
+    }
+
+    /**
+     * Convert a floating value associated with a unit
+     *
+     * Example :
+     *  3.4 + "m" => "3.40 m"
+     *
+     * @param Float $distance : distance
+     * @param String $unit    : unit
+     * @return String
+     */
+    static public function toDistance($distance, $unit)
+    {
+      return(sprintf("%.2f ", $distance)).$unit;
+    }
+
+    /**
+     * Convert a null terminated string into a string
+     * or
+     * Convert multiples null terminated string into an array of string
+     *
+     * Example:
+     *  "test" => "test"
+     *  "test\x00" => "test"
+     *  "test1\x00test2\x00" => Array("test1", "test2")
+     *
+     * @param String $strings
+     * @return String or String[]
+     */
+    static public function toStrings($strings)
+    {
+      if(strpos($strings, chr(0))===false)
+        return($strings);
+
+      $occurs=preg_match_all('/(.*)\x00/U',$strings,$result);
+      if($occurs==0)
+      {
+        return("");
+      }
+      elseif($occurs==1)
+      {
+        return($result[1][0]);
+      }
+      else
+      {
+        return($result[1]);
+      }
+    }
+
+    /**
+     * Convert 3 rationnals (EXIF GPS format) into a Degree, Minute, Second into
+     * a formatted string   dd° mm' ss.cs"
+     *
+     * Example:
+     *  48/1 + 1600/100 + 347/10 => "48° 16' 34.70""
+     *
+     * @param URational $degrees : degrees
+     * @param URational $minutes : minutes
+     * @param URational $seconds : seconds
+     * @return String
+     */
+    static public function toDMS($degrees, $minutes, $seconds)
+    {
+      if($degrees[1]==0) $degrees[1]=1;
+      if($minutes[1]==0) $minutes[1]=1;
+      if($seconds[1]==0) $seconds[1]=1;
+
+      $deg=$degrees[0]/$degrees[1];
+      $min=($minutes[0]/$minutes[1])-((int)$deg-$deg)*60;
+      $sec=($seconds[0]/$seconds[1])-((int)$min-$min)*60;
+
+      $returned=sprintf("%d° %d' %.2f\"", $deg, $min, $sec);
+
+      return($returned);
+    }
+
+
+    /**
+     * Dump the given data into an hex string
+     *
+     * @param $data            : data to be dumped (the dump is function of the
+     *                           data type)
+     * @param UByte $type      : the type of data (uses the ByteType values)
+     * @param UShort $maxItems : for arrays (or ASCII string), the number or
+     *                           items (chars) to dump
+     * @return String
+     */
+    static public function toHexDump($data, $type, $maxItems = 0)
+    {
+      $returned="";
+      if(is_array($data))
+      {
+        if($maxItems==0)
+        {
+          $maxItems=count($data);
+        }
+        elseif($maxItems>count($data))
+        {
+          $maxItems=count($data);
+        }
+        else
+        {
+          $returned.="[returns only the first $maxItems of ".count($data)." values] ";
+        }
+
+        $tmp=Array();
+        for($i=0;$i<$maxItems;$i++)
+        {
+          $tmp[]=self::toHexDump($data[$i], $type, $maxItems);
+        }
+        $returned.="[".implode(",", $tmp)."]";
+      }
+      else
+      {
+        switch($type)
+        {
+          case ByteType::UBYTE :
+          case ByteType::SBYTE :
+            $returned.=sprintf("0x%02x", $data);
+            break;
+          case ByteType::USHORT :
+          case ByteType::SSHORT :
+            $returned.=sprintf("0x%04x", $data);
+            break;
+          case ByteType::ULONG :
+          case ByteType::SLONG :
+            $returned.=sprintf("0x%08x", $data);
+            break;
+          case ByteType::URATIONAL :
+          case ByteType::SRATIONAL :
+            $returned.=sprintf("0x%08x", $data);
+            break;
+          case ByteType::FLOAT :
+          case ByteType::DOUBLE :
+          case ByteType::ASCII :
+          case ByteType::UNDEFINED :
+          default:
+            if($maxItems==0)
+            {
+              $maxItems=strlen($data);
+            }
+            elseif($maxItems>strlen($data))
+            {
+              $maxItems=strlen($data);
+            }
+            else
+            {
+              $returned.="[returns only the first $maxItems of ".strlen($data)." bytes] ";
+            }
+
+            $tmp=array();
+            for($i=0;$i<$maxItems;$i++)
+            {
+              $tmp[]=sprintf("%02x", ord($data{$i}));
+            }
+            $returned.=implode(" ", $tmp);
+            break;
+        }
+      }
+      return($returned);
+    }
+
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Common/Data.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Common/Data.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Common/Data.class.php	(revision 4686)
@@ -0,0 +1,460 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The Data class is used to read Strings content like files
+ *
+ * The class manages automaticaly the offset allowing to read sequentially the
+ * datas
+ *  - Opening a new String reset the offset to zero.
+ *  - Reading data moves the offset to the next byte
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * This class provides theses public functions :
+ *  - getLength
+ *  - getByteOrder
+ *  - setByteOrder
+ *  - clear
+ *  - setData
+ *  - seek
+ *  - eod
+ *  - bod
+ *  - offset
+ *  - seekPush
+ *  - seekPop
+ *  - readUByte
+ *  - readSByte
+ *  - readUShort
+ *  - readSShort
+ *  - readULong
+ *  - readSLong
+ *  - readURational
+ *  - readSRational
+ *  - readASCII
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Const.class.php");
+  require_once(JPEG_METADATA_DIR."Common/ConvertData.class.php");
+
+  class Data
+  {
+    private $data = "";
+    private $byteOrder;
+    private $offset=0;
+    private $length;
+    private $startOffset = 0;
+    private $currentPos = Array();
+
+    /**
+     * The constructor needs datas, and optionaly the byteOrder (by default,
+     * assuming the byte order is little endian)
+     *
+     * offset is set to zero when the object is instancied
+     *
+     * @param String $data                 : datas
+     * @param String $byteOrder (optional) : a valid byte order value (uses the
+     *                                       BYTE_ORDER const)
+     *
+     */
+    function __construct($data, $byteOrder = BYTE_ORDER_LITTLE_ENDIAN)
+    {
+      $this->setData($data);
+      $this->byteOrder = $byteOrder;
+    }
+
+    /**
+     * returns the datas length
+     *
+     * @return ULong
+     */
+    public function getLength()
+    {
+      return($this->length);
+    }
+
+    /**
+     * returns the byte order
+     *
+     * @return String
+     */
+    public function getByteOrder()
+    {
+      return($this->byteOrder);
+    }
+
+
+    /**
+     * set the byte order
+     *
+     * @param String $value : a valid byte order value
+     * @return String
+     */
+    public function setByteOrder($value)
+    {
+      if($value==BYTE_ORDER_BIG_ENDIAN or
+         $value==BYTE_ORDER_LITTLE_ENDIAN) $this->byteOrder=$value;
+      return($this->byteOrder);
+    }
+
+    /**
+     * clear the datas
+     */
+    public function clear()
+    {
+      $this->setData("");
+    }
+
+    /**
+     * set the datas and reset the offset to zero
+     *
+     * @param String $data : the datas
+     */
+    public function setData($data)
+    {
+      $this->data = $data;
+      $this->length=strlen($data);
+      $this->seek();
+      unset($this->currentPos);
+      $this->currentPos=Array();
+    }
+
+
+    /**
+     * seek the given offset
+     *
+     * if offset is not specified, or offset is less than zero, assuming to seek
+     * on the offset zero
+     *
+     * if offset is greater than the data length, assuming to seek on the last
+     * byte
+     *
+     *
+     * @param ULong $offset : offset to seek on
+     */
+    public function seek($offset=0)
+    {
+      if($offset<0)
+      {
+        $this->offset=0;
+      }
+      elseif($offset>$this->length)
+      {
+        $this->offset=$this->length;
+      }
+      else
+      {
+        $this->offset=$offset;
+      }
+    }
+
+    /**
+     * returns true if the offset is on the last data byte
+     *
+     * @return Boolean
+     */
+    public function eod()
+    {
+      return($this->offset>=$this->length);
+    }
+
+    /**
+     * returns true if the offset is on the first data byte (zero)
+     *
+     * @return Boolean
+     */
+    public function bod()
+    {
+      return($this->offset==0);
+    }
+
+    /**
+     * returns the current offset
+     *
+     * @return ULong
+     */
+    public function offset()
+    {
+      return($this->offset);
+    }
+
+    /**
+     * Memorize the current offset by pushing it in a stack
+     */
+    public function seekPush()
+    {
+      $this->currentPos[]=$this->offset;
+    }
+
+    /**
+     * Restore the last pushed offset on the stack
+     * If there is nothing in the stack, returns -1
+     *
+     * @return ULong
+     */
+    public function seekPop()
+    {
+      if(count($this->currentPos)>0)
+        $this->seek(array_pop($this->currentPos));
+      else return(-1);
+    }
+
+    /**
+     * Read an unsigned byte from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+1)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return UByte
+     */
+    public function readUByte($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::UBYTE];
+      }
+
+      if($offset+ByteType::$typeSizes[ByteType::UBYTE]>$this->length) return(0);
+
+      return(ConvertData::toUbyte(substr($this->data,$offset,ByteType::$typeSizes[ByteType::UBYTE])));
+    }
+
+    /**
+     * Read a signed byte from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+1)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return SByte
+     */
+    public function readSByte($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::SBYTE];
+      }
+
+      if($offset+ByteType::$typeSizes[ByteType::SBYTE]>$this->length) return(0);
+
+      return(ConvertData::toSbyte(substr($this->data,$offset,ByteType::$typeSizes[ByteType::SBYTE])));
+    }
+
+    /**
+     * Read an unsigned Short from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+2)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return UShort
+     */
+    public function readUShort($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::USHORT];
+      }
+
+      if($offset+ByteType::$typeSizes[ByteType::USHORT]>$this->length) return(0);
+
+      return(ConvertData::toUShort(substr($this->data, $offset,ByteType::$typeSizes[ByteType::USHORT]), $this->byteOrder));
+    }
+
+    /**
+     * Read a signed Short from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+2)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return SShort
+     */
+    public function readSShort($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::SSHORT];
+      }
+
+      if($offset+ByteType::$typeSizes[ByteType::SSHORT]>$this->length) return(0);
+
+      return(ConvertData::toSShort(substr($this->data, $offset,ByteType::$typeSizes[ByteType::SSHORT]), $this->byteOrder));
+    }
+
+    /**
+     * Read an unsigned Long from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+4)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return ULong
+     */
+    public function readULong($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::ULONG];
+      }
+
+      if($offset+ByteType::$typeSizes[ByteType::ULONG]>$this->length) return(0);
+
+      return(ConvertData::toULong(substr($this->data, $offset,ByteType::$typeSizes[ByteType::ULONG]), $this->byteOrder));
+    }
+
+    /**
+     * Read a signed Long from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+4)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return SLong
+     */
+    public function readSLong($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::SLONG];
+      }
+
+      if($offset+ByteType::$typeSizes[ByteType::SLONG]>$this->length) return(0);
+
+      return(ConvertData::toSLong(substr($this->data, $offset,ByteType::$typeSizes[ByteType::SLONG]), $this->byteOrder));
+    }
+
+    /**
+     * Read an unsigned Rational from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+8)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return URational
+     */
+    public function readURational($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::URATIONAL];
+      }
+      if($offset+ByteType::$typeSizes[ByteType::URATIONAL]>$this->length) return(0);
+
+      return(ConvertData::toURational(substr($this->data, $offset,ByteType::$typeSizes[ByteType::URATIONAL]), $this->byteOrder));
+    }
+
+    /**
+     * Read a signed Rational from the data
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it (+8)
+     *
+     * @param ULong $offset (optional) : optional offset
+     * @return SRational
+     */
+    public function readSRational($offset=null)
+    {
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->offset+=ByteType::$typeSizes[ByteType::SRATIONAL];
+      }
+
+      if($offset+ByteType::$typeSizes[ByteType::SRATIONAL]>$this->length) return(0);
+
+      return(ConvertData::toSRational(substr($this->data, $offset,ByteType::$typeSizes[ByteType::SRATIONAL]), $this->byteOrder));
+    }
+
+    /**
+     * Read a string from the data
+     *
+     * If length is given, read a number of char equals to the length
+     * If length is not given, or length is negative, read all char from the
+     * offset to the data length
+     *
+     * If offset is given, reading data from the given offset
+     * If offset is not given, reading data from the current offset, and
+     * increment it by the number of char readed
+     *
+     * @param ULong $length (optional) : optional length
+     * @param ULong $offset (optional) : optional offset
+     * @return String
+     */
+
+    public function readASCII($length=-1, $offset=null)
+    {
+      if($length<=0) $length=$this->length;
+
+      if(is_null($offset))
+      {
+        $offset=$this->offset;
+        $this->seek($this->offset+$length);
+      }
+
+      //if($offset+$length>$this->length) return("");
+
+      return(substr($this->data, $offset,$length));
+    }
+
+    public function readFloat($offset=null)
+    {
+    }
+
+    public function readDouble($offset=null)
+    {
+    }
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Common/Locale.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Common/Locale.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Common/Locale.class.php	(revision 4686)
@@ -0,0 +1,74 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The Locale class is used for tag translation, reading the .mo files
+ *
+ * -----------------------------------------------------------------------------
+ *
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+
+require_once(JPEG_METADATA_DIR."External/php-gettext/gettext.inc");
+
+$supported_locales = array('en_UK');
+
+class Locale
+{
+  const JMD_TAG = "Tag";
+  const JMD_TAGDESC = "TagDesc";
+
+  static function set($language)
+  {
+    T_setlocale(LC_MESSAGES, $language);
+
+    T_bindtextdomain(self::JMD_TAG, dirname(dirname(__FILE__))."/Locale");
+    T_bindtextdomain(self::JMD_TAGDESC, dirname(dirname(__FILE__))."/Locale");
+  }
+
+  static function get($tagName)
+  {
+    return(@T_dgettext(self::JMD_TAG, $tagName));
+  }
+
+  static function getDesc($tagName)
+  {
+    return(@T_dgettext(self::JMD_TAGDESC, $tagName));
+  }
+
+}
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Common/MakerNotesSignatures.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Common/MakerNotesSignatures.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Common/MakerNotesSignatures.class.php	(revision 4686)
@@ -0,0 +1,117 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Define the maker notes signatures for the EXIF "MakerNote" tag
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  define("MAKER_PENTAX", "Pentax");
+
+  Class MakerNotesSignatures
+  {
+    /** Olympus signature */
+    const OlympusHeader =  "OLYMP\x00\x01\x00";
+    /** Olympus 2 signature */
+    const Olympus2Header = "OLYMPUS\x00II\x03\x00";
+    /** FujiFilm signature */
+    const FujiFilmHeader = "FUJIFILM\x0c\x00\x00\x00";
+    /** Nikon 2 signature */
+    const Nikon2Header = "Nikon\x00\x01\x00";
+    /** Nikon 3 signature */
+    const Nikon3Header = "Nikon\x00\x02\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+    /** Panasonic signature  */
+    const PanasonicHeader = "Panasonic\x00\x00\x00";
+    /** Pentax MM signature  */
+    const PentaxHeader = "AOC\x00MM";
+    /** Pentax II signature  */
+    const Pentax2Header = "AOC\x00II";
+    /** Sigma signature */
+    const SigmaHeader = "SIGMA\x00\x00\x00\x01\x00";
+    /** Sigma signature */
+    const Sigma2Header = "FOVEON\x00\x00\x01\x00";
+    /** Sony signature */
+    const SonyHeader = "SONY DSC \x00\x00\x00";
+    /** Canon signature => no signature in the maker note field ! */
+    const CanonHeader = "";
+    /** Unknown signature => no signature in the maker note field ! */
+    const UnknownHeader = "";
+
+
+    const OlympusHeaderSize   = 8;
+    const Olympus2HeaderSize  = 12;
+    const FujiFilmHeaderSize  = 12;
+    const Nikon2HeaderSize    = 8;
+    const Nikon3HeaderSize    = 18;
+    const PanasonicHeaderSize = 12;
+    const PentaxHeaderSize    = 6;
+    const Pentax2HeaderSize   = 6;
+    const SigmaHeaderSize     = 8;
+    const Sigma2HeaderSize    = 8;
+    const SonyHeaderSize      = 12;
+    const CanonHeaderSize     = 0;
+    const UnknownHeaderSize     = 0;
+
+
+    static public function getMaker($datas)
+    {
+      if(substr_compare($datas, self::OlympusHeader, 0, self::OlympusHeaderSize)===0)
+       { return(self::OlympusHeader); }
+      elseif(substr_compare($datas, self::Olympus2Header, 0, self::Olympus2HeaderSize)===0)
+       { return(self::Olympus2Header); }
+      elseif(substr_compare($datas, self::FujiFilmHeader, 0, self::FujiFilmHeaderSize)===0)
+       { return(self::FujiFilmHeader); }
+      elseif(substr_compare($datas, self::Nikon2Header, 0, self::Nikon2HeaderSize)===0)
+       { return(self::Nikon2Header); }
+      elseif(substr_compare($datas, self::Nikon3Header, 0, self::Nikon3HeaderSize)===0)
+       { return(self::Nikon3Header); }
+      elseif(substr_compare($datas, self::PanasonicHeader, 0, self::PanasonicHeaderSize)===0)
+       { return(self::PanasonicHeader); }
+      elseif(substr_compare($datas, self::PentaxHeader, 0, self::PentaxHeaderSize)===0)
+       { return(self::PentaxHeader); }
+      elseif(substr_compare($datas, self::Pentax2Header, 0, self::Pentax2HeaderSize)===0)
+       { return(self::Pentax2Header); }
+      elseif(substr_compare($datas, self::SigmaHeader, 0, self::SigmaHeaderSize)===0)
+       { return(self::SigmaHeader); }
+      elseif(substr_compare($datas, self::Sigma2Header, 0, self::Sigma2HeaderSize)===0)
+       { return(self::Sigma2Header); }
+      elseif(substr_compare($datas, self::SonyHeader, 0, self::SonyHeaderSize)===0)
+       { return(self::SonyHeader); }
+      else
+       { return(self::UnknownHeader); }
+
+    }
+  }
+
+  ?>
Index: /extensions/AMetaData/JpegMetaData/Common/Tag.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Common/Tag.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Common/Tag.class.php	(revision 4686)
@@ -0,0 +1,349 @@
+<?php
+/*
+ * --:: Exif Maker Notes Analyzer ::--------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The Tag class is used to manage properties of a tag (all type of tags : exif,
+ * xmp and iptc)
+ *
+ * A tag have different properties :
+ *
+ *  - tagId             : the tag id (typically, an integer for Exif & IPTC, a
+ *                        string for XMP)
+ *  - tagName           : a 'human readable' name for the tag, in most case it's
+ *                        the official name defined in specifications
+ *  - tagNote           : free to set note about a tag
+ *  - tagValue          : the 'raw' value of the tag, not interpreted ; can be
+ *                        of any type
+ *  - valuelabel        : the interpreted value of the tag ; in most case it's a
+ *                        String, but can be an Integer, a Float or an Array
+ *  - tagIsKnown        : indicates if the tag is a known tag or not
+ *  - tagIsImplemented  : indicates if the interpretation of the tag is
+ *                        implemented or not
+ *  - tagIsTranslatable : indicates if the interpreted value for the tag is
+ *                        translatable
+ *
+ * This class provides theses public functions :
+ *  - getId
+ *  - getName
+ *  - getValue
+ *  - getLabel
+ *  - getIsKnown
+ *  - getIsImplemented
+ *  - getNote
+ *  - getIsTranslatable
+ *  - setId
+ *  - setName
+ *  - setValue
+ *  - setLabel
+ *  - setIsKnown
+ *  - setIsImplemented
+ *  - setNote
+ *  - setIsTranslatable
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  class Tag
+  {
+    private $tagId = 0;
+    private $tagName = "unknown tag";
+    private $tagNote = "";
+    private $tagValue = 0;
+    private $valueLabel = "not decoded";
+    private $tagIsKnown = false;
+    private $tagIsImplemented = false;
+    private $tagIsTranslatable = false;
+
+    /**
+     * All parameters for the Tag constructor are optional
+     *
+     * @param $tagId (optional)                     : the tag Id ; can be
+     *                                                Integer or String
+     * @param $tagValue (optional)                  : the value of the tag ; can
+     *                                                be of any type
+     * @param String $tagName (optional)            : the 'human readable' name
+     *                                                for the tag
+     * @param $valueLabel (optional)                : the 'human readable' value
+     *                                                for the tag
+     * @param String $tagNote (optional)            : an optional information
+     *                                                about the tag
+     * @param Boolean $tagIsKnown (optional)        : determine if the tag is a
+     *                                                known tag or not
+     * @param Boolean $tagIsImplemented (optional)  : determine if the tag is an
+     *                                                implemented tag or not
+     * @param Boolean $tagIstranslatable (optional) : determine if the tag value
+     *                                                can be translated or not
+     *
+     */
+    function __construct($tagId=0xffff, $tagValue=0, $tagName="", $valueLabel="", $tagNote="", $tagIsKnown=false, $tagIsImplemented=false, $tagIsTranslatable=false)
+    {
+      $this->tagId = $tagId;
+      $this->tagValue = $tagValue;
+      if($tagName!="") $this->tagName = $tagName;
+      if($valueLabel!="") $this->valueLabel = $valueLabel;
+      if($tagNote!="") $this->tagNote = $tagNote;
+      $this->tagIsKnown=$tagIsKnown;
+      $this->tagIsImplemented=$tagIsImplemented;
+      $this->tagIsTranslatable=$tagIsTranslatable;
+    }
+
+    /**
+     * returns the Tag Id
+     *
+     * @return Can be an integer (typically for exif and iptc tags) or a string
+     *         (typically for xmp tags)
+     */
+    public function getId()
+    {
+      return($this->tagId);
+    }
+
+    /**
+     * returns the 'human readable' tag name
+     *
+     * @return String
+     */
+    public function getName()
+    {
+      return($this->tagName);
+    }
+
+    /**
+     * returns the value of the tag
+     *
+     * @return can be of any type
+     */
+    public function getValue()
+    {
+      return($this->tagValue);
+    }
+
+    /**
+     * returns the 'human readable' value of the tag
+     *
+     * @return String, Array or DateTime object
+     */
+    public function getLabel()
+    {
+      return($this->valueLabel);
+    }
+
+    /**
+     * returns true if the tag is a known tag
+     *
+     * @return Boolean
+     */
+    public function getIsKnown()
+    {
+      return($this->tagIsKnown);
+    }
+
+    /**
+     * returns true if the tag is implemented or not
+     *
+     * @return Boolean
+     */
+    public function getIsImplemented()
+    {
+      return($this->tagIsImplemented);
+    }
+
+    /**
+     * returns the note associated with the tag
+     *
+     * @return String
+     */
+    public function getNote()
+    {
+      return($this->tagNote);
+    }
+
+    /**
+     * returns true if the tag value can be translated
+     *
+     * @return Boolean
+     */
+    public function getIsTranslatable()
+    {
+      return($this->tagIsTranslatable);
+    }
+
+    /**
+     * set the Id for the tag
+     *
+     * @param String or Integer $value : the tag Id
+     * @return the tag Id
+     */
+    public function setId($value)
+    {
+      if($value>=0x0000 and $value <= 0xffff) $this->tagId=$value;
+      return($this->tagId);
+    }
+
+    /**
+     * set the name for the tag
+     *
+     * @param String $value : the tag name
+     * @return String : the tag name
+     */
+    public function setName($value)
+    {
+      $this->tagName=$value;
+      return($this->tagName);
+    }
+
+    /**
+     * set the value for the tag
+     *
+     * @param $value : can ba of any type
+     * @return : the tag value
+     */
+    public function setValue($value)
+    {
+      $this->tagValue=$value;
+      return($this->tagValue);
+    }
+
+    /**
+     * set the 'human readable value' for the tag
+     *
+     * @param String or Integer or DateTime $value : the tag value
+     * @return : the tag label
+     */
+    public function setLabel($value)
+    {
+      $this->valueLabel=$value;
+      return($this->valueLabel);
+    }
+
+    /**
+     * set if the tag is known
+     *
+     * @param Boolean $value
+     * @return Boolean
+     */
+    public function setIsKnown($value)
+    {
+      $this->tagIsKnown=($value===true)?true:false;
+      return($this->tagIsKnown);
+    }
+
+    /**
+     * set if the tag is implemented
+     *
+     * @param Boolean $value
+     * @return Boolean
+     */
+    public function setIsImplemented($value)
+    {
+      $this->tagIsImplemented=($value===true)?true:false;
+      return($this->tagIsImplemented);
+    }
+
+    /**
+     * set a note for the tag
+     *
+     * @param String $value
+     * @return String
+     */
+    public function setNote($value)
+    {
+      $this->tagNote=$value;
+      return($this->tagNote);
+    }
+
+    /**
+     * set if the tag value is translatable
+     *
+     * @param Boolean $value
+     * @return Boolean
+     */
+    public function setIsTranslatable($value)
+    {
+      $this->tagIsTranslatable=($value===true)?true:false;
+      return($this->tagIsTranslatable);
+    }
+
+    public function toString($mode="all")
+    {
+      $returned="";
+
+      if($mode=="all")
+        if(is_string($this->tagId))
+          $returned.="tag: ".str_replace(" ", "&nbsp;", sprintf("%-34s", $this->tagId))." ; ";
+        else
+          $returned.="tag: 0x".sprintf("%04x", $this->tagId)." ; ";
+
+      $returned.="name: ".str_replace(" ", "&nbsp;", sprintf("%-34s", $this->tagName))." ; ";
+
+      if($mode=="all")
+      {
+        if(is_array($this->tagValue))
+          $returned.=str_replace(" ", "&nbsp;", sprintf("%-23s", "value: Array[".count($this->tagValue)."]"))."; ";
+        elseif(is_string($this->tagValue))
+        {
+          if(strlen($this->tagValue)>25)
+            $returned.="value: ".str_replace(" ", "&nbsp;", sprintf("%-25s", substr($this->tagValue,0,22)."..."))." ; ";
+          else
+            $returned.="value: ".str_replace(" ", "&nbsp;", sprintf("%-25s", $this->tagValue))." ; ";
+
+        }
+        else
+          $returned.="value: 0x".sprintf("%08x", $this->tagValue).str_replace(" ", "&nbsp;", "               ")." ; ";
+      }
+
+      $returned.="label: ";
+      if(is_array($this->valueLabel))
+      {
+        $returned.=print_r($this->valueLabel, true);
+      }
+      elseif(is_object($this->valueLabel))
+      {
+        $returned.="Object[".get_class($this->valueLabel)."]";
+        if($this->valueLabel instanceof DateTime)
+        {
+          $returned.=$this->valueLabel->format('d/m/Y H:i:s');
+        }
+      }
+      else
+      {
+        $returned.=$this->valueLabel;
+      }
+
+
+      return($returned);
+    }
+
+  }
+
+ ?>
Index: /extensions/AMetaData/JpegMetaData/Common/XmlData.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Common/XmlData.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Common/XmlData.class.php	(revision 4686)
@@ -0,0 +1,525 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The XmlData class is used to read Xml data in a tree structure
+ * The class read the Xml data from a string, and build a tree made with XmlNode
+ * objects
+ *
+ * The XmlNode class is used to manage the nodes properties, like name, value,
+ * attributes, ...
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The XmlData class provides theses public functions :
+ *  - isValid
+ *  - isLoaded
+ *  - hasNodes
+ *  - getFirstNode
+ *  - getLastNode
+ *  - setXmlData
+ *
+ * The XmlNode class provides theses public functions :
+ *  - getName
+ *  - getLevel
+ *  - getValue
+ *  - setName
+ *  - setValue
+ *  - hasAttributes
+ *  - getAttributes
+ *  - getAttribute
+ *  - setAttribute
+ *  - delAttribute
+ *  - addAttribute
+ *  - hasChilds
+ *  - getChilds
+ *  - addChild
+ *  - getFirstChild
+ *  - getLastChild
+ *  - getPreviousNode
+ *  - setPreviousNode
+ *  - getNextNode
+ *  - setNextNode
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  class XmlNode
+  {
+    private $name = "";
+    private $attributes = Array();
+    private $childs = Array();
+    private $level = 0;
+    private $previousNode = null;
+    private $nextNode = null;
+    private $value=NULL;
+
+    /**
+     * the XmlNode constructor need a name for the node, and optionally the node
+     * level in the tree
+     *
+     * @param String $name              : node name
+     * @param Integer $level (optional) : node level, by default set to zero
+     */
+    function __construct($name, $level=0)
+    {
+      $this->name=$name;
+      $this->level=$level;
+    }
+
+    function __destruct()
+    {
+      unset($this->attributes);
+      unset($this->childs);
+    }
+
+    /**
+     * returns the name of the node
+     *
+     * @return String
+     */
+    public function getName()
+    {
+      return($this->name);
+    }
+
+    /**
+     * returns the level of the node
+     *
+     * @return Integer
+     */
+    public function getLevel()
+    {
+      return($this->level);
+    }
+
+    /**
+     * returns the value of the node
+     *
+     * @return the type depends of the node
+     */
+    public function getValue()
+    {
+      return($this->value);
+    }
+
+    /**
+     * set the name of the node
+     *
+     * @param String $value : the name of the node
+     * @return String
+     */
+    public function setName($value)
+    {
+      $this->name = $value;
+      return($this->name);
+    }
+
+    /**
+     * set the value of the node
+     *
+     * @param $value : the value can be of any type
+     */
+    public function setValue($value)
+    {
+      $this->value=$value;
+      return($this->value);
+    }
+
+    /**
+     * return true if the node has attributes
+     *
+     * @return Boolean
+     */
+    public function hasAttributes()
+    {
+      return(count($this->attributes)>0);
+    }
+
+    /**
+     * return an array of attributes
+     *
+     * @return Array : key = name of the attribute, value = value for attribute
+     */
+    public function getAttributes()
+    {
+      return($this->attributes);
+    }
+
+    /**
+     * return value for an attribute
+     * if the given attribute doesn't exist, return an empty string
+     *
+     * @param String $name : the attribute name
+     * @return String
+     */
+    public function getAttribute($name)
+    {
+      if(array_key_exists($name, $this->attributes))
+        return($this->attributes[$name]);
+      else
+        return("");
+    }
+
+    /**
+     * set the value for an attribute
+     * the attribute must exist, otherwise uses the addAttribute function
+     *
+     * @param String $name : the name of the attribute to set to value
+     * @param $value       : the value to set for the attribute
+     * @return Boolean : false if the attribute doesn't exist
+     */
+    public function setAttribute($name, $value)
+    {
+      if(array_key_exists($name, $this->attributes))
+      {
+        $this->attributes[$name];
+        return(true);
+      }
+      else
+        return(false);
+    }
+
+    /**
+     * add an attribute
+     * the attribute must exist, otherwise uses the addAttribute function
+
+     * @param String $name : the name of the new attribute
+     * @param $value       : the value of the new attribute
+     */
+    public function addAttribute($name, $value)
+    {
+      $this->attributes[]=Array(
+        'name'  => $name,
+        'value' => $value
+      );
+    }
+
+    /**
+     * delete an attribute
+     * return true of the attribute has been deleted, otherwise false
+
+     * @param String $name : the name the attribute to delete
+     * @return Boolean
+     */
+    public function delAttribute($name)
+    {
+      if(array_key_exists($name, $this->attributes))
+      {
+        unset($this->attributes[$name]);
+        return(true);
+      }
+      else
+      {
+        return(false);
+      }
+    }
+
+    /**
+     * returns true if the node have childs
+
+     * @return Boolean
+     */
+    public function hasChilds()
+    {
+      return(count($this->childs)>0);
+    }
+
+    /**
+     * returns an array of childs
+
+     * @return Array of XmlNode
+     */
+    public function getChilds()
+    {
+      return($this->childs);
+    }
+
+    /**
+     * add a new child (added as the last child)
+     *
+     * @param XmlNode $node : the child must be an instanciated XmlNode
+     */
+    public function addChild(XmlNode $node)
+    {
+      $this->childs[]=$node;
+    }
+
+    /**
+     * returns the first child
+     *
+     * @return XmlNode or null
+     */
+    public function getFirstChild()
+    {
+      if($this->hasChilds())
+        return($this->childs[0]);
+      else
+        return(null);
+    }
+
+    /**
+     * returns the last child
+     *
+     * @return XmlNode or null
+     */
+    public function getLastChild()
+    {
+      if($this->hasChilds())
+        return($this->childs[count($this->childs)-1]);
+      else
+        return(null);
+    }
+
+    /**
+     * set the previous node
+     *
+     * @param XmlNode $node : must be an instanciated XmlNode
+     * @return XmlNode : the previous node
+     */
+    public function setPreviousNode(XmlNode $node)
+    {
+      $this->previousNode = $node;
+      return($this->previousNode);
+    }
+
+    /**
+     * returns the previous node
+     *
+     * @return XmlNode or null
+     */
+    public function getPreviousNode()
+    {
+      return($this->previousNode);
+    }
+
+    /**
+     * set the next node
+     *
+     * @param XmlNode $node : must be an instanciated XmlNode
+     * @return XmlNode : the next node
+     */
+    public function setNextNode(XmlNode $node)
+    {
+      $this->nextNode = $node;
+      return($this->nextNode);
+    }
+
+    /**
+     * returns the next node
+     *
+     * @return XmlNode or null
+     */
+    public function getNextNode()
+    {
+      return($this->nextNode);
+    }
+
+
+  }
+
+  class XmlData
+  {
+    private $xml = "";
+    private $nodes = Array();
+    private $isValid = false;
+    private $isLoaded = false;
+
+    /**
+     * the XmlData constructor needs ans Xml string
+     *
+     * @param String $xml : an xml structure in a string
+     */
+    function __construct($xml)
+    {
+      $this->isValid = $this->setXmlData($xml);
+      $this->isLoaded = $this->hasNodes();
+    }
+
+    function __destruct()
+    {
+      unset($this->nodes);
+    }
+
+    /**
+     * returns true if the xml is valid
+     *
+     * @return Boolean
+     */
+    public function isValid()
+    {
+      return($this->isValid);
+    }
+
+    /**
+     * returns true if the xml has been successfully loaded
+     *
+     * @return Boolean
+     */
+    public function isLoaded()
+    {
+      return($this->isLoaded);
+    }
+
+    /**
+     * returns true if XmlData has nodes
+     *
+     * @return Boolean
+     */
+    public function hasNodes()
+    {
+      return(count($this->nodes)>0);
+    }
+
+    /**
+     * returns the first node of the XmlData
+     *
+     * @return XmlNode or null
+     */
+    public function getFirstNode()
+    {
+      if(count($this->nodes)>0)
+      {
+        return($this->nodes[0]);
+      }
+      else
+      {
+        return(null);
+      }
+    }
+
+    /**
+     * returns the last node of the XmlData
+     *
+     * @return XmlNode or null
+     */
+    public function getLastNode()
+    {
+      if(count($this->nodes)>0)
+      {
+        return($this->nodes[count($this->nodes)-1]);
+      }
+      else
+      {
+        return(null);
+      }
+    }
+
+    /**
+     * set the xml data
+     * return true if the xml is valid and the xml tree is built
+     *
+     * @param String $xml : an xml structure in a string
+     * @return Boolean
+     */
+    public function setXmlData($xml)
+    {
+      if(is_string($xml))
+      {
+        $this->xml=$xml;
+        return($this->buildTreeNode());
+      }
+      return(false);
+    }
+
+    /**
+     * the xml_parse_info_struct load an XML file into a one dimension array
+     * this function build a tree with XmlNode object
+     */
+    private function buildTreeNode()
+    {
+      $xmlParser = xml_parser_create();
+      xml_parser_set_option($xmlParser, XML_OPTION_CASE_FOLDING, 0);
+      xml_parser_set_option($xmlParser, XML_OPTION_SKIP_WHITE, 1);
+      $result=xml_parse_into_struct($xmlParser, $this->xml, $values);
+      xml_parser_free($xmlParser);
+
+      //an error has occured while parsing the xml structure
+      if($result===0) return(false);
+
+
+      $tree=Array();
+
+      for($i=0;$i<count($values);$i++)
+      {
+        $val=$values[$i];
+
+        switch($val['type'])
+        {
+          case "open":
+          case "complete":
+            $node=new XmlNode($val['tag'], $val['level']);
+
+            if(array_key_exists('value', $val))
+            {
+              $node->setValue($val['value']);
+            }
+
+            if(array_key_exists('attributes', $val))
+            {
+              foreach($val['attributes'] as $itemKey => $itemVal)
+              {
+                $node->addAttribute($itemKey, $itemVal);
+              }
+            }
+
+            if(count($tree)>0)
+            {
+              $parent=$tree[count($tree)-1];
+              if($parent->hasChilds())
+              {
+                $parent->getLastChild()->setNextNode($node);
+                $node->setPreviousNode($parent->getLastChild());
+              }
+              $parent->addChild($node);
+            }
+
+            if($val['type']=="open")
+            {
+              array_push($tree, $node);
+            }
+
+            $this->nodes[]=$node;
+            break;
+          case "close":
+            array_pop($tree);
+            break;
+        }
+      }
+      unset($tree);
+      return(true);
+    }
+
+  }
+
+?>
Index: /extensions/AMetaData/JpegMetaData/External/php-gettext/AUTHORS
===================================================================
--- /extensions/AMetaData/JpegMetaData/External/php-gettext/AUTHORS	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/External/php-gettext/AUTHORS	(revision 4686)
@@ -0,0 +1,3 @@
+Danilo Segan <danilo@kvota.net>
+Nico Kaiser <nico@siriux.net> (contributed most changes between 1.0.2 and 1.0.3, bugfix for 1.0.5)
+Steven Armstrong <sa@c-area.ch> (gettext.inc, leading to 1.0.6)
Index: /extensions/AMetaData/JpegMetaData/External/php-gettext/COPYING
===================================================================
--- /extensions/AMetaData/JpegMetaData/External/php-gettext/COPYING	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/External/php-gettext/COPYING	(revision 4686)
@@ -0,0 +1,345 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 2 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, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: /extensions/AMetaData/JpegMetaData/External/php-gettext/Makefile
===================================================================
--- /extensions/AMetaData/JpegMetaData/External/php-gettext/Makefile	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/External/php-gettext/Makefile	(revision 4686)
@@ -0,0 +1,33 @@
+PACKAGE = php-gettext-$(VERSION)
+VERSION = 1.0.9
+
+DIST_FILES = \
+	gettext.php \
+	gettext.inc \
+	streams.php \
+	AUTHORS     \
+	README      \
+	COPYING     \
+	Makefile    \
+	examples/index.php    \
+	examples/pigs_dropin.php    \
+	examples/pigs_fallback.php    \
+	examples/locale/sr_CS/LC_MESSAGES/messages.po \
+	examples/locale/sr_CS/LC_MESSAGES/messages.mo \
+	examples/locale/de_CH/LC_MESSAGES/messages.po \
+	examples/locale/de_CH/LC_MESSAGES/messages.mo \
+	examples/update
+
+dist:
+	if [ -d $(PACKAGE) ]; then \
+	    rm -rf $(PACKAGE); \
+	fi; \
+	mkdir $(PACKAGE); \
+	if [ -d $(PACKAGE) ]; then \
+	    cp -rp --parents $(DIST_FILES) $(PACKAGE); \
+	    tar cvzf $(PACKAGE).tar.gz $(PACKAGE); \
+	    rm -rf $(PACKAGE); \
+	fi;
+
+clean:
+	rm -f $(PACKAGE).tar.gz
Index: /extensions/AMetaData/JpegMetaData/External/php-gettext/README
===================================================================
--- /extensions/AMetaData/JpegMetaData/External/php-gettext/README	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/External/php-gettext/README	(revision 4686)
@@ -0,0 +1,161 @@
+PHP-gettext 1.0 (https://launchpad.net/php-gettext)
+
+Copyright 2003, 2006, 2009 -- Danilo "angry with PHP[1]" Segan
+Licensed under GPLv2 (or any later version, see COPYING)
+
+[1] PHP is actually cyrillic, and translates roughly to
+    "works-doesn't-work" (UTF-8: Ради-Не-Ради)
+
+
+Introduction
+
+    How many times did you look for a good translation tool, and
+    found out that gettext is best for the job? Many times.
+
+    How many times did you try to use gettext in PHP, but failed
+    miserably, because either your hosting provider didn't support
+    it, or the server didn't have adequate locale? Many times.
+
+    Well, this is a solution to your needs. It allows using gettext
+    tools for managing translations, yet it doesn't require gettext
+    library at all. It parses generated MO files directly, and thus
+    might be a bit slower than the (maybe provided) gettext library.
+
+    PHP-gettext is a simple reader for GNU gettext MO files. Those
+    are binary containers for translations, produced by GNU msgfmt.
+
+Why?
+
+    I got used to having gettext work even without gettext
+    library. It's there in my favourite language Python, so I was
+    surprised that I couldn't find it in PHP. I even Googled for it,
+    but to no avail.
+
+    So, I said, what the heck, I'm going to write it for this
+    disguisting language of PHP, because I'm often constrained to it.
+
+Features
+
+  o Support for simple translations
+    Just define a simple alias for translate() function (suggested
+    use of _() or gettext(); see provided example).
+
+  o Support for ngettext calls (plural forms, see a note under bugs)
+    You may also use plural forms. Translations in MO files need to
+    provide this, and they must also provide "plural-forms" header.
+    Please see 'info gettext' for more details.
+
+  o Support for reading straight files, or strings (!!!)
+    Since I can imagine many different backends for reading in the MO
+    file data, I used imaginary abstract class StreamReader to do all
+    the input (check streams.php). For your convenience, I've already
+    provided two classes for reading files: FileReader and
+    StringReader (CachedFileReader is a combination of the two: it
+    loads entire file contents into a string, and then works on that).
+    See example below for usage. You can for instance use StringReader
+    when you read in data from a database, or you can create your own
+    derivative of StreamReader for anything you like.
+
+
+Bugs
+
+    Report them on https://bugs.launchpad.net/php-gettext
+
+Usage
+
+    Put files streams.php and gettext.php somewhere you can load them
+    from, and require 'em in where you want to use them.
+
+    Then, create one 'stream reader' (a class that provides functions
+    like read(), seekto(), currentpos() and length()) which will
+    provide data for the 'gettext_reader', with eg.
+      $streamer = new FileStream('data.mo');
+
+    Then, use that as a parameter to gettext_reader constructor:
+      $wohoo = new gettext_reader($streamer);
+
+    If you want to disable pre-loading of entire message catalog in
+    memory (if, for example, you have a multi-thousand message catalog
+    which you'll use only occasionally), use "false" for second
+    parameter to gettext_reader constructor:
+      $wohoo = new gettext_reader($streamer, false);
+
+    From now on, you have all the benefits of gettext data at your
+    disposal, so may run:
+      print $wohoo->translate("This is a test");
+      print $wohoo->ngettext("%d bird", "%d birds", $birds);
+
+    You might need to pass parameter "-k" to xgettext to make it
+    extract all the strings. In above example, try with
+      xgettext -ktranslate -kngettext:1,2 file.php
+    what should create messages.po which contains two messages for
+    translation.
+
+    I suggest creating simple aliases for these functions (see
+    example/pigs.php for how do I do it, which means it's probably a
+    bad way).
+
+
+Usage with gettext.inc (standard gettext interfaces emulation)
+
+    Check example in examples/pig_dropin.php, basically you include
+    gettext.inc and use all the standard gettext interfaces as
+    documented on:
+
+       http://www.php.net/gettext
+
+    The only catch is that you can check return value of setlocale()
+    to see if your locale is system supported or not.
+
+
+Example
+
+    See in examples/ subdirectory. There are a couple of files.
+    pigs.php is an example, serbian.po is a translation to Serbian
+    language, and serbian.mo is generated with
+       msgfmt -o serbian.mo serbian.po
+    There is also simple "update" script that can be used to generate
+    POT file and to update the translation using msgmerge.
+
+TODO:
+
+  o Improve speed to be even more comparable to the native gettext
+    implementation.
+
+  o Try to use hash tables in MO files: with pre-loading, would it
+    be useful at all?
+
+Never-asked-questions:
+
+  o Why did you mark this as version 1.0 when this is the first code
+    release?
+
+    Well, it's quite simple. I consider that the first released thing
+    should be labeled "version 1" (first, right?). Zero is there to
+    indicate that there's zero improvement and/or change compared to
+    "version 1".
+
+    I plan to use version numbers 1.0.* for small bugfixes, and to
+    release 1.1 as "first stable release of version 1".
+
+    This may trick someone that this is actually useful software, but
+    as with any other free software, I take NO RESPONSIBILITY for
+    creating such a masterpiece that will smoke crack, trash your
+    hard disk, and make lasers in your CD device dance to the tune of
+    Mozart's 40th Symphony (there is one like that, right?).
+
+  o Can I...?
+
+    Yes, you can. This is free software (as in freedom, free speech),
+    and you might do whatever you wish with it, provided you do not
+    limit freedom of others (GPL).
+
+    I'm considering licensing this under LGPL, but I *do* want
+    *every* PHP-gettext user to contribute and respect ideas of free
+    software, so don't count on it happening anytime soon.
+
+    I'm sorry that I'm taking away your freedom of taking others'
+    freedom away, but I believe that's neglible as compared to what
+    freedoms you could take away. ;-)
+
+    Uhm, whatever.
Index: /extensions/AMetaData/JpegMetaData/External/php-gettext/gettext.inc
===================================================================
--- /extensions/AMetaData/JpegMetaData/External/php-gettext/gettext.inc	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/External/php-gettext/gettext.inc	(revision 4686)
@@ -0,0 +1,374 @@
+<?php
+/*
+   Copyright (c) 2005 Steven Armstrong <sa at c-area dot ch>
+   Copyright (c) 2009 Danilo Segan <danilo@kvota.net>
+
+   Drop in replacement for native gettext.
+
+   This file is part of PHP-gettext.
+
+   PHP-gettext 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 2 of the License, or
+   (at your option) any later version.
+
+   PHP-gettext 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 PHP-gettext; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+/*
+LC_CTYPE        0
+LC_NUMERIC      1
+LC_TIME         2
+LC_COLLATE      3
+LC_MONETARY     4
+LC_MESSAGES     5
+LC_ALL          6
+*/
+
+
+// LC_MESSAGES is not available if php-gettext is not loaded
+// while the other constants are already available from session extension.
+if (!defined('LC_MESSAGES')) {
+  define('LC_MESSAGES',	5);
+}
+
+require('streams.php');
+require('gettext.php');
+
+
+// Variables
+
+global $text_domains, $default_domain, $LC_CATEGORIES, $EMULATEGETTEXT, $CURRENTLOCALE;
+$text_domains = array();
+$default_domain = 'messages';
+$LC_CATEGORIES = array('LC_CTYPE', 'LC_NUMERIC', 'LC_TIME', 'LC_COLLATE', 'LC_MONETARY', 'LC_MESSAGES', 'LC_ALL');
+$EMULATEGETTEXT = 0;
+$CURRENTLOCALE = '';
+
+/* Class to hold a single domain included in $text_domains. */
+class domain {
+  var $l10n;
+  var $path;
+  var $codeset;
+}
+
+// Utility functions
+
+/**
+ * Utility function to get a StreamReader for the given text domain.
+ */
+function _get_reader($domain=null, $category=5, $enable_cache=true) {
+    global $text_domains, $default_domain, $LC_CATEGORIES;
+    if (!isset($domain)) $domain = $default_domain;
+    if (!isset($text_domains[$domain]->l10n)) {
+        // get the current locale
+        $locale = _setlocale(LC_MESSAGES, 0);
+        $bound_path = isset($text_domains[$domain]->path) ?
+          $text_domains[$domain]->path : './';
+        $subpath = $LC_CATEGORIES[$category] ."/$domain.mo";
+        /* Figure out all possible locale names and start with the most
+           specific ones.  I.e. for sr_CS.UTF-8@latin, look through all of
+           sr_CS.UTF-8@latin, sr_CS@latin, sr@latin, sr_CS.UTF-8, sr_CS, sr.
+        */
+        $locale_names = array();
+        if (preg_match("/([a-z]{2,3})"            // language code
+                       ."(_([A-Z]{2}))?"          // country code
+                       ."(\.([-A-Za-z0-9_]))?"    // charset
+                       ."(@([-A-Za-z0-9_]+))?/",  // @ modifier
+                       $locale, $matches)) {
+          list(,$lang,,$country,,$charset,,$modifier) = $matches;
+          if ($modifier) {
+            $locale_names = array("${lang}_$country.$charset@$modifier",
+                                  "${lang}_$country@$modifier",
+                                  "$lang@$modifier");
+          }
+          array_push($locale_names,
+                     "${lang}_$country.$charset", "${lang}_$country", "$lang");
+        }
+        array_push($locale_names, $locale);
+
+        $input = null;
+        foreach ($locale_names as $locale) {
+          $full_path = $bound_path . $locale . "/" . $subpath;
+          if (file_exists($full_path)) {
+            $input = new FileReader($full_path);
+            break;
+          }
+        }
+
+        if (!array_key_exists($domain, $text_domains)) {
+          // Initialize an empty domain object.
+          $text_domains[$domain] = new domain();
+        }
+        $text_domains[$domain]->l10n = new gettext_reader($input,
+                                                          $enable_cache);
+    }
+    return $text_domains[$domain]->l10n;
+}
+
+/**
+ * Returns whether we are using our emulated gettext API or PHP built-in one.
+ */
+function locale_emulation() {
+    global $EMULATEGETTEXT;
+    return $EMULATEGETTEXT;
+}
+
+/**
+ * Checks if the current locale is supported on this system.
+ */
+function _check_locale() {
+    global $EMULATEGETTEXT;
+    return !$EMULATEGETTEXT;
+}
+
+/**
+ * Get the codeset for the given domain.
+ */
+function _get_codeset($domain=null) {
+    global $text_domains, $default_domain, $LC_CATEGORIES;
+    if (!isset($domain)) $domain = $default_domain;
+    return (isset($text_domains[$domain]->codeset))? $text_domains[$domain]->codeset : ini_get('mbstring.internal_encoding');
+}
+
+/**
+ * Convert the given string to the encoding set by bind_textdomain_codeset.
+ */
+function _encode($text) {
+    $source_encoding = mb_detect_encoding($text);
+    $target_encoding = _get_codeset();
+    if ($source_encoding != $target_encoding) {
+        return mb_convert_encoding($text, $target_encoding, $source_encoding);
+    }
+    else {
+        return $text;
+    }
+}
+
+
+
+
+// Custom implementation of the standard gettext related functions
+
+/**
+ * Sets a requested locale, if needed emulates it.
+ */
+function _setlocale($category, $locale) {
+    global $CURRENTLOCALE, $EMULATEGETTEXT;
+    if ($locale === 0) { // use === to differentiate between string "0"
+        if ($CURRENTLOCALE != '')
+            return $CURRENTLOCALE;
+        else
+            // obey LANG variable, maybe extend to support all of LC_* vars
+            // even if we tried to read locale without setting it first
+            return _setlocale($category, $CURRENTLOCALE);
+    } else {
+        $ret = 0;
+        if (function_exists('setlocale')) // I don't know if this ever happens ;)
+           $ret = setlocale($category, $locale);
+        if (($ret and $locale == '') or ($ret == $locale)) {
+            $EMULATEGETTEXT = 0;
+            $CURRENTLOCALE = $ret;
+        } else {
+          if ($locale == '') // emulate variable support
+             $CURRENTLOCALE = getenv('LANG');
+        else
+            $CURRENTLOCALE = $locale;
+            $EMULATEGETTEXT = 1;
+        }
+        // Allow locale to be changed on the go for one translation domain.
+        global $text_domains, $default_domain;
+        unset($text_domains[$default_domain]->l10n);
+        return $CURRENTLOCALE;
+    }
+}
+
+/**
+ * Sets the path for a domain.
+ */
+function _bindtextdomain($domain, $path) {
+    global $text_domains;
+    // ensure $path ends with a slash ('/' should work for both, but lets still play nice)
+    if (substr(php_uname(), 0, 7) == "Windows") {
+      if ($path[strlen($path)-1] != '\\' and $path[strlen($path)-1] != '/')
+        $path .= '\\';
+    } else {
+      if ($path[strlen($path)-1] != '/')
+        $path .= '/';
+    }
+    if (!array_key_exists($domain, $text_domains)) {
+      // Initialize an empty domain object.
+      $text_domains[$domain] = new domain();
+    }
+    $text_domains[$domain]->path = $path;
+}
+
+/**
+ * Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.
+ */
+function _bind_textdomain_codeset($domain, $codeset) {
+    global $text_domains;
+    $text_domains[$domain]->codeset = $codeset;
+}
+
+/**
+ * Sets the default domain.
+ */
+function _textdomain($domain) {
+    global $default_domain;
+    $default_domain = $domain;
+}
+
+/**
+ * Lookup a message in the current domain.
+ */
+function _gettext($msgid) {
+    $l10n = _get_reader();
+    //return $l10n->translate($msgid);
+    return _encode($l10n->translate($msgid));
+}
+/**
+ * Alias for gettext.
+ */
+function __($msgid) {
+    return _gettext($msgid);
+}
+/**
+ * Plural version of gettext.
+ */
+function _ngettext($single, $plural, $number) {
+    $l10n = _get_reader();
+    //return $l10n->ngettext($single, $plural, $number);
+    return _encode($l10n->ngettext($single, $plural, $number));
+}
+
+/**
+ * Override the current domain.
+ */
+function _dgettext($domain, $msgid) {
+    $l10n = _get_reader($domain);
+    //return $l10n->translate($msgid);
+    return _encode($l10n->translate($msgid));
+}
+/**
+ * Plural version of dgettext.
+ */
+function _dngettext($domain, $single, $plural, $number) {
+    $l10n = _get_reader($domain);
+    //return $l10n->ngettext($single, $plural, $number);
+    return _encode($l10n->ngettext($single, $plural, $number));
+}
+
+/**
+ * Overrides the domain and category for a single lookup.
+ */
+function _dcgettext($domain, $msgid, $category) {
+    $l10n = _get_reader($domain, $category);
+    //return $l10n->translate($msgid);
+    return _encode($l10n->translate($msgid));
+}
+/**
+ * Plural version of dcgettext.
+ */
+function _dcngettext($domain, $single, $plural, $number, $category) {
+    $l10n = _get_reader($domain, $category);
+    //return $l10n->ngettext($single, $plural, $number);
+    return _encode($l10n->ngettext($single, $plural, $number));
+}
+
+
+
+// Wrappers to use if the standard gettext functions are available, but the current locale is not supported by the system.
+// Use the standard impl if the current locale is supported, use the custom impl otherwise.
+
+function T_setlocale($category, $locale) {
+    return _setlocale($category, $locale);
+}
+
+function T_bindtextdomain($domain, $path) {
+    if (_check_locale()) return bindtextdomain($domain, $path);
+    else return _bindtextdomain($domain, $path);
+}
+function T_bind_textdomain_codeset($domain, $codeset) {
+    // bind_textdomain_codeset is available only in PHP 4.2.0+
+    if (_check_locale() and function_exists('bind_textdomain_codeset')) return bind_textdomain_codeset($domain, $codeset);
+    else return _bind_textdomain_codeset($domain, $codeset);
+}
+function T_textdomain($domain) {
+    if (_check_locale()) return textdomain($domain);
+    else return _textdomain($domain);
+}
+function T_gettext($msgid) {
+    if (_check_locale()) return gettext($msgid);
+    else return _gettext($msgid);
+}
+function T_($msgid) {
+    if (_check_locale()) return _($msgid);
+    return __($msgid);
+}
+function T_ngettext($single, $plural, $number) {
+    if (_check_locale()) return ngettext($single, $plural, $number);
+    else return _ngettext($single, $plural, $number);
+}
+function T_dgettext($domain, $msgid) {
+    if (_check_locale()) return dgettext($domain, $msgid);
+    else return _dgettext($domain, $msgid);
+}
+function T_dngettext($domain, $single, $plural, $number) {
+    if (_check_locale()) return dngettext($domain, $single, $plural, $number);
+    else return _dngettext($domain, $single, $plural, $number);
+}
+function T_dcgettext($domain, $msgid, $category) {
+    if (_check_locale()) return dcgettext($domain, $msgid, $category);
+    else return _dcgettext($domain, $msgid, $category);
+}
+function T_dcngettext($domain, $single, $plural, $number, $category) {
+    if (_check_locale()) return dcngettext($domain, $single, $plural, $number, $category);
+    else return _dcngettext($domain, $single, $plural, $number, $category);
+}
+
+
+
+// Wrappers used as a drop in replacement for the standard gettext functions
+
+if (!function_exists('gettext')) {
+    function bindtextdomain($domain, $path) {
+        return _bindtextdomain($domain, $path);
+    }
+    function bind_textdomain_codeset($domain, $codeset) {
+        return _bind_textdomain_codeset($domain, $codeset);
+    }
+    function textdomain($domain) {
+        return _textdomain($domain);
+    }
+    function gettext($msgid) {
+        return _gettext($msgid);
+    }
+    function _($msgid) {
+        return __($msgid);
+    }
+    function ngettext($single, $plural, $number) {
+        return _ngettext($single, $plural, $number);
+    }
+    function dgettext($domain, $msgid) {
+        return _dgettext($domain, $msgid);
+    }
+    function dngettext($domain, $single, $plural, $number) {
+        return _dngettext($domain, $single, $plural, $number);
+    }
+    function dcgettext($domain, $msgid, $category) {
+        return _dcgettext($domain, $msgid, $category);
+    }
+    function dcngettext($domain, $single, $plural, $number, $category) {
+        return _dcngettext($domain, $single, $plural, $number, $category);
+    }
+}
+
+?>
Index: /extensions/AMetaData/JpegMetaData/External/php-gettext/gettext.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/External/php-gettext/gettext.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/External/php-gettext/gettext.php	(revision 4686)
@@ -0,0 +1,398 @@
+<?php
+/*
+   Copyright (c) 2003, 2009 Danilo Segan <danilo@kvota.net>.
+   Copyright (c) 2005 Nico Kaiser <nico@siriux.net>
+
+   This file is part of PHP-gettext.
+
+   PHP-gettext 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 2 of the License, or
+   (at your option) any later version.
+
+   PHP-gettext 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 PHP-gettext; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+/**
+ * Provides a simple gettext replacement that works independently from
+ * the system's gettext abilities.
+ * It can read MO files and use them for translating strings.
+ * The files are passed to gettext_reader as a Stream (see streams.php)
+ *
+ * This version has the ability to cache all strings and translations to
+ * speed up the string lookup.
+ * While the cache is enabled by default, it can be switched off with the
+ * second parameter in the constructor (e.g. whenusing very large MO files
+ * that you don't want to keep in memory)
+ */
+class gettext_reader {
+  //public:
+   var $error = 0; // public variable that holds error code (0 if no error)
+
+   //private:
+  var $BYTEORDER = 0;        // 0: low endian, 1: big endian
+  var $STREAM = NULL;
+  var $short_circuit = false;
+  var $enable_cache = false;
+  var $originals = NULL;      // offset of original table
+  var $translations = NULL;    // offset of translation table
+  var $pluralheader = NULL;    // cache header field for plural forms
+  var $total = 0;          // total string count
+  var $table_originals = NULL;  // table for original strings (offsets)
+  var $table_translations = NULL;  // table for translated strings (offsets)
+  var $cache_translations = NULL;  // original -> translation mapping
+
+
+  /* Methods */
+
+
+  /**
+   * Reads a 32bit Integer from the Stream
+   *
+   * @access private
+   * @return Integer from the Stream
+   */
+  function readint() {
+      if ($this->BYTEORDER == 0) {
+        // low endian
+        $input=unpack('V', $this->STREAM->read(4));
+        return array_shift($input);
+      } else {
+        // big endian
+        $input=unpack('N', $this->STREAM->read(4));
+        return array_shift($input);
+      }
+    }
+
+  function read($bytes) {
+    return $this->STREAM->read($bytes);
+  }
+
+  /**
+   * Reads an array of Integers from the Stream
+   *
+   * @param int count How many elements should be read
+   * @return Array of Integers
+   */
+  function readintarray($count) {
+    if ($this->BYTEORDER == 0) {
+        // low endian
+        return unpack('V'.$count, $this->STREAM->read(4 * $count));
+      } else {
+        // big endian
+        return unpack('N'.$count, $this->STREAM->read(4 * $count));
+      }
+  }
+
+  /**
+   * Constructor
+   *
+   * @param object Reader the StreamReader object
+   * @param boolean enable_cache Enable or disable caching of strings (default on)
+   */
+  function gettext_reader($Reader, $enable_cache = true) {
+    // If there isn't a StreamReader, turn on short circuit mode.
+    if (! $Reader || isset($Reader->error) ) {
+      $this->short_circuit = true;
+      return;
+    }
+
+    // Caching can be turned off
+    $this->enable_cache = $enable_cache;
+
+    $MAGIC1 = "\x95\x04\x12\xde";
+    $MAGIC2 = "\xde\x12\x04\x95";
+
+    $this->STREAM = $Reader;
+    $magic = $this->read(4);
+    if ($magic == $MAGIC1) {
+      $this->BYTEORDER = 1;
+    } elseif ($magic == $MAGIC2) {
+      $this->BYTEORDER = 0;
+    } else {
+      $this->error = 1; // not MO file
+      return false;
+    }
+
+    // FIXME: Do we care about revision? We should.
+    $revision = $this->readint();
+
+    $this->total = $this->readint();
+    $this->originals = $this->readint();
+    $this->translations = $this->readint();
+  }
+
+  /**
+   * Loads the translation tables from the MO file into the cache
+   * If caching is enabled, also loads all strings into a cache
+   * to speed up translation lookups
+   * 
+   * @access private
+   */
+  function load_tables() {
+    if (is_array($this->cache_translations) &&
+      is_array($this->table_originals) &&
+      is_array($this->table_translations))
+      return;
+
+    /* get original and translations tables */
+    $this->STREAM->seekto($this->originals);
+    $this->table_originals = $this->readintarray($this->total * 2);
+    $this->STREAM->seekto($this->translations);
+    $this->table_translations = $this->readintarray($this->total * 2);
+
+    if ($this->enable_cache) {
+      $this->cache_translations = array ();
+      /* read all strings in the cache */
+      for ($i = 0; $i < $this->total; $i++) {
+        $this->STREAM->seekto($this->table_originals[$i * 2 + 2]);
+        $original = $this->STREAM->read($this->table_originals[$i * 2 + 1]);
+        $this->STREAM->seekto($this->table_translations[$i * 2 + 2]);
+        $translation = $this->STREAM->read($this->table_translations[$i * 2 + 1]);
+        $this->cache_translations[$original] = $translation;
+      }
+    }
+  }
+
+  /**
+   * Returns a string from the "originals" table
+   *
+   * @access private
+   * @param int num Offset number of original string
+   * @return string Requested string if found, otherwise ''
+   */
+  function get_original_string($num) {
+    $length = $this->table_originals[$num * 2 + 1];
+    $offset = $this->table_originals[$num * 2 + 2];
+    if (! $length)
+      return '';
+    $this->STREAM->seekto($offset);
+    $data = $this->STREAM->read($length);
+    return (string)$data;
+  }
+
+  /**
+   * Returns a string from the "translations" table
+   *
+   * @access private
+   * @param int num Offset number of original string
+   * @return string Requested string if found, otherwise ''
+   */
+  function get_translation_string($num) {
+    $length = $this->table_translations[$num * 2 + 1];
+    $offset = $this->table_translations[$num * 2 + 2];
+    if (! $length)
+      return '';
+    $this->STREAM->seekto($offset);
+    $data = $this->STREAM->read($length);
+    return (string)$data;
+  }
+
+  /**
+   * Binary search for string
+   *
+   * @access private
+   * @param string string
+   * @param int start (internally used in recursive function)
+   * @param int end (internally used in recursive function)
+   * @return int string number (offset in originals table)
+   */
+  function find_string($string, $start = -1, $end = -1) {
+    if (($start == -1) or ($end == -1)) {
+      // find_string is called with only one parameter, set start end end
+      $start = 0;
+      $end = $this->total;
+    }
+    if (abs($start - $end) <= 1) {
+      // We're done, now we either found the string, or it doesn't exist
+      $txt = $this->get_original_string($start);
+      if ($string == $txt)
+        return $start;
+      else
+        return -1;
+    } else if ($start > $end) {
+      // start > end -> turn around and start over
+      return $this->find_string($string, $end, $start);
+    } else {
+      // Divide table in two parts
+      $half = (int)(($start + $end) / 2);
+      $cmp = strcmp($string, $this->get_original_string($half));
+      if ($cmp == 0)
+        // string is exactly in the middle => return it
+        return $half;
+      else if ($cmp < 0)
+        // The string is in the upper half
+        return $this->find_string($string, $start, $half);
+      else
+        // The string is in the lower half
+        return $this->find_string($string, $half, $end);
+    }
+  }
+
+  /**
+   * Translates a string
+   *
+   * @access public
+   * @param string string to be translated
+   * @return string translated string (or original, if not found)
+   */
+  function translate($string) {
+    if ($this->short_circuit)
+      return $string;
+    $this->load_tables();
+
+    if ($this->enable_cache) {
+      // Caching enabled, get translated string from cache
+      if (array_key_exists($string, $this->cache_translations))
+        return $this->cache_translations[$string];
+      else
+        return $string;
+    } else {
+      // Caching not enabled, try to find string
+      $num = $this->find_string($string);
+      if ($num == -1)
+        return $string;
+      else
+        return $this->get_translation_string($num);
+    }
+  }
+
+  /**
+   * Sanitize plural form expression for use in PHP eval call.
+   *
+   * @access private
+   * @return string sanitized plural form expression
+   */
+  function sanitize_plural_expression($expr) {
+    // Get rid of disallowed characters.
+    $expr = preg_replace('@[^a-zA-Z0-9_:;\(\)\?\|\&=!<>+*/\%-]@', '', $expr);
+
+    // Add parenthesis for tertiary '?' operator.
+    $expr .= ';';
+    $res = '';
+    $p = 0;
+    for ($i = 0; $i < strlen($expr); $i++) {
+      $ch = $expr[$i];
+      switch ($ch) {
+      case '?':
+        $res .= ' ? (';
+        $p++;
+        break;
+      case ':':
+        $res .= ') : (';
+        break;
+      case ';':
+        $res .= str_repeat( ')', $p) . ';';
+        $p = 0;
+        break;
+      default:
+        $res .= $ch;
+      }
+    }
+    return $res;
+  }
+
+  /**
+   * Get possible plural forms from MO header
+   *
+   * @access private
+   * @return string plural form header
+   */
+  function get_plural_forms() {
+    // lets assume message number 0 is header
+    // this is true, right?
+    $this->load_tables();
+
+    // cache header field for plural forms
+    if (! is_string($this->pluralheader)) {
+      if ($this->enable_cache) {
+        $header = $this->cache_translations[""];
+      } else {
+        $header = $this->get_translation_string(0);
+      }
+      if (eregi("plural-forms: ([^\n]*)\n", $header, $regs))
+        $expr = $regs[1];
+      else
+        $expr = "nplurals=2; plural=n == 1 ? 0 : 1;";
+
+      $this->pluralheader = $this->sanitize_plural_expression($expr);
+    }
+    return $this->pluralheader;
+  }
+
+  /**
+   * Detects which plural form to take
+   *
+   * @access private
+   * @param n count
+   * @return int array index of the right plural form
+   */
+  function select_string($n) {
+    $string = $this->get_plural_forms();
+    $string = str_replace('nplurals',"\$total",$string);
+    $string = str_replace("n",$n,$string);
+    $string = str_replace('plural',"\$plural",$string);
+
+    $total = 0;
+    $plural = 0;
+
+    eval("$string");
+    if ($plural >= $total) $plural = $total - 1;
+    return $plural;
+  }
+
+  /**
+   * Plural version of gettext
+   *
+   * @access public
+   * @param string single
+   * @param string plural
+   * @param string number
+   * @return translated plural form
+   */
+  function ngettext($single, $plural, $number) {
+    if ($this->short_circuit) {
+      if ($number != 1)
+        return $plural;
+      else
+        return $single;
+    }
+
+    // find out the appropriate form
+    $select = $this->select_string($number);
+
+    // this should contains all strings separated by NULLs
+    $key = $single.chr(0).$plural;
+
+
+    if ($this->enable_cache) {
+      if (! array_key_exists($key, $this->cache_translations)) {
+        return ($number != 1) ? $plural : $single;
+      } else {
+        $result = $this->cache_translations[$key];
+        $list = explode(chr(0), $result);
+        return $list[$select];
+      }
+    } else {
+      $num = $this->find_string($key);
+      if ($num == -1) {
+        return ($number != 1) ? $plural : $single;
+      } else {
+        $result = $this->get_translation_string($num);
+        $list = explode(chr(0), $result);
+        return $list[$select];
+      }
+    }
+  }
+
+}
+
+?>
Index: /extensions/AMetaData/JpegMetaData/External/php-gettext/streams.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/External/php-gettext/streams.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/External/php-gettext/streams.php	(revision 4686)
@@ -0,0 +1,167 @@
+<?php
+/*
+   Copyright (c) 2003, 2005, 2006, 2009 Danilo Segan <danilo@kvota.net>.
+
+   This file is part of PHP-gettext.
+
+   PHP-gettext 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 2 of the License, or
+   (at your option) any later version.
+
+   PHP-gettext 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 PHP-gettext; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+
+  // Simple class to wrap file streams, string streams, etc.
+  // seek is essential, and it should be byte stream
+class StreamReader {
+  // should return a string [FIXME: perhaps return array of bytes?]
+  function read($bytes) {
+    return false;
+  }
+
+  // should return new position
+  function seekto($position) {
+    return false;
+  }
+
+  // returns current position
+  function currentpos() {
+    return false;
+  }
+
+  // returns length of entire stream (limit for seekto()s)
+  function length() {
+    return false;
+  }
+};
+
+class StringReader {
+  var $_pos;
+  var $_str;
+
+  function StringReader($str='') {
+    $this->_str = $str;
+    $this->_pos = 0;
+  }
+
+  function read($bytes) {
+    $data = substr($this->_str, $this->_pos, $bytes);
+    $this->_pos += $bytes;
+    if (strlen($this->_str)<$this->_pos)
+      $this->_pos = strlen($this->_str);
+
+    return $data;
+  }
+
+  function seekto($pos) {
+    $this->_pos = $pos;
+    if (strlen($this->_str)<$this->_pos)
+      $this->_pos = strlen($this->_str);
+    return $this->_pos;
+  }
+
+  function currentpos() {
+    return $this->_pos;
+  }
+
+  function length() {
+    return strlen($this->_str);
+  }
+
+};
+
+
+class FileReader {
+  var $_pos;
+  var $_fd;
+  var $_length;
+
+  function FileReader($filename) {
+    if (file_exists($filename)) {
+
+      $this->_length=filesize($filename);
+      $this->_pos = 0;
+      $this->_fd = fopen($filename,'rb');
+      if (!$this->_fd) {
+        $this->error = 3; // Cannot read file, probably permissions
+        return false;
+      }
+    } else {
+      $this->error = 2; // File doesn't exist
+      return false;
+    }
+  }
+
+  function read($bytes) {
+    if ($bytes) {
+      fseek($this->_fd, $this->_pos);
+
+      // PHP 5.1.1 does not read more than 8192 bytes in one fread()
+      // the discussions at PHP Bugs suggest it's the intended behaviour
+      $data = '';
+      while ($bytes > 0) {
+        $chunk  = fread($this->_fd, $bytes);
+        $data  .= $chunk;
+        $bytes -= strlen($chunk);
+      }
+      $this->_pos = ftell($this->_fd);
+
+      return $data;
+    } else return '';
+  }
+
+  function seekto($pos) {
+    fseek($this->_fd, $pos);
+    $this->_pos = ftell($this->_fd);
+    return $this->_pos;
+  }
+
+  function currentpos() {
+    return $this->_pos;
+  }
+
+  function length() {
+    return $this->_length;
+  }
+
+  function close() {
+    fclose($this->_fd);
+  }
+
+};
+
+// Preloads entire file in memory first, then creates a StringReader
+// over it (it assumes knowledge of StringReader internals)
+class CachedFileReader extends StringReader {
+  function CachedFileReader($filename) {
+    if (file_exists($filename)) {
+
+      $length=filesize($filename);
+      $fd = fopen($filename,'rb');
+
+      if (!$fd) {
+        $this->error = 3; // Cannot read file, probably permissions
+        return false;
+      }
+      $this->_str = fread($fd, $length);
+      fclose($fd);
+
+    } else {
+      $this->error = 2; // File doesn't exist
+      return false;
+    }
+  }
+};
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/JpegMetaData.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/JpegMetaData.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/JpegMetaData.class.php	(revision 4686)
@@ -0,0 +1,538 @@
+<?php
+/**
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ * Version : 1.0.0
+ * Date    : 2009/12/26
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * +-:: HISTORY ::--------+-----------------------------------------------------
+ * |         |            |
+ * | Release | Date       |
+ * +---------+------------+-----------------------------------------------------
+ * | 0.1.0a  | 2009-12-26 |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * +---------+------------+-----------------------------------------------------
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * References about definition & interpretation of metadata tags :
+ *  - EXIF 2.20 Specification    => http://www.exif.org/Exif2-2.PDF
+ *  - TIFF 6.0 Specification     => http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf
+ *  - Exiftool by Phil Harvey    => http://www.sno.phy.queensu.ca/~phil/exiftool/
+ *                                  http://owl.phy.queensu.ca/~phil/exiftool/TagNames
+ *  - Exiv2 by Andreas Huggel    => http://www.exiv2.org/
+ *  - MetaData working group     => http://www.metadataworkinggroup.org/specs/
+ *  - Adobe XMP Developer Center => http://www.adobe.com/devnet/xmp/
+ *  - Gezuz                      => http://gezus.one.free.fr/?Plugin-EXIF-pour-Spip-1-9-2
+ *  - JPEG format                => http://crousseau.free.fr/imgfmt_jpeg.htm
+ *  - International Press Telecomunication Council specifications
+ *                               => http://www.iptc.org/
+ *  - IPTC headers structure     => http://www.codeproject.com/KB/graphics/iptc.aspx?msg=1014929
+ *  - CPAN                       => http://search.cpan.org/dist/Image-MetaData-JPEG/lib/Image/MetaData/JPEG/Structures.pod
+ *                               => http://search.cpan.org/~bettelli/Image-MetaData-JPEG/lib/Image/MetaData/JPEG/MakerNotes.pod
+ *
+ * -----------------------------------------------------------------------------
+ * To support internationalization the JpegMetaData package uses ".po" and ".mo"
+ * files, and use "php-gettext"
+ * ==> See files in External/php-gettext for more information about this project
+ * -----------------------------------------------------------------------------
+ *
+ * The JpegMetaData is the main class for reading metadata of a Jpeg file
+ *
+ * It provides two essentialy high level functions to read different kind of
+ * metadata (EXIF, IPTC, XMP) :
+ *  - (static) getTagList
+ *  - load
+ *  - getTags
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * About tags and translation in local lang
+ * With the 'getTags()' method, the JpegMetaData returns an array of Tag objects
+ * found in the jpeg file.
+ *
+ * A Tag object have 2 properties that can be translated into a local language :
+ *  - the name, getted with 'getName()'
+ *  - the valueLabel, getted with 'getLabel()'
+ *
+ * Theses properties ARE NOT translated automatically.
+ *
+ * You can translate it with the Locale class, by using the static method 'get'
+ *
+ * Example :
+ *  Locale::get($myTag->getName()) will return the translated name of the Tag
+ *  Locale::get($myTag->getLabel()) will return the translated value of the Tag
+ *
+ * ===========> See Tag.class.php to know more about the Tag class <============
+ * ========> See Locale.class.php to know more about the Locale class <=========
+ *
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  define("JPEG_METADATA_DIR", dirname(__FILE__)."/");
+
+  require_once(JPEG_METADATA_DIR."Readers/JpegReader.class.php");
+
+  class JpegMetaData
+  {
+    const TAGFILTER_KNOWN       = 0x01;
+    const TAGFILTER_IMPLEMENTED = 0x02;
+    const TAGFILTER_ALL         = 0x03;
+
+    const KEY_EXIF_TIFF = "exif.tiff";
+    const KEY_EXIF_EXIF = "exif.exif";
+    const KEY_EXIF_GPS  = "exif.gps";
+    const KEY_EXIF = "exif";
+    const KEY_IPTC = "iptc";
+    const KEY_XMP  = "xmp";
+
+    private $jpeg = null;
+    private $tags = Array();
+    private $options = Array();
+
+    /**
+     * this static function returns an array of tags definitions
+     *
+     * the only parameter is an array to determine filter options
+     *
+     * ---------------------+---------------------------------------------------
+     * key                  | descriptions/values
+     * ---------------------+---------------------------------------------------
+     * filter               | Integer
+     *                      | This options is used to filter implemented tag
+     *                      |  JpegMetaData::TAGFILTER_ALL
+     *                      |  => returns all the tags
+     *                      |  JpegMetaData::TAGFILTER_IMPLEMENTED
+     *                      |  => returns only the implemented tags
+     *                      |
+     * optimizeIptcDateTime | Boolean
+     *                      | IPTC Date/Time are separated into 2 tags
+     *                      | if this option is set to true, only dates tags are
+     *                      | returned (assuming this option is used when an
+     *                      | image file is loaded)
+     *                      |
+     * exif                 | Boolean
+     * iptc                 | If set to true, the function returns all the tags
+     *                      | known for the specified type tag
+     * xmp                  |
+     * maker                | maker => returns specifics tags from all the known
+     *                      |          makers
+     *                      |
+     * ---------------------+---------------------------------------------------
+     *
+     * returned value is an array
+     * each keys is a tag name and the associated value is a 2-level array
+     *  'implemented' => Boolean, allowing to know if the tags is implemented or
+     *                   not
+     *  'name'        => String, the tag name translated in locale language
+     *
+     * @Param Array $options  (optional)
+     * @return Array(keyName => Array('implemented' => Boolean, 'name' => String))
+     */
+    static public function getTagList($options=Array())
+    {
+      $default=Array(
+        'filter' => self::TAGFILTER_ALL,
+        'optimizeIptcDateTime' => false,
+        'exif'  => true,
+        'iptc'  => true,
+        'xmp'   => true,
+        'maker' => true
+      );
+
+      foreach($default as $key => $val)
+      {
+        if(array_key_exists($key, $options))
+          $default[$key]=$options[$key];
+      }
+
+      $list=Array();
+      $returned=Array();
+
+      if($default['exif'])
+      {
+        $list[]="exif";
+        $list[]="gps";
+      }
+
+      if($default['maker'])
+      {
+        $list[]=MAKER_PENTAX;
+      }
+
+      if($default['iptc'])
+        $list[]="iptc";
+
+      if($default['xmp'])
+        $list[]="xmp";
+
+      foreach($list as $val)
+      {
+        unset($tmp);
+
+        switch($val)
+        {
+          case "exif":
+            $tmp=new IfdTags();
+            $schema="exif";
+            break;
+          case "gps":
+            $tmp=new GpsTags();
+            $schema="exif.gps";
+            break;
+          case "iptc":
+            $tmp=new IptcTags();
+            $schema="iptc";
+            break;
+          case "xmp":
+            $tmp=new XmpTags();
+            $schema="xmp";
+            break;
+          case MAKER_PENTAX:
+            $tmp=new PentaxTags();
+            $schema="exif.".MAKER_PENTAX;
+            break;
+          default:
+            $tmp=null;
+            $schema="?";
+            break;
+        }
+
+        if(!is_null($tmp))
+          foreach($tmp->getTags() as $key => $tag)
+          {
+            if(self::filter(true, $tag['implemented'], $default['filter']))
+            {
+              if(array_key_exists('tagName', $tag))
+                $name=$tag['tagName'];
+              else
+                $name=$key;
+
+              if(array_key_exists('schema', $tag) and $val=="exif")
+                $subSchema=".".$tag['schema'];
+              else
+                $subSchema="";
+
+              if($val=='xmp')
+                $keyName=$schema.$subSchema.".".$key;
+              else
+                $keyName=$schema.$subSchema.".".$name;
+              $returned[$keyName]=Array(
+                'implemented' => $tag['implemented'],
+                'name' => $name
+              );
+            }
+          }
+      }
+
+      return($returned);
+    }
+
+
+    /**
+     * the filter function is used by the classe to determine if a tag is
+     * filtered or not
+     *
+     * @Param Boolean $known
+     * @Param Boolean $implemented
+     * @Param Integer $filter
+     *
+     */
+    static public function filter($known, $implemented, $filter)
+    {
+      return(($known and (($filter & self::TAGFILTER_KNOWN) == self::TAGFILTER_KNOWN )) or
+                ($implemented and (($filter & self::TAGFILTER_IMPLEMENTED) == self::TAGFILTER_IMPLEMENTED )));
+    }
+
+    /**
+     * the constructor need an optional filename and options
+     *
+     * if no filename is given, you can use the "load" function after the object
+     * is instancied
+     *
+     * if no options are given, the class use the default values
+     *
+     * ---------------------+---------------------------------------------------
+     * key                  | descriptions/values
+     * ---------------------+---------------------------------------------------
+     * filter               | Integer
+     *                      | This options is used to filter implemented tag
+     *                      |  JpegMetaData::TAGFILTER_ALL
+     *                      |  => returns all the tags
+     *                      |  JpegMetaData::TAGFILTER_IMPLEMENTED
+     *                      |  => returns only the implemented tags, not
+     *                      |     implemented tag are excluded
+     *                      |  JpegMetaData::TAGFILTER_KNOWN
+     *                      |  => returns only the known tags (implemented or
+     *                      |     not), unknown tag are excluded
+     *                      |
+     * optimizeIptcDateTime | Boolean
+     *                      | IPTC Date/Time are separated into 2 tags
+     *                      | if this option is set to true, only dates tags are
+     *                      | returned (in this case, time is included is the
+     *                      | date)
+     *                      |
+     * exif                 | Boolean
+     * iptc                 | If set to true, the function returns all the tags
+     * xmp                  | known for the specified type tag
+     *                      | the exif parameter include the maker tags
+     *                      |
+     * ---------------------+---------------------------------------------------
+     *
+     * @Param String $file    (optional)
+     * @Param Array  $options (optional)
+     *
+     */
+    function __construct($file = "", $options = Array())
+    {
+      $this->load($file, $options);
+    }
+
+    function __destruct()
+    {
+      $this->unsetAll();
+    }
+
+    /**
+     * load a file
+     *
+     * options values are the same than the constructor's options
+     *
+     * @Param String $file
+     * @Param Array  $options (optional)
+     *
+     */
+    public function load($file, $options = Array())
+    {
+      $this->initializeOptions($options);
+
+      $this->unsetAll();
+      $this->tags = Array();
+      $this->jpeg = new JpegReader($file);
+
+      if($this->jpeg->isLoaded() and $this->jpeg->isValid())
+      {
+        foreach($this->jpeg->getAppMarkerSegments() as $key => $appMarkerSegment)
+        {
+          if($appMarkerSegment->dataLoaded())
+          {
+            $data=$appMarkerSegment->getData();
+
+            if($data instanceof TiffReader)
+            {
+              /*
+               * Load Exifs tags from Tiff block
+               */
+              if($data->getNbIFDs()>0)
+              {
+                $this->loadIfdTags($data->getIFD(0), self::KEY_EXIF_TIFF);
+              }
+            }
+            elseif($data instanceof XmpReader)
+            {
+              /*
+               * Load Xmp tags from Xmp block
+               */
+              $this->loadTags($data->getTags(), self::KEY_XMP);
+            }
+            elseif($data instanceof IptcReader)
+            {
+              /*
+               * Load IPTC tags from IPTC block
+               */
+              if($this->options['optimizeIptcDateTime'])
+                $data->optimizeDateTime();
+
+              $this->loadTags($data->getTags(), self::KEY_IPTC);
+            }
+          }
+        }
+      }
+    }
+
+    /**
+     * This function returns an array of tags found in the loaded file
+     *
+     * It's possible to made a second selection to filter items
+     *
+     * ---------------------+---------------------------------------------------
+     * key                  | descriptions/values
+     * ---------------------+---------------------------------------------------
+     * tagFilter            | Integer
+     *                      | This options is used to filter implemented tag
+     *                      |  JpegMetaData::TAGFILTER_ALL
+     *                      |  => returns all the tags
+     *                      |  JpegMetaData::TAGFILTER_IMPLEMENTED
+     *                      |  => returns only the implemented tags, not
+     *                      |     implemented tag are excluded
+     *                      |  JpegMetaData::TAGFILTER_KNOWN
+     *                      |  => returns only the known tags (implemented or
+     *                      |     not), unknown tag are excluded
+     *                      |
+     * ---------------------+---------------------------------------------------
+     *
+     * Note, the filter is applied on loaded tags. If a filter was applied when
+     * the file was loaded, you cannot expand the tag list, only reduce
+     * example :
+     *  $jpegmd = new JpegMetadata($file, Array('filter' => JpegMetaData::TAGFILTER_IMPLEMENTED));
+     *     => the unknown tag are not loaded
+     *  $jpegmd->getTags(JpegMetaData::TAGFILTER_ALL)
+     *     => unknown tag will not be restitued because they are not loaded...
+     *
+     * the function returns an array of Tag.
+     *
+     *
+     * ===========> See the Tag.class.php to know all about a tag <=============
+     *
+     * @Param Integer $tagFilter (optional)
+     *
+     */
+    public function getTags($tagFilter = self::TAGFILTER_ALL)
+    {
+      $returned=Array();
+      foreach($this->tags as $key => $val)
+      {
+        if(self::filter($val->getIsKnown(), $val->getIsImplemented(), $tagFilter))
+        {
+          $returned[$key]=$val;
+        }
+      }
+      return($returned);
+    }
+
+    /**
+     * initialize the options...
+     *
+     * @Param Array $options (optional)
+     *
+     */
+    private function initializeOptions($options=Array())
+    {
+      $this->options = Array(
+        'filter' => self::TAGFILTER_ALL,
+        'optimizeIptcDateTime' => false,
+        'exif' => true,
+        'iptc' => true,
+        'xmp'  => true
+      );
+
+      foreach($this->options as $key => $val)
+      {
+        if(array_key_exists($key, $options))
+          $this->options[$key]=$options[$key];
+      }
+    }
+
+    /**
+     * load tags from an IFD structure
+     *
+     * see Tiff.class.php and IfdReader.class.php for more informations
+     *
+     * @Param IfdReader $ifd
+     * @Param String    $exifKey
+     *
+     */
+    private function loadIfdTags($ifd, $exifKey)
+    {
+      foreach($ifd->getTags() as $key => $tag)
+      {
+        if(self::filter($tag->getTag()->getIsKnown(), $tag->getTag()->getIsImplemented(), $this->options['filter']))
+        {
+          if($tag->getTag()->getLabel() instanceof IfdReader)
+          {
+            switch($tag->getTag()->getName())
+            {
+              case 'Exif IFD Pointer':
+                $exifKey2=self::KEY_EXIF_EXIF;
+                break;
+              case 'MakerNote':
+                $exifKey2=self::KEY_EXIF.".".$tag->getTag()->getLabel()->getMaker();
+                break;
+              case 'GPS IFD Pointer':
+                $exifKey2=self::KEY_EXIF_GPS;
+                break;
+              default:
+                $exifKey2=$exifKey;
+                break;
+            }
+            $this->loadIfdTags($tag->getTag()->getLabel(), $exifKey2);
+          }
+          else
+          {
+            $this->tags[$exifKey.".".$tag->getTag()->getName()]=$tag->getTag();
+          }
+        }
+      }
+    }
+
+    /**
+     * Used to load tags from an IPTc or XMP structure
+     *
+     * see IptcReader.class.php and XmpReader.class.php
+     *
+     * @Param Tag[]  $ifd
+     * @Param String $tagKey
+     *
+     */
+    private function loadTags($tags, $tagKey)
+    {
+      foreach($tags as $key => $tag)
+      {
+        if(self::filter($tag->getIsKnown(), $tag->getIsImplemented(), $this->options['filter']))
+        {
+          $this->tags[$tagKey.".".$tag->getName()]=$tag;
+        }
+      }
+    }
+
+    private function unsetAll()
+    {
+      unset($this->tags);
+      unset($this->jpeg);
+    }
+
+
+  } // class JpegMetaData
+
+?>
+
Index: /extensions/AMetaData/JpegMetaData/Locale/en_UK/Tag.po
===================================================================
--- /extensions/AMetaData/JpegMetaData/Locale/en_UK/Tag.po	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Locale/en_UK/Tag.po	(revision 4686)
@@ -0,0 +1,4080 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: TagNames\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: grum <grum@piwigo.org>\n"
+"Language-Team: grum <grum@piwigo.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: en\n"
+"X-Poedit-Country: UK\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "A Series Lens"
+msgstr "****A Series Lens"
+
+#. Pentax specific tags / 0x0206 (AEInfo)
+msgid "AEInfo"
+msgstr "****AEInfo"
+
+#. Pentax specific tags / 0x0048 (AELock)
+msgid "AELock"
+msgstr "****AELock"
+
+#. Pentax specific tags / 0x0209 (AEMeteringSegments)
+msgid "AEMeteringSegments"
+msgstr "****AEMeteringSegments"
+
+#. Pentax specific tags / 0x0072 (AFAdjustment)
+msgid "AFAdjustment"
+msgstr "****AFAdjustment"
+
+#. Exif & Tiff tags / 0x8568 (AFCP_IPTC)
+msgid "AFCP_IPTC"
+msgstr "****AFCP_IPTC"
+
+#. Pentax specific tags / 0x021f (AFInfo)
+msgid "AFInfo"
+msgstr "****AFInfo"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "AFPoint"
+msgstr "****AFPoint"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x003c (AFPointsInFocus)
+msgid "AFPointsInFocus"
+msgstr "****AFPointsInFocus"
+
+#. IPTC tags / 0x0178 (ARM Identifier)
+msgid "ARM Identifier"
+msgstr "****ARM Identifier"
+
+#. IPTC tags / 0x017a (ARM Version)
+msgid "ARM Version"
+msgstr "****ARM Version"
+
+#. IPTC tags / 0x022a (Action Advised)
+msgid "Action Advised"
+msgstr "****Action Advised"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Adelaide"
+msgstr "****Adelaide"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "Adobe Deflate"
+msgstr "****Adobe Deflate"
+
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "Adobe RGB"
+msgstr "****Adobe RGB"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Algiers"
+msgstr "****Algiers"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Amsterdam"
+msgstr "****Amsterdam"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Anchorage"
+msgstr "****Anchorage"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Aperture Priority"
+msgstr "****Aperture Priority"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Aperture Priority (Off-Auto-Aperture)"
+msgstr "****Aperture Priority (Off-Auto-Aperture)"
+
+#. Exif & Tiff tags / 0x9202 (ApertureValue)
+msgid "ApertureValue"
+msgstr "****ApertureValue"
+
+#. Exif & Tiff tags / 0x013b (Artist)
+msgid "Artist"
+msgstr "****Artist"
+
+#. XMP tags / crs:Balance
+msgid "As Shot"
+msgstr "****As Shot"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Athens"
+msgstr "****Athens"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Auckland"
+msgstr "****Auckland"
+
+#. IPTC tags / 0x0299 (Audio Duration)
+msgid "Audio Duration"
+msgstr "****Audio Duration"
+
+#. IPTC tags / 0x0298 (Audio Sampling Resolution)
+msgid "Audio Sampling Resolution"
+msgstr "****Audio Sampling Resolution"
+
+#. IPTC tags / 0x0296 (Audio Type)
+msgid "Audio Type"
+msgstr "****Audio Type"
+
+#. IPTC tags / 0x0297 (Audion Sampling Rate)
+msgid "Audion Sampling Rate"
+msgstr "****Audion Sampling Rate"
+
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x0001 (ShootingMode)
+#. Pentax specific tags / 0x000e (AFPoint)
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Auto"
+msgstr "****Auto"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Cloudy)"
+msgstr "****Auto (Cloudy)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Daylight)"
+msgstr "****Auto (Daylight)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (DaylightFluorescent)"
+msgstr "****Auto (DaylightFluorescent)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (DaywhiteFluorescent)"
+msgstr "****Auto (DaywhiteFluorescent)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Flash)"
+msgstr "****Auto (Flash)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Shade)"
+msgstr "****Auto (Shade)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Tungsten)"
+msgstr "****Auto (Tungsten)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (WhiteFluorescent)"
+msgstr "****Auto (WhiteFluorescent)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Landscape)"
+msgstr "****Auto PICT (Landscape)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Macro)"
+msgstr "****Auto PICT (Macro)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Portrait)"
+msgstr "****Auto PICT (Portrait)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Sport)"
+msgstr "****Auto PICT (Sport)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Standard)"
+msgstr "****Auto PICT (Standard)"
+
+#. Pentax specific tags / 0x0018 (AutoBracketing)
+msgid "AutoBracketing"
+msgstr "****AutoBracketing"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Automatic Tracking AF"
+msgstr "****Automatic Tracking AF"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Autumn"
+msgstr "****Autumn"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Bangkok"
+msgstr "****Bangkok"
+
+#. Pentax specific tags / 0x0216 (BatteryInfo)
+msgid "BatteryInfo"
+msgstr "****BatteryInfo"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Beijing"
+msgstr "****Beijing"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Berlin"
+msgstr "****Berlin"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Best"
+msgstr "****Best"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Better"
+msgstr "****Better"
+
+#. Exif & Tiff tags / 0x0102 (BitsPerSample)
+msgid "BitsPerSample"
+msgstr "****BitsPerSample"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "BlackIsZero"
+msgstr "****BlackIsZero"
+
+#. Pentax specific tags / 0x0200 (BlackPoint)
+msgid "BlackPoint"
+msgstr "****BlackPoint"
+
+#. Pentax specific tags / 0x001b (BlueBalance)
+msgid "BlueBalance"
+msgstr "****BlueBalance"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Blur Reduction"
+msgstr "****Blur Reduction"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Bottom"
+msgstr "****Bottom"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Bottom-center"
+msgstr "****Bottom-center"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Bottom-left"
+msgstr "****Bottom-left"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Bottom-right"
+msgstr "****Bottom-right"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Bright"
+msgstr "****Bright"
+
+#. Exif & Tiff tags / 0x9203 (BrightnessValue)
+msgid "BrightnessValue"
+msgstr "****BrightnessValue"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Buenos Aires"
+msgstr "****Buenos Aires"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Bulb"
+msgstr "****Bulb"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Bulb (Off-Auto-Aperture)"
+msgstr "****Bulb (Off-Auto-Aperture)"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Burst"
+msgstr "****Burst"
+
+#. IPTC tags / 0x0250 (By-line)
+msgid "By-line"
+msgstr "****By-line"
+
+#. IPTC tags / 0x0255 (By-line Title)
+msgid "By-line Title"
+msgstr "****By-line Title"
+
+#. Exif & Tiff tags / 0xa302 (CFAPattern)
+msgid "CFAPattern"
+msgstr "****CFAPattern"
+
+#. Pentax specific tags / 0x0028 (CPUFirmwareVersion)
+msgid "CPUFirmwareVersion"
+msgstr "****CPUFirmwareVersion"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Cairo"
+msgstr "****Cairo"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Calgary"
+msgstr "****Calgary"
+
+#. Pentax specific tags / 0x0215 (CameraInfo)
+msgid "CameraInfo"
+msgstr "****CameraInfo"
+
+#. Pentax specific tags / 0x0005 (CameraModel)
+msgid "CameraModel"
+msgstr "****CameraModel"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Candlelight"
+msgstr "****Candlelight"
+
+#. IPTC tags / 0x0278 (Caption/Abstract)
+msgid "Caption/Abstract"
+msgstr "****Caption/Abstract"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Caracus"
+msgstr "****Caracus"
+
+#. IPTC tags / 0x020f (Category)
+msgid "Category"
+msgstr "****Category"
+
+#. Exif & Tiff tags / 0x0109 (CellLength)
+msgid "CellLength"
+msgstr "****CellLength"
+
+#. Exif & Tiff tags / 0x0108 (CellWidth)
+msgid "CellWidth"
+msgstr "****CellWidth"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Center"
+msgstr "****Center"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+msgid "Center Weighted"
+msgstr "****Center Weighted"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "CenterWeightedAverage"
+msgstr "****CenterWeightedAverage"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Chicago"
+msgstr "****Chicago"
+
+#. IPTC tags / 0x025a (City)
+msgid "City"
+msgstr "****City"
+
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Cloudy"
+msgstr "****Cloudy"
+
+#. IPTC tags / 0x015a (Coded Character Set)
+msgid "Coded Character Set"
+msgstr "****Coded Character Set"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Colombo"
+msgstr "****Colombo"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Color Filter"
+msgstr "****Color Filter"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "Color Filter Array"
+msgstr "****Color Filter Array"
+
+#. Pentax specific tags / 0x0222 (ColorInfo)
+msgid "ColorInfo"
+msgstr "****ColorInfo"
+
+#. Pentax specific tags / 0x0203 (ColorMatrixA)
+msgid "ColorMatrixA"
+msgstr "****ColorMatrixA"
+
+#. Pentax specific tags / 0x0204 (ColorMatrixB)
+msgid "ColorMatrixB"
+msgstr "****ColorMatrixB"
+
+#. Exif & Tiff tags / 0x012c (ColorResponseUnit)
+msgid "ColorResponseUnit"
+msgstr "****ColorResponseUnit"
+
+#. Pentax specific tags / 0x0037 (ColorSpace)
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "ColorSpace"
+msgstr "****ColorSpace"
+
+#. Pentax specific tags / 0x0050 (ColorTemperature)
+msgid "ColorTemperature"
+msgstr "****ColorTemperature"
+
+#. Exif & Tiff tags / 0x9101 (ComponentsConfiguration)
+msgid "ComponentsConfiguration"
+msgstr "****ComponentsConfiguration"
+
+#. Exif & Tiff tags / 0x9102 (CompressedBitsPerPixel)
+msgid "CompressedBitsPerPixel"
+msgstr "****CompressedBitsPerPixel"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "Compression"
+msgstr "****Compression"
+
+#. IPTC tags / 0x090a (Confirmed ObjectData Size)
+msgid "Confirmed ObjectData Size"
+msgstr "****Confirmed ObjectData Size"
+
+#. IPTC tags / 0x0276 (Contact)
+msgid "Contact"
+msgstr "****Contact"
+
+#. IPTC tags / 0x021a (Content Location Code)
+msgid "Content Location Code"
+msgstr "****Content Location Code"
+
+#. IPTC tags / 0x021b (Content Location Name)
+msgid "Content Location Name"
+msgstr "****Content Location Name"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Continuous"
+msgstr "****Continuous"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Continuous (Hi)"
+msgstr "****Continuous (Hi)"
+
+#. Pentax specific tags / 0x0020 (Contrast)
+#. Exif & Tiff tags / 0xa408 (Contrast)
+msgid "Contrast"
+msgstr "****Contrast"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Copenhagen"
+msgstr "****Copenhagen"
+
+#. Exif & Tiff tags / 0x8298 (Copyright)
+msgid "Copyright"
+msgstr "****Copyright"
+
+#. IPTC tags / 0x0274 (Copyright Notice)
+msgid "Copyright Notice"
+msgstr "****Copyright Notice"
+
+#. IPTC tags / 0x0264 (Country/Primary Location Code)
+msgid "Country/Primary Location Code"
+msgstr "****Country/Primary Location Code"
+
+#. IPTC tags / 0x0265 (Country/Primary Location Name)
+msgid "Country/Primary Location Name"
+msgstr "****Country/Primary Location Name"
+
+#. IPTC tags / 0x026e (Credit)
+msgid "Credit"
+msgstr "****Credit"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Cropped"
+msgstr "****Cropped"
+
+#. XMP tags / crs:ToneCurveName
+#. XMP tags / crs:Balance
+msgid "Custom"
+msgstr "****Custom"
+
+#. Exif & Tiff tags / 0xa401 (CustomRendered)
+msgid "CustomRendered"
+msgstr "****CustomRendered"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "DOF Program"
+msgstr "****DOF Program"
+
+#. Pentax specific tags / 0x0027 (DSPFirmwareVersion)
+msgid "DSPFirmwareVersion"
+msgstr "****DSPFirmwareVersion"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Dacca"
+msgstr "****Dacca"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Dakar"
+msgstr "****Dakar"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Dark Pet"
+msgstr "****Dark Pet"
+
+#. Pentax specific tags / 0x03fe (DataDump)
+msgid "DataDump"
+msgstr "****DataDump"
+
+#. Pentax specific tags / 0x0006 (Date)
+msgid "Date"
+msgstr "****Date"
+
+#. IPTC tags / 0x0237 (Date Created)
+msgid "Date Created"
+msgstr "****Date Created"
+
+#. IPTC tags / 0x0146 (Date Sent)
+msgid "Date Sent"
+msgstr "****Date Sent"
+
+#. Exif & Tiff tags / 0x0132 (DateTime)
+msgid "DateTime"
+msgstr "****DateTime"
+
+#. Exif & Tiff tags / 0x9004 (DateTimeDigitized)
+msgid "DateTimeDigitized"
+msgstr "****DateTimeDigitized"
+
+#. Exif & Tiff tags / 0x9003 (DateTimeOriginal)
+msgid "DateTimeOriginal"
+msgstr "****DateTimeOriginal"
+
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Daylight"
+msgstr "****Daylight"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "DaylightFluorescent"
+msgstr "****DaylightFluorescent"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "DaywhiteFluorescent"
+msgstr "****DaywhiteFluorescent"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Delhi"
+msgstr "****Delhi"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Denver"
+msgstr "****Denver"
+
+#. IPTC tags / 0x0105 (Destination)
+#. Pentax specific tags / 0x0022 (WorldTimeLocation)
+msgid "Destination"
+msgstr "****Destination"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "DestinationCityName"
+msgstr "****DestinationCityName"
+
+#. Pentax specific tags / 0x0026 (DestinationDST)
+msgid "DestinationDST"
+msgstr "****DestinationDST"
+
+#. Exif & Tiff tags / 0xa40b (DeviceSettingDescription)
+msgid "DeviceSettingDescription"
+msgstr "****DeviceSettingDescription"
+
+#. IPTC tags / 0x023e (Digital Creation Date)
+msgid "Digital Creation Date"
+msgstr "****Digital Creation Date"
+
+#. IPTC tags / 0x023f (Digital Creation Time)
+msgid "Digital Creation Time"
+msgstr "****Digital Creation Time"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Digital Filter"
+msgstr "****Digital Filter"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Digital Filter?"
+msgstr "****Digital Filter?"
+
+#. Pentax specific tags / 0x0041 (DigitalFilter)
+msgid "DigitalFilter"
+msgstr "****DigitalFilter"
+
+#. Pentax specific tags / 0x001e (DigitalZoom)
+msgid "DigitalZoom"
+msgstr "****DigitalZoom"
+
+#. Exif & Tiff tags / 0xa404 (DigitalZoomRatio)
+msgid "DigitalZoomRatio"
+msgstr "****DigitalZoomRatio"
+
+#. Exif & Tiff tags / 0x010d (DocumentName)
+msgid "DocumentName"
+msgstr "****DocumentName"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "DriveMode"
+msgstr "****DriveMode"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Dubai"
+msgstr "****Dubai"
+
+#. Pentax specific tags / 0x0069 (DynamicRangeExpansion)
+msgid "DynamicRangeExpansion"
+msgstr "****DynamicRangeExpansion"
+
+#. Pentax specific tags / 0x0224 (EVStepInfo)
+msgid "EVStepInfo"
+msgstr "****EVStepInfo"
+
+#. IPTC tags / 0x0207 (Edit Status)
+msgid "Edit Status"
+msgstr "****Edit Status"
+
+#. IPTC tags / 0x0208 (Editorial Update)
+msgid "Editorial Update"
+msgstr "****Editorial Update"
+
+#. Pentax specific tags / 0x002d (EffectiveLV)
+msgid "EffectiveLV"
+msgstr "****EffectiveLV"
+
+#. IPTC tags / 0x0128 (Envelope Number)
+msgid "Envelope Number"
+msgstr "****Envelope Number"
+
+#. IPTC tags / 0x013c (Envelope Priority)
+msgid "Envelope Priority"
+msgstr "****Envelope Priority"
+
+#. Exif & Tiff tags / 0x9000 (ExifVersion)
+msgid "ExifVersion"
+msgstr "****ExifVersion"
+
+#. IPTC tags / 0x0225 (Expiration Date)
+msgid "Expiration Date"
+msgstr "****Expiration Date"
+
+#. IPTC tags / 0x0226 (Expiration Time)
+msgid "Expiration Time"
+msgstr "****Expiration Time"
+
+#. Exif & Tiff tags / 0x9204 (ExposureBiasValue)
+msgid "ExposureBiasValue"
+msgstr "****ExposureBiasValue"
+
+#. Pentax specific tags / 0x0016 (ExposureCompensation)
+msgid "ExposureCompensation"
+msgstr "****ExposureCompensation"
+
+#. Exif & Tiff tags / 0xa215 (ExposureIndex)
+msgid "ExposureIndex"
+msgstr "****ExposureIndex"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "ExposureMode"
+msgstr "****ExposureMode"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "ExposureProgram"
+msgstr "****ExposureProgram"
+
+#. Exif & Tiff tags / 0x829a (ExposureTime)
+#. Pentax specific tags / 0x0012 (ExposureTime)
+msgid "ExposureTime"
+msgstr "****ExposureTime"
+
+#. Pentax specific tags / 0x0013 (FNumber)
+#. Exif & Tiff tags / 0x829d (FNumber)
+msgid "FNumber"
+msgstr "****FNumber"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Face Recognition AF"
+msgstr "****Face Recognition AF"
+
+#. IPTC tags / 0x0114 (File Format)
+msgid "File Format"
+msgstr "****File Format"
+
+#. IPTC tags / 0x0116 (File Format Version)
+msgid "File Format Version"
+msgstr "****File Format Version"
+
+#. Exif & Tiff tags / 0xa300 (FileSource)
+msgid "FileSource"
+msgstr "****FileSource"
+
+#. Exif & Tiff tags / 0x010a (FillOrder)
+msgid "FillOrder"
+msgstr "****FillOrder"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Fireworks"
+msgstr "****Fireworks"
+
+#. Pentax specific tags / 0x0230 (FirmwareVersion)
+msgid "FirmwareVersion"
+msgstr "****FirmwareVersion"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Fixed Center"
+msgstr "****Fixed Center"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Fixed Center or Multiple"
+msgstr "****Fixed Center or Multiple"
+
+#. IPTC tags / 0x0216 (Fixture Identifier)
+msgid "Fixture Identifier"
+msgstr "****Fixture Identifier"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x000c (Flash)
+msgid "Flash"
+msgstr "****Flash"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Flash X-Sync Speed AE, 1/2 EV steps"
+msgstr "****Flash X-Sync Speed AE, 1/2 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Flash X-Sync Speed AE, 1/3 EV steps"
+msgstr "****Flash X-Sync Speed AE, 1/3 EV steps"
+
+#. Pentax specific tags / 0x020a (FlashADump)
+msgid "FlashADump"
+msgstr "****FlashADump"
+
+#. Pentax specific tags / 0x020b (FlashBDump)
+msgid "FlashBDump"
+msgstr "****FlashBDump"
+
+#. Pentax specific tags / 0x004d (FlashExposureCompensation)
+msgid "FlashExposureCompensation"
+msgstr "****FlashExposureCompensation"
+
+#. Pentax specific tags / 0x0208 (FlashInfo)
+msgid "FlashInfo"
+msgstr "****FlashInfo"
+
+#. Exif & Tiff tags / 0xa000 (FlashpixVersion)
+msgid "FlashpixVersion"
+msgstr "****FlashpixVersion"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+msgid "Fluorescent"
+msgstr "****Fluorescent"
+
+#. Pentax specific tags / 0x001d (FocalLength)
+#. Exif & Tiff tags / 0x920a (FocalLength)
+msgid "FocalLength"
+msgstr "****FocalLength"
+
+#. Exif & Tiff tags / 0xa405 (FocalLengthIn35mmFilm)
+msgid "FocalLengthIn35mmFilm"
+msgstr "****FocalLengthIn35mmFilm"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+msgid "FocalPlaneResolutionUnit"
+msgstr "****FocalPlaneResolutionUnit"
+
+#. Exif & Tiff tags / 0xa20e (FocalPlaneXResolution)
+msgid "FocalPlaneXResolution"
+msgstr "****FocalPlaneXResolution"
+
+#. Exif & Tiff tags / 0xa20f (FocalPlaneYResolution)
+msgid "FocalPlaneYResolution"
+msgstr "****FocalPlaneYResolution"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Focus"
+msgstr "****Focus"
+
+#. Pentax specific tags / 0x0010 (FocusPosition)
+msgid "FocusPosition"
+msgstr "****FocusPosition"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Food"
+msgstr "****Food"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Frame Composite"
+msgstr "****Frame Composite"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Frame Synthesis?"
+msgstr "****Frame Synthesis?"
+
+#. Pentax specific tags / 0x0029 (FrameNumber)
+msgid "FrameNumber"
+msgstr "****FrameNumber"
+
+#. Exif & Tiff tags / 0x0121 (FreeByteCounts)
+msgid "FreeByteCounts"
+msgstr "****FreeByteCounts"
+
+#. Exif & Tiff tags / 0x0120 (FreeOffsets)
+msgid "FreeOffsets"
+msgstr "****FreeOffsets"
+
+#. Pentax specific tags / 0x0009 (Size)
+msgid "Full"
+msgstr "****Full"
+
+#. Exif GPS tags / 0x0006 (GPSAltitude)
+msgid "GPSAltitude"
+msgstr "****GPSAltitude"
+
+#. Exif GPS tags / 0x0005 (GPSAltitudeRef)
+msgid "GPSAltitudeRef"
+msgstr "****GPSAltitudeRef"
+
+#. Exif GPS tags / 0x001c (GPSAreaInformation)
+msgid "GPSAreaInformation"
+msgstr "****GPSAreaInformation"
+
+#. Exif GPS tags / 0x000b (GPSDOP)
+msgid "GPSDOP"
+msgstr "****GPSDOP"
+
+#. Exif GPS tags / 0x001d (GPSDateStamp)
+msgid "GPSDateStamp"
+msgstr "****GPSDateStamp"
+
+#. Exif GPS tags / 0x0018 (GPSDestBearing)
+msgid "GPSDestBearing"
+msgstr "****GPSDestBearing"
+
+#. Exif GPS tags / 0x0017 (GPSDestBearingRef)
+msgid "GPSDestBearingRef"
+msgstr "****GPSDestBearingRef"
+
+#. Exif GPS tags / 0x001a (GPSDestDistance)
+msgid "GPSDestDistance"
+msgstr "****GPSDestDistance"
+
+#. Exif GPS tags / 0x0019 (GPSDestDistanceRef)
+msgid "GPSDestDistanceRef"
+msgstr "****GPSDestDistanceRef"
+
+#. Exif GPS tags / 0x0014 (GPSDestLatitude)
+msgid "GPSDestLatitude"
+msgstr "****GPSDestLatitude"
+
+#. Exif GPS tags / 0x0013 (GPSDestLatitudeRef)
+msgid "GPSDestLatitudeRef"
+msgstr "****GPSDestLatitudeRef"
+
+#. Exif GPS tags / 0x0016 (GPSDestLongitude)
+msgid "GPSDestLongitude"
+msgstr "****GPSDestLongitude"
+
+#. Exif GPS tags / 0x0015 (GPSDestLongitudeRef)
+msgid "GPSDestLongitudeRef"
+msgstr "****GPSDestLongitudeRef"
+
+#. Exif GPS tags / 0x001e (GPSDifferential)
+msgid "GPSDifferential"
+msgstr "****GPSDifferential"
+
+#. Exif GPS tags / 0x0011 (GPSImgDirection)
+msgid "GPSImgDirection"
+msgstr "****GPSImgDirection"
+
+#. Exif GPS tags / 0x0010 (GPSImgDirectionRef)
+msgid "GPSImgDirectionRef"
+msgstr "****GPSImgDirectionRef"
+
+#. Exif GPS tags / 0x0002 (GPSLatitude)
+msgid "GPSLatitude"
+msgstr "****GPSLatitude"
+
+#. Exif GPS tags / 0x0001 (GPSLatitudeRef)
+msgid "GPSLatitudeRef"
+msgstr "****GPSLatitudeRef"
+
+#. Exif GPS tags / 0x0004 (GPSLongitude)
+msgid "GPSLongitude"
+msgstr "****GPSLongitude"
+
+#. Exif GPS tags / 0x0003 (GPSLongitudeRef)
+msgid "GPSLongitudeRef"
+msgstr "****GPSLongitudeRef"
+
+#. Exif GPS tags / 0x0012 (GPSMapDatum)
+msgid "GPSMapDatum"
+msgstr "****GPSMapDatum"
+
+#. Exif GPS tags / 0x000a (GPSMeasureMode)
+msgid "GPSMeasureMode"
+msgstr "****GPSMeasureMode"
+
+#. Exif GPS tags / 0x001b (GPSProcessingMethod)
+msgid "GPSProcessingMethod"
+msgstr "****GPSProcessingMethod"
+
+#. Exif GPS tags / 0x0008 (GPSSatellites)
+msgid "GPSSatellites"
+msgstr "****GPSSatellites"
+
+#. Exif GPS tags / 0x000d (GPSSpeed)
+msgid "GPSSpeed"
+msgstr "****GPSSpeed"
+
+#. Exif GPS tags / 0x000c (GPSSpeedRef)
+msgid "GPSSpeedRef"
+msgstr "****GPSSpeedRef"
+
+#. Exif GPS tags / 0x0009 (GPSStatus)
+msgid "GPSStatus"
+msgstr "****GPSStatus"
+
+#. Exif GPS tags / 0x0007 (GPSTimeStamp)
+msgid "GPSTimeStamp"
+msgstr "****GPSTimeStamp"
+
+#. Exif GPS tags / 0x000f (GPSTrack)
+msgid "GPSTrack"
+msgstr "****GPSTrack"
+
+#. Exif GPS tags / 0x000e (GPSTrackRef)
+msgid "GPSTrackRef"
+msgstr "****GPSTrackRef"
+
+#. Exif GPS tags / 0x0000 (GPSVersionID)
+msgid "GPSVersionID"
+msgstr "****GPSVersionID"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "GainControl"
+msgstr "****GainControl"
+
+#. Exif & Tiff tags / 0xa500 (Gamma)
+msgid "Gamma"
+msgstr "****Gamma"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Good"
+msgstr "****Good"
+
+#. Exif & Tiff tags / 0x0123 (GrayResponseCurve)
+msgid "GrayResponseCurve"
+msgstr "****GrayResponseCurve"
+
+#. Exif & Tiff tags / 0x0122 (GrayResponseUnit)
+msgid "GrayResponseUnit"
+msgstr "****GrayResponseUnit"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Green Mode"
+msgstr "****Green Mode"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Guam"
+msgstr "****Guam"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Half-length Portrait"
+msgstr "****Half-length Portrait"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Halifax"
+msgstr "****Halifax"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Hard"
+msgstr "****Hard"
+
+#. IPTC tags / 0x0269 (Headline)
+msgid "Headline"
+msgstr "****Headline"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Helsinki"
+msgstr "****Helsinki"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Hi-speed Program"
+msgstr "****Hi-speed Program"
+
+#. Pentax specific tags / 0x0020 (Contrast)
+#. Pentax specific tags / 0x001f (Saturation)
+msgid "High"
+msgstr "****High"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "HighISONoiseReduction"
+msgstr "****HighISONoiseReduction"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Ho Chi Minh"
+msgstr "****Ho Chi Minh"
+
+#. Pentax specific tags / 0x0022 (WorldTimeLocation)
+msgid "Home town"
+msgstr "****Home town"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "HomeCityName"
+msgstr "****HomeCityName"
+
+#. Pentax specific tags / 0x0025 (HometownDST)
+msgid "HometownDST"
+msgstr "****HometownDST"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Hong Kong"
+msgstr "****Hong Kong"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Honolulu"
+msgstr "****Honolulu"
+
+#. Exif & Tiff tags / 0x013c (HostComputer)
+msgid "HostComputer"
+msgstr "****HostComputer"
+
+#. Pentax specific tags / 0x0220 (HuffmanTable)
+msgid "HuffmanTable"
+msgstr "****HuffmanTable"
+
+#. Exif & Tiff tags / 0x8773 (ICC_Profile)
+msgid "ICC_Profile"
+msgstr "****ICC_Profile"
+
+#. Pentax specific tags / 0x0014 (ISO)
+msgid "ISO"
+msgstr "****ISO"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "ISO studio tungsten"
+msgstr "****ISO studio tungsten"
+
+#. Exif & Tiff tags / 0x8827 (ISOSpeedRatings)
+msgid "ISOSpeedRatings"
+msgstr "****ISOSpeedRatings"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Illustrations"
+msgstr "****Illustrations"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+msgid "Image Orientation"
+msgstr "****Image Orientation"
+
+#. IPTC tags / 0x0282 (Image Type)
+msgid "Image Type"
+msgstr "****Image Type"
+
+#. Pentax specific tags / 0x0038 (ImageAreaOffset)
+msgid "ImageAreaOffset"
+msgstr "****ImageAreaOffset"
+
+#. Exif & Tiff tags / 0x010e (ImageDescription)
+msgid "ImageDescription"
+msgstr "****ImageDescription"
+
+#. Exif & Tiff tags / 0x9213 (ImageHistory)
+msgid "ImageHistory"
+msgstr "****ImageHistory"
+
+#. Exif & Tiff tags / 0x0101 (ImageLength)
+msgid "ImageLength"
+msgstr "****ImageLength"
+
+#. Exif & Tiff tags / 0x9211 (ImageNumber)
+msgid "ImageNumber"
+msgstr "****ImageNumber"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "ImageProcessing"
+msgstr "****ImageProcessing"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "ImageTone"
+msgstr "****ImageTone"
+
+#. Exif & Tiff tags / 0xa420 (ImageUniqueID)
+msgid "ImageUniqueID"
+msgstr "****ImageUniqueID"
+
+#. Exif & Tiff tags / 0x0100 (ImageWidth)
+msgid "ImageWidth"
+msgstr "****ImageWidth"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Infinity"
+msgstr "****Infinity"
+
+#. XMP tags / Iptc4xmpCore:CiAdrCity
+msgid "Iptc4xmpCore:CiAdrCity"
+msgstr "****Iptc4xmpCore:CiAdrCity"
+
+#. XMP tags / Iptc4xmpCore:CiAdrCtry
+msgid "Iptc4xmpCore:CiAdrCtry"
+msgstr "****Iptc4xmpCore:CiAdrCtry"
+
+#. XMP tags / Iptc4xmpCore:CiAdrExtadr
+msgid "Iptc4xmpCore:CiAdrExtadr"
+msgstr "****Iptc4xmpCore:CiAdrExtadr"
+
+#. XMP tags / Iptc4xmpCore:CiAdrPcode
+msgid "Iptc4xmpCore:CiAdrPcode"
+msgstr "****Iptc4xmpCore:CiAdrPcode"
+
+#. XMP tags / Iptc4xmpCore:CiEmailWork
+msgid "Iptc4xmpCore:CiEmailWork"
+msgstr "****Iptc4xmpCore:CiEmailWork"
+
+#. XMP tags / Iptc4xmpCore:CiTelWork
+msgid "Iptc4xmpCore:CiTelWork"
+msgstr "****Iptc4xmpCore:CiTelWork"
+
+#. XMP tags / Iptc4xmpCore:CiUrlWork
+msgid "Iptc4xmpCore:CiUrlWork"
+msgstr "****Iptc4xmpCore:CiUrlWork"
+
+#. XMP tags / Iptc4xmpCore:CountryCode
+msgid "Iptc4xmpCore:CountryCode"
+msgstr "****Iptc4xmpCore:CountryCode"
+
+#. XMP tags / Iptc4xmpCore:CreatorContactInfo
+msgid "Iptc4xmpCore:CreatorContactInfo"
+msgstr "****Iptc4xmpCore:CreatorContactInfo"
+
+#. XMP tags / Iptc4xmpCore:DateCreated
+msgid "Iptc4xmpCore:DateCreated"
+msgstr "****Iptc4xmpCore:DateCreated"
+
+#. XMP tags / Iptc4xmpCore:IntellectualGenre
+msgid "Iptc4xmpCore:IntellectualGenre"
+msgstr "****Iptc4xmpCore:IntellectualGenre"
+
+#. XMP tags / Iptc4xmpCore:Location
+msgid "Iptc4xmpCore:Location"
+msgstr "****Iptc4xmpCore:Location"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "Iptc4xmpCore:Scene"
+msgstr "****Iptc4xmpCore:Scene"
+
+#. XMP tags / Iptc4xmpCore:SubjectCode
+msgid "Iptc4xmpCore:SubjectCode"
+msgstr "****Iptc4xmpCore:SubjectCode"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Istanbul"
+msgstr "****Istanbul"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "JPEG (old style)"
+msgstr "****JPEG (old style)"
+
+#. Exif & Tiff tags / 0x0201 (JPEGInterchangeFormat)
+msgid "JPEGInterchangeFormat"
+msgstr "****JPEGInterchangeFormat"
+
+#. Exif & Tiff tags / 0x0202 (JPEGInterchangeFormatLength)
+msgid "JPEGInterchangeFormatLength"
+msgstr "****JPEGInterchangeFormatLength"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Jakarta"
+msgstr "****Jakarta"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Jeddah"
+msgstr "****Jeddah"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Jerusalem"
+msgstr "****Jerusalem"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Johannesburg"
+msgstr "****Johannesburg"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "K,M Lens"
+msgstr "****K,M Lens"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Kabul"
+msgstr "****Kabul"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Karachi"
+msgstr "****Karachi"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Kathmandu"
+msgstr "****Kathmandu"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Kelvin"
+msgstr "****Kelvin"
+
+#. IPTC tags / 0x0219 (Keywords)
+msgid "Keywords"
+msgstr "****Keywords"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Kids"
+msgstr "****Kids"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Kuala Lumpur"
+msgstr "****Kuala Lumpur"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Landscape"
+msgstr "****Landscape"
+
+#. IPTC tags / 0x0287 (Language Identifier)
+msgid "Language Identifier"
+msgstr "****Language Identifier"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Left"
+msgstr "****Left"
+
+#. Pentax specific tags / 0x0207 (LensInfo)
+msgid "LensInfo"
+msgstr "****LensInfo"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "LensType"
+msgstr "****LensType"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Light Pet"
+msgstr "****Light Pet"
+
+#. Pentax specific tags / 0x0015 (LightReading)
+msgid "LightReading"
+msgstr "****LightReading"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "LightSource"
+msgstr "****LightSource"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Lima"
+msgstr "****Lima"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "Linear Raw"
+msgstr "****Linear Raw"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Lisbon"
+msgstr "****Lisbon"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "London"
+msgstr "****London"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Los Angeles"
+msgstr "****Los Angeles"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Low"
+msgstr "****Low"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Lower-left"
+msgstr "****Lower-left"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Lower-right"
+msgstr "****Lower-right"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "M-42 or No Lens"
+msgstr "****M-42 or No Lens"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "MTF Program"
+msgstr "****MTF Program"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Macro"
+msgstr "****Macro"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Madrid"
+msgstr "****Madrid"
+
+#. Exif & Tiff tags / 0x010f (Make)
+msgid "Make"
+msgstr "****Make"
+
+#. Exif & Tiff tags / 0x927c (MakerNote)
+msgid "MakerNote"
+msgstr "****MakerNote"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Male"
+msgstr "****Male"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Manila"
+msgstr "****Manila"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000d (Focus)
+#. Pentax specific tags / 0x0001 (ShootingMode)
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Manual"
+msgstr "****Manual"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Manual (Off-Auto-Aperture)"
+msgstr "****Manual (Off-Auto-Aperture)"
+
+#. IPTC tags / 0x0714 (Max Subfile Size)
+msgid "Max Subfile Size"
+msgstr "****Max Subfile Size"
+
+#. Exif & Tiff tags / 0x9205 (MaxApertureValue)
+msgid "MaxApertureValue"
+msgstr "****MaxApertureValue"
+
+#. Exif & Tiff tags / 0x0119 (MaxSampleValue)
+msgid "MaxSampleValue"
+msgstr "****MaxSampleValue"
+
+#. IPTC tags / 0x075f (Maximum ObjectData Size)
+msgid "Maximum ObjectData Size"
+msgstr "****Maximum ObjectData Size"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Med Hard"
+msgstr "****Med Hard"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Med High"
+msgstr "****Med High"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Med Low"
+msgstr "****Med Low"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Med Soft"
+msgstr "****Med Soft"
+
+#. XMP tags / crs:ToneCurveName
+msgid "Medium Contrast"
+msgstr "****Medium Contrast"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Medium Pet"
+msgstr "****Medium Pet"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "MeteringMode"
+msgstr "****MeteringMode"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Mexico City"
+msgstr "****Mexico City"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Miami"
+msgstr "****Miami"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Mid-left"
+msgstr "****Mid-left"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Mid-right"
+msgstr "****Mid-right"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Milan"
+msgstr "****Milan"
+
+#. Exif & Tiff tags / 0x0118 (MinSampleValue)
+msgid "MinSampleValue"
+msgstr "****MinSampleValue"
+
+#. Exif & Tiff tags / 0x0110 (Model)
+msgid "Model"
+msgstr "****Model"
+
+#. IPTC tags / 0x0100 (Model Version)
+msgid "Model Version"
+msgstr "****Model Version"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Monochrome"
+msgstr "****Monochrome"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Moscow"
+msgstr "****Moscow"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+msgid "Multi Segment"
+msgstr "****Multi Segment"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Multiple Exposure"
+msgstr "****Multiple Exposure"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Museum"
+msgstr "****Museum"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "N/A"
+msgstr "****N/A"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Nairobi"
+msgstr "****Nairobi"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Natural"
+msgstr "****Natural"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Natural Skin Tone"
+msgstr "****Natural Skin Tone"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "New York"
+msgstr "****New York"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Night Scene"
+msgstr "****Night Scene"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Night Scene Portrait"
+msgstr "****Night Scene Portrait"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Night Snap"
+msgstr "****Night Snap"
+
+#. Pentax specific tags / 0x0001 (ShootingMode)
+msgid "Night-Scene"
+msgstr "****Night-Scene"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "No Flash"
+msgstr "****No Flash"
+
+#. IPTC tags / 0x0114 (File Format)
+msgid "No ObjectData"
+msgstr "****No ObjectData"
+
+#. Exif & Tiff tags / 0xa20d (Noise)
+msgid "Noise"
+msgstr "****Noise"
+
+#. Pentax specific tags / 0x0049 (NoiseReduction)
+msgid "NoiseReduction"
+msgstr "****NoiseReduction"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "None"
+msgstr "****None"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x000d (Focus)
+#. Pentax specific tags / 0x0021 (Sharpness)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Normal"
+msgstr "****Normal"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Noumea"
+msgstr "****Noumea"
+
+#. IPTC tags / 0x0204 (Object Attribute Reference)
+msgid "Object Attribute Reference"
+msgstr "****Object Attribute Reference"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "Object Cycle"
+msgstr "****Object Cycle"
+
+#. IPTC tags / 0x0205 (Object Name)
+msgid "Object Name"
+msgstr "****Object Name"
+
+#. IPTC tags / 0x0203 (Object Type Reference)
+msgid "Object Type Reference"
+msgstr "****Object Type Reference"
+
+#. IPTC tags / 0x02ca (ObjectData Preview Data)
+msgid "ObjectData Preview Data"
+msgstr "****ObjectData Preview Data"
+
+#. IPTC tags / 0x02c8 (ObjectData Preview File Format)
+msgid "ObjectData Preview File Format"
+msgstr "****ObjectData Preview File Format"
+
+#. IPTC tags / 0x02c9 (ObjectData Preview File Format Version)
+msgid "ObjectData Preview File Format Version"
+msgstr "****ObjectData Preview File Format Version"
+
+#. IPTC tags / 0x075a (ObjectData Size Announced)
+msgid "ObjectData Size Announced"
+msgstr "****ObjectData Size Announced"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+#. Pentax specific tags / 0x0069 (DynamicRangeExpansion)
+msgid "Off"
+msgstr "****Off"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+msgid "OldSubfileType"
+msgstr "****OldSubfileType"
+
+#. Pentax specific tags / 0x0069 (DynamicRangeExpansion)
+msgid "On"
+msgstr "****On"
+
+#. Exif & Tiff tags / 0x0112 (Orientation)
+msgid "Orientation"
+msgstr "****Orientation"
+
+#. IPTC tags / 0x0267 (Original Transmission Reference)
+msgid "Original Transmission Reference"
+msgstr "****Original Transmission Reference"
+
+#. IPTC tags / 0x0241 (Originating Program)
+msgid "Originating Program"
+msgstr "****Originating Program"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "PENTAX-F 28-80mm F3.5-4.5 or SIGMA AF 18-125mm F3.5-5.6 DC"
+msgstr "****PENTAX-F 28-80mm F3.5-4.5 or SIGMA AF 18-125mm F3.5-5.6 DC"
+
+#. Exif & Tiff tags / 0x011d (PageName)
+msgid "PageName"
+msgstr "****PageName"
+
+#. Exif & Tiff tags / 0x0129 (PageNumber)
+msgid "PageNumber"
+msgstr "****PageNumber"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Pago Pago"
+msgstr "****Pago Pago"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Pan Focus"
+msgstr "****Pan Focus"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Panorama"
+msgstr "****Panorama"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Paris"
+msgstr "****Paris"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Perth"
+msgstr "****Perth"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Pet"
+msgstr "****Pet"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Phnom Penh"
+msgstr "****Phnom Penh"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "PhotometricInterpretation"
+msgstr "****PhotometricInterpretation"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "PictureMode"
+msgstr "****PictureMode"
+
+#. Exif & Tiff tags / 0xa002 (PixelXDimension)
+msgid "PixelXDimension"
+msgstr "****PixelXDimension"
+
+#. Exif & Tiff tags / 0xa003 (PixelYDimension)
+msgid "PixelYDimension"
+msgstr "****PixelYDimension"
+
+#. Exif & Tiff tags / 0x011c (PlanarConfiguration)
+msgid "PlanarConfiguration"
+msgstr "****PlanarConfiguration"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x004f (ImageTone)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Portrait"
+msgstr "****Portrait"
+
+#. Exif & Tiff tags / 0x013d (Predictor)
+msgid "Predictor"
+msgstr "****Predictor"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Premium"
+msgstr "****Premium"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Preset (Fireworks?)"
+msgstr "****Preset (Fireworks?)"
+
+#. Pentax specific tags / 0x003e (PreviewImageBorders)
+msgid "PreviewImageBorders"
+msgstr "****PreviewImageBorders"
+
+#. Pentax specific tags / 0x0003 (PreviewLength)
+msgid "PreviewLength"
+msgstr "****PreviewLength"
+
+#. Pentax specific tags / 0x0004 (PreviewOffset)
+msgid "PreviewOffset"
+msgstr "****PreviewOffset"
+
+#. Pentax specific tags / 0x0002 (PreviewResolution)
+msgid "PreviewResolution"
+msgstr "****PreviewResolution"
+
+#. Exif & Tiff tags / 0x013f (PrimaryChromaticities)
+msgid "PrimaryChromaticities"
+msgstr "****PrimaryChromaticities"
+
+#. Pentax specific tags / 0x0e00 (PrintIM)
+#. Exif & Tiff tags / 0xc4a5 (PrintIM)
+msgid "PrintIM"
+msgstr "****PrintIM"
+
+#. Exif & Tiff tags / 0x000b (ProcessingSoftware)
+msgid "ProcessingSoftware"
+msgstr "****ProcessingSoftware"
+
+#. IPTC tags / 0x0132 (Product I.D.)
+msgid "Product I.D."
+msgstr "****Product I.D."
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Program"
+msgstr "****Program"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Program AE"
+msgstr "****Program AE"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Program Av Shift"
+msgstr "****Program Av Shift"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Program Tv Shift"
+msgstr "****Program Tv Shift"
+
+#. IPTC tags / 0x0246 (Program Version)
+msgid "Program Version"
+msgstr "****Program Version"
+
+#. IPTC tags / 0x025f (Province/State)
+msgid "Province/State"
+msgstr "****Province/State"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Quality"
+msgstr "****Quality"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "RGB"
+msgstr "****RGB"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "RGB Palette"
+msgstr "****RGB Palette"
+
+#. IPTC tags / 0x027d (Rasterized Caption)
+msgid "Rasterized Caption"
+msgstr "****Rasterized Caption"
+
+#. Exif & Tiff tags / 0x4746 (Rating)
+msgid "Rating"
+msgstr "****Rating"
+
+#. Exif & Tiff tags / 0x4749 (RatingPercent)
+msgid "RatingPercent"
+msgstr "****RatingPercent"
+
+#. Pentax specific tags / 0x0039 (RawImageSize)
+msgid "RawImageSize"
+msgstr "****RawImageSize"
+
+#. IPTC tags / 0x0200 (Record Version)
+msgid "Record Version"
+msgstr "****Record Version"
+
+#. Pentax specific tags / 0x001c (RedBalance)
+msgid "RedBalance"
+msgstr "****RedBalance"
+
+#. IPTC tags / 0x022f (Reference Date)
+msgid "Reference Date"
+msgstr "****Reference Date"
+
+#. IPTC tags / 0x022d (Reference Service)
+msgid "Reference Service"
+msgstr "****Reference Service"
+
+#. IPTC tags / 0x0232 (Reference number)
+msgid "Reference number"
+msgstr "****Reference number"
+
+#. Exif & Tiff tags / 0x0214 (ReferenceBlackWhite)
+msgid "ReferenceBlackWhite"
+msgstr "****ReferenceBlackWhite"
+
+#. Exif & Tiff tags / 0xa004 (RelatedSoundFile)
+msgid "RelatedSoundFile"
+msgstr "****RelatedSoundFile"
+
+#. IPTC tags / 0x021e (Release Date)
+msgid "Release Date"
+msgstr "****Release Date"
+
+#. IPTC tags / 0x0223 (Release Time)
+msgid "Release Time"
+msgstr "****Release Time"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Remote Control"
+msgstr "****Remote Control"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Remote Control (3 sec)"
+msgstr "****Remote Control (3 sec)"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Report"
+msgstr "****Report"
+
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+msgid "ResolutionUnit"
+msgstr "****ResolutionUnit"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Right"
+msgstr "****Right"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Rio de Janeiro"
+msgstr "****Rio de Janeiro"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Rome"
+msgstr "****Rome"
+
+#. Exif & Tiff tags / 0x0116 (RowsPerStrip)
+msgid "RowsPerStrip"
+msgstr "****RowsPerStrip"
+
+#. Exif & Tiff tags / 0x0115 (SamplesPerPixel)
+msgid "SamplesPerPixel"
+msgstr "****SamplesPerPixel"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "San Fransisco"
+msgstr "****San Fransisco"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Santiago"
+msgstr "****Santiago"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Sao Paulo"
+msgstr "****Sao Paulo"
+
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. Pentax specific tags / 0x001f (Saturation)
+msgid "Saturation"
+msgstr "****Saturation"
+
+#. Pentax specific tags / 0x021b (SaturationInfo)
+msgid "SaturationInfo"
+msgstr "****SaturationInfo"
+
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "SceneCaptureType"
+msgstr "****SceneCaptureType"
+
+#. Exif & Tiff tags / 0xa301 (SceneType)
+msgid "SceneType"
+msgstr "****SceneType"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "SecurityClassification"
+msgstr "****SecurityClassification"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Self Portrait"
+msgstr "****Self Portrait"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Self-timer (12 sec)"
+msgstr "****Self-timer (12 sec)"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Self-timer (2 sec)"
+msgstr "****Self-timer (2 sec)"
+
+#. Exif & Tiff tags / 0x882a (SelfTimerMode)
+msgid "SelfTimerMode"
+msgstr "****SelfTimerMode"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "SensingMethod"
+msgstr "****SensingMethod"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sensitivity Priority AE, 1/2 EV steps"
+msgstr "****Sensitivity Priority AE, 1/2 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sensitivity Priority AE, 1/3 EV steps"
+msgstr "****Sensitivity Priority AE, 1/3 EV steps"
+
+#. Pentax specific tags / 0x0040 (SensitivityAdjust)
+msgid "SensitivityAdjust"
+msgstr "****SensitivityAdjust"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Seoul"
+msgstr "****Seoul"
+
+#. Pentax specific tags / 0x0229 (SerialNumber)
+msgid "SerialNumber"
+msgstr "****SerialNumber"
+
+#. IPTC tags / 0x011e (Service Identifier)
+msgid "Service Identifier"
+msgstr "****Service Identifier"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+msgid "Shade"
+msgstr "****Shade"
+
+#. Pentax specific tags / 0x005c (ShakeReduction)
+msgid "ShakeReduction"
+msgstr "****ShakeReduction"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Shanghai"
+msgstr "****Shanghai"
+
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Sharpness"
+msgstr "****Sharpness"
+
+#. Pentax specific tags / 0x0001 (ShootingMode)
+msgid "ShootingMode"
+msgstr "****ShootingMode"
+
+#. Pentax specific tags / 0x0205 (ShotInfo)
+msgid "ShotInfo"
+msgstr "****ShotInfo"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Shutter & Aperture Priority AE, 1/2 EV steps"
+msgstr "****Shutter & Aperture Priority AE, 1/2 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Shutter & Aperture Priority AE, 1/3 EV steps"
+msgstr "****Shutter & Aperture Priority AE, 1/3 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Shutter Priority"
+msgstr "****Shutter Priority"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Shutter Speed Priority"
+msgstr "****Shutter Speed Priority"
+
+#. Pentax specific tags / 0x005d (ShutterCount)
+msgid "ShutterCount"
+msgstr "****ShutterCount"
+
+#. Exif & Tiff tags / 0x9201 (ShutterSpeedValue)
+msgid "ShutterSpeedValue"
+msgstr "****ShutterSpeedValue"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "Sigma lens"
+msgstr "****Sigma lens"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Singapore"
+msgstr "****Singapore"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Single-frame;No timer;Shutter button;Single exposure"
+msgstr "****Single-frame;No timer;Shutter button;Single exposure"
+
+#. Pentax specific tags / 0x0009 (Size)
+msgid "Size"
+msgstr "****Size"
+
+#. IPTC tags / 0x070a (Size Mode)
+msgid "Size Mode"
+msgstr "****Size Mode"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Soft"
+msgstr "****Soft"
+
+#. Exif & Tiff tags / 0x0131 (Software)
+msgid "Software"
+msgstr "****Software"
+
+#. IPTC tags / 0x0273 (Source)
+msgid "Source"
+msgstr "****Source"
+
+#. Exif & Tiff tags / 0xa20c (SpatialFrequencyResponse)
+msgid "SpatialFrequencyResponse"
+msgstr "****SpatialFrequencyResponse"
+
+#. IPTC tags / 0x0228 (Special Instructions)
+msgid "Special Instructions"
+msgstr "****Special Instructions"
+
+#. Exif & Tiff tags / 0x8824 (SpectralSensitivity)
+msgid "SpectralSensitivity"
+msgstr "****SpectralSensitivity"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sport"
+msgstr "****Sport"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+msgid "Spot"
+msgstr "****Spot"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Stage Lighting"
+msgstr "****Stage Lighting"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Standard"
+msgstr "****Standard"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Stockholm"
+msgstr "****Stockholm"
+
+#. Exif & Tiff tags / 0x0117 (StripByteCounts)
+msgid "StripByteCounts"
+msgstr "****StripByteCounts"
+
+#. Exif & Tiff tags / 0x0111 (StripOffsets)
+msgid "StripOffsets"
+msgstr "****StripOffsets"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "Strong"
+msgstr "****Strong"
+
+#. XMP tags / crs:ToneCurveName
+msgid "Strong Contrast"
+msgstr "****Strong Contrast"
+
+#. IPTC tags / 0x080a (Subfile)
+msgid "Subfile"
+msgstr "****Subfile"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "SubfileType"
+msgstr "****SubfileType"
+
+#. IPTC tags / 0x020c (Subject Reference)
+msgid "Subject Reference"
+msgstr "****Subject Reference"
+
+#. Exif & Tiff tags / 0x9214 (SubjectArea)
+msgid "SubjectArea"
+msgstr "****SubjectArea"
+
+#. Exif & Tiff tags / 0x9206 (SubjectDistance)
+msgid "SubjectDistance"
+msgstr "****SubjectDistance"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "SubjectDistanceRange"
+msgstr "****SubjectDistanceRange"
+
+#. Exif & Tiff tags / 0xa214 (SubjectLocation)
+msgid "SubjectLocation"
+msgstr "****SubjectLocation"
+
+#. IPTC tags / 0x025c (Sublocation)
+msgid "Sublocation"
+msgstr "****Sublocation"
+
+#. Exif & Tiff tags / 0x9290 (SubsecTime)
+msgid "SubsecTime"
+msgstr "****SubsecTime"
+
+#. Exif & Tiff tags / 0x9292 (SubsecTimeDigitized)
+msgid "SubsecTimeDigitized"
+msgstr "****SubsecTimeDigitized"
+
+#. Exif & Tiff tags / 0x9291 (SubsecTimeOriginal)
+msgid "SubsecTimeOriginal"
+msgstr "****SubsecTimeOriginal"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sunset"
+msgstr "****Sunset"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Super Macro"
+msgstr "****Super Macro"
+
+#. IPTC tags / 0x0214 (Supplemental Category)
+msgid "Supplemental Category"
+msgstr "****Supplemental Category"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Surf & Snow"
+msgstr "****Surf & Snow"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Sydney"
+msgstr "****Sydney"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Synchro Sound Record"
+msgstr "****Synchro Sound Record"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Taipei"
+msgstr "****Taipei"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "Tamron 35-90mm F4 AF or various SIGMA models"
+msgstr "****Tamron 35-90mm F4 AF or various SIGMA models"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Tehran"
+msgstr "****Tehran"
+
+#. Pentax specific tags / 0x0047 (Temperature)
+msgid "Temperature"
+msgstr "****Temperature"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Text"
+msgstr "****Text"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "Thresholding"
+msgstr "****Thresholding"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "Thunderscan"
+msgstr "****Thunderscan"
+
+#. Pentax specific tags / 0x0007 (Time)
+msgid "Time"
+msgstr "****Time"
+
+#. IPTC tags / 0x023c (Time Created)
+msgid "Time Created"
+msgstr "****Time Created"
+
+#. IPTC tags / 0x0150 (Time Sent)
+msgid "Time Sent"
+msgstr "****Time Sent"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Tokyo"
+msgstr "****Tokyo"
+
+#. Pentax specific tags / 0x0402 (ToneCurve)
+msgid "ToneCurve"
+msgstr "****ToneCurve"
+
+#. Pentax specific tags / 0x0403 (ToneCurves)
+msgid "ToneCurves"
+msgstr "****ToneCurves"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Top"
+msgstr "****Top"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Top-center"
+msgstr "****Top-center"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Top-left"
+msgstr "****Top-left"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Top-right"
+msgstr "****Top-right"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Toronto"
+msgstr "****Toronto"
+
+#. Exif & Tiff tags / 0x012d (TransferFunction)
+msgid "TransferFunction"
+msgstr "****TransferFunction"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "Transparency Mask"
+msgstr "****Transparency Mask"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+msgid "Tungsten"
+msgstr "****Tungsten"
+
+#. IPTC tags / 0x0164 (UNO)
+msgid "UNO"
+msgstr "****UNO"
+
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "Uncalibrated"
+msgstr "****Uncalibrated"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Underwater"
+msgstr "****Underwater"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Unknown"
+msgstr "****Unknown"
+
+#. Pentax specific tags / 0x03ff (UnknownInfo)
+msgid "UnknownInfo"
+msgstr "****UnknownInfo"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Unprocessed"
+msgstr "****Unprocessed"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Upper-left"
+msgstr "****Upper-left"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Upper-right"
+msgstr "****Upper-right"
+
+#. IPTC tags / 0x020a (Urgency)
+msgid "Urgency"
+msgstr "****Urgency"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "User Selected"
+msgstr "****User Selected"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "User-Selected"
+msgstr "****User-Selected"
+
+#. Exif & Tiff tags / 0x9286 (UserComment)
+msgid "UserComment"
+msgstr "****UserComment"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Vancouver"
+msgstr "****Vancouver"
+
+#. Pentax specific tags / 0x0000 (Version)
+msgid "Version"
+msgstr "****Version"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Very Hard"
+msgstr "****Very Hard"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Very High"
+msgstr "****Very High"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Very Low"
+msgstr "****Very Low"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Very Soft"
+msgstr "****Very Soft"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Vibrant"
+msgstr "****Vibrant"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Video"
+msgstr "****Video"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Video (24 fps)"
+msgstr "****Video (24 fps)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Video (30 fps)"
+msgstr "****Video (30 fps)"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Vientiane"
+msgstr "****Vientiane"
+
+#. Pentax specific tags / 0x020f (WB_RGGBLevelsCloudy)
+msgid "WB_RGGBLevelsCloudy"
+msgstr "****WB_RGGBLevelsCloudy"
+
+#. Pentax specific tags / 0x020d (WB_RGGBLevelsDaylight)
+msgid "WB_RGGBLevelsDaylight"
+msgstr "****WB_RGGBLevelsDaylight"
+
+#. Pentax specific tags / 0x0214 (WB_RGGBLevelsFlash)
+msgid "WB_RGGBLevelsFlash"
+msgstr "****WB_RGGBLevelsFlash"
+
+#. Pentax specific tags / 0x0211 (WB_RGGBLevelsFluorescentD)
+msgid "WB_RGGBLevelsFluorescentD"
+msgstr "****WB_RGGBLevelsFluorescentD"
+
+#. Pentax specific tags / 0x0212 (WB_RGGBLevelsFluorescentN)
+msgid "WB_RGGBLevelsFluorescentN"
+msgstr "****WB_RGGBLevelsFluorescentN"
+
+#. Pentax specific tags / 0x0213 (WB_RGGBLevelsFluorescentW)
+msgid "WB_RGGBLevelsFluorescentW"
+msgstr "****WB_RGGBLevelsFluorescentW"
+
+#. Pentax specific tags / 0x020e (WB_RGGBLevelsShade)
+msgid "WB_RGGBLevelsShade"
+msgstr "****WB_RGGBLevelsShade"
+
+#. Pentax specific tags / 0x0210 (WB_RGGBLevelsTungsten)
+msgid "WB_RGGBLevelsTungsten"
+msgstr "****WB_RGGBLevelsTungsten"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "Weak"
+msgstr "****Weak"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "Weakest"
+msgstr "****Weakest"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Wellington"
+msgstr "****Wellington"
+
+#. Exif & Tiff tags / 0xa403 (Balance)
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Balance"
+msgstr "****Balance"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "BalanceMode"
+msgstr "****BalanceMode"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "WhiteFluorescent"
+msgstr "****WhiteFluorescent"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "WhiteIsZero"
+msgstr "****WhiteIsZero"
+
+#. Exif & Tiff tags / 0x013e (WhitePoint)
+#. Pentax specific tags / 0x0201 (WhitePoint)
+msgid "WhitePoint"
+msgstr "****WhitePoint"
+
+#. Pentax specific tags / 0x0022 (WorldTimeLocation)
+msgid "WorldTimeLocation"
+msgstr "****WorldTimeLocation"
+
+#. IPTC tags / 0x027a (Writer/Editor)
+msgid "Writer/Editor"
+msgstr "****Writer/Editor"
+
+#. Exif & Tiff tags / 0x9c9d (XPAuthor)
+msgid "XPAuthor"
+msgstr "****XPAuthor"
+
+#. Exif & Tiff tags / 0x9c9c (XPComment)
+msgid "XPComment"
+msgstr "****XPComment"
+
+#. Exif & Tiff tags / 0x9c9e (XPKeywords)
+msgid "XPKeywords"
+msgstr "****XPKeywords"
+
+#. Exif & Tiff tags / 0x9c9f (XPSubject)
+msgid "XPSubject"
+msgstr "****XPSubject"
+
+#. Exif & Tiff tags / 0x9c9b (XPTitle)
+msgid "XPTitle"
+msgstr "****XPTitle"
+
+#. Exif & Tiff tags / 0x011e (XPosition)
+msgid "XPosition"
+msgstr "****XPosition"
+
+#. Exif & Tiff tags / 0x011a (XResolution)
+msgid "XResolution"
+msgstr "****XResolution"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "YCbCr"
+msgstr "****YCbCr"
+
+#. Exif & Tiff tags / 0x0211 (YCbCrCoefficients)
+msgid "YCbCrCoefficients"
+msgstr "****YCbCrCoefficients"
+
+#. Exif & Tiff tags / 0x0213 (YCbCrPositioning)
+msgid "YCbCrPositioning"
+msgstr "****YCbCrPositioning"
+
+#. Exif & Tiff tags / 0x0212 (YCbCrSubSampling)
+msgid "YCbCrSubSampling"
+msgstr "****YCbCrSubSampling"
+
+#. Exif & Tiff tags / 0x011f (YPosition)
+msgid "YPosition"
+msgstr "****YPosition"
+
+#. Exif & Tiff tags / 0x011b (YResolution)
+msgid "YResolution"
+msgstr "****YResolution"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Yangon"
+msgstr "****Yangon"
+
+#. Exif & Tiff tags / 0xa301 (SceneType)
+msgid "a directly photographed image"
+msgstr "****a directly photographed image"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "action"
+msgstr "****action"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "action program"
+msgstr "****action program"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "aerial view"
+msgstr "****aerial view"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "aperture priority"
+msgstr "****aperture priority"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "auto bracket"
+msgstr "****auto bracket"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "auto exposure"
+msgstr "****auto exposure"
+
+#. Exif & Tiff tags / 0xa403 (Balance)
+msgid "auto white balance"
+msgstr "****auto white balance"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, did not fire"
+msgstr "****auto, did not fire"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, did not fire, red-eye reduction"
+msgstr "****auto, did not fire, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired"
+msgstr "****auto, fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, red-eye reduction"
+msgstr "****auto, fired, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, red-eye reduction, return detected"
+msgstr "****auto, fired, red-eye reduction, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, red-eye reduction, return not detected"
+msgstr "****auto, fired, red-eye reduction, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, return detected"
+msgstr "****auto, fired, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, return not detected"
+msgstr "****auto, fired, return not detected"
+
+#. XMP tags / aux:Lens
+msgid "aux:Lens"
+msgstr "****aux:Lens"
+
+#. XMP tags / aux:SerialNumber
+msgid "aux:SerialNumber"
+msgstr "****aux:SerialNumber"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "average"
+msgstr "****average"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "both"
+msgstr "****both"
+
+#. Exif & Tiff tags / 0x0213 (YCbCrPositioning)
+msgid "centered"
+msgstr "****centered"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+#. XMP tags / crs:CropUnits
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+msgid "centimeters"
+msgstr "****centimeters"
+
+#. Exif & Tiff tags / 0x011c (PlanarConfiguration)
+msgid "chunky"
+msgstr "****chunky"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "close"
+msgstr "****close"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "close-up"
+msgstr "****close-up"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "cloudy weather"
+msgstr "****cloudy weather"
+
+#. Exif & Tiff tags / 0x0213 (YCbCrPositioning)
+msgid "co-sited"
+msgstr "****co-sited"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "color sequential area sensor"
+msgstr "****color sequential area sensor"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "color sequential linear sensor"
+msgstr "****color sequential linear sensor"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "confidential"
+msgstr "****confidential"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "cool white fluorescent (W 3900 - 4500K)"
+msgstr "****cool white fluorescent (W 3900 - 4500K)"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "couple"
+msgstr "****couple"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "creative program"
+msgstr "****creative program"
+
+#. XMP tags / crs:AutoBrightness
+msgid "crs:AutoBrightness"
+msgstr "****crs:AutoBrightness"
+
+#. XMP tags / crs:AutoContrast
+msgid "crs:AutoContrast"
+msgstr "****crs:AutoContrast"
+
+#. XMP tags / crs:AutoExposure
+msgid "crs:AutoExposure"
+msgstr "****crs:AutoExposure"
+
+#. XMP tags / crs:AutoShadows
+msgid "crs:AutoShadows"
+msgstr "****crs:AutoShadows"
+
+#. XMP tags / crs:BlueHue
+msgid "crs:BlueHue"
+msgstr "****crs:BlueHue"
+
+#. XMP tags / crs:BlueSaturation
+msgid "crs:BlueSaturation"
+msgstr "****crs:BlueSaturation"
+
+#. XMP tags / crs:Brightness
+msgid "crs:Brightness"
+msgstr "****crs:Brightness"
+
+#. XMP tags / crs:CameraProfile
+msgid "crs:CameraProfile"
+msgstr "****crs:CameraProfile"
+
+#. XMP tags / crs:ChromaticAberrationB
+msgid "crs:ChromaticAberrationB"
+msgstr "****crs:ChromaticAberrationB"
+
+#. XMP tags / crs:ChromaticAberrationR
+msgid "crs:ChromaticAberrationR"
+msgstr "****crs:ChromaticAberrationR"
+
+#. XMP tags / crs:ColorNoiseReduction
+msgid "crs:ColorNoiseReduction"
+msgstr "****crs:ColorNoiseReduction"
+
+#. XMP tags / crs:Contrast
+msgid "crs:Contrast"
+msgstr "****crs:Contrast"
+
+#. XMP tags / crs:CropAngle
+msgid "crs:CropAngle"
+msgstr "****crs:CropAngle"
+
+#. XMP tags / crs:CropBottom
+msgid "crs:CropBottom"
+msgstr "****crs:CropBottom"
+
+#. XMP tags / crs:CropHeight
+msgid "crs:CropHeight"
+msgstr "****crs:CropHeight"
+
+#. XMP tags / crs:CropLeft
+msgid "crs:CropLeft"
+msgstr "****crs:CropLeft"
+
+#. XMP tags / crs:CropRight
+msgid "crs:CropRight"
+msgstr "****crs:CropRight"
+
+#. XMP tags / crs:CropTop
+msgid "crs:CropTop"
+msgstr "****crs:CropTop"
+
+#. XMP tags / crs:CropUnits
+msgid "crs:CropUnits"
+msgstr "****crs:CropUnits"
+
+#. XMP tags / crs:CropWidth
+msgid "crs:CropWidth"
+msgstr "****crs:CropWidth"
+
+#. XMP tags / crs:Exposure
+msgid "crs:Exposure"
+msgstr "****crs:Exposure"
+
+#. XMP tags / crs:GreenHue
+msgid "crs:GreenHue"
+msgstr "****crs:GreenHue"
+
+#. XMP tags / crs:GreenSaturation
+msgid "crs:GreenSaturation"
+msgstr "****crs:GreenSaturation"
+
+#. XMP tags / crs:HasCrop
+msgid "crs:HasCrop"
+msgstr "****crs:HasCrop"
+
+#. XMP tags / crs:HasSettings
+msgid "crs:HasSettings"
+msgstr "****crs:HasSettings"
+
+#. XMP tags / crs:LuminanceSmoothing
+msgid "crs:LuminanceSmoothing"
+msgstr "****crs:LuminanceSmoothing"
+
+#. XMP tags / crs:RawFileName
+msgid "crs:RawFileName"
+msgstr "****crs:RawFileName"
+
+#. XMP tags / crs:RedHue
+msgid "crs:RedHue"
+msgstr "****crs:RedHue"
+
+#. XMP tags / crs:RedSaturation
+msgid "crs:RedSaturation"
+msgstr "****crs:RedSaturation"
+
+#. XMP tags / crs:Saturation
+msgid "crs:Saturation"
+msgstr "****crs:Saturation"
+
+#. XMP tags / crs:ShadowTint
+msgid "crs:ShadowTint"
+msgstr "****crs:ShadowTint"
+
+#. XMP tags / crs:Shadows
+msgid "crs:Shadows"
+msgstr "****crs:Shadows"
+
+#. XMP tags / crs:Sharpness
+msgid "crs:Sharpness"
+msgstr "****crs:Sharpness"
+
+#. XMP tags / crs:Temperature
+msgid "crs:Temperature"
+msgstr "****crs:Temperature"
+
+#. XMP tags / crs:Tint
+msgid "crs:Tint"
+msgstr "****crs:Tint"
+
+#. XMP tags / crs:ToneCurve
+msgid "crs:ToneCurve"
+msgstr "****crs:ToneCurve"
+
+#. XMP tags / crs:ToneCurveName
+msgid "crs:ToneCurveName"
+msgstr "****crs:ToneCurveName"
+
+#. XMP tags / crs:Version
+msgid "crs:Version"
+msgstr "****crs:Version"
+
+#. XMP tags / crs:VignetteAmount
+msgid "crs:VignetteAmount"
+msgstr "****crs:VignetteAmount"
+
+#. XMP tags / crs:VignetteMidpoint
+msgid "crs:VignetteMidpoint"
+msgstr "****crs:VignetteMidpoint"
+
+#. XMP tags / crs:Balance
+msgid "crs:Balance"
+msgstr "****crs:Balance"
+
+#. Exif & Tiff tags / 0xa401 (CustomRendered)
+msgid "custom process"
+msgstr "****custom process"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "day white fluorescent (N 4600 - 5400K)"
+msgstr "****day white fluorescent (N 4600 - 5400K)"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "daylight"
+msgstr "****daylight"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "daylight fluorescent (D 5700 - 7100K)"
+msgstr "****daylight fluorescent (D 5700 - 7100K)"
+
+#. XMP tags / dc:Type
+msgid "dc:Type"
+msgstr "****dc:Type"
+
+#. XMP tags / dc:contributor
+msgid "dc:contributor"
+msgstr "****dc:contributor"
+
+#. XMP tags / dc:coverage
+msgid "dc:coverage"
+msgstr "****dc:coverage"
+
+#. XMP tags / dc:creator
+msgid "dc:creator"
+msgstr "****dc:creator"
+
+#. XMP tags / dc:date
+msgid "dc:date"
+msgstr "****dc:date"
+
+#. XMP tags / dc:description
+msgid "dc:description"
+msgstr "****dc:description"
+
+#. XMP tags / dc:format
+msgid "dc:format"
+msgstr "****dc:format"
+
+#. XMP tags / dc:identifier
+msgid "dc:identifier"
+msgstr "****dc:identifier"
+
+#. XMP tags / dc:language
+msgid "dc:language"
+msgstr "****dc:language"
+
+#. XMP tags / dc:publisher
+msgid "dc:publisher"
+msgstr "****dc:publisher"
+
+#. XMP tags / dc:relation
+msgid "dc:relation"
+msgstr "****dc:relation"
+
+#. XMP tags / dc:rights
+msgid "dc:rights"
+msgstr "****dc:rights"
+
+#. XMP tags / dc:source
+msgid "dc:source"
+msgstr "****dc:source"
+
+#. XMP tags / dc:subject
+msgid "dc:subject"
+msgstr "****dc:subject"
+
+#. XMP tags / dc:title
+msgid "dc:title"
+msgstr "****dc:title"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "distant"
+msgstr "****distant"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "evening"
+msgstr "****evening"
+
+#. Exif & Tiff tags / 0xa20b (exif)
+msgid "exif"
+msgstr "****exif"
+
+#. XMP tags / exif:ApertureValue
+msgid "exif:ApertureValue"
+msgstr "****exif:ApertureValue"
+
+#. XMP tags / exif:BrightnessValue
+msgid "exif:BrightnessValue"
+msgstr "****exif:BrightnessValue"
+
+#. XMP tags / exif:CFAPattern
+msgid "exif:CFAPattern"
+msgstr "****exif:CFAPattern"
+
+#. XMP tags / exif:ColorSpace
+msgid "exif:ColorSpace"
+msgstr "****exif:ColorSpace"
+
+#. XMP tags / exif:ComponentsConfiguration
+msgid "exif:ComponentsConfiguration"
+msgstr "****exif:ComponentsConfiguration"
+
+#. XMP tags / exif:CompressedBitsPerPixel
+msgid "exif:CompressedBitsPerPixel"
+msgstr "****exif:CompressedBitsPerPixel"
+
+#. XMP tags / exif:Contrast
+msgid "exif:Contrast"
+msgstr "****exif:Contrast"
+
+#. XMP tags / exif:CustomRendered
+msgid "exif:CustomRendered"
+msgstr "****exif:CustomRendered"
+
+#. XMP tags / exif:DateTimeDigitized
+msgid "exif:DateTimeDigitized"
+msgstr "****exif:DateTimeDigitized"
+
+#. XMP tags / exif:DateTimeOriginal
+msgid "exif:DateTimeOriginal"
+msgstr "****exif:DateTimeOriginal"
+
+#. XMP tags / exif:DeviceSettingDescription
+msgid "exif:DeviceSettingDescription"
+msgstr "****exif:DeviceSettingDescription"
+
+#. XMP tags / exif:DigitalZoomRatio
+msgid "exif:DigitalZoomRatio"
+msgstr "****exif:DigitalZoomRatio"
+
+#. XMP tags / exif:ExifVersion
+msgid "exif:ExifVersion"
+msgstr "****exif:ExifVersion"
+
+#. XMP tags / exif:ExposureBiasValue
+msgid "exif:ExposureBiasValue"
+msgstr "****exif:ExposureBiasValue"
+
+#. XMP tags / exif:ExposureIndex
+msgid "exif:ExposureIndex"
+msgstr "****exif:ExposureIndex"
+
+#. XMP tags / exif:ExposureMode
+msgid "exif:ExposureMode"
+msgstr "****exif:ExposureMode"
+
+#. XMP tags / exif:ExposureProgram
+msgid "exif:ExposureProgram"
+msgstr "****exif:ExposureProgram"
+
+#. XMP tags / exif:ExposureTime
+msgid "exif:ExposureTime"
+msgstr "****exif:ExposureTime"
+
+#. XMP tags / exif:FNumber
+msgid "exif:FNumber"
+msgstr "****exif:FNumber"
+
+#. XMP tags / exif:FileSource
+msgid "exif:FileSource"
+msgstr "****exif:FileSource"
+
+#. XMP tags / exif:Flash
+msgid "exif:Flash"
+msgstr "****exif:Flash"
+
+#. XMP tags / exif:FlashEnergy
+msgid "exif:FlashEnergy"
+msgstr "****exif:FlashEnergy"
+
+#. XMP tags / exif:FlashpixVersion
+msgid "exif:FlashpixVersion"
+msgstr "****exif:FlashpixVersion"
+
+#. XMP tags / exif:FocalLength
+msgid "exif:FocalLength"
+msgstr "****exif:FocalLength"
+
+#. XMP tags / exif:FocalLengthIn35mmFilm
+msgid "exif:FocalLengthIn35mmFilm"
+msgstr "****exif:FocalLengthIn35mmFilm"
+
+#. XMP tags / exif:FocalPlaneResolutionUnit
+msgid "exif:FocalPlaneResolutionUnit"
+msgstr "****exif:FocalPlaneResolutionUnit"
+
+#. XMP tags / exif:FocalPlaneXResolution
+msgid "exif:FocalPlaneXResolution"
+msgstr "****exif:FocalPlaneXResolution"
+
+#. XMP tags / exif:FocalPlaneYResolution
+msgid "exif:FocalPlaneYResolution"
+msgstr "****exif:FocalPlaneYResolution"
+
+#. XMP tags / exif:GPSAltitude
+msgid "exif:GPSAltitude"
+msgstr "****exif:GPSAltitude"
+
+#. XMP tags / exif:GPSAltitudeRef
+msgid "exif:GPSAltitudeRef"
+msgstr "****exif:GPSAltitudeRef"
+
+#. XMP tags / exif:GPSAreaInformation
+msgid "exif:GPSAreaInformation"
+msgstr "****exif:GPSAreaInformation"
+
+#. XMP tags / exif:GPSDOP
+msgid "exif:GPSDOP"
+msgstr "****exif:GPSDOP"
+
+#. XMP tags / exif:GPSDestBearing
+msgid "exif:GPSDestBearing"
+msgstr "****exif:GPSDestBearing"
+
+#. XMP tags / exif:GPSDestBearingRef
+msgid "exif:GPSDestBearingRef"
+msgstr "****exif:GPSDestBearingRef"
+
+#. XMP tags / exif:GPSDestDistance
+msgid "exif:GPSDestDistance"
+msgstr "****exif:GPSDestDistance"
+
+#. XMP tags / exif:GPSDestDistanceRef
+msgid "exif:GPSDestDistanceRef"
+msgstr "****exif:GPSDestDistanceRef"
+
+#. XMP tags / exif:GPSDestLatitude
+msgid "exif:GPSDestLatitude"
+msgstr "****exif:GPSDestLatitude"
+
+#. XMP tags / exif:GPSDestLongitude
+msgid "exif:GPSDestLongitude"
+msgstr "****exif:GPSDestLongitude"
+
+#. XMP tags / exif:GPSDifferential
+msgid "exif:GPSDifferential"
+msgstr "****exif:GPSDifferential"
+
+#. XMP tags / exif:GPSImgDirection
+msgid "exif:GPSImgDirection"
+msgstr "****exif:GPSImgDirection"
+
+#. XMP tags / exif:GPSImgDirectionRef
+msgid "exif:GPSImgDirectionRef"
+msgstr "****exif:GPSImgDirectionRef"
+
+#. XMP tags / exif:GPSLatitude
+msgid "exif:GPSLatitude"
+msgstr "****exif:GPSLatitude"
+
+#. XMP tags / exif:GPSLongitude
+msgid "exif:GPSLongitude"
+msgstr "****exif:GPSLongitude"
+
+#. XMP tags / exif:GPSMapDatum
+msgid "exif:GPSMapDatum"
+msgstr "****exif:GPSMapDatum"
+
+#. XMP tags / exif:GPSMeasureMode
+msgid "exif:GPSMeasureMode"
+msgstr "****exif:GPSMeasureMode"
+
+#. XMP tags / exif:GPSProcessingMethod
+msgid "exif:GPSProcessingMethod"
+msgstr "****exif:GPSProcessingMethod"
+
+#. XMP tags / exif:GPSSatellites
+msgid "exif:GPSSatellites"
+msgstr "****exif:GPSSatellites"
+
+#. XMP tags / exif:GPSSpeed
+msgid "exif:GPSSpeed"
+msgstr "****exif:GPSSpeed"
+
+#. XMP tags / exif:GPSSpeedRef
+msgid "exif:GPSSpeedRef"
+msgstr "****exif:GPSSpeedRef"
+
+#. XMP tags / exif:GPSStatus
+msgid "exif:GPSStatus"
+msgstr "****exif:GPSStatus"
+
+#. XMP tags / exif:GPSTimeStamp
+msgid "exif:GPSTimeStamp"
+msgstr "****exif:GPSTimeStamp"
+
+#. XMP tags / exif:GPSTrack
+msgid "exif:GPSTrack"
+msgstr "****exif:GPSTrack"
+
+#. XMP tags / exif:GPSTrackRef
+msgid "exif:GPSTrackRef"
+msgstr "****exif:GPSTrackRef"
+
+#. XMP tags / exif:GPSVersionID
+msgid "exif:GPSVersionID"
+msgstr "****exif:GPSVersionID"
+
+#. XMP tags / exif:GainControl
+msgid "exif:GainControl"
+msgstr "****exif:GainControl"
+
+#. XMP tags / exif:ISOSpeedRatings
+msgid "exif:ISOSpeedRatings"
+msgstr "****exif:ISOSpeedRatings"
+
+#. XMP tags / exif:ImageUniqueID
+msgid "exif:ImageUniqueID"
+msgstr "****exif:ImageUniqueID"
+
+#. XMP tags / exif:LightSource
+msgid "exif:LightSource"
+msgstr "****exif:LightSource"
+
+#. XMP tags / exif:MaxApertureValue
+msgid "exif:MaxApertureValue"
+msgstr "****exif:MaxApertureValue"
+
+#. XMP tags / exif:MeteringMode
+msgid "exif:MeteringMode"
+msgstr "****exif:MeteringMode"
+
+#. XMP tags / exif:OECF
+msgid "exif:OECF"
+msgstr "****exif:OECF"
+
+#. XMP tags / exif:PixelXDimension
+msgid "exif:PixelXDimension"
+msgstr "****exif:PixelXDimension"
+
+#. XMP tags / exif:PixelYDimension
+msgid "exif:PixelYDimension"
+msgstr "****exif:PixelYDimension"
+
+#. XMP tags / exif:RelatedSoundFile
+msgid "exif:RelatedSoundFile"
+msgstr "****exif:RelatedSoundFile"
+
+#. XMP tags / exif:Saturation
+msgid "exif:Saturation"
+msgstr "****exif:Saturation"
+
+#. XMP tags / exif:SceneCaptureType
+msgid "exif:SceneCaptureType"
+msgstr "****exif:SceneCaptureType"
+
+#. XMP tags / exif:SceneType
+msgid "exif:SceneType"
+msgstr "****exif:SceneType"
+
+#. XMP tags / exif:SensingMethod
+msgid "exif:SensingMethod"
+msgstr "****exif:SensingMethod"
+
+#. XMP tags / exif:Sharpness
+msgid "exif:Sharpness"
+msgstr "****exif:Sharpness"
+
+#. XMP tags / exif:ShutterSpeedValue
+msgid "exif:ShutterSpeedValue"
+msgstr "****exif:ShutterSpeedValue"
+
+#. XMP tags / exif:SpatialFrequencyResponse
+msgid "exif:SpatialFrequencyResponse"
+msgstr "****exif:SpatialFrequencyResponse"
+
+#. XMP tags / exif:SpectralSensitivity
+msgid "exif:SpectralSensitivity"
+msgstr "****exif:SpectralSensitivity"
+
+#. XMP tags / exif:SubjectArea
+msgid "exif:SubjectArea"
+msgstr "****exif:SubjectArea"
+
+#. XMP tags / exif:SubjectDistance
+msgid "exif:SubjectDistance"
+msgstr "****exif:SubjectDistance"
+
+#. XMP tags / exif:SubjectDistanceRange
+msgid "exif:SubjectDistanceRange"
+msgstr "****exif:SubjectDistanceRange"
+
+#. XMP tags / exif:SubjectLocation
+msgid "exif:SubjectLocation"
+msgstr "****exif:SubjectLocation"
+
+#. XMP tags / exif:UserComment
+msgid "exif:UserComment"
+msgstr "****exif:UserComment"
+
+#. XMP tags / exif:Balance
+msgid "exif:Balance"
+msgstr "****exif:Balance"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "exterior view"
+msgstr "****exterior view"
+
+#. Exif & Tiff tags / 0xa300 (FileSource)
+msgid "film scanner"
+msgstr "****film scanner"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "fine weather"
+msgstr "****fine weather"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired"
+msgstr "****fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, red-eye reduction"
+msgstr "****fired, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, red-eye reduction, return detected"
+msgstr "****fired, red-eye reduction, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, red-eye reduction, return not detected"
+msgstr "****fired, red-eye reduction, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, return detected"
+msgstr "****fired, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, return not detected"
+msgstr "****fired, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "flash"
+msgstr "****flash"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "flash fired"
+msgstr "****flash fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "flash function"
+msgstr "****flash function"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "flash mode"
+msgstr "****flash mode"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "fluorescent"
+msgstr "****fluorescent"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "full-length"
+msgstr "****full-length"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "full-resolution image"
+msgstr "****full-resolution image"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "general view"
+msgstr "****general view"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "group"
+msgstr "****group"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "half-length"
+msgstr "****half-length"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "headshot"
+msgstr "****headshot"
+
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. XMP tags / photoshop:Urgency
+#. Exif & Tiff tags / 0xa408 (Contrast)
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+msgid "high"
+msgstr "****high"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "high gain down"
+msgstr "****high gain down"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "high gain up"
+msgstr "****high gain up"
+
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x020a (Urgency)
+#. IPTC tags / 0x013c (Envelope Priority)
+msgid "high+"
+msgstr "****high+"
+
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+#. XMP tags / photoshop:Urgency
+msgid "high++"
+msgstr "****high++"
+
+#. IPTC tags / 0x013c (Envelope Priority)
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x020a (Urgency)
+msgid "high+++"
+msgstr "****high+++"
+
+#. Exif & Tiff tags / 0x013d (Predictor)
+msgid "horizontal differencing"
+msgstr "****horizontal differencing"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+#. XMP tags / crs:CropUnits
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+msgid "inches"
+msgstr "****inches"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "interior view"
+msgstr "****interior view"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "landscape"
+msgstr "****landscape"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "landscape mode"
+msgstr "****landscape mode"
+
+#. XMP tags / crs:ToneCurveName
+msgid "linear"
+msgstr "****linear"
+
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. Exif & Tiff tags / 0xa408 (Contrast)
+#. XMP tags / photoshop:Urgency
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+msgid "low"
+msgstr "****low"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "low gain down"
+msgstr "****low gain down"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "low gain up"
+msgstr "****low gain up"
+
+#. IPTC tags / 0x020a (Urgency)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. XMP tags / photoshop:Urgency
+msgid "low+"
+msgstr "****low+"
+
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+msgid "low++"
+msgstr "****low++"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "macro"
+msgstr "****macro"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "manual"
+msgstr "****manual"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "manual exposure"
+msgstr "****manual exposure"
+
+#. Exif & Tiff tags / 0xa403 (Balance)
+msgid "manual white balance"
+msgstr "****manual white balance"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+msgid "micrometers"
+msgstr "****micrometers"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+msgid "millimeters"
+msgstr "****millimeters"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "morning"
+msgstr "****morning"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "movie scene"
+msgstr "****movie scene"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "multispot"
+msgstr "****multispot"
+
+#. XMP tags / Iptc4xmpCore:Scene
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "night scene"
+msgstr "****night scene"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "no dithering or halftoning"
+msgstr "****no dithering or halftoning"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "no flash"
+msgstr "****no flash"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "no flash function"
+msgstr "****no flash function"
+
+#. IPTC tags / 0x020a (Urgency)
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x013c (Envelope Priority)
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+#. Exif & Tiff tags / 0x013d (Predictor)
+#. Exif & Tiff tags / 0xa407 (GainControl)
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x020a (Urgency)
+msgid "none"
+msgstr "****none"
+
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. Exif & Tiff tags / 0xa408 (Contrast)
+#. IPTC tags / 0x020a (Urgency)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. XMP tags / photoshop:Urgency
+msgid "normal"
+msgstr "****normal"
+
+#. Exif & Tiff tags / 0xa401 (CustomRendered)
+msgid "normal process"
+msgstr "****normal process"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "normal program"
+msgstr "****normal program"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "not defined"
+msgstr "****not defined"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, did not fire"
+msgstr "****off, did not fire"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, did not fire, return not detected"
+msgstr "****off, did not fire, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, no flash function"
+msgstr "****off, no flash function"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, red-eye reduction"
+msgstr "****off, red-eye reduction"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "off-beat"
+msgstr "****off-beat"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, did not fire"
+msgstr "****on, did not fire"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, fired"
+msgstr "****on, fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, red-eye reduction"
+msgstr "****on, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, red-eye reduction, return detected"
+msgstr "****on, red-eye reduction, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, red-eye reduction, return not detected"
+msgstr "****on, red-eye reduction, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, return detected"
+msgstr "****on, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, return not detected"
+msgstr "****on, return not detected"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "one-chip color area sensor"
+msgstr "****one-chip color area sensor"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "ordered dither or halftone"
+msgstr "****ordered dither or halftone"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "other"
+msgstr "****other"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "other light source"
+msgstr "****other light source"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "panoramic view"
+msgstr "****panoramic view"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "partial"
+msgstr "****partial"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "pattern"
+msgstr "****pattern"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "performing"
+msgstr "****performing"
+
+#. XMP tags / photoshop:AuthorsPosition
+msgid "photoshop:AuthorsPosition"
+msgstr "****photoshop:AuthorsPosition"
+
+#. XMP tags / photoshop:CaptionWriter
+msgid "photoshop:CaptionWriter"
+msgstr "****photoshop:CaptionWriter"
+
+#. XMP tags / photoshop:Category
+msgid "photoshop:Category"
+msgstr "****photoshop:Category"
+
+#. XMP tags / photoshop:City
+msgid "photoshop:City"
+msgstr "****photoshop:City"
+
+#. XMP tags / photoshop:Country
+msgid "photoshop:Country"
+msgstr "****photoshop:Country"
+
+#. XMP tags / photoshop:Credit
+msgid "photoshop:Credit"
+msgstr "****photoshop:Credit"
+
+#. XMP tags / photoshop:DateCreated
+msgid "photoshop:DateCreated"
+msgstr "****photoshop:DateCreated"
+
+#. XMP tags / photoshop:Headline
+msgid "photoshop:Headline"
+msgstr "****photoshop:Headline"
+
+#. XMP tags / photoshop:Instructions
+msgid "photoshop:Instructions"
+msgstr "****photoshop:Instructions"
+
+#. XMP tags / photoshop:Source
+msgid "photoshop:Source"
+msgstr "****photoshop:Source"
+
+#. XMP tags / photoshop:State
+msgid "photoshop:State"
+msgstr "****photoshop:State"
+
+#. XMP tags / photoshop:SupplementalCategories
+msgid "photoshop:SupplementalCategories"
+msgstr "****photoshop:SupplementalCategories"
+
+#. XMP tags / photoshop:TransmissionReference
+msgid "photoshop:TransmissionReference"
+msgstr "****photoshop:TransmissionReference"
+
+#. XMP tags / photoshop:Urgency
+msgid "photoshop:Urgency"
+msgstr "****photoshop:Urgency"
+
+#. XMP tags / crs:CropUnits
+msgid "pixels"
+msgstr "****pixels"
+
+#. Exif & Tiff tags / 0x011c (PlanarConfiguration)
+msgid "planar"
+msgstr "****planar"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "portrait"
+msgstr "****portrait"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "portrait mode"
+msgstr "****portrait mode"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "posing"
+msgstr "****posing"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "profile"
+msgstr "****profile"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "randomized dither"
+msgstr "****randomized dither"
+
+#. XMP tags / rdf:about
+msgid "rdf:about"
+msgstr "****rdf:about"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "rear view"
+msgstr "****rear view"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "red-eye mode"
+msgstr "****red-eye mode"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "reduced-resolution image"
+msgstr "****reduced-resolution image"
+
+#. Exif & Tiff tags / 0xa300 (FileSource)
+msgid "reflection print scanner"
+msgstr "****reflection print scanner"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "restricted"
+msgstr "****restricted"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "returned light"
+msgstr "****returned light"
+
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "sRGB"
+msgstr "****sRGB"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "satellite"
+msgstr "****satellite"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "secret"
+msgstr "****secret"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "shade"
+msgstr "****shade"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "shutter priority"
+msgstr "****shutter priority"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "single"
+msgstr "****single"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "single page of multi-page image"
+msgstr "****single page of multi-page image"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "single page of multi-page reduced-resolution image"
+msgstr "****single page of multi-page reduced-resolution image"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM not used)"
+msgstr "****smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM not used)"
+msgstr "****smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 300 mm F4ED [IF] SDM (SDM not used)"
+msgstr "****smc PENTAX-DA* 300 mm F4ED [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM not used)"
+msgstr "****smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-F 35-105mm F4-5.6 or SIGMA or Tokina"
+msgstr "****smc PENTAX-F 35-105mm F4-5.6 or SIGMA or Tokina"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-F MACRO 50mm F2.8 or Sigma 50mm F2,8 MACRO"
+msgstr "****smc PENTAX-F MACRO 50mm F2.8 or Sigma 50mm F2,8 MACRO"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "spot"
+msgstr "****spot"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+msgid "square"
+msgstr "****square"
+
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "standard"
+msgstr "****standard"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "standard light A"
+msgstr "****standard light A"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "standard light B"
+msgstr "****standard light B"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "standard light C"
+msgstr "****standard light C"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "symbolic"
+msgstr "****symbolic"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "three-chip color area sensor"
+msgstr "****three-chip color area sensor"
+
+#. XMP tags / tiff:Artist
+msgid "tiff:Artist"
+msgstr "****tiff:Artist"
+
+#. XMP tags / tiff:BitsPerSample
+msgid "tiff:BitsPerSample"
+msgstr "****tiff:BitsPerSample"
+
+#. XMP tags / tiff:Compression
+msgid "tiff:Compression"
+msgstr "****tiff:Compression"
+
+#. XMP tags / tiff:Copyright
+msgid "tiff:Copyright"
+msgstr "****tiff:Copyright"
+
+#. XMP tags / tiff:DateTime
+msgid "tiff:DateTime"
+msgstr "****tiff:DateTime"
+
+#. XMP tags / tiff:ImageDescription
+msgid "tiff:ImageDescription"
+msgstr "****tiff:ImageDescription"
+
+#. XMP tags / tiff:ImageLength
+msgid "tiff:ImageLength"
+msgstr "****tiff:ImageLength"
+
+#. XMP tags / tiff:ImageWidth
+msgid "tiff:ImageWidth"
+msgstr "****tiff:ImageWidth"
+
+#. XMP tags / tiff:Make
+msgid "tiff:Make"
+msgstr "****tiff:Make"
+
+#. XMP tags / tiff:Model
+msgid "tiff:Model"
+msgstr "****tiff:Model"
+
+#. XMP tags / tiff:Orientation
+msgid "tiff:Orientation"
+msgstr "****tiff:Orientation"
+
+#. XMP tags / tiff:PhotometricInterpretation
+msgid "tiff:PhotometricInterpretation"
+msgstr "****tiff:PhotometricInterpretation"
+
+#. XMP tags / tiff:PlanarConfiguration
+msgid "tiff:PlanarConfiguration"
+msgstr "****tiff:PlanarConfiguration"
+
+#. XMP tags / tiff:PrimaryChromaticities
+msgid "tiff:PrimaryChromaticities"
+msgstr "****tiff:PrimaryChromaticities"
+
+#. XMP tags / tiff:ReferenceBlackWhite
+msgid "tiff:ReferenceBlackWhite"
+msgstr "****tiff:ReferenceBlackWhite"
+
+#. XMP tags / tiff:ResolutionUnit
+msgid "tiff:ResolutionUnit"
+msgstr "****tiff:ResolutionUnit"
+
+#. XMP tags / tiff:SamplesPerPixel
+msgid "tiff:SamplesPerPixel"
+msgstr "****tiff:SamplesPerPixel"
+
+#. XMP tags / tiff:Software
+msgid "tiff:Software"
+msgstr "****tiff:Software"
+
+#. XMP tags / tiff:TransferFunction
+msgid "tiff:TransferFunction"
+msgstr "****tiff:TransferFunction"
+
+#. XMP tags / tiff:WhitePoint
+msgid "tiff:WhitePoint"
+msgstr "****tiff:WhitePoint"
+
+#. XMP tags / tiff:XResolution
+msgid "tiff:XResolution"
+msgstr "****tiff:XResolution"
+
+#. XMP tags / tiff:YCbCrCoefficients
+msgid "tiff:YCbCrCoefficients"
+msgstr "****tiff:YCbCrCoefficients"
+
+#. XMP tags / tiff:YCbCrPositioning
+msgid "tiff:YCbCrPositioning"
+msgstr "****tiff:YCbCrPositioning"
+
+#. XMP tags / tiff:YCbCrSubSampling
+msgid "tiff:YCbCrSubSampling"
+msgstr "****tiff:YCbCrSubSampling"
+
+#. XMP tags / tiff:YResolution
+msgid "tiff:YResolution"
+msgstr "****tiff:YResolution"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "top secret"
+msgstr "****top secret"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask"
+msgstr "****transparency mask"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask of multi-page image"
+msgstr "****transparency mask of multi-page image"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask of reduced-resolution image"
+msgstr "****transparency mask of reduced-resolution image"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask of reduced-resolution multi-page image"
+msgstr "****transparency mask of reduced-resolution multi-page image"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "trilinear sensor"
+msgstr "****trilinear sensor"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "tungsten (incandescent light)"
+msgstr "****tungsten (incandescent light)"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "two"
+msgstr "****two"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "two-chip color area sensor"
+msgstr "****two-chip color area sensor"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "unclassified"
+msgstr "****unclassified"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "uncompressed"
+msgstr "****uncompressed"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "under-water"
+msgstr "****under-water"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "unknown"
+msgstr "****unknown"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "white fluorescent (WW 3200 - 3700K)"
+msgstr "****white fluorescent (WW 3200 - 3700K)"
+
+#. XMP tags / x:xmptk
+msgid "x:xmptk"
+msgstr "****x:xmptk"
+
+#. XMP tags / xmlns:Iptc4xmpCore
+msgid "xmlns:Iptc4xmpCore"
+msgstr "****xmlns:Iptc4xmpCore"
+
+#. XMP tags / xmlns:aux
+msgid "xmlns:aux"
+msgstr "****xmlns:aux"
+
+#. XMP tags / xmlns:crs
+msgid "xmlns:crs"
+msgstr "****xmlns:crs"
+
+#. XMP tags / xmlns:dc
+msgid "xmlns:dc"
+msgstr "****xmlns:dc"
+
+#. XMP tags / xmlns:exif
+msgid "xmlns:exif"
+msgstr "****xmlns:exif"
+
+#. XMP tags / xmlns:photoshop
+msgid "xmlns:photoshop"
+msgstr "****xmlns:photoshop"
+
+#. XMP tags / xmlns:rdf
+msgid "xmlns:rdf"
+msgstr "****xmlns:rdf"
+
+#. XMP tags / xmlns:tiff
+msgid "xmlns:tiff"
+msgstr "****xmlns:tiff"
+
+#. XMP tags / xmlns:x
+msgid "xmlns:x"
+msgstr "****xmlns:x"
+
+#. XMP tags / xmlns:xmp
+msgid "xmlns:xmp"
+msgstr "****xmlns:xmp"
+
+#. XMP tags / xmlns:xmpBJ
+msgid "xmlns:xmpBJ"
+msgstr "****xmlns:xmpBJ"
+
+#. XMP tags / xmlns:xmpDM
+msgid "xmlns:xmpDM"
+msgstr "****xmlns:xmpDM"
+
+#. XMP tags / xmlns:xmpMM
+msgid "xmlns:xmpMM"
+msgstr "****xmlns:xmpMM"
+
+#. XMP tags / xmlns:xmpRights
+msgid "xmlns:xmpRights"
+msgstr "****xmlns:xmpRights"
+
+#. XMP tags / xmlns:xmpTPg
+msgid "xmlns:xmpTPg"
+msgstr "****xmlns:xmpTPg"
+
+#. XMP tags / xmp:Advisory
+msgid "xmp:Advisory"
+msgstr "****xmp:Advisory"
+
+#. XMP tags / xmp:BaseURL
+msgid "xmp:BaseURL"
+msgstr "****xmp:BaseURL"
+
+#. XMP tags / xmp:CreateDate
+msgid "xmp:CreateDate"
+msgstr "****xmp:CreateDate"
+
+#. XMP tags / xmp:CreatorTool
+msgid "xmp:CreatorTool"
+msgstr "****xmp:CreatorTool"
+
+#. XMP tags / xmp:Identifier
+msgid "xmp:Identifier"
+msgstr "****xmp:Identifier"
+
+#. XMP tags / xmp:Label
+msgid "xmp:Label"
+msgstr "****xmp:Label"
+
+#. XMP tags / xmp:MetadataDate
+msgid "xmp:MetadataDate"
+msgstr "****xmp:MetadataDate"
+
+#. XMP tags / xmp:ModifyDate
+msgid "xmp:ModifyDate"
+msgstr "****xmp:ModifyDate"
+
+#. XMP tags / xmp:Nickname
+msgid "xmp:Nickname"
+msgstr "****xmp:Nickname"
+
+#. XMP tags / xmp:Rating
+msgid "xmp:Rating"
+msgstr "****xmp:Rating"
+
+#. XMP tags / xmp:Thumbnails
+msgid "xmp:Thumbnails"
+msgstr "****xmp:Thumbnails"
+
+#. XMP tags / xmpBJ:JobRef
+msgid "xmpBJ:JobRef"
+msgstr "****xmpBJ:JobRef"
+
+#. XMP tags / xmpMM:DerivedFrom
+msgid "xmpMM:DerivedFrom"
+msgstr "****xmpMM:DerivedFrom"
+
+#. XMP tags / xmpMM:DocumentID
+msgid "xmpMM:DocumentID"
+msgstr "****xmpMM:DocumentID"
+
+#. XMP tags / xmpMM:History
+msgid "xmpMM:History"
+msgstr "****xmpMM:History"
+
+#. XMP tags / xmpMM:InstanceID
+msgid "xmpMM:InstanceID"
+msgstr "****xmpMM:InstanceID"
+
+#. XMP tags / xmpMM:LastURL
+msgid "xmpMM:LastURL"
+msgstr "****xmpMM:LastURL"
+
+#. XMP tags / xmpMM:ManageTo
+msgid "xmpMM:ManageTo"
+msgstr "****xmpMM:ManageTo"
+
+#. XMP tags / xmpMM:ManageUI
+msgid "xmpMM:ManageUI"
+msgstr "****xmpMM:ManageUI"
+
+#. XMP tags / xmpMM:ManagedFrom
+msgid "xmpMM:ManagedFrom"
+msgstr "****xmpMM:ManagedFrom"
+
+#. XMP tags / xmpMM:Manager
+msgid "xmpMM:Manager"
+msgstr "****xmpMM:Manager"
+
+#. XMP tags / xmpMM:ManagerVariant
+msgid "xmpMM:ManagerVariant"
+msgstr "****xmpMM:ManagerVariant"
+
+#. XMP tags / xmpMM:RenditionClass
+msgid "xmpMM:RenditionClass"
+msgstr "****xmpMM:RenditionClass"
+
+#. XMP tags / xmpMM:RenditionParams
+msgid "xmpMM:RenditionParams"
+msgstr "****xmpMM:RenditionParams"
+
+#. XMP tags / xmpMM:VersionID
+msgid "xmpMM:VersionID"
+msgstr "****xmpMM:VersionID"
+
+#. XMP tags / xmpMM:Versions
+msgid "xmpMM:Versions"
+msgstr "****xmpMM:Versions"
+
+#. XMP tags / xmpRights:Certificate
+msgid "xmpRights:Certificate"
+msgstr "****xmpRights:Certificate"
+
+#. XMP tags / xmpRights:Marked
+msgid "xmpRights:Marked"
+msgstr "****xmpRights:Marked"
+
+#. XMP tags / xmpRights:Owner
+msgid "xmpRights:Owner"
+msgstr "****xmpRights:Owner"
+
+#. XMP tags / xmpRights:UsageTerms
+msgid "xmpRights:UsageTerms"
+msgstr "****xmpRights:UsageTerms"
+
+#. XMP tags / xmpRights:WebStatement
+msgid "xmpRights:WebStatement"
+msgstr "****xmpRights:WebStatement"
+
+#. XMP tags / xmpTPg:Colorants
+msgid "xmpTPg:Colorants"
+msgstr "****xmpTPg:Colorants"
+
+#. XMP tags / xmpTPg:Fonts
+msgid "xmpTPg:Fonts"
+msgstr "****xmpTPg:Fonts"
+
+#. XMP tags / xmpTPg:MaxPageSize
+msgid "xmpTPg:MaxPageSize"
+msgstr "****xmpTPg:MaxPageSize"
+
+#. XMP tags / xmpTPg:NPages
+msgid "xmpTPg:NPages"
+msgstr "****xmpTPg:NPages"
+
+#. XMP tags / xmpTPg:PlateNames
+msgid "xmpTPg:PlateNames"
+msgstr "****xmpTPg:PlateNames"
+
Index: /extensions/AMetaData/JpegMetaData/Locale/en_UK/TagDesc.po
===================================================================
--- /extensions/AMetaData/JpegMetaData/Locale/en_UK/TagDesc.po	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Locale/en_UK/TagDesc.po	(revision 4686)
@@ -0,0 +1,4080 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: TagNames\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: grum <grum@piwigo.org>\n"
+"Language-Team: grum <grum@piwigo.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: en\n"
+"X-Poedit-Country: UK\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "A Series Lens"
+msgstr "DESC_A Series Lens"
+
+#. Pentax specific tags / 0x0206 (AEInfo)
+msgid "AEInfo"
+msgstr "DESC_AEInfo"
+
+#. Pentax specific tags / 0x0048 (AELock)
+msgid "AELock"
+msgstr "DESC_AELock"
+
+#. Pentax specific tags / 0x0209 (AEMeteringSegments)
+msgid "AEMeteringSegments"
+msgstr "DESC_AEMeteringSegments"
+
+#. Pentax specific tags / 0x0072 (AFAdjustment)
+msgid "AFAdjustment"
+msgstr "DESC_AFAdjustment"
+
+#. Exif & Tiff tags / 0x8568 (AFCP_IPTC)
+msgid "AFCP_IPTC"
+msgstr "DESC_AFCP_IPTC"
+
+#. Pentax specific tags / 0x021f (AFInfo)
+msgid "AFInfo"
+msgstr "DESC_AFInfo"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "AFPoint"
+msgstr "DESC_AFPoint"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x003c (AFPointsInFocus)
+msgid "AFPointsInFocus"
+msgstr "DESC_AFPointsInFocus"
+
+#. IPTC tags / 0x0178 (ARM Identifier)
+msgid "ARM Identifier"
+msgstr "DESC_ARM Identifier"
+
+#. IPTC tags / 0x017a (ARM Version)
+msgid "ARM Version"
+msgstr "DESC_ARM Version"
+
+#. IPTC tags / 0x022a (Action Advised)
+msgid "Action Advised"
+msgstr "DESC_Action Advised"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Adelaide"
+msgstr "DESC_Adelaide"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "Adobe Deflate"
+msgstr "DESC_Adobe Deflate"
+
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "Adobe RGB"
+msgstr "DESC_Adobe RGB"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Algiers"
+msgstr "DESC_Algiers"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Amsterdam"
+msgstr "DESC_Amsterdam"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Anchorage"
+msgstr "DESC_Anchorage"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Aperture Priority"
+msgstr "DESC_Aperture Priority"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Aperture Priority (Off-Auto-Aperture)"
+msgstr "DESC_Aperture Priority (Off-Auto-Aperture)"
+
+#. Exif & Tiff tags / 0x9202 (ApertureValue)
+msgid "ApertureValue"
+msgstr "DESC_ApertureValue"
+
+#. Exif & Tiff tags / 0x013b (Artist)
+msgid "Artist"
+msgstr "DESC_Artist"
+
+#. XMP tags / crs:Balance
+msgid "As Shot"
+msgstr "DESC_As Shot"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Athens"
+msgstr "DESC_Athens"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Auckland"
+msgstr "DESC_Auckland"
+
+#. IPTC tags / 0x0299 (Audio Duration)
+msgid "Audio Duration"
+msgstr "DESC_Audio Duration"
+
+#. IPTC tags / 0x0298 (Audio Sampling Resolution)
+msgid "Audio Sampling Resolution"
+msgstr "DESC_Audio Sampling Resolution"
+
+#. IPTC tags / 0x0296 (Audio Type)
+msgid "Audio Type"
+msgstr "DESC_Audio Type"
+
+#. IPTC tags / 0x0297 (Audion Sampling Rate)
+msgid "Audion Sampling Rate"
+msgstr "DESC_Audion Sampling Rate"
+
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x0001 (ShootingMode)
+#. Pentax specific tags / 0x000e (AFPoint)
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Auto"
+msgstr "DESC_Auto"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Cloudy)"
+msgstr "DESC_Auto (Cloudy)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Daylight)"
+msgstr "DESC_Auto (Daylight)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (DaylightFluorescent)"
+msgstr "DESC_Auto (DaylightFluorescent)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (DaywhiteFluorescent)"
+msgstr "DESC_Auto (DaywhiteFluorescent)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Flash)"
+msgstr "DESC_Auto (Flash)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Shade)"
+msgstr "DESC_Auto (Shade)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (Tungsten)"
+msgstr "DESC_Auto (Tungsten)"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Auto (WhiteFluorescent)"
+msgstr "DESC_Auto (WhiteFluorescent)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Landscape)"
+msgstr "DESC_Auto PICT (Landscape)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Macro)"
+msgstr "DESC_Auto PICT (Macro)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Portrait)"
+msgstr "DESC_Auto PICT (Portrait)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Sport)"
+msgstr "DESC_Auto PICT (Sport)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Auto PICT (Standard)"
+msgstr "DESC_Auto PICT (Standard)"
+
+#. Pentax specific tags / 0x0018 (AutoBracketing)
+msgid "AutoBracketing"
+msgstr "DESC_AutoBracketing"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Automatic Tracking AF"
+msgstr "DESC_Automatic Tracking AF"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Autumn"
+msgstr "DESC_Autumn"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Bangkok"
+msgstr "DESC_Bangkok"
+
+#. Pentax specific tags / 0x0216 (BatteryInfo)
+msgid "BatteryInfo"
+msgstr "DESC_BatteryInfo"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Beijing"
+msgstr "DESC_Beijing"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Berlin"
+msgstr "DESC_Berlin"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Best"
+msgstr "DESC_Best"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Better"
+msgstr "DESC_Better"
+
+#. Exif & Tiff tags / 0x0102 (BitsPerSample)
+msgid "BitsPerSample"
+msgstr "DESC_BitsPerSample"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "BlackIsZero"
+msgstr "DESC_BlackIsZero"
+
+#. Pentax specific tags / 0x0200 (BlackPoint)
+msgid "BlackPoint"
+msgstr "DESC_BlackPoint"
+
+#. Pentax specific tags / 0x001b (BlueBalance)
+msgid "BlueBalance"
+msgstr "DESC_BlueBalance"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Blur Reduction"
+msgstr "DESC_Blur Reduction"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Bottom"
+msgstr "DESC_Bottom"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Bottom-center"
+msgstr "DESC_Bottom-center"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Bottom-left"
+msgstr "DESC_Bottom-left"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Bottom-right"
+msgstr "DESC_Bottom-right"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Bright"
+msgstr "DESC_Bright"
+
+#. Exif & Tiff tags / 0x9203 (BrightnessValue)
+msgid "BrightnessValue"
+msgstr "DESC_BrightnessValue"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Buenos Aires"
+msgstr "DESC_Buenos Aires"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Bulb"
+msgstr "DESC_Bulb"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Bulb (Off-Auto-Aperture)"
+msgstr "DESC_Bulb (Off-Auto-Aperture)"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Burst"
+msgstr "DESC_Burst"
+
+#. IPTC tags / 0x0250 (By-line)
+msgid "By-line"
+msgstr "DESC_By-line"
+
+#. IPTC tags / 0x0255 (By-line Title)
+msgid "By-line Title"
+msgstr "DESC_By-line Title"
+
+#. Exif & Tiff tags / 0xa302 (CFAPattern)
+msgid "CFAPattern"
+msgstr "DESC_CFAPattern"
+
+#. Pentax specific tags / 0x0028 (CPUFirmwareVersion)
+msgid "CPUFirmwareVersion"
+msgstr "DESC_CPUFirmwareVersion"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Cairo"
+msgstr "DESC_Cairo"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Calgary"
+msgstr "DESC_Calgary"
+
+#. Pentax specific tags / 0x0215 (CameraInfo)
+msgid "CameraInfo"
+msgstr "DESC_CameraInfo"
+
+#. Pentax specific tags / 0x0005 (CameraModel)
+msgid "CameraModel"
+msgstr "DESC_CameraModel"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Candlelight"
+msgstr "DESC_Candlelight"
+
+#. IPTC tags / 0x0278 (Caption/Abstract)
+msgid "Caption/Abstract"
+msgstr "DESC_Caption/Abstract"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Caracus"
+msgstr "DESC_Caracus"
+
+#. IPTC tags / 0x020f (Category)
+msgid "Category"
+msgstr "DESC_Category"
+
+#. Exif & Tiff tags / 0x0109 (CellLength)
+msgid "CellLength"
+msgstr "DESC_CellLength"
+
+#. Exif & Tiff tags / 0x0108 (CellWidth)
+msgid "CellWidth"
+msgstr "DESC_CellWidth"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Center"
+msgstr "DESC_Center"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+msgid "Center Weighted"
+msgstr "DESC_Center Weighted"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "CenterWeightedAverage"
+msgstr "DESC_CenterWeightedAverage"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Chicago"
+msgstr "DESC_Chicago"
+
+#. IPTC tags / 0x025a (City)
+msgid "City"
+msgstr "DESC_City"
+
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Cloudy"
+msgstr "DESC_Cloudy"
+
+#. IPTC tags / 0x015a (Coded Character Set)
+msgid "Coded Character Set"
+msgstr "DESC_Coded Character Set"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Colombo"
+msgstr "DESC_Colombo"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Color Filter"
+msgstr "DESC_Color Filter"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "Color Filter Array"
+msgstr "DESC_Color Filter Array"
+
+#. Pentax specific tags / 0x0222 (ColorInfo)
+msgid "ColorInfo"
+msgstr "DESC_ColorInfo"
+
+#. Pentax specific tags / 0x0203 (ColorMatrixA)
+msgid "ColorMatrixA"
+msgstr "DESC_ColorMatrixA"
+
+#. Pentax specific tags / 0x0204 (ColorMatrixB)
+msgid "ColorMatrixB"
+msgstr "DESC_ColorMatrixB"
+
+#. Exif & Tiff tags / 0x012c (ColorResponseUnit)
+msgid "ColorResponseUnit"
+msgstr "DESC_ColorResponseUnit"
+
+#. Pentax specific tags / 0x0037 (ColorSpace)
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "ColorSpace"
+msgstr "DESC_ColorSpace"
+
+#. Pentax specific tags / 0x0050 (ColorTemperature)
+msgid "ColorTemperature"
+msgstr "DESC_ColorTemperature"
+
+#. Exif & Tiff tags / 0x9101 (ComponentsConfiguration)
+msgid "ComponentsConfiguration"
+msgstr "DESC_ComponentsConfiguration"
+
+#. Exif & Tiff tags / 0x9102 (CompressedBitsPerPixel)
+msgid "CompressedBitsPerPixel"
+msgstr "DESC_CompressedBitsPerPixel"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "Compression"
+msgstr "DESC_Compression"
+
+#. IPTC tags / 0x090a (Confirmed ObjectData Size)
+msgid "Confirmed ObjectData Size"
+msgstr "DESC_Confirmed ObjectData Size"
+
+#. IPTC tags / 0x0276 (Contact)
+msgid "Contact"
+msgstr "DESC_Contact"
+
+#. IPTC tags / 0x021a (Content Location Code)
+msgid "Content Location Code"
+msgstr "DESC_Content Location Code"
+
+#. IPTC tags / 0x021b (Content Location Name)
+msgid "Content Location Name"
+msgstr "DESC_Content Location Name"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Continuous"
+msgstr "DESC_Continuous"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Continuous (Hi)"
+msgstr "DESC_Continuous (Hi)"
+
+#. Pentax specific tags / 0x0020 (Contrast)
+#. Exif & Tiff tags / 0xa408 (Contrast)
+msgid "Contrast"
+msgstr "DESC_Contrast"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Copenhagen"
+msgstr "DESC_Copenhagen"
+
+#. Exif & Tiff tags / 0x8298 (Copyright)
+msgid "Copyright"
+msgstr "DESC_Copyright"
+
+#. IPTC tags / 0x0274 (Copyright Notice)
+msgid "Copyright Notice"
+msgstr "DESC_Copyright Notice"
+
+#. IPTC tags / 0x0264 (Country/Primary Location Code)
+msgid "Country/Primary Location Code"
+msgstr "DESC_Country/Primary Location Code"
+
+#. IPTC tags / 0x0265 (Country/Primary Location Name)
+msgid "Country/Primary Location Name"
+msgstr "DESC_Country/Primary Location Name"
+
+#. IPTC tags / 0x026e (Credit)
+msgid "Credit"
+msgstr "DESC_Credit"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Cropped"
+msgstr "DESC_Cropped"
+
+#. XMP tags / crs:ToneCurveName
+#. XMP tags / crs:Balance
+msgid "Custom"
+msgstr "DESC_Custom"
+
+#. Exif & Tiff tags / 0xa401 (CustomRendered)
+msgid "CustomRendered"
+msgstr "DESC_CustomRendered"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "DOF Program"
+msgstr "DESC_DOF Program"
+
+#. Pentax specific tags / 0x0027 (DSPFirmwareVersion)
+msgid "DSPFirmwareVersion"
+msgstr "DESC_DSPFirmwareVersion"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Dacca"
+msgstr "DESC_Dacca"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Dakar"
+msgstr "DESC_Dakar"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Dark Pet"
+msgstr "DESC_Dark Pet"
+
+#. Pentax specific tags / 0x03fe (DataDump)
+msgid "DataDump"
+msgstr "DESC_DataDump"
+
+#. Pentax specific tags / 0x0006 (Date)
+msgid "Date"
+msgstr "DESC_Date"
+
+#. IPTC tags / 0x0237 (Date Created)
+msgid "Date Created"
+msgstr "DESC_Date Created"
+
+#. IPTC tags / 0x0146 (Date Sent)
+msgid "Date Sent"
+msgstr "DESC_Date Sent"
+
+#. Exif & Tiff tags / 0x0132 (DateTime)
+msgid "DateTime"
+msgstr "DESC_DateTime"
+
+#. Exif & Tiff tags / 0x9004 (DateTimeDigitized)
+msgid "DateTimeDigitized"
+msgstr "DESC_DateTimeDigitized"
+
+#. Exif & Tiff tags / 0x9003 (DateTimeOriginal)
+msgid "DateTimeOriginal"
+msgstr "DESC_DateTimeOriginal"
+
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Daylight"
+msgstr "DESC_Daylight"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "DaylightFluorescent"
+msgstr "DESC_DaylightFluorescent"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "DaywhiteFluorescent"
+msgstr "DESC_DaywhiteFluorescent"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Delhi"
+msgstr "DESC_Delhi"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Denver"
+msgstr "DESC_Denver"
+
+#. IPTC tags / 0x0105 (Destination)
+#. Pentax specific tags / 0x0022 (WorldTimeLocation)
+msgid "Destination"
+msgstr "DESC_Destination"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "DestinationCityName"
+msgstr "DESC_DestinationCityName"
+
+#. Pentax specific tags / 0x0026 (DestinationDST)
+msgid "DestinationDST"
+msgstr "DESC_DestinationDST"
+
+#. Exif & Tiff tags / 0xa40b (DeviceSettingDescription)
+msgid "DeviceSettingDescription"
+msgstr "DESC_DeviceSettingDescription"
+
+#. IPTC tags / 0x023e (Digital Creation Date)
+msgid "Digital Creation Date"
+msgstr "DESC_Digital Creation Date"
+
+#. IPTC tags / 0x023f (Digital Creation Time)
+msgid "Digital Creation Time"
+msgstr "DESC_Digital Creation Time"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Digital Filter"
+msgstr "DESC_Digital Filter"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Digital Filter?"
+msgstr "DESC_Digital Filter?"
+
+#. Pentax specific tags / 0x0041 (DigitalFilter)
+msgid "DigitalFilter"
+msgstr "DESC_DigitalFilter"
+
+#. Pentax specific tags / 0x001e (DigitalZoom)
+msgid "DigitalZoom"
+msgstr "DESC_DigitalZoom"
+
+#. Exif & Tiff tags / 0xa404 (DigitalZoomRatio)
+msgid "DigitalZoomRatio"
+msgstr "DESC_DigitalZoomRatio"
+
+#. Exif & Tiff tags / 0x010d (DocumentName)
+msgid "DocumentName"
+msgstr "DESC_DocumentName"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "DriveMode"
+msgstr "DESC_DriveMode"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Dubai"
+msgstr "DESC_Dubai"
+
+#. Pentax specific tags / 0x0069 (DynamicRangeExpansion)
+msgid "DynamicRangeExpansion"
+msgstr "DESC_DynamicRangeExpansion"
+
+#. Pentax specific tags / 0x0224 (EVStepInfo)
+msgid "EVStepInfo"
+msgstr "DESC_EVStepInfo"
+
+#. IPTC tags / 0x0207 (Edit Status)
+msgid "Edit Status"
+msgstr "DESC_Edit Status"
+
+#. IPTC tags / 0x0208 (Editorial Update)
+msgid "Editorial Update"
+msgstr "DESC_Editorial Update"
+
+#. Pentax specific tags / 0x002d (EffectiveLV)
+msgid "EffectiveLV"
+msgstr "DESC_EffectiveLV"
+
+#. IPTC tags / 0x0128 (Envelope Number)
+msgid "Envelope Number"
+msgstr "DESC_Envelope Number"
+
+#. IPTC tags / 0x013c (Envelope Priority)
+msgid "Envelope Priority"
+msgstr "DESC_Envelope Priority"
+
+#. Exif & Tiff tags / 0x9000 (ExifVersion)
+msgid "ExifVersion"
+msgstr "DESC_ExifVersion"
+
+#. IPTC tags / 0x0225 (Expiration Date)
+msgid "Expiration Date"
+msgstr "DESC_Expiration Date"
+
+#. IPTC tags / 0x0226 (Expiration Time)
+msgid "Expiration Time"
+msgstr "DESC_Expiration Time"
+
+#. Exif & Tiff tags / 0x9204 (ExposureBiasValue)
+msgid "ExposureBiasValue"
+msgstr "DESC_ExposureBiasValue"
+
+#. Pentax specific tags / 0x0016 (ExposureCompensation)
+msgid "ExposureCompensation"
+msgstr "DESC_ExposureCompensation"
+
+#. Exif & Tiff tags / 0xa215 (ExposureIndex)
+msgid "ExposureIndex"
+msgstr "DESC_ExposureIndex"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "ExposureMode"
+msgstr "DESC_ExposureMode"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "ExposureProgram"
+msgstr "DESC_ExposureProgram"
+
+#. Exif & Tiff tags / 0x829a (ExposureTime)
+#. Pentax specific tags / 0x0012 (ExposureTime)
+msgid "ExposureTime"
+msgstr "DESC_ExposureTime"
+
+#. Pentax specific tags / 0x0013 (FNumber)
+#. Exif & Tiff tags / 0x829d (FNumber)
+msgid "FNumber"
+msgstr "DESC_FNumber"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Face Recognition AF"
+msgstr "DESC_Face Recognition AF"
+
+#. IPTC tags / 0x0114 (File Format)
+msgid "File Format"
+msgstr "DESC_File Format"
+
+#. IPTC tags / 0x0116 (File Format Version)
+msgid "File Format Version"
+msgstr "DESC_File Format Version"
+
+#. Exif & Tiff tags / 0xa300 (FileSource)
+msgid "FileSource"
+msgstr "DESC_FileSource"
+
+#. Exif & Tiff tags / 0x010a (FillOrder)
+msgid "FillOrder"
+msgstr "DESC_FillOrder"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Fireworks"
+msgstr "DESC_Fireworks"
+
+#. Pentax specific tags / 0x0230 (FirmwareVersion)
+msgid "FirmwareVersion"
+msgstr "DESC_FirmwareVersion"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Fixed Center"
+msgstr "DESC_Fixed Center"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Fixed Center or Multiple"
+msgstr "DESC_Fixed Center or Multiple"
+
+#. IPTC tags / 0x0216 (Fixture Identifier)
+msgid "Fixture Identifier"
+msgstr "DESC_Fixture Identifier"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+#. Pentax specific tags / 0x000c (Flash)
+msgid "Flash"
+msgstr "DESC_Flash"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Flash X-Sync Speed AE, 1/2 EV steps"
+msgstr "DESC_Flash X-Sync Speed AE, 1/2 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Flash X-Sync Speed AE, 1/3 EV steps"
+msgstr "DESC_Flash X-Sync Speed AE, 1/3 EV steps"
+
+#. Pentax specific tags / 0x020a (FlashADump)
+msgid "FlashADump"
+msgstr "DESC_FlashADump"
+
+#. Pentax specific tags / 0x020b (FlashBDump)
+msgid "FlashBDump"
+msgstr "DESC_FlashBDump"
+
+#. Pentax specific tags / 0x004d (FlashExposureCompensation)
+msgid "FlashExposureCompensation"
+msgstr "DESC_FlashExposureCompensation"
+
+#. Pentax specific tags / 0x0208 (FlashInfo)
+msgid "FlashInfo"
+msgstr "DESC_FlashInfo"
+
+#. Exif & Tiff tags / 0xa000 (FlashpixVersion)
+msgid "FlashpixVersion"
+msgstr "DESC_FlashpixVersion"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+msgid "Fluorescent"
+msgstr "DESC_Fluorescent"
+
+#. Pentax specific tags / 0x001d (FocalLength)
+#. Exif & Tiff tags / 0x920a (FocalLength)
+msgid "FocalLength"
+msgstr "DESC_FocalLength"
+
+#. Exif & Tiff tags / 0xa405 (FocalLengthIn35mmFilm)
+msgid "FocalLengthIn35mmFilm"
+msgstr "DESC_FocalLengthIn35mmFilm"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+msgid "FocalPlaneResolutionUnit"
+msgstr "DESC_FocalPlaneResolutionUnit"
+
+#. Exif & Tiff tags / 0xa20e (FocalPlaneXResolution)
+msgid "FocalPlaneXResolution"
+msgstr "DESC_FocalPlaneXResolution"
+
+#. Exif & Tiff tags / 0xa20f (FocalPlaneYResolution)
+msgid "FocalPlaneYResolution"
+msgstr "DESC_FocalPlaneYResolution"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Focus"
+msgstr "DESC_Focus"
+
+#. Pentax specific tags / 0x0010 (FocusPosition)
+msgid "FocusPosition"
+msgstr "DESC_FocusPosition"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Food"
+msgstr "DESC_Food"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Frame Composite"
+msgstr "DESC_Frame Composite"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Frame Synthesis?"
+msgstr "DESC_Frame Synthesis?"
+
+#. Pentax specific tags / 0x0029 (FrameNumber)
+msgid "FrameNumber"
+msgstr "DESC_FrameNumber"
+
+#. Exif & Tiff tags / 0x0121 (FreeByteCounts)
+msgid "FreeByteCounts"
+msgstr "DESC_FreeByteCounts"
+
+#. Exif & Tiff tags / 0x0120 (FreeOffsets)
+msgid "FreeOffsets"
+msgstr "DESC_FreeOffsets"
+
+#. Pentax specific tags / 0x0009 (Size)
+msgid "Full"
+msgstr "DESC_Full"
+
+#. Exif GPS tags / 0x0006 (GPSAltitude)
+msgid "GPSAltitude"
+msgstr "DESC_GPSAltitude"
+
+#. Exif GPS tags / 0x0005 (GPSAltitudeRef)
+msgid "GPSAltitudeRef"
+msgstr "DESC_GPSAltitudeRef"
+
+#. Exif GPS tags / 0x001c (GPSAreaInformation)
+msgid "GPSAreaInformation"
+msgstr "DESC_GPSAreaInformation"
+
+#. Exif GPS tags / 0x000b (GPSDOP)
+msgid "GPSDOP"
+msgstr "DESC_GPSDOP"
+
+#. Exif GPS tags / 0x001d (GPSDateStamp)
+msgid "GPSDateStamp"
+msgstr "DESC_GPSDateStamp"
+
+#. Exif GPS tags / 0x0018 (GPSDestBearing)
+msgid "GPSDestBearing"
+msgstr "DESC_GPSDestBearing"
+
+#. Exif GPS tags / 0x0017 (GPSDestBearingRef)
+msgid "GPSDestBearingRef"
+msgstr "DESC_GPSDestBearingRef"
+
+#. Exif GPS tags / 0x001a (GPSDestDistance)
+msgid "GPSDestDistance"
+msgstr "DESC_GPSDestDistance"
+
+#. Exif GPS tags / 0x0019 (GPSDestDistanceRef)
+msgid "GPSDestDistanceRef"
+msgstr "DESC_GPSDestDistanceRef"
+
+#. Exif GPS tags / 0x0014 (GPSDestLatitude)
+msgid "GPSDestLatitude"
+msgstr "DESC_GPSDestLatitude"
+
+#. Exif GPS tags / 0x0013 (GPSDestLatitudeRef)
+msgid "GPSDestLatitudeRef"
+msgstr "DESC_GPSDestLatitudeRef"
+
+#. Exif GPS tags / 0x0016 (GPSDestLongitude)
+msgid "GPSDestLongitude"
+msgstr "DESC_GPSDestLongitude"
+
+#. Exif GPS tags / 0x0015 (GPSDestLongitudeRef)
+msgid "GPSDestLongitudeRef"
+msgstr "DESC_GPSDestLongitudeRef"
+
+#. Exif GPS tags / 0x001e (GPSDifferential)
+msgid "GPSDifferential"
+msgstr "DESC_GPSDifferential"
+
+#. Exif GPS tags / 0x0011 (GPSImgDirection)
+msgid "GPSImgDirection"
+msgstr "DESC_GPSImgDirection"
+
+#. Exif GPS tags / 0x0010 (GPSImgDirectionRef)
+msgid "GPSImgDirectionRef"
+msgstr "DESC_GPSImgDirectionRef"
+
+#. Exif GPS tags / 0x0002 (GPSLatitude)
+msgid "GPSLatitude"
+msgstr "DESC_GPSLatitude"
+
+#. Exif GPS tags / 0x0001 (GPSLatitudeRef)
+msgid "GPSLatitudeRef"
+msgstr "DESC_GPSLatitudeRef"
+
+#. Exif GPS tags / 0x0004 (GPSLongitude)
+msgid "GPSLongitude"
+msgstr "DESC_GPSLongitude"
+
+#. Exif GPS tags / 0x0003 (GPSLongitudeRef)
+msgid "GPSLongitudeRef"
+msgstr "DESC_GPSLongitudeRef"
+
+#. Exif GPS tags / 0x0012 (GPSMapDatum)
+msgid "GPSMapDatum"
+msgstr "DESC_GPSMapDatum"
+
+#. Exif GPS tags / 0x000a (GPSMeasureMode)
+msgid "GPSMeasureMode"
+msgstr "DESC_GPSMeasureMode"
+
+#. Exif GPS tags / 0x001b (GPSProcessingMethod)
+msgid "GPSProcessingMethod"
+msgstr "DESC_GPSProcessingMethod"
+
+#. Exif GPS tags / 0x0008 (GPSSatellites)
+msgid "GPSSatellites"
+msgstr "DESC_GPSSatellites"
+
+#. Exif GPS tags / 0x000d (GPSSpeed)
+msgid "GPSSpeed"
+msgstr "DESC_GPSSpeed"
+
+#. Exif GPS tags / 0x000c (GPSSpeedRef)
+msgid "GPSSpeedRef"
+msgstr "DESC_GPSSpeedRef"
+
+#. Exif GPS tags / 0x0009 (GPSStatus)
+msgid "GPSStatus"
+msgstr "DESC_GPSStatus"
+
+#. Exif GPS tags / 0x0007 (GPSTimeStamp)
+msgid "GPSTimeStamp"
+msgstr "DESC_GPSTimeStamp"
+
+#. Exif GPS tags / 0x000f (GPSTrack)
+msgid "GPSTrack"
+msgstr "DESC_GPSTrack"
+
+#. Exif GPS tags / 0x000e (GPSTrackRef)
+msgid "GPSTrackRef"
+msgstr "DESC_GPSTrackRef"
+
+#. Exif GPS tags / 0x0000 (GPSVersionID)
+msgid "GPSVersionID"
+msgstr "DESC_GPSVersionID"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "GainControl"
+msgstr "DESC_GainControl"
+
+#. Exif & Tiff tags / 0xa500 (Gamma)
+msgid "Gamma"
+msgstr "DESC_Gamma"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Good"
+msgstr "DESC_Good"
+
+#. Exif & Tiff tags / 0x0123 (GrayResponseCurve)
+msgid "GrayResponseCurve"
+msgstr "DESC_GrayResponseCurve"
+
+#. Exif & Tiff tags / 0x0122 (GrayResponseUnit)
+msgid "GrayResponseUnit"
+msgstr "DESC_GrayResponseUnit"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Green Mode"
+msgstr "DESC_Green Mode"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Guam"
+msgstr "DESC_Guam"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Half-length Portrait"
+msgstr "DESC_Half-length Portrait"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Halifax"
+msgstr "DESC_Halifax"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Hard"
+msgstr "DESC_Hard"
+
+#. IPTC tags / 0x0269 (Headline)
+msgid "Headline"
+msgstr "DESC_Headline"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Helsinki"
+msgstr "DESC_Helsinki"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Hi-speed Program"
+msgstr "DESC_Hi-speed Program"
+
+#. Pentax specific tags / 0x0020 (Contrast)
+#. Pentax specific tags / 0x001f (Saturation)
+msgid "High"
+msgstr "DESC_High"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "HighISONoiseReduction"
+msgstr "DESC_HighISONoiseReduction"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Ho Chi Minh"
+msgstr "DESC_Ho Chi Minh"
+
+#. Pentax specific tags / 0x0022 (WorldTimeLocation)
+msgid "Home town"
+msgstr "DESC_Home town"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "HomeCityName"
+msgstr "DESC_HomeCityName"
+
+#. Pentax specific tags / 0x0025 (HometownDST)
+msgid "HometownDST"
+msgstr "DESC_HometownDST"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Hong Kong"
+msgstr "DESC_Hong Kong"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Honolulu"
+msgstr "DESC_Honolulu"
+
+#. Exif & Tiff tags / 0x013c (HostComputer)
+msgid "HostComputer"
+msgstr "DESC_HostComputer"
+
+#. Pentax specific tags / 0x0220 (HuffmanTable)
+msgid "HuffmanTable"
+msgstr "DESC_HuffmanTable"
+
+#. Exif & Tiff tags / 0x8773 (ICC_Profile)
+msgid "ICC_Profile"
+msgstr "DESC_ICC_Profile"
+
+#. Pentax specific tags / 0x0014 (ISO)
+msgid "ISO"
+msgstr "DESC_ISO"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "ISO studio tungsten"
+msgstr "DESC_ISO studio tungsten"
+
+#. Exif & Tiff tags / 0x8827 (ISOSpeedRatings)
+msgid "ISOSpeedRatings"
+msgstr "DESC_ISOSpeedRatings"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Illustrations"
+msgstr "DESC_Illustrations"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+msgid "Image Orientation"
+msgstr "DESC_Image Orientation"
+
+#. IPTC tags / 0x0282 (Image Type)
+msgid "Image Type"
+msgstr "DESC_Image Type"
+
+#. Pentax specific tags / 0x0038 (ImageAreaOffset)
+msgid "ImageAreaOffset"
+msgstr "DESC_ImageAreaOffset"
+
+#. Exif & Tiff tags / 0x010e (ImageDescription)
+msgid "ImageDescription"
+msgstr "DESC_ImageDescription"
+
+#. Exif & Tiff tags / 0x9213 (ImageHistory)
+msgid "ImageHistory"
+msgstr "DESC_ImageHistory"
+
+#. Exif & Tiff tags / 0x0101 (ImageLength)
+msgid "ImageLength"
+msgstr "DESC_ImageLength"
+
+#. Exif & Tiff tags / 0x9211 (ImageNumber)
+msgid "ImageNumber"
+msgstr "DESC_ImageNumber"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "ImageProcessing"
+msgstr "DESC_ImageProcessing"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "ImageTone"
+msgstr "DESC_ImageTone"
+
+#. Exif & Tiff tags / 0xa420 (ImageUniqueID)
+msgid "ImageUniqueID"
+msgstr "DESC_ImageUniqueID"
+
+#. Exif & Tiff tags / 0x0100 (ImageWidth)
+msgid "ImageWidth"
+msgstr "DESC_ImageWidth"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Infinity"
+msgstr "DESC_Infinity"
+
+#. XMP tags / Iptc4xmpCore:CiAdrCity
+msgid "Iptc4xmpCore:CiAdrCity"
+msgstr "DESC_Iptc4xmpCore:CiAdrCity"
+
+#. XMP tags / Iptc4xmpCore:CiAdrCtry
+msgid "Iptc4xmpCore:CiAdrCtry"
+msgstr "DESC_Iptc4xmpCore:CiAdrCtry"
+
+#. XMP tags / Iptc4xmpCore:CiAdrExtadr
+msgid "Iptc4xmpCore:CiAdrExtadr"
+msgstr "DESC_Iptc4xmpCore:CiAdrExtadr"
+
+#. XMP tags / Iptc4xmpCore:CiAdrPcode
+msgid "Iptc4xmpCore:CiAdrPcode"
+msgstr "DESC_Iptc4xmpCore:CiAdrPcode"
+
+#. XMP tags / Iptc4xmpCore:CiEmailWork
+msgid "Iptc4xmpCore:CiEmailWork"
+msgstr "DESC_Iptc4xmpCore:CiEmailWork"
+
+#. XMP tags / Iptc4xmpCore:CiTelWork
+msgid "Iptc4xmpCore:CiTelWork"
+msgstr "DESC_Iptc4xmpCore:CiTelWork"
+
+#. XMP tags / Iptc4xmpCore:CiUrlWork
+msgid "Iptc4xmpCore:CiUrlWork"
+msgstr "DESC_Iptc4xmpCore:CiUrlWork"
+
+#. XMP tags / Iptc4xmpCore:CountryCode
+msgid "Iptc4xmpCore:CountryCode"
+msgstr "DESC_Iptc4xmpCore:CountryCode"
+
+#. XMP tags / Iptc4xmpCore:CreatorContactInfo
+msgid "Iptc4xmpCore:CreatorContactInfo"
+msgstr "DESC_Iptc4xmpCore:CreatorContactInfo"
+
+#. XMP tags / Iptc4xmpCore:DateCreated
+msgid "Iptc4xmpCore:DateCreated"
+msgstr "DESC_Iptc4xmpCore:DateCreated"
+
+#. XMP tags / Iptc4xmpCore:IntellectualGenre
+msgid "Iptc4xmpCore:IntellectualGenre"
+msgstr "DESC_Iptc4xmpCore:IntellectualGenre"
+
+#. XMP tags / Iptc4xmpCore:Location
+msgid "Iptc4xmpCore:Location"
+msgstr "DESC_Iptc4xmpCore:Location"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "Iptc4xmpCore:Scene"
+msgstr "DESC_Iptc4xmpCore:Scene"
+
+#. XMP tags / Iptc4xmpCore:SubjectCode
+msgid "Iptc4xmpCore:SubjectCode"
+msgstr "DESC_Iptc4xmpCore:SubjectCode"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Istanbul"
+msgstr "DESC_Istanbul"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "JPEG (old style)"
+msgstr "DESC_JPEG (old style)"
+
+#. Exif & Tiff tags / 0x0201 (JPEGInterchangeFormat)
+msgid "JPEGInterchangeFormat"
+msgstr "DESC_JPEGInterchangeFormat"
+
+#. Exif & Tiff tags / 0x0202 (JPEGInterchangeFormatLength)
+msgid "JPEGInterchangeFormatLength"
+msgstr "DESC_JPEGInterchangeFormatLength"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Jakarta"
+msgstr "DESC_Jakarta"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Jeddah"
+msgstr "DESC_Jeddah"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Jerusalem"
+msgstr "DESC_Jerusalem"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Johannesburg"
+msgstr "DESC_Johannesburg"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "K,M Lens"
+msgstr "DESC_K,M Lens"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Kabul"
+msgstr "DESC_Kabul"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Karachi"
+msgstr "DESC_Karachi"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Kathmandu"
+msgstr "DESC_Kathmandu"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Kelvin"
+msgstr "DESC_Kelvin"
+
+#. IPTC tags / 0x0219 (Keywords)
+msgid "Keywords"
+msgstr "DESC_Keywords"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Kids"
+msgstr "DESC_Kids"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Kuala Lumpur"
+msgstr "DESC_Kuala Lumpur"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Landscape"
+msgstr "DESC_Landscape"
+
+#. IPTC tags / 0x0287 (Language Identifier)
+msgid "Language Identifier"
+msgstr "DESC_Language Identifier"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Left"
+msgstr "DESC_Left"
+
+#. Pentax specific tags / 0x0207 (LensInfo)
+msgid "LensInfo"
+msgstr "DESC_LensInfo"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "LensType"
+msgstr "DESC_LensType"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Light Pet"
+msgstr "DESC_Light Pet"
+
+#. Pentax specific tags / 0x0015 (LightReading)
+msgid "LightReading"
+msgstr "DESC_LightReading"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "LightSource"
+msgstr "DESC_LightSource"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Lima"
+msgstr "DESC_Lima"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "Linear Raw"
+msgstr "DESC_Linear Raw"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Lisbon"
+msgstr "DESC_Lisbon"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "London"
+msgstr "DESC_London"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Los Angeles"
+msgstr "DESC_Los Angeles"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Low"
+msgstr "DESC_Low"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Lower-left"
+msgstr "DESC_Lower-left"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Lower-right"
+msgstr "DESC_Lower-right"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "M-42 or No Lens"
+msgstr "DESC_M-42 or No Lens"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "MTF Program"
+msgstr "DESC_MTF Program"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Macro"
+msgstr "DESC_Macro"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Madrid"
+msgstr "DESC_Madrid"
+
+#. Exif & Tiff tags / 0x010f (Make)
+msgid "Make"
+msgstr "DESC_Make"
+
+#. Exif & Tiff tags / 0x927c (MakerNote)
+msgid "MakerNote"
+msgstr "DESC_MakerNote"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Male"
+msgstr "DESC_Male"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Manila"
+msgstr "DESC_Manila"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000d (Focus)
+#. Pentax specific tags / 0x0001 (ShootingMode)
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Manual"
+msgstr "DESC_Manual"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Manual (Off-Auto-Aperture)"
+msgstr "DESC_Manual (Off-Auto-Aperture)"
+
+#. IPTC tags / 0x0714 (Max Subfile Size)
+msgid "Max Subfile Size"
+msgstr "DESC_Max Subfile Size"
+
+#. Exif & Tiff tags / 0x9205 (MaxApertureValue)
+msgid "MaxApertureValue"
+msgstr "DESC_MaxApertureValue"
+
+#. Exif & Tiff tags / 0x0119 (MaxSampleValue)
+msgid "MaxSampleValue"
+msgstr "DESC_MaxSampleValue"
+
+#. IPTC tags / 0x075f (Maximum ObjectData Size)
+msgid "Maximum ObjectData Size"
+msgstr "DESC_Maximum ObjectData Size"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Med Hard"
+msgstr "DESC_Med Hard"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Med High"
+msgstr "DESC_Med High"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Med Low"
+msgstr "DESC_Med Low"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Med Soft"
+msgstr "DESC_Med Soft"
+
+#. XMP tags / crs:ToneCurveName
+msgid "Medium Contrast"
+msgstr "DESC_Medium Contrast"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Medium Pet"
+msgstr "DESC_Medium Pet"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "MeteringMode"
+msgstr "DESC_MeteringMode"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Mexico City"
+msgstr "DESC_Mexico City"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Miami"
+msgstr "DESC_Miami"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Mid-left"
+msgstr "DESC_Mid-left"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Mid-right"
+msgstr "DESC_Mid-right"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Milan"
+msgstr "DESC_Milan"
+
+#. Exif & Tiff tags / 0x0118 (MinSampleValue)
+msgid "MinSampleValue"
+msgstr "DESC_MinSampleValue"
+
+#. Exif & Tiff tags / 0x0110 (Model)
+msgid "Model"
+msgstr "DESC_Model"
+
+#. IPTC tags / 0x0100 (Model Version)
+msgid "Model Version"
+msgstr "DESC_Model Version"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Monochrome"
+msgstr "DESC_Monochrome"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Moscow"
+msgstr "DESC_Moscow"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+msgid "Multi Segment"
+msgstr "DESC_Multi Segment"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Multiple Exposure"
+msgstr "DESC_Multiple Exposure"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Museum"
+msgstr "DESC_Museum"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "N/A"
+msgstr "DESC_N/A"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Nairobi"
+msgstr "DESC_Nairobi"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Natural"
+msgstr "DESC_Natural"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Natural Skin Tone"
+msgstr "DESC_Natural Skin Tone"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "New York"
+msgstr "DESC_New York"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Night Scene"
+msgstr "DESC_Night Scene"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Night Scene Portrait"
+msgstr "DESC_Night Scene Portrait"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Night Snap"
+msgstr "DESC_Night Snap"
+
+#. Pentax specific tags / 0x0001 (ShootingMode)
+msgid "Night-Scene"
+msgstr "DESC_Night-Scene"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "No Flash"
+msgstr "DESC_No Flash"
+
+#. IPTC tags / 0x0114 (File Format)
+msgid "No ObjectData"
+msgstr "DESC_No ObjectData"
+
+#. Exif & Tiff tags / 0xa20d (Noise)
+msgid "Noise"
+msgstr "DESC_Noise"
+
+#. Pentax specific tags / 0x0049 (NoiseReduction)
+msgid "NoiseReduction"
+msgstr "DESC_NoiseReduction"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "None"
+msgstr "DESC_None"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x000d (Focus)
+#. Pentax specific tags / 0x0021 (Sharpness)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Normal"
+msgstr "DESC_Normal"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Noumea"
+msgstr "DESC_Noumea"
+
+#. IPTC tags / 0x0204 (Object Attribute Reference)
+msgid "Object Attribute Reference"
+msgstr "DESC_Object Attribute Reference"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "Object Cycle"
+msgstr "DESC_Object Cycle"
+
+#. IPTC tags / 0x0205 (Object Name)
+msgid "Object Name"
+msgstr "DESC_Object Name"
+
+#. IPTC tags / 0x0203 (Object Type Reference)
+msgid "Object Type Reference"
+msgstr "DESC_Object Type Reference"
+
+#. IPTC tags / 0x02ca (ObjectData Preview Data)
+msgid "ObjectData Preview Data"
+msgstr "DESC_ObjectData Preview Data"
+
+#. IPTC tags / 0x02c8 (ObjectData Preview File Format)
+msgid "ObjectData Preview File Format"
+msgstr "DESC_ObjectData Preview File Format"
+
+#. IPTC tags / 0x02c9 (ObjectData Preview File Format Version)
+msgid "ObjectData Preview File Format Version"
+msgstr "DESC_ObjectData Preview File Format Version"
+
+#. IPTC tags / 0x075a (ObjectData Size Announced)
+msgid "ObjectData Size Announced"
+msgstr "DESC_ObjectData Size Announced"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+#. Pentax specific tags / 0x0069 (DynamicRangeExpansion)
+msgid "Off"
+msgstr "DESC_Off"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+msgid "OldSubfileType"
+msgstr "DESC_OldSubfileType"
+
+#. Pentax specific tags / 0x0069 (DynamicRangeExpansion)
+msgid "On"
+msgstr "DESC_On"
+
+#. Exif & Tiff tags / 0x0112 (Orientation)
+msgid "Orientation"
+msgstr "DESC_Orientation"
+
+#. IPTC tags / 0x0267 (Original Transmission Reference)
+msgid "Original Transmission Reference"
+msgstr "DESC_Original Transmission Reference"
+
+#. IPTC tags / 0x0241 (Originating Program)
+msgid "Originating Program"
+msgstr "DESC_Originating Program"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "PENTAX-F 28-80mm F3.5-4.5 or SIGMA AF 18-125mm F3.5-5.6 DC"
+msgstr "DESC_PENTAX-F 28-80mm F3.5-4.5 or SIGMA AF 18-125mm F3.5-5.6 DC"
+
+#. Exif & Tiff tags / 0x011d (PageName)
+msgid "PageName"
+msgstr "DESC_PageName"
+
+#. Exif & Tiff tags / 0x0129 (PageNumber)
+msgid "PageNumber"
+msgstr "DESC_PageNumber"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Pago Pago"
+msgstr "DESC_Pago Pago"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Pan Focus"
+msgstr "DESC_Pan Focus"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Panorama"
+msgstr "DESC_Panorama"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Paris"
+msgstr "DESC_Paris"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Perth"
+msgstr "DESC_Perth"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Pet"
+msgstr "DESC_Pet"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Phnom Penh"
+msgstr "DESC_Phnom Penh"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "PhotometricInterpretation"
+msgstr "DESC_PhotometricInterpretation"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "PictureMode"
+msgstr "DESC_PictureMode"
+
+#. Exif & Tiff tags / 0xa002 (PixelXDimension)
+msgid "PixelXDimension"
+msgstr "DESC_PixelXDimension"
+
+#. Exif & Tiff tags / 0xa003 (PixelYDimension)
+msgid "PixelYDimension"
+msgstr "DESC_PixelYDimension"
+
+#. Exif & Tiff tags / 0x011c (PlanarConfiguration)
+msgid "PlanarConfiguration"
+msgstr "DESC_PlanarConfiguration"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x004f (ImageTone)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Portrait"
+msgstr "DESC_Portrait"
+
+#. Exif & Tiff tags / 0x013d (Predictor)
+msgid "Predictor"
+msgstr "DESC_Predictor"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Premium"
+msgstr "DESC_Premium"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "Preset (Fireworks?)"
+msgstr "DESC_Preset (Fireworks?)"
+
+#. Pentax specific tags / 0x003e (PreviewImageBorders)
+msgid "PreviewImageBorders"
+msgstr "DESC_PreviewImageBorders"
+
+#. Pentax specific tags / 0x0003 (PreviewLength)
+msgid "PreviewLength"
+msgstr "DESC_PreviewLength"
+
+#. Pentax specific tags / 0x0004 (PreviewOffset)
+msgid "PreviewOffset"
+msgstr "DESC_PreviewOffset"
+
+#. Pentax specific tags / 0x0002 (PreviewResolution)
+msgid "PreviewResolution"
+msgstr "DESC_PreviewResolution"
+
+#. Exif & Tiff tags / 0x013f (PrimaryChromaticities)
+msgid "PrimaryChromaticities"
+msgstr "DESC_PrimaryChromaticities"
+
+#. Pentax specific tags / 0x0e00 (PrintIM)
+#. Exif & Tiff tags / 0xc4a5 (PrintIM)
+msgid "PrintIM"
+msgstr "DESC_PrintIM"
+
+#. Exif & Tiff tags / 0x000b (ProcessingSoftware)
+msgid "ProcessingSoftware"
+msgstr "DESC_ProcessingSoftware"
+
+#. IPTC tags / 0x0132 (Product I.D.)
+msgid "Product I.D."
+msgstr "DESC_Product I.D."
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Program"
+msgstr "DESC_Program"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Program AE"
+msgstr "DESC_Program AE"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Program Av Shift"
+msgstr "DESC_Program Av Shift"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Program Tv Shift"
+msgstr "DESC_Program Tv Shift"
+
+#. IPTC tags / 0x0246 (Program Version)
+msgid "Program Version"
+msgstr "DESC_Program Version"
+
+#. IPTC tags / 0x025f (Province/State)
+msgid "Province/State"
+msgstr "DESC_Province/State"
+
+#. Pentax specific tags / 0x0008 (Quality)
+msgid "Quality"
+msgstr "DESC_Quality"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "RGB"
+msgstr "DESC_RGB"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "RGB Palette"
+msgstr "DESC_RGB Palette"
+
+#. IPTC tags / 0x027d (Rasterized Caption)
+msgid "Rasterized Caption"
+msgstr "DESC_Rasterized Caption"
+
+#. Exif & Tiff tags / 0x4746 (Rating)
+msgid "Rating"
+msgstr "DESC_Rating"
+
+#. Exif & Tiff tags / 0x4749 (RatingPercent)
+msgid "RatingPercent"
+msgstr "DESC_RatingPercent"
+
+#. Pentax specific tags / 0x0039 (RawImageSize)
+msgid "RawImageSize"
+msgstr "DESC_RawImageSize"
+
+#. IPTC tags / 0x0200 (Record Version)
+msgid "Record Version"
+msgstr "DESC_Record Version"
+
+#. Pentax specific tags / 0x001c (RedBalance)
+msgid "RedBalance"
+msgstr "DESC_RedBalance"
+
+#. IPTC tags / 0x022f (Reference Date)
+msgid "Reference Date"
+msgstr "DESC_Reference Date"
+
+#. IPTC tags / 0x022d (Reference Service)
+msgid "Reference Service"
+msgstr "DESC_Reference Service"
+
+#. IPTC tags / 0x0232 (Reference number)
+msgid "Reference number"
+msgstr "DESC_Reference number"
+
+#. Exif & Tiff tags / 0x0214 (ReferenceBlackWhite)
+msgid "ReferenceBlackWhite"
+msgstr "DESC_ReferenceBlackWhite"
+
+#. Exif & Tiff tags / 0xa004 (RelatedSoundFile)
+msgid "RelatedSoundFile"
+msgstr "DESC_RelatedSoundFile"
+
+#. IPTC tags / 0x021e (Release Date)
+msgid "Release Date"
+msgstr "DESC_Release Date"
+
+#. IPTC tags / 0x0223 (Release Time)
+msgid "Release Time"
+msgstr "DESC_Release Time"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Remote Control"
+msgstr "DESC_Remote Control"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Remote Control (3 sec)"
+msgstr "DESC_Remote Control (3 sec)"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Report"
+msgstr "DESC_Report"
+
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+msgid "ResolutionUnit"
+msgstr "DESC_ResolutionUnit"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Right"
+msgstr "DESC_Right"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Rio de Janeiro"
+msgstr "DESC_Rio de Janeiro"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Rome"
+msgstr "DESC_Rome"
+
+#. Exif & Tiff tags / 0x0116 (RowsPerStrip)
+msgid "RowsPerStrip"
+msgstr "DESC_RowsPerStrip"
+
+#. Exif & Tiff tags / 0x0115 (SamplesPerPixel)
+msgid "SamplesPerPixel"
+msgstr "DESC_SamplesPerPixel"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "San Fransisco"
+msgstr "DESC_San Fransisco"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Santiago"
+msgstr "DESC_Santiago"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Sao Paulo"
+msgstr "DESC_Sao Paulo"
+
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. Pentax specific tags / 0x001f (Saturation)
+msgid "Saturation"
+msgstr "DESC_Saturation"
+
+#. Pentax specific tags / 0x021b (SaturationInfo)
+msgid "SaturationInfo"
+msgstr "DESC_SaturationInfo"
+
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "SceneCaptureType"
+msgstr "DESC_SceneCaptureType"
+
+#. Exif & Tiff tags / 0xa301 (SceneType)
+msgid "SceneType"
+msgstr "DESC_SceneType"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "SecurityClassification"
+msgstr "DESC_SecurityClassification"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Self Portrait"
+msgstr "DESC_Self Portrait"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Self-timer (12 sec)"
+msgstr "DESC_Self-timer (12 sec)"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Self-timer (2 sec)"
+msgstr "DESC_Self-timer (2 sec)"
+
+#. Exif & Tiff tags / 0x882a (SelfTimerMode)
+msgid "SelfTimerMode"
+msgstr "DESC_SelfTimerMode"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "SensingMethod"
+msgstr "DESC_SensingMethod"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sensitivity Priority AE, 1/2 EV steps"
+msgstr "DESC_Sensitivity Priority AE, 1/2 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sensitivity Priority AE, 1/3 EV steps"
+msgstr "DESC_Sensitivity Priority AE, 1/3 EV steps"
+
+#. Pentax specific tags / 0x0040 (SensitivityAdjust)
+msgid "SensitivityAdjust"
+msgstr "DESC_SensitivityAdjust"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Seoul"
+msgstr "DESC_Seoul"
+
+#. Pentax specific tags / 0x0229 (SerialNumber)
+msgid "SerialNumber"
+msgstr "DESC_SerialNumber"
+
+#. IPTC tags / 0x011e (Service Identifier)
+msgid "Service Identifier"
+msgstr "DESC_Service Identifier"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+msgid "Shade"
+msgstr "DESC_Shade"
+
+#. Pentax specific tags / 0x005c (ShakeReduction)
+msgid "ShakeReduction"
+msgstr "DESC_ShakeReduction"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Shanghai"
+msgstr "DESC_Shanghai"
+
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Sharpness"
+msgstr "DESC_Sharpness"
+
+#. Pentax specific tags / 0x0001 (ShootingMode)
+msgid "ShootingMode"
+msgstr "DESC_ShootingMode"
+
+#. Pentax specific tags / 0x0205 (ShotInfo)
+msgid "ShotInfo"
+msgstr "DESC_ShotInfo"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Shutter & Aperture Priority AE, 1/2 EV steps"
+msgstr "DESC_Shutter & Aperture Priority AE, 1/2 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Shutter & Aperture Priority AE, 1/3 EV steps"
+msgstr "DESC_Shutter & Aperture Priority AE, 1/3 EV steps"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Shutter Priority"
+msgstr "DESC_Shutter Priority"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Shutter Speed Priority"
+msgstr "DESC_Shutter Speed Priority"
+
+#. Pentax specific tags / 0x005d (ShutterCount)
+msgid "ShutterCount"
+msgstr "DESC_ShutterCount"
+
+#. Exif & Tiff tags / 0x9201 (ShutterSpeedValue)
+msgid "ShutterSpeedValue"
+msgstr "DESC_ShutterSpeedValue"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "Sigma lens"
+msgstr "DESC_Sigma lens"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Singapore"
+msgstr "DESC_Singapore"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Single-frame;No timer;Shutter button;Single exposure"
+msgstr "DESC_Single-frame;No timer;Shutter button;Single exposure"
+
+#. Pentax specific tags / 0x0009 (Size)
+msgid "Size"
+msgstr "DESC_Size"
+
+#. IPTC tags / 0x070a (Size Mode)
+msgid "Size Mode"
+msgstr "DESC_Size Mode"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Soft"
+msgstr "DESC_Soft"
+
+#. Exif & Tiff tags / 0x0131 (Software)
+msgid "Software"
+msgstr "DESC_Software"
+
+#. IPTC tags / 0x0273 (Source)
+msgid "Source"
+msgstr "DESC_Source"
+
+#. Exif & Tiff tags / 0xa20c (SpatialFrequencyResponse)
+msgid "SpatialFrequencyResponse"
+msgstr "DESC_SpatialFrequencyResponse"
+
+#. IPTC tags / 0x0228 (Special Instructions)
+msgid "Special Instructions"
+msgstr "DESC_Special Instructions"
+
+#. Exif & Tiff tags / 0x8824 (SpectralSensitivity)
+msgid "SpectralSensitivity"
+msgstr "DESC_SpectralSensitivity"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sport"
+msgstr "DESC_Sport"
+
+#. Pentax specific tags / 0x0017 (MeteringMode)
+msgid "Spot"
+msgstr "DESC_Spot"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Stage Lighting"
+msgstr "DESC_Stage Lighting"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Standard"
+msgstr "DESC_Standard"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Stockholm"
+msgstr "DESC_Stockholm"
+
+#. Exif & Tiff tags / 0x0117 (StripByteCounts)
+msgid "StripByteCounts"
+msgstr "DESC_StripByteCounts"
+
+#. Exif & Tiff tags / 0x0111 (StripOffsets)
+msgid "StripOffsets"
+msgstr "DESC_StripOffsets"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "Strong"
+msgstr "DESC_Strong"
+
+#. XMP tags / crs:ToneCurveName
+msgid "Strong Contrast"
+msgstr "DESC_Strong Contrast"
+
+#. IPTC tags / 0x080a (Subfile)
+msgid "Subfile"
+msgstr "DESC_Subfile"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "SubfileType"
+msgstr "DESC_SubfileType"
+
+#. IPTC tags / 0x020c (Subject Reference)
+msgid "Subject Reference"
+msgstr "DESC_Subject Reference"
+
+#. Exif & Tiff tags / 0x9214 (SubjectArea)
+msgid "SubjectArea"
+msgstr "DESC_SubjectArea"
+
+#. Exif & Tiff tags / 0x9206 (SubjectDistance)
+msgid "SubjectDistance"
+msgstr "DESC_SubjectDistance"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "SubjectDistanceRange"
+msgstr "DESC_SubjectDistanceRange"
+
+#. Exif & Tiff tags / 0xa214 (SubjectLocation)
+msgid "SubjectLocation"
+msgstr "DESC_SubjectLocation"
+
+#. IPTC tags / 0x025c (Sublocation)
+msgid "Sublocation"
+msgstr "DESC_Sublocation"
+
+#. Exif & Tiff tags / 0x9290 (SubsecTime)
+msgid "SubsecTime"
+msgstr "DESC_SubsecTime"
+
+#. Exif & Tiff tags / 0x9292 (SubsecTimeDigitized)
+msgid "SubsecTimeDigitized"
+msgstr "DESC_SubsecTimeDigitized"
+
+#. Exif & Tiff tags / 0x9291 (SubsecTimeOriginal)
+msgid "SubsecTimeOriginal"
+msgstr "DESC_SubsecTimeOriginal"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Sunset"
+msgstr "DESC_Sunset"
+
+#. Pentax specific tags / 0x000d (Focus)
+msgid "Super Macro"
+msgstr "DESC_Super Macro"
+
+#. IPTC tags / 0x0214 (Supplemental Category)
+msgid "Supplemental Category"
+msgstr "DESC_Supplemental Category"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Surf & Snow"
+msgstr "DESC_Surf & Snow"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Sydney"
+msgstr "DESC_Sydney"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Synchro Sound Record"
+msgstr "DESC_Synchro Sound Record"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Taipei"
+msgstr "DESC_Taipei"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "Tamron 35-90mm F4 AF or various SIGMA models"
+msgstr "DESC_Tamron 35-90mm F4 AF or various SIGMA models"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Tehran"
+msgstr "DESC_Tehran"
+
+#. Pentax specific tags / 0x0047 (Temperature)
+msgid "Temperature"
+msgstr "DESC_Temperature"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Text"
+msgstr "DESC_Text"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "Thresholding"
+msgstr "DESC_Thresholding"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "Thunderscan"
+msgstr "DESC_Thunderscan"
+
+#. Pentax specific tags / 0x0007 (Time)
+msgid "Time"
+msgstr "DESC_Time"
+
+#. IPTC tags / 0x023c (Time Created)
+msgid "Time Created"
+msgstr "DESC_Time Created"
+
+#. IPTC tags / 0x0150 (Time Sent)
+msgid "Time Sent"
+msgstr "DESC_Time Sent"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Tokyo"
+msgstr "DESC_Tokyo"
+
+#. Pentax specific tags / 0x0402 (ToneCurve)
+msgid "ToneCurve"
+msgstr "DESC_ToneCurve"
+
+#. Pentax specific tags / 0x0403 (ToneCurves)
+msgid "ToneCurves"
+msgstr "DESC_ToneCurves"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Top"
+msgstr "DESC_Top"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Top-center"
+msgstr "DESC_Top-center"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Top-left"
+msgstr "DESC_Top-left"
+
+#. Pentax specific tags / 0x000f (AFPointsInFocus)
+msgid "Top-right"
+msgstr "DESC_Top-right"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Toronto"
+msgstr "DESC_Toronto"
+
+#. Exif & Tiff tags / 0x012d (TransferFunction)
+msgid "TransferFunction"
+msgstr "DESC_TransferFunction"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "Transparency Mask"
+msgstr "DESC_Transparency Mask"
+
+#. Pentax specific tags / 0x0019 (Balance)
+#. XMP tags / crs:Balance
+msgid "Tungsten"
+msgstr "DESC_Tungsten"
+
+#. IPTC tags / 0x0164 (UNO)
+msgid "UNO"
+msgstr "DESC_UNO"
+
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "Uncalibrated"
+msgstr "DESC_Uncalibrated"
+
+#. Pentax specific tags / 0x000b (PictureMode)
+#. Pentax specific tags / 0x000b (PictureMode)
+msgid "Underwater"
+msgstr "DESC_Underwater"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Unknown"
+msgstr "DESC_Unknown"
+
+#. Pentax specific tags / 0x03ff (UnknownInfo)
+msgid "UnknownInfo"
+msgstr "DESC_UnknownInfo"
+
+#. Pentax specific tags / 0x0032 (ImageProcessing)
+msgid "Unprocessed"
+msgstr "DESC_Unprocessed"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Upper-left"
+msgstr "DESC_Upper-left"
+
+#. Pentax specific tags / 0x000e (AFPoint)
+msgid "Upper-right"
+msgstr "DESC_Upper-right"
+
+#. IPTC tags / 0x020a (Urgency)
+msgid "Urgency"
+msgstr "DESC_Urgency"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "User Selected"
+msgstr "DESC_User Selected"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "User-Selected"
+msgstr "DESC_User-Selected"
+
+#. Exif & Tiff tags / 0x9286 (UserComment)
+msgid "UserComment"
+msgstr "DESC_UserComment"
+
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+#. Pentax specific tags / 0x0023 (HomeCityName)
+msgid "Vancouver"
+msgstr "DESC_Vancouver"
+
+#. Pentax specific tags / 0x0000 (Version)
+msgid "Version"
+msgstr "DESC_Version"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Very Hard"
+msgstr "DESC_Very Hard"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Very High"
+msgstr "DESC_Very High"
+
+#. Pentax specific tags / 0x001f (Saturation)
+#. Pentax specific tags / 0x0020 (Contrast)
+msgid "Very Low"
+msgstr "DESC_Very Low"
+
+#. Pentax specific tags / 0x0021 (Sharpness)
+msgid "Very Soft"
+msgstr "DESC_Very Soft"
+
+#. Pentax specific tags / 0x004f (ImageTone)
+msgid "Vibrant"
+msgstr "DESC_Vibrant"
+
+#. Pentax specific tags / 0x0034 (DriveMode)
+#. Pentax specific tags / 0x0034 (DriveMode)
+msgid "Video"
+msgstr "DESC_Video"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Video (24 fps)"
+msgstr "DESC_Video (24 fps)"
+
+#. Pentax specific tags / 0x0033 (PictureMode)
+msgid "Video (30 fps)"
+msgstr "DESC_Video (30 fps)"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Vientiane"
+msgstr "DESC_Vientiane"
+
+#. Pentax specific tags / 0x020f (WB_RGGBLevelsCloudy)
+msgid "WB_RGGBLevelsCloudy"
+msgstr "DESC_WB_RGGBLevelsCloudy"
+
+#. Pentax specific tags / 0x020d (WB_RGGBLevelsDaylight)
+msgid "WB_RGGBLevelsDaylight"
+msgstr "DESC_WB_RGGBLevelsDaylight"
+
+#. Pentax specific tags / 0x0214 (WB_RGGBLevelsFlash)
+msgid "WB_RGGBLevelsFlash"
+msgstr "DESC_WB_RGGBLevelsFlash"
+
+#. Pentax specific tags / 0x0211 (WB_RGGBLevelsFluorescentD)
+msgid "WB_RGGBLevelsFluorescentD"
+msgstr "DESC_WB_RGGBLevelsFluorescentD"
+
+#. Pentax specific tags / 0x0212 (WB_RGGBLevelsFluorescentN)
+msgid "WB_RGGBLevelsFluorescentN"
+msgstr "DESC_WB_RGGBLevelsFluorescentN"
+
+#. Pentax specific tags / 0x0213 (WB_RGGBLevelsFluorescentW)
+msgid "WB_RGGBLevelsFluorescentW"
+msgstr "DESC_WB_RGGBLevelsFluorescentW"
+
+#. Pentax specific tags / 0x020e (WB_RGGBLevelsShade)
+msgid "WB_RGGBLevelsShade"
+msgstr "DESC_WB_RGGBLevelsShade"
+
+#. Pentax specific tags / 0x0210 (WB_RGGBLevelsTungsten)
+msgid "WB_RGGBLevelsTungsten"
+msgstr "DESC_WB_RGGBLevelsTungsten"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "Weak"
+msgstr "DESC_Weak"
+
+#. Pentax specific tags / 0x0071 (HighISONoiseReduction)
+msgid "Weakest"
+msgstr "DESC_Weakest"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Wellington"
+msgstr "DESC_Wellington"
+
+#. Exif & Tiff tags / 0xa403 (Balance)
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "Balance"
+msgstr "DESC_Balance"
+
+#. Pentax specific tags / 0x001a (BalanceMode)
+msgid "BalanceMode"
+msgstr "DESC_BalanceMode"
+
+#. Pentax specific tags / 0x0019 (Balance)
+msgid "WhiteFluorescent"
+msgstr "DESC_WhiteFluorescent"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "WhiteIsZero"
+msgstr "DESC_WhiteIsZero"
+
+#. Exif & Tiff tags / 0x013e (WhitePoint)
+#. Pentax specific tags / 0x0201 (WhitePoint)
+msgid "WhitePoint"
+msgstr "DESC_WhitePoint"
+
+#. Pentax specific tags / 0x0022 (WorldTimeLocation)
+msgid "WorldTimeLocation"
+msgstr "DESC_WorldTimeLocation"
+
+#. IPTC tags / 0x027a (Writer/Editor)
+msgid "Writer/Editor"
+msgstr "DESC_Writer/Editor"
+
+#. Exif & Tiff tags / 0x9c9d (XPAuthor)
+msgid "XPAuthor"
+msgstr "DESC_XPAuthor"
+
+#. Exif & Tiff tags / 0x9c9c (XPComment)
+msgid "XPComment"
+msgstr "DESC_XPComment"
+
+#. Exif & Tiff tags / 0x9c9e (XPKeywords)
+msgid "XPKeywords"
+msgstr "DESC_XPKeywords"
+
+#. Exif & Tiff tags / 0x9c9f (XPSubject)
+msgid "XPSubject"
+msgstr "DESC_XPSubject"
+
+#. Exif & Tiff tags / 0x9c9b (XPTitle)
+msgid "XPTitle"
+msgstr "DESC_XPTitle"
+
+#. Exif & Tiff tags / 0x011e (XPosition)
+msgid "XPosition"
+msgstr "DESC_XPosition"
+
+#. Exif & Tiff tags / 0x011a (XResolution)
+msgid "XResolution"
+msgstr "DESC_XResolution"
+
+#. Exif & Tiff tags / 0x0106 (PhotometricInterpretation)
+msgid "YCbCr"
+msgstr "DESC_YCbCr"
+
+#. Exif & Tiff tags / 0x0211 (YCbCrCoefficients)
+msgid "YCbCrCoefficients"
+msgstr "DESC_YCbCrCoefficients"
+
+#. Exif & Tiff tags / 0x0213 (YCbCrPositioning)
+msgid "YCbCrPositioning"
+msgstr "DESC_YCbCrPositioning"
+
+#. Exif & Tiff tags / 0x0212 (YCbCrSubSampling)
+msgid "YCbCrSubSampling"
+msgstr "DESC_YCbCrSubSampling"
+
+#. Exif & Tiff tags / 0x011f (YPosition)
+msgid "YPosition"
+msgstr "DESC_YPosition"
+
+#. Exif & Tiff tags / 0x011b (YResolution)
+msgid "YResolution"
+msgstr "DESC_YResolution"
+
+#. Pentax specific tags / 0x0023 (HomeCityName)
+#. Pentax specific tags / 0x0024 (DestinationCityName)
+msgid "Yangon"
+msgstr "DESC_Yangon"
+
+#. Exif & Tiff tags / 0xa301 (SceneType)
+msgid "a directly photographed image"
+msgstr "DESC_a directly photographed image"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "action"
+msgstr "DESC_action"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "action program"
+msgstr "DESC_action program"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "aerial view"
+msgstr "DESC_aerial view"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "aperture priority"
+msgstr "DESC_aperture priority"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "auto bracket"
+msgstr "DESC_auto bracket"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "auto exposure"
+msgstr "DESC_auto exposure"
+
+#. Exif & Tiff tags / 0xa403 (Balance)
+msgid "auto white balance"
+msgstr "DESC_auto white balance"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, did not fire"
+msgstr "DESC_auto, did not fire"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, did not fire, red-eye reduction"
+msgstr "DESC_auto, did not fire, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired"
+msgstr "DESC_auto, fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, red-eye reduction"
+msgstr "DESC_auto, fired, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, red-eye reduction, return detected"
+msgstr "DESC_auto, fired, red-eye reduction, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, red-eye reduction, return not detected"
+msgstr "DESC_auto, fired, red-eye reduction, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, return detected"
+msgstr "DESC_auto, fired, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "auto, fired, return not detected"
+msgstr "DESC_auto, fired, return not detected"
+
+#. XMP tags / aux:Lens
+msgid "aux:Lens"
+msgstr "DESC_aux:Lens"
+
+#. XMP tags / aux:SerialNumber
+msgid "aux:SerialNumber"
+msgstr "DESC_aux:SerialNumber"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "average"
+msgstr "DESC_average"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "both"
+msgstr "DESC_both"
+
+#. Exif & Tiff tags / 0x0213 (YCbCrPositioning)
+msgid "centered"
+msgstr "DESC_centered"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+#. XMP tags / crs:CropUnits
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+msgid "centimeters"
+msgstr "DESC_centimeters"
+
+#. Exif & Tiff tags / 0x011c (PlanarConfiguration)
+msgid "chunky"
+msgstr "DESC_chunky"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "close"
+msgstr "DESC_close"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "close-up"
+msgstr "DESC_close-up"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "cloudy weather"
+msgstr "DESC_cloudy weather"
+
+#. Exif & Tiff tags / 0x0213 (YCbCrPositioning)
+msgid "co-sited"
+msgstr "DESC_co-sited"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "color sequential area sensor"
+msgstr "DESC_color sequential area sensor"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "color sequential linear sensor"
+msgstr "DESC_color sequential linear sensor"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "confidential"
+msgstr "DESC_confidential"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "cool white fluorescent (W 3900 - 4500K)"
+msgstr "DESC_cool white fluorescent (W 3900 - 4500K)"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "couple"
+msgstr "DESC_couple"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "creative program"
+msgstr "DESC_creative program"
+
+#. XMP tags / crs:AutoBrightness
+msgid "crs:AutoBrightness"
+msgstr "DESC_crs:AutoBrightness"
+
+#. XMP tags / crs:AutoContrast
+msgid "crs:AutoContrast"
+msgstr "DESC_crs:AutoContrast"
+
+#. XMP tags / crs:AutoExposure
+msgid "crs:AutoExposure"
+msgstr "DESC_crs:AutoExposure"
+
+#. XMP tags / crs:AutoShadows
+msgid "crs:AutoShadows"
+msgstr "DESC_crs:AutoShadows"
+
+#. XMP tags / crs:BlueHue
+msgid "crs:BlueHue"
+msgstr "DESC_crs:BlueHue"
+
+#. XMP tags / crs:BlueSaturation
+msgid "crs:BlueSaturation"
+msgstr "DESC_crs:BlueSaturation"
+
+#. XMP tags / crs:Brightness
+msgid "crs:Brightness"
+msgstr "DESC_crs:Brightness"
+
+#. XMP tags / crs:CameraProfile
+msgid "crs:CameraProfile"
+msgstr "DESC_crs:CameraProfile"
+
+#. XMP tags / crs:ChromaticAberrationB
+msgid "crs:ChromaticAberrationB"
+msgstr "DESC_crs:ChromaticAberrationB"
+
+#. XMP tags / crs:ChromaticAberrationR
+msgid "crs:ChromaticAberrationR"
+msgstr "DESC_crs:ChromaticAberrationR"
+
+#. XMP tags / crs:ColorNoiseReduction
+msgid "crs:ColorNoiseReduction"
+msgstr "DESC_crs:ColorNoiseReduction"
+
+#. XMP tags / crs:Contrast
+msgid "crs:Contrast"
+msgstr "DESC_crs:Contrast"
+
+#. XMP tags / crs:CropAngle
+msgid "crs:CropAngle"
+msgstr "DESC_crs:CropAngle"
+
+#. XMP tags / crs:CropBottom
+msgid "crs:CropBottom"
+msgstr "DESC_crs:CropBottom"
+
+#. XMP tags / crs:CropHeight
+msgid "crs:CropHeight"
+msgstr "DESC_crs:CropHeight"
+
+#. XMP tags / crs:CropLeft
+msgid "crs:CropLeft"
+msgstr "DESC_crs:CropLeft"
+
+#. XMP tags / crs:CropRight
+msgid "crs:CropRight"
+msgstr "DESC_crs:CropRight"
+
+#. XMP tags / crs:CropTop
+msgid "crs:CropTop"
+msgstr "DESC_crs:CropTop"
+
+#. XMP tags / crs:CropUnits
+msgid "crs:CropUnits"
+msgstr "DESC_crs:CropUnits"
+
+#. XMP tags / crs:CropWidth
+msgid "crs:CropWidth"
+msgstr "DESC_crs:CropWidth"
+
+#. XMP tags / crs:Exposure
+msgid "crs:Exposure"
+msgstr "DESC_crs:Exposure"
+
+#. XMP tags / crs:GreenHue
+msgid "crs:GreenHue"
+msgstr "DESC_crs:GreenHue"
+
+#. XMP tags / crs:GreenSaturation
+msgid "crs:GreenSaturation"
+msgstr "DESC_crs:GreenSaturation"
+
+#. XMP tags / crs:HasCrop
+msgid "crs:HasCrop"
+msgstr "DESC_crs:HasCrop"
+
+#. XMP tags / crs:HasSettings
+msgid "crs:HasSettings"
+msgstr "DESC_crs:HasSettings"
+
+#. XMP tags / crs:LuminanceSmoothing
+msgid "crs:LuminanceSmoothing"
+msgstr "DESC_crs:LuminanceSmoothing"
+
+#. XMP tags / crs:RawFileName
+msgid "crs:RawFileName"
+msgstr "DESC_crs:RawFileName"
+
+#. XMP tags / crs:RedHue
+msgid "crs:RedHue"
+msgstr "DESC_crs:RedHue"
+
+#. XMP tags / crs:RedSaturation
+msgid "crs:RedSaturation"
+msgstr "DESC_crs:RedSaturation"
+
+#. XMP tags / crs:Saturation
+msgid "crs:Saturation"
+msgstr "DESC_crs:Saturation"
+
+#. XMP tags / crs:ShadowTint
+msgid "crs:ShadowTint"
+msgstr "DESC_crs:ShadowTint"
+
+#. XMP tags / crs:Shadows
+msgid "crs:Shadows"
+msgstr "DESC_crs:Shadows"
+
+#. XMP tags / crs:Sharpness
+msgid "crs:Sharpness"
+msgstr "DESC_crs:Sharpness"
+
+#. XMP tags / crs:Temperature
+msgid "crs:Temperature"
+msgstr "DESC_crs:Temperature"
+
+#. XMP tags / crs:Tint
+msgid "crs:Tint"
+msgstr "DESC_crs:Tint"
+
+#. XMP tags / crs:ToneCurve
+msgid "crs:ToneCurve"
+msgstr "DESC_crs:ToneCurve"
+
+#. XMP tags / crs:ToneCurveName
+msgid "crs:ToneCurveName"
+msgstr "DESC_crs:ToneCurveName"
+
+#. XMP tags / crs:Version
+msgid "crs:Version"
+msgstr "DESC_crs:Version"
+
+#. XMP tags / crs:VignetteAmount
+msgid "crs:VignetteAmount"
+msgstr "DESC_crs:VignetteAmount"
+
+#. XMP tags / crs:VignetteMidpoint
+msgid "crs:VignetteMidpoint"
+msgstr "DESC_crs:VignetteMidpoint"
+
+#. XMP tags / crs:Balance
+msgid "crs:Balance"
+msgstr "DESC_crs:Balance"
+
+#. Exif & Tiff tags / 0xa401 (CustomRendered)
+msgid "custom process"
+msgstr "DESC_custom process"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "day white fluorescent (N 4600 - 5400K)"
+msgstr "DESC_day white fluorescent (N 4600 - 5400K)"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "daylight"
+msgstr "DESC_daylight"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "daylight fluorescent (D 5700 - 7100K)"
+msgstr "DESC_daylight fluorescent (D 5700 - 7100K)"
+
+#. XMP tags / dc:Type
+msgid "dc:Type"
+msgstr "DESC_dc:Type"
+
+#. XMP tags / dc:contributor
+msgid "dc:contributor"
+msgstr "DESC_dc:contributor"
+
+#. XMP tags / dc:coverage
+msgid "dc:coverage"
+msgstr "DESC_dc:coverage"
+
+#. XMP tags / dc:creator
+msgid "dc:creator"
+msgstr "DESC_dc:creator"
+
+#. XMP tags / dc:date
+msgid "dc:date"
+msgstr "DESC_dc:date"
+
+#. XMP tags / dc:description
+msgid "dc:description"
+msgstr "DESC_dc:description"
+
+#. XMP tags / dc:format
+msgid "dc:format"
+msgstr "DESC_dc:format"
+
+#. XMP tags / dc:identifier
+msgid "dc:identifier"
+msgstr "DESC_dc:identifier"
+
+#. XMP tags / dc:language
+msgid "dc:language"
+msgstr "DESC_dc:language"
+
+#. XMP tags / dc:publisher
+msgid "dc:publisher"
+msgstr "DESC_dc:publisher"
+
+#. XMP tags / dc:relation
+msgid "dc:relation"
+msgstr "DESC_dc:relation"
+
+#. XMP tags / dc:rights
+msgid "dc:rights"
+msgstr "DESC_dc:rights"
+
+#. XMP tags / dc:source
+msgid "dc:source"
+msgstr "DESC_dc:source"
+
+#. XMP tags / dc:subject
+msgid "dc:subject"
+msgstr "DESC_dc:subject"
+
+#. XMP tags / dc:title
+msgid "dc:title"
+msgstr "DESC_dc:title"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "distant"
+msgstr "DESC_distant"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "evening"
+msgstr "DESC_evening"
+
+#. Exif & Tiff tags / 0xa20b (exif)
+msgid "exif"
+msgstr "DESC_exif"
+
+#. XMP tags / exif:ApertureValue
+msgid "exif:ApertureValue"
+msgstr "DESC_exif:ApertureValue"
+
+#. XMP tags / exif:BrightnessValue
+msgid "exif:BrightnessValue"
+msgstr "DESC_exif:BrightnessValue"
+
+#. XMP tags / exif:CFAPattern
+msgid "exif:CFAPattern"
+msgstr "DESC_exif:CFAPattern"
+
+#. XMP tags / exif:ColorSpace
+msgid "exif:ColorSpace"
+msgstr "DESC_exif:ColorSpace"
+
+#. XMP tags / exif:ComponentsConfiguration
+msgid "exif:ComponentsConfiguration"
+msgstr "DESC_exif:ComponentsConfiguration"
+
+#. XMP tags / exif:CompressedBitsPerPixel
+msgid "exif:CompressedBitsPerPixel"
+msgstr "DESC_exif:CompressedBitsPerPixel"
+
+#. XMP tags / exif:Contrast
+msgid "exif:Contrast"
+msgstr "DESC_exif:Contrast"
+
+#. XMP tags / exif:CustomRendered
+msgid "exif:CustomRendered"
+msgstr "DESC_exif:CustomRendered"
+
+#. XMP tags / exif:DateTimeDigitized
+msgid "exif:DateTimeDigitized"
+msgstr "DESC_exif:DateTimeDigitized"
+
+#. XMP tags / exif:DateTimeOriginal
+msgid "exif:DateTimeOriginal"
+msgstr "DESC_exif:DateTimeOriginal"
+
+#. XMP tags / exif:DeviceSettingDescription
+msgid "exif:DeviceSettingDescription"
+msgstr "DESC_exif:DeviceSettingDescription"
+
+#. XMP tags / exif:DigitalZoomRatio
+msgid "exif:DigitalZoomRatio"
+msgstr "DESC_exif:DigitalZoomRatio"
+
+#. XMP tags / exif:ExifVersion
+msgid "exif:ExifVersion"
+msgstr "DESC_exif:ExifVersion"
+
+#. XMP tags / exif:ExposureBiasValue
+msgid "exif:ExposureBiasValue"
+msgstr "DESC_exif:ExposureBiasValue"
+
+#. XMP tags / exif:ExposureIndex
+msgid "exif:ExposureIndex"
+msgstr "DESC_exif:ExposureIndex"
+
+#. XMP tags / exif:ExposureMode
+msgid "exif:ExposureMode"
+msgstr "DESC_exif:ExposureMode"
+
+#. XMP tags / exif:ExposureProgram
+msgid "exif:ExposureProgram"
+msgstr "DESC_exif:ExposureProgram"
+
+#. XMP tags / exif:ExposureTime
+msgid "exif:ExposureTime"
+msgstr "DESC_exif:ExposureTime"
+
+#. XMP tags / exif:FNumber
+msgid "exif:FNumber"
+msgstr "DESC_exif:FNumber"
+
+#. XMP tags / exif:FileSource
+msgid "exif:FileSource"
+msgstr "DESC_exif:FileSource"
+
+#. XMP tags / exif:Flash
+msgid "exif:Flash"
+msgstr "DESC_exif:Flash"
+
+#. XMP tags / exif:FlashEnergy
+msgid "exif:FlashEnergy"
+msgstr "DESC_exif:FlashEnergy"
+
+#. XMP tags / exif:FlashpixVersion
+msgid "exif:FlashpixVersion"
+msgstr "DESC_exif:FlashpixVersion"
+
+#. XMP tags / exif:FocalLength
+msgid "exif:FocalLength"
+msgstr "DESC_exif:FocalLength"
+
+#. XMP tags / exif:FocalLengthIn35mmFilm
+msgid "exif:FocalLengthIn35mmFilm"
+msgstr "DESC_exif:FocalLengthIn35mmFilm"
+
+#. XMP tags / exif:FocalPlaneResolutionUnit
+msgid "exif:FocalPlaneResolutionUnit"
+msgstr "DESC_exif:FocalPlaneResolutionUnit"
+
+#. XMP tags / exif:FocalPlaneXResolution
+msgid "exif:FocalPlaneXResolution"
+msgstr "DESC_exif:FocalPlaneXResolution"
+
+#. XMP tags / exif:FocalPlaneYResolution
+msgid "exif:FocalPlaneYResolution"
+msgstr "DESC_exif:FocalPlaneYResolution"
+
+#. XMP tags / exif:GPSAltitude
+msgid "exif:GPSAltitude"
+msgstr "DESC_exif:GPSAltitude"
+
+#. XMP tags / exif:GPSAltitudeRef
+msgid "exif:GPSAltitudeRef"
+msgstr "DESC_exif:GPSAltitudeRef"
+
+#. XMP tags / exif:GPSAreaInformation
+msgid "exif:GPSAreaInformation"
+msgstr "DESC_exif:GPSAreaInformation"
+
+#. XMP tags / exif:GPSDOP
+msgid "exif:GPSDOP"
+msgstr "DESC_exif:GPSDOP"
+
+#. XMP tags / exif:GPSDestBearing
+msgid "exif:GPSDestBearing"
+msgstr "DESC_exif:GPSDestBearing"
+
+#. XMP tags / exif:GPSDestBearingRef
+msgid "exif:GPSDestBearingRef"
+msgstr "DESC_exif:GPSDestBearingRef"
+
+#. XMP tags / exif:GPSDestDistance
+msgid "exif:GPSDestDistance"
+msgstr "DESC_exif:GPSDestDistance"
+
+#. XMP tags / exif:GPSDestDistanceRef
+msgid "exif:GPSDestDistanceRef"
+msgstr "DESC_exif:GPSDestDistanceRef"
+
+#. XMP tags / exif:GPSDestLatitude
+msgid "exif:GPSDestLatitude"
+msgstr "DESC_exif:GPSDestLatitude"
+
+#. XMP tags / exif:GPSDestLongitude
+msgid "exif:GPSDestLongitude"
+msgstr "DESC_exif:GPSDestLongitude"
+
+#. XMP tags / exif:GPSDifferential
+msgid "exif:GPSDifferential"
+msgstr "DESC_exif:GPSDifferential"
+
+#. XMP tags / exif:GPSImgDirection
+msgid "exif:GPSImgDirection"
+msgstr "DESC_exif:GPSImgDirection"
+
+#. XMP tags / exif:GPSImgDirectionRef
+msgid "exif:GPSImgDirectionRef"
+msgstr "DESC_exif:GPSImgDirectionRef"
+
+#. XMP tags / exif:GPSLatitude
+msgid "exif:GPSLatitude"
+msgstr "DESC_exif:GPSLatitude"
+
+#. XMP tags / exif:GPSLongitude
+msgid "exif:GPSLongitude"
+msgstr "DESC_exif:GPSLongitude"
+
+#. XMP tags / exif:GPSMapDatum
+msgid "exif:GPSMapDatum"
+msgstr "DESC_exif:GPSMapDatum"
+
+#. XMP tags / exif:GPSMeasureMode
+msgid "exif:GPSMeasureMode"
+msgstr "DESC_exif:GPSMeasureMode"
+
+#. XMP tags / exif:GPSProcessingMethod
+msgid "exif:GPSProcessingMethod"
+msgstr "DESC_exif:GPSProcessingMethod"
+
+#. XMP tags / exif:GPSSatellites
+msgid "exif:GPSSatellites"
+msgstr "DESC_exif:GPSSatellites"
+
+#. XMP tags / exif:GPSSpeed
+msgid "exif:GPSSpeed"
+msgstr "DESC_exif:GPSSpeed"
+
+#. XMP tags / exif:GPSSpeedRef
+msgid "exif:GPSSpeedRef"
+msgstr "DESC_exif:GPSSpeedRef"
+
+#. XMP tags / exif:GPSStatus
+msgid "exif:GPSStatus"
+msgstr "DESC_exif:GPSStatus"
+
+#. XMP tags / exif:GPSTimeStamp
+msgid "exif:GPSTimeStamp"
+msgstr "DESC_exif:GPSTimeStamp"
+
+#. XMP tags / exif:GPSTrack
+msgid "exif:GPSTrack"
+msgstr "DESC_exif:GPSTrack"
+
+#. XMP tags / exif:GPSTrackRef
+msgid "exif:GPSTrackRef"
+msgstr "DESC_exif:GPSTrackRef"
+
+#. XMP tags / exif:GPSVersionID
+msgid "exif:GPSVersionID"
+msgstr "DESC_exif:GPSVersionID"
+
+#. XMP tags / exif:GainControl
+msgid "exif:GainControl"
+msgstr "DESC_exif:GainControl"
+
+#. XMP tags / exif:ISOSpeedRatings
+msgid "exif:ISOSpeedRatings"
+msgstr "DESC_exif:ISOSpeedRatings"
+
+#. XMP tags / exif:ImageUniqueID
+msgid "exif:ImageUniqueID"
+msgstr "DESC_exif:ImageUniqueID"
+
+#. XMP tags / exif:LightSource
+msgid "exif:LightSource"
+msgstr "DESC_exif:LightSource"
+
+#. XMP tags / exif:MaxApertureValue
+msgid "exif:MaxApertureValue"
+msgstr "DESC_exif:MaxApertureValue"
+
+#. XMP tags / exif:MeteringMode
+msgid "exif:MeteringMode"
+msgstr "DESC_exif:MeteringMode"
+
+#. XMP tags / exif:OECF
+msgid "exif:OECF"
+msgstr "DESC_exif:OECF"
+
+#. XMP tags / exif:PixelXDimension
+msgid "exif:PixelXDimension"
+msgstr "DESC_exif:PixelXDimension"
+
+#. XMP tags / exif:PixelYDimension
+msgid "exif:PixelYDimension"
+msgstr "DESC_exif:PixelYDimension"
+
+#. XMP tags / exif:RelatedSoundFile
+msgid "exif:RelatedSoundFile"
+msgstr "DESC_exif:RelatedSoundFile"
+
+#. XMP tags / exif:Saturation
+msgid "exif:Saturation"
+msgstr "DESC_exif:Saturation"
+
+#. XMP tags / exif:SceneCaptureType
+msgid "exif:SceneCaptureType"
+msgstr "DESC_exif:SceneCaptureType"
+
+#. XMP tags / exif:SceneType
+msgid "exif:SceneType"
+msgstr "DESC_exif:SceneType"
+
+#. XMP tags / exif:SensingMethod
+msgid "exif:SensingMethod"
+msgstr "DESC_exif:SensingMethod"
+
+#. XMP tags / exif:Sharpness
+msgid "exif:Sharpness"
+msgstr "DESC_exif:Sharpness"
+
+#. XMP tags / exif:ShutterSpeedValue
+msgid "exif:ShutterSpeedValue"
+msgstr "DESC_exif:ShutterSpeedValue"
+
+#. XMP tags / exif:SpatialFrequencyResponse
+msgid "exif:SpatialFrequencyResponse"
+msgstr "DESC_exif:SpatialFrequencyResponse"
+
+#. XMP tags / exif:SpectralSensitivity
+msgid "exif:SpectralSensitivity"
+msgstr "DESC_exif:SpectralSensitivity"
+
+#. XMP tags / exif:SubjectArea
+msgid "exif:SubjectArea"
+msgstr "DESC_exif:SubjectArea"
+
+#. XMP tags / exif:SubjectDistance
+msgid "exif:SubjectDistance"
+msgstr "DESC_exif:SubjectDistance"
+
+#. XMP tags / exif:SubjectDistanceRange
+msgid "exif:SubjectDistanceRange"
+msgstr "DESC_exif:SubjectDistanceRange"
+
+#. XMP tags / exif:SubjectLocation
+msgid "exif:SubjectLocation"
+msgstr "DESC_exif:SubjectLocation"
+
+#. XMP tags / exif:UserComment
+msgid "exif:UserComment"
+msgstr "DESC_exif:UserComment"
+
+#. XMP tags / exif:Balance
+msgid "exif:Balance"
+msgstr "DESC_exif:Balance"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "exterior view"
+msgstr "DESC_exterior view"
+
+#. Exif & Tiff tags / 0xa300 (FileSource)
+msgid "film scanner"
+msgstr "DESC_film scanner"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "fine weather"
+msgstr "DESC_fine weather"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired"
+msgstr "DESC_fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, red-eye reduction"
+msgstr "DESC_fired, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, red-eye reduction, return detected"
+msgstr "DESC_fired, red-eye reduction, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, red-eye reduction, return not detected"
+msgstr "DESC_fired, red-eye reduction, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, return detected"
+msgstr "DESC_fired, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "fired, return not detected"
+msgstr "DESC_fired, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "flash"
+msgstr "DESC_flash"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "flash fired"
+msgstr "DESC_flash fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "flash function"
+msgstr "DESC_flash function"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "flash mode"
+msgstr "DESC_flash mode"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "fluorescent"
+msgstr "DESC_fluorescent"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "full-length"
+msgstr "DESC_full-length"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "full-resolution image"
+msgstr "DESC_full-resolution image"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "general view"
+msgstr "DESC_general view"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "group"
+msgstr "DESC_group"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "half-length"
+msgstr "DESC_half-length"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "headshot"
+msgstr "DESC_headshot"
+
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. XMP tags / photoshop:Urgency
+#. Exif & Tiff tags / 0xa408 (Contrast)
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+msgid "high"
+msgstr "DESC_high"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "high gain down"
+msgstr "DESC_high gain down"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "high gain up"
+msgstr "DESC_high gain up"
+
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x020a (Urgency)
+#. IPTC tags / 0x013c (Envelope Priority)
+msgid "high+"
+msgstr "DESC_high+"
+
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+#. XMP tags / photoshop:Urgency
+msgid "high++"
+msgstr "DESC_high++"
+
+#. IPTC tags / 0x013c (Envelope Priority)
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x020a (Urgency)
+msgid "high+++"
+msgstr "DESC_high+++"
+
+#. Exif & Tiff tags / 0x013d (Predictor)
+msgid "horizontal differencing"
+msgstr "DESC_horizontal differencing"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+#. XMP tags / crs:CropUnits
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+msgid "inches"
+msgstr "DESC_inches"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "interior view"
+msgstr "DESC_interior view"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "landscape"
+msgstr "DESC_landscape"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "landscape mode"
+msgstr "DESC_landscape mode"
+
+#. XMP tags / crs:ToneCurveName
+msgid "linear"
+msgstr "DESC_linear"
+
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. Exif & Tiff tags / 0xa408 (Contrast)
+#. XMP tags / photoshop:Urgency
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+msgid "low"
+msgstr "DESC_low"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "low gain down"
+msgstr "DESC_low gain down"
+
+#. Exif & Tiff tags / 0xa407 (GainControl)
+msgid "low gain up"
+msgstr "DESC_low gain up"
+
+#. IPTC tags / 0x020a (Urgency)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. XMP tags / photoshop:Urgency
+msgid "low+"
+msgstr "DESC_low+"
+
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x013c (Envelope Priority)
+#. IPTC tags / 0x020a (Urgency)
+msgid "low++"
+msgstr "DESC_low++"
+
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+msgid "macro"
+msgstr "DESC_macro"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "manual"
+msgstr "DESC_manual"
+
+#. Exif & Tiff tags / 0xa402 (ExposureMode)
+msgid "manual exposure"
+msgstr "DESC_manual exposure"
+
+#. Exif & Tiff tags / 0xa403 (Balance)
+msgid "manual white balance"
+msgstr "DESC_manual white balance"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+msgid "micrometers"
+msgstr "DESC_micrometers"
+
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+msgid "millimeters"
+msgstr "DESC_millimeters"
+
+#. IPTC tags / 0x024b (Object Cycle)
+msgid "morning"
+msgstr "DESC_morning"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "movie scene"
+msgstr "DESC_movie scene"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "multispot"
+msgstr "DESC_multispot"
+
+#. XMP tags / Iptc4xmpCore:Scene
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "night scene"
+msgstr "DESC_night scene"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "no dithering or halftoning"
+msgstr "DESC_no dithering or halftoning"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "no flash"
+msgstr "DESC_no flash"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "no flash function"
+msgstr "DESC_no flash function"
+
+#. IPTC tags / 0x020a (Urgency)
+#. Exif & Tiff tags / 0xa210 (FocalPlaneResolutionUnit)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x013c (Envelope Priority)
+#. Exif & Tiff tags / 0x0128 (ResolutionUnit)
+#. Exif & Tiff tags / 0x013d (Predictor)
+#. Exif & Tiff tags / 0xa407 (GainControl)
+#. XMP tags / photoshop:Urgency
+#. IPTC tags / 0x020a (Urgency)
+msgid "none"
+msgstr "DESC_none"
+
+#. Exif & Tiff tags / 0xa409 (Saturation)
+#. Exif & Tiff tags / 0xa408 (Contrast)
+#. IPTC tags / 0x020a (Urgency)
+#. IPTC tags / 0x013c (Envelope Priority)
+#. Exif & Tiff tags / 0xa40a (Sharpness)
+#. XMP tags / photoshop:Urgency
+msgid "normal"
+msgstr "DESC_normal"
+
+#. Exif & Tiff tags / 0xa401 (CustomRendered)
+msgid "normal process"
+msgstr "DESC_normal process"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "normal program"
+msgstr "DESC_normal program"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "not defined"
+msgstr "DESC_not defined"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, did not fire"
+msgstr "DESC_off, did not fire"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, did not fire, return not detected"
+msgstr "DESC_off, did not fire, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, no flash function"
+msgstr "DESC_off, no flash function"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "off, red-eye reduction"
+msgstr "DESC_off, red-eye reduction"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "off-beat"
+msgstr "DESC_off-beat"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, did not fire"
+msgstr "DESC_on, did not fire"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, fired"
+msgstr "DESC_on, fired"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, red-eye reduction"
+msgstr "DESC_on, red-eye reduction"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, red-eye reduction, return detected"
+msgstr "DESC_on, red-eye reduction, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, red-eye reduction, return not detected"
+msgstr "DESC_on, red-eye reduction, return not detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, return detected"
+msgstr "DESC_on, return detected"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "on, return not detected"
+msgstr "DESC_on, return not detected"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "one-chip color area sensor"
+msgstr "DESC_one-chip color area sensor"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "ordered dither or halftone"
+msgstr "DESC_ordered dither or halftone"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "other"
+msgstr "DESC_other"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "other light source"
+msgstr "DESC_other light source"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "panoramic view"
+msgstr "DESC_panoramic view"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "partial"
+msgstr "DESC_partial"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "pattern"
+msgstr "DESC_pattern"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "performing"
+msgstr "DESC_performing"
+
+#. XMP tags / photoshop:AuthorsPosition
+msgid "photoshop:AuthorsPosition"
+msgstr "DESC_photoshop:AuthorsPosition"
+
+#. XMP tags / photoshop:CaptionWriter
+msgid "photoshop:CaptionWriter"
+msgstr "DESC_photoshop:CaptionWriter"
+
+#. XMP tags / photoshop:Category
+msgid "photoshop:Category"
+msgstr "DESC_photoshop:Category"
+
+#. XMP tags / photoshop:City
+msgid "photoshop:City"
+msgstr "DESC_photoshop:City"
+
+#. XMP tags / photoshop:Country
+msgid "photoshop:Country"
+msgstr "DESC_photoshop:Country"
+
+#. XMP tags / photoshop:Credit
+msgid "photoshop:Credit"
+msgstr "DESC_photoshop:Credit"
+
+#. XMP tags / photoshop:DateCreated
+msgid "photoshop:DateCreated"
+msgstr "DESC_photoshop:DateCreated"
+
+#. XMP tags / photoshop:Headline
+msgid "photoshop:Headline"
+msgstr "DESC_photoshop:Headline"
+
+#. XMP tags / photoshop:Instructions
+msgid "photoshop:Instructions"
+msgstr "DESC_photoshop:Instructions"
+
+#. XMP tags / photoshop:Source
+msgid "photoshop:Source"
+msgstr "DESC_photoshop:Source"
+
+#. XMP tags / photoshop:State
+msgid "photoshop:State"
+msgstr "DESC_photoshop:State"
+
+#. XMP tags / photoshop:SupplementalCategories
+msgid "photoshop:SupplementalCategories"
+msgstr "DESC_photoshop:SupplementalCategories"
+
+#. XMP tags / photoshop:TransmissionReference
+msgid "photoshop:TransmissionReference"
+msgstr "DESC_photoshop:TransmissionReference"
+
+#. XMP tags / photoshop:Urgency
+msgid "photoshop:Urgency"
+msgstr "DESC_photoshop:Urgency"
+
+#. XMP tags / crs:CropUnits
+msgid "pixels"
+msgstr "DESC_pixels"
+
+#. Exif & Tiff tags / 0x011c (PlanarConfiguration)
+msgid "planar"
+msgstr "DESC_planar"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "portrait"
+msgstr "DESC_portrait"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "portrait mode"
+msgstr "DESC_portrait mode"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "posing"
+msgstr "DESC_posing"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "profile"
+msgstr "DESC_profile"
+
+#. Exif & Tiff tags / 0x0107 (Thresholding)
+msgid "randomized dither"
+msgstr "DESC_randomized dither"
+
+#. XMP tags / rdf:about
+msgid "rdf:about"
+msgstr "DESC_rdf:about"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "rear view"
+msgstr "DESC_rear view"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "red-eye mode"
+msgstr "DESC_red-eye mode"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "reduced-resolution image"
+msgstr "DESC_reduced-resolution image"
+
+#. Exif & Tiff tags / 0xa300 (FileSource)
+msgid "reflection print scanner"
+msgstr "DESC_reflection print scanner"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "restricted"
+msgstr "DESC_restricted"
+
+#. Exif & Tiff tags / 0x9209 (flash)
+msgid "returned light"
+msgstr "DESC_returned light"
+
+#. Exif & Tiff tags / 0xa001 (ColorSpace)
+msgid "sRGB"
+msgstr "DESC_sRGB"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "satellite"
+msgstr "DESC_satellite"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "secret"
+msgstr "DESC_secret"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "shade"
+msgstr "DESC_shade"
+
+#. Exif & Tiff tags / 0x8822 (ExposureProgram)
+msgid "shutter priority"
+msgstr "DESC_shutter priority"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "single"
+msgstr "DESC_single"
+
+#. Exif & Tiff tags / 0x00ff (OldSubfileType)
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "single page of multi-page image"
+msgstr "DESC_single page of multi-page image"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "single page of multi-page reduced-resolution image"
+msgstr "DESC_single page of multi-page reduced-resolution image"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM not used)"
+msgstr "DESC_smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM not used)"
+msgstr "DESC_smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 300 mm F4ED [IF] SDM (SDM not used)"
+msgstr "DESC_smc PENTAX-DA* 300 mm F4ED [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM not used)"
+msgstr "DESC_smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM not used)"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-F 35-105mm F4-5.6 or SIGMA or Tokina"
+msgstr "DESC_smc PENTAX-F 35-105mm F4-5.6 or SIGMA or Tokina"
+
+#. Pentax specific tags / 0x003f (LensType)
+msgid "smc PENTAX-F MACRO 50mm F2.8 or Sigma 50mm F2,8 MACRO"
+msgstr "DESC_smc PENTAX-F MACRO 50mm F2.8 or Sigma 50mm F2,8 MACRO"
+
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "spot"
+msgstr "DESC_spot"
+
+#. IPTC tags / 0x0283 (Image Orientation)
+msgid "square"
+msgstr "DESC_square"
+
+#. Exif & Tiff tags / 0xa406 (SceneCaptureType)
+msgid "standard"
+msgstr "DESC_standard"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "standard light A"
+msgstr "DESC_standard light A"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "standard light B"
+msgstr "DESC_standard light B"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "standard light C"
+msgstr "DESC_standard light C"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "symbolic"
+msgstr "DESC_symbolic"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "three-chip color area sensor"
+msgstr "DESC_three-chip color area sensor"
+
+#. XMP tags / tiff:Artist
+msgid "tiff:Artist"
+msgstr "DESC_tiff:Artist"
+
+#. XMP tags / tiff:BitsPerSample
+msgid "tiff:BitsPerSample"
+msgstr "DESC_tiff:BitsPerSample"
+
+#. XMP tags / tiff:Compression
+msgid "tiff:Compression"
+msgstr "DESC_tiff:Compression"
+
+#. XMP tags / tiff:Copyright
+msgid "tiff:Copyright"
+msgstr "DESC_tiff:Copyright"
+
+#. XMP tags / tiff:DateTime
+msgid "tiff:DateTime"
+msgstr "DESC_tiff:DateTime"
+
+#. XMP tags / tiff:ImageDescription
+msgid "tiff:ImageDescription"
+msgstr "DESC_tiff:ImageDescription"
+
+#. XMP tags / tiff:ImageLength
+msgid "tiff:ImageLength"
+msgstr "DESC_tiff:ImageLength"
+
+#. XMP tags / tiff:ImageWidth
+msgid "tiff:ImageWidth"
+msgstr "DESC_tiff:ImageWidth"
+
+#. XMP tags / tiff:Make
+msgid "tiff:Make"
+msgstr "DESC_tiff:Make"
+
+#. XMP tags / tiff:Model
+msgid "tiff:Model"
+msgstr "DESC_tiff:Model"
+
+#. XMP tags / tiff:Orientation
+msgid "tiff:Orientation"
+msgstr "DESC_tiff:Orientation"
+
+#. XMP tags / tiff:PhotometricInterpretation
+msgid "tiff:PhotometricInterpretation"
+msgstr "DESC_tiff:PhotometricInterpretation"
+
+#. XMP tags / tiff:PlanarConfiguration
+msgid "tiff:PlanarConfiguration"
+msgstr "DESC_tiff:PlanarConfiguration"
+
+#. XMP tags / tiff:PrimaryChromaticities
+msgid "tiff:PrimaryChromaticities"
+msgstr "DESC_tiff:PrimaryChromaticities"
+
+#. XMP tags / tiff:ReferenceBlackWhite
+msgid "tiff:ReferenceBlackWhite"
+msgstr "DESC_tiff:ReferenceBlackWhite"
+
+#. XMP tags / tiff:ResolutionUnit
+msgid "tiff:ResolutionUnit"
+msgstr "DESC_tiff:ResolutionUnit"
+
+#. XMP tags / tiff:SamplesPerPixel
+msgid "tiff:SamplesPerPixel"
+msgstr "DESC_tiff:SamplesPerPixel"
+
+#. XMP tags / tiff:Software
+msgid "tiff:Software"
+msgstr "DESC_tiff:Software"
+
+#. XMP tags / tiff:TransferFunction
+msgid "tiff:TransferFunction"
+msgstr "DESC_tiff:TransferFunction"
+
+#. XMP tags / tiff:WhitePoint
+msgid "tiff:WhitePoint"
+msgstr "DESC_tiff:WhitePoint"
+
+#. XMP tags / tiff:XResolution
+msgid "tiff:XResolution"
+msgstr "DESC_tiff:XResolution"
+
+#. XMP tags / tiff:YCbCrCoefficients
+msgid "tiff:YCbCrCoefficients"
+msgstr "DESC_tiff:YCbCrCoefficients"
+
+#. XMP tags / tiff:YCbCrPositioning
+msgid "tiff:YCbCrPositioning"
+msgstr "DESC_tiff:YCbCrPositioning"
+
+#. XMP tags / tiff:YCbCrSubSampling
+msgid "tiff:YCbCrSubSampling"
+msgstr "DESC_tiff:YCbCrSubSampling"
+
+#. XMP tags / tiff:YResolution
+msgid "tiff:YResolution"
+msgstr "DESC_tiff:YResolution"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "top secret"
+msgstr "DESC_top secret"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask"
+msgstr "DESC_transparency mask"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask of multi-page image"
+msgstr "DESC_transparency mask of multi-page image"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask of reduced-resolution image"
+msgstr "DESC_transparency mask of reduced-resolution image"
+
+#. Exif & Tiff tags / 0x00fe (SubfileType)
+msgid "transparency mask of reduced-resolution multi-page image"
+msgstr "DESC_transparency mask of reduced-resolution multi-page image"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "trilinear sensor"
+msgstr "DESC_trilinear sensor"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "tungsten (incandescent light)"
+msgstr "DESC_tungsten (incandescent light)"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "two"
+msgstr "DESC_two"
+
+#. Exif & Tiff tags / 0xa217 (SensingMethod)
+msgid "two-chip color area sensor"
+msgstr "DESC_two-chip color area sensor"
+
+#. Exif & Tiff tags / 0x9212 (SecurityClassification)
+msgid "unclassified"
+msgstr "DESC_unclassified"
+
+#. Exif & Tiff tags / 0x0103 (Compression)
+msgid "uncompressed"
+msgstr "DESC_uncompressed"
+
+#. XMP tags / Iptc4xmpCore:Scene
+msgid "under-water"
+msgstr "DESC_under-water"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+#. Exif & Tiff tags / 0xa40c (SubjectDistanceRange)
+#. Exif & Tiff tags / 0x9207 (MeteringMode)
+msgid "unknown"
+msgstr "DESC_unknown"
+
+#. Exif & Tiff tags / 0x9208 (LightSource)
+msgid "white fluorescent (WW 3200 - 3700K)"
+msgstr "DESC_white fluorescent (WW 3200 - 3700K)"
+
+#. XMP tags / x:xmptk
+msgid "x:xmptk"
+msgstr "DESC_x:xmptk"
+
+#. XMP tags / xmlns:Iptc4xmpCore
+msgid "xmlns:Iptc4xmpCore"
+msgstr "DESC_xmlns:Iptc4xmpCore"
+
+#. XMP tags / xmlns:aux
+msgid "xmlns:aux"
+msgstr "DESC_xmlns:aux"
+
+#. XMP tags / xmlns:crs
+msgid "xmlns:crs"
+msgstr "DESC_xmlns:crs"
+
+#. XMP tags / xmlns:dc
+msgid "xmlns:dc"
+msgstr "DESC_xmlns:dc"
+
+#. XMP tags / xmlns:exif
+msgid "xmlns:exif"
+msgstr "DESC_xmlns:exif"
+
+#. XMP tags / xmlns:photoshop
+msgid "xmlns:photoshop"
+msgstr "DESC_xmlns:photoshop"
+
+#. XMP tags / xmlns:rdf
+msgid "xmlns:rdf"
+msgstr "DESC_xmlns:rdf"
+
+#. XMP tags / xmlns:tiff
+msgid "xmlns:tiff"
+msgstr "DESC_xmlns:tiff"
+
+#. XMP tags / xmlns:x
+msgid "xmlns:x"
+msgstr "DESC_xmlns:x"
+
+#. XMP tags / xmlns:xmp
+msgid "xmlns:xmp"
+msgstr "DESC_xmlns:xmp"
+
+#. XMP tags / xmlns:xmpBJ
+msgid "xmlns:xmpBJ"
+msgstr "DESC_xmlns:xmpBJ"
+
+#. XMP tags / xmlns:xmpDM
+msgid "xmlns:xmpDM"
+msgstr "DESC_xmlns:xmpDM"
+
+#. XMP tags / xmlns:xmpMM
+msgid "xmlns:xmpMM"
+msgstr "DESC_xmlns:xmpMM"
+
+#. XMP tags / xmlns:xmpRights
+msgid "xmlns:xmpRights"
+msgstr "DESC_xmlns:xmpRights"
+
+#. XMP tags / xmlns:xmpTPg
+msgid "xmlns:xmpTPg"
+msgstr "DESC_xmlns:xmpTPg"
+
+#. XMP tags / xmp:Advisory
+msgid "xmp:Advisory"
+msgstr "DESC_xmp:Advisory"
+
+#. XMP tags / xmp:BaseURL
+msgid "xmp:BaseURL"
+msgstr "DESC_xmp:BaseURL"
+
+#. XMP tags / xmp:CreateDate
+msgid "xmp:CreateDate"
+msgstr "DESC_xmp:CreateDate"
+
+#. XMP tags / xmp:CreatorTool
+msgid "xmp:CreatorTool"
+msgstr "DESC_xmp:CreatorTool"
+
+#. XMP tags / xmp:Identifier
+msgid "xmp:Identifier"
+msgstr "DESC_xmp:Identifier"
+
+#. XMP tags / xmp:Label
+msgid "xmp:Label"
+msgstr "DESC_xmp:Label"
+
+#. XMP tags / xmp:MetadataDate
+msgid "xmp:MetadataDate"
+msgstr "DESC_xmp:MetadataDate"
+
+#. XMP tags / xmp:ModifyDate
+msgid "xmp:ModifyDate"
+msgstr "DESC_xmp:ModifyDate"
+
+#. XMP tags / xmp:Nickname
+msgid "xmp:Nickname"
+msgstr "DESC_xmp:Nickname"
+
+#. XMP tags / xmp:Rating
+msgid "xmp:Rating"
+msgstr "DESC_xmp:Rating"
+
+#. XMP tags / xmp:Thumbnails
+msgid "xmp:Thumbnails"
+msgstr "DESC_xmp:Thumbnails"
+
+#. XMP tags / xmpBJ:JobRef
+msgid "xmpBJ:JobRef"
+msgstr "DESC_xmpBJ:JobRef"
+
+#. XMP tags / xmpMM:DerivedFrom
+msgid "xmpMM:DerivedFrom"
+msgstr "DESC_xmpMM:DerivedFrom"
+
+#. XMP tags / xmpMM:DocumentID
+msgid "xmpMM:DocumentID"
+msgstr "DESC_xmpMM:DocumentID"
+
+#. XMP tags / xmpMM:History
+msgid "xmpMM:History"
+msgstr "DESC_xmpMM:History"
+
+#. XMP tags / xmpMM:InstanceID
+msgid "xmpMM:InstanceID"
+msgstr "DESC_xmpMM:InstanceID"
+
+#. XMP tags / xmpMM:LastURL
+msgid "xmpMM:LastURL"
+msgstr "DESC_xmpMM:LastURL"
+
+#. XMP tags / xmpMM:ManageTo
+msgid "xmpMM:ManageTo"
+msgstr "DESC_xmpMM:ManageTo"
+
+#. XMP tags / xmpMM:ManageUI
+msgid "xmpMM:ManageUI"
+msgstr "DESC_xmpMM:ManageUI"
+
+#. XMP tags / xmpMM:ManagedFrom
+msgid "xmpMM:ManagedFrom"
+msgstr "DESC_xmpMM:ManagedFrom"
+
+#. XMP tags / xmpMM:Manager
+msgid "xmpMM:Manager"
+msgstr "DESC_xmpMM:Manager"
+
+#. XMP tags / xmpMM:ManagerVariant
+msgid "xmpMM:ManagerVariant"
+msgstr "DESC_xmpMM:ManagerVariant"
+
+#. XMP tags / xmpMM:RenditionClass
+msgid "xmpMM:RenditionClass"
+msgstr "DESC_xmpMM:RenditionClass"
+
+#. XMP tags / xmpMM:RenditionParams
+msgid "xmpMM:RenditionParams"
+msgstr "DESC_xmpMM:RenditionParams"
+
+#. XMP tags / xmpMM:VersionID
+msgid "xmpMM:VersionID"
+msgstr "DESC_xmpMM:VersionID"
+
+#. XMP tags / xmpMM:Versions
+msgid "xmpMM:Versions"
+msgstr "DESC_xmpMM:Versions"
+
+#. XMP tags / xmpRights:Certificate
+msgid "xmpRights:Certificate"
+msgstr "DESC_xmpRights:Certificate"
+
+#. XMP tags / xmpRights:Marked
+msgid "xmpRights:Marked"
+msgstr "DESC_xmpRights:Marked"
+
+#. XMP tags / xmpRights:Owner
+msgid "xmpRights:Owner"
+msgstr "DESC_xmpRights:Owner"
+
+#. XMP tags / xmpRights:UsageTerms
+msgid "xmpRights:UsageTerms"
+msgstr "DESC_xmpRights:UsageTerms"
+
+#. XMP tags / xmpRights:WebStatement
+msgid "xmpRights:WebStatement"
+msgstr "DESC_xmpRights:WebStatement"
+
+#. XMP tags / xmpTPg:Colorants
+msgid "xmpTPg:Colorants"
+msgstr "DESC_xmpTPg:Colorants"
+
+#. XMP tags / xmpTPg:Fonts
+msgid "xmpTPg:Fonts"
+msgstr "DESC_xmpTPg:Fonts"
+
+#. XMP tags / xmpTPg:MaxPageSize
+msgid "xmpTPg:MaxPageSize"
+msgstr "DESC_xmpTPg:MaxPageSize"
+
+#. XMP tags / xmpTPg:NPages
+msgid "xmpTPg:NPages"
+msgstr "DESC_xmpTPg:NPages"
+
+#. XMP tags / xmpTPg:PlateNames
+msgid "xmpTPg:PlateNames"
+msgstr "DESC_xmpTPg:PlateNames"
+
Index: /extensions/AMetaData/JpegMetaData/Readers/AppMarkerSegmentReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/AppMarkerSegmentReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/AppMarkerSegmentReader.class.php	(revision 4686)
@@ -0,0 +1,906 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The AppMarkerSegmentReader is a class for reading the segment of a Jpeg file
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * The class can recognize many kind of segments, but the content is not
+ * analyzed for all of them.
+ *
+ * If you want to implement new functionnality to read segment, you must start
+ * here.
+ *
+ * Datas are exploited only for the segments :
+ *  - APP1  : for Exif IFDs & Xmp datas
+ *  - APP13 : for 8BIM Iptc blocks
+ *  - COM   : comments block
+ *
+ *
+ * This class provides theses public functions :
+ *  - (static) read
+ *  - (static) isValidMarkerHeader
+ *  - (static) markerName
+ *  - getHeader
+ *  - getOffset
+ *  - getLength
+ *  - getSubType
+ *  - dataLoaded
+ *  - getData
+ *
+ *  Read the code for help
+ *
+ * -----------------------------------------------------------------------------
+ *
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/ConvertData.class.php");
+  require_once(JPEG_METADATA_DIR."Common/Data.class.php");
+
+  require_once(JPEG_METADATA_DIR."Readers/TiffReader.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/XmpReader.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/IptcReader.class.php");
+
+  class AppMarkerSegmentReader
+  {
+    const SEGMENT_HEAD  = 0xFF;
+    const SEGMENT_APP0  = 0xE0;
+    const SEGMENT_APP1  = 0xE1;
+    const SEGMENT_APP2  = 0xE2;
+    const SEGMENT_APP3  = 0xE3;
+    const SEGMENT_APP4  = 0xE4;
+    const SEGMENT_APP5  = 0xE5;
+    const SEGMENT_APP6  = 0xE6;
+    const SEGMENT_APP7  = 0xE7;
+    const SEGMENT_APP8  = 0xE8;
+    const SEGMENT_APP9  = 0xE9;
+    const SEGMENT_APP10 = 0xEA;
+    const SEGMENT_APP11 = 0xEB;
+    const SEGMENT_APP12 = 0xEC;
+    const SEGMENT_APP13 = 0xED;
+    const SEGMENT_APP14 = 0xEE;
+    const SEGMENT_APP15 = 0xEF;
+
+    const SEGMENT_SOF0  = 0xC0;  // Start Of Frame - Baseline DCT (huffman)
+    const SEGMENT_SOF1  = 0xC1;  // Start Of Frame - Extended sequential DCT (huffman)
+    const SEGMENT_SOF2  = 0xC2;  // Start Of Frame - Progressive DCT (huffman)
+    const SEGMENT_SOF3  = 0xC3;  // Start Of Frame - Spatial (Lossless) DCT (Huffman)
+    const SEGMENT_SOF5  = 0xC5;  // Start Of Frame - Differential sequential DCT (Huffman)
+    const SEGMENT_SOF6  = 0xC6;  // Start Of Frame - Progressive sequential DCT (Huffman)
+    const SEGMENT_SOF7  = 0xC7;  // Start Of Frame - Differential spatial DCT (Huffman)
+    const SEGMENT_SOF9  = 0xC9;  // Start Of Frame - Extended sequential DCT (arithmetic)
+    const SEGMENT_SOFA  = 0xCA;  // Start Of Frame - Progressive DCT (arithmetic)
+    const SEGMENT_SOFB  = 0xCB;  // Start Of Frame - Spatial (lossless) DCT (arithmetic)
+    const SEGMENT_SOFD  = 0xCD;  // Start Of Frame - Differential sequential DCT (arithmetic)
+    const SEGMENT_SOFE  = 0xCE;  // Start Of Frame - Differential progressive DCT (arithmetic)
+    const SEGMENT_SOFF  = 0xCF;  // Start Of Frame - Differential lossless (arithmetic)
+
+    const SEGMENT_DQT   = 0xDB;  // Define Quantization Table
+    const SEGMENT_DHT   = 0xC4;  // Define Huffman Tables
+    const SEGMENT_JPG   = 0xC8;  // Reserved for JPEG extensions
+    const SEGMENT_DAC   = 0xCC;  // Arithmetic Conditionning info
+    const SEGMENT_SOS   = 0xDA;  // Start Of Scan
+    const SEGMENT_DRI   = 0xDD;  // Define Restart Interval
+    const SEGMENT_COM   = 0xFE;  // Comment
+
+
+
+    const UNKNOWN          = "?";
+
+    /*
+     * APP0 SubTypes
+     */
+    const APP0_JFIF        = "JFIF";
+    const APP0_JFXX        = "JFXX";
+    const APP0_CIFF        = "CIFF";
+    const APP0_AVI1        = "AVI1";
+
+    /*
+     * APP1 SubTypes
+     */
+    const APP1_EXIF        = "EXIF";
+    const APP1_XMP         = "XMP";
+    const APP1_EXTENDEDXMP = "ExtendedXMP";
+
+    /*
+     * APP2 SubTypes
+     */
+    const APP2_ICCPROFILE  = "ICC Profile";
+    const APP2_FPXR        = "FlashPix";
+    const APP2_MPF         = "MPF";
+    const APP2_SAMSUNGLP   = "Samsung large preview";
+
+    /*
+     * APP3 SubTypes
+     */
+    const APP3_META        = "Meta";
+    const APP3_STIM        = "Stim";
+
+    /*
+     * APP4 SubTypes
+     */
+    const APP4_SCALADO     = "Scalado";
+
+    /*
+     * APP5 SubTypes
+     */
+    const APP5_RMETA       = "Ricoh Meta";
+
+    /*
+     * APP6 SubTypes
+     */
+    const APP6_EPPIM       = "EPPIM";
+    const APP6_NITF        = "NITF";
+
+    /*
+     * APP8 SubTypes
+     */
+    const APP8_SPIFF       = "SPIFF";
+
+    /*
+     * APP10 SubTypes
+     */
+    const APP10_COMMENT    = "Comment";
+
+    /*
+     * APP12 SubTypes
+     */
+    const APP12_PICTUREINFO = "PictureInfo";
+    const APP12_DUCKY      = "Ducky";
+
+    /*
+     * APP13 SubTypes
+     */
+    const APP13_PHOTOSHOP  = "Photoshop";
+    const APP13_ADOBECM    = "Adobe CM";
+
+    /*
+     * APP14 SubTypes
+     */
+    const APP14_ADOBE      = "Adobe";
+
+    /*
+     * APP15 SubTypes
+     */
+    const APP15_GRAPHICCONVERTER = "GraphicConverter";
+
+    /*
+     * Other SubTypes
+     */
+    const SOF0 = "Start Of Frame - Baseline DCT (huffman)";
+    const SOF1 = "Start Of Frame - Extended sequential DCT (huffman)";
+    const SOF2 = "Start Of Frame - Progressive DCT (huffman)";
+    const SOF3 = "Start Of Frame - Spatial (Lossless) DCT (Huffman)";
+    const SOF5 = "Start Of Frame - Differential sequential DCT (Huffman)";
+    const SOF6 = "Start Of Frame - Progressive sequential DCT (Huffman)";
+    const SOF7 = "Start Of Frame - Differential spatial DCT (Huffman)";
+    const SOF9 = "Start Of Frame - Extended sequential DCT (arithmetic)";
+    const SOFA = "Start Of Frame - Progressive DCT (arithmetic)";
+    const SOFB = "Start Of Frame - Spatial (lossless) DCT (arithmetic)";
+    const SOFD = "Start Of Frame - Differential sequential DCT (arithmetic)";
+    const SOFE = "Start Of Frame - Differential progressive DCT (arithmetic)";
+    const SOFF = "Start Of Frame - Differential lossless (arithmetic)";
+    const DHT  = "Define Huffman Tables";
+    const JPG  = "Reserved for JPEG extensions";
+    const DAC  = "Arithmetic Conditionning info";
+    const SOS  = "Start Of Scan";
+    const DRI  = "Define Restart Interval";
+    const COM  = "Comment";
+    const DQT  = "Define Quantization Table";
+
+
+
+    private $header = 0xFF;
+    private $offset = 0;
+    private $length = 0;
+    private $subType = "";
+    private $data = NULL;
+    private $dataLoaded = false;
+    private $workData = NULL;
+
+
+    /**
+     * try to read a marker at the designed offset
+     *
+     * @param handler $fileHandler : a handler on an opened and valid file
+     *
+     * @param ULong $offset : where start reading the segment in the file
+     *
+     * @return false if there is no marker at this offset, otherwise returns an
+     * instance of a new AppMarkerSegmentReader object
+     */
+    static public function read($fileHandler, $offset)
+    {
+      /* if end of file, return false */
+      if(feof($fileHandler)) return(false);
+
+      fseek($fileHandler, $offset);
+      $header=ConvertData::toUByte(fread($fileHandler, 1));
+
+      /*
+       * each segment header start with 0xFF
+       *
+       * if the reader byte equals 0xFF, read the next byte.
+       * the next byte must equals one of the defined segment headers (between
+       * the first and last valid segments)
+       *
+       * if the segment is valid, the next 2 bytes determine the size of the
+       * segment, excluding the header, but including the segment size
+       *
+       */
+      if($header==self::SEGMENT_HEAD)
+      {
+        $header=ConvertData::toUByte(fread($fileHandler, 1));
+        if(self::isValidMarkerHeader($header))
+        {
+          $length=ConvertData::toUShort(fread($fileHandler, 2), BYTE_ORDER_BIG_ENDIAN);
+          /*
+           * inside a segment, length include the 2 byte designed for the length
+           * size, so to read the associated data, needs to read length-2bytes
+           *
+           * the length exclude the 2bytes needed for the header identifier
+           *
+           */
+          $datas=fread($fileHandler, $length-2);
+
+          switch($header)
+          {
+            case self::SEGMENT_APP0:
+              if(preg_match('/^JFIF\x00/',$datas)>0)
+              {
+                $subType=self::APP0_JFIF;
+              }
+              elseif(preg_match('/^JFXX\x00\x10/',$datas)>0)
+              {
+                $subType=self::APP0_JFXX;
+              }
+              elseif(preg_match('/^(II|MM).{4}HEAPJPGM/s',$datas)>0)
+              {
+                $subType=self::APP0_CIFF;
+              }
+              elseif(preg_match('/^AVI1/s',$datas)>0)
+              {
+                $subType=self::APP0_AVI1;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP1:
+              if(preg_match('/^Exif\x00\x00/',$datas)>0)
+              {
+                $subType=self::APP1_EXIF;
+                $datas = substr($datas, 6);
+              }
+              elseif(preg_match('/^http:\/\/ns.adobe.com\/xmp\/extension\/\x00/',$datas)>0)
+              {
+                $subType=self::APP1_EXTENDEDXMP;
+              }
+              elseif(preg_match('/^(http:\/\/|<exif:)/',$datas)>0)
+              {
+                $subType=self::APP1_XMP;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP2:
+              if(preg_match('/^ICC_PROFILE\x00/',$datas)>0)
+              {
+                $subType=self::APP2_ICCPROFILE;
+              }
+              elseif(preg_match('/^FPXR\x00/',$datas)>0)
+              {
+                $subType=self::APP2_FPXR;
+              }
+              elseif(preg_match('/^MPF\x00/',$datas)>0)
+              {
+                $subType=self::APP2_MPF;
+              }
+              elseif(preg_match('/^\xff\xd8\xff\xdb/',$datas)>0)
+              {
+                $subType=self::APP2_SAMSUNGLP;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP3:
+              if(preg_match('/^(Meta|META|Exif)\x00\x00/',$datas)>0)
+              {
+                $subType=self::APP3_META;
+              }
+              elseif(preg_match('/^Stim\x00/',$datas)>0)
+              {
+                $subType=self::APP3_STIM;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP4:
+              if(preg_match('/^SCALADO\x00/',$datas)>0)
+              {
+                $subType=self::APP4_SCALADO;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP5:
+              if(preg_match('/^RMETA\x00/',$datas)>0)
+              {
+                $subType=self::APP5_RMETA;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP6:
+              if(preg_match('/^EPPIM\x00/',$datas)>0)
+              {
+                $subType=self::APP6_EPPIM;
+              }
+              elseif(preg_match('/^NTIF\x00/',$datas)>0)
+              {
+                $subType=self::APP6_NTIF;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP7:
+              $subType=self::UNKNOWN;
+              break;
+            case self::SEGMENT_APP8:
+              if(preg_match('/^SPIFF\x00/',$datas)>0)
+              {
+                $subType=self::APP8_SPIFF;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP9:
+              $subType=self::UNKNOWN;
+              break;
+            case self::SEGMENT_APP10:
+              if(preg_match('/^UNICODE\x00/',$datas)>0)
+              {
+                $subType=self::APP10_COMMENT;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP11:
+              $subType=self::UNKNOWN;
+              break;
+            case self::SEGMENT_APP12:
+              if(preg_match('/^(\[picture info\]|Type=)/',$datas)>0)
+              {
+                $subType=self::APP12_PICTUREINFO;
+              }
+              elseif(preg_match('/^Ducky/',$datas)>0)
+              {
+                $subType=self::APP12_DUCKY;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP13:
+              if(preg_match('/^(Photoshop 3.0\0|Adobe_Photoshop2.5)/',$datas)>0)
+              {
+                $subType=self::APP13_PHOTOSHOP;
+              }
+              elseif(preg_match('/^Adobe_CM/',$datas)>0)
+              {
+                $subType=self::APP13_ADOBECM;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP14:
+              if(preg_match('/^Adobe/',$datas)>0)
+              {
+                $subType=self::APP14_ADOBE;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_APP15:
+              if(preg_match('/^Q\s*(\d+)/',$datas)>0)
+              {
+                $subType=self::APP15_GRAPHICCONVERTER;
+              }
+              else
+              {
+                $subType=self::UNKNOWN;
+              }
+              break;
+            case self::SEGMENT_DQT:
+                $subType=self::DQT;
+              break;
+            case self::SEGMENT_SOF0:
+                $subType=self::SOF0;
+              break;
+            case self::SEGMENT_SOF1:
+                $subType=self::SOF1;
+              break;
+            case self::SEGMENT_SOF2:
+                $subType=self::SOF2;
+              break;
+            case self::SEGMENT_SOF3:
+                $subType=self::SOF3;
+              break;
+            case self::SEGMENT_SOF5:
+                $subType=self::SOF5;
+              break;
+            case self::SEGMENT_SOF6:
+                $subType=self::SOF6;
+              break;
+            case self::SEGMENT_SOF7:
+                $subType=self::SOF7;
+              break;
+            case self::SEGMENT_SOF9:
+                $subType=self::SOF9;
+              break;
+            case self::SEGMENT_SOFA:
+                $subType=self::SOFA;
+              break;
+            case self::SEGMENT_SOFB:
+                $subType=self::SOFB;
+              break;
+            case self::SEGMENT_SOFD:
+                $subType=self::SOFD;
+              break;
+            case self::SEGMENT_SOFE:
+                $subType=self::SOFE;
+              break;
+            case self::SEGMENT_SOFF:
+                $subType=self::SOFF;
+              break;
+            case self::SEGMENT_DHT:
+                $subType=self::DHT;
+              break;
+            case self::SEGMENT_JPG:
+                $subType=self::JPG;
+              break;
+            case self::SEGMENT_DAC:
+                $subType=self::DAC;
+              break;
+            case self::SEGMENT_SOS:
+                $subType=self::SOS;
+              break;
+            case self::SEGMENT_DRI:
+                $subType=self::DRI;
+              break;
+            case self::SEGMENT_COM:
+                $subType=self::COM;
+                break;
+            default:
+              /* in other case, return an new object Marker */
+              $subType=self::UNKNOWN;
+          }
+          return(new AppMarkerSegmentReader($header, $offset, $length+2, $subType, $datas));
+        }
+      }
+
+      return(false);
+    }
+
+    /**
+     * returns true if the given segment marker is a known segment
+     *
+     * @param UByte $value : the identifier of the segment
+     * @return Boolean
+     */
+    static function isValidMarkerHeader($value)
+    {
+      if($value==self::SEGMENT_HEAD or
+         $value==self::SEGMENT_APP0 or
+         $value==self::SEGMENT_APP1 or
+         $value==self::SEGMENT_APP2 or
+         $value==self::SEGMENT_APP3 or
+         $value==self::SEGMENT_APP4 or
+         $value==self::SEGMENT_APP5 or
+         $value==self::SEGMENT_APP6 or
+         $value==self::SEGMENT_APP7 or
+         $value==self::SEGMENT_APP8 or
+         $value==self::SEGMENT_APP9 or
+         $value==self::SEGMENT_APP10 or
+         $value==self::SEGMENT_APP11 or
+         $value==self::SEGMENT_APP12 or
+         $value==self::SEGMENT_APP13 or
+         $value==self::SEGMENT_APP14 or
+         $value==self::SEGMENT_APP15 or
+         $value==self::SEGMENT_SOF0 or
+         $value==self::SEGMENT_SOF1 or
+         $value==self::SEGMENT_SOF2 or
+         $value==self::SEGMENT_SOF3 or
+         $value==self::SEGMENT_SOF5 or
+         $value==self::SEGMENT_SOF6 or
+         $value==self::SEGMENT_SOF7 or
+         $value==self::SEGMENT_SOF9 or
+         $value==self::SEGMENT_SOFA or
+         $value==self::SEGMENT_SOFB or
+         $value==self::SEGMENT_SOFD or
+         $value==self::SEGMENT_SOFE or
+         $value==self::SEGMENT_SOFF or
+         $value==self::SEGMENT_DHT  or
+         $value==self::SEGMENT_JPG  or
+         $value==self::SEGMENT_DAC  or
+         $value==self::SEGMENT_SOS  or
+         $value==self::SEGMENT_DRI  or
+         $value==self::SEGMENT_COM  or
+         $value==self::SEGMENT_DQT)
+      {
+        return(true);
+      }
+      return(false);
+    }
+
+    /**
+     * returns the name of the given segment
+     *
+     * @param UByte $value : the identifier of the segment
+     *
+     * @return String
+     */
+    static function markerName($value)
+    {
+      switch($value)
+      {
+        case self::SEGMENT_APP0:
+          return("APP0");
+        case self::SEGMENT_APP1:
+          return("APP1");
+        case self::SEGMENT_APP2:
+          return("APP2");
+        case self::SEGMENT_APP3:
+          return("APP3");
+        case self::SEGMENT_APP4:
+          return("APP4");
+        case self::SEGMENT_APP5:
+          return("APP5");
+        case self::SEGMENT_APP6:
+          return("APP6");
+        case self::SEGMENT_APP7:
+          return("APP7");
+        case self::SEGMENT_APP8:
+          return("APP8");
+        case self::SEGMENT_APP9:
+          return("APP9");
+        case self::SEGMENT_APP10:
+          return("APP10");
+        case self::SEGMENT_APP11:
+          return("APP11");
+        case self::SEGMENT_APP12:
+          return("APP12");
+        case self::SEGMENT_APP13:
+          return("APP13");
+        case self::SEGMENT_APP14:
+          return("APP14");
+        case self::SEGMENT_APP15:
+          return("APP15");
+        case self::SEGMENT_DQT:
+          return("DQT");
+        case self::SEGMENT_SOF0:
+          return("SOF0");
+        case self::SEGMENT_SOF1:
+          return("SOF1");
+        case self::SEGMENT_SOF2:
+          return("SOF2");
+        case self::SEGMENT_SOF3:
+          return("SOF3");
+        case self::SEGMENT_SOF5:
+          return("SOF5");
+        case self::SEGMENT_SOF6:
+          return("SOF6");
+        case self::SEGMENT_SOF7:
+          return("SOF7");
+        case self::SEGMENT_SOF9:
+          return("SOF9");
+        case self::SEGMENT_SOFA:
+          return("SOFA");
+        case self::SEGMENT_SOFB:
+          return("SOFB");
+        case self::SEGMENT_SOFD:
+          return("SOFD");
+        case self::SEGMENT_SOFE:
+          return("SOFE");
+        case self::SEGMENT_SOFF:
+          return("SOFF");
+        case self::SEGMENT_DHT:
+          return("DHT");
+        case self::SEGMENT_JPG:
+          return("JPG");
+        case self::SEGMENT_DAC:
+          return("DAC");
+        case self::SEGMENT_SOS:
+          return("SOS");
+        case self::SEGMENT_DRI:
+          return("DRI");
+        case self::SEGMENT_COM:
+          return("COM");
+        default:
+          return(sprintf("%02x", $value));
+      }
+    }
+
+
+    /**
+     *
+     *
+     * @param UByte $header   : the identifier of the segment
+     *
+     * @param ULong $offset   : offset of the segment in the jpeg file
+     *
+     * @param UShort $length  : size of the segment, including the header and
+     *                          including the segment size (4bytes)
+     *
+     * @param String $subType : the subtype of the segment (for example an APP1
+     *                          segment can have EXIF or XMP datas)
+     *
+     * @param String $data    : the raw data of the segment, excluding the
+     *                          segment size and header
+     *
+     */
+    function __construct($header, $offset, $length, $subType, $data)
+    {
+      $this->header = $header;
+      $this->offset = $offset;
+      $this->length = $length;
+      $this->subType = $subType;
+      $this->workData = new Data($data);
+
+      $this->readData();
+
+      $this->workData->clear();
+    }
+
+    function __destruct()
+    {
+      unset($this->workData);
+      unset($this->data);
+    }
+
+    /**
+     * returns the identifiant of the segment (see the consts SEGMENT_xxxxxx for
+     * to know the list)
+     *
+     * @return UByte
+     */
+    public function getHeader()
+    {
+      return($this->header);
+    }
+
+
+    /**
+     * returns the offset of the segment in the jpeg file
+     *
+     * @return ULong
+     */
+    public function getOffset()
+    {
+      return($this->offset);
+    }
+
+    /**
+     * returns the length of the segment, including the segment header and the
+     * segment size (4 bytes)
+     *
+     * @return UShort
+     */
+    public function getLength()
+    {
+      return($this->length);
+    }
+
+    /**
+     * returns the subtype of the segment
+     *
+     * @return String
+     */
+    public function getSubType()
+    {
+      return($this->subType);
+    }
+
+    /**
+     * returns true if the segment data has been loaded
+     *
+     * @return Boolean
+     */
+    public function dataLoaded()
+    {
+      return($this->dataLoaded);
+    }
+
+    /**
+     * returns the data of the segment.
+     *
+     * @return depends on the segment subtype
+     */
+    public function getData()
+    {
+      return($this->data);
+    }
+
+
+    /**
+     * read the segment datas
+     */
+    private function readData()
+    {
+      switch($this->header)
+      {
+        case self::SEGMENT_APP0:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP1:
+          $this->readSegmentAPP1();
+          break;
+        case self::SEGMENT_APP2:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP3:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP4:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP5:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP6:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP7:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP8:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP9:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP10:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP11:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP12:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP13:
+          $this->readSegmentAPP13();
+          break;
+        case self::SEGMENT_APP14:
+          /* not implemented */
+          break;
+        case self::SEGMENT_APP15:
+          /* not implemented */
+          break;
+        case self::SEGMENT_COM:
+          $this->readSegmentCOM();
+          break;
+        default:
+          break;
+      }
+    }
+
+    /**
+     *  read the content of an "APP1" segment
+     */
+    private function readSegmentAPP1()
+    {
+      switch($this->subType)
+      {
+        case self::APP1_EXIF:
+          $this->data = new TiffReader($this->workData, $this->offset+10);
+          $this->dataLoaded=true;
+          break;
+        case self::APP1_XMP:
+          $this->data = new XmpReader($this->workData->readASCII());
+          $this->dataLoaded=true;
+          break;
+        case self::APP1_EXTENDED:
+          $this->data = $this->workData->readASCII();
+          $this->dataLoaded=true;
+          break;
+        default:
+          break;
+      }
+    }
+
+    /**
+     *  read the content of an "APP13" segment
+     */
+    private function readSegmentAPP13()
+    {
+      switch($this->subType)
+      {
+        case self::APP13_PHOTOSHOP:
+          $this->data = new IptcReader($this->workData->readASCII());
+          $this->dataLoaded=true;
+          break;
+        case self::APP13_ADOBECM:
+          break;
+        default:
+          break;
+      }
+    }
+
+    /**
+     *  read the content of an "COM" segment
+     */
+    private function readSegmentCOM()
+    {
+      $this->data = $this->workData->readASCII();
+      $this->dataLoaded=true;
+    }
+
+    public function toString()
+    {
+      $returned="Header: 0xff".sprintf("%02x", $this->header)." (".self::markerName($this->header).")".
+                " ; offset: 0x".sprintf("%08x", $this->offset).
+                " ; length: 0x".sprintf("%04x", $this->length).
+                " ; subType: ".$this->subType;
+      return($returned);
+    }
+
+
+  }
+
+
+ ?>
Index: /extensions/AMetaData/JpegMetaData/Readers/GenericReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/GenericReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/GenericReader.class.php	(revision 4686)
@@ -0,0 +1,213 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The GenericReader is a generic class providing methods for tags management
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * This class is not declared as an abstract class, but it's not recommanded to
+ * create object with it.
+ *
+ *
+ * Derived classes :
+ *  - IfdReader         (for exif tags)
+ *  - GpsReader         (for exif GPS tags, in fact derived from IfdReader)
+ *  - MakerNotesReader  (for maker notes tags, in fact derived from IfdReader)
+ *  - PentaxReader      (for Pentax exif tags, in fact derived from MakerNotesReader)
+ *  - IptcReader        (for iptc tags)
+ *  - XmpReader         (for xmp tags)
+ *
+ *
+ * This class provides theses public functions :
+ *  - getNbTags
+ *  - getTag
+ *  - getTags
+ *  - getTagIndexById
+ *  - getTagById
+ *  - getTagByName
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Data.class.php");
+
+
+  class GenericReader
+  {
+    protected $nbEntries = 0;
+    protected $entries = Array();
+
+    protected $data = null;
+
+    protected $tagDef = null; // $tagDef must be a KnownTags (or derived) object
+
+    /**
+     * the constructor needs data to parse ; given data must be a String
+     *
+     * @param String $data : data to parse
+     */
+    function __construct($data)
+    {
+      $this->initializeTagDef();
+      $this->data=new Data($data);
+    }
+
+    function __destruct()
+    {
+      unset($this->tagDef);
+      unset($this->data);
+      unset($this->entries);
+    }
+
+    public function toString()
+    {
+      $returned="NbEntries: ".sprintf("%02d", $this->nbEntries);
+      return($returned);
+    }
+
+    /**
+     * returns the number of tags for the structure
+     *
+     * @return Integer
+     */
+    public function getNbTags()
+    {
+      return($this->nbEntries);
+    }
+
+    /**
+     * returns a Tag object from a sequential index
+     *
+     * @return Tag
+     */
+    public function getTag($index)
+    {
+      return($this->entries[$index]);
+    }
+
+    /**
+     * returns an array of Tag objects
+     *
+     * @return Tag[]
+     */
+    public function getTags()
+    {
+      return($this->entries);
+    }
+
+    /**
+     * returns the index of the given Tag, searched with the tag Id
+     * returns -1 if there is no tag with this tagId
+     *
+     * @param String or Integer $tagId : the tag id of the searched tag
+     * @return Integer
+     */
+    public function getTagIndexById($tagId)
+    {
+      for($i=0;$i<count($this->entries);$i++)
+      {
+        if($this->entries[$i]->getId()==$tagId)
+        {
+          return($i);
+        }
+      }
+      return(-1);
+    }
+
+    /**
+     * returns a Tag object, tag is searched with the tag Id
+     * returns null if there is no tag with this tagId
+     *
+     * @param String or Integer $tagId : the tag id of the searched tag
+     * @return Integer
+     */
+    public function getTagById($tagId)
+    {
+      $i=$this->getTagIndexById($tagId);
+      if($i>=0)
+      {
+        return($this->entries[$i]);
+      }
+      return(null);
+    }
+
+    /**
+     * returns the first Tag object found, tag is searched with the tag name
+     * returns null if there is no tag with this tagId
+     *
+     * @param String $name : the name of the searched tag
+     * @return Integer
+     */
+    public function getTagByName($name)
+    {
+      for($i=0;$i<count($this->entries);$i++)
+      {
+        if($this->entries[$i]->getName()==$name)
+        {
+          return($this->entries[$i]);
+        }
+      }
+      return(null);
+    }
+
+    /**
+     * must be overrided by derived class
+     * this function is called in the constructor to initialiaze the tags
+     * definitions (tagDef is instanciation of a KnownTag derived class)
+     */
+    protected function initializeTagDef()
+    {
+    }
+
+
+    /**
+     * skip header, if any
+     * (used by maker sub IFD classes)
+     *
+     * @param ULong $headerSize (optional) : size of header to skip
+     */
+    protected function skipHeader($headerSize=0)
+    {
+      $this->data->seek($headerSize);
+    }
+
+
+  }
+
+
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/GpsReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/GpsReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/GpsReader.class.php	(revision 4686)
@@ -0,0 +1,205 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The GpsReader class is dedicated to read GPS tags from a sub IFD structure
+ *
+ * ======> See IfdReader.class.php to know more about an IFD structure <========
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ *
+ * The GpsReader class is derived from the IfdReader class.
+ *
+ * ========> See IfdReader.class.php to know more about common methods <========
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/GpsTags.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/MakerNotesReader.class.php");
+
+  class GpsReader extends IfdReader
+  {
+
+    /**
+     * initialize the definition of the GPS tags
+     */
+    protected function initializeTagDef()
+    {
+      $this->tagDef = new GpsTags();
+    }
+
+    /**
+     * this function do the interpretation of specials tags and overrides the
+     * IfdReader function
+    */
+    protected function processSpecialTag($tagId, $values, $type, $valuesOffset=0)
+    {
+      switch($tagId)
+      {
+        case 0x0000: // Version
+          $returned=sprintf("%d.%d.%d.%d", $values[0], $values[1], $values[2], $values[3]);
+          break;
+        case 0x0001: // GPSLatitudeRef
+        case 0x0013: // GPSDestLatitudeRef
+          switch(substr($values,0,1))
+          {
+            case "N" :
+              $returned="north";
+              break;
+            case "S" :
+              $returned="south";
+              break;
+            default:
+              $returned="unknown";
+              break;
+          }
+          break;
+        case 0x0002: // GPSLatitude
+        case 0x0004: // GPSLongitude
+        case 0x0014: // GPSDestLatitude
+        case 0x0016: // GPSDestLongitude
+          /*
+           * converted in degrees, minutes and seconds
+           */
+          $returned=ConvertData::toDMS($values[0], $values[1], $values[2]);
+          break;
+        case 0x0003: // GPSLongitudeRef
+        case 0x0015: // GPSDestLongitudeRef
+          switch(substr($values,0,1))
+          {
+            case "E" :
+              $returned="east";
+              break;
+            case "W" :
+              $returned="west";
+              break;
+            default:
+              $returned="unknown";
+              break;
+          }
+          break;
+        case 0x0006: // GPSAltitude
+        case 0x000D: // GPSSpeed
+        case 0x000F: // GPSTrack
+        case 0x0011: // GPSImgDirection
+        case 0x0018: // GPSDestBearing
+        case 0x001A: // GPSDestDistance
+          if($values[1]==0) $values[1]=1;
+          $returned=round($values[0]/$values[1],2);
+          break;
+        case 0x0008: // GPSSatellites
+        case 0x0012: // GPSMapDatum
+        case 0x001B: // GPSProcessingMethod => not sure about the string format...
+        case 0x001C: // GPSAreaInformation => not sure about the string format...
+          $returned=ConvertData::toStrings($values);
+          break;
+        case 0x0009: // GPSStatus
+          switch(substr($values,0,1))
+          {
+            case "A" :
+              $returned="measurement in progress";
+              break;
+            case "V" :
+              $returned="measurement interoperability";
+              break;
+            default:
+              $returned="unknown";
+              break;
+          }
+          break;
+        case 0x000A: // GPSMeasureMode
+          switch(substr($values,0,1))
+          {
+            case "2" :
+              $returned="2-dimensional measurement";
+              break;
+            case "3" :
+              $returned="3-dimensional measurement";
+              break;
+            default:
+              $returned="unknown";
+              break;
+          }
+          break;
+        case 0x000C: // GPSSpeedRef
+        case 0x0019: // GPSDestDistanceRef
+          switch(substr($values,0,1))
+          {
+            case "K" :
+              $returned="kilometers per hour";
+              break;
+            case "M" :
+              $returned="miles per hour";
+              break;
+            case "N" :
+              $returned="knots";
+              break;
+            default:
+              $returned="unknown";
+              break;
+          }
+          break;
+        case 0x000E: // GPSTrackRef
+        case 0x0010: // GPSImgDirectionRef
+        case 0x0017: // GPSDestBearingRef
+          switch(substr($values,0,1))
+          {
+            case "T" :
+              $returned="true direction";
+              break;
+            case "M" :
+              $returned="magnetic direction";
+              break;
+            default:
+              $returned="unknown";
+              break;
+          }
+          break;
+        case 0x001D: // GPSDateStamp
+          $returned=ConvertData::toDateTime($values);
+          break;
+        default:
+          $returned="Not yet implemented;".ConvertData::toHexDump($tagId, ByteType::USHORT)." => ".ConvertData::toHexDump($values, $type);
+          break;
+      }
+      return($returned);
+    }
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/HeightBIMReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/HeightBIMReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/HeightBIMReader.class.php	(revision 4686)
@@ -0,0 +1,225 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The HeightBIMReader class is the class dedicated to read 8BIM block from an
+ * APP13 segment
+ *
+ * An 8BIM block is defined by
+ *  4 bytes (ASCII)  : block header equals "8BIM"
+ *  2 bytes (UShort) : block type "\x04\x04" for IPTC (other type are not
+ *                     managed)
+ *  1 byte           : size of a pascal string
+ *  n bytes          : name of the 8BIM block - a pascal string (equals \x00 if
+ *                     size length equals 0)
+ *  4 bytes          : block size
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * This class provides theses public functions :
+ *  - getNbEntries
+ *  - getEntries
+ *  - isValid
+ *  - getSize
+ *  - getBlockSize
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * 8BIM definition class (IPTC block)
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Tag.class.php");
+
+  class HeightBIMReader
+  {
+    const HEADER = "8BIM";
+    const TYPE_IPTC = 0x0404;
+
+    private $blockSize = 0;
+    private $dataSize = 0;
+    private $readed = 0;
+    private $name = "";
+
+    private $isValid = false;
+
+    private $entries = null;
+
+    private $data = null;
+
+    /**
+     * the constructor only needs datas to parse
+     *
+     * @param String $data
+     */
+    function __construct($data)
+    {
+      $this->data = new Data($data, BYTE_ORDER_BIG_ENDIAN);
+
+      $tmp=$this->data->readASCII(4);
+
+      if($tmp==self::HEADER)
+      {
+        /*
+         * header is ok, so try to read the 8BIM datas
+         */
+        $this->type = $this->data->readUShort();
+        $pLength=$this->data->readUByte();
+
+
+        if($pLength==0)
+        {
+          // the block doesn't have name
+          $this->data->readUByte();
+          $this->blockSize=12;
+        }
+        else
+        {
+          // the block have a name
+          $this->name=$this->data->readASCII($pLength);
+          $this->blockSize=11+$pLength;
+        }
+
+        $this->dataSize = $this->data->readULong();
+        $this->blockSize+=$this->dataSize+1;
+        if($this->dataSize>0 and $this->type==self::TYPE_IPTC)
+        {
+          $this->readEntries();
+          $this->isValid=true;
+        }
+      }
+    }
+
+    function __destruct()
+    {
+      unset($this->entries);
+      unset($this->data);
+    }
+
+    /**
+     * returns the number of tags found in the 8BIM block
+     *
+     * @return Integer
+     */
+    public function getNbTags()
+    {
+      return(count($this->entries));
+    }
+
+    /**
+     * returns an array of found tags in the 8BIM block
+     *
+     * @return Tag[]
+     */
+    public function getTags()
+    {
+      return($this->entries);
+    }
+
+    /**
+     * returns true if the 8BIM block is a valid IPTC data block
+     *
+     * @return Boolean
+     */
+    public function isValid()
+    {
+      return($this->isValid);
+    }
+
+    /**
+     * returns the size of datas in the 8BIM block
+     *
+     * @return Integer
+     */
+    public function getSize()
+    {
+      return($this->dataSize);
+    }
+
+    /**
+     * returns the size of the 8BIM block
+     *
+     * @return Integer
+     */
+    public function getBlockSize()
+    {
+      return($this->blockSize);
+    }
+
+    /**
+     * returns the name of the 8BIM block
+     *
+     * @return String
+     */
+    public function getName()
+    {
+      return($this->name);
+    }
+
+    /**
+     * read IPTC datas from the 8BIM block, instanciate the tags and add it to
+     * entries
+     *
+     * the tag value is not interpreted
+     */
+    private function readEntries()
+    {
+      while(($this->readed<$this->dataSize) and ($this->data->readUByte()==0x1C))
+      {
+        $tagId=$this->data->readUShort();
+        $tagLength=$this->data->readUShort();
+
+        if($tagLength>0)
+        {
+          $tagValue=$this->data->readASCII($tagLength);
+        }
+        else
+        {
+          $tagValue="";
+        }
+
+        $this->readed+=$tagLength+5; // +5 => 3bytes for tag Id, 2bytes for tag length
+
+        $tag=new Tag($tagId, $tagValue);
+        $this->entries[]=$tag;
+      }
+    }
+
+  }
+
+
+?>
+
Index: /extensions/AMetaData/JpegMetaData/Readers/IfdEntryReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/IfdEntryReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/IfdEntryReader.class.php	(revision 4686)
@@ -0,0 +1,367 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The IfdEntryReader class is the class dedicated to read IFD entries
+ *
+ * ======> See IfdReader.class.php to know more about an IFD structure <========
+ *
+ *
+ * An entry is made with 12 bytes
+ *  2 bytes (UShort) : tag id
+ *  2 bytes (UShort) : data format
+ *  4 bytes (ULong)  : component size
+ *  4 bytes          : value, or offset is value size is higher than 4bytes
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * This class provides theses public functions :
+ *  - getTagId
+ *  - getTypeName
+ *  - getValue
+ *  - getSize
+ *  - getType
+ *  - isOffset
+ *  - getExtraDataOffset
+ *  - getRaw
+ *  - getTag
+ *
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/ConvertData.class.php");
+  require_once(JPEG_METADATA_DIR."Common/Tag.class.php");
+
+  class IfdEntryReader
+  {
+    private $raw = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+    private $byteOrder = BYTE_ORDER_LITTLE_ENDIAN;
+
+    private $type = ByteType::UNKNOWN;
+    private $typeName = "Unknown";
+
+    private $size = 0;
+
+    private $isOffset = false;
+    private $extraDataOffset = 0;
+
+    private $tag = null;
+
+    /**
+     *
+     * the constructor needs :
+     *  - raw data, the 12 bytes of the IFD entry
+     *  - the byte order of TIFF segment
+     *  - the segment data, allowing to acces the extra data
+     *  - the segment data offset, allowing to compute the relative offset
+     *  - the tags definitions (a KnonwTags derived object)
+     *
+     * @param String $data
+     * @param String $byteOrder
+     * @param String $segmentData
+     * @param ULong $segmentDataOffset
+     * @param KnownTags $tagDef
+     */
+    function __construct($data, $byteOrder, $segmentData, $segmentDataOffset, $TagDef)
+    {
+      $this->tag=new Tag();
+
+      if(strlen($data)>=12)
+      {
+        $this->tag->setId(ConvertData::toUShort($data, $byteOrder));
+
+        $this->byteOrder = $byteOrder;
+        $this->raw   = substr($data,0,12);
+        $this->type  = ConvertData::toUShort(substr($data, 2), $this->byteOrder);
+        $this->size  = ConvertData::toULong(substr($data, 4), $this->byteOrder);
+
+        /*
+         * the entry value is stored in 4 bytes
+         * if the entry type size multiplied by the entry size is greater than 4
+         * it means that the entry value is an offset
+         */
+        $numBytes = $this->size * ByteType::$typeSizes[$this->type];
+
+        if($numBytes>4)
+        {
+          $this->isOffset = true;
+          $this->extraDataOffset = ConvertData::toULong(substr($data, 8), $this->byteOrder);
+          $this->tag->setValue($this->extractExtraData(new Data($segmentData->readASCII($this->size*ByteType::$typeSizes[$this->type], $this->extraDataOffset - $segmentDataOffset)), $this->byteOrder));
+        }
+        else
+        {
+          $this->tag->setValue($this->value = $this->extractExtraData(new Data(substr($data,8), $this->byteOrder)));
+        }
+
+        switch($this->type)
+        {
+          case ByteType::UBYTE :
+            $this->typeName = "unsigned Byte (int8u)";
+            break;
+          case ByteType::ASCII :
+            $this->typeName = "ASCII";
+            break;
+          case ByteType::USHORT :
+            $this->typeName = "unsigned Short (int16u)";
+            break;
+          case ByteType::ULONG :
+            $this->typeName = "unsigned Long (int32u)";
+            break;
+          case ByteType::URATIONAL :
+            $this->typeName = "unsigned Rational (int32u int32u)";
+            break;
+          case ByteType::UNDEFINED :
+            $this->typeName = "Undefined";
+            break;
+          case ByteType::SBYTE :
+            $this->typeName = "Signed Byte (int8s)";
+            break;
+          case ByteType::SSHORT :
+            $this->typeName = "Signed Short (int16s)";
+            break;
+          case ByteType::SLONG :
+            $this->typeName = "Signed Long (int32s)";
+            break;
+          case ByteType::SRATIONAL :
+            $this->typeName = "Signed Rational (int32s int32s)";
+            break;
+          case ByteType::FLOAT :
+            $this->typeName = "Float";
+            break;
+          case ByteType::DOUBLE :
+            $this->typeName = "Double";
+            break;
+          default:
+            $this->typeName = "Unknown";
+            break;
+        }
+        //Array size...
+        $this->typeName.="[".$this->size."]";
+      }
+    }
+
+    function __destruct()
+    {
+      unset($this->tag);
+    }
+
+    /**
+     * return the tag id
+     *
+     * @return UShort
+     */
+    public function getTagId()
+    {
+      return($this->tag->getId());
+    }
+
+    /**
+     * return the name of the data type
+     *
+     * @return String
+     */
+    public function getTypeName()
+    {
+      return($this->typeName);
+    }
+
+    /**
+     * return the raw value
+     *
+     * @return type depends of the type of the tag
+     */
+    public function getValue()
+    {
+      return($this->tag->getValue());
+    }
+
+    /**
+     * return the tag size
+     *
+     * @return UShort
+     */
+    public function getSize()
+    {
+      return($this->size);
+    }
+
+    /**
+     * return the tag type
+     *
+     * @return UByte : look on the ByteType class for known values
+     */
+    public function getType()
+    {
+      return($this->type);
+    }
+
+    /**
+     * return true if entry value is an offset
+     *
+     * @return Boolean
+     */
+    public function isOffset()
+    {
+      return($this->isOffset);
+    }
+
+    /**
+     * return the extra data offset (if the tag value is in an extra data block)
+     *
+     * @return ULong
+     */
+    public function getExtraDataOffset()
+    {
+      if($this->isOffset)
+        return($this->extraDataOffset);
+      return(0);
+    }
+
+    /**
+     * return the raw data of the IFD entry
+     *
+     * @return String
+     */
+    public function getRaw()
+    {
+      return($this->raw);
+    }
+
+    /**
+     * return the Tag object of the entry
+     *
+     * @return Boolean
+     */
+    public function getTag()
+    {
+      return($this->tag);
+    }
+
+
+    public function toString()
+    {
+      $returned="raw: ".ConvertData::toHexDump($this->raw, ByteType::ASCII);
+
+      $returned.=" ; tag: 0x".sprintf("%04x", $this->tag->getId()).
+                 " ; type: ".str_replace(" ", "&nbsp;", sprintf(" %-36s", $this->typeName)).
+                 " ; offset: 0x".sprintf("%08x", $this->extraDataOffset).
+                 " ; value: ";
+      if(is_string($this->tag->getValue()))
+      {
+        $returned.=((strlen($this->tag->getValue())>64)?"[returns only the first 64 of ".strlen($this->tag->getValue())." bytes] ":"").substr($this->tag->getValue(),0,64);
+      }
+      else
+        $returned.=print_r($this->tag->getValue(), true);
+      return($returned);
+    }
+
+    /**
+     * this function extract the value of a Tag from the extra datas
+     *
+     * @param String $data : the data
+     */
+    private function extractExtraData($data)
+    {
+      /*
+       * A size equals 0 means an error ?
+       *
+       * A size equals 1 means the value is a single variable
+       *
+       * A size greater than 1 and a type diffrent than ASCII or UNDEFINED and
+       * the value is not an offset means that values are stored in an array
+       */
+      $returned=Array();
+
+      if($this->type==ByteType::ASCII or $this->type==ByteType::UNDEFINED)
+      {
+        return($data->readASCII($this->size,0));
+      }
+      else
+      {
+        for($i=0;$i<$this->size;$i++)
+        {
+          switch($this->type)
+          {
+            case ByteType::UBYTE :
+              $returned[]=$data->readUByte();
+              break;
+            case ByteType::USHORT :
+              $returned[]=$data->readUShort();
+              break;
+            case ByteType::ULONG :
+              $returned[]=$data->readULong();
+              break;
+            case ByteType::URATIONAL :
+              $returned[]=$data->readURational();
+              break;
+            case ByteType::SBYTE :
+              $returned[]=$data->readSByte();
+              break;
+            case ByteType::SSHORT :
+              $returned[]=$data->readSShort();
+              break;
+            case ByteType::SLONG :
+              $returned[]=$data->readSLong();
+              break;
+            case ByteType::SRATIONAL :
+              $returned[]=$data->readSRational();
+              break;
+            case ByteType::FLOAT :
+              $returned[] = $data->readFloat();
+              break;
+            case ByteType::DOUBLE :
+              $returned[] = $data->readDouble();
+              break;
+            default:
+              $returned[] = "Can't extract datas...";
+              break;
+          }
+        }
+      }
+
+      if($this->size==1)
+      {
+        return($returned[0]);
+      }
+      else
+      {
+        return($returned);
+      }
+    }
+
+  }
+
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/IfdReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/IfdReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/IfdReader.class.php	(revision 4686)
@@ -0,0 +1,559 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The IfdReader class is the dedicated to read IFDs from a TIFF structure
+ *
+ * =====> See TiffReader.class.php to know more about a Tiff structure <========
+ *
+ *
+ * An IFD is formatted as this :
+ *  - number of IFD entries : 2 bytes
+ *  - entries               : 12 bytes x number of entries
+ *  - next IFD offset       : 4 bytes
+ *  - extra datas           : number of bytes depends of the stored extra datas
+ *
+ * ====> See IfdEntryReader.class.php to know more about an IFD structure <=====
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ *
+ * The Ifdreader class is derived from the GenericReader class.
+ *
+ * ======> See GenericReader.class.php to know more about common methods <======
+ *
+ *
+ * Derived classes :
+ *  - GpsReader         (for exif GPS tags)
+ *  - MakerNotesReader  (for maker notes tags)
+ *  - PentaxReader      (for Pentax exif tags, in fact derived from
+ *                      MakerNotesReader)
+ *
+ *
+ * This class provides theses public functions :
+ *  - (static) convert
+ *  - getNextIFDOffset
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Data.class.php");
+  require_once(JPEG_METADATA_DIR."Common/MakerNotesSignatures.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/GenericReader.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/IfdEntryReader.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/IfdTags.class.php");
+
+
+  class IfdReader extends GenericReader
+  {
+    protected $byteOrder = BYTE_ORDER_LITTLE_ENDIAN;
+
+    private $nextIFDOffset = 0;
+
+    private $dataOffset = 0;
+
+    /**
+     * The constructor needs, like the ancestor, the datas to be parsed
+     *
+     * Some datas are offfset on extra data, and this offset can be (some time)
+     * absolute inside the IFD, or relative. So, the offset of the IFD structure
+     * is needed
+     *
+     * The byte order of data is the same byte order than the TIFF structure
+     *
+     * @param String $data
+     * @param ULong $offset : offset of IFD block in the jpeg file
+     * @param String $byteOrder
+     */
+    function __construct($data, $offset, $byteOrder)
+    {
+      parent::__construct($data);
+
+      $this->data->setByteOrder($byteOrder);
+      $this->byteOrder=$byteOrder;
+      $this->dataOffset=$offset;
+
+      $this->skipHeader();
+
+      $dataPointer = $this->data->offset();
+      /*
+       * number of entries is defined byte an UShort at the begining of the
+       * data structure
+       */
+      $this->nbEntries=$this->data->readUShort();
+
+      /*
+       * if the file is written in little_endian, we assume the maker note
+       * values are stored with little_endian byte order too
+       *
+       * in some case, software modify the exif and rewrite the file with the
+       * big_endian byte order. but the maker note stays in little_endian
+       *
+       * this code try to determine the maker note byte order : if number of
+       * entries is higher than 256, we can think that the maker note byte order
+       * is inverted...
+       * (the constructor for maker note is not overrided, so this trick is
+       * placed here)
+       *
+       */
+      if($this->nbEntries>0xff)
+      {
+        $this->data->seek($dataPointer);
+        if($this->byteOrder==BYTE_ORDER_BIG_ENDIAN)
+          $this->byteOrder = BYTE_ORDER_LITTLE_ENDIAN;
+        else
+          $this->byteOrder = BYTE_ORDER_BIG_ENDIAN;
+
+        $this->data->setByteOrder($this->byteOrder);
+        $this->nbEntries=$this->data->readUShort();
+        if($this->nbEntries>0xff)
+        {
+          /*
+           * if number of entries is always higher than 0xFF after reverting the
+           * byte order, set num entries to 0
+           * (at now, unable to manage this)
+           */
+          $this->nbEntries=0;
+        }
+
+      }
+
+      $this->initializeEntries();
+
+      /* Next IFD Offset is defined after the entries  */
+      $this->nextIFDOffset=$this->data->readULong();
+    }
+
+    /**
+     * return the offset for the next IFD block
+     * offset of next IFD is relative to the current TIFF block, not the Jpeg
+     * file
+     *
+     * @return ULong
+     */
+    public function getNextIFDOffset()
+    {
+      return($this->nextIFDOffset);
+    }
+
+    public function toString()
+    {
+      $returned="IFD Offset: ".sprintf("%08x", $this->dataOffset).
+                " ; NbEntries: ".sprintf("%02d", $this->nbEntries).
+                " ; next IFD Offset: 0x".sprintf("%08x", $this->nextIFDOffset);
+      return($returned);
+    }
+
+    /**
+     * initialize the definition for classic exif tags (in fact Tiff 6.0 and
+     * Exif 2.2 tags)
+     */
+    protected function initializeTagDef()
+    {
+      $this->tagDef = new IfdTags();
+    }
+
+    /**
+     * reads all the entries in the IFD block, and set the Tag properties for
+     * the entry.
+     *
+     * An entry is a IfdEntryReader object
+     *
+     * Add the entry to the entries array
+     *
+     */
+    protected function initializeEntries()
+    {
+      for($i=0;$i<$this->nbEntries;$i++)
+      {
+        $entry=new IfdEntryReader($this->data->readASCII(12), $this->byteOrder, $this->data, $this->dataOffset, $this->tagDef);
+        $this->setTagProperties($entry);
+        $this->entries[]=$entry;
+      }
+    }
+
+    /**
+     * Interprets the tag values into a 'human readable values'
+     *
+     * @param IfdEntryReader $entry
+     */
+    private function setTagProperties($entry)
+    {
+      /*
+       * if the given tag id is defined, analyzing its values
+       */
+      if($this->tagDef->tagIdExists($entry->getTagId()))
+      {
+        $tag=$this->tagDef->getTagById($entry->getTagId());
+
+        $entry->getTag()->setIsKnown(true);
+        $entry->getTag()->setName($tag['tagName']);
+        $entry->getTag()->setIsImplemented($tag['implemented']);
+        $entry->getTag()->setIsTranslatable($tag['translatable']);
+
+        /*
+         * if there is values defined for the tag, analyze it
+         */
+        if(array_key_exists('tagValues', $tag))
+        {
+          /*
+           * if the combiTag value equals 0 exploit it as this
+           */
+          if($tag['combiTag']==0)
+          {
+            if(array_key_exists($entry->getValue(), $tag['tagValues']))
+            {
+              $entry->getTag()->setLabel($tag['tagValues'][$entry->getValue()]);
+            }
+            else
+            {
+              $entry->getTag()->setLabel("[unknown value 0x".sprintf("%04x", $entry->getValue())."]");
+            }
+          }
+          else
+          {
+            /*
+             * the combiTag value does not equals 0, so exploit it as a combi tag
+             */
+            $combiValue=$this->processCombiTag($entry->getValue(), $tag['combiTag']);
+            if(array_key_exists($combiValue, $tag['tagValues']))
+            {
+              $entry->getTag()->setLabel($tag['tagValues'][$combiValue]);
+            }
+            else
+            {
+              $entry->getTag()->setLabel("[unknown combi value 0x".sprintf("%0".(2*$tag['combiTag'])."x", $combiValue)."]");
+            }
+          }
+        }
+        else
+        {
+          /*
+           * there is no values defined for the tag, analyzing it with dedicated
+           * function
+           */
+          $entry->getTag()->setLabel($this->processSpecialTag($entry->getTagId(), $entry->getValue(), $entry->getType(), $entry->getExtraDataOffset()));
+        }
+      }
+    }
+
+    /**
+     * Some values are obtained after combination of values
+     */
+    private function processCombiTag($values, $combi)
+    {
+      if(is_array($values))
+      {
+        $returned=0;
+        if($combi<=count($values))
+        {
+          for($i=0;$i<$combi;$i++)
+          {
+            $returned+=$values[$i]*pow(2,8*($combi-$i-1));
+          }
+        }
+      }
+      else
+      {
+        $returned=$values;
+      }
+      return($returned);
+    }
+
+    /**
+     * skip IFD header, if any
+     * (used by maker sub IFD classes)
+     */
+    protected function skipHeader($headerSize=0)
+    {
+      $this->data->seek($headerSize);
+    }
+
+    /**
+     * this function do the interpretation of specials tags
+     * must be overrided by derived classes
+     *
+     * the function return the interpreted value for the tag
+     *
+     * @param $tagId             : the id of the tag
+     * @param $values            : 'raw' value to be interpreted
+     * @param UByte $type        : if needed (for IFD structure) the type of data
+     * @param ULong $valueOffset : if needed, the offset of data in the jpeg file
+     * @return String or Array or DateTime or Integer or Float...
+     */
+    protected function processSpecialTag($tagId, $values, $type, $valuesOffset=0)
+    {
+      switch($tagId)
+      {
+        /*
+         * Tags managed
+         */
+        case 0x0100: // ImageWidth, tag 0x0100
+        case 0x0101: // ImageHeight, tag 0x0101
+        case 0x0102: // BitsPerSample, tag 0x0102
+        case 0x0115: // SamplesPerPixel, tag 0x0115
+        case 0x0116: // RowsPerStrip, tag 0x0116
+        case 0x0117: // StripByteCounts, tag 0x0117
+        case 0x0201: // JPEGInterchangeFormat, tag 0x0201
+        case 0x0202: // JPEGInterchangeFormatLength, tag 0x0202
+        case 0x8824: // SpectralSensitivity, tag 0x8824
+        case 0x8827: // ISOSpeedRatings, tag 0x8827
+        case 0xA002: // PixelXDimension, tag 0xA002
+        case 0xA003: // PixelYDimension, tag 0xA003
+          $returned=$values;
+          break;
+        case 0x000b: // ProcessingSoftware, tag 0x000b
+        case 0x010D: // DocumentName, tag 0x010D
+        case 0x010E: // ImageDescription, tag 0x010E
+        case 0x010F: // Make, tag 0x010F
+        case 0x0110: // Model, tag 0x0110
+        case 0x0131: // Software, tag 0x0131
+        case 0x013B: // Artist, tag 0x013B
+        case 0x8298: // Copyright, tag 0x8298
+        case 0x9290: // SubsecTime, tag 0x9290
+        case 0x9291: // SubsecTimeOriginal, tag 0x9291
+        case 0x9292: // SubsecTimeDigitized, tag 0x9292
+        case 0xA004: // RelatedSoundFile, tag 0xA004
+          /*
+           * null terminated strings
+           */
+          $returned=ConvertData::toStrings($values);
+          break;
+        case 0x011A: // XResolution, tag 0x011A
+        case 0x011B: // YResolution, tag 0x011B
+          if($values[1]>0)
+            $returned=$values[0]/$values[1];
+          else
+            $returned=$values[0];
+          break;
+        case 0x0132: // DateTime, tag 0x0132
+        case 0x9003: // DateTimeOriginal, tag 0x9003
+        case 0x9004: // DateTimeDigitized, tag 0x9004
+          /* formatted as "YYYY:MM:DD HH:MM:SS\x00"
+           * if date is defined, returns a DateTime object
+           * otherwise return "unknown date"
+           */
+          $returned=ConvertData::toDateTime($values);
+          break;
+        case 0x0212: // YCbCrSubSampling, tag 0x0212
+          /* is a rationnal number
+           * [1, 1] = YCbCr4:4:4
+           * [1, 2] = YCbCr4:4:0
+           * [1, 4] = YCbCr4:4:1
+           * [2, 1] = YCbCr4:2:2
+           * [2, 2] = YCbCr4:2:0
+           * [2, 4] = YCbCr4:2:1
+           * [4, 1] = YCbCr4:1:1
+           * [4, 2] = YCbCr4:1:0
+           */
+          $tag=$this->tagDef->getTagById(0x0212);
+          if(array_key_exists($values[0], $tags['tagValues.special']))
+          {
+            if(array_key_exists($values[1], $tags['tagValues.special'][$values[0]]))
+            {
+              $returned=$tags['tagValues.special'][$values[0]][$values[1]];
+            }
+            else
+            {
+              $returned="unknown";
+            }
+          }
+          else
+          {
+            $returned="unknown";
+          }
+          break;
+        case 0x829A: // ExposureTime, tag 0x829A
+          if($values[1]==0) $values[1]=1;
+          $returned=ConvertData::toExposureTime($values[0]/$values[1]);
+          break;
+        case 0x829D: // FNumber, tag 0x829D
+          if($values[1]==0) $values[1]=1;
+          $returned=ConvertData::toFNumber($values[0]/$values[1]);
+          break;
+        case 0x8769: // Exif IFD Pointer, tag 0x8769
+          /*
+           * the tag 0x8769 value is an offset to an EXIF sub IFD
+           * the returned value is a parsed sub IFD
+           */
+          $returned=new IfdReader($this->data->readASCII(-1,$values-$this->dataOffset), $values, $this->byteOrder);
+          break;
+        case 0x8825: // GPS IFD Pointer, tag 0x8825
+          /*
+           * the tag 0x8825 value is an offset to an EXIF sub IFD
+           * the returned value is a parsed sub IFD
+           */
+          require_once(JPEG_METADATA_DIR."Readers/GpsReader.class.php");
+          $returned=new GpsReader($this->data->readASCII(-1,$values-$this->dataOffset), $values, $this->byteOrder);
+          break;
+        case 0x9000: // ExifVersion, tag 0x9000
+        case 0xA000: // FlashpixVersion, tag 0xa0000
+          $returned=(int)substr($values,0,2).".".(int)substr($values,2);
+          break;
+        case 0x9101: // ComponentsConfiguration, tag0x9101
+          switch($values)
+          {
+            case "\x01\x02\x03\x00":
+              $returned="YCbCr";
+              break;
+            case "\x04\x05\x06\x00":
+              $returned="RGB";
+              break;
+            default:
+              $returned="unknown";
+              break;
+          }
+          break;
+        case 0x9102: // CompressedBitsPerPixel, tag0x9102
+        case 0x9203: // BrightnessValue, tag 0x9203 (APEX format)
+          if($values[1]==0) $values[1]=1;
+          $returned=round($values[0]/$values[1],4);
+          break;
+        case 0x9201: // ShutterSpeedValue, tag0x9201
+          if($values[1]==0) $values[1]=1;
+          $returned=ConvertData::toExposureTime(1/round(pow(2, $values[0]/$values[1]),0));
+          break;
+        case 0x9202: // ApertureValue, tag0x9202
+        case 0x9205: // MaxApertureValue, tag0x9205
+          if($values[1]==0) $values[1]=1;
+          $returned=ConvertData::toFNumber(pow(1.414213562, $values[0]/$values[1]));
+          break;
+        case 0x9204: // ExposureBiasValue, tag0x9204
+          if($values[1]==0) $values[1]=1;
+          $returned=ConvertData::toEV($values[0]/$values[1]);
+          break;
+        case 0x9206: // SubjectDistance, tag 0x9206
+          if($values[1]==0) $values[1]=1;
+          $returned=ConvertData::toDistance($values[0]/$values[1], "m");
+          break;
+        case 0x9209: // flash, tag 0x9209
+          $tag=$this->tagDef->getTagById(0x9209);
+          $returned=Array(
+            "computed" => (isset($tag['tagValues.computed'][$values])?$tag['tagValues.computed'][$values]:"unknown"),
+            "detail" => Array() );
+          foreach($tag['tagValues.specialNames'] as $key => $value)
+          {
+            $filter = $values & $key;
+            if(isset($tag['tagValues.specialValues'][$key][$filter]))
+              $returned["detail"][]=$tag['tagValues.specialValues'][$key][$filter];
+            else
+              $returned["detail"][]="unknown";
+          }
+          break;
+        case 0x920A: // FocalLength, tag 0x920A
+          if($values[1]==0) $values[1]=1;
+          $returned=ConvertData::toFocalLength($values[0]/$values[1]);
+          break;
+        case 0x927c: // MakerNote, tag 0x927c
+          /* try to return a specific maker sub ifd
+           *
+           * if $values is n
+           */
+          $makerSignature=MakerNotesSignatures::getMaker($values);
+          switch($makerSignature)
+          {
+            case MakerNotesSignatures::OlympusHeader:
+            case MakerNotesSignatures::Olympus2Header:
+              $returned="Olympus";
+              break;
+            case MakerNotesSignatures::FujiFilmHeader:
+              $returned="FujiFilm";
+              break;
+            case MakerNotesSignatures::Nikon2Header:
+            case MakerNotesSignatures::Nikon3Header:
+              $returned="Nikon";
+              break;
+            case MakerNotesSignatures::PanasonicHeader:
+              $returned="Panasonic";
+              break;
+            case MakerNotesSignatures::PentaxHeader:
+            case MakerNotesSignatures::Pentax2Header:
+              require_once(JPEG_METADATA_DIR."Readers/PentaxReader.class.php");
+              $returned=new PentaxReader($values, $valuesOffset, $this->byteOrder, $makerSignature);
+              break;
+            case MakerNotesSignatures::SigmaHeader:
+            case MakerNotesSignatures::Sigma2Header:
+              $returned="Sigma";
+              break;
+            case MakerNotesSignatures::SonyHeader:
+              $returned="Sony";
+              break;
+            default:
+              $returned="unknown maker => ".ConvertData::toHexDump($values, $type, 16);
+              break;
+          }
+          break;
+        case 0x9286: // UserComment, tag 0x9286
+          /*
+           * user comment format :
+           *  first 8 bytes : format type
+           *  other bytes : text
+           */
+          $returned=substr($values,8);
+          break;
+        case 0xA20B: // FlashEnergy, tag 0xA20B
+        case 0xA20E: // FocalPlaneXResolution, tag 0xA20E
+        case 0xA20F: // FocalPlaneYResolution, tag 0xA20F
+        case 0xA215: // ExposureIndex, tag 0xA20F
+        case 0xA404: // DigitalZoomRatio, tag 0xA404
+          if($values[1]==0) $values[1]=1;
+          $returned=round($values[0]/$values[1],2);
+          break;
+        case 0xA405: // FocalLengthIn35mmFilm, tag 0xA405
+          $returned=ConvertData::toFocalLength($values);
+          break;
+        /*
+         * Tags not managed
+         */
+        case 0x0111: // StripOffsets, tag 0x0111
+        case 0x012D: // TransferFunction, tag 0x012D
+        case 0x013E: // WhitePoint, tag 0x013E
+        case 0x013F: // PrimaryChromaticities, tag 0x013F
+        case 0x0211: // YCbCrCoefficients, tag 0x0211
+        case 0x0214: // ReferenceBlackWhite, tag 0x0214
+        case 0x8828: // ReferenceBlackWhite, tag 0x0214
+        case 0x9214: // SubjectArea, tag 0x9214
+        case 0xA20C: // SpatialFrequencyResponse, tag 0xA20C
+        case 0xA40B: // DeviceSettingDescription, tag 0xA40B
+        default:
+          $returned="Not yet implemented;".ConvertData::toHexDump($tagId, ByteType::USHORT)." => ".ConvertData::toHexDump($values, $type, 64);
+          break;
+      }
+      return($returned);
+    }
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/IptcReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/IptcReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/IptcReader.class.php	(revision 4686)
@@ -0,0 +1,331 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The IptcReader class is the dedicated class to read IPTC from the APP13
+ * segment
+ *
+ * The APP13 segment (the 'photoshop' segment) contain 8BIM blocks.
+ * The IPTC are stored inside the specific 0x0404 block. If there is more than
+ * one 8BIM 0x0404 block, the IptcReader reads all blocks and merge IPTC tags.
+ *
+ * =======> See HeightBIMReader.class.php to know more about 8BIM blocks <======
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * The IptcReader class is derived from the GenericReader class.
+ *
+ * ======> See GenericReader.class.php to know more about common methods <======
+ *
+ * This class provides theses public functions :
+ *  - optimizeDateTime
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Data.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/HeightBIMReader.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/IptcTags.class.php");
+
+
+  class IptcReader extends GenericReader
+  {
+    const HEADER_1 = "Photoshop 3.0\x00";
+    const HEADER_2 = "Adobe_Photoshop2.5:\x00";
+
+    private $header = "";
+
+    /**
+     * The constructor needs, like the ancestor, the datas to be parsed
+     *
+     * @param String $data
+     */
+    function __construct($data)
+    {
+      parent::__construct($data);
+
+      /*
+       * read the header
+       * if header is a valid header, read entries
+       */
+      if($this->readHeader())
+      {
+        $this->initializeEntries();
+      }
+    }
+
+    public function toString()
+    {
+      $returned="IPTC ; NbEntries: ".sprintf("%02d", $this->nbEntries);
+      return($returned);
+    }
+
+    /**
+     * All IPTC Date & Time are separated into distinct tags
+     * this function complete "date" tags with the associated "time" tags, and
+     * delete the "time" tags
+     *
+     * Example :
+     *  0x146 "Date Sent" = 2009/12/24 => tag value : 2009/12/24 00:00:00
+     *  0x150 "Time Sent" = 19:43:28   => tag value : 0001/01/01 19:43:28
+     *
+     * Optimize Date merge date & time => tag value : 2009/12/24 19:43:28
+     *
+     */
+    public function optimizeDateTime()
+    {
+      $assoc=Array(
+        Array(0x0146, 0x0150),
+        Array(0x021E, 0x0223),
+        Array(0x0225, 0x0226),
+        Array(0x0237, 0x023C),
+        Array(0x023E, 0x023F),
+      );
+
+      foreach($assoc as $val)
+      {
+        $tagD=$this->getTagIndexById($val[0]);
+        $tagT=$this->getTagIndexById($val[1]);
+
+        if($tagD>-1 and $tagT>-1)
+        {
+          /*
+           * can't use the timestamp function because not compatible with php < 5.3
+           */
+          $this->entries[$tagD]->getLabel()->setTime(
+            (int)$this->entries[$tagT]->getLabel()->format("H"),
+            (int)$this->entries[$tagT]->getLabel()->format("i"),
+            (int)$this->entries[$tagT]->getLabel()->format("s")
+          );
+          array_splice($this->entries, $tagT, 1);
+        }
+      }
+    }
+
+
+    /**
+     * initialize the definition for IPTC tags
+     */
+    protected function initializeTagDef()
+    {
+      $this->tagDef = new IptcTags();
+    }
+
+    /**
+     * read the header of the APP13 segment, and try to determinate wich kind of
+     * data are stored
+     *
+     * at now, only "Photoshop 3.0" data structure is known
+     * the "Adobe_Photoshop2.5" data structure is not recognized yet
+     *
+     * @return Boolean : true if the header is known
+     */
+    private function readHeader()
+    {
+      $this->data->seek();
+      $header=$this->data->readASCII(strlen(self::HEADER_1));
+      if($header==self::HEADER_1)
+      {
+        $this->header=$header;
+        return(true);
+      }
+
+      $this->data->seek();
+      $header=$this->data->readASCII(strlen(self::HEADER_2));
+      if($header==self::HEADER_2)
+      {
+        $this->header=$header;
+        /*
+         * structure from an HEADER_2 is not known....
+         */
+        return(false);
+      }
+
+      return(false);
+    }
+
+    /**
+     * reads all the 8BIM blocks of the segment. If the 8BIM block is an IPTC
+     * block, read all the IPTC entries and set the Tag properties
+     *
+     * An entry is a Tag object
+     *
+     * Add the entry to the entries array
+     *
+     */
+    protected function initializeEntries()
+    {
+      $blocks=explode("8BIM", $this->data->readASCII());
+      foreach($blocks as $key=> $val)
+      {
+        $block=new HeightBIMReader("8BIM".$val);
+        if($block->isValid())
+        {
+          /* merge entries from all 8BIM blocks */
+          $this->entries=array_merge($this->entries, $block->getTags());
+        }
+        unset($block);
+      }
+
+      foreach($this->entries as $key => $tag)
+      {
+        $this->setTagProperties($tag);
+      }
+    }
+
+    /**
+     * Interprets the tag values into 'human readable values'
+     *
+     * @param Tag $entry
+     */
+    private function setTagProperties($tag)
+    {
+      /*
+       * if the given tag id is defined, analyzing its values
+       */
+      if($this->tagDef->tagIdExists($tag->getId()))
+      {
+        $tagProperties=$this->tagDef->getTagById($tag->getId());
+
+        $tag->setIsKnown(true);
+        $tag->setName($tagProperties['tagName']);
+        $tag->setIsImplemented($tagProperties['implemented']);
+        $tag->setIsTranslatable($tagProperties['translatable']);
+
+        /*
+         * if there is values defined for the tag, analyze it
+         */
+        if(array_key_exists('tagValues', $tagProperties))
+        {
+          if(array_key_exists($tag->getValue(), $tagProperties['tagValues']))
+          {
+            $tag->setLabel($tagProperties['tagValues'][$tag->getValue()]);
+          }
+          else
+          {
+            $tag->setLabel("[unknow value 0x".sprintf("%04x", $tag->getValue())."]");
+          }
+        }
+        else
+        {
+          /*
+           * there is no values defined for the tag, analyzing it with dedicated
+           * function
+           */
+          $tag->setLabel($this->processSpecialTag($tag->getId(), $tag->getValue(), 0, 0));
+        }
+      }
+    }
+
+    /**
+     * this function can be overrided to process special tags
+     */
+    protected function processSpecialTag($tagId, $values, $type, $valuesOffset=0)
+    {
+      switch($tagId)
+      {
+        /*
+         * Tags managed
+         */
+        case 0x0105: // 2:05  - Destination
+        case 0x011E: // 1:30  - Service Identifier
+        case 0x0128: // 1:40  - Envelope Number
+        case 0x0132: // 1:50  - Product I.D.
+        case 0x0205: // 2:05  - Title
+        case 0x0207: // 2:07  - Edit Status
+        case 0x020F: // 2:15  - Category
+        case 0x0214: // 2:20  - Supplemental Category
+        case 0x0216: // 2:22  - Fixture Identifier
+        case 0x0219: // 2:25  - Keywords
+        case 0x021A: // 2:25  - Content Location Code
+        case 0x021B: // 2:25  - Content Location Name
+        case 0x0228: // 2:40  - Special Instructions
+        case 0x0241: // 2:65  - Originating Program
+        case 0x0246: // 2:70  - Program Version
+        case 0x0250: // 2:80  - By-line
+        case 0x0255: // 2:80  - By-line Title
+        case 0x025A: // 2:90  - City
+        case 0x025C: // 2:92  - Sublocation
+        case 0x025F: // 2:95  - Province/State
+        case 0x0264: // 2:100 - Country Code
+        case 0x0265: // 2:101 - Country
+        case 0x0267: // 2:103 - Original Transmission Reference
+        case 0x0269: // 2:105 - Headline
+        case 0x026E: // 2:110 - credit
+        case 0x0273: // 2:115 - source
+        case 0x0274: // 2:116 - Copyright Notice
+        case 0x0276: // 2:118 - Contact
+        case 0x0278: // 2:120 - Description
+        case 0x027A: // 2:122 - Writer/Editor
+        case 0x0287: // 2:150 - Language Identifier
+          $returned=$values;
+          break;
+        case 0x0114: // 1:20  - File Format
+          $tag=$this->tagDef->getTagById(0x0114);
+          $returned=$tag['tagValues.special'][ConvertData::toUShort($values, BYTE_ORDER_BIG_ENDIAN)];
+          break;
+        case 0x0203: // 2:03  - Object Type Reference
+        case 0x0204: // 2:04  - Intellectual Genre
+          $returned=explode(":", $values);
+          break;
+        case 0x0146: // 1:70  - Date Sent
+        case 0x021E: // 2:30  - Release Date
+        case 0x0225: // 2:37  - Expiration Date
+        case 0x0237: // 2:55  - Date Created
+        case 0x023E: // 2:62  - Digital Creation Date
+          $returned=ConvertData::toDateTime($values);
+          break;
+        case 0x0150: // 1:80  - Time Sent
+        case 0x0223: // 2:35  - Release Time
+        case 0x0226: // 2:38  - Expiration Time
+        case 0x023C: // 2:60  - Time Created
+        case 0x023F: // 2:63  - Digital Creation Time
+          $returned=ConvertData::toDateTime("00010101T".$values);
+          break;
+        /*
+         * Tags not managed
+         */
+        default:
+          $returned="Not yet implemented;".ConvertData::toHexDump($tagId, ByteType::USHORT)." => ".ConvertData::toHexDump($values, $type, 64)." [$values]";
+          break;
+      }
+      return($returned);
+    }
+  }
+
+
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/JpegReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/JpegReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/JpegReader.class.php	(revision 4686)
@@ -0,0 +1,277 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The JpegReader is the class for reading a Jpeg file
+ *
+ * Datas provided by this class are less friendly than data provided by the
+ * JpegMetaData class, because here you have to know the Jpeg format to
+ * understand how to exploit datas
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * The JpegReader class use a dedicated AppMarkerSegmentReader class rather than
+ * the php "getimagesize()" function because the php function returns an
+ * associative array of markers like ("APP1" => "......", "APPx" => "......")
+ *
+ * Typically a jpeg file contains XMP data inside an APP1 marker, like the exif
+ * codes. So, when using the php function, APP1 with XMP values isn't present
+ * (only the first APP1 segment found and used for EXIF is present)
+ *
+ *
+ * A Jpeg file normally begins with the 2 bytes FFD8 (the SOI marker) and ends
+ * with the 2 bytes FFD9 (the EOI marker)
+ * Some file have extra data after the EOI marker ; for now, the class can't
+ * manage this kind of file.
+ *
+ * The class use the AppMarkerSegmentReader class to get the content of :
+ *  - APP1 marker  => Exif, XMP
+ *  - APP13 marker => Iptc
+ *
+ * This class provides theses public functions :
+ *  - load
+ *  - getFileName
+ *  - isLoaded
+ *  - isValid
+ *  - countAppMarkerSegments
+ *  - getAppMarkerSegments
+ *
+ *  Read the code for help
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Readers/AppMarkerSegmentReader.class.php");
+
+  class JpegReader
+  {
+    /**
+     * start of image file tag
+     */
+    const JPEG_SOI = 0xFFD8;
+    /**
+     * end of image file tag
+     */
+    const JPEG_EOI = 0xFFD9;
+
+
+    private $fileName = "";
+    private $isLoaded = false;
+    private $isValid = false;
+    private $appMarkerSegmentReader = Array();
+
+    private $fileHandler = false;
+
+    /**
+     * the constructor need an optional filename
+     *
+     * if no filename is given, you can use the "load" function after the object
+     * is instancied
+     *
+     * @Param String $fileName (optional)
+     *
+     */
+    function __construct($fileName = "")
+    {
+      if($fileName!="") $this->load($fileName);
+    }
+
+    function __destruct()
+    {
+      unset($this->appMarkerSegmentReader);
+    }
+
+    /**
+     * load a file
+     *
+     * @Param String $fileName
+     *
+     */
+    public function load($fileName)
+    {
+      /*
+       * initialize values
+       *
+       * if the file isn't a valid file, theses properties will not be in an
+       * uncertain state
+       */
+      $this->isLoaded=false;
+      $this->fileName="";
+      $this->isValid = false;
+      $this->appMarkerSegmentReader=Array();
+
+      /*
+       * if the file exist, try to open it
+       * determine if the file is a valid JPEG file
+       *
+       * if the file is valid, read the markers and close the file
+       */
+      if(file_exists($fileName))
+      {
+        $this->fileName=$fileName;
+
+        $this->fileHandler = fopen($fileName, "r");
+        if($this->fileHandler)
+        {
+          $this->isValid = $this->isAValidFile();
+
+          if($this->isValid)
+          {
+            $this->readAppMarkerSegments();
+            $this->isLoaded=true;
+          }
+
+          fclose($this->fileHandler);
+          return(true);
+        }
+        return(false);
+      }
+      return(false);
+    }
+
+    /**
+     *
+     * this function try to see if the given file is a valid jpg file (the file
+     * must begins with the SOI and ends with the EOI)
+     *
+     */
+    protected function isAValidFile()
+    {
+      fseek($this->fileHandler, -2, SEEK_END);
+      $header=fread($this->fileHandler, 2);
+      if(ConvertData::toUShort($header, BYTE_ORDER_BIG_ENDIAN) == self::JPEG_EOI)
+      {
+        /*
+         * the file ends with the good marker
+         */
+        fseek($this->fileHandler, 0);
+        $header=fread($this->fileHandler, 2);
+        if(ConvertData::toUShort($header, BYTE_ORDER_BIG_ENDIAN) == self::JPEG_SOI)
+        {
+          return(true);
+        }
+      }
+      return(false);
+    }
+
+    /**
+     *
+     * This function reads all the segment of the jpeg file
+     *
+     */
+    private function readAppMarkerSegments()
+    {
+      /*
+       * loop to read all markers
+       */
+      $offset=2;
+      while(true)
+      {
+        $marker=AppMarkerSegmentReader::read($this->fileHandler, $offset);
+        if($marker)
+        {
+          /*
+           * if there is a marker returned, push it on the markers array
+           */
+          $this->appMarkerSegmentReader[]=$marker;
+          $offset+=$marker->getLength();
+        }
+        else
+        {
+          /*
+           * if there is no marker returned (end of file ?) stop markers loading
+           */
+          return(false);
+        }
+      }
+
+    }
+
+
+    /**
+     *
+     * returns the filename given to the object
+     *
+     */
+    public function getFileName()
+    {
+      return($this->fileName);
+    }
+
+    /**
+     *
+     * returns true if the given jpeg file has been succesfully loaded
+     *
+     */
+    public function isLoaded()
+    {
+      return($this->isLoaded);
+    }
+
+    /**
+     *
+     * returns true if the given jpeg file is a valid file
+     *
+     */
+    public function isValid()
+    {
+      return($this->isValid);
+    }
+
+    /**
+     *
+     * returns the number od segments loaded
+     *
+     */
+    public function countAppMarkerSegments()
+    {
+      return(count($this->appMarkerSegmentReader));
+    }
+
+    /**
+     *
+     * returns an array of AppMarkerSegments
+     *
+     * see the AppMarkerSegmentsReader.class.php for more informations
+     *
+     */
+    public function getAppMarkerSegments()
+    {
+      return($this->appMarkerSegmentReader);
+    }
+
+  }
+
+
+ ?>
Index: /extensions/AMetaData/JpegMetaData/Readers/MakerNotesReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/MakerNotesReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/MakerNotesReader.class.php	(revision 4686)
@@ -0,0 +1,90 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The MakerNotesReader class is dedicated to read tags from the maker note sub
+ * IFD structure
+ *
+ * ======> See IfdReader.class.php to know more about an IFD structure <========
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ *
+ * The MakerNotesReader class is derived from the IfdReader class.
+ *
+ * ========> See IfdReader.class.php to know more about common methods <========
+ *
+ *
+ * Derived classes :
+ *  - PentaxReader (for Pentax exif tags)
+ *
+ *
+ * This class provides theses public functions :
+ *  - getMaker
+ *
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/ConvertData.class.php");
+  require_once(JPEG_METADATA_DIR."Common/MakerNotesSignatures.class.php");
+  require_once(JPEG_METADATA_DIR."Common/Tag.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/IfdReader.class.php");
+
+  abstract class MakerNotesReader extends IfdReader
+  {
+    protected $maker = "UNKNOWN";
+
+    /**
+     * this function return the name of the camera maker
+     *
+     * @return String
+     */
+    public function getMaker()
+    {
+      return($this->maker);
+    }
+
+    protected function skipHeader($headerSize=0)
+    {
+      parent::skipHeader($headerSize);
+    }
+
+  }
+
+
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/PentaxReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/PentaxReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/PentaxReader.class.php	(revision 4686)
@@ -0,0 +1,218 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * -----------------------------------------------------------------------------
+ * Pentax reader class
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/PentaxTags.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/MakerNotesReader.class.php");
+
+  class PentaxReader extends MakerNotesReader
+  {
+    function __construct($data, $offset, $byteOrder, $makerSignature)
+    {
+      $this->maker = MAKER_PENTAX;
+      switch($makerSignature)
+      {
+        case MakerNotesSignatures::PentaxHeader:
+          $this->header = MakerNotesSignatures::PentaxHeader;
+          $this->headerSize = MakerNotesSignatures::PentaxHeaderSize;
+          break;
+        case MakerNotesSignatures::Pentax2Header:
+          $this->header = MakerNotesSignatures::Pentax2Header;
+          $this->headerSize = MakerNotesSignatures::Pentax2HeaderSize;
+          break;
+      }
+
+      parent::__construct($data, $offset, $byteOrder);
+    }
+
+    protected function initializeTagDef()
+    {
+      $this->tagDef = new PentaxTags();
+    }
+
+    protected function skipHeader($headerSize=0)
+    {
+      parent::skipHeader($this->headerSize);
+    }
+
+    protected function processSpecialTag($tagId, $values, $type, $valuesOffset=0)
+    {
+      switch($tagId)
+      {
+        case 0x0000: // "Version"
+          $returned=sprintf("%d.%d.%d.%d", $values[0], $values[1], $values[2], $values[3]);
+          break;
+        case 0x0002: // "PreviewResolution"
+          $returned=sprintf("%dx%d", $values[0], $values[1]);
+          break;
+        case 0x0003: // "PreviewLength",
+        case 0x0004: // "PreviewOffset",
+          $returned=$values;
+          break;
+        case 0x0006: // "Date",
+          $returned=sprintf("%04d/%02d/%02d", ConvertData::toUShort($values, BYTE_ORDER_BIG_ENDIAN), ConvertData::toUByte($values{2}), ConvertData::toUByte($values{3}));
+          break;
+        case 0x0007: // "Time",
+          $returned=sprintf("%02d:%02d:%02d", ConvertData::toUByte($values{0}), ConvertData::toUByte($values{1}), ConvertData::toUByte($values{2}));
+          break;
+        case 0x000c: // "Flash",
+          $tag=$this->tagDef->getTagById(0x000c);
+          $returned="";
+          if(array_key_exists($values[0], $tag['tagValues.special'][0]))
+            $returned.=$tag['tagValues.special'][0][$values[0]];
+          if(array_key_exists($values[1], $tag['tagValues.special'][1]))
+            $returned.=";".$tag['tagValues.special'][1][$values[1]];
+          break;
+        case 0x0012: // "ExposureTime", from exiftool
+           $returned=ConvertData::toExposureTime($values/100000);
+          break;
+        case 0x0013: // "FNumber",
+          $returned=ConvertData::toFNumber($values/10);
+          break;
+        case 0x0016: // "ExposureCompensation",
+          $returned=sprintf("%.1f EV", ($values-50)/10);
+          break;
+        case 0x0018: // "AutoBracketing",
+          /*
+           * $values if an array
+           *  [0] : exposure compensation
+           *  [1] : bracketing mode
+           */
+          if($values[0]<10)
+            $returned=($values[0]/3)." EV";
+          else
+            $returned=($values[0]-9.5)." EV";
+
+          if($values[1]==0)
+            $returned.=";No extended bracketing";
+          else
+          {
+            $type = $values[1] >> 8;
+            $range = $values[1] & 0xff;
+            switch ($type)
+            {
+              case 1:
+                $returned.=";WB-BA";
+                break;
+              case 2:
+                $returned.=";WB-GM";
+                break;
+              case 3:
+                $returned.=";Saturation";
+                break;
+              case 4:
+                $returned.=";Sharpness";
+                break;
+              case 5:
+                $returned.=";Contrast";
+                break;
+              default:
+                $returned.=";Unknown;".ConvertData::toHexDump($type, ByteType::USHORT);
+                break;
+            }
+            $returned.=", ".$range;
+          }
+          break;
+        case 0x001b: // "BlueBalance",
+        case 0x001c: // "RedBalance", from exiftool
+          $returned=sprintf("%d", $values/256+0.5);
+          break;
+        case 0x001d: // "FocalLength",
+          /* note : in exiftool, the formula change with the camera model... ? */
+          $returned=($values/100)." mm";
+          break;
+        case 0x001e: // "DigitalZoom", from exiftool
+          $returned=($values/100);
+          break;
+        case 0x0025: // "HometownDST",
+        case 0x0026: // "DestinationDST",
+          $returned=($values==1)?"Yes":"No";
+          break;
+        case 0x0027: // "DSPFirmwareVersion",
+        case 0x0028: // "CPUFirmwareVersion",
+          $returned=sprintf("%d.%d.%d.%d", 0xff-ConvertData::toUByte($values{0}), 0xff-ConvertData::toUByte($values{1}), 0xff-ConvertData::toUByte($values{2}), 0xff-ConvertData::toUByte($values{3}));
+          break;
+        case 0x002d: // "EffectiveLV",
+          $returned=sprintf("%.1f", $values/1024);
+          break;
+        case 0x0039: // "RawImageSize",
+          $returned=sprintf("%dx%d", $values[0], $values[1]);
+          break;
+        case 0x003e: // "PreviewImageBorders",
+          $returned=ConvertData::toHexDump($values, ByteType::UBYTE);
+          break;
+        case 0x0040: // "SensitivityAdjust", from exiftool
+          /* is the conversion perl => php is good !? */
+          $returned=sprintf("%.1f", ($values-50)/10+50);
+          break;
+        case 0x0047: // "Temperature",
+          $returned=(($values>127)?256-$values:$values)."°C";
+          break;
+        case 0x0048: // "AELock",
+        case 0x0049: // "NoiseReduction",
+          $returned=($values==1)?"On":"Off";
+          break;
+        case 0x004d: // "FlashExposureCompensation",
+          $returned=ConvertData::toEV($values/256);
+          break;
+        case 0x0050: // "ColorTemperature", from exiftool
+          $returned=53190 -$values;
+          break;
+        case 0x0205: // "ShotInfo",
+        case 0x0206: // "AEInfo",
+        case 0x0207: // "LensInfo",
+        case 0x0208: // "FlashInfo",
+        case 0x0209: // "AEMeteringSegments",
+        case 0x020a: // "FlashADump",
+        case 0x020b: // "FlashBDump",
+        case 0x020d: // "WB_RGGBLevelsDaylight",
+        case 0x020e: // "WB_RGGBLevelsShade",
+        case 0x020f: // "WB_RGGBLevelsCloudy",
+        case 0x0210: // "WB_RGGBLevelsTungsten",
+        case 0x0211: // "WB_RGGBLevelsFluorescentD",
+        case 0x0212: // "WB_RGGBLevelsFluorescentN",
+        case 0x0213: // "WB_RGGBLevelsFluorescentW",
+        case 0x0214: // "WB_RGGBLevelsFlash",
+        case 0x0215: // "CameraInfo",
+        case 0x0216: // "BatteryInfo",
+        case 0x021f: // "AFInfo",
+        case 0x0222: // "ColorInfo",
+
+        /* theses tags decoding is not yet implemented
+         * have to take a look on the algorithm in exiftool (it seems to work
+         * but I don't understand everything...)
+         */
+        case 0x0029: // "FrameNumber",
+        case 0x0041: // "DigitalFilter",
+        case 0x005c: // "ShakeReduction",
+        case 0x005d: // "ShutterCount",
+        case 0x0200: // "BlackPoint",
+        case 0x0201: // "WhitePoint",
+        case 0x0203: // "ColorMatrixA",
+        case 0x0204: // "ColorMatrixB",
+        default:
+          $returned="Not yet implemented;".ConvertData::toHexDump($tagId, ByteType::USHORT)." => ".ConvertData::toHexDump($values, $type);
+          break;
+
+      }
+
+      return($returned);
+    }
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/SegmentReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/SegmentReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/SegmentReader.class.php	(revision 4686)
@@ -0,0 +1,50 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * -----------------------------------------------------------------------------
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  class SegmentReader
+  {
+    protected $data = null;
+    protected $isValid = false;
+    protected $isLoaded = false;
+
+    function __construct(Data $data)
+    {
+      $this->data = $data;
+      $this->data->seek();
+    }
+
+    public function getIsValid()
+    {
+      return($this->isValid);
+    }
+
+    public function getIsLoaded()
+    {
+      return($this->isLoaded);
+    }
+
+    public function toString()
+    {
+      $returned="";
+      return($returned);
+    }
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/TiffReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/TiffReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/TiffReader.class.php	(revision 4686)
@@ -0,0 +1,109 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * -----------------------------------------------------------------------------
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/ConvertData.class.php");
+  require_once(JPEG_METADATA_DIR."Common/Data.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/SegmentReader.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/IfdReader.class.php");
+
+  class TiffReader extends SegmentReader
+  {
+    private $IFDs = Array();
+    private $offsetData = 0;
+    private $byteOrder = BYTE_ORDER_LITTLE_ENDIAN;
+    private $firstIFDOffset = 0;
+
+    function __construct(Data $data, $offsetData=0)
+    {
+      parent::__construct($data);
+
+      $this->offsetData = $offsetData;
+      $header=$this->data->readASCII(2);
+
+      /*
+       * TIFF Header begins wih "II" or "MM" (indicate the byte order)
+       * next value is an USHORT, must equals 0x2a
+       *
+       * all data have to be read with the byte order defined in header
+       */
+      if($header=="II" or $header="MM")
+      {
+        $this->byteOrder=$header;
+        $this->data->setByteOrder($this->byteOrder);
+
+        $header=$this->data->readUShort();
+        if($header==0x2a)
+        {
+          $this->isValid=true;
+          $this->firstIFDOffset=$this->data->readULong();
+          $this->readData();
+        }
+      }
+    }
+
+    function __destruct()
+    {
+      unset($this->IFDs);
+    }
+
+    private function readData()
+    {
+      $nextIFD = $this->firstIFDOffset;
+      while($nextIFD!=0)
+      {
+        $this->data->seek($nextIFD);
+        $IFD = new IfdReader($this->data->readASCII(), $nextIFD, $this->byteOrder);
+        $this->IFDs[]=$IFD;
+        $nextIFD = $IFD->getNextIFDOffset();
+      }
+    }
+
+    public function getNbIFDs()
+    {
+      return(count($this->IFDs));
+    }
+
+    public function getIFDs()
+    {
+      return($this->IFDs);
+    }
+
+    public function getIFD($num)
+    {
+      if($num>=0 and $num<count($this->IFDs))
+        return($this->IFDs[$num]);
+      else
+        return(null);
+    }
+
+
+    public function toString()
+    {
+      $returned="TIFF block offset: ".sprintf("%08x", $this->offsetData).
+                " ; byteOrder: ".$this->byteOrder.
+                " ; isValid: ".($this->isValid?"Y":"N").
+                " ; isLoaded: ".($this->isValid?"Y":"N").
+                " ; IFDs: ".count($this->IFDs).
+                " ; first IFD Offset: ".sprintf("0x%04x", $this->firstIFDOffset);
+      return($returned);
+    }
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php	(revision 4686)
@@ -0,0 +1,706 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * +-----------------------------------------------------------------------+
+ * | JpegMetaData - a PHP based Jpeg Metadata manager                      |
+ * +-----------------------------------------------------------------------+
+ * | Copyright(C) 2010  Grum - http://www.grum.fr                          |
+ * +-----------------------------------------------------------------------+
+ * | 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                                          |
+ * |                                                                       |
+ * | 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, write to the Free Software           |
+ * | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+ * | USA.                                                                  |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * The XmpReader class is the dedicated class to read XMP from the APP1 segment
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * .. Notes ..
+ *
+ * The XmpReader class is derived from the GenericReader class.
+ *
+ * ======> See GenericReader.class.php to know more about common methods <======
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Data.class.php");
+  require_once(JPEG_METADATA_DIR."Common/XmlData.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/GenericReader.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/XmpTags.class.php");
+
+  class XmpReader extends GenericReader
+  {
+    private $xmlData = NULL;
+
+    private $xmpTag2Exif = NULL;
+
+    /**
+     * The constructor needs, like the ancestor, the datas to be parsed
+     *
+     * @param String $data
+     */
+    function __construct($data)
+    {
+      /**
+       * XML data are given from an APP1 segement.
+       *
+       * The XMP header ends with a \x00 char, so XML data can be extracted
+       * after the \x00 char
+       *
+       */
+      $this->data=explode("\x00", $data);
+      if(count($this->data)>1)
+      {
+        $this->data=$this->data[1];
+      }
+      else
+      {
+        $this->data="";
+      }
+
+      parent::__construct($this->data);
+
+      $this->xmpTag2Exif = new XmpTag2Exif("", 0, 0);
+
+      $this->xmlData = new XmlData($this->data->readASCII(-1,0));
+      $this->tagDef = new XmpTags();
+
+      $this->loadTags();
+
+      $this->isValid = $this->xmlData->isValid();
+      $this->isLoaded = $this->xmlData->isLoaded();
+
+    }
+
+    function __destruct()
+    {
+      unset($this->xmpTag2Exif);
+      parent::__destruct();
+    }
+
+    public function toString()
+    {
+      $returned=$this->data->readASCII(-1,0);
+      return($returned);
+    }
+
+    /**
+     * This function load tags from the xml tree
+     */
+    private function loadTags()
+    {
+      if($this->xmlData->hasNodes())
+      {
+        $this->processNode($this->xmlData->getFirstNode());
+      }
+    }
+
+    /**
+     * this function analyze the node properties
+     *  - attributes are converted in Tag through a call to the addTag function
+     *  - childs are processed by a specific call to the processChildNode
+     *    function
+     *  - next node is processed by a recursive call
+     *
+     * @param XmlNode $node
+     */
+    private function processNode($node)
+    {
+      if(!is_null($node))
+      {
+        $node->setName($this->processNodeName($node->getName()));
+
+        foreach($node->getAttributes() as $key => $val)
+        {
+          $val['name']=$this->processNodeName($val['name']);
+          $this->addTag($val['name'], $val['value']);
+        }
+
+        if(!is_null($node->getValue()))
+        {
+          $this->addTag($node->getName(), $node->getValue());
+        }
+
+        if($node->hasChilds())
+        {
+          $this->processChildNode($node);
+        }
+
+        $this->processNode($node->getNextNode());
+      }
+    }
+
+
+    /**
+     * 'xap' schemas have to be interpreted as a 'xmp' schemas
+     * so, this function rename all 'xap' nodes in 'xmp' nodes
+     *
+     * @param String $nodeName
+     */
+    private function processNodeName($nodeName)
+    {
+      $name=preg_replace(Array("/^(xap:)/", "/^(xapMM:)/"), Array("xmp:", "xmpMM:"), $nodeName);
+
+      return($name);
+    }
+
+
+    /**
+     * childs node are 'seq', 'alt' or 'bag' type and needs a specific
+     * interpretation
+     *
+     * this function process this kind of data, and add it in the Tag entries
+     *
+     * if child node is not a special a specific node, process it as a normal
+     * node
+     *
+     * @param XmlNode $node
+     */
+    private function processChildNode($node)
+    {
+      switch($node->getName())
+      {
+        /*
+         * child must be 'rdf:Seq', 'rdf:Bag' or 'rdf:Alt'
+         */
+        case "dc:contributor" : // bag
+        case "dc:creator" : // seq
+        case "dc:date" : // seq
+        case "dc:description" : // alt
+        case "dc:language" : // bag
+        case "dc:publisher" : // bag
+        case "dc:relation" : // bag
+        case "dc:rights" : // alt
+        case "dc:subject" : // bag
+        case "dc:title" : // alt
+        case "dc:Type" : // bag
+        case "xmp:Advisory" : // bag
+        case "xmp:Identifier" : // bag
+        case "xmp:Thumbnails" : // alt
+        case "xmpRights:Owner" : // bag
+        case "xmpRights:UsageTerms" : // alt
+        case "xmpMM:History" : // seq
+        case "xmpMM:Versions" : // seq
+        case "xmpBJ:JobRef" : // bag
+        case "xmpTPg:Fonts" : // bag
+        case "xmpTPg:Colorants" : // seq
+        case "xmpTPg:PlateNames" : // seq
+        case "photoshop:SupplementalCategories" : // bag
+        case "crs:ToneCurve" : // seq
+        case "tiff:BitsPerSample" : // seq
+        case "tiff:YCbCrSubSampling" : // seq
+        case "tiff:TransferFunction" : // seq
+        case "tiff:WhitePoint" : // seq
+        case "tiff:PrimaryChromaticities" : // seq
+        case "tiff:YCbCrCoefficients" : // seq
+        case "tiff:ReferenceBlackWhite" : // seq
+        case "tiff:ImageDescription" : // alt
+        case "tiff:Copyright" : // alt
+        case "exif:ComponentsConfiguration" : // seq
+        case "exif:UserComment" : // alt
+        case "exif:ISOSpeedRatings" : // seq
+        case "exif:SubjectArea" : // seq
+        case "exif:SubjectLocation" : // seq
+        case "Iptc4xmpCore:Scene": //bag
+        case "Iptc4xmpCore:SubjectCode": //bag
+          $child=$node->getFirstChild();
+          switch($child->getName())
+          {
+            case "rdf:Seq":
+              $type="seq";
+              break;
+            case "rdf:Bag":
+              $type="bag";
+              break;
+            case "rdf:Alt":
+              $type="alt";
+              break;
+            default:
+              $type="n/a";
+              break;
+          }
+          if($type=="seq" or $type=="bag" or $type="alt")
+          {
+            $value=Array('type' => $type, 'values' => Array());
+            $childNode=$child->getFirstChild();
+            while(!is_null($childNode))
+            {
+              if($childNode->getName() == "rdf:li")
+              {
+                if($type=="alt")
+                {
+                  $attributes=$childNode->getAttributes();
+                  if(count($attributes)>0)
+                  {
+                    $attributes=$attributes[0];
+                  }
+                  else
+                  {
+                    $attributes="n/a";
+                  }
+                  $value['values'][]=Array('type' => $attributes, 'value' => $childNode->getValue());
+                }
+                else
+                {
+                  $value['values'][]=$childNode->getValue();
+                }
+              }
+              $childNode=$childNode->getNextNode();
+            }
+            $this->addTag($node->getName(), $value);
+          }
+          break;
+        default:
+          $this->processNode($node->getFirstChild());
+          break;
+      }
+    }
+
+    /**
+     * add a Tag to the entries.
+     * name and value are needed, the function made the rest (interpret the
+     * value into a 'human readable' value)
+     *
+     * @param String $name : the name of the tag
+     * @param $value       : can be of any type
+     */
+    private function addTag($name, $value)
+    {
+      $tag=new Tag($name, $value, $name);
+
+      if($this->tagDef->tagIdExists($name))
+      {
+        $tagProperties=$this->tagDef->getTagById($name);
+
+        $tag->setIsKnown(true);
+        $tag->setIsImplemented($tagProperties['implemented']);
+        $tag->setIsTranslatable($tagProperties['translatable']);
+
+
+        if(array_key_exists('name', $tagProperties))
+        {
+          $tag->setName($tagProperties['name']);
+        }
+
+        /*
+         * if there is values defined for the tag, analyze it
+         */
+        if(array_key_exists('tagValues', $tagProperties))
+        {
+          if(array_key_exists($value, $tagProperties['tagValues']))
+          {
+            $tag->setLabel($tagProperties['tagValues'][$value]);
+          }
+          else
+          {
+            $tag->setLabel("[unknow value '".$value."']");
+          }
+        }
+        else
+        {
+          /*
+           * there is no values defined for the tag, analyzing it with dedicated
+           * function
+           */
+          if(array_key_exists('exifTag', $tagProperties))
+          {
+            $tag->setLabel($this->xmp2Exif($name, $tagProperties['exifTag'], $value));
+          }
+          else
+          {
+            $tag->setLabel($this->processSpecialTag($name, $value));
+          }
+
+        }
+      }
+
+      $this->entries[]=$tag;
+    }
+
+    /**
+     * this function do the interpretation of specials tags
+     *
+     * the function return the interpreted value for the tag
+     *
+     * @param $name              : the name of the tag
+     * @param $value             : 'raw' value to be interpreted
+     */
+    private function processSpecialTag($name, $value)
+    {
+      /*
+       * Note : exif & tiff values are not processed in this function
+       */
+      switch($name)
+      {
+        case "x:xmptk":
+        case "dc:coverage":
+        case "dc:format":
+        case "dc:identifier":
+        case "dc:relation":
+        case "dc:source":
+        case "dc:title":
+        case "xmp:BaseURL":
+        case "xmp:CreatorTool":
+        case "xmp:Label":
+        case "xmp:Nickname":
+        case "xmp:Rating:":
+        case "xmpRights:Certificate":
+        case "xmpRights:Marked":
+        case "xmpRights:UsageTerms":
+        case "xmpRights:WebStatement":
+        case "xmpMM:DocumentID":
+        case "xmpMM:InstanceID":
+        case "xmpMM:Manager":
+        case "xmpMM:ManageTo":
+        case "xmpMM:ManageUI":
+        case "xmpMM:ManagerVariant":
+        case "xmpMM:RenditionParams":
+        case "xmpMM:VersionID":
+        case "xmpMM:LastURL":
+        case "photoshop:AuthorsPosition":
+        case "photoshop:CaptionWriter":
+        case "photoshop:Category":
+        case "photoshop:City":
+        case "photoshop:Country":
+        case "photoshop:Credit":
+        case "photoshop:Headline":
+        case "photoshop:Instructions":
+        case "photoshop:Source":
+        case "photoshop:State":
+        case "photoshop:TransmissionReference":
+        case "crs:AutoBrightness":
+        case "crs:AutoContrast":
+        case "crs:AutoExposure":
+        case "crs:AutoShadows":
+        case "crs:BlueHue":
+        case "crs:BlueSaturation":
+        case "crs:Brightness":
+        case "crs:CameraProfile":
+        case "crs:ChromaticAberrationB":
+        case "crs:ChromaticAberrationR":
+        case "crs:ColorNoiseReduction":
+        case "crs:Contrast":
+        case "crs:CropTop":
+        case "crs:CropLeft":
+        case "crs:CropBottom":
+        case "crs:CropRight":
+        case "crs:CropAngle":
+        case "crs:CropWidth":
+        case "crs:CropHeight":
+        case "crs:Exposure":
+        case "crs:GreenHue":
+        case "crs:GreenSaturation":
+        case "crs:HasCrop":
+        case "crs:HasSettings":
+        case "crs:LuminanceSmoothing":
+        case "crs:RawFileName":
+        case "crs:RedHue":
+        case "crs:RedSaturation":
+        case "crs:Saturation":
+        case "crs:Shadows":
+        case "crs:ShadowTint":
+        case "crs:Sharpness":
+        case "crs:Temperature":
+        case "crs:Tint":
+        case "crs:Version":
+        case "crs:VignetteAmount":
+        case "crs:VignetteMidpoint":
+        case "Iptc4xmpCore:CountryCode":
+        case "Iptc4xmpCore:Location":
+        case "Iptc4xmpCore:CiEmailWork":
+        case "Iptc4xmpCore:CiUrlWork":
+        case "Iptc4xmpCore:CiTelWork":
+        case "Iptc4xmpCore:CiAdrExtadr":
+        case "Iptc4xmpCore:CiAdrPcode":
+        case "Iptc4xmpCore:CiAdrCity":
+        case "Iptc4xmpCore:CiAdrCtry":
+          $returned=$value;
+          break;
+        case "Iptc4xmpCore:IntellectualGenre":
+          $returned=explode(":", $value);
+          break;
+        case "xmp:CreateDate":
+        case "xmp:ModifyDate":
+        case "xmp:MetadataDate":
+        case "tiff:DateTime":
+        case "photoshop:DateCreated":
+        case "Iptc4xmpCore:DateCreated":
+          $returned=ConvertData::toDateTime($value);
+          break;
+        case "dc:contributor" : // bag
+        case "dc:creator" : // seq
+        case "dc:date" : // seq
+        case "dc:description" : // alt
+        case "dc:language" : // bag
+        case "dc:publisher" : // bag
+        case "dc:relation" : // bag
+        case "dc:rights" : // alt
+        case "dc:subject" : // bag
+        case "dc:title" : // alt
+        case "dc:Type" : // bag
+        case "xmp:Advisory" : // bag
+        case "xmp:Identifier" : // bag
+        case "xmp:Thumbnails" : // alt
+        case "xmpRights:Owner" : // bag
+        case "xmpRights:UsageTerms" : // alt
+        case "xmpMM:History" : // seq
+        case "xmpMM:Versions" : // seq
+        case "xmpBJ:JobRef" : // bag
+        case "xmpTPg:Fonts" : // bag
+        case "xmpTPg:Colorants" : // seq
+        case "xmpTPg:PlateNames" : // seq
+        case "photoshop:SupplementalCategories" : // bag
+        case "crs:ToneCurve" : // seq
+        case "tiff:BitsPerSample" : // seq
+        case "tiff:YCbCrSubSampling" : // seq
+        case "tiff:TransferFunction" : // seq
+        case "tiff:WhitePoint" : // seq
+        case "tiff:PrimaryChromaticities" : // seq
+        case "tiff:YCbCrCoefficients" : // seq
+        case "tiff:ReferenceBlackWhite" : // seq
+        case "tiff:ImageDescription" : // alt
+        case "tiff:Copyright" : // alt
+        case "exif:ComponentsConfiguration" : // seq
+        case "exif:UserComment" : // alt
+        case "exif:ISOSpeedRatings" : // seq
+        case "exif:SubjectArea" : // seq
+        case "exif:SubjectLocation" : // seq
+          $returned=$value;
+          break;
+        case "Iptc4xmpCore:Scene": //bag
+          $tag=$this->tagDef->getTagById('Iptc4xmpCore:Scene');
+          $returned=$value;
+          foreach($returned['values'] as $key=>$val)
+          {
+            if(array_key_exists($val, $tag['tagValues.special']))
+              $returned['values'][$key]=$tag['tagValues.special'][$val];
+          }
+          break;
+        case "Iptc4xmpCore:SubjectCode": //bag
+          $returned=$value;
+          foreach($returned['values'] as $key=>$val)
+          {
+            $tmp=explode(":", $val);
+
+            $returned['values'][$key]=Array();
+
+            if(count($tmp)>=1)
+              $returned['values'][$key]['IPR']=$tmp[0];
+
+            if(count($tmp)>=2)
+              $returned['values'][$key]['subjectCode']=$tmp[1];
+
+            if(count($tmp)>=3)
+              $returned['values'][$key]['subjectName']=$tmp[2];
+
+            if(count($tmp)>=4)
+              $returned['values'][$key]['subjectMatterName']=$tmp[3];
+
+            if(count($tmp)>=5)
+              $returned['values'][$key]['subjectDetailName']=$tmp[4];
+          }
+          break;
+        default:
+          $returned="Not yet implemented; $name";
+          break;
+      }
+      return($returned);
+    }
+
+    /**
+     * this function convert the value from XMP 'exif' or XMP 'tiff' data by
+     * using an instance of a XmpTag2Exif object (using exif tag object allows
+     * not coding the same things twice)
+     */
+    private function xmp2Exif($tagName, $exifTag, $xmpValue)
+    {
+      switch($tagName)
+      {
+        /* integers */
+        case "tiff:ImageWidth":
+        case "tiff:ImageLength":
+        case "tiff:PhotometricInterpretation":
+        case "tiff:Orientation":
+        case "tiff:SamplesPerPixel":
+        case "tiff:PlanarConfiguration":
+        case "tiff:YCbCrSubSampling":
+        case "tiff:YCbCrPositioning":
+        case "tiff:ResolutionUnit":
+        case "exif:ColorSpace":
+        case "exif:PixelXDimension":
+        case "exif:PixelYDimension":
+        case "exif:MeteringMode":
+        case "exif:LightSource":
+        case "exif:FlashEnergy":
+        case "exif:FocalPlaneResolutionUnit":
+        case "exif:SensingMethod":
+        case "exif:FileSource":
+        case "exif:SceneType":
+        case "exif:CustomRendered":
+        case "exif:ExposureMode":
+        case "exif:Balance":
+        case "exif:FocalLengthIn35mmFilm":
+        case "exif:SceneCaptureType":
+        case "exif:GainControl":
+        case "exif:Contrast":
+        case "exif:Saturation":
+        case "exif:Sharpness":
+        case "exif:SubjectDistanceRange":
+        case "exif:GPSAltitudeRef":
+        case "exif:GPSDifferential":
+          $returned=(int)$xmpValue;
+          $type=ByteType::ULONG;
+          break;
+        /* specials */
+        case "tiff:BitsPerSample":
+        case "tiff:Compression":
+        case "tiff:TransferFunction":
+        case "tiff:WhitePoint":
+        case "tiff:PrimaryChromaticities":
+        case "tiff:YCbCrCoefficients":
+        case "tiff:ReferenceBlackWhite":
+        case "exif:ComponentsConfiguration":
+        case "exif:ExposureProgram":
+        case "exif:ISOSpeedRatings":
+        case "exif:OECF":
+        case "exif:Flash":
+        case "exif:SubjectArea":
+        case "exif:SpatialFrequencyResponse":
+        case "exif:SubjectLocation":
+        case "exif:CFAPattern":
+        case "exif:DeviceSettingDescription":
+        case "exif:GPSLatitude":
+        case "exif:GPSLongitude":
+        case "exif:GPSDestLatitude":
+        case "exif:GPSDestLongitude":
+          $returned=$xmpValue;
+          $type=ByteType::UNDEFINED;
+          break;
+        /* rational */
+        case "tiff:XResolution":
+        case "tiff:YResolution":
+        case "exif:CompressedBitsPerPixel":
+        case "exif:ExposureTime":
+        case "exif:FNumber":
+        case "exif:ShutterSpeedValue":
+        case "exif:ApertureValue":
+        case "exif:BrightnessValue":
+        case "exif:ExposureBiasValue":
+        case "exif:MaxApertureValue":
+        case "exif:SubjectDistance":
+        case "exif:FocalLength":
+        case "exif:FocalPlaneXResolution":
+        case "exif:FocalPlaneYResolution":
+        case "exif:ExposureIndex":
+        case "exif:DigitalZoomRatio":
+        case "exif:GPSAltitude":
+        case "exif:GPSDOP":
+        case "exif:GPSSpeed":
+        case "exif:GPSTrack":
+        case "exif:GPSImgDirection":
+        case "exif:GPSDestBearing":
+        case "exif:GPSDestDistance":
+          $computed=explode("/", $xmpValue);
+          $returned=Array((int)$computed[0], (int)$computed[1]);
+          $type=ByteType::URATIONAL;
+          break;
+        /* dates & texts */
+        case "tiff:DateTime":
+        case "tiff:ImageDescription":
+        case "tiff:Make":
+        case "tiff:Model":
+        case "tiff:Software":
+        case "tiff:Artist":
+        case "tiff:Copyright":
+        case "exif:ExifVersion":
+        case "exif:FlashpixVersion":
+        case "exif:UserComment":
+        case "exif:RelatedSoundFile":
+        case "exif:DateTimeOriginal":
+        case "exif:DateTimeDigitized":
+        case "exif:SpectralSensitivity":
+        case "exif:ImageUniqueID":
+        case "exif:GPSVersionID":
+        case "exif:GPSTimeStamp":
+        case "exif:GPSSatellites":
+        case "exif:GPSStatus":
+        case "exif:GPSMeasureMode":
+        case "exif:GPSSpeedRef":
+        case "exif:GPSTrackRef":
+        case "exif:GPSImgDirectionRef":
+        case "exif:GPSMapDatum":
+        case "exif:GPSDestBearingRef":
+        case "exif:GPSDestDistanceRef":
+        case "exif:GPSProcessingMethod":
+        case "exif:GPSAreaInformation":
+          $returned=$xmpValue;
+          $type=ByteType::ASCII;
+          break;
+        default:
+          $returned="Unknown tag: $tagName => $xmpValue";
+          break;
+      }
+      if(is_array($returned))
+      {
+        if(array_key_exists('type', $returned))
+        {
+          if($returned['type']=='alt')
+          {
+          }
+          else
+          {
+            foreach($returned['values'] as $key => $val)
+            {
+              $returned['values'][$key]['value']=$this->xmpTag2Exif->convert($exifTag, $val['value'], $type);
+            }
+          }
+        }
+        else
+        {
+          return($this->xmpTag2Exif->convert($exifTag, $returned, $type));
+        }
+      }
+      return($returned);
+    }
+
+  }
+
+  /**
+   * The XmpTag2Exif is derived from the IfdReader class
+   *
+   * This function provides the public function 'convert', allowing to convert
+   * 'exif' datas in 'human readable' values
+   *
+   */
+  class XmpTag2Exif extends IfdReader
+  {
+    public function convert($exifTag, $value, $type)
+    {
+      return($this->processSpecialTag($exifTag, $value, $type));
+    }
+  }
+
+?>
+
Index: /extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php.bak
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php.bak	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php.bak	(revision 4686)
@@ -0,0 +1,621 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * -----------------------------------------------------------------------------
+ *
+ *
+ * -----------------------------------------------------------------------------
+ * a voir sil n'est pas plus judicieux de dériver cette classe de GenericReader
+ * plutôt que SegmentReader
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."Common/Data.class.php");
+  require_once(JPEG_METADATA_DIR."Common/XmlData.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/SegmentReader.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/XmpTags.class.php");
+
+  class XmpReader extends SegmentReader
+  {
+    private $xml = "";
+    private $xmlData = NULL;
+    private $tags = Array();
+
+    private $tagDef = null;
+
+    private $xmpTag2Exif = NULL;
+
+    function __construct(Data $data)
+    {
+      parent::__construct($data);
+
+      $this->xml=explode("\x00", $data->readASCII());
+      if(count($this->xml)>1)
+      {
+        $this->xml=$this->xml[1];
+      }
+      else
+      {
+        $this->xml="";
+      }
+
+      $this->xmpTag2Exif = new XmpTag2Exif("", 0, 0);
+
+      $this->xmlData = new XmlData($this->xml);
+      $this->tagDef = new XmpTags();
+
+      $this->loadTags();
+
+      $this->isValid = $this->xmlData->isValid();
+      $this->isLoaded = $this->xmlData->isLoaded();
+
+    }
+
+    function __destruct()
+    {
+      unset($this->tags);
+      unset($this->tagDef);
+      unset($this->xmpTag2Exif);
+    }
+
+    public function getTags()
+    {
+      return($this->tags);
+    }
+
+    public function toString()
+    {
+      $returned=$this->xml;
+      return($returned);
+    }
+
+    private function loadTags()
+    {
+      if($this->xmlData->hasNodes())
+      {
+        $this->processNode($this->xmlData->getFirstNode());
+      }
+    }
+
+    private function processNode($node)
+    {
+      if(!is_null($node))
+      {
+        $node->setName($this->processNodeName($node->getName()));
+
+        foreach($node->getAttributes() as $key => $val)
+        {
+          $val['name']=$this->processNodeName($val['name']);
+          $this->addTag($val['name'], $val['value']);
+        }
+
+        if(!is_null($node->getValue()))
+        {
+          $this->addTag($node->getName(), $node->getValue());
+        }
+
+        if($node->hasChilds())
+        {
+          $this->processChildNode($node);
+        }
+
+        $this->processNode($node->getNextNode());
+      }
+    }
+
+    private function processNodeName($nodeName)
+    {
+      /*
+       * 'xap' schema have to be interpreted as a 'xmp' schema
+       * rename all 'xap' nodes in 'xmp' nodes
+       */
+      $name=preg_replace(Array("/^(xap:)/", "/^(xapMM:)/"), Array("xmp:", "xmpMM:"), $nodeName);
+
+      return($name);
+    }
+
+    private function processChildNode($node)
+    {
+      switch($node->getName())
+      {
+        /*
+         * child must be 'rdf:Seq', 'rdf:Bag' or 'rdf:Alt'
+         */
+        case "dc:contributor" : // bag
+        case "dc:creator" : // seq
+        case "dc:date" : // seq
+        case "dc:description" : // alt
+        case "dc:language" : // bag
+        case "dc:publisher" : // bag
+        case "dc:relation" : // bag
+        case "dc:rights" : // alt
+        case "dc:subject" : // bag
+        case "dc:title" : // alt
+        case "dc:Type" : // bag
+        case "xmp:Advisory" : // bag
+        case "xmp:Identifier" : // bag
+        case "xmp:Thumbnails" : // alt
+        case "xmpRights:Owner" : // bag
+        case "xmpRights:UsageTerms" : // alt
+        case "xmpMM:History" : // seq
+        case "xmpMM:Versions" : // seq
+        case "xmpBJ:JobRef" : // bag
+        case "xmpTPg:Fonts" : // bag
+        case "xmpTPg:Colorants" : // seq
+        case "xmpTPg:PlateNames" : // seq
+        case "photoshop:SupplementalCategories" : // bag
+        case "crs:ToneCurve" : // seq
+        case "tiff:BitsPerSample" : // seq
+        case "tiff:YCbCrSubSampling" : // seq
+        case "tiff:TransferFunction" : // seq
+        case "tiff:WhitePoint" : // seq
+        case "tiff:PrimaryChromaticities" : // seq
+        case "tiff:YCbCrCoefficients" : // seq
+        case "tiff:ReferenceBlackWhite" : // seq
+        case "tiff:ImageDescription" : // alt
+        case "tiff:Copyright" : // alt
+        case "exif:ComponentsConfiguration" : // seq
+        case "exif:UserComment" : // alt
+        case "exif:ISOSpeedRatings" : // seq
+        case "exif:SubjectArea" : // seq
+        case "exif:SubjectLocation" : // seq
+        case "Iptc4xmpCore:Scene": //bag
+        case "Iptc4xmpCore:SubjectCode": //bag
+          $child=$node->getFirstChild();
+          switch($child->getName())
+          {
+            case "rdf:Seq":
+              $type="seq";
+              break;
+            case "rdf:Bag":
+              $type="bag";
+              break;
+            case "rdf:Alt":
+              $type="alt";
+              break;
+            default:
+              $type="n/a";
+              break;
+          }
+          if($type=="seq" or $type=="bag" or $type="alt")
+          {
+            $value=Array('type' => $type, 'values' => Array());
+            $childNode=$child->getFirstChild();
+            while(!is_null($childNode))
+            {
+              if($childNode->getName() == "rdf:li")
+              {
+                if($type=="alt")
+                {
+                  $attributes=$childNode->getAttributes();
+                  if(count($attributes)>0)
+                  {
+                    $attributes=$attributes[0];
+                  }
+                  else
+                  {
+                    $attributes="n/a";
+                  }
+                  $value['values'][]=Array('type' => $attributes, 'value' => $childNode->getValue());
+                }
+                else
+                {
+                  $value['values'][]=$childNode->getValue();
+                }
+              }
+              $childNode=$childNode->getNextNode();
+            }
+            $this->addTag($node->getName(), $value);
+          }
+          break;
+        default:
+          $this->processNode($node->getFirstChild());
+          break;
+      }
+    }
+
+    private function addTag($name, $value)
+    {
+      $tag=new Tag($name, $value, $name);
+
+      if($this->tagDef->tagIdExists($name))
+      {
+        $tagProperties=$this->tagDef->getTagById($name);
+
+        $tag->setIsKnown(true);
+        $tag->setIsImplemented($tagProperties['implemented']);
+
+
+        if(array_key_exists('name', $tagProperties))
+        {
+          $tag->setName($tagProperties['name']);
+        }
+
+        /*
+         * if there is values defined for the tag, analyze it
+         */
+        if(array_key_exists('tagValues', $tagProperties))
+        {
+          if(array_key_exists($value, $tagProperties['tagValues']))
+          {
+            $tag->setLabel($tagProperties['tagValues'][$value]);
+          }
+          else
+          {
+            $tag->setLabel("[unknow value '".$value."']");
+          }
+        }
+        else
+        {
+          /*
+           * there is no values defined for the tag, analyzing it with dedicated
+           * function
+           */
+          if(array_key_exists('exifTag', $tagProperties))
+          {
+            $tag->setLabel($this->xmp2Exif($name, $tagProperties['exifTag'], $value));
+          }
+          else
+          {
+            $tag->setLabel($this->processSpecialTag($name, $value));
+          }
+
+        }
+      }
+
+      $this->tags[]=$tag;
+    }
+
+    private function processSpecialTag($name, $value)
+    {
+      /*
+       * Note : exif & tiff values are not processed in this function
+       */
+      switch($name)
+      {
+        case "x:xmptk":
+        case "dc:coverage":
+        case "dc:format":
+        case "dc:identifier":
+        case "dc:relation":
+        case "dc:source":
+        case "dc:title":
+        case "xmp:BaseURL":
+        case "xmp:CreatorTool":
+        case "xmp:Label":
+        case "xmp:Nickname":
+        case "xmp:Rating:":
+        case "xmpRights:Certificate":
+        case "xmpRights:Marked":
+        case "xmpRights:UsageTerms":
+        case "xmpRights:WebStatement":
+        case "xmpMM:DocumentID":
+        case "xmpMM:InstanceID":
+        case "xmpMM:Manager":
+        case "xmpMM:ManageTo":
+        case "xmpMM:ManageUI":
+        case "xmpMM:ManagerVariant":
+        case "xmpMM:RenditionParams":
+        case "xmpMM:VersionID":
+        case "xmpMM:LastURL":
+        case "photoshop:AuthorsPosition":
+        case "photoshop:CaptionWriter":
+        case "photoshop:Category":
+        case "photoshop:City":
+        case "photoshop:Country":
+        case "photoshop:Credit":
+        case "photoshop:Headline":
+        case "photoshop:Instructions":
+        case "photoshop:Source":
+        case "photoshop:State":
+        case "photoshop:TransmissionReference":
+        case "crs:AutoBrightness":
+        case "crs:AutoContrast":
+        case "crs:AutoExposure":
+        case "crs:AutoShadows":
+        case "crs:BlueHue":
+        case "crs:BlueSaturation":
+        case "crs:Brightness":
+        case "crs:CameraProfile":
+        case "crs:ChromaticAberrationB":
+        case "crs:ChromaticAberrationR":
+        case "crs:ColorNoiseReduction":
+        case "crs:Contrast":
+        case "crs:CropTop":
+        case "crs:CropLeft":
+        case "crs:CropBottom":
+        case "crs:CropRight":
+        case "crs:CropAngle":
+        case "crs:CropWidth":
+        case "crs:CropHeight":
+        case "crs:Exposure":
+        case "crs:GreenHue":
+        case "crs:GreenSaturation":
+        case "crs:HasCrop":
+        case "crs:HasSettings":
+        case "crs:LuminanceSmoothing":
+        case "crs:RawFileName":
+        case "crs:RedHue":
+        case "crs:RedSaturation":
+        case "crs:Saturation":
+        case "crs:Shadows":
+        case "crs:ShadowTint":
+        case "crs:Sharpness":
+        case "crs:Temperature":
+        case "crs:Tint":
+        case "crs:Version":
+        case "crs:VignetteAmount":
+        case "crs:VignetteMidpoint":
+        case "Iptc4xmpCore:CountryCode":
+        case "Iptc4xmpCore:Location":
+        case "Iptc4xmpCore:CiEmailWork":
+        case "Iptc4xmpCore:CiUrlWork":
+        case "Iptc4xmpCore:CiTelWork":
+        case "Iptc4xmpCore:CiAdrExtadr":
+        case "Iptc4xmpCore:CiAdrPcode":
+        case "Iptc4xmpCore:CiAdrCity":
+        case "Iptc4xmpCore:CiAdrCtry":
+          $returned=$value;
+          break;
+        case "Iptc4xmpCore:IntellectualGenre":
+          $returned=explode(":", $value);
+          break;
+        case "xmp:CreateDate":
+        case "xmp:ModifyDate":
+        case "xmp:MetadataDate":
+        case "tiff:DateTime":
+        case "photoshop:DateCreated":
+        case "Iptc4xmpCore:DateCreated":
+          $returned=ConvertData::toDateTime($value);
+          break;
+        case "dc:contributor" : // bag
+        case "dc:creator" : // seq
+        case "dc:date" : // seq
+        case "dc:description" : // alt
+        case "dc:language" : // bag
+        case "dc:publisher" : // bag
+        case "dc:relation" : // bag
+        case "dc:rights" : // alt
+        case "dc:subject" : // bag
+        case "dc:title" : // alt
+        case "dc:Type" : // bag
+        case "xmp:Advisory" : // bag
+        case "xmp:Identifier" : // bag
+        case "xmp:Thumbnails" : // alt
+        case "xmpRights:Owner" : // bag
+        case "xmpRights:UsageTerms" : // alt
+        case "xmpMM:History" : // seq
+        case "xmpMM:Versions" : // seq
+        case "xmpBJ:JobRef" : // bag
+        case "xmpTPg:Fonts" : // bag
+        case "xmpTPg:Colorants" : // seq
+        case "xmpTPg:PlateNames" : // seq
+        case "photoshop:SupplementalCategories" : // bag
+        case "crs:ToneCurve" : // seq
+        case "tiff:BitsPerSample" : // seq
+        case "tiff:YCbCrSubSampling" : // seq
+        case "tiff:TransferFunction" : // seq
+        case "tiff:WhitePoint" : // seq
+        case "tiff:PrimaryChromaticities" : // seq
+        case "tiff:YCbCrCoefficients" : // seq
+        case "tiff:ReferenceBlackWhite" : // seq
+        case "tiff:ImageDescription" : // alt
+        case "tiff:Copyright" : // alt
+        case "exif:ComponentsConfiguration" : // seq
+        case "exif:UserComment" : // alt
+        case "exif:ISOSpeedRatings" : // seq
+        case "exif:SubjectArea" : // seq
+        case "exif:SubjectLocation" : // seq
+          $returned=$value;
+          break;
+        case "Iptc4xmpCore:Scene": //bag
+          $tag=$this->tagDef->getTagById('Iptc4xmpCore:Scene');
+          $returned=$value;
+          foreach($returned['values'] as $key=>$val)
+          {
+            if(array_key_exists($val, $tag['tagValues.special']))
+              $returned['values'][$key]=$tag['tagValues.special'][$val];
+          }
+          break;
+        case "Iptc4xmpCore:SubjectCode": //bag
+          $returned=$value;
+          foreach($returned['values'] as $key=>$val)
+          {
+            $tmp=explode(":", $val);
+
+            $returned['values'][$key]=Array();
+
+            if(count($tmp)>=1)
+              $returned['values'][$key]['IPR']=$tmp[0];
+
+            if(count($tmp)>=2)
+              $returned['values'][$key]['subjectCode']=$tmp[1];
+
+            if(count($tmp)>=3)
+              $returned['values'][$key]['subjectName']=$tmp[2];
+
+            if(count($tmp)>=4)
+              $returned['values'][$key]['subjectMatterName']=$tmp[3];
+
+            if(count($tmp)>=5)
+              $returned['values'][$key]['subjectDetailName']=$tmp[4];
+          }
+          break;
+        default:
+          $returned="Not yet implemented; $name";
+          break;
+      }
+      return($returned);
+    }
+
+    private function xmp2Exif($tagName, $exifTag, $xmpValue)
+    {
+      switch($tagName)
+      {
+        /* integers */
+        case "tiff:ImageWidth":
+        case "tiff:ImageLength":
+        case "tiff:PhotometricInterpretation":
+        case "tiff:Orientation":
+        case "tiff:SamplesPerPixel":
+        case "tiff:PlanarConfiguration":
+        case "tiff:YCbCrSubSampling":
+        case "tiff:YCbCrPositioning":
+        case "tiff:ResolutionUnit":
+        case "exif:ColorSpace":
+        case "exif:PixelXDimension":
+        case "exif:PixelYDimension":
+        case "exif:MeteringMode":
+        case "exif:LightSource":
+        case "exif:FlashEnergy":
+        case "exif:FocalPlaneResolutionUnit":
+        case "exif:SensingMethod":
+        case "exif:FileSource":
+        case "exif:SceneType":
+        case "exif:CustomRendered":
+        case "exif:ExposureMode":
+        case "exif:WhiteBalance":
+        case "exif:FocalLengthIn35mmFilm":
+        case "exif:SceneCaptureType":
+        case "exif:GainControl":
+        case "exif:Contrast":
+        case "exif:Saturation":
+        case "exif:Sharpness":
+        case "exif:SubjectDistanceRange":
+        case "exif:GPSAltitudeRef":
+        case "exif:GPSDifferential":
+          $returned=(int)$xmpValue;
+          $type=ByteType::ULONG;
+          break;
+        /* specials */
+        case "tiff:BitsPerSample":
+        case "tiff:Compression":
+        case "tiff:TransferFunction":
+        case "tiff:WhitePoint":
+        case "tiff:PrimaryChromaticities":
+        case "tiff:YCbCrCoefficients":
+        case "tiff:ReferenceBlackWhite":
+        case "exif:ComponentsConfiguration":
+        case "exif:ExposureProgram":
+        case "exif:ISOSpeedRatings":
+        case "exif:OECF":
+        case "exif:Flash":
+        case "exif:SubjectArea":
+        case "exif:SpatialFrequencyResponse":
+        case "exif:SubjectLocation":
+        case "exif:CFAPattern":
+        case "exif:DeviceSettingDescription":
+        case "exif:GPSLatitude":
+        case "exif:GPSLongitude":
+        case "exif:GPSDestLatitude":
+        case "exif:GPSDestLongitude":
+          $returned=$xmpValue;
+          $type=ByteType::UNDEFINED;
+          break;
+        /* rational */
+        case "tiff:XResolution":
+        case "tiff:YResolution":
+        case "exif:CompressedBitsPerPixel":
+        case "exif:ExposureTime":
+        case "exif:FNumber":
+        case "exif:ShutterSpeedValue":
+        case "exif:ApertureValue":
+        case "exif:BrightnessValue":
+        case "exif:ExposureBiasValue":
+        case "exif:MaxApertureValue":
+        case "exif:SubjectDistance":
+        case "exif:FocalLength":
+        case "exif:FocalPlaneXResolution":
+        case "exif:FocalPlaneYResolution":
+        case "exif:ExposureIndex":
+        case "exif:DigitalZoomRatio":
+        case "exif:GPSAltitude":
+        case "exif:GPSDOP":
+        case "exif:GPSSpeed":
+        case "exif:GPSTrack":
+        case "exif:GPSImgDirection":
+        case "exif:GPSDestBearing":
+        case "exif:GPSDestDistance":
+          $computed=explode("/", $xmpValue);
+          $returned=Array((int)$computed[0], (int)$computed[1]);
+          $type=ByteType::URATIONAL;
+          break;
+        /* dates & texts */
+        case "tiff:DateTime":
+        case "tiff:ImageDescription":
+        case "tiff:Make":
+        case "tiff:Model":
+        case "tiff:Software":
+        case "tiff:Artist":
+        case "tiff:Copyright":
+        case "exif:ExifVersion":
+        case "exif:FlashpixVersion":
+        case "exif:UserComment":
+        case "exif:RelatedSoundFile":
+        case "exif:DateTimeOriginal":
+        case "exif:DateTimeDigitized":
+        case "exif:SpectralSensitivity":
+        case "exif:ImageUniqueID":
+        case "exif:GPSVersionID":
+        case "exif:GPSTimeStamp":
+        case "exif:GPSSatellites":
+        case "exif:GPSStatus":
+        case "exif:GPSMeasureMode":
+        case "exif:GPSSpeedRef":
+        case "exif:GPSTrackRef":
+        case "exif:GPSImgDirectionRef":
+        case "exif:GPSMapDatum":
+        case "exif:GPSDestBearingRef":
+        case "exif:GPSDestDistanceRef":
+        case "exif:GPSProcessingMethod":
+        case "exif:GPSAreaInformation":
+          $returned=$xmpValue;
+          $type=ByteType::ASCII;
+          break;
+        default:
+          $returned="Unknown tag: $tagName => $xmpValue";
+          break;
+      }
+      if(is_array($returned))
+      {
+        if(array_key_exists('type', $returned))
+        {
+          if($returned['type']=='alt')
+          {
+          }
+          else
+          {
+            foreach($returned['values'] as $key => $val)
+            {
+              $returned['values'][$key]['value']=$this->xmpTag2Exif->convert($exifTag, $val['value'], $type);
+            }
+          }
+        }
+        else
+        {
+          return($this->xmpTag2Exif->convert($exifTag, $returned, $type));
+        }
+      }
+      return($returned);
+    }
+
+  }
+
+
+  class XmpTag2Exif extends IfdReader
+  {
+    public function convert($exifTag, $value, $type)
+    {
+      return($this->processSpecialTag($exifTag, $value, $type));
+    }
+  }
+
+?>
+
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/GpsTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/GpsTags.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/GpsTags.class.php	(revision 4686)
@@ -0,0 +1,326 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * -----------------------------------------------------------------------------
+ * Known IFD tags properties class
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/KnownTags.class.php");
+
+  /**
+   * Define the tags for GPS
+   */
+  class GpsTags extends KnownTags
+  {
+    protected $label = "Exif GPS tags";
+    protected $tags = Array(
+      /*
+       * tags with defined values
+       */
+
+      // GPSVersionID, tag 0x0000
+      0x0000 => Array(
+        'tagName'     => "GPSVersionID",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSVersionID
+
+      // GPSLatitudeRef, tag 0x0001
+      0x0001 => Array(
+        'tagName'     => "GPSLatitudeRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSLatitudeRef
+
+      // GPSLatitude, tag 0x0002
+      0x0002 => Array(
+        'tagName'     => "GPSLatitude",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSLatitudeRef
+
+      // GPSLongitudeRef, tag 0x0003
+      0x0003 => Array(
+        'tagName'     => "GPSLongitudeRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSLongitudeRef
+
+      // GPSLongitude, tag 0x0004
+      0x0004 => Array(
+        'tagName'     => "GPSLongitude",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSLongitude
+
+      // GPSAltitudeRef, tag 0x0005
+      0x0005 => Array(
+        'tagName'     => "GPSAltitudeRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "above sea level",
+          0x01 => "under sea level"
+        )
+      ), // < GPSAltitudeRef
+
+      // GPSAltitude, tag 0x0006
+      0x0006 => Array(
+        'tagName'     => "GPSAltitude",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSAltitude
+
+      // GPSTimeStamp, tag 0x0007
+      0x0007 => Array(
+        'tagName'     => "GPSTimeStamp",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < GPSTimeStamp
+
+      // GPSSatellites, tag 0x0008
+      0x0008 => Array(
+        'tagName'     => "GPSSatellites",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSSatellites
+
+      // GPSStatus, tag 0x0009
+      0x0009 => Array(
+        'tagName'     => "GPSStatus",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSStatus
+
+      // GPSMeasureMode, tag 0x000a
+      0x000A => Array(
+        'tagName'     => "GPSMeasureMode",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSMeasureMode
+
+      // GPSDOP, tag 0x000b
+      0x000B => Array(
+        'tagName'     => "GPSDOP",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < GPSDOP
+
+      // GPSSpeedRef, tag 0x000c
+      0x000C => Array(
+        'tagName'     => "GPSSpeedRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSSpeedRef
+
+      // GPSSpeed, tag 0x000d
+      0x000D => Array(
+        'tagName'     => "GPSSpeed",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSSpeed
+
+      // GPSTrackRef, tag 0x000e
+      0x000E => Array(
+        'tagName'     => "GPSTrackRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSTrackRef
+
+      // GPSTrack, tag 0x000f
+      0x000F => Array(
+        'tagName'     => "GPSTrack",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSTrack
+
+      // GPSImgDirectionRef, tag 0x0010
+      0x0010 => Array(
+        'tagName'     => "GPSImgDirectionRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSImgDirectionRef
+
+      // GPSImgDirection, tag 0x0011
+      0x0011 => Array(
+        'tagName'     => "GPSImgDirection",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSImgDirection
+
+      // GPSMapDatum, tag 0x0012
+      0x0012 => Array(
+        'tagName'     => "GPSMapDatum",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSMapDatum
+
+      // GPSDestLatitudeRef, tag 0x0013
+      0x0013 => Array(
+        'tagName'     => "GPSDestLatitudeRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestLatitudeRef
+
+      // GPSDestLatitude, tag 0x0014
+      0x0014 => Array(
+        'tagName'     => "GPSDestLatitude",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestLatitude
+
+      // GPSDestLongitudeRef, tag 0x0015
+      0x0015 => Array(
+        'tagName'     => "GPSDestLongitudeRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestLongitudeRef
+
+      // GPSDestLongitude, tag 0x0016
+      0x0016 => Array(
+        'tagName'     => "GPSDestLongitude",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestLongitude
+
+      // GPSDestBearingRef, tag 0x0017
+      0x0017 => Array(
+        'tagName'     => "GPSDestBearingRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestBearingRef
+
+      // GPSDestBearing, tag 0x0018
+      0x0018 => Array(
+        'tagName'     => "GPSDestBearing",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestBearing
+
+      // GPSDestDistanceRef, tag 0x0019
+      0x0019=> Array(
+        'tagName'     => "GPSDestDistanceRef",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestDistanceRef
+
+      // GPSDestDistance, tag 0x001A
+      0x001A=> Array(
+        'tagName'     => "GPSDestDistance",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDestDistance
+
+
+      // GPSProcessingMethod, tag 0x001B
+      0x001B=> Array(
+        'tagName'     => "GPSProcessingMethod",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSProcessingMethod
+
+      // GPSAreaInformation, tag 0x001C
+      0x001C=> Array(
+        'tagName'     => "GPSAreaInformation",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSAreaInformation
+
+      // GPSDateStamp, tag 0x001D
+      0x001D=> Array(
+        'tagName'     => "GPSDateStamp",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPSDateStamp
+
+
+      // GPSDifferential, tag 0x001E
+      0x001E=> Array(
+        'tagName'     => "GPSDifferential",
+        'schema'      => "GPS",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "measurement without differential correction",
+          0x01 => "differential correction applied"
+        )
+      ), // < GPSDifferential
+
+
+
+    );
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/IfdTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/IfdTags.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/IfdTags.class.php	(revision 4686)
@@ -0,0 +1,1547 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * -----------------------------------------------------------------------------
+ * Known IFD tags properties class
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/KnownTags.class.php");
+
+  /**
+   * Define the tags for EXIF
+   */
+  class IfdTags extends KnownTags
+  {
+    protected $label = "Exif & Tiff tags";
+    protected $tags = Array(
+      /*
+       * tags with defined values
+       */
+
+      // ProcessingSoftware, tag 0x000b
+      0x000b => Array(
+        'tagName'     => "ProcessingSoftware",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ProcessingSoftware
+
+      // SubfileType, tag 0x00fe
+      0x00fe => Array(
+        'tagName'     => "SubfileType",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "full-resolution image",
+          0x01 => "reduced-resolution image",
+          0x02 => "single page of multi-page image",
+          0x03 => "single page of multi-page reduced-resolution image",
+          0x04 => "transparency mask",
+          0x05 => "transparency mask of reduced-resolution image",
+          0x06 => "transparency mask of multi-page image",
+          0x07 => "transparency mask of reduced-resolution multi-page image",
+        )
+      ), // < SubfileType
+
+      // OldSubfileType, tag 0x00ff
+      0x00ff => Array(
+        'tagName'     => "OldSubfileType",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "full-resolution image",
+          0x02 => "reduced-resolution image",
+          0x03 => "single page of multi-page image",
+        )
+      ), // < SubfileType
+
+      // ImageWidth, tag 0x0100
+      0x0100 => Array(
+        'tagName'     => "ImageWidth",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ImageWidth
+
+      // ImageHeight, tag 0x0101
+      0x0101 => Array(
+        'tagName'     => "ImageLength",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ImageLength
+
+      // BitsPerSample, tag 0x0102
+      0x0102 => Array(
+        'tagName'     => "BitsPerSample",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < BitsPerSample
+
+      // Compression, tag 0x0103
+      0x0103 => Array(
+        'tagName'     => "Compression",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0001 => "uncompressed",
+          0x0002 => "CCITT 1D",
+          0x0003 => "T4/Group 3 Fax",
+          0x0004 => "T6/Group 4 Fax",
+          0x0005 => "LZW",
+          0x0006 => "JPEG (old style)",
+          0x0007 => "JPEG",
+          0x0008 => "Adobe Deflate",
+          0x0009 => "JBIG B&W",
+          0x0010 => "JBIG Color",
+          0x0063 => "JPEG",
+          0x0106 => "Kodak 262",
+          0x7FFE => "Next",
+          0x7FFF => "Sony ARW Compressed",
+          0x8001 => "Epson ERF Compressed",
+          0x8003 => "CCIRLEW",
+          0x8005 => "PackBits",
+          0x8029 => "Thunderscan",
+          0x8063 => "Kodak KDC Compressed",
+          0x807F => "IT8CTPAD",
+          0x8080 => "IT8LW",
+          0x8081 => "IT8MP",
+          0x8082 => "IT8BL",
+          0x808c => "PixarFilm",
+          0x808D => "PixarLog",
+          0x80B2 => "Deflate",
+          0x80B3 => "DCS",
+          0x8765 => "JBIG",
+          0x8774 => "SGILog",
+          0x8775 => "SGILog24",
+          0x8798 => "JPEG 2000",
+          0x8799 => "Nikon NEF Compressed",
+          0x879E => "Microsoft Document Imaging (MDI) Binary Level Codec",
+          0x879F => "Microsoft Document Imaging (MDI) Progressive Transform Codec",
+          0x87A0 => "Microsoft Document Imaging (MDI) Vector",
+          0xFDE8 => "Kodak DCR Compressed",
+          0xFFFF => "Pentax PEF Compressed",
+        )
+      ), // < Compression
+
+      // PhotometricInterpretation, tag 0x0106
+      0x0106 => Array(
+        'tagName'     => "PhotometricInterpretation",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0000 => "WhiteIsZero",
+          0x0001 => "BlackIsZero",
+          0x0002 => "RGB",
+          0x0003 => "RGB Palette",
+          0x0004 => "Transparency Mask",
+          0x0005 => "CMYK",
+          0x0006 => "YCbCr",
+          0x0008 => "CIELab",
+          0x0009 => "ICCLab",
+          0x000A => "ITULab",
+          0x8023 => "Color Filter Array",
+          0x804C => "Pixar LogL",
+          0x804D => "Pixar LogLuv",
+          0x884C => "Linear Raw",
+        )
+      ), // < PhotometricInterpretation
+
+      // Thresholding, tag 0x0107
+      0x0107 => Array(
+        'tagName'     => "Thresholding",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0001 => "no dithering or halftoning",
+          0x0002 => "ordered dither or halftone",
+          0x0003 => "randomized dither",
+        )
+      ), // < Thresholding
+
+      // CellWidth, tag 0x0108
+      0x0108 => Array(
+        'tagName'     => "CellWidth",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < CellWidth
+
+      // CellLength, tag 0x0109
+      0x0109 => Array(
+        'tagName'     => "CellLength",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < CellLength
+
+      // FillOrder, tag 0x010A
+      0x010A => Array(
+        'tagName'     => "FillOrder",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0001 => "normal",
+          0x0002 => "reversed",
+        )
+      ), // < FillOrder
+
+      // DocumentName, tag 0x010D
+      0x010d => Array(
+        'tagName'     => "DocumentName",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < DocumentName
+
+      // ImageDescription, tag 0x010E
+      0x010E => Array(
+        'tagName'     => "ImageDescription",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ImageDescription
+
+      // Make, tag 0x010F
+      0x010F => Array(
+        'tagName'     => "Make",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < Make
+
+      // Model, tag 0x0110
+      0x0110 => Array(
+        'tagName'     => "Model",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < Model
+
+      // StripOffsets, tag 0x0111
+      0x0111 => Array(
+        'tagName'     => "StripOffsets",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < StripOffsets
+
+      // Orientation, tag 0x0112, see EXIF2.2 documentation
+      0x0112 => Array(
+        'tagName'     => "Orientation",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0001 => "horizontal (normal)",
+          0x0002 => "mirror horizontal",
+          0x0003 => "rotate 180",
+          0x0004 => "mirror vertical",
+          0x0005 => "mirror horizontal and rotate 270 CW",
+          0x0006 => "rotate 90 CW",
+          0x0007 => "mirror horizontal and rotate 90 CW",
+          0x0008 => "rotate 270 CW"
+        )
+      ), // < Orientation
+
+      // SamplesPerPixel, tag 0x0115
+      0x0115 => Array(
+        'tagName'     => "SamplesPerPixel",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < SamplesPerPixel
+
+      // RowsPerStrip, tag 0x0116
+      0x0116 => Array(
+        'tagName'     => "RowsPerStrip",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < RowsPerStrip
+
+      // StripByteCounts, tag 0x0117
+      0x0117 => Array(
+        'tagName'     => "StripByteCounts",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < StripByteCounts
+
+      // MinSampleValue, tag 0x0118
+      0x0118 => Array(
+        'tagName'     => "MinSampleValue",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < MinSampleValue
+
+      // MaxSampleValue, tag 0x0119
+      0x0119 => Array(
+        'tagName'     => "MaxSampleValue",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < MaxSampleValue
+
+      // XResolution, tag 0x011A
+      0x011A => Array(
+        'tagName'     => "XResolution",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < XResolution
+
+      // YResolution, tag 0x011B
+      0x011B => Array(
+        'tagName'     => "YResolution",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < YResolution
+
+      // PlanarConfiguration, tag 0x011C
+      0x011C => Array(
+        'tagName'     => "PlanarConfiguration",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "chunky",
+          0x02 => "planar"
+        )
+      ), // < PlanarConfiguration
+
+      // PageName, tag 0x011D
+      0x011D => Array(
+        'tagName'     => "PageName",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < PageName
+
+      // XPosition, tag 0x011E
+      0x011E => Array(
+        'tagName'     => "XPosition",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < XPosition
+
+
+      // YPosition, tag 0x011F
+      0x011F => Array(
+        'tagName'     => "YPosition",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < YPosition
+
+
+      // FreeOffsets, tag 0x0120
+      0x0120 => Array(
+        'tagName'     => "FreeOffsets",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < FreeOffsets
+
+      // FreeByteCounts, tag 0x0121
+      0x0121 => Array(
+        'tagName'     => "FreeByteCounts",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < FreeByteCounts
+
+      // GrayResponseUnit, tag 0x0122
+      0x0122 => Array(
+        'tagName'     => "GrayResponseUnit",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => 0.1,
+          0x02 => 0.001,
+          0x03 => 0.0001,
+          0x04 => 0.00001,
+          0x05 => 0.000001
+        )
+      ), // < GrayResponseUnit
+
+      // GrayResponseCurve, tag 0x0123
+      0x0123 => Array(
+        'tagName'     => "GrayResponseCurve",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < GrayResponseCurve
+
+      // T4Options, tag 0x0124
+      0x0124 => Array(
+        'tagName'     => "T4Options",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < T4Options
+
+
+      // T6Options, tag 0x0125
+      0x0125 => Array(
+        'tagName'     => "T6Options",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < T6Options
+
+
+      // ResolutionUnit, tag 0x0128
+      0x0128 => Array(
+        'tagName'     => "ResolutionUnit",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "none",
+          0x02 => "inches",
+          0x03 => "centimeters"
+        )
+      ), // < ResolutionUnit
+
+      // PageNumber, tag 0x0129
+      0x0129 => Array(
+        'tagName'     => "PageNumber",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < PageNumber
+
+      // ColorResponseUnit, tag 0x012c
+      0x012c => Array(
+        'tagName'     => "ColorResponseUnit",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < ColorResponseUnit
+
+      // TransferFunction, tag 0x012D
+      0x012D => Array(
+        'tagName'     => "TransferFunction",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < TransferFunction
+
+
+      // Software, tag 0x0131
+      0x0131 => Array(
+        'tagName'     => "Software",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < DateTime
+
+      // DateTime, tag 0x0132
+      0x0132 => Array(
+        'tagName'     => "DateTime",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < DateTime
+
+      // Artist, tag 0x013B
+      0x013B => Array(
+        'tagName'     => "Artist",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < Artist
+
+      // HostComputer, tag 0x013C
+      0x013C => Array(
+        'tagName'     => "HostComputer",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < HostComputer
+
+
+      // Predictor, tag 0x013D
+      0x013D => Array(
+        'tagName'     => "Predictor",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "none",
+          0x02 => "horizontal differencing"
+        )
+      ), // < Predictor
+
+
+      // WhitePoint, tag 0x013E
+      0x013E => Array(
+        'tagName'     => "WhitePoint",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < WhitePoint
+
+      // PrimaryChromaticities, tag 0x013F
+      0x013F => Array(
+        'tagName'     => "PrimaryChromaticities",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < PrimaryChromaticities
+
+
+      // JPEGInterchangeFormat, tag 0x0201, see EXIF2.2 documentation to implement
+      0x0201 => Array(
+        'tagName'     => "JPEGInterchangeFormat",
+        'schema'      => Array("tiff", "IFD1", "MAKERNOTES", "IFD2"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+      ), // < JPEGInterchangeFormat
+
+      // JPEGInterchangeFormatLength, tag 0x0202, see EXIF2.2 documentation to implement
+      0x0202 => Array(
+        'tagName'     => "JPEGInterchangeFormatLength",
+        'schema'      => Array("tiff", "IFD1", "MAKERNOTES", "IFD2"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+      ), // < JPEGInterchangeFormatLength
+
+      // YCbCrCoefficients, tag 0x0211, see EXIF2.2 documentation to implement
+      0x0211 => Array(
+        'tagName'     => "YCbCrCoefficients",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false,
+      ), // < YCbCrCoefficients
+
+      // YCbCrSubSampling, tag 0x0212, see EXIF2.2 documentation to implement
+      0x0212 => Array(
+        'tagName'     => "YCbCrSubSampling",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          1 => Array(
+                1 => "YCbCr4:4:4",
+                2 => "YCbCr4:4:0",
+                4 => "YCbCr4:4:1"
+              ),
+          2 => Array(
+                1 => "YCbCr4:2:2",
+                2 => "YCbCr4:2:0",
+                4 => "YCbCr4:2:1",
+              ),
+          4 => Array(
+                1 => "YCbCr4:1:1",
+                2 => "YCbCr4:1:0"
+              )
+        )
+      ), // < YCbCrSubSampling
+
+      // YCbCrPositioning, tag 0x0213, see EXIF2.2 documentation to implement
+      0x0213 => Array(
+        'tagName'     => "YCbCrPositioning",
+        'schema'      => "tiff",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "centered",
+          0x02 => "co-sited"
+        )
+      ), // < YCbCrPositioning
+
+      // ReferenceBlackWhite, tag 0x0214, see EXIF2.2 documentation to implement
+      0x0214 => Array(
+        'tagName'     => "ReferenceBlackWhite",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false,
+      ), // < ReferenceBlackWhite
+
+      // Rating, tag 0x4746
+      0x4746 => Array(
+        'tagName'     => "Rating",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < Rating
+
+      // RatingPercent, tag 0x4749
+      0x4749 => Array(
+        'tagName'     => "RatingPercent",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < RatingPercent
+
+
+      // Copyright, tag 0x8298
+      0x8298 => Array(
+        'tagName'     => "Copyright",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < Copyright
+
+      // ExposureTime, tag 0x829A, exprimed in seconds
+      0x829A => Array(
+        'tagName'     => "ExposureTime",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ExposureTime
+
+      // FNumber, tag 0x829D, exprimed in seconds
+      0x829D => Array(
+        'tagName'     => "FNumber",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < FNumber
+
+      // IPTC-NAA, tag 0x83BB
+      0x83BB => Array(
+        'tagName'     => "IPTC-NAA",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < IPTC-NAA
+
+      // AFCP_IPTC, tag 0x8568
+      0x8568 => Array(
+        'tagName'     => "AFCP_IPTC",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < AFCP_IPTC
+
+      // Exif IFD Pointer, tag 0x8769
+      0x8769 => Array(
+        'tagName'     => "Exif IFD Pointer",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < Exif IFD Pointer
+
+      // ICC_Profile, tag 0x8773
+      0x8773 => Array(
+        'tagName'     => "ICC_Profile",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < ICC_Profile
+
+
+      // ExposureProgram, tag 0x8822
+      0x8822 => Array(
+        'tagName'     => "ExposureProgram",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "not defined",
+          0x01 => "manual",
+          0x02 => "normal program",
+          0x03 => "aperture priority",
+          0x04 => "shutter priority",
+          0x05 => "creative program",
+          0x06 => "action program",
+          0x07 => "portrait mode",
+          0x08 => "landscape mode"
+        )
+      ), // < ExposureProgram
+
+      // SpectralSensitivity, tag 0x8824
+      0x8824 => Array(
+        'tagName'     => "SpectralSensitivity",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < SpectralSensitivity
+
+      // GPS IFD Pointer, tag 0x8825
+      0x8825 => Array(
+        'tagName'     => "GPS IFD Pointer",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < GPS IFD Pointer
+
+      // ISOSpeedRatings, tag 0x8827
+      0x8827 => Array(
+        'tagName'     => "ISOSpeedRatings",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ISOSpeedRatings
+
+      // OECF, tag 0x8828
+      0x8828 => Array(
+        'tagName'     => "OECF",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < OECF
+
+      // TimeZoneOffset, tag 0x882A
+      0x882A => Array(
+        'tagName'     => "TimeZoneOffset",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < TimeZoneOffset
+
+      // SelfTimerMode, tag 0x882B
+      0x882A => Array(
+        'tagName'     => "SelfTimerMode",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < SelfTimerMode
+
+      // ExifVersion, tag 0x9000
+      0x9000 => Array(
+        'tagName'     => "ExifVersion",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ExifVersion
+
+      // DateTimeOriginal, tag 0x9003, "YYYY:MM:DD HH:MM:SS"
+      0x9003 => Array(
+        'tagName'     => "DateTimeOriginal",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < DateTimeOriginal
+
+      // DateTimeDigitized, tag 0x9004, "YYYY:MM:DD HH:MM:SS"
+      0x9004 => Array(
+        'tagName'     => "DateTimeDigitized",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < DateTimeDigitized
+
+
+      // ComponentsConfiguration, tag 0x9101
+      0x9101 => Array(
+        'tagName'     => "ComponentsConfiguration",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ComponentsConfiguration
+
+      // CompressedBitsPerPixel, tag 0x9102
+      0x9102 => Array(
+        'tagName'     => "CompressedBitsPerPixel",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < CompressedBitsPerPixel
+
+      // ShutterSpeedValue, tag 0x9201
+      0x9201 => Array(
+        'tagName'     => "ShutterSpeedValue",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ShutterSpeedValue
+
+      // ApertureValue, tag 0x9202
+      0x9202 => Array(
+        'tagName'     => "ApertureValue",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ApertureValue
+
+      // BrightnessValue, tag 0x9203
+      0x9203 => Array(
+        'tagName'     => "BrightnessValue",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < BrightnessValue
+
+      // ExposureBiasValue, tag 0x9204
+      0x9204 => Array(
+        'tagName'     => "ExposureBiasValue",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ExposureBiasValue
+
+      // MaxApertureValue, tag 0x9205
+      0x9205 => Array(
+        'tagName'     => "MaxApertureValue",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < MaxApertureValue
+
+      // SubjectDistance, tag 0x9206
+      0x9206 => Array(
+        'tagName'     => "SubjectDistance",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < SubjectDistance
+
+      // MeteringMode, tag 0x9207
+      0x9207 => Array(
+        'tagName'     => "MeteringMode",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0000 => "unknown",
+          0x0001 => "average",
+          0x0002 => "CenterWeightedAverage",
+          0x0003 => "spot",
+          0x0004 => "multispot",
+          0x0005 => "pattern",
+          0x0006 => "partial",
+          0x00ff => "other"
+        )
+      ), // < MeteringMode
+
+      // LightSource, tag 0x9208
+      0x9208 => Array(
+        'tagName'     => "LightSource",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0000 => "unknown",
+          0x0001 => "daylight",
+          0x0002 => "fluorescent",
+          0x0003 => "tungsten (incandescent light)",
+          0x0004 => "flash",
+          0x0009 => "fine weather",
+          0x000a => "cloudy weather",
+          0x000b => "shade",
+          0x000c => "daylight fluorescent (D 5700 - 7100K)",
+          0x000d => "day white fluorescent (N 4600 - 5400K)",
+          0x000e => "cool white fluorescent (W 3900 - 4500K)",
+          0x000f => "white fluorescent (WW 3200 - 3700K)",
+          0x0011 => "standard light A",
+          0x0012 => "standard light B",
+          0x0013 => "standard light C",
+          0x0014 => "D55",
+          0x0015 => "D65",
+          0x0016 => "D75",
+          0x0017 => "D50",
+          0x0018 => "ISO studio tungsten",
+          0x00ff => "other light source"
+        )
+      ), // < LightSource
+
+      // flash, tag 0x9209, see EXIF 2.2 documentation
+      0x9209 => Array(
+        'tagName'     => "flash",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.specialNames'   => Array(
+                  0x00 => "flash fired",
+                  0x06 => "returned light",
+                  0x18 => "flash mode",
+                  0x20 => "flash function",
+                  0x40 => "red-eye mode"
+                ),
+        'tagValues.specialValues' => Array(
+          0x0000 => Array( // b00000001
+                  0x00 => "flash did not fire",
+                  0x01 => "flash fired"
+                ),
+          0x0006 => Array( // b00000110
+                  0x00 => "no strobe",                        // 00
+                  0x01 => "reserved",                         // 01
+                  0x02 => "strobe return light not detected", // 10
+                  0x03 => "strobe return light detected"      // 11
+                ),
+          0x0018 => Array( // b00011000
+                  0x00 => "unknown",
+                  0x01 => "compulsory flash firing",
+                  0x10 => "compulsory flash suppression",
+                  0x11 => "auto mode"
+                ),
+          0x0020 => Array( // b00100000
+                  0x00 => "flash function present",
+                  0x01 => "no flash function"
+                ),
+          0x0040 => Array( // b01000000
+                  0x00 => "no red-eye reduction mode or unknown",
+                  0x01 => "red-eye reduction supported"
+                ),
+        ),
+        'tagValues.computed' => Array(
+          0x0000 => "no flash",
+          0x0001 => "fired",
+          0x0005 => "fired, return not detected",
+          0x0007 => "fired, return detected",
+          0x0008 => "on, did not fire",
+          0x0009 => "on, fired",
+          0x000d => "on, return not detected",
+          0x000f => "on, return detected",
+          0x0010 => "off, did not fire",
+          0x0014 => "off, did not fire, return not detected",
+          0x0018 => "auto, did not fire",
+          0x0019 => "auto, fired",
+          0x001d => "auto, fired, return not detected",
+          0x001f => "auto, fired, return detected",
+          0x0020 => "no flash function",
+          0x0030 => "off, no flash function",
+          0x0041 => "fired, red-eye reduction",
+          0x0045 => "fired, red-eye reduction, return not detected",
+          0x0047 => "fired, red-eye reduction, return detected",
+          0x0049 => "on, red-eye reduction",
+          0x004d => "on, red-eye reduction, return not detected",
+          0x004f => "on, red-eye reduction, return detected",
+          0x0050 => "off, red-eye reduction",
+          0x0058 => "auto, did not fire, red-eye reduction",
+          0x0059 => "auto, fired, red-eye reduction",
+          0x005d => "auto, fired, red-eye reduction, return not detected",
+          0x005f => "auto, fired, red-eye reduction, return detected",
+        ),
+      ), // < flash
+
+      // FocalLength, tag 0x920a
+      0x920a => Array(
+        'tagName'     => "FocalLength",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < FocalLength
+
+      // ImageNumber, tag 0x9211
+      0x9211 => Array(
+        'tagName'     => "ImageNumber",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < ImageNumber
+
+      // SecurityClassification, tag 0x9212
+      0x9212 => Array(
+        'tagName'     => "SecurityClassification",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          "C\x00" => "confidential",
+          "R\x00" => "restricted",
+          "S\x00" => "secret",
+          "T\x00" => "top secret",
+          "U\x00" => "unclassified",
+        )
+      ), // < SecurityClassification
+
+      // ImageHistory, tag 0x9213
+      0x9213 => Array(
+        'tagName'     => "ImageHistory",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < SubjectArea
+
+      // SubjectArea, tag 0x9214
+      0x9214 => Array(
+        'tagName'     => "SubjectArea",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < SubjectArea
+
+      // TIFF-EPStandardID, tag 0x9216
+      0x9216 => Array(
+        'tagName'     => "TIFF-EPStandardID",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < TIFF-EPStandardID
+
+
+      // MakerNote, tag 0x927c
+      0x927c => Array(
+        'tagName'     => "MakerNote",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < MakerNote
+
+      // UserComment, tag 0x9286, see EXIF2.2 for documentation
+      0x9286 => Array(
+        'tagName'     => "UserComment",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < UserComment
+
+      // SubsecTime, tag 0x9290, see EXIF2.2 for documentation
+      0x9290 => Array(
+        'tagName'     => "SubsecTime",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < SubsecTime
+
+      // SubsecTimeOriginal, tag 0x9291, see EXIF2.2 for documentation
+      0x9291 => Array(
+        'tagName'     => "SubsecTimeOriginal",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < SubsecTimeOriginal
+
+      // SubsecTimeDigitized, tag 0x9292, see EXIF2.2 for documentation
+      0x9292 => Array(
+        'tagName'     => "SubsecTimeDigitized",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < SubsecTimeDigitized
+
+
+      // XPTitle, tag 0x9c9b
+      0x9c9b => Array(
+        'tagName'     => "XPTitle",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < XPTitle
+
+      // XPComment, tag 0x9c9c
+      0x9c9c => Array(
+        'tagName'     => "XPComment",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < XPComment
+
+      // XPAuthor, tag 0x9c9d
+      0x9c9d => Array(
+        'tagName'     => "XPAuthor",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < XPAuthor
+
+      // XPKeywords, tag 0x9c9e
+      0x9c9e => Array(
+        'tagName'     => "XPKeywords",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < XPKeywords
+
+      // XPSubject, tag 0x9c9
+      0x9c9f => Array(
+        'tagName'     => "XPSubject",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < XPSubject
+
+      // FlashpixVersion, tag 0xA000
+      0xA000 => Array(
+        'tagName'     => "FlashpixVersion",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < FlashpixVersion
+
+      // ColorSpace, tag 0xA001
+      0xA001 => Array(
+        'tagName'     => "ColorSpace",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0001 => "sRGB",
+          0x0002 => "Adobe RGB",
+          0xFFFF => "Uncalibrated"
+        )
+      ), // < ColorSpace
+
+      // PixelXDimension, tag 0xA002
+      0xA002 => Array(
+        'tagName'     => "PixelXDimension",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < PixelXDimension
+
+      // PixelYDimension, tag 0xA003
+      0xA003 => Array(
+        'tagName'     => "PixelYDimension",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < PixelYDimension
+
+      // RelatedSoundFile, tag 0xA004
+      0xA004 => Array(
+        'tagName'     => "RelatedSoundFile",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < RelatedSoundFile
+
+      // Interoperability IFD Pointer, tag 0xA005
+      0xA005 => Array(
+        'tagName'     => "Interoperability IFD Pointer",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < Interoperability IFD Pointer
+
+      // FlashEnergy, tag 0xA20B
+      0xA20B => Array(
+        'tagName'     => "exif",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < FlashEnergy
+
+      // SpatialFrequencyResponse, tag 0xA20C
+      0xA20C => Array(
+        'tagName'     => "SpatialFrequencyResponse",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < SpatialFrequencyResponse
+
+
+      // Noise, tag 0xA20D
+      0xA20D => Array(
+        'tagName'     => "Noise",
+        'schema'      => "",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < Noise
+
+      // FocalPlaneXResolution, tag 0xA20E
+      0xA20E => Array(
+        'tagName'     => "FocalPlaneXResolution",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < FocalPlaneXResolution
+
+      // FocalPlaneYResolution, tag 0xA20F
+      0xA20F => Array(
+        'tagName'     => "FocalPlaneYResolution",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < FocalPlaneXResolution
+
+      // FocalPlaneResolutionUnit, tag 0xA210
+      0xA210 => Array(
+        'tagName'     => "FocalPlaneResolutionUnit",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0001 => "none",
+          0x0002 => "inches",
+          0x0003 => "centimeters",
+          0x0004 => "millimeters",
+          0x0005 => "micrometers",
+        )
+      ), // < FocalPlaneResolutionUnit
+
+      // SubjectLocation, tag 0xA214
+      0xA214 => Array(
+        'tagName'     => "SubjectLocation",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < SubjectLocation
+
+      // ExposureIndex, tag 0xA215
+      0xA215 => Array(
+        'tagName'     => "ExposureIndex",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < ExposureIndex
+
+      // SensingMethod, tag 0xA217
+      0xA217 => Array(
+        'tagName'     => "SensingMethod",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "not defined",
+          0x02 => "one-chip color area sensor",
+          0x03 => "two-chip color area sensor",
+          0x04 => "three-chip color area sensor",
+          0x05 => "color sequential area sensor",
+          0x07 => "trilinear sensor",
+          0x08 => "color sequential linear sensor",
+        )
+      ), // < SensingMethod
+
+      // FileSource, tag 0xA300
+      0xA300 => Array(
+        'tagName'     => "FileSource",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "film scanner",
+          0x02 => "reflection print scanner",
+          0x03 => "DSC"
+        )
+      ), // < FileSource
+
+      // SceneType, tag 0xA301
+      0xA301 => Array(
+        'tagName'     => "SceneType",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x01 => "a directly photographed image"
+        )
+      ), // < SceneType
+
+      // CFAPattern, tag 0xA302
+      0xA302 => Array(
+        'tagName'     => "CFAPattern",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < CFAPattern
+
+      // CustomRendered, tag 0xA401
+      0xA401 => Array(
+        'tagName'     => "CustomRendered",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "normal process",
+          0x01 => "custom process"
+        )
+      ), // < CustomRendered
+
+      // ExposureMode, tag 0xA402
+      0xA402 => Array(
+        'tagName'     => "ExposureMode",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "auto exposure",
+          0x01 => "manual exposure",
+          0x03 => "auto bracket"
+        )
+      ), // < ExposureMode
+
+      // Balance, tag 0xA403
+      0xA403 => Array(
+        'tagName'     => "Balance",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "auto white balance",
+          0x01 => "manual white balance"
+        )
+      ), // < Balance
+
+      // DigitalZoomRatio, tag 0xA404
+      0xA404 => Array(
+        'tagName'     => "DigitalZoomRatio",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < DigitalZoomRatio
+
+
+      // FocalLengthIn35mmFilm, tag 0xA405
+      0xA405 => Array(
+        'tagName'     => "FocalLengthIn35mmFilm",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ), // < FocalLengthIn35mmFilm
+
+      // SceneCaptureType, tag 0xA406
+      0xA406 => Array(
+        'tagName'     => "SceneCaptureType",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "standard",
+          0x01 => "landscape",
+          0x02 => "portrait",
+          0x03 => "night scene"
+        )
+      ), // < SceneCaptureType
+
+      // GainControl, tag 0xA407
+      0xA407 => Array(
+        'tagName'     => "GainControl",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "none",
+          0x01 => "low gain up",
+          0x02 => "high gain up",
+          0x03 => "low gain down",
+          0x04 => "high gain down"
+        )
+      ), // < GainControl
+
+      // Contrast, tag 0xA408
+      0xA408 => Array(
+        'tagName'     => "Contrast",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "normal",
+          0x01 => "low",
+          0x02 => "high"
+        )
+      ), // < Contrast
+
+      // Saturation, tag 0xA409
+      0xA409 => Array(
+        'tagName'     => "Saturation",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "normal",
+          0x01 => "low",
+          0x02 => "high"
+        )
+      ), // < Saturation
+
+      // Sharpness, tag 0xA40A
+      0xA40A => Array(
+        'tagName'     => "Sharpness",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "normal",
+          0x01 => "low",
+          0x02 => "high"
+        )
+      ), // < Sharpness
+
+      // DeviceSettingDescription, tag 0xA40B
+      0xA40B => Array(
+        'tagName'     => "DeviceSettingDescription",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < DeviceSettingDescription
+
+      // SubjectDistanceRange, tag 0xA40C
+      0xA40C => Array(
+        'tagName'     => "SubjectDistanceRange",
+        'schema'      => "exif",
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00 => "unknown",
+          0x01 => "macro",
+          0x02 => "close",
+          0x03 => "distant"
+        )
+      ), // < SubjectDistanceRange
+
+      // ImageUniqueID, tag 0xA420
+      0xA420 => Array(
+        'tagName'     => "ImageUniqueID",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < ImageUniqueID
+
+
+      // Gamma, tag 0xA500
+      0xA500 => Array(
+        'tagName'     => "Gamma",
+        'schema'      => "exif",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < Gamma
+
+      // PrintIM, tag 0xC4A5
+      0xC4A5 => Array(
+        'tagName'     => "PrintIM",
+        'schema'      => "tiff",
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ), // < ImageUniqueID
+
+    );
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/IptcTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/IptcTags.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/IptcTags.class.php	(revision 4686)
@@ -0,0 +1,2069 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * -----------------------------------------------------------------------------
+ * Known IPTC tags properties class
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/KnownTags.class.php");
+
+  /**
+   * Define the tags for IPTC metadata
+   */
+  class IptcTags extends KnownTags
+  {
+    protected $label = "IPTC tags";
+    protected $tags = Array(
+      0x0100 => Array( //1:00
+        'tagName'      => "Model Version",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0105 => Array( // 1:05
+        'tagName'      => "Destination",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0114 => Array( //1:20
+        'tagName'      => "File Format",
+        'implemented'  => true,
+        'translatable' => true,
+        'tagValues.special'    => Array(
+          0x0000 => "No ObjectData",
+          0x0001 => "IPTC-NAA Digital Newsphoto Parameter Record",
+          0x0002 => "IPTC7901 Recommended Message Format",
+          0x0003 => "Tagged Image File Format (Adobe/Aldus Image data)",
+          0x0004 => "Illustrator (Adobe Graphics data)",
+          0x0005 => "AppleSingle (Apple Computer Inc)",
+          0x0006 => "NAA 89-3 (ANPA 1312)",
+          0x0007 => "MacBinary II",
+          0x0008 => "IPTC Unstructured Character Oriented File Format (UCOFF)",
+          0x0009 => "United Press International ANPA 1312 variant",
+          0x0010 => "United Press International Down-Load Message",
+          0x0011 => "JPEG File Interchange (JFIF)",
+          0x0012 => "Photo-CD Image-Pac (Eastman Kodak)",
+          0x0013 => "Microsoft Bit Mapped Graphics File [*.BMP]",
+          0x0014 => "Digital Audio File [*.WAV] (Microsoft & Creative Labs)",
+          0x0015 => "Audio plus Moving Video [*.AVI] (Microsoft)",
+          0x0016 => "PC DOS/Windows Executable Files [*.COM][*.EXE]",
+          0x0017 => "Compressed Binary File [*.ZIP] (PKWare Inc)",
+          0x0018 => "Audio Interchange File Format AIFF (Apple Computer Inc)",
+          0x0019 => "RIFF Wave (Microsoft Corporation)",
+          0x0020 => "Freehand (Macromedia/Aldus)",
+          0x0021 => "Hypertext Markup Language \"HTML\" (The Internet Society)",
+          0x0022 => "MPEG 2 Audio Layer 2 (Musicom), ISO/IEC",
+          0x0023 => "MPEG 2 Audio Layer 3, ISO/IEC",
+          0x0024 => "Portable Document File (*.PDF) Adobe",
+          0x0025 => "News Industry Text Format (NITF)",
+          0x0026 => "Tape Archive (*.TAR)",
+          0x0027 => "Tidningarnas Telegrambyrå NITF version (TTNITF DTD)",
+          0x0028 => "Ritzaus Bureau NITF version (RBNITF DTD)",
+          0x0029 => "Corel Draw [*.CDR]",
+        ),
+      ),
+
+      0x0116 => Array(
+        'tagName'      => "File Format Version",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x011E => Array( //1:30
+        'tagName'      => "Service Identifier",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+
+      0x0128 => Array( // 1:40
+        'tagName'      => "Envelope Number",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0132 => Array( // 1:50
+        'tagName'      => "Product I.D.",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x013C => Array(
+        'tagName'      => "Envelope Priority",
+        'implemented'  => true,
+        'translatable' => true,
+        'tagValues'    => Array(
+           '0' => 'none',
+           '1' => 'high+++',
+           '2' => 'high++',
+           '3' => 'high+',
+           '4' => 'high',
+           '5' => 'normal',
+           '6' => 'low',
+           '7' => 'low+',
+           '8' => 'low++',
+           '9' => 'none',
+        ),      ),
+
+      0x0146 => Array( // 1:70
+        'tagName'      => "Date Sent",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0150 => Array( // 1:80
+        'tagName'      => "Time Sent",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x015A => Array(
+        'tagName'      => "Coded Character Set",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0164 => Array(
+        'tagName'      => "UNO",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0178 => Array(
+        'tagName'      => "ARM Identifier",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x017A => Array(
+        'tagName'      => "ARM Version",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0200 => Array( //2:00
+        'tagName'      => "Record Version",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0203 => Array( // 2:03
+        'tagName'      => "Object Type Reference",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0204 => Array( //2:04
+        'tagName'      => "Object Attribute Reference",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0205 => Array( // 2:05
+        'tagName'      => "Object Name",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0207 => Array( // 2:07
+        'tagName'      => "Edit Status",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0208 => Array(
+        'tagName'      => "Editorial Update",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x020A => Array(
+        'tagName'      => "Urgency",
+        'implemented'  => true,
+        'translatable' => true,
+        'tagValues'    => Array(
+           '0' => 'none',
+           '1' => 'high+++',
+           '2' => 'high++',
+           '3' => 'high+',
+           '4' => 'high',
+           '5' => 'normal',
+           '6' => 'low',
+           '7' => 'low+',
+           '8' => 'low++',
+           '9' => 'none',
+        ),
+      ),
+
+      0x020C => Array( //2:12
+        'tagName'      => "Subject Reference",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x020F => Array( //2:15
+        'tagName'      => "Category",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0214 => Array( // 2:20
+        'tagName'      => "Supplemental Category",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0216 => Array( //2:22
+        'tagName'      => "Fixture Identifier",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0219 => Array( //2:25
+        'tagName'      => "Keywords",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x021A => Array( //2:26
+        'tagName'      => "Content Location Code",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x021B => Array( //2:27
+        'tagName'      => "Content Location Name",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x021E => Array( //2:30
+        'tagName'      => "Release Date",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0223 => Array( // 2:35
+        'tagName'      => "Release Time",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0225 => Array( // 2:37
+        'tagName'      => "Expiration Date",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0226 => Array( // 2:38
+        'tagName'      => "Expiration Time",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0228 => Array(  //2:40
+        'tagName'      => "Special Instructions",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x022A => Array(
+        'tagName'      => "Action Advised",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x022D => Array(
+        'tagName'      => "Reference Service",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x022F => Array(
+        'tagName'      => "Reference Date",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0232 => Array(
+        'tagName'      => "Reference number",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0237 => Array( //2:55
+        'tagName'      => "Date Created",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x023C => Array( //2:60
+        'tagName'      => "Time Created",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x023E => Array( //2:62
+        'tagName'      => "Digital Creation Date",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x023F => Array( //2:63
+        'tagName'      => "Digital Creation Time",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0241 => Array( //2:65
+        'tagName'      => "Originating Program",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0246 => Array( //2:70
+        'tagName'      => "Program Version",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x024B => Array(
+        'tagName'      => "Object Cycle",
+        'implemented'  => true,
+        'translatable' => true,
+        'tagValues'    => Array(
+          'a' => "morning",
+          'p' => "evening",
+          'b' => "both"
+        )
+      ),
+
+      0x0250 => Array( //2:80
+        'tagName'      => "By-line",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0255 => Array( //2:85
+        'tagName'      => "By-line Title",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x025A => Array( //2:90
+        'tagName'      => "City",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x025C => Array( //2:92
+        'tagName'      => "Sublocation",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x025F => Array( //2:95
+        'tagName'      => "Province/State",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0264 => Array( // 2:100
+        'tagName'      => "Country/Primary Location Code",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0265 => Array( // 2:101
+        'tagName'      => "Country/Primary Location Name",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0267 => Array( // 2:103
+        'tagName'      => "Original Transmission Reference",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0269 => Array( // 2:105
+        'tagName'      => "Headline",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x026E => Array( //2:110
+        'tagName'      => "Credit",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0273 => Array( //2:115
+        'tagName'      => "Source",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0274 => Array( //2:116
+        'tagName'      => "Copyright Notice",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0276 => Array( //2:118
+        'tagName'      => "Contact",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0278 => Array( // 2:120
+        'tagName'      => "Caption/Abstract",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x027A => Array( // 2:122
+        'tagName'      => "Writer/Editor",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x027D => Array(
+        'tagName'      => "Rasterized Caption",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0282 => Array(
+        'tagName'      => "Image Type",
+        'implemented'  => false,
+        'translatable' => false,
+        'tagValues.special' => Array(
+         0 => Array(
+          '0' => "no object data",
+          '1' => "single component",
+          '2' => "multiple component",
+          '3' => "multiple component",
+          '4' => "multiple component",
+          '9' => "supplemental objects",
+         ),
+         1 => Array(
+          'W' => "Monochrome",
+          'Y' => "Yellow component",
+          'M' => "Magenta component",
+          'C' => "Cyan component",
+          'K' => "Black component",
+          'R' => "Red component",
+          'G' => "Green component",
+          'B' => "Blue component",
+          'T' => "Text only",
+          'F' => "Full colour composite, frame sequential",
+          'L' => "Full colour composite, line sequential",
+          'P' => "Full colour composite, pixel sequential",
+          'S' => "Full colour composite, special interleaving",
+         )
+        )
+      ),
+
+      0x0283 => Array(
+        'tagName'      => "Image Orientation",
+        'implemented'  => true,
+        'translatable' => true,
+        'tagValues'    => Array(
+          'P' => "portrait",
+          'L' => "landscape",
+          'S' => "square",
+        )
+      ),
+
+      0x0287 => Array( // 2:150
+        'tagName'      => "Language Identifier",
+        'implemented'  => true,
+        'translatable' => false,
+      ),
+
+      0x0296 => Array(
+        'tagName'      => "Audio Type",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0297 => Array(
+        'tagName'      => "Audion Sampling Rate",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0298 => Array(
+        'tagName'      => "Audio Sampling Resolution",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0299 => Array(
+        'tagName'      => "Audio Duration",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+
+      0x029A => Array(
+        'tagName'      => "Audion Outcue",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x02C8 => Array(
+        'tagName'      => "ObjectData Preview File Format",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x02C9 => Array(
+        'tagName'      => "ObjectData Preview File Format Version",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x02CA => Array(
+        'tagName'      => "ObjectData Preview Data",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x070A => Array(
+        'tagName'      => "Size Mode",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x0714 => Array(
+        'tagName'      => "Max Subfile Size",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x075A => Array(
+        'tagName'      => "ObjectData Size Announced",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x075F => Array(
+        'tagName'      => "Maximum ObjectData Size",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x080A => Array(
+        'tagName'      => "Subfile",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+
+      0x090A => Array(
+        'tagName'      => "Confirmed ObjectData Size",
+        'implemented'  => false,
+        'translatable' => false,
+      ),
+    );
+
+
+    static function iprLabel($IprCode)
+    {
+      switch($IprCode)
+      {
+        case 'AFP':  $returned="Agence France Presse"; break;
+        case 'AP':   $returned=" Associated Press"; break;
+        case 'APD':  $returned="Associated Press"; break;
+        case 'APE':  $returned="Associated Press"; break;
+        case 'APF':  $returned="Associated Press"; break;
+        case 'APS':  $returned="Associated Press"; break;
+        case 'BN':   $returned=" Canadian Press"; break;
+        case 'CP':   $returned=" Canadian Press"; break;
+        case 'CTK':  $returned="Czech News Agency"; break;
+        case 'dpa':  $returned="Deutsche Presse-Agentur GmbH"; break;
+        case 'HNA':  $returned="Croatian News Agency"; break;
+        case 'IPTC': $returned="International Press Telecommunications Council"; break;
+        case 'MTI':  $returned="Magyar Távirati Iroda / Hungarian News Agency"; break;
+        case 'PC':   $returned=" Canadian Press"; break;
+        case 'PN':   $returned=" Canadian Press"; break;
+        case 'REUTERS': $returned="Reuters"; break;
+        case 'STA':  $returned="Slovenska Tiskovna Agencija"; break;
+        case 'TT':   $returned=" Tidningarnas Telegrambyrå"; break;
+        case 'UP':   $returned=" United Press International"; break;
+        case 'UPI':  $returned="United Press International"; break;
+        default:
+          $returned=$IprCode;
+          break;
+      }
+      return($returned);
+    }
+
+
+    static function subjectCodeLabel($subjectCode)
+    {
+      switch($subjectCode)
+      {
+        case '01000000': $returned="arts, culture and entertainment"; break;
+        case '01001000': $returned="archaeology"; break;
+        case '01002000': $returned="architecture"; break;
+        case '01003000': $returned="bullfighting"; break;
+        case '01004000': $returned="festive event (including carnival)"; break;
+        case '01005000': $returned="cinema"; break;
+        case '01005001': $returned="film festival"; break;
+        case '01006000': $returned="dance"; break;
+        case '01007000': $returned="fashion"; break;
+        case '01007001': $returned="jewelry"; break;
+        case '01008000': $returned="language"; break;
+        case '01009000': $returned="library and museum"; break;
+        case '01010000': $returned="literature"; break;
+        case '01010001': $returned="fiction"; break;
+        case '01010002': $returned="poetry"; break;
+        case '01011000': $returned="music"; break;
+        case '01011001': $returned="classical music"; break;
+        case '01011002': $returned="folk music"; break;
+        case '01011003': $returned="jazz music"; break;
+        case '01011004': $returned="popular music"; break;
+        case '01011005': $returned="country music"; break;
+        case '01011006': $returned="rock and roll music"; break;
+        case '01011007': $returned="hip-hop"; break;
+        case '01012000': $returned="painting"; break;
+        case '01013000': $returned="photography"; break;
+        case '01014000': $returned="radio"; break;
+        case '01015000': $returned="sculpture"; break;
+        case '01015001': $returned="plastic art"; break;
+        case '01016000': $returned="television"; break;
+        case '01016001': $returned="soap opera"; break;
+        case '01017000': $returned="theatre"; break;
+        case '01017001': $returned="music theatre"; break;
+        case '01018000': $returned="monument and heritage site"; break;
+        case '01018001': $returned="institution-DEPRECATED"; break;
+        case '01019000': $returned="customs and tradition"; break;
+        case '01020000': $returned="arts (general)"; break;
+        case '01021000': $returned="entertainment (general)"; break;
+        case '01021001': $returned="entertainment award"; break;
+        case '01022000': $returned="culture (general)"; break;
+        case '01022001': $returned="cultural development"; break;
+        case '01023000': $returned="nightclub"; break;
+        case '01024000': $returned="cartoon"; break;
+        case '01025000': $returned="animation"; break;
+        case '01026000': $returned="mass media"; break;
+        case '01026001': $returned="periodicals"; break;
+        case '01026002': $returned="news media"; break;
+        case '01026003': $returned="newspapers"; break;
+        case '01026004': $returned="reviews"; break;
+        case '01027000': $returned="internet"; break;
+        case '01028000': $returned="history"; break;
+        case '02000000': $returned="crime, law and justice"; break;
+        case '02001000': $returned="crime"; break;
+        case '02001001': $returned="homicide"; break;
+        case '02001002': $returned="computer crime"; break;
+        case '02001003': $returned="theft"; break;
+        case '02001004': $returned="drug trafficking"; break;
+        case '02001005': $returned="sexual assault"; break;
+        case '02001006': $returned="assault (general)"; break;
+        case '02001007': $returned="kidnapping"; break;
+        case '02001008': $returned="arson"; break;
+        case '02001009': $returned="gang activity"; break;
+        case '02001010': $returned="terrorism"; break;
+        case '02002000': $returned="judiciary (system of justice)"; break;
+        case '02002001': $returned="lawyer"; break;
+        case '02002002': $returned="judge"; break;
+        case '02002003': $returned="court administration"; break;
+        case '02003000': $returned="police"; break;
+        case '02003001': $returned="law enforcement"; break;
+        case '02003002': $returned="investigation"; break;
+        case '02003003': $returned="arrest"; break;
+        case '02004000': $returned="punishment"; break;
+        case '02004001': $returned="fine"; break;
+        case '02004002': $returned="execution"; break;
+        case '02005000': $returned="prison"; break;
+        case '02006000': $returned="laws"; break;
+        case '02006001': $returned="criminal"; break;
+        case '02006002': $returned="civil"; break;
+        case '02007000': $returned="justice and rights"; break;
+        case '02007001': $returned="civil rights"; break;
+        case '02008000': $returned="trials"; break;
+        case '02008001': $returned="litigation"; break;
+        case '02008002': $returned="arbitration"; break;
+        case '02008003': $returned="court preliminary"; break;
+        case '02009000': $returned="prosecution"; break;
+        case '02009001': $returned="defendant"; break;
+        case '02009002': $returned="witness"; break;
+        case '02010000': $returned="organized crime"; break;
+        case '02011000': $returned="international law"; break;
+        case '02011001': $returned="international court or tribunal"; break;
+        case '02011002': $returned="extradition"; break;
+        case '02012000': $returned="corporate crime"; break;
+        case '02012001': $returned="fraud"; break;
+        case '02012002': $returned="embezzlement"; break;
+        case '02012003': $returned="restraint of trade"; break;
+        case '02012004': $returned="breach of contract"; break;
+        case '02012005': $returned="anti-trust crime"; break;
+        case '02012006': $returned="corruption"; break;
+        case '02012007': $returned="bribery"; break;
+        case '02013000': $returned="war crime"; break;
+        case '02014000': $returned="inquest"; break;
+        case '02015000': $returned="inquiry"; break;
+        case '02016000': $returned="tribunal"; break;
+        case '03000000': $returned="disaster and accident"; break;
+        case '03001000': $returned="drought"; break;
+        case '03002000': $returned="earthquake"; break;
+        case '03003000': $returned="famine"; break;
+        case '03004000': $returned="fire"; break;
+        case '03005000': $returned="flood"; break;
+        case '03006000': $returned="industrial accident"; break;
+        case '03006001': $returned="structural failures"; break;
+        case '03007000': $returned="meteorological disaster"; break;
+        case '03007001': $returned="windstorms"; break;
+        case '03008000': $returned="nuclear accident"; break;
+        case '03009000': $returned="pollution"; break;
+        case '03010000': $returned="transport accident"; break;
+        case '03010001': $returned="road accident"; break;
+        case '03010002': $returned="railway accident"; break;
+        case '03010003': $returned="air and space accident"; break;
+        case '03010004': $returned="maritime accident"; break;
+        case '03011000': $returned="volcanic eruption"; break;
+        case '03012000': $returned="relief and aid organisation"; break;
+        case '03013000': $returned="accident (general)"; break;
+        case '03014000': $returned="emergency incident"; break;
+        case '03014001': $returned="explosion"; break;
+        case '03015000': $returned="disaster (general)"; break;
+        case '03015001': $returned="natural disasters"; break;
+        case '03015002': $returned="avalanche/landslide"; break;
+        case '03016000': $returned="emergency planning"; break;
+        case '03017000': $returned="rescue"; break;
+        case '04000000': $returned="economy, business and finance"; break;
+        case '04001000': $returned="agriculture"; break;
+        case '04001001': $returned="arable farming"; break;
+        case '04001002': $returned="fishing industry"; break;
+        case '04001003': $returned="forestry and timber"; break;
+        case '04001004': $returned="livestock farming"; break;
+        case '04001005': $returned="viniculture"; break;
+        case '04001006': $returned="aquaculture"; break;
+        case '04002000': $returned="chemicals"; break;
+        case '04002001': $returned="biotechnology"; break;
+        case '04002002': $returned="fertiliser"; break;
+        case '04002003': $returned="health and beauty product"; break;
+        case '04002004': $returned="inorganic chemical"; break;
+        case '04002005': $returned="organic chemical"; break;
+        case '04002006': $returned="pharmaceutical"; break;
+        case '04002007': $returned="synthetic and plastic"; break;
+        case '04003000': $returned="computing and information technology"; break;
+        case '04003001': $returned="hardware"; break;
+        case '04003002': $returned="networking"; break;
+        case '04003003': $returned="satellite technology"; break;
+        case '04003004': $returned="semiconductors and active components"; break;
+        case '04003005': $returned="software"; break;
+        case '04003006': $returned="telecommunication equipment"; break;
+        case '04003007': $returned="telecommunication service"; break;
+        case '04003008': $returned="security"; break;
+        case '04003009': $returned="wireless technology"; break;
+        case '04004000': $returned="construction and property"; break;
+        case '04004001': $returned="heavy construction"; break;
+        case '04004002': $returned="house building"; break;
+        case '04004003': $returned="real estate"; break;
+        case '04004004': $returned="farms"; break;
+        case '04004005': $returned="land price"; break;
+        case '04004006': $returned="renovation"; break;
+        case '04004007': $returned="design and engineering"; break;
+        case '04005000': $returned="energy and resource"; break;
+        case '04005001': $returned="alternative energy"; break;
+        case '04005002': $returned="coal"; break;
+        case '04005003': $returned="oil and gas - downstream activities"; break;
+        case '04005004': $returned="oil and gas - upstream activities"; break;
+        case '04005005': $returned="nuclear power"; break;
+        case '04005006': $returned="electricity production and distribution"; break;
+        case '04005007': $returned="waste management and pollution control"; break;
+        case '04005008': $returned="water supply"; break;
+        case '04005009': $returned="natural resources (general)"; break;
+        case '04005010': $returned="energy (general)"; break;
+        case '04005011': $returned="natural gas"; break;
+        case '04005012': $returned="petrol"; break;
+        case '04005013': $returned="diesel fuel"; break;
+        case '04005014': $returned="kerosene/paraffin"; break;
+        case '04006000': $returned="financial and business service"; break;
+        case '04006001': $returned="accountancy and auditing"; break;
+        case '04006002': $returned="banking"; break;
+        case '04006003': $returned="consultancy service"; break;
+        case '04006004': $returned="employment agency"; break;
+        case '04006005': $returned="healthcare provider"; break;
+        case '04006006': $returned="insurance"; break;
+        case '04006007': $returned="legal service"; break;
+        case '04006008': $returned="market research"; break;
+        case '04006009': $returned="stock broking"; break;
+        case '04006010': $returned="personal investing"; break;
+        case '04006011': $returned="market trend"; break;
+        case '04006012': $returned="shipping service"; break;
+        case '04006013': $returned="personal service"; break;
+        case '04006014': $returned="janitorial service"; break;
+        case '04006015': $returned="funeral parlour and crematorium"; break;
+        case '04006016': $returned="rental service"; break;
+        case '04006017': $returned="wedding service"; break;
+        case '04006018': $returned="personal finance"; break;
+        case '04006019': $returned="personal income"; break;
+        case '04006020': $returned="auction service"; break;
+        case '04006021': $returned="printing/promotional service"; break;
+        case '04006022': $returned="investment service"; break;
+        case '04007000': $returned="consumer goods"; break;
+        case '04007001': $returned="clothing"; break;
+        case '04007002': $returned="department store"; break;
+        case '04007003': $returned="food"; break;
+        case '04007004': $returned="mail order"; break;
+        case '04007005': $returned="retail"; break;
+        case '04007006': $returned="speciality store"; break;
+        case '04007007': $returned="wholesale"; break;
+        case '04007008': $returned="beverage"; break;
+        case '04007009': $returned="electronic commerce"; break;
+        case '04007010': $returned="luxury good"; break;
+        case '04007011': $returned="non-durable good"; break;
+        case '04007012': $returned="toy"; break;
+        case '04008000': $returned="macro economics"; break;
+        case '04008001': $returned="central bank"; break;
+        case '04008002': $returned="consumer issue"; break;
+        case '04008003': $returned="debt market"; break;
+        case '04008004': $returned="economic indicator"; break;
+        case '04008005': $returned="emerging market"; break;
+        case '04008006': $returned="foreign exchange market"; break;
+        case '04008007': $returned="government aid"; break;
+        case '04008008': $returned="government debt"; break;
+        case '04008009': $returned="interest rate"; break;
+        case '04008010': $returned="international economic institution"; break;
+        case '04008011': $returned="international (foreign) trade"; break;
+        case '04008012': $returned="loan market"; break;
+        case '04008013': $returned="economic organization"; break;
+        case '04008014': $returned="consumer confidence"; break;
+        case '04008015': $returned="trade dispute"; break;
+        case '04008016': $returned="inflation and deflation"; break;
+        case '04008017': $returned="prices"; break;
+        case '04008018': $returned="currency values"; break;
+        case '04008019': $returned="budgets and budgeting"; break;
+        case '04008020': $returned="credit and debt"; break;
+        case '04008021': $returned="loans"; break;
+        case '04008022': $returned="mortgages"; break;
+        case '04008023': $returned="financial markets"; break;
+        case '04008024': $returned="commodity markets"; break;
+        case '04008025': $returned="investments"; break;
+        case '04008026': $returned="stocks"; break;
+        case '04008027': $returned="bonds"; break;
+        case '04008028': $returned="mutual funds"; break;
+        case '04008029': $returned="derivative securities"; break;
+        case '04008030': $returned="imports"; break;
+        case '04008031': $returned="exports"; break;
+        case '04008032': $returned="trade agreements"; break;
+        case '04008033': $returned="trade policy"; break;
+        case '04008034': $returned="business enterprises"; break;
+        case '04008035': $returned="tariff"; break;
+        case '04008036': $returned="trade balance"; break;
+        case '04009000': $returned="market and exchange"; break;
+        case '04009001': $returned="energy"; break;
+        case '04009002': $returned="metal"; break;
+        case '04009003': $returned="securities"; break;
+        case '04009004': $returned="soft commodity"; break;
+        case '04010000': $returned="media"; break;
+        case '04010001': $returned="advertising"; break;
+        case '04010002': $returned="book"; break;
+        case '04010003': $returned="cinema industry"; break;
+        case '04010004': $returned="news agency"; break;
+        case '04010005': $returned="newspaper and magazine"; break;
+        case '04010006': $returned="online"; break;
+        case '04010007': $returned="public relation"; break;
+        case '04010008': $returned="radio industry"; break;
+        case '04010009': $returned="satellite and cable service"; break;
+        case '04010010': $returned="television industry"; break;
+        case '04010011': $returned="music industry"; break;
+        case '04011000': $returned="manufacturing and engineering"; break;
+        case '04011001': $returned="aerospace"; break;
+        case '04011002': $returned="automotive equipment"; break;
+        case '04011003': $returned="defence equipment"; break;
+        case '04011004': $returned="electrical appliance"; break;
+        case '04011005': $returned="heavy engineering"; break;
+        case '04011006': $returned="industrial component"; break;
+        case '04011007': $returned="instrument engineering"; break;
+        case '04011008': $returned="shipbuilding"; break;
+        case '04011009': $returned="machine manufacturing"; break;
+        case '04012000': $returned="metal and mineral"; break;
+        case '04012001': $returned="building material"; break;
+        case '04012002': $returned="gold and precious material"; break;
+        case '04012003': $returned="iron and steel"; break;
+        case '04012004': $returned="non ferrous metal"; break;
+        case '04012005': $returned="mining"; break;
+        case '04013000': $returned="process industry"; break;
+        case '04013001': $returned="distiller and brewer"; break;
+        case '04013002': $returned="food"; break;
+        case '04013003': $returned="furnishings and furniture"; break;
+        case '04013004': $returned="paper and packaging product"; break;
+        case '04013005': $returned="rubber product"; break;
+        case '04013006': $returned="soft drinks"; break;
+        case '04013007': $returned="textile and clothing"; break;
+        case '04013008': $returned="tobacco"; break;
+        case '04014000': $returned="tourism and leisure"; break;
+        case '04014001': $returned="casino and gambling"; break;
+        case '04014002': $returned="hotel and accommodation"; break;
+        case '04014003': $returned="recreational and sporting goods"; break;
+        case '04014004': $returned="restaurant and catering"; break;
+        case '04014005': $returned="tour operator"; break;
+        case '04015000': $returned="transport"; break;
+        case '04015001': $returned="air transport"; break;
+        case '04015002': $returned="railway"; break;
+        case '04015003': $returned="road transport"; break;
+        case '04015004': $returned="waterway and maritime transport"; break;
+        case '04016000': $returned="company information"; break;
+        case '04016001': $returned="accounting and audit"; break;
+        case '04016002': $returned="annual and special corporate meeting"; break;
+        case '04016003': $returned="annual report"; break;
+        case '04016004': $returned="antitrust issue"; break;
+        case '04016005': $returned="merger, acquisition and takeover"; break;
+        case '04016006': $returned="analysts' comment"; break;
+        case '04016007': $returned="bankruptcy"; break;
+        case '04016008': $returned="board of directors (appointment and change)"; break;
+        case '04016009': $returned="buyback"; break;
+        case '04016010': $returned="C.E.O. interview"; break;
+        case '04016011': $returned="corporate officer"; break;
+        case '04016012': $returned="corporate profile"; break;
+        case '04016013': $returned="contract"; break;
+        case '04016014': $returned="defence contract"; break;
+        case '04016015': $returned="dividend announcement"; break;
+        case '04016016': $returned="earnings forecast"; break;
+        case '04016017': $returned="financially distressed company"; break;
+        case '04016018': $returned="earnings"; break;
+        case '04016019': $returned="financing and stock offering"; break;
+        case '04016020': $returned="government contract"; break;
+        case '04016021': $returned="global expansion"; break;
+        case '04016022': $returned="insider trading"; break;
+        case '04016023': $returned="joint venture"; break;
+        case '04016024': $returned="leveraged buyout"; break;
+        case '04016025': $returned="layoffs and downsizing"; break;
+        case '04016026': $returned="licensing agreement"; break;
+        case '04016027': $returned="litigation and regulation"; break;
+        case '04016028': $returned="management change"; break;
+        case '04016029': $returned="marketing"; break;
+        case '04016030': $returned="new product"; break;
+        case '04016031': $returned="patent, copyright and trademark"; break;
+        case '04016032': $returned="plant closing"; break;
+        case '04016033': $returned="plant opening"; break;
+        case '04016034': $returned="privatisation"; break;
+        case '04016035': $returned="proxy filing"; break;
+        case '04016036': $returned="rating"; break;
+        case '04016037': $returned="research and development"; break;
+        case '04016038': $returned="quarterly or semiannual financial statement"; break;
+        case '04016039': $returned="restructuring and recapitalisation"; break;
+        case '04016040': $returned="spin-off"; break;
+        case '04016041': $returned="stock activity"; break;
+        case '04016042': $returned="industrial production"; break;
+        case '04016043': $returned="productivity"; break;
+        case '04016044': $returned="inventories"; break;
+        case '04016045': $returned="sales"; break;
+        case '04016046': $returned="corporations"; break;
+        case '04016047': $returned="shareholders"; break;
+        case '04016048': $returned="corporate performance"; break;
+        case '04016049': $returned="losses"; break;
+        case '04016050': $returned="credit ratings"; break;
+        case '04016051': $returned="stock splits"; break;
+        case '04016052': $returned="stock options"; break;
+        case '04016053': $returned="recalls (products)"; break;
+        case '04016054': $returned="globalization"; break;
+        case '04016055': $returned="consumers"; break;
+        case '04016056': $returned="purchase"; break;
+        case '04016057': $returned="new service"; break;
+        case '04017000': $returned="economy (general)"; break;
+        case '04017001': $returned="economic policy"; break;
+        case '04018000': $returned="business (general)"; break;
+        case '04018001': $returned="institution"; break;
+        case '04019000': $returned="finance (general)"; break;
+        case '04019001': $returned="money and monetary policy"; break;
+        case '05000000': $returned="education"; break;
+        case '05001000': $returned="adult education"; break;
+        case '05002000': $returned="further education"; break;
+        case '05003000': $returned="parent organisation"; break;
+        case '05004000': $returned="preschool"; break;
+        case '05005000': $returned="school"; break;
+        case '05005001': $returned="elementary schools"; break;
+        case '05005002': $returned="middle schools"; break;
+        case '05005003': $returned="high schools"; break;
+        case '05006000': $returned="teachers union"; break;
+        case '05007000': $returned="university"; break;
+        case '05008000': $returned="upbringing"; break;
+        case '05009000': $returned="entrance examination"; break;
+        case '05010000': $returned="teaching and learning"; break;
+        case '05010001': $returned="students"; break;
+        case '05010002': $returned="teachers"; break;
+        case '05010003': $returned="curriculum"; break;
+        case '05010004': $returned="test/examination"; break;
+        case '05011000': $returned="religious education"; break;
+        case '05011001': $returned="parochial school"; break;
+        case '05011002': $returned="seminary"; break;
+        case '05011003': $returned="yeshiva"; break;
+        case '05011004': $returned="madrasa"; break;
+        case '06000000': $returned="environmental issue"; break;
+        case '06001000': $returned="renewable energy"; break;
+        case '06002000': $returned="conservation"; break;
+        case '06002001': $returned="endangered species"; break;
+        case '06002002': $returned="ecosystem"; break;
+        case '06003000': $returned="energy saving"; break;
+        case '06004000': $returned="environmental politics"; break;
+        case '06005000': $returned="environmental pollution"; break;
+        case '06005001': $returned="air pollution"; break;
+        case '06005002': $returned="water pollution"; break;
+        case '06006000': $returned="natural resources"; break;
+        case '06006001': $returned="land resources"; break;
+        case '06006002': $returned="parks"; break;
+        case '06006003': $returned="forests"; break;
+        case '06006004': $returned="wetlands"; break;
+        case '06006005': $returned="mountains"; break;
+        case '06006006': $returned="rivers"; break;
+        case '06006007': $returned="oceans"; break;
+        case '06006008': $returned="wildlife"; break;
+        case '06006009': $returned="energy resources"; break;
+        case '06007000': $returned="nature"; break;
+        case '06007001': $returned="invasive species"; break;
+        case '06008000': $returned="population"; break;
+        case '06009000': $returned="waste"; break;
+        case '06010000': $returned="water"; break;
+        case '06011000': $returned="global warming"; break;
+        case '06012000': $returned="hazardous materials"; break;
+        case '06013000': $returned="environmental cleanup"; break;
+        case '07000000': $returned="health"; break;
+        case '07001000': $returned="disease"; break;
+        case '07001001': $returned="communicable diseases"; break;
+        case '07001002': $returned="virus diseases"; break;
+        case '07001003': $returned="AIDS"; break;
+        case '07001004': $returned="cancer"; break;
+        case '07001005': $returned="heart disease"; break;
+        case '07001006': $returned="alzheimer's disease"; break;
+        case '07001007': $returned="animal diseases"; break;
+        case '07001008': $returned="plant diseases"; break;
+        case '07001009': $returned="retrovirus"; break;
+        case '07002000': $returned="epidemic and plague"; break;
+        case '07003000': $returned="health treatment"; break;
+        case '07003001': $returned="prescription drugs"; break;
+        case '07003002': $returned="dietary supplements"; break;
+        case '07003003': $returned="diet"; break;
+        case '07003004': $returned="medical procedure/test"; break;
+        case '07003005': $returned="therapy"; break;
+        case '07004000': $returned="health organisations"; break;
+        case '07005000': $returned="medical research"; break;
+        case '07006000': $returned="medical staff"; break;
+        case '07006001': $returned="primary care physician"; break;
+        case '07006002': $returned="health-workers union"; break;
+        case '07007000': $returned="medicine"; break;
+        case '07007001': $returned="herbal"; break;
+        case '07007002': $returned="holistic"; break;
+        case '07007003': $returned="western"; break;
+        case '07007004': $returned="traditional Chinese"; break;
+        case '07008000': $returned="preventative medicine"; break;
+        case '07008001': $returned="vaccines"; break;
+        case '07009000': $returned="injury"; break;
+        case '07010000': $returned="hospital and clinic"; break;
+        case '07011000': $returned="government health care"; break;
+        case '07011001': $returned="medicare"; break;
+        case '07011002': $returned="medicaid"; break;
+        case '07012000': $returned="private health care"; break;
+        case '07013000': $returned="healthcare policy"; break;
+        case '07013001': $returned="food safety"; break;
+        case '07014000': $returned="medical specialisation"; break;
+        case '07014001': $returned="geriatric"; break;
+        case '07014002': $returned="pediatrics"; break;
+        case '07014003': $returned="reproduction"; break;
+        case '07014004': $returned="genetics"; break;
+        case '07014005': $returned="obstetrics/gynecology"; break;
+        case '07015000': $returned="medical service"; break;
+        case '07016000': $returned="physical fitness"; break;
+        case '07017000': $returned="illness"; break;
+        case '07017001': $returned="mental illness"; break;
+        case '07017002': $returned="eating disorder"; break;
+        case '07017003': $returned="obesity"; break;
+        case '07018000': $returned="medical conditions"; break;
+        case '07019000': $returned="patient"; break;
+        case '08000000': $returned="human interest"; break;
+        case '08001000': $returned="animal"; break;
+        case '08002000': $returned="curiosity"; break;
+        case '08003000': $returned="people"; break;
+        case '08003001': $returned="advice"; break;
+        case '08003002': $returned="celebrity"; break;
+        case '08003003': $returned="accomplishment"; break;
+        case '08003004': $returned="human mishap"; break;
+        case '08003005': $returned="fortune-telling"; break;
+        case '08004000': $returned="mystery"; break;
+        case '08005000': $returned="society"; break;
+        case '08005001': $returned="ceremony"; break;
+        case '08005002': $returned="death"; break;
+        case '08005003': $returned="funeral"; break;
+        case '08005004': $returned="estate bestowal"; break;
+        case '08005005': $returned="memorial"; break;
+        case '08006000': $returned="award and prize"; break;
+        case '08006001': $returned="record"; break;
+        case '08007000': $returned="imperial and royal matters"; break;
+        case '08008000': $returned="plant"; break;
+        case '09000000': $returned="labour"; break;
+        case '09001000': $returned="apprentices"; break;
+        case '09002000': $returned="collective contract"; break;
+        case '09002001': $returned="contract issue-wages"; break;
+        case '09002002': $returned="contract issue-healthcare"; break;
+        case '09002003': $returned="contract issue-work rules"; break;
+        case '09003000': $returned="employment"; break;
+        case '09003001': $returned="labor market"; break;
+        case '09003002': $returned="job layoffs"; break;
+        case '09003003': $returned="child labor"; break;
+        case '09003004': $returned="occupations"; break;
+        case '09004000': $returned="labour dispute"; break;
+        case '09005000': $returned="labour legislation"; break;
+        case '09006000': $returned="retirement"; break;
+        case '09007000': $returned="retraining"; break;
+        case '09008000': $returned="strike"; break;
+        case '09009000': $returned="unemployment"; break;
+        case '09010000': $returned="unions"; break;
+        case '09011000': $returned="wage and pension"; break;
+        case '09011001': $returned="employee benefits"; break;
+        case '09011002': $returned="social security"; break;
+        case '09012000': $returned="work relations"; break;
+        case '09013000': $returned="health and safety at work"; break;
+        case '09014000': $returned="advanced training"; break;
+        case '09015000': $returned="employer"; break;
+        case '09016000': $returned="employee"; break;
+        case '10000000': $returned="lifestyle and leisure"; break;
+        case '10001000': $returned="game"; break;
+        case '10001001': $returned="Go"; break;
+        case '10001002': $returned="chess"; break;
+        case '10001003': $returned="bridge"; break;
+        case '10001004': $returned="shogi"; break;
+        case '10002000': $returned="gaming and lottery"; break;
+        case '10003000': $returned="gastronomy"; break;
+        case '10003001': $returned="organic foods"; break;
+        case '10004000': $returned="hobby"; break;
+        case '10004001': $returned="DIY"; break;
+        case '10004002': $returned="shopping"; break;
+        case '10004003': $returned="gardening"; break;
+        case '10005000': $returned="holiday or vacation"; break;
+        case '10006000': $returned="tourism"; break;
+        case '10007000': $returned="travel and commuting"; break;
+        case '10007001': $returned="traffic"; break;
+        case '10008000': $returned="club and association"; break;
+        case '10009000': $returned="lifestyle (house and home)"; break;
+        case '10010000': $returned="leisure (general)"; break;
+        case '10011000': $returned="public holiday"; break;
+        case '10012000': $returned="hunting"; break;
+        case '10013000': $returned="fishing"; break;
+        case '10014000': $returned="auto trends"; break;
+        case '10015000': $returned="adventure"; break;
+        case '10016000': $returned="beauty"; break;
+        case '10017000': $returned="consumer issue"; break;
+        case '10018000': $returned="wedding"; break;
+        case '11000000': $returned="politics"; break;
+        case '11001000': $returned="defence"; break;
+        case '11001001': $returned="veterans affairs"; break;
+        case '11001002': $returned="national security"; break;
+        case '11001003': $returned="security measures"; break;
+        case '11001004': $returned="armed Forces"; break;
+        case '11001005': $returned="military equipment"; break;
+        case '11001006': $returned="firearms"; break;
+        case '11001007': $returned="biological and chemical weapons"; break;
+        case '11001008': $returned="missile systems"; break;
+        case '11001009': $returned="nuclear weapons"; break;
+        case '11002000': $returned="diplomacy"; break;
+        case '11002001': $returned="summit"; break;
+        case '11002002': $returned="international relations"; break;
+        case '11002003': $returned="peace negotiations"; break;
+        case '11002004': $returned="alliances"; break;
+        case '11003000': $returned="election"; break;
+        case '11003001': $returned="political candidates"; break;
+        case '11003002': $returned="political campaigns"; break;
+        case '11003003': $returned="campaign finance"; break;
+        case '11003004': $returned="national elections"; break;
+        case '11003005': $returned="regional elections"; break;
+        case '11003006': $returned="local elections"; break;
+        case '11003007': $returned="voting"; break;
+        case '11003008': $returned="poll"; break;
+        case '11003009': $returned="european elections"; break;
+        case '11003010': $returned="primary"; break;
+        case '11004000': $returned="espionage and intelligence"; break;
+        case '11005000': $returned="foreign aid"; break;
+        case '11005001': $returned="economic sanction"; break;
+        case '11006000': $returned="government"; break;
+        case '11006001': $returned="civil and public service"; break;
+        case '11006002': $returned="safety of citizens"; break;
+        case '11006003': $returned="think tank"; break;
+        case '11006004': $returned="national government"; break;
+        case '11006005': $returned="executive (government)"; break;
+        case '11006006': $returned="heads of state"; break;
+        case '11006007': $returned="government departments"; break;
+        case '11006008': $returned="public officials"; break;
+        case '11006009': $returned="ministers (government)"; break;
+        case '11006010': $returned="public employees"; break;
+        case '11006011': $returned="privatisation"; break;
+        case '11006012': $returned="nationalisation"; break;
+        case '11006013': $returned="impeachment"; break;
+        case '11007000': $returned="human rights"; break;
+        case '11008000': $returned="local authority"; break;
+        case '11009000': $returned="parliament"; break;
+        case '11009001': $returned="upper house"; break;
+        case '11009002': $returned="lower house"; break;
+        case '11010000': $returned="parties and movements"; break;
+        case '11010001': $returned="non government organizations (NGO)"; break;
+        case '11011000': $returned="refugee"; break;
+        case '11012000': $returned="regional authority"; break;
+        case '11013000': $returned="state budget and tax"; break;
+        case '11013001': $returned="public finance"; break;
+        case '11014000': $returned="treaty and international organisation-DEPRECATED"; break;
+        case '11014001': $returned="international relations-DEPRECATED"; break;
+        case '11014002': $returned="peace negotiations-DEPRECATED"; break;
+        case '11014003': $returned="alliances-DEPRECATED"; break;
+        case '11015000': $returned="constitution"; break;
+        case '11016000': $returned="interior policy"; break;
+        case '11016001': $returned="data protection"; break;
+        case '11016002': $returned="housing and urban planning"; break;
+        case '11016003': $returned="pension and welfare"; break;
+        case '11016004': $returned="personal weapon control"; break;
+        case '11016005': $returned="indigenous people"; break;
+        case '11016006': $returned="personal data collection"; break;
+        case '11016007': $returned="planning inquiries"; break;
+        case '11017000': $returned="migration"; break;
+        case '11018000': $returned="citizens initiative and recall"; break;
+        case '11019000': $returned="referenda"; break;
+        case '11020000': $returned="nuclear policy"; break;
+        case '11021000': $returned="lobbying"; break;
+        case '11022000': $returned="regulatory policy and organisation"; break;
+        case '11023000': $returned="censorship"; break;
+        case '11024000': $returned="politics (general)"; break;
+        case '11024001': $returned="political systems"; break;
+        case '11024002': $returned="democracy"; break;
+        case '11024003': $returned="political development"; break;
+        case '11025000': $returned="freedom of the press"; break;
+        case '11026000': $returned="freedom of religion"; break;
+        case '11027000': $returned="treaty"; break;
+        case '11028000': $returned="international organisation"; break;
+        case '12000000': $returned="religion and belief"; break;
+        case '12001000': $returned="cult and sect"; break;
+        case '12002000': $returned="belief (faith)"; break;
+        case '12002001': $returned="unificationism"; break;
+        case '12002002': $returned="scientology"; break;
+        case '12003000': $returned="freemasonry"; break;
+        case '12004000': $returned="religion-DEPRECATED"; break;
+        case '12004001': $returned="christianity-DEPRECATED"; break;
+        case '12004002': $returned="islam-DEPRECATED"; break;
+        case '12004003': $returned="judaism-DEPRECATED"; break;
+        case '12004004': $returned="buddhism-DEPRECATED"; break;
+        case '12004005': $returned="hinduism-DEPRECATED"; break;
+        case '12005000': $returned="church (organisation)-DEPRECATED"; break;
+        case '12005001': $returned="religious facilities-DEPRECATED"; break;
+        case '12006000': $returned="values"; break;
+        case '12006001': $returned="ethics"; break;
+        case '12006002': $returned="corrupt practices"; break;
+        case '12007000': $returned="church and state relations"; break;
+        case '12008000': $returned="philosophy"; break;
+        case '12009000': $returned="christianity"; break;
+        case '12009001': $returned="protestant"; break;
+        case '12009002': $returned="lutheran"; break;
+        case '12009003': $returned="reformed"; break;
+        case '12009004': $returned="anglican"; break;
+        case '12009005': $returned="methodist"; break;
+        case '12009006': $returned="baptist"; break;
+        case '12009007': $returned="mennonite"; break;
+        case '12009009': $returned="mormon"; break;
+        case '12009010': $returned="roman catholic"; break;
+        case '12009011': $returned="old catholic"; break;
+        case '12009012': $returned="orthodoxy"; break;
+        case '12009013': $returned="salvation army"; break;
+        case '12010000': $returned="islam"; break;
+        case '12011000': $returned="judaism"; break;
+        case '12012000': $returned="buddhism"; break;
+        case '12013000': $returned="hinduism"; break;
+        case '12014000': $returned="religious festival or holiday"; break;
+        case '12014001': $returned="christmas"; break;
+        case '12014002': $returned="easter"; break;
+        case '12014003': $returned="pentecost"; break;
+        case '12014004': $returned="ramadan"; break;
+        case '12014005': $returned="yom kippur"; break;
+        case '12015000': $returned="religious leader"; break;
+        case '12015001': $returned="pope"; break;
+        case '12016000': $returned="nature religion"; break;
+        case '12017000': $returned="taoism"; break;
+        case '12018000': $returned="shintoism"; break;
+        case '12019000': $returned="sikhism"; break;
+        case '12020000': $returned="jainism"; break;
+        case '12021000': $returned="parsasm"; break;
+        case '12022000': $returned="confucianism"; break;
+        case '12023000': $returned="religious text"; break;
+        case '12023001': $returned="bible"; break;
+        case '12023002': $returned="qur'an"; break;
+        case '12023003': $returned="torah"; break;
+        case '12024000': $returned="interreligious dialogue"; break;
+        case '12025000': $returned="religious event"; break;
+        case '12025001': $returned="catholic convention"; break;
+        case '12025002': $returned="protestant convention"; break;
+        case '12025004': $returned="ritual"; break;
+        case '12026000': $returned="concordat"; break;
+        case '12027000': $returned="ecumenism"; break;
+        case '13000000': $returned="science and technology"; break;
+        case '13001000': $returned="applied science"; break;
+        case '13001001': $returned="physics"; break;
+        case '13001002': $returned="chemistry"; break;
+        case '13001003': $returned="cosmology"; break;
+        case '13001004': $returned="particle physics"; break;
+        case '13002000': $returned="engineering"; break;
+        case '13002001': $returned="material science"; break;
+        case '13003000': $returned="human science"; break;
+        case '13003001': $returned="social sciences"; break;
+        case '13003002': $returned="history"; break;
+        case '13003003': $returned="psychology"; break;
+        case '13003004': $returned="sociology"; break;
+        case '13003005': $returned="anthropology"; break;
+        case '13004000': $returned="natural science"; break;
+        case '13004001': $returned="geology"; break;
+        case '13004002': $returned="paleontology"; break;
+        case '13004003': $returned="geography"; break;
+        case '13004004': $returned="botany"; break;
+        case '13004005': $returned="zoology"; break;
+        case '13004006': $returned="physiology"; break;
+        case '13004007': $returned="astronomy"; break;
+        case '13004008': $returned="biology"; break;
+        case '13005000': $returned="philosophical science"; break;
+        case '13006000': $returned="research"; break;
+        case '13006001': $returned="survey"; break;
+        case '13007000': $returned="scientific exploration"; break;
+        case '13008000': $returned="space programme"; break;
+        case '13009000': $returned="science (general)"; break;
+        case '13010000': $returned="technology (general)"; break;
+        case '13010001': $returned="rocketry"; break;
+        case '13010002': $returned="laser"; break;
+        case '13011000': $returned="standards"; break;
+        case '13012000': $returned="animal science"; break;
+        case '13013000': $returned="micro science"; break;
+        case '13014000': $returned="marine science"; break;
+        case '13015000': $returned="weather science"; break;
+        case '13016000': $returned="electronics"; break;
+        case '13017000': $returned="identification technology"; break;
+        case '13018000': $returned="mathematics"; break;
+        case '13019000': $returned="biotechnology"; break;
+        case '13020000': $returned="agricultural research and technology"; break;
+        case '13021000': $returned="nanotechnology"; break;
+        case '13022000': $returned="IT/computer sciences"; break;
+        case '13023000': $returned="scientific institutions"; break;
+        case '14000000': $returned="social issue"; break;
+        case '14001000': $returned="addiction"; break;
+        case '14002000': $returned="charity"; break;
+        case '14003000': $returned="demographics"; break;
+        case '14003001': $returned="population and census"; break;
+        case '14003002': $returned="immigration"; break;
+        case '14003003': $returned="illegal immigrants"; break;
+        case '14003004': $returned="emigrants"; break;
+        case '14004000': $returned="disabled"; break;
+        case '14005000': $returned="euthanasia (also includes assisted suicide)"; break;
+        case '14005001': $returned="suicide"; break;
+        case '14006000': $returned="family"; break;
+        case '14006001': $returned="parent and child"; break;
+        case '14006002': $returned="adoption"; break;
+        case '14006003': $returned="marriage"; break;
+        case '14006004': $returned="divorce"; break;
+        case '14006005': $returned="sex"; break;
+        case '14006006': $returned="courtship"; break;
+        case '14007000': $returned="family planning"; break;
+        case '14008000': $returned="health insurance"; break;
+        case '14009000': $returned="homelessness"; break;
+        case '14010000': $returned="minority group"; break;
+        case '14010001': $returned="gays and lesbians"; break;
+        case '14010002': $returned="national or ethnic minority"; break;
+        case '14011000': $returned="pornography"; break;
+        case '14012000': $returned="poverty"; break;
+        case '14013000': $returned="prostitution"; break;
+        case '14014000': $returned="racism"; break;
+        case '14015000': $returned="welfare"; break;
+        case '14016000': $returned="abortion"; break;
+        case '14017000': $returned="missing person"; break;
+        case '14017001': $returned="missing due to hostilities"; break;
+        case '14018000': $returned="long term care"; break;
+        case '14019000': $returned="juvenile delinquency"; break;
+        case '14020000': $returned="nuclear radiation victims"; break;
+        case '14021000': $returned="slavery"; break;
+        case '14022000': $returned="abusive behaviour"; break;
+        case '14023000': $returned="death and dying"; break;
+        case '14024000': $returned="people"; break;
+        case '14024001': $returned="children"; break;
+        case '14024002': $returned="infants"; break;
+        case '14024003': $returned="teen-agers"; break;
+        case '14024004': $returned="adults"; break;
+        case '14024005': $returned="senior citizens"; break;
+        case '14025000': $returned="social issues (general)"; break;
+        case '14025001': $returned="social conditions"; break;
+        case '14025002': $returned="social problems"; break;
+        case '14025003': $returned="discrimination"; break;
+        case '14025004': $returned="social services"; break;
+        case '14025005': $returned="death penalty policies"; break;
+        case '14026000': $returned="ordnance clearance"; break;
+        case '14027000': $returned="reconstruction"; break;
+        case '15000000': $returned="sport"; break;
+        case '15001000': $returned="aero and aviation sport"; break;
+        case '15001001': $returned="parachuting"; break;
+        case '15001002': $returned="sky diving"; break;
+        case '15002000': $returned="alpine skiing"; break;
+        case '15002001': $returned="downhill"; break;
+        case '15002002': $returned="giant slalom"; break;
+        case '15002003': $returned="super G"; break;
+        case '15002004': $returned="slalom"; break;
+        case '15002005': $returned="combined"; break;
+        case '15003000': $returned="American football"; break;
+        case '15003001': $returned=" (US) National Football League (NFL) (North American) "; break;
+        case '15003002': $returned="CFL"; break;
+        case '15003003': $returned="AFL-DEPRECATED"; break;
+        case '15004000': $returned="archery"; break;
+        case '15004001': $returned="FITA / Outdoor target archery"; break;
+        case '15004002': $returned="crossbow shooting"; break;
+        case '15005000': $returned="athletics, track and field"; break;
+        case '15005001': $returned="100 m"; break;
+        case '15005002': $returned="200 m"; break;
+        case '15005003': $returned="400 m"; break;
+        case '15005004': $returned="800 m"; break;
+        case '15005005': $returned="1000 m"; break;
+        case '15005006': $returned="1500 m"; break;
+        case '15005007': $returned="mile"; break;
+        case '15005008': $returned="2000 m"; break;
+        case '15005009': $returned="3000 m"; break;
+        case '15005010': $returned="5000 m"; break;
+        case '15005011': $returned="10,000 m"; break;
+        case '15005012': $returned="20 km"; break;
+        case '15005013': $returned="one hour"; break;
+        case '15005014': $returned="25000"; break;
+        case '15005015': $returned="30000"; break;
+        case '15005016': $returned="110 m hurdles"; break;
+        case '15005017': $returned="400 m hurdles"; break;
+        case '15005018': $returned="3000 m steeplechase"; break;
+        case '15005019': $returned="high jump"; break;
+        case '15005020': $returned="pole vault"; break;
+        case '15005021': $returned="long jump"; break;
+        case '15005022': $returned="triple jump"; break;
+        case '15005023': $returned="shot put"; break;
+        case '15005024': $returned="discus throw"; break;
+        case '15005025': $returned="hammer throw"; break;
+        case '15005026': $returned="javelin throw"; break;
+        case '15005027': $returned="decathlon"; break;
+        case '15005028': $returned="4x100 m"; break;
+        case '15005029': $returned="4x200 m"; break;
+        case '15005030': $returned="4x400 m"; break;
+        case '15005031': $returned="4x800 m"; break;
+        case '15005032': $returned="4x1500 m"; break;
+        case '15005033': $returned="walk 1 h"; break;
+        case '15005034': $returned="walk 2 h"; break;
+        case '15005035': $returned="10 km walk"; break;
+        case '15005036': $returned="15 km walk"; break;
+        case '15005037': $returned="20 km walk"; break;
+        case '15005038': $returned="30 km walk"; break;
+        case '15005039': $returned="50 km walk"; break;
+        case '15005040': $returned="100 m hurdles"; break;
+        case '15005041': $returned="5 km walk"; break;
+        case '15005042': $returned="heptathlon"; break;
+        case '15005043': $returned="1500 m walk"; break;
+        case '15005044': $returned="2000 m walk"; break;
+        case '15005045': $returned="3000 m walk"; break;
+        case '15005046': $returned="50 m"; break;
+        case '15005047': $returned="50 m hurdles"; break;
+        case '15005048': $returned="50 yards"; break;
+        case '15005049': $returned="50 yard hurdles"; break;
+        case '15005050': $returned="60 m"; break;
+        case '15005051': $returned="60 m hurdles"; break;
+        case '15005052': $returned="60 yards"; break;
+        case '15005053': $returned="60 yard hurdles"; break;
+        case '15005054': $returned="100 yards"; break;
+        case '15005055': $returned="100 yard hurdles"; break;
+        case '15005056': $returned="300 m"; break;
+        case '15005057': $returned="300 yards"; break;
+        case '15005058': $returned="440 yards"; break;
+        case '15005059': $returned="500 m"; break;
+        case '15005060': $returned="500 yards"; break;
+        case '15005061': $returned="600 m"; break;
+        case '15005062': $returned="600 yards"; break;
+        case '15005063': $returned="880 yards"; break;
+        case '15005064': $returned="1000 yards"; break;
+        case '15005065': $returned="2 miles"; break;
+        case '15005066': $returned="3 miles"; break;
+        case '15005067': $returned="6 miles"; break;
+        case '15005068': $returned="4x1 mile"; break;
+        case '15005069': $returned="pentathlon"; break;
+        case '15006000': $returned="badminton"; break;
+        case '15007000': $returned="baseball"; break;
+        case '15007001': $returned=" Major League Baseball (North American Professional) - American League "; break;
+        case '15007002': $returned=" Major League Baseball (North American Professional) - National League "; break;
+        case '15007003': $returned=" Major League Baseball (North American Professional) - Special (e.g. All-Star, World Series) "; break;
+        case '15007004': $returned="rubberball baseball"; break;
+        case '15007005': $returned="Major League Baseball Playoffs"; break;
+        case '15007006': $returned="World Series"; break;
+        case '15008000': $returned="basketball"; break;
+        case '15008001': $returned=" National Basketball Association (North American Professional) "; break;
+        case '15008002': $returned="professional - Women general"; break;
+        case '15008003': $returned="Swiss netball"; break;
+        case '15008004': $returned="German netball"; break;
+        case '15008005': $returned="Dutch netball"; break;
+        case '15009000': $returned="biathlon"; break;
+        case '15009001': $returned="7.5 km"; break;
+        case '15009002': $returned="10 km"; break;
+        case '15009003': $returned="15 km"; break;
+        case '15009004': $returned="20 km"; break;
+        case '15009005': $returned="4x7.5 km relay"; break;
+        case '15009006': $returned="12.5 km pursuit"; break;
+        case '15010000': $returned="billiards, snooker and pool"; break;
+        case '15010001': $returned="8 ball"; break;
+        case '15010002': $returned="9 ball"; break;
+        case '15010003': $returned="14.1"; break;
+        case '15010004': $returned="continuous-DEPRECATED"; break;
+        case '15010005': $returned="other-DEPRECATED"; break;
+        case '15010006': $returned="snooker"; break;
+        case '15011000': $returned="bobsleigh"; break;
+        case '15011001': $returned="two-man sled"; break;
+        case '15011002': $returned="four-man sled"; break;
+        case '15012000': $returned="bowling"; break;
+        case '15013000': $returned="bowls and petanque"; break;
+        case '15014000': $returned="boxing"; break;
+        case '15014001': $returned="super-heavyweight"; break;
+        case '15014002': $returned="heavyweight"; break;
+        case '15014003': $returned="cruiserweight"; break;
+        case '15014004': $returned="light-heavyweight"; break;
+        case '15014005': $returned="super-middleweight"; break;
+        case '15014006': $returned="middleweight"; break;
+        case '15014007': $returned="light-middleweight"; break;
+        case '15014008': $returned="welterweight"; break;
+        case '15014009': $returned="light-welterweight"; break;
+        case '15014010': $returned="lightweight"; break;
+        case '15014011': $returned="super-featherweight"; break;
+        case '15014012': $returned="featherweight"; break;
+        case '15014013': $returned="super-bantamweight"; break;
+        case '15014014': $returned="bantamweight"; break;
+        case '15014015': $returned="super-flyweight"; break;
+        case '15014016': $returned="flyweight"; break;
+        case '15014017': $returned="light flyweight"; break;
+        case '15014018': $returned="straw"; break;
+        case '15014019': $returned="IBF"; break;
+        case '15014020': $returned="WBA"; break;
+        case '15014021': $returned="WBC"; break;
+        case '15014022': $returned="WBO"; break;
+        case '15014023': $returned="French boxing"; break;
+        case '15014024': $returned="Thai boxing"; break;
+        case '15015000': $returned="canoeing and kayaking"; break;
+        case '15015001': $returned="Slalom"; break;
+        case '15015002': $returned="200 m"; break;
+        case '15015003': $returned="500 m"; break;
+        case '15015004': $returned="1000 m"; break;
+        case '15015005': $returned="K1"; break;
+        case '15015006': $returned="K2"; break;
+        case '15015007': $returned="K4"; break;
+        case '15015008': $returned="C1"; break;
+        case '15015009': $returned="C2"; break;
+        case '15015010': $returned="C4"; break;
+        case '15015011': $returned="canoe sailing"; break;
+        case '15015012': $returned="pontoniering"; break;
+        case '15016000': $returned="climbing"; break;
+        case '15016001': $returned="mountaineering"; break;
+        case '15016002': $returned="sport climbing"; break;
+        case '15017000': $returned="cricket"; break;
+        case '15018000': $returned="curling"; break;
+        case '15018001': $returned="icestock sport"; break;
+        case '15019000': $returned="cycling"; break;
+        case '15019001': $returned="track"; break;
+        case '15019002': $returned="pursuit"; break;
+        case '15019003': $returned="Olympic sprint"; break;
+        case '15019004': $returned="sprint"; break;
+        case '15019005': $returned="Keirin"; break;
+        case '15019006': $returned="points race"; break;
+        case '15019007': $returned="Madison race"; break;
+        case '15019008': $returned="500 m time trial"; break;
+        case '15019009': $returned="1 km time trial"; break;
+        case '15019010': $returned="one hour"; break;
+        case '15019011': $returned="road race"; break;
+        case '15019012': $returned="road time trial"; break;
+        case '15019013': $returned="staging race"; break;
+        case '15019014': $returned="cyclo-cross"; break;
+        case '15019015': $returned="Vtt"; break;
+        case '15019016': $returned="Vtt-cross"; break;
+        case '15019017': $returned="Vtt-downhill"; break;
+        case '15019018': $returned="bi-crossing"; break;
+        case '15019019': $returned="trial"; break;
+        case '15019020': $returned="artistic cycling"; break;
+        case '15019021': $returned="cycle ball"; break;
+        case '15020000': $returned="dancing"; break;
+        case '15021000': $returned="diving"; break;
+        case '15021001': $returned="10 m platform"; break;
+        case '15021002': $returned="10 m platform synchronised"; break;
+        case '15021003': $returned="3 m springboard"; break;
+        case '15021004': $returned="3 m springboard synchronised"; break;
+        case '15021005': $returned="subaquatics"; break;
+        case '15021006': $returned="scuba diving"; break;
+        case '15022000': $returned="equestrian"; break;
+        case '15022001': $returned="three-day event"; break;
+        case '15022002': $returned="dressage"; break;
+        case '15022003': $returned="jumping"; break;
+        case '15022004': $returned="cross country"; break;
+        case '15023000': $returned="fencing"; break;
+        case '15023001': $returned="epee"; break;
+        case '15023002': $returned="foil"; break;
+        case '15023003': $returned="sabre"; break;
+        case '15024000': $returned="field Hockey"; break;
+        case '15024001': $returned="roll hockey"; break;
+        case '15025000': $returned="figure Skating"; break;
+        case '15025001': $returned="singles"; break;
+        case '15025002': $returned="pairs"; break;
+        case '15025003': $returned="ice dance"; break;
+        case '15026000': $returned="freestyle Skiing"; break;
+        case '15026001': $returned="moguls"; break;
+        case '15026002': $returned="aerials"; break;
+        case '15026003': $returned="artistic skiing"; break;
+        case '15027000': $returned="golf"; break;
+        case '15028000': $returned="gymnastics"; break;
+        case '15028001': $returned="floor exercise"; break;
+        case '15028002': $returned="vault"; break;
+        case '15028003': $returned="pommel horse"; break;
+        case '15028004': $returned="uneven bars"; break;
+        case '15028005': $returned="parallel bars"; break;
+        case '15028006': $returned="horizontal bar"; break;
+        case '15028007': $returned="rings"; break;
+        case '15028008': $returned="beam"; break;
+        case '15028009': $returned="rhythmic"; break;
+        case '15028010': $returned="clubs"; break;
+        case '15028011': $returned="hoop"; break;
+        case '15028012': $returned="ribbon"; break;
+        case '15028013': $returned="rope"; break;
+        case '15028014': $returned="ball"; break;
+        case '15028015': $returned="trampoline"; break;
+        case '15029000': $returned="handball (team)"; break;
+        case '15030000': $returned="horse racing, harness racing"; break;
+        case '15030001': $returned="flat racing"; break;
+        case '15030002': $returned="steeple chase"; break;
+        case '15030003': $returned="trotting"; break;
+        case '15030004': $returned="cross country"; break;
+        case '15031000': $returned="ice hockey"; break;
+        case '15031001': $returned="National Hockey League (North American)"; break;
+        case '15031002': $returned="sledge hockey"; break;
+        case '15032000': $returned="Jai Alai (Pelota)"; break;
+        case '15032001': $returned="fronton"; break;
+        case '15032002': $returned="jai-alai"; break;
+        case '15032003': $returned="left wall"; break;
+        case '15032004': $returned="trinquet"; break;
+        case '15032005': $returned="rebot"; break;
+        case '15032006': $returned="chistera ancha"; break;
+        case '15032007': $returned="chistera corta"; break;
+        case '15032008': $returned="bare hand"; break;
+        case '15032009': $returned="pala-ancha"; break;
+        case '15032010': $returned="pala-corta"; break;
+        case '15032011': $returned="pasaka"; break;
+        case '15032012': $returned="xare"; break;
+        case '15033000': $returned="judo"; break;
+        case '15033001': $returned="heavyweight"; break;
+        case '15033002': $returned="half-heavyweight"; break;
+        case '15033003': $returned="middleweight"; break;
+        case '15033004': $returned="half-middleweight"; break;
+        case '15033005': $returned="half-lightweight"; break;
+        case '15033006': $returned="lightweight"; break;
+        case '15033007': $returned="extra lightweight"; break;
+        case '15034000': $returned="karate"; break;
+        case '15034001': $returned="sparring"; break;
+        case '15034002': $returned="formal exercise-DEPRECATED"; break;
+        case '15035000': $returned="lacrosse"; break;
+        case '15036000': $returned="luge"; break;
+        case '15036001': $returned="singles"; break;
+        case '15036002': $returned="doubles"; break;
+        case '15037000': $returned="marathon"; break;
+        case '15038000': $returned="modern pentathlon"; break;
+        case '15038001': $returned="running"; break;
+        case '15038002': $returned="shooting"; break;
+        case '15038003': $returned="swimming"; break;
+        case '15038004': $returned="fencing"; break;
+        case '15038005': $returned="showjumping"; break;
+        case '15039000': $returned="motor racing"; break;
+        case '15039001': $returned="Formula One"; break;
+        case '15039002': $returned="F3000"; break;
+        case '15039003': $returned="endurance"; break;
+        case '15039004': $returned="Indy"; break;
+        case '15039005': $returned="CART"; break;
+        case '15039006': $returned="NHRA"; break;
+        case '15039007': $returned="NASCAR"; break;
+        case '15039008': $returned="TRUCKI"; break;
+        case '15040000': $returned="motor rallying"; break;
+        case '15040001': $returned="rallying"; break;
+        case '15040002': $returned="pursuit"; break;
+        case '15040003': $returned="rallycross"; break;
+        case '15041000': $returned="motorcycling"; break;
+        case '15041001': $returned="speed-Grand-Prix"; break;
+        case '15041002': $returned="enduro"; break;
+        case '15041003': $returned="grass-track"; break;
+        case '15041004': $returned="moto-ball"; break;
+        case '15041005': $returned="moto-cross"; break;
+        case '15041006': $returned="rallying"; break;
+        case '15041007': $returned="trial"; break;
+        case '15041008': $returned="endurance"; break;
+        case '15041009': $returned="superbike"; break;
+        case '15041010': $returned="125 cm3"; break;
+        case '15041011': $returned="250 cm3"; break;
+        case '15041012': $returned="500 cm3"; break;
+        case '15041013': $returned="side-cars"; break;
+        case '15041014': $returned="motoGP"; break;
+        case '15042000': $returned="netball"; break;
+        case '15043000': $returned="nordic skiing"; break;
+        case '15043001': $returned="cross-country"; break;
+        case '15043002': $returned="5 km classical time"; break;
+        case '15043003': $returned="10 km classical style"; break;
+        case '15043004': $returned="10 km pursuit free style"; break;
+        case '15043005': $returned="15 km classical style"; break;
+        case '15043006': $returned="15 km pursuit free style"; break;
+        case '15043007': $returned="10 km + 15 km combined"; break;
+        case '15043008': $returned="30 km classical style"; break;
+        case '15043009': $returned="30km free style"; break;
+        case '15043010': $returned="50 km free style"; break;
+        case '15043011': $returned="4x5 km relay"; break;
+        case '15043012': $returned="4x10 km relay"; break;
+        case '15043013': $returned="nordic combined"; break;
+        case '15043014': $returned="raid"; break;
+        case '15043015': $returned="5 km pursuit free style"; break;
+        case '15043016': $returned="1.5 km sprint free"; break;
+        case '15043017': $returned="50 km classic style"; break;
+        case '15044000': $returned="orienteering"; break;
+        case '15044001': $returned="ski orienteering"; break;
+        case '15045000': $returned="polo"; break;
+        case '15046000': $returned="power boating"; break;
+        case '15046001': $returned="F1"; break;
+        case '15046002': $returned="F2"; break;
+        case '15047000': $returned="rowing"; break;
+        case '15047001': $returned="single sculls"; break;
+        case '15047002': $returned="double sculls"; break;
+        case '15047003': $returned="quadruple sculls"; break;
+        case '15047004': $returned="coxless pair"; break;
+        case '15047005': $returned="coxless four"; break;
+        case '15047006': $returned="eight"; break;
+        case '15047007': $returned="lightweight"; break;
+        case '15048000': $returned="rugby league"; break;
+        case '15049000': $returned="rugby union"; break;
+        case '15049001': $returned="rugby 7"; break;
+        case '15050000': $returned="sailing"; break;
+        case '15050001': $returned="Tornado"; break;
+        case '15050002': $returned="soling"; break;
+        case '15050003': $returned="49er"; break;
+        case '15050004': $returned="Europe"; break;
+        case '15050005': $returned="Laser"; break;
+        case '15050006': $returned="470"; break;
+        case '15050007': $returned="Finn"; break;
+        case '15050008': $returned="Star"; break;
+        case '15050009': $returned="flying dutchmann"; break;
+        case '15050010': $returned="505"; break;
+        case '15050011': $returned="staging race"; break;
+        case '15050012': $returned="around the world"; break;
+        case '15050013': $returned="monohull"; break;
+        case '15050014': $returned="multihulls"; break;
+        case '15050015': $returned="yngling"; break;
+        case '15050016': $returned="mistral"; break;
+        case '15051000': $returned="shooting"; break;
+        case '15051001': $returned="10 m air rifle"; break;
+        case '15051002': $returned="10 m air pistol"; break;
+        case '15051003': $returned="10 m running target"; break;
+        case '15051004': $returned="25 m rapid fire pistol"; break;
+        case '15051005': $returned="25 m sport pistol"; break;
+        case '15051006': $returned="50 m free pistol"; break;
+        case '15051007': $returned="50 m free rifle prone"; break;
+        case '15051008': $returned="50 m free rifle 3x40"; break;
+        case '15051009': $returned="50 m sport rifle 3x20"; break;
+        case '15051010': $returned="trap"; break;
+        case '15051011': $returned="double trap"; break;
+        case '15051012': $returned="skeet"; break;
+        case '15052000': $returned="ski jumping"; break;
+        case '15052001': $returned="K90 jump"; break;
+        case '15052002': $returned="K120 jump"; break;
+        case '15052003': $returned="K180 (flying jump)"; break;
+        case '15053000': $returned="snow boarding"; break;
+        case '15053001': $returned="giant slalom"; break;
+        case '15053002': $returned="half-pipe"; break;
+        case '15054000': $returned="soccer"; break;
+        case '15055000': $returned="softball"; break;
+        case '15056000': $returned="speed skating"; break;
+        case '15056001': $returned="500 m"; break;
+        case '15056002': $returned="1000 m"; break;
+        case '15056003': $returned="1500 m"; break;
+        case '15056004': $returned="3000 m"; break;
+        case '15056005': $returned="5000 m"; break;
+        case '15056006': $returned="10000 m"; break;
+        case '15056007': $returned="Short-track"; break;
+        case '15056008': $returned="st 500 m"; break;
+        case '15056009': $returned="st 1000m"; break;
+        case '15056010': $returned="st 1500m"; break;
+        case '15056011': $returned="st 3000m"; break;
+        case '15056012': $returned="st 3000m relay"; break;
+        case '15056013': $returned="st 5000m"; break;
+        case '15056014': $returned="st 5000m relay"; break;
+        case '15057000': $returned="speedway"; break;
+        case '15058000': $returned="sports organisations"; break;
+        case '15058001': $returned="IOC"; break;
+        case '15058002': $returned="international federation"; break;
+        case '15058003': $returned="continental federation"; break;
+        case '15058004': $returned="national federation"; break;
+        case '15058005': $returned="GAISF"; break;
+        case '15059000': $returned="squash"; break;
+        case '15060000': $returned="sumo wrestling"; break;
+        case '15061000': $returned="surfing"; break;
+        case '15062000': $returned="swimming"; break;
+        case '15062001': $returned="50 m freestyle"; break;
+        case '15062002': $returned="100 m freestyle"; break;
+        case '15062003': $returned="200 m freestyle"; break;
+        case '15062004': $returned="400 m freestyle"; break;
+        case '15062005': $returned="800 m freestyle"; break;
+        case '15062006': $returned="1500 m freestyle"; break;
+        case '15062007': $returned="relay 4x50 m freestyle"; break;
+        case '15062008': $returned="relay 4x100 m freestyle"; break;
+        case '15062009': $returned="relay 4x200 m freestyle"; break;
+        case '15062010': $returned="50 m backstroke"; break;
+        case '15062011': $returned="100 m backstroke"; break;
+        case '15062012': $returned="200 m backstroke"; break;
+        case '15062013': $returned="50 m breaststroke"; break;
+        case '15062014': $returned="100 m breaststroke"; break;
+        case '15062015': $returned="200 m breaststroke"; break;
+        case '15062016': $returned="50 m butterfly"; break;
+        case '15062017': $returned="100 m butterfly"; break;
+        case '15062018': $returned="200 m butterfly"; break;
+        case '15062019': $returned="100 m medley"; break;
+        case '15062020': $returned="200 m medley"; break;
+        case '15062021': $returned="400 m medley"; break;
+        case '15062022': $returned="relay 4x50 m medlay"; break;
+        case '15062023': $returned="relay4x100 m medley"; break;
+        case '15062024': $returned="short course"; break;
+        case '15062025': $returned="synchronised technical routine"; break;
+        case '15062026': $returned="synchronised free routine"; break;
+        case '15063000': $returned="table tennis"; break;
+        case '15064000': $returned="Taekwon-Do"; break;
+        case '15064001': $returned="under 49 kg"; break;
+        case '15064002': $returned="under 58 kg"; break;
+        case '15064003': $returned="49-57 kg"; break;
+        case '15064004': $returned="58-68 kg"; break;
+        case '15064005': $returned="57-67 kg"; break;
+        case '15064006': $returned="68-80 kg"; break;
+        case '15064007': $returned="over 67 kg"; break;
+        case '15064008': $returned="over 80 kg"; break;
+        case '15065000': $returned="tennis"; break;
+        case '15065001': $returned="soft tennis"; break;
+        case '15066000': $returned="triathlon"; break;
+        case '15066001': $returned="triathlon swimming"; break;
+        case '15066002': $returned="triathlon cycling"; break;
+        case '15066003': $returned="triathlon run"; break;
+        case '15067000': $returned="volleyball"; break;
+        case '15067001': $returned="beach volleyball"; break;
+        case '15068000': $returned="water polo"; break;
+        case '15069000': $returned="water skiing"; break;
+        case '15069001': $returned="slalom"; break;
+        case '15069002': $returned="trick"; break;
+        case '15069003': $returned="jump"; break;
+        case '15069004': $returned="combined"; break;
+        case '15070000': $returned="weightlifting"; break;
+        case '15070001': $returned="snatch"; break;
+        case '15070002': $returned="clean and jerk"; break;
+        case '15070003': $returned="48 kg"; break;
+        case '15070004': $returned="53 kg"; break;
+        case '15070005': $returned="63 kg"; break;
+        case '15070006': $returned="75 kg"; break;
+        case '15070007': $returned="over 75 kg"; break;
+        case '15070008': $returned="56 kg"; break;
+        case '15070009': $returned="62 kg"; break;
+        case '15070010': $returned="69 kg"; break;
+        case '15070011': $returned="77 kg"; break;
+        case '15070012': $returned="85 kg"; break;
+        case '15070013': $returned="94 kg"; break;
+        case '15070014': $returned="105 kg"; break;
+        case '15070015': $returned="over 105 kg"; break;
+        case '15070016': $returned="powerlifting"; break;
+        case '15071000': $returned="windsurfing"; break;
+        case '15071001': $returned="ocean"; break;
+        case '15071002': $returned="lake"; break;
+        case '15071003': $returned="river"; break;
+        case '15071004': $returned="land"; break;
+        case '15072000': $returned="wrestling"; break;
+        case '15072001': $returned="freestyle"; break;
+        case '15072002': $returned="greco-roman"; break;
+        case '15072003': $returned="over 130 kg"; break;
+        case '15072004': $returned="130 kg"; break;
+        case '15072005': $returned="97 kg"; break;
+        case '15072006': $returned="85 kg"; break;
+        case '15072007': $returned="76 kg"; break;
+        case '15072008': $returned="69 kg"; break;
+        case '15072009': $returned="63 kg"; break;
+        case '15072010': $returned="58 kg"; break;
+        case '15072011': $returned="54 kg"; break;
+        case '15072012': $returned="Swiss wrestling"; break;
+        case '15073000': $returned="sports event"; break;
+        case '15073001': $returned="Summer Olympics"; break;
+        case '15073002': $returned="Winter Olympics"; break;
+        case '15073003': $returned="Summer universiade"; break;
+        case '15073004': $returned="Winter Universiade"; break;
+        case '15073005': $returned="Commonwealth Games"; break;
+        case '15073006': $returned="Winter Goodwill Games"; break;
+        case '15073007': $returned="Summer Asian Games"; break;
+        case '15073008': $returned="Winter Asian Games"; break;
+        case '15073009': $returned="Panamerican Games"; break;
+        case '15073010': $returned="African Games"; break;
+        case '15073011': $returned="Mediterranean Games"; break;
+        case '15073012': $returned="SouthEast Asiatic Games"; break;
+        case '15073013': $returned="PanPacific Games"; break;
+        case '15073014': $returned="SouthPacific Games"; break;
+        case '15073015': $returned="PanArabic Games"; break;
+        case '15073016': $returned="Summer Goodwill Games"; break;
+        case '15073017': $returned="World games"; break;
+        case '15073018': $returned="World Cup"; break;
+        case '15073019': $returned="intercontinental cup"; break;
+        case '15073020': $returned="continental cup"; break;
+        case '15073021': $returned="international cup"; break;
+        case '15073022': $returned="National Cup"; break;
+        case '15073023': $returned="interregional cup"; break;
+        case '15073024': $returned="regional cup"; break;
+        case '15073025': $returned="league cup"; break;
+        case '15073026': $returned="world championship"; break;
+        case '15073027': $returned="intercontinental championship"; break;
+        case '15073028': $returned="continental championship 1st level"; break;
+        case '15073029': $returned="continental championship 2nd level"; break;
+        case '15073030': $returned="continental championship 3rd level"; break;
+        case '15073031': $returned="national championship 1st level"; break;
+        case '15073032': $returned="national championship 2nd level"; break;
+        case '15073033': $returned="national championship3rdlevel"; break;
+        case '15073034': $returned="national championship 4th level"; break;
+        case '15073035': $returned="regional championship"; break;
+        case '15073036': $returned="Grand Prix"; break;
+        case '15073037': $returned="intercontinental tournament"; break;
+        case '15073038': $returned="continental tournament"; break;
+        case '15073039': $returned="international tournament"; break;
+        case '15073040': $returned="national tournament"; break;
+        case '15073041': $returned="inter-nations competition"; break;
+        case '15073042': $returned="inter-clubs competition"; break;
+        case '15073043': $returned="friendly competition"; break;
+        case '15073044': $returned="all-stars competition"; break;
+        case '15073045': $returned="exhibition"; break;
+        case '15073046': $returned="Super Bowl"; break;
+        case '15073047': $returned="paralympic games"; break;
+        case '15074000': $returned="rodeo"; break;
+        case '15074001': $returned="barrel racing"; break;
+        case '15074002': $returned="calf roping"; break;
+        case '15074003': $returned="bull riding"; break;
+        case '15074004': $returned="bulldogging"; break;
+        case '15074005': $returned="saddle bronc"; break;
+        case '15074006': $returned="bareback"; break;
+        case '15074007': $returned="goat roping"; break;
+        case '15075000': $returned="mini golf sport"; break;
+        case '15076000': $returned="bandy"; break;
+        case '15077000': $returned="flying disc"; break;
+        case '15077001': $returned="ultimate"; break;
+        case '15077002': $returned="guts"; break;
+        case '15077003': $returned="overall"; break;
+        case '15077004': $returned="distance"; break;
+        case '15077005': $returned="discathon"; break;
+        case '15077006': $returned="DDC"; break;
+        case '15077007': $returned="SCF"; break;
+        case '15077008': $returned="freestyle"; break;
+        case '15077009': $returned="accuracy"; break;
+        case '15077010': $returned="disc golf"; break;
+        case '15078000': $returned="floorball"; break;
+        case '15079000': $returned="casting"; break;
+        case '15080000': $returned="tug-of-war"; break;
+        case '15081000': $returned="croquette"; break;
+        case '15082000': $returned="dog racing"; break;
+        case '15082001': $returned="sled"; break;
+        case '15082002': $returned="oval track"; break;
+        case '15083000': $returned="skeleton"; break;
+        case '15084000': $returned="Australian rules football"; break;
+        case '15085000': $returned="Canadian football"; break;
+        case '15086000': $returned="duathlon"; break;
+        case '15087000': $returned="hornuss"; break;
+        case '15088000': $returned="fist ball"; break;
+        case '15089000': $returned="inline skating"; break;
+        case '15090000': $returned="grass ski"; break;
+        case '15091000': $returned="snowbiking"; break;
+        case '15092000': $returned="twirling"; break;
+        case '15093000': $returned="kendo"; break;
+        case '15094000': $returned="jukendo"; break;
+        case '15095000': $returned="naginata"; break;
+        case '15096000': $returned="kyudo"; break;
+        case '15097000': $returned="kabaddi"; break;
+        case '15098000': $returned="sepak takraw"; break;
+        case '15099000': $returned="wushu"; break;
+        case '15100000': $returned="darts"; break;
+        case '15101000': $returned="bodybuilding"; break;
+        case '15102000': $returned="sports disciplinary action"; break;
+        case '15103000': $returned="sports awards"; break;
+        case '16000000': $returned="unrest, conflicts and war"; break;
+        case '16001000': $returned="act of terror"; break;
+        case '16002000': $returned="armed conflict"; break;
+        case '16003000': $returned="civil unrest"; break;
+        case '16003001': $returned="revolutions"; break;
+        case '16003002': $returned="rebellions"; break;
+        case '16003003': $returned="political dissent"; break;
+        case '16003004': $returned="religious conflict"; break;
+        case '16003005': $returned="social conflict"; break;
+        case '16004000': $returned="coup d'etat"; break;
+        case '16005000': $returned="guerrilla activity"; break;
+        case '16005001': $returned="bioterrorism"; break;
+        case '16005002': $returned="bombings"; break;
+        case '16006000': $returned="massacre"; break;
+        case '16006001': $returned="genocide"; break;
+        case '16007000': $returned="riots"; break;
+        case '16008000': $returned="demonstration"; break;
+        case '16009000': $returned="war"; break;
+        case '16009001': $returned="civil war"; break;
+        case '16009002': $returned="international military intervention"; break;
+        case '16009003': $returned="prisoners and detainees"; break;
+        case '16010000': $returned="conflict (general)"; break;
+        case '16010001': $returned="peacekeeping force"; break;
+        case '16011000': $returned="crisis"; break;
+        case '16012000': $returned="weaponry"; break;
+        case '17000000': $returned="weather"; break;
+        case '17001000': $returned="forecast"; break;
+        case '17002000': $returned="global change"; break;
+        case '17003000': $returned="report"; break;
+        case '17003001': $returned="weather news"; break;
+        case '17004000': $returned="statistic"; break;
+        case '17005000': $returned="warning"; break;
+        default:
+          $returned="unknown subject code";
+          break;
+      }
+      return($returned);
+    }
+
+    static function attributesLabel($attributeCode)
+    {
+      if(is_string($attributeCode))
+      {
+        @$attributeCode=(int)$attributeCode;
+      }
+
+      switch($attributeCode)
+      {
+        case 001: $returned="Current"; break;
+        case 002: $returned="Analysis"; break;
+        case 003: $returned="Archive material"; break;
+        case 004: $returned="Background"; break;
+        case 005: $returned="Feature"; break;
+        case 006: $returned="Forecast"; break;
+        case 007: $returned="History"; break;
+        case 008: $returned="Obituary"; break;
+        case 009: $returned="Opinion"; break;
+        case 010: $returned="Polls & Surveys"; break;
+        case 011: $returned="Profile"; break;
+        case 012: $returned="Results Listings & Tables"; break;
+        case 013: $returned="Side bar & Supporting information"; break;
+        case 014: $returned="Summary"; break;
+        case 015: $returned="Transcript & Verbatim"; break;
+        case 016: $returned="Interview"; break;
+        case 017: $returned="From the Scene"; break;
+        case 018: $returned="Retrospective"; break;
+        case 019: $returned="Statistics"; break;
+        case 020: $returned="Update"; break;
+        case 021: $returned="Wrap-up"; break;
+        case 022: $returned="Press Release"; break;
+        default:
+          $returned="unknown code ".$attributeCode;
+          break;
+      }
+      return($returned);
+    }
+
+  }
+
+?>
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/KnownTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/KnownTags.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/KnownTags.class.php	(revision 4686)
@@ -0,0 +1,106 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+  define("KNOWN_TAGS_IMPLEMENTED",      0x01);
+  define("KNOWN_TAGS_NOT_IMPLEMENTED",  0x02);
+  define("KNOWN_TAGS_ALL", KNOWN_TAGS_NOT_IMPLEMENTED | KNOWN_TAGS_IMPLEMENTED);
+
+  class KnownTags
+  {
+    protected $label = "";
+    protected $tags = Array();
+
+    function __construct()
+    {
+
+    }
+
+    function __destruct()
+    {
+      unset($this->tags);
+    }
+
+    public function getTags($filter = Array('implemented' => KNOWN_TAGS_ALL, 'schema' => NULL))
+    {
+      if(!array_key_exists('implemented', $filter))
+      {
+        $filter['implemented'] = KNOWN_TAGS_ALL;
+      }
+
+      if(!array_key_exists('schema', $filter))
+      {
+        $filter['schema'] = NULL;
+      }
+
+
+      $returned=Array();
+      foreach($this->tags as $key => $val)
+      {
+        if(( ($val['implemented'] and ($filter['implemented'] & KNOWN_TAGS_IMPLEMENTED)) or
+             (!$val['implemented'] and ($filter['implemented'] & KNOWN_TAGS_NOT_IMPLEMENTED)) ) and
+
+             (is_null($filter['schema']) or
+             (!is_null($filter['schema']) and $val['schema']==$filter['schema']) )
+          )
+        {
+          $returned[$key]=$val;
+        }
+      }
+      return($returned);
+    }
+
+    public function tagIdExists($id)
+    {
+      return(array_key_exists($id, $this->tags));
+    }
+
+
+    public function getTagById($id)
+    {
+      if(array_key_exists($id, $this->tags))
+      {
+        return($this->tags[$id]);
+      }
+      return(false);
+    }
+
+    public function getTagIdByName($name)
+    {
+      foreach($this->tags as $key => $val)
+      {
+        if($val['tagName']==$name)
+         return($key);
+      }
+      return(false);
+    }
+
+    public function getTagByName($name)
+    {
+      $index=$this->getTagIdByName($name);
+      if(index!==false)
+        return($this->tags[$index]);
+      return(false);
+    }
+
+    public function getLabel()
+    {
+      return($this->label);
+    }
+
+  }
+
+?>
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/PentaxTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/PentaxTags.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/PentaxTags.class.php	(revision 4686)
@@ -0,0 +1,1673 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Pentax values from
+ * - ExifTool / Copyright - Phil Harvey <phil at owl.phy.queensu.ca>
+ * - Exiv2    / Copyright - Andreas Huggel <ahuggel at gmx.net>
+ *
+ *
+ *
+ * -----------------------------------------------------------------------------
+ * Pentax tags definition & Pentax reader class
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/KnownTags.class.php");
+
+  /**
+   * Define the tags for Pentax camera
+   */
+  class PentaxTags extends KnownTags
+  {
+    protected $label = "Pentax specific tags";
+    protected $tags = Array(
+      /*
+       * tags with defined values
+       */
+
+      // ShootingMode, tag 0x0001
+      0x0001 => Array(
+        'tagName'     => "ShootingMode",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Auto",
+          1 => "Night-Scene",
+          2 => "Manual"
+        )
+      ), // < ShootingMode
+
+      // CameraModel, tag 0x0005
+      0x0005 => Array(
+        'tagName'     => "CameraModel",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0000d => "Optio 330/430",
+          0x12926 => "Optio 230",
+          0x12958 => "Optio 330GS",
+          0x12962 => "Optio 450/550",
+          0x1296c => "Optio S",
+          0x12994 => "*ist D",
+          0x129b2 => "Optio 33L",
+          0x129bc => "Optio 33LF",
+          0x129c6 => "Optio 33WR/43WR/555",
+          0x129d5 => "Optio S4",
+          0x12a02 => "Optio MX",
+          0x12a0c => "Optio S40",
+          0x12a16 => "Optio S4i",
+          0x12a34 => "Optio 30",
+          0x12a52 => "Optio S30",
+          0x12a66 => "Optio 750Z",
+          0x12a70 => "Optio SV",
+          0x12a75 => "Optio SVi",
+          0x12a7a => "Optio X",
+          0x12a8e => "Optio S5i",
+          0x12a98 => "Optio S50",
+          0x12aa2 => "*ist DS",
+          0x12ab6 => "Optio MX4",
+          0x12ac0 => "Optio S5n",
+          0x12aca => "Optio WP",
+          0x12afc => "Optio S55",
+          0x12b10 => "Optio S5z",
+          0x12b1a => "*ist DL",
+          0x12b24 => "Optio S60",
+          0x12b2e => "Optio S45",
+          0x12b38 => "Optio S6",
+          0x12b4c => "Optio WPi",
+          0x12b56 => "BenQ DC X600",
+          0x12b60 => "*ist DS2",
+          0x12b62 => "Samsung GX-1S",
+          0x12b6a => "Optio A10",
+          0x12b7e => "*ist DL2",
+          0x12b80 => "Samsung GX-1L",
+          0x12b9c => "K100D",
+          0x12b9d => "K110D",
+          0x12ba2 => "K100D Super",
+          0x12bb0 => "Optio T10",
+          0x12be2 => "Optio W10",
+          0x12bf6 => "Optio M10",
+          0x12c1e => "K10D",
+          0x12c20 => "Samsung GX10",
+          0x12c28 => "Optio S7",
+          0x12c2d => "Optio L20",
+          0x12c32 => "Optio M20",
+          0x12c3c => "Optio W20",
+          0x12c46 => "Optio A20",
+          0x12c8c => "Optio M30",
+          0x12c78 => "Optio E30",
+          0x12c7d => "Optio E35",
+          0x12c82 => "Optio T30",
+          0x12c96 => "Optio W30",
+          0x12ca0 => "Optio A30",
+          0x12cb4 => "Optio E40",
+          0x12cbe => "Optio M40",
+          0x12cc8 => "Optio Z10",
+          0x12cdc => "Optio S10",
+          0x12ce6 => "Optio A40",
+          0x12cf0 => "Optio V10",
+          0x12cd2 => "K20D",
+          0x12cdc => "Optio S10",
+          0x12ce6 => "Optio A40",
+          0x12cf0 => "Optio V10",
+          0x12cfa => "K200D",
+          0x12d04 => "Optio S12", //from exiftool
+          0x12d0e => "Optio E50",
+          0x12d18 => "Optio M50",
+          0x12d2c => "Optio V20", //from exiftool
+          0x12d40 => "Optio W60", //from exiftool
+          0x12d4a => "Optio M60", //from exiftool
+          0x12d68 => "Optio E60", //from exiftool
+          0x12d72 => "K2000", //from exiftool
+          0x12d73 => "K-m", //from exiftool
+          0x12d86 => "Optio P70", //from exiftool
+          0x12d9a => "Optio E70", //from exiftool
+          0x12dae => "X70", //from exiftool
+          0x12db8 => "K-7", //from exiftool
+          0x12dcc => "Optio W80", //from exiftool
+          0x12dea => "Optio P80", //from exiftool
+          0x12df4 => "Optio WS80", //from exiftool
+          0x12dfe => "K-x", //from exiftool
+            )
+      ), // < CameraModel
+
+      // Quality, tag 0x0008
+      0x0008 => Array(
+        'tagName'     => "Quality",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Good",
+          1 => "Better",
+          2 => "Best",
+          3 => "TIFF",
+          4 => "RAW",
+          5 => "Premium"
+        )
+      ), // < Quality
+
+
+      // Size, tag 0x0009
+      0x0009 => Array(
+        'tagName'     => "Size",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "640x480",
+          1 => "Full",
+          2 => "1024x768",
+          3 => "1280x960",
+          4 => "1600x1200",
+          5 => "2048x1536",
+          8 => "2560x1920 or 2304x1728",
+          9 => "3072x2304",
+          10 => "3264x2448",
+          19 => "320x240",
+          20 => "2288x1712",
+          21 => "2592x1944",
+          22 => "2304x1728 or 2592x1944",
+          23 => "3056x2296",
+          25 => "2816x2212 or 2816x2112",
+          27 => "3648x2736",
+          29 => "4000x3000",
+          0x00
+
+        )
+      ), // < Size
+
+      // PictureMode, tag 0x000b, from exiftool
+      0x000b => Array(
+        'tagName'     => "PictureMode",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0  => "Program",
+          1  => "Shutter Speed Priority",
+          2  => "Program AE",
+          3  => "Manual",
+          5  => "Portrait",
+          6  => "Landscape",
+          8  => "Sport",
+          9  => "Night Scene",
+          11 => "Soft",
+          12 => "Surf & Snow",
+          13 => "Candlelight",
+          14 => "Autumn",
+          15 => "Macro",
+          17 => "Fireworks",
+          18 => "Text",
+          19 => "Panorama",
+          30 => "Self Portrait",
+          31 => "Illustrations",
+          33 => "Digital Filter",
+          35 => "Night Scene Portrait",
+          37 => "Museum",
+          38 => "Food",
+          39 => "Underwater",
+          40 => "Green Mode",
+          49 => "Light Pet",
+          50 => "Dark Pet",
+          51 => "Medium Pet",
+          53 => "Underwater",
+          54 => "Candlelight",
+          55 => "Natural Skin Tone",
+          56 => "Synchro Sound Record",
+          58 => "Frame Composite",
+          59 => "Report",
+          60 => "Kids",
+          61 => "Blur Reduction",
+          65 => "Half-length Portrait",
+          255=> "Digital Filter?",
+        )
+      ),
+
+      // Flash, tag 0x000c
+      0x000c => Array(
+        'tagName'     => "Flash",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special'   => Array(
+          Array(
+            0x000 => "Auto, Did not fire",
+            0x001 => "Off, Did not fire",
+            0x002 => "On, Did not fire", //from exiftool
+            0x003 => "Auto, Did not fire, Red-eye reduction",
+            0x100 => "Auto, Fired",
+            0x102 => "On, Fired",
+            0x103 => "Auto, Fired, Red-eye reduction",
+            0x104 => "On, Red-eye reduction",
+            0x105 => "On, Wireless (Master)", // from exiftool
+            0x106 => "On, Wireless (Control)", // from exiftool
+            0x108 => "On, Soft",
+            0x109 => "On, Slow-sync",
+            0x10a => "On, Slow-sync, Red-eye reduction",
+            0x10b => "On, Trailing-curtain Sync"
+          ),
+          Array( //from exiftool
+            0x0000 => "n/a - Off-Auto-Aperture",
+            0x003f => "Internal",
+            0x0100 => "External, Auto",
+            0x023f => "External, Flash Problem",
+            0x0300 => "External, Manual",
+            0x0304 => "External, P-TTL Auto",
+            0x0305 => "External, Contrast-control Sync",
+            0x0306 => "External, High-speed Sync",
+            0x030c => "External, Wireless",
+            0x030d => "External, Wireless, High-speed Sync"
+          )
+        )
+      ), // < Flash
+
+      // Focus, tag 0x000d
+      0x000d => Array(
+        'tagName'     => "Focus",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Normal",
+          1 => "Macro",
+          2 => "Infinity",
+          3 => "Manual",
+          4 => "Super Macro", // from exiftool
+          5 => "Pan Focus",
+          16 => "AF-S",
+          17 => "AF-C",
+          18 => "AF-A", // from exiftool
+        )
+      ), // < Focus
+
+      // AFPoint, tag 0x000e
+      0x000e => Array(
+        'tagName'     => "AFPoint",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0xffff => "Auto",
+          0xfffe => "Fixed Center",
+          0xfffd => "Automatic Tracking AF", //from exiftool
+          0xfffc => "Face Recognition AF", //from exiftool
+          1 => "Upper-left",
+          2 => "Top",
+          3 => "Upper-right",
+          4 => "Left",
+          5 => "Mid-left",
+          6 => "Center",
+          7 => "Mid-right",
+          8 => "Right",
+          9 => "Lower-left",
+          10 => "Bottom",
+          11 => "Lower-right"
+        )
+      ), // < AFPoint
+
+      // AFPointsInFocus, tag 0x000f, from exiftool
+      0x000f => Array(
+        'tagName'     => "AFPointsInFocus",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0xffff => "None",
+          0 => "Fixed Center or Multiple",
+          1 => "Top-left",
+          2 => "Top-center",
+          3 => "Top-right",
+          4 => "Left",
+          5 => "Center",
+          6 => "Right",
+          7 => "Bottom-left",
+          8 => "Bottom-center",
+          9 => "Bottom-right",
+        )
+      ),
+
+      // ISO, tag 0x0014
+      0x0014 => Array(
+        'tagName'     => "ISO",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          3 => "50",
+          4 => "64",
+          5 => "80",
+          6 => "100",
+          7 => "125",
+          8 => "160",
+          9 => "200",
+          10 => "250",
+          11 => "320",
+          12 => "400",
+          13 => "500",
+          14 => "640",
+          15 => "800",
+          16 => "1000",
+          17 => "1250",
+          18 => "1600",
+          19 => "2000", //from exiftool
+          20 => "2500", //from exiftool
+          21 => "3200",
+          22 => "4000", //from exiftool
+          23 => "5000", //from exiftool
+          24 => "6400", //from exiftool
+
+          50 => "50",
+          100 => "100",
+          200 => "200",
+          258 => "50", //from exiftool
+          259 => "70", //from exiftool
+          260 => "100", //from exiftool
+          261 => "140", //from exiftool
+          262 => "200", //from exiftool
+          263 => "280", //from exiftool
+          264 => "400", //from exiftool
+          265 => "560", //from exiftool
+          266 => "800", //from exiftool
+          267 => "1100", //from exiftool
+          268 => "1600", //from exiftool
+          269 => "2200", //from exiftool
+          270 => "3200", //from exiftool
+          400 => "400",
+          800 => "800",
+          1600 => "1600",
+          3200 => "3200",
+        )
+      ), // < ISO
+
+      // MeteringMode, tag 0x0017
+      0x0017 => Array(
+        'tagName'     => "MeteringMode",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Multi Segment",
+          1 => "Center Weighted",
+          2 => "Spot"
+        )
+      ), // < MeteringMode
+
+      // WhiteBallance, tag 0x0019
+      0x0019 => Array(
+        'tagName'     => "WhiteBallance",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Auto",
+          1 => "Daylight",
+          2 => "Shade",
+          3 => "Fluorescent",
+          4 => "Tungsten",
+          5 => "Manual",
+          6 => "DaylightFluorescent",
+          7 => "DaywhiteFluorescent",
+          8 => "WhiteFluorescent",
+          9 => "Flash",
+          10 => "Cloudy",
+          17 => "Kelvin", //from exiftool
+          65534 => "Unknown",
+          65535 => "User Selected"
+        )
+      ), // < WhiteBallance
+
+      // WhiteBallanceMode, tag 0x001a
+      0x001a => Array(
+        'tagName'     => "WhiteBallanceMode",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          1 => "Auto (Daylight)",
+          2 => "Auto (Shade)",
+          3 => "Auto (Flash)",
+          4 => "Auto (Tungsten)",
+          6 => "Auto (DaylightFluorescent)", // rom exiftool
+          7 => "Auto (DaywhiteFluorescent)",
+          8 => "Auto (WhiteFluorescent)",
+          10 => "Auto (Cloudy)",
+          0xffff => "User-Selected",
+          0xfffe => "Preset (Fireworks?)"
+        )
+      ), // < < WhiteBallanceMode
+
+      // Saturation, tag 0x001f
+      0x001f => Array(
+        'tagName'     => "Saturation",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Low",
+          1 => "Normal",
+          2 => "High",
+          3 => "Med Low",
+          4 => "Med High",
+          5 => "Very Low",
+          6 => "Very High",
+          65535 => "None", //from exiftool
+        )
+      ), // < Saturation
+
+      // Contrast, tag 0x0020
+      0x0020 => Array(
+        'tagName'     => "Contrast",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Low",
+          1 => "Normal",
+          2 => "High",
+          3 => "Med Low",
+          4 => "Med High",
+          5 => "Very Low",
+          6 => "Very High"
+        )
+      ), // < Contrast
+
+      // Sharpness, tag 0x0021
+      0x0021 => Array(
+        'tagName'     => "Sharpness",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Soft",
+          1 => "Normal",
+          2 => "Hard",
+          3 => "Med Soft",
+          4 => "Med Hard",
+          5 => "Very Soft",
+          6 => "Very Hard"
+        )
+      ), // < Sharpness
+
+      // WorldTimeLocation, tag 0x0022
+      0x0022 => Array(
+        'tagName'     => "WorldTimeLocation",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Home town",
+          1 => "Destination"
+        )
+      ), // < Location
+
+      // HomeCityName, tag 0x0023
+      0x0023 => Array(
+        'tagName'     => "HomeCityName",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Pago Pago",
+          1 => "Honolulu",
+          2 => "Anchorage",
+          3 => "Vancouver",
+          4 => "San Fransisco",
+          5 => "Los Angeles",
+          6 => "Calgary",
+          7 => "Denver",
+          8 => "Mexico City",
+          9 => "Chicago",
+          10 => "Miami",
+          11 => "Toronto",
+          12 => "New York",
+          13 => "Santiago",
+          14 => "Caracus",
+          15 => "Halifax",
+          16 => "Buenos Aires",
+          17 => "Sao Paulo",
+          18 => "Rio de Janeiro",
+          19 => "Madrid",
+          20 => "London",
+          21 => "Paris",
+          22 => "Milan",
+          23 => "Rome",
+          24 => "Berlin",
+          25 => "Johannesburg",
+          26 => "Istanbul",
+          27 => "Cairo",
+          28 => "Jerusalem",
+          29 => "Moscow",
+          30 => "Jeddah",
+          31 => "Tehran",
+          32 => "Dubai",
+          33 => "Karachi",
+          34 => "Kabul",
+          35 => "Male",
+          36 => "Delhi",
+          37 => "Colombo",
+          38 => "Kathmandu",
+          39 => "Dacca",
+          40 => "Yangon",
+          41 => "Bangkok",
+          42 => "Kuala Lumpur",
+          43 => "Vientiane",
+          44 => "Singapore",
+          45 => "Phnom Penh",
+          46 => "Ho Chi Minh",
+          47 => "Jakarta",
+          48 => "Hong Kong",
+          49 => "Perth",
+          50 => "Beijing",
+          51 => "Shanghai",
+          52 => "Manila",
+          53 => "Taipei",
+          54 => "Seoul",
+          55 => "Adelaide",
+          56 => "Tokyo",
+          57 => "Guam",
+          58 => "Sydney",
+          59 => "Noumea",
+          60 => "Wellington",
+          61 => "Auckland",
+          62 => "Lima",
+          63 => "Dakar",
+          64 => "Algiers",
+          65 => "Helsinki",
+          66 => "Athens",
+          67 => "Nairobi",
+          68 => "Amsterdam",
+          69 => "Stockholm",
+          70 => "Lisbon",
+          71 => "Copenhagen", // from exiftool
+        )
+      ), // < City names
+
+      // DestinationCityName, tag 0x0024
+      0x0024 => Array(
+        'tagName'     => "DestinationCityName",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Pago Pago",
+          1 => "Honolulu",
+          2 => "Anchorage",
+          3 => "Vancouver",
+          4 => "San Fransisco",
+          5 => "Los Angeles",
+          6 => "Calgary",
+          7 => "Denver",
+          8 => "Mexico City",
+          9 => "Chicago",
+          10 => "Miami",
+          11 => "Toronto",
+          12 => "New York",
+          13 => "Santiago",
+          14 => "Caracus",
+          15 => "Halifax",
+          16 => "Buenos Aires",
+          17 => "Sao Paulo",
+          18 => "Rio de Janeiro",
+          19 => "Madrid",
+          20 => "London",
+          21 => "Paris",
+          22 => "Milan",
+          23 => "Rome",
+          24 => "Berlin",
+          25 => "Johannesburg",
+          26 => "Istanbul",
+          27 => "Cairo",
+          28 => "Jerusalem",
+          29 => "Moscow",
+          30 => "Jeddah",
+          31 => "Tehran",
+          32 => "Dubai",
+          33 => "Karachi",
+          34 => "Kabul",
+          35 => "Male",
+          36 => "Delhi",
+          37 => "Colombo",
+          38 => "Kathmandu",
+          39 => "Dacca",
+          40 => "Yangon",
+          41 => "Bangkok",
+          42 => "Kuala Lumpur",
+          43 => "Vientiane",
+          44 => "Singapore",
+          45 => "Phnom Penh",
+          46 => "Ho Chi Minh",
+          47 => "Jakarta",
+          48 => "Hong Kong",
+          49 => "Perth",
+          50 => "Beijing",
+          51 => "Shanghai",
+          52 => "Manila",
+          53 => "Taipei",
+          54 => "Seoul",
+          55 => "Adelaide",
+          56 => "Tokyo",
+          57 => "Guam",
+          58 => "Sydney",
+          59 => "Noumea",
+          60 => "Wellington",
+          61 => "Auckland",
+          62 => "Lima",
+          63 => "Dakar",
+          64 => "Algiers",
+          65 => "Helsinki",
+          66 => "Athens",
+          67 => "Nairobi",
+          68 => "Amsterdam",
+          69 => "Stockholm",
+          70 => "Lisbon",
+          71 => "Copenhagen", // from exiftool
+        )
+      ), // < City names
+
+
+      // ImageProcessing, tag 0x0032, combi-tag 4 bytes
+      0x0032 => Array(
+        'tagName'     => "ImageProcessing",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 4,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00000000 => "Unprocessed",
+          0x00000004 => "Digital Filter",
+          0x02000000 => "Cropped",
+          0x04000000 => "Color Filter",
+          0x10000000 => "Frame Synthesis?"
+        )
+      ), // < ImageProcessing
+
+
+      // PictureMode, tag 0x0033, combi-tag 3 bytes
+      0x0033 => Array(
+        'tagName'     => "PictureMode",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 3,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x000000 => "Program",
+          0x000100 => "Hi-speed Program", // from exiftool
+          0x000200 => "DOF Program", // from exiftool
+          0x000300 => "MTF Program",
+          0x000400 => "Standard",
+          0x000500 => "Portrait",
+          0x000600 => "Landscape",
+          0x000700 => "Macro",
+          0x000800 => "Sport",
+          0x000900 => "Night Scene Portrait",
+          0x000a00 => "No Flash",
+        /* SCN modes (menu-selected) */
+          0x000b00 => "Night Scene",
+          0x000c00 => "Surf & Snow",
+          0x000d00 => "Text",
+          0x000e00 => "Sunset",
+          0x000f00 => "Kids",
+          0x001000 => "Pet",
+          0x001100 => "Candlelight",
+          0x001200 => "Museum",
+          0x001300 => "Food", //from exiftool
+          0x001400 => "Stage Lighting", //from exiftool
+          0x001500 => "Night Snap", //from exiftool
+        /* AUTO PICT modes (auto-selected) */
+          0x010400 => "Auto PICT (Standard)",
+          0x010500 => "Auto PICT (Portrait)",
+          0x010600 => "Auto PICT (Landscape)",
+          0x010700 => "Auto PICT (Macro)",
+          0x010800 => "Auto PICT (Sport)",
+        /* Manual dial modes */
+          0x020000 => "Program AE",
+          0x030000 => "Green Mode",
+          0x040000 => "Shutter Speed Priority",
+          0x050000 => "Aperture Priority",
+          0x080000 => "Manual",
+          0x090000 => "Bulb",
+        /* *istD modes */
+          0x020001 => "Program AE",
+          0x020101 => "Hi-speed Program",
+          0x020201 => "DOF Program",
+          0x020301 => "MTF Program",
+          0x030001 => "Green Mode",
+          0x040001 => "Shutter Speed Priority",
+          0x050001 => "Aperture Priority",
+          0x060001 => "Program Tv Shift",
+          0x070001 => "Program Av Shift",
+          0x080001 => "Manual",
+          0x090001 => "Bulb",
+          0x0a0001 => "Aperture Priority (Off-Auto-Aperture)",
+          0x0b0001 => "Manual (Off-Auto-Aperture)",
+          0x0c0001 => "Bulb (Off-Auto-Aperture)",
+        /* K10D modes */
+          0x060000 => "Shutter Priority",
+          0x0d0000 => "Shutter & Aperture Priority AE, 1/2 EV steps",
+          0x0d0001 => "Shutter & Aperture Priority AE, 1/3 EV steps",
+          0x0f0000 => "Sensitivity Priority AE, 1/2 EV steps",
+          0x0f0001 => "Sensitivity Priority AE, 1/3 EV steps",
+          0x100000 => "Flash X-Sync Speed AE, 1/2 EV steps",
+          0x100001 => "Flash X-Sync Speed AE, 1/3 EV steps",
+        /* K-7 , K-x */
+          0xff0000 => "Video (30 fps)", // from exiftool
+          0xff0400 => "Video (24 fps)", // from exiftool
+        /* other modes */
+          0x000001 => "Program"
+        )
+      ), // < PictureMode
+
+
+      // DriveMode, tag 0x0034, combi-tag 4 bytes
+      0x0034 => Array(
+        'tagName'     => "DriveMode",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 4,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x00000000 => "Single-frame;No timer;Shutter button;Single exposure",
+          0x01000000 => "Continuous",
+          0x02000000 => "Continuous (Hi)",
+          0x03000000 => "Burst",
+          0xff000000 => "Video", // from exiftool
+          0x00010000 => "Self-timer (12 sec)",
+          0x00020000 => "Self-timer (2 sec)",
+          0x00ff0000 => "N/A", //from exiftool (K-x ?)
+          0x00000100 => "Remote Control (3 sec)",
+          0x00000200 => "Remote Control",
+          0x00000001 => "Multiple Exposure",
+          0x000000ff => "Video" //from exiftool
+        )
+      ), // < DriveMode
+
+
+      // ColorSpace, tag 0x0037
+      0x0037 => Array(
+        'tagName'     => "ColorSpace",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "sRGB",
+          1 => "Adobe RGB"
+        )
+      ), // < ColorSpace
+
+      // LensType, tag 0x003f, combi-tag 2 bytes
+      0x003f => Array(
+        'tagName'     => "LensType",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 2,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0000 => "M-42 or No Lens",
+          0x0100 => "K,M Lens",
+          0x0200 => "A Series Lens",
+          0x0300 => "SIGMA",
+          0x0311 => "smc PENTAX-FA SOFT 85mm F2.8",
+          0x0312 => "smc PENTAX-F 1.7X AF ADAPTER",
+          0x0313 => "smc PENTAX-F 24-50mm F4",
+          0x0314 => "smc PENTAX-F 35-80mm F4-5.6",
+          0x0315 => "smc PENTAX-F 80-200mm F4.7-5.6",
+          0x0316 => "smc PENTAX-F FISH-EYE 17-28mm F3.5-4.5",
+          0x0317 => "smc PENTAX-F 100-300mm F4.5-5.6",
+          0x0318 => "smc PENTAX-F 35-135mm F3.5-4.5",
+          0x0319 => "smc PENTAX-F 35-105mm F4-5.6 or SIGMA or Tokina",
+          0x031a => "smc PENTAX-F* 250-600mm F5.6 ED[IF]",
+          0x031b => "smc PENTAX-F 28-80mm F3.5-4.5",
+          0x031c => "smc PENTAX-F 35-70mm F3.5-4.5",
+          0x031d => "PENTAX-F 28-80mm F3.5-4.5 or SIGMA AF 18-125mm F3.5-5.6 DC",
+          0x031e => "PENTAX-F 70-200mm F4-5.6",
+          0x031f => "smc PENTAX-F 70-210mm F4-5.6",
+          0x0320 => "smc PENTAX-F 50mm F1.4",
+          0x0321 => "smc PENTAX-F 50mm F1.7",
+          0x0322 => "smc PENTAX-F 135mm F2.8 [IF]",
+          0x0323 => "smc PENTAX-F 28mm F2.8",
+          0x0324 => "SIGMA 20mm F1.8 EX DG ASPHERICAL RF",
+          0x0326 => "smc PENTAX-F* 300mm F4.5 ED[IF]",
+          0x0327 => "smc PENTAX-F* 600mm F4 ED[IF]",
+          0x0328 => "smc PENTAX-F MACRO 100mm F2.8",
+          0x0329 => "smc PENTAX-F MACRO 50mm F2.8 or Sigma 50mm F2,8 MACRO",
+          0x032c => "Tamron 35-90mm F4 AF or various SIGMA models",
+          0x032e => "SIGMA APO 70-200mm F2.8 EX",
+          0x0332 => "smc PENTAX-FA 28-70mm F4 AL",
+          0x0333 => "SIGMA 28mm F1.8 EX DG ASPHERICAL MACRO",
+          0x0334 => "smc PENTAX-FA 28-200mm F3.8-5.6 AL[IF]",
+          0x0335 => "smc PENTAX-FA 28-80mm F3.5-5.6 AL",
+          0x03f7 => "smc PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED[IF]",
+          0x03f8 => "smc PENTAX-DA 12-24mm F4 ED AL[IF]",
+          0x03fa => "smc PENTAX-DA 50-200mm F4-5.6 ED",
+          0x03fb => "smc PENTAX-DA 40mm F2.8 Limited",
+          0x03fc => "smc PENTAX-DA 18-55mm F3.5-5.6 AL",
+          0x03fd => "smc PENTAX-DA 14mm F2.8 ED[IF]",
+          0x03fe => "smc PENTAX-DA 16-45mm F4 ED AL",
+          0x03ff => "SIGMA",
+          0x0401 => "smc PENTAX-FA SOFT 28mm F2.8",
+          0x0402 => "smc PENTAX-FA 80-320mm F4.5-5.6",
+          0x0403 => "smc PENTAX-FA 43mm F1.9 Limited",
+          0x0406 => "smc PENTAX-FA 35-80mm F4-5.6",
+          0x040c => "smc PENTAX-FA 50mm F1.4",
+          0x040f => "smc PENTAX-FA 28-105mm F4-5.6 [IF]",
+          0x0410 => "TAMRON AF 80-210mm F4-5.6 (178D)",
+          0x0413 => "TAMRON SP AF 90mm F2.8 (172E)",
+          0x0414 => "smc PENTAX-FA 28-80mm F3.5-5.6",
+          0x0416 => "TOKINA 28-80mm F3.5-5.6",
+          0x0417 => "smc PENTAX-FA 20-35mm F4 AL",
+          0x0418 => "smc PENTAX-FA 77mm F1.8 Limited",
+          0x0419 => "TAMRON SP AF 14mm F2.8",
+          0x041a => "smc PENTAX-FA MACRO 100mm F3.5",
+          0x041b => "TAMRON AF28-300mm F/3.5-6.3 LD Aspherical[IF] MACRO (285D)",
+          0x041c => "smc PENTAX-FA 35mm F2 AL",
+          0x041d => "TAMRON AF 28-200mm F/3.8-5.6 LD Super II MACRO (371D)",
+          0x0422 => "smc PENTAX-FA 24-90mm F3.5-4.5 AL[IF]",
+          0x0423 => "smc PENTAX-FA 100-300mm F4.7-5.8",
+          0x0424 => "TAMRON AF70-300mm F/4-5.6 LD MACRO",
+          0x0425 => "TAMRON SP AF 24-135mm F3.5-5.6 AD AL (190D)",
+          0x0426 => "smc PENTAX-FA 28-105mm F3.2-4.5 AL[IF]",
+          0x0427 => "smc PENTAX-FA 31mm F1.8AL Limited",
+          0x0429 => "TAMRON AF 28-200mm Super Zoom F3.8-5.6 Aspherical XR [IF] MACRO (A03)",
+          0x042b => "smc PENTAX-FA 28-90mm F3.5-5.6",
+          0x042c => "smc PENTAX-FA J 75-300mm F4.5-5.8 AL",
+          0x042d => "TAMRON 28-300mm F3.5-6.3 Ultra zoom XR",
+          0x042e => "smc PENTAX-FA J 28-80mm F3.5-5.6 AL",
+          0x042f => "smc PENTAX-FA J 18-35mm F4-5.6 AL",
+          0x0431 => "TAMRON SP AF 28-75mm F2.8 XR Di (A09)",
+          0x0433 => "smc PENTAX-D FA 50mm F2.8 MACRO",
+          0x0434 => "smc PENTAX-D FA 100mm F2.8 MACRO",
+          0x044b => "Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)", // from exiftool
+          0x04e5 => "smc PENTAX-DA 18-55mm F3.5-5.6 AL II", // from exiftool
+          0x04e6 => "Tamron SP AF 17-50mm F2.8 XR Di II", // from exiftool
+          0x04e7 => "smc PENTAX-DA 18-250mm F3.5-6.3 ED AL [IF]", // from exiftool
+          0x04ed => "Samsung/Schneider D-XENOGON 10-17mm F3.5-4.5", // from exiftool
+          0x04ef => "Samsung D-XENON 12-24mm F4 ED AL [IF]", // from exiftool
+          0x04f3 => "smc PENTAX-DA 70mm F2.4 Limited", // from exiftool
+          0x04f4 => "smc PENTAX-DA 21mm F3.2 AL Limited",
+          0x04f5 => "Schneider D-XENON 50-200mm",
+          0x04f6 => "Schneider D-XENON 18-55mm",
+          0x04f7 => "smc PENTAX-DA 10-17mm F3.5-4.5 ED [IF] Fisheye zoom",
+          0x04f8 => "smc PENTAX-DA 12-24mm F4 ED AL [IF]",
+          0x04f9 => "TAMRON XR DiII 18-200mm F3.5-6.3 (A14)",
+          0x04fa => "smc PENTAX-DA 50-200mm F4-5.6 ED",
+          0x04fb => "smc PENTAX-DA 40mm F2.8 Limited",
+          0x04fc => "smc PENTAX-DA 18-55mm F3.5-5.6 AL",
+          0x04fd => "smc PENTAX-DA 14mm F2.8 ED[IF]",
+          0x04fe => "smc PENTAX-DA 16-45mm F4 ED AL",
+          0x0501 => "smc PENTAX-FA* 24mm F2 AL[IF]",
+          0x0502 => "smc PENTAX-FA 28mm F2.8 AL",
+          0x0503 => "smc PENTAX-FA 50mm F1.7",
+          0x0504 => "smc PENTAX-FA 50mm F1.4",
+          0x0505 => "smc PENTAX-FA* 600mm F4 ED[IF]",
+          0x0506 => "smc PENTAX-FA* 300mm F4.5 ED[IF]",
+          0x0507 => "smc PENTAX-FA 135mm F2.8 [IF]",
+          0x0508 => "smc PENTAX-FA MACRO 50mm F2.8",
+          0x0509 => "smc PENTAX-FA MACRO 100mm F2.8",
+          0x050a => "smc PENTAX-FA* 85mm F1.4 [IF]",
+          0x050b => "smc PENTAX-FA* 200mm F2.8 ED[IF]",
+          0x050c => "smc PENTAX-FA 28-80mm F3.5-4.7",
+          0x050d => "smc PENTAX-FA 70-200mm F4-5.6",
+          0x050e => "smc PENTAX-FA* 250-600mm F5.6 ED[IF]",
+          0x050f => "smc PENTAX-FA 28-105mm F4-5.6",
+          0x0510 => "smc PENTAX-FA 100-300mm F4.5-5.6",
+          0x0562 => "smc PENTAX-FA 100-300mm F4.5-5.6", //from exiftool
+          0x0601 => "smc PENTAX-FA* 85mm F1.4[IF]",
+          0x0602 => "smc PENTAX-FA* 200mm F2.8 ED[IF]",
+          0x0603 => "smc PENTAX-FA* 300mm F2.8 ED[IF]",
+          0x0604 => "smc PENTAX-FA* 28-70mm F2.8 AL",
+          0x0605 => "smc PENTAX-FA* 80-200mm F2.8 ED[IF]",
+          0x0606 => "smc PENTAX-FA* 28-70mm F2.8 AL",
+          0x0607 => "smc PENTAX-FA* 80-200mm F2.8 ED[IF]",
+          0x0608 => "smc PENTAX-FA 28-70mm F4AL",
+          0x0609 => "smc PENTAX-FA 20mm F2.8",
+          0x060a => "smc PENTAX-FA* 400mm F5.6 ED[IF]",
+          0x060d => "smc PENTAX-FA* 400mm F5.6 ED[IF]",
+          0x060e => "smc PENTAX-FA* MACRO 200mm F4 ED[IF]",
+          0x0700 => "smc PENTAX-DA 21mm F3.2 AL Limited",
+          0x073d => "Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)", //from exiftool
+          0x07d9 => "smc PENTAX-DA 50-200mm F4-5.6 ED WR", //from exiftool
+          0x07da => "smc PENTAX-DA 18-55mm F3.5-5.6 AL WR", //from exiftool
+          0x07dc => "Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical [IF]", // from exiftool
+          0x07dd => "smc PENTAX-DA 50-200mm F4-5.6 ED", // from LucMorizur
+          0x07de => "smc PENTAX-DA 18-55mm F3.5-5.6 AL II", //from exiftool
+          0x07df => "Samsung D-XENON 18-55mm F3.5-5.6 II", //from exiftool
+          0x07e0 => "smc PENTAX-DA 15mm F4 ED AL Limited", //from exiftool
+          0x07e1 => "Samsung D-XENON 18-250mm F3.5-6.3", //from exiftool
+          0x07e5 => "smc PENTAX-DA 18-55mm F3.5-5.6 AL II",
+          0x07e6 => "Tamron AF 17-50mm F2.8 XR Di-II LD (Model A16)",
+          0x07e7 => "smc PENTAX-DA 18-250mm F3.5-6.3ED AL [IF]",
+          0x07e9 => "smc PENTAX-DA 35mm F2.8 Macro Limited",
+          0x07ea => "smc PENTAX-DA* 300 mm F4ED [IF] SDM (SDM not used)",
+          0x07eb => "smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM not used)",
+          0x07ec => "smc PENTAX-DA 55-300mm F4-5.8 ED", //from exiftool
+          0x07ee => "TAMRON AF 18-250mm F3.5-6.3 Di II LD Aspherical [IF] MACRO",
+          0x07f1 => "smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM not used)",
+          0x07f2 => "smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM not used)",
+          0x07f3 => "smc PENTAX-DA 70mm F2.4 Limited",
+          0x07f4 => "smc PENTAX-DA 21mm F3.2 AL Limited",
+          0x08e2 => "smc PENTAX-DA* 55mm F1.4 SDM", //from exiftool
+          0x08e3 => "smc PENTAX DA* 60-250mm F4 [IF] SDM", //from exiftool
+          0x08e8 => "smc PENTAX-DA 17-70mm F4 AL [IF] SDM", //from exiftool
+          0x08ea => "smc PENTAX-DA* 300 mm F4ED [IF] SDM",
+          0x08eb => "smc PENTAX-DA* 200mm F2.8 ED [IF] SDM",
+          0x08f1 => "smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM",
+          0x08f2 => "smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM",
+          0x08ff => "Sigma lens" //from exiftool
+        )
+      ), // < LensType
+
+
+      // ImageTone, tag 0x004f
+      0x004f => Array(
+        'tagName'     => "ImageTone",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Natural",
+          1 => "Bright",
+          2 => "Portrait",
+          3 => "Landscape",
+          4 => "Vibrant",
+          5 => "Monochrome"
+        )
+      ), // < ImageTone
+
+
+      // DynamicRangeExpansion, tag 0x0069
+      0x0069 => Array(
+        'tagName'     => "DynamicRangeExpansion",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 4,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0x0000000 => "Off",
+          0x1000000 => "On"
+        )
+      ), // < DynamicRangeExpansion
+
+
+      // HighISONoiseReduction, tag 0x0071
+      0x0071 => Array(
+        'tagName'     => "HighISONoiseReduction",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues'   => Array(
+          0 => "Off",
+          1 => "Weakest",
+          2 => "Weak",
+          3 => "Strong"
+        )
+      ), // < HighISONoiseReduction
+
+
+      /*
+       * tags with special values
+       */
+
+      // Version, tag 0x0000, "Pentax Makernote version"
+      0x0000 => Array(
+        'tagName'     => "Version",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // PreviewResolution, tag 0x0002, "Resolution of a preview image"
+      0x0002 => Array(
+        'tagName'     => "PreviewResolution",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // PreviewLength, tag 0x0003, "Size of an IFD containing a preview image"
+      0x0003 => Array(
+        'tagName'     => "PreviewLength",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // PreviewOffset, tag 0x0004, "Offset to an IFD containing a preview image"
+      0x0004 => Array(
+        'tagName'     => "PreviewOffset",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // Date, tag 0x0006
+      0x0006 => Array(
+        'tagName'     => "Date",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // Date, tag 0x0007
+      0x0007 => Array(
+        'tagName'     => "Time",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // FocusPosition, tag 0x0010, from exiftool, "related to focus distance but affected by focal length"
+      0x0010 => Array(
+        'tagName'     => "FocusPosition",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ExposureTime, tag 0x0012, "Exposure time"
+      0x0012 => Array(
+        'tagName'     => "ExposureTime",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // FNumber, tag 0x0013, "F-Number"
+      0x0013 => Array(
+        'tagName'     => "FNumber",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // LightReading, tag 0x0015, from exiftool
+      0x0015 => Array(
+        'tagName'     => "LightReading",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+
+      // ExposureCompensation, tag 0x0016, "Exposure compensation"
+      0x0016 => Array(
+        'tagName'     => "ExposureCompensation",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // AutoBracketing, tag 0x0018, "AutoBracketing"
+      0x0018 => Array(
+        'tagName'     => "AutoBracketing",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // BlueBalance, tag 0x001b, "BlueBalance", from exiftool
+      0x001b => Array(
+        'tagName'     => "BlueBalance",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // RedBalance, tag 0x001c, "RedBalance"
+      0x001c => Array(
+        'tagName'     => "RedBalance",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // FocalLength, tag 0x001d, "FocalLength"
+      0x001d => Array(
+        'tagName'     => "FocalLength",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // DigitalZoom, tag 0x001e, "DigitalZoom", from exiftool
+      0x001e => Array(
+        'tagName'     => "DigitalZoom",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+
+      // HometownDST, tag 0x0025, "Whether day saving time is active in home town"
+      0x0025 => Array(
+        'tagName'     => "HometownDST",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // DestinationDST, tag 0x0026, "Whether day saving time is active in destination"
+      0x0026 => Array(
+        'tagName'     => "DestinationDST",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // DSPFirmwareVersion, tag 0x0027, "DSPFirmwareVersion"
+      0x0027 => Array(
+        'tagName'     => "DSPFirmwareVersion",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // CPUFirmwareVersion, tag 0x0028, "CPUFirmwareVersion"
+      0x0028 => Array(
+        'tagName'     => "CPUFirmwareVersion",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // FrameNumber, tag 0x0029, "FrameNumber"
+      0x0029 => Array(
+        'tagName'     => "FrameNumber",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // EffectiveLV, tag 0x002d, "Camera calculated light value, includes exposure compensation"
+      0x002d => Array(
+        'tagName'     => "EffectiveLV",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // ImageAreaOffset, tag 0x0038, "ImageAreaOffset"
+      0x0038 => Array(
+        'tagName'     => "ImageAreaOffset",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // RawImageSize, tag 0x0039, "RawImageSize"
+      0x0039 => Array(
+        'tagName'     => "RawImageSize",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // AFPointsInFocus, tag 0x003e, "AFPointsInFocus"
+      0x003c => Array(
+        'tagName'     => "AFPointsInFocus",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // PreviewImageBorders, tag 0x003e, "'top, bottom, left, right'"
+      0x003e => Array(
+        'tagName'     => "PreviewImageBorders",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // SensitivityAdjust, tag 0x0040, "SensitivityAdjust"
+      0x0040 => Array(
+        'tagName'     => "SensitivityAdjust",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // DigitalFilter, tag 0x0041, "Digital filter"
+      0x0041 => Array(
+        'tagName'     => "DigitalFilter",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // Temperature, tag 0x0047, "Camera temperature"
+      0x0047 => Array(
+        'tagName'     => "Temperature",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // AELock, tag 0x0048, "AELock"
+      0x0048 => Array(
+        'tagName'     => "AELock",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // NoiseReduction, tag 0x0049, "NoiseReduction"
+      0x0049 => Array(
+        'tagName'     => "NoiseReduction",
+        'group' => Array("Pentax"),
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // FlashExposureCompensation, tag 0x004d, "FlashExposureCompensation"
+      0x004d => Array(
+        'tagName'     => "FlashExposureCompensation",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // ColorTemperature, tag 0x0050, "ColorTemperature"
+      0x0050 => Array(
+        'tagName'     => "ColorTemperature",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => true
+      ),
+
+      // ShakeReduction, tag 0x005c, "ShakeReduction"
+      0x005c => Array(
+        'tagName'     => "ShakeReduction",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ShutterCount, tag 0x005d, "ShutterCount"
+      0x005d => Array(
+        'tagName'     => "ShutterCount",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // AFAdjustment, tag 0x0072, "AFAdjustment", from exiftool
+      0x0072 => Array(
+        'tagName'     => "AFAdjustment",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+
+      // BlackPoint, tag 0x0200, "BlackPoint"
+      0x0200 => Array(
+        'tagName'     => "BlackPoint",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WhitePoint, tag 0x0201, "WhitePoint"
+      0x0201 => Array(
+        'tagName'     => "WhitePoint",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ColorMatrixA, tag 0x0203, "ColorMatrixA" //from exiftool
+      0x0203 => Array(
+        'tagName'     => "ColorMatrixA",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ColorMatrixB, tag 0x0204, "ColorMatrixB" //from exiftool
+      0x0204 => Array(
+        'tagName'     => "ColorMatrixB",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ShotInfo, tag 0x0205, "ShotInfo"
+      0x0205 => Array(
+        'tagName'     => "ShotInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // AEInfo, tag 0x0206, "AEInfo"
+      0x0206 => Array(
+        'tagName'     => "AEInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // AEInfo, tag 0x0207, "LensInfo"
+      0x0207 => Array(
+        'tagName'     => "LensInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // FlashInfo, tag 0x0208, "FlashInfo"
+      0x0208 => Array(
+        'tagName'     => "FlashInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // FlashInfo, tag 0x0209, "AEMeteringSegments"
+      0x0209 => Array(
+        'tagName'     => "AEMeteringSegments",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // FlashADump, tag 0x020a, "FlashADump"
+      0x020a => Array(
+        'tagName'     => "FlashADump",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // FlashBDump, tag 0x020b, "FlashBDump"
+      0x020b => Array(
+        'tagName'     => "FlashBDump",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsDaylight, tag 0x020d, "WB_RGGBLevelsDaylight"
+      0x020d => Array(
+        'tagName'     => "WB_RGGBLevelsDaylight",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsShade, tag 0x020e, "WB_RGGBLevelsShade"
+      0x020e => Array(
+        'tagName'     => "WB_RGGBLevelsShade",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsCloudy, tag 0x020f, "WB_RGGBLevelsCloudy"
+      0x020f => Array(
+        'tagName'     => "WB_RGGBLevelsCloudy",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsTungsten, tag 0x0210, "WB_RGGBLevelsTungsten"
+      0x0210 => Array(
+        'tagName'     => "WB_RGGBLevelsTungsten",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsFluorescentD, tag 0x0211, "WB_RGGBLevelsFluorescentD"
+      0x0211 => Array(
+        'tagName'     => "WB_RGGBLevelsFluorescentD",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsFluorescentN, tag 0x0212, "WB_RGGBLevelsFluorescentN"
+      0x0212 => Array(
+        'tagName'     => "WB_RGGBLevelsFluorescentN",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsFluorescentW, tag 0x0213, "WB_RGGBLevelsFluorescentW"
+      0x0213 => Array(
+        'tagName'     => "WB_RGGBLevelsFluorescentW",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // WB_RGGBLevelsFlash, tag 0x0214, "WB_RGGBLevelsFlash"
+      0x0214 => Array(
+        'tagName'     => "WB_RGGBLevelsFlash",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // CameraInfo, tag 0x0215, "CameraInfo"
+      0x0215 => Array(
+        'tagName'     => "CameraInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // BatteryInfo, tag 0x0216, "BatteryInfo"
+      0x0216 => Array(
+        'tagName'     => "BatteryInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // SaturationInfo, tag 0x021b, "SaturationInfo"
+      0x021b => Array(
+        'tagName'     => "SaturationInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // AFInfo, tag 0x021f, "AFInfo"
+      0x021f => Array(
+        'tagName'     => "AFInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // HuffmanTable, tag 0x0220, "HuffmanTable" from exiftool
+      0x0220 => Array(
+        'tagName'     => "HuffmanTable",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ColorInfo, tag 0x0222, "ColorInfo"
+      0x0222 => Array(
+        'tagName'     => "ColorInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // EVStepInfo, tag 0x0224, "EVStepInfo"
+      0x0224 => Array(
+        'tagName'     => "EVStepInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // SerialNumber, tag 0x0229, "SerialNumber"
+      0x0229 => Array(
+        'tagName'     => "SerialNumber",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // FirmwareVersion, tag 0x0230, "FirmwareVersion" from exiftool
+      0x0230 => Array(
+        'tagName'     => "FirmwareVersion",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // DataDump, tag 0x03fe, "DataDump" from exiftool
+      0x03fe => Array(
+        'tagName'     => "DataDump",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // UnknownInfo, tag 0x03ff, "UnknownInfo" from exiftool
+      0x03ff => Array(
+        'tagName'     => "UnknownInfo",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ToneCurve, tag 0x0402, "ToneCurve" from exiftool
+      0x0402 => Array(
+        'tagName'     => "ToneCurve",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // ToneCurves, tag 0x0403, "ToneCurves" from exiftool
+      0x0403 => Array(
+        'tagName'     => "ToneCurves",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+      // PrintIM, tag 0x0e00, "PrintIM" from exiftool
+      0x0e00 => Array(
+        'tagName'     => "PrintIM",
+        'group' => Array("Pentax"),
+        'translatable'=> false,
+        'combiTag'    => 0,
+        'implemented' => false
+      ),
+
+    );
+  } // PentaxTags
+
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php	(revision 4686)
@@ -0,0 +1,1854 @@
+<?php
+/*
+ * --:: JPEG MetaDatas ::-------------------------------------------------------
+ *
+ *  Author    : Grum
+ *   email    : grum at piwigo.org
+ *   website  : http://photos.grum.fr
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ *
+ *
+ * -----------------------------------------------------------------------------
+ * Known Xmp tags properties class
+ * -----------------------------------------------------------------------------
+ */
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/KnownTags.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/IfdTags.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/GpsTags.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/IptcTags.class.php");
+
+  /**
+   * Define the tags for XMP metadata
+   */
+  class XmpTags extends KnownTags
+  {
+    const TYPE_SIMPLE = 0x00;
+    const TYPE_SEQ = 0x01;
+    const TYPE_BAG = 0x02;
+    const TYPE_ALT = 0x03;
+
+    protected $label = "XMP tags";
+    protected $tags = Array(
+      'xmlns:x' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+      'x:xmptk' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "x",
+      ),
+
+
+      'xmlns:rdf' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+
+      'rdf:about' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "rdf",
+      ),
+
+      /*
+       * Dublin Core schema
+       */
+      'xmlns:dc' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+      'dc:contributor' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "dc",
+      ),
+      'dc:coverage' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "dc",
+      ),
+      'dc:creator' => Array(
+        'iptcCreator'  => 0x0250,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "dc",
+      ),
+      'dc:date' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "dc",
+      ),
+      'dc:description' => Array(
+        'iptcTag'      => 0x0278,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "dc",
+      ),
+        'dc:format' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "dc",
+      ),
+      'dc:identifier' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "dc",
+      ),
+      'dc:language' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "dc",
+      ),
+      'dc:publisher' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "dc",
+      ),
+      'dc:relation' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "dc",
+      ),
+      'dc:rights' => Array(
+        'iptcTag'      => 0x0274,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "dc",
+      ),
+      'dc:source' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "dc",
+      ),
+      'dc:subject' => Array(
+        'iptcTag'      => 0x0219,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "dc",
+      ),
+      'dc:title' => Array(
+        'iptcTag'      => 0x0205,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "dc",
+      ),
+      'dc:Type' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "dc",
+      ),
+
+      /*
+       * XMP Basic schema
+       */
+      'xmlns:xmp' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+      'xmp:Advisory' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "xmp",
+      ),
+      'xmp:BaseURL' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:CreateDate' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:CreatorTool' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:Identifier' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "xmp",
+      ),
+      'xmp:Label' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:MetadataDate' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:ModifyDate' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:Nickname' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:Rating' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmp",
+      ),
+      'xmp:Thumbnails' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "xmp",
+      ),
+
+      /*
+       * XMP Rights Management schema
+       */
+      'xmlns:xmpRights' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+      'xmpRights:Certificate' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpRights",
+      ),
+      'xmpRights:Marked' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpRights",
+      ),
+      'xmpRights:Owner' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "xmpRights",
+      ),
+      'xmpRights:UsageTerms' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "xmpRights",
+      ),
+      'xmpRights:WebStatement' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpRights",
+      ),
+
+
+      /*
+       * XMP Media Management schema
+       */
+      'xmlns:xmpMM' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+/*
+ * The DerivedFrom is a ResourceRef structure
+ * Not yet implemented
+ */
+      'xmpMM:DerivedFrom' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+
+      'xmpMM:DocumentID' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+/*
+ * The History is a sequence of ResourceEvent structure
+ * Not yet implemented
+ */
+      'xmpMM:History' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "xmpMM",
+      ),
+
+      'xmpMM:InstanceID' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+
+/*
+ * The ManagedFrom is a ResourceRef structure
+ * Not yet implemented
+ */
+      'xmpMM:ManagedFrom' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:Manager' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:ManageTo' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:ManageUI' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:ManagerVariant' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:RenditionClass' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:RenditionParams' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:VersionID' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+/*
+ * The Versions is a sequence of Version structure
+ * Not yet implemented
+ */
+      'xmpMM:Versions' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "xmpMM",
+      ),
+      'xmpMM:LastURL' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpMM",
+      ),
+
+
+      /*
+       * XMP Basic Job Ticket schema
+       */
+      'xmlns:xmpBJ' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+      'xmpBJ:JobRef' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "xmpBJ",
+      ),
+
+
+      /*
+       * XMP Paged-Text schema
+       *
+       * No implementation for this tag, assuminf they're not needed for
+       * photography
+       */
+      'xmlns:xmpTPg' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+      'xmpTPg:MaxPageSize' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpTPg",
+      ),
+      'xmpTPg:NPages' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmpTPg",
+      ),
+      'xmpTPg:Fonts' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "xmpTPg",
+      ),
+      'xmpTPg:Colorants' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "xmpTPg",
+      ),
+      'xmpTPg:PlateNames' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "xmpTPg",
+      ),
+
+      /*
+       * XMP Dynamic Media schema
+       * ==> seems to be dedicated for video's file, so don't try to implement
+       *     it at now
+       */
+      'xmlns:xmpDM' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+
+      /*
+       * Photoshop schema
+       */
+      'xmlns:photoshop' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+      'photoshop:AuthorsPosition' => Array(
+        'iptcTag'      => 0x0255,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:CaptionWriter' => Array(
+        'iptcTag'      => 0x027A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:Category' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:City' => Array(
+        'iptcTag'      => 0x025A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:Country' => Array(
+        'iptcTag'      => 0x0265,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:Credit' => Array(
+        'iptcTag'      => 0x026E,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:DateCreated' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:Headline' => Array(
+        'iptcTag'      => 0x0269,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:Instructions' => Array(
+        'iptcTag'      => 0x228,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:Source' => Array(
+        'iptctag'      => 0x0273,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:State' => Array(
+        'iptcTag'      => 0x25F,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:SupplementalCategories' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:TransmissionReference' => Array(
+        'iptcTag'      => 0x267,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+      ),
+      'photoshop:Urgency' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "photoshop",
+        'tagValues'    => Array(
+           '0' => 'none',
+           '1' => 'high+++',
+           '2' => 'high++',
+           '3' => 'high+',
+           '4' => 'high',
+           '5' => 'normal',
+           '6' => 'low',
+           '7' => 'low+',
+           '8' => 'low++',
+           '9' => 'none',
+        ),
+      ),
+
+
+      /*
+       * Camera Raw schema
+       */
+      'xmlns:crs' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+      'crs:AutoBrightness' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:AutoContrast' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:AutoExposure' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:AutoShadows' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:BlueHue' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:BlueSaturation' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Brightness' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CameraProfile' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:ChromaticAberrationB' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:ChromaticAberrationR' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:ColorNoiseReduction' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Contrast' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropTop' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropLeft' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropBottom' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropRight' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropAngle' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropWidth' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropHeight' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:CropUnits' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+        'tagValues'    => Array(
+           '0' => "pixels",
+           '1' => "inches",
+           '2' => "centimeters",
+        ),
+      ),
+      'crs:Exposure' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:GreenHue' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:GreenSaturation' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:HasCrop' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:HasSettings' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:LuminanceSmoothing' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:RawFileName' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:RedHue' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:RedSaturation' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Saturation' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Shadows' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:ShadowTint' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Sharpness' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Temperature' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Tint' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:ToneCurve' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "crs",
+      ),
+      'crs:ToneCurveName' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+        'tagValues'    => Array(
+           'Linear'          => "linear",
+           'Medium Contrast' => "Medium Contrast",
+           'Strong Contrast' => "Strong Contrast",
+           'Custom'          => "Custom",
+        ),      ),
+      'crs:Version' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:VignetteAmount' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:VignetteMidpoint' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+      ),
+      'crs:Balance' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "crs",
+        'tagValues'    => Array(
+           'As Shot'     => "As Shot",
+           'Auto'        => "Auto",
+           'Daylight'    => "Daylight",
+           'Cloudy'      => "Cloudy",
+           'Shade'       => "Shade",
+           'Tungsten'    => "Tungsten",
+           'Fluorescent' => "Fluorescent",
+           'Flash'       => "Flash",
+           'Custom'      => "Custom",
+        ),
+      ),
+
+
+
+      /*
+       * EXIF Schema for TIFF Properties
+       *
+       */
+      'xmlns:tiff' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+      'tiff:ImageWidth' => Array(
+        'exifTag'      => 0x0100,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:ImageLength' => Array(
+        'exifTag'      => 0x0101,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:BitsPerSample' => Array(
+        'exifTag'      => 0x0102,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "tiff",
+      ),
+      'tiff:Compression' => Array(
+        'exifTag'      => 0x0103,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:PhotometricInterpretation' => Array(
+        'exifTag'      => 0x0106,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:Orientation' => Array(
+        'exifTag'      => 0x0112,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:SamplesPerPixel' => Array(
+        'exifTag'      => 0x0115,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:PlanarConfiguration' => Array(
+        'exifTag'      => 0x011C,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:YCbCrSubSampling' => Array(
+        'exifTag'      => 0x0212,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "tiff",
+      ),
+      'tiff:YCbCrPositioning' => Array(
+        'exifTag'      => 0x0213,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:XResolution' => Array(
+        'exifTag'      => 0x011A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:YResolution' => Array(
+        'exifTag'      => 0x011B,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:ResolutionUnit' => Array(
+        'exifTag'      => 0x0128,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:TransferFunction' => Array(
+        'exifTag'      => 0x012D,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "tiff",
+      ),
+      'tiff:WhitePoint' => Array(
+        'exifTag'      => 0x013E,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "tiff",
+      ),
+      'tiff:PrimaryChromaticities' => Array(
+        'exifTag'      => 0x013F,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "tiff",
+      ),
+      'tiff:YCbCrCoefficients' => Array(
+        'exifTag'      => 0x0211,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "tiff",
+      ),
+      'tiff:ReferenceBlackWhite' => Array(
+        'exifTag'      => 0x0214,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "tiff",
+      ),
+      'tiff:DateTime' => Array(
+        'exifTag'      => 0x0132,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:ImageDescription' => Array(
+        'exifTag'      => 0x010E,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "tiff",
+      ),
+      'tiff:Make' => Array(
+        'exifTag'      => 0x010F,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:Model' => Array(
+        'exifTag'      => 0x0110,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:Software' => Array(
+        'exifTag'      => 0x0131,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:Artist' => Array(
+        'exifTag'      => 0x013B,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "tiff",
+      ),
+      'tiff:Copyright' => Array(
+        'exifTag'      => 0x9298,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "tiff",
+      ),
+
+      /*
+       * EXIF Schema for EXIF-specific Properties
+       */
+      'xmlns:exif' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+      'exif:ExifVersion' => Array(
+        'exifTag'      => 0x9000,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FlashpixVersion' => Array(
+        'exifTag'      => 0xA000,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ColorSpace' => Array(
+        'exifTag'      => 0xA001,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ComponentsConfiguration' => Array(
+        'exifTag'      => 0x9101,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "exif",
+      ),
+      'exif:CompressedBitsPerPixel' => Array(
+        'exifTag'      => 0x9102,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:PixelXDimension' => Array(
+        'exifTag'      => 0xA002,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:PixelYDimension' => Array(
+        'exifTag'      => 0xA003,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:UserComment' => Array(
+        'exifTag'      => 0x9286,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_ALT,
+        'schema'       => "exif",
+      ),
+      'exif:RelatedSoundFile' => Array(
+        'exifTag'      => 0xA004,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:DateTimeOriginal' => Array(
+        'exifTag'      => 0x9003,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:DateTimeDigitized' => Array(
+        'exifTag'      => 0x9004,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ExposureTime' => Array(
+        'exifTag'      => 0x829A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FNumber' => Array(
+        'exifTag'      => 0x829D,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ExposureProgram' => Array(
+        'exifTag'      => 0x8822,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SpectralSensitivity' => Array(
+        'exifTag'      => 0x8824,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ISOSpeedRatings' => Array(
+        'exifTag'      => 0x8827,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "exif",
+      ),
+      'exif:OECF' => Array(
+        'exifTag'      => 0x8828,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ShutterSpeedValue' => Array(
+        'exifTag'      => 0x9201,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ApertureValue' => Array(
+        'exifTag'      => 0x9202,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:BrightnessValue' => Array(
+        'exifTag'      => 0x9203,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ExposureBiasValue' => Array(
+        'exifTag'      => 0x9204,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:MaxApertureValue' => Array(
+        'exifTag'      => 0x9205,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SubjectDistance' => Array(
+        'exifTag'      => 0x9206,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:MeteringMode' => Array(
+        'exifTag'      => 0x9207,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:LightSource' => Array(
+        'exifTag'      => 0x9208,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+/*
+ * The Flash is a sequence of Flash structure
+ * Not yet implemented
+ */
+      'exif:Flash' => Array(
+        'exifTag'      => 0x9209,
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FocalLength' => Array(
+        'exifTag'      => 0x920A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SubjectArea' => Array(
+        'exifTag'      => 0x9214,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "exif",
+      ),
+      'exif:FlashEnergy' => Array(
+        'exifTag'      => 0xA20B,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SpatialFrequencyResponse' => Array(
+        'exifTag'      => 0xA20C,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FocalPlaneXResolution' => Array(
+        'exifTag'      => 0xA20E,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FocalPlaneYResolution' => Array(
+        'exifTag'      => 0xA20F,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FocalPlaneResolutionUnit' => Array(
+        'exifTag'      => 0xA210,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SubjectLocation' => Array(
+        'exifTag'      => 0xA214,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SEQ,
+        'schema'       => "exif",
+      ),
+      'exif:ExposureIndex' => Array(
+        'exifTag'      => 0xA215,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SensingMethod' => Array(
+        'exifTag'      => 0xA217,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FileSource' => Array(
+        'exifTag'      => 0xA300,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SceneType' => Array(
+        'exifTag'      => 0xA301,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+/*
+ * The CFAPattern is a CFAPattern structure
+ * Not yet implemented
+ */
+      'exif:CFAPattern' => Array(
+        'exifTag'      => 0xA302,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:CustomRendered' => Array(
+        'exifTag'      => 0xA401,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ExposureMode' => Array(
+        'exifTag'      => 0xA402,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:Balance' => Array(
+        'exifTag'      => 0xA403,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:DigitalZoomRatio' => Array(
+        'exifTag'      => 0xA404,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:FocalLengthIn35mmFilm' => Array(
+        'exifTag'      => 0xA405,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SceneCaptureType' => Array(
+        'exifTag'      => 0xA406,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GainControl' => Array(
+        'exifTag'      => 0xA407,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:Contrast' => Array(
+        'exifTag'      => 0xA408,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:Saturation' => Array(
+        'exifTag'      => 0xA409,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:Sharpness' => Array(
+        'exifTag'      => 0xA40A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:DeviceSettingDescription' => Array(
+        'exifTag'      => 0xA40B,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:SubjectDistanceRange' => Array(
+        'exifTag'      => 0xA40C,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:ImageUniqueID' => Array(
+        'exifTag'      => 0xA420,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSVersionID' => Array(
+        'gpsTag'       => 0x0000,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSLatitude' => Array(
+        'gpsTag'       => 0xFFFF, // combination of tags 0x02 & 0x01
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSLongitude' => Array(
+        'gpsTag'       => 0xFFFF, // combination of tags 0x04 & 0x03
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSAltitudeRef' => Array(
+        'gpsTag'       => 0x0005,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSAltitude' => Array(
+        'gpsTag'       => 0x0006,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSTimeStamp' => Array(
+        'gpsTag'       => 0xFFFF, // combination of tags 0x1D & 0x07
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSSatellites' => Array(
+        'gpsTag'       => 0x0008,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSStatus' => Array(
+        'gpsTag'       => 0x0009,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSMeasureMode' => Array(
+        'gpsTag'       => 0x000A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDOP' => Array(
+        'gpsTag'       => 0x000B,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSSpeedRef' => Array(
+        'gpsTag'       => 0x000C,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSSpeed' => Array(
+        'gpsTag'       => 0x000D,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSTrackRef' => Array(
+        'gpsTag'       => 0x000E,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSTrack' => Array(
+        'gpsTag'       => 0x000F,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSImgDirectionRef' => Array(
+        'gpsTag'       => 0x0010,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSImgDirection' => Array(
+        'gpsTag'       => 0x0011,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSMapDatum' => Array(
+        'gpsTag'       => 0x0012,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDestLatitude' => Array(
+        'gpsTag'       => 0xFFFF,  // combination of tags 0x14 & 0x13
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDestLongitude' => Array(
+        'gpsTag'       => 0xFFFF,  // combination of tags 0x16 & 0x15
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDestBearingRef' => Array(
+        'gpsTag'       => 0x0017,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDestBearing' => Array(
+        'gpsTag'       => 0x0018,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDestDistanceRef' => Array(
+        'gpsTag'       => 0x0019,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDestDistance' => Array(
+        'gpsTag'       => 0x001A,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSProcessingMethod' => Array(
+        'gpsTag'       => 0x001B,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSAreaInformation' => Array(
+        'gpsTag'       => 0x001C,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+      'exif:GPSDifferential' => Array(
+        'gpsTag'       => 0x001E,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "exif",
+      ),
+
+      /*
+       * EXIF Schema for Additional EXIF Properties
+       */
+      'xmlns:aux' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+      'aux:Lens' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "aux",
+      ),
+      'aux:SerialNumber' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "aux",
+      ),
+
+
+      /*
+       * IPTC Schema
+       */
+      'xmlns:Iptc4xmpCore' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "xmlns",
+      ),
+
+      'Iptc4xmpCore:CountryCode' => Array(
+        'iptcTag'      => 0x0264,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:IntellectualGenre' => Array(
+        'iptcTag'      => 0x0204,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:Scene' => Array(
+        'implemented'  => true,
+        'translatable' => true,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "Iptc4xmpCore",
+        'tagValues.special' => Array(
+          '012100' => "posing",
+          '012000' => "performing",
+          '011900' => "action",
+          '011800' => "close-up",
+          '011700' => "interior view",
+          '011600' => "exterior view",
+          '011500' => "satellite",
+          '011400' => "night scene",
+          '011300' => "under-water",
+          '011200' => "aerial view",
+          '011100' => "panoramic view",
+          '011000' => "general view",
+          '010800' => "two",
+          '010900' => "group",
+          '010700' => "couple",
+          '010600' => "single",
+          '010400' => "profile",
+          '010500' => "rear view",
+          '010300' => "full-length",
+          '010200' => "half-length",
+          '010100' => "headshot",
+          '012200' => "symbolic",
+          '012300' => "off-beat",
+          '012400' => "movie scene",
+        )
+      ),
+
+      'Iptc4xmpCore:SubjectCode' => Array(
+        'iptcTag'      => 0x020C,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_BAG,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:Location' => Array(
+        'iptcTag'      => 0x025C,
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:DateCreated' => Array(
+        'iptcTag'      => 0x0237,
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      /*
+       * specification says :
+       * "The IPTC Extension Licensor fields should be used instead of these
+       * Creator's Contact Info fields if you are using IPTC Extension fields.
+       * If the creator is also the licensor his or her contact information
+       * should be provided in the Licensor fields."
+       */
+      'Iptc4xmpCore:CreatorContactInfo' => Array(
+        'implemented'  => false,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:CiEmailWork' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:CiUrlWork' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:CiTelWork' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:CiAdrExtadr' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:CiAdrPcode' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:CiAdrCity' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+      'Iptc4xmpCore:CiAdrCtry' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'type'         => self::TYPE_SIMPLE,
+        'schema'       => "Iptc4xmpCore",
+      ),
+
+
+    );
+
+
+
+    function __construct()
+    {
+      parent::__construct();
+
+      $tmpTags=Array(
+        'exifTag' => new IfdTags(),
+        'gpsTag'  => new GpsTags(),
+        'iptcTag' => new IptcTags());
+      foreach($this->tags as $key => $val)
+      {
+        foreach($tmpTags as $schema => $tags)
+        {
+          if(array_key_exists($schema, $val))
+          {
+            /*
+             * for all the tags from the exif & tiff schema, try to copy properties
+             */
+            if($val[$schema]!=0xFFFF and $tags->tagIdExists($val[$schema]))
+            {
+              $tmpTag=$tags->getTagById($val[$schema]);
+            }
+            elseif($val[$schema]!=0xFFFF and $tags->tagIdExists($val[$schema]))
+            {
+              $tmpTag=$tags->getTagById($val[$schema]);
+            }
+            else
+            {
+              $tmpTag=NULL;
+            }
+
+
+            if(!is_null($tmpTag))
+            {
+              $this->tags[$key]['tagName'] = $tmpTag['tagName'];
+
+              if(array_key_exists('tagValues', $tmpTag))
+              {
+                $this->tags[$key]['tagValues'] = $tmpTag['tagValues'];
+              }
+
+              if($val['implemented'] and !$tmpTag['implemented'])
+              {
+                $this->tags[$key]['implemented'] = false;
+              }
+            }
+          }
+        }
+      }
+      unset($tmpTags[0]);
+      unset($tmpTags[1]);
+      unset($tmpTags[2]);
+    }
+
+  }
+
+
+?>
Index: /extensions/AMetaData/JpegMetaData/test/index.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/test/index.php	(revision 4686)
+++ /extensions/AMetaData/JpegMetaData/test/index.php	(revision 4686)
@@ -0,0 +1,439 @@
+<?php
+ ini_set('error_reporting', E_ALL | E_STRICT);
+ ini_set('display_errors', true);
+
+  require_once("./../JpegMetaData.class.php");
+  require_once(JPEG_METADATA_DIR."Readers/JpegReader.class.php");
+  require_once(JPEG_METADATA_DIR."Common/XmlData.class.php");
+  require_once(JPEG_METADATA_DIR."Common/Locale.class.php");
+
+  require_once(JPEG_METADATA_DIR."TagDefinitions/IfdTags.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/PentaxTags.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/GpsTags.class.php");
+  require_once(JPEG_METADATA_DIR."TagDefinitions/XmpTags.class.php");
+
+echo "
+<html>
+<header>
+<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
+</header>
+<body>
+-- Tests --<br>
+";
+
+echo "<hr>-- Images --<br>";
+
+$d = scandir(dirname(__FILE__));
+
+foreach($d as $key => $file)
+{
+  if(preg_match("/.*\.(jpg|jpeg)/i",$file))
+    echo "[<a href='?file=".$file."'>$file</a>]&nbsp; ";
+}
+
+
+echo "<hr>-- Resultat --<br>";
+
+
+function dump_xml($xml)
+{
+  $color=Array(
+   0 => "000000",
+   1 => "ff0000",
+   2 => "0000ff",
+   3 => "008000",
+   4 => "800000",
+   5 => "000080",
+   6 => "008080",
+   7 => "808000",
+   8 => "800080",
+   9 => "808080");
+
+  $parser = xml_parser_create();
+  xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
+  xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
+  xml_parse_into_struct($parser, $xml, $values, $tags);
+  xml_parser_free($parser);
+
+  foreach($values as $key => $val)
+  {
+    switch($val['type'])
+    {
+      case "open":
+        echo "<span style='color:#".$color[$val['level']]."'>(".$val['level'].")".str_repeat("&nbsp;", 3*$val['level'])."".$val['tag']."</span>";
+        if(array_key_exists("attributes", $val))
+          foreach($val['attributes'] as $key2 => $val2)
+          {
+            echo "<br><span style='color:#".$color[$val['level']]."'>".str_repeat("&nbsp;", 5+3*$val['level'])."<i>[".$key2."] ".$val2."</i></span>";
+          }
+        break;
+      case "close":
+        echo "<span style='color:#".$color[$val['level']]."'>(".$val['level'].")".str_repeat("&nbsp;", 3*$val['level'])."/".$val['tag']."</span>";
+        if(array_key_exists("attributes", $val))
+          foreach($val['attributes'] as $key2 => $val2)
+          {
+            echo "<br><span style='color:#".$color[$val['level']]."'>".str_repeat("&nbsp;", 5+3*$val['level'])."<i>[".$key2."] ".$val2."</i></span>";
+          }
+        break;
+      case "complete":
+        echo "<span style='color:#".$color[$val['level']]."'>(".$val['level'].")".str_repeat("&nbsp;", 3*$val['level'])."/".$val['tag']."</span>";
+        if(array_key_exists("attributes", $val))
+          foreach($val['attributes'] as $key2 => $val2)
+          {
+            echo "<br><span style='color:#".$color[$val['level']]."'>".str_repeat("&nbsp;", 5+3*$val['level'])."<i>[".$key2."] ".$val2."</i></span>";
+          }
+        break;
+    }
+    if(array_key_exists('value', $val))
+     echo " <span style='color:#ff00ff;'>".$val['value']."</span>";
+    echo "<br>";
+
+  }
+
+  $tmp=new XmlData($xml);
+
+  //echo "has node:".($tmp->hasNodes()?"Y":"N")."<br>";
+
+  dump_node($tmp->getFirstNode());
+
+
+}
+
+function dump_node($node)
+{
+  if($node==NULL)
+    return(false);
+  //echo "name:".$node->getName()." / level:".$node->getLevel()." / attributes: ".count($node->getAttributes())." / has child:".($node->hasChilds()?"Y":"N")."<br>";
+
+  if($node->hasChilds())
+  {
+    dump_node($node->getFirstChild());
+  }
+
+  dump_node($node->getNextNode());
+}
+
+function dump_ifd($key2, $val2)
+{
+  echo sprintf("IFD %02d: ", $key2).$val2->toString()."<br>";
+
+  foreach($val2->getTags() as $key3 => $val3)
+  {
+    dump_tag($key3, $val3->getTag(), "<span style='color:#804080;'>".sprintf("[%02d] ", $key3).$val3->toString()."</span><br>");
+
+    /*
+    if($val3->isOffset())
+    {
+      echo "<div style='color:#ff0000;margin-left:40px;'>";
+      echo ConvertData::toHexDump($val3->getValue(), $val3->getType(),15)." => ".substr($val3->getValue(),0,254)."<br>";
+      echo "</div>";
+    }
+    */
+
+    if($val3->getTag()->getLabel() instanceof IfdReader)
+    {
+      echo "<div style='padding:1px;margin-bottom:2px;margin-right:4px;margin-left:25px;border:1px dotted #6060FF;'>";
+      dump_ifd($key3, $val3->getTag()->getLabel());
+      echo "</div>";
+    }
+  }
+}
+
+function dump_xmp($key2, $val2)
+{
+  if(is_string($val2->getValue()))
+    $extra=$val2->getValue();
+  elseif(is_array($val2->getValue()))
+    $extra=print_r($val2->getValue(), true);
+  else
+    $extra=ConvertData::toHexDump($val2->getValue(), ByteType::ASCII);
+
+  $extra="<br><span style='color:#000000;'>".$extra."</span><br>";
+
+  echo "<div style='color:#000000;margin-left:12px;border-bottom:1px solid #808080;";
+  if(!$val2->getIsKnown())
+  {
+    echo "background:#ffd0d0;'>";
+  }
+  elseif(!$val2->getIsImplemented())
+  {
+    echo "background:#ffffd0;'>";
+  }
+  else
+  {
+    echo "background:#d0ffd0;'>";
+    $extra="";
+  }
+
+  echo "<span style='color:#804080;'>".$val2->toString().$extra;
+ /* if($val2->getName()!=$val2->getId())
+    echo " ==> Id: ".$val2->getId();*/
+  echo "</span>";
+
+  echo "</div>";
+}
+
+function dump_tag($key3, $val3, $extra)
+{
+    echo "<div style='color:#000000;margin-left:12px;border-bottom:1px solid #808080;";
+    if(!$val3->getIsKnown())
+    {
+      echo "background:#ffd0d0;'>".$extra;
+    }
+    elseif(!$val3->getIsImplemented())
+    {
+      echo "background:#ffffd0;'>".$extra;
+    }
+    else
+    {
+      echo "background:#d0ffd0;'>";
+    }
+
+    echo str_replace(" ", "&nbsp;", "     ").$val3->toString("small")."<br>";
+
+    echo "</div>";
+}
+
+/*
+function cmp($a, $b)
+{
+    if ($a['value'] == $b['value']) {
+        return 0;
+    }
+    return ($a['value'] < $b['value']) ? -1 : 1;
+}
+
+function list_for_po()
+{
+
+  $tmpTagName=Array();
+  $tmpValues=Array();
+
+  $tagList=Array(
+    new IfdTags(),
+    new XmpTags(),
+    new IptcTags(),
+    new GpsTags(),
+    new PentaxTags(),
+  );
+
+
+  foreach($tagList as $key => $tag)
+  {
+
+    foreach($tag->getTags() as $key => $val)
+    {
+      if(array_key_exists('tagName', $val))
+        $name=$val['tagName'];
+      else
+        $name="";
+
+      if(is_string($key))
+        $tKey=$key;
+      else
+        $tKey=sprintf("0x%04x", $key);
+
+      if($name!="")
+        $tKey.=" ($name)";
+
+      if($name!="")
+      {
+        $tmpTagName[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $name);
+      }
+      else
+      {
+        $tmpTagName[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $key);
+      }
+
+      if(array_key_exists('tagValues', $val) and $val['translatable'])
+      {
+        foreach($val['tagValues'] as $key2 => $val2)
+        {
+          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
+        }
+      }
+
+      if(array_key_exists('tagValues.special', $val) and $val['translatable'])
+      {
+        foreach($val['tagValues.special'] as $key2 => $val2)
+        {
+          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
+        }
+      }
+
+      if(array_key_exists('tagValues.specialNames', $val) and $val['translatable'])
+      {
+        foreach($val['tagValues.specialNames'] as $key2 => $val2)
+        {
+          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
+        }
+      }
+
+      if(array_key_exists('tagValues.specialValues', $val) and $val['translatable'])
+      {
+        foreach($val['tagValues.specialValues'] as $key2 => $val2)
+        {
+          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
+        }
+      }
+
+      if(array_key_exists('tagValues.computed', $val) and $val['translatable'])
+      {
+        foreach($val['tagValues.computed'] as $key2 => $val2)
+        {
+          $tmpValues[]=Array('group' => $tag->getLabel()." / ".$tKey, 'value' => $val2);
+        }
+      }
+
+
+    }
+
+  }
+
+  $tmp=array_merge($tmpTagName, $tmpValues);
+  usort($tmp, "cmp");
+
+  foreach($tmp as $key => $val)
+  {
+    echo "#. ".$val['group']."<br>";
+    echo "msgid \"".$val['value']."\"<br>";
+    echo "msgstr \"".$val['value']."\"<br><br>";
+  }
+
+}
+*/
+
+  if(isset($_GET["file"]))
+  {
+    $file=$_GET["file"];
+  }
+  else
+  {
+    die("no filename ?<br/></body></html>");
+  }
+
+  $memory=memory_get_usage();
+  echo "memory : ".$memory."<br>";
+
+  $jpeg = new JpegReader($file);
+  echo "<span style='font-family:monospace;'>JpegReader<br>";
+  echo "fileName=".$jpeg->getFileName()."<br>";
+  echo "isValid=".($jpeg->isValid()?"Y":"N")."<br>";
+  echo "isLoaded=".($jpeg->isLoaded()?"Y":"N")."<br>";
+  echo "NbMarkers=".$jpeg->countAppMarkerSegments()."<br>";
+  foreach($jpeg->getAppMarkerSegments() as $key => $val)
+  {
+    echo "<div style='border:1px solid #000000;padding:4px;margin:1px;'>";
+    echo sprintf("[%02d] ", $key).$val->toString()."<br>";
+    if($val->dataLoaded())
+    {
+      echo "<div style='color:#0000ff;font-weight:bold;margin-left:20px;'>";
+      $data=$val->getData();
+      if($data instanceof TiffReader)
+      {
+        echo $data->toString()."<br>";
+
+        foreach($data->getIFDs() as $key2 => $val2)
+        {
+          echo "<div style='color:#0000ff;font-weight:normal;margin-left:12px;'>";
+
+          dump_ifd($key2, $val2);
+
+          echo "</div>";
+        }
+
+      }
+      elseif($data instanceof XmpReader)
+      {
+        echo htmlentities($data->toString())."<br>";
+        echo dump_xml($data->toString())."<br>";
+
+        foreach($data->getTags() as $key2 => $val2)
+        {
+          echo "<div style='color:#0000ff;font-weight:normal;margin-left:12px;'>";
+
+          dump_xmp($key2, $val2);
+
+          echo "</div>";
+        }
+
+
+      }
+      elseif($data instanceof IptcReader)
+      {
+        $data->optimizeDateTime();
+        foreach($data->getTags() as $key2 => $val2)
+        {
+          echo "<div style='color:#0000ff;font-weight:normal;margin-left:12px;'>";
+
+          dump_tag($key2, $val2, "");
+
+          echo "</div>";
+        }
+
+
+      }
+      else
+      {
+       echo htmlentities($val->getData())."<br>";
+      }
+      echo "</div>";
+    }
+    echo "</div>";
+
+  }
+  echo "</span><hr>";
+
+
+  Locale::set("en_UK");
+
+  echo "<span style='font-family:monospace;'>JpegMetaData - tag from test file<br>";
+  echo "<table style='border:1px solid #000000;'>";
+  echo "<tr style='border-bottom:1x solid #000000;'><th>Key</th><th>Name</th><th>Value</th><th>Computed Value</th></tr>";
+  $jpegmd = new JpegMetaData($file, Array(
+    'filter' => JpegMetaData::TAGFILTER_IMPLEMENTED,
+    'optimizeIptcDateTime' => true)
+  );
+
+  $i=0;
+  foreach($jpegmd->getTags() as $key => $val)
+  {
+    $txt=$val->getLabel();
+    $value=$val->getValue();
+
+    if($val->getIsTranslatable())
+      $style="color:#0000ff";
+    else
+      $style="color:#000000";
+
+    if(is_string($txt) and $val->getIsTranslatable())
+      $txt=Locale::get($txt);
+    if($txt instanceof DateTime)
+      $txt=$txt->format("Y-m-d H:i:s");
+    if(is_array($txt))
+      $txt=print_r($txt, true);
+    if(is_array($value))
+      $value=print_r($value, true);
+    echo "<tr><td>".$key."</td><td>".Locale::get($val->getName())."</td><td>".$value."</td><td style='$style'>".$txt."</td></tr>";
+    $i++;
+  }
+  echo "</table>Total tags: $i</span><hr>";
+
+  $i=0;
+  $j=0;
+  echo "<span style='font-family:monospace;'>JpegMetaData - known tags<br>";
+  echo "<table style='border:1px solid #000000;'>";
+  echo "<tr style='border-bottom:1x solid #000000;'><th>Key</th><th>Name</th><th>Implemented</th></tr>";
+  foreach($jpegmd->getTagList(Array('filter' => JpegMetaData::TAGFILTER_ALL, 'xmp' => true, 'maker' => true, 'iptc' => true)) as $key => $val)
+  {
+    $val['implemented']?$i++:$j++;
+    echo "<tr><td>".$key."</td><td>".Locale::get($val['name'])."</td><td>".($val['implemented']?"yes":"no")."</td></tr>";
+  }
+  echo "</table>Total tags ; implemented: $i - not implemented: $j</span><hr>";
+
+  unset($jpegmd);
+  unset($jpeg);
+  $memory2=memory_get_usage();
+  echo "memory : ".$memory2." (memory leak ? = ".($memory2-$memory).")<br>";
+  echo "<br/></body></html>";
+?>
