json_parse=function(){
var at,ch,_3={"\"":"\"","\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},_4,_5=function(m){
throw {name:"SyntaxError",message:m,at:at,text:_4};
},_7=function(c){
if(c&&c!==ch){
_5("Expected '"+c+"' instead of '"+ch+"'");
}
ch=_4.charAt(at);
at+=1;
return ch;
},_9=function(){
var _a,_b="";
if(ch==="-"){
_b="-";
_7("-");
}
while(ch>="0"&&ch<="9"){
_b+=ch;
_7();
}
if(ch==="."){
_b+=".";
while(_7()&&ch>="0"&&ch<="9"){
_b+=ch;
}
}
if(ch==="e"||ch==="E"){
_b+=ch;
_7();
if(ch==="-"||ch==="+"){
_b+=ch;
_7();
}
while(ch>="0"&&ch<="9"){
_b+=ch;
_7();
}
}
_a=+_b;
if(isNaN(_a)){
_5("Bad number");
}else{
return _a;
}
},_c=function(){
var _d,i,_c="",_f;
if(ch==="\""){
while(_7()){
if(ch==="\""){
_7();
return _c;
}else{
if(ch==="\\"){
_7();
if(ch==="u"){
_f=0;
for(i=0;i<4;i+=1){
_d=parseInt(_7(),16);
if(!isFinite(_d)){
break;
}
_f=_f*16+_d;
}
_c+=String.fromCharCode(_f);
}else{
if(typeof _3[ch]==="string"){
_c+=_3[ch];
}else{
break;
}
}
}else{
_c+=ch;
}
}
}
}
_5("Bad string");
},_10=function(){
while(ch&&ch<=" "){
_7();
}
},_11=function(){
switch(ch){
case "t":
_7("t");
_7("r");
_7("u");
_7("e");
return true;
case "f":
_7("f");
_7("a");
_7("l");
_7("s");
_7("e");
return false;
case "n":
_7("n");
_7("u");
_7("l");
_7("l");
return null;
}
_5("Unexpected '"+ch+"'");
},_12,_13=function(){
var _14=[];
if(ch==="["){
_7("[");
_10();
if(ch==="]"){
_7("]");
return _14;
}
while(ch){
_14.push(_12());
_10();
if(ch==="]"){
_7("]");
return _14;
}
_7(",");
_10();
}
}
_5("Bad array");
},_15=function(){
var key,_15={};
if(ch==="{"){
_7("{");
_10();
if(ch==="}"){
_7("}");
return _15;
}
while(ch){
key=_c();
_10();
_7(":");
if(Object.hasOwnProperty.call(_15,key)){
_5("Duplicate key \""+key+"\"");
}
_15[key]=_12();
_10();
if(ch==="}"){
_7("}");
return _15;
}
_7(",");
_10();
}
}
_5("Bad object");
};
_12=function(){
_10();
switch(ch){
case "{":
return _15();
case "[":
return _13();
case "\"":
return _c();
case "-":
return _9();
default:
return ch>="0"&&ch<="9"?_9():_11();
}
};
return function(_17,_18){
var _19;
_4=_17;
at=0;
ch=" ";
_19=_12();
_10();
if(ch){
_5("Syntax error");
}
return typeof _18==="function"?function walk(_1a,key){
var k,v,_12=_1a[key];
if(_12&&typeof _12==="object"){
for(k in _12){
if(Object.hasOwnProperty.call(_12,k)){
v=_1e(_12,k);
if(v!==undefined){
_12[k]=v;
}else{
delete _12[k];
}
}
}
}
return _18.call(_1a,key,_12);
}({"":_19},""):_19;
};
}();


