--- /dev/null
+(* Copyright (C) DooM 2D:Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *)
+{$INCLUDE a_modes.inc}
+unit exoma;
+
+interface
+
+uses
+ typinfo, Variants, hashtable, xparser;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+type
+ TPropHash = class
+ private
+ mClass: TClass;
+ mNames: THashStrInt;
+ pl: PPropList;
+ pc: Integer;
+
+ public
+ constructor Create (aklass: TClass);
+ destructor Destroy (); override;
+
+ function get (obj: TObject; const fldname: AnsiString; out v: Variant): Boolean;
+ function put (obj: TObject; const fldname: AnsiString; var v: Variant): Boolean;
+ end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+type
+ TExprScope = class
+ public
+ function getObj (const aname: AnsiString): TObject; virtual;
+ function getField (obj: TObject; const afldname: AnsiString): Variant; virtual;
+ procedure setField (obj: TObject; const afldname: AnsiString; var aval: Variant); virtual;
+ end;
+
+ TExprBase = class
+ public
+ class function coerce2bool (var v0: Variant): Boolean;
+ class function toInt (var v: Variant): LongInt;
+ public
+ class procedure error ();
+ class function parse (pr: TTextParser; allowAssign: Boolean=false): TExprBase;
+ class function parse (const str: AnsiString; allowAssign: Boolean=false): TExprBase;
+ class function parseStatList (const str: AnsiString): TExprBase;
+ public
+ function value (scope: TExprScope): Variant; virtual; abstract;
+ procedure assign (scope: TExprScope; var v: Variant); virtual;
+ function clone (): TExprBase; virtual; abstract;
+ end;
+
+ TExprStatList = class(TExprBase)
+ private
+ mList: array of TExprBase;
+ public
+ constructor Create ();
+ destructor Destroy (); override;
+ function value (scope: TExprScope): Variant; override;
+ function toString (): AnsiString; override;
+ function clone (): TExprBase; override;
+ end;
+
+ TObjExpr = class(TExprBase)
+ private
+ mName: AnsiString;
+ public
+ constructor Create (const aval: AnsiString);
+
+ function value (scope: TExprScope): Variant; override;
+ function toString (): AnsiString; override;
+ function clone (): TExprBase; override;
+ end;
+
+ TLitExpr = class(TExprBase)
+ private
+ mValue: Variant;
+ public
+ constructor Create (aval: Boolean);
+ constructor Create (aval: LongInt);
+ constructor Create (const aval: AnsiString);
+
+ function value (scope: TExprScope): Variant; override;
+ function toString (): AnsiString; override;
+ function clone (): TExprBase; override;
+ end;
+
+ TUnExpr = class(TExprBase)
+ private
+ mOp0: TExprBase;
+ public
+ constructor Create (aop0: TExprBase);
+ destructor Destroy (); override;
+ function clone (): TExprBase; override;
+ end;
+
+ TUnExprNeg = class(TUnExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TUnExprNot = class(TUnExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+
+ TDotExpr = class(TExprBase)
+ private
+ mOp0: TExprBase;
+ mField: AnsiString;
+ public
+ constructor Create (aop0: TExprBase; const afield: AnsiString);
+ function value (scope: TExprScope): Variant; override;
+ procedure assign (scope: TExprScope; var v: Variant); override;
+ function toString (): AnsiString; override;
+ function clone (): TExprBase; override;
+ end;
+
+ TBinExpr = class(TExprBase)
+ private
+ mOp0, mOp1: TExprBase;
+ private
+ class procedure coerce (var v0, v1: Variant); // modifies both variants
+ public
+ constructor Create (aop0, aop1: TExprBase);
+ destructor Destroy (); override;
+ function clone (): TExprBase; override;
+ end;
+
+ TBinExprAdd = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprSub = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprMul = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprDiv = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprMod = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+
+ TBinExprLogAnd = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprLogOr = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+
+ TBinExprCmpLess = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprCmpGreat = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprCmpLessEqu = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprCmpGreatEqu = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprCmpEqu = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+ TBinExprCmpNotEqu = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+
+ TBinAssign = class(TBinExpr) public function value (scope: TExprScope): Variant; override; function toString (): AnsiString; override; end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+function typeKind2Str (t: TTypeKind): AnsiString;
+
+
+implementation
+
+uses
+ SysUtils, utils;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+function typeKind2Str (t: TTypeKind): AnsiString;
+begin
+ case t of
+ tkUnknown: result := 'Unknown';
+ tkInteger: result := 'Integer';
+ tkChar: result := 'AnsiChar';
+ tkEnumeration: result := 'Enumeration';
+ tkFloat: result := 'Float';
+ tkSet: result := 'Set';
+ tkMethod: result := 'Method';
+ tkSString: result := 'ShortString';
+ tkLString: result := 'LString';
+ tkAString: result := 'AnsiString';
+ tkWString: result := 'WideString';
+ tkVariant: result := 'Variant';
+ tkArray: result := 'Array';
+ tkRecord: result := 'Record';
+ tkInterface: result := 'Interface';
+ tkClass: result := 'Class';
+ tkObject: result := 'Object';
+ tkWChar: result := 'WideChar';
+ tkBool: result := 'Boolean';
+ tkInt64: result := 'Int64';
+ tkQWord: result := 'UInt64';
+ tkDynArray: result := 'DynArray';
+ tkInterfaceRaw: result := 'InterfaceRaw';
+ tkProcVar: result := 'ProcVar';
+ tkUString: result := 'UString';
+ tkUChar: result := 'UChar';
+ tkHelper: result := 'Helper';
+ tkFile: result := 'File';
+ tkClassRef: result := 'ClassRef';
+ tkPointer: result := 'Pointer';
+ else result := '<unknown>';
+ end;
+end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+(*
+procedure dumpPublishedProperties (obj: TObject);
+var
+ pt: PTypeData;
+ pi: PTypeInfo;
+ i, j: Integer;
+ pp: PPropList;
+begin
+ if (obj = nil) then exit;
+ //e_LogWritefln('Object of type ''%s'':', [obj.ClassName]);
+ pi := obj.ClassInfo;
+ pt := GetTypeData(pi);
+ //e_LogWritefln('property count: %s', [pt.PropCount]);
+ GetMem(pp, pt^.PropCount*sizeof(Pointer));
+ try
+ j := GetPropList(pi, [tkInteger, tkBool, tkSString, tkLString, tkAString, tkSet, tkEnumeration], pp);
+ //e_LogWritefln('ordinal property count: %s', [j]);
+ for i := 0 to j-1 do
+ begin
+ {
+ if (typinfo.PropType(obj, pp^[i].name) in [tkSString, tkLString, tkAString]) then
+ begin
+ e_LogWritefln(' #%s: <%s>; type: %s; value: <%s>', [i+1, pp^[i].name, typeKind2Str(typinfo.PropType(obj, pp^[i].name)), GetStrProp(obj, pp^[i])]);
+ end
+ else if (typinfo.PropType(obj, pp^[i].name) = tkSet) then
+ begin
+ e_LogWritefln(' #%s: <%s>; type: %s; value: %s', [i+1, pp^[i].name, typeKind2Str(typinfo.PropType(obj, pp^[i].name)), GetSetProp(obj, pp^[i], true)]);
+ end
+ else if (typinfo.PropType(obj, pp^[i].name) = tkEnumeration) then
+ begin
+ e_LogWritefln(' #%s: <%s>; type: %s; value: <%s>', [i+1, pp^[i].name, typeKind2Str(typinfo.PropType(obj, pp^[i].name)), GetEnumProp(obj, pp^[i])]);
+ end
+ else
+ begin
+ e_LogWritefln(' #%s: <%s>; type: %s; value: %s', [i+1, pp^[i].name, typeKind2Str(typinfo.PropType(obj, pp^[i].name)), GetOrdProp(obj, pp^[i])]);
+ end;
+ }
+ end;
+ finally
+ FreeMem(pp);
+ end;
+end;
+*)
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+constructor TPropHash.Create (aklass: TClass);
+var
+ pi: PTypeInfo;
+ pt: PTypeData;
+ idx: Integer;
+begin
+ mClass := aklass;
+ mNames := hashNewStrInt();
+ pi := aklass.ClassInfo;
+ pt := GetTypeData(pi);
+ GetMem(pl, pt^.PropCount*sizeof(Pointer));
+ pc := GetPropList(pi, [tkInteger, tkBool, tkSString, tkLString, tkAString, {tkSet,} tkEnumeration], pl);
+ for idx := 0 to pc-1 do mNames.put(pl^[idx].name, idx);
+end;
+
+destructor TPropHash.Destroy ();
+begin
+ mNames.Free();
+ mNames := nil;
+ if (pl <> nil) then FreeMem(pl);
+ pl := nil;
+ pc := 0;
+ mClass := nil;
+end;
+
+function TPropHash.get (obj: TObject; const fldname: AnsiString; out v: Variant): Boolean;
+var
+ idx: Integer;
+begin
+ result := false;
+ if mNames.get(fldname, idx) then
+ begin
+ result := true;
+ case pl^[idx].PropType.Kind of
+ tkSString, tkLString, tkAString: v := GetStrProp(obj, pl^[idx]);
+ tkEnumeration: v := GetEnumProp(obj, pl^[idx]);
+ tkBool: if (GetOrdProp(obj, pl^[idx]) = 0) then v := false else v := true;
+ tkInteger, tkChar: v := LongInt(GetOrdProp(obj, pl^[idx]));
+ //tkFloat: result := 'Float';
+ //tkClass: result := 'Class';
+ //tkInt64: result := 'Int64';
+ //tkClassRef: result := 'ClassRef';
+ else result := false;
+ end;
+ if result then exit;
+ end;
+ v := Unassigned;
+end;
+
+function TPropHash.put (obj: TObject; const fldname: AnsiString; var v: Variant): Boolean;
+var
+ idx: Integer;
+begin
+ result := false;
+ if mNames.get(fldname, idx) then
+ begin
+ result := true;
+ case pl^[idx].PropType.Kind of
+ tkSString, tkLString, tkAString: SetStrProp(obj, pl^[idx], VarToStr(v));
+ tkEnumeration: SetEnumProp(obj, pl^[idx], VarToStr(v));
+ tkBool: if TExprBase.coerce2bool(v) then SetOrdProp(obj, pl^[idx], 1) else SetOrdProp(obj, pl^[idx], 0);
+ tkInteger, tkChar: SetOrdProp(obj, pl^[idx], TExprBase.toInt(v));
+ //tkFloat: result := 'Float';
+ //tkClass: result := 'Class';
+ //tkInt64: result := 'Int64';
+ //tkClassRef: result := 'ClassRef';
+ else result := false;
+ end;
+ if result then exit;
+ end;
+end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+function TExprScope.getObj (const aname: AnsiString): TObject; begin result := nil; TExprBase.error(); end;
+function TExprScope.getField (obj: TObject; const afldname: AnsiString): Variant; begin result := Unassigned; TExprBase.error(); end;
+procedure TExprScope.setField (obj: TObject; const afldname: AnsiString; var aval: Variant); begin TExprBase.error(); end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+class procedure TExprBase.error (); begin raise Exception.Create('math error'); end;
+
+class function TExprBase.coerce2bool (var v0: Variant): Boolean;
+begin
+ case varType(v0) of
+ varEmpty: result := false;
+ varNull: result := false;
+ varSingle: result := (Single(v0) <> 0.0);
+ varDouble: result := (Double(v0) <> 0.0);
+ varString: result := (Length(AnsiString(v0)) <> 0);
+ varBoolean: result := Boolean(v0);
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := (LongInt(v0) <> 0);
+ varInt64: result := (Int64(v0) <> 0);
+ varQWord: result := (UInt64(v0) <> 0);
+ else begin result := false; error(); end;
+ end;
+end;
+
+class function TExprBase.toInt (var v: Variant): LongInt;
+begin
+ case varType(v) of
+ varSingle: result := trunc(Single(v));
+ varDouble: result := trunc(Double(v));
+ varBoolean: if Boolean(v) then result := 1 else result := 0;
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := LongInt(v);
+ varInt64: result := LongInt(Int64(v));
+ else begin result := 0; TExprBase.error(); end;
+ end;
+end;
+
+procedure TExprBase.assign (scope: TExprScope; var v: Variant); begin error(); end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+constructor TExprStatList.Create (); begin mList := nil; end;
+destructor TExprStatList.Destroy (); var f: Integer; begin for f := 0 to High(mList) do mList[f].Free(); mList := nil; end;
+
+function TExprStatList.value (scope: TExprScope): Variant;
+var
+ f: Integer;
+begin
+ result := false;
+ for f := 0 to High(mList) do result := mList[f].value(scope);
+end;
+function TExprStatList.toString (): AnsiString;
+var
+ f: Integer;
+begin
+ result := '';
+ for f := 0 to High(mList) do result += mList[f].toString()+';';
+end;
+function TExprStatList.clone (): TExprBase;
+var
+ r: TExprStatList;
+ f: Integer;
+begin
+ r := TExprStatList.Create();
+ SetLength(r.mList, Length(mList));
+ for f := 0 to High(mList) do r.mList[f] := nil;
+ try
+ for f := 0 to High(mList) do r.mList[f] := mList[f].clone();
+ except
+ r.Free();
+ end;
+ result := r;
+end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+constructor TObjExpr.Create (const aval: AnsiString); begin mName := aval; end;
+function TObjExpr.value (scope: TExprScope): Variant; begin result := UInt64(PtrUInt(Pointer(scope.getObj(mName)))); end;
+function TObjExpr.toString (): AnsiString; begin result := mName; end;
+function TObjExpr.clone (): TExprBase; begin result := TObjExpr.Create(mName); end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+constructor TLitExpr.Create (aval: Boolean); begin mValue := aval; end;
+constructor TLitExpr.Create (aval: LongInt); begin mValue := aval; end;
+constructor TLitExpr.Create (const aval: AnsiString); begin mValue := aval; end;
+function TLitExpr.value (scope: TExprScope): Variant; begin result := mValue; end;
+function TLitExpr.toString (): AnsiString; begin result := VarToStr(mValue); end;
+function TLitExpr.clone (): TExprBase; begin result := TLitExpr.Create(0); (result as TLitExpr).mValue := mValue; end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+constructor TUnExpr.Create (aop0: TExprBase); begin mOp0 := aop0; end;
+destructor TUnExpr.Destroy (); begin mOp0.Free(); inherited; end;
+function TUnExpr.clone (): TExprBase; begin result := (self.ClassType.Create() as TUnExpr); (result as TUnExpr).mOp0 := mOp0.clone(); end;
+
+function TUnExprNeg.value (scope: TExprScope): Variant;
+begin
+ result := mOp0.value(scope);
+ case varType(result) of
+ varSingle: result := -Single(result);
+ varDouble: result := -Double(result);
+ varShortInt, varSmallInt, varInteger, varByte, varWord: result := -LongInt(result);
+ varInt64: result := -Int64(result);
+ varLongWord: result := -LongInt(result);
+ else error();
+ end;
+end;
+
+function TUnExprNeg.toString (): AnsiString; begin result := '-('+mOp0.toString()+')'; end;
+
+function TUnExprNot.value (scope: TExprScope): Variant;
+begin
+ result := mOp0.value(scope);
+ result := not coerce2bool(result);
+end;
+
+function TUnExprNot.toString (): AnsiString; begin result := '!('+mOp0.toString()+')'; end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+constructor TDotExpr.Create (aop0: TExprBase; const afield: AnsiString);
+begin
+ mOp0 := aop0;
+ mField := afield;
+end;
+
+function TDotExpr.value (scope: TExprScope): Variant;
+begin
+ result := mOp0.value(scope);
+ if (varType(result) <> varQWord) then error();
+ result := scope.getField(TObject(PtrUInt(UInt64(result))), mField);
+end;
+
+procedure TDotExpr.assign (scope: TExprScope; var v: Variant);
+var
+ o: Variant;
+begin
+ o := mOp0.value(scope);
+ if (varType(o) <> varQWord) then error();
+ scope.setField(TObject(PtrUInt(UInt64(o))), mField, v);
+end;
+
+function TDotExpr.clone (): TExprBase; begin result := TDotExpr.Create(mOp0, mField); end;
+
+function TDotExpr.toString (): AnsiString; begin result := mOp0.toString()+'.'+mField; end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+constructor TBinExpr.Create (aop0, aop1: TExprBase); begin mOp0 := aop0; mOp1 := aop1; end;
+destructor TBinExpr.Destroy (); begin mOp1.Free(); mOp0.Free(); inherited; end;
+function TBinExpr.clone (): TExprBase; begin result := (self.ClassType.Create() as TBinExpr); (result as TBinExpr).mOp0 := mOp0.clone(); (result as TBinExpr).mOp1 := mOp1.clone(); end;
+
+class procedure TBinExpr.coerce (var v0, v1: Variant);
+ function isFloat (var v: Variant): Boolean; inline;
+ begin
+ case varType(v) of
+ varSingle, varDouble: result := true;
+ else result := false;
+ end;
+ end;
+
+ function isInt (var v: Variant): Boolean; inline;
+ begin
+ case varType(v) of
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := true;
+ else result := false;
+ end;
+ end;
+
+ function isBool (var v: Variant): Boolean; inline;
+ begin
+ result := (varType(v) = varBoolean);
+ end;
+
+ function isStr (var v: Variant): Boolean; inline;
+ begin
+ result := (varType(v) = varString);
+ end;
+
+begin
+ if (varType(v0) <> varType(v1)) then
+ begin
+ if isStr(v0) or isStr(v1) then
+ begin
+ if isFloat(v0) then v0 := formatstrf('%s', [Double(v0)])
+ else if isInt(v0) then v0 := formatstrf('%s', [LongInt(v0)])
+ else if isBool(v0) then v0 := formatstrf('%s', [Boolean(v0)])
+ else if isStr(v0) then begin end
+ else error();
+ if isFloat(v1) then v1 := formatstrf('%s', [Double(v1)])
+ else if isInt(v1) then v1 := formatstrf('%s', [LongInt(v1)])
+ else if isBool(v1) then v1 := formatstrf('%s', [Boolean(v1)])
+ else if isStr(v0) then begin end
+ else error();
+ end
+ else if isFloat(v0) or isFloat(v1) then
+ begin
+ if isFloat(v0) or isInt(v0) then v0 := Double(v0)
+ else if isBool(v0) then begin if Boolean(v0) then v0 := Double(1.0) else v0 := Double(0.0); end
+ else error();
+ if isFloat(v1) or isInt(v1) then v1 := Double(v1)
+ else if isBool(v1) then begin if Boolean(v1) then v1 := Double(1.0) else v1 := Double(0.0); end
+ else error();
+ end
+ else if isInt(v0) or isInt(v1) then
+ begin
+ if isBool(v0) then begin if Boolean(v0) then v0 := LongInt(1) else v0 := LongInt(0); end
+ else if isFloat(v0) then v0 := LongInt(trunc(Double(v0)))
+ else if isInt(v0) then begin end
+ else error();
+ if isBool(v1) then begin if Boolean(v1) then v1 := LongInt(1) else v1 := LongInt(0); end
+ else if isFloat(v1) then v1 := LongInt(trunc(Double(v1)))
+ else if isInt(v1) then begin end
+ else error();
+ end
+ else
+ begin
+ error();
+ end;
+ end;
+end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+function TBinExprAdd.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Double(result)+Double(r1);
+ varString: result := AnsiString(result)+AnsiString(r1);
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := LongInt(result)+LongInt(r1);
+ varInt64: result := Int64(result)+Int64(r1);
+ else error();
+ end;
+end;
+function TBinExprAdd.toString (): AnsiString; begin result := '('+mOp0.toString()+'+'+mOp1.toString+')'; end;
+
+function TBinExprSub.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Double(result)-Double(r1);
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := LongInt(result)-LongInt(r1);
+ varInt64: result := Int64(result)-Int64(r1);
+ else error();
+ end;
+end;
+function TBinExprSub.toString (): AnsiString; begin result := '('+mOp0.toString()+'-'+mOp1.toString+')'; end;
+
+function TBinExprMul.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Double(result)*Double(r1);
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := LongInt(result)*LongInt(r1);
+ varInt64: result := Int64(result)*Int64(r1);
+ else error();
+ end;
+end;
+function TBinExprMul.toString (): AnsiString; begin result := '('+mOp0.toString()+'*'+mOp1.toString+')'; end;
+
+function TBinExprDiv.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Double(result)/Double(r1);
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := LongInt(result) div LongInt(r1);
+ varInt64: result := Int64(result) div Int64(r1);
+ else error();
+ end;
+end;
+function TBinExprDiv.toString (): AnsiString; begin result := '('+mOp0.toString()+'/'+mOp1.toString+')'; end;
+
+function TBinExprMod.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := LongInt(result) mod LongInt(r1);
+ varInt64: result := Int64(result) mod Int64(r1);
+ else error();
+ end;
+end;
+function TBinExprMod.toString (): AnsiString; begin result := '('+mOp0.toString()+'%'+mOp1.toString+')'; end;
+
+function TBinExprLogAnd.value (scope: TExprScope): Variant;
+begin
+ result := mOp0.value(scope);
+ if not coerce2bool(result) then begin result := false; exit; end;
+ result := mOp1.value(scope);
+ result := coerce2bool(result);
+end;
+function TBinExprLogAnd.toString (): AnsiString; begin result := '('+mOp0.toString()+'&&'+mOp1.toString+')'; end;
+
+function TBinExprLogOr.value (scope: TExprScope): Variant;
+begin
+ result := mOp0.value(scope);
+ if coerce2bool(result) then begin result := true; exit; end;
+ result := mOp1.value(scope);
+ result := coerce2bool(result);
+end;
+function TBinExprLogOr.toString (): AnsiString; begin result := '('+mOp0.toString()+'||'+mOp1.toString+')'; end;
+
+function TBinExprCmpLess.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Boolean(Double(result) < Double(r1));
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := Boolean(LongInt(result) < LongInt(r1));
+ varInt64: result := Boolean(Int64(result) < Int64(r1));
+ varString: result := Boolean(AnsiString(result) < AnsiString(r1));
+ else error();
+ end;
+end;
+function TBinExprCmpLess.toString (): AnsiString; begin result := '('+mOp0.toString()+'<'+mOp1.toString+')'; end;
+
+function TBinExprCmpGreat.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Boolean(Double(result) > Double(r1));
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := Boolean(LongInt(result) > LongInt(r1));
+ varInt64: result := Boolean(Int64(result) > Int64(r1));
+ varString: result := Boolean(AnsiString(result) > AnsiString(r1));
+ else error();
+ end;
+end;
+function TBinExprCmpGreat.toString (): AnsiString; begin result := '('+mOp0.toString()+'>'+mOp1.toString+')'; end;
+
+function TBinExprCmpLessEqu.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Boolean(Double(result) <= Double(r1));
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := Boolean(LongInt(result) <= LongInt(r1));
+ varInt64: result := Boolean(Int64(result) <= Int64(r1));
+ varString: result := Boolean(AnsiString(result) <= AnsiString(r1));
+ else error();
+ end;
+end;
+function TBinExprCmpLessEqu.toString (): AnsiString; begin result := '('+mOp0.toString()+'<='+mOp1.toString+')'; end;
+
+function TBinExprCmpGreatEqu.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Boolean(Double(result) >= Double(r1));
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := Boolean(LongInt(result) >= LongInt(r1));
+ varInt64: result := Boolean(Int64(result) >= Int64(r1));
+ varString: result := Boolean(AnsiString(result) >= AnsiString(r1));
+ else error();
+ end;
+end;
+function TBinExprCmpGreatEqu.toString (): AnsiString; begin result := '('+mOp0.toString()+'>='+mOp1.toString+')'; end;
+
+function TBinExprCmpEqu.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Boolean(Double(result) = Double(r1));
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := Boolean(LongInt(result) = LongInt(r1));
+ varInt64: result := Boolean(Int64(result) = Int64(r1));
+ varString: result := Boolean(AnsiString(result) = AnsiString(r1));
+ varBoolean: result := (Boolean(result) = Boolean(r1));
+ varQWord: result := (UInt64(result) = UInt64(r1));
+ else error();
+ end;
+end;
+function TBinExprCmpEqu.toString (): AnsiString; begin result := '('+mOp0.toString()+'=='+mOp1.toString+')'; end;
+
+function TBinExprCmpNotEqu.value (scope: TExprScope): Variant;
+var
+ r1: Variant;
+begin
+ result := mOp0.value(scope);
+ r1 := mOp1.value(scope);
+ coerce(result, r1);
+ case varType(result) of
+ varSingle, varDouble: result := Boolean(Double(result) <> Double(r1));
+ varShortInt, varSmallint, varInteger, varByte, varWord, varLongWord: result := Boolean(LongInt(result) <> LongInt(r1));
+ varInt64: result := Boolean(Int64(result) <> Int64(r1));
+ varString: result := Boolean(AnsiString(result) <> AnsiString(r1));
+ varBoolean: result := (Boolean(result) <> Boolean(r1));
+ varQWord: result := (UInt64(result) <> UInt64(r1));
+ else error();
+ end;
+end;
+function TBinExprCmpNotEqu.toString (): AnsiString; begin result := '('+mOp0.toString()+'<>'+mOp1.toString+')'; end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+function TBinAssign.value (scope: TExprScope): Variant;
+begin
+ result := mOp1.value(scope);
+ mOp0.assign(scope, result);
+end;
+
+function TBinAssign.toString (): AnsiString; begin result := mOp0.toString()+'='+mOp1.toString(); end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+class function TExprBase.parse (const str: AnsiString; allowAssign: Boolean=false): TExprBase;
+var
+ pr: TTextParser;
+begin
+ pr := TStrTextParser.Create(str);
+ try
+ result := parse(pr, allowAssign);
+ if (pr.tokType <> pr.TTEOF) then begin result.Free(); error(); end;
+ finally
+ pr.Free();
+ end;
+end;
+
+class function TExprBase.parseStatList (const str: AnsiString): TExprBase;
+var
+ pr: TTextParser;
+ r: TExprStatList;
+ e: TExprBase;
+begin
+ pr := TStrTextParser.Create(str);
+ if (pr.tokType = pr.TTEOF) then begin pr.Free(); result := nil; exit; end;
+ r := TExprStatList.Create();
+ result := nil;
+ try
+ while true do
+ begin
+ while pr.eatTT(pr.TTSemi) do begin end;
+ if (pr.tokType = pr.TTEOF) then break;
+ e := parse(pr, true);
+ if (e = nil) then break;
+ SetLength(r.mList, Length(r.mList)+1);
+ r.mList[High(r.mList)] := e;
+ if (pr.tokType = pr.TTEOF) then break;
+ pr.expectTT(pr.TTSemi);
+ end;
+ result := r;
+ r := nil;
+ finally
+ r.Free();
+ pr.Free();
+ end;
+end;
+
+
+class function TExprBase.parse (pr: TTextParser; allowAssign: Boolean=false): TExprBase;
+
+ function expr (): TExprBase; forward;
+
+ function doTerm (): TExprBase;
+ begin
+ result := nil;
+ try
+ if pr.eatDelim('(') then begin result := expr(); pr.expectDelim(')'); exit; end;
+ if pr.eatDelim('!') then begin result := expr(); result := TUnExprNot.Create(result); exit; end;
+ if pr.eatDelim('-') then begin result := expr(); result := TUnExprNeg.Create(result); exit; end;
+ if pr.eatDelim('+') then begin result := expr(); exit; end;
+ if (pr.tokType = pr.TTInt) then begin result := TLitExpr.Create(pr.expectInt()); exit; end;
+ if (pr.tokType = pr.TTStr) then begin result := TLitExpr.Create(pr.expectStr(true)); exit; end;
+ if (pr.tokType = pr.TTId) then
+ begin
+ if (pr.tokStr = 'true') then begin result := TLitExpr.Create(true); pr.skipToken(); exit; end;
+ if (pr.tokStr = 'false') then begin result := TLitExpr.Create(false); pr.skipToken(); exit; end;
+ if (CompareText(pr.tokStr, 'true') = 0) or (CompareText(pr.tokStr, 'false') = 0) then error();
+ result := TObjExpr.Create(pr.expectId());
+ while (pr.tokType = pr.TTDelim) and (pr.tokChar = '.') do
+ begin
+ pr.skipToken();
+ result := TDotExpr.Create(result, pr.expectId());
+ end;
+ exit;
+ end;
+ except
+ result.Free();
+ raise;
+ end;
+ error();
+ end;
+
+ function doMulDiv (): TExprBase;
+ begin
+ result := doTerm();
+ try
+ while true do
+ begin
+ if pr.eatDelim('*') then result := TBinExprMul.Create(result, doTerm())
+ else if pr.eatDelim('/') then result := TBinExprDiv.Create(result, doTerm())
+ else if pr.eatDelim('%') then result := TBinExprMod.Create(result, doTerm())
+ else break;
+ end;
+ except
+ result.Free();
+ raise;
+ end;
+ end;
+
+ function doPlusMinus (): TExprBase;
+ begin
+ result := doMulDiv();
+ try
+ while true do
+ begin
+ if pr.eatDelim('+') then result := TBinExprAdd.Create(result, doMulDiv())
+ else if pr.eatDelim('-') then result := TBinExprSub.Create(result, doMulDiv())
+ else break;
+ end;
+ except
+ result.Free();
+ raise;
+ end;
+ end;
+
+ function doCmp (): TExprBase;
+ begin
+ result := doPlusMinus();
+ try
+ while true do
+ begin
+ if pr.eatDelim('<') then result := TBinExprCmpLess.Create(result, doPlusMinus())
+ else if pr.eatDelim('>') then result := TBinExprCmpGreat.Create(result, doPlusMinus())
+ else if pr.eatTT(pr.TTLessEqu) then result := TBinExprCmpLessEqu.Create(result, doPlusMinus())
+ else if pr.eatTT(pr.TTGreatEqu) then result := TBinExprCmpGreatEqu.Create(result, doPlusMinus())
+ else break;
+ end;
+ except
+ result.Free();
+ raise;
+ end;
+ end;
+
+ function doCmpEqu (): TExprBase;
+ begin
+ result := doCmp();
+ try
+ while true do
+ begin
+ if pr.eatTT(pr.TTEqu) then result := TBinExprCmpEqu.Create(result, doCmp())
+ else if pr.eatTT(pr.TTNotEqu) then result := TBinExprCmpNotEqu.Create(result, doCmp())
+ else break;
+ end;
+ except
+ result.Free();
+ raise;
+ end;
+ end;
+
+ function doLogAnd (): TExprBase;
+ begin
+ result := doCmpEqu();
+ try
+ while true do
+ begin
+ if pr.eatTT(pr.TTLogAnd) then result := TBinExprLogAnd.Create(result, doCmpEqu()) else break;
+ end;
+ except
+ result.Free();
+ raise;
+ end;
+ end;
+
+ function doLogOr (): TExprBase;
+ begin
+ result := doLogAnd();
+ try
+ while true do
+ begin
+ if pr.eatTT(pr.TTLogOr) then result := TBinExprLogOr.Create(result, doLogAnd()) else break;
+ end;
+ except
+ result.Free();
+ raise;
+ end;
+ end;
+
+ // funcall, [], dot
+ // !, ~
+ // *, /, %
+ // +, -
+ // <<, >>
+ // <, <=, >, >=
+ // ==, !=
+ // &
+ // ^
+ // |
+ // &&
+ // ||
+
+ function expr (): TExprBase;
+ var
+ neg: Boolean = false;
+ begin
+ if pr.eatDelim('-') then neg := true
+ else if pr.eatDelim('+') then neg := false;
+ result := doLogOr();
+ if neg then result := TUnExprNeg.Create(result);
+ end;
+
+var
+ oas: Boolean;
+begin
+ if (pr = nil) or (pr.tokType = pr.TTEOF) then begin result := nil; exit; end;
+ oas := pr.allowSignedNumbers;
+ pr.allowSignedNumbers := false;
+ try
+ result := expr();
+ if allowAssign and pr.eatDelim('=') then
+ try
+ result := TBinAssign.Create(result, expr());
+ except
+ result.Free();
+ end;
+ finally
+ pr.allowSignedNumbers := oas;
+ end;
+end;
+
+
+{
+ varEmpty:
+ varNull:
+ varSingle:
+ varDouble:
+ varDecimal:
+ varCurrency:
+ varDate:
+ varOleStr:
+ varStrArg:
+ varString:
+ varDispatch:
+ varBoolean:
+ varVariant:
+ varUnknown:
+ varShortInt:
+ varSmallint:
+ varInteger:
+ varInt64:
+ varByte:
+ varWord:
+ varLongWord:
+ varQWord:
+ varError:
+}
+end.
#116#114#105#103#103#101#114#100#97#116#97#34#32#116#121#112#101#32#116#114+
#105#103#100#97#116#97#91#49#50#56#93#32#111#102#102#115#101#116#32#50#48#59+
#32#47#47#32#116#104#101#32#111#110#108#121#32#115#112#101#99#105#97#108#32+
- #110#101#115#116#101#100#32#115#116#114#117#99#116#117#114#101#10#125#10#10+
- #10#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
+ #110#101#115#116#101#100#32#115#116#114#117#99#116#117#114#101#10#32#32#47+
+ #47#68#79#32#78#79#84#32#85#83#69#33#32#101#120#112#101#114#105#109#101#110+
+ #116#97#108#32#102#101#97#116#117#114#101#33#32#119#105#108#108#32#98#101#32+
+ #114#101#109#111#118#101#100#33#10#32#32#34#101#120#111#109#97#95#105#110+
+ #105#116#34#32#116#121#112#101#32#115#116#114#105#110#103#32#100#101#102#97+
+ #117#108#116#32#34#34#32#116#105#112#32#34#119#105#108#108#32#98#101#32#99+
+ #97#108#108#101#100#32#111#110#32#116#114#105#103#103#101#114#32#99#114#101+
+ #97#116#105#111#110#34#59#10#32#32#34#101#120#111#109#97#95#116#104#105#110+
+ #107#34#32#116#121#112#101#32#115#116#114#105#110#103#32#100#101#102#97#117+
+ #108#116#32#34#34#32#116#105#112#32#34#119#105#108#108#32#98#101#32#99#97+
+ #108#108#101#100#32#111#110#32#101#97#99#104#32#116#104#105#110#107#32#115+
+ #116#101#112#34#59#10#32#32#34#101#120#111#109#97#95#99#104#101#99#107#34#32+
+ #116#121#112#101#32#115#116#114#105#110#103#32#100#101#102#97#117#108#116#32+
+ #34#34#32#116#105#112#32#34#119#105#108#108#32#98#101#32#99#97#108#108#101+
+ #100#32#98#101#102#111#114#101#32#97#99#116#105#118#97#116#105#111#110#34#59+
+ #10#32#32#34#101#120#111#109#97#95#97#99#116#105#111#110#34#32#116#121#112+
+ #101#32#115#116#114#105#110#103#32#100#101#102#97#117#108#116#32#34#34#32+
+ #116#105#112#32#34#119#105#108#108#32#98#101#32#99#97#108#108#101#100#32#111+
+ #110#32#97#99#116#105#118#97#116#105#111#110#34#59#10#125#10#10#10#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
- #47#47#47#47#47#47#10#47#47#32#115#112#101#99#105#97#108#32#116#101#120#116+
- #117#114#101#32#105#100#101#110#116#105#102#105#101#114#115#44#32#117#115+
- #101#100#32#116#111#32#103#101#110#101#114#97#116#101#32#112#97#115#99#97+
- #108#32#115#111#117#114#99#101#115#10#101#110#117#109#32#84#101#120#116#117+
- #114#101#83#112#101#99#105#97#108#32#123#10#32#32#84#69#88#84#85#82#69#95#83+
- #80#69#67#73#65#76#95#87#65#84#69#82#32#61#32#45#49#44#10#32#32#84#69#88#84+
- #85#82#69#95#83#80#69#67#73#65#76#95#65#67#73#68#49#32#61#32#45#50#44#10#32+
- #32#84#69#88#84#85#82#69#95#83#80#69#67#73#65#76#95#65#67#73#68#50#32#61#32+
- #45#51#44#10#32#32#84#69#88#84#85#82#69#95#78#79#78#69#32#61#32#45#52#44#10+
- #125#10#10#47#47#32#100#105#114#101#99#116#105#111#110#115#10#101#110#117+
- #109#32#68#105#114#84#121#112#101#32#123#10#32#32#68#73#82#95#76#69#70#84#44+
- #32#47#47#32#48#10#32#32#68#73#82#95#82#73#71#72#84#44#32#47#47#32#49#10#32+
- #32#68#73#82#95#83#79#77#69#84#72#73#78#71#50#44#32#47#47#32#50#10#125#10#10+
- #47#47#32#116#114#105#103#103#101#114#115#10#101#110#117#109#32#84#114#105+
- #103#103#101#114#84#121#112#101#32#123#10#32#32#84#82#73#71#71#69#82#95#78+
- #79#78#69#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#88#73#84#44+
- #32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#44+
- #32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#79#80#69#78#68#79#79#82#44+
- #32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82+
- #44#32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#68#79#79#82#44#32#47#47+
- #32#53#10#32#32#84#82#73#71#71#69#82#95#68#79#79#82#53#44#32#47#47#32#54#10+
- #32#32#84#82#73#71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#47#47#32#55+
- #10#32#32#84#82#73#71#71#69#82#95#84#82#65#80#44#32#47#47#32#56#10#32#32#84+
- #82#73#71#71#69#82#95#80#82#69#83#83#44#32#47#47#32#57#10#32#32#84#82#73#71+
- #71#69#82#95#83#69#67#82#69#84#44#32#47#47#32#49#48#10#32#32#84#82#73#71#71+
- #69#82#95#76#73#70#84#85#80#44#32#47#47#32#49#49#10#32#32#84#82#73#71#71#69+
- #82#95#76#73#70#84#68#79#87#78#44#32#47#47#32#49#50#10#32#32#84#82#73#71#71+
- #69#82#95#76#73#70#84#44#32#47#47#32#49#51#10#32#32#84#82#73#71#71#69#82#95+
- #84#69#88#84#85#82#69#44#32#47#47#32#49#52#10#32#32#84#82#73#71#71#69#82#95+
- #79#78#44#32#47#47#32#49#53#10#32#32#84#82#73#71#71#69#82#95#79#70#70#44#32+
- #47#47#32#49#54#10#32#32#84#82#73#71#71#69#82#95#79#78#79#70#70#44#32#47#47+
- #32#49#55#10#32#32#84#82#73#71#71#69#82#95#83#79#85#78#68#44#32#47#47#32#49+
- #56#10#32#32#84#82#73#71#71#69#82#95#83#80#65#87#78#77#79#78#83#84#69#82#44+
- #32#47#47#32#49#57#10#32#32#84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69+
- #77#44#32#47#47#32#50#48#10#32#32#84#82#73#71#71#69#82#95#77#85#83#73#67#44+
- #32#47#47#32#50#49#10#32#32#84#82#73#71#71#69#82#95#80#85#83#72#44#32#47#47+
- #32#50#50#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#44#32#47#47#32#50+
- #51#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#44#32#47#47#32#50+
- #52#10#32#32#84#82#73#71#71#69#82#95#68#65#77#65#71#69#44#32#47#47#32#50#53+
- #10#32#32#84#82#73#71#71#69#82#95#72#69#65#76#84#72#44#32#47#47#32#50#54#10+
- #32#32#84#82#73#71#71#69#82#95#83#72#79#84#44#32#47#47#32#50#55#10#32#32#84+
- #82#73#71#71#69#82#95#69#70#70#69#67#84#44#32#47#47#32#50#56#10#32#32#84#82+
- #73#71#71#69#82#95#83#67#82#73#80#84#44#32#47#47#32#50#57#10#32#32#47#47#10+
- #32#32#84#82#73#71#71#69#82#95#77#65#88#32#61#32#77#65#88#44#10#125#10#10#47+
- #47#32#34#97#115#32#88#88#88#34#32#109#101#97#110#115#32#34#103#101#110#101+
- #114#97#116#101#32#116#104#105#115#32#105#100#101#110#116#105#102#105#101+
- #114#32#102#111#114#32#112#97#115#99#97#108#32#115#111#117#114#99#101#115#10+
- #98#105#116#115#101#116#32#80#97#110#101#108#84#121#112#101#32#123#10#32#32+
- #80#65#78#69#76#95#78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#80#65+
- #78#69#76#95#87#65#76#76#44#32#47#47#32#49#10#32#32#80#65#78#69#76#95#66#65+
- #67#75#44#32#47#47#32#50#10#32#32#80#65#78#69#76#95#70#79#82#69#44#32#47#47+
- #32#52#10#32#32#80#65#78#69#76#95#87#65#84#69#82#44#32#47#47#32#56#10#32#32+
- #80#65#78#69#76#95#65#67#73#68#49#44#32#47#47#32#49#54#10#32#32#80#65#78#69+
- #76#95#65#67#73#68#50#44#32#47#47#32#51#50#10#32#32#80#65#78#69#76#95#83#84+
- #69#80#44#32#47#47#32#54#52#10#32#32#80#65#78#69#76#95#76#73#70#84#85#80#44+
- #32#47#47#32#49#50#56#10#32#32#80#65#78#69#76#95#76#73#70#84#68#79#87#78#44+
- #32#47#47#32#50#53#54#10#32#32#80#65#78#69#76#95#79#80#69#78#68#79#79#82#44+
- #32#47#47#32#53#49#50#10#32#32#80#65#78#69#76#95#67#76#79#83#69#68#79#79#82+
- #44#32#47#47#32#49#48#50#52#10#32#32#80#65#78#69#76#95#66#76#79#67#75#77#79+
- #78#44#32#47#47#32#50#48#52#56#10#32#32#80#65#78#69#76#95#76#73#70#84#76#69+
- #70#84#44#32#47#47#32#52#48#57#54#10#32#32#80#65#78#69#76#95#76#73#70#84#82+
- #73#71#72#84#44#32#47#47#32#56#49#57#50#10#125#10#10#98#105#116#115#101#116+
- #32#80#97#110#101#108#70#108#97#103#32#123#10#32#32#80#65#78#69#76#95#70#76+
- #65#71#95#78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#80#65#78#69#76+
- #95#70#76#65#71#95#66#76#69#78#68#73#78#71#44#32#47#47#32#49#10#32#32#80#65+
- #78#69#76#95#70#76#65#71#95#72#73#68#69#44#32#47#47#32#50#10#32#32#80#65#78+
- #69#76#95#70#76#65#71#95#87#65#84#69#82#84#69#88#84#85#82#69#83#44#32#47#47+
- #32#52#10#125#10#10#101#110#117#109#32#69#102#102#101#99#116#65#99#116#105+
- #111#110#32#123#10#32#32#69#70#70#69#67#84#95#78#79#78#69#44#32#47#47#32#48+
- #10#32#32#69#70#70#69#67#84#95#84#69#76#69#80#79#82#84#44#32#47#47#32#49#10+
- #32#32#69#70#70#69#67#84#95#82#69#83#80#65#87#78#44#32#47#47#32#50#10#32#32+
- #69#70#70#69#67#84#95#70#73#82#69#44#32#47#47#32#51#10#125#10#10#101#110#117+
- #109#32#73#116#101#109#32#123#10#32#32#73#84#69#77#95#78#79#78#69#44#32#47+
- #47#32#48#10#32#32#73#84#69#77#95#77#69#68#75#73#84#95#83#77#65#76#76#44#32+
- #47#47#32#49#10#32#32#73#84#69#77#95#77#69#68#75#73#84#95#76#65#82#71#69#44+
- #32#47#47#32#50#10#32#32#73#84#69#77#95#77#69#68#75#73#84#95#66#76#65#67#75+
- #44#32#47#47#32#51#10#32#32#73#84#69#77#95#65#82#77#79#82#95#71#82#69#69#78+
- #44#32#47#47#32#52#10#32#32#73#84#69#77#95#65#82#77#79#82#95#66#76#85#69#44+
- #32#47#47#32#53#10#32#32#73#84#69#77#95#83#80#72#69#82#69#95#66#76#85#69#44+
- #32#47#47#32#54#10#32#32#73#84#69#77#95#83#80#72#69#82#69#95#87#72#73#84#69+
- #44#32#47#47#32#55#10#32#32#73#84#69#77#95#83#85#73#84#44#32#47#47#32#56#10+
- #32#32#73#84#69#77#95#79#88#89#71#69#78#44#32#47#47#32#57#10#32#32#73#84#69+
- #77#95#73#78#86#85#76#44#32#47#47#32#49#48#10#32#32#73#84#69#77#95#87#69#65+
- #80#79#78#95#83#65#87#44#32#47#47#32#49#49#10#32#32#73#84#69#77#95#87#69#65+
- #80#79#78#95#83#72#79#84#71#85#78#49#44#32#47#47#32#49#50#10#32#32#73#84#69+
- #77#95#87#69#65#80#79#78#95#83#72#79#84#71#85#78#50#44#32#47#47#32#49#51#10+
- #32#32#73#84#69#77#95#87#69#65#80#79#78#95#67#72#65#73#78#71#85#78#44#32#47+
- #47#32#49#52#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#82#79#67#75#69#84+
- #76#65#85#78#67#72#69#82#44#32#47#47#32#49#53#10#32#32#73#84#69#77#95#87#69+
- #65#80#79#78#95#80#76#65#83#77#65#44#32#47#47#32#49#54#10#32#32#73#84#69#77+
- #95#87#69#65#80#79#78#95#66#70#71#44#32#47#47#32#49#55#10#32#32#73#84#69#77+
- #95#87#69#65#80#79#78#95#83#85#80#69#82#80#85#76#69#77#69#84#44#32#47#47#32+
- #49#56#10#32#32#73#84#69#77#95#65#77#77#79#95#66#85#76#76#69#84#83#44#32#47+
- #47#32#49#57#10#32#32#73#84#69#77#95#65#77#77#79#95#66#85#76#76#69#84#83#95+
- #66#79#88#44#32#47#47#32#50#48#10#32#32#73#84#69#77#95#65#77#77#79#95#83#72+
- #69#76#76#83#44#32#47#47#32#50#49#10#32#32#73#84#69#77#95#65#77#77#79#95#83+
- #72#69#76#76#83#95#66#79#88#44#32#47#47#32#50#50#10#32#32#73#84#69#77#95#65+
- #77#77#79#95#82#79#67#75#69#84#44#32#47#47#32#50#51#10#32#32#73#84#69#77#95+
- #65#77#77#79#95#82#79#67#75#69#84#95#66#79#88#44#32#47#47#32#50#52#10#32#32+
- #73#84#69#77#95#65#77#77#79#95#67#69#76#76#44#32#47#47#32#50#53#10#32#32#73+
- #84#69#77#95#65#77#77#79#95#67#69#76#76#95#66#73#71#44#32#47#47#32#50#54#10+
- #32#32#73#84#69#77#95#65#77#77#79#95#66#65#67#75#80#65#67#75#44#32#47#47#32+
- #50#55#10#32#32#73#84#69#77#95#75#69#89#95#82#69#68#44#32#47#47#32#50#56#10+
- #32#32#73#84#69#77#95#75#69#89#95#71#82#69#69#78#44#32#47#47#32#50#57#10#32+
- #32#73#84#69#77#95#75#69#89#95#66#76#85#69#44#32#47#47#32#51#48#10#32#32#73+
- #84#69#77#95#87#69#65#80#79#78#95#75#65#83#84#69#84#44#32#47#47#32#51#49#10+
- #32#32#73#84#69#77#95#87#69#65#80#79#78#95#80#73#83#84#79#76#44#32#47#47#32+
- #51#50#10#32#32#73#84#69#77#95#66#79#84#84#76#69#44#32#47#47#32#51#51#10#32+
- #32#73#84#69#77#95#72#69#76#77#69#84#44#32#47#47#32#51#52#10#32#32#73#84#69+
- #77#95#74#69#84#80#65#67#75#44#32#47#47#32#51#53#10#32#32#73#84#69#77#95#73+
- #78#86#73#83#44#32#47#47#32#51#54#10#32#32#73#84#69#77#95#87#69#65#80#79#78+
- #95#70#76#65#77#69#84#72#82#79#87#69#82#44#32#47#47#32#51#55#10#32#32#73#84+
- #69#77#95#65#77#77#79#95#70#85#69#76#67#65#78#44#32#47#47#32#51#56#10#32#32+
- #47#47#10#32#32#73#84#69#77#95#77#65#88#32#61#32#77#65#88#44#32#47#47#32#115+
- #116#111#114#101#32#116#104#101#32#108#97#115#116#32#105#116#101#109#39#115+
- #32#105#100#32#105#110#32#104#101#114#101#32#117#115#101#32#116#104#105#115+
- #32#105#110#32#102#111#114#32#108#111#111#112#115#10#125#10#10#98#105#116+
- #115#101#116#32#73#116#101#109#79#112#116#105#111#110#32#123#10#32#32#73#84+
- #69#77#95#79#80#84#73#79#78#95#78#79#78#69#32#61#32#48#44#32#47#47#32#48#10+
- #32#32#73#84#69#77#95#79#80#84#73#79#78#95#79#78#76#89#68#77#44#32#47#47#32+
- #49#10#32#32#73#84#69#77#95#79#80#84#73#79#78#95#70#65#76#76#44#32#47#47#32+
- #50#10#125#10#10#101#110#117#109#32#65#114#101#97#84#121#112#101#32#123#10+
- #32#32#65#82#69#65#95#78#79#78#69#44#32#47#47#32#48#10#32#32#65#82#69#65#95+
- #80#76#65#89#69#82#80#79#73#78#84#49#44#32#47#47#32#49#10#32#32#65#82#69#65+
- #95#80#76#65#89#69#82#80#79#73#78#84#50#44#32#47#47#32#50#10#32#32#65#82#69+
- #65#95#68#77#80#79#73#78#84#44#32#47#47#32#51#10#32#32#65#82#69#65#95#82#69+
- #68#70#76#65#71#44#32#47#47#32#52#10#32#32#65#82#69#65#95#66#76#85#69#70#76+
- #65#71#44#32#47#47#32#53#10#32#32#65#82#69#65#95#68#79#77#70#76#65#71#44#32+
- #47#47#32#54#10#32#32#65#82#69#65#95#82#69#68#84#69#65#77#80#79#73#78#84#44+
- #32#47#47#32#55#10#32#32#65#82#69#65#95#66#76#85#69#84#69#65#77#80#79#73#78+
- #84#44#32#47#47#32#56#10#125#10#10#101#110#117#109#32#77#111#110#115#116#101+
- #114#32#123#10#32#32#77#79#78#83#84#69#82#95#78#79#78#69#44#32#47#47#32#48+
- #10#32#32#77#79#78#83#84#69#82#95#68#69#77#79#78#44#32#47#47#32#49#10#32#32+
- #77#79#78#83#84#69#82#95#73#77#80#44#32#47#47#32#50#10#32#32#77#79#78#83#84+
- #69#82#95#90#79#77#66#89#44#32#47#47#32#51#10#32#32#77#79#78#83#84#69#82#95+
- #83#69#82#71#44#32#47#47#32#52#10#32#32#77#79#78#83#84#69#82#95#67#89#66#69+
- #82#44#32#47#47#32#53#10#32#32#77#79#78#83#84#69#82#95#67#71#85#78#44#32#47+
- #47#32#54#10#32#32#77#79#78#83#84#69#82#95#66#65#82#79#78#44#32#47#47#32#55+
- #10#32#32#77#79#78#83#84#69#82#95#75#78#73#71#72#84#44#32#47#47#32#56#10#32+
- #32#77#79#78#83#84#69#82#95#67#65#67#79#44#32#47#47#32#57#10#32#32#77#79#78+
- #83#84#69#82#95#83#79#85#76#44#32#47#47#32#49#48#10#32#32#77#79#78#83#84#69+
- #82#95#80#65#73#78#44#32#47#47#32#49#49#10#32#32#77#79#78#83#84#69#82#95#83+
- #80#73#68#69#82#44#32#47#47#32#49#50#10#32#32#77#79#78#83#84#69#82#95#66#83+
- #80#44#32#47#47#32#49#51#10#32#32#77#79#78#83#84#69#82#95#77#65#78#67#85#66+
- #44#32#47#47#32#49#52#10#32#32#77#79#78#83#84#69#82#95#83#75#69#76#44#32#47+
- #47#32#49#53#10#32#32#77#79#78#83#84#69#82#95#86#73#76#69#44#32#47#47#32#49+
- #54#10#32#32#77#79#78#83#84#69#82#95#70#73#83#72#44#32#47#47#32#49#55#10#32+
- #32#77#79#78#83#84#69#82#95#66#65#82#82#69#76#44#32#47#47#32#49#56#10#32#32+
- #77#79#78#83#84#69#82#95#82#79#66#79#44#32#47#47#32#49#57#10#32#32#77#79#78+
- #83#84#69#82#95#77#65#78#44#32#47#47#32#50#48#10#32#32#47#47#32#97#108#105+
- #97#115#101#115#32#40#102#105#120#109#101#58#32#105#116#32#115#104#111#117+
- #108#100#32#98#101#32#96#77#79#78#83#84#69#82#95#90#79#77#66#73#69#32#61#32+
- #77#79#78#83#84#69#82#95#90#79#77#66#89#96#33#41#10#32#32#77#79#78#83#84#69+
- #82#95#90#79#77#66#73#69#32#61#32#51#44#10#125#10#10#101#110#117#109#32#77+
- #111#110#115#116#101#114#66#101#104#97#118#105#111#117#114#32#123#10#32#32+
- #66#72#95#78#79#82#77#65#76#44#32#47#47#32#48#10#32#32#66#72#95#75#73#76#76+
- #69#82#44#32#47#47#32#49#10#32#32#66#72#95#77#65#78#73#65#67#44#32#47#47#32+
- #50#10#32#32#66#72#95#73#78#83#65#78#69#44#32#47#47#32#51#10#32#32#66#72#95+
- #67#65#78#78#73#66#65#76#44#32#47#47#32#52#10#32#32#66#72#95#71#79#79#68#44+
- #32#47#47#32#53#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114+
- #83#104#111#116#32#123#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#80#73+
- #83#84#79#76#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84+
- #95#66#85#76#76#69#84#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83+
- #72#79#84#95#83#72#79#84#71#85#78#44#32#47#47#32#50#10#32#32#84#82#73#71#71+
- #69#82#95#83#72#79#84#95#83#83#71#44#32#47#47#32#51#10#32#32#84#82#73#71#71+
- #69#82#95#83#72#79#84#95#73#77#80#44#32#47#47#32#52#10#32#32#84#82#73#71#71+
- #69#82#95#83#72#79#84#95#80#76#65#83#77#65#44#32#47#47#32#53#10#32#32#84#82+
- #73#71#71#69#82#95#83#72#79#84#95#83#80#73#68#69#82#44#32#47#47#32#54#10#32+
- #32#84#82#73#71#71#69#82#95#83#72#79#84#95#67#65#67#79#44#32#47#47#32#55#10+
- #32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#65#82#79#78#44#32#47#47#32+
- #56#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#77#65#78#67#85#66#44#32+
- #47#47#32#57#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#82#69#86#44#32+
- #47#47#32#49#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#82#79#67#75+
- #69#84#44#32#47#47#32#49#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95+
- #66#70#71#44#32#47#47#32#49#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84+
- #95#69#88#80#76#44#32#47#47#32#49#51#10#32#32#84#82#73#71#71#69#82#95#83#72+
- #79#84#95#66#70#71#69#88#80#76#44#32#47#47#32#49#52#10#32#32#47#47#10#32#32+
- #84#82#73#71#71#69#82#95#83#72#79#84#95#77#65#88#32#61#32#77#65#88#44#10#125+
- #10#10#101#110#117#109#32#84#114#105#103#103#101#114#83#104#111#116#84#97+
- #114#103#101#116#32#123#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84+
- #65#82#71#69#84#95#78#79#78#69#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69+
- #82#95#83#72#79#84#95#84#65#82#71#69#84#95#77#79#78#44#32#47#47#32#49#10#32+
- #32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#80#76#82#44+
- #32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71+
- #69#84#95#82#69#68#44#32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#83#72+
- #79#84#95#84#65#82#71#69#84#95#66#76#85#69#44#32#47#47#32#52#10#32#32#84#82+
- #73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#77#79#78#80#76#82#44+
- #32#47#47#32#53#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71+
- #69#84#95#80#76#82#77#79#78#44#32#47#47#32#54#10#125#10#10#101#110#117#109+
- #32#84#114#105#103#103#101#114#83#104#111#116#65#105#109#32#123#10#32#32#84+
- #82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#68#69#70#65#85#76#84#44#32+
- #47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#65+
- #76#76#77#65#80#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79+
- #84#95#65#73#77#95#84#82#65#67#69#44#32#47#47#32#50#10#32#32#84#82#73#71#71+
- #69#82#95#83#72#79#84#95#65#73#77#95#84#82#65#67#69#65#76#76#44#32#47#47#32+
- #51#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114#69#102#102+
- #101#99#116#32#123#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80+
- #65#82#84#73#67#76#69#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69+
- #70#70#69#67#84#95#65#78#73#77#65#84#73#79#78#44#32#47#47#32#49#10#125#10#10+
- #101#110#117#109#32#84#114#105#103#103#101#114#69#102#102#101#99#116#84#121+
- #112#101#32#123#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#83#76+
- #73#81#85#73#68#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#70#70+
- #69#67#84#95#76#76#73#81#85#73#68#44#32#47#47#32#49#10#32#32#84#82#73#71#71+
- #69#82#95#69#70#70#69#67#84#95#68#76#73#81#85#73#68#44#32#47#47#32#50#10#32+
- #32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#66#76#79#79#68#44#32#47#47+
- #32#51#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#83#80#65#82#75+
- #44#32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#66+
- #85#66#66#76#69#44#32#47#47#32#53#10#32#32#84#82#73#71#71#69#82#95#69#70#70+
- #69#67#84#95#77#65#88#32#61#32#77#65#88#44#10#125#10#10#101#110#117#109#32+
- #84#114#105#103#103#101#114#69#102#102#101#99#116#80#111#115#32#123#10#32#32+
- #84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80#79#83#95#67#69#78#84#69#82+
- #44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80+
- #79#83#95#65#82#69#65#44#32#47#47#32#49#10#125#10#10#101#110#117#109#32#84+
- #114#105#103#103#101#114#77#117#115#105#99#65#99#116#105#111#110#32#123#10+
- #32#32#84#82#73#71#71#69#82#95#77#85#83#73#67#95#65#67#84#73#79#78#95#83#84+
- #79#80#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#77#85#83#73#67#95+
- #65#67#84#73#79#78#95#80#76#65#89#44#32#47#47#32#49#59#32#117#110#112#97#117+
- #115#101#32#111#114#32#114#101#115#116#97#114#116#10#125#10#10#101#110#117+
- #109#32#84#114#105#103#103#101#114#83#99#111#114#101#65#99#116#105#111#110+
- #32#123#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65#67#84#73#79#78+
- #95#65#68#68#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82+
- #69#95#65#67#84#73#79#78#95#83#85#66#44#32#47#47#32#49#10#32#32#84#82#73#71+
- #71#69#82#95#83#67#79#82#69#95#65#67#84#73#79#78#95#87#73#78#44#32#47#47#32+
- #50#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65#67#84#73#79#78#95+
- #76#79#79#83#69#44#32#47#47#32#51#10#125#10#10#101#110#117#109#32#84#114#105+
- #103#103#101#114#77#101#115#115#97#103#101#68#101#115#116#32#123#10#32#32#84+
- #82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#77#69#44#32#47+
- #47#32#48#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68#69#83+
- #84#95#77#89#95#84#69#65#77#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82+
- #95#77#69#83#83#65#71#69#95#68#69#83#84#95#69#78#69#77#89#95#84#69#65#77#44+
- #32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68+
- #69#83#84#95#82#69#68#95#84#69#65#77#44#32#47#47#32#51#10#32#32#84#82#73#71+
- #71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#66#76#85#69#95#84#69#65+
- #77#44#32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69+
- #95#68#69#83#84#95#69#86#69#82#89#79#78#69#44#32#47#47#32#53#10#125#10#10+
- #101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#75+
- #105#110#100#32#123#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95+
- #75#73#78#68#95#67#72#65#84#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82+
- #95#77#69#83#83#65#71#69#95#75#73#78#68#95#71#65#77#69#44#32#47#47#32#49#10+
- #125#10#10#98#105#116#115#101#116#32#65#99#116#105#118#97#116#101#84#121#112+
- #101#32#123#10#32#32#65#67#84#73#86#65#84#69#95#78#79#78#69#32#61#32#48#44+
- #32#47#47#32#48#10#32#32#65#67#84#73#86#65#84#69#95#80#76#65#89#69#82#67#79+
- #76#76#73#68#69#44#32#47#47#32#49#10#32#32#65#67#84#73#86#65#84#69#95#77#79+
- #78#83#84#69#82#67#79#76#76#73#68#69#44#32#47#47#32#50#10#32#32#65#67#84#73+
- #86#65#84#69#95#80#76#65#89#69#82#80#82#69#83#83#44#32#47#47#32#52#10#32#32+
- #65#67#84#73#86#65#84#69#95#77#79#78#83#84#69#82#80#82#69#83#83#44#32#47#47+
- #32#56#10#32#32#65#67#84#73#86#65#84#69#95#83#72#79#84#44#32#47#47#32#49#54+
- #10#32#32#65#67#84#73#86#65#84#69#95#78#79#77#79#78#83#84#69#82#44#32#47#47+
- #32#51#50#10#32#32#65#67#84#73#86#65#84#69#95#67#85#83#84#79#77#32#61#32#50+
- #53#53#44#32#47#47#32#110#111#116#101#32#116#104#97#116#32#34#100#105#114+
- #101#99#116#32#97#115#115#105#103#110#34#32#102#105#101#108#100#32#100#111+
- #101#115#110#39#116#32#97#102#102#101#99#116#32#98#105#116#32#99#111#117#110+
- #116#101#114#10#125#10#10#98#105#116#115#101#116#32#75#101#121#32#123#10#32+
- #32#75#69#89#95#78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#75#69#89+
- #95#82#69#68#44#32#47#47#32#49#10#32#32#75#69#89#95#71#82#69#69#78#44#32#47+
- #47#32#50#10#32#32#75#69#89#95#66#76#85#69#44#32#47#47#32#52#10#32#32#75#69+
- #89#95#82#69#68#84#69#65#77#44#32#47#47#32#56#10#32#32#75#69#89#95#66#76#85+
- #69#84#69#65#77#44#32#47#47#32#49#54#10#125#10#10#10#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
+ #47#47#10#47#47#32#115#112#101#99#105#97#108#32#116#101#120#116#117#114#101+
+ #32#105#100#101#110#116#105#102#105#101#114#115#44#32#117#115#101#100#32#116+
+ #111#32#103#101#110#101#114#97#116#101#32#112#97#115#99#97#108#32#115#111+
+ #117#114#99#101#115#10#101#110#117#109#32#84#101#120#116#117#114#101#83#112+
+ #101#99#105#97#108#32#123#10#32#32#84#69#88#84#85#82#69#95#83#80#69#67#73#65+
+ #76#95#87#65#84#69#82#32#61#32#45#49#44#10#32#32#84#69#88#84#85#82#69#95#83+
+ #80#69#67#73#65#76#95#65#67#73#68#49#32#61#32#45#50#44#10#32#32#84#69#88#84+
+ #85#82#69#95#83#80#69#67#73#65#76#95#65#67#73#68#50#32#61#32#45#51#44#10#32+
+ #32#84#69#88#84#85#82#69#95#78#79#78#69#32#61#32#45#52#44#10#125#10#10#47#47+
+ #32#100#105#114#101#99#116#105#111#110#115#10#101#110#117#109#32#68#105#114+
+ #84#121#112#101#32#123#10#32#32#68#73#82#95#76#69#70#84#44#32#47#47#32#48#10+
+ #32#32#68#73#82#95#82#73#71#72#84#44#32#47#47#32#49#10#32#32#68#73#82#95#83+
+ #79#77#69#84#72#73#78#71#50#44#32#47#47#32#50#10#125#10#10#47#47#32#116#114+
+ #105#103#103#101#114#115#10#101#110#117#109#32#84#114#105#103#103#101#114#84+
+ #121#112#101#32#123#10#32#32#84#82#73#71#71#69#82#95#78#79#78#69#44#32#47#47+
+ #32#48#10#32#32#84#82#73#71#71#69#82#95#69#88#73#84#44#32#47#47#32#49#10#32+
+ #32#84#82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#44#32#47#47#32#50#10#32+
+ #32#84#82#73#71#71#69#82#95#79#80#69#78#68#79#79#82#44#32#47#47#32#51#10#32+
+ #32#84#82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32#47#47#32#52#10+
+ #32#32#84#82#73#71#71#69#82#95#68#79#79#82#44#32#47#47#32#53#10#32#32#84#82+
+ #73#71#71#69#82#95#68#79#79#82#53#44#32#47#47#32#54#10#32#32#84#82#73#71#71+
+ #69#82#95#67#76#79#83#69#84#82#65#80#44#32#47#47#32#55#10#32#32#84#82#73#71+
+ #71#69#82#95#84#82#65#80#44#32#47#47#32#56#10#32#32#84#82#73#71#71#69#82#95+
+ #80#82#69#83#83#44#32#47#47#32#57#10#32#32#84#82#73#71#71#69#82#95#83#69#67+
+ #82#69#84#44#32#47#47#32#49#48#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84+
+ #85#80#44#32#47#47#32#49#49#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84#68+
+ #79#87#78#44#32#47#47#32#49#50#10#32#32#84#82#73#71#71#69#82#95#76#73#70#84+
+ #44#32#47#47#32#49#51#10#32#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69+
+ #44#32#47#47#32#49#52#10#32#32#84#82#73#71#71#69#82#95#79#78#44#32#47#47#32+
+ #49#53#10#32#32#84#82#73#71#71#69#82#95#79#70#70#44#32#47#47#32#49#54#10#32+
+ #32#84#82#73#71#71#69#82#95#79#78#79#70#70#44#32#47#47#32#49#55#10#32#32#84+
+ #82#73#71#71#69#82#95#83#79#85#78#68#44#32#47#47#32#49#56#10#32#32#84#82#73+
+ #71#71#69#82#95#83#80#65#87#78#77#79#78#83#84#69#82#44#32#47#47#32#49#57#10+
+ #32#32#84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#44#32#47#47#32#50+
+ #48#10#32#32#84#82#73#71#71#69#82#95#77#85#83#73#67#44#32#47#47#32#50#49#10+
+ #32#32#84#82#73#71#71#69#82#95#80#85#83#72#44#32#47#47#32#50#50#10#32#32#84+
+ #82#73#71#71#69#82#95#83#67#79#82#69#44#32#47#47#32#50#51#10#32#32#84#82#73+
+ #71#71#69#82#95#77#69#83#83#65#71#69#44#32#47#47#32#50#52#10#32#32#84#82#73+
+ #71#71#69#82#95#68#65#77#65#71#69#44#32#47#47#32#50#53#10#32#32#84#82#73#71+
+ #71#69#82#95#72#69#65#76#84#72#44#32#47#47#32#50#54#10#32#32#84#82#73#71#71+
+ #69#82#95#83#72#79#84#44#32#47#47#32#50#55#10#32#32#84#82#73#71#71#69#82#95+
+ #69#70#70#69#67#84#44#32#47#47#32#50#56#10#32#32#84#82#73#71#71#69#82#95#83+
+ #67#82#73#80#84#44#32#47#47#32#50#57#10#32#32#47#47#10#32#32#84#82#73#71#71+
+ #69#82#95#77#65#88#32#61#32#77#65#88#44#10#125#10#10#47#47#32#34#97#115#32+
+ #88#88#88#34#32#109#101#97#110#115#32#34#103#101#110#101#114#97#116#101#32+
+ #116#104#105#115#32#105#100#101#110#116#105#102#105#101#114#32#102#111#114+
+ #32#112#97#115#99#97#108#32#115#111#117#114#99#101#115#10#98#105#116#115#101+
+ #116#32#80#97#110#101#108#84#121#112#101#32#123#10#32#32#80#65#78#69#76#95+
+ #78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#80#65#78#69#76#95#87#65+
+ #76#76#44#32#47#47#32#49#10#32#32#80#65#78#69#76#95#66#65#67#75#44#32#47#47+
+ #32#50#10#32#32#80#65#78#69#76#95#70#79#82#69#44#32#47#47#32#52#10#32#32#80+
+ #65#78#69#76#95#87#65#84#69#82#44#32#47#47#32#56#10#32#32#80#65#78#69#76#95+
+ #65#67#73#68#49#44#32#47#47#32#49#54#10#32#32#80#65#78#69#76#95#65#67#73#68+
+ #50#44#32#47#47#32#51#50#10#32#32#80#65#78#69#76#95#83#84#69#80#44#32#47#47+
+ #32#54#52#10#32#32#80#65#78#69#76#95#76#73#70#84#85#80#44#32#47#47#32#49#50+
+ #56#10#32#32#80#65#78#69#76#95#76#73#70#84#68#79#87#78#44#32#47#47#32#50#53+
+ #54#10#32#32#80#65#78#69#76#95#79#80#69#78#68#79#79#82#44#32#47#47#32#53#49+
+ #50#10#32#32#80#65#78#69#76#95#67#76#79#83#69#68#79#79#82#44#32#47#47#32#49+
+ #48#50#52#10#32#32#80#65#78#69#76#95#66#76#79#67#75#77#79#78#44#32#47#47#32+
+ #50#48#52#56#10#32#32#80#65#78#69#76#95#76#73#70#84#76#69#70#84#44#32#47#47+
+ #32#52#48#57#54#10#32#32#80#65#78#69#76#95#76#73#70#84#82#73#71#72#84#44#32+
+ #47#47#32#56#49#57#50#10#125#10#10#98#105#116#115#101#116#32#80#97#110#101+
+ #108#70#108#97#103#32#123#10#32#32#80#65#78#69#76#95#70#76#65#71#95#78#79#78+
+ #69#32#61#32#48#44#32#47#47#32#48#10#32#32#80#65#78#69#76#95#70#76#65#71#95+
+ #66#76#69#78#68#73#78#71#44#32#47#47#32#49#10#32#32#80#65#78#69#76#95#70#76+
+ #65#71#95#72#73#68#69#44#32#47#47#32#50#10#32#32#80#65#78#69#76#95#70#76#65+
+ #71#95#87#65#84#69#82#84#69#88#84#85#82#69#83#44#32#47#47#32#52#10#125#10#10+
+ #101#110#117#109#32#69#102#102#101#99#116#65#99#116#105#111#110#32#123#10#32+
+ #32#69#70#70#69#67#84#95#78#79#78#69#44#32#47#47#32#48#10#32#32#69#70#70#69+
+ #67#84#95#84#69#76#69#80#79#82#84#44#32#47#47#32#49#10#32#32#69#70#70#69#67+
+ #84#95#82#69#83#80#65#87#78#44#32#47#47#32#50#10#32#32#69#70#70#69#67#84#95+
+ #70#73#82#69#44#32#47#47#32#51#10#125#10#10#101#110#117#109#32#73#116#101+
+ #109#32#123#10#32#32#73#84#69#77#95#78#79#78#69#44#32#47#47#32#48#10#32#32+
+ #73#84#69#77#95#77#69#68#75#73#84#95#83#77#65#76#76#44#32#47#47#32#49#10#32+
+ #32#73#84#69#77#95#77#69#68#75#73#84#95#76#65#82#71#69#44#32#47#47#32#50#10+
+ #32#32#73#84#69#77#95#77#69#68#75#73#84#95#66#76#65#67#75#44#32#47#47#32#51+
+ #10#32#32#73#84#69#77#95#65#82#77#79#82#95#71#82#69#69#78#44#32#47#47#32#52+
+ #10#32#32#73#84#69#77#95#65#82#77#79#82#95#66#76#85#69#44#32#47#47#32#53#10+
+ #32#32#73#84#69#77#95#83#80#72#69#82#69#95#66#76#85#69#44#32#47#47#32#54#10+
+ #32#32#73#84#69#77#95#83#80#72#69#82#69#95#87#72#73#84#69#44#32#47#47#32#55+
+ #10#32#32#73#84#69#77#95#83#85#73#84#44#32#47#47#32#56#10#32#32#73#84#69#77+
+ #95#79#88#89#71#69#78#44#32#47#47#32#57#10#32#32#73#84#69#77#95#73#78#86#85+
+ #76#44#32#47#47#32#49#48#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#65+
+ #87#44#32#47#47#32#49#49#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#83#72+
+ #79#84#71#85#78#49#44#32#47#47#32#49#50#10#32#32#73#84#69#77#95#87#69#65#80+
+ #79#78#95#83#72#79#84#71#85#78#50#44#32#47#47#32#49#51#10#32#32#73#84#69#77+
+ #95#87#69#65#80#79#78#95#67#72#65#73#78#71#85#78#44#32#47#47#32#49#52#10#32+
+ #32#73#84#69#77#95#87#69#65#80#79#78#95#82#79#67#75#69#84#76#65#85#78#67#72+
+ #69#82#44#32#47#47#32#49#53#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#80+
+ #76#65#83#77#65#44#32#47#47#32#49#54#10#32#32#73#84#69#77#95#87#69#65#80#79+
+ #78#95#66#70#71#44#32#47#47#32#49#55#10#32#32#73#84#69#77#95#87#69#65#80#79+
+ #78#95#83#85#80#69#82#80#85#76#69#77#69#84#44#32#47#47#32#49#56#10#32#32#73+
+ #84#69#77#95#65#77#77#79#95#66#85#76#76#69#84#83#44#32#47#47#32#49#57#10#32+
+ #32#73#84#69#77#95#65#77#77#79#95#66#85#76#76#69#84#83#95#66#79#88#44#32#47+
+ #47#32#50#48#10#32#32#73#84#69#77#95#65#77#77#79#95#83#72#69#76#76#83#44#32+
+ #47#47#32#50#49#10#32#32#73#84#69#77#95#65#77#77#79#95#83#72#69#76#76#83#95+
+ #66#79#88#44#32#47#47#32#50#50#10#32#32#73#84#69#77#95#65#77#77#79#95#82#79+
+ #67#75#69#84#44#32#47#47#32#50#51#10#32#32#73#84#69#77#95#65#77#77#79#95#82+
+ #79#67#75#69#84#95#66#79#88#44#32#47#47#32#50#52#10#32#32#73#84#69#77#95#65+
+ #77#77#79#95#67#69#76#76#44#32#47#47#32#50#53#10#32#32#73#84#69#77#95#65#77+
+ #77#79#95#67#69#76#76#95#66#73#71#44#32#47#47#32#50#54#10#32#32#73#84#69#77+
+ #95#65#77#77#79#95#66#65#67#75#80#65#67#75#44#32#47#47#32#50#55#10#32#32#73+
+ #84#69#77#95#75#69#89#95#82#69#68#44#32#47#47#32#50#56#10#32#32#73#84#69#77+
+ #95#75#69#89#95#71#82#69#69#78#44#32#47#47#32#50#57#10#32#32#73#84#69#77#95+
+ #75#69#89#95#66#76#85#69#44#32#47#47#32#51#48#10#32#32#73#84#69#77#95#87#69+
+ #65#80#79#78#95#75#65#83#84#69#84#44#32#47#47#32#51#49#10#32#32#73#84#69#77+
+ #95#87#69#65#80#79#78#95#80#73#83#84#79#76#44#32#47#47#32#51#50#10#32#32#73+
+ #84#69#77#95#66#79#84#84#76#69#44#32#47#47#32#51#51#10#32#32#73#84#69#77#95+
+ #72#69#76#77#69#84#44#32#47#47#32#51#52#10#32#32#73#84#69#77#95#74#69#84#80+
+ #65#67#75#44#32#47#47#32#51#53#10#32#32#73#84#69#77#95#73#78#86#73#83#44#32+
+ #47#47#32#51#54#10#32#32#73#84#69#77#95#87#69#65#80#79#78#95#70#76#65#77#69+
+ #84#72#82#79#87#69#82#44#32#47#47#32#51#55#10#32#32#73#84#69#77#95#65#77#77+
+ #79#95#70#85#69#76#67#65#78#44#32#47#47#32#51#56#10#32#32#47#47#10#32#32#73+
+ #84#69#77#95#77#65#88#32#61#32#77#65#88#44#32#47#47#32#115#116#111#114#101+
+ #32#116#104#101#32#108#97#115#116#32#105#116#101#109#39#115#32#105#100#32+
+ #105#110#32#104#101#114#101#32#117#115#101#32#116#104#105#115#32#105#110#32+
+ #102#111#114#32#108#111#111#112#115#10#125#10#10#98#105#116#115#101#116#32+
+ #73#116#101#109#79#112#116#105#111#110#32#123#10#32#32#73#84#69#77#95#79#80+
+ #84#73#79#78#95#78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#73#84#69+
+ #77#95#79#80#84#73#79#78#95#79#78#76#89#68#77#44#32#47#47#32#49#10#32#32#73+
+ #84#69#77#95#79#80#84#73#79#78#95#70#65#76#76#44#32#47#47#32#50#10#125#10#10+
+ #101#110#117#109#32#65#114#101#97#84#121#112#101#32#123#10#32#32#65#82#69#65+
+ #95#78#79#78#69#44#32#47#47#32#48#10#32#32#65#82#69#65#95#80#76#65#89#69#82+
+ #80#79#73#78#84#49#44#32#47#47#32#49#10#32#32#65#82#69#65#95#80#76#65#89#69+
+ #82#80#79#73#78#84#50#44#32#47#47#32#50#10#32#32#65#82#69#65#95#68#77#80#79+
+ #73#78#84#44#32#47#47#32#51#10#32#32#65#82#69#65#95#82#69#68#70#76#65#71#44+
+ #32#47#47#32#52#10#32#32#65#82#69#65#95#66#76#85#69#70#76#65#71#44#32#47#47+
+ #32#53#10#32#32#65#82#69#65#95#68#79#77#70#76#65#71#44#32#47#47#32#54#10#32+
+ #32#65#82#69#65#95#82#69#68#84#69#65#77#80#79#73#78#84#44#32#47#47#32#55#10+
+ #32#32#65#82#69#65#95#66#76#85#69#84#69#65#77#80#79#73#78#84#44#32#47#47#32+
+ #56#10#125#10#10#101#110#117#109#32#77#111#110#115#116#101#114#32#123#10#32+
+ #32#77#79#78#83#84#69#82#95#78#79#78#69#44#32#47#47#32#48#10#32#32#77#79#78+
+ #83#84#69#82#95#68#69#77#79#78#44#32#47#47#32#49#10#32#32#77#79#78#83#84#69+
+ #82#95#73#77#80#44#32#47#47#32#50#10#32#32#77#79#78#83#84#69#82#95#90#79#77+
+ #66#89#44#32#47#47#32#51#10#32#32#77#79#78#83#84#69#82#95#83#69#82#71#44#32+
+ #47#47#32#52#10#32#32#77#79#78#83#84#69#82#95#67#89#66#69#82#44#32#47#47#32+
+ #53#10#32#32#77#79#78#83#84#69#82#95#67#71#85#78#44#32#47#47#32#54#10#32#32+
+ #77#79#78#83#84#69#82#95#66#65#82#79#78#44#32#47#47#32#55#10#32#32#77#79#78+
+ #83#84#69#82#95#75#78#73#71#72#84#44#32#47#47#32#56#10#32#32#77#79#78#83#84+
+ #69#82#95#67#65#67#79#44#32#47#47#32#57#10#32#32#77#79#78#83#84#69#82#95#83+
+ #79#85#76#44#32#47#47#32#49#48#10#32#32#77#79#78#83#84#69#82#95#80#65#73#78+
+ #44#32#47#47#32#49#49#10#32#32#77#79#78#83#84#69#82#95#83#80#73#68#69#82#44+
+ #32#47#47#32#49#50#10#32#32#77#79#78#83#84#69#82#95#66#83#80#44#32#47#47#32+
+ #49#51#10#32#32#77#79#78#83#84#69#82#95#77#65#78#67#85#66#44#32#47#47#32#49+
+ #52#10#32#32#77#79#78#83#84#69#82#95#83#75#69#76#44#32#47#47#32#49#53#10#32+
+ #32#77#79#78#83#84#69#82#95#86#73#76#69#44#32#47#47#32#49#54#10#32#32#77#79+
+ #78#83#84#69#82#95#70#73#83#72#44#32#47#47#32#49#55#10#32#32#77#79#78#83#84+
+ #69#82#95#66#65#82#82#69#76#44#32#47#47#32#49#56#10#32#32#77#79#78#83#84#69+
+ #82#95#82#79#66#79#44#32#47#47#32#49#57#10#32#32#77#79#78#83#84#69#82#95#77+
+ #65#78#44#32#47#47#32#50#48#10#32#32#47#47#32#97#108#105#97#115#101#115#32+
+ #40#102#105#120#109#101#58#32#105#116#32#115#104#111#117#108#100#32#98#101+
+ #32#96#77#79#78#83#84#69#82#95#90#79#77#66#73#69#32#61#32#77#79#78#83#84#69+
+ #82#95#90#79#77#66#89#96#33#41#10#32#32#77#79#78#83#84#69#82#95#90#79#77#66+
+ #73#69#32#61#32#51#44#10#125#10#10#101#110#117#109#32#77#111#110#115#116#101+
+ #114#66#101#104#97#118#105#111#117#114#32#123#10#32#32#66#72#95#78#79#82#77+
+ #65#76#44#32#47#47#32#48#10#32#32#66#72#95#75#73#76#76#69#82#44#32#47#47#32+
+ #49#10#32#32#66#72#95#77#65#78#73#65#67#44#32#47#47#32#50#10#32#32#66#72#95+
+ #73#78#83#65#78#69#44#32#47#47#32#51#10#32#32#66#72#95#67#65#78#78#73#66#65+
+ #76#44#32#47#47#32#52#10#32#32#66#72#95#71#79#79#68#44#32#47#47#32#53#10#125+
+ #10#10#101#110#117#109#32#84#114#105#103#103#101#114#83#104#111#116#32#123+
+ #10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#80#73#83#84#79#76#44#32#47+
+ #47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#85#76#76#69#84+
+ #44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#83#72#79+
+ #84#71#85#78#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84+
+ #95#83#83#71#44#32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84+
+ #95#73#77#80#44#32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84+
+ #95#80#76#65#83#77#65#44#32#47#47#32#53#10#32#32#84#82#73#71#71#69#82#95#83+
+ #72#79#84#95#83#80#73#68#69#82#44#32#47#47#32#54#10#32#32#84#82#73#71#71#69+
+ #82#95#83#72#79#84#95#67#65#67#79#44#32#47#47#32#55#10#32#32#84#82#73#71#71+
+ #69#82#95#83#72#79#84#95#66#65#82#79#78#44#32#47#47#32#56#10#32#32#84#82#73+
+ #71#71#69#82#95#83#72#79#84#95#77#65#78#67#85#66#44#32#47#47#32#57#10#32#32+
+ #84#82#73#71#71#69#82#95#83#72#79#84#95#82#69#86#44#32#47#47#32#49#48#10#32+
+ #32#84#82#73#71#71#69#82#95#83#72#79#84#95#82#79#67#75#69#84#44#32#47#47#32+
+ #49#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#70#71#44#32#47#47+
+ #32#49#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#69#88#80#76#44#32+
+ #47#47#32#49#51#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#66#70#71#69+
+ #88#80#76#44#32#47#47#32#49#52#10#32#32#47#47#10#32#32#84#82#73#71#71#69#82+
+ #95#83#72#79#84#95#77#65#88#32#61#32#77#65#88#44#10#125#10#10#101#110#117+
+ #109#32#84#114#105#103#103#101#114#83#104#111#116#84#97#114#103#101#116#32+
+ #123#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#78+
+ #79#78#69#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95+
+ #84#65#82#71#69#84#95#77#79#78#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69+
+ #82#95#83#72#79#84#95#84#65#82#71#69#84#95#80#76#82#44#32#47#47#32#50#10#32+
+ #32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#82#69#68#44+
+ #32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71+
+ #69#84#95#66#76#85#69#44#32#47#47#32#52#10#32#32#84#82#73#71#71#69#82#95#83+
+ #72#79#84#95#84#65#82#71#69#84#95#77#79#78#80#76#82#44#32#47#47#32#53#10#32+
+ #32#84#82#73#71#71#69#82#95#83#72#79#84#95#84#65#82#71#69#84#95#80#76#82#77+
+ #79#78#44#32#47#47#32#54#10#125#10#10#101#110#117#109#32#84#114#105#103#103+
+ #101#114#83#104#111#116#65#105#109#32#123#10#32#32#84#82#73#71#71#69#82#95+
+ #83#72#79#84#95#65#73#77#95#68#69#70#65#85#76#84#44#32#47#47#32#48#10#32#32+
+ #84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#65#76#76#77#65#80#44#32+
+ #47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#84+
+ #82#65#67#69#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#72#79#84+
+ #95#65#73#77#95#84#82#65#67#69#65#76#76#44#32#47#47#32#51#10#125#10#10#101+
+ #110#117#109#32#84#114#105#103#103#101#114#69#102#102#101#99#116#32#123#10+
+ #32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69+
+ #44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#65+
+ #78#73#77#65#84#73#79#78#44#32#47#47#32#49#10#125#10#10#101#110#117#109#32+
+ #84#114#105#103#103#101#114#69#102#102#101#99#116#84#121#112#101#32#123#10+
+ #32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#83#76#73#81#85#73#68#44+
+ #32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#76#76+
+ #73#81#85#73#68#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#69#70#70+
+ #69#67#84#95#68#76#73#81#85#73#68#44#32#47#47#32#50#10#32#32#84#82#73#71#71+
+ #69#82#95#69#70#70#69#67#84#95#66#76#79#79#68#44#32#47#47#32#51#10#32#32#84+
+ #82#73#71#71#69#82#95#69#70#70#69#67#84#95#83#80#65#82#75#44#32#47#47#32#52+
+ #10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#66#85#66#66#76#69#44+
+ #32#47#47#32#53#10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#77#65+
+ #88#32#61#32#77#65#88#44#10#125#10#10#101#110#117#109#32#84#114#105#103#103+
+ #101#114#69#102#102#101#99#116#80#111#115#32#123#10#32#32#84#82#73#71#71#69+
+ #82#95#69#70#70#69#67#84#95#80#79#83#95#67#69#78#84#69#82#44#32#47#47#32#48+
+ #10#32#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80#79#83#95#65#82#69+
+ #65#44#32#47#47#32#49#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101+
+ #114#77#117#115#105#99#65#99#116#105#111#110#32#123#10#32#32#84#82#73#71#71+
+ #69#82#95#77#85#83#73#67#95#65#67#84#73#79#78#95#83#84#79#80#44#32#47#47#32+
+ #48#10#32#32#84#82#73#71#71#69#82#95#77#85#83#73#67#95#65#67#84#73#79#78#95+
+ #80#76#65#89#44#32#47#47#32#49#59#32#117#110#112#97#117#115#101#32#111#114+
+ #32#114#101#115#116#97#114#116#10#125#10#10#101#110#117#109#32#84#114#105+
+ #103#103#101#114#83#99#111#114#101#65#99#116#105#111#110#32#123#10#32#32#84+
+ #82#73#71#71#69#82#95#83#67#79#82#69#95#65#67#84#73#79#78#95#65#68#68#44#32+
+ #47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65#67#84#73+
+ #79#78#95#83#85#66#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#83#67+
+ #79#82#69#95#65#67#84#73#79#78#95#87#73#78#44#32#47#47#32#50#10#32#32#84#82+
+ #73#71#71#69#82#95#83#67#79#82#69#95#65#67#84#73#79#78#95#76#79#79#83#69#44+
+ #32#47#47#32#51#10#125#10#10#101#110#117#109#32#84#114#105#103#103#101#114+
+ #77#101#115#115#97#103#101#68#101#115#116#32#123#10#32#32#84#82#73#71#71#69+
+ #82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#77#69#44#32#47#47#32#48#10#32+
+ #32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#77#89#95+
+ #84#69#65#77#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83+
+ #65#71#69#95#68#69#83#84#95#69#78#69#77#89#95#84#69#65#77#44#32#47#47#32#50+
+ #10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84#95#82+
+ #69#68#95#84#69#65#77#44#32#47#47#32#51#10#32#32#84#82#73#71#71#69#82#95#77+
+ #69#83#83#65#71#69#95#68#69#83#84#95#66#76#85#69#95#84#69#65#77#44#32#47#47+
+ #32#52#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#68#69#83#84+
+ #95#69#86#69#82#89#79#78#69#44#32#47#47#32#53#10#125#10#10#101#110#117#109+
+ #32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#75#105#110#100#32+
+ #123#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#95#75#73#78#68#95+
+ #67#72#65#84#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#77#69#83#83+
+ #65#71#69#95#75#73#78#68#95#71#65#77#69#44#32#47#47#32#49#10#125#10#10#98+
+ #105#116#115#101#116#32#65#99#116#105#118#97#116#101#84#121#112#101#32#123+
+ #10#32#32#65#67#84#73#86#65#84#69#95#78#79#78#69#32#61#32#48#44#32#47#47#32+
+ #48#10#32#32#65#67#84#73#86#65#84#69#95#80#76#65#89#69#82#67#79#76#76#73#68+
+ #69#44#32#47#47#32#49#10#32#32#65#67#84#73#86#65#84#69#95#77#79#78#83#84#69+
+ #82#67#79#76#76#73#68#69#44#32#47#47#32#50#10#32#32#65#67#84#73#86#65#84#69+
+ #95#80#76#65#89#69#82#80#82#69#83#83#44#32#47#47#32#52#10#32#32#65#67#84#73+
+ #86#65#84#69#95#77#79#78#83#84#69#82#80#82#69#83#83#44#32#47#47#32#56#10#32+
+ #32#65#67#84#73#86#65#84#69#95#83#72#79#84#44#32#47#47#32#49#54#10#32#32#65+
+ #67#84#73#86#65#84#69#95#78#79#77#79#78#83#84#69#82#44#32#47#47#32#51#50#10+
+ #32#32#65#67#84#73#86#65#84#69#95#67#85#83#84#79#77#32#61#32#50#53#53#44#32+
+ #47#47#32#110#111#116#101#32#116#104#97#116#32#34#100#105#114#101#99#116#32+
+ #97#115#115#105#103#110#34#32#102#105#101#108#100#32#100#111#101#115#110#39+
+ #116#32#97#102#102#101#99#116#32#98#105#116#32#99#111#117#110#116#101#114#10+
+ #125#10#10#98#105#116#115#101#116#32#75#101#121#32#123#10#32#32#75#69#89#95+
+ #78#79#78#69#32#61#32#48#44#32#47#47#32#48#10#32#32#75#69#89#95#82#69#68#44+
+ #32#47#47#32#49#10#32#32#75#69#89#95#71#82#69#69#78#44#32#47#47#32#50#10#32+
+ #32#75#69#89#95#66#76#85#69#44#32#47#47#32#52#10#32#32#75#69#89#95#82#69#68+
+ #84#69#65#77#44#32#47#47#32#56#10#32#32#75#69#89#95#66#76#85#69#84#69#65#77+
+ #44#32#47#47#32#49#54#10#125#10#10#10#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
- #47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#47+
- #32#118#97#114#105#111#117#115#32#116#114#105#103#103#101#114#115#10#84#114+
- #105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95+
- #69#88#73#84#32#123#10#32#32#34#109#97#112#34#32#116#121#112#101#32#99#104+
- #97#114#91#49#54#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97+
- #116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#32+
- #123#10#32#32#34#116#97#114#103#101#116#34#32#116#121#112#101#32#112#111#105+
- #110#116#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111+
- #111#108#32#111#102#102#115#101#116#32#56#32#100#101#102#97#117#108#116#32+
- #102#97#108#115#101#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112+
- #101#32#98#111#111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97+
- #117#108#116#32#102#97#108#115#101#59#10#32#32#34#100#105#114#101#99#116#105+
- #111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#49#48#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101#102+
- #97#117#108#116#32#68#73#82#95#76#69#70#84#59#10#125#10#10#84#114#105#103+
- #103#101#114#68#97#116#97#32#102#111#114#32#40#84#82#73#71#71#69#82#95#79#80+
- #69#78#68#79#79#82#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82+
- #44#32#84#82#73#71#71#69#82#95#68#79#79#82#44#32#84#82#73#71#71#69#82#95#68+
- #79#79#82#53#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32+
- #84#82#73#71#71#69#82#95#84#82#65#80#44#32#84#82#73#71#71#69#82#95#76#73#70+
- #84#85#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#68#79#87#78#44#32#84#82+
- #73#71#71#69#82#95#76#73#70#84#41#32#123#10#32#32#34#112#97#110#101#108#105+
- #100#34#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#48+
- #32#112#97#110#101#108#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
- #10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108+
- #32#111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#102#97+
- #108#115#101#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111+
- #108#32#111#102#102#115#101#116#32#53#32#100#101#102#97#117#108#116#32#102+
- #97#108#115#101#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
- #102#111#114#32#40#84#82#73#71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71+
- #71#69#82#95#79#78#44#32#84#82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71+
- #71#69#82#95#79#78#79#70#70#41#32#123#10#32#32#34#112#111#115#105#116#105+
- #111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101+
- #116#32#48#32#97#115#32#116#120#121#32#100#101#102#97#117#108#116#32#40#48+
- #32#48#41#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
- #115#105#122#101#34#32#116#121#112#101#32#115#105#122#101#32#111#102#102#115+
- #101#116#32#56#32#97#115#32#116#119#104#32#100#101#102#97#117#108#116#32#40+
- #48#32#48#41#59#10#32#32#34#119#97#105#116#34#32#116#121#112#101#32#117#115+
- #104#111#114#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117+
- #108#116#32#48#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32+
- #112#114#101#115#115#67#111#117#110#116#32#116#121#112#101#32#117#115#104+
- #111#114#116#32#111#102#102#115#101#116#32#49#52#32#100#101#102#97#117#108+
- #116#32#48#59#10#32#32#34#109#111#110#115#116#101#114#105#100#34#32#116#121+
- #112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#54#32#109#111#110+
- #115#116#101#114#32#97#115#32#109#111#110#115#116#101#114#105#100#32#100#101+
- #102#97#117#108#116#32#110#117#108#108#59#10#32#32#34#101#120#116#95#114#97+
- #110#100#111#109#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
- #101#116#32#50#48#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10+
- #32#32#47#47#32#116#104#105#115#32#111#110#101#32#105#115#32#102#111#114#32+
- #109#111#118#105#110#103#32#112#108#97#116#102#111#114#109#115#10#32#32#34+
- #112#97#110#101#108#105#100#34#32#112#97#110#101#108#32#100#101#102#97#117+
- #108#116#32#110#117#108#108#59#10#32#32#34#115#105#108#101#110#116#34#32#116+
- #121#112#101#32#98#111#111#108#32#100#101#102#97#117#108#116#32#116#114#117+
- #101#59#10#32#32#34#115#111#117#110#100#34#32#116#121#112#101#32#115#116#114+
- #105#110#103#32#100#101#102#97#117#108#116#32#34#34#59#10#125#10#10#101#110+
- #117#109#32#84#114#105#103#103#101#114#83#99#111#114#101#84#101#97#109#32+
- #123#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#77#73+
- #78#69#95#82#69#68#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67+
- #79#82#69#95#84#69#65#77#95#77#73#78#69#95#66#76#85#69#44#32#47#47#32#49#10+
- #32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#70#79#82#67+
- #69#95#82#69#68#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#67#79+
- #82#69#95#84#69#65#77#95#70#79#82#67#69#95#66#76#85#69#44#32#47#47#32#51#10+
- #125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
- #73#71#71#69#82#95#83#69#67#82#69#84#32#123#10#125#10#10#84#114#105#103#103+
- #101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#84#69#88#84+
- #85#82#69#32#123#10#32#32#34#97#99#116#105#118#97#116#101#95#111#110#99#101+
- #34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#48#32+
- #100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#32#32#34#97#110#105#109#97#116#101#95#111#110+
- #99#101#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116+
- #32#49#32#100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105+
- #116#101#100#101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103#101+
- #114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#79#85#78#68+
- #32#123#10#32#32#34#115#111#117#110#100#95#110#97#109#101#34#32#116#121#112+
- #101#32#99#104#97#114#91#54#52#93#32#111#102#102#115#101#116#32#48#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#118#111#108#117+
- #109#101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#54#52#32#100#101#102#97#117#108#116#32#48#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116+
- #32#63#63#63#10#32#32#34#112#97#110#34#32#116#121#112#101#32#117#98#121#116+
- #101#32#111#102#102#115#101#116#32#54#53#32#100#101#102#97#117#108#116#32#48+
- #59#10#32#32#34#108#111#99#97#108#34#32#116#121#112#101#32#98#111#111#108#32+
- #111#102#102#115#101#116#32#54#54#32#100#101#102#97#117#108#116#32#116#114+
- #117#101#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10+
- #32#32#34#112#108#97#121#95#99#111#117#110#116#34#32#116#121#112#101#32#117+
- #98#121#116#101#32#111#102#102#115#101#116#32#54#55#32#100#101#102#97#117+
- #108#116#32#49#59#10#32#32#34#115#111#117#110#100#95#115#119#105#116#99#104+
- #34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#54#56+
- #32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#32#47#47#63#63#63#32+
- #100#101#102#97#117#108#116#32#63#63#63#10#125#10#10#84#114#105#103#103#101+
- #114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78+
- #77#79#78#83#84#69#82#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34+
- #32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101#116#32#48+
- #32#97#115#32#116#120#121#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#116#121#112#101#34#32#97#108#105#97#115#32#115#112#97#119+
- #110#77#111#110#115#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101+
- #32#111#102#102#115#101#116#32#56#32#101#110#117#109#32#77#111#110#115#116+
- #101#114#32#100#101#102#97#117#108#116#32#77#79#78#83#84#69#82#95#73#77#80+
- #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#104#101#97+
- #108#116#104#34#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116+
- #32#49#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
- #100#105#114#101#99#116#105#111#110#34#32#116#121#112#101#32#117#98#121#116+
- #101#32#111#102#102#115#101#116#32#49#54#32#101#110#117#109#32#68#105#114#84+
- #121#112#101#32#100#101#102#97#117#108#116#32#68#73#82#95#76#69#70#84#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#99#116#105#118+
- #101#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32+
- #49#55#32#100#101#102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#99+
- #111#117#110#116#34#32#97#108#105#97#115#32#109#111#110#115#67#111#117#110+
- #116#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#50#48+
- #32#100#101#102#97#117#108#116#32#49#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32+
- #117#98#121#116#101#32#111#102#102#115#101#116#32#50#52#32#101#110#117#109+
- #32#69#102#102#101#99#116#65#99#116#105#111#110#32#100#101#102#97#117#108+
- #116#32#69#70#70#69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117#115+
- #104#111#114#116#32#111#102#102#115#101#116#32#50#54#32#100#101#102#97#117+
- #108#116#32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
- #34#100#101#108#97#121#34#32#116#121#112#101#32#117#115#104#111#114#116#32+
- #111#102#102#115#101#116#32#50#56#32#100#101#102#97#117#108#116#32#49#48#48+
- #48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#98#101+
- #104#97#118#105#111#117#114#34#32#116#121#112#101#32#117#98#121#116#101#32+
- #111#102#102#115#101#116#32#51#48#32#101#110#117#109#32#77#111#110#115#116+
- #101#114#66#101#104#97#118#105#111#117#114#32#100#101#102#97#117#108#116#32+
- #66#72#95#78#79#82#77#65#76#59#10#125#10#10#84#114#105#103#103#101#114#68#97+
- #116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77+
- #32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32+
- #112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120+
- #121#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116+
- #121#112#101#34#32#97#108#105#97#115#32#115#112#97#119#110#73#116#101#109#84+
- #121#112#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#56#32#101#110#117#109#32#73#116#101#109#32#100#101#102#97#117#108+
- #116#32#73#84#69#77#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#32#32#34#103#114#97#118#105#116#121#34#32#116#121#112#101#32+
+ #47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
+ #47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#47#32#118#97#114+
+ #105#111#117#115#32#116#114#105#103#103#101#114#115#10#84#114#105#103#103+
+ #101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#69#88#73#84+
+ #32#123#10#32#32#34#109#97#112#34#32#116#121#112#101#32#99#104#97#114#91#49+
+ #54#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
+ #102#111#114#32#84#82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#32#123#10#32+
+ #32#34#116#97#114#103#101#116#34#32#116#121#112#101#32#112#111#105#110#116+
+ #32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108+
+ #32#111#102#102#115#101#116#32#56#32#100#101#102#97#117#108#116#32#102#97+
+ #108#115#101#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32+
#98#111#111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97#117#108+
- #116#32#116#114#117#101#59#10#32#32#34#100#109#111#110#108#121#34#32#116#121+
- #112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#48#32#100#101+
- #102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#34#99#111#117#110#116+
- #34#32#97#108#105#97#115#32#105#116#101#109#67#111#117#110#116#32#116#121+
- #112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102+
- #97#117#108#116#32#49#59#10#32#32#34#101#102#102#101#99#116#34#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#54#32#101+
- #110#117#109#32#69#102#102#101#99#116#65#99#116#105#111#110#32#100#101#102+
- #97#117#108#116#32#69#70#70#69#67#84#95#78#79#78#69#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#116#121#112#101+
- #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#56#32#100#101+
- #102#97#117#108#116#32#49#59#10#32#32#34#100#101#108#97#121#34#32#116#121+
- #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#48#32+
- #100#101#102#97#117#108#116#32#49#48#48#48#32#119#114#105#116#101#100#101+
- #102#97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97+
- #32#102#111#114#32#84#82#73#71#71#69#82#95#77#85#83#73#67#32#123#10#32#32#34+
- #110#97#109#101#34#32#97#108#105#97#115#32#109#117#115#105#99#78#97#109#101+
- #32#116#121#112#101#32#99#104#97#114#91#54#52#93#32#111#102#102#115#101#116+
- #32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#97+
- #99#116#105#111#110#34#32#97#108#105#97#115#32#109#117#115#105#99#65#99#116+
- #105#111#110#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#54#52#32#101#110#117#109#32#84#114#105#103#103#101#114#77#117#115+
- #105#99#65#99#116#105#111#110#32#119#114#105#116#101#100#101#102#97#117#108+
- #116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114+
- #32#84#82#73#71#71#69#82#95#80#85#83#72#32#123#10#32#32#34#97#110#103#108+
- #101#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101+
- #116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
- #102#111#114#99#101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
- #102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
- #10#32#32#34#114#101#115#101#116#95#118#101#108#111#99#105#116#121#34#32#116+
- #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#51#32#100#101+
+ #116#32#102#97#108#115#101#59#10#32#32#34#100#105#114#101#99#116#105#111#110+
+ #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
+ #49#48#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101#102#97#117+
+ #108#116#32#68#73#82#95#76#69#70#84#59#10#125#10#10#84#114#105#103#103#101+
+ #114#68#97#116#97#32#102#111#114#32#40#84#82#73#71#71#69#82#95#79#80#69#78+
+ #68#79#79#82#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32+
+ #84#82#73#71#71#69#82#95#68#79#79#82#44#32#84#82#73#71#71#69#82#95#68#79#79+
+ #82#53#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#84#82+
+ #73#71#71#69#82#95#84#82#65#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#85+
+ #80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#68#79#87#78#44#32#84#82#73#71+
+ #71#69#82#95#76#73#70#84#41#32#123#10#32#32#34#112#97#110#101#108#105#100#34+
+ #32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#48#32#112+
+ #97#110#101#108#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32+
+ #32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#102#97#108+
+ #115#101#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108+
+ #32#111#102#102#115#101#116#32#53#32#100#101#102#97#117#108#116#32#102#97+
+ #108#115#101#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
+ #111#114#32#40#84#82#73#71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71#71+
+ #69#82#95#79#78#44#32#84#82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71#71+
+ #69#82#95#79#78#79#70#70#41#32#123#10#32#32#34#112#111#115#105#116#105#111+
+ #110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101#116+
+ #32#48#32#97#115#32#116#120#121#32#100#101#102#97#117#108#116#32#40#48#32#48+
+ #41#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#105+
+ #122#101#34#32#116#121#112#101#32#115#105#122#101#32#111#102#102#115#101#116+
+ #32#56#32#97#115#32#116#119#104#32#100#101#102#97#117#108#116#32#40#48#32#48+
+ #41#59#10#32#32#34#119#97#105#116#34#32#116#121#112#101#32#117#115#104#111+
+ #114#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117#108#116+
+ #32#48#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32#112#114+
+ #101#115#115#67#111#117#110#116#32#116#121#112#101#32#117#115#104#111#114+
+ #116#32#111#102#102#115#101#116#32#49#52#32#100#101#102#97#117#108#116#32#48+
+ #59#10#32#32#34#109#111#110#115#116#101#114#105#100#34#32#116#121#112#101#32+
+ #105#110#116#32#111#102#102#115#101#116#32#49#54#32#109#111#110#115#116#101+
+ #114#32#97#115#32#109#111#110#115#116#101#114#105#100#32#100#101#102#97#117+
+ #108#116#32#110#117#108#108#59#10#32#32#34#101#120#116#95#114#97#110#100#111+
+ #109#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32+
+ #50#48#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#47#47+
+ #32#116#104#105#115#32#111#110#101#32#105#115#32#102#111#114#32#109#111#118+
+ #105#110#103#32#112#108#97#116#102#111#114#109#115#10#32#32#34#112#97#110+
+ #101#108#105#100#34#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32+
+ #110#117#108#108#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112+
+ #101#32#98#111#111#108#32#100#101#102#97#117#108#116#32#116#114#117#101#59+
+ #10#32#32#34#115#111#117#110#100#34#32#116#121#112#101#32#115#116#114#105+
+ #110#103#32#100#101#102#97#117#108#116#32#34#34#59#10#125#10#10#101#110#117+
+ #109#32#84#114#105#103#103#101#114#83#99#111#114#101#84#101#97#109#32#123#10+
+ #32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#77#73#78#69+
+ #95#82#69#68#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82+
+ #69#95#84#69#65#77#95#77#73#78#69#95#66#76#85#69#44#32#47#47#32#49#10#32#32+
+ #84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#70#79#82#67#69#95+
+ #82#69#68#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69+
+ #95#84#69#65#77#95#70#79#82#67#69#95#66#76#85#69#44#32#47#47#32#51#10#125#10+
+ #10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71+
+ #69#82#95#83#69#67#82#69#84#32#123#10#125#10#10#84#114#105#103#103#101#114+
+ #68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69+
+ #32#123#10#32#32#34#97#99#116#105#118#97#116#101#95#111#110#99#101#34#32#116+
+ #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#48#32#100#101+
#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
- #102#111#114#32#84#82#73#71#71#69#82#95#83#67#79#82#69#32#123#10#32#32#34#97+
- #99#116#105#111#110#34#32#97#108#105#97#115#32#115#99#111#114#101#65#99#116+
- #105#111#110#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#48#32#101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114+
- #101#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#84#82#73#71#71+
- #69#82#95#83#67#79#82#69#95#65#67#84#73#79#78#95#65#68#68#32#119#114#105#116+
- #101#100#101#102#97#117#108#116#59#10#32#32#34#99#111#117#110#116#34#32#97+
- #108#105#97#115#32#115#99#111#114#101#67#111#117#110#116#32#116#121#112#101+
- #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#32#100#101#102#97+
- #117#108#116#32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
- #32#32#34#116#101#97#109#34#32#97#108#105#97#115#32#115#99#111#114#101#84+
- #101#97#109#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#50#32#101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114+
- #101#84#101#97#109#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
- #32#32#34#99#111#110#115#111#108#101#34#32#97#108#105#97#115#32#115#99#111+
- #114#101#67#111#110#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
- #101#116#32#51#32#100#101#102#97#117#108#116#32#102#97#108#115#101#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#109#101#115#115+
- #97#103#101#34#32#97#108#105#97#115#32#115#99#111#114#101#77#115#103#32#116+
- #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#52#32#100#101+
- #102#97#117#108#116#32#116#114#117#101#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#77#69#83#83#65#71#69#32#123#10#32#32#34+
- #107#105#110#100#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#48#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101+
- #115#115#97#103#101#75#105#110#100#32#100#101#102#97#117#108#116#32#84#82#73+
- #71#71#69#82#95#77#69#83#83#65#71#69#95#75#73#78#68#95#71#65#77#69#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#101#115#116+
- #34#32#97#108#105#97#115#32#109#115#103#68#101#115#116#32#116#121#112#101#32+
- #117#98#121#116#101#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101+
- #115#115#97#103#101#68#101#115#116#32#111#102#102#115#101#116#32#49#59#10#32+
- #32#34#116#101#120#116#34#32#116#121#112#101#32#99#104#97#114#91#49#48#48#93+
- #32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#32#32#34#116#105#109#101#34#32#97#108#105#97#115#32#109#115+
- #103#84#105#109#101#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
- #102#115#101#116#32#49#48#50#32#119#114#105#116#101#100#101#102#97#117#108+
- #116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114+
- #32#84#82#73#71#71#69#82#95#68#65#77#65#71#69#32#123#10#32#32#34#97#109#111+
- #117#110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
- #115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
- #32#32#34#105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115+
- #104#111#114#116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
- #97#32#102#111#114#32#84#82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32+
- #32#34#97#109#111#117#110#116#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#32#32#34#105#110#116#101#114#118#97#108#34#32#116#121#112+
- #101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#32#119#114+
- #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#97+
- #108#105#97#115#32#104#101#97#108#77#97#120#32#116#121#112#101#32#98#111#111+
- #108#32#111#102#102#115#101#116#32#52#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32+
- #98#111#111#108#32#111#102#102#115#101#116#32#53#32#119#114#105#116#101#100+
+ #97#117#108#116#59#10#32#32#34#97#110#105#109#97#116#101#95#111#110#99#101+
+ #34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#32+
+ #100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100+
#101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
- #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#72#79#84#32#123#10#32#32#34+
- #112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110+
- #116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114+
- #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32+
- #97#108#105#97#115#32#115#104#111#116#84#121#112#101#32#116#121#112#101#32+
- #117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101#110#117#109#32+
- #84#114#105#103#103#101#114#83#104#111#116#32#119#114#105#116#101#100#101+
- #102#97#117#108#116#59#10#32#32#34#116#97#114#103#101#116#34#32#97#108#105+
- #97#115#32#115#104#111#116#84#97#114#103#101#116#32#116#121#112#101#32#117+
- #98#121#116#101#32#111#102#102#115#101#116#32#57#32#101#110#117#109#32#84+
- #114#105#103#103#101#114#83#104#111#116#84#97#114#103#101#116#32#119#114#105+
- #116#101#100#101#102#97#117#108#116#59#10#32#32#34#113#117#105#101#116#34#32+
- #116#121#112#101#32#110#101#103#98#111#111#108#32#111#102#102#115#101#116#32+
- #49#48#59#32#47#47#32#110#101#103#98#111#111#108#33#10#32#32#34#97#105#109+
- #34#32#116#121#112#101#32#98#121#116#101#32#111#102#102#115#101#116#32#49#49+
- #32#101#110#117#109#32#84#114#105#103#103#101#114#83#104#111#116#65#105#109+
- #32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65+
- #73#77#95#68#69#70#65#85#76#84#59#10#32#32#34#112#97#110#101#108#105#100#34+
+ #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#79#85#78#68#32#123#10#32#32+
+ #34#115#111#117#110#100#95#110#97#109#101#34#32#116#121#112#101#32#99#104#97+
+ #114#91#54#52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#118#111#108#117#109#101#34#32#116#121+
+ #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#100+
+ #101#102#97#117#108#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108+
+ #116#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32+
+ #34#112#97#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
+ #115#101#116#32#54#53#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#108+
+ #111#99#97#108#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#54#54#32#100#101#102#97#117#108#116#32#116#114#117#101#59#32#47+
+ #47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#108+
+ #97#121#95#99#111#117#110#116#34#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#54#55#32#100#101#102#97#117#108#116#32#49#59#10+
+ #32#32#34#115#111#117#110#100#95#115#119#105#116#99#104#34#32#116#121#112+
+ #101#32#98#111#111#108#32#111#102#102#115#101#116#32#54#56#32#100#101#102#97+
+ #117#108#116#32#102#97#108#115#101#59#32#47#47#63#63#63#32#100#101#102#97+
+ #117#108#116#32#63#63#63#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
+ #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#77#79#78#83#84+
+ #69#82#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112+
+ #101#32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32+
+ #116#120#121#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#116#121#112#101#34#32#97#108#105#97#115#32#115#112#97#119#110#77#111#110+
+ #115#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
+ #115#101#116#32#56#32#101#110#117#109#32#77#111#110#115#116#101#114#32#100+
+ #101#102#97#117#108#116#32#77#79#78#83#84#69#82#95#73#77#80#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#104#101#97#108#116#104#34+
#32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32+
- #112#97#110#101#108#32#100#101#102#97#117#108#116#32#110#117#108#108#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#103#104+
+ #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#105#114+
+ #101#99#116#105#111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
+ #102#102#115#101#116#32#49#54#32#101#110#117#109#32#68#105#114#84#121#112+
+ #101#32#100#101#102#97#117#108#116#32#68#73#82#95#76#69#70#84#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#99#116#105#118#101#34+
+ #32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#55#32+
+ #100#101#102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#99#111#117#110+
+ #116#34#32#97#108#105#97#115#32#109#111#110#115#67#111#117#110#116#32#116+
+ #121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#50#48#32#100#101+
+ #102#97#117#108#116#32#49#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121+
+ #116#101#32#111#102#102#115#101#116#32#50#52#32#101#110#117#109#32#69#102+
+ #102#101#99#116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70+
+ #70#69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108+
+ #116#59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114+
+ #116#32#111#102#102#115#101#116#32#50#54#32#100#101#102#97#117#108#116#32#49+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#101+
+ #108#97#121#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
+ #115#101#116#32#50#56#32#100#101#102#97#117#108#116#32#49#48#48#48#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#98#101#104#97#118+
+ #105#111#117#114#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
+ #115#101#116#32#51#48#32#101#110#117#109#32#77#111#110#115#116#101#114#66+
+ #101#104#97#118#105#111#117#114#32#100#101#102#97#117#108#116#32#66#72#95#78+
+ #79#82#77#65#76#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
+ #102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#32#123#10+
+ #32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111+
+ #105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32+
+ #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112+
+ #101#34#32#97#108#105#97#115#32#115#112#97#119#110#73#116#101#109#84#121#112+
+ #101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
+ #56#32#101#110#117#109#32#73#116#101#109#32#100#101#102#97#117#108#116#32#73+
+ #84#69#77#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#103#114#97#118#105#116#121#34#32#116#121#112#101#32#98#111+
+ #111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32+
+ #116#114#117#101#59#10#32#32#34#100#109#111#110#108#121#34#32#116#121#112+
+ #101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#48#32#100#101#102#97+
+ #117#108#116#32#102#97#108#115#101#59#10#32#32#34#99#111#117#110#116#34#32+
+ #97#108#105#97#115#32#105#116#101#109#67#111#117#110#116#32#116#121#112#101+
+ #32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117+
+ #108#116#32#49#59#10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#54#32#101#110#117+
+ #109#32#69#102#102#101#99#116#65#99#116#105#111#110#32#100#101#102#97#117+
+ #108#116#32#69#70#70#69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117+
+ #115#104#111#114#116#32#111#102#102#115#101#116#32#49#56#32#100#101#102#97+
+ #117#108#116#32#49#59#10#32#32#34#100#101#108#97#121#34#32#116#121#112#101+
+ #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#48#32#100#101+
+ #102#97#117#108#116#32#49#48#48#48#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111+
+ #114#32#84#82#73#71#71#69#82#95#77#85#83#73#67#32#123#10#32#32#34#110#97#109+
+ #101#34#32#97#108#105#97#115#32#109#117#115#105#99#78#97#109#101#32#116#121+
+ #112#101#32#99#104#97#114#91#54#52#93#32#111#102#102#115#101#116#32#48#32+
+ #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#99#116#105+
+ #111#110#34#32#97#108#105#97#115#32#109#117#115#105#99#65#99#116#105#111#110+
+ #32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54+
+ #52#32#101#110#117#109#32#84#114#105#103#103#101#114#77#117#115#105#99#65#99+
+ #116#105#111#110#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125+
+ #10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71+
+ #71#69#82#95#80#85#83#72#32#123#10#32#32#34#97#110#103#108#101#34#32#116#121+
+ #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#48#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#102#111#114#99+
+ #101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
+ #32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#114+
+ #101#115#101#116#95#118#101#108#111#99#105#116#121#34#32#116#121#112#101#32+
+ #98#111#111#108#32#111#102#102#115#101#116#32#51#32#100#101#102#97#117#108+
+ #116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#83#67#79#82#69#32#123#10#32#32#34#97#99#116#105#111+
+ #110#34#32#97#108#105#97#115#32#115#99#111#114#101#65#99#116#105#111#110#32+
+ #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32+
+ #101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114#101#65#99#116+
+ #105#111#110#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#67+
+ #79#82#69#95#65#67#84#73#79#78#95#65#68#68#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97+
+ #115#32#115#99#111#114#101#67#111#117#110#116#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#49#32#100#101#102#97#117#108#116+
+ #32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116+
+ #101#97#109#34#32#97#108#105#97#115#32#115#99#111#114#101#84#101#97#109#32+
+ #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32+
+ #101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114#101#84#101#97+
+ #109#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#99#111+
+ #110#115#111#108#101#34#32#97#108#105#97#115#32#115#99#111#114#101#67#111+
+ #110#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#51+
+ #32#100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#109#101#115#115#97#103#101#34#32+
+ #97#108#105#97#115#32#115#99#111#114#101#77#115#103#32#116#121#112#101#32#98+
+ #111#111#108#32#111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116+
+ #32#116#114#117#101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
+ #73#71#71#69#82#95#77#69#83#83#65#71#69#32#123#10#32#32#34#107#105#110#100+
+ #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
+ #48#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103+
+ #101#75#105#110#100#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95+
+ #77#69#83#83#65#71#69#95#75#73#78#68#95#71#65#77#69#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#100#101#115#116#34#32#97#108#105+
+ #97#115#32#109#115#103#68#101#115#116#32#116#121#112#101#32#117#98#121#116+
+ #101#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103+
+ #101#68#101#115#116#32#111#102#102#115#101#116#32#49#59#10#32#32#34#116#101+
+ #120#116#34#32#116#121#112#101#32#99#104#97#114#91#49#48#48#93#32#111#102+
+ #102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#32#32#34#116#105#109#101#34#32#97#108#105#97#115#32#109#115#103#84#105+
+ #109#101#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#49#48#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
+ #73#71#71#69#82#95#68#65#77#65#71#69#32#123#10#32#32#34#97#109#111#117#110+
#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101+
- #116#32#49#54#59#10#32#32#34#97#110#103#108#101#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#49#56#59#10#32#32#34#119+
- #97#105#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
- #115#101#116#32#50#48#59#10#32#32#34#97#99#99#117#114#97#99#121#34#32#116+
- #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#50+
- #59#10#32#32#34#97#109#109#111#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#50#52#59#10#32#32#34#114#101#108#111#97+
- #100#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101+
- #116#32#50#54#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#32#123#10#32#32#34#99+
- #111#117#110#116#34#32#97#108#105#97#115#32#70#88#67#111#117#110#116#32#116+
- #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101+
- #34#32#97#108#105#97#115#32#70#88#84#121#112#101#32#116#121#112#101#32#117+
- #98#121#116#101#32#111#102#102#115#101#116#32#49#32#101#110#117#109#32#84+
- #114#105#103#103#101#114#69#102#102#101#99#116#32#100#101#102#97#117#108#116+
- #32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#117#98+
- #116#121#112#101#34#32#97#108#105#97#115#32#70#88#83#117#98#84#121#112#101+
- #32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#50+
- #32#101#110#117#109#32#84#114#105#103#103#101#114#69#102#102#101#99#116#84+
- #121#112#101#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#69#70+
- #70#69#67#84#95#83#80#65#82#75#32#119#114#105#116#101#100#101#102#97#117#108+
- #116#59#10#32#32#34#114#101#100#34#32#97#108#105#97#115#32#70#88#82#101#100+
- #32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#51+
- #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#103#114+
- #101#101#110#34#32#97#108#105#97#115#32#70#88#71#114#101#101#110#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#52#32#119#114+
- #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#98#108#117#101#34#32+
- #97#108#105#97#115#32#70#88#66#108#117#101#32#116#121#112#101#32#117#98#121+
- #116#101#32#111#102#102#115#101#116#32#53#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#32#32#34#112#111#115#34#32#97#108#105#97#115#32#70#88+
- #80#111#115#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101+
- #116#32#54#32#101#110#117#109#32#84#114#105#103#103#101#114#69#102#102#101+
- #99#116#80#111#115#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95+
- #69#70#70#69#67#84#95#80#79#83#95#67#69#78#84#69#82#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#119#97#105#116#34#32#116#121#112+
- #101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#56#32#119#114+
- #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#118#101#108#95#120#34+
- #32#116#121#112#101#32#98#121#116#101#32#111#102#102#115#101#116#32#49#48#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#118#101#108+
- #95#121#34#32#116#121#112#101#32#98#121#116#101#32#111#102#102#115#101#116+
- #32#49#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
- #115#112#114#101#97#100#95#108#34#32#116#121#112#101#32#117#98#121#116#101+
- #32#111#102#102#115#101#116#32#49#50#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#32#32#34#115#112#114#101#97#100#95#114#34#32#116#121#112+
- #101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#51#32#119#114+
- #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#112#114#101#97+
- #100#95#117#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115+
- #101#116#32#49#52#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32+
- #32#34#115#112#114#101#97#100#95#100#34#32#116#121#112#101#32#117#98#121#116+
- #101#32#111#102#102#115#101#116#32#49#53#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#125#10
+ #116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
+ #105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115#104#111#114+
+ #116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
+ #111#114#32#84#82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32#32#34#97+
+ #109#111#117#110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111+
+ #102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117+
+ #115#104#111#114#116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#97#108#105#97+
+ #115#32#104#101#97#108#77#97#120#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#52#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111+
+ #108#32#111#102#102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
+ #111#114#32#84#82#73#71#71#69#82#95#83#72#79#84#32#123#10#32#32#34#112#111+
+ #115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111+
+ #102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105+
+ #97#115#32#115#104#111#116#84#121#112#101#32#116#121#112#101#32#117#98#121+
+ #116#101#32#111#102#102#115#101#116#32#56#32#101#110#117#109#32#84#114#105+
+ #103#103#101#114#83#104#111#116#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#116#97#114#103#101#116#34#32#97#108#105#97#115#32+
+ #115#104#111#116#84#97#114#103#101#116#32#116#121#112#101#32#117#98#121#116+
+ #101#32#111#102#102#115#101#116#32#57#32#101#110#117#109#32#84#114#105#103+
+ #103#101#114#83#104#111#116#84#97#114#103#101#116#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#113#117#105#101#116#34#32#116#121#112+
+ #101#32#110#101#103#98#111#111#108#32#111#102#102#115#101#116#32#49#48#59#32+
+ #47#47#32#110#101#103#98#111#111#108#33#10#32#32#34#97#105#109#34#32#116#121+
+ #112#101#32#98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#101#110+
+ #117#109#32#84#114#105#103#103#101#114#83#104#111#116#65#105#109#32#100#101+
+ #102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#68+
+ #69#70#65#85#76#84#59#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121+
+ #112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#112#97#110+
+ #101#108#32#100#101#102#97#117#108#116#32#110#117#108#108#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#103#104#116#34#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#54+
+ #59#10#32#32#34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104#111+
+ #114#116#32#111#102#102#115#101#116#32#49#56#59#10#32#32#34#119#97#105#116+
+ #34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116+
+ #32#50#48#59#10#32#32#34#97#99#99#117#114#97#99#121#34#32#116#121#112#101#32+
+ #117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#50#59#10#32#32#34+
+ #97#109#109#111#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
+ #102#115#101#116#32#50#52#59#10#32#32#34#114#101#108#111#97#100#34#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#54+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#69#70#70#69#67#84#32#123#10#32#32#34#99#111#117#110+
+ #116#34#32#97#108#105#97#115#32#70#88#67#111#117#110#116#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108+
+ #105#97#115#32#70#88#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101+
+ #32#111#102#102#115#101#116#32#49#32#101#110#117#109#32#84#114#105#103#103+
+ #101#114#69#102#102#101#99#116#32#100#101#102#97#117#108#116#32#84#82#73#71+
+ #71#69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#115#117#98#116#121#112#101#34+
+ #32#97#108#105#97#115#32#70#88#83#117#98#84#121#112#101#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#101#110#117#109+
+ #32#84#114#105#103#103#101#114#69#102#102#101#99#116#84#121#112#101#32#100+
+ #101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84#95#83+
+ #80#65#82#75#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#114#101#100#34#32#97#108#105#97#115#32#70#88#82#101#100#32#116#121#112+
+ #101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#51#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#103#114#101#101#110#34#32+
+ #97#108#105#97#115#32#70#88#71#114#101#101#110#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#52#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#98#108#117#101#34#32#97#108#105#97#115#32+
+ #70#88#66#108#117#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#32#32#34#112#111#115#34#32#97#108#105#97#115#32#70#88#80#111#115#32#116+
+ #121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#32#101+
+ #110#117#109#32#84#114#105#103#103#101#114#69#102#102#101#99#116#80#111#115+
+ #32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#69#70#70#69#67#84+
+ #95#80#79#83#95#67#69#78#84#69#82#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#119#97#105#116#34#32#116#121#112#101#32#117#115#104+
+ #111#114#116#32#111#102#102#115#101#116#32#56#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#118#101#108#95#120#34#32#116#121#112#101+
+ #32#98#121#116#101#32#111#102#102#115#101#116#32#49#48#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#118#101#108#95#121#34#32#116+
+ #121#112#101#32#98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#112#114#101+
+ #97#100#95#108#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
+ #115#101#116#32#49#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#32#32#34#115#112#114#101#97#100#95#114#34#32#116#121#112#101#32#117#98+
+ #121#116#101#32#111#102#102#115#101#116#32#49#51#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#115#112#114#101#97#100#95#117#34#32+
+ #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#52+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#112+
+ #114#101#97#100#95#100#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
+ #102#102#115#101#116#32#49#53#32#119#114#105#116#101#100#101#102#97#117#108+
+ #116#59#10#125#10
;
\ No newline at end of file