Compare commits

...

18 Commits

Author SHA1 Message Date
Sean Leary
5a587bbdfd Merge pull request #685 from stleary/map-unit-tests
JSONObject map type unit tests
2022-08-23 07:59:35 -05:00
stleary
e0534b3ec7 initial attempt to test for inconsistent map types in JSONObject 2022-08-20 16:14:34 -05:00
Sean Leary
88ca19042b Merge pull request #684 from stleary/pipeline-fix-1
pipeline-fix-1 remove v7 build from pipeline
2022-08-20 08:33:23 -05:00
stleary
b4036e6a8e pipeline-fix-1 remove v7 build from pipeline 2022-08-13 12:50:10 -05:00
Sean Leary
6f92a3ab4e Merge pull request #675 from johnjaylward/Iss-649-better-error-message
Updates value error messages to be consistent.
2022-03-24 20:32:31 -05:00
John J. Aylward
beae279b21 Updates tests to have updated message expectations 2022-03-21 13:06:19 -04:00
John J. Aylward
a642329314 Updates value error messages to be consistent.
Provide both the type and value that failed conversion. Tries not to
"toString" large value types like Arrays or Maps. For those types it
will just output the type and not a value.
2022-03-21 12:48:25 -04:00
Sean Leary
9abb35ad39 Update RELEASES.md 2022-03-20 09:34:12 -05:00
Sean Leary
c0a1d5f741 Update pom.xml 2022-03-20 09:28:19 -05:00
Sean Leary
04a765647e Update README.md 2022-03-20 09:27:38 -05:00
Sean Leary
4f78ec666a Update RELEASES.md 2022-03-20 09:25:53 -05:00
Sean Leary
7d6b76de37 Merge pull request #608 from artem-smotrakov/setup-codeql-scans
Include CodeQL scan in the commit checks
2022-02-06 12:19:41 -06:00
Sean Leary
5cfe216ffd Update codeql-analysis.yml
...
2022-02-04 08:08:41 -06:00
Sean Leary
c33ad9c062 Merge pull request #660 from johnjaylward/Issue654StackOverflowError
Wrap StackOverflow with JSONException to fix Issue #654
2022-01-31 08:54:53 -06:00
John J. Aylward
7a124d857d Add test cases for invalid input 2022-01-26 12:19:53 -05:00
Sean Leary
f1b0210b8a Update README.md 2021-12-05 10:36:03 -06:00
Artem Smotrakov
20b4f85efe Updated build command in the CodeQL workflow 2021-05-31 15:30:20 +02:00
Artem Smotrakov
5bc8dae5d0 Setup CodeQL scans 2021-05-31 15:24:41 +02:00
17 changed files with 2246 additions and 210 deletions

43
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@@ -0,0 +1,43 @@
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '18 18 * * 1'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'java' ]
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
- run: "mvn clean compile -Dmaven.test.skip=true -Dmaven.site.skip=true -Dmaven.javadoc.skip=true"
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@@ -42,7 +42,7 @@ jobs:
strategy:
matrix:
# build against supported Java LTS versions:
java: [ 1.7, 8, 11 ]
java: [ 8, 11 ]
name: Java ${{ matrix.java }}
steps:
- uses: actions/checkout@v2

View File

@@ -8,7 +8,7 @@ JSON in Java [package org.json]
[![Maven Central](https://img.shields.io/maven-central/v/org.json/json.svg)](https://mvnrepository.com/artifact/org.json/json)
**[Click here if you just want the latest release jar file.](https://search.maven.org/remotecontent?filepath=org/json/json/20210307/json-20210307.jar)**
**[Click here if you just want the latest release jar file.](https://search.maven.org/remotecontent?filepath=org/json/json/20220320/json-20220320.jar)**
# Overview
@@ -106,4 +106,4 @@ For more information on files, please see [FILES.md](https://github.com/stleary/
# Release history:
For the release history, please see [RELEASES.md](https://github.com/stleary/JSON-java/blob/master/docs/RELEASES.md)
For the release history, please see [RELEASES.md](https://github.com/stleary/JSON-java/blob/master/docs/RELEASES.md)

View File

@@ -30,7 +30,7 @@ subprojects {
}
group = 'org.json'
version = 'v20200429-SNAPSHOT'
version = 'v20211205-SNAPSHOT'
description = 'JSON in Java'
sourceCompatibility = '1.7'

View File

@@ -5,6 +5,8 @@ and artifactId "json". For example:
[https://search.maven.org/search?q=g:org.json%20AND%20a:json&core=gav](https://search.maven.org/search?q=g:org.json%20AND%20a:json&core=gav)
~~~
20220320 Wrap StackOverflow with JSONException
20211205 Recent commits and some bug fixes for similar()
20210307 Recent commits and potentially breaking fix to JSONPointer

View File

@@ -3,7 +3,7 @@
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20211205</version>
<version>20220320</version>
<packaging>bundle</packaging>
<name>JSON in Java</name>

View File

@@ -288,7 +288,7 @@ public class JSONArray implements Iterable<Object> {
.equalsIgnoreCase("true"))) {
return true;
}
throw wrongValueFormatException(index, "boolean", null);
throw wrongValueFormatException(index, "boolean", object, null);
}
/**
@@ -309,7 +309,7 @@ public class JSONArray implements Iterable<Object> {
try {
return Double.parseDouble(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(index, "double", e);
throw wrongValueFormatException(index, "double", object, e);
}
}
@@ -331,7 +331,7 @@ public class JSONArray implements Iterable<Object> {
try {
return Float.parseFloat(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(index, "float", e);
throw wrongValueFormatException(index, "float", object, e);
}
}
@@ -353,7 +353,7 @@ public class JSONArray implements Iterable<Object> {
}
return JSONObject.stringToNumber(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(index, "number", e);
throw wrongValueFormatException(index, "number", object, e);
}
}
@@ -378,7 +378,7 @@ public class JSONArray implements Iterable<Object> {
// If it did, I would re-implement this with the Enum.valueOf
// method and place any thrown exception in the JSONException
throw wrongValueFormatException(index, "enum of type "
+ JSONObject.quote(clazz.getSimpleName()), null);
+ JSONObject.quote(clazz.getSimpleName()), opt(index), null);
}
return val;
}
@@ -441,7 +441,7 @@ public class JSONArray implements Iterable<Object> {
try {
return Integer.parseInt(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(index, "int", e);
throw wrongValueFormatException(index, "int", object, e);
}
}
@@ -460,7 +460,7 @@ public class JSONArray implements Iterable<Object> {
if (object instanceof JSONArray) {
return (JSONArray) object;
}
throw wrongValueFormatException(index, "JSONArray", null);
throw wrongValueFormatException(index, "JSONArray", object, null);
}
/**
@@ -478,7 +478,7 @@ public class JSONArray implements Iterable<Object> {
if (object instanceof JSONObject) {
return (JSONObject) object;
}
throw wrongValueFormatException(index, "JSONObject", null);
throw wrongValueFormatException(index, "JSONObject", object, null);
}
/**
@@ -499,7 +499,7 @@ public class JSONArray implements Iterable<Object> {
try {
return Long.parseLong(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(index, "long", e);
throw wrongValueFormatException(index, "long", object, e);
}
}
@@ -517,7 +517,7 @@ public class JSONArray implements Iterable<Object> {
if (object instanceof String) {
return (String) object;
}
throw wrongValueFormatException(index, "String", null);
throw wrongValueFormatException(index, "String", object, null);
}
/**
@@ -1464,6 +1464,7 @@ public class JSONArray implements Iterable<Object> {
* &nbsp;<small>(right bracket)</small>.
* @throws JSONException if a called function fails
*/
@SuppressWarnings("resource")
public String toString(int indentFactor) throws JSONException {
StringWriter sw = new StringWriter();
synchronized (sw.getBuffer()) {
@@ -1513,6 +1514,7 @@ public class JSONArray implements Iterable<Object> {
* @return The writer.
* @throws JSONException if a called function fails or unable to write
*/
@SuppressWarnings("resource")
public Writer write(Writer writer, int indentFactor, int indent)
throws JSONException {
try {
@@ -1680,22 +1682,6 @@ public class JSONArray implements Iterable<Object> {
}
}
/**
* Create a new JSONException in a common format for incorrect conversions.
* @param idx index of the item
* @param valueType the type of value being coerced to
* @param cause optional cause of the coercion failure
* @return JSONException that can be thrown.
*/
private static JSONException wrongValueFormatException(
int idx,
String valueType,
Throwable cause) {
return new JSONException(
"JSONArray[" + idx + "] is not a " + valueType + "."
, cause);
}
/**
* Create a new JSONException in a common format for incorrect conversions.
* @param idx index of the item
@@ -1708,8 +1694,19 @@ public class JSONArray implements Iterable<Object> {
String valueType,
Object value,
Throwable cause) {
if(value == null) {
return new JSONException(
"JSONArray[" + idx + "] is not a " + valueType + " (null)."
, cause);
}
// don't try to toString collections or known object types that could be large.
if(value instanceof Map || value instanceof Iterable || value instanceof JSONObject) {
return new JSONException(
"JSONArray[" + idx + "] is not a " + valueType + " (" + value.getClass() + ")."
, cause);
}
return new JSONException(
"JSONArray[" + idx + "] is not a " + valueType + " (" + value + ")."
"JSONArray[" + idx + "] is not a " + valueType + " (" + value.getClass() + " : " + value + ")."
, cause);
}

View File

@@ -166,6 +166,10 @@ public class JSONObject {
*/
private final Map<String, Object> map;
public Class<? extends Map> getMapType() {
return map.getClass();
}
/**
* It is sometimes more convenient and less ambiguous to have a
* <code>NULL</code> object than to use Java's <code>null</code> value.
@@ -225,12 +229,19 @@ public class JSONObject {
throw x.syntaxError("A JSONObject text must begin with '{'");
}
for (;;) {
char prev = x.getPrevious();
c = x.nextClean();
switch (c) {
case 0:
throw x.syntaxError("A JSONObject text must end with '}'");
case '}':
return;
case '{':
case '[':
if(prev=='{') {
throw x.syntaxError("A JSON Object can not directly nest another JSON Object or JSON Array.");
}
// fall through
default:
x.back();
key = x.nextValue().toString();
@@ -602,7 +613,7 @@ public class JSONObject {
// JSONException should really take a throwable argument.
// If it did, I would re-implement this with the Enum.valueOf
// method and place any thrown exception in the JSONException
throw wrongValueFormatException(key, "enum of type " + quote(clazz.getSimpleName()), null);
throw wrongValueFormatException(key, "enum of type " + quote(clazz.getSimpleName()), opt(key), null);
}
return val;
}
@@ -628,7 +639,7 @@ public class JSONObject {
.equalsIgnoreCase("true"))) {
return true;
}
throw wrongValueFormatException(key, "Boolean", null);
throw wrongValueFormatException(key, "Boolean", object, null);
}
/**
@@ -690,7 +701,7 @@ public class JSONObject {
try {
return Double.parseDouble(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(key, "double", e);
throw wrongValueFormatException(key, "double", object, e);
}
}
@@ -712,7 +723,7 @@ public class JSONObject {
try {
return Float.parseFloat(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(key, "float", e);
throw wrongValueFormatException(key, "float", object, e);
}
}
@@ -734,7 +745,7 @@ public class JSONObject {
}
return stringToNumber(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(key, "number", e);
throw wrongValueFormatException(key, "number", object, e);
}
}
@@ -756,7 +767,7 @@ public class JSONObject {
try {
return Integer.parseInt(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(key, "int", e);
throw wrongValueFormatException(key, "int", object, e);
}
}
@@ -774,7 +785,7 @@ public class JSONObject {
if (object instanceof JSONArray) {
return (JSONArray) object;
}
throw wrongValueFormatException(key, "JSONArray", null);
throw wrongValueFormatException(key, "JSONArray", object, null);
}
/**
@@ -791,7 +802,7 @@ public class JSONObject {
if (object instanceof JSONObject) {
return (JSONObject) object;
}
throw wrongValueFormatException(key, "JSONObject", null);
throw wrongValueFormatException(key, "JSONObject", object, null);
}
/**
@@ -812,7 +823,7 @@ public class JSONObject {
try {
return Long.parseLong(object.toString());
} catch (Exception e) {
throw wrongValueFormatException(key, "long", e);
throw wrongValueFormatException(key, "long", object, e);
}
}
@@ -868,7 +879,7 @@ public class JSONObject {
if (object instanceof String) {
return (String) object;
}
throw wrongValueFormatException(key, "string", null);
throw wrongValueFormatException(key, "string", object, null);
}
/**
@@ -1194,12 +1205,11 @@ public class JSONObject {
}
if (exact) {
return new BigDecimal(((Number)val).doubleValue());
}else {
// use the string constructor so that we maintain "nice" values for doubles and floats
// the double constructor will translate doubles to "exact" values instead of the likely
// intended representation
return new BigDecimal(val.toString());
}
// use the string constructor so that we maintain "nice" values for doubles and floats
// the double constructor will translate doubles to "exact" values instead of the likely
// intended representation
return new BigDecimal(val.toString());
}
if (val instanceof Long || val instanceof Integer
|| val instanceof Short || val instanceof Byte){
@@ -2014,6 +2024,7 @@ public class JSONObject {
* A String
* @return A String correctly formatted for insertion in a JSON text.
*/
@SuppressWarnings("resource")
public static String quote(String string) {
StringWriter sw = new StringWriter();
synchronized (sw.getBuffer()) {
@@ -2134,7 +2145,7 @@ public class JSONObject {
} else if (valueThis instanceof Number && valueOther instanceof Number) {
if (!isNumberSimilar((Number)valueThis, (Number)valueOther)) {
return false;
};
}
} else if (!valueThis.equals(valueOther)) {
return false;
}
@@ -2402,6 +2413,7 @@ public class JSONObject {
* @throws JSONException
* If the object contains an invalid number.
*/
@SuppressWarnings("resource")
public String toString(int indentFactor) throws JSONException {
StringWriter w = new StringWriter();
synchronized (w.getBuffer()) {
@@ -2495,9 +2507,7 @@ public class JSONObject {
if (objectsRecord != null) {
return new JSONObject(object, objectsRecord);
}
else {
return new JSONObject(object);
}
return new JSONObject(object);
}
catch (JSONException exception) {
throw exception;
@@ -2520,6 +2530,7 @@ public class JSONObject {
return this.write(writer, 0, 0);
}
@SuppressWarnings("resource")
static final Writer writeValue(Writer writer, Object value,
int indentFactor, int indent) throws JSONException, IOException {
if (value == null || value.equals(null)) {
@@ -2597,6 +2608,7 @@ public class JSONObject {
* @throws JSONException if a called function has an error or a write error
* occurs
*/
@SuppressWarnings("resource")
public Writer write(Writer writer, int indentFactor, int indent)
throws JSONException {
try {
@@ -2679,22 +2691,6 @@ public class JSONObject {
return results;
}
/**
* Create a new JSONException in a common format for incorrect conversions.
* @param key name of the key
* @param valueType the type of value being coerced to
* @param cause optional cause of the coercion failure
* @return JSONException that can be thrown.
*/
private static JSONException wrongValueFormatException(
String key,
String valueType,
Throwable cause) {
return new JSONException(
"JSONObject[" + quote(key) + "] is not a " + valueType + "."
, cause);
}
/**
* Create a new JSONException in a common format for incorrect conversions.
* @param key name of the key
@@ -2707,8 +2703,20 @@ public class JSONObject {
String valueType,
Object value,
Throwable cause) {
if(value == null) {
return new JSONException(
"JSONObject[" + quote(key) + "] is not a " + valueType + " (null)."
, cause);
}
// don't try to toString collections or known object types that could be large.
if(value instanceof Map || value instanceof Iterable || value instanceof JSONObject) {
return new JSONException(
"JSONObject[" + quote(key) + "] is not a " + valueType + " (" + value.getClass() + ")."
, cause);
}
return new JSONException(
"JSONObject[" + quote(key) + "] is not a " + valueType + " (" + value + ")."
"JSONObject[" + quote(key) + "] is not a " + valueType + " (" + value.getClass() + " : " + value + ")."
, cause);
}

View File

@@ -209,6 +209,12 @@ public class JSONTokener {
this.previous = (char) c;
return this.previous;
}
/**
* Get the last character read from the input or '\0' if nothing has been read yet.
* @return the last character read from the input.
*/
protected char getPrevious() { return this.previous;}
/**
* Increments the internal indexes according to the previous character
@@ -428,10 +434,18 @@ public class JSONTokener {
return this.nextString(c);
case '{':
this.back();
return new JSONObject(this);
try {
return new JSONObject(this);
} catch (StackOverflowError e) {
throw new JSONException("JSON Array or Object depth too large to process.", e);
}
case '[':
this.back();
return new JSONArray(this);
try {
return new JSONArray(this);
} catch (StackOverflowError e) {
throw new JSONException("JSON Array or Object depth too large to process.", e);
}
}
/*

View File

@@ -26,7 +26,6 @@ SOFTWARE.
import java.io.Reader;
import java.io.StringReader;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Iterator;

View File

@@ -190,7 +190,7 @@ public class CDLTest {
CDL.toJSONArray(badLine);
fail("Expecting an exception");
} catch (JSONException e) {
System.out.println("Message" + e.getMessage());
//System.out.println("Message" + e.getMessage());
assertEquals("Expecting an exception message",
"Bad character 'V' (86). at 20 [character 9 line 2]",
e.getMessage());

View File

@@ -29,8 +29,10 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -47,6 +49,7 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONPointerException;
import org.json.JSONTokener;
import org.junit.Test;
import com.jayway.jsonpath.Configuration;
@@ -234,6 +237,10 @@ public class JSONArrayTest {
assertTrue(
"The RAW Collection should give me the same as the Typed Collection",
expected.similar(jaObj));
Util.checkJSONArrayMaps(expected);
Util.checkJSONArrayMaps(jaObj);
Util.checkJSONArrayMaps(jaRaw);
Util.checkJSONArrayMaps(jaInt);
}
/**
@@ -272,6 +279,7 @@ public class JSONArrayTest {
myList.get(i),
jsonArray.getString(myInts.length + i));
}
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -305,6 +313,9 @@ public class JSONArrayTest {
assertTrue(
"The RAW Collection should give me the same as the Typed Collection",
expected.similar(jaInt));
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
jaRaw, jaObj, jaInt
)));
}
@@ -348,6 +359,9 @@ public class JSONArrayTest {
assertTrue(
"The RAW Collection should give me the same as the Typed Collection",
expected.similar(jaObjObj));
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
expected, jaRaw, jaStrObj, jaStrInt, jaObjObj
)));
}
/**
@@ -394,6 +408,7 @@ public class JSONArrayTest {
new Long(-1).equals(jsonArray.getLong(12)));
assertTrue("Array value null", jsonArray.isNull(-1));
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -409,7 +424,7 @@ public class JSONArrayTest {
assertTrue("expected getBoolean to fail", false);
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray[4] is not a boolean.",e.getMessage());
"JSONArray[4] is not a boolean (class java.lang.String : hello).",e.getMessage());
}
try {
jsonArray.get(-1);
@@ -423,43 +438,44 @@ public class JSONArrayTest {
assertTrue("expected getDouble to fail", false);
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray[4] is not a double.",e.getMessage());
"JSONArray[4] is not a double (class java.lang.String : hello).",e.getMessage());
}
try {
jsonArray.getInt(4);
assertTrue("expected getInt to fail", false);
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray[4] is not a int.",e.getMessage());
"JSONArray[4] is not a int (class java.lang.String : hello).",e.getMessage());
}
try {
jsonArray.getJSONArray(4);
assertTrue("expected getJSONArray to fail", false);
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray[4] is not a JSONArray.",e.getMessage());
"JSONArray[4] is not a JSONArray (class java.lang.String : hello).",e.getMessage());
}
try {
jsonArray.getJSONObject(4);
assertTrue("expected getJSONObject to fail", false);
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray[4] is not a JSONObject.",e.getMessage());
"JSONArray[4] is not a JSONObject (class java.lang.String : hello).",e.getMessage());
}
try {
jsonArray.getLong(4);
assertTrue("expected getLong to fail", false);
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray[4] is not a long.",e.getMessage());
"JSONArray[4] is not a long (class java.lang.String : hello).",e.getMessage());
}
try {
jsonArray.getString(5);
assertTrue("expected getString to fail", false);
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray[5] is not a String.",e.getMessage());
"JSONArray[5] is not a String (class java.math.BigDecimal : 0.002345).",e.getMessage());
}
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -496,6 +512,7 @@ public class JSONArrayTest {
assertTrue("expected value4", "value4".equals(jsonArray.query("/10/key4")));
assertTrue("expected 0", Integer.valueOf(0).equals(jsonArray.query("/11")));
assertTrue("expected \"-1\"", "-1".equals(jsonArray.query("/12")));
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -509,6 +526,9 @@ public class JSONArrayTest {
assertTrue("expected JSONArray length 13. instead found "+jsonArray.length(), jsonArray.length() == 13);
JSONArray nestedJsonArray = jsonArray.getJSONArray(9);
assertTrue("expected JSONArray length 1", nestedJsonArray.length() == 1);
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
jsonArray, nestedJsonArray
)));
}
/**
@@ -584,6 +604,10 @@ public class JSONArrayTest {
"hello".equals(jsonArray.optString(4)));
assertTrue("Array opt string default implicit",
"".equals(jsonArray.optString(-1)));
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
jsonArray, nestedJsonArray
)));
Util.checkJSONObjectMaps(nestedJsonObject);
}
/**
@@ -598,7 +622,9 @@ public class JSONArrayTest {
assertTrue("unexpected optLong value",ja.optLong(0,0)==123);
assertTrue("unexpected optDouble value",ja.optDouble(0,0.0)==123.0);
assertTrue("unexpected optBigInteger value",ja.optBigInteger(0,BigInteger.ZERO).compareTo(new BigInteger("123"))==0);
assertTrue("unexpected optBigDecimal value",ja.optBigDecimal(0,BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0); }
assertTrue("unexpected optBigDecimal value",ja.optBigDecimal(0,BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0);
Util.checkJSONArrayMaps(ja);
}
/**
* Exercise the JSONArray.put(value) method with various parameters
@@ -674,6 +700,8 @@ public class JSONArrayTest {
assertTrue("expected 2 items in [9]", ((List<?>)(JsonPath.read(doc, "$[9]"))).size() == 2);
assertTrue("expected 1", Integer.valueOf(1).equals(jsonArray.query("/9/0")));
assertTrue("expected 2", Integer.valueOf(2).equals(jsonArray.query("/9/1")));
Util.checkJSONArrayMaps(jsonArray);
Util.checkJSONObjectMaps(jsonObject);
}
/**
@@ -753,6 +781,8 @@ public class JSONArrayTest {
assertTrue("expected 2", Integer.valueOf(2).equals(jsonArray.query("/9/1")));
assertTrue("expected 1 item in [10]", ((Map<?,?>)(JsonPath.read(doc, "$[10]"))).size() == 1);
assertTrue("expected v1", "v1".equals(jsonArray.query("/10/k1")));
Util.checkJSONObjectMaps(jsonObject);
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -769,6 +799,7 @@ public class JSONArrayTest {
jsonArray.remove(0);
assertTrue("array should be empty", null == jsonArray.remove(5));
assertTrue("jsonArray should be empty", jsonArray.isEmpty());
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -808,6 +839,12 @@ public class JSONArrayTest {
otherJsonArray.put("world");
assertTrue("arrays values differ",
!jsonArray.similar(otherJsonArray));
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
jsonArray, otherJsonArray
)));
Util.checkJSONObjectsMaps(new ArrayList<JSONObject>(Arrays.asList(
jsonObject, otherJsonObject
)));
}
/**
@@ -891,6 +928,7 @@ public class JSONArrayTest {
for (String s : jsonArray4Strs) {
list.contains(s);
}
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -902,6 +940,9 @@ public class JSONArrayTest {
JSONArray jsonArray = new JSONArray();
assertTrue("toJSONObject should return null",
null == jsonArray.toJSONObject(names));
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
names, jsonArray
)));
}
/**
@@ -923,6 +964,7 @@ public class JSONArrayTest {
assertTrue("expected 5", Integer.valueOf(5).equals(jsonArray.query("/4")));
assertTrue("expected 6", Integer.valueOf(6).equals(jsonArray.query("/5")));
assertTrue("expected 7", Integer.valueOf(7).equals(jsonArray.query("/6")));
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -965,6 +1007,10 @@ public class JSONArrayTest {
assertTrue("Array value string long",
new Long(-1).equals(Long.parseLong((String) it.next())));
assertTrue("should be at end of array", !it.hasNext());
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
jsonArray, nestedJsonArray
)));
Util.checkJSONObjectMaps(nestedJsonObject);
}
@Test(expected = JSONPointerException.class)
@@ -1007,6 +1053,7 @@ public class JSONArrayTest {
} finally {
stringWriter.close();
}
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -1066,9 +1113,11 @@ public class JSONArrayTest {
&& actualStr.contains("\"key2\": false")
&& actualStr.contains("\"key3\": 3.14")
);
Util.checkJSONArrayMaps(finalArray);
} finally {
stringWriter.close();
}
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -1179,6 +1228,7 @@ public class JSONArrayTest {
// assert that the new list is mutable
assertTrue("Removing an entry should succeed", list.remove(2) != null);
assertTrue("List should have 2 elements", list.size() == 2);
Util.checkJSONArrayMaps(jsonArray);
}
/**
@@ -1187,13 +1237,13 @@ public class JSONArrayTest {
*/
@Test
public void testJSONArrayInt() {
assertNotNull(new JSONArray(0));
assertNotNull(new JSONArray(5));
// Check Size -> Even though the capacity of the JSONArray can be specified using a positive
// integer but the length of JSONArray always reflects upon the items added into it.
assertEquals(0l, new JSONArray(10).length());
assertNotNull(new JSONArray(0));
assertNotNull(new JSONArray(5));
// Check Size -> Even though the capacity of the JSONArray can be specified using a positive
// integer but the length of JSONArray always reflects upon the items added into it.
// assertEquals(0l, new JSONArray(10).length());
try {
assertNotNull("Should throw an exception", new JSONArray(-1));
assertNotNull("Should throw an exception", new JSONArray(-1));
} catch (JSONException e) {
assertEquals("Expected an exception message",
"JSONArray initial capacity cannot be negative.",
@@ -1220,8 +1270,8 @@ public class JSONArrayTest {
((Collection<Object>)o).add("test");
((Collection<Object>)o).add(false);
try {
a = new JSONArray(o);
assertNull("Should error", a);
JSONArray a0 = new JSONArray(o);
assertNull("Should error", a0);
} catch (JSONException ex) {
}
@@ -1229,10 +1279,11 @@ public class JSONArrayTest {
// this is required for backwards compatibility
o = a;
try {
a = new JSONArray(o);
assertNull("Should error", a);
JSONArray a1 = new JSONArray(o);
assertNull("Should error", a1);
} catch (JSONException ex) {
}
Util.checkJSONArrayMaps(a);
}
/**
@@ -1249,6 +1300,9 @@ public class JSONArrayTest {
for(int i = 0; i < a1.length(); i++) {
assertEquals("index " + i + " are equal", a1.get(i), a2.get(i));
}
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
a1, a2
)));
}
/**
@@ -1266,6 +1320,9 @@ public class JSONArrayTest {
for(int i = 0; i < a1.length(); i++) {
assertEquals("index " + i + " are equal", a1.get(i), a2.get(i));
}
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
a1, a2
)));
}
/**
@@ -1281,5 +1338,20 @@ public class JSONArrayTest {
jsonArray.clear(); //Clears the JSONArray
assertTrue("expected jsonArray.length() == 0", jsonArray.length() == 0); //Check if its length is 0
jsonArray.getInt(0); //Should throws org.json.JSONException: JSONArray[0] not found
Util.checkJSONArrayMaps(jsonArray);
}
/**
* Tests for stack overflow. See https://github.com/stleary/JSON-java/issues/654
*/
@Test(expected = JSONException.class)
public void issue654StackOverflowInputWellFormed() {
//String input = new String(java.util.Base64.getDecoder().decode(base64Bytes));
final InputStream resourceAsStream = JSONObjectTest.class.getClassLoader().getResourceAsStream("Issue654WellFormedArray.json");
JSONTokener tokener = new JSONTokener(resourceAsStream);
JSONArray json_input = new JSONArray(tokener);
assertNotNull(json_input);
fail("Excepected Exception.");
Util.checkJSONArrayMaps(json_input);
}
}

View File

@@ -158,7 +158,7 @@ public class JSONMLTest {
assertTrue("Expecting an exception", false);
} catch (JSONException e) {
assertEquals("Expecting an exception message",
"JSONArray[0] is not a String.",
"JSONArray[0] is not a String (class org.json.JSONArray).",
e.getMessage());
}
}

File diff suppressed because one or more lines are too long

View File

@@ -78,7 +78,6 @@ public class Util {
* or something else.
* @param value created by the code to be tested
* @param expectedValue created specifically for comparing
* @param key key to the jsonObject entry to be compared
*/
private static void compareActualVsExpectedObjects(Object value,
Object expectedValue) {
@@ -117,4 +116,106 @@ public class Util {
);
}
}
/**
* Asserts that all JSONObject maps are the same as the default ctor
* @param jsonObjects list of objects to be tested
*/
public static void checkJSONObjectsMaps(List<JSONObject> jsonObjects) {
if (jsonObjects == null || jsonObjects.size() == 0) {
return;
}
Class<? extends Map> mapType = new JSONObject().getMapType();
for (JSONObject jsonObject : jsonObjects) {
if (jsonObject != null) {
assertTrue(mapType == jsonObject.getMapType());
checkJSONObjectMaps(jsonObject, mapType);
}
}
}
/**
* Asserts that all JSONObject maps are the same as the default ctor
* @param jsonObject the object to be tested
*/
public static void checkJSONObjectMaps(JSONObject jsonObject) {
if (jsonObject != null) {
checkJSONObjectMaps(jsonObject, jsonObject.getMapType());
}
}
/**
* Asserts that all JSONObject maps are the same as mapType
* @param jsonObject object to be tested
* @param mapType mapType to test against
*/
public static void checkJSONObjectMaps(JSONObject jsonObject, Class<? extends Map> mapType) {
if (mapType == null) {
mapType = new JSONObject().getMapType();
}
Set<String> keys = jsonObject.keySet();
for (String key : keys) {
Object val = jsonObject.get(key);
if (val instanceof JSONObject) {
JSONObject jsonObjectVal = (JSONObject) val;
assertTrue(mapType == ((JSONObject) val).getMapType());
checkJSONObjectMaps(jsonObjectVal, mapType);
} else if (val instanceof JSONArray) {
JSONArray jsonArrayVal = (JSONArray)val;
checkJSONArrayMaps(jsonArrayVal, mapType);
}
}
}
/**
* Asserts that all JSONObject maps in the JSONArray object match the default map
* @param jsonArrays list of JSONArray objects to be tested
*/
public static void checkJSONArraysMaps(List<JSONArray> jsonArrays) {
if (jsonArrays == null || jsonArrays.size() == 0) {
return;
}
Class<? extends Map> mapType = new JSONObject().getMapType();
for (JSONArray jsonArray : jsonArrays) {
if (jsonArray != null) {
checkJSONArrayMaps(jsonArray, mapType);
}
}
}
/**
* Asserts that all JSONObject maps in the JSONArray object match mapType
* @param jsonArray object to be tested
* @param mapType map type to be tested against
*/
public static void checkJSONArrayMaps(JSONArray jsonArray, Class<? extends Map> mapType) {
if (jsonArray == null) {
return;
}
if (mapType == null) {
mapType = new JSONObject().getMapType();
}
Iterator<Object> it = jsonArray.iterator();
while (it.hasNext()) {
Object val = it.next();
if (val instanceof JSONObject) {
JSONObject jsonObjectVal = (JSONObject)val;
checkJSONObjectMaps(jsonObjectVal, mapType);
} else if (val instanceof JSONArray) {
JSONArray jsonArrayVal = (JSONArray)val;
checkJSONArrayMaps(jsonArrayVal, mapType);
}
}
}
/**
* Asserts that all JSONObject maps nested in the JSONArray match
* the default mapType
* @param jsonArray the object to be tested
*/
public static void checkJSONArrayMaps(JSONArray jsonArray) {
if (jsonArray != null) {
checkJSONArrayMaps(jsonArray, null);
}
}
}

View File

@@ -0,0 +1,822 @@
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",
["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",["a",[]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]
]]]]]]]]]]]]

View File

@@ -0,0 +1,822 @@
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":
{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{"a":{}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}
}}}}}}}}}}}}