{{header}}
{{object 1 0}} <<
  /Type /Catalog
  /Pages 2 0 R
  /OpenAction 10 0 R
>>
endobj
{{object 2 0}} <<
  /Type /Pages
  /Count 4
  /Kids [
    3 0 R
    4 0 R
    5 0 R
    6 0 R
  ]
>>
endobj
% Page number 0.
{{object 3 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj
% Page number 1.
{{object 4 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj
% Page number 2.
{{object 5 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj
% Page number 3.
{{object 6 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj

% Info
{{object 9 0}} <<
  /Author (Joe Random Author)
  /Creator (Joe Random Creator)
>>
endobj
% OpenAction action
{{object 10 0}} <<
  /Type /Action
  /S /JavaScript
  /JS 11 0 R
>>
endobj
% JS program to execute
{{object 11 0}} <<
  {{streamlen}}
>>
stream
var app_props = [
  'activeDocs',
  'calculate',
  'formsVersion',
  'fs',
  'fullscreen',
  'language',
  'media',
  'platform',
  'runtimeHighlight',
  'viewerType',
  'viewerVariation',
  'viewerVersion'
];

function testGetProps(props) {
  app.alert('*** Getting properties ***');
  for (var i = 0; i < props.length; ++i) {
    try {
      var expr1 = "app." + props[i];
      var expr2 = "typeof " + expr1;
      app.alert(expr1 + " is " + eval(expr2) + ' ' + eval(expr1));
    } catch (e) {
      app.alert("ERROR: " + e.toString());
    }
  }
}

function testSetProps(props) {
  app.alert('*** Setting properties ***');
  for (var i = 0; i < props.length; ++i) {
    try {
      var expr1 = "app." + props[i] + ' = 3;'
      app.alert(expr1 + " yields " + eval(expr1));
    } catch (e) {
      app.alert("ERROR: " + e.toString());
    }
  }
}

testGetProps(app_props);
testSetProps(app_props);
testGetProps(app_props);
endstream
endobj
{{xref}}
trailer <<
  /Root 1 0 R
  /Info 9 0 R
>>
{{startxref}}
%%EOF
